<?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>47345</bug_id>
          
          <creation_ts>2010-10-07 06:52:30 -0700</creation_ts>
          <short_desc>[Qt] Implement SharedMemory for WebKit2</short_desc>
          <delta_ts>2010-10-26 09:22:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>48238</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoltan Horvath">zoltan</reporter>
          <assigned_to name="Zoltan Horvath">zoltan</assigned_to>
          <cc>christian.webkit</cc>
    
    <cc>kenneth</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>290973</commentid>
    <comment_count>0</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-07 06:52:30 -0700</bug_when>
    <thetext>Implement unimplemented functions in SharedMemoryQt.cpp.
Move MappedMemory.h and MappedMemoryPool.cpp from Shared/qt to Platform/qt, change WebKit2.pro&apos;s affected lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290974</commentid>
    <comment_count>1</comment_count>
      <attachid>70077</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-07 06:54:48 -0700</bug_when>
    <thetext>Created attachment 70077
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290975</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 06:55:30 -0700</bug_when>
    <thetext>Attachment 70077 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Shared/qt/UpdateChunk.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 5 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>290991</commentid>
    <comment_count>3</comment_count>
      <attachid>70086</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-07 07:19:32 -0700</bug_when>
    <thetext>Created attachment 70086
updated proposed patch

I removed unnecessary headers.
I&apos;ll open a new bug to remove global functions and make UpdateChunk to use SharedMemory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291017</commentid>
    <comment_count>4</comment_count>
      <attachid>70086</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-07 08:08:22 -0700</bug_when>
    <thetext>Comment on attachment 70086
updated proposed patch

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

