<?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>167739</bug_id>
          
          <creation_ts>2017-02-02 09:52:16 -0800</creation_ts>
          <short_desc>[Mac] Add classes to manage audio samples</short_desc>
          <delta_ts>2017-02-03 09:12:48 -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>Media</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>167767</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jer.noble</cc>
    
    <cc>thiago.lacerda</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1272495</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-02 09:52:16 -0800</bug_when>
    <thetext>Add classes to manage audio samples</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272550</commentid>
    <comment_count>1</comment_count>
      <attachid>300423</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-02 11:21:24 -0800</bug_when>
    <thetext>Created attachment 300423
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272551</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-02 11:23:08 -0800</bug_when>
    <thetext>Attachment 300423 did not pass style-queue:


ERROR: Source/WebCore/platform/audio/mac/AudioSampleBufferList.h:50:  The parameter name &quot;format&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 6 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>1272557</commentid>
    <comment_count>3</comment_count>
      <attachid>300425</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-02 11:39:12 -0800</bug_when>
    <thetext>Created attachment 300425
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272561</commentid>
    <comment_count>4</comment_count>
      <attachid>300425</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2017-02-02 11:44:57 -0800</bug_when>
    <thetext>Comment on attachment 300425
Updated patch

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

&gt; Source/WebCore/platform/audio/mac/AudioSampleDataSource.cpp:135
&gt; +        kern_return_t kr = mach_timebase_info(&amp;timebaseInfo);
&gt; +        frequency = 1e-9 * static_cast&lt;double&gt;(timebaseInfo.numer) / static_cast&lt;double&gt;(timebaseInfo.denom);

This could use an explanatory comment.

&gt; Source/WebCore/platform/audio/mac/AudioSampleDataSource.cpp:162
&gt; +            m_inputSampleOffset = toMediaTime(CMTimeConvertScale(toCMTime(m_inputSampleOffset), sampleTime.timeScale(), kCMTimeRoundingMethod_Default));

Please add a fixme comment about improving MediaTime to add this kind of rounding parameter functionality.

&gt; Source/WebCore/platform/audio/mac/AudioSampleDataSource.cpp:183
&gt; +

Space.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272567</commentid>
    <comment_count>5</comment_count>
      <attachid>300429</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-02 12:02:13 -0800</bug_when>
    <thetext>Created attachment 300429
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272569</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-02 12:04:26 -0800</bug_when>
    <thetext>Attachment 300429 did not pass style-queue:


ERROR: Source/WebCore/platform/audio/mac/AudioSampleDataSource.cpp:162:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 6 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>1272613</commentid>
    <comment_count>7</comment_count>
      <attachid>300443</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-02 13:28:16 -0800</bug_when>
    <thetext>Created attachment 300443
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272666</commentid>
    <comment_count>8</comment_count>
      <attachid>300443</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-02 15:03:21 -0800</bug_when>
    <thetext>Comment on attachment 300443
Patch for landing.

Clearing flags on attachment: 300443

Committed r211596: &lt;http://trac.webkit.org/changeset/211596&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272667</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-02 15:03:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272727</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-02 16:35:41 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 167767</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272923</commentid>
    <comment_count>11</comment_count>
      <attachid>300535</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-02-03 08:34:55 -0800</bug_when>
    <thetext>Created attachment 300535
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272934</commentid>
    <comment_count>12</comment_count>
      <attachid>300535</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-03 09:12:43 -0800</bug_when>
    <thetext>Comment on attachment 300535
Updated patch.

Clearing flags on attachment: 300535

Committed r211634: &lt;http://trac.webkit.org/changeset/211634&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272935</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-03 09:12:48 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300423</attachid>
            <date>2017-02-02 11:21:24 -0800</date>
            <delta_ts>2017-02-02 11:39:12 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>audio_buffers_patch_2.txt</filename>
            <type>text/plain</type>
            <size>47259</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTU2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE3LTAyLTAyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIEFkZCBjbGFz
c2VzIHRvIG1hbmFnZSBhdWRpbyBzYW1wbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMgY29kZSBpc24ndCB1c2VkIHll
dC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OkF1ZGlvU2FtcGxlQnVmZmVyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6On5BdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpz
ZXRTYW1wbGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6
OmFwcGx5R2Fpbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Om1p
eEZyb20pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJv
bSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlUbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVybyk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVCdWZmZXJMaXN0Ojpjb252ZXJ0SW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0NvbnZlcnRlckNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29uZmlndXJlQnVmZmVyTGlzdEZvclN0cmVh
bSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c3RyZWFt
RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpi
dWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2Ft
cGxlQ2FwYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpz
YW1wbGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnRp
bWVzdGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Omhvc3RU
aW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2V0VGltZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0J1ZmZlckxp
c3RTaXplRm9yU3RyZWFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1w
bGVEYXRhU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURh
dGFTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBs
ZURhdGFTb3VyY2U6On5BdWRpb1NhbXBsZURhdGFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRQYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVEYXRhU291cmNlOjpzZXR1cENvbnZlcnRlcik6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldElucHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0T3V0cHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6aG9zdFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldFZvbHVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnZvbHVtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldE11dGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6bXV0ZWQpOgorCiAyMDE3LTAyLTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2x1bW4gcHJvZ3Jlc3Npb24g
d3JvbmcgYWZ0ZXIgZW5hYmxpbmcgcGFnaW5hdGlvbiBvbiBSVEwgZG9jdW1lbnQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIxMTU1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0MiwxMCBAQAogCQkwNzM3OTRG
RTE5RjU4NjRFMDBFNUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczNzk0RjgxOUY1ODY0RTAwRTVBMDQ1IC8q
IFJUQ05vdGlmaWVyc01vY2suaCAqLzsgfTsKIAkJMDczOTRFQzgxQkFCMkNDRDAwQkU5OUNEIC8q
IE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDczOTRFQzcxQkFCMkNDRDAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1Jl
cXVlc3QuY3BwICovOyB9OwogCQkwNzM5NEVDQTFCQUIyQ0Q3MDBCRTk5Q0QgLyogTWVkaWFEZXZp
Y2VzUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDczOTRFQzkxQkFCMkNENzAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwNzNCODc2NjFF
NDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3M0I4NzYyMUU0Mzg1OUQwMDcxQzBF
QyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwICovOyB9OworCQkwNzNCODc2NzFFNDM4NUFD
MDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNCODc2MzFFNDM4NTlEMDA3MUMwRUMgLyogQXVk
aW9TYW1wbGVCdWZmZXJMaXN0LmggKi87IH07CisJCTA3M0I4NzY4MUU0Mzg1QUMwMDcxQzBFQyAv
KiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NjQxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5jcHAgKi87IH07CisJCTA3M0I4NzY5MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2UuaCAqLzsgfTsKIAkJMDczQkUzNDAxN0QxN0UwMTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNl
ck1lZGlhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3M0JFMzNFMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5jcHAgKi87
IH07CiAJCTA3M0JFMzQxMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQkUzM0Yx
N0QxN0UwMTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDczQkUzNEUxN0QxODBCMjAwMkJE
NDMxIC8qIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCQUIxN0NGMEFENDAwODQ4RTUx
IC8qIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwICovOyB9OwpAQCAtNzIzMyw2
ICs3MjM3LDEwIEBACiAJCTA3M0I4NzU2MUU0MERDRTUwMDcxQzBFQyAvKiBBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQjg3NTcxRTQw
RENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCODc1ODFFNDBEQ0ZEMDA3MUMwRUMgLyog
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3M0I4NzYzMUU0Mzg1OUQw
MDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA3M0I4NzY0MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9TYW1wbGVE
YXRhU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDczQjg3NjUxRTQz
ODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdWRpb1NhbXBsZURhdGFTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDczQkUzM0UxN0QxN0UwMTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNl
ck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTmF2aWdh
dG9yVXNlck1lZGlhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQkUzM0Yx
N0QxN0UwMTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTTmF2aWdhdG9yVXNlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA3NDRFQ0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVB
dWRpb1NvdXJjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ4
MTUsNyArMjQ4MjMsNiBAQAogCQlGRDMxNjA0MDEyQjAyNkEzMDBDMUEzNTkgLyogYXVkaW8gKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTA3M0I4NzU2MUU0
MERDRTUwMDcxQzBFQyAvKiBBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8sCiAJCQkJQ0Q2NjlE
NjUxRDIzMkRGNDAwNEQxODY2IC8qIGNvY29hICovLAogCQkJCUNEMEVFRTBEMTQ3NDNFNDgwMDNF
QUZBMiAvKiBpb3MgKi8sCiAJCQkJRkQzMTYwQjAxMkIwMjcwNzAwQzFBMzU5IC8qIG1hYyAqLywK
QEAgLTI0ODQyLDYgKzI0ODQ5LDcgQEAKIAkJCQlDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUgLyog
QXVkaW9TZXNzaW9uLmggKi8sCiAJCQkJRkQzMTYwNTMxMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlv
U291cmNlUHJvdmlkZXIuaCAqLywKIAkJCQlGRDYyRjUyRDE0NTg5OEQ4MDA5NEIwRUQgLyogQXVk
aW9Tb3VyY2VQcm92aWRlckNsaWVudC5oICovLAorCQkJCTA3M0I4NzU2MUU0MERDRTUwMDcxQzBF
QyAvKiBBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8sCiAJCQkJRkQzMTYwNTQxMkIwMjZGNzAw
QzFBMzU5IC8qIEF1ZGlvVXRpbGl0aWVzLmNwcCAqLywKIAkJCQlGRDMxNjA1NTEyQjAyNkY3MDBD
MUEzNTkgLyogQXVkaW9VdGlsaXRpZXMuaCAqLywKIAkJCQlGRDMxNjA1NjEyQjAyNkY3MDBDMUEz
NTkgLyogQmlxdWFkLmNwcCAqLywKQEAgLTI0OTA4LDYgKzI0OTE2LDEwIEBACiAJCUZEMzE2MEIw
MTJCMDI3MDcwMEMxQTM1OSAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTA3M0I4NzYyMUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3QuY3BwICovLAorCQkJCTA3M0I4NzYzMUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuaCAqLywKKwkJCQkwNzNCODc2NDFFNDM4NTlEMDA3MUMwRUMgLyogQXVk
aW9TYW1wbGVEYXRhU291cmNlLmNwcCAqLywKKwkJCQkwNzNCODc2NTFFNDM4NTlEMDA3MUMwRUMg
LyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmggKi8sCiAJCQkJRkQzMTYwQjUxMkIwMjcyQTAwQzFB
MzU5IC8qIEF1ZGlvQnVzTWFjLm1tICovLAogCQkJCUZEMzE2MEI2MTJCMDI3MkEwMEMxQTM1OSAv
KiBBdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcCAqLywKIAkJCQlGRDMxNjBCNzEyQjAyNzJBMDBDMUEz
NTkgLyogQXVkaW9EZXN0aW5hdGlvbk1hYy5oICovLApAQCAtMjU0NzIsNiArMjU0ODQsNyBAQAog
CQkJCTJEOEZFQkREMTQzRTNFRjcwMDcyNTAyQiAvKiBDU1NDcm9zc2ZhZGVWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdl
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0NDRDQkU0MUQ4ODYxOTkwMDczQTA3NCAvKiBD
U1NDdXN0b21JZGVudFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzNCODc2OTFFNDM4NUFD
MDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Qzc3OUUxNDFCQjIxNUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNEE5Q0M4MTgxNkJCOUFDNjAwRUM2NDVBIC8qIENTU0RlZmF1bHRTdHls
ZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ0NzZCREIxREZDQUMwMzAwNjkwRTIzIC8q
IENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NjUzLDYgKzI2NjY2LDcg
QEAKIAkJCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1D
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzRDOTZERDFBRDQ0ODM1MDAzNjVBNTAg
LyogSlNSZWFkYWJsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkM0Qzk2REYxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMDczQjg3NjcxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M0Qzk2REYxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTI5REY4
NjFCQjVCODBDMDAzMjJBMTYgLyogSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEM5NkREMUFENDQ4MzUwMDM2NUE1MSAvKiBKU1JlYWRh
YmxlU3RyZWFtU291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzM5LDcgKzI4MzUzLDYgQEAK
IAkJCQlCRTkxM0Q4MDE4MUVGOTI0MDBEQ0IwOUUgLyogVHJhY2tQcml2YXRlQmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkZBQzMwRkUxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5nT2JqZWN0
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MDcxMzIxQkQ4MzA4QjAwREJDNEYyIC8qIFRyYW5z
YWN0aW9uT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwN0MwNDZDMjFFNDI1MDIyMDA3
MjAxRTcgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5
MTFDNDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZCNDg0RjREMTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUNFMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zv
cm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjk5MjQsNiArMjk5MzcsNyBAQAogCQkJ
CTUxRjc5OEVGMUJFODgwRTcwMDhBRTQ5MSAvKiBJREJJbmRleEluZm8uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFFMjY5MzYxREQzQkQ5NzAwNkI2QTU4IC8qIElEQkl0ZXJhdGVDdXJzb3JEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzk0MUJCNEM0RTgwMDEyODk4RiAvKiBJREJL
ZXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDczQjg3NjYxRTQzODVBQzAwNzFDMEVDIC8qIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM5NjFCQjRD
NEU4MDAxMjg5OEYgLyogSURCS2V5RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM5
ODFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTg1RkM5QTFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yOTkzMiw2ICsyOTk0Niw3IEBACiAJCQkJNTE2MDcxMkUxQkQ4MzA3ODAwREJDNEYyIC8q
IElEQk9iamVjdFN0b3JlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkNBMzFCQjRD
NEU4MDAxMjg5OEYgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTg1RkNBODFCQjRDNEU4MDAxMjg5OEYgLyogSURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwNzNCODc2ODFFNDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDEyOTk4MUM2OTc2OTAwMDU5RTcxNCAvKiBJREJSZXF1
ZXN0Q29tcGxldGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEE1OEY5MUJBQ0M3
RjIwMEMxOTI4MiAvKiBJREJSZXF1ZXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTQ1
QjEwOTFCQzQ4RTJFMDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMzA0NDcsNyArMzA0NjIsNiBAQAogCQkJCUUxMjg0QkIyMTA0NDlGRkEwMEVB
RUI1MiAvKiBKU1BhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRB
MTVFQjExMkIwM0VFMTAwM0E1ODNBIC8qIEpTUGFubmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNTFBODFERjE3Mjk4RDc3MDBCRkNBNjEgLyogSlNQZXJmb3JtYW5jZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwN0MwNDZDMTFFNDI1MDIyMDA3MjAxRTcgLyogQXVkaW9TYW1wbGVEYXRh
U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNCMzhGRDUxMUNDRjkzODkwMDU5MkEzRiAv
KiBKU1BlcmZvcm1hbmNlRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0IzOEZENTcxQ0Qy
MUUyQTAwNTkyQTNGIC8qIEpTUGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNThDNTlEMDFFMzgyRUFDMDA0Nzg1OUMgLyogSlNQZXJmb3JtYW5jZU1hcmsuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRp
b0NvbnZlcnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBW
ZWN0b3JNYXRoOworCitSZWY8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q6OmNyZWF0ZShjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCwgc2l6
ZV90IG1heGltdW1TYW1wbGVDb3VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBdWRp
b1NhbXBsZUJ1ZmZlckxpc3QoZm9ybWF0LCBtYXhpbXVtU2FtcGxlQ291bnQpKTsKK30KKworQXVk
aW9TYW1wbGVCdWZmZXJMaXN0OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3QoY29uc3QgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQsIHNpemVfdCBtYXhpbXVtU2FtcGxlQ291bnQpCit7Cisg
ICAgbV9pbnRlcm5hbEZvcm1hdCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uPihmb3JtYXQpOworCisgICAgbV9zYW1wbGVDYXBhY2l0eSA9IG1heGltdW1TYW1wbGVD
b3VudDsKKyAgICBtX3NhbXBsZUNvdW50ID0gMDsKKyAgICBtX21heEJ1ZmZlclNpemVQZXJDaGFu
bmVsID0gbWF4aW11bVNhbXBsZUNvdW50ICogZm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSAvIGZvcm1h
dC5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCk7CisKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSA9IGZv
cm1hdC5zYW1wbGVSYXRlKCk7CisgICAgQVNTRVJUKHNhbXBsZVJhdGUgPj0gMCk7CisKKyAgICBz
aXplX3QgYnVmZmVyU2l6ZSA9IGZvcm1hdC5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCkgKiBtX21h
eEJ1ZmZlclNpemVQZXJDaGFubmVsOworICAgIEFTU0VSVChidWZmZXJTaXplIDw9IFNJWkVfTUFY
KTsKKyAgICBpZiAoYnVmZmVyU2l6ZSA+IFNJWkVfTUFYKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2J1ZmZlckxpc3RCYXNlU2l6ZSA9IGF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oZm9y
bWF0KTsKKyAgICBBU1NFUlQobV9idWZmZXJMaXN0QmFzZVNpemUgPD0gU0laRV9NQVgpOworICAg
IGlmIChtX2J1ZmZlckxpc3RCYXNlU2l6ZSA+IFNJWkVfTUFYKQorICAgICAgICByZXR1cm47CisK
KyAgICBzaXplX3QgYWxsb2NTaXplID0gbV9idWZmZXJMaXN0QmFzZVNpemUgKyBidWZmZXJTaXpl
OworICAgIG1fYnVmZmVyTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+KHN0
YXRpY19jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KDo6b3BlcmF0b3IgbmV3IChhbGxvY1NpemUpKSk7
CisKKyAgICByZXNldCgpOworfQorCitBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6On5BdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QoKQoreworICAgIG1faW50ZXJuYWxGb3JtYXQgPSBudWxscHRyOworICAgIG1f
YnVmZmVyTGlzdCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpz
ZXRTYW1wbGVDb3VudChzaXplX3QgY291bnQpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IG1fc2Ft
cGxlQ2FwYWNpdHkpOworICAgIGlmIChjb3VudCA8PSBtX3NhbXBsZUNhcGFjaXR5KQorICAgICAg
ICBtX3NhbXBsZUNvdW50ID0gY291bnQ7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OjphcHBseUdhaW4oQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0LCBmbG9hdCBnYWluLCBBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0KQoreworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAgICAgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJ
bnQxNjogeworICAgICAgICAgICAgaW50MTZfdCogYnVmZmVyID0gc3RhdGljX2Nhc3Q8aW50MTZf
dCo+KGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICAgICAgaW50IGZyYW1l
Q291bnQgPSBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBzaXplb2YoaW50
MTZfdCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7IGkrKykK
KyAgICAgICAgICAgICAgICBidWZmZXJbaV0gKj0gZ2FpbjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MzI6IHsK
KyAgICAgICAgICAgIGludDMyX3QqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGludDMyX3QqPihidWZm
ZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgICAgIGludCBmcmFtZUNvdW50ID0g
YnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGludDMyX3QpOwor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyBpKyspCisgICAgICAg
ICAgICAgICAgYnVmZmVyW2ldICo9IGdhaW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bjo6RmxvYXQzMjogeworICAgICAgICAgICAgZmxvYXQqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGZs
b2F0Kj4oYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3Zz
bXVsKGJ1ZmZlciwgMSwgJmdhaW4sIGJ1ZmZlciwgMSwgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5t
RGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0NjQ6IHsKKyAg
ICAgICAgICAgIGRvdWJsZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4oYnVmZmVyTGlz
dC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICBkb3VibGUgZ2FpbkFzRG91YmxlID0g
Z2FpbjsKKyAgICAgICAgICAgIHZEU1BfdnNtdWxEKGJ1ZmZlciwgMSwgJmdhaW5Bc0RvdWJsZSwg
YnVmZmVyLCAxLCBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBzaXplb2Yo
ZG91YmxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlHYWluKGZsb2F0IGdhaW4pCit7CisgICAgYXBwbHlH
YWluKCptX2J1ZmZlckxpc3QsIGdhaW4sIG1faW50ZXJuYWxGb3JtYXQtPmZvcm1hdCgpKTsKK30K
KworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNvbnN0IEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkKK3sKKyAgICBBU1NFUlQo
c291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgPT0gc3RyZWFtRGVzY3JpcHRpb24oKSk7CisKKyAg
ICBpZiAoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgIT0gc3RyZWFtRGVzY3JpcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgaWYgKGZyYW1lQ291bnQg
PiBzb3VyY2Uuc2FtcGxlQ291bnQoKSkKKyAgICAgICAgZnJhbWVDb3VudCA9IHNvdXJjZS5zYW1w
bGVDb3VudCgpOworCisgICAgaWYgKGZyYW1lQ291bnQgPiBtX3NhbXBsZUNhcGFjaXR5KQorICAg
ICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBtX3NhbXBsZUNvdW50ID0gZnJh
bWVDb3VudDsKKworICAgIEF1ZGlvQnVmZmVyTGlzdCYgc291cmNlQnVmZmVyID0gc291cmNlLmJ1
ZmZlckxpc3QoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5t
TnVtYmVyQnVmZmVyczsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAobV9pbnRlcm5hbEZvcm1hdC0+
Zm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJbnQxNjog
eworICAgICAgICAgICAgaW50MTZfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQxNl90
Kj4obV9idWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICBpbnQxNl90
KiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ld
Lm1EYXRhKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsg
aSsrKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldICs9IHNvdXJjZVtpXTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6SW50MzI6IHsKKyAgICAgICAgICAgIGludDMyX3QqIGRlc3RpbmF0aW9uID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdCo+KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAg
ICAgICAgdkRTUF92YWRkaShkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90
Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVzdGluYXRpb24sIDEsIGZy
YW1lQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDMyOiB7CisgICAgICAgICAgICBmbG9hdCogZGVz
dGluYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0u
bURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVzdGlu
YXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDY0OiB7CisgICAgICAgICAg
ICBkb3VibGUqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4obV9idWZmZXJMaXN0
LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3ZhZGREKGRlc3RpbmF0aW9u
LCAxLCByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5t
RGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Tm9uZToK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShjb25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmIHNvdXJj
ZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgQVNTRVJUKHNvdXJjZS5zdHJlYW1EZXNjcmlw
dGlvbigpID09IHN0cmVhbURlc2NyaXB0aW9uKCkpOworCisgICAgaWYgKHNvdXJjZS5zdHJlYW1E
ZXNjcmlwdGlvbigpICE9IHN0cmVhbURlc2NyaXB0aW9uKCkpCisgICAgICAgIHJldHVybiBrQXVk
aW9fUGFyYW1FcnJvcjsKKworICAgIGlmIChmcmFtZUNvdW50ID4gc291cmNlLnNhbXBsZUNvdW50
KCkpCisgICAgICAgIGZyYW1lQ291bnQgPSBzb3VyY2Uuc2FtcGxlQ291bnQoKTsKKworICAgIGlm
IChmcmFtZUNvdW50ID4gbV9zYW1wbGVDYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19Q
YXJhbUVycm9yOworCisgICAgbV9zYW1wbGVDb3VudCA9IGZyYW1lQ291bnQ7CisKKyAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVyczsgaSsrKSB7
CisgICAgICAgIHVpbnQ4X3QqIHNvdXJjZURhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oc291
cmNlLmJ1ZmZlckxpc3QoKS5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNb
aV0ubURhdGEpOworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZURhdGEsIGZyYW1l
Q291bnQgKiBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBhY2tldCgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5VG8o
QXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBmcmFtZUNvdW50KQoreworICAgIGlmIChm
cmFtZUNvdW50ID4gbV9zYW1wbGVDb3VudCkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVy
cm9yOworICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZlcnMgPiBtX2J1ZmZlckxpc3QtPm1OdW1i
ZXJCdWZmZXJzKQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVyLm1OdW1iZXJCdWZmZXJzOyBpKyspIHsKKyAgICAg
ICAgdWludDhfdCogc291cmNlRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2J1ZmZlckxp
c3QtPm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgdWludDhfdCogZGVzdGluYXRpb24gPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAg
bWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2VEYXRhLCBmcmFtZUNvdW50ICogbV9pbnRlcm5hbEZv
cm1hdC0+Ynl0ZXNQZXJQYWNrZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZXNldCgpCit7CisgICAgbV9zYW1wbGVDb3VudCA9
IDA7CisgICAgbV90aW1lc3RhbXAgPSAwOworICAgIG1faG9zdFRpbWUgPSAtMTsKKworICAgIHVp
bnQ4X3QqIGRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2J1ZmZlckxpc3QuZ2V0
KCkpICsgbV9idWZmZXJMaXN0QmFzZVNpemU7CisgICAgbV9idWZmZXJMaXN0LT5tTnVtYmVyQnVm
ZmVycyA9IG1faW50ZXJuYWxGb3JtYXQtPm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVyczsgKytp
KSB7CisgICAgICAgIGF1dG8mIGJ1ZmZlciA9IG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV07Cisg
ICAgICAgIGJ1ZmZlci5tRGF0YSA9IGRhdGE7CisgICAgICAgIGJ1ZmZlci5tRGF0YUJ5dGVTaXpl
ID0gbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbDsKKyAgICAgICAgYnVmZmVyLm1OdW1iZXJDaGFu
bmVscyA9IG1faW50ZXJuYWxGb3JtYXQtPm51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygpOwor
ICAgICAgICBkYXRhID0gZGF0YSArIG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5uZWw7CisgICAgfQor
fQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVybygpCit7CisgICAgemVyb0FCTCgq
bV9idWZmZXJMaXN0LCBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBhY2tldCgpICogbV9zYW1w
bGVDYXBhY2l0eSk7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKEF1
ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QgYnl0ZUNvdW50KQoreworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBidWZmZXIubU51bWJlckJ1ZmZlcnM7ICsraSkKKyAgICAgICAgbWVt
c2V0KGJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSwgMCwgYnl0ZUNvdW50KTsKK30KKworT1NTdGF0
dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb252ZXJ0SW5wdXQodWludDMyX3QqIGlvTnVtYmVy
RGF0YVBhY2tldHMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIGlmICghaW9OdW1i
ZXJEYXRhUGFja2V0cyB8fCAhaW9EYXRhIHx8ICFtX2NvbnZlcnRlcklucHV0QnVmZmVyKSB7Cisg
ICAgICAgIExPR19FUlJPUigiQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZWNvbmZpZ3VyZUlucHV0
KCVwKSBpbnZhbGlkIGlucHV0IHRvIEF1ZGlvQ29udmVydGVySW5wdXQiLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIGtBdWRpb0NvbnZlcnRlckVycl9VbnNwZWNpZmllZEVycm9yOworICAgIH0KKwor
ICAgIHNpemVfdCBwYWNrZXRDb3VudCA9IG1fY29udmVydGVySW5wdXRCdWZmZXItPm1CdWZmZXJz
WzBdLm1EYXRhQnl0ZVNpemUgLyBtX2NvbnZlcnRlcklucHV0Qnl0ZXNQZXJQYWNrZXQ7CisgICAg
aWYgKCppb051bWJlckRhdGFQYWNrZXRzID4gbV9zYW1wbGVDYXBhY2l0eSkgeworICAgICAgICBM
T0dfRVJST1IoIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29udmVydElucHV0KCVwKSBub3QgZW5v
dWdoIGludGVybmFsIHN0b3JhZ2U6IG5lZWRlZCA9ICV1LCBhdmFpbGFibGUgPSAlbHUiLCB0aGlz
LCAqaW9OdW1iZXJEYXRhUGFja2V0cywgbV9zYW1wbGVDYXBhY2l0eSk7CisgICAgICAgIHJldHVy
biBrQXVkaW9Db252ZXJ0ZXJFcnJfSW52YWxpZElucHV0U2l6ZTsKKyAgICB9CisKKyAgICAqaW9O
dW1iZXJEYXRhUGFja2V0cyA9IHBhY2tldENvdW50OworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBpb0RhdGEtPm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAgICAgICAgaW9EYXRhLT5tQnVm
ZmVyc1tpXS5tRGF0YSA9IG1fY29udmVydGVySW5wdXRCdWZmZXItPm1CdWZmZXJzW2ldLm1EYXRh
OworICAgICAgICBpb0RhdGEtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBtX2NvbnZlcnRl
cklucHV0QnVmZmVyLT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplOworICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmF1ZGlvQ29udmVy
dGVyQ2FsbGJhY2soQXVkaW9Db252ZXJ0ZXJSZWYsIHVpbnQzMl90KiBpb051bWJlckRhdGFQYWNr
ZXRzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSwgQXVkaW9TdHJlYW1QYWNrZXREZXNjcmlwdGlv
bioqLCB2b2lkKiBpblJlZkNvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9TYW1w
bGVCdWZmZXJMaXN0Kj4oaW5SZWZDb24pLT5jb252ZXJ0SW5wdXQoaW9OdW1iZXJEYXRhUGFja2V0
cywgaW9EYXRhKTsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJv
bShBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZSwgQXVkaW9Db252ZXJ0ZXJSZWYgY29udmVydGVyKQor
eworICAgIHJlc2V0KCk7CisKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gaW5wdXRG
b3JtYXQ7CisgICAgdWludDMyX3QgcHJvcGVydHlEYXRhU2l6ZSA9IHNpemVvZihpbnB1dEZvcm1h
dCk7CisgICAgQXVkaW9Db252ZXJ0ZXJHZXRQcm9wZXJ0eShjb252ZXJ0ZXIsIGtBdWRpb0NvbnZl
cnRlckN1cnJlbnRJbnB1dFN0cmVhbURlc2NyaXB0aW9uLCAmcHJvcGVydHlEYXRhU2l6ZSwgJmlu
cHV0Rm9ybWF0KTsKKyAgICBtX2NvbnZlcnRlcklucHV0Qnl0ZXNQZXJQYWNrZXQgPSBpbnB1dEZv
cm1hdC5tQnl0ZXNQZXJQYWNrZXQ7CisgICAgbV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlciA9ICZzb3Vy
Y2U7CisKKyAgICBhdXRvKiBvdXRwdXREYXRhID0gbV9idWZmZXJMaXN0LmdldCgpOworCisjaWYg
IUxPR19ESVNBQkxFRAorICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBvdXRwdXRGb3Jt
YXQ7CisgICAgcHJvcGVydHlEYXRhU2l6ZSA9IHNpemVvZihvdXRwdXRGb3JtYXQpOworICAgIEF1
ZGlvQ29udmVydGVyR2V0UHJvcGVydHkoY29udmVydGVyLCBrQXVkaW9Db252ZXJ0ZXJDdXJyZW50
T3V0cHV0U3RyZWFtRGVzY3JpcHRpb24sICZwcm9wZXJ0eURhdGFTaXplLCAmb3V0cHV0Rm9ybWF0
KTsKKworICAgIEFTU0VSVChvdXRwdXRGb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUgPT0gb3V0cHV0
RGF0YS0+bU51bWJlckJ1ZmZlcnMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBvdXRw
dXREYXRhLT5tTnVtYmVyQnVmZmVyczsgKytpKSB7CisgICAgICAgIEFTU0VSVChvdXRwdXREYXRh
LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgIEFTU0VSVChvdXRwdXREYXRhLT5tQnVmZmVy
c1tpXS5tRGF0YUJ5dGVTaXplKTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQzMl90IHNhbXBs
ZXNDb252ZXJ0ZWQgPSBtX3NhbXBsZUNhcGFjaXR5OworICAgIE9TU3RhdHVzIGVyciA9IEF1ZGlv
Q29udmVydGVyRmlsbENvbXBsZXhCdWZmZXIoY29udmVydGVyLCBhdWRpb0NvbnZlcnRlckNhbGxi
YWNrLCB0aGlzLCAmc2FtcGxlc0NvbnZlcnRlZCwgb3V0cHV0RGF0YSwgbnVsbHB0cik7CisgICAg
aWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29w
eUZyb20oJXApIEF1ZGlvQ29udmVydGVyRmlsbENvbXBsZXhCdWZmZXIgcmV0dXJuZWQgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIG1fc2FtcGxlQ291
bnQgPSBzdGQ6Om1pbihtX3NhbXBsZUNhcGFjaXR5LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBs
ZXNDb252ZXJ0ZWQpKTsKKyAgICAgICAgemVybygpOworICAgICAgICByZXR1cm4gZXJyOworICAg
IH0KKworICAgIG1fc2FtcGxlQ291bnQgPSBzYW1wbGVzQ29udmVydGVkOworICAgIHJldHVybiAw
OworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdCYgc291cmNlLCBBdWRpb0NvbnZlcnRlclJlZiBjb252ZXJ0ZXIpCit7Cisg
ICAgcmV0dXJuIGNvcHlGcm9tKHNvdXJjZS5idWZmZXJMaXN0KCksIGNvbnZlcnRlcik7Cit9CisK
K09TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29weUZyb20oQ0FSaW5nQnVmZmVyJiBy
aW5nQnVmZmVyLCBzaXplX3Qgc2FtcGxlQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUsIENBUmlu
Z0J1ZmZlcjo6RmV0Y2hNb2RlIG1vZGUpCit7CisgICAgcmVzZXQoKTsKKyAgICBpZiAocmluZ0J1
ZmZlci5mZXRjaCgmYnVmZmVyTGlzdCgpLCBzYW1wbGVDb3VudCwgc3RhcnRGcmFtZSwgbW9kZSkg
IT0gQ0FSaW5nQnVmZmVyOjpPaykKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOwor
CisgICAgbV9zYW1wbGVDb3VudCA9IHNhbXBsZUNvdW50OworICAgIHJldHVybiAwOworfQorCit2
b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29uZmlndXJlQnVmZmVyTGlzdEZvclN0cmVhbShB
dWRpb0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QsIGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
biYgZm9ybWF0LCB1aW50OF90KiBidWZmZXJEYXRhLCBzaXplX3Qgc2FtcGxlQ291bnQpCit7Cisg
ICAgc2l6ZV90IGJ1ZmZlckNvdW50ID0gZm9ybWF0Lm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKTsK
KyAgICBzaXplX3QgY2hhbm5lbENvdW50ID0gZm9ybWF0Lm51bWJlck9mSW50ZXJsZWF2ZWRDaGFu
bmVscygpOworICAgIHNpemVfdCBieXRlc1BlckNoYW5uZWwgPSBzYW1wbGVDb3VudCAqIGZvcm1h
dC5ieXRlc1BlckZyYW1lKCk7CisKKyAgICBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzID0gYnVm
ZmVyQ291bnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckNvdW50OyArK2kp
IHsKKyAgICAgICAgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tTnVtYmVyQ2hhbm5lbHMgPSBjaGFu
bmVsQ291bnQ7CisgICAgICAgIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSA9
IGJ5dGVzUGVyQ2hhbm5lbDsKKyAgICAgICAgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSA9
IGJ1ZmZlckRhdGE7CisgICAgICAgIGlmIChidWZmZXJEYXRhKQorICAgICAgICAgICAgYnVmZmVy
RGF0YSA9IGJ1ZmZlckRhdGEgKyBieXRlc1BlckNoYW5uZWw7CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJD
QVJpbmdCdWZmZXIuaCIKKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNp
bmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24gQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVl
QXVkaW9Db252ZXJ0ZXIqIEF1ZGlvQ29udmVydGVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXVkaW9TYW1wbGVC
dWZmZXJMaXN0PiBjcmVhdGUoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90
KTsKKworICAgIH5BdWRpb1NhbXBsZUJ1ZmZlckxpc3QoKTsKKworICAgIHN0YXRpYyB2b2lkIGNv
bmZpZ3VyZUJ1ZmZlckxpc3RGb3JTdHJlYW0oQXVkaW9CdWZmZXJMaXN0JiwgY29uc3QgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uJiwgdWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIGlubGlu
ZSBzaXplX3QgYXVkaW9CdWZmZXJMaXN0U2l6ZUZvclN0cmVhbShjb25zdCBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5R2FpbihBdWRpb0J1ZmZlckxp
c3QmLCBmbG9hdCwgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6UENNRm9ybWF0IGZvcm1hdCk7Cisg
ICAgdm9pZCBhcHBseUdhaW4oZmxvYXQpOworCisgICAgT1NTdGF0dXMgY29weUZyb20oY29uc3Qg
QXVkaW9TYW1wbGVCdWZmZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9NQVgpOworICAgIE9T
U3RhdHVzIGNvcHlGcm9tKEF1ZGlvQnVmZmVyTGlzdCYsIEF1ZGlvQ29udmVydGVyUmVmKTsKKyAg
ICBPU1N0YXR1cyBjb3B5RnJvbShBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmLCBBdWRpb0NvbnZlcnRl
clJlZik7CisgICAgT1NTdGF0dXMgY29weUZyb20oQ0FSaW5nQnVmZmVyJiwgc2l6ZV90IGZyYW1l
Q291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUsIENBUmluZ0J1ZmZlcjo6RmV0Y2hNb2RlKTsKKwor
ICAgIE9TU3RhdHVzIG1peEZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Jiwgc2l6ZV90
IGNvdW50ID0gU0laRV9NQVgpOworCisgICAgT1NTdGF0dXMgY29weVRvKEF1ZGlvQnVmZmVyTGlz
dCYsIHNpemVfdCBjb3VudCA9IFNJWkVfTUFYKTsKKworICAgIGNvbnN0IEF1ZGlvU3RyZWFtQmFz
aWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ludGVy
bmFsRm9ybWF0LT5zdHJlYW1EZXNjcmlwdGlvbigpOyB9CisgICAgQXVkaW9CdWZmZXJMaXN0JiBi
dWZmZXJMaXN0KCkgY29uc3QgeyByZXR1cm4gKm1fYnVmZmVyTGlzdC5nZXQoKTsgfQorCisgICAg
dWludDMyX3Qgc2FtcGxlQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZUNhcGFjaXR5
OyB9CisgICAgdWludDMyX3Qgc2FtcGxlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZUNv
dW50OyB9CisgICAgdm9pZCBzZXRTYW1wbGVDb3VudChzaXplX3QpOworCisgICAgdWludDMyX3Qg
dGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KKyAgICBkb3VibGUgaG9z
dFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2hvc3RUaW1lOyB9CisgICAgdm9pZCBzZXRUaW1lcyh1
aW50NjRfdCB0aW1lLCBkb3VibGUgaG9zdFRpbWUpIHsgbV90aW1lc3RhbXAgPSB0aW1lOyBtX2hv
c3RUaW1lID0gaG9zdFRpbWU7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHN0YXRpYyB2
b2lkIHplcm9BQkwoQXVkaW9CdWZmZXJMaXN0Jiwgc2l6ZV90KTsKKyAgICB2b2lkIHplcm8oKTsK
KworcHJvdGVjdGVkOgorICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdChjb25zdCBDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpOworCisgICAgc3RhdGljIE9TU3RhdHVzIGF1ZGlvQ29u
dmVydGVyQ2FsbGJhY2soQXVkaW9Db252ZXJ0ZXJSZWYsIFVJbnQzMiosIEF1ZGlvQnVmZmVyTGlz
dCosIEF1ZGlvU3RyZWFtUGFja2V0RGVzY3JpcHRpb24qKiwgdm9pZCopOworICAgIE9TU3RhdHVz
IGNvbnZlcnRJbnB1dChVSW50MzIqLCBBdWRpb0J1ZmZlckxpc3QqKTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1faW50ZXJuYWxGb3JtYXQ7CisKKyAg
ICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QqIG1fY29udmVydGVySW5wdXRCdWZmZXIyIHsgbnVsbHB0
ciB9OworICAgIEF1ZGlvQnVmZmVyTGlzdCogbV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlciB7IG51bGxw
dHIgfTsKKyAgICB1aW50MzJfdCBtX2NvbnZlcnRlcklucHV0Qnl0ZXNQZXJQYWNrZXQgeyAwIH07
CisKKyAgICB1aW50NjRfdCBtX3RpbWVzdGFtcCB7IDAgfTsKKyAgICBkb3VibGUgbV9ob3N0VGlt
ZSB7IC0xIH07CisgICAgc2l6ZV90IG1fc2FtcGxlQ291bnQgeyAwIH07CisgICAgc2l6ZV90IG1f
c2FtcGxlQ2FwYWNpdHkgeyAwIH07CisgICAgc2l6ZV90IG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5u
ZWwgeyAwIH07CisgICAgc2l6ZV90IG1fYnVmZmVyTGlzdEJhc2VTaXplIHsgMCB9OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+IG1fYnVmZmVyTGlzdDsKK307CisKK2lubGlu
ZSBzaXplX3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0J1ZmZlckxpc3RTaXplRm9yU3Ry
ZWFtKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAg
cmV0dXJuIG9mZnNldG9mKEF1ZGlvQnVmZmVyTGlzdCwgbUJ1ZmZlcnMpICsgKHNpemVvZihBdWRp
b0J1ZmZlcikgKiBzdGQ6Om1heDx1aW50MzJfdD4oMSwgZGVzY3JpcHRpb24ubnVtYmVyT2ZDaGFu
bmVsU3RyZWFtcygpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVE
YXRhU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKKworI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCisKKyNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRl
ICJDQVJpbmdCdWZmZXIuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFU
aW1lQVZGb3VuZGF0aW9uLmgiCisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVydGVy
Lmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4K
KyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDx3dGYvQ3Vy
cmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworI2luY2x1
ZGUgIkNvcmVNZWRpYVNvZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzsKKworUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gQXVkaW9TYW1wbGVE
YXRhU291cmNlOjpjcmVhdGUoc2l6ZV90IG1heGltdW1TYW1wbGVDb3VudCkKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBBdWRpb1NhbXBsZURhdGFTb3VyY2UobWF4aW11bVNhbXBsZUNvdW50
KSk7Cit9CisKK0F1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlKHNp
emVfdCBtYXhpbXVtU2FtcGxlQ291bnQpCisgICAgOiBtX2lucHV0U2FtcGxlT2Zmc2V0KE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAsIG1fbWF4aW11bVNhbXBsZUNvdW50KG1heGltdW1T
YW1wbGVDb3VudCkKK3sKK30KKworQXVkaW9TYW1wbGVEYXRhU291cmNlOjp+QXVkaW9TYW1wbGVE
YXRhU291cmNlKCkKK3sKKyAgICBtX2lucHV0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIG1f
b3V0cHV0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIG1fcmluZ0J1ZmZlciA9IG51bGxwdHI7
CisgICAgaWYgKG1fY29udmVydGVyKSB7CisgICAgICAgIEF1ZGlvQ29udmVydGVyRGlzcG9zZSht
X2NvbnZlcnRlcik7CisgICAgICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisK
K3ZvaWQgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRQYXVzZWQoYm9vbCBwYXVzZWQpCit7Cisg
ICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9sb2NrKTsKKworICAgIGlmIChwYXVzZWQg
PT0gbV9wYXVzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNpdGlvbmluZ0Zyb21Q
YXVzZWQgPSBtX3BhdXNlZDsKKyAgICBtX3BhdXNlZCA9IHBhdXNlZDsKK30KKworT1NTdGF0dXMg
QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXR1cENvbnZlcnRlcigpCit7CisgICAgQVNTRVJUKG1f
aW5wdXREZXNjcmlwdGlvbiAmJiBtX291dHB1dERlc2NyaXB0aW9uKTsKKworICAgIGlmIChtX2Nv
bnZlcnRlcikgeworICAgICAgICBBdWRpb0NvbnZlcnRlckRpc3Bvc2UobV9jb252ZXJ0ZXIpOwor
ICAgICAgICBtX2NvbnZlcnRlciA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCptX2lucHV0
RGVzY3JpcHRpb24gPT0gKm1fb3V0cHV0RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiAwOwor
CisgICAgT1NTdGF0dXMgZXJyID0gQXVkaW9Db252ZXJ0ZXJOZXcoJm1faW5wdXREZXNjcmlwdGlv
bi0+c3RyZWFtRGVzY3JpcHRpb24oKSwgJm1fb3V0cHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2Ny
aXB0aW9uKCksICZtX2NvbnZlcnRlcik7CisgICAgaWYgKGVycikKKyAgICAgICAgTE9HX0VSUk9S
KCJBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldHVwQ29udmVydGVyKCVwKSAtIEF1ZGlvQ29udmVy
dGVyTmV3IHJldHVybmVkIGVycm9yICVkICglLjRzKSIsIHRoaXMsIGVyciwgKGNoYXIqKSZlcnIp
OworCisgICAgcmV0dXJuIGVycjsKKworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U6OnNldElucHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZm9ybWF0
KQoreworICAgIEFTU0VSVChmb3JtYXQuc2FtcGxlUmF0ZSgpID49IDApOworCisgICAgbV9pbnB1
dERlc2NyaXB0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+
KGZvcm1hdCk7CisgICAgaWYgKG1fb3V0cHV0RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiBz
ZXR1cENvbnZlcnRlcigpOworCisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZTo6c2V0T3V0cHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiYgZm9ybWF0KQoreworICAgIEFTU0VSVChtX2lucHV0RGVzY3JpcHRpb24pOworICAgIEFT
U0VSVChmb3JtYXQuc2FtcGxlUmF0ZSgpID49IDApOworCisgICAgbV9vdXRwdXREZXNjcmlwdGlv
biA9IHN0ZDo6bWFrZV91bmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihmb3JtYXQpOwor
ICAgIGlmICghbV9yaW5nQnVmZmVyKQorICAgICAgICBtX3JpbmdCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENBUmluZ0J1ZmZlcj4oKTsKKworICAgIG1fcmluZ0J1ZmZlci0+YWxsb2NhdGUoZm9y
bWF0LCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbWF4aW11bVNhbXBsZUNvdW50KSk7CisgICAgbV9z
Y3JhdGNoQnVmZmVyID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUobV9vdXRwdXREZXNj
cmlwdGlvbi0+c3RyZWFtRGVzY3JpcHRpb24oKSwgbV9tYXhpbXVtU2FtcGxlQ291bnQpOworCisg
ICAgcmV0dXJuIHNldHVwQ29udmVydGVyKCk7Cit9CisKK01lZGlhVGltZSBBdWRpb1NhbXBsZURh
dGFTb3VyY2U6Omhvc3RUaW1lKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgZG91YmxlIGZyZXF1ZW5j
eTsKKyAgICBzdGF0aWMgbWFjaF90aW1lYmFzZV9pbmZvX2RhdGFfdCB0aW1lYmFzZUluZm87Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVUaW1lck9uY2VGbGFnOworICAgIHN0
ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVUaW1lck9uY2VGbGFnLCBbXSB7CisgICAgICAgIGtlcm5f
cmV0dXJuX3Qga3IgPSBtYWNoX3RpbWViYXNlX2luZm8oJnRpbWViYXNlSW5mbyk7CisgICAgICAg
IGZyZXF1ZW5jeSA9IDFlLTkgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHRpbWViYXNlSW5mby5udW1l
cikgLyBzdGF0aWNfY2FzdDxkb3VibGU+KHRpbWViYXNlSW5mby5kZW5vbSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoa3IsIGtyID09IEtFUk5fU1VDQ0VTUyk7CisgICAgICAgIEFTU0VSVCh0aW1l
YmFzZUluZm8uZGVub20pOworICAgIH0pOworCisgICAgcmV0dXJuIE1lZGlhVGltZTo6Y3JlYXRl
V2l0aERvdWJsZShtYWNoX2Fic29sdXRlX3RpbWUoKSAqIGZyZXF1ZW5jeSk7Cit9CisKK3ZvaWQg
QXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxlc0ludGVybmFsKEF1ZGlvQnVmZmVyTGlz
dCYgYnVmZmVyTGlzdCwgY29uc3QgTWVkaWFUaW1lJiBwcmVzZW50YXRpb25UaW1lLCBzaXplX3Qg
c2FtcGxlQ291bnQpCit7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CisKKyAgICBBdWRp
b0J1ZmZlckxpc3QqIHNhbXBsZUJ1ZmZlckxpc3Q7CisgICAgaWYgKG1fY29udmVydGVyKSB7Cisg
ICAgICAgIG1fc2NyYXRjaEJ1ZmZlci0+cmVzZXQoKTsKKyAgICAgICAgT1NTdGF0dXMgZXJyID0g
bV9zY3JhdGNoQnVmZmVyLT5jb3B5RnJvbShidWZmZXJMaXN0LCBtX2NvbnZlcnRlcik7CisgICAg
ICAgIGlmIChlcnIpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2FtcGxlQnVmZmVy
TGlzdCA9ICZtX3NjcmF0Y2hCdWZmZXItPmJ1ZmZlckxpc3QoKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgc2FtcGxlQnVmZmVyTGlzdCA9ICZidWZmZXJMaXN0OworCisgICAgTWVkaWFUaW1lIHNhbXBs
ZVRpbWUgPSBwcmVzZW50YXRpb25UaW1lOworICAgIGlmIChtX2lucHV0U2FtcGxlT2Zmc2V0ID09
IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkgeworICAgICAgICBtX2lucHV0U2FtcGxlT2Zmc2V0
ID0gTWVkaWFUaW1lKDEgLSBzYW1wbGVUaW1lLnRpbWVWYWx1ZSgpLCBzYW1wbGVUaW1lLnRpbWVT
Y2FsZSgpKTsKKyAgICAgICAgaWYgKG1faW5wdXRTYW1wbGVPZmZzZXQudGltZVNjYWxlKCkgIT0g
c2FtcGxlVGltZS50aW1lU2NhbGUoKSkKKyAgICAgICAgICAgIG1faW5wdXRTYW1wbGVPZmZzZXQg
PSB0b01lZGlhVGltZShDTVRpbWVDb252ZXJ0U2NhbGUodG9DTVRpbWUobV9pbnB1dFNhbXBsZU9m
ZnNldCksIHNhbXBsZVRpbWUudGltZVNjYWxlKCksIGtDTVRpbWVSb3VuZGluZ01ldGhvZF9EZWZh
dWx0KSk7CisgICAgICAgIExPRyhNZWRpYUNhcHR1cmVTYW1wbGVzLCAiQEAgcHVzaFNhbXBsZXM6
IGlucHV0IHNhbXBsZSBvZmZzZXQgaXMgJWxsZCwgbV9tYXhpbXVtU2FtcGxlQ291bnQgPSAlenUi
LCBtX2lucHV0U2FtcGxlT2Zmc2V0LnRpbWVWYWx1ZSgpLCBtX21heGltdW1TYW1wbGVDb3VudCk7
CisgICAgfQorICAgIHNhbXBsZVRpbWUgKz0gbV9pbnB1dFNhbXBsZU9mZnNldDsKKworI2lmICFM
T0dfRElTQUJMRUQKKyAgICB1aW50NjRfdCBzdGFydEZyYW1lMSA9IDA7CisgICAgdWludDY0X3Qg
ZW5kRnJhbWUxID0gMDsKKyAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhz
dGFydEZyYW1lMSwgZW5kRnJhbWUxKTsKKyNlbmRpZgorCisgICAgbV9yaW5nQnVmZmVyLT5zdG9y
ZShzYW1wbGVCdWZmZXJMaXN0LCBzYW1wbGVDb3VudCwgc2FtcGxlVGltZS50aW1lVmFsdWUoKSk7
CisgICAgbV90aW1lU3RhbXAgPSBzYW1wbGVUaW1lLnRpbWVWYWx1ZSgpOworCisgICAgTE9HKE1l
ZGlhQ2FwdHVyZVNhbXBsZXMsICJAQCBwdXNoU2FtcGxlczogYWRkZWQgJWxkIHNhbXBsZXMgZm9y
IHRpbWUgPSAlcyAod2FzICVzKSwgbWFjaCB0aW1lID0gJWxsZCIsIHNhbXBsZUNvdW50LCB0b1N0
cmluZyhzYW1wbGVUaW1lKS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhwcmVzZW50YXRpb25UaW1l
KS51dGY4KCkuZGF0YSgpLCBtYWNoX2Fic29sdXRlX3RpbWUoKSk7CisKKyNpZiAhTE9HX0RJU0FC
TEVECisgICAgdWludDY0X3Qgc3RhcnRGcmFtZTIgPSAwOworICAgIHVpbnQ2NF90IGVuZEZyYW1l
MiA9IDA7CisgICAgbV9yaW5nQnVmZmVyLT5nZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRGcmFt
ZTIsIGVuZEZyYW1lMik7CisgICAgTE9HKE1lZGlhQ2FwdHVyZVNhbXBsZXMsICJAQCBwdXNoU2Ft
cGxlczogYnVmZmVyZWQgcmFuZ2Ugd2FzIFslbGxkIC4uICVsbGRdLCBpcyBbJWxsZCAuLiAlbGxk
XSIsIHN0YXJ0RnJhbWUxLCBlbmRGcmFtZTEsIHN0YXJ0RnJhbWUyLCBlbmRGcmFtZTIpOworCisj
ZW5kaWYKK30KKwordm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzKGNvbnN0
IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc2FtcGxlRGVzY3JpcHRpb24sIENNU2FtcGxl
QnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcikKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX2xvY2spOworCisgICAgQVNTRVJUKCptX2lucHV0RGVzY3JpcHRpb24gPT0gc2FtcGxlRGVz
Y3JpcHRpb24pOworICAgIEFTU0VSVChtX3JpbmdCdWZmZXIpOworCisgICAgc2l6ZV90IGJ1ZmZl
clNpemUgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJl
YW0oKm1faW5wdXREZXNjcmlwdGlvbi5nZXQoKSk7CisgICAgdWludDhfdCBidWZmZXJEYXRhW2J1
ZmZlclNpemVdOworICAgIEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8QXVkaW9CdWZmZXJMaXN0Kj4oYnVmZmVyRGF0YSk7CisgICAgYnVmZmVyTGlzdC0+bU51
bWJlckJ1ZmZlcnMgPSBtX2lucHV0RGVzY3JpcHRpb24tPm51bWJlck9mSW50ZXJsZWF2ZWRDaGFu
bmVscygpOworCisgICAgQ01CbG9ja0J1ZmZlclJlZiBidWZmZXIgPSBudWxscHRyOworICAgIE9T
U3RhdHVzIGVyciA9IENNU2FtcGxlQnVmZmVyR2V0QXVkaW9CdWZmZXJMaXN0V2l0aFJldGFpbmVk
QmxvY2tCdWZmZXIoc2FtcGxlQnVmZmVyLCBudWxscHRyLCBidWZmZXJMaXN0LCBidWZmZXJTaXpl
LCBrQ0ZBbGxvY2F0b3JTeXN0ZW1EZWZhdWx0LCBrQ0ZBbGxvY2F0b3JTeXN0ZW1EZWZhdWx0LCBr
Q01TYW1wbGVCdWZmZXJGbGFnX0F1ZGlvQnVmZmVyTGlzdF9Bc3N1cmUxNkJ5dGVBbGlnbm1lbnQs
ICZidWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdWRpb1NhbXBs
ZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzKCVwKSAtIENNU2FtcGxlQnVmZmVyR2V0QXVkaW9CdWZm
ZXJMaXN0V2l0aFJldGFpbmVkQmxvY2tCdWZmZXIgcmV0dXJuZWQgZXJyb3IgJWQgKCUuNHMpIiwg
dGhpcywgZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBw
dXNoU2FtcGxlc0ludGVybmFsKCpidWZmZXJMaXN0LCB0b01lZGlhVGltZShDTVNhbXBsZUJ1ZmZl
ckdldFByZXNlbnRhdGlvblRpbWVTdGFtcChzYW1wbGVCdWZmZXIpKSwgQ01TYW1wbGVCdWZmZXJH
ZXROdW1TYW1wbGVzKHNhbXBsZUJ1ZmZlcikpOworfQorCit2b2lkIEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZTo6cHVzaFNhbXBsZXMoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzYW1w
bGVEZXNjcmlwdGlvbiwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCB2b2lkKiBhdWRpb0Rh
dGEsIHNpemVfdCBzYW1wbGVDb3VudCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxv
Y2sobV9sb2NrLCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBBU1NFUlQoKm1faW5wdXREZXNjcmlw
dGlvbiA9PSBzYW1wbGVEZXNjcmlwdGlvbik7CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oc2FtcGxlRGVzY3JpcHRpb24pOworICAgIHNpemVfdCBidWZmZXJTaXpl
ID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0J1ZmZlckxpc3RTaXplRm9yU3RyZWFtKGRl
c2NyaXB0aW9uKTsKKyAgICB1aW50OF90IGJ1ZmZlckRhdGFbYnVmZmVyU2l6ZV07CisgICAgQXVk
aW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0J1ZmZlckxp
c3QqPihidWZmZXJEYXRhKTsKKworICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29uZmlndXJl
QnVmZmVyTGlzdEZvclN0cmVhbSgqYnVmZmVyTGlzdCwgZGVzY3JpcHRpb24sIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGF1ZGlvRGF0YSksIHNhbXBsZUNvdW50KTsKKyAgICBwdXNoU2FtcGxl
c0ludGVybmFsKCpidWZmZXJMaXN0LCBzYW1wbGVUaW1lLCBzYW1wbGVDb3VudCk7Cit9CisKK2Jv
b2wgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKEF1ZGlvQnVmZmVy
TGlzdCYgYnVmZmVyLCBzaXplX3QmIHNhbXBsZUNvdW50LCB1aW50NjRfdCB0aW1lU3RhbXAsIGRv
dWJsZSAvKmhvc3RUaW1lKi8sIFB1bGxNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1fbG9jay5p
c0hlbGQoKSk7CisKKyAgICBBU1NFUlQoYnVmZmVyLm1OdW1iZXJCdWZmZXJzID09IG1fcmluZ0J1
ZmZlci0+Y2hhbm5lbENvdW50KCkpOworICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZlcnMgIT0g
bV9yaW5nQnVmZmVyLT5jaGFubmVsQ291bnQoKSkgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgIHNhbXBsZUNvdW50
ID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9yaW5nQnVm
ZmVyIHx8IG1fbXV0ZWQgfHwgbV9pbnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6OmludmFs
aWRUaW1lKCkpIHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZl
ciwgc2FtcGxlQ291bnQpOworICAgICAgICBzYW1wbGVDb3VudCA9IDA7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICB1aW50NjRfdCBzdGFydEZyYW1lID0gMDsKKyAgICB1aW50
NjRfdCBlbmRGcmFtZSA9IDA7CisgICAgbV9yaW5nQnVmZmVyLT5nZXRDdXJyZW50RnJhbWVCb3Vu
ZHMoc3RhcnRGcmFtZSwgZW5kRnJhbWUpOworCisgICAgaWYgKG1fdHJhbnNpdGlvbmluZ0Zyb21Q
YXVzZWQpIHsKKyAgICAgICAgdWludDY0X3QgYnVmZmVyZWQgPSBlbmRGcmFtZSAtIG1fdGltZVN0
YW1wOworICAgICAgICBpZiAoYnVmZmVyZWQgPCBzYW1wbGVDb3VudCAqIDIpIHsKKyAgICAgICAg
ICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIHNhbXBsZUNvdW50KTsK
KyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGRvdWJsZSB0d2VudHlNUyA9IC4wMjsKKyAgICAg
ICAgY29uc3QgZG91YmxlIHRlbk1TID0gLjAxOworICAgICAgICBjb25zdCBkb3VibGUgZml2ZU1T
ID0gLjAwNTsKKyAgICAgICAgZG91YmxlIHNhbXBsZVJhdGUgPSBtX291dHB1dERlc2NyaXB0aW9u
LT5zYW1wbGVSYXRlKCk7CisgICAgICAgIGlmIChidWZmZXJlZCA+IHNhbXBsZVJhdGUgKiB0d2Vu
dHlNUykKKyAgICAgICAgICAgIG1fb3V0cHV0U2FtcGxlT2Zmc2V0ID0gbV90aW1lU3RhbXAgLSBz
YW1wbGVSYXRlICogdHdlbnR5TVM7CisgICAgICAgIGVsc2UgaWYgKGJ1ZmZlcmVkID4gc2FtcGxl
UmF0ZSAqIHRlbk1TKQorICAgICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQgPSBtX3RpbWVT
dGFtcCAtIHNhbXBsZVJhdGUgKiB0ZW5NUzsKKyAgICAgICAgZWxzZSBpZiAoYnVmZmVyZWQgPiBz
YW1wbGVSYXRlICogZml2ZU1TKQorICAgICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQgPSBt
X3RpbWVTdGFtcCAtIHNhbXBsZVJhdGUgKiBmaXZlTVM7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fb3V0cHV0U2FtcGxlT2Zmc2V0ID0gbV90aW1lU3RhbXA7CisKKyAgICAgICAgbV90cmFu
c2l0aW9uaW5nRnJvbVBhdXNlZCA9IGZhbHNlOworICAgIH0KKworICAgIHRpbWVTdGFtcCArPSBt
X291dHB1dFNhbXBsZU9mZnNldDsKKworICAgIExPRyhNZWRpYUNhcHR1cmVTYW1wbGVzLCAiKiog
cHVsbFNhbXBsZXM6IGFza2luZyBmb3IgJWxkIHNhbXBsZXMgYXQgdGltZSA9ICVsbGQgKHdhcyAl
bGxkKSIsIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIHRpbWVTdGFtcCAtIG1fb3V0cHV0U2FtcGxl
T2Zmc2V0KTsKKworICAgIGludDY0X3QgZnJhbWVzQXZhaWxhYmxlID0gc2FtcGxlQ291bnQ7Cisg
ICAgaWYgKHRpbWVTdGFtcCA8IHN0YXJ0RnJhbWUgfHwgdGltZVN0YW1wICsgc2FtcGxlQ291bnQg
PiBlbmRGcmFtZSkgeworICAgICAgICBpZiAodGltZVN0YW1wICsgc2FtcGxlQ291bnQgPCBzdGFy
dEZyYW1lIHx8IHRpbWVTdGFtcCA+IGVuZEZyYW1lKQorICAgICAgICAgICAgZnJhbWVzQXZhaWxh
YmxlID0gMDsKKyAgICAgICAgZWxzZSBpZiAodGltZVN0YW1wIDwgc3RhcnRGcmFtZSkKKyAgICAg
ICAgICAgIGZyYW1lc0F2YWlsYWJsZSA9IHRpbWVTdGFtcCArIHNhbXBsZUNvdW50IC0gc3RhcnRG
cmFtZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJhbWVzQXZhaWxhYmxlID0gdGltZVN0
YW1wICsgc2FtcGxlQ291bnQgLSBlbmRGcmFtZTsKKworICAgICAgICBMT0coTWVkaWFDYXB0dXJl
U2FtcGxlcywgIioqIHB1bGxTYW1wbGVzSW50ZXJuYWw6IHNhbXBsZSAlbGxkIGlzIG5vdCBjb21w
bGV0ZWx5IGluIHJhbmdlIFslbGxkIC4uICVsbGRdLCByZXR1cm5pbmcgJWxsZCBmcmFtZXMiLCB0
aW1lU3RhbXAsIHN0YXJ0RnJhbWUsIGVuZEZyYW1lLCBmcmFtZXNBdmFpbGFibGUpOworCisgICAg
ICAgIGlmICghZnJhbWVzQXZhaWxhYmxlKSB7CisgICAgICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV92b2x1bWUgPj0gLjk1KSB7Cisg
ICAgICAgIG1fcmluZ0J1ZmZlci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFt
cCwgbW9kZSA9PSBDb3B5ID8gQ0FSaW5nQnVmZmVyOjpDb3B5IDogQ0FSaW5nQnVmZmVyOjpNaXgp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JhdGNoQnVmZmVy
LT5jb3B5RnJvbSgqbV9yaW5nQnVmZmVyLmdldCgpLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBt
b2RlID09IENvcHkgPyBDQVJpbmdCdWZmZXI6OkNvcHkgOiBDQVJpbmdCdWZmZXI6Ok1peCkpIHsK
KyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgc2FtcGxlQ291
bnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9zY3JhdGNoQnVmZmVy
LT5hcHBseUdhaW4obV92b2x1bWUpOworICAgIGlmIChtX3NjcmF0Y2hCdWZmZXItPmNvcHlUbyhi
dWZmZXIsIHNhbXBsZUNvdW50KSkKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJv
QUJMKGJ1ZmZlciwgc2FtcGxlQ291bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
QXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlcyhBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZl
ciwgc2l6ZV90IHNhbXBsZUNvdW50LCB1aW50NjRfdCB0aW1lU3RhbXAsIGRvdWJsZSBob3N0VGlt
ZSwgUHVsbE1vZGUgbW9kZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9s
b2NrLCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBpZiAoIWxvY2sub3duc19sb2NrKCkgfHwgIW1f
cmluZ0J1ZmZlcikgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVm
ZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcHVsbFNhbXBsZXNJbnRlcm5hbChidWZmZXIsIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAs
IGhvc3RUaW1lLCBtb2RlKTsKK30KKworYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxT
YW1wbGVzKEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3Qgc2FtcGxlQ291bnQs
IHVpbnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIGhvc3RUaW1lLCBQdWxsTW9kZSBtb2RlKQorewor
ICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2xvY2ssIHN0ZDo6dHJ5X3RvX2xvY2sp
OworICAgIGlmICghbG9jay5vd25zX2xvY2soKSB8fCAhbV9yaW5nQnVmZmVyKSB7CisgICAgICAg
IGJ1ZmZlci56ZXJvKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IXB1bGxTYW1wbGVzSW50ZXJuYWwoYnVmZmVyLmJ1ZmZlckxpc3QoKSwgc2FtcGxlQ291bnQsIHRp
bWVTdGFtcCwgaG9zdFRpbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBi
dWZmZXIuc2V0VGltZXModGltZVN0YW1wLCBob3N0VGltZSk7CisgICAgYnVmZmVyLnNldFNhbXBs
ZUNvdW50KHNhbXBsZUNvdW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBs
ZURhdGFTb3VyY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJBdWRp
b1NhbXBsZUJ1ZmZlckxpc3QuaCIKKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMu
aD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVl
Q01Gb3JtYXREZXNjcmlwdGlvbiAqQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKK3R5cGVkZWYgc3Ry
dWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CitjbGFzcyBDQVJp
bmdCdWZmZXI7CisKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXVk
aW9TYW1wbGVEYXRhU291cmNlPiBjcmVhdGUoc2l6ZV90KTsKKworICAgIH5BdWRpb1NhbXBsZURh
dGFTb3VyY2UoKTsKKworICAgIE9TU3RhdHVzIHNldElucHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiYpOworICAgIE9TU3RhdHVzIHNldE91dHB1dEZvcm1hdChjb25zdCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mKTsKKworICAgIHZvaWQgcHVzaFNhbXBsZXMoY29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiwgY29uc3QgTWVkaWFUaW1lJiwgdm9pZCosIHNp
emVfdCk7CisgICAgdm9pZCBwdXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24mLCBDTVNhbXBsZUJ1ZmZlclJlZik7CisKKyAgICBlbnVtIFB1bGxNb2RlIHsgQ29weSwg
TWl4IH07CisgICAgYm9vbCBwdWxsU2FtcGxlcyhBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmLCBzaXpl
X3QsIHVpbnQ2NF90LCBkb3VibGUsIFB1bGxNb2RlKTsKKyAgICBib29sIHB1bGxTYW1wbGVzKEF1
ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCwgdWludDY0X3QsIGRvdWJsZSwgUHVsbE1vZGUpOworCisg
ICAgdm9pZCBzZXRQYXVzZWQoYm9vbCk7CisKKyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCB2b2x1
bWUpIHsgbV92b2x1bWUgPSB2b2x1bWU7IH0KKyAgICBmbG9hdCB2b2x1bWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZvbHVtZTsgfQorCisgICAgdm9pZCBzZXRNdXRlZChib29sIG11dGVkKSB7IG1fbXV0
ZWQgPSBtdXRlZDsgfQorICAgIGJvb2wgbXV0ZWQoKSBjb25zdCB7IHJldHVybiBtX211dGVkOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBBdWRpb1NhbXBsZURhdGFTb3VyY2Uoc2l6ZV90KTsKKworICAg
IE9TU3RhdHVzIHNldHVwQ29udmVydGVyKCk7CisgICAgYm9vbCBwdWxsU2FtcGxlc0ludGVybmFs
KEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCYsIHVpbnQ2NF90LCBkb3VibGUsIFB1bGxNb2RlKTsK
KworICAgIHZvaWQgcHVzaFNhbXBsZXNJbnRlcm5hbChBdWRpb0J1ZmZlckxpc3QmLCBjb25zdCBN
ZWRpYVRpbWUmLCBzaXplX3QgZnJhbWVDb3VudCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX2lucHV0RGVzY3JpcHRpb247CisgICAgc3RkOjp1bmlx
dWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsKKwor
ICAgIE1lZGlhVGltZSBob3N0VGltZSgpIGNvbnN0OworCisgICAgdWludDY0X3QgbV90aW1lU3Rh
bXAgeyAwIH07CisgICAgZG91YmxlIG1faG9zdFRpbWUgeyAtMSB9OworCisgICAgTWVkaWFUaW1l
IG1faW5wdXRTYW1wbGVPZmZzZXQ7CisgICAgdWludDY0X3QgbV9vdXRwdXRTYW1wbGVPZmZzZXQg
eyAwIH07CisKKyAgICBBdWRpb0NvbnZlcnRlclJlZiBtX2NvbnZlcnRlcjsKKyAgICBSZWZQdHI8
QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBtX3NjcmF0Y2hCdWZmZXI7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q0FSaW5nQnVmZmVyPiBtX3JpbmdCdWZmZXI7CisgICAgc2l6ZV90IG1fbWF4aW11bVNh
bXBsZUNvdW50IHsgMCB9OworCisgICAgTG9jayBtX2xvY2s7CisgICAgZmxvYXQgbV92b2x1bWUg
eyAxLjAgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wYXVzZWQg
eyB0cnVlIH07CisgICAgYm9vbCBtX3RyYW5zaXRpb25pbmdGcm9tUGF1c2VkIHsgdHJ1ZSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NU
UkVBTSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300425</attachid>
            <date>2017-02-02 11:39:12 -0800</date>
            <delta_ts>2017-02-02 12:02:13 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>audio_buffers_patch_3.txt</filename>
            <type>text/plain</type>
            <size>47252</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTU2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE3LTAyLTAyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIEFkZCBjbGFz
c2VzIHRvIG1hbmFnZSBhdWRpbyBzYW1wbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3MzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHRoaXMgY29kZSBpc24ndCB1c2VkIHll
dC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OkF1ZGlvU2FtcGxlQnVmZmVyTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6On5BdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpz
ZXRTYW1wbGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6
OmFwcGx5R2Fpbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Om1p
eEZyb20pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJv
bSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlUbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVybyk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVCdWZmZXJMaXN0Ojpjb252ZXJ0SW5wdXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0NvbnZlcnRlckNhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29uZmlndXJlQnVmZmVyTGlzdEZvclN0cmVh
bSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c3RyZWFt
RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpi
dWZmZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2Ft
cGxlQ2FwYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpz
YW1wbGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnRp
bWVzdGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Omhvc3RU
aW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2V0VGltZXMp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0J1ZmZlckxp
c3RTaXplRm9yU3RyZWFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1w
bGVEYXRhU291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURh
dGFTb3VyY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBs
ZURhdGFTb3VyY2U6On5BdWRpb1NhbXBsZURhdGFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRQYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVEYXRhU291cmNlOjpzZXR1cENvbnZlcnRlcik6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldElucHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0T3V0cHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6aG9zdFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldFZvbHVtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnZvbHVtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldE11dGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6bXV0ZWQpOgorCiAyMDE3LTAyLTAyICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBDb2x1bW4gcHJvZ3Jlc3Npb24g
d3JvbmcgYWZ0ZXIgZW5hYmxpbmcgcGFnaW5hdGlvbiBvbiBSVEwgZG9jdW1lbnQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIxMTU1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0MiwxMCBAQAogCQkwNzM3OTRG
RTE5RjU4NjRFMDBFNUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczNzk0RjgxOUY1ODY0RTAwRTVBMDQ1IC8q
IFJUQ05vdGlmaWVyc01vY2suaCAqLzsgfTsKIAkJMDczOTRFQzgxQkFCMkNDRDAwQkU5OUNEIC8q
IE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDczOTRFQzcxQkFCMkNDRDAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1Jl
cXVlc3QuY3BwICovOyB9OwogCQkwNzM5NEVDQTFCQUIyQ0Q3MDBCRTk5Q0QgLyogTWVkaWFEZXZp
Y2VzUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDczOTRFQzkxQkFCMkNENzAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwNzNCODc2NjFF
NDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3M0I4NzYyMUU0Mzg1OUQwMDcxQzBF
QyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwICovOyB9OworCQkwNzNCODc2NzFFNDM4NUFD
MDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNCODc2MzFFNDM4NTlEMDA3MUMwRUMgLyogQXVk
aW9TYW1wbGVCdWZmZXJMaXN0LmggKi87IH07CisJCTA3M0I4NzY4MUU0Mzg1QUMwMDcxQzBFQyAv
KiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NjQxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5jcHAgKi87IH07CisJCTA3M0I4NzY5MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2UuaCAqLzsgfTsKIAkJMDczQkUzNDAxN0QxN0UwMTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNl
ck1lZGlhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3M0JFMzNFMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5jcHAgKi87
IH07CiAJCTA3M0JFMzQxMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQkUzM0Yx
N0QxN0UwMTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDczQkUzNEUxN0QxODBCMjAwMkJE
NDMxIC8qIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMjFCQUIxN0NGMEFENDAwODQ4RTUx
IC8qIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkRlc2NyaXB0b3IuY3BwICovOyB9OwpAQCAtNzIzMyw2
ICs3MjM3LDEwIEBACiAJCTA3M0I4NzU2MUU0MERDRTUwMDcxQzBFQyAvKiBBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQjg3NTcxRTQw
RENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCODc1ODFFNDBEQ0ZEMDA3MUMwRUMgLyog
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3M0I4NzYzMUU0Mzg1OUQw
MDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTA3M0I4NzY0MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9TYW1wbGVE
YXRhU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDczQjg3NjUxRTQz
ODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBdWRpb1NhbXBsZURhdGFTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMDczQkUzM0UxN0QxN0UwMTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNl
ck1lZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTmF2aWdh
dG9yVXNlck1lZGlhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQkUzM0Yx
N0QxN0UwMTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTTmF2aWdhdG9yVXNlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA3NDRFQ0VCMUUwQzRBRTUwMDBEMDk0NCAvKiBNb2NrUmVhbHRpbWVB
dWRpb1NvdXJjZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVh
bHRpbWVBdWRpb1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ4
MTUsNyArMjQ4MjMsNiBAQAogCQlGRDMxNjA0MDEyQjAyNkEzMDBDMUEzNTkgLyogYXVkaW8gKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTA3M0I4NzU2MUU0
MERDRTUwMDcxQzBFQyAvKiBBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8sCiAJCQkJQ0Q2NjlE
NjUxRDIzMkRGNDAwNEQxODY2IC8qIGNvY29hICovLAogCQkJCUNEMEVFRTBEMTQ3NDNFNDgwMDNF
QUZBMiAvKiBpb3MgKi8sCiAJCQkJRkQzMTYwQjAxMkIwMjcwNzAwQzFBMzU5IC8qIG1hYyAqLywK
QEAgLTI0ODQyLDYgKzI0ODQ5LDcgQEAKIAkJCQlDREE3OTgyMTE3MEEyMkRDMDBENDVDNTUgLyog
QXVkaW9TZXNzaW9uLmggKi8sCiAJCQkJRkQzMTYwNTMxMkIwMjZGNzAwQzFBMzU5IC8qIEF1ZGlv
U291cmNlUHJvdmlkZXIuaCAqLywKIAkJCQlGRDYyRjUyRDE0NTg5OEQ4MDA5NEIwRUQgLyogQXVk
aW9Tb3VyY2VQcm92aWRlckNsaWVudC5oICovLAorCQkJCTA3M0I4NzU2MUU0MERDRTUwMDcxQzBF
QyAvKiBBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8sCiAJCQkJRkQzMTYwNTQxMkIwMjZGNzAw
QzFBMzU5IC8qIEF1ZGlvVXRpbGl0aWVzLmNwcCAqLywKIAkJCQlGRDMxNjA1NTEyQjAyNkY3MDBD
MUEzNTkgLyogQXVkaW9VdGlsaXRpZXMuaCAqLywKIAkJCQlGRDMxNjA1NjEyQjAyNkY3MDBDMUEz
NTkgLyogQmlxdWFkLmNwcCAqLywKQEAgLTI0OTA4LDYgKzI0OTE2LDEwIEBACiAJCUZEMzE2MEIw
MTJCMDI3MDcwMEMxQTM1OSAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTA3M0I4NzYyMUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3QuY3BwICovLAorCQkJCTA3M0I4NzYzMUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuaCAqLywKKwkJCQkwNzNCODc2NDFFNDM4NTlEMDA3MUMwRUMgLyogQXVk
aW9TYW1wbGVEYXRhU291cmNlLmNwcCAqLywKKwkJCQkwNzNCODc2NTFFNDM4NTlEMDA3MUMwRUMg
LyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmggKi8sCiAJCQkJRkQzMTYwQjUxMkIwMjcyQTAwQzFB
MzU5IC8qIEF1ZGlvQnVzTWFjLm1tICovLAogCQkJCUZEMzE2MEI2MTJCMDI3MkEwMEMxQTM1OSAv
KiBBdWRpb0Rlc3RpbmF0aW9uTWFjLmNwcCAqLywKIAkJCQlGRDMxNjBCNzEyQjAyNzJBMDBDMUEz
NTkgLyogQXVkaW9EZXN0aW5hdGlvbk1hYy5oICovLApAQCAtMjU0NzIsNiArMjU0ODQsNyBAQAog
CQkJCTJEOEZFQkREMTQzRTNFRjcwMDcyNTAyQiAvKiBDU1NDcm9zc2ZhZGVWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUEyMUVDQ0QwQUJGMEZDNjAwMkI4MzRDIC8qIENTU0N1cnNvckltYWdl
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0NDRDQkU0MUQ4ODYxOTkwMDczQTA3NCAvKiBD
U1NDdXN0b21JZGVudFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzNCODc2OTFFNDM4NUFD
MDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Qzc3OUUxNDFCQjIxNUJCMDBDQUE4QkYgLyogQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNEE5Q0M4MTgxNkJCOUFDNjAwRUM2NDVBIC8qIENTU0RlZmF1bHRTdHls
ZVNoZWV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ0NzZCREIxREZDQUMwMzAwNjkwRTIzIC8q
IENTU0RlZmVycmVkUGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI2NjUzLDYgKzI2NjY2LDcg
QEAKIAkJCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1D
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzRDOTZERDFBRDQ0ODM1MDAzNjVBNTAg
LyogSlNSZWFkYWJsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkM0Qzk2REYxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMDczQjg3NjcxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M0Qzk2REYxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTI5REY4
NjFCQjVCODBDMDAzMjJBMTYgLyogSlNSZWFkYWJsZVN0cmVhbVByaXZhdGVDb25zdHJ1Y3RvcnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEM5NkREMUFENDQ4MzUwMDM2NUE1MSAvKiBKU1JlYWRh
YmxlU3RyZWFtU291cmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzM5LDcgKzI4MzUzLDYgQEAK
IAkJCQlCRTkxM0Q4MDE4MUVGOTI0MDBEQ0IwOUUgLyogVHJhY2tQcml2YXRlQmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkZBQzMwRkUxODRGQjE0NTAwOEM0RjFFIC8qIFRyYWlsaW5nT2JqZWN0
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE2MDcxMzIxQkQ4MzA4QjAwREJDNEYyIC8qIFRyYW5z
YWN0aW9uT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwN0MwNDZDMjFFNDI1MDIyMDA3
MjAxRTcgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5
MTFDNDBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXguaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZCNDg0RjREMTcxRjgyMUUwMDA0MDc1NSAvKiBUcmFuc2Zvcm1GdW5jdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUNFMEVGODZENDcwMDlEMENBRiAvKiBUcmFuc2Zv
cm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjk5MjQsNiArMjk5MzcsNyBAQAogCQkJ
CTUxRjc5OEVGMUJFODgwRTcwMDhBRTQ5MSAvKiBJREJJbmRleEluZm8uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTFFMjY5MzYxREQzQkQ5NzAwNkI2QTU4IC8qIElEQkl0ZXJhdGVDdXJzb3JEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzk0MUJCNEM0RTgwMDEyODk4RiAvKiBJREJL
ZXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDczQjg3NjYxRTQzODVBQzAwNzFDMEVDIC8qIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM5NjFCQjRD
NEU4MDAxMjg5OEYgLyogSURCS2V5RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM5
ODFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTg1RkM5QTFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5UmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0yOTkzMiw2ICsyOTk0Niw3IEBACiAJCQkJNTE2MDcxMkUxQkQ4MzA3ODAwREJDNEYyIC8q
IElEQk9iamVjdFN0b3JlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkNBMzFCQjRD
NEU4MDAxMjg5OEYgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTg1RkNBODFCQjRDNEU4MDAxMjg5OEYgLyogSURCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwNzNCODc2ODFFNDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDEyOTk4MUM2OTc2OTAwMDU5RTcxNCAvKiBJREJSZXF1
ZXN0Q29tcGxldGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEE1OEY5MUJBQ0M3
RjIwMEMxOTI4MiAvKiBJREJSZXF1ZXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTQ1
QjEwOTFCQzQ4RTJFMDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMzA0NDcsNyArMzA0NjIsNiBAQAogCQkJCUUxMjg0QkIyMTA0NDlGRkEwMEVB
RUI1MiAvKiBKU1BhZ2VUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkRB
MTVFQjExMkIwM0VFMTAwM0E1ODNBIC8qIEpTUGFubmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFNTFBODFERjE3Mjk4RDc3MDBCRkNBNjEgLyogSlNQZXJmb3JtYW5jZS5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkwN0MwNDZDMTFFNDI1MDIyMDA3MjAxRTcgLyogQXVkaW9TYW1wbGVEYXRh
U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNCMzhGRDUxMUNDRjkzODkwMDU5MkEzRiAv
KiBKU1BlcmZvcm1hbmNlRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0IzOEZENTcxQ0Qy
MUUyQTAwNTkyQTNGIC8qIEpTUGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNThDNTlEMDFFMzgyRUFDMDA0Nzg1OUMgLyogSlNQZXJmb3JtYW5jZU1hcmsuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMv
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJM
aXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiVmVjdG9yTWF0aC5oIgorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2luY2x1ZGUgPEF1ZGlvVG9vbGJveC9BdWRp
b0NvbnZlcnRlci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBW
ZWN0b3JNYXRoOworCitSZWY8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q6OmNyZWF0ZShjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCwgc2l6
ZV90IG1heGltdW1TYW1wbGVDb3VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBdWRp
b1NhbXBsZUJ1ZmZlckxpc3QoZm9ybWF0LCBtYXhpbXVtU2FtcGxlQ291bnQpKTsKK30KKworQXVk
aW9TYW1wbGVCdWZmZXJMaXN0OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3QoY29uc3QgQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQsIHNpemVfdCBtYXhpbXVtU2FtcGxlQ291bnQpCit7Cisg
ICAgbV9pbnRlcm5hbEZvcm1hdCA9IHN0ZDo6bWFrZV91bmlxdWU8Q0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uPihmb3JtYXQpOworCisgICAgbV9zYW1wbGVDYXBhY2l0eSA9IG1heGltdW1TYW1wbGVD
b3VudDsKKyAgICBtX3NhbXBsZUNvdW50ID0gMDsKKyAgICBtX21heEJ1ZmZlclNpemVQZXJDaGFu
bmVsID0gbWF4aW11bVNhbXBsZUNvdW50ICogZm9ybWF0LmJ5dGVzUGVyRnJhbWUoKSAvIGZvcm1h
dC5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCk7CisKKyAgICBkb3VibGUgc2FtcGxlUmF0ZSA9IGZv
cm1hdC5zYW1wbGVSYXRlKCk7CisgICAgQVNTRVJUKHNhbXBsZVJhdGUgPj0gMCk7CisKKyAgICBz
aXplX3QgYnVmZmVyU2l6ZSA9IGZvcm1hdC5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCkgKiBtX21h
eEJ1ZmZlclNpemVQZXJDaGFubmVsOworICAgIEFTU0VSVChidWZmZXJTaXplIDw9IFNJWkVfTUFY
KTsKKyAgICBpZiAoYnVmZmVyU2l6ZSA+IFNJWkVfTUFYKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2J1ZmZlckxpc3RCYXNlU2l6ZSA9IGF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oZm9y
bWF0KTsKKyAgICBBU1NFUlQobV9idWZmZXJMaXN0QmFzZVNpemUgPD0gU0laRV9NQVgpOworICAg
IGlmIChtX2J1ZmZlckxpc3RCYXNlU2l6ZSA+IFNJWkVfTUFYKQorICAgICAgICByZXR1cm47CisK
KyAgICBzaXplX3QgYWxsb2NTaXplID0gbV9idWZmZXJMaXN0QmFzZVNpemUgKyBidWZmZXJTaXpl
OworICAgIG1fYnVmZmVyTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+KHN0
YXRpY19jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KDo6b3BlcmF0b3IgbmV3IChhbGxvY1NpemUpKSk7
CisKKyAgICByZXNldCgpOworfQorCitBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6On5BdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QoKQoreworICAgIG1faW50ZXJuYWxGb3JtYXQgPSBudWxscHRyOworICAgIG1f
YnVmZmVyTGlzdCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpz
ZXRTYW1wbGVDb3VudChzaXplX3QgY291bnQpCit7CisgICAgQVNTRVJUKGNvdW50IDw9IG1fc2Ft
cGxlQ2FwYWNpdHkpOworICAgIGlmIChjb3VudCA8PSBtX3NhbXBsZUNhcGFjaXR5KQorICAgICAg
ICBtX3NhbXBsZUNvdW50ID0gY291bnQ7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OjphcHBseUdhaW4oQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0LCBmbG9hdCBnYWluLCBBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0KQoreworICAgIGZvciAodWludDMy
X3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAgICAgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJ
bnQxNjogeworICAgICAgICAgICAgaW50MTZfdCogYnVmZmVyID0gc3RhdGljX2Nhc3Q8aW50MTZf
dCo+KGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICAgICAgaW50IGZyYW1l
Q291bnQgPSBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBzaXplb2YoaW50
MTZfdCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7IGkrKykK
KyAgICAgICAgICAgICAgICBidWZmZXJbaV0gKj0gZ2FpbjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MzI6IHsK
KyAgICAgICAgICAgIGludDMyX3QqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGludDMyX3QqPihidWZm
ZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgICAgIGludCBmcmFtZUNvdW50ID0g
YnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGludDMyX3QpOwor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyBpKyspCisgICAgICAg
ICAgICAgICAgYnVmZmVyW2ldICo9IGdhaW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bjo6RmxvYXQzMjogeworICAgICAgICAgICAgZmxvYXQqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGZs
b2F0Kj4oYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3Zz
bXVsKGJ1ZmZlciwgMSwgJmdhaW4sIGJ1ZmZlciwgMSwgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5t
RGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkZsb2F0NjQ6IHsKKyAg
ICAgICAgICAgIGRvdWJsZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4oYnVmZmVyTGlz
dC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICBkb3VibGUgZ2FpbkFzRG91YmxlID0g
Z2FpbjsKKyAgICAgICAgICAgIHZEU1BfdnNtdWxEKGJ1ZmZlciwgMSwgJmdhaW5Bc0RvdWJsZSwg
YnVmZmVyLCAxLCBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgLyBzaXplb2Yo
ZG91YmxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlHYWluKGZsb2F0IGdhaW4pCit7CisgICAgYXBwbHlH
YWluKCptX2J1ZmZlckxpc3QsIGdhaW4sIG1faW50ZXJuYWxGb3JtYXQtPmZvcm1hdCgpKTsKK30K
KworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9tKGNvbnN0IEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkKK3sKKyAgICBBU1NFUlQo
c291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgPT0gc3RyZWFtRGVzY3JpcHRpb24oKSk7CisKKyAg
ICBpZiAoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgIT0gc3RyZWFtRGVzY3JpcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgaWYgKGZyYW1lQ291bnQg
PiBzb3VyY2Uuc2FtcGxlQ291bnQoKSkKKyAgICAgICAgZnJhbWVDb3VudCA9IHNvdXJjZS5zYW1w
bGVDb3VudCgpOworCisgICAgaWYgKGZyYW1lQ291bnQgPiBtX3NhbXBsZUNhcGFjaXR5KQorICAg
ICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBtX3NhbXBsZUNvdW50ID0gZnJh
bWVDb3VudDsKKworICAgIEF1ZGlvQnVmZmVyTGlzdCYgc291cmNlQnVmZmVyID0gc291cmNlLmJ1
ZmZlckxpc3QoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5t
TnVtYmVyQnVmZmVyczsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAobV9pbnRlcm5hbEZvcm1hdC0+
Zm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpJbnQxNjog
eworICAgICAgICAgICAgaW50MTZfdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxpbnQxNl90
Kj4obV9idWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICBpbnQxNl90
KiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ld
Lm1EYXRhKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsg
aSsrKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldICs9IHNvdXJjZVtpXTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6SW50MzI6IHsKKyAgICAgICAgICAgIGludDMyX3QqIGRlc3RpbmF0aW9uID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdCo+KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAg
ICAgICAgdkRTUF92YWRkaShkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnByZXRfY2FzdDxpbnQzMl90
Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVzdGluYXRpb24sIDEsIGZy
YW1lQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDMyOiB7CisgICAgICAgICAgICBmbG9hdCogZGVz
dGluYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0u
bURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVzdGlu
YXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDY0OiB7CisgICAgICAgICAg
ICBkb3VibGUqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91YmxlKj4obV9idWZmZXJMaXN0
LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3ZhZGREKGRlc3RpbmF0aW9u
LCAxLCByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5t
RGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Tm9uZToK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShjb25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmIHNvdXJj
ZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgQVNTRVJUKHNvdXJjZS5zdHJlYW1EZXNjcmlw
dGlvbigpID09IHN0cmVhbURlc2NyaXB0aW9uKCkpOworCisgICAgaWYgKHNvdXJjZS5zdHJlYW1E
ZXNjcmlwdGlvbigpICE9IHN0cmVhbURlc2NyaXB0aW9uKCkpCisgICAgICAgIHJldHVybiBrQXVk
aW9fUGFyYW1FcnJvcjsKKworICAgIGlmIChmcmFtZUNvdW50ID4gc291cmNlLnNhbXBsZUNvdW50
KCkpCisgICAgICAgIGZyYW1lQ291bnQgPSBzb3VyY2Uuc2FtcGxlQ291bnQoKTsKKworICAgIGlm
IChmcmFtZUNvdW50ID4gbV9zYW1wbGVDYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19Q
YXJhbUVycm9yOworCisgICAgbV9zYW1wbGVDb3VudCA9IGZyYW1lQ291bnQ7CisKKyAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVyczsgaSsrKSB7
CisgICAgICAgIHVpbnQ4X3QqIHNvdXJjZURhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oc291
cmNlLmJ1ZmZlckxpc3QoKS5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNb
aV0ubURhdGEpOworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZURhdGEsIGZyYW1l
Q291bnQgKiBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBhY2tldCgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5VG8o
QXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBmcmFtZUNvdW50KQoreworICAgIGlmIChm
cmFtZUNvdW50ID4gbV9zYW1wbGVDb3VudCkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVy
cm9yOworICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZlcnMgPiBtX2J1ZmZlckxpc3QtPm1OdW1i
ZXJCdWZmZXJzKQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBmb3Ig
KHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVyLm1OdW1iZXJCdWZmZXJzOyBpKyspIHsKKyAgICAg
ICAgdWludDhfdCogc291cmNlRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2J1ZmZlckxp
c3QtPm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgdWludDhfdCogZGVzdGluYXRpb24gPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAg
bWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2VEYXRhLCBmcmFtZUNvdW50ICogbV9pbnRlcm5hbEZv
cm1hdC0+Ynl0ZXNQZXJQYWNrZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZXNldCgpCit7CisgICAgbV9zYW1wbGVDb3VudCA9
IDA7CisgICAgbV90aW1lc3RhbXAgPSAwOworICAgIG1faG9zdFRpbWUgPSAtMTsKKworICAgIHVp
bnQ4X3QqIGRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2J1ZmZlckxpc3QuZ2V0
KCkpICsgbV9idWZmZXJMaXN0QmFzZVNpemU7CisgICAgbV9idWZmZXJMaXN0LT5tTnVtYmVyQnVm
ZmVycyA9IG1faW50ZXJuYWxGb3JtYXQtPm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKTsKKyAgICBm
b3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVyczsgKytp
KSB7CisgICAgICAgIGF1dG8mIGJ1ZmZlciA9IG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV07Cisg
ICAgICAgIGJ1ZmZlci5tRGF0YSA9IGRhdGE7CisgICAgICAgIGJ1ZmZlci5tRGF0YUJ5dGVTaXpl
ID0gbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbDsKKyAgICAgICAgYnVmZmVyLm1OdW1iZXJDaGFu
bmVscyA9IG1faW50ZXJuYWxGb3JtYXQtPm51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygpOwor
ICAgICAgICBkYXRhID0gZGF0YSArIG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5uZWw7CisgICAgfQor
fQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVybygpCit7CisgICAgemVyb0FCTCgq
bV9idWZmZXJMaXN0LCBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBhY2tldCgpICogbV9zYW1w
bGVDYXBhY2l0eSk7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKEF1
ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QgYnl0ZUNvdW50KQoreworICAgIGZvciAodWlu
dDMyX3QgaSA9IDA7IGkgPCBidWZmZXIubU51bWJlckJ1ZmZlcnM7ICsraSkKKyAgICAgICAgbWVt
c2V0KGJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSwgMCwgYnl0ZUNvdW50KTsKK30KKworT1NTdGF0
dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb252ZXJ0SW5wdXQodWludDMyX3QqIGlvTnVtYmVy
RGF0YVBhY2tldHMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQoreworICAgIGlmICghaW9OdW1i
ZXJEYXRhUGFja2V0cyB8fCAhaW9EYXRhIHx8ICFtX2NvbnZlcnRlcklucHV0QnVmZmVyKSB7Cisg
ICAgICAgIExPR19FUlJPUigiQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZWNvbmZpZ3VyZUlucHV0
KCVwKSBpbnZhbGlkIGlucHV0IHRvIEF1ZGlvQ29udmVydGVySW5wdXQiLCB0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIGtBdWRpb0NvbnZlcnRlckVycl9VbnNwZWNpZmllZEVycm9yOworICAgIH0KKwor
ICAgIHNpemVfdCBwYWNrZXRDb3VudCA9IG1fY29udmVydGVySW5wdXRCdWZmZXItPm1CdWZmZXJz
WzBdLm1EYXRhQnl0ZVNpemUgLyBtX2NvbnZlcnRlcklucHV0Qnl0ZXNQZXJQYWNrZXQ7CisgICAg
aWYgKCppb051bWJlckRhdGFQYWNrZXRzID4gbV9zYW1wbGVDYXBhY2l0eSkgeworICAgICAgICBM
T0dfRVJST1IoIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29udmVydElucHV0KCVwKSBub3QgZW5v
dWdoIGludGVybmFsIHN0b3JhZ2U6IG5lZWRlZCA9ICV1LCBhdmFpbGFibGUgPSAlbHUiLCB0aGlz
LCAqaW9OdW1iZXJEYXRhUGFja2V0cywgbV9zYW1wbGVDYXBhY2l0eSk7CisgICAgICAgIHJldHVy
biBrQXVkaW9Db252ZXJ0ZXJFcnJfSW52YWxpZElucHV0U2l6ZTsKKyAgICB9CisKKyAgICAqaW9O
dW1iZXJEYXRhUGFja2V0cyA9IHBhY2tldENvdW50OworICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBpb0RhdGEtPm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAgICAgICAgaW9EYXRhLT5tQnVm
ZmVyc1tpXS5tRGF0YSA9IG1fY29udmVydGVySW5wdXRCdWZmZXItPm1CdWZmZXJzW2ldLm1EYXRh
OworICAgICAgICBpb0RhdGEtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBtX2NvbnZlcnRl
cklucHV0QnVmZmVyLT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplOworICAgIH0KKworICAgIHJl
dHVybiAwOworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmF1ZGlvQ29udmVy
dGVyQ2FsbGJhY2soQXVkaW9Db252ZXJ0ZXJSZWYsIHVpbnQzMl90KiBpb051bWJlckRhdGFQYWNr
ZXRzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSwgQXVkaW9TdHJlYW1QYWNrZXREZXNjcmlwdGlv
bioqLCB2b2lkKiBpblJlZkNvbikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9TYW1w
bGVCdWZmZXJMaXN0Kj4oaW5SZWZDb24pLT5jb252ZXJ0SW5wdXQoaW9OdW1iZXJEYXRhUGFja2V0
cywgaW9EYXRhKTsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJv
bShBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZSwgQXVkaW9Db252ZXJ0ZXJSZWYgY29udmVydGVyKQor
eworICAgIHJlc2V0KCk7CisKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gaW5wdXRG
b3JtYXQ7CisgICAgdWludDMyX3QgcHJvcGVydHlEYXRhU2l6ZSA9IHNpemVvZihpbnB1dEZvcm1h
dCk7CisgICAgQXVkaW9Db252ZXJ0ZXJHZXRQcm9wZXJ0eShjb252ZXJ0ZXIsIGtBdWRpb0NvbnZl
cnRlckN1cnJlbnRJbnB1dFN0cmVhbURlc2NyaXB0aW9uLCAmcHJvcGVydHlEYXRhU2l6ZSwgJmlu
cHV0Rm9ybWF0KTsKKyAgICBtX2NvbnZlcnRlcklucHV0Qnl0ZXNQZXJQYWNrZXQgPSBpbnB1dEZv
cm1hdC5tQnl0ZXNQZXJQYWNrZXQ7CisgICAgbV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlciA9ICZzb3Vy
Y2U7CisKKyAgICBhdXRvKiBvdXRwdXREYXRhID0gbV9idWZmZXJMaXN0LmdldCgpOworCisjaWYg
IUxPR19ESVNBQkxFRAorICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBvdXRwdXRGb3Jt
YXQ7CisgICAgcHJvcGVydHlEYXRhU2l6ZSA9IHNpemVvZihvdXRwdXRGb3JtYXQpOworICAgIEF1
ZGlvQ29udmVydGVyR2V0UHJvcGVydHkoY29udmVydGVyLCBrQXVkaW9Db252ZXJ0ZXJDdXJyZW50
T3V0cHV0U3RyZWFtRGVzY3JpcHRpb24sICZwcm9wZXJ0eURhdGFTaXplLCAmb3V0cHV0Rm9ybWF0
KTsKKworICAgIEFTU0VSVChvdXRwdXRGb3JtYXQubUNoYW5uZWxzUGVyRnJhbWUgPT0gb3V0cHV0
RGF0YS0+bU51bWJlckJ1ZmZlcnMpOworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBvdXRw
dXREYXRhLT5tTnVtYmVyQnVmZmVyczsgKytpKSB7CisgICAgICAgIEFTU0VSVChvdXRwdXREYXRh
LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgIEFTU0VSVChvdXRwdXREYXRhLT5tQnVmZmVy
c1tpXS5tRGF0YUJ5dGVTaXplKTsKKyAgICB9CisjZW5kaWYKKworICAgIHVpbnQzMl90IHNhbXBs
ZXNDb252ZXJ0ZWQgPSBtX3NhbXBsZUNhcGFjaXR5OworICAgIE9TU3RhdHVzIGVyciA9IEF1ZGlv
Q29udmVydGVyRmlsbENvbXBsZXhCdWZmZXIoY29udmVydGVyLCBhdWRpb0NvbnZlcnRlckNhbGxi
YWNrLCB0aGlzLCAmc2FtcGxlc0NvbnZlcnRlZCwgb3V0cHV0RGF0YSwgbnVsbHB0cik7CisgICAg
aWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29w
eUZyb20oJXApIEF1ZGlvQ29udmVydGVyRmlsbENvbXBsZXhCdWZmZXIgcmV0dXJuZWQgZXJyb3Ig
JWQgKCUuNHMpIiwgdGhpcywgZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIG1fc2FtcGxlQ291
bnQgPSBzdGQ6Om1pbihtX3NhbXBsZUNhcGFjaXR5LCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNhbXBs
ZXNDb252ZXJ0ZWQpKTsKKyAgICAgICAgemVybygpOworICAgICAgICByZXR1cm4gZXJyOworICAg
IH0KKworICAgIG1fc2FtcGxlQ291bnQgPSBzYW1wbGVzQ29udmVydGVkOworICAgIHJldHVybiAw
OworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdCYgc291cmNlLCBBdWRpb0NvbnZlcnRlclJlZiBjb252ZXJ0ZXIpCit7Cisg
ICAgcmV0dXJuIGNvcHlGcm9tKHNvdXJjZS5idWZmZXJMaXN0KCksIGNvbnZlcnRlcik7Cit9CisK
K09TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29weUZyb20oQ0FSaW5nQnVmZmVyJiBy
aW5nQnVmZmVyLCBzaXplX3Qgc2FtcGxlQ291bnQsIHVpbnQ2NF90IHN0YXJ0RnJhbWUsIENBUmlu
Z0J1ZmZlcjo6RmV0Y2hNb2RlIG1vZGUpCit7CisgICAgcmVzZXQoKTsKKyAgICBpZiAocmluZ0J1
ZmZlci5mZXRjaCgmYnVmZmVyTGlzdCgpLCBzYW1wbGVDb3VudCwgc3RhcnRGcmFtZSwgbW9kZSkg
IT0gQ0FSaW5nQnVmZmVyOjpPaykKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOwor
CisgICAgbV9zYW1wbGVDb3VudCA9IHNhbXBsZUNvdW50OworICAgIHJldHVybiAwOworfQorCit2
b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29uZmlndXJlQnVmZmVyTGlzdEZvclN0cmVhbShB
dWRpb0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QsIGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
biYgZm9ybWF0LCB1aW50OF90KiBidWZmZXJEYXRhLCBzaXplX3Qgc2FtcGxlQ291bnQpCit7Cisg
ICAgc2l6ZV90IGJ1ZmZlckNvdW50ID0gZm9ybWF0Lm51bWJlck9mQ2hhbm5lbFN0cmVhbXMoKTsK
KyAgICBzaXplX3QgY2hhbm5lbENvdW50ID0gZm9ybWF0Lm51bWJlck9mSW50ZXJsZWF2ZWRDaGFu
bmVscygpOworICAgIHNpemVfdCBieXRlc1BlckNoYW5uZWwgPSBzYW1wbGVDb3VudCAqIGZvcm1h
dC5ieXRlc1BlckZyYW1lKCk7CisKKyAgICBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzID0gYnVm
ZmVyQ291bnQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJ1ZmZlckNvdW50OyArK2kp
IHsKKyAgICAgICAgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tTnVtYmVyQ2hhbm5lbHMgPSBjaGFu
bmVsQ291bnQ7CisgICAgICAgIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSA9
IGJ5dGVzUGVyQ2hhbm5lbDsKKyAgICAgICAgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSA9
IGJ1ZmZlckRhdGE7CisgICAgICAgIGlmIChidWZmZXJEYXRhKQorICAgICAgICAgICAgYnVmZmVy
RGF0YSA9IGJ1ZmZlckRhdGEgKyBieXRlc1BlckNoYW5uZWw7CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJD
QVJpbmdCdWZmZXIuaCIKKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNp
bmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3Jp
cHRpb24gQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVl
QXVkaW9Db252ZXJ0ZXIqIEF1ZGlvQ29udmVydGVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXVkaW9TYW1wbGVC
dWZmZXJMaXN0PiBjcmVhdGUoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90
KTsKKworICAgIH5BdWRpb1NhbXBsZUJ1ZmZlckxpc3QoKTsKKworICAgIHN0YXRpYyB2b2lkIGNv
bmZpZ3VyZUJ1ZmZlckxpc3RGb3JTdHJlYW0oQXVkaW9CdWZmZXJMaXN0JiwgY29uc3QgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uJiwgdWludDhfdCosIHNpemVfdCk7CisgICAgc3RhdGljIGlubGlu
ZSBzaXplX3QgYXVkaW9CdWZmZXJMaXN0U2l6ZUZvclN0cmVhbShjb25zdCBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mKTsKKworICAgIHN0YXRpYyB2b2lkIGFwcGx5R2FpbihBdWRpb0J1ZmZlckxp
c3QmLCBmbG9hdCwgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6UENNRm9ybWF0KTsKKyAgICB2b2lk
IGFwcGx5R2FpbihmbG9hdCk7CisKKyAgICBPU1N0YXR1cyBjb3B5RnJvbShjb25zdCBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QmLCBzaXplX3QgY291bnQgPSBTSVpFX01BWCk7CisgICAgT1NTdGF0dXMg
Y29weUZyb20oQXVkaW9CdWZmZXJMaXN0JiwgQXVkaW9Db252ZXJ0ZXJSZWYpOworICAgIE9TU3Rh
dHVzIGNvcHlGcm9tKEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIEF1ZGlvQ29udmVydGVyUmVmKTsK
KyAgICBPU1N0YXR1cyBjb3B5RnJvbShDQVJpbmdCdWZmZXImLCBzaXplX3QgZnJhbWVDb3VudCwg
dWludDY0X3Qgc3RhcnRGcmFtZSwgQ0FSaW5nQnVmZmVyOjpGZXRjaE1vZGUpOworCisgICAgT1NT
dGF0dXMgbWl4RnJvbShjb25zdCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmLCBzaXplX3QgY291bnQg
PSBTSVpFX01BWCk7CisKKyAgICBPU1N0YXR1cyBjb3B5VG8oQXVkaW9CdWZmZXJMaXN0Jiwgc2l6
ZV90IGNvdW50ID0gU0laRV9NQVgpOworCisgICAgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uJiBzdHJlYW1EZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxGb3Jt
YXQtPnN0cmVhbURlc2NyaXB0aW9uKCk7IH0KKyAgICBBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlckxp
c3QoKSBjb25zdCB7IHJldHVybiAqbV9idWZmZXJMaXN0LmdldCgpOyB9CisKKyAgICB1aW50MzJf
dCBzYW1wbGVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlQ2FwYWNpdHk7IH0KKyAg
ICB1aW50MzJfdCBzYW1wbGVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlQ291bnQ7IH0K
KyAgICB2b2lkIHNldFNhbXBsZUNvdW50KHNpemVfdCk7CisKKyAgICB1aW50NjRfdCB0aW1lc3Rh
bXAoKSBjb25zdCB7IHJldHVybiBtX3RpbWVzdGFtcDsgfQorICAgIGRvdWJsZSBob3N0VGltZSgp
IGNvbnN0IHsgcmV0dXJuIG1faG9zdFRpbWU7IH0KKyAgICB2b2lkIHNldFRpbWVzKHVpbnQ2NF90
IHRpbWUsIGRvdWJsZSBob3N0VGltZSkgeyBtX3RpbWVzdGFtcCA9IHRpbWU7IG1faG9zdFRpbWUg
PSBob3N0VGltZTsgfQorCisgICAgdm9pZCByZXNldCgpOworCisgICAgc3RhdGljIHZvaWQgemVy
b0FCTChBdWRpb0J1ZmZlckxpc3QmLCBzaXplX3QpOworICAgIHZvaWQgemVybygpOworCitwcm90
ZWN0ZWQ6CisgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYsIHNpemVfdCk7CisKKyAgICBzdGF0aWMgT1NTdGF0dXMgYXVkaW9Db252ZXJ0ZXJD
YWxsYmFjayhBdWRpb0NvbnZlcnRlclJlZiwgVUludDMyKiwgQXVkaW9CdWZmZXJMaXN0KiwgQXVk
aW9TdHJlYW1QYWNrZXREZXNjcmlwdGlvbioqLCB2b2lkKik7CisgICAgT1NTdGF0dXMgY29udmVy
dElucHV0KFVJbnQzMiosIEF1ZGlvQnVmZmVyTGlzdCopOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9pbnRlcm5hbEZvcm1hdDsKKworICAgIEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdCogbV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlcjIgeyBudWxscHRyIH07Cisg
ICAgQXVkaW9CdWZmZXJMaXN0KiBtX2NvbnZlcnRlcklucHV0QnVmZmVyIHsgbnVsbHB0ciB9Owor
ICAgIHVpbnQzMl90IG1fY29udmVydGVySW5wdXRCeXRlc1BlclBhY2tldCB7IDAgfTsKKworICAg
IHVpbnQ2NF90IG1fdGltZXN0YW1wIHsgMCB9OworICAgIGRvdWJsZSBtX2hvc3RUaW1lIHsgLTEg
fTsKKyAgICBzaXplX3QgbV9zYW1wbGVDb3VudCB7IDAgfTsKKyAgICBzaXplX3QgbV9zYW1wbGVD
YXBhY2l0eSB7IDAgfTsKKyAgICBzaXplX3QgbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbCB7IDAg
fTsKKyAgICBzaXplX3QgbV9idWZmZXJMaXN0QmFzZVNpemUgeyAwIH07CisgICAgc3RkOjp1bmlx
dWVfcHRyPEF1ZGlvQnVmZmVyTGlzdD4gbV9idWZmZXJMaXN0OworfTsKKworaW5saW5lIHNpemVf
dCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oY29u
c3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICByZXR1cm4g
b2Zmc2V0b2YoQXVkaW9CdWZmZXJMaXN0LCBtQnVmZmVycykgKyAoc2l6ZW9mKEF1ZGlvQnVmZmVy
KSAqIHN0ZDo6bWF4PHVpbnQzMl90PigxLCBkZXNjcmlwdGlvbi5udW1iZXJPZkNoYW5uZWxTdHJl
YW1zKCkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9B
dWRpb1NhbXBsZURhdGFTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3Vy
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzM2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
KworI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkNBUmlu
Z0J1ZmZlci5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYVRpbWVBVkZv
dW5kYXRpb24uaCIKKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Db252ZXJ0ZXIuaD4KKyNp
bmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgorI2luY2x1
ZGUgPG11dGV4PgorI2luY2x1ZGUgPHN5c2xvZy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCisjaW5jbHVkZSAiQ29y
ZU1lZGlhU29mdExpbmsuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCitSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPiBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U6OmNyZWF0ZShzaXplX3QgbWF4aW11bVNhbXBsZUNvdW50KQoreworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZShtYXhpbXVtU2FtcGxlQ291bnQpKTsKK30K
KworQXVkaW9TYW1wbGVEYXRhU291cmNlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2Uoc2l6ZV90IG1h
eGltdW1TYW1wbGVDb3VudCkKKyAgICA6IG1faW5wdXRTYW1wbGVPZmZzZXQoTWVkaWFUaW1lOjpp
bnZhbGlkVGltZSgpKQorICAgICwgbV9tYXhpbXVtU2FtcGxlQ291bnQobWF4aW11bVNhbXBsZUNv
dW50KQoreworfQorCitBdWRpb1NhbXBsZURhdGFTb3VyY2U6On5BdWRpb1NhbXBsZURhdGFTb3Vy
Y2UoKQoreworICAgIG1faW5wdXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9vdXRwdXRE
ZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9yaW5nQnVmZmVyID0gbnVsbHB0cjsKKyAgICBp
ZiAobV9jb252ZXJ0ZXIpIHsKKyAgICAgICAgQXVkaW9Db252ZXJ0ZXJEaXNwb3NlKG1fY29udmVy
dGVyKTsKKyAgICAgICAgbV9jb252ZXJ0ZXIgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBB
dWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldFBhdXNlZChib29sIHBhdXNlZCkKK3sKKyAgICBzdGQ6
OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2xvY2spOworCisgICAgaWYgKHBhdXNlZCA9PSBtX3Bh
dXNlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90cmFuc2l0aW9uaW5nRnJvbVBhdXNlZCA9
IG1fcGF1c2VkOworICAgIG1fcGF1c2VkID0gcGF1c2VkOworfQorCitPU1N0YXR1cyBBdWRpb1Nh
bXBsZURhdGFTb3VyY2U6OnNldHVwQ29udmVydGVyKCkKK3sKKyAgICBBU1NFUlQobV9pbnB1dERl
c2NyaXB0aW9uICYmIG1fb3V0cHV0RGVzY3JpcHRpb24pOworCisgICAgaWYgKG1fY29udmVydGVy
KSB7CisgICAgICAgIEF1ZGlvQ29udmVydGVyRGlzcG9zZShtX2NvbnZlcnRlcik7CisgICAgICAg
IG1fY29udmVydGVyID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAoKm1faW5wdXREZXNjcmlw
dGlvbiA9PSAqbV9vdXRwdXREZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBP
U1N0YXR1cyBlcnIgPSBBdWRpb0NvbnZlcnRlck5ldygmbV9pbnB1dERlc2NyaXB0aW9uLT5zdHJl
YW1EZXNjcmlwdGlvbigpLCAmbV9vdXRwdXREZXNjcmlwdGlvbi0+c3RyZWFtRGVzY3JpcHRpb24o
KSwgJm1fY29udmVydGVyKTsKKyAgICBpZiAoZXJyKQorICAgICAgICBMT0dfRVJST1IoIkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6c2V0dXBDb252ZXJ0ZXIoJXApIC0gQXVkaW9Db252ZXJ0ZXJOZXcg
cmV0dXJuZWQgZXJyb3IgJWQgKCUuNHMpIiwgdGhpcywgZXJyLCAoY2hhciopJmVycik7CisKKyAg
ICByZXR1cm4gZXJyOworCit9CisKK09TU3RhdHVzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0
SW5wdXRGb3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQpCit7Cisg
ICAgQVNTRVJUKGZvcm1hdC5zYW1wbGVSYXRlKCkgPj0gMCk7CisKKyAgICBtX2lucHV0RGVzY3Jp
cHRpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4oZm9ybWF0
KTsKKyAgICBpZiAobV9vdXRwdXREZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuIHNldHVwQ29u
dmVydGVyKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRh
U291cmNlOjpzZXRPdXRwdXRGb3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBm
b3JtYXQpCit7CisgICAgQVNTRVJUKG1faW5wdXREZXNjcmlwdGlvbik7CisgICAgQVNTRVJUKGZv
cm1hdC5zYW1wbGVSYXRlKCkgPj0gMCk7CisKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0gc3Rk
OjptYWtlX3VuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KGZvcm1hdCk7CisgICAgaWYg
KCFtX3JpbmdCdWZmZXIpCisgICAgICAgIG1fcmluZ0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8
Q0FSaW5nQnVmZmVyPigpOworCisgICAgbV9yaW5nQnVmZmVyLT5hbGxvY2F0ZShmb3JtYXQsIHN0
YXRpY19jYXN0PHNpemVfdD4obV9tYXhpbXVtU2FtcGxlQ291bnQpKTsKKyAgICBtX3NjcmF0Y2hC
dWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZShtX291dHB1dERlc2NyaXB0aW9u
LT5zdHJlYW1EZXNjcmlwdGlvbigpLCBtX21heGltdW1TYW1wbGVDb3VudCk7CisKKyAgICByZXR1
cm4gc2V0dXBDb252ZXJ0ZXIoKTsKK30KKworTWVkaWFUaW1lIEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZTo6aG9zdFRpbWUoKSBjb25zdAoreworICAgIHN0YXRpYyBkb3VibGUgZnJlcXVlbmN5OworICAg
IHN0YXRpYyBtYWNoX3RpbWViYXNlX2luZm9fZGF0YV90IHRpbWViYXNlSW5mbzsKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVRpbWVyT25jZUZsYWc7CisgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZVRpbWVyT25jZUZsYWcsIFtdIHsKKyAgICAgICAga2Vybl9yZXR1cm5f
dCBrciA9IG1hY2hfdGltZWJhc2VfaW5mbygmdGltZWJhc2VJbmZvKTsKKyAgICAgICAgZnJlcXVl
bmN5ID0gMWUtOSAqIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLm51bWVyKSAvIHN0
YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLmRlbm9tKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChrciwga3IgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICAgICAgQVNTRVJUKHRpbWViYXNlSW5m
by5kZW5vbSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91
YmxlKG1hY2hfYWJzb2x1dGVfdGltZSgpICogZnJlcXVlbmN5KTsKK30KKwordm9pZCBBdWRpb1Nh
bXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzSW50ZXJuYWwoQXVkaW9CdWZmZXJMaXN0JiBidWZm
ZXJMaXN0LCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIHNpemVfdCBzYW1wbGVD
b3VudCkKK3sKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKworICAgIEF1ZGlvQnVmZmVy
TGlzdCogc2FtcGxlQnVmZmVyTGlzdDsKKyAgICBpZiAobV9jb252ZXJ0ZXIpIHsKKyAgICAgICAg
bV9zY3JhdGNoQnVmZmVyLT5yZXNldCgpOworICAgICAgICBPU1N0YXR1cyBlcnIgPSBtX3NjcmF0
Y2hCdWZmZXItPmNvcHlGcm9tKGJ1ZmZlckxpc3QsIG1fY29udmVydGVyKTsKKyAgICAgICAgaWYg
KGVycikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzYW1wbGVCdWZmZXJMaXN0ID0g
Jm1fc2NyYXRjaEJ1ZmZlci0+YnVmZmVyTGlzdCgpOworICAgIH0gZWxzZQorICAgICAgICBzYW1w
bGVCdWZmZXJMaXN0ID0gJmJ1ZmZlckxpc3Q7CisKKyAgICBNZWRpYVRpbWUgc2FtcGxlVGltZSA9
IHByZXNlbnRhdGlvblRpbWU7CisgICAgaWYgKG1faW5wdXRTYW1wbGVPZmZzZXQgPT0gTWVkaWFU
aW1lOjppbnZhbGlkVGltZSgpKSB7CisgICAgICAgIG1faW5wdXRTYW1wbGVPZmZzZXQgPSBNZWRp
YVRpbWUoMSAtIHNhbXBsZVRpbWUudGltZVZhbHVlKCksIHNhbXBsZVRpbWUudGltZVNjYWxlKCkp
OworICAgICAgICBpZiAobV9pbnB1dFNhbXBsZU9mZnNldC50aW1lU2NhbGUoKSAhPSBzYW1wbGVU
aW1lLnRpbWVTY2FsZSgpKQorICAgICAgICAgICAgbV9pbnB1dFNhbXBsZU9mZnNldCA9IHRvTWVk
aWFUaW1lKENNVGltZUNvbnZlcnRTY2FsZSh0b0NNVGltZShtX2lucHV0U2FtcGxlT2Zmc2V0KSwg
c2FtcGxlVGltZS50aW1lU2NhbGUoKSwga0NNVGltZVJvdW5kaW5nTWV0aG9kX0RlZmF1bHQpKTsK
KyAgICAgICAgTE9HKE1lZGlhQ2FwdHVyZVNhbXBsZXMsICJAQCBwdXNoU2FtcGxlczogaW5wdXQg
c2FtcGxlIG9mZnNldCBpcyAlbGxkLCBtX21heGltdW1TYW1wbGVDb3VudCA9ICV6dSIsIG1faW5w
dXRTYW1wbGVPZmZzZXQudGltZVZhbHVlKCksIG1fbWF4aW11bVNhbXBsZUNvdW50KTsKKyAgICB9
CisgICAgc2FtcGxlVGltZSArPSBtX2lucHV0U2FtcGxlT2Zmc2V0OworCisjaWYgIUxPR19ESVNB
QkxFRAorICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUxID0gMDsKKyAgICB1aW50NjRfdCBlbmRGcmFt
ZTEgPSAwOworICAgIG1fcmluZ0J1ZmZlci0+Z2V0Q3VycmVudEZyYW1lQm91bmRzKHN0YXJ0RnJh
bWUxLCBlbmRGcmFtZTEpOworI2VuZGlmCisKKyAgICBtX3JpbmdCdWZmZXItPnN0b3JlKHNhbXBs
ZUJ1ZmZlckxpc3QsIHNhbXBsZUNvdW50LCBzYW1wbGVUaW1lLnRpbWVWYWx1ZSgpKTsKKyAgICBt
X3RpbWVTdGFtcCA9IHNhbXBsZVRpbWUudGltZVZhbHVlKCk7CisKKyAgICBMT0coTWVkaWFDYXB0
dXJlU2FtcGxlcywgIkBAIHB1c2hTYW1wbGVzOiBhZGRlZCAlbGQgc2FtcGxlcyBmb3IgdGltZSA9
ICVzICh3YXMgJXMpLCBtYWNoIHRpbWUgPSAlbGxkIiwgc2FtcGxlQ291bnQsIHRvU3RyaW5nKHNh
bXBsZVRpbWUpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKHByZXNlbnRhdGlvblRpbWUpLnV0Zjgo
KS5kYXRhKCksIG1hY2hfYWJzb2x1dGVfdGltZSgpKTsKKworI2lmICFMT0dfRElTQUJMRUQKKyAg
ICB1aW50NjRfdCBzdGFydEZyYW1lMiA9IDA7CisgICAgdWludDY0X3QgZW5kRnJhbWUyID0gMDsK
KyAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydEZyYW1lMiwgZW5k
RnJhbWUyKTsKKyAgICBMT0coTWVkaWFDYXB0dXJlU2FtcGxlcywgIkBAIHB1c2hTYW1wbGVzOiBi
dWZmZXJlZCByYW5nZSB3YXMgWyVsbGQgLi4gJWxsZF0sIGlzIFslbGxkIC4uICVsbGRdIiwgc3Rh
cnRGcmFtZTEsIGVuZEZyYW1lMSwgc3RhcnRGcmFtZTIsIGVuZEZyYW1lMik7CisKKyNlbmRpZgor
fQorCit2b2lkIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXMoY29uc3QgQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzYW1wbGVEZXNjcmlwdGlvbiwgQ01TYW1wbGVCdWZmZXJS
ZWYgc2FtcGxlQnVmZmVyKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fbG9j
ayk7CisKKyAgICBBU1NFUlQoKm1faW5wdXREZXNjcmlwdGlvbiA9PSBzYW1wbGVEZXNjcmlwdGlv
bik7CisgICAgQVNTRVJUKG1fcmluZ0J1ZmZlcik7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXVkaW9CdWZmZXJMaXN0U2l6ZUZvclN0cmVhbSgqbV9p
bnB1dERlc2NyaXB0aW9uLmdldCgpKTsKKyAgICB1aW50OF90IGJ1ZmZlckRhdGFbYnVmZmVyU2l6
ZV07CisgICAgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxB
dWRpb0J1ZmZlckxpc3QqPihidWZmZXJEYXRhKTsKKyAgICBidWZmZXJMaXN0LT5tTnVtYmVyQnVm
ZmVycyA9IG1faW5wdXREZXNjcmlwdGlvbi0+bnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCk7
CisKKyAgICBDTUJsb2NrQnVmZmVyUmVmIGJ1ZmZlciA9IG51bGxwdHI7CisgICAgT1NTdGF0dXMg
ZXJyID0gQ01TYW1wbGVCdWZmZXJHZXRBdWRpb0J1ZmZlckxpc3RXaXRoUmV0YWluZWRCbG9ja0J1
ZmZlcihzYW1wbGVCdWZmZXIsIG51bGxwdHIsIGJ1ZmZlckxpc3QsIGJ1ZmZlclNpemUsIGtDRkFs
bG9jYXRvclN5c3RlbURlZmF1bHQsIGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIGtDTVNhbXBs
ZUJ1ZmZlckZsYWdfQXVkaW9CdWZmZXJMaXN0X0Fzc3VyZTE2Qnl0ZUFsaWdubWVudCwgJmJ1ZmZl
cik7CisgICAgaWYgKGVycikgeworICAgICAgICBMT0dfRVJST1IoIkF1ZGlvU2FtcGxlRGF0YVNv
dXJjZTo6cHVzaFNhbXBsZXMoJXApIC0gQ01TYW1wbGVCdWZmZXJHZXRBdWRpb0J1ZmZlckxpc3RX
aXRoUmV0YWluZWRCbG9ja0J1ZmZlciByZXR1cm5lZCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCBl
cnIsIChjaGFyKikmZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHB1c2hTYW1w
bGVzSW50ZXJuYWwoKmJ1ZmZlckxpc3QsIHRvTWVkaWFUaW1lKENNU2FtcGxlQnVmZmVyR2V0UHJl
c2VudGF0aW9uVGltZVN0YW1wKHNhbXBsZUJ1ZmZlcikpLCBDTVNhbXBsZUJ1ZmZlckdldE51bVNh
bXBsZXMoc2FtcGxlQnVmZmVyKSk7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpw
dXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHNhbXBsZURlc2Ny
aXB0aW9uLCBjb25zdCBNZWRpYVRpbWUmIHNhbXBsZVRpbWUsIHZvaWQqIGF1ZGlvRGF0YSwgc2l6
ZV90IHNhbXBsZUNvdW50KQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2xv
Y2ssIHN0ZDo6dHJ5X3RvX2xvY2spOworICAgIEFTU0VSVCgqbV9pbnB1dERlc2NyaXB0aW9uID09
IHNhbXBsZURlc2NyaXB0aW9uKTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbihzYW1wbGVEZXNjcmlwdGlvbik7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBBdWRp
b1NhbXBsZUJ1ZmZlckxpc3Q6OmF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oZGVzY3JpcHRp
b24pOworICAgIHVpbnQ4X3QgYnVmZmVyRGF0YVtidWZmZXJTaXplXTsKKyAgICBBdWRpb0J1ZmZl
ckxpc3QqIGJ1ZmZlckxpc3QgPSByZWludGVycHJldF9jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KGJ1
ZmZlckRhdGEpOworCisgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb25maWd1cmVCdWZmZXJM
aXN0Rm9yU3RyZWFtKCpidWZmZXJMaXN0LCBkZXNjcmlwdGlvbiwgcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oYXVkaW9EYXRhKSwgc2FtcGxlQ291bnQpOworICAgIHB1c2hTYW1wbGVzSW50ZXJu
YWwoKmJ1ZmZlckxpc3QsIHNhbXBsZVRpbWUsIHNhbXBsZUNvdW50KTsKK30KKworYm9vbCBBdWRp
b1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzSW50ZXJuYWwoQXVkaW9CdWZmZXJMaXN0JiBi
dWZmZXIsIHNpemVfdCYgc2FtcGxlQ291bnQsIHVpbnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIC8q
aG9zdFRpbWUqLywgUHVsbE1vZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgp
KTsKKworICAgIEFTU0VSVChidWZmZXIubU51bWJlckJ1ZmZlcnMgPT0gbV9yaW5nQnVmZmVyLT5j
aGFubmVsQ291bnQoKSk7CisgICAgaWYgKGJ1ZmZlci5tTnVtYmVyQnVmZmVycyAhPSBtX3JpbmdC
dWZmZXItPmNoYW5uZWxDb3VudCgpKSB7CisgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6
emVyb0FCTChidWZmZXIsIHNhbXBsZUNvdW50KTsKKyAgICAgICAgc2FtcGxlQ291bnQgPSAwOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3JpbmdCdWZmZXIgfHwg
bV9tdXRlZCB8fCBtX2lucHV0U2FtcGxlT2Zmc2V0ID09IE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KSkgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1w
bGVDb3VudCk7CisgICAgICAgIHNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUgPSAwOworICAgIHVpbnQ2NF90IGVu
ZEZyYW1lID0gMDsKKyAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFy
dEZyYW1lLCBlbmRGcmFtZSk7CisKKyAgICBpZiAobV90cmFuc2l0aW9uaW5nRnJvbVBhdXNlZCkg
eworICAgICAgICB1aW50NjRfdCBidWZmZXJlZCA9IGVuZEZyYW1lIC0gbV90aW1lU3RhbXA7Cisg
ICAgICAgIGlmIChidWZmZXJlZCA8IHNhbXBsZUNvdW50ICogMikgeworICAgICAgICAgICAgQXVk
aW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgc2FtcGxlQ291bnQpOworICAgICAg
ICAgICAgc2FtcGxlQ291bnQgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgY29uc3QgZG91YmxlIHR3ZW50eU1TID0gLjAyOworICAgICAgICBjb25z
dCBkb3VibGUgdGVuTVMgPSAuMDE7CisgICAgICAgIGNvbnN0IGRvdWJsZSBmaXZlTVMgPSAuMDA1
OworICAgICAgICBkb3VibGUgc2FtcGxlUmF0ZSA9IG1fb3V0cHV0RGVzY3JpcHRpb24tPnNhbXBs
ZVJhdGUoKTsKKyAgICAgICAgaWYgKGJ1ZmZlcmVkID4gc2FtcGxlUmF0ZSAqIHR3ZW50eU1TKQor
ICAgICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQgPSBtX3RpbWVTdGFtcCAtIHNhbXBsZVJh
dGUgKiB0d2VudHlNUzsKKyAgICAgICAgZWxzZSBpZiAoYnVmZmVyZWQgPiBzYW1wbGVSYXRlICog
dGVuTVMpCisgICAgICAgICAgICBtX291dHB1dFNhbXBsZU9mZnNldCA9IG1fdGltZVN0YW1wIC0g
c2FtcGxlUmF0ZSAqIHRlbk1TOworICAgICAgICBlbHNlIGlmIChidWZmZXJlZCA+IHNhbXBsZVJh
dGUgKiBmaXZlTVMpCisgICAgICAgICAgICBtX291dHB1dFNhbXBsZU9mZnNldCA9IG1fdGltZVN0
YW1wIC0gc2FtcGxlUmF0ZSAqIGZpdmVNUzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9v
dXRwdXRTYW1wbGVPZmZzZXQgPSBtX3RpbWVTdGFtcDsKKworICAgICAgICBtX3RyYW5zaXRpb25p
bmdGcm9tUGF1c2VkID0gZmFsc2U7CisgICAgfQorCisgICAgdGltZVN0YW1wICs9IG1fb3V0cHV0
U2FtcGxlT2Zmc2V0OworCisgICAgTE9HKE1lZGlhQ2FwdHVyZVNhbXBsZXMsICIqKiBwdWxsU2Ft
cGxlczogYXNraW5nIGZvciAlbGQgc2FtcGxlcyBhdCB0aW1lID0gJWxsZCAod2FzICVsbGQpIiwg
c2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgdGltZVN0YW1wIC0gbV9vdXRwdXRTYW1wbGVPZmZzZXQp
OworCisgICAgaW50NjRfdCBmcmFtZXNBdmFpbGFibGUgPSBzYW1wbGVDb3VudDsKKyAgICBpZiAo
dGltZVN0YW1wIDwgc3RhcnRGcmFtZSB8fCB0aW1lU3RhbXAgKyBzYW1wbGVDb3VudCA+IGVuZEZy
YW1lKSB7CisgICAgICAgIGlmICh0aW1lU3RhbXAgKyBzYW1wbGVDb3VudCA8IHN0YXJ0RnJhbWUg
fHwgdGltZVN0YW1wID4gZW5kRnJhbWUpCisgICAgICAgICAgICBmcmFtZXNBdmFpbGFibGUgPSAw
OworICAgICAgICBlbHNlIGlmICh0aW1lU3RhbXAgPCBzdGFydEZyYW1lKQorICAgICAgICAgICAg
ZnJhbWVzQXZhaWxhYmxlID0gdGltZVN0YW1wICsgc2FtcGxlQ291bnQgLSBzdGFydEZyYW1lOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmcmFtZXNBdmFpbGFibGUgPSB0aW1lU3RhbXAgKyBz
YW1wbGVDb3VudCAtIGVuZEZyYW1lOworCisgICAgICAgIExPRyhNZWRpYUNhcHR1cmVTYW1wbGVz
LCAiKiogcHVsbFNhbXBsZXNJbnRlcm5hbDogc2FtcGxlICVsbGQgaXMgbm90IGNvbXBsZXRlbHkg
aW4gcmFuZ2UgWyVsbGQgLi4gJWxsZF0sIHJldHVybmluZyAlbGxkIGZyYW1lcyIsIHRpbWVTdGFt
cCwgc3RhcnRGcmFtZSwgZW5kRnJhbWUsIGZyYW1lc0F2YWlsYWJsZSk7CisKKyAgICAgICAgaWYg
KCFmcmFtZXNBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6
emVyb0FCTChidWZmZXIsIHNhbXBsZUNvdW50KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3ZvbHVtZSA+PSAuOTUpIHsKKyAgICAgICAg
bV9yaW5nQnVmZmVyLT5mZXRjaCgmYnVmZmVyLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBtb2Rl
ID09IENvcHkgPyBDQVJpbmdCdWZmZXI6OkNvcHkgOiBDQVJpbmdCdWZmZXI6Ok1peCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtX3NjcmF0Y2hCdWZmZXItPmNvcHlG
cm9tKCptX3JpbmdCdWZmZXIuZ2V0KCksIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIG1vZGUgPT0g
Q29weSA/IENBUmluZ0J1ZmZlcjo6Q29weSA6IENBUmluZ0J1ZmZlcjo6TWl4KSkgeworICAgICAg
ICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtX3NjcmF0Y2hCdWZmZXItPmFwcGx5
R2FpbihtX3ZvbHVtZSk7CisgICAgaWYgKG1fc2NyYXRjaEJ1ZmZlci0+Y29weVRvKGJ1ZmZlciwg
c2FtcGxlQ291bnQpKQorICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVm
ZmVyLCBzYW1wbGVDb3VudCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBdWRpb1Nh
bXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXpl
X3Qgc2FtcGxlQ291bnQsIHVpbnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIGhvc3RUaW1lLCBQdWxs
TW9kZSBtb2RlKQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2xvY2ssIHN0
ZDo6dHJ5X3RvX2xvY2spOworICAgIGlmICghbG9jay5vd25zX2xvY2soKSB8fCAhbV9yaW5nQnVm
ZmVyKSB7CisgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIHNh
bXBsZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBw
dWxsU2FtcGxlc0ludGVybmFsKGJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgaG9zdFRp
bWUsIG1vZGUpOworfQorCitib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXMo
QXVkaW9TYW1wbGVCdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudCwgdWludDY0
X3QgdGltZVN0YW1wLCBkb3VibGUgaG9zdFRpbWUsIFB1bGxNb2RlIG1vZGUpCit7CisgICAgc3Rk
Ojp1bmlxdWVfbG9jazxMb2NrPiBsb2NrKG1fbG9jaywgc3RkOjp0cnlfdG9fbG9jayk7CisgICAg
aWYgKCFsb2NrLm93bnNfbG9jaygpIHx8ICFtX3JpbmdCdWZmZXIpIHsKKyAgICAgICAgYnVmZmVy
Lnplcm8oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcHVsbFNh
bXBsZXNJbnRlcm5hbChidWZmZXIuYnVmZmVyTGlzdCgpLCBzYW1wbGVDb3VudCwgdGltZVN0YW1w
LCBob3N0VGltZSwgbW9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJ1ZmZlci5z
ZXRUaW1lcyh0aW1lU3RhbXAsIGhvc3RUaW1lKTsKKyAgICBidWZmZXIuc2V0U2FtcGxlQ291bnQo
c2FtcGxlQ291bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNv
dXJjZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21h
Yy9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvU2FtcGxl
QnVmZmVyTGlzdC5oIgorI2luY2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1h
dERlc2NyaXB0aW9uICpDTUZvcm1hdERlc2NyaXB0aW9uUmVmOwordHlwZWRlZiBzdHJ1Y3Qgb3Bh
cXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxlQnVmZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKK2NsYXNzIENBUmluZ0J1ZmZl
cjsKKworY2xhc3MgQXVkaW9TYW1wbGVEYXRhU291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8QXVk
aW9TYW1wbGVEYXRhU291cmNlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBdWRpb1NhbXBs
ZURhdGFTb3VyY2U+IGNyZWF0ZShzaXplX3QpOworCisgICAgfkF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZSgpOworCisgICAgT1NTdGF0dXMgc2V0SW5wdXRGb3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uJik7CisgICAgT1NTdGF0dXMgc2V0T3V0cHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiYpOworCisgICAgdm9pZCBwdXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0
cmVhbUJhc2ljRGVzY3JpcHRpb24mLCBjb25zdCBNZWRpYVRpbWUmLCB2b2lkKiwgc2l6ZV90KTsK
KyAgICB2b2lkIHB1c2hTYW1wbGVzKGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYs
IENNU2FtcGxlQnVmZmVyUmVmKTsKKworICAgIGVudW0gUHVsbE1vZGUgeyBDb3B5LCBNaXggfTsK
KyAgICBib29sIHB1bGxTYW1wbGVzKEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCwgdWlu
dDY0X3QsIGRvdWJsZSwgUHVsbE1vZGUpOworICAgIGJvb2wgcHVsbFNhbXBsZXMoQXVkaW9CdWZm
ZXJMaXN0Jiwgc2l6ZV90LCB1aW50NjRfdCwgZG91YmxlLCBQdWxsTW9kZSk7CisKKyAgICB2b2lk
IHNldFBhdXNlZChib29sKTsKKworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkgeyBt
X3ZvbHVtZSA9IHZvbHVtZTsgfQorICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dm9sdW1lOyB9CisKKyAgICB2b2lkIHNldE11dGVkKGJvb2wgbXV0ZWQpIHsgbV9tdXRlZCA9IG11
dGVkOyB9CisgICAgYm9vbCBtdXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0ZWQ7IH0KKworcHJv
dGVjdGVkOgorICAgIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZShzaXplX3QpOworCisgICAgT1NTdGF0
dXMgc2V0dXBDb252ZXJ0ZXIoKTsKKyAgICBib29sIHB1bGxTYW1wbGVzSW50ZXJuYWwoQXVkaW9C
dWZmZXJMaXN0Jiwgc2l6ZV90JiwgdWludDY0X3QsIGRvdWJsZSwgUHVsbE1vZGUpOworCisgICAg
dm9pZCBwdXNoU2FtcGxlc0ludGVybmFsKEF1ZGlvQnVmZmVyTGlzdCYsIGNvbnN0IE1lZGlhVGlt
ZSYsIHNpemVfdCBmcmFtZUNvdW50KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24+IG1faW5wdXREZXNjcmlwdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX291dHB1dERlc2NyaXB0aW9uOworCisgICAgTWVk
aWFUaW1lIGhvc3RUaW1lKCkgY29uc3Q7CisKKyAgICB1aW50NjRfdCBtX3RpbWVTdGFtcCB7IDAg
fTsKKyAgICBkb3VibGUgbV9ob3N0VGltZSB7IC0xIH07CisKKyAgICBNZWRpYVRpbWUgbV9pbnB1
dFNhbXBsZU9mZnNldDsKKyAgICB1aW50NjRfdCBtX291dHB1dFNhbXBsZU9mZnNldCB7IDAgfTsK
KworICAgIEF1ZGlvQ29udmVydGVyUmVmIG1fY29udmVydGVyOworICAgIFJlZlB0cjxBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3Q+IG1fc2NyYXRjaEJ1ZmZlcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxD
QVJpbmdCdWZmZXI+IG1fcmluZ0J1ZmZlcjsKKyAgICBzaXplX3QgbV9tYXhpbXVtU2FtcGxlQ291
bnQgeyAwIH07CisKKyAgICBMb2NrIG1fbG9jazsKKyAgICBmbG9hdCBtX3ZvbHVtZSB7IDEuMCB9
OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3BhdXNlZCB7IHRydWUg
fTsKKyAgICBib29sIG1fdHJhbnNpdGlvbmluZ0Zyb21QYXVzZWQgeyB0cnVlIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQo=
</data>
<flag name="review"
          id="322318"
          type_id="1"
          status="+"
          setter="jer.noble"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300429</attachid>
            <date>2017-02-02 12:02:13 -0800</date>
            <delta_ts>2017-02-02 13:28:16 -0800</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>audio_buffers_patch_4.txt</filename>
            <type>text/plain</type>
            <size>47436</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTU2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE3LTAyLTAyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIEFkZCBjbGFz
c2VzIHRvIG1hbmFnZSBhdWRpbyBzYW1wbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3MzkKKworICAgICAgICBSZXZpZXdlZCBieSBKZXIgTm9i
bGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGNvZGUgaXNuJ3QgdXNlZCB5ZXQuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp+QXVkaW9TYW1wbGVCdWZm
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2V0U2Ft
cGxlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphcHBs
eUdhaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9t
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29weUZyb20pOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5VG8pOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm8pOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6Y29udmVydElucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6YXVkaW9Db252ZXJ0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvbmZpZ3VyZUJ1ZmZlckxpc3RGb3JTdHJlYW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnN0cmVhbURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YnVmZmVy
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnNhbXBsZUNh
cGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2FtcGxl
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp0aW1lc3Rh
bXApOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpob3N0VGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnNldFRpbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXVkaW9CdWZmZXJMaXN0U2l6
ZUZvclN0cmVhbSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0
YVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291
cmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRh
U291cmNlOjp+QXVkaW9TYW1wbGVEYXRhU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6c2V0UGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZTo6c2V0dXBDb252ZXJ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9T
YW1wbGVEYXRhU291cmNlOjpzZXRJbnB1dEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1NhbXBsZURhdGFTb3VyY2U6OnNldE91dHB1dEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6Omhvc3RUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRWb2x1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjp2b2x1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6Om11dGVkKToKKwogMjAxNy0wMi0wMiAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29sdW1uIHByb2dyZXNzaW9uIHdyb25n
IGFmdGVyIGVuYWJsaW5nIHBhZ2luYXRpb24gb24gUlRMIGRvY3VtZW50CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMTE1NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsMTAgQEAKIAkJMDczNzk0RkUxOUY1
ODY0RTAwRTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mzc5NEY4MTlGNTg2NEUwMEU1QTA0NSAvKiBSVENO
b3RpZmllcnNNb2NrLmggKi87IH07CiAJCTA3Mzk0RUM4MUJBQjJDQ0QwMEJFOTlDRCAvKiBNZWRp
YURldmljZXNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3Mzk0RUM3MUJBQjJDQ0QwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0
LmNwcCAqLzsgfTsKIAkJMDczOTRFQ0ExQkFCMkNENzAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1Jl
cXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
Mzk0RUM5MUJBQjJDRDcwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDczQjg3NjYxRTQzODVB
QzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMgLyog
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCAqLzsgfTsKKwkJMDczQjg3NjcxRTQzODVBQzAwNzFD
MEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NjMxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdC5oICovOyB9OworCQkwNzNCODc2ODFFNDM4NUFDMDA3MUMwRUMgLyogQXVk
aW9TYW1wbGVEYXRhU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3M0I4NzY0MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFT
b3VyY2UuY3BwICovOyB9OworCQkwNzNCODc2OTFFNDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1w
bGVEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzNCODc2NTFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmgg
Ki87IH07CiAJCTA3M0JFMzQwMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRp
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNC
RTMzRTE3RDE3RTAxMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWEuY3BwICovOyB9Owog
CQkwNzNCRTM0MTE3RDE3RTAxMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3M0JFMzNGMTdEMTdF
MDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3M0JFMzRFMTdEMTgwQjIwMDJCRDQzMSAv
KiBSVENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQkFCMTdDRjBBRDQwMDg0OEU1MSAvKiBS
VENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcCAqLzsgfTsKQEAgLTcyMzMsNiArNzIz
NywxMCBAQAogCQkwNzNCODc1NjFFNDBEQ0U1MDA3MUMwRUMgLyogQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3M0I4NzU3MUU0MERDRkQw
MDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQjg3NTgxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDczQjg3NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzNCODc2MzFFNDM4NTlEMDA3MUMw
RUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwNzNCODc2NDFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3M0I4NzY1MUU0Mzg1OUQw
MDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXVkaW9TYW1wbGVEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3M0JFMzNFMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRp
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05hdmlnYXRvclVz
ZXJNZWRpYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3M0JFMzNGMTdEMTdF
MDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU05hdmlnYXRvclVzZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwNzQ0RUNFQjFFMEM0QUU1MDAwRDA5NDQgLyogTW9ja1JlYWx0aW1lQXVkaW9T
b3VyY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1JlYWx0aW1l
QXVkaW9Tb3VyY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0ODE1LDcg
KzI0ODIzLDYgQEAKIAkJRkQzMTYwNDAxMkIwMjZBMzAwQzFBMzU5IC8qIGF1ZGlvICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwNzNCODc1NjFFNDBEQ0U1
MDA3MUMwRUMgLyogQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oICovLAogCQkJCUNENjY5RDY1MUQy
MzJERjQwMDREMTg2NiAvKiBjb2NvYSAqLywKIAkJCQlDRDBFRUUwRDE0NzQzRTQ4MDAzRUFGQTIg
LyogaW9zICovLAogCQkJCUZEMzE2MEIwMTJCMDI3MDcwMEMxQTM1OSAvKiBtYWMgKi8sCkBAIC0y
NDg0Miw2ICsyNDg0OSw3IEBACiAJCQkJQ0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlv
U2Vzc2lvbi5oICovLAogCQkJCUZEMzE2MDUzMTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRpb1NvdXJj
ZVByb3ZpZGVyLmggKi8sCiAJCQkJRkQ2MkY1MkQxNDU4OThEODAwOTRCMEVEIC8qIEF1ZGlvU291
cmNlUHJvdmlkZXJDbGllbnQuaCAqLywKKwkJCQkwNzNCODc1NjFFNDBEQ0U1MDA3MUMwRUMgLyog
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oICovLAogCQkJCUZEMzE2MDU0MTJCMDI2RjcwMEMxQTM1
OSAvKiBBdWRpb1V0aWxpdGllcy5jcHAgKi8sCiAJCQkJRkQzMTYwNTUxMkIwMjZGNzAwQzFBMzU5
IC8qIEF1ZGlvVXRpbGl0aWVzLmggKi8sCiAJCQkJRkQzMTYwNTYxMkIwMjZGNzAwQzFBMzU5IC8q
IEJpcXVhZC5jcHAgKi8sCkBAIC0yNDkwOCw2ICsyNDkxNiwxMCBAQAogCQlGRDMxNjBCMDEyQjAy
NzA3MDBDMUEzNTkgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJM
aXN0LmNwcCAqLywKKwkJCQkwNzNCODc2MzFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmggKi8sCisJCQkJMDczQjg3NjQxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZS5jcHAgKi8sCisJCQkJMDczQjg3NjUxRTQzODU5RDAwNzFDMEVDIC8qIEF1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oICovLAogCQkJCUZEMzE2MEI1MTJCMDI3MkEwMEMxQTM1OSAv
KiBBdWRpb0J1c01hYy5tbSAqLywKIAkJCQlGRDMxNjBCNjEyQjAyNzJBMDBDMUEzNTkgLyogQXVk
aW9EZXN0aW5hdGlvbk1hYy5jcHAgKi8sCiAJCQkJRkQzMTYwQjcxMkIwMjcyQTAwQzFBMzU5IC8q
IEF1ZGlvRGVzdGluYXRpb25NYWMuaCAqLywKQEAgLTI1NDcyLDYgKzI1NDg0LDcgQEAKIAkJCQky
RDhGRUJERDE0M0UzRUY3MDA3MjUwMkIgLyogQ1NTQ3Jvc3NmYWRlVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDQ0Q0JFNDFEODg2MTk5MDA3M0EwNzQgLyogQ1NTQ3Vz
dG9tSWRlbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDczQjg3NjkxRTQzODVBQzAwNzFD
MEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzlF
MTQxQkIyMTVCQjAwQ0FBOEJGIC8qIENTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBOUNDODE4MTZCQjlBQzYwMEVDNjQ1QSAvKiBDU1NEZWZhdWx0U3R5bGVTaGVl
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0NDc2QkRCMURGQ0FDMDMwMDY5MEUyMyAvKiBDU1NE
ZWZlcnJlZFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjY1Myw2ICsyNjY2Niw3IEBACiAJ
CQkJNkM0Qzk2REYxQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M0Qzk2REQxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
UmVhZGFibGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTA3M0I4NzY3MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDNEM5NkRGMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRh
YmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEyOURGODYxQkI1
QjgwQzAwMzIyQTE2IC8qIEpTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3RTRDOTZERDFBRDQ0ODM1MDAzNjVBNTEgLyogSlNSZWFkYWJsZVN0
cmVhbVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODMzOSw3ICsyODM1Myw2IEBACiAJCQkJ
QkU5MTNEODAxODFFRjkyNDAwRENCMDlFIC8qIFRyYWNrUHJpdmF0ZUJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZGQUMzMEZFMTg0RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNjA3MTMyMUJEODMwOEIwMERCQzRGMiAvKiBUcmFuc2FjdGlv
bk9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDdDMDQ2QzIxRTQyNTAyMjAwNzIwMUU3
IC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQzQw
RUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmggaW4gSGVhZGVycyAqLywK
IAkJCQlGQjQ4NEY0RDE3MUY4MjFFMDAwNDA3NTUgLyogVHJhbnNmb3JtRnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0OUU5MTFDRTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI5OTI0LDYgKzI5OTM3LDcgQEAKIAkJCQk1MUY3
OThFRjFCRTg4MEU3MDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxRTI2OTM2MUREM0JEOTcwMDZCNkE1OCAvKiBJREJJdGVyYXRlQ3Vyc29yRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM5NDFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTA3M0I4NzY2MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDOTYxQkI0QzRFODAw
MTI4OThGIC8qIElEQktleURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDOTgxQkI0
QzRFODAwMTI4OThGIC8qIElEQktleVBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZD
OUExQkI0QzRFODAwMTI4OThGIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Mjk5MzIsNiArMjk5NDYsNyBAQAogCQkJCTUxNjA3MTJFMUJEODMwNzgwMERCQzRGMiAvKiBJREJP
YmplY3RTdG9yZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDQTMxQkI0QzRFODAw
MTI4OThGIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZD
QTgxQkI0QzRFODAwMTI4OThGIC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MDczQjg3NjgxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTQxMjk5ODFDNjk3NjkwMDA1OUU3MTQgLyogSURCUmVxdWVzdENv
bXBsZXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTBBNThGOTFCQUNDN0YyMDBD
MTkyODIgLyogSURCUmVxdWVzdERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0NUIxMDkx
QkM0OEUyRTAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTMwNDQ3LDcgKzMwNDYyLDYgQEAKIAkJCQlFMTI4NEJCMjEwNDQ5RkZBMDBFQUVCNTIg
LyogSlNQYWdlVHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUIx
MTJCMDNFRTEwMDNBNTgzQSAvKiBKU1Bhbm5lck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTUxQTgxREYxNzI5OEQ3NzAwQkZDQTYxIC8qIEpTUGVyZm9ybWFuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMDdDMDQ2QzExRTQyNTAyMjAwNzIwMUU3IC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDQjM4RkQ1MTFDQ0Y5Mzg5MDA1OTJBM0YgLyogSlNQ
ZXJmb3JtYW5jZUVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNCMzhGRDU3MUNEMjFFMkEw
MDU5MkEzRiAvKiBKU1BlcmZvcm1hbmNlRW50cnlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTU4QzU5RDAxRTM4MkVBQzAwNDc4NTlDIC8qIEpTUGVyZm9ybWFuY2VNYXJrLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKKyNpbmNsdWRlIDxB
Y2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Db252
ZXJ0ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgVmVjdG9y
TWF0aDsKKworUmVmPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OjpjcmVhdGUoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQsIHNpemVfdCBt
YXhpbXVtU2FtcGxlQ291bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0KGZvcm1hdCwgbWF4aW11bVNhbXBsZUNvdW50KSk7Cit9CisKK0F1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0KGNvbnN0IENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiYgZm9ybWF0LCBzaXplX3QgbWF4aW11bVNhbXBsZUNvdW50KQoreworICAgIG1f
aW50ZXJuYWxGb3JtYXQgPSBzdGQ6Om1ha2VfdW5pcXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bj4oZm9ybWF0KTsKKworICAgIG1fc2FtcGxlQ2FwYWNpdHkgPSBtYXhpbXVtU2FtcGxlQ291bnQ7
CisgICAgbV9zYW1wbGVDb3VudCA9IDA7CisgICAgbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbCA9
IG1heGltdW1TYW1wbGVDb3VudCAqIGZvcm1hdC5ieXRlc1BlckZyYW1lKCkgLyBmb3JtYXQubnVt
YmVyT2ZDaGFubmVsU3RyZWFtcygpOworCisgICAgQVNTRVJUKGZvcm1hdC5zYW1wbGVSYXRlKCkg
Pj0gMCk7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IGZvcm1hdC5udW1iZXJPZkNoYW5uZWxT
dHJlYW1zKCkgKiBtX21heEJ1ZmZlclNpemVQZXJDaGFubmVsOworICAgIEFTU0VSVChidWZmZXJT
aXplIDw9IFNJWkVfTUFYKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSA+IFNJWkVfTUFYKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2J1ZmZlckxpc3RCYXNlU2l6ZSA9IGF1ZGlvQnVmZmVyTGlzdFNp
emVGb3JTdHJlYW0oZm9ybWF0KTsKKyAgICBBU1NFUlQobV9idWZmZXJMaXN0QmFzZVNpemUgPD0g
U0laRV9NQVgpOworICAgIGlmIChtX2J1ZmZlckxpc3RCYXNlU2l6ZSA+IFNJWkVfTUFYKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzaXplX3QgYWxsb2NTaXplID0gbV9idWZmZXJMaXN0QmFzZVNp
emUgKyBidWZmZXJTaXplOworICAgIG1fYnVmZmVyTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxBdWRp
b0J1ZmZlckxpc3Q+KHN0YXRpY19jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KDo6b3BlcmF0b3IgbmV3
IChhbGxvY1NpemUpKSk7CisKKyAgICByZXNldCgpOworfQorCitBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6On5BdWRpb1NhbXBsZUJ1ZmZlckxpc3QoKQoreworICAgIG1faW50ZXJuYWxGb3JtYXQgPSBu
dWxscHRyOworICAgIG1fYnVmZmVyTGlzdCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0OjpzZXRTYW1wbGVDb3VudChzaXplX3QgY291bnQpCit7CisgICAgQVNTRVJU
KGNvdW50IDw9IG1fc2FtcGxlQ2FwYWNpdHkpOworICAgIGlmIChjb3VudCA8PSBtX3NhbXBsZUNh
cGFjaXR5KQorICAgICAgICBtX3NhbXBsZUNvdW50ID0gY291bnQ7Cit9CisKK3ZvaWQgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0OjphcHBseUdhaW4oQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0LCBm
bG9hdCBnYWluLCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0KQorewor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzOyAr
K2kpIHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjpJbnQxNjogeworICAgICAgICAgICAgaW50MTZfdCogYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8aW50MTZfdCo+KGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAg
ICAgICAgaW50IGZyYW1lQ291bnQgPSBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNp
emUgLyBzaXplb2YoaW50MTZfdCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZy
YW1lQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gKj0gZ2FpbjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6SW50MzI6IHsKKyAgICAgICAgICAgIGludDMyX3QqIGJ1ZmZlciA9IHN0YXRpY19jYXN0
PGludDMyX3QqPihidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgICAgIGlu
dCBmcmFtZUNvdW50ID0gYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6
ZW9mKGludDMyX3QpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZUNvdW50
OyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldICo9IGdhaW47CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjo6RmxvYXQzMjogeworICAgICAgICAgICAgZmxvYXQqIGJ1ZmZlciA9
IHN0YXRpY19jYXN0PGZsb2F0Kj4oYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAg
ICAgICAgICB2RFNQX3ZzbXVsKGJ1ZmZlciwgMSwgJmdhaW4sIGJ1ZmZlciwgMSwgYnVmZmVyTGlz
dC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246
OkZsb2F0NjQ6IHsKKyAgICAgICAgICAgIGRvdWJsZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8ZG91
YmxlKj4oYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICBkb3VibGUg
Z2FpbkFzRG91YmxlID0gZ2FpbjsKKyAgICAgICAgICAgIHZEU1BfdnNtdWxEKGJ1ZmZlciwgMSwg
JmdhaW5Bc0RvdWJsZSwgYnVmZmVyLCAxLCBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0
ZVNpemUgLyBzaXplb2YoZG91YmxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlHYWluKGZsb2F0IGdhaW4p
Cit7CisgICAgYXBwbHlHYWluKCptX2J1ZmZlckxpc3QsIGdhaW4sIG1faW50ZXJuYWxGb3JtYXQt
PmZvcm1hdCgpKTsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9t
KGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkK
K3sKKyAgICBBU1NFUlQoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgPT0gc3RyZWFtRGVzY3Jp
cHRpb24oKSk7CisKKyAgICBpZiAoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgIT0gc3RyZWFt
RGVzY3JpcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAg
aWYgKGZyYW1lQ291bnQgPiBzb3VyY2Uuc2FtcGxlQ291bnQoKSkKKyAgICAgICAgZnJhbWVDb3Vu
dCA9IHNvdXJjZS5zYW1wbGVDb3VudCgpOworCisgICAgaWYgKGZyYW1lQ291bnQgPiBtX3NhbXBs
ZUNhcGFjaXR5KQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBtX3Nh
bXBsZUNvdW50ID0gZnJhbWVDb3VudDsKKworICAgIEF1ZGlvQnVmZmVyTGlzdCYgc291cmNlQnVm
ZmVyID0gc291cmNlLmJ1ZmZlckxpc3QoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bV9idWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVyczsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAobV9p
bnRlcm5hbEZvcm1hdC0+Zm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOjpJbnQxNjogeworICAgICAgICAgICAgaW50MTZfdCogZGVzdGluYXRpb24gPSBzdGF0
aWNfY2FzdDxpbnQxNl90Kj4obV9idWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAg
ICAgICAgICBpbnQxNl90KiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oc291cmNlQnVm
ZmVyLm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZnJhbWVDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldICs9IHNv
dXJjZVtpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MzI6IHsKKyAgICAgICAgICAgIGludDMyX3QqIGRlc3Rp
bmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MzJfdCo+KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0u
bURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkaShkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnBy
ZXRfY2FzdDxpbnQzMl90Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVz
dGluYXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDMyOiB7CisgICAgICAg
ICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KG1fYnVmZmVyTGlz
dC0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0aW9u
LCAxLCByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1E
YXRhKSwgMSwgZGVzdGluYXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDY0
OiB7CisgICAgICAgICAgICBkb3VibGUqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91Ymxl
Kj4obV9idWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3Zh
ZGREKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KHNvdXJjZUJ1ZmZl
ci5tQnVmZmVyc1tpXS5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjo6Tm9uZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NT
dGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShjb25zdCBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3QmIHNvdXJjZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgQVNTRVJUKHNvdXJj
ZS5zdHJlYW1EZXNjcmlwdGlvbigpID09IHN0cmVhbURlc2NyaXB0aW9uKCkpOworCisgICAgaWYg
KHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpICE9IHN0cmVhbURlc2NyaXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIGlmIChmcmFtZUNvdW50ID4gc291
cmNlLnNhbXBsZUNvdW50KCkpCisgICAgICAgIGZyYW1lQ291bnQgPSBzb3VyY2Uuc2FtcGxlQ291
bnQoKTsKKworICAgIGlmIChmcmFtZUNvdW50ID4gbV9zYW1wbGVDYXBhY2l0eSkKKyAgICAgICAg
cmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgbV9zYW1wbGVDb3VudCA9IGZyYW1lQ291
bnQ7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5tTnVtYmVy
QnVmZmVyczsgaSsrKSB7CisgICAgICAgIHVpbnQ4X3QqIHNvdXJjZURhdGEgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oc291cmNlLmJ1ZmZlckxpc3QoKS5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAg
ICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYnVmZmVy
TGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNv
dXJjZURhdGEsIGZyYW1lQ291bnQgKiBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBhY2tldCgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0Ojpjb3B5VG8oQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBmcmFtZUNvdW50
KQoreworICAgIGlmIChmcmFtZUNvdW50ID4gbV9zYW1wbGVDb3VudCkKKyAgICAgICAgcmV0dXJu
IGtBdWRpb19QYXJhbUVycm9yOworICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZlcnMgPiBtX2J1
ZmZlckxpc3QtPm1OdW1iZXJCdWZmZXJzKQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJy
b3I7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVyLm1OdW1iZXJCdWZmZXJz
OyBpKyspIHsKKyAgICAgICAgdWludDhfdCogc291cmNlRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihtX2J1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgdWludDhfdCog
ZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyLm1CdWZmZXJzW2ldLm1E
YXRhKTsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2VEYXRhLCBmcmFtZUNvdW50
ICogbV9pbnRlcm5hbEZvcm1hdC0+Ynl0ZXNQZXJQYWNrZXQoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZXNldCgpCit7CisgICAg
bV9zYW1wbGVDb3VudCA9IDA7CisgICAgbV90aW1lc3RhbXAgPSAwOworICAgIG1faG9zdFRpbWUg
PSAtMTsKKworICAgIHVpbnQ4X3QqIGRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPiht
X2J1ZmZlckxpc3QuZ2V0KCkpICsgbV9idWZmZXJMaXN0QmFzZVNpemU7CisgICAgbV9idWZmZXJM
aXN0LT5tTnVtYmVyQnVmZmVycyA9IG1faW50ZXJuYWxGb3JtYXQtPm51bWJlck9mQ2hhbm5lbFN0
cmVhbXMoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5tTnVt
YmVyQnVmZmVyczsgKytpKSB7CisgICAgICAgIGF1dG8mIGJ1ZmZlciA9IG1fYnVmZmVyTGlzdC0+
bUJ1ZmZlcnNbaV07CisgICAgICAgIGJ1ZmZlci5tRGF0YSA9IGRhdGE7CisgICAgICAgIGJ1ZmZl
ci5tRGF0YUJ5dGVTaXplID0gbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbDsKKyAgICAgICAgYnVm
ZmVyLm1OdW1iZXJDaGFubmVscyA9IG1faW50ZXJuYWxGb3JtYXQtPm51bWJlck9mSW50ZXJsZWF2
ZWRDaGFubmVscygpOworICAgICAgICBkYXRhID0gZGF0YSArIG1fbWF4QnVmZmVyU2l6ZVBlckNo
YW5uZWw7CisgICAgfQorfQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVybygpCit7
CisgICAgemVyb0FCTCgqbV9idWZmZXJMaXN0LCBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBh
Y2tldCgpICogbV9zYW1wbGVDYXBhY2l0eSk7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJM
aXN0Ojp6ZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QgYnl0ZUNvdW50KQor
eworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZmZXIubU51bWJlckJ1ZmZlcnM7ICsr
aSkKKyAgICAgICAgbWVtc2V0KGJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSwgMCwgYnl0ZUNvdW50
KTsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb252ZXJ0SW5wdXQodWlu
dDMyX3QqIGlvTnVtYmVyRGF0YVBhY2tldHMsIEF1ZGlvQnVmZmVyTGlzdCogaW9EYXRhKQorewor
ICAgIGlmICghaW9OdW1iZXJEYXRhUGFja2V0cyB8fCAhaW9EYXRhIHx8ICFtX2NvbnZlcnRlcklu
cHV0QnVmZmVyKSB7CisgICAgICAgIExPR19FUlJPUigiQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpy
ZWNvbmZpZ3VyZUlucHV0KCVwKSBpbnZhbGlkIGlucHV0IHRvIEF1ZGlvQ29udmVydGVySW5wdXQi
LCB0aGlzKTsKKyAgICAgICAgcmV0dXJuIGtBdWRpb0NvbnZlcnRlckVycl9VbnNwZWNpZmllZEVy
cm9yOworICAgIH0KKworICAgIHNpemVfdCBwYWNrZXRDb3VudCA9IG1fY29udmVydGVySW5wdXRC
dWZmZXItPm1CdWZmZXJzWzBdLm1EYXRhQnl0ZVNpemUgLyBtX2NvbnZlcnRlcklucHV0Qnl0ZXNQ
ZXJQYWNrZXQ7CisgICAgaWYgKCppb051bWJlckRhdGFQYWNrZXRzID4gbV9zYW1wbGVDYXBhY2l0
eSkgeworICAgICAgICBMT0dfRVJST1IoIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29udmVydElu
cHV0KCVwKSBub3QgZW5vdWdoIGludGVybmFsIHN0b3JhZ2U6IG5lZWRlZCA9ICV1LCBhdmFpbGFi
bGUgPSAlbHUiLCB0aGlzLCAqaW9OdW1iZXJEYXRhUGFja2V0cywgbV9zYW1wbGVDYXBhY2l0eSk7
CisgICAgICAgIHJldHVybiBrQXVkaW9Db252ZXJ0ZXJFcnJfSW52YWxpZElucHV0U2l6ZTsKKyAg
ICB9CisKKyAgICAqaW9OdW1iZXJEYXRhUGFja2V0cyA9IHBhY2tldENvdW50OworICAgIGZvciAo
dWludDMyX3QgaSA9IDA7IGkgPCBpb0RhdGEtPm1OdW1iZXJCdWZmZXJzOyArK2kpIHsKKyAgICAg
ICAgaW9EYXRhLT5tQnVmZmVyc1tpXS5tRGF0YSA9IG1fY29udmVydGVySW5wdXRCdWZmZXItPm1C
dWZmZXJzW2ldLm1EYXRhOworICAgICAgICBpb0RhdGEtPm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNp
emUgPSBtX2NvbnZlcnRlcklucHV0QnVmZmVyLT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplOwor
ICAgIH0KKworICAgIHJldHVybiAwOworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6OmF1ZGlvQ29udmVydGVyQ2FsbGJhY2soQXVkaW9Db252ZXJ0ZXJSZWYsIHVpbnQzMl90KiBp
b051bWJlckRhdGFQYWNrZXRzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSwgQXVkaW9TdHJlYW1Q
YWNrZXREZXNjcmlwdGlvbioqLCB2b2lkKiBpblJlZkNvbikKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QXVkaW9TYW1wbGVCdWZmZXJMaXN0Kj4oaW5SZWZDb24pLT5jb252ZXJ0SW5wdXQoaW9O
dW1iZXJEYXRhUGFja2V0cywgaW9EYXRhKTsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0Ojpjb3B5RnJvbShBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZSwgQXVkaW9Db252ZXJ0ZXJS
ZWYgY29udmVydGVyKQoreworICAgIHJlc2V0KCk7CisKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24gaW5wdXRGb3JtYXQ7CisgICAgVUludDMyIHByb3BlcnR5RGF0YVNpemUgPSBzaXpl
b2YoaW5wdXRGb3JtYXQpOworICAgIEF1ZGlvQ29udmVydGVyR2V0UHJvcGVydHkoY29udmVydGVy
LCBrQXVkaW9Db252ZXJ0ZXJDdXJyZW50SW5wdXRTdHJlYW1EZXNjcmlwdGlvbiwgJnByb3BlcnR5
RGF0YVNpemUsICZpbnB1dEZvcm1hdCk7CisgICAgbV9jb252ZXJ0ZXJJbnB1dEJ5dGVzUGVyUGFj
a2V0ID0gaW5wdXRGb3JtYXQubUJ5dGVzUGVyUGFja2V0OworICAgIG1fY29udmVydGVySW5wdXRC
dWZmZXIgPSAmc291cmNlOworCisgICAgYXV0byogb3V0cHV0RGF0YSA9IG1fYnVmZmVyTGlzdC5n
ZXQoKTsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24gb3V0cHV0Rm9ybWF0OworICAgIHByb3BlcnR5RGF0YVNpemUgPSBzaXplb2Yob3V0cHV0Rm9y
bWF0KTsKKyAgICBBdWRpb0NvbnZlcnRlckdldFByb3BlcnR5KGNvbnZlcnRlciwga0F1ZGlvQ29u
dmVydGVyQ3VycmVudE91dHB1dFN0cmVhbURlc2NyaXB0aW9uLCAmcHJvcGVydHlEYXRhU2l6ZSwg
Jm91dHB1dEZvcm1hdCk7CisKKyAgICBBU1NFUlQob3V0cHV0Rm9ybWF0Lm1DaGFubmVsc1BlckZy
YW1lID09IG91dHB1dERhdGEtPm1OdW1iZXJCdWZmZXJzKTsKKyAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgb3V0cHV0RGF0YS0+bU51bWJlckJ1ZmZlcnM7ICsraSkgeworICAgICAgICBBU1NF
UlQob3V0cHV0RGF0YS0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICBBU1NFUlQob3V0cHV0
RGF0YS0+bUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSk7CisgICAgfQorI2VuZGlmCisKKyAgICBV
SW50MzIgc2FtcGxlc0NvbnZlcnRlZCA9IHN0YXRpY19jYXN0PFVJbnQzMj4obV9zYW1wbGVDYXBh
Y2l0eSk7CisgICAgT1NTdGF0dXMgZXJyID0gQXVkaW9Db252ZXJ0ZXJGaWxsQ29tcGxleEJ1ZmZl
cihjb252ZXJ0ZXIsIGF1ZGlvQ29udmVydGVyQ2FsbGJhY2ssIHRoaXMsICZzYW1wbGVzQ29udmVy
dGVkLCBvdXRwdXREYXRhLCBudWxscHRyKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIExPR19F
UlJPUigiQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbSglcCkgQXVkaW9Db252ZXJ0ZXJG
aWxsQ29tcGxleEJ1ZmZlciByZXR1cm5lZCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCBlcnIsIChj
aGFyKikmZXJyKTsKKyAgICAgICAgbV9zYW1wbGVDb3VudCA9IHN0ZDo6bWluKG1fc2FtcGxlQ2Fw
YWNpdHksIHN0YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlc0NvbnZlcnRlZCkpOworICAgICAgICB6
ZXJvKCk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbV9zYW1wbGVDb3VudCA9
IHNhbXBsZXNDb252ZXJ0ZWQ7CisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6Y29weUZyb20oQXVkaW9TYW1wbGVCdWZmZXJMaXN0JiBzb3VyY2UsIEF1
ZGlvQ29udmVydGVyUmVmIGNvbnZlcnRlcikKK3sKKyAgICByZXR1cm4gY29weUZyb20oc291cmNl
LmJ1ZmZlckxpc3QoKSwgY29udmVydGVyKTsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0Ojpjb3B5RnJvbShDQVJpbmdCdWZmZXImIHJpbmdCdWZmZXIsIHNpemVfdCBzYW1wbGVD
b3VudCwgdWludDY0X3Qgc3RhcnRGcmFtZSwgQ0FSaW5nQnVmZmVyOjpGZXRjaE1vZGUgbW9kZSkK
K3sKKyAgICByZXNldCgpOworICAgIGlmIChyaW5nQnVmZmVyLmZldGNoKCZidWZmZXJMaXN0KCks
IHNhbXBsZUNvdW50LCBzdGFydEZyYW1lLCBtb2RlKSAhPSBDQVJpbmdCdWZmZXI6Ok9rKQorICAg
ICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBtX3NhbXBsZUNvdW50ID0gc2Ft
cGxlQ291bnQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
Ojpjb25maWd1cmVCdWZmZXJMaXN0Rm9yU3RyZWFtKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlz
dCwgY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQsIHVpbnQ4X3QqIGJ1ZmZl
ckRhdGEsIHNpemVfdCBzYW1wbGVDb3VudCkKK3sKKyAgICBzaXplX3QgYnVmZmVyQ291bnQgPSBm
b3JtYXQubnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpOworICAgIHNpemVfdCBjaGFubmVsQ291bnQg
PSBmb3JtYXQubnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCk7CisgICAgc2l6ZV90IGJ5dGVz
UGVyQ2hhbm5lbCA9IHNhbXBsZUNvdW50ICogZm9ybWF0LmJ5dGVzUGVyRnJhbWUoKTsKKworICAg
IGJ1ZmZlckxpc3QubU51bWJlckJ1ZmZlcnMgPSBidWZmZXJDb3VudDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYnVmZmVyQ291bnQ7ICsraSkgeworICAgICAgICBidWZmZXJMaXN0Lm1C
dWZmZXJzW2ldLm1OdW1iZXJDaGFubmVscyA9IGNoYW5uZWxDb3VudDsKKyAgICAgICAgYnVmZmVy
TGlzdC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplID0gYnl0ZXNQZXJDaGFubmVsOworICAgICAg
ICBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhID0gYnVmZmVyRGF0YTsKKyAgICAgICAgaWYg
KGJ1ZmZlckRhdGEpCisgICAgICAgICAgICBidWZmZXJEYXRhID0gYnVmZmVyRGF0YSArIGJ5dGVz
UGVyQ2hhbm5lbDsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1
ZmZlckxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkNBUmluZ0J1ZmZlci5oIgorI2luY2x1ZGUg
PENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK3R5cGVk
ZWYgc3RydWN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb247Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVBdWRpb0NvbnZlcnRlciogQXVkaW9Db252
ZXJ0ZXJSZWY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFJlZjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IGNyZWF0ZShjb25zdCBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBzaXplX3QpOworCisgICAgfkF1ZGlvU2FtcGxlQnVm
ZmVyTGlzdCgpOworCisgICAgc3RhdGljIHZvaWQgY29uZmlndXJlQnVmZmVyTGlzdEZvclN0cmVh
bShBdWRpb0J1ZmZlckxpc3QmLCBjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCB1aW50
OF90Kiwgc2l6ZV90KTsKKyAgICBzdGF0aWMgaW5saW5lIHNpemVfdCBhdWRpb0J1ZmZlckxpc3RT
aXplRm9yU3RyZWFtKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYpOworCisgICAgc3Rh
dGljIHZvaWQgYXBwbHlHYWluKEF1ZGlvQnVmZmVyTGlzdCYsIGZsb2F0LCBBdWRpb1N0cmVhbURl
c2NyaXB0aW9uOjpQQ01Gb3JtYXQpOworICAgIHZvaWQgYXBwbHlHYWluKGZsb2F0KTsKKworICAg
IE9TU3RhdHVzIGNvcHlGcm9tKGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCBj
b3VudCA9IFNJWkVfTUFYKTsKKyAgICBPU1N0YXR1cyBjb3B5RnJvbShBdWRpb0J1ZmZlckxpc3Qm
LCBBdWRpb0NvbnZlcnRlclJlZik7CisgICAgT1NTdGF0dXMgY29weUZyb20oQXVkaW9TYW1wbGVC
dWZmZXJMaXN0JiwgQXVkaW9Db252ZXJ0ZXJSZWYpOworICAgIE9TU3RhdHVzIGNvcHlGcm9tKENB
UmluZ0J1ZmZlciYsIHNpemVfdCBmcmFtZUNvdW50LCB1aW50NjRfdCBzdGFydEZyYW1lLCBDQVJp
bmdCdWZmZXI6OkZldGNoTW9kZSk7CisKKyAgICBPU1N0YXR1cyBtaXhGcm9tKGNvbnN0IEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCBjb3VudCA9IFNJWkVfTUFYKTsKKworICAgIE9TU3Rh
dHVzIGNvcHlUbyhBdWRpb0J1ZmZlckxpc3QmLCBzaXplX3QgY291bnQgPSBTSVpFX01BWCk7CisK
KyAgICBjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHN0cmVhbURlc2NyaXB0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbEZvcm1hdC0+c3RyZWFtRGVzY3JpcHRpb24oKTsg
fQorICAgIEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCgpIGNvbnN0IHsgcmV0dXJuICptX2J1
ZmZlckxpc3QuZ2V0KCk7IH0KKworICAgIHVpbnQzMl90IHNhbXBsZUNhcGFjaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9zYW1wbGVDYXBhY2l0eTsgfQorICAgIHVpbnQzMl90IHNhbXBsZUNvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zYW1wbGVDb3VudDsgfQorICAgIHZvaWQgc2V0U2FtcGxlQ291bnQo
c2l6ZV90KTsKKworICAgIHVpbnQ2NF90IHRpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJuIG1fdGlt
ZXN0YW1wOyB9CisgICAgZG91YmxlIGhvc3RUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9ob3N0VGlt
ZTsgfQorICAgIHZvaWQgc2V0VGltZXModWludDY0X3QgdGltZSwgZG91YmxlIGhvc3RUaW1lKSB7
IG1fdGltZXN0YW1wID0gdGltZTsgbV9ob3N0VGltZSA9IGhvc3RUaW1lOyB9CisKKyAgICB2b2lk
IHJlc2V0KCk7CisKKyAgICBzdGF0aWMgdm9pZCB6ZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCYsIHNp
emVfdCk7CisgICAgdm9pZCB6ZXJvKCk7CisKK3Byb3RlY3RlZDoKKyAgICBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3QoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90KTsKKworICAg
IHN0YXRpYyBPU1N0YXR1cyBhdWRpb0NvbnZlcnRlckNhbGxiYWNrKEF1ZGlvQ29udmVydGVyUmVm
LCB1aW50MzJfdCosIEF1ZGlvQnVmZmVyTGlzdCosIEF1ZGlvU3RyZWFtUGFja2V0RGVzY3JpcHRp
b24qKiwgdm9pZCopOworICAgIE9TU3RhdHVzIGNvbnZlcnRJbnB1dCh1aW50MzJfdCosIEF1ZGlv
QnVmZmVyTGlzdCopOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbj4gbV9pbnRlcm5hbEZvcm1hdDsKKworICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCogbV9j
b252ZXJ0ZXJJbnB1dEJ1ZmZlcjIgeyBudWxscHRyIH07CisgICAgQXVkaW9CdWZmZXJMaXN0KiBt
X2NvbnZlcnRlcklucHV0QnVmZmVyIHsgbnVsbHB0ciB9OworICAgIHVpbnQzMl90IG1fY29udmVy
dGVySW5wdXRCeXRlc1BlclBhY2tldCB7IDAgfTsKKworICAgIHVpbnQ2NF90IG1fdGltZXN0YW1w
IHsgMCB9OworICAgIGRvdWJsZSBtX2hvc3RUaW1lIHsgLTEgfTsKKyAgICBzaXplX3QgbV9zYW1w
bGVDb3VudCB7IDAgfTsKKyAgICBzaXplX3QgbV9zYW1wbGVDYXBhY2l0eSB7IDAgfTsKKyAgICBz
aXplX3QgbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbCB7IDAgfTsKKyAgICBzaXplX3QgbV9idWZm
ZXJMaXN0QmFzZVNpemUgeyAwIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvQnVmZmVyTGlz
dD4gbV9idWZmZXJMaXN0OworfTsKKworaW5saW5lIHNpemVfdCBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6OmF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oY29uc3QgQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICByZXR1cm4gb2Zmc2V0b2YoQXVkaW9CdWZmZXJM
aXN0LCBtQnVmZmVycykgKyAoc2l6ZW9mKEF1ZGlvQnVmZmVyKSAqIHN0ZDo6bWF4PHVpbnQzMl90
PigxLCBkZXNjcmlwdGlvbi5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCkpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b1NhbXBsZURhdGFTb3VyY2UuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNv
dXJjZS5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkNBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkNBUmluZ0J1ZmZlci5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYVRpbWVBVkZvdW5kYXRpb24uaCIKKyNpbmNsdWRl
IDxBdWRpb1Rvb2xib3gvQXVkaW9Db252ZXJ0ZXIuaD4KKyNpbmNsdWRlIDxtYWNoL21hY2guaD4K
KyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUg
PHN5c2xvZy5oPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgorCisjaW5jbHVkZSAiQ29yZU1lZGlhU29mdExpbmsuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCitSZWY8QXVkaW9T
YW1wbGVEYXRhU291cmNlPiBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OmNyZWF0ZShzaXplX3QgbWF4
aW11bVNhbXBsZUNvdW50KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZShtYXhpbXVtU2FtcGxlQ291bnQpKTsKK30KKworQXVkaW9TYW1wbGVEYXRhU291
cmNlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2Uoc2l6ZV90IG1heGltdW1TYW1wbGVDb3VudCkKKyAg
ICA6IG1faW5wdXRTYW1wbGVPZmZzZXQoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQorICAgICwg
bV9tYXhpbXVtU2FtcGxlQ291bnQobWF4aW11bVNhbXBsZUNvdW50KQoreworfQorCitBdWRpb1Nh
bXBsZURhdGFTb3VyY2U6On5BdWRpb1NhbXBsZURhdGFTb3VyY2UoKQoreworICAgIG1faW5wdXRE
ZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG51bGxwdHI7
CisgICAgbV9yaW5nQnVmZmVyID0gbnVsbHB0cjsKKyAgICBpZiAobV9jb252ZXJ0ZXIpIHsKKyAg
ICAgICAgQXVkaW9Db252ZXJ0ZXJEaXNwb3NlKG1fY29udmVydGVyKTsKKyAgICAgICAgbV9jb252
ZXJ0ZXIgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6
OnNldFBhdXNlZChib29sIHBhdXNlZCkKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9j
ayhtX2xvY2spOworCisgICAgaWYgKHBhdXNlZCA9PSBtX3BhdXNlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV90cmFuc2l0aW9uaW5nRnJvbVBhdXNlZCA9IG1fcGF1c2VkOworICAgIG1fcGF1
c2VkID0gcGF1c2VkOworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldHVw
Q29udmVydGVyKCkKK3sKKyAgICBBU1NFUlQobV9pbnB1dERlc2NyaXB0aW9uICYmIG1fb3V0cHV0
RGVzY3JpcHRpb24pOworCisgICAgaWYgKG1fY29udmVydGVyKSB7CisgICAgICAgIEF1ZGlvQ29u
dmVydGVyRGlzcG9zZShtX2NvbnZlcnRlcik7CisgICAgICAgIG1fY29udmVydGVyID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBpZiAoKm1faW5wdXREZXNjcmlwdGlvbiA9PSAqbV9vdXRwdXREZXNj
cmlwdGlvbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBPU1N0YXR1cyBlcnIgPSBBdWRpb0Nv
bnZlcnRlck5ldygmbV9pbnB1dERlc2NyaXB0aW9uLT5zdHJlYW1EZXNjcmlwdGlvbigpLCAmbV9v
dXRwdXREZXNjcmlwdGlvbi0+c3RyZWFtRGVzY3JpcHRpb24oKSwgJm1fY29udmVydGVyKTsKKyAg
ICBpZiAoZXJyKQorICAgICAgICBMT0dfRVJST1IoIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0
dXBDb252ZXJ0ZXIoJXApIC0gQXVkaW9Db252ZXJ0ZXJOZXcgcmV0dXJuZWQgZXJyb3IgJWQgKCUu
NHMpIiwgdGhpcywgZXJyLCAoY2hhciopJmVycik7CisKKyAgICByZXR1cm4gZXJyOworCit9CisK
K09TU3RhdHVzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0SW5wdXRGb3JtYXQoY29uc3QgQ0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQpCit7CisgICAgQVNTRVJUKGZvcm1hdC5zYW1w
bGVSYXRlKCkgPj0gMCk7CisKKyAgICBtX2lucHV0RGVzY3JpcHRpb24gPSBzdGQ6Om1ha2VfdW5p
cXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4oZm9ybWF0KTsKKyAgICBpZiAobV9vdXRwdXRE
ZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuIHNldHVwQ29udmVydGVyKCk7CisKKyAgICByZXR1
cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRPdXRwdXRGb3Jt
YXQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQpCit7CisgICAgQVNTRVJU
KG1faW5wdXREZXNjcmlwdGlvbik7CisgICAgQVNTRVJUKGZvcm1hdC5zYW1wbGVSYXRlKCkgPj0g
MCk7CisKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24+KGZvcm1hdCk7CisgICAgaWYgKCFtX3JpbmdCdWZmZXIpCisgICAg
ICAgIG1fcmluZ0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q0FSaW5nQnVmZmVyPigpOworCisg
ICAgbV9yaW5nQnVmZmVyLT5hbGxvY2F0ZShmb3JtYXQsIHN0YXRpY19jYXN0PHNpemVfdD4obV9t
YXhpbXVtU2FtcGxlQ291bnQpKTsKKyAgICBtX3NjcmF0Y2hCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q6OmNyZWF0ZShtX291dHB1dERlc2NyaXB0aW9uLT5zdHJlYW1EZXNjcmlwdGlvbigp
LCBtX21heGltdW1TYW1wbGVDb3VudCk7CisKKyAgICByZXR1cm4gc2V0dXBDb252ZXJ0ZXIoKTsK
K30KKworTWVkaWFUaW1lIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6aG9zdFRpbWUoKSBjb25zdAor
eworICAgIC8vIEJhc2VkIG9uIGxpc3RpbmcgIzIgZnJvbSBBcHBsZSBUZWNobmljYWwgUSZBIFFB
MTM5OCwgbW9kaWZpZWQgdG8gYmUgdGhyZWFkLXNhZmUuCisgICAgc3RhdGljIGRvdWJsZSBmcmVx
dWVuY3k7CisgICAgc3RhdGljIG1hY2hfdGltZWJhc2VfaW5mb19kYXRhX3QgdGltZWJhc2VJbmZv
OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplVGltZXJPbmNlRmxhZzsKKyAg
ICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplVGltZXJPbmNlRmxhZywgW10geworICAgICAgICBr
ZXJuX3JldHVybl90IGtyID0gbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1lYmFzZUluZm8pOworICAg
ICAgICBmcmVxdWVuY3kgPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8u
bnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8uZGVub20pOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGtyLCBrciA9PSBLRVJOX1NVQ0NFU1MpOworICAgICAgICBBU1NFUlQo
dGltZWJhc2VJbmZvLmRlbm9tKTsKKyAgICB9KTsKKworICAgIHJldHVybiBNZWRpYVRpbWU6OmNy
ZWF0ZVdpdGhEb3VibGUobWFjaF9hYnNvbHV0ZV90aW1lKCkgKiBmcmVxdWVuY3kpOworfQorCit2
b2lkIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXNJbnRlcm5hbChBdWRpb0J1ZmZl
ckxpc3QmIGJ1ZmZlckxpc3QsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2VudGF0aW9uVGltZSwgc2l6
ZV90IHNhbXBsZUNvdW50KQoreworICAgIEFTU0VSVChtX2xvY2suaXNIZWxkKCkpOworCisgICAg
QXVkaW9CdWZmZXJMaXN0KiBzYW1wbGVCdWZmZXJMaXN0OworICAgIGlmIChtX2NvbnZlcnRlcikg
eworICAgICAgICBtX3NjcmF0Y2hCdWZmZXItPnJlc2V0KCk7CisgICAgICAgIE9TU3RhdHVzIGVy
ciA9IG1fc2NyYXRjaEJ1ZmZlci0+Y29weUZyb20oYnVmZmVyTGlzdCwgbV9jb252ZXJ0ZXIpOwor
ICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNhbXBsZUJ1
ZmZlckxpc3QgPSAmbV9zY3JhdGNoQnVmZmVyLT5idWZmZXJMaXN0KCk7CisgICAgfSBlbHNlCisg
ICAgICAgIHNhbXBsZUJ1ZmZlckxpc3QgPSAmYnVmZmVyTGlzdDsKKworICAgIE1lZGlhVGltZSBz
YW1wbGVUaW1lID0gcHJlc2VudGF0aW9uVGltZTsKKyAgICBpZiAobV9pbnB1dFNhbXBsZU9mZnNl
dCA9PSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpIHsKKyAgICAgICAgbV9pbnB1dFNhbXBsZU9m
ZnNldCA9IE1lZGlhVGltZSgxIC0gc2FtcGxlVGltZS50aW1lVmFsdWUoKSwgc2FtcGxlVGltZS50
aW1lU2NhbGUoKSk7CisgICAgICAgIGlmIChtX2lucHV0U2FtcGxlT2Zmc2V0LnRpbWVTY2FsZSgp
ICE9IHNhbXBsZVRpbWUudGltZVNjYWxlKCkpCisgICAgICAgICAgICAvLyBGSVhNRTogSXQgc2hv
dWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBjYWxsaW5nIENNVGltZUNvbnZlcnRT
Y2FsZS4KKyAgICAgICAgICAgIG1faW5wdXRTYW1wbGVPZmZzZXQgPSB0b01lZGlhVGltZShDTVRp
bWVDb252ZXJ0U2NhbGUodG9DTVRpbWUobV9pbnB1dFNhbXBsZU9mZnNldCksIHNhbXBsZVRpbWUu
dGltZVNjYWxlKCksIGtDTVRpbWVSb3VuZGluZ01ldGhvZF9EZWZhdWx0KSk7CisgICAgICAgIExP
RyhNZWRpYUNhcHR1cmVTYW1wbGVzLCAiQEAgcHVzaFNhbXBsZXM6IGlucHV0IHNhbXBsZSBvZmZz
ZXQgaXMgJWxsZCwgbV9tYXhpbXVtU2FtcGxlQ291bnQgPSAlenUiLCBtX2lucHV0U2FtcGxlT2Zm
c2V0LnRpbWVWYWx1ZSgpLCBtX21heGltdW1TYW1wbGVDb3VudCk7CisgICAgfQorICAgIHNhbXBs
ZVRpbWUgKz0gbV9pbnB1dFNhbXBsZU9mZnNldDsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB1
aW50NjRfdCBzdGFydEZyYW1lMSA9IDA7CisgICAgdWludDY0X3QgZW5kRnJhbWUxID0gMDsKKyAg
ICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydEZyYW1lMSwgZW5kRnJh
bWUxKTsKKyNlbmRpZgorCisgICAgbV9yaW5nQnVmZmVyLT5zdG9yZShzYW1wbGVCdWZmZXJMaXN0
LCBzYW1wbGVDb3VudCwgc2FtcGxlVGltZS50aW1lVmFsdWUoKSk7CisgICAgbV90aW1lU3RhbXAg
PSBzYW1wbGVUaW1lLnRpbWVWYWx1ZSgpOworCisgICAgTE9HKE1lZGlhQ2FwdHVyZVNhbXBsZXMs
ICJAQCBwdXNoU2FtcGxlczogYWRkZWQgJWxkIHNhbXBsZXMgZm9yIHRpbWUgPSAlcyAod2FzICVz
KSwgbWFjaCB0aW1lID0gJWxsZCIsIHNhbXBsZUNvdW50LCB0b1N0cmluZyhzYW1wbGVUaW1lKS51
dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhwcmVzZW50YXRpb25UaW1lKS51dGY4KCkuZGF0YSgpLCBt
YWNoX2Fic29sdXRlX3RpbWUoKSk7CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdWludDY0X3Qg
c3RhcnRGcmFtZTIgPSAwOworICAgIHVpbnQ2NF90IGVuZEZyYW1lMiA9IDA7CisgICAgbV9yaW5n
QnVmZmVyLT5nZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRGcmFtZTIsIGVuZEZyYW1lMik7Cisg
ICAgTE9HKE1lZGlhQ2FwdHVyZVNhbXBsZXMsICJAQCBwdXNoU2FtcGxlczogYnVmZmVyZWQgcmFu
Z2Ugd2FzIFslbGxkIC4uICVsbGRdLCBpcyBbJWxsZCAuLiAlbGxkXSIsIHN0YXJ0RnJhbWUxLCBl
bmRGcmFtZTEsIHN0YXJ0RnJhbWUyLCBlbmRGcmFtZTIpOworI2VuZGlmCit9CisKK3ZvaWQgQXVk
aW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24mIHNhbXBsZURlc2NyaXB0aW9uLCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZm
ZXIpCit7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9sb2NrKTsKKworICAgIEFT
U0VSVF9VTlVTRUQoc2FtcGxlRGVzY3JpcHRpb24sICptX2lucHV0RGVzY3JpcHRpb24gPT0gc2Ft
cGxlRGVzY3JpcHRpb24pOworICAgIEFTU0VSVChtX3JpbmdCdWZmZXIpOworCisgICAgc2l6ZV90
IGJ1ZmZlclNpemUgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmF1ZGlvQnVmZmVyTGlzdFNpemVG
b3JTdHJlYW0oKm1faW5wdXREZXNjcmlwdGlvbi5nZXQoKSk7CisgICAgdWludDhfdCBidWZmZXJE
YXRhW2J1ZmZlclNpemVdOworICAgIEF1ZGlvQnVmZmVyTGlzdCogYnVmZmVyTGlzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8QXVkaW9CdWZmZXJMaXN0Kj4oYnVmZmVyRGF0YSk7CisgICAgYnVmZmVyTGlz
dC0+bU51bWJlckJ1ZmZlcnMgPSBtX2lucHV0RGVzY3JpcHRpb24tPm51bWJlck9mSW50ZXJsZWF2
ZWRDaGFubmVscygpOworCisgICAgQ01CbG9ja0J1ZmZlclJlZiBidWZmZXIgPSBudWxscHRyOwor
ICAgIE9TU3RhdHVzIGVyciA9IENNU2FtcGxlQnVmZmVyR2V0QXVkaW9CdWZmZXJMaXN0V2l0aFJl
dGFpbmVkQmxvY2tCdWZmZXIoc2FtcGxlQnVmZmVyLCBudWxscHRyLCBidWZmZXJMaXN0LCBidWZm
ZXJTaXplLCBrQ0ZBbGxvY2F0b3JTeXN0ZW1EZWZhdWx0LCBrQ0ZBbGxvY2F0b3JTeXN0ZW1EZWZh
dWx0LCBrQ01TYW1wbGVCdWZmZXJGbGFnX0F1ZGlvQnVmZmVyTGlzdF9Bc3N1cmUxNkJ5dGVBbGln
bm1lbnQsICZidWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdWRp
b1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzKCVwKSAtIENNU2FtcGxlQnVmZmVyR2V0QXVk
aW9CdWZmZXJMaXN0V2l0aFJldGFpbmVkQmxvY2tCdWZmZXIgcmV0dXJuZWQgZXJyb3IgJWQgKCUu
NHMpIiwgdGhpcywgZXJyLCAoY2hhciopJmVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBwdXNoU2FtcGxlc0ludGVybmFsKCpidWZmZXJMaXN0LCB0b01lZGlhVGltZShDTVNhbXBs
ZUJ1ZmZlckdldFByZXNlbnRhdGlvblRpbWVTdGFtcChzYW1wbGVCdWZmZXIpKSwgQ01TYW1wbGVC
dWZmZXJHZXROdW1TYW1wbGVzKHNhbXBsZUJ1ZmZlcikpOworfQorCit2b2lkIEF1ZGlvU2FtcGxl
RGF0YVNvdXJjZTo6cHVzaFNhbXBsZXMoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9u
JiBzYW1wbGVEZXNjcmlwdGlvbiwgY29uc3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCB2b2lkKiBh
dWRpb0RhdGEsIHNpemVfdCBzYW1wbGVDb3VudCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExv
Y2s+IGxvY2sobV9sb2NrLCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBBU1NFUlQoKm1faW5wdXRE
ZXNjcmlwdGlvbiA9PSBzYW1wbGVEZXNjcmlwdGlvbik7CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24gZGVzY3JpcHRpb24oc2FtcGxlRGVzY3JpcHRpb24pOworICAgIHNpemVfdCBidWZm
ZXJTaXplID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0J1ZmZlckxpc3RTaXplRm9yU3Ry
ZWFtKGRlc2NyaXB0aW9uKTsKKyAgICB1aW50OF90IGJ1ZmZlckRhdGFbYnVmZmVyU2l6ZV07Cisg
ICAgQXVkaW9CdWZmZXJMaXN0KiBidWZmZXJMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0J1
ZmZlckxpc3QqPihidWZmZXJEYXRhKTsKKworICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29u
ZmlndXJlQnVmZmVyTGlzdEZvclN0cmVhbSgqYnVmZmVyTGlzdCwgZGVzY3JpcHRpb24sIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGF1ZGlvRGF0YSksIHNhbXBsZUNvdW50KTsKKyAgICBwdXNo
U2FtcGxlc0ludGVybmFsKCpidWZmZXJMaXN0LCBzYW1wbGVUaW1lLCBzYW1wbGVDb3VudCk7Cit9
CisKK2Jvb2wgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKEF1ZGlv
QnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QmIHNhbXBsZUNvdW50LCB1aW50NjRfdCB0aW1lU3Rh
bXAsIGRvdWJsZSAvKmhvc3RUaW1lKi8sIFB1bGxNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1f
bG9jay5pc0hlbGQoKSk7CisKKyAgICBBU1NFUlQoYnVmZmVyLm1OdW1iZXJCdWZmZXJzID09IG1f
cmluZ0J1ZmZlci0+Y2hhbm5lbENvdW50KCkpOworICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZl
cnMgIT0gbV9yaW5nQnVmZmVyLT5jaGFubmVsQ291bnQoKSkgeworICAgICAgICBBdWRpb1NhbXBs
ZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgIHNhbXBs
ZUNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9y
aW5nQnVmZmVyIHx8IG1fbXV0ZWQgfHwgbV9pbnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6
OmludmFsaWRUaW1lKCkpIHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJM
KGJ1ZmZlciwgc2FtcGxlQ291bnQpOworICAgICAgICBzYW1wbGVDb3VudCA9IDA7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1aW50NjRfdCBzdGFydEZyYW1lID0gMDsKKyAg
ICB1aW50NjRfdCBlbmRGcmFtZSA9IDA7CisgICAgbV9yaW5nQnVmZmVyLT5nZXRDdXJyZW50RnJh
bWVCb3VuZHMoc3RhcnRGcmFtZSwgZW5kRnJhbWUpOworCisgICAgaWYgKG1fdHJhbnNpdGlvbmlu
Z0Zyb21QYXVzZWQpIHsKKyAgICAgICAgdWludDY0X3QgYnVmZmVyZWQgPSBlbmRGcmFtZSAtIG1f
dGltZVN0YW1wOworICAgICAgICBpZiAoYnVmZmVyZWQgPCBzYW1wbGVDb3VudCAqIDIpIHsKKyAg
ICAgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIHNhbXBsZUNv
dW50KTsKKyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGRvdWJsZSB0d2VudHlNUyA9IC4wMjsK
KyAgICAgICAgY29uc3QgZG91YmxlIHRlbk1TID0gLjAxOworICAgICAgICBjb25zdCBkb3VibGUg
Zml2ZU1TID0gLjAwNTsKKyAgICAgICAgZG91YmxlIHNhbXBsZVJhdGUgPSBtX291dHB1dERlc2Ny
aXB0aW9uLT5zYW1wbGVSYXRlKCk7CisgICAgICAgIGlmIChidWZmZXJlZCA+IHNhbXBsZVJhdGUg
KiB0d2VudHlNUykKKyAgICAgICAgICAgIG1fb3V0cHV0U2FtcGxlT2Zmc2V0ID0gbV90aW1lU3Rh
bXAgLSBzYW1wbGVSYXRlICogdHdlbnR5TVM7CisgICAgICAgIGVsc2UgaWYgKGJ1ZmZlcmVkID4g
c2FtcGxlUmF0ZSAqIHRlbk1TKQorICAgICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQgPSBt
X3RpbWVTdGFtcCAtIHNhbXBsZVJhdGUgKiB0ZW5NUzsKKyAgICAgICAgZWxzZSBpZiAoYnVmZmVy
ZWQgPiBzYW1wbGVSYXRlICogZml2ZU1TKQorICAgICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZz
ZXQgPSBtX3RpbWVTdGFtcCAtIHNhbXBsZVJhdGUgKiBmaXZlTVM7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fb3V0cHV0U2FtcGxlT2Zmc2V0ID0gbV90aW1lU3RhbXA7CisKKyAgICAgICAg
bV90cmFuc2l0aW9uaW5nRnJvbVBhdXNlZCA9IGZhbHNlOworICAgIH0KKworICAgIHRpbWVTdGFt
cCArPSBtX291dHB1dFNhbXBsZU9mZnNldDsKKworICAgIExPRyhNZWRpYUNhcHR1cmVTYW1wbGVz
LCAiKiogcHVsbFNhbXBsZXM6IGFza2luZyBmb3IgJWxkIHNhbXBsZXMgYXQgdGltZSA9ICVsbGQg
KHdhcyAlbGxkKSIsIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIHRpbWVTdGFtcCAtIG1fb3V0cHV0
U2FtcGxlT2Zmc2V0KTsKKworICAgIGludDY0X3QgZnJhbWVzQXZhaWxhYmxlID0gc2FtcGxlQ291
bnQ7CisgICAgaWYgKHRpbWVTdGFtcCA8IHN0YXJ0RnJhbWUgfHwgdGltZVN0YW1wICsgc2FtcGxl
Q291bnQgPiBlbmRGcmFtZSkgeworICAgICAgICBpZiAodGltZVN0YW1wICsgc2FtcGxlQ291bnQg
PCBzdGFydEZyYW1lIHx8IHRpbWVTdGFtcCA+IGVuZEZyYW1lKQorICAgICAgICAgICAgZnJhbWVz
QXZhaWxhYmxlID0gMDsKKyAgICAgICAgZWxzZSBpZiAodGltZVN0YW1wIDwgc3RhcnRGcmFtZSkK
KyAgICAgICAgICAgIGZyYW1lc0F2YWlsYWJsZSA9IHRpbWVTdGFtcCArIHNhbXBsZUNvdW50IC0g
c3RhcnRGcmFtZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnJhbWVzQXZhaWxhYmxlID0g
dGltZVN0YW1wICsgc2FtcGxlQ291bnQgLSBlbmRGcmFtZTsKKworICAgICAgICBMT0coTWVkaWFD
YXB0dXJlU2FtcGxlcywgIioqIHB1bGxTYW1wbGVzSW50ZXJuYWw6IHNhbXBsZSAlbGxkIGlzIG5v
dCBjb21wbGV0ZWx5IGluIHJhbmdlIFslbGxkIC4uICVsbGRdLCByZXR1cm5pbmcgJWxsZCBmcmFt
ZXMiLCB0aW1lU3RhbXAsIHN0YXJ0RnJhbWUsIGVuZEZyYW1lLCBmcmFtZXNBdmFpbGFibGUpOwor
CisgICAgICAgIGlmICghZnJhbWVzQXZhaWxhYmxlKSB7CisgICAgICAgICAgICBBdWRpb1NhbXBs
ZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV92b2x1bWUgPj0gLjk1
KSB7CisgICAgICAgIG1fcmluZ0J1ZmZlci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnQsIHRp
bWVTdGFtcCwgbW9kZSA9PSBDb3B5ID8gQ0FSaW5nQnVmZmVyOjpDb3B5IDogQ0FSaW5nQnVmZmVy
OjpNaXgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JhdGNo
QnVmZmVyLT5jb3B5RnJvbSgqbV9yaW5nQnVmZmVyLmdldCgpLCBzYW1wbGVDb3VudCwgdGltZVN0
YW1wLCBtb2RlID09IENvcHkgPyBDQVJpbmdCdWZmZXI6OkNvcHkgOiBDQVJpbmdCdWZmZXI6Ok1p
eCkpIHsKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgc2Ft
cGxlQ291bnQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9zY3JhdGNo
QnVmZmVyLT5hcHBseUdhaW4obV92b2x1bWUpOworICAgIGlmIChtX3NjcmF0Y2hCdWZmZXItPmNv
cHlUbyhidWZmZXIsIHNhbXBsZUNvdW50KSkKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
Ojp6ZXJvQUJMKGJ1ZmZlciwgc2FtcGxlQ291bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlcyhBdWRpb0J1ZmZlckxpc3Qm
IGJ1ZmZlciwgc2l6ZV90IHNhbXBsZUNvdW50LCB1aW50NjRfdCB0aW1lU3RhbXAsIGRvdWJsZSBo
b3N0VGltZSwgUHVsbE1vZGUgbW9kZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxv
Y2sobV9sb2NrLCBzdGQ6OnRyeV90b19sb2NrKTsKKyAgICBpZiAoIWxvY2sub3duc19sb2NrKCkg
fHwgIW1fcmluZ0J1ZmZlcikgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9B
QkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gcHVsbFNhbXBsZXNJbnRlcm5hbChidWZmZXIsIHNhbXBsZUNvdW50LCB0aW1l
U3RhbXAsIGhvc3RUaW1lLCBtb2RlKTsKK30KKworYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6
OnB1bGxTYW1wbGVzKEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3Qgc2FtcGxl
Q291bnQsIHVpbnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIGhvc3RUaW1lLCBQdWxsTW9kZSBtb2Rl
KQoreworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2xvY2ssIHN0ZDo6dHJ5X3Rv
X2xvY2spOworICAgIGlmICghbG9jay5vd25zX2xvY2soKSB8fCAhbV9yaW5nQnVmZmVyKSB7Cisg
ICAgICAgIGJ1ZmZlci56ZXJvKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoIXB1bGxTYW1wbGVzSW50ZXJuYWwoYnVmZmVyLmJ1ZmZlckxpc3QoKSwgc2FtcGxlQ291
bnQsIHRpbWVTdGFtcCwgaG9zdFRpbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBidWZmZXIuc2V0VGltZXModGltZVN0YW1wLCBob3N0VGltZSk7CisgICAgYnVmZmVyLnNl
dFNhbXBsZUNvdW50KHNhbXBsZUNvdW50KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b1NhbXBsZURhdGFTb3VyY2UuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRl
ICJBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCIKKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlv
VHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
b3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiAqQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKK3R5cGVk
ZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CitjbGFz
cyBDQVJpbmdCdWZmZXI7CisKK2NsYXNzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4geworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8QXVkaW9TYW1wbGVEYXRhU291cmNlPiBjcmVhdGUoc2l6ZV90KTsKKworICAgIH5BdWRpb1Nh
bXBsZURhdGFTb3VyY2UoKTsKKworICAgIE9TU3RhdHVzIHNldElucHV0Rm9ybWF0KGNvbnN0IENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYpOworICAgIE9TU3RhdHVzIHNldE91dHB1dEZvcm1hdChj
b25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mKTsKKworICAgIHZvaWQgcHVzaFNhbXBsZXMo
Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiwgY29uc3QgTWVkaWFUaW1lJiwgdm9p
ZCosIHNpemVfdCk7CisgICAgdm9pZCBwdXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24mLCBDTVNhbXBsZUJ1ZmZlclJlZik7CisKKyAgICBlbnVtIFB1bGxNb2RlIHsg
Q29weSwgTWl4IH07CisgICAgYm9vbCBwdWxsU2FtcGxlcyhBdWRpb1NhbXBsZUJ1ZmZlckxpc3Qm
LCBzaXplX3QsIHVpbnQ2NF90LCBkb3VibGUsIFB1bGxNb2RlKTsKKyAgICBib29sIHB1bGxTYW1w
bGVzKEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCwgdWludDY0X3QsIGRvdWJsZSwgUHVsbE1vZGUp
OworCisgICAgdm9pZCBzZXRQYXVzZWQoYm9vbCk7CisKKyAgICB2b2lkIHNldFZvbHVtZShmbG9h
dCB2b2x1bWUpIHsgbV92b2x1bWUgPSB2b2x1bWU7IH0KKyAgICBmbG9hdCB2b2x1bWUoKSBjb25z
dCB7IHJldHVybiBtX3ZvbHVtZTsgfQorCisgICAgdm9pZCBzZXRNdXRlZChib29sIG11dGVkKSB7
IG1fbXV0ZWQgPSBtdXRlZDsgfQorICAgIGJvb2wgbXV0ZWQoKSBjb25zdCB7IHJldHVybiBtX211
dGVkOyB9CisKK3Byb3RlY3RlZDoKKyAgICBBdWRpb1NhbXBsZURhdGFTb3VyY2Uoc2l6ZV90KTsK
KworICAgIE9TU3RhdHVzIHNldHVwQ29udmVydGVyKCk7CisgICAgYm9vbCBwdWxsU2FtcGxlc0lu
dGVybmFsKEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCYsIHVpbnQ2NF90LCBkb3VibGUsIFB1bGxN
b2RlKTsKKworICAgIHZvaWQgcHVzaFNhbXBsZXNJbnRlcm5hbChBdWRpb0J1ZmZlckxpc3QmLCBj
b25zdCBNZWRpYVRpbWUmLCBzaXplX3QgZnJhbWVDb3VudCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX2lucHV0RGVzY3JpcHRpb247CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlv
bjsKKworICAgIE1lZGlhVGltZSBob3N0VGltZSgpIGNvbnN0OworCisgICAgdWludDY0X3QgbV90
aW1lU3RhbXAgeyAwIH07CisgICAgZG91YmxlIG1faG9zdFRpbWUgeyAtMSB9OworCisgICAgTWVk
aWFUaW1lIG1faW5wdXRTYW1wbGVPZmZzZXQ7CisgICAgdWludDY0X3QgbV9vdXRwdXRTYW1wbGVP
ZmZzZXQgeyAwIH07CisKKyAgICBBdWRpb0NvbnZlcnRlclJlZiBtX2NvbnZlcnRlcjsKKyAgICBS
ZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJMaXN0PiBtX3NjcmF0Y2hCdWZmZXI7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q0FSaW5nQnVmZmVyPiBtX3JpbmdCdWZmZXI7CisgICAgc2l6ZV90IG1fbWF4
aW11bVNhbXBsZUNvdW50IHsgMCB9OworCisgICAgTG9jayBtX2xvY2s7CisgICAgZmxvYXQgbV92
b2x1bWUgeyAxLjAgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9w
YXVzZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX3RyYW5zaXRpb25pbmdGcm9tUGF1c2VkIHsgdHJ1
ZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1F
RElBX1NUUkVBTSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300443</attachid>
            <date>2017-02-02 13:28:16 -0800</date>
            <delta_ts>2017-02-03 08:34:55 -0800</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>audio_buffers_patch_5.txt</filename>
            <type>text/plain</type>
            <size>47462</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTU2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE3LTAyLTAyICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIEFkZCBjbGFz
c2VzIHRvIG1hbmFnZSBhdWRpbyBzYW1wbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3MzkKKworICAgICAgICBSZXZpZXdlZCBieSBKZXIgTm9i
bGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGNvZGUgaXNuJ3QgdXNlZCB5ZXQuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp+QXVkaW9TYW1wbGVCdWZm
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2V0U2Ft
cGxlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphcHBs
eUdhaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9t
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29weUZyb20pOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5VG8pOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm8pOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6Y29udmVydElucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6YXVkaW9Db252ZXJ0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvbmZpZ3VyZUJ1ZmZlckxpc3RGb3JTdHJlYW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnN0cmVhbURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YnVmZmVy
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnNhbXBsZUNh
cGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2FtcGxl
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp0aW1lc3Rh
bXApOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpob3N0VGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnNldFRpbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXVkaW9CdWZmZXJMaXN0U2l6
ZUZvclN0cmVhbSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0
YVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291
cmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRh
U291cmNlOjp+QXVkaW9TYW1wbGVEYXRhU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6c2V0UGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZTo6c2V0dXBDb252ZXJ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9T
YW1wbGVEYXRhU291cmNlOjpzZXRJbnB1dEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1NhbXBsZURhdGFTb3VyY2U6OnNldE91dHB1dEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6Omhvc3RUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRWb2x1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjp2b2x1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6Om11dGVkKToKKwogMjAxNy0wMi0wMiAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29sdW1uIHByb2dyZXNzaW9uIHdyb25n
IGFmdGVyIGVuYWJsaW5nIHBhZ2luYXRpb24gb24gUlRMIGRvY3VtZW50CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMTE1NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsMTAgQEAKIAkJMDczNzk0RkUxOUY1
ODY0RTAwRTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mzc5NEY4MTlGNTg2NEUwMEU1QTA0NSAvKiBSVENO
b3RpZmllcnNNb2NrLmggKi87IH07CiAJCTA3Mzk0RUM4MUJBQjJDQ0QwMEJFOTlDRCAvKiBNZWRp
YURldmljZXNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3Mzk0RUM3MUJBQjJDQ0QwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0
LmNwcCAqLzsgfTsKIAkJMDczOTRFQ0ExQkFCMkNENzAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1Jl
cXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
Mzk0RUM5MUJBQjJDRDcwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDczQjg3NjYxRTQzODVB
QzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMgLyog
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCAqLzsgfTsKKwkJMDczQjg3NjcxRTQzODVBQzAwNzFD
MEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NjMxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdC5oICovOyB9OworCQkwNzNCODc2ODFFNDM4NUFDMDA3MUMwRUMgLyogQXVk
aW9TYW1wbGVEYXRhU291cmNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA3M0I4NzY0MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFT
b3VyY2UuY3BwICovOyB9OworCQkwNzNCODc2OTFFNDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1w
bGVEYXRhU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzNCODc2NTFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmgg
Ki87IH07CiAJCTA3M0JFMzQwMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRp
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNC
RTMzRTE3RDE3RTAxMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWEuY3BwICovOyB9Owog
CQkwNzNCRTM0MTE3RDE3RTAxMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3M0JFMzNGMTdEMTdF
MDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3M0JFMzRFMTdEMTgwQjIwMDJCRDQzMSAv
KiBSVENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjIxQkFCMTdDRjBBRDQwMDg0OEU1MSAvKiBS
VENTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlwdG9yLmNwcCAqLzsgfTsKQEAgLTcyMzMsNiArNzIz
NywxMCBAQAogCQkwNzNCODc1NjFFNDBEQ0U1MDA3MUMwRUMgLyogQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3M0I4NzU3MUU0MERDRkQw
MDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQjg3NTgxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDczQjg3NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzNCODc2MzFFNDM4NTlEMDA3MUMw
RUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwNzNCODc2NDFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF1ZGlvU2FtcGxlRGF0YVNv
dXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3M0I4NzY1MUU0Mzg1OUQw
MDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQXVkaW9TYW1wbGVEYXRhU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA3M0JFMzNFMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRp
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05hdmlnYXRvclVz
ZXJNZWRpYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3M0JFMzNGMTdEMTdF
MDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU05hdmlnYXRvclVzZXJNZWRpYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwNzQ0RUNFQjFFMEM0QUU1MDAwRDA5NDQgLyogTW9ja1JlYWx0aW1lQXVkaW9T
b3VyY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1JlYWx0aW1l
QXVkaW9Tb3VyY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0ODE1LDcg
KzI0ODIzLDYgQEAKIAkJRkQzMTYwNDAxMkIwMjZBMzAwQzFBMzU5IC8qIGF1ZGlvICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwNzNCODc1NjFFNDBEQ0U1
MDA3MUMwRUMgLyogQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oICovLAogCQkJCUNENjY5RDY1MUQy
MzJERjQwMDREMTg2NiAvKiBjb2NvYSAqLywKIAkJCQlDRDBFRUUwRDE0NzQzRTQ4MDAzRUFGQTIg
LyogaW9zICovLAogCQkJCUZEMzE2MEIwMTJCMDI3MDcwMEMxQTM1OSAvKiBtYWMgKi8sCkBAIC0y
NDg0Miw2ICsyNDg0OSw3IEBACiAJCQkJQ0RBNzk4MjExNzBBMjJEQzAwRDQ1QzU1IC8qIEF1ZGlv
U2Vzc2lvbi5oICovLAogCQkJCUZEMzE2MDUzMTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRpb1NvdXJj
ZVByb3ZpZGVyLmggKi8sCiAJCQkJRkQ2MkY1MkQxNDU4OThEODAwOTRCMEVEIC8qIEF1ZGlvU291
cmNlUHJvdmlkZXJDbGllbnQuaCAqLywKKwkJCQkwNzNCODc1NjFFNDBEQ0U1MDA3MUMwRUMgLyog
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oICovLAogCQkJCUZEMzE2MDU0MTJCMDI2RjcwMEMxQTM1
OSAvKiBBdWRpb1V0aWxpdGllcy5jcHAgKi8sCiAJCQkJRkQzMTYwNTUxMkIwMjZGNzAwQzFBMzU5
IC8qIEF1ZGlvVXRpbGl0aWVzLmggKi8sCiAJCQkJRkQzMTYwNTYxMkIwMjZGNzAwQzFBMzU5IC8q
IEJpcXVhZC5jcHAgKi8sCkBAIC0yNDkwOCw2ICsyNDkxNiwxMCBAQAogCQlGRDMxNjBCMDEyQjAy
NzA3MDBDMUEzNTkgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwNzNCODc2MjFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJM
aXN0LmNwcCAqLywKKwkJCQkwNzNCODc2MzFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVC
dWZmZXJMaXN0LmggKi8sCisJCQkJMDczQjg3NjQxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZS5jcHAgKi8sCisJCQkJMDczQjg3NjUxRTQzODU5RDAwNzFDMEVDIC8qIEF1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oICovLAogCQkJCUZEMzE2MEI1MTJCMDI3MkEwMEMxQTM1OSAv
KiBBdWRpb0J1c01hYy5tbSAqLywKIAkJCQlGRDMxNjBCNjEyQjAyNzJBMDBDMUEzNTkgLyogQXVk
aW9EZXN0aW5hdGlvbk1hYy5jcHAgKi8sCiAJCQkJRkQzMTYwQjcxMkIwMjcyQTAwQzFBMzU5IC8q
IEF1ZGlvRGVzdGluYXRpb25NYWMuaCAqLywKQEAgLTI1NDcyLDYgKzI1NDg0LDcgQEAKIAkJCQky
RDhGRUJERDE0M0UzRUY3MDA3MjUwMkIgLyogQ1NTQ3Jvc3NmYWRlVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUFBMjFFQ0NEMEFCRjBGQzYwMDJCODM0QyAvKiBDU1NDdXJzb3JJbWFnZVZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDQ0Q0JFNDFEODg2MTk5MDA3M0EwNzQgLyogQ1NTQ3Vz
dG9tSWRlbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDczQjg3NjkxRTQzODVBQzAwNzFD
MEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3NzlF
MTQxQkIyMTVCQjAwQ0FBOEJGIC8qIENTU0N1c3RvbVByb3BlcnR5VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRBOUNDODE4MTZCQjlBQzYwMEVDNjQ1QSAvKiBDU1NEZWZhdWx0U3R5bGVTaGVl
dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk0NDc2QkRCMURGQ0FDMDMwMDY5MEUyMyAvKiBDU1NE
ZWZlcnJlZFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjY1Myw2ICsyNjY2Niw3IEBACiAJ
CQkJNkM0Qzk2REYxQUQ0NDgzNTAwMzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M0Qzk2REQxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
UmVhZGFibGVTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTZDNEM5NkRGMUFENDQ4MzUwMDM2
NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTA3M0I4NzY3MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDNEM5NkRGMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRh
YmxlU3RyZWFtRGVmYXVsdFJlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEyOURGODYxQkI1
QjgwQzAwMzIyQTE2IC8qIEpTUmVhZGFibGVTdHJlYW1Qcml2YXRlQ29uc3RydWN0b3JzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3RTRDOTZERDFBRDQ0ODM1MDAzNjVBNTEgLyogSlNSZWFkYWJsZVN0
cmVhbVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODMzOSw3ICsyODM1Myw2IEBACiAJCQkJ
QkU5MTNEODAxODFFRjkyNDAwRENCMDlFIC8qIFRyYWNrUHJpdmF0ZUJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZGQUMzMEZFMTg0RkIxNDUwMDhDNEYxRSAvKiBUcmFpbGluZ09iamVjdHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNjA3MTMyMUJEODMwOEIwMERCQzRGMiAvKiBUcmFuc2FjdGlv
bk9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMDdDMDQ2QzIxRTQyNTAyMjAwNzIwMUU3
IC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFOTExQzQw
RUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4LmggaW4gSGVhZGVycyAqLywK
IAkJCQlGQjQ4NEY0RDE3MUY4MjFFMDAwNDA3NTUgLyogVHJhbnNmb3JtRnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0OUU5MTFDRTBFRjg2RDQ3MDA5RDBDQUYgLyogVHJhbnNmb3JtT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI5OTI0LDYgKzI5OTM3LDcgQEAKIAkJCQk1MUY3
OThFRjFCRTg4MEU3MDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxRTI2OTM2MUREM0JEOTcwMDZCNkE1OCAvKiBJREJJdGVyYXRlQ3Vyc29yRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM5NDFCQjRDNEU4MDAxMjg5OEYgLyogSURCS2V5LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTA3M0I4NzY2MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDOTYxQkI0QzRFODAw
MTI4OThGIC8qIElEQktleURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDOTgxQkI0
QzRFODAwMTI4OThGIC8qIElEQktleVBhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZD
OUExQkI0QzRFODAwMTI4OThGIC8qIElEQktleVJhbmdlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Mjk5MzIsNiArMjk5NDYsNyBAQAogCQkJCTUxNjA3MTJFMUJEODMwNzgwMERCQzRGMiAvKiBJREJP
YmplY3RTdG9yZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDQTMxQkI0QzRFODAw
MTI4OThGIC8qIElEQk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZD
QTgxQkI0QzRFODAwMTI4OThGIC8qIElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MDczQjg3NjgxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MTQxMjk5ODFDNjk3NjkwMDA1OUU3MTQgLyogSURCUmVxdWVzdENv
bXBsZXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTBBNThGOTFCQUNDN0YyMDBD
MTkyODIgLyogSURCUmVxdWVzdERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0NUIxMDkx
QkM0OEUyRTAwRTg2MjE5IC8qIElEQlJlc291cmNlSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTMwNDQ3LDcgKzMwNDYyLDYgQEAKIAkJCQlFMTI4NEJCMjEwNDQ5RkZBMDBFQUVCNTIg
LyogSlNQYWdlVHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEQTE1RUIx
MTJCMDNFRTEwMDNBNTgzQSAvKiBKU1Bhbm5lck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTUxQTgxREYxNzI5OEQ3NzAwQkZDQTYxIC8qIEpTUGVyZm9ybWFuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJMDdDMDQ2QzExRTQyNTAyMjAwNzIwMUU3IC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDQjM4RkQ1MTFDQ0Y5Mzg5MDA1OTJBM0YgLyogSlNQ
ZXJmb3JtYW5jZUVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNCMzhGRDU3MUNEMjFFMkEw
MDU5MkEzRiAvKiBKU1BlcmZvcm1hbmNlRW50cnlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTU4QzU5RDAxRTM4MkVBQzAwNDc4NTlDIC8qIEpTUGVyZm9ybWFuY2VNYXJrLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlv
U2FtcGxlQnVmZmVyTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QXVkaW9TYW1wbGVCdWZmZXJMaXN0LmgiCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKKyNpbmNsdWRlIDxB
Y2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNpbmNsdWRlIDxBdWRpb1Rvb2xib3gvQXVkaW9Db252
ZXJ0ZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgVmVjdG9y
TWF0aDsKKworUmVmPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gQXVkaW9TYW1wbGVCdWZmZXJMaXN0
OjpjcmVhdGUoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQsIHNpemVfdCBt
YXhpbXVtU2FtcGxlQ291bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0KGZvcm1hdCwgbWF4aW11bVNhbXBsZUNvdW50KSk7Cit9CisKK0F1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0KGNvbnN0IENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiYgZm9ybWF0LCBzaXplX3QgbWF4aW11bVNhbXBsZUNvdW50KQoreworICAgIG1f
aW50ZXJuYWxGb3JtYXQgPSBzdGQ6Om1ha2VfdW5pcXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bj4oZm9ybWF0KTsKKworICAgIG1fc2FtcGxlQ2FwYWNpdHkgPSBtYXhpbXVtU2FtcGxlQ291bnQ7
CisgICAgbV9zYW1wbGVDb3VudCA9IDA7CisgICAgbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbCA9
IG1heGltdW1TYW1wbGVDb3VudCAqIGZvcm1hdC5ieXRlc1BlckZyYW1lKCkgLyBmb3JtYXQubnVt
YmVyT2ZDaGFubmVsU3RyZWFtcygpOworCisgICAgQVNTRVJUKGZvcm1hdC5zYW1wbGVSYXRlKCkg
Pj0gMCk7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IGZvcm1hdC5udW1iZXJPZkNoYW5uZWxT
dHJlYW1zKCkgKiBtX21heEJ1ZmZlclNpemVQZXJDaGFubmVsOworICAgIEFTU0VSVChidWZmZXJT
aXplIDw9IFNJWkVfTUFYKTsKKyAgICBpZiAoYnVmZmVyU2l6ZSA+IFNJWkVfTUFYKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2J1ZmZlckxpc3RCYXNlU2l6ZSA9IGF1ZGlvQnVmZmVyTGlzdFNp
emVGb3JTdHJlYW0oZm9ybWF0KTsKKyAgICBBU1NFUlQobV9idWZmZXJMaXN0QmFzZVNpemUgPD0g
U0laRV9NQVgpOworICAgIGlmIChtX2J1ZmZlckxpc3RCYXNlU2l6ZSA+IFNJWkVfTUFYKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzaXplX3QgYWxsb2NTaXplID0gbV9idWZmZXJMaXN0QmFzZVNp
emUgKyBidWZmZXJTaXplOworICAgIG1fYnVmZmVyTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxBdWRp
b0J1ZmZlckxpc3Q+KHN0YXRpY19jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KDo6b3BlcmF0b3IgbmV3
IChhbGxvY1NpemUpKSk7CisKKyAgICByZXNldCgpOworfQorCitBdWRpb1NhbXBsZUJ1ZmZlckxp
c3Q6On5BdWRpb1NhbXBsZUJ1ZmZlckxpc3QoKQoreworICAgIG1faW50ZXJuYWxGb3JtYXQgPSBu
dWxscHRyOworICAgIG1fYnVmZmVyTGlzdCA9IG51bGxwdHI7Cit9CisKK3ZvaWQgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0OjpzZXRTYW1wbGVDb3VudChzaXplX3QgY291bnQpCit7CisgICAgQVNTRVJU
KGNvdW50IDw9IG1fc2FtcGxlQ2FwYWNpdHkpOworICAgIGlmIChjb3VudCA8PSBtX3NhbXBsZUNh
cGFjaXR5KQorICAgICAgICBtX3NhbXBsZUNvdW50ID0gY291bnQ7Cit9CisKK3ZvaWQgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0OjphcHBseUdhaW4oQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0LCBm
bG9hdCBnYWluLCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgZm9ybWF0KQorewor
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZmZXJMaXN0Lm1OdW1iZXJCdWZmZXJzOyAr
K2kpIHsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVh
bURlc2NyaXB0aW9uOjpJbnQxNjogeworICAgICAgICAgICAgaW50MTZfdCogYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8aW50MTZfdCo+KGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAg
ICAgICAgaW50IGZyYW1lQ291bnQgPSBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNp
emUgLyBzaXplb2YoaW50MTZfdCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZy
YW1lQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICBidWZmZXJbaV0gKj0gZ2FpbjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbjo6SW50MzI6IHsKKyAgICAgICAgICAgIGludDMyX3QqIGJ1ZmZlciA9IHN0YXRpY19jYXN0
PGludDMyX3QqPihidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgICAgIGlu
dCBmcmFtZUNvdW50ID0gYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6
ZW9mKGludDMyX3QpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZUNvdW50
OyBpKyspCisgICAgICAgICAgICAgICAgYnVmZmVyW2ldICo9IGdhaW47CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjo6RmxvYXQzMjogeworICAgICAgICAgICAgZmxvYXQqIGJ1ZmZlciA9
IHN0YXRpY19jYXN0PGZsb2F0Kj4oYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAg
ICAgICAgICB2RFNQX3ZzbXVsKGJ1ZmZlciwgMSwgJmdhaW4sIGJ1ZmZlciwgMSwgYnVmZmVyTGlz
dC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246
OkZsb2F0NjQ6IHsKKyAgICAgICAgICAgIGRvdWJsZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8ZG91
YmxlKj4oYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICBkb3VibGUg
Z2FpbkFzRG91YmxlID0gZ2FpbjsKKyAgICAgICAgICAgIHZEU1BfdnNtdWxEKGJ1ZmZlciwgMSwg
JmdhaW5Bc0RvdWJsZSwgYnVmZmVyLCAxLCBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0
ZVNpemUgLyBzaXplb2YoZG91YmxlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXBwbHlHYWluKGZsb2F0IGdhaW4p
Cit7CisgICAgYXBwbHlHYWluKCptX2J1ZmZlckxpc3QsIGdhaW4sIG1faW50ZXJuYWxGb3JtYXQt
PmZvcm1hdCgpKTsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9t
KGNvbnN0IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYgc291cmNlLCBzaXplX3QgZnJhbWVDb3VudCkK
K3sKKyAgICBBU1NFUlQoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgPT0gc3RyZWFtRGVzY3Jp
cHRpb24oKSk7CisKKyAgICBpZiAoc291cmNlLnN0cmVhbURlc2NyaXB0aW9uKCkgIT0gc3RyZWFt
RGVzY3JpcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAg
aWYgKGZyYW1lQ291bnQgPiBzb3VyY2Uuc2FtcGxlQ291bnQoKSkKKyAgICAgICAgZnJhbWVDb3Vu
dCA9IHNvdXJjZS5zYW1wbGVDb3VudCgpOworCisgICAgaWYgKGZyYW1lQ291bnQgPiBtX3NhbXBs
ZUNhcGFjaXR5KQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJyb3I7CisKKyAgICBtX3Nh
bXBsZUNvdW50ID0gZnJhbWVDb3VudDsKKworICAgIEF1ZGlvQnVmZmVyTGlzdCYgc291cmNlQnVm
ZmVyID0gc291cmNlLmJ1ZmZlckxpc3QoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
bV9idWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVyczsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAobV9p
bnRlcm5hbEZvcm1hdC0+Zm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOjpJbnQxNjogeworICAgICAgICAgICAgaW50MTZfdCogZGVzdGluYXRpb24gPSBzdGF0
aWNfY2FzdDxpbnQxNl90Kj4obV9idWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAg
ICAgICAgICBpbnQxNl90KiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxpbnQxNl90Kj4oc291cmNlQnVm
ZmVyLm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZnJhbWVDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uW2ldICs9IHNv
dXJjZVtpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MzI6IHsKKyAgICAgICAgICAgIGludDMyX3QqIGRlc3Rp
bmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MzJfdCo+KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0u
bURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkaShkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnBy
ZXRfY2FzdDxpbnQzMl90Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1EYXRhKSwgMSwgZGVz
dGluYXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDMyOiB7CisgICAgICAg
ICAgICBmbG9hdCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdCo+KG1fYnVmZmVyTGlz
dC0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkKGRlc3RpbmF0aW9u
LCAxLCByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc291cmNlQnVmZmVyLm1CdWZmZXJzW2ldLm1E
YXRhKSwgMSwgZGVzdGluYXRpb24sIDEsIGZyYW1lQ291bnQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDY0
OiB7CisgICAgICAgICAgICBkb3VibGUqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8ZG91Ymxl
Kj4obV9idWZmZXJMaXN0LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICB2RFNQX3Zh
ZGREKGRlc3RpbmF0aW9uLCAxLCByZWludGVycHJldF9jYXN0PGRvdWJsZSo+KHNvdXJjZUJ1ZmZl
ci5tQnVmZmVyc1tpXS5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjo6Tm9uZToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NT
dGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShjb25zdCBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3QmIHNvdXJjZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgQVNTRVJUKHNvdXJj
ZS5zdHJlYW1EZXNjcmlwdGlvbigpID09IHN0cmVhbURlc2NyaXB0aW9uKCkpOworCisgICAgaWYg
KHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpICE9IHN0cmVhbURlc2NyaXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIGlmIChmcmFtZUNvdW50ID4gc291
cmNlLnNhbXBsZUNvdW50KCkpCisgICAgICAgIGZyYW1lQ291bnQgPSBzb3VyY2Uuc2FtcGxlQ291
bnQoKTsKKworICAgIGlmIChmcmFtZUNvdW50ID4gbV9zYW1wbGVDYXBhY2l0eSkKKyAgICAgICAg
cmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgbV9zYW1wbGVDb3VudCA9IGZyYW1lQ291
bnQ7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5tTnVtYmVy
QnVmZmVyczsgaSsrKSB7CisgICAgICAgIHVpbnQ4X3QqIHNvdXJjZURhdGEgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4oc291cmNlLmJ1ZmZlckxpc3QoKS5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAg
ICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KG1fYnVmZmVy
TGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNv
dXJjZURhdGEsIGZyYW1lQ291bnQgKiBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBhY2tldCgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0Ojpjb3B5VG8oQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBmcmFtZUNvdW50
KQoreworICAgIGlmIChmcmFtZUNvdW50ID4gbV9zYW1wbGVDb3VudCkKKyAgICAgICAgcmV0dXJu
IGtBdWRpb19QYXJhbUVycm9yOworICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZlcnMgPiBtX2J1
ZmZlckxpc3QtPm1OdW1iZXJCdWZmZXJzKQorICAgICAgICByZXR1cm4ga0F1ZGlvX1BhcmFtRXJy
b3I7CisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYnVmZmVyLm1OdW1iZXJCdWZmZXJz
OyBpKyspIHsKKyAgICAgICAgdWludDhfdCogc291cmNlRGF0YSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihtX2J1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgdWludDhfdCog
ZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyLm1CdWZmZXJzW2ldLm1E
YXRhKTsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2VEYXRhLCBmcmFtZUNvdW50
ICogbV9pbnRlcm5hbEZvcm1hdC0+Ynl0ZXNQZXJQYWNrZXQoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZXNldCgpCit7CisgICAg
bV9zYW1wbGVDb3VudCA9IDA7CisgICAgbV90aW1lc3RhbXAgPSAwOworICAgIG1faG9zdFRpbWUg
PSAtMTsKKworICAgIHVpbnQ4X3QqIGRhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPiht
X2J1ZmZlckxpc3QuZ2V0KCkpICsgbV9idWZmZXJMaXN0QmFzZVNpemU7CisgICAgbV9idWZmZXJM
aXN0LT5tTnVtYmVyQnVmZmVycyA9IG1faW50ZXJuYWxGb3JtYXQtPm51bWJlck9mQ2hhbm5lbFN0
cmVhbXMoKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbV9idWZmZXJMaXN0LT5tTnVt
YmVyQnVmZmVyczsgKytpKSB7CisgICAgICAgIGF1dG8mIGJ1ZmZlciA9IG1fYnVmZmVyTGlzdC0+
bUJ1ZmZlcnNbaV07CisgICAgICAgIGJ1ZmZlci5tRGF0YSA9IGRhdGE7CisgICAgICAgIGJ1ZmZl
ci5tRGF0YUJ5dGVTaXplID0gbV9tYXhCdWZmZXJTaXplUGVyQ2hhbm5lbDsKKyAgICAgICAgYnVm
ZmVyLm1OdW1iZXJDaGFubmVscyA9IG1faW50ZXJuYWxGb3JtYXQtPm51bWJlck9mSW50ZXJsZWF2
ZWRDaGFubmVscygpOworICAgICAgICBkYXRhID0gZGF0YSArIG1fbWF4QnVmZmVyU2l6ZVBlckNo
YW5uZWw7CisgICAgfQorfQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVybygpCit7
CisgICAgemVyb0FCTCgqbV9idWZmZXJMaXN0LCBtX2ludGVybmFsRm9ybWF0LT5ieXRlc1BlclBh
Y2tldCgpICogbV9zYW1wbGVDYXBhY2l0eSk7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVCdWZmZXJM
aXN0Ojp6ZXJvQUJMKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QgYnl0ZUNvdW50KQor
eworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBidWZmZXIubU51bWJlckJ1ZmZlcnM7ICsr
aSkKKyAgICAgICAgbWVtc2V0KGJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSwgMCwgYnl0ZUNvdW50
KTsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb252ZXJ0SW5wdXQoVUlu
dDMyKiBpb051bWJlckRhdGFQYWNrZXRzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSkKK3sKKyAg
ICBpZiAoIWlvTnVtYmVyRGF0YVBhY2tldHMgfHwgIWlvRGF0YSB8fCAhbV9jb252ZXJ0ZXJJbnB1
dEJ1ZmZlcikgeworICAgICAgICBMT0dfRVJST1IoIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6cmVj
b25maWd1cmVJbnB1dCglcCkgaW52YWxpZCBpbnB1dCB0byBBdWRpb0NvbnZlcnRlcklucHV0Iiwg
dGhpcyk7CisgICAgICAgIHJldHVybiBrQXVkaW9Db252ZXJ0ZXJFcnJfVW5zcGVjaWZpZWRFcnJv
cjsKKyAgICB9CisKKyAgICBzaXplX3QgcGFja2V0Q291bnQgPSBtX2NvbnZlcnRlcklucHV0QnVm
ZmVyLT5tQnVmZmVyc1swXS5tRGF0YUJ5dGVTaXplIC8gbV9jb252ZXJ0ZXJJbnB1dEJ5dGVzUGVy
UGFja2V0OworICAgIGlmICgqaW9OdW1iZXJEYXRhUGFja2V0cyA+IG1fc2FtcGxlQ2FwYWNpdHkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvbnZlcnRJbnB1
dCglcCkgbm90IGVub3VnaCBpbnRlcm5hbCBzdG9yYWdlOiBuZWVkZWQgPSAldSwgYXZhaWxhYmxl
ID0gJWx1IiwgdGhpcywgKmlvTnVtYmVyRGF0YVBhY2tldHMsIG1fc2FtcGxlQ2FwYWNpdHkpOwor
ICAgICAgICByZXR1cm4ga0F1ZGlvQ29udmVydGVyRXJyX0ludmFsaWRJbnB1dFNpemU7CisgICAg
fQorCisgICAgKmlvTnVtYmVyRGF0YVBhY2tldHMgPSBzdGF0aWNfY2FzdDxVSW50MzI+KHBhY2tl
dENvdW50KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgaW9EYXRhLT5tTnVtYmVyQnVm
ZmVyczsgKytpKSB7CisgICAgICAgIGlvRGF0YS0+bUJ1ZmZlcnNbaV0ubURhdGEgPSBtX2NvbnZl
cnRlcklucHV0QnVmZmVyLT5tQnVmZmVyc1tpXS5tRGF0YTsKKyAgICAgICAgaW9EYXRhLT5tQnVm
ZmVyc1tpXS5tRGF0YUJ5dGVTaXplID0gbV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlci0+bUJ1ZmZlcnNb
aV0ubURhdGFCeXRlU2l6ZTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMg
QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphdWRpb0NvbnZlcnRlckNhbGxiYWNrKEF1ZGlvQ29udmVy
dGVyUmVmLCBVSW50MzIqIGlvTnVtYmVyRGF0YVBhY2tldHMsIEF1ZGlvQnVmZmVyTGlzdCogaW9E
YXRhLCBBdWRpb1N0cmVhbVBhY2tldERlc2NyaXB0aW9uKiosIHZvaWQqIGluUmVmQ29uKQorewor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdWRpb1NhbXBsZUJ1ZmZlckxpc3QqPihpblJlZkNvbikt
PmNvbnZlcnRJbnB1dChpb051bWJlckRhdGFQYWNrZXRzLCBpb0RhdGEpOworfQorCitPU1N0YXR1
cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKEF1ZGlvQnVmZmVyTGlzdCYgc291cmNl
LCBBdWRpb0NvbnZlcnRlclJlZiBjb252ZXJ0ZXIpCit7CisgICAgcmVzZXQoKTsKKworICAgIEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBpbnB1dEZvcm1hdDsKKyAgICBVSW50MzIgcHJvcGVy
dHlEYXRhU2l6ZSA9IHNpemVvZihpbnB1dEZvcm1hdCk7CisgICAgQXVkaW9Db252ZXJ0ZXJHZXRQ
cm9wZXJ0eShjb252ZXJ0ZXIsIGtBdWRpb0NvbnZlcnRlckN1cnJlbnRJbnB1dFN0cmVhbURlc2Ny
aXB0aW9uLCAmcHJvcGVydHlEYXRhU2l6ZSwgJmlucHV0Rm9ybWF0KTsKKyAgICBtX2NvbnZlcnRl
cklucHV0Qnl0ZXNQZXJQYWNrZXQgPSBpbnB1dEZvcm1hdC5tQnl0ZXNQZXJQYWNrZXQ7CisgICAg
bV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlciA9ICZzb3VyY2U7CisKKyAgICBhdXRvKiBvdXRwdXREYXRh
ID0gbV9idWZmZXJMaXN0LmdldCgpOworCisjaWYgIUxPR19ESVNBQkxFRAorICAgIEF1ZGlvU3Ry
ZWFtQmFzaWNEZXNjcmlwdGlvbiBvdXRwdXRGb3JtYXQ7CisgICAgcHJvcGVydHlEYXRhU2l6ZSA9
IHNpemVvZihvdXRwdXRGb3JtYXQpOworICAgIEF1ZGlvQ29udmVydGVyR2V0UHJvcGVydHkoY29u
dmVydGVyLCBrQXVkaW9Db252ZXJ0ZXJDdXJyZW50T3V0cHV0U3RyZWFtRGVzY3JpcHRpb24sICZw
cm9wZXJ0eURhdGFTaXplLCAmb3V0cHV0Rm9ybWF0KTsKKworICAgIEFTU0VSVChvdXRwdXRGb3Jt
YXQubUNoYW5uZWxzUGVyRnJhbWUgPT0gb3V0cHV0RGF0YS0+bU51bWJlckJ1ZmZlcnMpOworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBvdXRwdXREYXRhLT5tTnVtYmVyQnVmZmVyczsgKytp
KSB7CisgICAgICAgIEFTU0VSVChvdXRwdXREYXRhLT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAg
ICAgIEFTU0VSVChvdXRwdXREYXRhLT5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplKTsKKyAgICB9
CisjZW5kaWYKKworICAgIFVJbnQzMiBzYW1wbGVzQ29udmVydGVkID0gc3RhdGljX2Nhc3Q8VUlu
dDMyPihtX3NhbXBsZUNhcGFjaXR5KTsKKyAgICBPU1N0YXR1cyBlcnIgPSBBdWRpb0NvbnZlcnRl
ckZpbGxDb21wbGV4QnVmZmVyKGNvbnZlcnRlciwgYXVkaW9Db252ZXJ0ZXJDYWxsYmFjaywgdGhp
cywgJnNhbXBsZXNDb252ZXJ0ZWQsIG91dHB1dERhdGEsIG51bGxwdHIpOworICAgIGlmIChlcnIp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKCVw
KSBBdWRpb0NvbnZlcnRlckZpbGxDb21wbGV4QnVmZmVyIHJldHVybmVkIGVycm9yICVkICglLjRz
KSIsIHRoaXMsIGVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBtX3NhbXBsZUNvdW50ID0gc3Rk
OjptaW4obV9zYW1wbGVDYXBhY2l0eSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVzQ29udmVy
dGVkKSk7CisgICAgICAgIHplcm8oKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAg
ICBtX3NhbXBsZUNvdW50ID0gc2FtcGxlc0NvbnZlcnRlZDsKKyAgICByZXR1cm4gMDsKK30KKwor
T1NTdGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3QmIHNvdXJjZSwgQXVkaW9Db252ZXJ0ZXJSZWYgY29udmVydGVyKQoreworICAgIHJldHVy
biBjb3B5RnJvbShzb3VyY2UuYnVmZmVyTGlzdCgpLCBjb252ZXJ0ZXIpOworfQorCitPU1N0YXR1
cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKENBUmluZ0J1ZmZlciYgcmluZ0J1ZmZl
ciwgc2l6ZV90IHNhbXBsZUNvdW50LCB1aW50NjRfdCBzdGFydEZyYW1lLCBDQVJpbmdCdWZmZXI6
OkZldGNoTW9kZSBtb2RlKQoreworICAgIHJlc2V0KCk7CisgICAgaWYgKHJpbmdCdWZmZXIuZmV0
Y2goJmJ1ZmZlckxpc3QoKSwgc2FtcGxlQ291bnQsIHN0YXJ0RnJhbWUsIG1vZGUpICE9IENBUmlu
Z0J1ZmZlcjo6T2spCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIG1f
c2FtcGxlQ291bnQgPSBzYW1wbGVDb3VudDsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBBdWRp
b1NhbXBsZUJ1ZmZlckxpc3Q6OmNvbmZpZ3VyZUJ1ZmZlckxpc3RGb3JTdHJlYW0oQXVkaW9CdWZm
ZXJMaXN0JiBidWZmZXJMaXN0LCBjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1h
dCwgdWludDhfdCogYnVmZmVyRGF0YSwgc2l6ZV90IHNhbXBsZUNvdW50KQoreworICAgIHNpemVf
dCBidWZmZXJDb3VudCA9IGZvcm1hdC5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCk7CisgICAgc2l6
ZV90IGNoYW5uZWxDb3VudCA9IGZvcm1hdC5udW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKTsK
KyAgICBzaXplX3QgYnl0ZXNQZXJDaGFubmVsID0gc2FtcGxlQ291bnQgKiBmb3JtYXQuYnl0ZXNQ
ZXJGcmFtZSgpOworCisgICAgYnVmZmVyTGlzdC5tTnVtYmVyQnVmZmVycyA9IGJ1ZmZlckNvdW50
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJDb3VudDsgKytpKSB7CisgICAg
ICAgIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubU51bWJlckNoYW5uZWxzID0gY2hhbm5lbENvdW50
OworICAgICAgICBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBieXRlc1Bl
ckNoYW5uZWw7CisgICAgICAgIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEgPSBidWZmZXJE
YXRhOworICAgICAgICBpZiAoYnVmZmVyRGF0YSkKKyAgICAgICAgICAgIGJ1ZmZlckRhdGEgPSBi
dWZmZXJEYXRhICsgYnl0ZXNQZXJDaGFubmVsOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
bWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQ0FSaW5nQnVm
ZmVyLmgiCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8
d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUF1ZGlvQ29u
dmVydGVyKiBBdWRpb0NvbnZlcnRlclJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxBdWRpb1NhbXBsZUJ1
ZmZlckxpc3Q+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dD4gY3JlYXRlKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7CisKKyAg
ICB+QXVkaW9TYW1wbGVCdWZmZXJMaXN0KCk7CisKKyAgICBzdGF0aWMgdm9pZCBjb25maWd1cmVC
dWZmZXJMaXN0Rm9yU3RyZWFtKEF1ZGlvQnVmZmVyTGlzdCYsIGNvbnN0IENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiYsIHVpbnQ4X3QqLCBzaXplX3QpOworICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90
IGF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uJik7CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUdhaW4oQXVkaW9CdWZmZXJMaXN0JiwgZmxv
YXQsIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCk7CisgICAgdm9pZCBhcHBseUdh
aW4oZmxvYXQpOworCisgICAgT1NTdGF0dXMgY29weUZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9NQVgpOworICAgIE9TU3RhdHVzIGNvcHlGcm9t
KEF1ZGlvQnVmZmVyTGlzdCYsIEF1ZGlvQ29udmVydGVyUmVmKTsKKyAgICBPU1N0YXR1cyBjb3B5
RnJvbShBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmLCBBdWRpb0NvbnZlcnRlclJlZik7CisgICAgT1NT
dGF0dXMgY29weUZyb20oQ0FSaW5nQnVmZmVyJiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2NF90
IHN0YXJ0RnJhbWUsIENBUmluZ0J1ZmZlcjo6RmV0Y2hNb2RlKTsKKworICAgIE9TU3RhdHVzIG1p
eEZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9N
QVgpOworCisgICAgT1NTdGF0dXMgY29weVRvKEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCBjb3Vu
dCA9IFNJWkVfTUFYKTsKKworICAgIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYg
c3RyZWFtRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsRm9ybWF0LT5zdHJl
YW1EZXNjcmlwdGlvbigpOyB9CisgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0KCkgY29u
c3QgeyByZXR1cm4gKm1fYnVmZmVyTGlzdC5nZXQoKTsgfQorCisgICAgdWludDMyX3Qgc2FtcGxl
Q2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZUNhcGFjaXR5OyB9CisgICAgdWludDMy
X3Qgc2FtcGxlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZUNvdW50OyB9CisgICAgdm9p
ZCBzZXRTYW1wbGVDb3VudChzaXplX3QpOworCisgICAgdWludDY0X3QgdGltZXN0YW1wKCkgY29u
c3QgeyByZXR1cm4gbV90aW1lc3RhbXA7IH0KKyAgICBkb3VibGUgaG9zdFRpbWUoKSBjb25zdCB7
IHJldHVybiBtX2hvc3RUaW1lOyB9CisgICAgdm9pZCBzZXRUaW1lcyh1aW50NjRfdCB0aW1lLCBk
b3VibGUgaG9zdFRpbWUpIHsgbV90aW1lc3RhbXAgPSB0aW1lOyBtX2hvc3RUaW1lID0gaG9zdFRp
bWU7IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHN0YXRpYyB2b2lkIHplcm9BQkwoQXVk
aW9CdWZmZXJMaXN0Jiwgc2l6ZV90KTsKKyAgICB2b2lkIHplcm8oKTsKKworcHJvdGVjdGVkOgor
ICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24m
LCBzaXplX3QpOworCisgICAgc3RhdGljIE9TU3RhdHVzIGF1ZGlvQ29udmVydGVyQ2FsbGJhY2so
QXVkaW9Db252ZXJ0ZXJSZWYsIFVJbnQzMiosIEF1ZGlvQnVmZmVyTGlzdCosIEF1ZGlvU3RyZWFt
UGFja2V0RGVzY3JpcHRpb24qKiwgdm9pZCopOworICAgIE9TU3RhdHVzIGNvbnZlcnRJbnB1dChV
SW50MzIqLCBBdWRpb0J1ZmZlckxpc3QqKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24+IG1faW50ZXJuYWxGb3JtYXQ7CisKKyAgICBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3QqIG1fY29udmVydGVySW5wdXRCdWZmZXIyIHsgbnVsbHB0ciB9OworICAgIEF1ZGlv
QnVmZmVyTGlzdCogbV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlciB7IG51bGxwdHIgfTsKKyAgICB1aW50
MzJfdCBtX2NvbnZlcnRlcklucHV0Qnl0ZXNQZXJQYWNrZXQgeyAwIH07CisKKyAgICB1aW50NjRf
dCBtX3RpbWVzdGFtcCB7IDAgfTsKKyAgICBkb3VibGUgbV9ob3N0VGltZSB7IC0xIH07CisgICAg
c2l6ZV90IG1fc2FtcGxlQ291bnQgeyAwIH07CisgICAgc2l6ZV90IG1fc2FtcGxlQ2FwYWNpdHkg
eyAwIH07CisgICAgc2l6ZV90IG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5uZWwgeyAwIH07CisgICAg
c2l6ZV90IG1fYnVmZmVyTGlzdEJhc2VTaXplIHsgMCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxB
dWRpb0J1ZmZlckxpc3Q+IG1fYnVmZmVyTGlzdDsKK307CisKK2lubGluZSBzaXplX3QgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0OjphdWRpb0J1ZmZlckxpc3RTaXplRm9yU3RyZWFtKGNvbnN0IENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgcmV0dXJuIG9mZnNldG9m
KEF1ZGlvQnVmZmVyTGlzdCwgbUJ1ZmZlcnMpICsgKHNpemVvZihBdWRpb0J1ZmZlcikgKiBzdGQ6
Om1heDx1aW50MzJfdD4oMSwgZGVzY3JpcHRpb24ubnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9T
VFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1w
bGVEYXRhU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdWRp
b1NhbXBsZURhdGFTb3VyY2UuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNs
dWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJDQVJpbmdCdWZmZXIu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFUaW1lQVZGb3VuZGF0aW9u
LmgiCisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVydGVyLmg+CisjaW5jbHVkZSA8
bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKyNpbmNsdWRlIDxtdXRl
eD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworI2luY2x1ZGUgIkNvcmVNZWRpYVNv
ZnRMaW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpjcmVh
dGUoc2l6ZV90IG1heGltdW1TYW1wbGVDb3VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBBdWRpb1NhbXBsZURhdGFTb3VyY2UobWF4aW11bVNhbXBsZUNvdW50KSk7Cit9CisKK0F1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlKHNpemVfdCBtYXhpbXVtU2Ft
cGxlQ291bnQpCisgICAgOiBtX2lucHV0U2FtcGxlT2Zmc2V0KE1lZGlhVGltZTo6aW52YWxpZFRp
bWUoKSkKKyAgICAsIG1fbWF4aW11bVNhbXBsZUNvdW50KG1heGltdW1TYW1wbGVDb3VudCkKK3sK
K30KKworQXVkaW9TYW1wbGVEYXRhU291cmNlOjp+QXVkaW9TYW1wbGVEYXRhU291cmNlKCkKK3sK
KyAgICBtX2lucHV0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIG1fb3V0cHV0RGVzY3JpcHRp
b24gPSBudWxscHRyOworICAgIG1fcmluZ0J1ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKG1fY29u
dmVydGVyKSB7CisgICAgICAgIEF1ZGlvQ29udmVydGVyRGlzcG9zZShtX2NvbnZlcnRlcik7Cisg
ICAgICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9TYW1w
bGVEYXRhU291cmNlOjpzZXRQYXVzZWQoYm9vbCBwYXVzZWQpCit7CisgICAgc3RkOjpsb2NrX2d1
YXJkPExvY2s+IGxvY2sobV9sb2NrKTsKKworICAgIGlmIChwYXVzZWQgPT0gbV9wYXVzZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fdHJhbnNpdGlvbmluZ0Zyb21QYXVzZWQgPSBtX3BhdXNl
ZDsKKyAgICBtX3BhdXNlZCA9IHBhdXNlZDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRh
U291cmNlOjpzZXR1cENvbnZlcnRlcigpCit7CisgICAgQVNTRVJUKG1faW5wdXREZXNjcmlwdGlv
biAmJiBtX291dHB1dERlc2NyaXB0aW9uKTsKKworICAgIGlmIChtX2NvbnZlcnRlcikgeworICAg
ICAgICBBdWRpb0NvbnZlcnRlckRpc3Bvc2UobV9jb252ZXJ0ZXIpOworICAgICAgICBtX2NvbnZl
cnRlciA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCptX2lucHV0RGVzY3JpcHRpb24gPT0g
Km1fb3V0cHV0RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgT1NTdGF0dXMg
ZXJyID0gQXVkaW9Db252ZXJ0ZXJOZXcoJm1faW5wdXREZXNjcmlwdGlvbi0+c3RyZWFtRGVzY3Jp
cHRpb24oKSwgJm1fb3V0cHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2NyaXB0aW9uKCksICZtX2Nv
bnZlcnRlcik7CisgICAgaWYgKGVycikKKyAgICAgICAgTE9HX0VSUk9SKCJBdWRpb1NhbXBsZURh
dGFTb3VyY2U6OnNldHVwQ29udmVydGVyKCVwKSAtIEF1ZGlvQ29udmVydGVyTmV3IHJldHVybmVk
IGVycm9yICVkICglLjRzKSIsIHRoaXMsIGVyciwgKGNoYXIqKSZlcnIpOworCisgICAgcmV0dXJu
IGVycjsKKworfQorCitPU1N0YXR1cyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldElucHV0Rm9y
bWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZm9ybWF0KQoreworICAgIEFTU0VS
VChmb3JtYXQuc2FtcGxlUmF0ZSgpID49IDApOworCisgICAgbV9pbnB1dERlc2NyaXB0aW9uID0g
c3RkOjptYWtlX3VuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KGZvcm1hdCk7CisgICAg
aWYgKG1fb3V0cHV0RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiBzZXR1cENvbnZlcnRlcigp
OworCisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6
c2V0T3V0cHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZm9ybWF0KQor
eworICAgIEFTU0VSVChtX2lucHV0RGVzY3JpcHRpb24pOworICAgIEFTU0VSVChmb3JtYXQuc2Ft
cGxlUmF0ZSgpID49IDApOworCisgICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IHN0ZDo6bWFrZV91
bmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihmb3JtYXQpOworICAgIGlmICghbV9yaW5n
QnVmZmVyKQorICAgICAgICBtX3JpbmdCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPENBUmluZ0J1
ZmZlcj4oKTsKKworICAgIG1fcmluZ0J1ZmZlci0+YWxsb2NhdGUoZm9ybWF0LCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1fbWF4aW11bVNhbXBsZUNvdW50KSk7CisgICAgbV9zY3JhdGNoQnVmZmVyID0g
QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUobV9vdXRwdXREZXNjcmlwdGlvbi0+c3RyZWFt
RGVzY3JpcHRpb24oKSwgbV9tYXhpbXVtU2FtcGxlQ291bnQpOworCisgICAgcmV0dXJuIHNldHVw
Q29udmVydGVyKCk7Cit9CisKK01lZGlhVGltZSBBdWRpb1NhbXBsZURhdGFTb3VyY2U6Omhvc3RU
aW1lKCkgY29uc3QKK3sKKyAgICAvLyBCYXNlZCBvbiBsaXN0aW5nICMyIGZyb20gQXBwbGUgVGVj
aG5pY2FsIFEmQSBRQTEzOTgsIG1vZGlmaWVkIHRvIGJlIHRocmVhZC1zYWZlLgorICAgIHN0YXRp
YyBkb3VibGUgZnJlcXVlbmN5OworICAgIHN0YXRpYyBtYWNoX3RpbWViYXNlX2luZm9fZGF0YV90
IHRpbWViYXNlSW5mbzsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZVRpbWVy
T25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZVRpbWVyT25jZUZsYWcsIFtd
IHsKKyAgICAgICAga2Vybl9yZXR1cm5fdCBrciA9IG1hY2hfdGltZWJhc2VfaW5mbygmdGltZWJh
c2VJbmZvKTsKKyAgICAgICAgZnJlcXVlbmN5ID0gMWUtOSAqIHN0YXRpY19jYXN0PGRvdWJsZT4o
dGltZWJhc2VJbmZvLm51bWVyKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4odGltZWJhc2VJbmZvLmRl
bm9tKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChrciwga3IgPT0gS0VSTl9TVUNDRVNTKTsKKyAg
ICAgICAgQVNTRVJUKHRpbWViYXNlSW5mby5kZW5vbSk7CisgICAgfSk7CisKKyAgICByZXR1cm4g
TWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG1hY2hfYWJzb2x1dGVfdGltZSgpICogZnJlcXVl
bmN5KTsKK30KKwordm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzSW50ZXJu
YWwoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0LCBjb25zdCBNZWRpYVRpbWUmIHByZXNlbnRh
dGlvblRpbWUsIHNpemVfdCBzYW1wbGVDb3VudCkKK3sKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVs
ZCgpKTsKKworICAgIEF1ZGlvQnVmZmVyTGlzdCogc2FtcGxlQnVmZmVyTGlzdDsKKyAgICBpZiAo
bV9jb252ZXJ0ZXIpIHsKKyAgICAgICAgbV9zY3JhdGNoQnVmZmVyLT5yZXNldCgpOworICAgICAg
ICBPU1N0YXR1cyBlcnIgPSBtX3NjcmF0Y2hCdWZmZXItPmNvcHlGcm9tKGJ1ZmZlckxpc3QsIG1f
Y29udmVydGVyKTsKKyAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBzYW1wbGVCdWZmZXJMaXN0ID0gJm1fc2NyYXRjaEJ1ZmZlci0+YnVmZmVyTGlzdCgpOwor
ICAgIH0gZWxzZQorICAgICAgICBzYW1wbGVCdWZmZXJMaXN0ID0gJmJ1ZmZlckxpc3Q7CisKKyAg
ICBNZWRpYVRpbWUgc2FtcGxlVGltZSA9IHByZXNlbnRhdGlvblRpbWU7CisgICAgaWYgKG1faW5w
dXRTYW1wbGVPZmZzZXQgPT0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKSB7CisgICAgICAgIG1f
aW5wdXRTYW1wbGVPZmZzZXQgPSBNZWRpYVRpbWUoMSAtIHNhbXBsZVRpbWUudGltZVZhbHVlKCks
IHNhbXBsZVRpbWUudGltZVNjYWxlKCkpOworICAgICAgICBpZiAobV9pbnB1dFNhbXBsZU9mZnNl
dC50aW1lU2NhbGUoKSAhPSBzYW1wbGVUaW1lLnRpbWVTY2FsZSgpKSB7CisgICAgICAgICAgICAv
LyBGSVhNRTogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGRvIHRoaXMgd2l0aG91dCBjYWxsaW5n
IENNVGltZUNvbnZlcnRTY2FsZS4KKyAgICAgICAgICAgIG1faW5wdXRTYW1wbGVPZmZzZXQgPSB0
b01lZGlhVGltZShDTVRpbWVDb252ZXJ0U2NhbGUodG9DTVRpbWUobV9pbnB1dFNhbXBsZU9mZnNl
dCksIHNhbXBsZVRpbWUudGltZVNjYWxlKCksIGtDTVRpbWVSb3VuZGluZ01ldGhvZF9EZWZhdWx0
KSk7CisgICAgICAgIH0KKyAgICAgICAgTE9HKE1lZGlhQ2FwdHVyZVNhbXBsZXMsICJAQCBwdXNo
U2FtcGxlczogaW5wdXQgc2FtcGxlIG9mZnNldCBpcyAlbGxkLCBtX21heGltdW1TYW1wbGVDb3Vu
dCA9ICV6dSIsIG1faW5wdXRTYW1wbGVPZmZzZXQudGltZVZhbHVlKCksIG1fbWF4aW11bVNhbXBs
ZUNvdW50KTsKKyAgICB9CisgICAgc2FtcGxlVGltZSArPSBtX2lucHV0U2FtcGxlT2Zmc2V0Owor
CisjaWYgIUxPR19ESVNBQkxFRAorICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUxID0gMDsKKyAgICB1
aW50NjRfdCBlbmRGcmFtZTEgPSAwOworICAgIG1fcmluZ0J1ZmZlci0+Z2V0Q3VycmVudEZyYW1l
Qm91bmRzKHN0YXJ0RnJhbWUxLCBlbmRGcmFtZTEpOworI2VuZGlmCisKKyAgICBtX3JpbmdCdWZm
ZXItPnN0b3JlKHNhbXBsZUJ1ZmZlckxpc3QsIHNhbXBsZUNvdW50LCBzYW1wbGVUaW1lLnRpbWVW
YWx1ZSgpKTsKKyAgICBtX3RpbWVTdGFtcCA9IHNhbXBsZVRpbWUudGltZVZhbHVlKCk7CisKKyAg
ICBMT0coTWVkaWFDYXB0dXJlU2FtcGxlcywgIkBAIHB1c2hTYW1wbGVzOiBhZGRlZCAlbGQgc2Ft
cGxlcyBmb3IgdGltZSA9ICVzICh3YXMgJXMpLCBtYWNoIHRpbWUgPSAlbGxkIiwgc2FtcGxlQ291
bnQsIHRvU3RyaW5nKHNhbXBsZVRpbWUpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKHByZXNlbnRh
dGlvblRpbWUpLnV0ZjgoKS5kYXRhKCksIG1hY2hfYWJzb2x1dGVfdGltZSgpKTsKKworI2lmICFM
T0dfRElTQUJMRUQKKyAgICB1aW50NjRfdCBzdGFydEZyYW1lMiA9IDA7CisgICAgdWludDY0X3Qg
ZW5kRnJhbWUyID0gMDsKKyAgICBtX3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhz
dGFydEZyYW1lMiwgZW5kRnJhbWUyKTsKKyAgICBMT0coTWVkaWFDYXB0dXJlU2FtcGxlcywgIkBA
IHB1c2hTYW1wbGVzOiBidWZmZXJlZCByYW5nZSB3YXMgWyVsbGQgLi4gJWxsZF0sIGlzIFslbGxk
IC4uICVsbGRdIiwgc3RhcnRGcmFtZTEsIGVuZEZyYW1lMSwgc3RhcnRGcmFtZTIsIGVuZEZyYW1l
Mik7CisjZW5kaWYKK30KKwordm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVz
KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc2FtcGxlRGVzY3JpcHRpb24sIENN
U2FtcGxlQnVmZmVyUmVmIHNhbXBsZUJ1ZmZlcikKK3sKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9j
az4gbG9jayhtX2xvY2spOworCisgICAgQVNTRVJUX1VOVVNFRChzYW1wbGVEZXNjcmlwdGlvbiwg
Km1faW5wdXREZXNjcmlwdGlvbiA9PSBzYW1wbGVEZXNjcmlwdGlvbik7CisgICAgQVNTRVJUKG1f
cmluZ0J1ZmZlcik7CisKKyAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdDo6YXVkaW9CdWZmZXJMaXN0U2l6ZUZvclN0cmVhbSgqbV9pbnB1dERlc2NyaXB0aW9uLmdl
dCgpKTsKKyAgICB1aW50OF90IGJ1ZmZlckRhdGFbYnVmZmVyU2l6ZV07CisgICAgQXVkaW9CdWZm
ZXJMaXN0KiBidWZmZXJMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0J1ZmZlckxpc3QqPihi
dWZmZXJEYXRhKTsKKyAgICBidWZmZXJMaXN0LT5tTnVtYmVyQnVmZmVycyA9IG1faW5wdXREZXNj
cmlwdGlvbi0+bnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCk7CisKKyAgICBDTUJsb2NrQnVm
ZmVyUmVmIGJ1ZmZlciA9IG51bGxwdHI7CisgICAgT1NTdGF0dXMgZXJyID0gQ01TYW1wbGVCdWZm
ZXJHZXRBdWRpb0J1ZmZlckxpc3RXaXRoUmV0YWluZWRCbG9ja0J1ZmZlcihzYW1wbGVCdWZmZXIs
IG51bGxwdHIsIGJ1ZmZlckxpc3QsIGJ1ZmZlclNpemUsIGtDRkFsbG9jYXRvclN5c3RlbURlZmF1
bHQsIGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIGtDTVNhbXBsZUJ1ZmZlckZsYWdfQXVkaW9C
dWZmZXJMaXN0X0Fzc3VyZTE2Qnl0ZUFsaWdubWVudCwgJmJ1ZmZlcik7CisgICAgaWYgKGVycikg
eworICAgICAgICBMT0dfRVJST1IoIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXMo
JXApIC0gQ01TYW1wbGVCdWZmZXJHZXRBdWRpb0J1ZmZlckxpc3RXaXRoUmV0YWluZWRCbG9ja0J1
ZmZlciByZXR1cm5lZCBlcnJvciAlZCAoJS40cykiLCB0aGlzLCBlcnIsIChjaGFyKikmZXJyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHB1c2hTYW1wbGVzSW50ZXJuYWwoKmJ1ZmZl
ckxpc3QsIHRvTWVkaWFUaW1lKENNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1w
KHNhbXBsZUJ1ZmZlcikpLCBDTVNhbXBsZUJ1ZmZlckdldE51bVNhbXBsZXMoc2FtcGxlQnVmZmVy
KSk7Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxlcyhjb25zdCBB
dWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIHNhbXBsZURlc2NyaXB0aW9uLCBjb25zdCBNZWRp
YVRpbWUmIHNhbXBsZVRpbWUsIHZvaWQqIGF1ZGlvRGF0YSwgc2l6ZV90IHNhbXBsZUNvdW50KQor
eworICAgIHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2xvY2ssIHN0ZDo6dHJ5X3RvX2xv
Y2spOworICAgIEFTU0VSVCgqbV9pbnB1dERlc2NyaXB0aW9uID09IHNhbXBsZURlc2NyaXB0aW9u
KTsKKworICAgIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihzYW1wbGVEZXNj
cmlwdGlvbik7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6
OmF1ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oZGVzY3JpcHRpb24pOworICAgIHVpbnQ4X3Qg
YnVmZmVyRGF0YVtidWZmZXJTaXplXTsKKyAgICBBdWRpb0J1ZmZlckxpc3QqIGJ1ZmZlckxpc3Qg
PSByZWludGVycHJldF9jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+KGJ1ZmZlckRhdGEpOworCisgICAg
QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb25maWd1cmVCdWZmZXJMaXN0Rm9yU3RyZWFtKCpidWZm
ZXJMaXN0LCBkZXNjcmlwdGlvbiwgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYXVkaW9EYXRh
KSwgc2FtcGxlQ291bnQpOworICAgIHB1c2hTYW1wbGVzSW50ZXJuYWwoKmJ1ZmZlckxpc3QsIHNh
bXBsZVRpbWUsIHNhbXBsZUNvdW50KTsKK30KKworYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6
OnB1bGxTYW1wbGVzSW50ZXJuYWwoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCYgc2Ft
cGxlQ291bnQsIHVpbnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIC8qaG9zdFRpbWUqLywgUHVsbE1v
ZGUgbW9kZSkKK3sKKyAgICBBU1NFUlQobV9sb2NrLmlzSGVsZCgpKTsKKworICAgIEFTU0VSVChi
dWZmZXIubU51bWJlckJ1ZmZlcnMgPT0gbV9yaW5nQnVmZmVyLT5jaGFubmVsQ291bnQoKSk7Cisg
ICAgaWYgKGJ1ZmZlci5tTnVtYmVyQnVmZmVycyAhPSBtX3JpbmdCdWZmZXItPmNoYW5uZWxDb3Vu
dCgpKSB7CisgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIHNh
bXBsZUNvdW50KTsKKyAgICAgICAgc2FtcGxlQ291bnQgPSAwOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX3JpbmdCdWZmZXIgfHwgbV9tdXRlZCB8fCBtX2lucHV0
U2FtcGxlT2Zmc2V0ID09IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkgeworICAgICAgICBBdWRp
b1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAg
IHNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVp
bnQ2NF90IHN0YXJ0RnJhbWUgPSAwOworICAgIHVpbnQ2NF90IGVuZEZyYW1lID0gMDsKKyAgICBt
X3JpbmdCdWZmZXItPmdldEN1cnJlbnRGcmFtZUJvdW5kcyhzdGFydEZyYW1lLCBlbmRGcmFtZSk7
CisKKyAgICBpZiAobV90cmFuc2l0aW9uaW5nRnJvbVBhdXNlZCkgeworICAgICAgICB1aW50NjRf
dCBidWZmZXJlZCA9IGVuZEZyYW1lIC0gbV90aW1lU3RhbXA7CisgICAgICAgIGlmIChidWZmZXJl
ZCA8IHNhbXBsZUNvdW50ICogMikgeworICAgICAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0
Ojp6ZXJvQUJMKGJ1ZmZlciwgc2FtcGxlQ291bnQpOworICAgICAgICAgICAgc2FtcGxlQ291bnQg
PSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgZG91YmxlIHR3ZW50eU1TID0gLjAyOworICAgICAgICBjb25zdCBkb3VibGUgdGVuTVMgPSAu
MDE7CisgICAgICAgIGNvbnN0IGRvdWJsZSBmaXZlTVMgPSAuMDA1OworICAgICAgICBkb3VibGUg
c2FtcGxlUmF0ZSA9IG1fb3V0cHV0RGVzY3JpcHRpb24tPnNhbXBsZVJhdGUoKTsKKyAgICAgICAg
aWYgKGJ1ZmZlcmVkID4gc2FtcGxlUmF0ZSAqIHR3ZW50eU1TKQorICAgICAgICAgICAgbV9vdXRw
dXRTYW1wbGVPZmZzZXQgPSBtX3RpbWVTdGFtcCAtIHNhbXBsZVJhdGUgKiB0d2VudHlNUzsKKyAg
ICAgICAgZWxzZSBpZiAoYnVmZmVyZWQgPiBzYW1wbGVSYXRlICogdGVuTVMpCisgICAgICAgICAg
ICBtX291dHB1dFNhbXBsZU9mZnNldCA9IG1fdGltZVN0YW1wIC0gc2FtcGxlUmF0ZSAqIHRlbk1T
OworICAgICAgICBlbHNlIGlmIChidWZmZXJlZCA+IHNhbXBsZVJhdGUgKiBmaXZlTVMpCisgICAg
ICAgICAgICBtX291dHB1dFNhbXBsZU9mZnNldCA9IG1fdGltZVN0YW1wIC0gc2FtcGxlUmF0ZSAq
IGZpdmVNUzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQg
PSBtX3RpbWVTdGFtcDsKKworICAgICAgICBtX3RyYW5zaXRpb25pbmdGcm9tUGF1c2VkID0gZmFs
c2U7CisgICAgfQorCisgICAgdGltZVN0YW1wICs9IG1fb3V0cHV0U2FtcGxlT2Zmc2V0OworCisg
ICAgTE9HKE1lZGlhQ2FwdHVyZVNhbXBsZXMsICIqKiBwdWxsU2FtcGxlczogYXNraW5nIGZvciAl
bGQgc2FtcGxlcyBhdCB0aW1lID0gJWxsZCAod2FzICVsbGQpIiwgc2FtcGxlQ291bnQsIHRpbWVT
dGFtcCwgdGltZVN0YW1wIC0gbV9vdXRwdXRTYW1wbGVPZmZzZXQpOworCisgICAgaW50NjRfdCBm
cmFtZXNBdmFpbGFibGUgPSBzYW1wbGVDb3VudDsKKyAgICBpZiAodGltZVN0YW1wIDwgc3RhcnRG
cmFtZSB8fCB0aW1lU3RhbXAgKyBzYW1wbGVDb3VudCA+IGVuZEZyYW1lKSB7CisgICAgICAgIGlm
ICh0aW1lU3RhbXAgKyBzYW1wbGVDb3VudCA8IHN0YXJ0RnJhbWUgfHwgdGltZVN0YW1wID4gZW5k
RnJhbWUpCisgICAgICAgICAgICBmcmFtZXNBdmFpbGFibGUgPSAwOworICAgICAgICBlbHNlIGlm
ICh0aW1lU3RhbXAgPCBzdGFydEZyYW1lKQorICAgICAgICAgICAgZnJhbWVzQXZhaWxhYmxlID0g
dGltZVN0YW1wICsgc2FtcGxlQ291bnQgLSBzdGFydEZyYW1lOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBmcmFtZXNBdmFpbGFibGUgPSB0aW1lU3RhbXAgKyBzYW1wbGVDb3VudCAtIGVuZEZy
YW1lOworCisgICAgICAgIExPRyhNZWRpYUNhcHR1cmVTYW1wbGVzLCAiKiogcHVsbFNhbXBsZXNJ
bnRlcm5hbDogc2FtcGxlICVsbGQgaXMgbm90IGNvbXBsZXRlbHkgaW4gcmFuZ2UgWyVsbGQgLi4g
JWxsZF0sIHJldHVybmluZyAlbGxkIGZyYW1lcyIsIHRpbWVTdGFtcCwgc3RhcnRGcmFtZSwgZW5k
RnJhbWUsIGZyYW1lc0F2YWlsYWJsZSk7CisKKyAgICAgICAgaWYgKCFmcmFtZXNBdmFpbGFibGUp
IHsKKyAgICAgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIHNh
bXBsZUNvdW50KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChtX3ZvbHVtZSA+PSAuOTUpIHsKKyAgICAgICAgbV9yaW5nQnVmZmVyLT5mZXRj
aCgmYnVmZmVyLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBtb2RlID09IENvcHkgPyBDQVJpbmdC
dWZmZXI6OkNvcHkgOiBDQVJpbmdCdWZmZXI6Ok1peCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGlmIChtX3NjcmF0Y2hCdWZmZXItPmNvcHlGcm9tKCptX3JpbmdCdWZmZXIu
Z2V0KCksIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIG1vZGUgPT0gQ29weSA/IENBUmluZ0J1ZmZl
cjo6Q29weSA6IENBUmluZ0J1ZmZlcjo6TWl4KSkgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBtX3NjcmF0Y2hCdWZmZXItPmFwcGx5R2FpbihtX3ZvbHVtZSk7Cisg
ICAgaWYgKG1fc2NyYXRjaEJ1ZmZlci0+Y29weVRvKGJ1ZmZlciwgc2FtcGxlQ291bnQpKQorICAg
ICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1
bGxTYW1wbGVzKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3Qgc2FtcGxlQ291bnQsIHVp
bnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIGhvc3RUaW1lLCBQdWxsTW9kZSBtb2RlKQoreworICAg
IHN0ZDo6dW5pcXVlX2xvY2s8TG9jaz4gbG9jayhtX2xvY2ssIHN0ZDo6dHJ5X3RvX2xvY2spOwor
ICAgIGlmICghbG9jay5vd25zX2xvY2soKSB8fCAhbV9yaW5nQnVmZmVyKSB7CisgICAgICAgIEF1
ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIHNhbXBsZUNvdW50KTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBwdWxsU2FtcGxlc0ludGVybmFs
KGJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgaG9zdFRpbWUsIG1vZGUpOworfQorCiti
b29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXMoQXVkaW9TYW1wbGVCdWZmZXJM
aXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudCwgdWludDY0X3QgdGltZVN0YW1wLCBkb3Vi
bGUgaG9zdFRpbWUsIFB1bGxNb2RlIG1vZGUpCit7CisgICAgc3RkOjp1bmlxdWVfbG9jazxMb2Nr
PiBsb2NrKG1fbG9jaywgc3RkOjp0cnlfdG9fbG9jayk7CisgICAgaWYgKCFsb2NrLm93bnNfbG9j
aygpIHx8ICFtX3JpbmdCdWZmZXIpIHsKKyAgICAgICAgYnVmZmVyLnplcm8oKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghcHVsbFNhbXBsZXNJbnRlcm5hbChidWZm
ZXIuYnVmZmVyTGlzdCgpLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBob3N0VGltZSwgbW9kZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJ1ZmZlci5zZXRUaW1lcyh0aW1lU3RhbXAs
IGhvc3RUaW1lKTsKKyAgICBidWZmZXIuc2V0U2FtcGxlQ291bnQoc2FtcGxlQ291bnQpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TVFJFQU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFT
b3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oIgorI2lu
Y2x1ZGUgPENvcmVBdWRpby9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CisjaW5jbHVkZSA8d3RmL01lZGlhVGltZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCit0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uICpDTUZv
cm1hdERlc2NyaXB0aW9uUmVmOwordHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIg
KkNNU2FtcGxlQnVmZmVyUmVmOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjsKK2NsYXNzIENBUmluZ0J1ZmZlcjsKKworY2xhc3MgQXVkaW9T
YW1wbGVEYXRhU291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8QXVkaW9TYW1wbGVEYXRhU291cmNl
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+IGNyZWF0
ZShzaXplX3QpOworCisgICAgfkF1ZGlvU2FtcGxlRGF0YVNvdXJjZSgpOworCisgICAgT1NTdGF0
dXMgc2V0SW5wdXRGb3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJik7CisgICAg
T1NTdGF0dXMgc2V0T3V0cHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYp
OworCisgICAgdm9pZCBwdXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRp
b24mLCBjb25zdCBNZWRpYVRpbWUmLCB2b2lkKiwgc2l6ZV90KTsKKyAgICB2b2lkIHB1c2hTYW1w
bGVzKGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYsIENNU2FtcGxlQnVmZmVyUmVm
KTsKKworICAgIGVudW0gUHVsbE1vZGUgeyBDb3B5LCBNaXggfTsKKyAgICBib29sIHB1bGxTYW1w
bGVzKEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCwgdWludDY0X3QsIGRvdWJsZSwgUHVs
bE1vZGUpOworICAgIGJvb2wgcHVsbFNhbXBsZXMoQXVkaW9CdWZmZXJMaXN0Jiwgc2l6ZV90LCB1
aW50NjRfdCwgZG91YmxlLCBQdWxsTW9kZSk7CisKKyAgICB2b2lkIHNldFBhdXNlZChib29sKTsK
KworICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkgeyBtX3ZvbHVtZSA9IHZvbHVtZTsg
fQorICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sdW1lOyB9CisKKyAgICB2
b2lkIHNldE11dGVkKGJvb2wgbXV0ZWQpIHsgbV9tdXRlZCA9IG11dGVkOyB9CisgICAgYm9vbCBt
dXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0ZWQ7IH0KKworcHJvdGVjdGVkOgorICAgIEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZShzaXplX3QpOworCisgICAgT1NTdGF0dXMgc2V0dXBDb252ZXJ0ZXIo
KTsKKyAgICBib29sIHB1bGxTYW1wbGVzSW50ZXJuYWwoQXVkaW9CdWZmZXJMaXN0Jiwgc2l6ZV90
JiwgdWludDY0X3QsIGRvdWJsZSwgUHVsbE1vZGUpOworCisgICAgdm9pZCBwdXNoU2FtcGxlc0lu
dGVybmFsKEF1ZGlvQnVmZmVyTGlzdCYsIGNvbnN0IE1lZGlhVGltZSYsIHNpemVfdCBmcmFtZUNv
dW50KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1f
aW5wdXREZXNjcmlwdGlvbjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uPiBtX291dHB1dERlc2NyaXB0aW9uOworCisgICAgTWVkaWFUaW1lIGhvc3RUaW1lKCkg
Y29uc3Q7CisKKyAgICB1aW50NjRfdCBtX3RpbWVTdGFtcCB7IDAgfTsKKyAgICBkb3VibGUgbV9o
b3N0VGltZSB7IC0xIH07CisKKyAgICBNZWRpYVRpbWUgbV9pbnB1dFNhbXBsZU9mZnNldDsKKyAg
ICB1aW50NjRfdCBtX291dHB1dFNhbXBsZU9mZnNldCB7IDAgfTsKKworICAgIEF1ZGlvQ29udmVy
dGVyUmVmIG1fY29udmVydGVyOworICAgIFJlZlB0cjxBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q+IG1f
c2NyYXRjaEJ1ZmZlcjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQVJpbmdCdWZmZXI+IG1fcmlu
Z0J1ZmZlcjsKKyAgICBzaXplX3QgbV9tYXhpbXVtU2FtcGxlQ291bnQgeyAwIH07CisKKyAgICBM
b2NrIG1fbG9jazsKKyAgICBmbG9hdCBtX3ZvbHVtZSB7IDEuMCB9OworICAgIGJvb2wgbV9tdXRl
ZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3BhdXNlZCB7IHRydWUgfTsKKyAgICBib29sIG1fdHJh
bnNpdGlvbmluZ0Zyb21QYXVzZWQgeyB0cnVlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300535</attachid>
            <date>2017-02-03 08:34:55 -0800</date>
            <delta_ts>2017-02-03 09:12:43 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>audio_buffers_patch_6.txt</filename>
            <type>text/plain</type>
            <size>47469</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTYzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE3LTAyLTAzICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIEFkZCBjbGFz
c2VzIHRvIG1hbmFnZSBhdWRpbyBzYW1wbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3MzkKKworICAgICAgICBSZXZpZXdlZCBieSBKZXIgTm9i
bGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGNvZGUgaXNuJ3QgdXNlZCB5ZXQuCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp+QXVkaW9TYW1wbGVCdWZm
ZXJMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2V0U2Ft
cGxlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjphcHBs
eUdhaW4pOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjptaXhGcm9t
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29weUZyb20pOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5VG8pOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0OjpyZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm8pOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6Y29udmVydElucHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6YXVkaW9Db252ZXJ0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvbmZpZ3VyZUJ1ZmZlckxpc3RGb3JTdHJlYW0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnN0cmVhbURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YnVmZmVy
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnNhbXBsZUNh
cGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2FtcGxl
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp0aW1lc3Rh
bXApOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpob3N0VGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnNldFRpbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6YXVkaW9CdWZmZXJMaXN0U2l6
ZUZvclN0cmVhbSk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0
YVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291
cmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRh
U291cmNlOjp+QXVkaW9TYW1wbGVEYXRhU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6c2V0UGF1c2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZTo6c2V0dXBDb252ZXJ0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9T
YW1wbGVEYXRhU291cmNlOjpzZXRJbnB1dEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1NhbXBsZURhdGFTb3VyY2U6OnNldE91dHB1dEZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6Omhvc3RUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
U2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRWb2x1bWUpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjp2b2x1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6Om11dGVkKToKKwogMjAxNy0wMi0wMyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4
IHRoZSBidWlkbCBhZnRlciByMjExNjMxLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjExNjMzKQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDIsNiArMTQyLDEwIEBACiAJCTA3Mzc5NEZFMTlGNTg2NEUwMEU1QTA0NSAvKiBS
VENOb3RpZmllcnNNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwNzM3OTRGODE5RjU4NjRFMDBFNUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5oICov
OyB9OwogCQkwNzM5NEVDODFCQUIyQ0NEMDBCRTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzM5NEVD
NzFCQUIyQ0NEMDBCRTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgKi87IH07CiAJCTA3
Mzk0RUNBMUJBQjJDRDcwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzM5NEVDOTFCQUIyQ0Q3MDBC
RTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTA3M0I4NzY2MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRp
b1NhbXBsZUJ1ZmZlckxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMDczQjg3NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5jcHAgKi87IH07CisJCTA3M0I4NzY3MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3M0I4NzYzMUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCAq
LzsgfTsKKwkJMDczQjg3NjgxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNC
ODc2NDFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLmNwcCAqLzsgfTsK
KwkJMDczQjg3NjkxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NjUxRTQz
ODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oICovOyB9OwogCQkwNzNCRTM0
MDE3RDE3RTAxMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWEuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQkUzM0UxN0QxN0UwMTAwMkJE
NDMxIC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhLmNwcCAqLzsgfTsKIAkJMDczQkUzNDExN0QxN0Uw
MTAwMkJENDMxIC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNCRTMzRjE3RDE3RTAxMDAyQkQ0MzEgLyogSlNO
YXZpZ2F0b3JVc2VyTWVkaWEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwNzNCRTM0RTE3RDE4MEIyMDAyQkQ0MzEgLyogUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uRGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzIyMUJBQjE3Q0YwQUQ0MDA4NDhFNTEgLyogUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uRGVzY3JpcHRvci5jcHAgKi87IH07CkBAIC03MjM2LDYgKzcyNDAsMTAgQEAKIAkJMDczQjg3
NTYxRTQwRENFNTAwNzFDMEVDIC8qIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCODc1NzFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3M0I4NzYyMUU0Mzg1OUQw
MDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMDczQjg3NjMxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxl
QnVmZmVyTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDczQjg3NjQxRTQz
ODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdWRpb1NhbXBsZURhdGFTb3VyY2UuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwNzNCODc2NTFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9T
YW1wbGVEYXRhU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF1ZGlv
U2FtcGxlRGF0YVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCRTMz
RTE3RDE3RTAxMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWEuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCRTMzRjE3RDE3RTAxMDAyQkQ0MzEgLyogSlNO
YXZpZ2F0b3JVc2VyTWVkaWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNO
YXZpZ2F0b3JVc2VyTWVkaWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0NEVD
RUIxRTBDNEFFNTAwMEQwOTQ0IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDg2MCw3ICsyNDg2OCw2IEBACiAJCUZE
MzE2MDQwMTJCMDI2QTMwMEMxQTM1OSAvKiBhdWRpbyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMDczQjg3NTYxRTQwRENFNTAwNzFDMEVDIC8qIEF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaCAqLywKIAkJCQlDRDY2OUQ2NTFEMjMyREY0MDA0RDE4NjYgLyog
Y29jb2EgKi8sCiAJCQkJQ0QwRUVFMEQxNDc0M0U0ODAwM0VBRkEyIC8qIGlvcyAqLywKIAkJCQlG
RDMxNjBCMDEyQjAyNzA3MDBDMUEzNTkgLyogbWFjICovLApAQCAtMjQ4ODcsNiArMjQ4OTQsNyBA
QAogCQkJCUNEQTc5ODIxMTcwQTIyREMwMEQ0NUM1NSAvKiBBdWRpb1Nlc3Npb24uaCAqLywKIAkJ
CQlGRDMxNjA1MzEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9Tb3VyY2VQcm92aWRlci5oICovLAog
CQkJCUZENjJGNTJEMTQ1ODk4RDgwMDk0QjBFRCAvKiBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50
LmggKi8sCisJCQkJMDczQjg3NTYxRTQwRENFNTAwNzFDMEVDIC8qIEF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaCAqLywKIAkJCQlGRDMxNjA1NDEyQjAyNkY3MDBDMUEzNTkgLyogQXVkaW9VdGlsaXRp
ZXMuY3BwICovLAogCQkJCUZEMzE2MDU1MTJCMDI2RjcwMEMxQTM1OSAvKiBBdWRpb1V0aWxpdGll
cy5oICovLAogCQkJCUZEMzE2MDU2MTJCMDI2RjcwMEMxQTM1OSAvKiBCaXF1YWQuY3BwICovLApA
QCAtMjQ5NTMsNiArMjQ5NjEsMTAgQEAKIAkJRkQzMTYwQjAxMkIwMjcwNzAwQzFBMzU5IC8qIG1h
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDczQjg3
NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAgKi8sCisJCQkJ
MDczQjg3NjMxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oICovLAor
CQkJCTA3M0I4NzY0MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuY3Bw
ICovLAorCQkJCTA3M0I4NzY1MUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2UuaCAqLywKIAkJCQlGRDMxNjBCNTEyQjAyNzJBMDBDMUEzNTkgLyogQXVkaW9CdXNNYWMubW0g
Ki8sCiAJCQkJRkQzMTYwQjYxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRGVzdGluYXRpb25NYWMu
Y3BwICovLAogCQkJCUZEMzE2MEI3MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0Rlc3RpbmF0aW9u
TWFjLmggKi8sCkBAIC0yNTUxNyw2ICsyNTUyOSw3IEBACiAJCQkJMkQ4RkVCREQxNDNFM0VGNzAw
NzI1MDJCIC8qIENTU0Nyb3NzZmFkZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQTIxRUND
RDBBQkYwRkM2MDAyQjgzNEMgLyogQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTQ0NENCRTQxRDg4NjE5OTAwNzNBMDc0IC8qIENTU0N1c3RvbUlkZW50VmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTA3M0I4NzY5MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRpb1NhbXBs
ZURhdGFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNzc5RTE0MUJCMjE1QkIwMENBQThC
RiAvKiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QTlDQzgx
ODE2QkI5QUM2MDBFQzY0NUEgLyogQ1NTRGVmYXVsdFN0eWxlU2hlZXRzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NDQ3NkJEQjFERkNBQzAzMDA2OTBFMjMgLyogQ1NTRGVmZXJyZWRQYXJzZXIuaCBp
biBIZWFkZXJzICovLApAQCAtMjY2OTgsNiArMjY3MTEsNyBAQAogCQkJCTZDNEM5NkRGMUFENDQ4
MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTdDNEM5NkREMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJs
ZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwNzNCODc2NzFF
NDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QzRDOTZERjFBRDQ0ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRS
ZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMjlERjg2MUJCNUI4MEMwMDMyMkExNiAvKiBK
U1JlYWRhYmxlU3RyZWFtUHJpdmF0ZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0U0Qzk2REQxQUQ0NDgzNTAwMzY1QTUxIC8qIEpTUmVhZGFibGVTdHJlYW1Tb3VyY2UuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjgzODQsNyArMjgzOTgsNiBAQAogCQkJCUJFOTEzRDgwMTgxRUY5MjQw
MERDQjA5RSAvKiBUcmFja1ByaXZhdGVCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRkFDMzBG
RTE4NEZCMTQ1MDA4QzRGMUUgLyogVHJhaWxpbmdPYmplY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTYwNzEzMjFCRDgzMDhCMDBEQkM0RjIgLyogVHJhbnNhY3Rpb25PcGVyYXRpb24uaCBpbiBI
ZWFkZXJzICovLAotCQkJCTA3QzA0NkMyMUU0MjUwMjIwMDcyMDFFNyAvKiBBdWRpb1NhbXBsZURh
dGFTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMUM0MEVGODZENDcwMDlEMENBRiAv
KiBUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkI0ODRGNEQxNzFG
ODIxRTAwMDQwNzU1IC8qIFRyYW5zZm9ybUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlFOTExQ0UwRUY4NkQ0NzAwOUQwQ0FGIC8qIFRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yOTk2OSw2ICsyOTk4Miw3IEBACiAJCQkJNTFGNzk4RUYxQkU4ODBFNzAwOEFF
NDkxIC8qIElEQkluZGV4SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUUyNjkzNjFERDNC
RDk3MDA2QjZBNTggLyogSURCSXRlcmF0ZUN1cnNvckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE4NUZDOTQxQkI0QzRFODAwMTI4OThGIC8qIElEQktleS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwNzNCODc2NjFFNDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzk2MUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlE
YXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzk4MUJCNEM0RTgwMDEyODk4RiAvKiBJ
REJLZXlQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzlBMUJCNEM0RTgwMDEyODk4
RiAvKiBJREJLZXlSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5OTc3LDYgKzI5OTkxLDcg
QEAKIAkJCQk1MTYwNzEyRTFCRDgzMDc4MDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbmZvLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQ0EzMUJCNEM0RTgwMDEyODk4RiAvKiBJREJPcGVu
REJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQ0E4MUJCNEM0RTgwMDEyODk4
RiAvKiBJREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3M0I4NzY4MUU0Mzg1QUMw
MDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE0MTI5OTgxQzY5NzY5MDAwNTlFNzE0IC8qIElEQlJlcXVlc3RDb21wbGV0aW9uRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwQTU4RjkxQkFDQzdGMjAwQzE5MjgyIC8qIElEQlJlcXVl
c3REYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDVCMTA5MUJDNDhFMkUwMEU4NjIxOSAv
KiBJREJSZXNvdXJjZUlkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDQ5Myw3ICsz
MDUwOCw2IEBACiAJCQkJRTEyODRCQjIxMDQ0OUZGQTAwRUFFQjUyIC8qIEpTUGFnZVRyYW5zaXRp
b25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGREExNUVCMTEyQjAzRUUxMDAzQTU4M0Eg
LyogSlNQYW5uZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU1MUE4MURGMTcyOThENzcw
MEJGQ0E2MSAvKiBKU1BlcmZvcm1hbmNlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTA3QzA0NkMx
MUU0MjUwMjIwMDcyMDFFNyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0IzOEZENTExQ0NGOTM4OTAwNTkyQTNGIC8qIEpTUGVyZm9ybWFuY2VFbnRyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDQjM4RkQ1NzFDRDIxRTJBMDA1OTJBM0YgLyogSlNQZXJm
b3JtYW5jZUVudHJ5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OEM1OUQwMUUzODJF
QUMwMDQ3ODU5QyAvKiBKU1BlcmZvcm1hbmNlTWFyay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRp
b1NhbXBsZUJ1ZmZlckxpc3QuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF1ZGlvU2FtcGxlQnVmZmVy
TGlzdC5oIgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKworI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJWZWN0b3JNYXRoLmgiCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVy
YXRlLmg+CisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVydGVyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFZlY3Rvck1hdGg7CisKK1JlZjxBdWRp
b1NhbXBsZUJ1ZmZlckxpc3Q+IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y3JlYXRlKGNvbnN0IENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZm9ybWF0LCBzaXplX3QgbWF4aW11bVNhbXBsZUNvdW50
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdChmb3Jt
YXQsIG1heGltdW1TYW1wbGVDb3VudCkpOworfQorCitBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OkF1
ZGlvU2FtcGxlQnVmZmVyTGlzdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1h
dCwgc2l6ZV90IG1heGltdW1TYW1wbGVDb3VudCkKK3sKKyAgICBtX2ludGVybmFsRm9ybWF0ID0g
c3RkOjptYWtlX3VuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KGZvcm1hdCk7CisKKyAg
ICBtX3NhbXBsZUNhcGFjaXR5ID0gbWF4aW11bVNhbXBsZUNvdW50OworICAgIG1fc2FtcGxlQ291
bnQgPSAwOworICAgIG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5uZWwgPSBtYXhpbXVtU2FtcGxlQ291
bnQgKiBmb3JtYXQuYnl0ZXNQZXJGcmFtZSgpIC8gZm9ybWF0Lm51bWJlck9mQ2hhbm5lbFN0cmVh
bXMoKTsKKworICAgIEFTU0VSVChmb3JtYXQuc2FtcGxlUmF0ZSgpID49IDApOworCisgICAgc2l6
ZV90IGJ1ZmZlclNpemUgPSBmb3JtYXQubnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpICogbV9tYXhC
dWZmZXJTaXplUGVyQ2hhbm5lbDsKKyAgICBBU1NFUlQoYnVmZmVyU2l6ZSA8PSBTSVpFX01BWCk7
CisgICAgaWYgKGJ1ZmZlclNpemUgPiBTSVpFX01BWCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9idWZmZXJMaXN0QmFzZVNpemUgPSBhdWRpb0J1ZmZlckxpc3RTaXplRm9yU3RyZWFtKGZvcm1h
dCk7CisgICAgQVNTRVJUKG1fYnVmZmVyTGlzdEJhc2VTaXplIDw9IFNJWkVfTUFYKTsKKyAgICBp
ZiAobV9idWZmZXJMaXN0QmFzZVNpemUgPiBTSVpFX01BWCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgc2l6ZV90IGFsbG9jU2l6ZSA9IG1fYnVmZmVyTGlzdEJhc2VTaXplICsgYnVmZmVyU2l6ZTsK
KyAgICBtX2J1ZmZlckxpc3QgPSBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9CdWZmZXJMaXN0PihzdGF0
aWNfY2FzdDxBdWRpb0J1ZmZlckxpc3QqPig6Om9wZXJhdG9yIG5ldyAoYWxsb2NTaXplKSkpOwor
CisgICAgcmVzZXQoKTsKK30KKworQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp+QXVkaW9TYW1wbGVC
dWZmZXJMaXN0KCkKK3sKKyAgICBtX2ludGVybmFsRm9ybWF0ID0gbnVsbHB0cjsKKyAgICBtX2J1
ZmZlckxpc3QgPSBudWxscHRyOworfQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6c2V0
U2FtcGxlQ291bnQoc2l6ZV90IGNvdW50KQoreworICAgIEFTU0VSVChjb3VudCA8PSBtX3NhbXBs
ZUNhcGFjaXR5KTsKKyAgICBpZiAoY291bnQgPD0gbV9zYW1wbGVDYXBhY2l0eSkKKyAgICAgICAg
bV9zYW1wbGVDb3VudCA9IGNvdW50OworfQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6
YXBwbHlHYWluKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzdCwgZmxvYXQgZ2FpbiwgQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbjo6UENNRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBmb3IgKHVpbnQzMl90
IGkgPSAwOyBpIDwgYnVmZmVyTGlzdC5tTnVtYmVyQnVmZmVyczsgKytpKSB7CisgICAgICAgIHN3
aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50
MTY6IHsKKyAgICAgICAgICAgIGludDE2X3QqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGludDE2X3Qq
PihidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAgICAgIGludCBmcmFtZUNv
dW50ID0gYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGludDE2
X3QpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyBpKyspCisg
ICAgICAgICAgICAgICAgYnVmZmVyW2ldICo9IGdhaW47CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkludDMyOiB7Cisg
ICAgICAgICAgICBpbnQzMl90KiBidWZmZXIgPSBzdGF0aWNfY2FzdDxpbnQzMl90Kj4oYnVmZmVy
TGlzdC5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgICAgICBpbnQgZnJhbWVDb3VudCA9IGJ1
ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSAvIHNpemVvZihpbnQzMl90KTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVDb3VudDsgaSsrKQorICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpXSAqPSBnYWluOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246
OkZsb2F0MzI6IHsKKyAgICAgICAgICAgIGZsb2F0KiBidWZmZXIgPSBzdGF0aWNfY2FzdDxmbG9h
dCo+KGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICAgICAgdkRTUF92c211
bChidWZmZXIsIDEsICZnYWluLCBidWZmZXIsIDEsIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURh
dGFCeXRlU2l6ZSAvIHNpemVvZihmbG9hdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpGbG9hdDY0OiB7CisgICAg
ICAgICAgICBkb3VibGUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PGRvdWJsZSo+KGJ1ZmZlckxpc3Qu
bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICAgICAgZG91YmxlIGdhaW5Bc0RvdWJsZSA9IGdh
aW47CisgICAgICAgICAgICB2RFNQX3ZzbXVsRChidWZmZXIsIDEsICZnYWluQXNEb3VibGUsIGJ1
ZmZlciwgMSwgYnVmZmVyTGlzdC5tQnVmZmVyc1tpXS5tRGF0YUJ5dGVTaXplIC8gc2l6ZW9mKGRv
dWJsZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjpOb25lOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBBdWRp
b1NhbXBsZUJ1ZmZlckxpc3Q6OmFwcGx5R2FpbihmbG9hdCBnYWluKQoreworICAgIGFwcGx5R2Fp
bigqbV9idWZmZXJMaXN0LCBnYWluLCBtX2ludGVybmFsRm9ybWF0LT5mb3JtYXQoKSk7Cit9CisK
K09TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6bWl4RnJvbShjb25zdCBBdWRpb1NhbXBs
ZUJ1ZmZlckxpc3QmIHNvdXJjZSwgc2l6ZV90IGZyYW1lQ291bnQpCit7CisgICAgQVNTRVJUKHNv
dXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpID09IHN0cmVhbURlc2NyaXB0aW9uKCkpOworCisgICAg
aWYgKHNvdXJjZS5zdHJlYW1EZXNjcmlwdGlvbigpICE9IHN0cmVhbURlc2NyaXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIGlmIChmcmFtZUNvdW50ID4g
c291cmNlLnNhbXBsZUNvdW50KCkpCisgICAgICAgIGZyYW1lQ291bnQgPSBzb3VyY2Uuc2FtcGxl
Q291bnQoKTsKKworICAgIGlmIChmcmFtZUNvdW50ID4gbV9zYW1wbGVDYXBhY2l0eSkKKyAgICAg
ICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgbV9zYW1wbGVDb3VudCA9IGZyYW1l
Q291bnQ7CisKKyAgICBBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZUJ1ZmZlciA9IHNvdXJjZS5idWZm
ZXJMaXN0KCk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1fYnVmZmVyTGlzdC0+bU51
bWJlckJ1ZmZlcnM7IGkrKykgeworICAgICAgICBzd2l0Y2ggKG1faW50ZXJuYWxGb3JtYXQtPmZv
cm1hdCgpKSB7CisgICAgICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6SW50MTY6IHsK
KyAgICAgICAgICAgIGludDE2X3QqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8aW50MTZfdCo+
KG1fYnVmZmVyTGlzdC0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICAgICAgaW50MTZfdCog
c291cmNlID0gc3RhdGljX2Nhc3Q8aW50MTZfdCo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5t
RGF0YSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lQ291bnQ7IGkr
KykKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSArPSBzb3VyY2VbaV07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRp
b246OkludDMyOiB7CisgICAgICAgICAgICBpbnQzMl90KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19j
YXN0PGludDMyX3QqPihtX2J1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1EYXRhKTsKKyAgICAgICAg
ICAgIHZEU1BfdmFkZGkoZGVzdGluYXRpb24sIDEsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+
KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSksIDEsIGRlc3RpbmF0aW9uLCAxLCBmcmFt
ZUNvdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6RmxvYXQzMjogeworICAgICAgICAgICAgZmxvYXQqIGRlc3Rp
bmF0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihtX2J1ZmZlckxpc3QtPm1CdWZmZXJzW2ldLm1E
YXRhKTsKKyAgICAgICAgICAgIHZEU1BfdmFkZChkZXN0aW5hdGlvbiwgMSwgcmVpbnRlcnByZXRf
Y2FzdDxmbG9hdCo+KHNvdXJjZUJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSksIDEsIGRlc3RpbmF0
aW9uLCAxLCBmcmFtZUNvdW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6RmxvYXQ2NDogeworICAgICAgICAgICAg
ZG91YmxlKiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGRvdWJsZSo+KG1fYnVmZmVyTGlzdC0+
bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICAgICAgdkRTUF92YWRkRChkZXN0aW5hdGlvbiwg
MSwgcmVpbnRlcnByZXRfY2FzdDxkb3VibGUqPihzb3VyY2VCdWZmZXIubUJ1ZmZlcnNbaV0ubURh
dGEpLCAxLCBkZXN0aW5hdGlvbiwgMSwgZnJhbWVDb3VudCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Ok5vbmU6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvU2FtcGxl
QnVmZmVyTGlzdDo6Y29weUZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0JiBzb3VyY2Us
IHNpemVfdCBmcmFtZUNvdW50KQoreworICAgIEFTU0VSVChzb3VyY2Uuc3RyZWFtRGVzY3JpcHRp
b24oKSA9PSBzdHJlYW1EZXNjcmlwdGlvbigpKTsKKworICAgIGlmIChzb3VyY2Uuc3RyZWFtRGVz
Y3JpcHRpb24oKSAhPSBzdHJlYW1EZXNjcmlwdGlvbigpKQorICAgICAgICByZXR1cm4ga0F1ZGlv
X1BhcmFtRXJyb3I7CisKKyAgICBpZiAoZnJhbWVDb3VudCA+IHNvdXJjZS5zYW1wbGVDb3VudCgp
KQorICAgICAgICBmcmFtZUNvdW50ID0gc291cmNlLnNhbXBsZUNvdW50KCk7CisKKyAgICBpZiAo
ZnJhbWVDb3VudCA+IG1fc2FtcGxlQ2FwYWNpdHkpCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFy
YW1FcnJvcjsKKworICAgIG1fc2FtcGxlQ291bnQgPSBmcmFtZUNvdW50OworCisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IG1fYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnM7IGkrKykgewor
ICAgICAgICB1aW50OF90KiBzb3VyY2VEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KHNvdXJj
ZS5idWZmZXJMaXN0KCkubUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICB1aW50OF90KiBkZXN0
aW5hdGlvbiA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihtX2J1ZmZlckxpc3QtPm1CdWZmZXJzW2ld
Lm1EYXRhKTsKKyAgICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLCBzb3VyY2VEYXRhLCBmcmFtZUNv
dW50ICogbV9pbnRlcm5hbEZvcm1hdC0+Ynl0ZXNQZXJQYWNrZXQoKSk7CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29weVRvKEF1
ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QgZnJhbWVDb3VudCkKK3sKKyAgICBpZiAoZnJh
bWVDb3VudCA+IG1fc2FtcGxlQ291bnQpCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJv
cjsKKyAgICBpZiAoYnVmZmVyLm1OdW1iZXJCdWZmZXJzID4gbV9idWZmZXJMaXN0LT5tTnVtYmVy
QnVmZmVycykKKyAgICAgICAgcmV0dXJuIGtBdWRpb19QYXJhbUVycm9yOworCisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IGJ1ZmZlci5tTnVtYmVyQnVmZmVyczsgaSsrKSB7CisgICAgICAg
IHVpbnQ4X3QqIHNvdXJjZURhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obV9idWZmZXJMaXN0
LT5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgIHVpbnQ4X3QqIGRlc3RpbmF0aW9uID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci5tQnVmZmVyc1tpXS5tRGF0YSk7CisgICAgICAgIG1l
bWNweShkZXN0aW5hdGlvbiwgc291cmNlRGF0YSwgZnJhbWVDb3VudCAqIG1faW50ZXJuYWxGb3Jt
YXQtPmJ5dGVzUGVyUGFja2V0KCkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lk
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6cmVzZXQoKQoreworICAgIG1fc2FtcGxlQ291bnQgPSAw
OworICAgIG1fdGltZXN0YW1wID0gMDsKKyAgICBtX2hvc3RUaW1lID0gLTE7CisKKyAgICB1aW50
OF90KiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9idWZmZXJMaXN0LmdldCgp
KSArIG1fYnVmZmVyTGlzdEJhc2VTaXplOworICAgIG1fYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZl
cnMgPSBtX2ludGVybmFsRm9ybWF0LT5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCk7CisgICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IG1fYnVmZmVyTGlzdC0+bU51bWJlckJ1ZmZlcnM7ICsraSkg
eworICAgICAgICBhdXRvJiBidWZmZXIgPSBtX2J1ZmZlckxpc3QtPm1CdWZmZXJzW2ldOworICAg
ICAgICBidWZmZXIubURhdGEgPSBkYXRhOworICAgICAgICBidWZmZXIubURhdGFCeXRlU2l6ZSA9
IG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5uZWw7CisgICAgICAgIGJ1ZmZlci5tTnVtYmVyQ2hhbm5l
bHMgPSBtX2ludGVybmFsRm9ybWF0LT5udW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKTsKKyAg
ICAgICAgZGF0YSA9IGRhdGEgKyBtX21heEJ1ZmZlclNpemVQZXJDaGFubmVsOworICAgIH0KK30K
Kwordm9pZCBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm8oKQoreworICAgIHplcm9BQkwoKm1f
YnVmZmVyTGlzdCwgbV9pbnRlcm5hbEZvcm1hdC0+Ynl0ZXNQZXJQYWNrZXQoKSAqIG1fc2FtcGxl
Q2FwYWNpdHkpOworfQorCit2b2lkIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChBdWRp
b0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90IGJ5dGVDb3VudCkKK3sKKyAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgYnVmZmVyLm1OdW1iZXJCdWZmZXJzOyArK2kpCisgICAgICAgIG1lbXNl
dChidWZmZXIubUJ1ZmZlcnNbaV0ubURhdGEsIDAsIGJ5dGVDb3VudCk7Cit9CisKK09TU3RhdHVz
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29udmVydElucHV0KFVJbnQzMiogaW9OdW1iZXJEYXRh
UGFja2V0cywgQXVkaW9CdWZmZXJMaXN0KiBpb0RhdGEpCit7CisgICAgaWYgKCFpb051bWJlckRh
dGFQYWNrZXRzIHx8ICFpb0RhdGEgfHwgIW1fY29udmVydGVySW5wdXRCdWZmZXIpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OnJlY29uZmlndXJlSW5wdXQoJXAp
IGludmFsaWQgaW5wdXQgdG8gQXVkaW9Db252ZXJ0ZXJJbnB1dCIsIHRoaXMpOworICAgICAgICBy
ZXR1cm4ga0F1ZGlvQ29udmVydGVyRXJyX1Vuc3BlY2lmaWVkRXJyb3I7CisgICAgfQorCisgICAg
c2l6ZV90IHBhY2tldENvdW50ID0gbV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlci0+bUJ1ZmZlcnNbMF0u
bURhdGFCeXRlU2l6ZSAvIG1fY29udmVydGVySW5wdXRCeXRlc1BlclBhY2tldDsKKyAgICBpZiAo
KmlvTnVtYmVyRGF0YVBhY2tldHMgPiBtX3NhbXBsZUNhcGFjaXR5KSB7CisgICAgICAgIExPR19F
UlJPUigiQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb252ZXJ0SW5wdXQoJXApIG5vdCBlbm91Z2gg
aW50ZXJuYWwgc3RvcmFnZTogbmVlZGVkID0gJXp1LCBhdmFpbGFibGUgPSAlbHUiLCB0aGlzLCAo
c2l6ZV90KSppb051bWJlckRhdGFQYWNrZXRzLCBtX3NhbXBsZUNhcGFjaXR5KTsKKyAgICAgICAg
cmV0dXJuIGtBdWRpb0NvbnZlcnRlckVycl9JbnZhbGlkSW5wdXRTaXplOworICAgIH0KKworICAg
ICppb051bWJlckRhdGFQYWNrZXRzID0gc3RhdGljX2Nhc3Q8VUludDMyPihwYWNrZXRDb3VudCk7
CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGlvRGF0YS0+bU51bWJlckJ1ZmZlcnM7ICsr
aSkgeworICAgICAgICBpb0RhdGEtPm1CdWZmZXJzW2ldLm1EYXRhID0gbV9jb252ZXJ0ZXJJbnB1
dEJ1ZmZlci0+bUJ1ZmZlcnNbaV0ubURhdGE7CisgICAgICAgIGlvRGF0YS0+bUJ1ZmZlcnNbaV0u
bURhdGFCeXRlU2l6ZSA9IG1fY29udmVydGVySW5wdXRCdWZmZXItPm1CdWZmZXJzW2ldLm1EYXRh
Qnl0ZVNpemU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK09TU3RhdHVzIEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdDo6YXVkaW9Db252ZXJ0ZXJDYWxsYmFjayhBdWRpb0NvbnZlcnRlclJlZiwg
VUludDMyKiBpb051bWJlckRhdGFQYWNrZXRzLCBBdWRpb0J1ZmZlckxpc3QqIGlvRGF0YSwgQXVk
aW9TdHJlYW1QYWNrZXREZXNjcmlwdGlvbioqLCB2b2lkKiBpblJlZkNvbikKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QXVkaW9TYW1wbGVCdWZmZXJMaXN0Kj4oaW5SZWZDb24pLT5jb252ZXJ0
SW5wdXQoaW9OdW1iZXJEYXRhUGFja2V0cywgaW9EYXRhKTsKK30KKworT1NTdGF0dXMgQXVkaW9T
YW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShBdWRpb0J1ZmZlckxpc3QmIHNvdXJjZSwgQXVkaW9D
b252ZXJ0ZXJSZWYgY29udmVydGVyKQoreworICAgIHJlc2V0KCk7CisKKyAgICBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24gaW5wdXRGb3JtYXQ7CisgICAgVUludDMyIHByb3BlcnR5RGF0YVNp
emUgPSBzaXplb2YoaW5wdXRGb3JtYXQpOworICAgIEF1ZGlvQ29udmVydGVyR2V0UHJvcGVydHko
Y29udmVydGVyLCBrQXVkaW9Db252ZXJ0ZXJDdXJyZW50SW5wdXRTdHJlYW1EZXNjcmlwdGlvbiwg
JnByb3BlcnR5RGF0YVNpemUsICZpbnB1dEZvcm1hdCk7CisgICAgbV9jb252ZXJ0ZXJJbnB1dEJ5
dGVzUGVyUGFja2V0ID0gaW5wdXRGb3JtYXQubUJ5dGVzUGVyUGFja2V0OworICAgIG1fY29udmVy
dGVySW5wdXRCdWZmZXIgPSAmc291cmNlOworCisgICAgYXV0byogb3V0cHV0RGF0YSA9IG1fYnVm
ZmVyTGlzdC5nZXQoKTsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICBBdWRpb1N0cmVhbUJhc2lj
RGVzY3JpcHRpb24gb3V0cHV0Rm9ybWF0OworICAgIHByb3BlcnR5RGF0YVNpemUgPSBzaXplb2Yo
b3V0cHV0Rm9ybWF0KTsKKyAgICBBdWRpb0NvbnZlcnRlckdldFByb3BlcnR5KGNvbnZlcnRlciwg
a0F1ZGlvQ29udmVydGVyQ3VycmVudE91dHB1dFN0cmVhbURlc2NyaXB0aW9uLCAmcHJvcGVydHlE
YXRhU2l6ZSwgJm91dHB1dEZvcm1hdCk7CisKKyAgICBBU1NFUlQob3V0cHV0Rm9ybWF0Lm1DaGFu
bmVsc1BlckZyYW1lID09IG91dHB1dERhdGEtPm1OdW1iZXJCdWZmZXJzKTsKKyAgICBmb3IgKHVp
bnQzMl90IGkgPSAwOyBpIDwgb3V0cHV0RGF0YS0+bU51bWJlckJ1ZmZlcnM7ICsraSkgeworICAg
ICAgICBBU1NFUlQob3V0cHV0RGF0YS0+bUJ1ZmZlcnNbaV0ubURhdGEpOworICAgICAgICBBU1NF
UlQob3V0cHV0RGF0YS0+bUJ1ZmZlcnNbaV0ubURhdGFCeXRlU2l6ZSk7CisgICAgfQorI2VuZGlm
CisKKyAgICBVSW50MzIgc2FtcGxlc0NvbnZlcnRlZCA9IHN0YXRpY19jYXN0PFVJbnQzMj4obV9z
YW1wbGVDYXBhY2l0eSk7CisgICAgT1NTdGF0dXMgZXJyID0gQXVkaW9Db252ZXJ0ZXJGaWxsQ29t
cGxleEJ1ZmZlcihjb252ZXJ0ZXIsIGF1ZGlvQ29udmVydGVyQ2FsbGJhY2ssIHRoaXMsICZzYW1w
bGVzQ29udmVydGVkLCBvdXRwdXREYXRhLCBudWxscHRyKTsKKyAgICBpZiAoZXJyKSB7CisgICAg
ICAgIExPR19FUlJPUigiQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbSglcCkgQXVkaW9D
b252ZXJ0ZXJGaWxsQ29tcGxleEJ1ZmZlciByZXR1cm5lZCBlcnJvciAlZCAoJS40cykiLCB0aGlz
LCAoaW50KWVyciwgKGNoYXIqKSZlcnIpOworICAgICAgICBtX3NhbXBsZUNvdW50ID0gc3RkOjpt
aW4obV9zYW1wbGVDYXBhY2l0eSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVzQ29udmVydGVk
KSk7CisgICAgICAgIHplcm8oKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBt
X3NhbXBsZUNvdW50ID0gc2FtcGxlc0NvbnZlcnRlZDsKKyAgICByZXR1cm4gMDsKK30KKworT1NT
dGF0dXMgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojpjb3B5RnJvbShBdWRpb1NhbXBsZUJ1ZmZlckxp
c3QmIHNvdXJjZSwgQXVkaW9Db252ZXJ0ZXJSZWYgY29udmVydGVyKQoreworICAgIHJldHVybiBj
b3B5RnJvbShzb3VyY2UuYnVmZmVyTGlzdCgpLCBjb252ZXJ0ZXIpOworfQorCitPU1N0YXR1cyBB
dWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNvcHlGcm9tKENBUmluZ0J1ZmZlciYgcmluZ0J1ZmZlciwg
c2l6ZV90IHNhbXBsZUNvdW50LCB1aW50NjRfdCBzdGFydEZyYW1lLCBDQVJpbmdCdWZmZXI6OkZl
dGNoTW9kZSBtb2RlKQoreworICAgIHJlc2V0KCk7CisgICAgaWYgKHJpbmdCdWZmZXIuZmV0Y2go
JmJ1ZmZlckxpc3QoKSwgc2FtcGxlQ291bnQsIHN0YXJ0RnJhbWUsIG1vZGUpICE9IENBUmluZ0J1
ZmZlcjo6T2spCisgICAgICAgIHJldHVybiBrQXVkaW9fUGFyYW1FcnJvcjsKKworICAgIG1fc2Ft
cGxlQ291bnQgPSBzYW1wbGVDb3VudDsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBBdWRpb1Nh
bXBsZUJ1ZmZlckxpc3Q6OmNvbmZpZ3VyZUJ1ZmZlckxpc3RGb3JTdHJlYW0oQXVkaW9CdWZmZXJM
aXN0JiBidWZmZXJMaXN0LCBjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGZvcm1hdCwg
dWludDhfdCogYnVmZmVyRGF0YSwgc2l6ZV90IHNhbXBsZUNvdW50KQoreworICAgIHNpemVfdCBi
dWZmZXJDb3VudCA9IGZvcm1hdC5udW1iZXJPZkNoYW5uZWxTdHJlYW1zKCk7CisgICAgc2l6ZV90
IGNoYW5uZWxDb3VudCA9IGZvcm1hdC5udW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKTsKKyAg
ICBzaXplX3QgYnl0ZXNQZXJDaGFubmVsID0gc2FtcGxlQ291bnQgKiBmb3JtYXQuYnl0ZXNQZXJG
cmFtZSgpOworCisgICAgYnVmZmVyTGlzdC5tTnVtYmVyQnVmZmVycyA9IGJ1ZmZlckNvdW50Owor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJDb3VudDsgKytpKSB7CisgICAgICAg
IGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubU51bWJlckNoYW5uZWxzID0gY2hhbm5lbENvdW50Owor
ICAgICAgICBidWZmZXJMaXN0Lm1CdWZmZXJzW2ldLm1EYXRhQnl0ZVNpemUgPSBieXRlc1BlckNo
YW5uZWw7CisgICAgICAgIGJ1ZmZlckxpc3QubUJ1ZmZlcnNbaV0ubURhdGEgPSBidWZmZXJEYXRh
OworICAgICAgICBpZiAoYnVmZmVyRGF0YSkKKyAgICAgICAgICAgIGJ1ZmZlckRhdGEgPSBidWZm
ZXJEYXRhICsgYnl0ZXNQZXJDaGFubmVsOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVCdWZmZXJM
aXN0LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFj
L0F1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorCisjaW5jbHVkZSAiQ0FSaW5nQnVmZmVy
LmgiCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUF1ZGlvQ29udmVy
dGVyKiBBdWRpb0NvbnZlcnRlclJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
dWRpb1NhbXBsZUJ1ZmZlckxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3Q+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4g
Y3JlYXRlKGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCk7CisKKyAgICB+
QXVkaW9TYW1wbGVCdWZmZXJMaXN0KCk7CisKKyAgICBzdGF0aWMgdm9pZCBjb25maWd1cmVCdWZm
ZXJMaXN0Rm9yU3RyZWFtKEF1ZGlvQnVmZmVyTGlzdCYsIGNvbnN0IENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiYsIHVpbnQ4X3QqLCBzaXplX3QpOworICAgIHN0YXRpYyBpbmxpbmUgc2l6ZV90IGF1
ZGlvQnVmZmVyTGlzdFNpemVGb3JTdHJlYW0oY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
Jik7CisKKyAgICBzdGF0aWMgdm9pZCBhcHBseUdhaW4oQXVkaW9CdWZmZXJMaXN0JiwgZmxvYXQs
IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCk7CisgICAgdm9pZCBhcHBseUdhaW4o
ZmxvYXQpOworCisgICAgT1NTdGF0dXMgY29weUZyb20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJM
aXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9NQVgpOworICAgIE9TU3RhdHVzIGNvcHlGcm9tKEF1
ZGlvQnVmZmVyTGlzdCYsIEF1ZGlvQ29udmVydGVyUmVmKTsKKyAgICBPU1N0YXR1cyBjb3B5RnJv
bShBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmLCBBdWRpb0NvbnZlcnRlclJlZik7CisgICAgT1NTdGF0
dXMgY29weUZyb20oQ0FSaW5nQnVmZmVyJiwgc2l6ZV90IGZyYW1lQ291bnQsIHVpbnQ2NF90IHN0
YXJ0RnJhbWUsIENBUmluZ0J1ZmZlcjo6RmV0Y2hNb2RlKTsKKworICAgIE9TU3RhdHVzIG1peEZy
b20oY29uc3QgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Jiwgc2l6ZV90IGNvdW50ID0gU0laRV9NQVgp
OworCisgICAgT1NTdGF0dXMgY29weVRvKEF1ZGlvQnVmZmVyTGlzdCYsIHNpemVfdCBjb3VudCA9
IFNJWkVfTUFYKTsKKworICAgIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc3Ry
ZWFtRGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsRm9ybWF0LT5zdHJlYW1E
ZXNjcmlwdGlvbigpOyB9CisgICAgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXN0KCkgY29uc3Qg
eyByZXR1cm4gKm1fYnVmZmVyTGlzdC5nZXQoKTsgfQorCisgICAgdWludDMyX3Qgc2FtcGxlQ2Fw
YWNpdHkoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZUNhcGFjaXR5OyB9CisgICAgdWludDMyX3Qg
c2FtcGxlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZUNvdW50OyB9CisgICAgdm9pZCBz
ZXRTYW1wbGVDb3VudChzaXplX3QpOworCisgICAgdWludDY0X3QgdGltZXN0YW1wKCkgY29uc3Qg
eyByZXR1cm4gbV90aW1lc3RhbXA7IH0KKyAgICBkb3VibGUgaG9zdFRpbWUoKSBjb25zdCB7IHJl
dHVybiBtX2hvc3RUaW1lOyB9CisgICAgdm9pZCBzZXRUaW1lcyh1aW50NjRfdCB0aW1lLCBkb3Vi
bGUgaG9zdFRpbWUpIHsgbV90aW1lc3RhbXAgPSB0aW1lOyBtX2hvc3RUaW1lID0gaG9zdFRpbWU7
IH0KKworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHN0YXRpYyB2b2lkIHplcm9BQkwoQXVkaW9C
dWZmZXJMaXN0Jiwgc2l6ZV90KTsKKyAgICB2b2lkIHplcm8oKTsKKworcHJvdGVjdGVkOgorICAg
IEF1ZGlvU2FtcGxlQnVmZmVyTGlzdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBz
aXplX3QpOworCisgICAgc3RhdGljIE9TU3RhdHVzIGF1ZGlvQ29udmVydGVyQ2FsbGJhY2soQXVk
aW9Db252ZXJ0ZXJSZWYsIFVJbnQzMiosIEF1ZGlvQnVmZmVyTGlzdCosIEF1ZGlvU3RyZWFtUGFj
a2V0RGVzY3JpcHRpb24qKiwgdm9pZCopOworICAgIE9TU3RhdHVzIGNvbnZlcnRJbnB1dChVSW50
MzIqLCBBdWRpb0J1ZmZlckxpc3QqKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24+IG1faW50ZXJuYWxGb3JtYXQ7CisKKyAgICBBdWRpb1NhbXBsZUJ1ZmZl
ckxpc3QqIG1fY29udmVydGVySW5wdXRCdWZmZXIyIHsgbnVsbHB0ciB9OworICAgIEF1ZGlvQnVm
ZmVyTGlzdCogbV9jb252ZXJ0ZXJJbnB1dEJ1ZmZlciB7IG51bGxwdHIgfTsKKyAgICB1aW50MzJf
dCBtX2NvbnZlcnRlcklucHV0Qnl0ZXNQZXJQYWNrZXQgeyAwIH07CisKKyAgICB1aW50NjRfdCBt
X3RpbWVzdGFtcCB7IDAgfTsKKyAgICBkb3VibGUgbV9ob3N0VGltZSB7IC0xIH07CisgICAgc2l6
ZV90IG1fc2FtcGxlQ291bnQgeyAwIH07CisgICAgc2l6ZV90IG1fc2FtcGxlQ2FwYWNpdHkgeyAw
IH07CisgICAgc2l6ZV90IG1fbWF4QnVmZmVyU2l6ZVBlckNoYW5uZWwgeyAwIH07CisgICAgc2l6
ZV90IG1fYnVmZmVyTGlzdEJhc2VTaXplIHsgMCB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxBdWRp
b0J1ZmZlckxpc3Q+IG1fYnVmZmVyTGlzdDsKK307CisKK2lubGluZSBzaXplX3QgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0OjphdWRpb0J1ZmZlckxpc3RTaXplRm9yU3RyZWFtKGNvbnN0IENBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgcmV0dXJuIG9mZnNldG9mKEF1
ZGlvQnVmZmVyTGlzdCwgbUJ1ZmZlcnMpICsgKHNpemVvZihBdWRpb0J1ZmZlcikgKiBzdGQ6Om1h
eDx1aW50MzJfdD4oMSwgZGVzY3JpcHRpb24ubnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJF
QU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVE
YXRhU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1wbGVEYXRhU291cmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdWRpb1Nh
bXBsZURhdGFTb3VyY2UuaCIKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRl
ICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJDQVJpbmdCdWZmZXIuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmgi
CisjaW5jbHVkZSA8QXVkaW9Ub29sYm94L0F1ZGlvQ29udmVydGVyLmg+CisjaW5jbHVkZSA8bWFj
aC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKyNpbmNsdWRlIDxtdXRleD4K
KyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworI2luY2x1ZGUgIkNvcmVNZWRpYVNvZnRM
aW5rLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
UmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gQXVkaW9TYW1wbGVEYXRhU291cmNlOjpjcmVhdGUo
c2l6ZV90IG1heGltdW1TYW1wbGVDb3VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBB
dWRpb1NhbXBsZURhdGFTb3VyY2UobWF4aW11bVNhbXBsZUNvdW50KSk7Cit9CisKK0F1ZGlvU2Ft
cGxlRGF0YVNvdXJjZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlKHNpemVfdCBtYXhpbXVtU2FtcGxl
Q291bnQpCisgICAgOiBtX2lucHV0U2FtcGxlT2Zmc2V0KE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KSkKKyAgICAsIG1fbWF4aW11bVNhbXBsZUNvdW50KG1heGltdW1TYW1wbGVDb3VudCkKK3sKK30K
KworQXVkaW9TYW1wbGVEYXRhU291cmNlOjp+QXVkaW9TYW1wbGVEYXRhU291cmNlKCkKK3sKKyAg
ICBtX2lucHV0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIG1fb3V0cHV0RGVzY3JpcHRpb24g
PSBudWxscHRyOworICAgIG1fcmluZ0J1ZmZlciA9IG51bGxwdHI7CisgICAgaWYgKG1fY29udmVy
dGVyKSB7CisgICAgICAgIEF1ZGlvQ29udmVydGVyRGlzcG9zZShtX2NvbnZlcnRlcik7CisgICAg
ICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgQXVkaW9TYW1wbGVE
YXRhU291cmNlOjpzZXRQYXVzZWQoYm9vbCBwYXVzZWQpCit7CisgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9sb2NrKTsKKworICAgIGlmIChwYXVzZWQgPT0gbV9wYXVzZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fdHJhbnNpdGlvbmluZ0Zyb21QYXVzZWQgPSBtX3BhdXNlZDsK
KyAgICBtX3BhdXNlZCA9IHBhdXNlZDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291
cmNlOjpzZXR1cENvbnZlcnRlcigpCit7CisgICAgQVNTRVJUKG1faW5wdXREZXNjcmlwdGlvbiAm
JiBtX291dHB1dERlc2NyaXB0aW9uKTsKKworICAgIGlmIChtX2NvbnZlcnRlcikgeworICAgICAg
ICBBdWRpb0NvbnZlcnRlckRpc3Bvc2UobV9jb252ZXJ0ZXIpOworICAgICAgICBtX2NvbnZlcnRl
ciA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYgKCptX2lucHV0RGVzY3JpcHRpb24gPT0gKm1f
b3V0cHV0RGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiAwOworCisgICAgT1NTdGF0dXMgZXJy
ID0gQXVkaW9Db252ZXJ0ZXJOZXcoJm1faW5wdXREZXNjcmlwdGlvbi0+c3RyZWFtRGVzY3JpcHRp
b24oKSwgJm1fb3V0cHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2NyaXB0aW9uKCksICZtX2NvbnZl
cnRlcik7CisgICAgaWYgKGVycikKKyAgICAgICAgTE9HX0VSUk9SKCJBdWRpb1NhbXBsZURhdGFT
b3VyY2U6OnNldHVwQ29udmVydGVyKCVwKSAtIEF1ZGlvQ29udmVydGVyTmV3IHJldHVybmVkIGVy
cm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciopJmVycik7CisKKyAgICByZXR1
cm4gZXJyOworCit9CisKK09TU3RhdHVzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0SW5wdXRG
b3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQpCit7CisgICAgQVNT
RVJUKGZvcm1hdC5zYW1wbGVSYXRlKCkgPj0gMCk7CisKKyAgICBtX2lucHV0RGVzY3JpcHRpb24g
PSBzdGQ6Om1ha2VfdW5pcXVlPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4oZm9ybWF0KTsKKyAg
ICBpZiAobV9vdXRwdXREZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuIHNldHVwQ29udmVydGVy
KCk7CisKKyAgICByZXR1cm4gMDsKK30KKworT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNl
OjpzZXRPdXRwdXRGb3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBmb3JtYXQp
Cit7CisgICAgQVNTRVJUKG1faW5wdXREZXNjcmlwdGlvbik7CisgICAgQVNTRVJUKGZvcm1hdC5z
YW1wbGVSYXRlKCkgPj0gMCk7CisKKyAgICBtX291dHB1dERlc2NyaXB0aW9uID0gc3RkOjptYWtl
X3VuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KGZvcm1hdCk7CisgICAgaWYgKCFtX3Jp
bmdCdWZmZXIpCisgICAgICAgIG1fcmluZ0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8Q0FSaW5n
QnVmZmVyPigpOworCisgICAgbV9yaW5nQnVmZmVyLT5hbGxvY2F0ZShmb3JtYXQsIHN0YXRpY19j
YXN0PHNpemVfdD4obV9tYXhpbXVtU2FtcGxlQ291bnQpKTsKKyAgICBtX3NjcmF0Y2hCdWZmZXIg
PSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6OmNyZWF0ZShtX291dHB1dERlc2NyaXB0aW9uLT5zdHJl
YW1EZXNjcmlwdGlvbigpLCBtX21heGltdW1TYW1wbGVDb3VudCk7CisKKyAgICByZXR1cm4gc2V0
dXBDb252ZXJ0ZXIoKTsKK30KKworTWVkaWFUaW1lIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6aG9z
dFRpbWUoKSBjb25zdAoreworICAgIC8vIEJhc2VkIG9uIGxpc3RpbmcgIzIgZnJvbSBBcHBsZSBU
ZWNobmljYWwgUSZBIFFBMTM5OCwgbW9kaWZpZWQgdG8gYmUgdGhyZWFkLXNhZmUuCisgICAgc3Rh
dGljIGRvdWJsZSBmcmVxdWVuY3k7CisgICAgc3RhdGljIG1hY2hfdGltZWJhc2VfaW5mb19kYXRh
X3QgdGltZWJhc2VJbmZvOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplVGlt
ZXJPbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplVGltZXJPbmNlRmxhZywg
W10geworICAgICAgICBrZXJuX3JldHVybl90IGtyID0gbWFjaF90aW1lYmFzZV9pbmZvKCZ0aW1l
YmFzZUluZm8pOworICAgICAgICBmcmVxdWVuY3kgPSAxZS05ICogc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih0aW1lYmFzZUluZm8ubnVtZXIpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPih0aW1lYmFzZUluZm8u
ZGVub20pOworICAgICAgICBBU1NFUlRfVU5VU0VEKGtyLCBrciA9PSBLRVJOX1NVQ0NFU1MpOwor
ICAgICAgICBBU1NFUlQodGltZWJhc2VJbmZvLmRlbm9tKTsKKyAgICB9KTsKKworICAgIHJldHVy
biBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobWFjaF9hYnNvbHV0ZV90aW1lKCkgKiBmcmVx
dWVuY3kpOworfQorCit2b2lkIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXNJbnRl
cm5hbChBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlckxpc3QsIGNvbnN0IE1lZGlhVGltZSYgcHJlc2Vu
dGF0aW9uVGltZSwgc2l6ZV90IHNhbXBsZUNvdW50KQoreworICAgIEFTU0VSVChtX2xvY2suaXNI
ZWxkKCkpOworCisgICAgQXVkaW9CdWZmZXJMaXN0KiBzYW1wbGVCdWZmZXJMaXN0OworICAgIGlm
IChtX2NvbnZlcnRlcikgeworICAgICAgICBtX3NjcmF0Y2hCdWZmZXItPnJlc2V0KCk7CisgICAg
ICAgIE9TU3RhdHVzIGVyciA9IG1fc2NyYXRjaEJ1ZmZlci0+Y29weUZyb20oYnVmZmVyTGlzdCwg
bV9jb252ZXJ0ZXIpOworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHNhbXBsZUJ1ZmZlckxpc3QgPSAmbV9zY3JhdGNoQnVmZmVyLT5idWZmZXJMaXN0KCk7
CisgICAgfSBlbHNlCisgICAgICAgIHNhbXBsZUJ1ZmZlckxpc3QgPSAmYnVmZmVyTGlzdDsKKwor
ICAgIE1lZGlhVGltZSBzYW1wbGVUaW1lID0gcHJlc2VudGF0aW9uVGltZTsKKyAgICBpZiAobV9p
bnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpIHsKKyAgICAgICAg
bV9pbnB1dFNhbXBsZU9mZnNldCA9IE1lZGlhVGltZSgxIC0gc2FtcGxlVGltZS50aW1lVmFsdWUo
KSwgc2FtcGxlVGltZS50aW1lU2NhbGUoKSk7CisgICAgICAgIGlmIChtX2lucHV0U2FtcGxlT2Zm
c2V0LnRpbWVTY2FsZSgpICE9IHNhbXBsZVRpbWUudGltZVNjYWxlKCkpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZG8gdGhpcyB3aXRob3V0IGNhbGxp
bmcgQ01UaW1lQ29udmVydFNjYWxlLgorICAgICAgICAgICAgbV9pbnB1dFNhbXBsZU9mZnNldCA9
IHRvTWVkaWFUaW1lKENNVGltZUNvbnZlcnRTY2FsZSh0b0NNVGltZShtX2lucHV0U2FtcGxlT2Zm
c2V0KSwgc2FtcGxlVGltZS50aW1lU2NhbGUoKSwga0NNVGltZVJvdW5kaW5nTWV0aG9kX0RlZmF1
bHQpKTsKKyAgICAgICAgfQorICAgICAgICBMT0coTWVkaWFDYXB0dXJlU2FtcGxlcywgIkBAIHB1
c2hTYW1wbGVzOiBpbnB1dCBzYW1wbGUgb2Zmc2V0IGlzICVsbGQsIG1fbWF4aW11bVNhbXBsZUNv
dW50ID0gJXp1IiwgbV9pbnB1dFNhbXBsZU9mZnNldC50aW1lVmFsdWUoKSwgbV9tYXhpbXVtU2Ft
cGxlQ291bnQpOworICAgIH0KKyAgICBzYW1wbGVUaW1lICs9IG1faW5wdXRTYW1wbGVPZmZzZXQ7
CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdWludDY0X3Qgc3RhcnRGcmFtZTEgPSAwOworICAg
IHVpbnQ2NF90IGVuZEZyYW1lMSA9IDA7CisgICAgbV9yaW5nQnVmZmVyLT5nZXRDdXJyZW50RnJh
bWVCb3VuZHMoc3RhcnRGcmFtZTEsIGVuZEZyYW1lMSk7CisjZW5kaWYKKworICAgIG1fcmluZ0J1
ZmZlci0+c3RvcmUoc2FtcGxlQnVmZmVyTGlzdCwgc2FtcGxlQ291bnQsIHNhbXBsZVRpbWUudGlt
ZVZhbHVlKCkpOworICAgIG1fdGltZVN0YW1wID0gc2FtcGxlVGltZS50aW1lVmFsdWUoKTsKKwor
ICAgIExPRyhNZWRpYUNhcHR1cmVTYW1wbGVzLCAiQEAgcHVzaFNhbXBsZXM6IGFkZGVkICVsZCBz
YW1wbGVzIGZvciB0aW1lID0gJXMgKHdhcyAlcyksIG1hY2ggdGltZSA9ICVsbGQiLCBzYW1wbGVD
b3VudCwgdG9TdHJpbmcoc2FtcGxlVGltZSkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcocHJlc2Vu
dGF0aW9uVGltZSkudXRmOCgpLmRhdGEoKSwgbWFjaF9hYnNvbHV0ZV90aW1lKCkpOworCisjaWYg
IUxPR19ESVNBQkxFRAorICAgIHVpbnQ2NF90IHN0YXJ0RnJhbWUyID0gMDsKKyAgICB1aW50NjRf
dCBlbmRGcmFtZTIgPSAwOworICAgIG1fcmluZ0J1ZmZlci0+Z2V0Q3VycmVudEZyYW1lQm91bmRz
KHN0YXJ0RnJhbWUyLCBlbmRGcmFtZTIpOworICAgIExPRyhNZWRpYUNhcHR1cmVTYW1wbGVzLCAi
QEAgcHVzaFNhbXBsZXM6IGJ1ZmZlcmVkIHJhbmdlIHdhcyBbJWxsZCAuLiAlbGxkXSwgaXMgWyVs
bGQgLi4gJWxsZF0iLCBzdGFydEZyYW1lMSwgZW5kRnJhbWUxLCBzdGFydEZyYW1lMiwgZW5kRnJh
bWUyKTsKKyNlbmRpZgorfQorCit2b2lkIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBs
ZXMoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzYW1wbGVEZXNjcmlwdGlvbiwg
Q01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQoreworICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG1fbG9jayk7CisKKyAgICBBU1NFUlRfVU5VU0VEKHNhbXBsZURlc2NyaXB0aW9u
LCAqbV9pbnB1dERlc2NyaXB0aW9uID09IHNhbXBsZURlc2NyaXB0aW9uKTsKKyAgICBBU1NFUlQo
bV9yaW5nQnVmZmVyKTsKKworICAgIHNpemVfdCBidWZmZXJTaXplID0gQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0OjphdWRpb0J1ZmZlckxpc3RTaXplRm9yU3RyZWFtKCptX2lucHV0RGVzY3JpcHRpb24u
Z2V0KCkpOworICAgIHVpbnQ4X3QgYnVmZmVyRGF0YVtidWZmZXJTaXplXTsKKyAgICBBdWRpb0J1
ZmZlckxpc3QqIGJ1ZmZlckxpc3QgPSByZWludGVycHJldF9jYXN0PEF1ZGlvQnVmZmVyTGlzdCo+
KGJ1ZmZlckRhdGEpOworICAgIGJ1ZmZlckxpc3QtPm1OdW1iZXJCdWZmZXJzID0gbV9pbnB1dERl
c2NyaXB0aW9uLT5udW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKTsKKworICAgIENNQmxvY2tC
dWZmZXJSZWYgYnVmZmVyID0gbnVsbHB0cjsKKyAgICBPU1N0YXR1cyBlcnIgPSBDTVNhbXBsZUJ1
ZmZlckdldEF1ZGlvQnVmZmVyTGlzdFdpdGhSZXRhaW5lZEJsb2NrQnVmZmVyKHNhbXBsZUJ1ZmZl
ciwgbnVsbHB0ciwgYnVmZmVyTGlzdCwgYnVmZmVyU2l6ZSwga0NGQWxsb2NhdG9yU3lzdGVtRGVm
YXVsdCwga0NGQWxsb2NhdG9yU3lzdGVtRGVmYXVsdCwga0NNU2FtcGxlQnVmZmVyRmxhZ19BdWRp
b0J1ZmZlckxpc3RfQXNzdXJlMTZCeXRlQWxpZ25tZW50LCAmYnVmZmVyKTsKKyAgICBpZiAoZXJy
KSB7CisgICAgICAgIExPR19FUlJPUigiQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxl
cyglcCkgLSBDTVNhbXBsZUJ1ZmZlckdldEF1ZGlvQnVmZmVyTGlzdFdpdGhSZXRhaW5lZEJsb2Nr
QnVmZmVyIHJldHVybmVkIGVycm9yICVkICglLjRzKSIsIHRoaXMsIChpbnQpZXJyLCAoY2hhciop
JmVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwdXNoU2FtcGxlc0ludGVybmFs
KCpidWZmZXJMaXN0LCB0b01lZGlhVGltZShDTVNhbXBsZUJ1ZmZlckdldFByZXNlbnRhdGlvblRp
bWVTdGFtcChzYW1wbGVCdWZmZXIpKSwgQ01TYW1wbGVCdWZmZXJHZXROdW1TYW1wbGVzKHNhbXBs
ZUJ1ZmZlcikpOworfQorCit2b2lkIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXMo
Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBzYW1wbGVEZXNjcmlwdGlvbiwgY29u
c3QgTWVkaWFUaW1lJiBzYW1wbGVUaW1lLCB2b2lkKiBhdWRpb0RhdGEsIHNpemVfdCBzYW1wbGVD
b3VudCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9sb2NrLCBzdGQ6OnRy
eV90b19sb2NrKTsKKyAgICBBU1NFUlQoKm1faW5wdXREZXNjcmlwdGlvbiA9PSBzYW1wbGVEZXNj
cmlwdGlvbik7CisKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oc2Ft
cGxlRGVzY3JpcHRpb24pOworICAgIHNpemVfdCBidWZmZXJTaXplID0gQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0OjphdWRpb0J1ZmZlckxpc3RTaXplRm9yU3RyZWFtKGRlc2NyaXB0aW9uKTsKKyAgICB1
aW50OF90IGJ1ZmZlckRhdGFbYnVmZmVyU2l6ZV07CisgICAgQXVkaW9CdWZmZXJMaXN0KiBidWZm
ZXJMaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0J1ZmZlckxpc3QqPihidWZmZXJEYXRhKTsK
KworICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6Y29uZmlndXJlQnVmZmVyTGlzdEZvclN0cmVh
bSgqYnVmZmVyTGlzdCwgZGVzY3JpcHRpb24sIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGF1
ZGlvRGF0YSksIHNhbXBsZUNvdW50KTsKKyAgICBwdXNoU2FtcGxlc0ludGVybmFsKCpidWZmZXJM
aXN0LCBzYW1wbGVUaW1lLCBzYW1wbGVDb3VudCk7Cit9CisKK2Jvb2wgQXVkaW9TYW1wbGVEYXRh
U291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXpl
X3QmIHNhbXBsZUNvdW50LCB1aW50NjRfdCB0aW1lU3RhbXAsIGRvdWJsZSAvKmhvc3RUaW1lKi8s
IFB1bGxNb2RlIG1vZGUpCit7CisgICAgQVNTRVJUKG1fbG9jay5pc0hlbGQoKSk7CisKKyAgICBB
U1NFUlQoYnVmZmVyLm1OdW1iZXJCdWZmZXJzID09IG1fcmluZ0J1ZmZlci0+Y2hhbm5lbENvdW50
KCkpOworICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZlcnMgIT0gbV9yaW5nQnVmZmVyLT5jaGFu
bmVsQ291bnQoKSkgeworICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVm
ZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgIHNhbXBsZUNvdW50ID0gMDsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9yaW5nQnVmZmVyIHx8IG1fbXV0ZWQgfHwg
bV9pbnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpIHsKKyAgICAg
ICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgc2FtcGxlQ291bnQpOwor
ICAgICAgICBzYW1wbGVDb3VudCA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICB1aW50NjRfdCBzdGFydEZyYW1lID0gMDsKKyAgICB1aW50NjRfdCBlbmRGcmFtZSA9IDA7
CisgICAgbV9yaW5nQnVmZmVyLT5nZXRDdXJyZW50RnJhbWVCb3VuZHMoc3RhcnRGcmFtZSwgZW5k
RnJhbWUpOworCisgICAgaWYgKG1fdHJhbnNpdGlvbmluZ0Zyb21QYXVzZWQpIHsKKyAgICAgICAg
dWludDY0X3QgYnVmZmVyZWQgPSBlbmRGcmFtZSAtIG1fdGltZVN0YW1wOworICAgICAgICBpZiAo
YnVmZmVyZWQgPCBzYW1wbGVDb3VudCAqIDIpIHsKKyAgICAgICAgICAgIEF1ZGlvU2FtcGxlQnVm
ZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIHNhbXBsZUNvdW50KTsKKyAgICAgICAgICAgIHNhbXBs
ZUNvdW50ID0gMDsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNvbnN0IGRvdWJsZSB0d2VudHlNUyA9IC4wMjsKKyAgICAgICAgY29uc3QgZG91YmxlIHRl
bk1TID0gLjAxOworICAgICAgICBjb25zdCBkb3VibGUgZml2ZU1TID0gLjAwNTsKKyAgICAgICAg
ZG91YmxlIHNhbXBsZVJhdGUgPSBtX291dHB1dERlc2NyaXB0aW9uLT5zYW1wbGVSYXRlKCk7Cisg
ICAgICAgIGlmIChidWZmZXJlZCA+IHNhbXBsZVJhdGUgKiB0d2VudHlNUykKKyAgICAgICAgICAg
IG1fb3V0cHV0U2FtcGxlT2Zmc2V0ID0gbV90aW1lU3RhbXAgLSBzYW1wbGVSYXRlICogdHdlbnR5
TVM7CisgICAgICAgIGVsc2UgaWYgKGJ1ZmZlcmVkID4gc2FtcGxlUmF0ZSAqIHRlbk1TKQorICAg
ICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQgPSBtX3RpbWVTdGFtcCAtIHNhbXBsZVJhdGUg
KiB0ZW5NUzsKKyAgICAgICAgZWxzZSBpZiAoYnVmZmVyZWQgPiBzYW1wbGVSYXRlICogZml2ZU1T
KQorICAgICAgICAgICAgbV9vdXRwdXRTYW1wbGVPZmZzZXQgPSBtX3RpbWVTdGFtcCAtIHNhbXBs
ZVJhdGUgKiBmaXZlTVM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fb3V0cHV0U2FtcGxl
T2Zmc2V0ID0gbV90aW1lU3RhbXA7CisKKyAgICAgICAgbV90cmFuc2l0aW9uaW5nRnJvbVBhdXNl
ZCA9IGZhbHNlOworICAgIH0KKworICAgIHRpbWVTdGFtcCArPSBtX291dHB1dFNhbXBsZU9mZnNl
dDsKKworICAgIExPRyhNZWRpYUNhcHR1cmVTYW1wbGVzLCAiKiogcHVsbFNhbXBsZXM6IGFza2lu
ZyBmb3IgJWxkIHNhbXBsZXMgYXQgdGltZSA9ICVsbGQgKHdhcyAlbGxkKSIsIHNhbXBsZUNvdW50
LCB0aW1lU3RhbXAsIHRpbWVTdGFtcCAtIG1fb3V0cHV0U2FtcGxlT2Zmc2V0KTsKKworICAgIGlu
dDY0X3QgZnJhbWVzQXZhaWxhYmxlID0gc2FtcGxlQ291bnQ7CisgICAgaWYgKHRpbWVTdGFtcCA8
IHN0YXJ0RnJhbWUgfHwgdGltZVN0YW1wICsgc2FtcGxlQ291bnQgPiBlbmRGcmFtZSkgeworICAg
ICAgICBpZiAodGltZVN0YW1wICsgc2FtcGxlQ291bnQgPCBzdGFydEZyYW1lIHx8IHRpbWVTdGFt
cCA+IGVuZEZyYW1lKQorICAgICAgICAgICAgZnJhbWVzQXZhaWxhYmxlID0gMDsKKyAgICAgICAg
ZWxzZSBpZiAodGltZVN0YW1wIDwgc3RhcnRGcmFtZSkKKyAgICAgICAgICAgIGZyYW1lc0F2YWls
YWJsZSA9IHRpbWVTdGFtcCArIHNhbXBsZUNvdW50IC0gc3RhcnRGcmFtZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZnJhbWVzQXZhaWxhYmxlID0gdGltZVN0YW1wICsgc2FtcGxlQ291bnQg
LSBlbmRGcmFtZTsKKworICAgICAgICBMT0coTWVkaWFDYXB0dXJlU2FtcGxlcywgIioqIHB1bGxT
YW1wbGVzSW50ZXJuYWw6IHNhbXBsZSAlbGxkIGlzIG5vdCBjb21wbGV0ZWx5IGluIHJhbmdlIFsl
bGxkIC4uICVsbGRdLCByZXR1cm5pbmcgJWxsZCBmcmFtZXMiLCB0aW1lU3RhbXAsIHN0YXJ0RnJh
bWUsIGVuZEZyYW1lLCBmcmFtZXNBdmFpbGFibGUpOworCisgICAgICAgIGlmICghZnJhbWVzQXZh
aWxhYmxlKSB7CisgICAgICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVm
ZmVyLCBzYW1wbGVDb3VudCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobV92b2x1bWUgPj0gLjk1KSB7CisgICAgICAgIG1fcmluZ0J1ZmZl
ci0+ZmV0Y2goJmJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgbW9kZSA9PSBDb3B5ID8g
Q0FSaW5nQnVmZmVyOjpDb3B5IDogQ0FSaW5nQnVmZmVyOjpNaXgpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobV9zY3JhdGNoQnVmZmVyLT5jb3B5RnJvbSgqbV9yaW5n
QnVmZmVyLmdldCgpLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBtb2RlID09IENvcHkgPyBDQVJp
bmdCdWZmZXI6OkNvcHkgOiBDQVJpbmdCdWZmZXI6Ok1peCkpIHsKKyAgICAgICAgQXVkaW9TYW1w
bGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgc2FtcGxlQ291bnQpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9zY3JhdGNoQnVmZmVyLT5hcHBseUdhaW4obV92b2x1
bWUpOworICAgIGlmIChtX3NjcmF0Y2hCdWZmZXItPmNvcHlUbyhidWZmZXIsIHNhbXBsZUNvdW50
KSkKKyAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgc2FtcGxl
Q291bnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQXVkaW9TYW1wbGVEYXRhU291
cmNlOjpwdWxsU2FtcGxlcyhBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90IHNhbXBsZUNv
dW50LCB1aW50NjRfdCB0aW1lU3RhbXAsIGRvdWJsZSBob3N0VGltZSwgUHVsbE1vZGUgbW9kZSkK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPExvY2s+IGxvY2sobV9sb2NrLCBzdGQ6OnRyeV90b19s
b2NrKTsKKyAgICBpZiAoIWxvY2sub3duc19sb2NrKCkgfHwgIW1fcmluZ0J1ZmZlcikgeworICAg
ICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVmZmVyLCBzYW1wbGVDb3VudCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gcHVsbFNhbXBsZXNJ
bnRlcm5hbChidWZmZXIsIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIGhvc3RUaW1lLCBtb2RlKTsK
K30KKworYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzKEF1ZGlvU2FtcGxl
QnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3Qgc2FtcGxlQ291bnQsIHVpbnQ2NF90IHRpbWVTdGFt
cCwgZG91YmxlIGhvc3RUaW1lLCBQdWxsTW9kZSBtb2RlKQoreworICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8TG9jaz4gbG9jayhtX2xvY2ssIHN0ZDo6dHJ5X3RvX2xvY2spOworICAgIGlmICghbG9jay5v
d25zX2xvY2soKSB8fCAhbV9yaW5nQnVmZmVyKSB7CisgICAgICAgIGJ1ZmZlci56ZXJvKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIXB1bGxTYW1wbGVzSW50ZXJu
YWwoYnVmZmVyLmJ1ZmZlckxpc3QoKSwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgaG9zdFRpbWUs
IG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBidWZmZXIuc2V0VGltZXModGlt
ZVN0YW1wLCBob3N0VGltZSk7CisgICAgYnVmZmVyLnNldFNhbXBsZUNvdW50KHNhbXBsZUNvdW50
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vbWFjL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQXVkaW9TYW1w
bGVEYXRhU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCisKKyNpbmNsdWRlICJBdWRpb1NhbXBsZUJ1ZmZlckxpc3Qu
aCIKKyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlv
biAqQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKK3R5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxl
QnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CitjbGFzcyBDQVJpbmdCdWZmZXI7CisKK2NsYXNz
IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZT4geworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QXVkaW9TYW1wbGVEYXRhU291cmNl
PiBjcmVhdGUoc2l6ZV90KTsKKworICAgIH5BdWRpb1NhbXBsZURhdGFTb3VyY2UoKTsKKworICAg
IE9TU3RhdHVzIHNldElucHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYp
OworICAgIE9TU3RhdHVzIHNldE91dHB1dEZvcm1hdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24mKTsKKworICAgIHZvaWQgcHVzaFNhbXBsZXMoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uJiwgY29uc3QgTWVkaWFUaW1lJiwgdm9pZCosIHNpemVfdCk7CisgICAgdm9pZCBw
dXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mLCBDTVNhbXBsZUJ1
ZmZlclJlZik7CisKKyAgICBlbnVtIFB1bGxNb2RlIHsgQ29weSwgTWl4IH07CisgICAgYm9vbCBw
dWxsU2FtcGxlcyhBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmLCBzaXplX3QsIHVpbnQ2NF90LCBkb3Vi
bGUsIFB1bGxNb2RlKTsKKyAgICBib29sIHB1bGxTYW1wbGVzKEF1ZGlvQnVmZmVyTGlzdCYsIHNp
emVfdCwgdWludDY0X3QsIGRvdWJsZSwgUHVsbE1vZGUpOworCisgICAgdm9pZCBzZXRQYXVzZWQo
Ym9vbCk7CisKKyAgICB2b2lkIHNldFZvbHVtZShmbG9hdCB2b2x1bWUpIHsgbV92b2x1bWUgPSB2
b2x1bWU7IH0KKyAgICBmbG9hdCB2b2x1bWUoKSBjb25zdCB7IHJldHVybiBtX3ZvbHVtZTsgfQor
CisgICAgdm9pZCBzZXRNdXRlZChib29sIG11dGVkKSB7IG1fbXV0ZWQgPSBtdXRlZDsgfQorICAg
IGJvb2wgbXV0ZWQoKSBjb25zdCB7IHJldHVybiBtX211dGVkOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBBdWRpb1NhbXBsZURhdGFTb3VyY2Uoc2l6ZV90KTsKKworICAgIE9TU3RhdHVzIHNldHVwQ29u
dmVydGVyKCk7CisgICAgYm9vbCBwdWxsU2FtcGxlc0ludGVybmFsKEF1ZGlvQnVmZmVyTGlzdCYs
IHNpemVfdCYsIHVpbnQ2NF90LCBkb3VibGUsIFB1bGxNb2RlKTsKKworICAgIHZvaWQgcHVzaFNh
bXBsZXNJbnRlcm5hbChBdWRpb0J1ZmZlckxpc3QmLCBjb25zdCBNZWRpYVRpbWUmLCBzaXplX3Qg
ZnJhbWVDb3VudCk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uPiBtX2lucHV0RGVzY3JpcHRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsKKworICAgIE1lZGlhVGltZSBob3N0
VGltZSgpIGNvbnN0OworCisgICAgdWludDY0X3QgbV90aW1lU3RhbXAgeyAwIH07CisgICAgZG91
YmxlIG1faG9zdFRpbWUgeyAtMSB9OworCisgICAgTWVkaWFUaW1lIG1faW5wdXRTYW1wbGVPZmZz
ZXQ7CisgICAgdWludDY0X3QgbV9vdXRwdXRTYW1wbGVPZmZzZXQgeyAwIH07CisKKyAgICBBdWRp
b0NvbnZlcnRlclJlZiBtX2NvbnZlcnRlcjsKKyAgICBSZWZQdHI8QXVkaW9TYW1wbGVCdWZmZXJM
aXN0PiBtX3NjcmF0Y2hCdWZmZXI7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FSaW5nQnVmZmVy
PiBtX3JpbmdCdWZmZXI7CisgICAgc2l6ZV90IG1fbWF4aW11bVNhbXBsZUNvdW50IHsgMCB9Owor
CisgICAgTG9jayBtX2xvY2s7CisgICAgZmxvYXQgbV92b2x1bWUgeyAxLjAgfTsKKyAgICBib29s
IG1fbXV0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9wYXVzZWQgeyB0cnVlIH07CisgICAgYm9v
bCBtX3RyYW5zaXRpb25pbmdGcm9tUGF1c2VkIHsgdHJ1ZSB9OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>