&gt; WebKit2/Platform/qt/SharedMemoryQt.cpp:170
&gt; +
&gt; +    for (unsigned n = 0; n &lt; pool-&gt;size(); ++n) {
&gt; +        MappedMemory mm = pool-&gt;at(n);
&gt; +        *current = mm;

There is no need to allocating a MappedMemory for storing the result. You should do it like &apos;current = &amp;pool-&gt;at(n)&apos;

&gt; WebKit2/Platform/qt/SharedMemoryQt.cpp:173
&gt; +
&gt; +    for (unsigned n = 0; n &lt; pool-&gt;size(); ++n) {
&gt; +        MappedMemory mm = pool-&gt;at(n);
&gt; +        *current = mm;
&gt; +        if (current-&gt;data == p) 
&gt; +            return current;
&gt; +    }

You have almost the same for in mapFile and mapMemory. All of these should be merged to a static that returns
with a pointer and you can do what you want to do with the pointer at the caller site.

&gt; WebKit2/Platform/qt/SharedMemoryQt.cpp:192
&gt; +
&gt; +    QString file = searchForMappedMemory(reinterpret_cast&lt;uchar*&gt;(m_data))-&gt;file-&gt;fileName();

Here you should check for 0 pointer or asserting that the result is not zero. I think it should be never be zero here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291068</commentid>
    <comment_count>5</comment_count>
      <attachid>70100</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-07 09:53:50 -0700</bug_when>
    <thetext>Created attachment 70100
updated proposed patch

(In reply to comment #4)
&gt; There is no need to allocating a MappedMemory for storing the result. You should do it like &apos;current = &amp;pool-&gt;at(n)&apos;

It&apos;s true. Done.

&gt; You have almost the same for in mapFile and mapMemory. All of these should be merged to a static that returns
&gt; with a pointer and you can do what you want to do with the pointer at the caller site.

Unfortunately, we can&apos;t merge them, these needs to do different things.
 
&gt; Here you should check for 0 pointer or asserting that the result is not zero. I think it should be never be zero here.

I added a null check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291071</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 09:55:16 -0700</bug_when>
    <thetext>Attachment 70100 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Shared/qt/UpdateChunk.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit2/Platform/qt/SharedMemoryQt.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit2/Platform/qt/SharedMemoryQt.cpp:182:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 3 in 5 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>291087</commentid>
    <comment_count>7</comment_count>
      <attachid>70107</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-07 10:13:43 -0700</bug_when>
    <thetext>Created attachment 70107
proposed patch

Style issues solved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291096</commentid>
    <comment_count>8</comment_count>
      <attachid>70107</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-07 10:22:09 -0700</bug_when>
    <thetext>Comment on attachment 70107
proposed patch

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

&gt; WebKit2/Platform/qt/SharedMemoryQt.cpp:198
&gt; +
&gt; +    QString file;   
&gt; +
&gt; +    if (mm)
&gt; +        file = mm-&gt;file-&gt;fileName();
&gt; +
&gt; +    if (file.isEmpty())
&gt; +        return false;

Why not just returning early if mm is zero? You can fix that before landing I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291586</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-08 05:49:19 -0700</bug_when>
    <thetext>I really think you should discuss this patch with Antti.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291594</commentid>
    <comment_count>10</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-08 06:06:39 -0700</bug_when>
    <thetext>Okay, then I&apos;m waiting for Antti. 
Btw, I think the correct way of WebKit developing is to sending patches into bugzilla. Fortunately, my actual changes wouldn&apos;t cause much rebasing trouble for Antti.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294702</commentid>
    <comment_count>11</comment_count>
      <attachid>70856</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-15 05:23:44 -0700</bug_when>
    <thetext>Created attachment 70856
updated patch

Updated to latest.
Ping for r!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294763</commentid>
    <comment_count>12</comment_count>
      <attachid>70869</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-15 08:37:35 -0700</bug_when>
    <thetext>Created attachment 70869
svn patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294766</commentid>
    <comment_count>13</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-15 08:46:53 -0700</bug_when>
    <thetext>Attachment 70869 did not build on qt:
Build output: http://queues.webkit.org/results/4423050</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294768</commentid>
    <comment_count>14</comment_count>
      <attachid>70871</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-15 08:51:07 -0700</bug_when>
    <thetext>Created attachment 70871
svn patch

This contains the svn mv infos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294857</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-15 12:33:45 -0700</bug_when>
    <thetext>Antti, could you comment on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296140</commentid>
    <comment_count>16</comment_count>
      <attachid>70871</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-10-19 06:16:31 -0700</bug_when>
    <thetext>Comment on attachment 70871
svn patch

We discussed this on irc. The direction looks good but I would prefer a patch with more completed refactoring.
 
- MappedMemory.h has two classes and it is not clear which interfaces are public
- MappedMemory.h vs. impl in MappedMemoryPool.cpp
- Would it reduce confusion to move MappedMemory code to SharedMemoryQt.cpp and make UpdateChunk use SharedMemory?
- as is, mapFile/mapMemory should be declared in header, not in .cpp
- mapFile/mapMemory should probably be in class scope
- MappedMemoryPool::cleanUp() (and possibly the whole class) might be unnecessary since we unlink the shared memory files right after mapping.
- Nokia copyrights should be maintained when copying code to new files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298760</commentid>
    <comment_count>17</comment_count>
      <attachid>71722</attachid>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-25 02:30:42 -0700</bug_when>
    <thetext>Created attachment 71722
proposed patch

(In reply to comment #16)
&gt; (From update of attachment 70871 [details])
&gt; We discussed this on irc. The direction looks good but I would prefer a patch with more completed refactoring.
&gt; 
&gt; - MappedMemory.h has two classes and it is not clear which interfaces are public

I renamed MappedMemory.h to MappedMemoryPool.h.

&gt; - MappedMemory.h vs. impl in MappedMemoryPool.cpp

I put MappedMemory implementation into MappedMemoryPool.

&gt; - Would it reduce confusion to move MappedMemory code to SharedMemoryQt.cpp and make UpdateChunk use SharedMemory?

I didn&apos;t do this. In this mod, UpdateChunk uses MappedMemoryPool.

&gt; - as is, mapFile/mapMemory should be declared in header, not in .cpp
&gt; - mapFile/mapMemory should probably be in class scope
&gt; - MappedMemoryPool::cleanUp() (and possibly the whole class) might be unnecessary since we unlink the shared memory files right after mapping.

I put mapFile/mapMemory into MappedMemoryPool and removed unnecessary methods.

&gt; - Nokia copyrights should be maintained when copying code to new files

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298762</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-25 02:34:56 -0700</bug_when>
    <thetext>Attachment 71722 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Platform/qt/MappedMemoryPool.cpp:28:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 8 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>298777</commentid>
    <comment_count>19</comment_count>
      <attachid>71722</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-25 03:23:54 -0700</bug_when>
    <thetext>Comment on attachment 71722
proposed patch

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

&gt; WebKit2/Platform/qt/MappedMemoryPool.h:36
&gt; +struct MappedMemory {

Here

&gt; WebKit2/Platform/qt/MappedMemoryPool.h:40
&gt; +    struct MappedMemory {

Why is this defined twice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298778</commentid>
    <comment_count>20</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-25 03:24:38 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 71722 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71722&amp;action=review
&gt; 
&gt; &gt; WebKit2/Platform/qt/MappedMemoryPool.h:36
&gt; &gt; +struct MappedMemory {
&gt; 
&gt; Here
&gt; 
&gt; &gt; WebKit2/Platform/qt/MappedMemoryPool.h:40
&gt; &gt; +    struct MappedMemory {
&gt; 
&gt; Why is this defined twice?

Hmm, it is like the patch is showing the same file twise!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298806</commentid>
    <comment_count>21</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-25 05:28:31 -0700</bug_when>
    <thetext>(In reply to comment #20)

&gt; Hmm, it is like the patch is showing the same file twise!

It caused by the svn move and after the changes, didn&apos;t it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298808</commentid>
    <comment_count>22</comment_count>
      <attachid>71722</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-25 05:30:35 -0700</bug_when>
    <thetext>Comment on attachment 71722
proposed patch

Maybe :-) just be careful when landing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298827</commentid>
    <comment_count>23</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-25 06:57:02 -0700</bug_when>
    <thetext>Thanks for the review!
Patch landed successfully.
Committed revision 70450.
http://trac.webkit.org/changeset/70450</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299459</commentid>
    <comment_count>24</comment_count>
    <who name="Zoltan Horvath">zoltan</who>
    <bug_when>2010-10-26 08:03:08 -0700</bug_when>
    <thetext>The guys rolled out the patch in r70457.
It contained 1 wrong line in SharedMemoryQt.cpp. (line 128) 
I removed the wrong line and reland the patch in r70520.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70077</attachid>
            <date>2010-10-07 06:54:48 -0700</date>
            <delta_ts>2010-10-07 07:19:32 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>sharedmemoryqt.patch</filename>
            <type>text/plain</type>
            <size>22155</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCShyZXZpc2lvbiA2OTMw
MykKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTkgKzI2LDE4
OSBAQAogCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgorI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUlPRGV2aWNlPgor
I2luY2x1ZGUgPFFUZW1wb3JhcnlGaWxlPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAorTWFwcGVkTWVtb3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUsIFFJT0Rl
dmljZTo6T3Blbk1vZGUgb3Blbk1vZGUgPSBRSU9EZXZpY2U6OlJlYWRXcml0ZSkKK3sKKyAgICBN
YXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24pIHsKKyAgICAgICAg
TWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7CisgICAgICAgIGlmIChjdXJyZW50
LnNpemUgPj0gc2l6ZSAmJiBjdXJyZW50LmlzRnJlZSgpKSB7CisgICAgICAgICAgICBjdXJyZW50
Lm1hcmtVc2VkKCk7CisgICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7CisgICAgICAgIH0KKyAg
ICB9CisgICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKKyAgICBuZXdNYXAuc2l6ZSA9IHNpemU7Cisg
ICAgbmV3TWFwLmZpbGUgPSBuZXcgUVRlbXBvcmFyeUZpbGUoUURpcjo6dGVtcFBhdGgoKSArICIv
V2ViS2l0MlVwZGF0ZUNodW5rIik7CisgICAgbmV3TWFwLmZpbGUtPm9wZW4ob3Blbk1vZGUpOwor
ICAgIG5ld01hcC5maWxlLT5yZXNpemUobmV3TWFwLnNpemUpOworICAgIG5ld01hcC5kYXRhID0g
bmV3TWFwLmZpbGUtPm1hcCgwLCBuZXdNYXAuc2l6ZSk7CisgICAgbmV3TWFwLmZpbGUtPmNsb3Nl
KCk7CisgICAgbmV3TWFwLm1hcmtVc2VkKCk7CisgICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3
TWFwKTsKK30KKworTWFwcGVkTWVtb3J5KiBtYXBGaWxlKFN0cmluZyBmaWxlTmFtZSwgc2l6ZV90
IHNpemUsIFFJT0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUgPSBRSU9EZXZpY2U6OlJlYWRXcml0
ZSkKK3sKKyAgICBNYXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5z
dGFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24p
IHsKKyAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7CisgICAgICAg
IGlmIChjdXJyZW50LmZpbGUtPmZpbGVOYW1lKCkgPT0gc3RhdGljX2Nhc3Q8UVN0cmluZz4oZmls
ZU5hbWUpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQuaXNGcmVlKCkpOworICAgICAg
ICAgICAgcmV0dXJuICZjdXJyZW50OworICAgICAgICB9CisgICAgfQorICAgIE1hcHBlZE1lbW9y
eSBuZXdNYXA7CisgICAgbmV3TWFwLmZpbGUgPSBuZXcgUUZpbGUoc3RhdGljX2Nhc3Q8UVN0cmlu
Zz4oZmlsZU5hbWUpKTsKKyAgICBpZiAoIW5ld01hcC5maWxlLT5vcGVuKG9wZW5Nb2RlKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgbmV3TWFwLmRhdGEgPSBuZXdNYXAuZmlsZS0+bWFwKDAsIHNp
emUpOworICAgIEFTU0VSVCghbmV3TWFwLmlzRnJlZSgpKTsKKyAgICBuZXdNYXAuZmlsZS0+Y2xv
c2UoKTsKKyAgICByZXR1cm4gJnBvb2wtPmFwcGVuZChuZXdNYXApOworfQorCiBTaGFyZWRNZW1v
cnk6OkhhbmRsZTo6SGFuZGxlKCkKKyAgICA6IG1fZmlsZU5hbWUoKQorICAgICwgbV9zaXplKDAp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5I
YW5kbGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK2Jvb2wgU2hhcmVkTWVtb3J5
OjpIYW5kbGU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZU5hbWUuaXNOdWxs
KCk7Cit9CisKIHZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBlbmNvZGVyLT5lbmNvZGVVSW50NjQobV9zaXplKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9m
aWxlTmFtZSk7CisgICAgbV9maWxlTmFtZSA9IFN0cmluZygpOwogfQogCiBib29sIFNoYXJlZE1l
bW9yeTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBI
YW5kbGUmIGhhbmRsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworICAgIEFTU0VSVChoYW5kbGUubV9maWxl
TmFtZS5pc0VtcHR5KCkpOworCisgICAgdWludDY0X3Qgc2l6ZTsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZVVJbnQ2NChzaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5n
IGZpbGVOYW1lOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZpbGVOYW1lKSkKKyAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBoYW5kbGUubV9zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUubV9m
aWxlTmFtZSA9IGZpbGVOYW1lOworICAgIHJldHVybiB0cnVlOwogfQogCiBQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBNYXBwZWRNZW1vcnkqIG1tID0gbWFw
TWVtb3J5KHNpemUsIFFJT0RldmljZTo6UmVhZFdyaXRlKTsKKworICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hh
cmVkTWVtb3J5LT5tX3NpemUgPSBzaXplOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4obW0tPmRhdGEpOworCisgICAgcmV0dXJuIHNoYXJlZE1lbW9y
eS5yZWxlYXNlKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUUlPRGV2aWNlOjpPcGVuTW9kZSBtYXBQ
cm90ZWN0aW9uKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIHN3
aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkT25seToKKyAg
ICAgICAgcmV0dXJuIFFJT0RldmljZTo6UmVhZE9ubHk7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6
OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuIFFJT0RldmljZTo6UmVhZFdyaXRlOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBRSU9EZXZpY2U6Ok5vdE9w
ZW47Cit9CisKKwogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsgICAgCisgICAgaWYgKGhhbmRsZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2Rl
ID0gbWFwUHJvdGVjdGlvbihwcm90ZWN0aW9uKTsKKworICAgIE1hcHBlZE1lbW9yeSogbW0gPSBt
YXBGaWxlKGhhbmRsZS5tX2ZpbGVOYW1lLCBoYW5kbGUubV9zaXplLCBvcGVuTW9kZSk7CisKKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1l
bW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gaGFuZGxlLm1fc2l6ZTsKKyAgICBz
aGFyZWRNZW1vcnktPm1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1tLT5kYXRhKTsK
KworICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCitzdGF0aWMgTWFwcGVk
TWVtb3J5KiBzZWFyY2hGb3JNYXBwZWRNZW1vcnkodWNoYXIqIHApCit7CisgICAgTWFwcGVkTWVt
b3J5UG9vbCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7CisKKyAgICBNYXBw
ZWRNZW1vcnkqIGN1cnJlbnQgPSBuZXcgTWFwcGVkTWVtb3J5OworCisgICAgZm9yICh1bnNpZ25l
ZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsgKytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSBt
bSA9IHBvb2wtPmF0KG4pOworICAgICAgICAqY3VycmVudCA9IG1tOworICAgICAgICBpZiAoY3Vy
cmVudC0+ZGF0YSA9PSBwKSAKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgIH0KKyAg
ICBkZWxldGUgY3VycmVudDsKKyAgICByZXR1cm4gMDsKK30KKwogU2hhcmVkTWVtb3J5Ojp+U2hh
cmVkTWVtb3J5KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIE1hcHBlZE1lbW9yeSog
bWFwcGVkTWVtb3J5ID0gc2VhcmNoRm9yTWFwcGVkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8dWNo
YXIqPihtX2RhdGEpKTsKKyAgICBpZiAobWFwcGVkTWVtb3J5KSB7IAorICAgICAgICBtYXBwZWRN
ZW1vcnktPm1hcmtGcmVlKCk7CisgICAgICAgIGRlbGV0ZSBtYXBwZWRNZW1vcnk7CisgICAgfQog
fQotICAgIAorCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxl
LCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGhhbmRsZS5tX2ZpbGVOYW1lLmlzTnVsbCgpKTsKKyAg
ICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworCisgICAgUVN0cmluZyBmaWxlID0gc2VhcmNoRm9y
TWFwcGVkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihtX2RhdGEpKS0+ZmlsZS0+Zmls
ZU5hbWUoKTsKKyAgICAKKyAgICBpZiAoZmlsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGhhbmRsZS5tX2ZpbGVOYW1lID0gZmlsZTsKKyAgICBoYW5kbGUubV9zaXpl
ID0gbV9zaXplOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHVuc2lnbmVkIFNoYXJlZE1lbW9y
eTo6c3lzdGVtUGFnZVNpemUoKQogewogICAgIHN0YXRpYyB1bnNpZ25lZCBwYWdlU2l6ZSA9IDA7
CiAKKyAgICBpZiAoIXBhZ2VTaXplKQorICAgICAgICBwYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7
CisKICAgICByZXR1cm4gcGFnZVNpemU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCklu
ZGV4OiBXZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQy
L1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIE1hcHBlZE1lbW9yeV9oCisjZGVmaW5lIE1hcHBlZE1lbW9y
eV9oCisKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFGaWxlPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitzdHJ1Y3QgTWFwcGVk
TWVtb3J5IHsKKyAgICBRRmlsZSogZmlsZTsKKyAgICB1Y2hhciogZGF0YTsKKyAgICBzaXplX3Qg
c2l6ZTsKKyAgICB2b2lkIG1hcmtVc2VkKCkgeyAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+
KGRhdGEpID0gMDsgfQorICAgIHZvaWQgbWFya0ZyZWUoKSB7ICpyZWludGVycHJldF9jYXN0PHVp
bnQ2NF90Kj4oZGF0YSkgPSAweGRlYWRiZWVmOyB9CisgICAgYm9vbCBpc0ZyZWUoKSB7IHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KGRhdGEpID09IDB4ZGVhZGJlZWY7IH0KK307
CisKK2NsYXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5zdGFuY2UoKTsKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworICAgIE1hcHBlZE1lbW9yeSYgYXQoc2l6ZV90IGkpOwor
ICAgIE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYpOworCitwcml2YXRl
OgorICAgIE1hcHBlZE1lbW9yeVBvb2woKTsKKyAgICBRX1NMT1Qgdm9pZCBjbGVhblVwKCk7CisK
KyAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7Cit9OworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisjZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQv
TWFwcGVkTWVtb3J5UG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9xdC9N
YXBwZWRNZW1vcnlQb29sLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQv
TWFwcGVkTWVtb3J5UG9vbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBV
TklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVO
SVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgorCisjaW5jbHVkZSAi
U3RkTGliRXh0cmFzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitNYXBwZWRNZW1vcnlQb29s
OjpNYXBwZWRNZW1vcnlQb29sKCkKK3sKKyAgICBjb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omlu
c3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChjbGVhblVwKCkpKTsKK30KKwor
TWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9vbCwgc2luZ2xldG9uLCAoKSk7CisgICAg
cmV0dXJuICZzaW5nbGV0b247Cit9CisKK3NpemVfdCBNYXBwZWRNZW1vcnlQb29sOjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wb29sLnNpemUoKTsKK30KKworTWFwcGVkTWVtb3J5JiBN
YXBwZWRNZW1vcnlQb29sOjphdChzaXplX3QgaSkKK3sKKyAgICByZXR1cm4gbV9wb29sLmF0KGkp
OworfQorCitNYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6OmFwcGVuZChjb25zdCBNYXBw
ZWRNZW1vcnkmIG5ld01hcCkKK3sKKyAgICBtX3Bvb2wuYXBwZW5kKG5ld01hcCk7CisgICAgcmV0
dXJuIG1fcG9vbC5sYXN0KCk7Cit9CisKK3ZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6Y2xlYW5VcCgp
Cit7CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgTWFwcGVkTWVtb3J5JiBjaHVuayA9IG1f
cG9vbC5hdChpKTsKKyAgICAgICAgaWYgKCFjaHVuay5pc0ZyZWUoKSkKKyAgICAgICAgICAgIGNo
dW5rLmZpbGUtPnVubWFwKGNodW5rLmRhdGEpOworICAgICAgICBjaHVuay5maWxlLT5yZW1vdmUo
KTsKKyAgICB9CisKKyAgICBkZWxldGUgdGhpczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHJldmlzaW9uIDY5MzAzKQorKysgV2ViS2l0
Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAg
QEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4g
CisjZW5kaWYKKwogbmFtZXNwYWNlIENvcmVJUEMgewogICAgIGNsYXNzIEFyZ3VtZW50RGVjb2Rl
cjsKICAgICBjbGFzcyBBcmd1bWVudEVuY29kZXI7CkBAIC01OCw2ICs2Miw4IEBACiAgICAgICAg
IGZyaWVuZCBjbGFzcyBTaGFyZWRNZW1vcnk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBt
dXRhYmxlIG1hY2hfcG9ydF90IG1fcG9ydDsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgICAgICBt
dXRhYmxlIFN0cmluZyBtX2ZpbGVOYW1lOwogI2VuZGlmCiAgICAgICAgIHNpemVfdCBtX3NpemU7
CiAgICAgfTsKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2OTMwNSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAtMTAtMDcgIFpvbHRhbiBIb3J2YXRoICA8em9s
dGFuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1F0XSBJbXBsZW1lbnQgU2hhcmVkTWVtb3J5IGZvciBXZWJLaXQyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM0NQorCisgICAgICAg
IEltcGxlbWVudCB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucyBpbiBTaGFyZWRNZW1vcnlRdC5jcHAu
CisgICAgICAgIE1vdmUgTWFwcGVkTWVtb3J5LmggYW5kIE1hcHBlZE1lbW9yeVBvb2wuY3BwIGZy
b20gU2hhcmVkL3F0IHRvIFBsYXRmb3JtL3F0LAorICAgICAgICBjaGFuZ2UgV2ViS2l0Mi5wcm8n
cyBhZmZlY3RlZCBsaW5lcy4KKworICAgICAgICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgor
ICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6TWFwcGVkTWVtb3J5OjptYXJrVXNlZCk6CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1l
bW9yeTo6bWFya0ZyZWUpOgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnk6OmlzRnJlZSk6
CisgICAgICAgICogUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKToKKyAgICAg
ICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UpOgorICAgICAgICAoV2ViS2l0
OjpNYXBwZWRNZW1vcnlQb29sOjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5
UG9vbDo6YXQpOgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjphcHBlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjpjbGVhblVwKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1hcE1lbW9y
eSk6CisgICAgICAgIChXZWJLaXQ6Om1hcEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OkhhbmRsZTo6SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpI
YW5kbGU6On5IYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6
aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Om1hcFBy
b3RlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpzZWFyY2hGb3JNYXBwZWRNZW1vcnkpOgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUpOgorICAgICAgICAqIFNoYXJlZC9xdC9NYXBwZWRNZW1v
cnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcDoKKyAgICAgICAg
KiBXZWJLaXQyLnBybzoKKwogMjAxMC0xMC0wNyAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3Rp
bmlAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRl
eDogV2ViS2l0Mi9XZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIucHJv
CShyZXZpc2lvbiA2OTMwMykKKysrIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTEwNSw2ICsxMDUsNyBAQAogSU5DTFVERVBBVEggPSBcCiAgICAgUGxhdGZvcm0gXAogICAg
IFBsYXRmb3JtL0NvcmVJUEMgXAorICAgIFBsYXRmb3JtL3F0IFwKICAgICBTaGFyZWQgXAogICAg
IFNoYXJlZC9BUEkvYyBcCiAgICAgU2hhcmVkL0NvcmVJUENTdXBwb3J0IFwKQEAgLTE1OSw2ICsx
NjAsNyBAQAogICAgIFBsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmggXAogICAgIFBsYXRmb3Jt
L01vZHVsZS5oIFwKICAgICBQbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggXAor
ICAgIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oIFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmgg
XAogICAgIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKICAgICBQbGF0Zm9ybS9Xb3JrSXRlbS5o
IFwKQEAgLTE4NSw3ICsxODcsNiBAQAogICAgIFNoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5oIFwK
ICAgICBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIFwKICAgICBTaGFyZWQvTm90SW1w
bGVtZW50ZWQuaCBcCi0gICAgU2hhcmVkL3F0L01hcHBlZE1lbW9yeS5oIFwKICAgICBTaGFyZWQv
cXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5r
LmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKQEAgLTMwMiw2ICszMDMs
NyBAQAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAogICAgIFBsYXRmb3JtL1J1bkxvb3AuY3Bw
IFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKKyAgICBQbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnlQb29sLmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0
Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5j
cHAgXApAQCAtMzE4LDcgKzMyMCw2IEBACiAgICAgU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnku
Y3BwIFwKICAgICBTaGFyZWQvTXV0YWJsZUFycmF5LmNwcCBcCiAgICAgU2hhcmVkL011dGFibGVE
aWN0aW9uYXJ5LmNwcCBcCi0gICAgU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIFwKICAg
ICBTaGFyZWQvcXQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0
L1VwZGF0ZUNodW5rLmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0
LmNwcCBcCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaAkocmV2aXNpb24gNjkzMDMpCisr
KyBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1hcHBlZE1lbW9yeV9oCi0jZGVmaW5lIE1h
cHBlZE1lbW9yeV9oCi0KLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFG
aWxlPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1zdHJ1
Y3QgTWFwcGVkTWVtb3J5IHsKLSAgICBRRmlsZSogZmlsZTsKLSAgICB1Y2hhciogZGF0YTsKLSAg
ICBzaXplX3Qgc2l6ZTsKLSAgICB2b2lkIG1hcmtVc2VkKCkgeyAqcmVpbnRlcnByZXRfY2FzdDx1
aW50NjRfdCo+KGRhdGEpID0gMDsgfQotICAgIHZvaWQgbWFya0ZyZWUoKSB7ICpyZWludGVycHJl
dF9jYXN0PHVpbnQ2NF90Kj4oZGF0YSkgPSAweGRlYWRiZWVmOyB9Ci0gICAgYm9vbCBpc0ZyZWUo
KSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KGRhdGEpID09IDB4ZGVhZGJl
ZWY7IH0KLX07Ci0KLWNsYXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBwdWJsaWMgUU9iamVjdCB7Ci0g
ICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5zdGFu
Y2UoKTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAgIE1hcHBlZE1lbW9yeSYgYXQoc2l6
ZV90IGkpOwotICAgIE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYpOwot
Ci1wcml2YXRlOgotICAgIE1hcHBlZE1lbW9yeVBvb2woKTsKLSAgICBRX1NMT1Qgdm9pZCBjbGVh
blVwKCk7Ci0KLSAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7Ci19OwotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gKSW5kZXg6IFdlYktpdDIvU2hh
cmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVk
L3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCShyZXZpc2lvbiA2OTMwMykKKysrIFdlYktpdDIvU2hh
cmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgotCi0j
aW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1NYXBwZWRN
ZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKCkKLXsKLSAgICBjb25uZWN0KFFDb3JlQXBwbGlj
YXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChjbGVhblVwKCkp
KTsKLX0KLQotTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9vbCwgc2luZ2xldG9uLCAo
KSk7Ci0gICAgcmV0dXJuICZzaW5nbGV0b247Ci19Ci0KLXNpemVfdCBNYXBwZWRNZW1vcnlQb29s
OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wb29sLnNpemUoKTsKLX0KLQotTWFwcGVk
TWVtb3J5JiBNYXBwZWRNZW1vcnlQb29sOjphdChzaXplX3QgaSkKLXsKLSAgICByZXR1cm4gbV9w
b29sLmF0KGkpOwotfQotCi1NYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6OmFwcGVuZChj
b25zdCBNYXBwZWRNZW1vcnkmIG5ld01hcCkKLXsKLSAgICBtX3Bvb2wuYXBwZW5kKG5ld01hcCk7
Ci0gICAgcmV0dXJuIG1fcG9vbC5sYXN0KCk7Ci19Ci0KLXZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6
Y2xlYW5VcCgpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wuc2l6ZSgpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBj
aHVuayA9IG1fcG9vbC5hdChpKTsKLSAgICAgICAgaWYgKCFjaHVuay5pc0ZyZWUoKSkKLSAgICAg
ICAgICAgIGNodW5rLmZpbGUtPnVubWFwKGNodW5rLmRhdGEpOwotICAgICAgICBjaHVuay5maWxl
LT5yZW1vdmUoKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgdGhpczsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCShyZXZpc2lvbiA2OTMw
MykKKysrIFdlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsMTAgKzMwLDExIEBACiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiQXJndW1lbnRFbmNvZGVyLmgiCiAjaW5jbHVkZSAiQXR0YWNobWVudC5oIgorI2luY2x1ZGUg
IlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2lu
Y2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDxRRGlyPgogI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNs
dWRlIDxRSU9EZXZpY2U+CiAjaW5jbHVkZSA8UVRlbXBvcmFyeUZpbGU+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQz
LDQ2ICs0NCw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgTWFwcGVkTWVtb3J5
KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUpCi17Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCogcG9vbCA9
IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IHBvb2wtPnNpemUoKTsgKytuKSB7Ci0gICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9
IHBvb2wtPmF0KG4pOwotICAgICAgICBpZiAoY3VycmVudC5zaXplID49IHNpemUgJiYgY3VycmVu
dC5pc0ZyZWUoKSkgewotICAgICAgICAgICAgY3VycmVudC5tYXJrVXNlZCgpOwotICAgICAgICAg
ICAgcmV0dXJuICZjdXJyZW50OwotICAgICAgICB9Ci0gICAgfQotICAgIE1hcHBlZE1lbW9yeSBu
ZXdNYXA7Ci0gICAgbmV3TWFwLnNpemUgPSBzaXplOwotICAgIG5ld01hcC5maWxlID0gbmV3IFFU
ZW1wb3JhcnlGaWxlKFFEaXI6OnRlbXBQYXRoKCkgKyAiL1dlYktpdDJVcGRhdGVDaHVuayIpOwot
ICAgIG5ld01hcC5maWxlLT5vcGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKTsKLSAgICBuZXdNYXAu
ZmlsZS0+cmVzaXplKG5ld01hcC5zaXplKTsKLSAgICBuZXdNYXAuZGF0YSA9IG5ld01hcC5maWxl
LT5tYXAoMCwgbmV3TWFwLnNpemUpOwotICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOwotICAgIG5l
d01hcC5tYXJrVXNlZCgpOwotICAgIHJldHVybiAmcG9vbC0+YXBwZW5kKG5ld01hcCk7Ci19Ci0g
ICAgCi1zdGF0aWMgTWFwcGVkTWVtb3J5KiBtYXBGaWxlKFFTdHJpbmcgZmlsZU5hbWUsIHNpemVf
dCBzaXplKQotewotICAgIE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1vcnlQb29s
OjppbnN0YW5jZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwb29sLT5zaXplKCk7
ICsrbikgewotICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBwb29sLT5hdChuKTsKLSAg
ICAgICAgaWYgKGN1cnJlbnQuZmlsZS0+ZmlsZU5hbWUoKSA9PSBmaWxlTmFtZSkgewotICAgICAg
ICAgICAgQVNTRVJUKCFjdXJyZW50LmlzRnJlZSgpKTsKLSAgICAgICAgICAgIHJldHVybiAmY3Vy
cmVudDsKLSAgICAgICAgfQotICAgIH0KLSAgICBNYXBwZWRNZW1vcnkgbmV3TWFwOwotICAgIG5l
d01hcC5maWxlID0gbmV3IFFGaWxlKGZpbGVOYW1lKTsKLSAgICBpZiAoIW5ld01hcC5maWxlLT5v
cGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgbmV3TWFw
LmRhdGEgPSBuZXdNYXAuZmlsZS0+bWFwKDAsIHNpemUpOwotICAgIEFTU0VSVCghbmV3TWFwLmlz
RnJlZSgpKTsKLSAgICBuZXdNYXAuZmlsZS0+Y2xvc2UoKTsKLSAgICByZXR1cm4gJnBvb2wtPmFw
cGVuZChuZXdNYXApOwotfQorTWFwcGVkTWVtb3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUsIFFJ
T0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUgPSBRSU9EZXZpY2U6OlJlYWRXcml0ZSk7CitNYXBw
ZWRNZW1vcnkqIG1hcEZpbGUoU3RyaW5nIGZpbGUsIHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9w
ZW5Nb2RlIG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpSZWFkV3JpdGUpOwogCiBVcGRhdGVDaHVuazo6
VXBkYXRlQ2h1bmsoKQogICAgIDogbV9tYXBwZWRNZW1vcnkoMCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70086</attachid>
            <date>2010-10-07 07:19:32 -0700</date>
            <delta_ts>2010-10-07 09:53:50 -0700</delta_ts>
            <desc>updated proposed patch</desc>
            <filename>sharedmemoryqt.patch</filename>
            <type>text/plain</type>
            <size>22158</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCShyZXZpc2lvbiA2OTMw
MykKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTkgKzI2LDE4
OSBAQAogCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgorI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUlPRGV2aWNlPgor
I2luY2x1ZGUgPFFUZW1wb3JhcnlGaWxlPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAorTWFwcGVkTWVtb3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUsIFFJT0Rl
dmljZTo6T3Blbk1vZGUgb3Blbk1vZGUgPSBRSU9EZXZpY2U6OlJlYWRXcml0ZSkKK3sKKyAgICBN
YXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24pIHsKKyAgICAgICAg
TWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7CisgICAgICAgIGlmIChjdXJyZW50
LnNpemUgPj0gc2l6ZSAmJiBjdXJyZW50LmlzRnJlZSgpKSB7CisgICAgICAgICAgICBjdXJyZW50
Lm1hcmtVc2VkKCk7CisgICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7CisgICAgICAgIH0KKyAg
ICB9CisgICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKKyAgICBuZXdNYXAuc2l6ZSA9IHNpemU7Cisg
ICAgbmV3TWFwLmZpbGUgPSBuZXcgUVRlbXBvcmFyeUZpbGUoUURpcjo6dGVtcFBhdGgoKSArICIv
V2ViS2l0MlVwZGF0ZUNodW5rIik7CisgICAgbmV3TWFwLmZpbGUtPm9wZW4ob3Blbk1vZGUpOwor
ICAgIG5ld01hcC5maWxlLT5yZXNpemUobmV3TWFwLnNpemUpOworICAgIG5ld01hcC5kYXRhID0g
bmV3TWFwLmZpbGUtPm1hcCgwLCBuZXdNYXAuc2l6ZSk7CisgICAgbmV3TWFwLmZpbGUtPmNsb3Nl
KCk7CisgICAgbmV3TWFwLm1hcmtVc2VkKCk7CisgICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3
TWFwKTsKK30KKworTWFwcGVkTWVtb3J5KiBtYXBGaWxlKFN0cmluZyBmaWxlTmFtZSwgc2l6ZV90
IHNpemUsIFFJT0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUgPSBRSU9EZXZpY2U6OlJlYWRXcml0
ZSkKK3sKKyAgICBNYXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5z
dGFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24p
IHsKKyAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7CisgICAgICAg
IGlmIChjdXJyZW50LmZpbGUtPmZpbGVOYW1lKCkgPT0gc3RhdGljX2Nhc3Q8UVN0cmluZz4oZmls
ZU5hbWUpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQuaXNGcmVlKCkpOworICAgICAg
ICAgICAgcmV0dXJuICZjdXJyZW50OworICAgICAgICB9CisgICAgfQorICAgIE1hcHBlZE1lbW9y
eSBuZXdNYXA7CisgICAgbmV3TWFwLmZpbGUgPSBuZXcgUUZpbGUoc3RhdGljX2Nhc3Q8UVN0cmlu
Zz4oZmlsZU5hbWUpKTsKKyAgICBpZiAoIW5ld01hcC5maWxlLT5vcGVuKG9wZW5Nb2RlKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgbmV3TWFwLmRhdGEgPSBuZXdNYXAuZmlsZS0+bWFwKDAsIHNp
emUpOworICAgIEFTU0VSVCghbmV3TWFwLmlzRnJlZSgpKTsKKyAgICBuZXdNYXAuZmlsZS0+Y2xv
c2UoKTsKKyAgICByZXR1cm4gJnBvb2wtPmFwcGVuZChuZXdNYXApOworfQorCiBTaGFyZWRNZW1v
cnk6OkhhbmRsZTo6SGFuZGxlKCkKKyAgICA6IG1fZmlsZU5hbWUoKQorICAgICwgbV9zaXplKDAp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5I
YW5kbGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK2Jvb2wgU2hhcmVkTWVtb3J5
OjpIYW5kbGU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZU5hbWUuaXNOdWxs
KCk7Cit9CisKIHZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1
bWVudEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBlbmNvZGVyLT5lbmNvZGVVSW50NjQobV9zaXplKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9m
aWxlTmFtZSk7CisgICAgbV9maWxlTmFtZSA9IFN0cmluZygpOwogfQogCiBib29sIFNoYXJlZE1l
bW9yeTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBI
YW5kbGUmIGhhbmRsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworICAgIEFTU0VSVChoYW5kbGUubV9maWxl
TmFtZS5pc0VtcHR5KCkpOworCisgICAgdWludDY0X3Qgc2l6ZTsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZVVJbnQ2NChzaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5n
IGZpbGVOYW1lOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZpbGVOYW1lKSkKKyAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBoYW5kbGUubV9zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUubV9m
aWxlTmFtZSA9IGZpbGVOYW1lOworICAgIHJldHVybiB0cnVlOwogfQogCiBQYXNzUmVmUHRyPFNo
YXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBNYXBwZWRNZW1vcnkqIG1tID0gbWFw
TWVtb3J5KHNpemUsIFFJT0RldmljZTo6UmVhZFdyaXRlKTsKKworICAgIFJlZlB0cjxTaGFyZWRN
ZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hh
cmVkTWVtb3J5LT5tX3NpemUgPSBzaXplOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4obW0tPmRhdGEpOworCisgICAgcmV0dXJuIHNoYXJlZE1lbW9y
eS5yZWxlYXNlKCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUUlPRGV2aWNlOjpPcGVuTW9kZSBtYXBQ
cm90ZWN0aW9uKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIHN3
aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkT25seToKKyAg
ICAgICAgcmV0dXJuIFFJT0RldmljZTo6UmVhZE9ubHk7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6
OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuIFFJT0RldmljZTo6UmVhZFdyaXRlOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBRSU9EZXZpY2U6Ok5vdE9w
ZW47Cit9CisKKwogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsgICAgCisgICAgaWYgKGhhbmRsZS5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2Rl
ID0gbWFwUHJvdGVjdGlvbihwcm90ZWN0aW9uKTsKKworICAgIE1hcHBlZE1lbW9yeSogbW0gPSBt
YXBGaWxlKGhhbmRsZS5tX2ZpbGVOYW1lLCBoYW5kbGUubV9zaXplLCBvcGVuTW9kZSk7CisKKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1l
bW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gaGFuZGxlLm1fc2l6ZTsKKyAgICBz
aGFyZWRNZW1vcnktPm1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1tLT5kYXRhKTsK
KworICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCitzdGF0aWMgTWFwcGVk
TWVtb3J5KiBzZWFyY2hGb3JNYXBwZWRNZW1vcnkodWNoYXIqIHApCit7CisgICAgTWFwcGVkTWVt
b3J5UG9vbCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7CisKKyAgICBNYXBw
ZWRNZW1vcnkqIGN1cnJlbnQgPSBuZXcgTWFwcGVkTWVtb3J5OworCisgICAgZm9yICh1bnNpZ25l
ZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsgKytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSBt
bSA9IHBvb2wtPmF0KG4pOworICAgICAgICAqY3VycmVudCA9IG1tOworICAgICAgICBpZiAoY3Vy
cmVudC0+ZGF0YSA9PSBwKSAKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgIH0KKyAg
ICBkZWxldGUgY3VycmVudDsKKyAgICByZXR1cm4gMDsKK30KKwogU2hhcmVkTWVtb3J5Ojp+U2hh
cmVkTWVtb3J5KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIE1hcHBlZE1lbW9yeSog
bWFwcGVkTWVtb3J5ID0gc2VhcmNoRm9yTWFwcGVkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8dWNo
YXIqPihtX2RhdGEpKTsKKyAgICBpZiAobWFwcGVkTWVtb3J5KSB7IAorICAgICAgICBtYXBwZWRN
ZW1vcnktPm1hcmtGcmVlKCk7CisgICAgICAgIGRlbGV0ZSBtYXBwZWRNZW1vcnk7CisgICAgfQog
fQotICAgIAorCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxl
LCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGhhbmRsZS5tX2ZpbGVOYW1lLmlzTnVsbCgpKTsKKyAg
ICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworCisgICAgUVN0cmluZyBmaWxlID0gc2VhcmNoRm9y
TWFwcGVkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihtX2RhdGEpKS0+ZmlsZS0+Zmls
ZU5hbWUoKTsKKyAgICAKKyAgICBpZiAoZmlsZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGhhbmRsZS5tX2ZpbGVOYW1lID0gZmlsZTsKKyAgICBoYW5kbGUubV9zaXpl
ID0gbV9zaXplOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHVuc2lnbmVkIFNoYXJlZE1lbW9y
eTo6c3lzdGVtUGFnZVNpemUoKQogewogICAgIHN0YXRpYyB1bnNpZ25lZCBwYWdlU2l6ZSA9IDA7
CiAKKyAgICBpZiAoIXBhZ2VTaXplKQorICAgICAgICBwYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7
CisKICAgICByZXR1cm4gcGFnZVNpemU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCklu
ZGV4OiBXZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQy
L1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIE1hcHBlZE1lbW9yeV9oCisjZGVmaW5lIE1hcHBlZE1lbW9y
eV9oCisKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFGaWxlPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitzdHJ1Y3QgTWFwcGVk
TWVtb3J5IHsKKyAgICBRRmlsZSogZmlsZTsKKyAgICB1Y2hhciogZGF0YTsKKyAgICBzaXplX3Qg
c2l6ZTsKKyAgICB2b2lkIG1hcmtVc2VkKCkgeyAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+
KGRhdGEpID0gMDsgfQorICAgIHZvaWQgbWFya0ZyZWUoKSB7ICpyZWludGVycHJldF9jYXN0PHVp
bnQ2NF90Kj4oZGF0YSkgPSAweGRlYWRiZWVmOyB9CisgICAgYm9vbCBpc0ZyZWUoKSB7IHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KGRhdGEpID09IDB4ZGVhZGJlZWY7IH0KK307
CisKK2NsYXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpF
Q1QKK3B1YmxpYzoKKyAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5zdGFuY2UoKTsKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworICAgIE1hcHBlZE1lbW9yeSYgYXQoc2l6ZV90IGkpOwor
ICAgIE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYpOworCitwcml2YXRl
OgorICAgIE1hcHBlZE1lbW9yeVBvb2woKTsKKyAgICBRX1NMT1Qgdm9pZCBjbGVhblVwKCk7CisK
KyAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7Cit9OworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisjZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQv
TWFwcGVkTWVtb3J5UG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9xdC9N
YXBwZWRNZW1vcnlQb29sLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQv
TWFwcGVkTWVtb3J5UG9vbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBV
TklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVO
SVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgorCisjaW5jbHVkZSAi
U3RkTGliRXh0cmFzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitNYXBwZWRNZW1vcnlQb29s
OjpNYXBwZWRNZW1vcnlQb29sKCkKK3sKKyAgICBjb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omlu
c3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChjbGVhblVwKCkpKTsKK30KKwor
TWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9vbCwgc2luZ2xldG9uLCAoKSk7CisgICAg
cmV0dXJuICZzaW5nbGV0b247Cit9CisKK3NpemVfdCBNYXBwZWRNZW1vcnlQb29sOjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wb29sLnNpemUoKTsKK30KKworTWFwcGVkTWVtb3J5JiBN
YXBwZWRNZW1vcnlQb29sOjphdChzaXplX3QgaSkKK3sKKyAgICByZXR1cm4gbV9wb29sLmF0KGkp
OworfQorCitNYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6OmFwcGVuZChjb25zdCBNYXBw
ZWRNZW1vcnkmIG5ld01hcCkKK3sKKyAgICBtX3Bvb2wuYXBwZW5kKG5ld01hcCk7CisgICAgcmV0
dXJuIG1fcG9vbC5sYXN0KCk7Cit9CisKK3ZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6Y2xlYW5VcCgp
Cit7CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wuc2l6ZSgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgTWFwcGVkTWVtb3J5JiBjaHVuayA9IG1f
cG9vbC5hdChpKTsKKyAgICAgICAgaWYgKCFjaHVuay5pc0ZyZWUoKSkKKyAgICAgICAgICAgIGNo
dW5rLmZpbGUtPnVubWFwKGNodW5rLmRhdGEpOworICAgICAgICBjaHVuay5maWxlLT5yZW1vdmUo
KTsKKyAgICB9CisKKyAgICBkZWxldGUgdGhpczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHJldmlzaW9uIDY5MzAzKQorKysgV2ViS2l0
Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAg
QEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4g
CisjZW5kaWYKKwogbmFtZXNwYWNlIENvcmVJUEMgewogICAgIGNsYXNzIEFyZ3VtZW50RGVjb2Rl
cjsKICAgICBjbGFzcyBBcmd1bWVudEVuY29kZXI7CkBAIC01OCw2ICs2Miw4IEBACiAgICAgICAg
IGZyaWVuZCBjbGFzcyBTaGFyZWRNZW1vcnk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBt
dXRhYmxlIG1hY2hfcG9ydF90IG1fcG9ydDsKKyNlbGlmIFBMQVRGT1JNKFFUKQorICAgICAgICBt
dXRhYmxlIFN0cmluZyBtX2ZpbGVOYW1lOwogI2VuZGlmCiAgICAgICAgIHNpemVfdCBtX3NpemU7
CiAgICAgfTsKSW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2OTMwNSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAtMTAtMDcgIFpvbHRhbiBIb3J2YXRoICA8em9s
dGFuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1F0XSBJbXBsZW1lbnQgU2hhcmVkTWVtb3J5IGZvciBXZWJLaXQyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM0NQorCisgICAgICAg
IEltcGxlbWVudCB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucyBpbiBTaGFyZWRNZW1vcnlRdC5jcHAu
CisgICAgICAgIE1vdmUgTWFwcGVkTWVtb3J5LmggYW5kIE1hcHBlZE1lbW9yeVBvb2wuY3BwIGZy
b20gU2hhcmVkL3F0IHRvIFBsYXRmb3JtL3F0LAorICAgICAgICBjaGFuZ2UgV2ViS2l0Mi5wcm8n
cyBhZmZlY3RlZCBsaW5lcy4KKworICAgICAgICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgor
ICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6TWFwcGVkTWVtb3J5OjptYXJrVXNlZCk6CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1l
bW9yeTo6bWFya0ZyZWUpOgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnk6OmlzRnJlZSk6
CisgICAgICAgICogUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKToKKyAgICAg
ICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UpOgorICAgICAgICAoV2ViS2l0
OjpNYXBwZWRNZW1vcnlQb29sOjpzaXplKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5
UG9vbDo6YXQpOgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjphcHBlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjpjbGVhblVwKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1hcE1lbW9y
eSk6CisgICAgICAgIChXZWJLaXQ6Om1hcEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OkhhbmRsZTo6SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpI
YW5kbGU6On5IYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6
aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Om1hcFBy
b3RlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpzZWFyY2hGb3JNYXBwZWRNZW1vcnkpOgorICAg
ICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUpOgorICAgICAgICAqIFNoYXJlZC9xdC9NYXBwZWRNZW1v
cnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcDoKKyAgICAgICAg
KiBXZWJLaXQyLnBybzoKKwogMjAxMC0xMC0wNyAgTHVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3Rp
bmlAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRl
eDogV2ViS2l0Mi9XZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIucHJv
CShyZXZpc2lvbiA2OTMwMykKKysrIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkK
QEAgLTEwNSw2ICsxMDUsNyBAQAogSU5DTFVERVBBVEggPSBcCiAgICAgUGxhdGZvcm0gXAogICAg
IFBsYXRmb3JtL0NvcmVJUEMgXAorICAgIFBsYXRmb3JtL3F0IFwKICAgICBTaGFyZWQgXAogICAg
IFNoYXJlZC9BUEkvYyBcCiAgICAgU2hhcmVkL0NvcmVJUENTdXBwb3J0IFwKQEAgLTE1OSw2ICsx
NjAsNyBAQAogICAgIFBsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmggXAogICAgIFBsYXRmb3Jt
L01vZHVsZS5oIFwKICAgICBQbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggXAor
ICAgIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oIFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmgg
XAogICAgIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKICAgICBQbGF0Zm9ybS9Xb3JrSXRlbS5o
IFwKQEAgLTE4NSw3ICsxODcsNiBAQAogICAgIFNoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5oIFwK
ICAgICBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIFwKICAgICBTaGFyZWQvTm90SW1w
bGVtZW50ZWQuaCBcCi0gICAgU2hhcmVkL3F0L01hcHBlZE1lbW9yeS5oIFwKICAgICBTaGFyZWQv
cXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5r
LmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKQEAgLTMwMiw2ICszMDMs
NyBAQAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAogICAgIFBsYXRmb3JtL1J1bkxvb3AuY3Bw
IFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVldWUuY3BwIFwKKyAgICBQbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnlQb29sLmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0
Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5j
cHAgXApAQCAtMzE4LDcgKzMyMCw2IEBACiAgICAgU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnku
Y3BwIFwKICAgICBTaGFyZWQvTXV0YWJsZUFycmF5LmNwcCBcCiAgICAgU2hhcmVkL011dGFibGVE
aWN0aW9uYXJ5LmNwcCBcCi0gICAgU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIFwKICAg
ICBTaGFyZWQvcXQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0
L1VwZGF0ZUNodW5rLmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0
LmNwcCBcCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaAkocmV2aXNpb24gNjkzMDMpCisr
KyBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIE1hcHBlZE1lbW9yeV9oCi0jZGVmaW5lIE1h
cHBlZE1lbW9yeV9oCi0KLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFG
aWxlPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1zdHJ1
Y3QgTWFwcGVkTWVtb3J5IHsKLSAgICBRRmlsZSogZmlsZTsKLSAgICB1Y2hhciogZGF0YTsKLSAg
ICBzaXplX3Qgc2l6ZTsKLSAgICB2b2lkIG1hcmtVc2VkKCkgeyAqcmVpbnRlcnByZXRfY2FzdDx1
aW50NjRfdCo+KGRhdGEpID0gMDsgfQotICAgIHZvaWQgbWFya0ZyZWUoKSB7ICpyZWludGVycHJl
dF9jYXN0PHVpbnQ2NF90Kj4oZGF0YSkgPSAweGRlYWRiZWVmOyB9Ci0gICAgYm9vbCBpc0ZyZWUo
KSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KGRhdGEpID09IDB4ZGVhZGJl
ZWY7IH0KLX07Ci0KLWNsYXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBwdWJsaWMgUU9iamVjdCB7Ci0g
ICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5zdGFu
Y2UoKTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAgIE1hcHBlZE1lbW9yeSYgYXQoc2l6
ZV90IGkpOwotICAgIE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYpOwot
Ci1wcml2YXRlOgotICAgIE1hcHBlZE1lbW9yeVBvb2woKTsKLSAgICBRX1NMT1Qgdm9pZCBjbGVh
blVwKCk7Ci0KLSAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7Ci19OwotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gKSW5kZXg6IFdlYktpdDIvU2hh
cmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVk
L3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCShyZXZpc2lvbiA2OTMwMykKKysrIFdlYktpdDIvU2hh
cmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgotCi0j
aW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1NYXBwZWRN
ZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKCkKLXsKLSAgICBjb25uZWN0KFFDb3JlQXBwbGlj
YXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChjbGVhblVwKCkp
KTsKLX0KLQotTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9vbCwgc2luZ2xldG9uLCAo
KSk7Ci0gICAgcmV0dXJuICZzaW5nbGV0b247Ci19Ci0KLXNpemVfdCBNYXBwZWRNZW1vcnlQb29s
OjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wb29sLnNpemUoKTsKLX0KLQotTWFwcGVk
TWVtb3J5JiBNYXBwZWRNZW1vcnlQb29sOjphdChzaXplX3QgaSkKLXsKLSAgICByZXR1cm4gbV9w
b29sLmF0KGkpOwotfQotCi1NYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6OmFwcGVuZChj
b25zdCBNYXBwZWRNZW1vcnkmIG5ld01hcCkKLXsKLSAgICBtX3Bvb2wuYXBwZW5kKG5ld01hcCk7
Ci0gICAgcmV0dXJuIG1fcG9vbC5sYXN0KCk7Ci19Ci0KLXZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6
Y2xlYW5VcCgpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wuc2l6ZSgpOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBj
aHVuayA9IG1fcG9vbC5hdChpKTsKLSAgICAgICAgaWYgKCFjaHVuay5pc0ZyZWUoKSkKLSAgICAg
ICAgICAgIGNodW5rLmZpbGUtPnVubWFwKGNodW5rLmRhdGEpOwotICAgICAgICBjaHVuay5maWxl
LT5yZW1vdmUoKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgdGhpczsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCShyZXZpc2lvbiA2OTMw
MykKKysrIFdlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksMTIgKzI5LDkgQEAKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1
ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgotI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKKyNpbmNsdWRl
ICJTaGFyZWRNZW1vcnkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKLSNp
bmNsdWRlIDxRRGVidWc+Ci0jaW5jbHVkZSA8UURpcj4KLSNpbmNsdWRlIDxRSW1hZ2U+Ci0jaW5j
bHVkZSA8UVRlbXBvcmFyeUZpbGU+CisjaW5jbHVkZSA8UUlPRGV2aWNlPgogI2luY2x1ZGUgPFdl
YkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTQzLDQ2ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1zdGF0aWMgTWFwcGVkTWVt
b3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUpCi17Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCogcG9v
bCA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0g
MDsgbiA8IHBvb2wtPnNpemUoKTsgKytuKSB7Ci0gICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVu
dCA9IHBvb2wtPmF0KG4pOwotICAgICAgICBpZiAoY3VycmVudC5zaXplID49IHNpemUgJiYgY3Vy
cmVudC5pc0ZyZWUoKSkgewotICAgICAgICAgICAgY3VycmVudC5tYXJrVXNlZCgpOwotICAgICAg
ICAgICAgcmV0dXJuICZjdXJyZW50OwotICAgICAgICB9Ci0gICAgfQotICAgIE1hcHBlZE1lbW9y
eSBuZXdNYXA7Ci0gICAgbmV3TWFwLnNpemUgPSBzaXplOwotICAgIG5ld01hcC5maWxlID0gbmV3
IFFUZW1wb3JhcnlGaWxlKFFEaXI6OnRlbXBQYXRoKCkgKyAiL1dlYktpdDJVcGRhdGVDaHVuayIp
OwotICAgIG5ld01hcC5maWxlLT5vcGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKTsKLSAgICBuZXdN
YXAuZmlsZS0+cmVzaXplKG5ld01hcC5zaXplKTsKLSAgICBuZXdNYXAuZGF0YSA9IG5ld01hcC5m
aWxlLT5tYXAoMCwgbmV3TWFwLnNpemUpOwotICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOwotICAg
IG5ld01hcC5tYXJrVXNlZCgpOwotICAgIHJldHVybiAmcG9vbC0+YXBwZW5kKG5ld01hcCk7Ci19
Ci0gICAgCi1zdGF0aWMgTWFwcGVkTWVtb3J5KiBtYXBGaWxlKFFTdHJpbmcgZmlsZU5hbWUsIHNp
emVfdCBzaXplKQotewotICAgIE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1vcnlQ
b29sOjppbnN0YW5jZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwb29sLT5zaXpl
KCk7ICsrbikgewotICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBwb29sLT5hdChuKTsK
LSAgICAgICAgaWYgKGN1cnJlbnQuZmlsZS0+ZmlsZU5hbWUoKSA9PSBmaWxlTmFtZSkgewotICAg
ICAgICAgICAgQVNTRVJUKCFjdXJyZW50LmlzRnJlZSgpKTsKLSAgICAgICAgICAgIHJldHVybiAm
Y3VycmVudDsKLSAgICAgICAgfQotICAgIH0KLSAgICBNYXBwZWRNZW1vcnkgbmV3TWFwOwotICAg
IG5ld01hcC5maWxlID0gbmV3IFFGaWxlKGZpbGVOYW1lKTsKLSAgICBpZiAoIW5ld01hcC5maWxl
LT5vcGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgbmV3
TWFwLmRhdGEgPSBuZXdNYXAuZmlsZS0+bWFwKDAsIHNpemUpOwotICAgIEFTU0VSVCghbmV3TWFw
LmlzRnJlZSgpKTsKLSAgICBuZXdNYXAuZmlsZS0+Y2xvc2UoKTsKLSAgICByZXR1cm4gJnBvb2wt
PmFwcGVuZChuZXdNYXApOwotfQorTWFwcGVkTWVtb3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUs
IFFJT0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUgPSBRSU9EZXZpY2U6OlJlYWRXcml0ZSk7CitN
YXBwZWRNZW1vcnkqIG1hcEZpbGUoU3RyaW5nIGZpbGUsIHNpemVfdCBzaXplLCBRSU9EZXZpY2U6
Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpSZWFkV3JpdGUpOwogCiBVcGRhdGVDaHVu
azo6VXBkYXRlQ2h1bmsoKQogICAgIDogbV9tYXBwZWRNZW1vcnkoMCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70100</attachid>
            <date>2010-10-07 09:53:50 -0700</date>
            <delta_ts>2010-10-07 10:13:43 -0700</delta_ts>
            <desc>updated proposed patch</desc>
            <filename>SharedMemoryQt_x.patch</filename>
            <type>text/plain</type>
            <size>22201</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCShyZXZpc2lvbiA2OTMx
MikKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTkgKzI2LDE5
MiBAQAogCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgorI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUltYWdlPgorI2lu
Y2x1ZGUgPFFJT0RldmljZT4KKyNpbmNsdWRlIDxRVGVtcG9yYXJ5RmlsZT4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBNYXBwZWRNZW1vcnkqIHNl
YXJjaEZvck1hcHBlZE1lbW9yeSh1Y2hhciogcCkKK3sKKyAgICBNYXBwZWRNZW1vcnlQb29sKiBw
b29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKTsKKworICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBwb29sLT5zaXplKCk7ICsrbikgeworICAgICAgICBNYXBwZWRNZW1vcnkmIGN1
cnJlbnQgPSBwb29sLT5hdChuKTsKKyAgICAgICAgaWYgKGN1cnJlbnQuZGF0YSA9PSBwKSAKKyAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE1hcHBlZE1lbW9yeSo+KCZjdXJyZW50
KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK01hcHBlZE1lbW9yeSogbWFwTWVtb3J5KHNp
emVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpSZWFk
V3JpdGUpCit7CisgICAgTWFwcGVkTWVtb3J5UG9vbCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6
Omluc3RhbmNlKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsg
KytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9IHBvb2wtPmF0KG4pOworICAg
ICAgICBpZiAoY3VycmVudC5zaXplID49IHNpemUgJiYgY3VycmVudC5pc0ZyZWUoKSkgeworICAg
ICAgICAgICAgY3VycmVudC5tYXJrVXNlZCgpOworICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50
OworICAgICAgICB9CisgICAgfQorICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7CisgICAgbmV3TWFw
LnNpemUgPSBzaXplOworICAgIG5ld01hcC5maWxlID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFEaXI6
OnRlbXBQYXRoKCkgKyAiL1dlYktpdDJVcGRhdGVDaHVuayIpOworICAgIG5ld01hcC5maWxlLT5v
cGVuKG9wZW5Nb2RlKTsKKyAgICBuZXdNYXAuZmlsZS0+cmVzaXplKG5ld01hcC5zaXplKTsKKyAg
ICBuZXdNYXAuZGF0YSA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLnNpemUpOworICAgIG5l
d01hcC5maWxlLT5jbG9zZSgpOworICAgIG5ld01hcC5tYXJrVXNlZCgpOworICAgIHJldHVybiAm
cG9vbC0+YXBwZW5kKG5ld01hcCk7Cit9CisKK01hcHBlZE1lbW9yeSogbWFwRmlsZShTdHJpbmcg
ZmlsZU5hbWUsIHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gUUlP
RGV2aWNlOjpSZWFkV3JpdGUpCit7CisgICAgTWFwcGVkTWVtb3J5UG9vbCogcG9vbCA9IE1hcHBl
ZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBv
b2wtPnNpemUoKTsgKytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9IHBvb2wt
PmF0KG4pOworICAgICAgICBpZiAoY3VycmVudC5maWxlLT5maWxlTmFtZSgpID09IHN0YXRpY19j
YXN0PFFTdHJpbmc+KGZpbGVOYW1lKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50Lmlz
RnJlZSgpKTsKKyAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKKyAgICAgICAgfQorICAgIH0K
KyAgICBNYXBwZWRNZW1vcnkgbmV3TWFwOworICAgIG5ld01hcC5maWxlID0gbmV3IFFGaWxlKHN0
YXRpY19jYXN0PFFTdHJpbmc+KGZpbGVOYW1lKSk7CisgICAgaWYgKCFuZXdNYXAuZmlsZS0+b3Bl
bihvcGVuTW9kZSkpCisgICAgICAgIHJldHVybiAwOworICAgIG5ld01hcC5kYXRhID0gbmV3TWFw
LmZpbGUtPm1hcCgwLCBzaXplKTsKKyAgICBBU1NFUlQoIW5ld01hcC5pc0ZyZWUoKSk7CisgICAg
bmV3TWFwLmZpbGUtPmNsb3NlKCk7CisgICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsK
K30KKwogU2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRsZSgpCisgICAgOiBtX2ZpbGVOYW1lKCkK
KyAgICAsIG1fc2l6ZSgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIFNoYXJlZE1l
bW9yeTo6SGFuZGxlOjp+SGFuZGxlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiti
b29sIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ZpbGVOYW1lLmlzTnVsbCgpOworfQorCiB2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNv
ZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fc2l6ZSk7CisgICAgZW5j
b2Rlci0+ZW5jb2RlKG1fZmlsZU5hbWUpOworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoKTsKIH0K
IAogYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NF
UlQoaGFuZGxlLm1fZmlsZU5hbWUuaXNFbXB0eSgpKTsKKworICAgIHVpbnQ2NF90IHNpemU7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFN0cmluZyBmaWxlTmFtZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShmaWxl
TmFtZSkpCisgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7
CisgICAgaGFuZGxlLm1fZmlsZU5hbWUgPSBmaWxlTmFtZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBz
aXplKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgTWFwcGVk
TWVtb3J5KiBtbSA9IG1hcE1lbW9yeShzaXplLCBRSU9EZXZpY2U6OlJlYWRXcml0ZSk7CisKKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1l
bW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gc2l6ZTsKKyAgICBzaGFyZWRNZW1v
cnktPm1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1tLT5kYXRhKTsKKworICAgIHJl
dHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworCiB9CiAKK3N0YXRpYyBpbmxpbmUgUUlPRGV2
aWNlOjpPcGVuTW9kZSBtYXBQcm90ZWN0aW9uKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90
ZWN0aW9uKQoreworICAgIHN3aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVt
b3J5OjpSZWFkT25seToKKyAgICAgICAgcmV0dXJuIFFJT0RldmljZTo6UmVhZE9ubHk7CisgICAg
Y2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuIFFJT0RldmljZTo6
UmVhZFdyaXRlOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBRSU9EZXZpY2U6Ok5vdE9wZW47Cit9CisKKwogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3Rl
Y3Rpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsgICAgCisgICAg
aWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBRSU9EZXZpY2U6
Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gbWFwUHJvdGVjdGlvbihwcm90ZWN0aW9uKTsKKworICAgIE1h
cHBlZE1lbW9yeSogbW0gPSBtYXBGaWxlKGhhbmRsZS5tX2ZpbGVOYW1lLCBoYW5kbGUubV9zaXpl
LCBvcGVuTW9kZSk7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRv
cHRSZWYobmV3IFNoYXJlZE1lbW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gaGFu
ZGxlLm1fc2l6ZTsKKyAgICBzaGFyZWRNZW1vcnktPm1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KG1tLT5kYXRhKTsKKworICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwog
fQogCiBTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgTWFwcGVkTWVtb3J5KiBtYXBwZWRNZW1vcnkgPSBzZWFyY2hGb3JNYXBwZWRNZW1v
cnkocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KG1fZGF0YSkpOworICAgIGlmIChtYXBwZWRNZW1v
cnkpIHsgCisgICAgICAgIG1hcHBlZE1lbW9yeS0+bWFya0ZyZWUoKTsKKyAgICAgICAgZGVsZXRl
IG1hcHBlZE1lbW9yeTsKKyAgIH0KIH0KLSAgICAKKwogYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0
ZUhhbmRsZShIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChoYW5kbGUubV9m
aWxlTmFtZS5pc051bGwoKSk7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zaXplKTsKKworICAgIE1h
cHBlZE1lbW9yeSogbW0gPSBzZWFyY2hGb3JNYXBwZWRNZW1vcnkocmVpbnRlcnByZXRfY2FzdDx1
Y2hhcio+KG1fZGF0YSkpOyAgCisKKyAgICBRU3RyaW5nIGZpbGU7ICAgCisKKyAgICBpZiAobW0p
CisgICAgICAgIGZpbGUgPSBtbS0+ZmlsZS0+ZmlsZU5hbWUoKTsKKworICAgIGlmIChmaWxlLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxlLm1fZmlsZU5hbWUg
PSBmaWxlOworICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdW5zaWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB7CiAgICAgc3Rh
dGljIHVuc2lnbmVkIHBhZ2VTaXplID0gMDsKIAorICAgIGlmICghcGFnZVNpemUpCisgICAgICAg
IHBhZ2VTaXplID0gZ2V0cGFnZXNpemUoKTsKKwogICAgIHJldHVybiBwYWdlU2l6ZTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVk
TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnku
aAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChD
KSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWFwcGVkTWVt
b3J5X2gKKyNkZWZpbmUgTWFwcGVkTWVtb3J5X2gKKworI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRp
b24+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK3N0cnVjdCBNYXBwZWRNZW1vcnkgeworICAgIFFGaWxlKiBmaWxlOworICAg
IHVjaGFyKiBkYXRhOworICAgIHNpemVfdCBzaXplOworICAgIHZvaWQgbWFya1VzZWQoKSB7ICpy
ZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4oZGF0YSkgPSAwOyB9CisgICAgdm9pZCBtYXJrRnJl
ZSgpIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPihkYXRhKSA9IDB4ZGVhZGJlZWY7IH0K
KyAgICBib29sIGlzRnJlZSgpIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4o
ZGF0YSkgPT0gMHhkZWFkYmVlZjsgfQorfTsKKworY2xhc3MgTWFwcGVkTWVtb3J5UG9vbCA6IHB1
YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOgorICAgIHN0YXRpYyBNYXBwZWRN
ZW1vcnlQb29sKiBpbnN0YW5jZSgpOworICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CisgICAgTWFw
cGVkTWVtb3J5JiBhdChzaXplX3QgaSk7CisgICAgTWFwcGVkTWVtb3J5JiBhcHBlbmQoY29uc3Qg
TWFwcGVkTWVtb3J5Jik7CisKK3ByaXZhdGU6CisgICAgTWFwcGVkTWVtb3J5UG9vbCgpOworICAg
IFFfU0xPVCB2b2lkIGNsZWFuVXAoKTsKKworICAgIFZlY3RvcjxNYXBwZWRNZW1vcnk+IG1fcG9v
bDsKK307Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKyNlbmRpZiAvLyBNYXBwZWRNZW1vcnlfaApJ
bmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTWFw
cGVkTWVtb3J5LmgiCisKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK01hcHBlZE1lbW9yeVBvb2w6Ok1hcHBlZE1lbW9yeVBvb2woKQoreworICAgIGNv
bm5lY3QoUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSwgU0lHTkFMKGFib3V0VG9RdWl0KCkp
LCBTTE9UKGNsZWFuVXAoKSkpOworfQorCitNYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRNZW1vcnlQ
b29sOjppbnN0YW5jZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBwZWRNZW1vcnlQ
b29sLCBzaW5nbGV0b24sICgpKTsKKyAgICByZXR1cm4gJnNpbmdsZXRvbjsKK30KKworc2l6ZV90
IE1hcHBlZE1lbW9yeVBvb2w6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bvb2wuc2l6
ZSgpOworfQorCitNYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6OmF0KHNpemVfdCBpKQor
eworICAgIHJldHVybiBtX3Bvb2wuYXQoaSk7Cit9CisKK01hcHBlZE1lbW9yeSYgTWFwcGVkTWVt
b3J5UG9vbDo6YXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYgbmV3TWFwKQoreworICAgIG1fcG9v
bC5hcHBlbmQobmV3TWFwKTsKKyAgICByZXR1cm4gbV9wb29sLmxhc3QoKTsKK30KKwordm9pZCBN
YXBwZWRNZW1vcnlQb29sOjpjbGVhblVwKCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcG9vbC5z
aXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICBNYXBwZWRNZW1vcnkmIGNodW5rID0gbV9wb29sLmF0KGkpOworICAgICAgICBpZiAoIWNodW5r
LmlzRnJlZSgpKQorICAgICAgICAgICAgY2h1bmsuZmlsZS0+dW5tYXAoY2h1bmsuZGF0YSk7Cisg
ICAgICAgIGNodW5rLmZpbGUtPnJlbW92ZSgpOworICAgIH0KKworICAgIGRlbGV0ZSB0aGlzOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vU2hhcmVk
TWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAko
cmV2aXNpb24gNjkzMTIpCisrKyBXZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPiAKKyNlbmRpZgorCiBuYW1lc3BhY2UgQ29yZUlQQyB7
CiAgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwogICAgIGNsYXNzIEFyZ3VtZW50RW5jb2RlcjsK
QEAgLTU4LDYgKzYyLDggQEAKICAgICAgICAgZnJpZW5kIGNsYXNzIFNoYXJlZE1lbW9yeTsKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgICAgIG11dGFibGUgbWFjaF9wb3J0X3QgbV9wb3J0OworI2Vs
aWYgUExBVEZPUk0oUVQpCisgICAgICAgIG11dGFibGUgU3RyaW5nIG1fZmlsZU5hbWU7CiAjZW5k
aWYKICAgICAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB9OwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5MzEyKQorKysg
V2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0NSBAQAorMjAxMC0x
MC0wNyAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBTaGFyZWRN
ZW1vcnkgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3MzQ1CisKKyAgICAgICAgSW1wbGVtZW50IHVuaW1wbGVtZW50ZWQgZnVuY3Rp
b25zIGluIFNoYXJlZE1lbW9yeVF0LmNwcC4KKyAgICAgICAgTW92ZSBNYXBwZWRNZW1vcnkuaCBh
bmQgTWFwcGVkTWVtb3J5UG9vbC5jcHAgZnJvbSBTaGFyZWQvcXQgdG8gUGxhdGZvcm0vcXQsCisg
ICAgICAgIGNoYW5nZSBXZWJLaXQyLnBybydzIGFmZmVjdGVkIGxpbmVzLgorCisgICAgICAgICog
UGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6CisgICAgICAgICogUGxhdGZvcm0vcXQvTWFwcGVkTWVt
b3J5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnk6Om1hcmtVc2VkKToK
KyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5OjptYXJrRnJlZSk6CisgICAgICAgIChXZWJL
aXQ6Ok1hcHBlZE1lbW9yeTo6aXNGcmVlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnlQb29sLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6
Ok1hcHBlZE1lbW9yeVBvb2wpOgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjpp
bnN0YW5jZSk6CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6OnNpemUpOgorICAg
ICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjphdCk6CisgICAgICAgIChXZWJLaXQ6Ok1h
cHBlZE1lbW9yeVBvb2w6OmFwcGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBv
b2w6OmNsZWFuVXApOgorICAgICAgICAqIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6bWFwTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6bWFwRmlsZSk6
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUpOgorICAgICAg
ICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSk6CisgICAgICAgIChXZWJL
aXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjppc051bGwpOgorICAgICAgICAoV2ViS2l0OjpTaGFy
ZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5
OjpIYW5kbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6bWFwUHJvdGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnNl
YXJjaEZvck1hcHBlZE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNo
YXJlZE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxl
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSk6CisgICAg
ICAgICogU2hhcmVkL3F0L01hcHBlZE1lbW9yeS5oOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJl
ZC9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvcXQv
VXBkYXRlQ2h1bmsuY3BwOgorICAgICAgICAqIFdlYktpdDIucHJvOgorCiAyMDEwLTEwLTA3ICBM
dWl6IEFnb3N0aW5pICA8bHVpei5hZ29zdGluaUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViS2l0Mi9XZWJL
aXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIucHJvCShyZXZpc2lvbiA2OTMx
MikKKysrIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUs
NyBAQAogSU5DTFVERVBBVEggPSBcCiAgICAgUGxhdGZvcm0gXAogICAgIFBsYXRmb3JtL0NvcmVJ
UEMgXAorICAgIFBsYXRmb3JtL3F0IFwKICAgICBTaGFyZWQgXAogICAgIFNoYXJlZC9BUEkvYyBc
CiAgICAgU2hhcmVkL0NvcmVJUENTdXBwb3J0IFwKQEAgLTE1OSw2ICsxNjAsNyBAQAogICAgIFBs
YXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmggXAogICAgIFBsYXRmb3JtL01vZHVsZS5oIFwKICAg
ICBQbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggXAorICAgIFBsYXRmb3JtL3F0
L01hcHBlZE1lbW9yeS5oIFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmggXAogICAgIFBsYXRmb3Jt
L1NoYXJlZE1lbW9yeS5oIFwKICAgICBQbGF0Zm9ybS9Xb3JrSXRlbS5oIFwKQEAgLTE4NSw3ICsx
ODcsNiBAQAogICAgIFNoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5oIFwKICAgICBTaGFyZWQvTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oIFwKICAgICBTaGFyZWQvTm90SW1wbGVtZW50ZWQuaCBcCi0g
ICAgU2hhcmVkL3F0L01hcHBlZE1lbW9yeS5oIFwKICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0
aWZpY2F0ZUluZm8uaCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggXAogICAgIFNoYXJl
ZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKQEAgLTMwMiw2ICszMDMsNyBAQAogICAgIFBsYXRm
b3JtL01vZHVsZS5jcHAgXAogICAgIFBsYXRmb3JtL1J1bkxvb3AuY3BwIFwKICAgICBQbGF0Zm9y
bS9Xb3JrUXVldWUuY3BwIFwKKyAgICBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcCBc
CiAgICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29w
UXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgXApAQCAtMzE4LDcg
KzMyMCw2IEBACiAgICAgU2hhcmVkL0ltbXV0YWJsZURpY3Rpb25hcnkuY3BwIFwKICAgICBTaGFy
ZWQvTXV0YWJsZUFycmF5LmNwcCBcCiAgICAgU2hhcmVkL011dGFibGVEaWN0aW9uYXJ5LmNwcCBc
Ci0gICAgU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIFwKICAgICBTaGFyZWQvcXQvTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNw
cCBcCiAgICAgU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcCBcCkluZGV4OiBX
ZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1No
YXJlZC9xdC9NYXBwZWRNZW1vcnkuaAkocmV2aXNpb24gNjkzMTIpCisrKyBXZWJLaXQyL1NoYXJl
ZC9xdC9NYXBwZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIE1hcHBlZE1lbW9yeV9oCi0jZGVmaW5lIE1hcHBlZE1lbW9yeV9oCi0K
LSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgotI2luY2x1ZGUgPFFGaWxlPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1zdHJ1Y3QgTWFwcGVkTWVtb3J5
IHsKLSAgICBRRmlsZSogZmlsZTsKLSAgICB1Y2hhciogZGF0YTsKLSAgICBzaXplX3Qgc2l6ZTsK
LSAgICB2b2lkIG1hcmtVc2VkKCkgeyAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KGRhdGEp
ID0gMDsgfQotICAgIHZvaWQgbWFya0ZyZWUoKSB7ICpyZWludGVycHJldF9jYXN0PHVpbnQ2NF90
Kj4oZGF0YSkgPSAweGRlYWRiZWVmOyB9Ci0gICAgYm9vbCBpc0ZyZWUoKSB7IHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KGRhdGEpID09IDB4ZGVhZGJlZWY7IH0KLX07Ci0KLWNs
YXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1
YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5zdGFuY2UoKTsKLSAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0OwotICAgIE1hcHBlZE1lbW9yeSYgYXQoc2l6ZV90IGkpOwotICAgIE1h
cHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYpOwotCi1wcml2YXRlOgotICAg
IE1hcHBlZE1lbW9yeVBvb2woKTsKLSAgICBRX1NMT1Qgdm9pZCBjbGVhblVwKCk7Ci0KLSAgICBW
ZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7Ci19OwotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0j
ZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gKSW5kZXg6IFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1l
bW9yeVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9y
eVBvb2wuY3BwCShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1l
bW9yeVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgotCi0jaW5jbHVkZSAiU3RkTGli
RXh0cmFzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1NYXBwZWRNZW1vcnlQb29sOjpNYXBw
ZWRNZW1vcnlQb29sKCkKLXsKLSAgICBjb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNl
KCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChjbGVhblVwKCkpKTsKLX0KLQotTWFwcGVk
TWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKQotewotICAgIERFRklORV9T
VEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9vbCwgc2luZ2xldG9uLCAoKSk7Ci0gICAgcmV0dXJu
ICZzaW5nbGV0b247Ci19Ci0KLXNpemVfdCBNYXBwZWRNZW1vcnlQb29sOjpzaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wb29sLnNpemUoKTsKLX0KLQotTWFwcGVkTWVtb3J5JiBNYXBwZWRN
ZW1vcnlQb29sOjphdChzaXplX3QgaSkKLXsKLSAgICByZXR1cm4gbV9wb29sLmF0KGkpOwotfQot
Ci1NYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6OmFwcGVuZChjb25zdCBNYXBwZWRNZW1v
cnkmIG5ld01hcCkKLXsKLSAgICBtX3Bvb2wuYXBwZW5kKG5ld01hcCk7Ci0gICAgcmV0dXJuIG1f
cG9vbC5sYXN0KCk7Ci19Ci0KLXZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6Y2xlYW5VcCgpCi17Ci0g
ICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBjaHVuayA9IG1fcG9vbC5h
dChpKTsKLSAgICAgICAgaWYgKCFjaHVuay5pc0ZyZWUoKSkKLSAgICAgICAgICAgIGNodW5rLmZp
bGUtPnVubWFwKGNodW5rLmRhdGEpOwotICAgICAgICBjaHVuay5maWxlLT5yZW1vdmUoKTsKLSAg
ICB9Ci0KLSAgICBkZWxldGUgdGhpczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCShyZXZpc2lvbiA2OTMxMikKKysrIFdlYktpdDIv
U2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEw
IEBACiAKICNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVu
Y29kZXIuaCIKLSNpbmNsdWRlICJBdHRhY2htZW50LmgiCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5
LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8UURlYnVn
PgotI2luY2x1ZGUgPFFEaXI+CiAjaW5jbHVkZSA8UUltYWdlPgotI2luY2x1ZGUgPFFUZW1wb3Jh
cnlGaWxlPgorI2luY2x1ZGUgPFFJT0RldmljZT4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVj
dC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00Myw0NiArNDEsOCBA
QAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGljIE1hcHBlZE1lbW9yeSogbWFwTWVtb3J5
KHNpemVfdCBzaXplKQotewotICAgIE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1v
cnlQb29sOjppbnN0YW5jZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwb29sLT5z
aXplKCk7ICsrbikgewotICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBwb29sLT5hdChu
KTsKLSAgICAgICAgaWYgKGN1cnJlbnQuc2l6ZSA+PSBzaXplICYmIGN1cnJlbnQuaXNGcmVlKCkp
IHsKLSAgICAgICAgICAgIGN1cnJlbnQubWFya1VzZWQoKTsKLSAgICAgICAgICAgIHJldHVybiAm
Y3VycmVudDsKLSAgICAgICAgfQotICAgIH0KLSAgICBNYXBwZWRNZW1vcnkgbmV3TWFwOwotICAg
IG5ld01hcC5zaXplID0gc2l6ZTsKLSAgICBuZXdNYXAuZmlsZSA9IG5ldyBRVGVtcG9yYXJ5Rmls
ZShRRGlyOjp0ZW1wUGF0aCgpICsgIi9XZWJLaXQyVXBkYXRlQ2h1bmsiKTsKLSAgICBuZXdNYXAu
ZmlsZS0+b3BlbihRSU9EZXZpY2U6OlJlYWRXcml0ZSk7Ci0gICAgbmV3TWFwLmZpbGUtPnJlc2l6
ZShuZXdNYXAuc2l6ZSk7Ci0gICAgbmV3TWFwLmRhdGEgPSBuZXdNYXAuZmlsZS0+bWFwKDAsIG5l
d01hcC5zaXplKTsKLSAgICBuZXdNYXAuZmlsZS0+Y2xvc2UoKTsKLSAgICBuZXdNYXAubWFya1Vz
ZWQoKTsKLSAgICByZXR1cm4gJnBvb2wtPmFwcGVuZChuZXdNYXApOwotfQotICAgIAotc3RhdGlj
IE1hcHBlZE1lbW9yeSogbWFwRmlsZShRU3RyaW5nIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSkKLXsK
LSAgICBNYXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2Uo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24pIHsKLSAg
ICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7Ci0gICAgICAgIGlmIChj
dXJyZW50LmZpbGUtPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpIHsKLSAgICAgICAgICAgIEFTU0VS
VCghY3VycmVudC5pc0ZyZWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKLSAgICBuZXdNYXAuZmlsZSA9
IG5ldyBRRmlsZShmaWxlTmFtZSk7Ci0gICAgaWYgKCFuZXdNYXAuZmlsZS0+b3BlbihRSU9EZXZp
Y2U6OlJlYWRXcml0ZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIG5ld01hcC5kYXRhID0gbmV3
TWFwLmZpbGUtPm1hcCgwLCBzaXplKTsKLSAgICBBU1NFUlQoIW5ld01hcC5pc0ZyZWUoKSk7Ci0g
ICAgbmV3TWFwLmZpbGUtPmNsb3NlKCk7Ci0gICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFw
KTsKLX0KK01hcHBlZE1lbW9yeSogbWFwTWVtb3J5KHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9w
ZW5Nb2RlIG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpSZWFkV3JpdGUpOworTWFwcGVkTWVtb3J5KiBt
YXBGaWxlKFN0cmluZyBmaWxlLCBzaXplX3Qgc2l6ZSwgUUlPRGV2aWNlOjpPcGVuTW9kZSBvcGVu
TW9kZSA9IFFJT0RldmljZTo6UmVhZFdyaXRlKTsKIAogVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5r
KCkKICAgICA6IG1fbWFwcGVkTWVtb3J5KDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70107</attachid>
            <date>2010-10-07 10:13:43 -0700</date>
            <delta_ts>2010-10-15 05:23:44 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>SharedMemoryQt_x.patch</filename>
            <type>text/plain</type>
            <size>22202</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCShyZXZpc2lvbiA2OTMx
MikKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTkgKzI2LDE5
MiBAQAogCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgorI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUlPRGV2aWNlPgor
I2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRVGVtcG9yYXJ5RmlsZT4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBNYXBwZWRNZW1vcnkqIHNl
YXJjaEZvck1hcHBlZE1lbW9yeSh1Y2hhciogcCkKK3sKKyAgICBNYXBwZWRNZW1vcnlQb29sKiBw
b29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKTsKKworICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBwb29sLT5zaXplKCk7ICsrbikgeworICAgICAgICBNYXBwZWRNZW1vcnkmIGN1
cnJlbnQgPSBwb29sLT5hdChuKTsKKyAgICAgICAgaWYgKGN1cnJlbnQuZGF0YSA9PSBwKSAKKyAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE1hcHBlZE1lbW9yeSo+KCZjdXJyZW50
KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK01hcHBlZE1lbW9yeSogbWFwTWVtb3J5KHNp
emVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpSZWFk
V3JpdGUpCit7CisgICAgTWFwcGVkTWVtb3J5UG9vbCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6
Omluc3RhbmNlKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsg
KytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9IHBvb2wtPmF0KG4pOworICAg
ICAgICBpZiAoY3VycmVudC5zaXplID49IHNpemUgJiYgY3VycmVudC5pc0ZyZWUoKSkgeworICAg
ICAgICAgICAgY3VycmVudC5tYXJrVXNlZCgpOworICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50
OworICAgICAgICB9CisgICAgfQorICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7CisgICAgbmV3TWFw
LnNpemUgPSBzaXplOworICAgIG5ld01hcC5maWxlID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFEaXI6
OnRlbXBQYXRoKCkgKyAiL1dlYktpdDJVcGRhdGVDaHVuayIpOworICAgIG5ld01hcC5maWxlLT5v
cGVuKG9wZW5Nb2RlKTsKKyAgICBuZXdNYXAuZmlsZS0+cmVzaXplKG5ld01hcC5zaXplKTsKKyAg
ICBuZXdNYXAuZGF0YSA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLnNpemUpOworICAgIG5l
d01hcC5maWxlLT5jbG9zZSgpOworICAgIG5ld01hcC5tYXJrVXNlZCgpOworICAgIHJldHVybiAm
cG9vbC0+YXBwZW5kKG5ld01hcCk7Cit9CisKK01hcHBlZE1lbW9yeSogbWFwRmlsZShTdHJpbmcg
ZmlsZU5hbWUsIHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gUUlP
RGV2aWNlOjpSZWFkV3JpdGUpCit7CisgICAgTWFwcGVkTWVtb3J5UG9vbCogcG9vbCA9IE1hcHBl
ZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBv
b2wtPnNpemUoKTsgKytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9IHBvb2wt
PmF0KG4pOworICAgICAgICBpZiAoY3VycmVudC5maWxlLT5maWxlTmFtZSgpID09IHN0YXRpY19j
YXN0PFFTdHJpbmc+KGZpbGVOYW1lKSkgeworICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50Lmlz
RnJlZSgpKTsKKyAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKKyAgICAgICAgfQorICAgIH0K
KyAgICBNYXBwZWRNZW1vcnkgbmV3TWFwOworICAgIG5ld01hcC5maWxlID0gbmV3IFFGaWxlKHN0
YXRpY19jYXN0PFFTdHJpbmc+KGZpbGVOYW1lKSk7CisgICAgaWYgKCFuZXdNYXAuZmlsZS0+b3Bl
bihvcGVuTW9kZSkpCisgICAgICAgIHJldHVybiAwOworICAgIG5ld01hcC5kYXRhID0gbmV3TWFw
LmZpbGUtPm1hcCgwLCBzaXplKTsKKyAgICBBU1NFUlQoIW5ld01hcC5pc0ZyZWUoKSk7CisgICAg
bmV3TWFwLmZpbGUtPmNsb3NlKCk7CisgICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsK
K30KKwogU2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRsZSgpCisgICAgOiBtX2ZpbGVOYW1lKCkK
KyAgICAsIG1fc2l6ZSgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIFNoYXJlZE1l
bW9yeTo6SGFuZGxlOjp+SGFuZGxlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiti
b29sIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ZpbGVOYW1lLmlzTnVsbCgpOworfQorCiB2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNv
ZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fc2l6ZSk7CisgICAgZW5j
b2Rlci0+ZW5jb2RlKG1fZmlsZU5hbWUpOworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoKTsKIH0K
IAogYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NF
UlQoaGFuZGxlLm1fZmlsZU5hbWUuaXNFbXB0eSgpKTsKKworICAgIHVpbnQ2NF90IHNpemU7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFN0cmluZyBmaWxlTmFtZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShmaWxl
TmFtZSkpCisgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7
CisgICAgaGFuZGxlLm1fZmlsZU5hbWUgPSBmaWxlTmFtZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBz
aXplKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgTWFwcGVk
TWVtb3J5KiBtbSA9IG1hcE1lbW9yeShzaXplLCBRSU9EZXZpY2U6OlJlYWRXcml0ZSk7CisKKyAg
ICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1l
bW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gc2l6ZTsKKyAgICBzaGFyZWRNZW1v
cnktPm1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1tLT5kYXRhKTsKKworICAgIHJl
dHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworCiB9CiAKK3N0YXRpYyBpbmxpbmUgUUlPRGV2
aWNlOjpPcGVuTW9kZSBtYXBQcm90ZWN0aW9uKFNoYXJlZE1lbW9yeTo6UHJvdGVjdGlvbiBwcm90
ZWN0aW9uKQoreworICAgIHN3aXRjaCAocHJvdGVjdGlvbikgeworICAgIGNhc2UgU2hhcmVkTWVt
b3J5OjpSZWFkT25seToKKyAgICAgICAgcmV0dXJuIFFJT0RldmljZTo6UmVhZE9ubHk7CisgICAg
Y2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRXcml0ZToKKyAgICAgICAgcmV0dXJuIFFJT0RldmljZTo6
UmVhZFdyaXRlOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBRSU9EZXZpY2U6Ok5vdE9wZW47Cit9CisKKwogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNo
YXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3Rl
Y3Rpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsgICAgCisgICAg
aWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBRSU9EZXZpY2U6
Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gbWFwUHJvdGVjdGlvbihwcm90ZWN0aW9uKTsKKworICAgIE1h
cHBlZE1lbW9yeSogbW0gPSBtYXBGaWxlKGhhbmRsZS5tX2ZpbGVOYW1lLCBoYW5kbGUubV9zaXpl
LCBvcGVuTW9kZSk7CisKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRv
cHRSZWYobmV3IFNoYXJlZE1lbW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gaGFu
ZGxlLm1fc2l6ZTsKKyAgICBzaGFyZWRNZW1vcnktPm1fZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KG1tLT5kYXRhKTsKKworICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwog
fQogCiBTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgTWFwcGVkTWVtb3J5KiBtYXBwZWRNZW1vcnkgPSBzZWFyY2hGb3JNYXBwZWRNZW1v
cnkocmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KG1fZGF0YSkpOworICAgIGlmIChtYXBwZWRNZW1v
cnkpIHsgCisgICAgICAgIG1hcHBlZE1lbW9yeS0+bWFya0ZyZWUoKTsKKyAgICAgICAgZGVsZXRl
IG1hcHBlZE1lbW9yeTsKKyAgICB9CiB9Ci0gICAgCisKIGJvb2wgU2hhcmVkTWVtb3J5OjpjcmVh
dGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoaGFuZGxlLm1f
ZmlsZU5hbWUuaXNOdWxsKCkpOworICAgIEFTU0VSVCghaGFuZGxlLm1fc2l6ZSk7CisKKyAgICBN
YXBwZWRNZW1vcnkqIG1tID0gc2VhcmNoRm9yTWFwcGVkTWVtb3J5KHJlaW50ZXJwcmV0X2Nhc3Q8
dWNoYXIqPihtX2RhdGEpKTsgIAorCisgICAgUVN0cmluZyBmaWxlOyAgIAorCisgICAgaWYgKG1t
KQorICAgICAgICBmaWxlID0gbW0tPmZpbGUtPmZpbGVOYW1lKCk7CisKKyAgICBpZiAoZmlsZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhhbmRsZS5tX2ZpbGVOYW1l
ID0gZmlsZTsKKyAgICBoYW5kbGUubV9zaXplID0gbV9zaXplOworCisgICAgcmV0dXJuIHRydWU7
CiB9CiAKIHVuc2lnbmVkIFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKQogewogICAgIHN0
YXRpYyB1bnNpZ25lZCBwYWdlU2l6ZSA9IDA7CiAKKyAgICBpZiAoIXBhZ2VTaXplKQorICAgICAg
ICBwYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7CisKICAgICByZXR1cm4gcGFnZVNpemU7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBl
ZE1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5
LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1hcHBlZE1l
bW9yeV9oCisjZGVmaW5lIE1hcHBlZE1lbW9yeV9oCisKKyNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0
aW9uPgorI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CitzdHJ1Y3QgTWFwcGVkTWVtb3J5IHsKKyAgICBRRmlsZSogZmlsZTsKKyAg
ICB1Y2hhciogZGF0YTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICB2b2lkIG1hcmtVc2VkKCkgeyAq
cmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KGRhdGEpID0gMDsgfQorICAgIHZvaWQgbWFya0Zy
ZWUoKSB7ICpyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4oZGF0YSkgPSAweGRlYWRiZWVmOyB9
CisgICAgYm9vbCBpc0ZyZWUoKSB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+
KGRhdGEpID09IDB4ZGVhZGJlZWY7IH0KK307CisKK2NsYXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBw
dWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzoKKyAgICBzdGF0aWMgTWFwcGVk
TWVtb3J5UG9vbCogaW5zdGFuY2UoKTsKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OworICAgIE1h
cHBlZE1lbW9yeSYgYXQoc2l6ZV90IGkpOworICAgIE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0
IE1hcHBlZE1lbW9yeSYpOworCitwcml2YXRlOgorICAgIE1hcHBlZE1lbW9yeVBvb2woKTsKKyAg
ICBRX1NMT1Qgdm9pZCBjbGVhblVwKCk7CisKKyAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bv
b2w7Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisjZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gK
SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk1h
cHBlZE1lbW9yeS5oIgorCisjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitNYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKCkKK3sKKyAgICBj
b25uZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgp
KSwgU0xPVChjbGVhblVwKCkpKTsKK30KKworTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5
UG9vbDo6aW5zdGFuY2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5
UG9vbCwgc2luZ2xldG9uLCAoKSk7CisgICAgcmV0dXJuICZzaW5nbGV0b247Cit9CisKK3NpemVf
dCBNYXBwZWRNZW1vcnlQb29sOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wb29sLnNp
emUoKTsKK30KKworTWFwcGVkTWVtb3J5JiBNYXBwZWRNZW1vcnlQb29sOjphdChzaXplX3QgaSkK
K3sKKyAgICByZXR1cm4gbV9wb29sLmF0KGkpOworfQorCitNYXBwZWRNZW1vcnkmIE1hcHBlZE1l
bW9yeVBvb2w6OmFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmIG5ld01hcCkKK3sKKyAgICBtX3Bv
b2wuYXBwZW5kKG5ld01hcCk7CisgICAgcmV0dXJuIG1fcG9vbC5sYXN0KCk7Cit9CisKK3ZvaWQg
TWFwcGVkTWVtb3J5UG9vbDo6Y2xlYW5VcCgpCit7CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wu
c2l6ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAg
ICAgTWFwcGVkTWVtb3J5JiBjaHVuayA9IG1fcG9vbC5hdChpKTsKKyAgICAgICAgaWYgKCFjaHVu
ay5pc0ZyZWUoKSkKKyAgICAgICAgICAgIGNodW5rLmZpbGUtPnVubWFwKGNodW5rLmRhdGEpOwor
ICAgICAgICBjaHVuay5maWxlLT5yZW1vdmUoKTsKKyAgICB9CisKKyAgICBkZWxldGUgdGhpczsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1NoYXJl
ZE1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJ
KHJldmlzaW9uIDY5MzEyKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKKyNpZiBQTEFURk9STShRVCkKKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4gCisjZW5kaWYKKwogbmFtZXNwYWNlIENvcmVJUEMg
ewogICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKICAgICBjbGFzcyBBcmd1bWVudEVuY29kZXI7
CkBAIC01OCw2ICs2Miw4IEBACiAgICAgICAgIGZyaWVuZCBjbGFzcyBTaGFyZWRNZW1vcnk7CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICBtdXRhYmxlIG1hY2hfcG9ydF90IG1fcG9ydDsKKyNl
bGlmIFBMQVRGT1JNKFFUKQorICAgICAgICBtdXRhYmxlIFN0cmluZyBtX2ZpbGVOYW1lOwogI2Vu
ZGlmCiAgICAgICAgIHNpemVfdCBtX3NpemU7CiAgICAgfTsKSW5kZXg6IFdlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTMxMikKKysr
IFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAt
MTAtMDcgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQgU2hhcmVk
TWVtb3J5IGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NzM0NQorCisgICAgICAgIEltcGxlbWVudCB1bmltcGxlbWVudGVkIGZ1bmN0
aW9ucyBpbiBTaGFyZWRNZW1vcnlRdC5jcHAuCisgICAgICAgIE1vdmUgTWFwcGVkTWVtb3J5Lmgg
YW5kIE1hcHBlZE1lbW9yeVBvb2wuY3BwIGZyb20gU2hhcmVkL3F0IHRvIFBsYXRmb3JtL3F0LAor
ICAgICAgICBjaGFuZ2UgV2ViS2l0Mi5wcm8ncyBhZmZlY3RlZCBsaW5lcy4KKworICAgICAgICAq
IFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgorICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1l
bW9yeS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5OjptYXJrVXNlZCk6
CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeTo6bWFya0ZyZWUpOgorICAgICAgICAoV2Vi
S2l0OjpNYXBwZWRNZW1vcnk6OmlzRnJlZSk6CisgICAgICAgICogUGxhdGZvcm0vcXQvTWFwcGVk
TWVtb3J5UG9vbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29s
OjpNYXBwZWRNZW1vcnlQb29sKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6
aW5zdGFuY2UpOgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjpzaXplKToKKyAg
ICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6YXQpOgorICAgICAgICAoV2ViS2l0OjpN
YXBwZWRNZW1vcnlQb29sOjphcHBlbmQpOgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQ
b29sOjpjbGVhblVwKToKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6Om1hcE1lbW9yeSk6CisgICAgICAgIChXZWJLaXQ6Om1hcEZpbGUp
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6SGFuZGxlKToKKyAgICAg
ICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxsKToKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6Om1hcFByb3RlY3Rpb24pOgorICAgICAgICAoV2ViS2l0Ojpz
ZWFyY2hGb3JNYXBwZWRNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6On5T
aGFyZWRNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRs
ZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUpOgorICAg
ICAgICAqIFNoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFy
ZWQvcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL3F0
L1VwZGF0ZUNodW5rLmNwcDoKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKwogMjAxMC0xMC0wNyAg
THVpeiBBZ29zdGluaSAgPGx1aXouYWdvc3RpbmlAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IFdlYktpdDIvV2Vi
S2l0Mi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnBybwkocmV2aXNpb24gNjkz
MTIpCisrKyBXZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1
LDcgQEAKIElOQ0xVREVQQVRIID0gXAogICAgIFBsYXRmb3JtIFwKICAgICBQbGF0Zm9ybS9Db3Jl
SVBDIFwKKyAgICBQbGF0Zm9ybS9xdCBcCiAgICAgU2hhcmVkIFwKICAgICBTaGFyZWQvQVBJL2Mg
XAogICAgIFNoYXJlZC9Db3JlSVBDU3VwcG9ydCBcCkBAIC0xNTksNiArMTYwLDcgQEAKICAgICBQ
bGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuaCBcCiAg
ICAgUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIFwKKyAgICBQbGF0Zm9ybS9x
dC9NYXBwZWRNZW1vcnkuaCBcCiAgICAgUGxhdGZvcm0vUnVuTG9vcC5oIFwKICAgICBQbGF0Zm9y
bS9TaGFyZWRNZW1vcnkuaCBcCiAgICAgUGxhdGZvcm0vV29ya0l0ZW0uaCBcCkBAIC0xODUsNyAr
MTg3LDYgQEAKICAgICBTaGFyZWQvTXV0YWJsZURpY3Rpb25hcnkuaCBcCiAgICAgU2hhcmVkL05h
dGl2ZVdlYktleWJvYXJkRXZlbnQuaCBcCiAgICAgU2hhcmVkL05vdEltcGxlbWVudGVkLmggXAot
ICAgIFNoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2Vy
dGlmaWNhdGVJbmZvLmggXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5oIFwKICAgICBTaGFy
ZWQvcXQvV2ViRXZlbnRGYWN0b3J5UXQuaCBcCkBAIC0zMDIsNiArMzAzLDcgQEAKICAgICBQbGF0
Zm9ybS9Nb2R1bGUuY3BwIFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmNwcCBcCiAgICAgUGxhdGZv
cm0vV29ya1F1ZXVlLmNwcCBcCisgICAgUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAg
XAogICAgIFBsYXRmb3JtL3F0L01vZHVsZVF0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvUnVuTG9v
cFF0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwIFwKQEAgLTMxOCw3
ICszMjAsNiBAQAogICAgIFNoYXJlZC9JbW11dGFibGVEaWN0aW9uYXJ5LmNwcCBcCiAgICAgU2hh
cmVkL011dGFibGVBcnJheS5jcHAgXAogICAgIFNoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5jcHAg
XAotICAgIFNoYXJlZC9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcCBcCiAgICAgU2hhcmVkL3F0L05h
dGl2ZVdlYktleWJvYXJkRXZlbnRRdC5jcHAgXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5j
cHAgXAogICAgIFNoYXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHAgXApJbmRleDog
V2ViS2l0Mi9TaGFyZWQvcXQvTWFwcGVkTWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9T
aGFyZWQvcXQvTWFwcGVkTWVtb3J5LmgJKHJldmlzaW9uIDY5MzEyKQorKysgV2ViS2l0Mi9TaGFy
ZWQvcXQvTWFwcGVkTWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBNYXBwZWRNZW1vcnlfaAotI2RlZmluZSBNYXBwZWRNZW1vcnlfaAot
Ci0jaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRmlsZT4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IE1hcHBlZE1lbW9y
eSB7Ci0gICAgUUZpbGUqIGZpbGU7Ci0gICAgdWNoYXIqIGRhdGE7Ci0gICAgc2l6ZV90IHNpemU7
Ci0gICAgdm9pZCBtYXJrVXNlZCgpIHsgKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPihkYXRh
KSA9IDA7IH0KLSAgICB2b2lkIG1hcmtGcmVlKCkgeyAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRf
dCo+KGRhdGEpID0gMHhkZWFkYmVlZjsgfQotICAgIGJvb2wgaXNGcmVlKCkgeyByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8dWludDY0X3QqPihkYXRhKSA9PSAweGRlYWRiZWVmOyB9Ci19OwotCi1j
bGFzcyBNYXBwZWRNZW1vcnlQb29sIDogcHVibGljIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi1w
dWJsaWM6Ci0gICAgc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIGluc3RhbmNlKCk7Ci0gICAgc2l6
ZV90IHNpemUoKSBjb25zdDsKLSAgICBNYXBwZWRNZW1vcnkmIGF0KHNpemVfdCBpKTsKLSAgICBN
YXBwZWRNZW1vcnkmIGFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmKTsKLQotcHJpdmF0ZToKLSAg
ICBNYXBwZWRNZW1vcnlQb29sKCk7Ci0gICAgUV9TTE9UIHZvaWQgY2xlYW5VcCgpOwotCi0gICAg
VmVjdG9yPE1hcHBlZE1lbW9yeT4gbV9wb29sOwotfTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
I2VuZGlmIC8vIE1hcHBlZE1lbW9yeV9oCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRN
ZW1vcnlQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1v
cnlQb29sLmNwcAkocmV2aXNpb24gNjkzMTIpCisrKyBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRN
ZW1vcnlQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJT
SVRZIE9GIFNaRUdFRCBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJNYXBwZWRNZW1vcnkuaCIKLQotI2luY2x1ZGUgIlN0ZExp
YkV4dHJhcy5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotTWFwcGVkTWVtb3J5UG9vbDo6TWFw
cGVkTWVtb3J5UG9vbCgpCi17Ci0gICAgY29ubmVjdChRQ29yZUFwcGxpY2F0aW9uOjppbnN0YW5j
ZSgpLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1QoY2xlYW5VcCgpKSk7Ci19Ci0KLU1hcHBl
ZE1lbW9yeVBvb2wqIE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKE1hcHBlZE1lbW9yeVBvb2wsIHNpbmdsZXRvbiwgKCkpOwotICAgIHJldHVy
biAmc2luZ2xldG9uOwotfQotCi1zaXplX3QgTWFwcGVkTWVtb3J5UG9vbDo6c2l6ZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcG9vbC5zaXplKCk7Ci19Ci0KLU1hcHBlZE1lbW9yeSYgTWFwcGVk
TWVtb3J5UG9vbDo6YXQoc2l6ZV90IGkpCi17Ci0gICAgcmV0dXJuIG1fcG9vbC5hdChpKTsKLX0K
LQotTWFwcGVkTWVtb3J5JiBNYXBwZWRNZW1vcnlQb29sOjphcHBlbmQoY29uc3QgTWFwcGVkTWVt
b3J5JiBuZXdNYXApCi17Ci0gICAgbV9wb29sLmFwcGVuZChuZXdNYXApOwotICAgIHJldHVybiBt
X3Bvb2wubGFzdCgpOwotfQotCi12b2lkIE1hcHBlZE1lbW9yeVBvb2w6OmNsZWFuVXAoKQotewot
ICAgIHNpemVfdCBzaXplID0gbV9wb29sLnNpemUoKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIE1hcHBlZE1lbW9yeSYgY2h1bmsgPSBtX3Bvb2wu
YXQoaSk7Ci0gICAgICAgIGlmICghY2h1bmsuaXNGcmVlKCkpCi0gICAgICAgICAgICBjaHVuay5m
aWxlLT51bm1hcChjaHVuay5kYXRhKTsKLSAgICAgICAgY2h1bmsuZmlsZS0+cmVtb3ZlKCk7Ci0g
ICAgfQotCi0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRl
eDogV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcAkocmV2aXNpb24gNjkzMTIpCisrKyBXZWJLaXQy
L1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwx
MCBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRF
bmNvZGVyLmgiCi0jaW5jbHVkZSAiQXR0YWNobWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9y
eS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFFEZWJ1
Zz4KLSNpbmNsdWRlIDxRRGlyPgorI2luY2x1ZGUgPFFJT0RldmljZT4KICNpbmNsdWRlIDxRSW1h
Z2U+Ci0jaW5jbHVkZSA8UVRlbXBvcmFyeUZpbGU+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDMsNDYgKzQxLDgg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBNYXBwZWRNZW1vcnkqIG1hcE1lbW9y
eShzaXplX3Qgc2l6ZSkKLXsKLSAgICBNYXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVt
b3J5UG9vbDo6aW5zdGFuY2UoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+
c2l6ZSgpOyArK24pIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQo
bik7Ci0gICAgICAgIGlmIChjdXJyZW50LnNpemUgPj0gc2l6ZSAmJiBjdXJyZW50LmlzRnJlZSgp
KSB7Ci0gICAgICAgICAgICBjdXJyZW50Lm1hcmtVc2VkKCk7Ci0gICAgICAgICAgICByZXR1cm4g
JmN1cnJlbnQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKLSAg
ICBuZXdNYXAuc2l6ZSA9IHNpemU7Ci0gICAgbmV3TWFwLmZpbGUgPSBuZXcgUVRlbXBvcmFyeUZp
bGUoUURpcjo6dGVtcFBhdGgoKSArICIvV2ViS2l0MlVwZGF0ZUNodW5rIik7Ci0gICAgbmV3TWFw
LmZpbGUtPm9wZW4oUUlPRGV2aWNlOjpSZWFkV3JpdGUpOwotICAgIG5ld01hcC5maWxlLT5yZXNp
emUobmV3TWFwLnNpemUpOwotICAgIG5ld01hcC5kYXRhID0gbmV3TWFwLmZpbGUtPm1hcCgwLCBu
ZXdNYXAuc2l6ZSk7Ci0gICAgbmV3TWFwLmZpbGUtPmNsb3NlKCk7Ci0gICAgbmV3TWFwLm1hcmtV
c2VkKCk7Ci0gICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsKLX0KLSAgICAKLXN0YXRp
YyBNYXBwZWRNZW1vcnkqIG1hcEZpbGUoUVN0cmluZyBmaWxlTmFtZSwgc2l6ZV90IHNpemUpCi17
Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNl
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsgKytuKSB7Ci0g
ICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9IHBvb2wtPmF0KG4pOwotICAgICAgICBpZiAo
Y3VycmVudC5maWxlLT5maWxlTmFtZSgpID09IGZpbGVOYW1lKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoIWN1cnJlbnQuaXNGcmVlKCkpOwotICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OwotICAg
ICAgICB9Ci0gICAgfQotICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7Ci0gICAgbmV3TWFwLmZpbGUg
PSBuZXcgUUZpbGUoZmlsZU5hbWUpOwotICAgIGlmICghbmV3TWFwLmZpbGUtPm9wZW4oUUlPRGV2
aWNlOjpSZWFkV3JpdGUpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBuZXdNYXAuZGF0YSA9IG5l
d01hcC5maWxlLT5tYXAoMCwgc2l6ZSk7Ci0gICAgQVNTRVJUKCFuZXdNYXAuaXNGcmVlKCkpOwot
ICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOwotICAgIHJldHVybiAmcG9vbC0+YXBwZW5kKG5ld01h
cCk7Ci19CitNYXBwZWRNZW1vcnkqIG1hcE1lbW9yeShzaXplX3Qgc2l6ZSwgUUlPRGV2aWNlOjpP
cGVuTW9kZSBvcGVuTW9kZSA9IFFJT0RldmljZTo6UmVhZFdyaXRlKTsKK01hcHBlZE1lbW9yeSog
bWFwRmlsZShTdHJpbmcgZmlsZSwgc2l6ZV90IHNpemUsIFFJT0RldmljZTo6T3Blbk1vZGUgb3Bl
bk1vZGUgPSBRSU9EZXZpY2U6OlJlYWRXcml0ZSk7CiAKIFVwZGF0ZUNodW5rOjpVcGRhdGVDaHVu
aygpCiAgICAgOiBtX21hcHBlZE1lbW9yeSgwKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70856</attachid>
            <date>2010-10-15 05:23:44 -0700</date>
            <delta_ts>2010-10-15 08:37:35 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>shared.patch</filename>
            <type>text/plain</type>
            <size>22636</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
YWZmZGEzMi4uYWMyMTU4OSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NSBAQAorMjAxMC0xMC0xNSAgWm9sdGFuIEhvcnZh
dGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBTaGFyZWRNZW1vcnkgZm9yIFdlYktpdDIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzQ1CisK
KyAgICAgICAgSW1wbGVtZW50IHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25zIGluIFNoYXJlZE1lbW9y
eVF0LmNwcC4KKyAgICAgICAgTW92ZSBNYXBwZWRNZW1vcnkuaCBhbmQgTWFwcGVkTWVtb3J5UG9v
bC5jcHAgZnJvbSBTaGFyZWQvcXQgdG8gUGxhdGZvcm0vcXQsCisgICAgICAgIGNoYW5nZSBXZWJL
aXQyLnBybydzIGFmZmVjdGVkIGxpbmVzLgorCisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVt
b3J5Lmg6CisgICAgICAgICogUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnk6Om1hcmtVc2VkKToKKyAgICAgICAgKFdlYktpdDo6
TWFwcGVkTWVtb3J5OjptYXJrRnJlZSk6CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeTo6
aXNGcmVlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6Ok1hcHBlZE1lbW9yeVBvb2wp
OgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSk6CisgICAgICAg
IChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6OnNpemUpOgorICAgICAgICAoV2ViS2l0OjpNYXBw
ZWRNZW1vcnlQb29sOjphdCk6CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6OmFw
cGVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6OmNsZWFuVXApOgorICAg
ICAgICAqIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
bWFwTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6bWFwRmlsZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
SGFuZGxlOjppc051bGwpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZSk6
CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6bWFwUHJvdGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OnNlYXJjaEZvck1hcHBlZE1lbW9y
eSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSk6CisgICAg
ICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKToKKyAgICAgICAgKFdlYktp
dDo6U2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSk6CisgICAgICAgICogU2hhcmVkL3F0L01h
cHBlZE1lbW9yeS5oOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9xdC9NYXBwZWRNZW1vcnlQ
b29sLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvcXQvVXBkYXRlQ2h1bmsuY3BwOgor
ICAgICAgICAqIFdlYktpdDIucHJvOgorCiAyMDEwLTEwLTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1v
bi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRp
ZmYgLS1naXQgYS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvV2ViS2l0Mi9QbGF0
Zm9ybS9TaGFyZWRNZW1vcnkuaAppbmRleCAyNWQ5YzI0Li5jYjZjYTE1IDEwMDY0NAotLS0gYS9X
ZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vU2hh
cmVkTWVtb3J5LmgKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIENvcmVJUEMg
ewogICAgIGNsYXNzIEFyZ3VtZW50RGVjb2RlcjsKICAgICBjbGFzcyBBcmd1bWVudEVuY29kZXI7
CkBAIC02MCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICAgICAgbXV0YWJsZSBtYWNoX3BvcnRfdCBt
X3BvcnQ7CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgICAgIG11dGFibGUgSEFORExFIG1faGFu
ZGxlOworI2VsaWYgUExBVEZPUk0oUVQpCisgICAgICAgIG11dGFibGUgU3RyaW5nIG1fZmlsZU5h
bWU7CiAjZW5kaWYKICAgICAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB9OwpkaWZmIC0tZ2l0IGEv
V2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnkuaCBiL1dlYktpdDIvUGxhdGZvcm0vcXQv
TWFwcGVkTWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyYzIx
MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5LmgK
QEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNYXBwZWRNZW1vcnlfaAorI2Rl
ZmluZSBNYXBwZWRNZW1vcnlfaAorCisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNpbmNs
dWRlIDxRRmlsZT4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworc3RydWN0IE1hcHBlZE1lbW9yeSB7CisgICAgUUZpbGUqIGZpbGU7CisgICAgc3RydWN0IERh
dGEgeworICAgICAgICB1aW50MzJfdCBpc0ZyZWU7IC8vIGtlZXAgYnl0ZXMgYWxpZ25lZAorICAg
ICAgICB1Y2hhciBieXRlczsKKyAgICB9OworICAgIHVuaW9uIHsKKyAgICAgICAgdWNoYXIqIG1h
cHBlZEJ5dGVzOworICAgICAgICBEYXRhKiBkYXRhUHRyOworICAgIH07CisgICAgc2l6ZV90IGRh
dGFTaXplOworCisgICAgc2l6ZV90IG1hcFNpemUoKSBjb25zdCB7IHJldHVybiBkYXRhU2l6ZSAr
IHNpemVvZihEYXRhKTsgfQorICAgIHZvaWQgbWFya1VzZWQoKSB7IGRhdGFQdHItPmlzRnJlZSA9
IGZhbHNlOyB9CisgICAgdm9pZCBtYXJrRnJlZSgpIHsgZGF0YVB0ci0+aXNGcmVlID0gdHJ1ZTsg
fQorICAgIGJvb2wgaXNGcmVlKCkgY29uc3QgeyByZXR1cm4gZGF0YVB0ci0+aXNGcmVlOyB9Cisg
ICAgdWNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiAmZGF0YVB0ci0+Ynl0ZXM7IH0KK307CisK
K2NsYXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9vbCogaW5zdGFuY2UoKTsKKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0OworICAgIE1hcHBlZE1lbW9yeSYgYXQoc2l6ZV90IGkpOworICAg
IE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYpOworCitwcml2YXRlOgor
ICAgIE1hcHBlZE1lbW9yeVBvb2woKTsKKyAgICBRX1NMT1Qgdm9pZCBjbGVhblVwKCk7CisKKyAg
ICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7Cit9OworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisjZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gKZGlmZiAtLWdpdCBhL1dlYktpdDIvUGxhdGZvcm0v
cXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9y
eVBvb2wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZjJmODMKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3Bw
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk1hcHBl
ZE1lbW9yeS5oIgorCisjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitNYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKCkKK3sKKyAgICBjb25u
ZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwg
U0xPVChjbGVhblVwKCkpKTsKK30KKworTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9v
bDo6aW5zdGFuY2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9v
bCwgc2luZ2xldG9uLCAoKSk7CisgICAgcmV0dXJuICZzaW5nbGV0b247Cit9CisKK3NpemVfdCBN
YXBwZWRNZW1vcnlQb29sOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wb29sLnNpemUo
KTsKK30KKworTWFwcGVkTWVtb3J5JiBNYXBwZWRNZW1vcnlQb29sOjphdChzaXplX3QgaSkKK3sK
KyAgICByZXR1cm4gbV9wb29sLmF0KGkpOworfQorCitNYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9y
eVBvb2w6OmFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmIG5ld01hcCkKK3sKKyAgICBtX3Bvb2wu
YXBwZW5kKG5ld01hcCk7CisgICAgcmV0dXJuIG1fcG9vbC5sYXN0KCk7Cit9CisKK3ZvaWQgTWFw
cGVkTWVtb3J5UG9vbDo6Y2xlYW5VcCgpCit7CisgICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wuc2l6
ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
TWFwcGVkTWVtb3J5JiBjaHVuayA9IG1fcG9vbC5hdChpKTsKKyAgICAgICAgaWYgKCFjaHVuay5p
c0ZyZWUoKSkKKyAgICAgICAgICAgIGNodW5rLmZpbGUtPnVubWFwKGNodW5rLm1hcHBlZEJ5dGVz
KTsKKyAgICAgICAgY2h1bmsuZmlsZS0+cmVtb3ZlKCk7CisgICAgfQorCisgICAgZGVsZXRlIHRo
aXM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9QbGF0
Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgYi9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1l
bW9yeVF0LmNwcAppbmRleCAwODdhMmVhLi43ZjFlMGRmIDEwMDY0NAotLS0gYS9XZWJLaXQyL1Bs
YXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAorKysgYi9XZWJLaXQyL1BsYXRmb3JtL3F0L1No
YXJlZE1lbW9yeVF0LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEw
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1LDU4ICsyNiwxODggQEAKIAogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNs
dWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJNYXBwZWRNZW1vcnkuaCIKKyNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxRRGlyPgorI2luY2x1ZGUg
PFFJT0RldmljZT4KKyNpbmNsdWRlIDxRSW1hZ2U+CisjaW5jbHVkZSA8UVRlbXBvcmFyeUZpbGU+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCitNYXBwZWRNZW1vcnkqIG1hcE1lbW9yeShzaXplX3Qgc2l6
ZSwgUUlPRGV2aWNlOjpPcGVuTW9kZSBvcGVuTW9kZSA9IFFJT0RldmljZTo6UmVhZFdyaXRlKQor
eworICAgIE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5j
ZSgpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwb29sLT5zaXplKCk7ICsrbikgewor
ICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBwb29sLT5hdChuKTsKKyAgICAgICAgaWYg
KGN1cnJlbnQuZGF0YVNpemUgPj0gc2l6ZSAmJiBjdXJyZW50LmlzRnJlZSgpKSB7CisgICAgICAg
ICAgICBjdXJyZW50Lm1hcmtVc2VkKCk7CisgICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKKyAgICBuZXdNYXAuZGF0
YVNpemUgPSBzaXplOworICAgIG5ld01hcC5maWxlID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFEaXI6
OnRlbXBQYXRoKCkgKyAiL1dlYktpdDJVcGRhdGVDaHVuayIpOworICAgIG5ld01hcC5maWxlLT5v
cGVuKG9wZW5Nb2RlKTsKKyAgICBuZXdNYXAuZmlsZS0+cmVzaXplKG5ld01hcC5tYXBTaXplKCkp
OworICAgIG5ld01hcC5tYXBwZWRCeXRlcyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1h
cFNpemUoKSk7CisgICAgbmV3TWFwLmZpbGUtPmNsb3NlKCk7CisgICAgbmV3TWFwLm1hcmtVc2Vk
KCk7CisgICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsKK30KKworTWFwcGVkTWVtb3J5
KiBtYXBGaWxlKFFTdHJpbmcgZmlsZU5hbWUsIHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5N
b2RlIG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpSZWFkV3JpdGUpCit7CisgICAgTWFwcGVkTWVtb3J5
UG9vbCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7CisgICAgZm9yICh1bnNp
Z25lZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsgKytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9y
eSYgY3VycmVudCA9IHBvb2wtPmF0KG4pOworICAgICAgICBpZiAoY3VycmVudC5maWxlLT5maWxl
TmFtZSgpID09IGZpbGVOYW1lKSB7CisgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQuaXNGcmVl
KCkpOworICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OworICAgICAgICB9CisgICAgfQorICAg
IE1hcHBlZE1lbW9yeSBuZXdNYXA7CisgICAgbmV3TWFwLmZpbGUgPSBuZXcgUUZpbGUoZmlsZU5h
bWUpOworICAgIGlmICghbmV3TWFwLmZpbGUtPm9wZW4ob3Blbk1vZGUpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBuZXdNYXAuZGF0YVNpemUgPSBzaXplOworICAgIG5ld01hcC5tYXBwZWRCeXRl
cyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1hcFNpemUoKSk7CisgICAgQVNTRVJUKCFu
ZXdNYXAuaXNGcmVlKCkpOworICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOworICAgIG5ld01hcC5m
aWxlLT5yZW1vdmUoKTsgLy8gVGhlIG1hcCBzdGF5cyBhbGl2ZSBldmVuIHdoZW4gdGhlIGZpbGUg
aXMgdW5saW5rZWQuCisgICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsKK30KKwogU2hh
cmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRsZSgpCisgICAgOiBtX2ZpbGVOYW1lKCkKKyAgICAsIG1f
c2l6ZSgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIFNoYXJlZE1lbW9yeTo6SGFu
ZGxlOjp+SGFuZGxlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNoYXJl
ZE1lbW9yeTo6SGFuZGxlOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZpbGVOYW1l
LmlzTnVsbCgpOwogfQogCiB2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQ
Qzo6QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fc2l6ZSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKG1fZmlsZU5hbWUpOworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoKTsKIH0KIAogYm9vbCBT
aGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlQoaGFuZGxl
Lm1fZmlsZU5hbWUuaXNFbXB0eSgpKTsKKworICAgIHVpbnQ2NF90IHNpemU7CisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFN0cmluZyBmaWxlTmFtZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShmaWxlTmFtZSkpCisg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7CisgICAgaGFu
ZGxlLm1fZmlsZU5hbWUgPSBmaWxlTmFtZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBQYXNz
UmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBNYXBwZWRNZW1vcnkq
IG1tID0gbWFwTWVtb3J5KHNpemUsIFFJT0RldmljZTo6UmVhZFdyaXRlKTsKKworICAgIFJlZlB0
cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7
CisgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBzaXplOworICAgIHNoYXJlZE1lbW9yeS0+bV9k
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obW0tPmRhdGEoKSk7CisKKyAgICByZXR1cm4g
c2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKK30KKworc3RhdGljIGlubGluZSBRSU9EZXZpY2U6Ok9w
ZW5Nb2RlIG1hcFByb3RlY3Rpb24oU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24p
Cit7CisgICAgc3dpdGNoIChwcm90ZWN0aW9uKSB7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJl
YWRPbmx5OgorICAgICAgICByZXR1cm4gUUlPRGV2aWNlOjpSZWFkT25seTsKKyAgICBjYXNlIFNo
YXJlZE1lbW9yeTo6UmVhZFdyaXRlOgorICAgICAgICByZXR1cm4gUUlPRGV2aWNlOjpSZWFkV3Jp
dGU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFFJT0Rl
dmljZTo6Tm90T3BlbjsKIH0KIAorCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVt
b3J5OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOyAgICAKKyAgICBpZiAoaGFu
ZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFFJT0RldmljZTo6T3Blbk1v
ZGUgb3Blbk1vZGUgPSBtYXBQcm90ZWN0aW9uKHByb3RlY3Rpb24pOworCisgICAgTWFwcGVkTWVt
b3J5KiBtbSA9IG1hcEZpbGUoUVN0cmluZyhoYW5kbGUubV9maWxlTmFtZSksIGhhbmRsZS5tX3Np
emUsIG9wZW5Nb2RlKTsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShh
ZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBo
YW5kbGUubV9zaXplOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4obW0tPmRhdGEoKSk7CisKKyAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2Uo
KTsKK30KKworc3RhdGljIE1hcHBlZE1lbW9yeSogc2VhcmNoRm9yTWFwcGVkTWVtb3J5KHVjaGFy
KiBwKQoreworICAgIE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1vcnlQb29sOjpp
bnN0YW5jZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsg
KytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9IHBvb2wtPmF0KG4pOworICAg
ICAgICBpZiAoY3VycmVudC5kYXRhKCkgPT0gcCkKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PE1hcHBlZE1lbW9yeSo+KCZjdXJyZW50KTsKKyAgICB9CisgICAgcmV0dXJuIDA7
CiB9CiAKIFNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBNYXBwZWRNZW1vcnkqIG1hcHBlZE1lbW9yeSA9IHNlYXJjaEZvck1hcHBlZE1l
bW9yeShyZWludGVycHJldF9jYXN0PHVjaGFyKj4obV9kYXRhKSk7CisgICAgaWYgKG1hcHBlZE1l
bW9yeSkgeyAKKyAgICAgICAgbWFwcGVkTWVtb3J5LT5tYXJrRnJlZSgpOworICAgICAgICBkZWxl
dGUgbWFwcGVkTWVtb3J5OworICAgIH0KIH0KLSAgICAKKwogYm9vbCBTaGFyZWRNZW1vcnk6OmNy
ZWF0ZUhhbmRsZShIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChoYW5kbGUu
bV9maWxlTmFtZS5pc051bGwoKSk7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zaXplKTsKKworICAg
IE1hcHBlZE1lbW9yeSogbW0gPSBzZWFyY2hGb3JNYXBwZWRNZW1vcnkocmVpbnRlcnByZXRfY2Fz
dDx1Y2hhcio+KG1fZGF0YSkpOyAgCisKKyAgICBpZiAoIW1tKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBoYW5kbGUubV9maWxlTmFtZSA9IG1tLT5maWxlLT5maWxlTmFtZSgpOworICAg
IGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdW5zaWdu
ZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB7CiAgICAgc3RhdGljIHVuc2lnbmVk
IHBhZ2VTaXplID0gMDsKIAorICAgIGlmICghcGFnZVNpemUpCisgICAgICAgIHBhZ2VTaXplID0g
Z2V0cGFnZXNpemUoKTsKKwogICAgIHJldHVybiBwYWdlU2l6ZTsKIH0KIApkaWZmIC0tZ2l0IGEv
V2ViS2l0Mi9TaGFyZWQvcXQvTWFwcGVkTWVtb3J5LmggYi9XZWJLaXQyL1NoYXJlZC9xdC9NYXBw
ZWRNZW1vcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEyYzIxMC4uMDAwMDAw
MAotLS0gYS9XZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaAorKysgL2Rldi9udWxsCkBA
IC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTWFwcGVkTWVtb3J5X2gKLSNkZWZp
bmUgTWFwcGVkTWVtb3J5X2gKLQotI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Ci0jaW5jbHVk
ZSA8UUZpbGU+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LXN0cnVjdCBNYXBwZWRNZW1vcnkgewotICAgIFFGaWxlKiBmaWxlOwotICAgIHN0cnVjdCBEYXRh
IHsKLSAgICAgICAgdWludDMyX3QgaXNGcmVlOyAvLyBrZWVwIGJ5dGVzIGFsaWduZWQKLSAgICAg
ICAgdWNoYXIgYnl0ZXM7Ci0gICAgfTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHVjaGFyKiBtYXBw
ZWRCeXRlczsKLSAgICAgICAgRGF0YSogZGF0YVB0cjsKLSAgICB9OwotICAgIHNpemVfdCBkYXRh
U2l6ZTsKLQotICAgIHNpemVfdCBtYXBTaXplKCkgY29uc3QgeyByZXR1cm4gZGF0YVNpemUgKyBz
aXplb2YoRGF0YSk7IH0KLSAgICB2b2lkIG1hcmtVc2VkKCkgeyBkYXRhUHRyLT5pc0ZyZWUgPSBm
YWxzZTsgfQotICAgIHZvaWQgbWFya0ZyZWUoKSB7IGRhdGFQdHItPmlzRnJlZSA9IHRydWU7IH0K
LSAgICBib29sIGlzRnJlZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFQdHItPmlzRnJlZTsgfQotICAg
IHVjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gJmRhdGFQdHItPmJ5dGVzOyB9Ci19OwotCi1j
bGFzcyBNYXBwZWRNZW1vcnlQb29sIDogcHVibGljIFFPYmplY3QgewotICAgIFFfT0JKRUNUCi1w
dWJsaWM6Ci0gICAgc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIGluc3RhbmNlKCk7Ci0gICAgc2l6
ZV90IHNpemUoKSBjb25zdDsKLSAgICBNYXBwZWRNZW1vcnkmIGF0KHNpemVfdCBpKTsKLSAgICBN
YXBwZWRNZW1vcnkmIGFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmKTsKLQotcHJpdmF0ZToKLSAg
ICBNYXBwZWRNZW1vcnlQb29sKCk7Ci0gICAgUV9TTE9UIHZvaWQgY2xlYW5VcCgpOwotCi0gICAg
VmVjdG9yPE1hcHBlZE1lbW9yeT4gbV9wb29sOwotfTsKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
I2VuZGlmIC8vIE1hcHBlZE1lbW9yeV9oCmRpZmYgLS1naXQgYS9XZWJLaXQyL1NoYXJlZC9xdC9N
YXBwZWRNZW1vcnlQb29sLmNwcCBiL1dlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWYyZjgzLi4wMDAwMDAwCi0tLSBh
L1dlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiTWFwcGVkTWVt
b3J5LmgiCi0KLSNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLU1hcHBlZE1lbW9yeVBvb2w6Ok1hcHBlZE1lbW9yeVBvb2woKQotewotICAgIGNvbm5lY3Qo
UUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCBTTE9U
KGNsZWFuVXAoKSkpOwotfQotCi1NYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRNZW1vcnlQb29sOjpp
bnN0YW5jZSgpCi17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBwZWRNZW1vcnlQb29sLCBz
aW5nbGV0b24sICgpKTsKLSAgICByZXR1cm4gJnNpbmdsZXRvbjsKLX0KLQotc2l6ZV90IE1hcHBl
ZE1lbW9yeVBvb2w6OnNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Bvb2wuc2l6ZSgpOwot
fQotCi1NYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6OmF0KHNpemVfdCBpKQotewotICAg
IHJldHVybiBtX3Bvb2wuYXQoaSk7Ci19Ci0KLU1hcHBlZE1lbW9yeSYgTWFwcGVkTWVtb3J5UG9v
bDo6YXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYgbmV3TWFwKQotewotICAgIG1fcG9vbC5hcHBl
bmQobmV3TWFwKTsKLSAgICByZXR1cm4gbV9wb29sLmxhc3QoKTsKLX0KLQotdm9pZCBNYXBwZWRN
ZW1vcnlQb29sOjpjbGVhblVwKCkKLXsKLSAgICBzaXplX3Qgc2l6ZSA9IG1fcG9vbC5zaXplKCk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBNYXBw
ZWRNZW1vcnkmIGNodW5rID0gbV9wb29sLmF0KGkpOwotICAgICAgICBpZiAoIWNodW5rLmlzRnJl
ZSgpKQotICAgICAgICAgICAgY2h1bmsuZmlsZS0+dW5tYXAoY2h1bmsubWFwcGVkQnl0ZXMpOwot
ICAgICAgICBjaHVuay5maWxlLT5yZW1vdmUoKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgdGhpczsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQyL1NoYXJlZC9x
dC9VcGRhdGVDaHVuay5jcHAgYi9XZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAKaW5k
ZXggOGRkMGY2MS4uZDMzNjYxYyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRl
Q2h1bmsuY3BwCisrKyBiL1dlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcApAQCAtMjks
MTIgKzI5LDEwIEBACiAKICNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJB
cmd1bWVudEVuY29kZXIuaCIKLSNpbmNsdWRlICJBdHRhY2htZW50LmgiCisjaW5jbHVkZSAiU2hh
cmVkTWVtb3J5LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVk
ZSA8UURlYnVnPgotI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUlPRGV2aWNlPgogI2luY2x1
ZGUgPFFJbWFnZT4KLSNpbmNsdWRlIDxRVGVtcG9yYXJ5RmlsZT4KICNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00Myw0
OCArNDEsOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
c3RhdGljIE1hcHBlZE1lbW9yeSogbWFwTWVtb3J5KHNpemVfdCBzaXplKQotewotICAgIE1hcHBl
ZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSgpOwotICAgIGZv
ciAodW5zaWduZWQgbiA9IDA7IG4gPCBwb29sLT5zaXplKCk7ICsrbikgewotICAgICAgICBNYXBw
ZWRNZW1vcnkmIGN1cnJlbnQgPSBwb29sLT5hdChuKTsKLSAgICAgICAgaWYgKGN1cnJlbnQuZGF0
YVNpemUgPj0gc2l6ZSAmJiBjdXJyZW50LmlzRnJlZSgpKSB7Ci0gICAgICAgICAgICBjdXJyZW50
Lm1hcmtVc2VkKCk7Ci0gICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKLSAgICBuZXdNYXAuZGF0YVNpemUgPSBzaXpl
OwotICAgIG5ld01hcC5maWxlID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFEaXI6OnRlbXBQYXRoKCkg
KyAiL1dlYktpdDJVcGRhdGVDaHVuayIpOwotICAgIG5ld01hcC5maWxlLT5vcGVuKFFJT0Rldmlj
ZTo6UmVhZFdyaXRlKTsKLSAgICBuZXdNYXAuZmlsZS0+cmVzaXplKG5ld01hcC5tYXBTaXplKCkp
OwotICAgIG5ld01hcC5tYXBwZWRCeXRlcyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1h
cFNpemUoKSk7Ci0gICAgbmV3TWFwLmZpbGUtPmNsb3NlKCk7Ci0gICAgbmV3TWFwLm1hcmtVc2Vk
KCk7Ci0gICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsKLX0KLQotc3RhdGljIE1hcHBl
ZE1lbW9yeSogbWFwRmlsZShRU3RyaW5nIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBN
YXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24pIHsKLSAgICAgICAg
TWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7Ci0gICAgICAgIGlmIChjdXJyZW50
LmZpbGUtPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghY3Vy
cmVudC5pc0ZyZWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKLSAgICBuZXdNYXAuZmlsZSA9IG5ldyBR
RmlsZShmaWxlTmFtZSk7Ci0gICAgaWYgKCFuZXdNYXAuZmlsZS0+b3BlbihRSU9EZXZpY2U6OlJl
YWRXcml0ZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIG5ld01hcC5kYXRhU2l6ZSA9IHNpemU7
Ci0gICAgbmV3TWFwLm1hcHBlZEJ5dGVzID0gbmV3TWFwLmZpbGUtPm1hcCgwLCBuZXdNYXAubWFw
U2l6ZSgpKTsKLSAgICBBU1NFUlQoIW5ld01hcC5pc0ZyZWUoKSk7Ci0gICAgbmV3TWFwLmZpbGUt
PmNsb3NlKCk7Ci0gICAgbmV3TWFwLmZpbGUtPnJlbW92ZSgpOyAvLyBUaGUgbWFwIHN0YXlzIGFs
aXZlIGV2ZW4gd2hlbiB0aGUgZmlsZSBpcyB1bmxpbmtlZC4KLSAgICByZXR1cm4gJnBvb2wtPmFw
cGVuZChuZXdNYXApOwotfQorTWFwcGVkTWVtb3J5KiBtYXBNZW1vcnkoc2l6ZV90IHNpemUsIFFJ
T0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUgPSBRSU9EZXZpY2U6OlJlYWRXcml0ZSk7CitNYXBw
ZWRNZW1vcnkqIG1hcEZpbGUoUVN0cmluZyBmaWxlLCBzaXplX3Qgc2l6ZSwgUUlPRGV2aWNlOjpP
cGVuTW9kZSBvcGVuTW9kZSA9IFFJT0RldmljZTo6UmVhZFdyaXRlKTsKIAogVXBkYXRlQ2h1bms6
OlVwZGF0ZUNodW5rKCkKICAgICA6IG1fbWFwcGVkTWVtb3J5KDApCmRpZmYgLS1naXQgYS9XZWJL
aXQyL1dlYktpdDIucHJvIGIvV2ViS2l0Mi9XZWJLaXQyLnBybwppbmRleCA3NGM3MWZkLi5kZjky
MWU3IDEwMDY0NAotLS0gYS9XZWJLaXQyL1dlYktpdDIucHJvCisrKyBiL1dlYktpdDIvV2ViS2l0
Mi5wcm8KQEAgLTEwNiw2ICsxMDYsNyBAQCBJTkNMVURFUEFUSCA9IFwKICAgICAkJFBXRCBcCiAg
ICAgUGxhdGZvcm0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMgXAorICAgIFBsYXRmb3JtL3F0IFwK
ICAgICBTaGFyZWQgXAogICAgIFNoYXJlZC9BUEkvYyBcCiAgICAgU2hhcmVkL0NvcmVJUENTdXBw
b3J0IFwKQEAgLTE3NCw2ICsxNzUsNyBAQCBIRUFERVJTICs9IFwKICAgICBQbGF0Zm9ybS9Mb2dn
aW5nLmggXAogICAgIFBsYXRmb3JtL01vZHVsZS5oIFwKICAgICBQbGF0Zm9ybS9QbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyLmggXAorICAgIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oIFwKICAg
ICBQbGF0Zm9ybS9SdW5Mb29wLmggXAogICAgIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKICAg
ICBQbGF0Zm9ybS9Xb3JrSXRlbS5oIFwKQEAgLTIwMiw3ICsyMDQsNiBAQCBIRUFERVJTICs9IFwK
ICAgICBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIFwKICAgICBTaGFyZWQvTm90SW1w
bGVtZW50ZWQuaCBcCiAgICAgU2hhcmVkL1N0cmluZ1BhaXJWZWN0b3IuaCBcCi0gICAgU2hhcmVk
L3F0L01hcHBlZE1lbW9yeS5oIFwKICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUlu
Zm8uaCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggXAogICAgIFNoYXJlZC9xdC9XZWJF
dmVudEZhY3RvcnlRdC5oIFwKQEAgLTMyNyw2ICszMjgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBQ
bGF0Zm9ybS9Nb2R1bGUuY3BwIFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmNwcCBcCiAgICAgUGxh
dGZvcm0vV29ya1F1ZXVlLmNwcCBcCisgICAgUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5j
cHAgXAogICAgIFBsYXRmb3JtL3F0L01vZHVsZVF0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvUnVu
TG9vcFF0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwIFwKQEAgLTM0
Niw3ICszNDgsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBTaGFyZWQvTXV0YWJsZUFycmF5LmNwcCBc
CiAgICAgU2hhcmVkL011dGFibGVEaWN0aW9uYXJ5LmNwcCBcCiAgICAgU2hhcmVkL3F0L0JhY2tp
bmdTdG9yZVF0LmNwcCBcCi0gICAgU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIFwKICAg
ICBTaGFyZWQvcXQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0
L1VwZGF0ZUNodW5rLmNwcCBcCiAgICAgU2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0
LmNwcCBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70869</attachid>
            <date>2010-10-15 08:37:35 -0700</date>
            <delta_ts>2010-10-15 08:51:07 -0700</delta_ts>
            <desc>svn patch</desc>
            <filename>shared.patch</filename>
            <type>text/plain</type>
            <size>17144</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCShyZXZpc2lvbiA2OTg1
MSkKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsNTggKzI2LDE4
OCBAQAogCiAjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgorI2luY2x1ZGUgIk1hcHBlZE1lbW9yeS5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUlPRGV2aWNlPgor
I2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRVGVtcG9yYXJ5RmlsZT4KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKK01hcHBlZE1lbW9yeSogbWFwTWVtb3J5KHNpemVfdCBzaXplLCBRSU9EZXZpY2U6
Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpSZWFkV3JpdGUpCit7CisgICAgTWFwcGVk
TWVtb3J5UG9vbCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsgKytuKSB7CisgICAgICAgIE1hcHBl
ZE1lbW9yeSYgY3VycmVudCA9IHBvb2wtPmF0KG4pOworICAgICAgICBpZiAoY3VycmVudC5kYXRh
U2l6ZSA+PSBzaXplICYmIGN1cnJlbnQuaXNGcmVlKCkpIHsKKyAgICAgICAgICAgIGN1cnJlbnQu
bWFya1VzZWQoKTsKKyAgICAgICAgICAgIHJldHVybiAmY3VycmVudDsKKyAgICAgICAgfQorICAg
IH0KKyAgICBNYXBwZWRNZW1vcnkgbmV3TWFwOworICAgIG5ld01hcC5kYXRhU2l6ZSA9IHNpemU7
CisgICAgbmV3TWFwLmZpbGUgPSBuZXcgUVRlbXBvcmFyeUZpbGUoUURpcjo6dGVtcFBhdGgoKSAr
ICIvV2ViS2l0MlVwZGF0ZUNodW5rIik7CisgICAgbmV3TWFwLmZpbGUtPm9wZW4ob3Blbk1vZGUp
OworICAgIG5ld01hcC5maWxlLT5yZXNpemUobmV3TWFwLm1hcFNpemUoKSk7CisgICAgbmV3TWFw
Lm1hcHBlZEJ5dGVzID0gbmV3TWFwLmZpbGUtPm1hcCgwLCBuZXdNYXAubWFwU2l6ZSgpKTsKKyAg
ICBuZXdNYXAuZmlsZS0+Y2xvc2UoKTsKKyAgICBuZXdNYXAubWFya1VzZWQoKTsKKyAgICByZXR1
cm4gJnBvb2wtPmFwcGVuZChuZXdNYXApOworfQorCitNYXBwZWRNZW1vcnkqIG1hcEZpbGUoUVN0
cmluZyBmaWxlTmFtZSwgc2l6ZV90IHNpemUsIFFJT0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUg
PSBRSU9EZXZpY2U6OlJlYWRXcml0ZSkKK3sKKyAgICBNYXBwZWRNZW1vcnlQb29sKiBwb29sID0g
TWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBu
IDwgcG9vbC0+c2l6ZSgpOyArK24pIHsKKyAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0g
cG9vbC0+YXQobik7CisgICAgICAgIGlmIChjdXJyZW50LmZpbGUtPmZpbGVOYW1lKCkgPT0gZmls
ZU5hbWUpIHsKKyAgICAgICAgICAgIEFTU0VSVCghY3VycmVudC5pc0ZyZWUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gJmN1cnJlbnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgTWFwcGVkTWVtb3J5
IG5ld01hcDsKKyAgICBuZXdNYXAuZmlsZSA9IG5ldyBRRmlsZShmaWxlTmFtZSk7CisgICAgaWYg
KCFuZXdNYXAuZmlsZS0+b3BlbihvcGVuTW9kZSkpCisgICAgICAgIHJldHVybiAwOworICAgIG5l
d01hcC5kYXRhU2l6ZSA9IHNpemU7CisgICAgbmV3TWFwLm1hcHBlZEJ5dGVzID0gbmV3TWFwLmZp
bGUtPm1hcCgwLCBuZXdNYXAubWFwU2l6ZSgpKTsKKyAgICBBU1NFUlQoIW5ld01hcC5pc0ZyZWUo
KSk7CisgICAgbmV3TWFwLmZpbGUtPmNsb3NlKCk7CisgICAgbmV3TWFwLmZpbGUtPnJlbW92ZSgp
OyAvLyBUaGUgbWFwIHN0YXlzIGFsaXZlIGV2ZW4gd2hlbiB0aGUgZmlsZSBpcyB1bmxpbmtlZC4K
KyAgICByZXR1cm4gJnBvb2wtPmFwcGVuZChuZXdNYXApOworfQorCiBTaGFyZWRNZW1vcnk6Okhh
bmRsZTo6SGFuZGxlKCkKKyAgICA6IG1fZmlsZU5hbWUoKQorICAgICwgbV9zaXplKDApCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUo
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK2Jvb2wgU2hhcmVkTWVtb3J5OjpIYW5k
bGU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZU5hbWUuaXNOdWxsKCk7Cit9
CisKIHZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBlbmNv
ZGVyLT5lbmNvZGVVSW50NjQobV9zaXplKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9maWxlTmFt
ZSk7CisgICAgbV9maWxlTmFtZSA9IFN0cmluZygpOwogfQogCiBib29sIFNoYXJlZE1lbW9yeTo6
SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUm
IGhhbmRsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworICAgIEFTU0VSVChoYW5kbGUubV9maWxlTmFtZS5p
c0VtcHR5KCkpOworCisgICAgdWludDY0X3Qgc2l6ZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29k
ZVVJbnQ2NChzaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGZpbGVO
YW1lOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZpbGVOYW1lKSkKKyAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBoYW5kbGUubV9zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUubV9maWxlTmFt
ZSA9IGZpbGVOYW1lOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFBhc3NSZWZQdHI8U2hhcmVk
TWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplX3Qgc2l6ZSkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIE1hcHBlZE1lbW9yeSogbW0gPSBtYXBNZW1v
cnkoc2l6ZSwgUUlPRGV2aWNlOjpSZWFkV3JpdGUpOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9y
eT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRN
ZW1vcnktPm1fc2l6ZSA9IHNpemU7CisgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihtbS0+ZGF0YSgpKTsKKworICAgIHJldHVybiBzaGFyZWRNZW1vcnku
cmVsZWFzZSgpOwogfQogCitzdGF0aWMgaW5saW5lIFFJT0RldmljZTo6T3Blbk1vZGUgbWFwUHJv
dGVjdGlvbihTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3sKKyAgICBzd2l0
Y2ggKHByb3RlY3Rpb24pIHsKKyAgICBjYXNlIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHk6CisgICAg
ICAgIHJldHVybiBRSU9EZXZpY2U6OlJlYWRPbmx5OworICAgIGNhc2UgU2hhcmVkTWVtb3J5OjpS
ZWFkV3JpdGU6CisgICAgICAgIHJldHVybiBRSU9EZXZpY2U6OlJlYWRXcml0ZTsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUUlPRGV2aWNlOjpOb3RPcGVu
OworfQorCisKIFBhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShj
b25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7ICAgIAorICAgIGlmIChoYW5kbGUuaXNOdWxsKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUUlPRGV2aWNlOjpPcGVuTW9kZSBvcGVuTW9kZSA9
IG1hcFByb3RlY3Rpb24ocHJvdGVjdGlvbik7CisKKyAgICBNYXBwZWRNZW1vcnkqIG1tID0gbWFw
RmlsZShRU3RyaW5nKGhhbmRsZS5tX2ZpbGVOYW1lKSwgaGFuZGxlLm1fc2l6ZSwgb3Blbk1vZGUp
OworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5ldyBT
aGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IGhhbmRsZS5tX3NpemU7
CisgICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihtbS0+
ZGF0YSgpKTsKKworICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOwogfQogCitzdGF0
aWMgTWFwcGVkTWVtb3J5KiBzZWFyY2hGb3JNYXBwZWRNZW1vcnkodWNoYXIqIHApCit7CisgICAg
TWFwcGVkTWVtb3J5UG9vbCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24pIHsKKyAgICAg
ICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7CisgICAgICAgIGlmIChjdXJy
ZW50LmRhdGEoKSA9PSBwKQorICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFw
cGVkTWVtb3J5Kj4oJmN1cnJlbnQpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogU2hhcmVk
TWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIE1h
cHBlZE1lbW9yeSogbWFwcGVkTWVtb3J5ID0gc2VhcmNoRm9yTWFwcGVkTWVtb3J5KHJlaW50ZXJw
cmV0X2Nhc3Q8dWNoYXIqPihtX2RhdGEpKTsKKyAgICBpZiAobWFwcGVkTWVtb3J5KSB7IAorICAg
ICAgICBtYXBwZWRNZW1vcnktPm1hcmtGcmVlKCk7CisgICAgICAgIGRlbGV0ZSBtYXBwZWRNZW1v
cnk7CisgICAgfQogfQotICAgIAorCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhh
bmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGhhbmRsZS5tX2ZpbGVOYW1lLmlz
TnVsbCgpKTsKKyAgICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworCisgICAgTWFwcGVkTWVtb3J5
KiBtbSA9IHNlYXJjaEZvck1hcHBlZE1lbW9yeShyZWludGVycHJldF9jYXN0PHVjaGFyKj4obV9k
YXRhKSk7ICAKKworICAgIGlmICghbW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGhh
bmRsZS5tX2ZpbGVOYW1lID0gbW0tPmZpbGUtPmZpbGVOYW1lKCk7CisgICAgaGFuZGxlLm1fc2l6
ZSA9IG1fc2l6ZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiB1bnNpZ25lZCBTaGFyZWRNZW1v
cnk6OnN5c3RlbVBhZ2VTaXplKCkKIHsKICAgICBzdGF0aWMgdW5zaWduZWQgcGFnZVNpemUgPSAw
OwogCisgICAgaWYgKCFwYWdlU2l6ZSkKKyAgICAgICAgcGFnZVNpemUgPSBnZXRwYWdlc2l6ZSgp
OworCiAgICAgcmV0dXJuIHBhZ2VTaXplOwogfQogCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL1No
YXJlZE1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5
LmgJKHJldmlzaW9uIDY5ODUxKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKKyNpZiBQTEFURk9STShRVCkKKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgQ29yZUlQ
QyB7CiAgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwogICAgIGNsYXNzIEFyZ3VtZW50RW5jb2Rl
cjsKQEAgLTYwLDYgKzY0LDggQEAKICAgICAgICAgbXV0YWJsZSBtYWNoX3BvcnRfdCBtX3BvcnQ7
CiAjZWxpZiBQTEFURk9STShXSU4pCiAgICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOwor
I2VsaWYgUExBVEZPUk0oUVQpCisgICAgICAgIG11dGFibGUgU3RyaW5nIG1fZmlsZU5hbWU7CiAj
ZW5kaWYKICAgICAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB9OwpJbmRleDogV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5ODUyKQor
KysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAx
MC0xMC0xNSAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEltcGxlbWVudCBTaGFy
ZWRNZW1vcnkgZm9yIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ3MzQ1CisKKyAgICAgICAgSW1wbGVtZW50IHVuaW1wbGVtZW50ZWQgZnVu
Y3Rpb25zIGluIFNoYXJlZE1lbW9yeVF0LmNwcC4KKyAgICAgICAgTW92ZSBNYXBwZWRNZW1vcnku
aCBhbmQgTWFwcGVkTWVtb3J5UG9vbC5jcHAgZnJvbSBTaGFyZWQvcXQgdG8gUGxhdGZvcm0vcXQs
CisgICAgICAgIGNoYW5nZSBXZWJLaXQyLnBybydzIGFmZmVjdGVkIGxpbmVzLgorCisgICAgICAg
ICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6CisgICAgICAgICogUGxhdGZvcm0vcXQvTWFwcGVk
TWVtb3J5Lmg6IENvcGllZCBmcm9tIFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeS5oLgor
ICAgICAgICAqIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwOiBDb3BpZWQgZnJvbSBX
ZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcC4KKyAgICAgICAgKiBQbGF0Zm9y
bS9xdC9TaGFyZWRNZW1vcnlRdC5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1hcE1lbW9yeSk6Cisg
ICAgICAgIChXZWJLaXQ6Om1hcEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6
On5IYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6aXNOdWxs
KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6CisgICAg
ICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
S2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6Om1hcFByb3RlY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpzZWFyY2hGb3JNYXBwZWRNZW1vcnkpOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6c3lzdGVtUGFnZVNpemUpOgorICAgICAgICAqIFNoYXJlZC9xdC9NYXBwZWRNZW1vcnkuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTaGFyZWQvcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcDoKKyAgICAgICAgKiBXZWJL
aXQyLnBybzoKKwogMjAxMC0xMC0xNCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViS2l0Mi9X
ZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIucHJvCShyZXZpc2lvbiA2
OTg1MSkKKysrIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsx
MDYsNyBAQAogICAgICQkUFdEIFwKICAgICBQbGF0Zm9ybSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQ
QyBcCisgICAgUGxhdGZvcm0vcXQgXAogICAgIFNoYXJlZCBcCiAgICAgU2hhcmVkL0FQSS9jIFwK
ICAgICBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQgXApAQCAtMTc0LDYgKzE3NSw3IEBACiAgICAgUGxh
dGZvcm0vTG9nZ2luZy5oIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuaCBcCiAgICAgUGxhdGZvcm0v
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIFwKKyAgICBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1v
cnkuaCBcCiAgICAgUGxhdGZvcm0vUnVuTG9vcC5oIFwKICAgICBQbGF0Zm9ybS9TaGFyZWRNZW1v
cnkuaCBcCiAgICAgUGxhdGZvcm0vV29ya0l0ZW0uaCBcCkBAIC0yMDIsNyArMjA0LDYgQEAKICAg
ICBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIFwKICAgICBTaGFyZWQvTm90SW1wbGVt
ZW50ZWQuaCBcCiAgICAgU2hhcmVkL1N0cmluZ1BhaXJWZWN0b3IuaCBcCi0gICAgU2hhcmVkL3F0
L01hcHBlZE1lbW9yeS5oIFwKICAgICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8u
aCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVu
dEZhY3RvcnlRdC5oIFwKQEAgLTMyNyw2ICszMjgsNyBAQAogICAgIFBsYXRmb3JtL01vZHVsZS5j
cHAgXAogICAgIFBsYXRmb3JtL1J1bkxvb3AuY3BwIFwKICAgICBQbGF0Zm9ybS9Xb3JrUXVldWUu
Y3BwIFwKKyAgICBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcCBcCiAgICAgUGxhdGZv
cm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQuY3BwIFwKICAg
ICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAgXApAQCAtMzQ2LDcgKzM0OCw2IEBACiAg
ICAgU2hhcmVkL011dGFibGVBcnJheS5jcHAgXAogICAgIFNoYXJlZC9NdXRhYmxlRGljdGlvbmFy
eS5jcHAgXAogICAgIFNoYXJlZC9xdC9CYWNraW5nU3RvcmVRdC5jcHAgXAotICAgIFNoYXJlZC9x
dC9NYXBwZWRNZW1vcnlQb29sLmNwcCBcCiAgICAgU2hhcmVkL3F0L05hdGl2ZVdlYktleWJvYXJk
RXZlbnRRdC5jcHAgXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAgXAogICAgIFNoYXJl
ZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNRdC5jcHAgXApJbmRleDogV2ViS2l0Mi9TaGFyZWQv
cXQvTWFwcGVkTWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvcXQvTWFwcGVk
TWVtb3J5LmgJKHJldmlzaW9uIDY5ODUxKQorKysgV2ViS2l0Mi9TaGFyZWQvcXQvTWFwcGVkTWVt
b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBNYXBwZWRNZW1vcnlfaAotI2RlZmluZSBNYXBwZWRNZW1vcnlfaAotCi0jaW5jbHVkZSA8UUNv
cmVBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRmlsZT4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IE1hcHBlZE1lbW9yeSB7Ci0gICAgUUZpbGUq
IGZpbGU7Ci0gICAgc3RydWN0IERhdGEgewotICAgICAgICB1aW50MzJfdCBpc0ZyZWU7IC8vIGtl
ZXAgYnl0ZXMgYWxpZ25lZAotICAgICAgICB1Y2hhciBieXRlczsKLSAgICB9OwotICAgIHVuaW9u
IHsKLSAgICAgICAgdWNoYXIqIG1hcHBlZEJ5dGVzOwotICAgICAgICBEYXRhKiBkYXRhUHRyOwot
ICAgIH07Ci0gICAgc2l6ZV90IGRhdGFTaXplOwotCi0gICAgc2l6ZV90IG1hcFNpemUoKSBjb25z
dCB7IHJldHVybiBkYXRhU2l6ZSArIHNpemVvZihEYXRhKTsgfQotICAgIHZvaWQgbWFya1VzZWQo
KSB7IGRhdGFQdHItPmlzRnJlZSA9IGZhbHNlOyB9Ci0gICAgdm9pZCBtYXJrRnJlZSgpIHsgZGF0
YVB0ci0+aXNGcmVlID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNGcmVlKCkgY29uc3QgeyByZXR1cm4g
ZGF0YVB0ci0+aXNGcmVlOyB9Ci0gICAgdWNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiAmZGF0
YVB0ci0+Ynl0ZXM7IH0KLX07Ci0KLWNsYXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBwdWJsaWMgUU9i
amVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVtb3J5UG9v
bCogaW5zdGFuY2UoKTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAgIE1hcHBlZE1lbW9y
eSYgYXQoc2l6ZV90IGkpOwotICAgIE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0IE1hcHBlZE1l
bW9yeSYpOwotCi1wcml2YXRlOgotICAgIE1hcHBlZE1lbW9yeVBvb2woKTsKLSAgICBRX1NMT1Qg
dm9pZCBjbGVhblVwKCk7Ci0KLSAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7Ci19Owot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gKSW5kZXg6IFdl
YktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCShyZXZpc2lvbiA2OTg1MSkKKysrIFdl
YktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIk1hcHBlZE1lbW9y
eS5oIgotCi0jaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci1NYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKCkKLXsKLSAgICBjb25uZWN0KFFD
b3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChj
bGVhblVwKCkpKTsKLX0KLQotTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9vbDo6aW5z
dGFuY2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9vbCwgc2lu
Z2xldG9uLCAoKSk7Ci0gICAgcmV0dXJuICZzaW5nbGV0b247Ci19Ci0KLXNpemVfdCBNYXBwZWRN
ZW1vcnlQb29sOjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wb29sLnNpemUoKTsKLX0K
LQotTWFwcGVkTWVtb3J5JiBNYXBwZWRNZW1vcnlQb29sOjphdChzaXplX3QgaSkKLXsKLSAgICBy
ZXR1cm4gbV9wb29sLmF0KGkpOwotfQotCi1NYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6
OmFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmIG5ld01hcCkKLXsKLSAgICBtX3Bvb2wuYXBwZW5k
KG5ld01hcCk7Ci0gICAgcmV0dXJuIG1fcG9vbC5sYXN0KCk7Ci19Ci0KLXZvaWQgTWFwcGVkTWVt
b3J5UG9vbDo6Y2xlYW5VcCgpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wuc2l6ZSgpOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgTWFwcGVk
TWVtb3J5JiBjaHVuayA9IG1fcG9vbC5hdChpKTsKLSAgICAgICAgaWYgKCFjaHVuay5pc0ZyZWUo
KSkKLSAgICAgICAgICAgIGNodW5rLmZpbGUtPnVubWFwKGNodW5rLm1hcHBlZEJ5dGVzKTsKLSAg
ICAgICAgY2h1bmsuZmlsZS0+cmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIHRoaXM7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRl
Q2h1bmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNw
cAkocmV2aXNpb24gNjk4NTEpCisrKyBXZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMCBAQAogCiAjaW5jbHVkZSAiQXJndW1lbnRE
ZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCi0jaW5jbHVkZSAiQXR0YWNo
bWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDxRRGlyPgorI2luY2x1
ZGUgPFFJT0RldmljZT4KICNpbmNsdWRlIDxRSW1hZ2U+Ci0jaW5jbHVkZSA8UVRlbXBvcmFyeUZp
bGU+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIApAQCAtNDMsNDkgKzQxLDkgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LXN0YXRpYyBNYXBwZWRNZW1vcnkqIG1hcE1lbW9yeShzaXplX3Qgc2l6ZSkKLXsKLSAgICBNYXBw
ZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2UoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24pIHsKLSAgICAgICAgTWFw
cGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7Ci0gICAgICAgIGlmIChjdXJyZW50LmRh
dGFTaXplID49IHNpemUgJiYgY3VycmVudC5pc0ZyZWUoKSkgewotICAgICAgICAgICAgY3VycmVu
dC5tYXJrVXNlZCgpOwotICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OwotICAgICAgICB9Ci0g
ICAgfQotICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7Ci0gICAgbmV3TWFwLmRhdGFTaXplID0gc2l6
ZTsKLSAgICBuZXdNYXAuZmlsZSA9IG5ldyBRVGVtcG9yYXJ5RmlsZShRRGlyOjp0ZW1wUGF0aCgp
ICsgIi9XZWJLaXQyVXBkYXRlQ2h1bmsiKTsKLSAgICBuZXdNYXAuZmlsZS0+b3BlbihRSU9EZXZp
Y2U6OlJlYWRXcml0ZSk7Ci0gICAgbmV3TWFwLmZpbGUtPnJlc2l6ZShuZXdNYXAubWFwU2l6ZSgp
KTsKLSAgICBuZXdNYXAubWFwcGVkQnl0ZXMgPSBuZXdNYXAuZmlsZS0+bWFwKDAsIG5ld01hcC5t
YXBTaXplKCkpOwotICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOwotICAgIG5ld01hcC5tYXJrVXNl
ZCgpOwotICAgIHJldHVybiAmcG9vbC0+YXBwZW5kKG5ld01hcCk7Ci19CitNYXBwZWRNZW1vcnkq
IG1hcE1lbW9yeShzaXplX3Qgc2l6ZSwgUUlPRGV2aWNlOjpPcGVuTW9kZSBvcGVuTW9kZSA9IFFJ
T0RldmljZTo6UmVhZFdyaXRlKTsKK01hcHBlZE1lbW9yeSogbWFwRmlsZShRU3RyaW5nIGZpbGUs
IHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpS
ZWFkV3JpdGUpOwogCi1zdGF0aWMgTWFwcGVkTWVtb3J5KiBtYXBGaWxlKFFTdHJpbmcgZmlsZU5h
bWUsIHNpemVfdCBzaXplKQotewotICAgIE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRN
ZW1vcnlQb29sOjppbnN0YW5jZSgpOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwb29s
LT5zaXplKCk7ICsrbikgewotICAgICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBwb29sLT5h
dChuKTsKLSAgICAgICAgaWYgKGN1cnJlbnQuZmlsZS0+ZmlsZU5hbWUoKSA9PSBmaWxlTmFtZSkg
ewotICAgICAgICAgICAgQVNTRVJUKCFjdXJyZW50LmlzRnJlZSgpKTsKLSAgICAgICAgICAgIHJl
dHVybiAmY3VycmVudDsKLSAgICAgICAgfQotICAgIH0KLSAgICBNYXBwZWRNZW1vcnkgbmV3TWFw
OwotICAgIG5ld01hcC5maWxlID0gbmV3IFFGaWxlKGZpbGVOYW1lKTsKLSAgICBpZiAoIW5ld01h
cC5maWxlLT5vcGVuKFFJT0RldmljZTo6UmVhZFdyaXRlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgbmV3TWFwLmRhdGFTaXplID0gc2l6ZTsKLSAgICBuZXdNYXAubWFwcGVkQnl0ZXMgPSBuZXdN
YXAuZmlsZS0+bWFwKDAsIG5ld01hcC5tYXBTaXplKCkpOwotICAgIEFTU0VSVCghbmV3TWFwLmlz
RnJlZSgpKTsKLSAgICBuZXdNYXAuZmlsZS0+Y2xvc2UoKTsKLSAgICBuZXdNYXAuZmlsZS0+cmVt
b3ZlKCk7IC8vIFRoZSBtYXAgc3RheXMgYWxpdmUgZXZlbiB3aGVuIHRoZSBmaWxlIGlzIHVubGlu
a2VkLgotICAgIHJldHVybiAmcG9vbC0+YXBwZW5kKG5ld01hcCk7Ci19Ci0KIFVwZGF0ZUNodW5r
OjpVcGRhdGVDaHVuaygpCiAgICAgOiBtX21hcHBlZE1lbW9yeSgwKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70871</attachid>
            <date>2010-10-15 08:51:07 -0700</date>
            <delta_ts>2010-10-25 02:30:42 -0700</delta_ts>
            <desc>svn patch</desc>
            <filename>shared1.patch</filename>
            <type>text/plain</type>
            <size>22697</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTg1NCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMTAtMTUgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1F0XSBJbXBsZW1lbnQgU2hhcmVkTWVtb3J5IGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM0NQorCisgICAgICAgIEltcGxlbWVu
dCB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucyBpbiBTaGFyZWRNZW1vcnlRdC5jcHAuCisgICAgICAg
IE1vdmUgTWFwcGVkTWVtb3J5LmggYW5kIE1hcHBlZE1lbW9yeVBvb2wuY3BwIGZyb20gU2hhcmVk
L3F0IHRvIFBsYXRmb3JtL3F0LAorICAgICAgICBjaGFuZ2UgV2ViS2l0Mi5wcm8ncyBhZmZlY3Rl
ZCBsaW5lcy4KKworICAgICAgICAqIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oOgorICAgICAgICAq
IFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oOiBDb3BpZWQgZnJvbSBXZWJLaXQyL1NoYXJlZC9x
dC9NYXBwZWRNZW1vcnkuaC4KKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29s
LmNwcDogQ29waWVkIGZyb20gV2ViS2l0Mi9TaGFyZWQvcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAu
CisgICAgICAgICogUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjptYXBNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjptYXBGaWxlKToKKyAgICAgICAgKFdl
YktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNo
YXJlZE1lbW9yeTo6SGFuZGxlOjp+SGFuZGxlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpIYW5kbGU6OmlzTnVsbCk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFu
ZGxlOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVj
b2RlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjptYXBQcm90ZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6c2VhcmNoRm9yTWFwcGVk
TWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KToK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUpOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKToKKyAgICAgICAgKiBTaGFyZWQv
cXQvTWFwcGVkTWVtb3J5Lmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVkL3F0L01hcHBlZE1l
bW9yeVBvb2wuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5j
cHA6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisKIDIwMTAtMTAtMTQgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5p
Zy4KSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJL
aXQyLnBybwkocmV2aXNpb24gNjk4NTQpCisrKyBXZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgSU5DTFVERVBBVEggPSBcCiAgICAgJCRQV0QgXAog
ICAgIFBsYXRmb3JtIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDIFwKKyAgICBQbGF0Zm9ybS9xdCBc
CiAgICAgU2hhcmVkIFwKICAgICBTaGFyZWQvQVBJL2MgXAogICAgIFNoYXJlZC9Db3JlSVBDU3Vw
cG9ydCBcCkBAIC0xNzQsNiArMTc1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgUGxhdGZvcm0vTG9n
Z2luZy5oIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuaCBcCiAgICAgUGxhdGZvcm0vUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oIFwKKyAgICBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnkuaCBcCiAg
ICAgUGxhdGZvcm0vUnVuTG9vcC5oIFwKICAgICBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaCBcCiAg
ICAgUGxhdGZvcm0vV29ya0l0ZW0uaCBcCkBAIC0yMDIsNyArMjA0LDYgQEAgSEVBREVSUyArPSBc
CiAgICAgU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCBcCiAgICAgU2hhcmVkL05vdElt
cGxlbWVudGVkLmggXAogICAgIFNoYXJlZC9TdHJpbmdQYWlyVmVjdG9yLmggXAotICAgIFNoYXJl
ZC9xdC9NYXBwZWRNZW1vcnkuaCBcCiAgICAgU2hhcmVkL3F0L1BsYXRmb3JtQ2VydGlmaWNhdGVJ
bmZvLmggXAogICAgIFNoYXJlZC9xdC9VcGRhdGVDaHVuay5oIFwKICAgICBTaGFyZWQvcXQvV2Vi
RXZlbnRGYWN0b3J5UXQuaCBcCkBAIC0zMjcsNiArMzI4LDcgQEAgU09VUkNFUyArPSBcCiAgICAg
UGxhdGZvcm0vTW9kdWxlLmNwcCBcCiAgICAgUGxhdGZvcm0vUnVuTG9vcC5jcHAgXAogICAgIFBs
YXRmb3JtL1dvcmtRdWV1ZS5jcHAgXAorICAgIFBsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wu
Y3BwIFwKICAgICBQbGF0Zm9ybS9xdC9Nb2R1bGVRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1J1
bkxvb3BRdC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcCBcCkBAIC0z
NDYsNyArMzQ4LDYgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVkL011dGFibGVBcnJheS5jcHAg
XAogICAgIFNoYXJlZC9NdXRhYmxlRGljdGlvbmFyeS5jcHAgXAogICAgIFNoYXJlZC9xdC9CYWNr
aW5nU3RvcmVRdC5jcHAgXAotICAgIFNoYXJlZC9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcCBcCiAg
ICAgU2hhcmVkL3F0L05hdGl2ZVdlYktleWJvYXJkRXZlbnRRdC5jcHAgXAogICAgIFNoYXJlZC9x
dC9VcGRhdGVDaHVuay5jcHAgXAogICAgIFNoYXJlZC9xdC9XZWJDb3JlQXJndW1lbnRDb2RlcnNR
dC5jcHAgXApJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCShyZXZpc2lvbiA2OTg1NCkKKysr
IFdlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDEwIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIENvcmVJUEMgewogICAgIGNsYXNzIEFyZ3VtZW50
RGVjb2RlcjsKICAgICBjbGFzcyBBcmd1bWVudEVuY29kZXI7CkBAIC02MCw2ICs2NCw4IEBAIHB1
YmxpYzoKICAgICAgICAgbXV0YWJsZSBtYWNoX3BvcnRfdCBtX3BvcnQ7CiAjZWxpZiBQTEFURk9S
TShXSU4pCiAgICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOworI2VsaWYgUExBVEZPUk0o
UVQpCisgICAgICAgIG11dGFibGUgU3RyaW5nIG1fZmlsZU5hbWU7CiAjZW5kaWYKICAgICAgICAg
c2l6ZV90IG1fc2l6ZTsKICAgICB9OwpJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRN
ZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5o
CShyZXZpc2lvbiA2OTg1NCkJKGZyb20gV2ViS2l0Mi9TaGFyZWQvcXQvTWFwcGVkTWVtb3J5Lmg6
Njk4NTQpCisrKyBXZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEw
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWFwcGVkTWVtb3J5X2gK
KyNkZWZpbmUgTWFwcGVkTWVtb3J5X2gKKworI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+Cisj
aW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3N0cnVjdCBNYXBwZWRNZW1vcnkgeworICAgIFFGaWxlKiBmaWxlOworICAgIHN0cnVj
dCBEYXRhIHsKKyAgICAgICAgdWludDMyX3QgaXNGcmVlOyAvLyBrZWVwIGJ5dGVzIGFsaWduZWQK
KyAgICAgICAgdWNoYXIgYnl0ZXM7CisgICAgfTsKKyAgICB1bmlvbiB7CisgICAgICAgIHVjaGFy
KiBtYXBwZWRCeXRlczsKKyAgICAgICAgRGF0YSogZGF0YVB0cjsKKyAgICB9OworICAgIHNpemVf
dCBkYXRhU2l6ZTsKKworICAgIHNpemVfdCBtYXBTaXplKCkgY29uc3QgeyByZXR1cm4gZGF0YVNp
emUgKyBzaXplb2YoRGF0YSk7IH0KKyAgICB2b2lkIG1hcmtVc2VkKCkgeyBkYXRhUHRyLT5pc0Zy
ZWUgPSBmYWxzZTsgfQorICAgIHZvaWQgbWFya0ZyZWUoKSB7IGRhdGFQdHItPmlzRnJlZSA9IHRy
dWU7IH0KKyAgICBib29sIGlzRnJlZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFQdHItPmlzRnJlZTsg
fQorICAgIHVjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gJmRhdGFQdHItPmJ5dGVzOyB9Cit9
OworCitjbGFzcyBNYXBwZWRNZW1vcnlQb29sIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JK
RUNUCitwdWJsaWM6CisgICAgc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIGluc3RhbmNlKCk7Cisg
ICAgc2l6ZV90IHNpemUoKSBjb25zdDsKKyAgICBNYXBwZWRNZW1vcnkmIGF0KHNpemVfdCBpKTsK
KyAgICBNYXBwZWRNZW1vcnkmIGFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmKTsKKworcHJpdmF0
ZToKKyAgICBNYXBwZWRNZW1vcnlQb29sKCk7CisgICAgUV9TTE9UIHZvaWQgY2xlYW5VcCgpOwor
CisgICAgVmVjdG9yPE1hcHBlZE1lbW9yeT4gbV9wb29sOworfTsKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorI2VuZGlmIC8vIE1hcHBlZE1lbW9yeV9oCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL3F0
L01hcHBlZE1lbW9yeVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vcXQv
TWFwcGVkTWVtb3J5UG9vbC5jcHAJKHJldmlzaW9uIDY5ODU0KQkoZnJvbSBXZWJLaXQyL1NoYXJl
ZC9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcDo2OTg1NCkKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQv
TWFwcGVkTWVtb3J5UG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTWFwcGVkTWVtb3J5LmgiCisKKyNpbmNsdWRl
ICJTdGRMaWJFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK01hcHBlZE1lbW9yeVBv
b2w6Ok1hcHBlZE1lbW9yeVBvb2woKQoreworICAgIGNvbm5lY3QoUUNvcmVBcHBsaWNhdGlvbjo6
aW5zdGFuY2UoKSwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCBTTE9UKGNsZWFuVXAoKSkpOworfQor
CitNYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSgpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChNYXBwZWRNZW1vcnlQb29sLCBzaW5nbGV0b24sICgpKTsKKyAg
ICByZXR1cm4gJnNpbmdsZXRvbjsKK30KKworc2l6ZV90IE1hcHBlZE1lbW9yeVBvb2w6OnNpemUo
KSBjb25zdAoreworICAgIHJldHVybiBtX3Bvb2wuc2l6ZSgpOworfQorCitNYXBwZWRNZW1vcnkm
IE1hcHBlZE1lbW9yeVBvb2w6OmF0KHNpemVfdCBpKQoreworICAgIHJldHVybiBtX3Bvb2wuYXQo
aSk7Cit9CisKK01hcHBlZE1lbW9yeSYgTWFwcGVkTWVtb3J5UG9vbDo6YXBwZW5kKGNvbnN0IE1h
cHBlZE1lbW9yeSYgbmV3TWFwKQoreworICAgIG1fcG9vbC5hcHBlbmQobmV3TWFwKTsKKyAgICBy
ZXR1cm4gbV9wb29sLmxhc3QoKTsKK30KKwordm9pZCBNYXBwZWRNZW1vcnlQb29sOjpjbGVhblVw
KCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcG9vbC5zaXplKCk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBNYXBwZWRNZW1vcnkmIGNodW5rID0g
bV9wb29sLmF0KGkpOworICAgICAgICBpZiAoIWNodW5rLmlzRnJlZSgpKQorICAgICAgICAgICAg
Y2h1bmsuZmlsZS0+dW5tYXAoY2h1bmsubWFwcGVkQnl0ZXMpOworICAgICAgICBjaHVuay5maWxl
LT5yZW1vdmUoKTsKKyAgICB9CisKKyAgICBkZWxldGUgdGhpczsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAkocmV2
aXNpb24gNjk4NTQpCisrKyBXZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEwIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1
LDU4ICsyNiwxODggQEAKIAogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRl
ICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJNYXBwZWRNZW1vcnkuaCIKKyNpbmNsdWRl
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxRRGlyPgorI2luY2x1ZGUgPFFJ
T0RldmljZT4KKyNpbmNsdWRlIDxRSW1hZ2U+CisjaW5jbHVkZSA8UVRlbXBvcmFyeUZpbGU+Cisj
aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCitNYXBwZWRNZW1vcnkqIG1hcE1lbW9yeShzaXplX3Qgc2l6ZSwg
UUlPRGV2aWNlOjpPcGVuTW9kZSBvcGVuTW9kZSA9IFFJT0RldmljZTo6UmVhZFdyaXRlKQorewor
ICAgIE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSgp
OworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwb29sLT5zaXplKCk7ICsrbikgeworICAg
ICAgICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBwb29sLT5hdChuKTsKKyAgICAgICAgaWYgKGN1
cnJlbnQuZGF0YVNpemUgPj0gc2l6ZSAmJiBjdXJyZW50LmlzRnJlZSgpKSB7CisgICAgICAgICAg
ICBjdXJyZW50Lm1hcmtVc2VkKCk7CisgICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7CisgICAg
ICAgIH0KKyAgICB9CisgICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKKyAgICBuZXdNYXAuZGF0YVNp
emUgPSBzaXplOworICAgIG5ld01hcC5maWxlID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFEaXI6OnRl
bXBQYXRoKCkgKyAiL1dlYktpdDJVcGRhdGVDaHVuayIpOworICAgIG5ld01hcC5maWxlLT5vcGVu
KG9wZW5Nb2RlKTsKKyAgICBuZXdNYXAuZmlsZS0+cmVzaXplKG5ld01hcC5tYXBTaXplKCkpOwor
ICAgIG5ld01hcC5tYXBwZWRCeXRlcyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1hcFNp
emUoKSk7CisgICAgbmV3TWFwLmZpbGUtPmNsb3NlKCk7CisgICAgbmV3TWFwLm1hcmtVc2VkKCk7
CisgICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsKK30KKworTWFwcGVkTWVtb3J5KiBt
YXBGaWxlKFFTdHJpbmcgZmlsZU5hbWUsIHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5Nb2Rl
IG9wZW5Nb2RlID0gUUlPRGV2aWNlOjpSZWFkV3JpdGUpCit7CisgICAgTWFwcGVkTWVtb3J5UG9v
bCogcG9vbCA9IE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsgKytuKSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSYg
Y3VycmVudCA9IHBvb2wtPmF0KG4pOworICAgICAgICBpZiAoY3VycmVudC5maWxlLT5maWxlTmFt
ZSgpID09IGZpbGVOYW1lKSB7CisgICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQuaXNGcmVlKCkp
OworICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OworICAgICAgICB9CisgICAgfQorICAgIE1h
cHBlZE1lbW9yeSBuZXdNYXA7CisgICAgbmV3TWFwLmZpbGUgPSBuZXcgUUZpbGUoZmlsZU5hbWUp
OworICAgIGlmICghbmV3TWFwLmZpbGUtPm9wZW4ob3Blbk1vZGUpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBuZXdNYXAuZGF0YVNpemUgPSBzaXplOworICAgIG5ld01hcC5tYXBwZWRCeXRlcyA9
IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1hcFNpemUoKSk7CisgICAgQVNTRVJUKCFuZXdN
YXAuaXNGcmVlKCkpOworICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOworICAgIG5ld01hcC5maWxl
LT5yZW1vdmUoKTsgLy8gVGhlIG1hcCBzdGF5cyBhbGl2ZSBldmVuIHdoZW4gdGhlIGZpbGUgaXMg
dW5saW5rZWQuCisgICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsKK30KKwogU2hhcmVk
TWVtb3J5OjpIYW5kbGU6OkhhbmRsZSgpCisgICAgOiBtX2ZpbGVOYW1lKCkKKyAgICAsIG1fc2l6
ZSgwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIFNoYXJlZE1lbW9yeTo6SGFuZGxl
Ojp+SGFuZGxlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNoYXJlZE1l
bW9yeTo6SGFuZGxlOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZpbGVOYW1lLmlz
TnVsbCgpOwogfQogCiB2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6
QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDY0KG1fc2l6ZSk7CisgICAgZW5jb2Rlci0+ZW5jb2Rl
KG1fZmlsZU5hbWUpOworICAgIG1fZmlsZU5hbWUgPSBTdHJpbmcoKTsKIH0KIAogYm9vbCBTaGFy
ZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zaXplKTsKKyAgICBBU1NFUlQoaGFuZGxlLm1f
ZmlsZU5hbWUuaXNFbXB0eSgpKTsKKworICAgIHVpbnQ2NF90IHNpemU7CisgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGVVSW50NjQoc2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0
cmluZyBmaWxlTmFtZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShmaWxlTmFtZSkpCisgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaGFuZGxlLm1fc2l6ZSA9IHNpemU7CisgICAgaGFuZGxl
Lm1fZmlsZU5hbWUgPSBmaWxlTmFtZTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBQYXNzUmVm
UHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBNYXBwZWRNZW1vcnkqIG1t
ID0gbWFwTWVtb3J5KHNpemUsIFFJT0RldmljZTo6UmVhZFdyaXRlKTsKKworICAgIFJlZlB0cjxT
aGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7Cisg
ICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBzaXplOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obW0tPmRhdGEoKSk7CisKKyAgICByZXR1cm4gc2hh
cmVkTWVtb3J5LnJlbGVhc2UoKTsKK30KKworc3RhdGljIGlubGluZSBRSU9EZXZpY2U6Ok9wZW5N
b2RlIG1hcFByb3RlY3Rpb24oU2hhcmVkTWVtb3J5OjpQcm90ZWN0aW9uIHByb3RlY3Rpb24pCit7
CisgICAgc3dpdGNoIChwcm90ZWN0aW9uKSB7CisgICAgY2FzZSBTaGFyZWRNZW1vcnk6OlJlYWRP
bmx5OgorICAgICAgICByZXR1cm4gUUlPRGV2aWNlOjpSZWFkT25seTsKKyAgICBjYXNlIFNoYXJl
ZE1lbW9yeTo6UmVhZFdyaXRlOgorICAgICAgICByZXR1cm4gUUlPRGV2aWNlOjpSZWFkV3JpdGU7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFFJT0Rldmlj
ZTo6Tm90T3BlbjsKIH0KIAorCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOyAgICAKKyAgICBpZiAoaGFuZGxl
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFFJT0RldmljZTo6T3Blbk1vZGUg
b3Blbk1vZGUgPSBtYXBQcm90ZWN0aW9uKHByb3RlY3Rpb24pOworCisgICAgTWFwcGVkTWVtb3J5
KiBtbSA9IG1hcEZpbGUoUVN0cmluZyhoYW5kbGUubV9maWxlTmFtZSksIGhhbmRsZS5tX3NpemUs
IG9wZW5Nb2RlKTsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9w
dFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBoYW5k
bGUubV9zaXplOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4obW0tPmRhdGEoKSk7CisKKyAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsK
K30KKworc3RhdGljIE1hcHBlZE1lbW9yeSogc2VhcmNoRm9yTWFwcGVkTWVtb3J5KHVjaGFyKiBw
KQoreworICAgIE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1vcnlQb29sOjppbnN0
YW5jZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBvb2wtPnNpemUoKTsgKytu
KSB7CisgICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9IHBvb2wtPmF0KG4pOworICAgICAg
ICBpZiAoY3VycmVudC5kYXRhKCkgPT0gcCkKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PE1hcHBlZE1lbW9yeSo+KCZjdXJyZW50KTsKKyAgICB9CisgICAgcmV0dXJuIDA7CiB9
CiAKIFNoYXJlZE1lbW9yeTo6flNoYXJlZE1lbW9yeSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBNYXBwZWRNZW1vcnkqIG1hcHBlZE1lbW9yeSA9IHNlYXJjaEZvck1hcHBlZE1lbW9y
eShyZWludGVycHJldF9jYXN0PHVjaGFyKj4obV9kYXRhKSk7CisgICAgaWYgKG1hcHBlZE1lbW9y
eSkgeyAKKyAgICAgICAgbWFwcGVkTWVtb3J5LT5tYXJrRnJlZSgpOworICAgICAgICBkZWxldGUg
bWFwcGVkTWVtb3J5OworICAgIH0KIH0KLSAgICAKKwogYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0
ZUhhbmRsZShIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChoYW5kbGUubV9m
aWxlTmFtZS5pc051bGwoKSk7CisgICAgQVNTRVJUKCFoYW5kbGUubV9zaXplKTsKKworICAgIE1h
cHBlZE1lbW9yeSogbW0gPSBzZWFyY2hGb3JNYXBwZWRNZW1vcnkocmVpbnRlcnByZXRfY2FzdDx1
Y2hhcio+KG1fZGF0YSkpOyAgCisKKyAgICBpZiAoIW1tKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBoYW5kbGUubV9maWxlTmFtZSA9IG1tLT5maWxlLT5maWxlTmFtZSgpOworICAgIGhh
bmRsZS5tX3NpemUgPSBtX3NpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdW5zaWduZWQg
U2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIHBh
Z2VTaXplID0gMDsKIAorICAgIGlmICghcGFnZVNpemUpCisgICAgICAgIHBhZ2VTaXplID0gZ2V0
cGFnZXNpemUoKTsKKwogICAgIHJldHVybiBwYWdlU2l6ZTsKIH0KIApJbmRleDogV2ViS2l0Mi9T
aGFyZWQvcXQvTWFwcGVkTWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvcXQv
TWFwcGVkTWVtb3J5LmgJKHJldmlzaW9uIDY5ODU0KQorKysgV2ViS2l0Mi9TaGFyZWQvcXQvTWFw
cGVkTWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBNYXBwZWRNZW1vcnlfaAotI2RlZmluZSBNYXBwZWRNZW1vcnlfaAotCi0jaW5jbHVk
ZSA8UUNvcmVBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRmlsZT4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IE1hcHBlZE1lbW9yeSB7Ci0gICAg
UUZpbGUqIGZpbGU7Ci0gICAgc3RydWN0IERhdGEgewotICAgICAgICB1aW50MzJfdCBpc0ZyZWU7
IC8vIGtlZXAgYnl0ZXMgYWxpZ25lZAotICAgICAgICB1Y2hhciBieXRlczsKLSAgICB9OwotICAg
IHVuaW9uIHsKLSAgICAgICAgdWNoYXIqIG1hcHBlZEJ5dGVzOwotICAgICAgICBEYXRhKiBkYXRh
UHRyOwotICAgIH07Ci0gICAgc2l6ZV90IGRhdGFTaXplOwotCi0gICAgc2l6ZV90IG1hcFNpemUo
KSBjb25zdCB7IHJldHVybiBkYXRhU2l6ZSArIHNpemVvZihEYXRhKTsgfQotICAgIHZvaWQgbWFy
a1VzZWQoKSB7IGRhdGFQdHItPmlzRnJlZSA9IGZhbHNlOyB9Ci0gICAgdm9pZCBtYXJrRnJlZSgp
IHsgZGF0YVB0ci0+aXNGcmVlID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNGcmVlKCkgY29uc3QgeyBy
ZXR1cm4gZGF0YVB0ci0+aXNGcmVlOyB9Ci0gICAgdWNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVy
biAmZGF0YVB0ci0+Ynl0ZXM7IH0KLX07Ci0KLWNsYXNzIE1hcHBlZE1lbW9yeVBvb2wgOiBwdWJs
aWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBzdGF0aWMgTWFwcGVkTWVt
b3J5UG9vbCogaW5zdGFuY2UoKTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAgIE1hcHBl
ZE1lbW9yeSYgYXQoc2l6ZV90IGkpOwotICAgIE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNvbnN0IE1h
cHBlZE1lbW9yeSYpOwotCi1wcml2YXRlOgotICAgIE1hcHBlZE1lbW9yeVBvb2woKTsKLSAgICBR
X1NMT1Qgdm9pZCBjbGVhblVwKCk7Ci0KLSAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBtX3Bvb2w7
Ci19OwotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gTWFwcGVkTWVtb3J5X2gKSW5k
ZXg6IFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCShyZXZpc2lvbiA2OTg1NCkK
KysrIFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIk1hcHBl
ZE1lbW9yeS5oIgotCi0jaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotCi1NYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKCkKLXsKLSAgICBjb25u
ZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVpdCgpKSwg
U0xPVChjbGVhblVwKCkpKTsKLX0KLQotTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVtb3J5UG9v
bDo6aW5zdGFuY2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVtb3J5UG9v
bCwgc2luZ2xldG9uLCAoKSk7Ci0gICAgcmV0dXJuICZzaW5nbGV0b247Ci19Ci0KLXNpemVfdCBN
YXBwZWRNZW1vcnlQb29sOjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wb29sLnNpemUo
KTsKLX0KLQotTWFwcGVkTWVtb3J5JiBNYXBwZWRNZW1vcnlQb29sOjphdChzaXplX3QgaSkKLXsK
LSAgICByZXR1cm4gbV9wb29sLmF0KGkpOwotfQotCi1NYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9y
eVBvb2w6OmFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmIG5ld01hcCkKLXsKLSAgICBtX3Bvb2wu
YXBwZW5kKG5ld01hcCk7Ci0gICAgcmV0dXJuIG1fcG9vbC5sYXN0KCk7Ci19Ci0KLXZvaWQgTWFw
cGVkTWVtb3J5UG9vbDo6Y2xlYW5VcCgpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBtX3Bvb2wuc2l6
ZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
TWFwcGVkTWVtb3J5JiBjaHVuayA9IG1fcG9vbC5hdChpKTsKLSAgICAgICAgaWYgKCFjaHVuay5p
c0ZyZWUoKSkKLSAgICAgICAgICAgIGNodW5rLmZpbGUtPnVubWFwKGNodW5rLm1hcHBlZEJ5dGVz
KTsKLSAgICAgICAgY2h1bmsuZmlsZS0+cmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIHRo
aXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9TaGFyZWQvcXQv
VXBkYXRlQ2h1bmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNo
dW5rLmNwcAkocmV2aXNpb24gNjk4NTQpCisrKyBXZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVu
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMCBAQAogCiAjaW5jbHVkZSAiQXJn
dW1lbnREZWNvZGVyLmgiCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCi0jaW5jbHVkZSAi
QXR0YWNobWVudC5oIgorI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogI2luY2x1ZGUgIldlYkNv
cmVBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgPFFEZWJ1Zz4KLSNpbmNsdWRlIDxRRGlyPgor
I2luY2x1ZGUgPFFJT0RldmljZT4KICNpbmNsdWRlIDxRSW1hZ2U+Ci0jaW5jbHVkZSA8UVRlbXBv
cmFyeUZpbGU+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDMsNDggKzQxLDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXN0YXRpYyBNYXBwZWRNZW1vcnkqIG1hcE1lbW9y
eShzaXplX3Qgc2l6ZSkKLXsKLSAgICBNYXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVt
b3J5UG9vbDo6aW5zdGFuY2UoKTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+
c2l6ZSgpOyArK24pIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQo
bik7Ci0gICAgICAgIGlmIChjdXJyZW50LmRhdGFTaXplID49IHNpemUgJiYgY3VycmVudC5pc0Zy
ZWUoKSkgewotICAgICAgICAgICAgY3VycmVudC5tYXJrVXNlZCgpOwotICAgICAgICAgICAgcmV0
dXJuICZjdXJyZW50OwotICAgICAgICB9Ci0gICAgfQotICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7
Ci0gICAgbmV3TWFwLmRhdGFTaXplID0gc2l6ZTsKLSAgICBuZXdNYXAuZmlsZSA9IG5ldyBRVGVt
cG9yYXJ5RmlsZShRRGlyOjp0ZW1wUGF0aCgpICsgIi9XZWJLaXQyVXBkYXRlQ2h1bmsiKTsKLSAg
ICBuZXdNYXAuZmlsZS0+b3BlbihRSU9EZXZpY2U6OlJlYWRXcml0ZSk7Ci0gICAgbmV3TWFwLmZp
bGUtPnJlc2l6ZShuZXdNYXAubWFwU2l6ZSgpKTsKLSAgICBuZXdNYXAubWFwcGVkQnl0ZXMgPSBu
ZXdNYXAuZmlsZS0+bWFwKDAsIG5ld01hcC5tYXBTaXplKCkpOwotICAgIG5ld01hcC5maWxlLT5j
bG9zZSgpOwotICAgIG5ld01hcC5tYXJrVXNlZCgpOwotICAgIHJldHVybiAmcG9vbC0+YXBwZW5k
KG5ld01hcCk7Ci19Ci0KLXN0YXRpYyBNYXBwZWRNZW1vcnkqIG1hcEZpbGUoUVN0cmluZyBmaWxl
TmFtZSwgc2l6ZV90IHNpemUpCi17Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCogcG9vbCA9IE1hcHBl
ZE1lbW9yeVBvb2w6Omluc3RhbmNlKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHBv
b2wtPnNpemUoKTsgKytuKSB7Ci0gICAgICAgIE1hcHBlZE1lbW9yeSYgY3VycmVudCA9IHBvb2wt
PmF0KG4pOwotICAgICAgICBpZiAoY3VycmVudC5maWxlLT5maWxlTmFtZSgpID09IGZpbGVOYW1l
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIWN1cnJlbnQuaXNGcmVlKCkpOwotICAgICAgICAgICAg
cmV0dXJuICZjdXJyZW50OwotICAgICAgICB9Ci0gICAgfQotICAgIE1hcHBlZE1lbW9yeSBuZXdN
YXA7Ci0gICAgbmV3TWFwLmZpbGUgPSBuZXcgUUZpbGUoZmlsZU5hbWUpOwotICAgIGlmICghbmV3
TWFwLmZpbGUtPm9wZW4oUUlPRGV2aWNlOjpSZWFkV3JpdGUpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBuZXdNYXAuZGF0YVNpemUgPSBzaXplOwotICAgIG5ld01hcC5tYXBwZWRCeXRlcyA9IG5l
d01hcC5maWxlLT5tYXAoMCwgbmV3TWFwLm1hcFNpemUoKSk7Ci0gICAgQVNTRVJUKCFuZXdNYXAu
aXNGcmVlKCkpOwotICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOwotICAgIG5ld01hcC5maWxlLT5y
ZW1vdmUoKTsgLy8gVGhlIG1hcCBzdGF5cyBhbGl2ZSBldmVuIHdoZW4gdGhlIGZpbGUgaXMgdW5s
aW5rZWQuCi0gICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsKLX0KK01hcHBlZE1lbW9y
eSogbWFwTWVtb3J5KHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2RlID0g
UUlPRGV2aWNlOjpSZWFkV3JpdGUpOworTWFwcGVkTWVtb3J5KiBtYXBGaWxlKFFTdHJpbmcgZmls
ZSwgc2l6ZV90IHNpemUsIFFJT0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUgPSBRSU9EZXZpY2U6
OlJlYWRXcml0ZSk7CiAKIFVwZGF0ZUNodW5rOjpVcGRhdGVDaHVuaygpCiAgICAgOiBtX21hcHBl
ZE1lbW9yeSgwKQo=
</data>
<flag name="review"
          id="60794"
          type_id="1"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71722</attachid>
            <date>2010-10-25 02:30:42 -0700</date>
            <delta_ts>2010-10-26 09:22:58 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>bibu.patch</filename>
            <type>text/plain</type>
            <size>28492</size>
            <attacher name="Zoltan Horvath">zoltan</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDQ0NCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMTAtMjUgIFpvbHRhbiBIb3J2YXRoICA8em9sdGFuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W1F0XSBJbXBsZW1lbnQgU2hhcmVkTWVtb3J5IGZvciBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM0NQorCisgICAgICAgIEltcGxlbWVu
dCB1bmltcGxlbWVudGVkIGZ1bmN0aW9ucyBpbiBTaGFyZWRNZW1vcnlRdC5jcHAuCisgICAgICAg
IFJlbmFtZSBNYXBwZWRNZW1vcnkuaCB0byBNYXBwZWRNZW1vcnlQb29sLmgsIG1vdmUgTWFwcGVk
TWVtb3J5UG9vbC57aHxjcHB9IGZyb20KKyAgICAgICAgU2hhcmVkL3F0IHRvIFBsYXRmb3JtL3F0
LiBNb2RpZnkgYWZmZWN0ZWQgbGluZXMgb2YgV2ViS2l0Mi5wcm8uCisgICAgICAgIE1vdmUgTWFw
cGVkTWVtb3J5IGltcGxlbWVudGF0aW9uIGludG8gTWFwcGVkTWVtb3J5UG9vbC4gUmVtb3ZlIHVu
bmVjZXNzYXJ5IAorICAgICAgICBtZXRob2RzIG9mIE1hcHBlZE1lbW9yeVBvb2wuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybS9TaGFyZWRNZW1vcnkuaDogQWRkIGEgaGFuZGxlIG1lbWJlciBmb3IgUXQu
CisgICAgICAgICogUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHA6IENvcGllZCBmcm9t
IFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwLgorICAgICAgICAoV2ViS2l0
OjpNYXBwZWRNZW1vcnlQb29sOjpzZWFyY2hGb3JNYXBwZWRNZW1vcnkpOgorICAgICAgICAoV2Vi
S2l0OjpNYXBwZWRNZW1vcnlQb29sOjptYXBNZW1vcnkpOgorICAgICAgICAoV2ViS2l0OjpNYXBw
ZWRNZW1vcnlQb29sOjptYXBGaWxlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9NYXBwZWRNZW1v
cnlQb29sLmg6IENvcGllZCBmcm9tIFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeS5oLgor
ICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnk6Om1hcFNpemUp
OgorICAgICAgICAoV2ViS2l0OjpNYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnk6Om1hcmtV
c2VkKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6TWFwcGVkTWVtb3J5Ojpt
YXJrRnJlZSk6CisgICAgICAgIChXZWJLaXQ6Ok1hcHBlZE1lbW9yeVBvb2w6Ok1hcHBlZE1lbW9y
eTo6aXNGcmVlKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6TWFwcGVkTWVt
b3J5OjpkYXRhKToKKyAgICAgICAgKFdlYktpdDo6TWFwcGVkTWVtb3J5UG9vbDo6TWFwcGVkTWVt
b3J5UG9vbCk6CisgICAgICAgIE1vdmUgTWFwcGVkTWVtb3J5IGltcGxlbWVudGF0aW9uIGludG8g
TWFwcGVkTWVtb3J5UG9vbC4KKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUpOiBJbXBs
ZW1lbnQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjp+SGFuZGxlKToK
KyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmlzTnVsbCk6IEltcGxlbWVu
dC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZSk6IEltcGxl
bWVudC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZSk6IElt
cGxlbWVudC4KKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGUpOiBJbXBsZW1l
bnQuCisgICAgICAgIChXZWJLaXQ6Om1hcFByb3RlY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6U2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KTogSW1wbGVtZW50LgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZSk6IEltcGxlbWVudC4KKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSk6IEltcGxlbWVudC4KKyAgICAg
ICAgKiBTaGFyZWQvcXQvTWFwcGVkTWVtb3J5Lmg6IFJlbW92ZWQuCisgICAgICAgICogU2hhcmVk
L3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFNoYXJlZC9xdC9V
cGRhdGVDaHVuay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpVcGRhdGVDaHVu
ayk6CisgICAgICAgIChXZWJLaXQ6OlVwZGF0ZUNodW5rOjpkZWNvZGUpOgorICAgICAgICBNb2Rp
ZnkgdG8gdXNlIE1hcHBlZE1lbW9yeVBvb2wuCisgICAgICAgICogU2hhcmVkL3F0L1VwZGF0ZUNo
dW5rLmg6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgIE1vZGlmeSBhZmZlY3RlZCBs
aW5lcy4KKwogMjAxMC0xMC0yNCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQyL1dlYktpdDIucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDcwNDQwKQorKysg
V2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw3IEBAIElO
Q0xVREVQQVRIID0gXAogICAgICQkUFdEIFwKICAgICBQbGF0Zm9ybSBcCiAgICAgUGxhdGZvcm0v
Q29yZUlQQyBcCisgICAgUGxhdGZvcm0vcXQgXAogICAgIFNoYXJlZCBcCiAgICAgU2hhcmVkL0FQ
SS9jIFwKICAgICBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQgXApAQCAtMTc0LDYgKzE3NSw3IEBAIEhF
QURFUlMgKz0gXAogICAgIFBsYXRmb3JtL0xvZ2dpbmcuaCBcCiAgICAgUGxhdGZvcm0vTW9kdWxl
LmggXAogICAgIFBsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBcCisgICAgUGxh
dGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5oIFwKICAgICBQbGF0Zm9ybS9SdW5Mb29wLmggXAog
ICAgIFBsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIFwKICAgICBQbGF0Zm9ybS9Xb3JrSXRlbS5oIFwK
QEAgLTIwMyw3ICsyMDUsNiBAQCBIRUFERVJTICs9IFwKICAgICBTaGFyZWQvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudC5oIFwKICAgICBTaGFyZWQvTm90SW1wbGVtZW50ZWQuaCBcCiAgICAgU2hhcmVk
L1N0cmluZ1BhaXJWZWN0b3IuaCBcCi0gICAgU2hhcmVkL3F0L01hcHBlZE1lbW9yeS5oIFwKICAg
ICBTaGFyZWQvcXQvUGxhdGZvcm1DZXJ0aWZpY2F0ZUluZm8uaCBcCiAgICAgU2hhcmVkL3F0L1Vw
ZGF0ZUNodW5rLmggXAogICAgIFNoYXJlZC9xdC9XZWJFdmVudEZhY3RvcnlRdC5oIFwKQEAgLTMz
Nyw2ICszMzgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKICAg
ICBQbGF0Zm9ybS9SdW5Mb29wLmNwcCBcCiAgICAgUGxhdGZvcm0vV29ya1F1ZXVlLmNwcCBcCisg
ICAgUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAgXAogICAgIFBsYXRmb3JtL3F0L01v
ZHVsZVF0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcCBcCiAgICAgUGxhdGZv
cm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwIFwKQEAgLTM1Nyw3ICszNTksNiBAQCBTT1VSQ0VTICs9
IFwKICAgICBTaGFyZWQvTXV0YWJsZUFycmF5LmNwcCBcCiAgICAgU2hhcmVkL011dGFibGVEaWN0
aW9uYXJ5LmNwcCBcCiAgICAgU2hhcmVkL3F0L0JhY2tpbmdTdG9yZVF0LmNwcCBcCi0gICAgU2hh
cmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwIFwKICAgICBTaGFyZWQvcXQvTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudFF0LmNwcCBcCiAgICAgU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmNwcCBcCiAgICAg
U2hhcmVkL3F0L1dlYkNvcmVBcmd1bWVudENvZGVyc1F0LmNwcCBcCkluZGV4OiBXZWJLaXQyL1Bs
YXRmb3JtL1NoYXJlZE1lbW9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0vU2hh
cmVkTWVtb3J5LmgJKHJldmlzaW9uIDcwNDQwKQorKysgV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRN
ZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsMTAgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKKyNpZiBQTEFURk9S
TShRVCkKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgQ29yZUlQQyB7CiAgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwogICAgIGNsYXNzIEFyZ3Vt
ZW50RW5jb2RlcjsKQEAgLTYwLDYgKzY0LDggQEAgcHVibGljOgogICAgICAgICBtdXRhYmxlIG1h
Y2hfcG9ydF90IG1fcG9ydDsKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICAgICAgbXV0YWJsZSBI
QU5ETEUgbV9oYW5kbGU7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICAgICAgbXV0YWJsZSBTdHJp
bmcgbV9maWxlTmFtZTsKICNlbmRpZgogICAgICAgICBzaXplX3QgbV9zaXplOwogICAgIH07Cklu
ZGV4OiBXZWJLaXQyL1BsYXRmb3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAJKHJldmlzaW9uIDcw
MDUyKQkoZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcDo3MDA1MikK
KysrIFdlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTWFw
cGVkTWVtb3J5LmgiCisKKyNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK01hcHBlZE1lbW9yeVBvb2w6Ok1hcHBlZE1lbW9yeVBvb2woKQoreworICAgIGNv
bm5lY3QoUUNvcmVBcHBsaWNhdGlvbjo6aW5zdGFuY2UoKSwgU0lHTkFMKGFib3V0VG9RdWl0KCkp
LCBTTE9UKGNsZWFuVXAoKSkpOworfQorCitNYXBwZWRNZW1vcnlQb29sKiBNYXBwZWRNZW1vcnlQ
b29sOjppbnN0YW5jZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNYXBwZWRNZW1vcnlQ
b29sLCBzaW5nbGV0b24sICgpKTsKKyAgICByZXR1cm4gJnNpbmdsZXRvbjsKK30KKworc2l6ZV90
IE1hcHBlZE1lbW9yeVBvb2w6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX3Bvb2wuc2l6
ZSgpOworfQorCitNYXBwZWRNZW1vcnkmIE1hcHBlZE1lbW9yeVBvb2w6OmF0KHNpemVfdCBpKQor
eworICAgIHJldHVybiBtX3Bvb2wuYXQoaSk7Cit9CisKK01hcHBlZE1lbW9yeSYgTWFwcGVkTWVt
b3J5UG9vbDo6YXBwZW5kKGNvbnN0IE1hcHBlZE1lbW9yeSYgbmV3TWFwKQoreworICAgIG1fcG9v
bC5hcHBlbmQobmV3TWFwKTsKKyAgICByZXR1cm4gbV9wb29sLmxhc3QoKTsKK30KKwordm9pZCBN
YXBwZWRNZW1vcnlQb29sOjpjbGVhblVwKCkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG1fcG9vbC5z
aXplKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICBNYXBwZWRNZW1vcnkmIGNodW5rID0gbV9wb29sLmF0KGkpOworICAgICAgICBpZiAoIWNodW5r
LmlzRnJlZSgpKQorICAgICAgICAgICAgY2h1bmsuZmlsZS0+dW5tYXAoY2h1bmsubWFwcGVkQnl0
ZXMpOworICAgICAgICBjaHVuay5maWxlLT5yZW1vdmUoKTsKKyAgICB9CisKKyAgICBkZWxldGUg
dGhpczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQyL1BsYXRmb3Jt
L3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvUGxhdGZvcm0v
cXQvTWFwcGVkTWVtb3J5UG9vbC5jcHAJKHJldmlzaW9uIDcwMDUyKQorKysgV2ViS2l0Mi9QbGF0
Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNCw1
MSArMjUsNzIgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgIk1hcHBlZE1lbW9y
eS5oIgorI2luY2x1ZGUgIk1hcHBlZE1lbW9yeVBvb2wuaCIKIAogI2luY2x1ZGUgIlN0ZExpYkV4
dHJhcy5oIgorI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUlPRGV2aWNlPgorI2luY2x1ZGUg
PFFUZW1wb3JhcnlGaWxlPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTWFwcGVkTWVtb3J5UG9v
bDo6TWFwcGVkTWVtb3J5UG9vbCgpCi17Ci0gICAgY29ubmVjdChRQ29yZUFwcGxpY2F0aW9uOjpp
bnN0YW5jZSgpLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1QoY2xlYW5VcCgpKSk7Ci19Ci0K
IE1hcHBlZE1lbW9yeVBvb2wqIE1hcHBlZE1lbW9yeVBvb2w6Omluc3RhbmNlKCkKIHsKICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKE1hcHBlZE1lbW9yeVBvb2wsIHNpbmdsZXRvbiwgKCkpOwogICAg
IHJldHVybiAmc2luZ2xldG9uOwogfQogCi1zaXplX3QgTWFwcGVkTWVtb3J5UG9vbDo6c2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcG9vbC5zaXplKCk7Ci19Ci0KLU1hcHBlZE1lbW9yeSYg
TWFwcGVkTWVtb3J5UG9vbDo6YXQoc2l6ZV90IGkpCitNYXBwZWRNZW1vcnkqIE1hcHBlZE1lbW9y
eVBvb2w6OnNlYXJjaEZvck1hcHBlZE1lbW9yeSh1Y2hhciogcCkKIHsKLSAgICByZXR1cm4gbV9w
b29sLmF0KGkpOworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX3Bvb2wuc2l6ZSgpOyAr
K24pIHsKKyAgICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gbV9wb29sLmF0KG4pOworICAg
ICAgICBpZiAoY3VycmVudC5kYXRhKCkgPT0gcCkKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PE1hcHBlZE1lbW9yeSo+KCZjdXJyZW50KTsKKyAgICB9CisgICAgcmV0dXJuIDA7
CiB9CiAKLU1hcHBlZE1lbW9yeSYgTWFwcGVkTWVtb3J5UG9vbDo6YXBwZW5kKGNvbnN0IE1hcHBl
ZE1lbW9yeSYgbmV3TWFwKQorTWFwcGVkTWVtb3J5KiBNYXBwZWRNZW1vcnlQb29sOjptYXBNZW1v
cnkoc2l6ZV90IHNpemUsIFFJT0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUpCiB7CisgICAgZm9y
ICh1bnNpZ25lZCBuID0gMDsgbiA8IG1fcG9vbC5zaXplKCk7ICsrbikgeworICAgICAgICBNYXBw
ZWRNZW1vcnkmIGN1cnJlbnQgPSBtX3Bvb2wuYXQobik7CisgICAgICAgIGlmIChjdXJyZW50LmRh
dGFTaXplID49IHNpemUgJiYgY3VycmVudC5pc0ZyZWUoKSkgeworICAgICAgICAgICAgY3VycmVu
dC5tYXJrVXNlZCgpOworICAgICAgICAgICAgcmV0dXJuICZjdXJyZW50OworICAgICAgICB9Cisg
ICAgfQorICAgIE1hcHBlZE1lbW9yeSBuZXdNYXA7CisgICAgbmV3TWFwLmRhdGFTaXplID0gc2l6
ZTsKKyAgICBuZXdNYXAuZmlsZSA9IG5ldyBRVGVtcG9yYXJ5RmlsZShRRGlyOjp0ZW1wUGF0aCgp
ICsgIi9XZWJLaXQyVXBkYXRlQ2h1bmsiKTsKKyAgICBuZXdNYXAuZmlsZS0+b3BlbihvcGVuTW9k
ZSk7CisgICAgbmV3TWFwLmZpbGUtPnJlc2l6ZShuZXdNYXAubWFwU2l6ZSgpKTsKKyAgICBuZXdN
YXAubWFwcGVkQnl0ZXMgPSBuZXdNYXAuZmlsZS0+bWFwKDAsIG5ld01hcC5tYXBTaXplKCkpOwor
ICAgIG5ld01hcC5maWxlLT5jbG9zZSgpOworICAgIG5ld01hcC5tYXJrVXNlZCgpOwogICAgIG1f
cG9vbC5hcHBlbmQobmV3TWFwKTsKLSAgICByZXR1cm4gbV9wb29sLmxhc3QoKTsKKyAgICByZXR1
cm4gJm1fcG9vbC5sYXN0KCk7CiB9CiAKLXZvaWQgTWFwcGVkTWVtb3J5UG9vbDo6Y2xlYW5VcCgp
CitNYXBwZWRNZW1vcnkqIE1hcHBlZE1lbW9yeVBvb2w6Om1hcEZpbGUoUVN0cmluZyBmaWxlTmFt
ZSwgc2l6ZV90IHNpemUsIFFJT0RldmljZTo6T3Blbk1vZGUgb3Blbk1vZGUpCiB7Ci0gICAgc2l6
ZV90IHNpemUgPSBtX3Bvb2wuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgTWFwcGVkTWVtb3J5JiBjaHVuayA9IG1fcG9vbC5hdChpKTsK
LSAgICAgICAgaWYgKCFjaHVuay5pc0ZyZWUoKSkKLSAgICAgICAgICAgIGNodW5rLmZpbGUtPnVu
bWFwKGNodW5rLm1hcHBlZEJ5dGVzKTsKLSAgICAgICAgY2h1bmsuZmlsZS0+cmVtb3ZlKCk7Cisg
ICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG1fcG9vbC5zaXplKCk7ICsrbikgeworICAgICAg
ICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBtX3Bvb2wuYXQobik7CisgICAgICAgIGlmIChjdXJy
ZW50LmZpbGUtPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
Y3VycmVudC5pc0ZyZWUoKSk7CisgICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7CisgICAgICAg
IH0KICAgICB9Ci0KLSAgICBkZWxldGUgdGhpczsKKyAgICBNYXBwZWRNZW1vcnkgbmV3TWFwOwor
ICAgIG5ld01hcC5maWxlID0gbmV3IFFGaWxlKGZpbGVOYW1lKTsKKyAgICBpZiAoIW5ld01hcC5m
aWxlLT5vcGVuKG9wZW5Nb2RlKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgbmV3TWFwLmRhdGFT
aXplID0gc2l6ZTsKKyAgICBuZXdNYXAubWFwcGVkQnl0ZXMgPSBuZXdNYXAuZmlsZS0+bWFwKDAs
IG5ld01hcC5tYXBTaXplKCkpOworICAgIEFTU0VSVCghbmV3TWFwLmlzRnJlZSgpKTsKKyAgICBu
ZXdNYXAuZmlsZS0+Y2xvc2UoKTsKKyAgICBuZXdNYXAuZmlsZS0+cmVtb3ZlKCk7IC8vIFRoZSBt
YXAgc3RheXMgYWxpdmUgZXZlbiB3aGVuIHRoZSBmaWxlIGlzIHVubGlua2VkLgorICAgIG1fcG9v
bC5hcHBlbmQobmV3TWFwKTsKKyAgICByZXR1cm4gJm1fcG9vbC5sYXN0KCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQ
b29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9QbGF0Zm9ybS9xdC9NYXBwZWRNZW1vcnlQb29s
LmgJKHJldmlzaW9uIDcwMDUyKQkoZnJvbSBXZWJLaXQyL1NoYXJlZC9xdC9NYXBwZWRNZW1vcnku
aDo3MDA1MikKKysrIFdlYktpdDIvUGxhdGZvcm0vcXQvTWFwcGVkTWVtb3J5UG9vbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChD
KSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgTWFwcGVkTWVt
b3J5X2gKKyNkZWZpbmUgTWFwcGVkTWVtb3J5X2gKKworI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRp
b24+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKK3N0cnVjdCBNYXBwZWRNZW1vcnkgeworICAgIFFGaWxlKiBmaWxlOworICAg
IHN0cnVjdCBEYXRhIHsKKyAgICAgICAgdWludDMyX3QgaXNGcmVlOyAvLyBrZWVwIGJ5dGVzIGFs
aWduZWQKKyAgICAgICAgdWNoYXIgYnl0ZXM7CisgICAgfTsKKyAgICB1bmlvbiB7CisgICAgICAg
IHVjaGFyKiBtYXBwZWRCeXRlczsKKyAgICAgICAgRGF0YSogZGF0YVB0cjsKKyAgICB9OworICAg
IHNpemVfdCBkYXRhU2l6ZTsKKworICAgIHNpemVfdCBtYXBTaXplKCkgY29uc3QgeyByZXR1cm4g
ZGF0YVNpemUgKyBzaXplb2YoRGF0YSk7IH0KKyAgICB2b2lkIG1hcmtVc2VkKCkgeyBkYXRhUHRy
LT5pc0ZyZWUgPSBmYWxzZTsgfQorICAgIHZvaWQgbWFya0ZyZWUoKSB7IGRhdGFQdHItPmlzRnJl
ZSA9IHRydWU7IH0KKyAgICBib29sIGlzRnJlZSgpIGNvbnN0IHsgcmV0dXJuIGRhdGFQdHItPmlz
RnJlZTsgfQorICAgIHVjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gJmRhdGFQdHItPmJ5dGVz
OyB9Cit9OworCitjbGFzcyBNYXBwZWRNZW1vcnlQb29sIDogcHVibGljIFFPYmplY3QgeworICAg
IFFfT0JKRUNUCitwdWJsaWM6CisgICAgc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIGluc3RhbmNl
KCk7CisgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKKyAgICBNYXBwZWRNZW1vcnkmIGF0KHNpemVf
dCBpKTsKKyAgICBNYXBwZWRNZW1vcnkmIGFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmKTsKKwor
cHJpdmF0ZToKKyAgICBNYXBwZWRNZW1vcnlQb29sKCk7CisgICAgUV9TTE9UIHZvaWQgY2xlYW5V
cCgpOworCisgICAgVmVjdG9yPE1hcHBlZE1lbW9yeT4gbV9wb29sOworfTsKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorI2VuZGlmIC8vIE1hcHBlZE1lbW9yeV9oCkluZGV4OiBXZWJLaXQyL1BsYXRm
b3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3Jt
L3F0L01hcHBlZE1lbW9yeVBvb2wuaAkocmV2aXNpb24gNzA0NDApCisrKyBXZWJLaXQyL1BsYXRm
b3JtL3F0L01hcHBlZE1lbW9yeVBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNDYgKzI1LDQ5
IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBN
YXBwZWRNZW1vcnlfaAotI2RlZmluZSBNYXBwZWRNZW1vcnlfaAorI2lmbmRlZiBNYXBwZWRNZW1v
cnlQb29sX2gKKyNkZWZpbmUgTWFwcGVkTWVtb3J5UG9vbF9oCiAKLSNpbmNsdWRlIDxRQ29yZUFw
cGxpY2F0aW9uPgogI2luY2x1ZGUgPFFGaWxlPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7Ci1zdHJ1Y3QgTWFwcGVkTWVtb3J5IHsKLSAgICBRRmlsZSogZmls
ZTsKLSAgICBzdHJ1Y3QgRGF0YSB7Ci0gICAgICAgIHVpbnQzMl90IGlzRnJlZTsgLy8ga2VlcCBi
eXRlcyBhbGlnbmVkCi0gICAgICAgIHVjaGFyIGJ5dGVzOwotICAgIH07Ci0gICAgdW5pb24gewot
ICAgICAgICB1Y2hhciogbWFwcGVkQnl0ZXM7Ci0gICAgICAgIERhdGEqIGRhdGFQdHI7Ci0gICAg
fTsKLSAgICBzaXplX3QgZGF0YVNpemU7CiAKLSAgICBzaXplX3QgbWFwU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGRhdGFTaXplICsgc2l6ZW9mKERhdGEpOyB9Ci0gICAgdm9pZCBtYXJrVXNlZCgpIHsg
ZGF0YVB0ci0+aXNGcmVlID0gZmFsc2U7IH0KLSAgICB2b2lkIG1hcmtGcmVlKCkgeyBkYXRhUHRy
LT5pc0ZyZWUgPSB0cnVlOyB9Ci0gICAgYm9vbCBpc0ZyZWUoKSBjb25zdCB7IHJldHVybiBkYXRh
UHRyLT5pc0ZyZWU7IH0KLSAgICB1Y2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuICZkYXRhUHRy
LT5ieXRlczsgfQotfTsKLQotY2xhc3MgTWFwcGVkTWVtb3J5UG9vbCA6IHB1YmxpYyBRT2JqZWN0
IHsKLSAgICBRX09CSkVDVAorY2xhc3MgTWFwcGVkTWVtb3J5UG9vbCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIGluc3RhbmNlKCk7Ci0gICAgc2l6ZV90IHNpemUoKSBj
b25zdDsKLSAgICBNYXBwZWRNZW1vcnkmIGF0KHNpemVfdCBpKTsKLSAgICBNYXBwZWRNZW1vcnkm
IGFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmKTsKKworICAgIHN0cnVjdCBNYXBwZWRNZW1vcnkg
eworICAgICAgICBRRmlsZSogZmlsZTsKKyAgICAgICAgc3RydWN0IERhdGEgeworICAgICAgICAg
ICAgdWludDMyX3QgaXNGcmVlOyAvLyBrZWVwIGJ5dGVzIGFsaWduZWQKKyAgICAgICAgICAgIHVj
aGFyIGJ5dGVzOworICAgICAgICB9OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICB1Y2hh
ciogbWFwcGVkQnl0ZXM7CisgICAgICAgICAgICBEYXRhKiBkYXRhUHRyOworICAgICAgICB9Owor
ICAgICAgICBzaXplX3QgZGF0YVNpemU7CisKKyAgICAgICAgc2l6ZV90IG1hcFNpemUoKSBjb25z
dCB7IHJldHVybiBkYXRhU2l6ZSArIHNpemVvZihEYXRhKTsgfQorICAgICAgICB2b2lkIG1hcmtV
c2VkKCkgeyBkYXRhUHRyLT5pc0ZyZWUgPSBmYWxzZTsgfQorICAgICAgICB2b2lkIG1hcmtGcmVl
KCkgeyBkYXRhUHRyLT5pc0ZyZWUgPSB0cnVlOyB9CisgICAgICAgIGJvb2wgaXNGcmVlKCkgY29u
c3QgeyByZXR1cm4gZGF0YVB0ci0+aXNGcmVlOyB9CisgICAgICAgIHVjaGFyKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gJmRhdGFQdHItPmJ5dGVzOyB9CisgICAgfTsKKworICAgIE1hcHBlZE1lbW9y
eSogbWFwTWVtb3J5KHNpemVfdCBzaXplLCBRSU9EZXZpY2U6Ok9wZW5Nb2RlIG9wZW5Nb2RlID0g
UUlPRGV2aWNlOjpSZWFkV3JpdGUpOworICAgIE1hcHBlZE1lbW9yeSogbWFwRmlsZShRU3RyaW5n
IGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSwgUUlPRGV2aWNlOjpPcGVuTW9kZSBvcGVuTW9kZSA9IFFJ
T0RldmljZTo6UmVhZFdyaXRlKTsKKyAgICBNYXBwZWRNZW1vcnkqIHNlYXJjaEZvck1hcHBlZE1l
bW9yeSh1Y2hhciogcCk7CiAKIHByaXZhdGU6Ci0gICAgTWFwcGVkTWVtb3J5UG9vbCgpOwotICAg
IFFfU0xPVCB2b2lkIGNsZWFuVXAoKTsKKyAgICBNYXBwZWRNZW1vcnlQb29sKCkgeyB9OwogCiAg
ICAgVmVjdG9yPE1hcHBlZE1lbW9yeT4gbV9wb29sOwogfTsKKwordHlwZWRlZiBNYXBwZWRNZW1v
cnlQb29sOjpNYXBwZWRNZW1vcnkgTWFwcGVkTWVtb3J5OworCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLSNlbmRpZiAvLyBNYXBwZWRNZW1vcnlfaAorCisjZW5kaWYgLy8gTWFwcGVkTWVtb3J5UG9v
bF9oCkluZGV4OiBXZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAkocmV2aXNpb24g
NzA0NDApCisrKyBXZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEwIFVuaXZlcnNp
dHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI1LDU4ICsyNywxMzEgQEAKIAogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNp
bmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgi
CisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8UUlPRGV2aWNl
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIG1hcHBlZE1l
bW9yeVBvb2wgPSBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSgpOworCiBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6SGFuZGxlKCkKKyAgICA6IG1fZmlsZU5hbWUoKQorICAgICwgbV9zaXplKDApCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5k
bGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgU2hhcmVkTWVtb3J5OjpI
YW5kbGU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZU5hbWUuaXNOdWxsKCk7
CiB9CiAKIHZvaWQgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmVuY29kZShDb3JlSVBDOjpBcmd1bWVu
dEVuY29kZXIqIGVuY29kZXIpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBl
bmNvZGVyLT5lbmNvZGVVSW50NjQobV9zaXplKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUobV9maWxl
TmFtZSk7CisgICAgbV9maWxlTmFtZSA9IFN0cmluZygpOwogfQogCiBib29sIFNoYXJlZE1lbW9y
eTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5k
bGUmIGhhbmRsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsK
KyAgICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworICAgIEFTU0VSVChoYW5kbGUubV9maWxlTmFt
ZS5pc0VtcHR5KCkpOworCisgICAgdWludDY0X3Qgc2l6ZTsKKyAgICBpZiAoIWRlY29kZXItPmRl
Y29kZVVJbnQ2NChzaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGZp
bGVOYW1lOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZpbGVOYW1lKSkKKyAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBoYW5kbGUubV9zaXplID0gc2l6ZTsKKyAgICBoYW5kbGUubV9maWxl
TmFtZSA9IGZpbGVOYW1lOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIFBhc3NSZWZQdHI8U2hh
cmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShzaXplX3Qgc2l6ZSkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIE1hcHBlZE1lbW9yeSogbW0gPSBtYXBw
ZWRNZW1vcnlQb29sLT5tYXBNZW1vcnkoc2l6ZSwgUUlPRGV2aWNlOjpSZWFkV3JpdGUpOworCisg
ICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5ldyBTaGFyZWRN
ZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IHNpemU7CisgICAgc2hhcmVkTWVt
b3J5LT5tX2RhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihtbS0+ZGF0YSgpKTsKKworICAg
IHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQorCitzdGF0aWMgaW5saW5lIFFJT0Rl
dmljZTo6T3Blbk1vZGUgbWFwUHJvdGVjdGlvbihTaGFyZWRNZW1vcnk6OlByb3RlY3Rpb24gcHJv
dGVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKHByb3RlY3Rpb24pIHsKKyAgICBjYXNlIFNoYXJlZE1l
bW9yeTo6UmVhZE9ubHk6CisgICAgICAgIHJldHVybiBRSU9EZXZpY2U6OlJlYWRPbmx5OworICAg
IGNhc2UgU2hhcmVkTWVtb3J5OjpSZWFkV3JpdGU6CisgICAgICAgIHJldHVybiBRSU9EZXZpY2U6
OlJlYWRXcml0ZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gUUlPRGV2aWNlOjpOb3RPcGVuOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hh
cmVkTWVtb3J5OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVj
dGlvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOyAgICAKKyAgICBp
ZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFFJT0RldmljZTo6
T3Blbk1vZGUgb3Blbk1vZGUgPSBtYXBQcm90ZWN0aW9uKHByb3RlY3Rpb24pOworCisgICAgTWFw
cGVkTWVtb3J5KiBtbSA9IG1hcHBlZE1lbW9yeVBvb2wtPm1hcEZpbGUoUVN0cmluZyhoYW5kbGUu
bV9maWxlTmFtZSksIGhhbmRsZS5tX3NpemUsIG9wZW5Nb2RlKTsKKworICAgIFJlZlB0cjxTaGFy
ZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAg
c2hhcmVkTWVtb3J5LT5tX3NpemUgPSBoYW5kbGUubV9zaXplOworICAgIHNoYXJlZE1lbW9yeS0+
bV9kYXRhID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obW0tPmRhdGEoKSk7CisKKyAgICByZXR1
cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKIH0KIAogU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVt
b3J5KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIE1hcHBlZE1lbW9yeSogbWFwcGVk
TWVtb3J5ID0gbWFwcGVkTWVtb3J5UG9vbC0+c2VhcmNoRm9yTWFwcGVkTWVtb3J5KHJlaW50ZXJw
cmV0X2Nhc3Q8dWNoYXIqPihtX2RhdGEpKTsKKyAgICBpZiAobWFwcGVkTWVtb3J5KSB7IAorICAg
ICAgICBtYXBwZWRNZW1vcnktPm1hcmtGcmVlKCk7CisgICAgICAgIGRlbGV0ZSBtYXBwZWRNZW1v
cnk7CisgICAgfQogfQotICAgIAorCiBib29sIFNoYXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhh
bmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGhhbmRsZS5tX2ZpbGVOYW1lLmlz
TnVsbCgpKTsKKyAgICBBU1NFUlQoIWhhbmRsZS5tX3NpemUpOworCisgICAgTWFwcGVkTWVtb3J5
KiBtbSA9IG1hcHBlZE1lbW9yeVBvb2wtPnNlYXJjaEZvck1hcHBlZE1lbW9yeShyZWludGVycHJl
dF9jYXN0PHVjaGFyKj4obV9kYXRhKSk7CisKKyAgICBpZiAoIW1tKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBoYW5kbGUubV9maWxlTmFtZSA9IG1tLT5maWxlLT5maWxlTmFtZSgpOwor
ICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdW5z
aWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB7CiAgICAgc3RhdGljIHVuc2ln
bmVkIHBhZ2VTaXplID0gMDsKIAorICAgIGlmICghcGFnZVNpemUpCisgICAgICAgIHBhZ2VTaXpl
ID0gZ2V0cGFnZXNpemUoKTsKKwogICAgIHJldHVybiBwYWdlU2l6ZTsKIH0KIApJbmRleDogV2Vi
S2l0Mi9TaGFyZWQvcXQvTWFwcGVkTWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFy
ZWQvcXQvTWFwcGVkTWVtb3J5LmgJKHJldmlzaW9uIDcwNDQwKQorKysgV2ViS2l0Mi9TaGFyZWQv
cXQvTWFwcGVkTWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBNYXBwZWRNZW1vcnlfaAotI2RlZmluZSBNYXBwZWRNZW1vcnlfaAotCi0j
aW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KLSNpbmNsdWRlIDxRRmlsZT4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IE1hcHBlZE1lbW9yeSB7
Ci0gICAgUUZpbGUqIGZpbGU7Ci0gICAgc3RydWN0IERhdGEgewotICAgICAgICB1aW50MzJfdCBp
c0ZyZWU7IC8vIGtlZXAgYnl0ZXMgYWxpZ25lZAotICAgICAgICB1Y2hhciBieXRlczsKLSAgICB9
OwotICAgIHVuaW9uIHsKLSAgICAgICAgdWNoYXIqIG1hcHBlZEJ5dGVzOwotICAgICAgICBEYXRh
KiBkYXRhUHRyOwotICAgIH07Ci0gICAgc2l6ZV90IGRhdGFTaXplOwotCi0gICAgc2l6ZV90IG1h
cFNpemUoKSBjb25zdCB7IHJldHVybiBkYXRhU2l6ZSArIHNpemVvZihEYXRhKTsgfQotICAgIHZv
aWQgbWFya1VzZWQoKSB7IGRhdGFQdHItPmlzRnJlZSA9IGZhbHNlOyB9Ci0gICAgdm9pZCBtYXJr
RnJlZSgpIHsgZGF0YVB0ci0+aXNGcmVlID0gdHJ1ZTsgfQotICAgIGJvb2wgaXNGcmVlKCkgY29u
c3QgeyByZXR1cm4gZGF0YVB0ci0+aXNGcmVlOyB9Ci0gICAgdWNoYXIqIGRhdGEoKSBjb25zdCB7
IHJldHVybiAmZGF0YVB0ci0+Ynl0ZXM7IH0KLX07Ci0KLWNsYXNzIE1hcHBlZE1lbW9yeVBvb2wg
OiBwdWJsaWMgUU9iamVjdCB7Ci0gICAgUV9PQkpFQ1QKLXB1YmxpYzoKLSAgICBzdGF0aWMgTWFw
cGVkTWVtb3J5UG9vbCogaW5zdGFuY2UoKTsKLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0OwotICAg
IE1hcHBlZE1lbW9yeSYgYXQoc2l6ZV90IGkpOwotICAgIE1hcHBlZE1lbW9yeSYgYXBwZW5kKGNv
bnN0IE1hcHBlZE1lbW9yeSYpOwotCi1wcml2YXRlOgotICAgIE1hcHBlZE1lbW9yeVBvb2woKTsK
LSAgICBRX1NMT1Qgdm9pZCBjbGVhblVwKCk7Ci0KLSAgICBWZWN0b3I8TWFwcGVkTWVtb3J5PiBt
X3Bvb2w7Ci19OwotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYgLy8gTWFwcGVkTWVtb3J5
X2gKSW5kZXg6IFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCShyZXZpc2lvbiA3
MDQ0MCkKKysrIFdlYktpdDIvU2hhcmVkL3F0L01hcHBlZE1lbW9yeVBvb2wuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVy
c2l0eSBvZiBTemVnZWQKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
Ik1hcHBlZE1lbW9yeS5oIgotCi0jaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1NYXBwZWRNZW1vcnlQb29sOjpNYXBwZWRNZW1vcnlQb29sKCkKLXsKLSAg
ICBjb25uZWN0KFFDb3JlQXBwbGljYXRpb246Omluc3RhbmNlKCksIFNJR05BTChhYm91dFRvUXVp
dCgpKSwgU0xPVChjbGVhblVwKCkpKTsKLX0KLQotTWFwcGVkTWVtb3J5UG9vbCogTWFwcGVkTWVt
b3J5UG9vbDo6aW5zdGFuY2UoKQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoTWFwcGVkTWVt
b3J5UG9vbCwgc2luZ2xldG9uLCAoKSk7Ci0gICAgcmV0dXJuICZzaW5nbGV0b247Ci19Ci0KLXNp
emVfdCBNYXBwZWRNZW1vcnlQb29sOjpzaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wb29s
LnNpemUoKTsKLX0KLQotTWFwcGVkTWVtb3J5JiBNYXBwZWRNZW1vcnlQb29sOjphdChzaXplX3Qg
aSkKLXsKLSAgICByZXR1cm4gbV9wb29sLmF0KGkpOwotfQotCi1NYXBwZWRNZW1vcnkmIE1hcHBl
ZE1lbW9yeVBvb2w6OmFwcGVuZChjb25zdCBNYXBwZWRNZW1vcnkmIG5ld01hcCkKLXsKLSAgICBt
X3Bvb2wuYXBwZW5kKG5ld01hcCk7Ci0gICAgcmV0dXJuIG1fcG9vbC5sYXN0KCk7Ci19Ci0KLXZv
aWQgTWFwcGVkTWVtb3J5UG9vbDo6Y2xlYW5VcCgpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBtX3Bv
b2wuc2l6ZSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgTWFwcGVkTWVtb3J5JiBjaHVuayA9IG1fcG9vbC5hdChpKTsKLSAgICAgICAgaWYgKCFj
aHVuay5pc0ZyZWUoKSkKLSAgICAgICAgICAgIGNodW5rLmZpbGUtPnVubWFwKGNodW5rLm1hcHBl
ZEJ5dGVzKTsKLSAgICAgICAgY2h1bmsuZmlsZS0+cmVtb3ZlKCk7Ci0gICAgfQotCi0gICAgZGVs
ZXRlIHRoaXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9TaGFy
ZWQvcXQvVXBkYXRlQ2h1bmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL3F0L1Vw
ZGF0ZUNodW5rLmNwcAkocmV2aXNpb24gNzA0NDApCisrKyBXZWJLaXQyL1NoYXJlZC9xdC9VcGRh
dGVDaHVuay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSw5IEBACiAKICNpbmNsdWRl
ICJBcmd1bWVudERlY29kZXIuaCIKICNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKLSNpbmNs
dWRlICJBdHRhY2htZW50LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0j
aW5jbHVkZSA8UURlYnVnPgotI2luY2x1ZGUgPFFEaXI+CisjaW5jbHVkZSA8UUlPRGV2aWNlPgog
I2luY2x1ZGUgPFFJbWFnZT4KLSNpbmNsdWRlIDxRVGVtcG9yYXJ5RmlsZT4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBA
IC00Myw0OCArNDAsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotc3RhdGljIE1hcHBlZE1lbW9yeSogbWFwTWVtb3J5KHNpemVfdCBzaXplKQotewotICAg
IE1hcHBlZE1lbW9yeVBvb2wqIHBvb2wgPSBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSgpOwot
ICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBwb29sLT5zaXplKCk7ICsrbikgewotICAgICAg
ICBNYXBwZWRNZW1vcnkmIGN1cnJlbnQgPSBwb29sLT5hdChuKTsKLSAgICAgICAgaWYgKGN1cnJl
bnQuZGF0YVNpemUgPj0gc2l6ZSAmJiBjdXJyZW50LmlzRnJlZSgpKSB7Ci0gICAgICAgICAgICBj
dXJyZW50Lm1hcmtVc2VkKCk7Ci0gICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKLSAgICBuZXdNYXAuZGF0YVNpemUg
PSBzaXplOwotICAgIG5ld01hcC5maWxlID0gbmV3IFFUZW1wb3JhcnlGaWxlKFFEaXI6OnRlbXBQ
YXRoKCkgKyAiL1dlYktpdDJVcGRhdGVDaHVuayIpOwotICAgIG5ld01hcC5maWxlLT5vcGVuKFFJ
T0RldmljZTo6UmVhZFdyaXRlKTsKLSAgICBuZXdNYXAuZmlsZS0+cmVzaXplKG5ld01hcC5tYXBT
aXplKCkpOwotICAgIG5ld01hcC5tYXBwZWRCeXRlcyA9IG5ld01hcC5maWxlLT5tYXAoMCwgbmV3
TWFwLm1hcFNpemUoKSk7Ci0gICAgbmV3TWFwLmZpbGUtPmNsb3NlKCk7Ci0gICAgbmV3TWFwLm1h
cmtVc2VkKCk7Ci0gICAgcmV0dXJuICZwb29sLT5hcHBlbmQobmV3TWFwKTsKLX0KLQotc3RhdGlj
IE1hcHBlZE1lbW9yeSogbWFwRmlsZShRU3RyaW5nIGZpbGVOYW1lLCBzaXplX3Qgc2l6ZSkKLXsK
LSAgICBNYXBwZWRNZW1vcnlQb29sKiBwb29sID0gTWFwcGVkTWVtb3J5UG9vbDo6aW5zdGFuY2Uo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcG9vbC0+c2l6ZSgpOyArK24pIHsKLSAg
ICAgICAgTWFwcGVkTWVtb3J5JiBjdXJyZW50ID0gcG9vbC0+YXQobik7Ci0gICAgICAgIGlmIChj
dXJyZW50LmZpbGUtPmZpbGVOYW1lKCkgPT0gZmlsZU5hbWUpIHsKLSAgICAgICAgICAgIEFTU0VS
VCghY3VycmVudC5pc0ZyZWUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gJmN1cnJlbnQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgTWFwcGVkTWVtb3J5IG5ld01hcDsKLSAgICBuZXdNYXAuZmlsZSA9
IG5ldyBRRmlsZShmaWxlTmFtZSk7Ci0gICAgaWYgKCFuZXdNYXAuZmlsZS0+b3BlbihRSU9EZXZp
Y2U6OlJlYWRXcml0ZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIG5ld01hcC5kYXRhU2l6ZSA9
IHNpemU7Ci0gICAgbmV3TWFwLm1hcHBlZEJ5dGVzID0gbmV3TWFwLmZpbGUtPm1hcCgwLCBuZXdN
YXAubWFwU2l6ZSgpKTsKLSAgICBBU1NFUlQoIW5ld01hcC5pc0ZyZWUoKSk7Ci0gICAgbmV3TWFw
LmZpbGUtPmNsb3NlKCk7Ci0gICAgbmV3TWFwLmZpbGUtPnJlbW92ZSgpOyAvLyBUaGUgbWFwIHN0
YXlzIGFsaXZlIGV2ZW4gd2hlbiB0aGUgZmlsZSBpcyB1bmxpbmtlZC4KLSAgICByZXR1cm4gJnBv
b2wtPmFwcGVuZChuZXdNYXApOwotfQorc3RhdGljIE1hcHBlZE1lbW9yeVBvb2wqIG1hcHBlZE1l
bW9yeVBvb2wgPSBNYXBwZWRNZW1vcnlQb29sOjppbnN0YW5jZSgpOwogCiBVcGRhdGVDaHVuazo6
VXBkYXRlQ2h1bmsoKQogICAgIDogbV9tYXBwZWRNZW1vcnkoMCkKQEAgLTkzLDcgKzQ5LDcgQEAg
VXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKCkKIAogVXBkYXRlQ2h1bms6OlVwZGF0ZUNodW5rKGNv
bnN0IEludFJlY3QmIHJlY3QpCiAgICAgOiBtX3JlY3QocmVjdCkKLSAgICAsIG1fbWFwcGVkTWVt
b3J5KG1hcE1lbW9yeShzaXplKCkpKQorICAgICwgbV9tYXBwZWRNZW1vcnkobWFwcGVkTWVtb3J5
UG9vbC0+bWFwTWVtb3J5KHNpemUoKSkpCiB7CiB9CiAKQEAgLTEyNCwxMiArODAsMTIgQEAgYm9v
bCBVcGRhdGVDaHVuazo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZQogICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2h1bmsubV9yZWN0ID0g
cmVjdDsKLSAgICAKKwogICAgIFN0cmluZyBmaWxlTmFtZTsKICAgICBpZiAoIWRlY29kZXItPmRl
Y29kZShmaWxlTmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNodW5rLm1fbWFw
cGVkTWVtb3J5ID0gbWFwRmlsZShmaWxlTmFtZSwgY2h1bmsuc2l6ZSgpKTsKKyAgICBjaHVuay5t
X21hcHBlZE1lbW9yeSA9IG1hcHBlZE1lbW9yeVBvb2wtPm1hcEZpbGUoZmlsZU5hbWUsIGNodW5r
LnNpemUoKSk7CiAKICAgICByZXR1cm4gY2h1bmsubV9tYXBwZWRNZW1vcnktPm1hcHBlZEJ5dGVz
OwogfQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvcXQvVXBkYXRlQ2h1bmsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1NoYXJlZC9xdC9VcGRhdGVDaHVuay5oCShyZXZpc2lvbiA3MDQ0MCkKKysrIFdl
YktpdDIvU2hhcmVkL3F0L1VwZGF0ZUNodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKICNpZm5kZWYgVXBkYXRlQ2h1bmtfaAogI2RlZmluZSBVcGRhdGVDaHVua19oCiAKLSNp
bmNsdWRlICJNYXBwZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJNYXBwZWRNZW1vcnlQb29sLmgiCiAj
aW5jbHVkZSA8UUltYWdlPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>