<?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>80073</bug_id>
          
          <creation_ts>2012-03-01 17:09:14 -0800</creation_ts>
          <short_desc>WebKit2: remove NSPasteboard access for promised data from the WebProcess</short_desc>
          <delta_ts>2012-03-12 15:48:21 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>dglazkov</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>569081</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-03-01 17:09:14 -0800</bug_when>
    <thetext>The last step to remove access to the NSPasteboard from the WebProcess requires moving handling of the NSPromisedFileDrag to the UI process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569093</commentid>
    <comment_count>1</comment_count>
      <attachid>129782</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-03-01 17:26:13 -0800</bug_when>
    <thetext>Created attachment 129782
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569195</commentid>
    <comment_count>2</comment_count>
      <attachid>129782</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-01 20:02:45 -0800</bug_when>
    <thetext>Comment on attachment 129782
Patch

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

New failing tests:
compositing/reflections/nested-reflection-transformed.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569933</commentid>
    <comment_count>3</comment_count>
      <attachid>129782</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-02 14:13:28 -0800</bug_when>
    <thetext>Comment on attachment 129782
Patch

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

There is a number of names with WTF prefix in the patch (e.g. WRF::PassRefPtr). Please remove it.

WebCore:: is also unnecessary in most or all implementation files (e.g. in PageImpl.mm). Please remove it, too.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:76
&gt; +#import &lt;WebKit/WebNSFileManagerExtras.h&gt;
&gt; +#import &lt;WebKit/WebKitNSStringExtras.h&gt;

Can we really include WebKit files from WebKit2???

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2599
&gt; +    RetainPtr&lt;NSPasteboard&gt; pasteboard = [NSPasteboard pasteboardWithName:pasteboardName];

Why do we need to retain the pasteboard?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2643
&gt; +        NSData *data = _data-&gt;_promisedImage-&gt;data()-&gt;createNSData();

This looks like a leak.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2644
&gt; +        wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:data] autorelease];

Why autorelease? We prefer explicit RetainPtrs.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2648
&gt; +    if (wrapper == nil) {

WebKit style is to not compare to 0 or nil (just do &quot;if (!wrapper)&quot;).

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2656
&gt; +    NSString *path = [[dropDestination path] stringByAppendingPathComponent:[wrapper preferredFilename]];
&gt; +    path = [[NSFileManager defaultManager] _webkit_pathWithUniqueFilenameForPath:path];
&gt; +    if (![wrapper writeToFile:path atomically:NO updateFilenames:YES])

Where does the path come from? What parts of it can be influenced by a rogue WebProcess?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569941</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-03-02 14:21:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 129782 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=129782&amp;action=review
&gt; 
&gt; There is a number of names with WTF prefix in the patch (e.g. WRF::PassRefPtr). Please remove it.
Sure.
&gt; 
&gt; WebCore:: is also unnecessary in most or all implementation files (e.g. in PageImpl.mm). Please remove it, too.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:76
&gt; &gt; +#import &lt;WebKit/WebNSFileManagerExtras.h&gt;
&gt; &gt; +#import &lt;WebKit/WebKitNSStringExtras.h&gt;
&gt; 
&gt; Can we really include WebKit files from WebKit2???
We do it in some other places too.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2599
&gt; &gt; +    RetainPtr&lt;NSPasteboard&gt; pasteboard = [NSPasteboard pasteboardWithName:pasteboardName];
&gt; 
&gt; Why do we need to retain the pasteboard?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2643
&gt; &gt; +        NSData *data = _data-&gt;_promisedImage-&gt;data()-&gt;createNSData();
&gt; 
&gt; This looks like a leak.
Let me check.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2644
&gt; &gt; +        wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:data] autorelease];
&gt; 
&gt; Why autorelease? We prefer explicit RetainPtrs.
Copied from existing code.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2648
&gt; &gt; +    if (wrapper == nil) {
I&apos;ll fix this (I copied from existing code without thinking)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2656
&gt; &gt; +    NSString *path = [[dropDestination path] stringByAppendingPathComponent:[wrapper preferredFilename]];
&gt; &gt; +    path = [[NSFileManager defaultManager] _webkit_pathWithUniqueFilenameForPath:path];
&gt; &gt; +    if (![wrapper writeToFile:path atomically:NO updateFilenames:YES])
&gt; 
&gt; Where does the path come from? What parts of it can be influenced by a rogue WebProcess?
This is a path that we build starting from the image name that we retrieve from the image resource.
The image resource only provides the file name, the full path is built in the UI process.

thanks for the review. I&apos;ll double check the leak and, if confirmed, will post a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569951</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-02 14:39:42 -0800</bug_when>
    <thetext>&gt; &gt; Can we really include WebKit files from WebKit2???
&gt; We do it in some other places too.

I&apos;m still not convinced that it&apos;s OK. What does Sam say?

&gt; This is a path that we build starting from the image name that we retrieve from the image resource.
&gt; The image resource only provides the file name, the full path is built in the UI process.

Can the image name provided by WebProcess have &quot;..&quot; components in it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>570302</commentid>
    <comment_count>6</comment_count>
      <attachid>129782</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-03-04 16:35:57 -0800</bug_when>
    <thetext>Comment on attachment 129782
Patch

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

&gt; Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm:272
&gt; +void PageClientImpl::setPromisedData(const String&amp; pasteboardName, PassRefPtr&lt;WebCore::SharedBuffer&gt; imageBuffer, const String&amp; filename, const String&amp; extension, const String&amp; title, const String&amp; url, const String&amp; visibleUrl, WTF::PassRefPtr&lt;WebCore::SharedBuffer&gt; archiveBuffer)
&gt; +{
&gt; +    RefPtr&lt;WebCore::Image&gt; image = BitmapImage::create();

The WebCore::&apos;s should not be necessary here.  We also usually make sure that all the letters in URL are the same case.

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:76
&gt;&gt;&gt; +#import &lt;WebKit/WebKitNSStringExtras.h&gt;
&gt;&gt; 
&gt;&gt; Can we really include WebKit files from WebKit2???
&gt; 
&gt; We do it in some other places too.

We really should not be doing this.  We should move those things down to WebCore if we need them.

&gt; Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm:301
&gt; +    RefPtr&lt;SharedMemory&gt; sharedMemoryImage = SharedMemory::create(imageHandle, SharedMemory::ReadOnly);
&gt; +    RefPtr&lt;SharedBuffer&gt; imageBuffer = WebCore::SharedBuffer::create(static_cast&lt;unsigned char *&gt;(sharedMemoryImage-&gt;data()), imageSize);
&gt; +    RefPtr&lt;SharedBuffer&gt; archiveBuffer;
&gt; +    
&gt; +    if (!archiveHandle.isNull()) {
&gt; +        RefPtr&lt;SharedMemory&gt; sharedMemoryArchive = SharedMemory::create(archiveHandle, SharedMemory::ReadOnly);;
&gt; +        archiveBuffer = WebCore::SharedBuffer::create(static_cast&lt;unsigned char *&gt;(sharedMemoryArchive-&gt;data()), archiveSize);
&gt; +    }
&gt; +    m_pageClient-&gt;setPromisedData(pasteboardName, imageBuffer, filename, extension, title, url, visibleURL, archiveBuffer);

The WebCore:: should not be necessary.  And the * is on the wrong side for static_cast&lt;unsigned char *&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576343</commentid>
    <comment_count>7</comment_count>
      <attachid>131368</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-03-12 11:46:51 -0700</bug_when>
    <thetext>Created attachment 131368
Patch

This new patch addresses all the comments by Alexey and Sam.
The function that sanitizes the file name after receiving it from the WebProcess is filenameByFixingIllegalCharacters and is implemented in WebCoreNSStringExtras.mm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576345</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-12 11:49:29 -0700</bug_when>
    <thetext>Attachment 131368 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebKit2/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Source/WebCore/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 2 in 13 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>576352</commentid>
    <comment_count>9</comment_count>
      <attachid>131370</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-03-12 11:55:31 -0700</bug_when>
    <thetext>Created attachment 131370
Patch

Uploading new patch with bug number in the change log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576412</commentid>
    <comment_count>10</comment_count>
      <attachid>131370</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-12 12:55:47 -0700</bug_when>
    <thetext>Comment on attachment 131370
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        WebKit2: remove the last NSPasteboard access from the WebProcess

Is the patch title still correct? We are again getting file paths in WebProcess.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2691
&gt; +        NSData *data = [_data-&gt;_promisedImage-&gt;data()-&gt;createNSData() autorelease];

This should use RetainPtr, not autorelease.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576529</commentid>
    <comment_count>11</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-03-12 14:28:13 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 131370 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=131370&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        WebKit2: remove the last NSPasteboard access from the WebProcess
&gt; 
&gt; Is the patch title still correct? We are again getting file paths in WebProcess.

No, it is not. I&apos;ll change it.

&gt; &gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:2691
&gt; &gt; +        NSData *data = [_data-&gt;_promisedImage-&gt;data()-&gt;createNSData() autorelease];
&gt; 
&gt; This should use RetainPtr, not autorelease.
Will do.

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>576638</commentid>
    <comment_count>12</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2012-03-12 15:48:21 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/110494</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129782</attachid>
            <date>2012-03-01 17:26:13 -0800</date>
            <delta_ts>2012-03-12 11:46:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>dragclient.txt</filename>
            <type>text/plain</type>
            <size>29255</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTAzLTAxICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0MjogcmVtb3ZlIHRo
ZSBsYXN0IE5TUGFzdGVib2FyZCBhY2Nlc3MgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgwMDczCisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS85OTcxODc2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46IEV4cG9ydGluZyB0d28gYWRkaXRpb25h
bCBtZXRob2RzIG9mIHRoZSBJbWFnZSBjbGFzcy4KKwogMjAxMi0wMy0wMSAgQWRhbSBCYXJ0aCAg
PGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBsYXN0IEVOQUJMRUQoSU5ERVhF
RF9EQVRBQkFTRSkgaWZkZWYgZnJvbSBXZWJDb3JlIHByb3BlcgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4JKHJldmlzaW9uIDEwOTQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNiArMTU2LDggQEAgX19aTjdXZWJDb3JlMTBoYW5kQ3Vy
c29yRXYKIF9fWk43V2ViQ29yZTEwc2V0Q29va2llc0VQTlNfOERvY3VtZW50RVJLTlNfNEtVUkxF
UktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMHRvRG9jdW1lbnRFTjNKU0M3SlNWYWx1ZUUK
IF9fWk43V2ViQ29yZTExQml0bWFwSW1hZ2VDMUVQN0NHSW1hZ2VQTlNfMTNJbWFnZU9ic2VydmVy
RQorX19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZUMxRVBOU18xM0ltYWdlT2JzZXJ2ZXJFCitfX1pO
N1dlYkNvcmU1SW1hZ2U3c2V0RGF0YUVOM1dURjEwUGFzc1JlZlB0cklOU18xMlNoYXJlZEJ1ZmZl
ckVFRWIKIF9fWk43V2ViQ29yZTExQ2FjaGVkRnJhbWUyM2NhY2hlZEZyYW1lUGxhdGZvcm1EYXRh
RXYKIF9fWk43V2ViQ29yZTExQ2FjaGVkRnJhbWUyNnNldENhY2hlZEZyYW1lUGxhdGZvcm1EYXRh
RU4zV1RGMTBQYXNzT3duUHRySU5TXzIzQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGFFRUUKIF9fWk43
V2ViQ29yZTExQ2FjaGVkSW1hZ2U1aW1hZ2VFdgpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5
NDY1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzggQEAKKzIwMTItMDMtMDEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWJLaXQyOiByZW1vdmUgdGhlIGxhc3QgTlNQYXN0ZWJvYXJkIGFjY2VzcyBm
cm9tIHRoZSBXZWJQcm9jZXNzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODAwNzMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzk5NzE4NzY+CisgICAg
ICAgIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIHJlbW92ZXMgdGhlIGxhc3QgcmVtYWluaW5nIGFjY2VzcyB0byBOU1Bhc3RlYm9hcmQg
ZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAgVGhlIGNvZGUgaW4gV2ViRHJhZ0NsaWVudDo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlIG5vdyBwYWNrYWdlcyBhbGwgdGhlIGRhdGEKKyAgICAg
ICAgcmVxdWlyZWQgZm9yIHRoZSBkcmFnIGFuZCB0aGUgcHJvbWlzZWQgZHJhZyB0eXBlcyBhbmQg
c2VuZHMgb25lIHJlcXVlc3QgdG8gdGhlIFVJCisgICAgICAgIHByb2Nlc3MgdGhhdCB3aWxsIHBs
YWNlIHRoZSBkYXRhIGluIHRoZSBOU1Bhc3RlYm9hcmQgd2hlbiBhcHByb3ByaWF0ZS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6IEFkZGVkIHNldFByb21p
c2VkRGF0YSBtZXRob2QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudElt
cGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzZXRQcm9taXNlZERhdGEp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKG1hdGNo
ZXNFeHRlbnNpb25PckVxdWl2YWxlbnQpOiBNb3ZlZCBzdGF0aWMgZnVuY3Rpb24gZnJvbSBXZWJE
cmFnQ2xpZW50TWFjLm1tLgorICAgICAgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgaGF2ZSBiZWVu
IGFkZGVkIHRvIHN1cHBvcnQgcHJvbWlzZWQgZGF0YSB0eXBlcy4KKyAgICAgICAgKC1bV0tWaWV3
IF9zZXRQcm9taXNlZERhdGE6V2ViQ29yZTo6d2l0aEZpbGVOYW1lOndpdGhFeHRlbnNpb246d2l0
aFRpdGxlOndpdGhVUkw6d2l0aFZpc2libGVVUkw6d2l0aEFyY2hpdmU6V2ViQ29yZTo6Zm9yUGFz
dGVib2FyZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IHBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6XSk6
CisgICAgICAgICgtW1dLVmlldyBwYXN0ZWJvYXJkOnByb3ZpZGVEYXRhRm9yVHlwZTpdKToKKyAg
ICAgICAgKC1bV0tWaWV3IG5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb246
XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDogQWRkZWQg
X3NldFByb21pc2VkRGF0YSB0byB0aGUgaW50ZXJmYWNlLgorICAgICAgICAqIFVJUHJvY2Vzcy9Q
YWdlQ2xpZW50Lmg6IEFkZGVkIHNldFByb21pc2VkRGF0YSBpbnRlcmZhY2UgbWV0aG9kLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZCBTZXRQcm9taXNlZERhdGEgbWVzc2FnZS4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpzZXRQcm9taXNlZERhdGEpOiBBZGRlZCBpbXBsZW1lbnRhdGlvbiB0
byB0aGUgbWVzc2FnZSBoYW5kbGVyLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRHJhZ0NsaWVudC5jcHA6IFJlbW92ZWQgdW5uZWNlc3NhcnkgZHJhZ0VuZGVkIG1ldGhv
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDog
UmVtb3ZlZCBkcmFnRW5kZWQgYW5kIG1lbWJlciB2YXJpYWJsZXMgdG8KKyAgICAgICAgc3VwcG9y
dCBwcm9taXNlZCBkYXRhIGFuZCBkcmFnIHNvdXJjZS4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UpOiBBZGRlZCBuZXcgaW1wbGVt
ZW50YXRpb24gbWVzc2FnZSBiYXNlZC4KKwogMjAxMi0wMy0wMSAgQW5kcmFzIEJlY3NpICA8YW5k
cmFzLmJlY3NpQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gTWFrZSB0aGUgaW50ZXJh
Y3Rpb24gd2l0aCB0aGUgRmxpY2thYmxlIHdvcmsgb24gdGhlIE45CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDEwOTQwMykKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsxMzQs
OCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKGJvb2wg
dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXNldFRleHRJ
bnB1dFN0YXRlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBtYWtlRmlyc3RSZXNwb25kZXIoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByb21pc2VkRGF0YShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gaW1hZ2VCdWZmZXIs
IGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBjb25zdCBT
dHJpbmcmIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZUJ1ZmZlcikgPSAwOwogI2VuZGlmCiAjaWYgUExBVEZP
Uk0oV0lOKQogICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZWQoYm9v
bCkgPSAwOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2
aXNpb24gMTA5NDAzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MTEsNiArNTExLDggQEAgcHVibGljOgogICAgIHZvaWQgZHJh
Z0VuZGVkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pOwogI2lm
IFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBkcmFn
SW1hZ2VIYW5kbGUsIGJvb2wgaXNMaW5rRHJhZyk7CisgICAgdm9pZCBzZXRQcm9taXNlZERhdGEo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUm
IGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUs
IGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZpc2libGVV
UkwsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBhcmNoaXZlSGFuZGxlLCB1aW50NjRfdCBh
cmNoaXZlU2l6ZSk7CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBzdGFydERy
YWdEcm9wKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBpbWFnZVBvaW50LCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZHJhZ1BvaW50LCB1aW50NjRfdCBva0VmZmVjdCwgY29uc3QgSGFzaE1hcDxV
SU5ULCBWZWN0b3I8U3RyaW5nPiA+JiBkYXRhTWFwLCB1aW50NjRfdCBmaWxlU2l6ZSwgY29uc3Qg
U3RyaW5nJiBwYXRobmFtZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGZpbGVDb250ZW50
SGFuZGxlLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkcmFnSW1hZ2VTaXplLCBjb25zdCBTaGFy
ZWRNZW1vcnk6OkhhbmRsZSYgZHJhZ0ltYWdlSGFuZGxlLCBib29sIGlzTGlua0RyYWcpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiAxMDk0MDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDcgQEAgbWVz
c2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rp
b24oV2ViQ29yZTo6RHJhZ1Nlc3Npb24gZHJhZ1Nlc3Npb24pCiAjaWYgUExBVEZPUk0oTUFDKQog
ICAgIFNldERyYWdJbWFnZShXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViS2l0
OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBkcmFnSW1hZ2UsIGJvb2wgbGlua0RyYWcpCisgICAg
U2V0UHJvbWlzZWREYXRhKFdURjo6U3RyaW5nIHBhc3RlYm9hcmROYW1lLCBXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNpemUsIFdURjo6U3Ry
aW5nIGZpbGVuYW1lLCBXVEY6OlN0cmluZyBleHRlbnNpb24sIFdURjo6U3RyaW5nIHRpdGxlLCBX
VEY6OlN0cmluZyB1cmwsIFdURjo6U3RyaW5nIHZpc2libGVVUkwsIFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpIYW5kbGUgYXJjaGl2ZUhhbmRsZSwgdWludDY0X3QgYXJjaGl2ZVNpemUpCiAjZW5kaWYK
ICNpZiBQTEFURk9STShXSU4pCiAgICAgU3RhcnREcmFnRHJvcChXZWJDb3JlOjpJbnRQb2ludCBp
bWFnZVBvaW50LCBXZWJDb3JlOjpJbnRQb2ludCBkcmFnUG9pbnQsIHVpbnQ2NF90IG9rRWZmZWN0
LCBIYXNoTWFwPFVJTlQsVmVjdG9yPFN0cmluZz4gPiBkYXRhTWFwLCB1aW50NjRfdCBmaWxlU2l6
ZSwgU3RyaW5nIHBhdGhuYW1lLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGZpbGVDb250
ZW50SGFuZGxlLCBXZWJDb3JlOjpJbnRTaXplIGRyYWdJbWFnZVNpemUsIFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpIYW5kbGUgZHJhZ0ltYWdlLCBib29sIGxpbmtEcmFnKQpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lv
biAxMDk0MDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw4IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQm
LCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwogICAgIHZpcnR1YWwgYm9vbCBl
eGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGll
bnRQb3NpdGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSwgYm9vbCBp
c0xpbmtEcmFnKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvbWlzZWREYXRhKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBpbWFn
ZUJ1ZmZlciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24s
IGNvbnN0IFN0cmluZyYgdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2aXNpYmxlVXJsLCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBhcmNoaXZlQnVmZmVyKTsKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVGV4dElucHV0U3RhdGUoYm9vbCB1cGRhdGVTZWN1cmVJbnB1dFN0YXRlKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRUZXh0SW5wdXRTdGF0ZSgpOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNp
b24gMTA5NDAzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2LDEyICszNiwxNSBAQAogI2ltcG9ydCAiV2Vi
Q29udGV4dE1lbnVQcm94eU1hYy5oIgogI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgog
I2ltcG9ydCAiV2ViUG9wdXBNZW51UHJveHlNYWMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvQml0bWFw
SW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ3Vyc29yLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zs
b2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb3VuZGF0aW9uRXh0cmFzLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9JbWFnZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9ydCA8
d3RmL1Bhc3NPd25QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbXBvcnQg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMjY0LDYgKzI2NywxMyBAQCB2b2lkIFBhZ2VDbGll
bnRJbXBsOjpzZXREcmFnSW1hZ2UoY29uc3QgCiAgICAgW21fd2tWaWV3IF9zZXREcmFnSW1hZ2U6
ZHJhZ05TSW1hZ2UuZ2V0KCkgYXQ6Y2xpZW50UG9zaXRpb24gbGlua0RyYWc6aXNMaW5rRHJhZ107
CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldFByb21pc2VkRGF0YShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gaW1hZ2VC
dWZmZXIsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2aXNp
YmxlVXJsLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBhcmNoaXZlQnVm
ZmVyKQoreworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKCk7CisgICAgaW1hZ2UtPnNldERhdGEoaW1hZ2VCdWZmZXIuZ2V0KCksIHRydWUpOwor
ICAgIFttX3drVmlldyBfc2V0UHJvbWlzZWREYXRhOmltYWdlLmdldCgpIHdpdGhGaWxlTmFtZTpm
aWxlbmFtZSB3aXRoRXh0ZW5zaW9uOmV4dGVuc2lvbiB3aXRoVGl0bGU6dGl0bGUgd2l0aFVSTDp1
cmwgd2l0aFZpc2libGVVUkw6dmlzaWJsZVVybCB3aXRoQXJjaGl2ZTphcmNoaXZlQnVmZmVyLmdl
dCgpIGZvclBhc3RlYm9hcmQ6cGFzdGVib2FyZE5hbWVdOworfQorCiB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjp1cGRhdGVUZXh0SW5wdXRTdGF0ZShib29sIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUpCiB7
CiAgICAgW21fd2tWaWV3IF91cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGluZ1NlY3VyZUlucHV0
U3RhdGU6dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAxMDk0MDMpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTYzLDYg
KzYzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KICNpbXBvcnQgPFdlYkNvcmUv
RHJhZ1Nlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0ltYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPFdl
YkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbGl6ZWRTdHJpbmdz
Lmg+CkBAIC03MCw2ICs3MSw5IEBACiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1JlZ2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SdW5Mb29wLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYk5T
RmlsZU1hbmFnZXJFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYktpdC9XZWJLaXROU1N0cmluZ0V4dHJh
cy5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3dGYvUmVm
UHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CkBAIC0xOTMsNiArMTk3LDkgQEAgQGlu
dGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogICAgIC8vIFdlIHVzZSB0aGlzIGZsYWcg
dG8gZGV0ZXJtaW5lIHdoZW4gd2UgbmVlZCB0byBwYWludCB0aGUgYmFja2dyb3VuZCAod2hpdGUg
b3IgY2xlYXIpCiAgICAgLy8gd2hlbiB0aGUgd2ViIHByb2Nlc3MgaXMgdW5yZXNwb25zaXZlIG9y
IHRha2VzIHRvbyBsb25nIHRvIHBhaW50LgogICAgIEJPT0wgX3dpbmRvd0hhc1ZhbGlkQmFja2lu
Z1N0b3JlOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gX3Byb21pc2VkSW1hZ2U7CisgICAg
U3RyaW5nIF9wcm9taXNlZEZpbGVuYW1lOworICAgIFN0cmluZyBfcHJvbWlzZWRVUkw7CiB9CiAK
IEBlbmQKQEAgLTI1NzgsNiArMjU4NSw4MyBAQCAtICh2b2lkKV9zZXREcmFnSW1hZ2U6KE5TSW1h
Z2UgKilpbWFnZSBhCiAgICAgX2RhdGEtPl9kcmFnSGFzU3RhcnRlZCA9IE5POwogfQogCitzdGF0
aWMgYm9vbCBtYXRjaGVzRXh0ZW5zaW9uT3JFcXVpdmFsZW50KE5TU3RyaW5nICpmaWxlbmFtZSwg
TlNTdHJpbmcgKmV4dGVuc2lvbikKK3sKKyAgICBOU1N0cmluZyAqZXh0ZW5zaW9uQXNTdWZmaXgg
PSBbQCIuIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpleHRlbnNpb25dOworICAgIHJldHVybiBb
ZmlsZW5hbWUgX3dlYmtpdF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXg6ZXh0ZW5zaW9uQXNTdWZm
aXhdCisgICAgfHwgKFtleHRlbnNpb24gX3dlYmtpdF9pc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9T
dHJpbmc6QCJqcGVnIl0KKyAgICAgICAgJiYgW2ZpbGVuYW1lIF93ZWJraXRfaGFzQ2FzZUluc2Vu
c2l0aXZlU3VmZml4OkAiLmpwZyJdKTsKK30KKworLSAodm9pZClfc2V0UHJvbWlzZWREYXRhOihX
ZWJDb3JlOjpJbWFnZSAqKWltYWdlIHdpdGhGaWxlTmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSB3
aXRoRXh0ZW5zaW9uOihOU1N0cmluZyAqKWV4dGVuc2lvbiB3aXRoVGl0bGU6KE5TU3RyaW5nICop
dGl0bGUgd2l0aFVSTDooTlNTdHJpbmcgKil1cmwgd2l0aFZpc2libGVVUkw6KE5TU3RyaW5nICop
dmlzaWJsZVVybCB3aXRoQXJjaGl2ZTooV2ViQ29yZTo6U2hhcmVkQnVmZmVyKikgYXJjaGl2ZUJ1
ZmZlciBmb3JQYXN0ZWJvYXJkOihOU1N0cmluZyAqKXBhc3RlYm9hcmROYW1lCisKK3sKKyAgICBS
ZXRhaW5QdHI8TlNQYXN0ZWJvYXJkPiBwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJv
YXJkV2l0aE5hbWU6cGFzdGVib2FyZE5hbWVdOworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJh
eT4gdHlwZXMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdpdGhPYmplY3Rz
Ok5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZSwgbmlsXSk7CisgICAgCisgICAgW3R5cGVzLmdldCgp
IGFkZE9iamVjdHNGcm9tQXJyYXk6YXJjaGl2ZUJ1ZmZlciA/IFBhc3RlYm9hcmRUeXBlczo6Zm9y
SW1hZ2VzV2l0aEFyY2hpdmUoKSA6IFBhc3RlYm9hcmRUeXBlczo6Zm9ySW1hZ2VzKCldOworICAg
IFtwYXN0ZWJvYXJkLmdldCgpIGRlY2xhcmVUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpzZWxmXTsK
KyAgICBpZiAoIW1hdGNoZXNFeHRlbnNpb25PckVxdWl2YWxlbnQoZmlsZW5hbWUsIGV4dGVuc2lv
bikpCisgICAgICAgIGZpbGVuYW1lID0gW1tmaWxlbmFtZSBzdHJpbmdCeUFwcGVuZGluZ1N0cmlu
ZzpAIi4iXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpleHRlbnNpb25dOworCisgICAgW3Bhc3Rl
Ym9hcmQuZ2V0KCkgc2V0U3RyaW5nOnVybCBmb3JUeXBlOk5TVVJMUGJvYXJkVHlwZV07CisgICAg
W3Bhc3RlYm9hcmQuZ2V0KCkgc2V0U3RyaW5nOnZpc2libGVVcmwgZm9yVHlwZTpQYXN0ZWJvYXJk
VHlwZXM6OldlYlVSTFBib2FyZFR5cGVdOworICAgIFtwYXN0ZWJvYXJkLmdldCgpIHNldFN0cmlu
Zzp0aXRsZSBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMTmFtZVBib2FyZFR5cGVdOwor
ICAgIFtwYXN0ZWJvYXJkLmdldCgpIHNldFByb3BlcnR5TGlzdDpbTlNBcnJheSBhcnJheVdpdGhP
YmplY3RzOltOU0FycmF5IGFycmF5V2l0aE9iamVjdDp1cmxdLCBbTlNBcnJheSBhcnJheVdpdGhP
YmplY3Q6dGl0bGVdLCBuaWxdIGZvclR5cGU6UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxzV2l0aFRp
dGxlc1Bib2FyZFR5cGVdOworICAgIFtwYXN0ZWJvYXJkLmdldCgpIHNldFByb3BlcnR5TGlzdDpb
TlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZXh0ZW5zaW9uXSBmb3JUeXBlOk5TRmlsZXNQcm9taXNl
UGJvYXJkVHlwZV07CisKKyAgICBpZiAoYXJjaGl2ZUJ1ZmZlcikKKyAgICAgICAgW3Bhc3RlYm9h
cmQuZ2V0KCkgc2V0RGF0YTpbYXJjaGl2ZUJ1ZmZlci0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVh
c2VdIGZvclR5cGU6UGFzdGVib2FyZFR5cGVzOjpXZWJBcmNoaXZlUGJvYXJkVHlwZV07CisKKyAg
ICBfZGF0YS0+X3Byb21pc2VkSW1hZ2UgPSBpbWFnZTsKKyAgICBfZGF0YS0+X3Byb21pc2VkRmls
ZW5hbWUgPSBmaWxlbmFtZTsKKyAgICBfZGF0YS0+X3Byb21pc2VkVVJMID0gdXJsOworfQorCist
ICh2b2lkKXBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQK
K3sKKyAgICBfZGF0YS0+X3Byb21pc2VkSW1hZ2UgPSAwOworICAgIF9kYXRhLT5fcHJvbWlzZWRG
aWxlbmFtZSA9ICIiOworICAgIF9kYXRhLT5fcHJvbWlzZWRVUkwgPSAiIjsKK30KKworLSAodm9p
ZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlw
ZTooTlNTdHJpbmcgKil0eXBlCit7CisgICAgLy8gRklYTUU6IG5lZWQgdG8gc3VwcG9ydCBOU1JU
RkRQYm9hcmRUeXBlCisKKyAgICBpZiAoW3R5cGUgaXNFcXVhbDpOU1RJRkZQYm9hcmRUeXBlXSAm
JiBfZGF0YS0+X3Byb21pc2VkSW1hZ2UpIHsKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YToo
TlNEYXRhICopX2RhdGEtPl9wcm9taXNlZEltYWdlLT5nZXRUSUZGUmVwcmVzZW50YXRpb24oKSBm
b3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOworICAgICAgICBfZGF0YS0+X3Byb21pc2VkSW1hZ2Ug
PSAwOworICAgIH0KK30KKworLSAoTlNBcnJheSAqKW5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBl
ZEF0RGVzdGluYXRpb246KE5TVVJMICopZHJvcERlc3RpbmF0aW9uCit7CisgICAgTlNGaWxlV3Jh
cHBlciAqd3JhcHBlciA9IG5pbDsKKyAgICAKKyAgICBpZiAoX2RhdGEtPl9wcm9taXNlZEltYWdl
KSB7ICAgICAgICAKKyAgICAgICAgTlNEYXRhICpkYXRhID0gX2RhdGEtPl9wcm9taXNlZEltYWdl
LT5kYXRhKCktPmNyZWF0ZU5TRGF0YSgpOworICAgICAgICB3cmFwcGVyID0gW1tbTlNGaWxlV3Jh
cHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOmRhdGFdIGF1dG9yZWxlYXNl
XTsKKyAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6X2RhdGEtPl9wcm9taXNl
ZEZpbGVuYW1lXTsKKyAgICB9CisgICAgCisgICAgaWYgKHdyYXBwZXIgPT0gbmlsKSB7CisgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBmaWxlLiIpOworICAgICAgICBy
ZXR1cm4gbmlsOworICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogUmVwb3J0IGFuIGVycm9yIGlm
IHdlIGZhaWwgdG8gY3JlYXRlIGEgZmlsZS4KKyAgICBOU1N0cmluZyAqcGF0aCA9IFtbZHJvcERl
c3RpbmF0aW9uIHBhdGhdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbd3JhcHBlciBw
cmVmZXJyZWRGaWxlbmFtZV1dOworICAgIHBhdGggPSBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdIF93ZWJraXRfcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGg6cGF0aF07CisgICAg
aWYgKCFbd3JhcHBlciB3cml0ZVRvRmlsZTpwYXRoIGF0b21pY2FsbHk6Tk8gdXBkYXRlRmlsZW5h
bWVzOllFU10pCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBmaWxl
IHZpYSAtW05TRmlsZVdyYXBwZXIgd3JpdGVUb0ZpbGU6YXRvbWljYWxseTp1cGRhdGVGaWxlbmFt
ZXM6XSIpOworICAgIAorICAgIGlmICghX2RhdGEtPl9wcm9taXNlZFVSTC5pc0VtcHR5KCkpCisg
ICAgICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtpdF9zZXRNZXRhZGF0
YVVSTDooTlNTdHJpbmcgKilfZGF0YS0+X3Byb21pc2VkVVJMIHJlZmVycmVyOm5pbCBhdFBhdGg6
cGF0aF07CisgICAgCisgICAgcmV0dXJuIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbcGF0aCBs
YXN0UGF0aENvbXBvbmVudF1dOworfQorCiAtICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRl
CiB7CiAgICAgaWYgKCFbW3NlbGYgd2luZG93XSBpc0tleVdpbmRvd10gfHwgIVtzZWxmIF9pc0Zv
Y3VzZWRdKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJ
bnRlcm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDEwOTQwMykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDggQEAgbmFtZXNwYWNlIENvcmVJUEMgewogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
c3RydWN0IEtleXByZXNzQ29tbWFuZDsKKyAgICBjbGFzcyBJbWFnZTsKKyAgICBjbGFzcyBTaGFy
ZWRCdWZmZXI7CiB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNzcsNiArNzksNyBAQCBAaW50
ZXJmYWNlIFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV9maW5kU3RyaW5nSW5DdXN0b21SZXBy
ZXNlbnRhdGlvbjooTlNTdHJpbmcgKilzdHJpbmcgd2l0aEZpbmRPcHRpb25zOihXZWJLaXQ6OkZp
bmRPcHRpb25zKW9wdGlvbnMgbWF4TWF0Y2hDb3VudDooTlNVSW50ZWdlciljb3VudDsKIC0gKHZv
aWQpX2NvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb246KE5TU3RyaW5nICop
c3RyaW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9ucylvcHRpb25zIG1heE1h
dGNoQ291bnQ6KE5TVUludGVnZXIpY291bnQ7CiAtICh2b2lkKV9zZXREcmFnSW1hZ2U6KE5TSW1h
Z2UgKilpbWFnZSBhdDooTlNQb2ludCljbGllbnRQb2ludCBsaW5rRHJhZzooQk9PTClsaW5rRHJh
ZzsKKy0gKHZvaWQpX3NldFByb21pc2VkRGF0YTooV2ViQ29yZTo6SW1hZ2UgKilpbWFnZSB3aXRo
RmlsZU5hbWU6KE5TU3RyaW5nICopZmlsZW5hbWUgd2l0aEV4dGVuc2lvbjooTlNTdHJpbmcgKill
eHRlbnNpb24gd2l0aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdpdGhVUkw6KE5TU3RyaW5nICop
dXJsIHdpdGhWaXNpYmxlVVJMOihOU1N0cmluZyAqKXZpc2libGVVcmwgd2l0aEFyY2hpdmU6KFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlciopIGFyY2hpdmVCdWZmZXIgZm9yUGFzdGVib2FyZDooTlNTdHJp
bmcgKilwYXN0ZWJvYXJkTmFtZTsKIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGU7CiAt
ICh2b2lkKV91cGRhdGVUZXh0SW5wdXRTdGF0ZUluY2x1ZGluZ1NlY3VyZUlucHV0U3RhdGU6KEJP
T0wpdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZTsKIC0gKHZvaWQpX3Jlc2V0VGV4dElucHV0U3RhdGU7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1h
Yy5tbQkocmV2aXNpb24gMTA5NDAzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9X
ZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBv
cnQgIlRleHRDaGVja2VyLmgiCiAjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQg
IldlYlByb2Nlc3NQcm94eS5oIgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNp
bXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaD4KIApAQCAtMjg2LDYgKzI4NywyMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0RHJhZ0ltYWdlKGNvbnN0IFdlCiAgICAgbV9wYWdlQ2xpZW50LT5zZXREcmFnSW1hZ2UoY2xp
ZW50UG9zaXRpb24sIGRyYWdJbWFnZS5yZWxlYXNlKCksIGlzTGlua0RyYWcpOwogfQogCit2b2lk
IFdlYlBhZ2VQcm94eTo6c2V0UHJvbWlzZWREYXRhKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBpbWFnZUhhbmRsZSwgdWludDY0X3QgaW1h
Z2VTaXplLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSwg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVSTCwgY29uc3QgU2hhcmVk
TWVtb3J5OjpIYW5kbGUmIGFyY2hpdmVIYW5kbGUsIHVpbnQ2NF90IGFyY2hpdmVTaXplKQorewor
ICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUltYWdlID0gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoaW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVh
dGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlJbWFnZS0+ZGF0YSgp
KSwgaW1hZ2VTaXplKTsKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlQnVmZmVyOwor
ICAgIAorICAgIGlmICghYXJjaGl2ZUhhbmRsZS5pc051bGwoKSkgeworICAgICAgICBSZWZQdHI8
U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlBcmNoaXZlID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUo
YXJjaGl2ZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7OworICAgICAgICBhcmNoaXZl
QnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhciAqPihzaGFyZWRNZW1vcnlBcmNoaXZlLT5kYXRhKCkpLCBhcmNoaXZlU2l6ZSk7Cisg
ICAgfQorICAgIG1fcGFnZUNsaWVudC0+c2V0UHJvbWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBp
bWFnZUJ1ZmZlciwgZmlsZW5hbWUsIGV4dGVuc2lvbiwgdGl0bGUsIHVybCwgdmlzaWJsZVVSTCwg
YXJjaGl2ZUJ1ZmZlcik7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFy
eUxvb2t1cEF0TG9jYXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCiB7CiAg
ICAgaWYgKCFpc1ZhbGlkKCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJKHJldmlzaW9uIDEw
OTQwMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEyICs1OCw2IEBAIHZvaWQgV2ViRHJh
Z0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVIKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JN
KE1BQykKLXZvaWQgV2ViRHJhZ0NsaWVudDo6ZHJhZ0VuZGVkKCkKLXsKLX0KLSNlbmRpZgotCiB2
b2lkIFdlYkRyYWdDbGllbnQ6OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkKIHsKICAgICBkZWxl
dGUgdGhpczsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRHJhZ0NsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCShyZXZpc2lvbiAxMDk0MDMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4LDYgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0Ns
aWVudC5oPgogCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBXS1Bhc3RlYm9hcmRGaWxl
UHJvbWlzZU93bmVyOwotT0JKQ19DTEFTUyBXS1Bhc3RlYm9hcmRPd25lcjsKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZTsKQEAgLTU2LDE2ICs1MSw5IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBET01FbGVtZW50KiwgTlNVUkwqLCBOU1N0cmluZyosIFdl
YkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBkcmFn
RW5kZWQoKSBPVkVSUklERTsKLQogICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ry
b3llZCgpIE9WRVJSSURFOwogCiAgICAgV2ViUGFnZSogbV9wYWdlOwotICAgIAotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBSZXRhaW5QdHI8V0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lcj4gbV9m
aWxlUHJvbWlzZU93bmVyOwotICAgIFJldGFpblB0cjxXS1Bhc3RlYm9hcmRPd25lcj4gbV9wYXN0
ZWJvYXJkT3duZXI7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVu
dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCShyZXZpc2lvbiAxMDk0MDMpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyOCArNTQsNiBAQAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCi0vLyBJbnRlcm5hbCBBcHBLaXQgY2xh
c3MuIElmIHRoZSBwYXN0ZWJvYXJkIGhhbmRsaW5nIHdhcyBpbiB0aGUgc2FtZSBwcm9jZXNzCi0v
LyB0aGF0IGNhbGxlZCB0aGUgZHJhZ0ltYWdlIG1ldGhvZCwgdGhpcyB3b3VsZCBiZSBjcmVhdGVk
IGF1dG9tYXRpY2FsbHkuCi0vLyBDcmVhdGUgaXQgZXhwbGljaXRseSBiZWNhdXNlIGRyYWdJbWFn
ZSBpcyBjYWxsZWQgaW4gdGhlIFVJIHByb2Nlc3MuCi1AaW50ZXJmYWNlIE5TRmlsZVByb21pc2VE
cmFnU291cmNlIDogTlNPYmplY3QKLXsKLSAgICBpZCBfZHJhZ1NvdXJjZTsKLSAgICBjaGFyIF91
bmtub3duRmllbGRzWzI1Nl07Ci19Ci0tIChpZClpbml0V2l0aFNvdXJjZTooaWQpZHJhZ1NvdXJj
ZTsKLS0gKHZvaWQpc2V0VHlwZXM6KE5TQXJyYXkgKil0eXBlcyBvblBhc3RlYm9hcmQ6KE5TUGFz
dGVib2FyZCAqKXBhc3RlYm9hcmQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgV0tQYXN0ZWJvYXJkRmls
ZVByb21pc2VPd25lciA6IE5TRmlsZVByb21pc2VEcmFnU291cmNlCi1AZW5kCi0KLUBpbnRlcmZh
Y2UgV0tQYXN0ZWJvYXJkT3duZXIgOiBOU09iamVjdAotewotICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPFdlYkNvcmU6OkNhY2hlZEltYWdlPiBfaW1hZ2U7Ci19Ci0tIChpZClpbml0V2l0aEltYWdl
OihXZWJDb3JlOjpDYWNoZWRJbWFnZSopaW1hZ2U7Ci1AZW5kCi0KIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlcnRJbWFnZVRvQml0
bWFwKE5TSW1hZ2UgKmltYWdlLCBjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtMTE5LDEyICs5Nyw2
IEBAIHN0YXRpYyBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UKICAgICByZXR1cm4g
aW1hZ2U7CiB9CiAKLXN0YXRpYyBOU0FycmF5ICphcnJheUZvclVSTHNXaXRoVGl0bGVzKE5TVVJM
ICpVUkwsIE5TU3RyaW5nICp0aXRsZSkKLXsKLSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W1VSTCBfd2ViX29yaWdpbmFsRGF0YUFz
U3RyaW5nXV0sCi0gICAgICAgIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDpbdGl0bGUgX3dlYmtp
dF9zdHJpbmdCeVRyaW1taW5nV2hpdGVzcGFjZV1dLCBuaWxdOwotfQotCiB2b2lkIFdlYkRyYWdD
bGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lLCBET01FbGVtZW50ICplbGVtZW50LCBOU1VSTCAqVVJMLCBOU1N0cmluZyAqdGl0bGUsIFdl
YkNvcmU6OkZyYW1lKikKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7CkBAIC0xNDksMTkwICsxMjEs
MjcgQEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSQogCiAgICAgUmVm
UHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUo
Y29yZUVsZW1lbnQpOwogCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0eXBlcyhBZG9w
dE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6TlNGaWxlc1Byb21p
c2VQYm9hcmRUeXBlLCBuaWxdKTsKLSAgICBbdHlwZXMuZ2V0KCkgYWRkT2JqZWN0c0Zyb21BcnJh
eTphcmNoaXZlID8gUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpIDogUGFz
dGVib2FyZFR5cGVzOjpmb3JJbWFnZXMoKV07Ci0KLSAgICBtX3Bhc3RlYm9hcmRPd25lci5hZG9w
dE5TKFtbV0tQYXN0ZWJvYXJkT3duZXIgYWxsb2NdIGluaXRXaXRoSW1hZ2U6aW1hZ2VdKTsKLSAg
ICBtX2ZpbGVQcm9taXNlT3duZXIuYWRvcHROUyhbKFdLUGFzdGVib2FyZEZpbGVQcm9taXNlT3du
ZXIgKilbV0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6
bV9wYXN0ZWJvYXJkT3duZXIuZ2V0KCldKTsKLQotICAgIE5TUGFzdGVib2FyZCogcGFzdGVib2Fy
ZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXTsKLSAg
ICBbcGFzdGVib2FyZCBkZWNsYXJlVHlwZXM6dHlwZXMuZ2V0KCkgb3duZXI6bV9wYXN0ZWJvYXJk
T3duZXIubGVha1JlZigpXTsgICAgCi0KLSAgICBbcGFzdGVib2FyZCBzZXRQcm9wZXJ0eUxpc3Q6
W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmV4dGVuc2lvbl0gZm9yVHlwZTpOU0ZpbGVzUHJvbWlz
ZVBib2FyZFR5cGVdOwotCi0gICAgW21fZmlsZVByb21pc2VPd25lci5nZXQoKSBzZXRUeXBlczpb
cGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RGb3JUeXBlOk5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZV0g
b25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotCi0gICAgW1VSTCB3cml0ZVRvUGFzdGVib2FyZDpw
YXN0ZWJvYXJkXTsKLQotICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzpbVVJMIF93ZWJfb3JpZ2lu
YWxEYXRhQXNTdHJpbmddIGZvclR5cGU6UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxQYm9hcmRUeXBl
XTsKLQotICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzp0aXRsZSBmb3JUeXBlOlBhc3RlYm9hcmRU
eXBlczo6V2ViVVJMTmFtZVBib2FyZFR5cGVdOwotCi0gICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5n
OltVUkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ10gZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVd
OwotCi0gICAgW3Bhc3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OmFycmF5Rm9yVVJMc1dpdGhUaXRs
ZXMoVVJMLCB0aXRsZSkgZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6OldlYlVSTHNXaXRoVGl0bGVz
UGJvYXJkVHlwZV07Ci0KLSAgICBpZiAoYXJjaGl2ZSkKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0
RGF0YTooTlNEYXRhICopYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkgZm9y
VHlwZTpQYXN0ZWJvYXJkVHlwZXM6OldlYkFyY2hpdmVQYm9hcmRUeXBlXTsKLX0KLQotdm9pZCBX
ZWJEcmFnQ2xpZW50OjpkcmFnRW5kZWQoKQotewotICAgIC8vIFRoZSBkcmFnZ2VkSW1hZ2UgbWV0
aG9kIHJlbGVhc2VzIGl0cyByZXNwb25kZXI7IHdlIG11c3QgcmV0YWluIHRoZSBXS1Bhc3RlYm9h
cmRGaWxlUHJvbWlzZU93bmVyIGFuIGV4dHJhIHRpbWUgdG8gYmFsYW5jZSB0aGUgcmVsZWFzZQot
ICAgIC8vIGluc2lkZSBvZiB0aGUgZnVuY3Rpb24uCi0gICAgW21fZmlsZVByb21pc2VPd25lci5n
ZXQoKSByZXRhaW5dOwotCi0gICAgLy8gVGhlIGRyYWcgc291cmNlIHdlIGNhcmUgYWJvdXQgaGVy
ZSBpcyBOU0ZpbGVQcm9taXNlRHJhZ1NvdXJjZSwgd2hpY2ggZG9lc24ndCBsb29rIGF0Ci0gICAg
Ly8gdGhlIGFyZ3VtZW50cy4gSXQncyBPSyB0byBqdXN0IHBhc3MgYXJiaXRyYXJ5IGNvbnN0YW50
IHZhbHVlcywgc28gd2UganVzdCBwYXNzIGFsbCB6ZXJvZXMuCi0gICAgW21fZmlsZVByb21pc2VP
d25lci5nZXQoKSBkcmFnZ2VkSW1hZ2U6bmlsIGVuZGVkQXQ6TlNaZXJvUG9pbnQgb3BlcmF0aW9u
Ok5TRHJhZ09wZXJhdGlvbk5vbmVdOworICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gaW1h
Z2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgpOwogICAgIAotICAgIG1fcGFzdGVib2FyZE93
bmVyID0gbnVsbHB0cjsKLSAgICBtX2ZpbGVQcm9taXNlT3duZXIgPSBudWxscHRyOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotQGltcGxlbWVudGF0aW9uIFdLUGFzdGVib2FyZEZpbGVQ
cm9taXNlT3duZXIKLQotLSAoaWQpaW5pdFdpdGhTb3VyY2U6KGlkKWRyYWdTb3VyY2UKLXsKLSAg
ICBzZWxmID0gW3N1cGVyIGluaXRXaXRoU291cmNlOmRyYWdTb3VyY2VdOwotICAgIGlmICghc2Vs
ZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBbX2RyYWdTb3VyY2UgcmV0YWluXTsKLSAgICBy
ZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW19kcmFnU291cmNlIHJl
bGVhc2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLy8gVGhlIEFwcEtpdCBpbXBsZW1l
bnRhdGlvbiBvZiBjb3B5RHJvcERpcmVjdG9yeSBnZXRzIHRoZSBjdXJyZW50IHBhc3RlYm9hcmQg
aW4KLS8vIGEgd2F5IHRoYXQgb25seSB3b3JrcyBpbiB0aGUgcHJvY2VzcyB3aGVyZSB0aGUgZHJh
ZyBpcyBpbml0aWF0ZWQuIFdlIHN1cHBseQotLy8gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBnZXRz
IHRoZSBwYXN0ZWJvYXJkIGJ5IG5hbWUgaW5zdGVhZC4KLS0gKENGVVJMUmVmKWNvcHlEcm9wRGly
ZWN0b3J5Ci17Ci0gICAgUGFzdGVib2FyZFJlZiBwYXN0ZWJvYXJkOwotICAgIE9TU3RhdHVzIHN0
YXR1cyA9IFBhc3RlYm9hcmRDcmVhdGUoKENGU3RyaW5nUmVmKU5TRHJhZ1Bib2FyZCwgJnBhc3Rl
Ym9hcmQpOwotICAgIGlmIChzdGF0dXMgIT0gbm9FcnIgfHwgIXBhc3RlYm9hcmQpCi0gICAgICAg
IHJldHVybiAwOwotICAgIENGVVJMUmVmIGxvY2F0aW9uID0gMDsKLSAgICBzdGF0dXMgPSBQYXN0
ZWJvYXJkQ29weVBhc3RlTG9jYXRpb24ocGFzdGVib2FyZCwgJmxvY2F0aW9uKTsKLSAgICBDRlJl
bGVhc2UocGFzdGVib2FyZCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBub0VyciB8fCAhbG9jYXRpb24p
Ci0gICAgICAgIHJldHVybiAwOwotICAgIENGTWFrZUNvbGxlY3RhYmxlKGxvY2F0aW9uKTsKLSAg
ICByZXR1cm4gbG9jYXRpb247Ci19Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUGFzdGVi
b2FyZE93bmVyCi0KLXN0YXRpYyBDYWNoZWRJbWFnZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50
KCkKLXsKLSAgICBzdGF0aWMgQ2FjaGVkSW1hZ2VDbGllbnQqIGNsaWVudCA9IG5ldyBDYWNoZWRJ
bWFnZUNsaWVudDsKLSAgICByZXR1cm4gY2xpZW50OwotfQotCi0tICh2b2lkKWNsZWFySW1hZ2UK
LXsKLSAgICBpZiAoIV9pbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIF9pbWFnZS0+cmVtb3Zl
Q2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsKLSAgICBfaW1hZ2UgPSAwOwotfQotCi0tIChp
ZClpbml0V2l0aEltYWdlOihXZWJDb3JlOjpDYWNoZWRJbWFnZSopaW1hZ2UKLXsKLSAgICBzZWxm
ID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQot
ICAgIF9pbWFnZSA9IGltYWdlOwotICAgIGlmIChpbWFnZSkKLSAgICAgICAgaW1hZ2UtPmFkZENs
aWVudChwcm9taXNlZERhdGFDbGllbnQoKSk7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZv
aWQpZGVhbGxvYwotewotICAgIFtzZWxmIGNsZWFySW1hZ2VdOwotICAgIFtzdXBlciBkZWFsbG9j
XTsKLX0KLQotLSAodm9pZClmaW5hbGl6ZQotewotICAgIFtzZWxmIGNsZWFySW1hZ2VdOwotICAg
IFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0KLS0gKHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJk
ICopcGFzdGVib2FyZCBwcm92aWRlRGF0YUZvclR5cGU6KE5TU3RyaW5nICopdHlwZQotewotICAg
IGlmIChbdHlwZSBpc0VxdWFsOk5TVElGRlBib2FyZFR5cGVdKSB7Ci0gICAgICAgIGlmIChfaW1h
Z2UpIHsKLSAgICAgICAgICAgIGlmIChJbWFnZSogaW1hZ2UgPSBfaW1hZ2UtPmltYWdlKCkpCi0g
ICAgICAgICAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopaW1hZ2UtPmdldFRJ
RkZSZXByZXNlbnRhdGlvbigpIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07Ci0gICAgICAgICAg
ICBbc2VsZiBjbGVhckltYWdlXTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIC8vIEZJWE1FOiBIYW5kbGUgUlRGRCBoZXJlLgotfQotCi0tICh2b2lkKXBhc3RlYm9hcmRD
aGFuZ2VkT3duZXI6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBbc2VsZiBjbGVh
ckltYWdlXTsKLSAgICBDRlJlbGVhc2Uoc2VsZik7IC8vIEJhbGFuY2VkIGJ5IHRoZSBsZWFrUmVm
IHRoYXQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlIGRvZXMgd2hlbiBt
YWtpbmcgdGhpcyBwYXN0ZWJvYXJkIG93bmVyLgotfQotCi1zdGF0aWMgYm9vbCBtYXRjaGVzRXh0
ZW5zaW9uT3JFcXVpdmFsZW50KE5TU3RyaW5nICpmaWxlbmFtZSwgTlNTdHJpbmcgKmV4dGVuc2lv
bikKLXsKLSAgICBOU1N0cmluZyAqZXh0ZW5zaW9uQXNTdWZmaXggPSBbQCIuIiBzdHJpbmdCeUFw
cGVuZGluZ1N0cmluZzpleHRlbnNpb25dOwotICAgIHJldHVybiBbZmlsZW5hbWUgX3dlYmtpdF9o
YXNDYXNlSW5zZW5zaXRpdmVTdWZmaXg6ZXh0ZW5zaW9uQXNTdWZmaXhdCi0gICAgICAgIHx8IChb
ZXh0ZW5zaW9uIF93ZWJraXRfaXNDYXNlSW5zZW5zaXRpdmVFcXVhbFRvU3RyaW5nOkAianBlZyJd
Ci0gICAgICAgICAgICAmJiBbZmlsZW5hbWUgX3dlYmtpdF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZm
aXg6QCIuanBnIl0pOwotfQotCi0tIChOU0FycmF5ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9w
cGVkQXREZXN0aW5hdGlvbjooTlNVUkwgKilkcm9wRGVzdGluYXRpb24KLXsKLSAgICBOU0ZpbGVX
cmFwcGVyICp3cmFwcGVyID0gbmlsOwotICAgIE5TVVJMICpkcmFnZ2luZ0ltYWdlVVJMID0gbmls
OworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyID0gaW1hZ2UtPmltYWdlKCkt
PmRhdGEoKTsKKyAgICBzaXplX3QgaW1hZ2VTaXplID0gaW1hZ2VCdWZmZXItPnNpemUoKTsKKyAg
ICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZTsKICAgICAKLSAgICBpZiAoX2ltYWdl
KSB7Ci0gICAgICAgIGlmIChTaGFyZWRCdWZmZXIqIGJ1ZmZlciA9IF9pbWFnZS0+Q2FjaGVkUmVz
b3VyY2U6OmRhdGEoKSkgewotICAgICAgICAgICAgTlNEYXRhICpkYXRhID0gYnVmZmVyLT5jcmVh
dGVOU0RhdGEoKTsKLSAgICAgICAgICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gX2ltYWdl
LT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2UoKTsKLSAgICAgICAgICAgIGRyYWdnaW5nSW1hZ2VV
UkwgPSBbcmVzcG9uc2UgVVJMXTsKLSAgICAgICAgICAgIHdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFw
cGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YV0gYXV0b3JlbGVhc2Vd
OwotICAgICAgICAgICAgTlNTdHJpbmcqIGZpbGVuYW1lID0gW3Jlc3BvbnNlIHN1Z2dlc3RlZEZp
bGVuYW1lXTsKLSAgICAgICAgICAgIE5TU3RyaW5nKiB0cnVlRXh0ZW5zaW9uKF9pbWFnZS0+aW1h
Z2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKSk7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoZXNFeHRl
bnNpb25PckVxdWl2YWxlbnQoZmlsZW5hbWUsIHRydWVFeHRlbnNpb24pKQotICAgICAgICAgICAg
ICAgIGZpbGVuYW1lID0gW1tmaWxlbmFtZSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi4iXSBz
dHJpbmdCeUFwcGVuZGluZ1N0cmluZzp0cnVlRXh0ZW5zaW9uXTsKLSAgICAgICAgICAgIFt3cmFw
cGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOmZpbGVuYW1lXTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBkbyBu
b3QgaGF2ZSBhIENhY2hlZEltYWdlPwotICAgIC8vIFdlYktpdDEgaGFkIGNvZGUgZm9yIHRoaXMg
Y2FzZS4KKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShpbWFnZUJ1ZmZlci0+c2l6ZSgpKTsKKyAgICBtZW1jcHkoc2hhcmVk
TWVtb3J5QnVmZmVyLT5kYXRhKCksIGltYWdlQnVmZmVyLT5kYXRhKCksIGltYWdlU2l6ZSk7Cisg
ICAgc2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaW1hZ2VIYW5kbGUsIFNoYXJlZE1l
bW9yeTo6UmVhZE9ubHkpOwogICAgIAotICAgIGlmICghd3JhcHBlcikgewotICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZS4iKTsKLSAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhID0gYXJjaGl2ZSA/IGFyY2hpdmUtPnJh
d0RhdGFSZXByZXNlbnRhdGlvbigpIDogMDsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBhcmNo
aXZlSGFuZGxlOworICAgIHNpemVfdCBhcmNoaXZlU2l6ZSA9IDA7CisgICAgaWYgKGRhdGEpIHsK
KyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjp3cmFw
TlNEYXRhKChOU0RhdGEgKilkYXRhLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9y
eT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoYnVmZmVyLT5zaXpl
KCkpOworICAgICAgICBhcmNoaXZlU2l6ZSA9IGJ1ZmZlci0+c2l6ZSgpOworICAgICAgICBtZW1j
cHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBhcmNoaXZlU2l6
ZSk7CisgICAgICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGFyY2hpdmVIYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOyAgICAgICAgICAgIAogICAgIH0KLQotICAgIC8v
IEZJWE1FOiBSZXBvcnQgYW4gZXJyb3IgaWYgd2UgZmFpbCB0byBjcmVhdGUgYSBmaWxlLgotICAg
IE5TU3RyaW5nICpwYXRoID0gW1tkcm9wRGVzdGluYXRpb24gcGF0aF0gc3RyaW5nQnlBcHBlbmRp
bmdQYXRoQ29tcG9uZW50Olt3cmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXV07Ci0gICAgcGF0aCA9
IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtpdF9wYXRoV2l0aFVuaXF1ZUZp
bGVuYW1lRm9yUGF0aDpwYXRoXTsKLSAgICBpZiAoIVt3cmFwcGVyIHdyaXRlVG9GaWxlOnBhdGgg
YXRvbWljYWxseTpOTyB1cGRhdGVGaWxlbmFtZXM6WUVTXSkKLSAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gY3JlYXRlIGltYWdlIGZpbGUgdmlhIC1bTlNGaWxlV3JhcHBlciB3cml0ZVRvRmls
ZTphdG9taWNhbGx5OnVwZGF0ZUZpbGVuYW1lczpdIGF0IHBhdGggJUAiLCBwYXRoKTsKLQotICAg
IGlmIChkcmFnZ2luZ0ltYWdlVVJMKQotICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1h
bmFnZXJdIF93ZWJraXRfc2V0TWV0YWRhdGFVUkw6W2RyYWdnaW5nSW1hZ2VVUkwgYWJzb2x1dGVT
dHJpbmddIHJlZmVycmVyOm5pbCBhdFBhdGg6cGF0aF07Ci0KLSAgICByZXR1cm4gW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0OltwYXRoIGxhc3RQYXRoQ29tcG9uZW50XV07CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFByb21pc2VkRGF0YShwYXN0ZWJvYXJkTmFt
ZSwgaW1hZ2VIYW5kbGUsIGltYWdlU2l6ZSwgU3RyaW5nKFtyZXNwb25zZSBzdWdnZXN0ZWRGaWxl
bmFtZV0pLCBTdHJpbmcoZXh0ZW5zaW9uKSwgU3RyaW5nKHRpdGxlKSwgU3RyaW5nKFtbcmVzcG9u
c2UgVVJMXSBhYnNvbHV0ZVN0cmluZ10pLCBTdHJpbmcoW1VSTCBfd2ViX3VzZXJWaXNpYmxlU3Ry
aW5nXSksIGFyY2hpdmVIYW5kbGUsIGFyY2hpdmVTaXplKSk7CiB9CiAKLUBlbmQKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="132549"
          type_id="1"
          status="-"
          setter="sam"
    />
    <flag name="commit-queue"
          id="132578"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131368</attachid>
            <date>2012-03-12 11:46:51 -0700</date>
            <delta_ts>2012-03-12 11:55:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>dragclient.txt</filename>
            <type>text/plain</type>
            <size>30978</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDQ0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisyMDEyLTAzLTEyICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0MjogcmVtb3ZlIHRo
ZSBsYXN0IE5TUGFzdGVib2FyZCBhY2Nlc3MgZnJvbSB0aGUgV2ViUHJvY2VzcworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46
IEFkZGVkIHR3byBleHBvcnRlZCBtZXRob2RzLgorCiAyMDEyLTAzLTEyICBTYWRydWwgSGFiaWIg
Q2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBUb3VjaCBldmVudCBo
YW5kbGVyIGNvdW50IGlzIG5vdCB1cGRhdGVkIHdoZW4gYWRkaW5nIGhhbmRsZXJzIHRvIHRoZSB3
aW5kb3cuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTEwNDM1KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTExNTMsNiArMTE1
Myw4IEBAIF9fWk43V2ViQ29yZTlwYWdlQ2FjaGVFdgogX19aTjdXZWJDb3JlOXBsYWluVGV4dEVQ
S05TXzVSYW5nZUVOU18yMFRleHRJdGVyYXRvckJlaGF2aW9yRQogX19aTjdXZWJDb3JlOXRvRWxl
bWVudEVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlOXVuaW9uUmVjdEVSS04zV1RGNlZlY3Rv
cklOU185RmxvYXRSZWN0RUxtMEVFRQorX19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZUMxRVBOU18x
M0ltYWdlT2JzZXJ2ZXJFCitfX1pON1dlYkNvcmU1SW1hZ2U3c2V0RGF0YUVOM1dURjEwUGFzc1Jl
ZlB0cklOU18xMlNoYXJlZEJ1ZmZlckVFRWIKIF9fWk5LM0pTQzhCaW5kaW5nczEwUm9vdE9iamVj
dDEyZ2xvYmFsT2JqZWN0RXYKIF9fWk5LM1dURjZTdHJpbmcxNGNyZWF0ZUNGU3RyaW5nRXYKIF9f
Wk5LN1dlYkNvcmUxMENyZWRlbnRpYWwxMWhhc1Bhc3N3b3JkRXYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExMDQ0OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDM4IEBACisyMDEyLTAzLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVucmljYUBh
cHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0MjogcmVtb3ZlIHRoZSBsYXN0IE5TUGFzdGVib2Fy
ZCBhY2Nlc3MgZnJvbSB0aGUgV2ViUHJvY2VzcworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgbGFzdCByZW1haW5p
bmcgYWNjZXNzIHRvIE5TUGFzdGVib2FyZCBmcm9tIHRoZSBXZWJQcm9jZXNzLgorICAgICAgICBU
aGUgY29kZSBpbiBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2Ugbm93IHBh
Y2thZ2VzIGFsbCB0aGUgZGF0YQorICAgICAgICByZXF1aXJlZCBmb3IgdGhlIGRyYWcgYW5kIHRo
ZSBwcm9taXNlZCBkcmFnIHR5cGVzIGFuZCBzZW5kcyBvbmUgcmVxdWVzdCB0byB0aGUgVUkKKyAg
ICAgICAgcHJvY2VzcyB0aGF0IHdpbGwgcGxhY2UgdGhlIGRhdGEgaW4gdGhlIE5TUGFzdGVib2Fy
ZCB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5oOiBBZGRlZCBzZXRQcm9taXNlZERhdGEgbWV0aG9kLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6c2V0UHJvbWlzZWREYXRhKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgIChtYXRjaGVzRXh0ZW5zaW9uT3JFcXVpdmFsZW50
KTogQWRkZWQuCisgICAgICAgIChmaWxlRXhpc3RzKTogQWRkZWQuCisgICAgICAgIChwYXRoV2l0
aFVuaXF1ZUZpbGVuYW1lRm9yUGF0aCk6IEFkZGVkLgorICAgICAgICAoLVtXS1ZpZXcgX3NldFBy
b21pc2VkRGF0YTpXZWJDb3JlOjp3aXRoRmlsZU5hbWU6d2l0aEV4dGVuc2lvbjp3aXRoVGl0bGU6
d2l0aFVSTDp3aXRoVmlzaWJsZVVSTDp3aXRoQXJjaGl2ZTpXZWJDb3JlOjpmb3JQYXN0ZWJvYXJk
Ol0pOgorICAgICAgICAoLVtXS1ZpZXcgcGFzdGVib2FyZENoYW5nZWRPd25lcjpdKToKKyAgICAg
ICAgKC1bV0tWaWV3IHBhc3RlYm9hcmQ6cHJvdmlkZURhdGFGb3JUeXBlOl0pOgorICAgICAgICAo
LVtXS1ZpZXcgbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlvbjpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oOiBBZGRlZCBfc2V0UHJv
bWlzZWREYXRhLgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBBZGRlZCBtZXRob2QgZm9yIHRoZSBuZXcgbWVzc2Fn
ZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZCBz
ZXRQcm9taXNlZERhdGEgbWVzc2FnZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQ
cm94eU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzZXRQcm9taXNlZERh
dGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5j
cHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1h
Yy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJh
Z0ltYWdlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0
ZW1JbnRlcmZhY2UubW06CisgICAgICAgIChJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSk6IEFk
ZGVkIFNldE1ldGFkYXRhVVJMLgorCiAyMDEyLTAzLTEyICBBbmRyYXMgQmVjc2kgIDxhbmRyYXMu
YmVjc2lAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBBZGQgc3VwcG9ydCBmb3IgcnVk
aW1lbnRhcnkgc2Nyb2xsIGluZGljYXRvcnMgaW4gTWluaUJyb3dzZXIKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMTEwNDM1KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEz
Nyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dElucHV0U3RhdGUoYm9v
bCB1cGRhdGVTZWN1cmVJbnB1dFN0YXRlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0VGV4
dElucHV0U3RhdGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG1ha2VGaXJzdFJlc3BvbmRlcigp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvbWlzZWREYXRhKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBpbWFnZUJ1ZmZl
ciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIGNvbnN0
IFN0cmluZyYgdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2aXNpYmxlVXJsLCBQYXNzUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZUJ1ZmZlcikgPSAwOwogI2VuZGlmCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIHZpcnR1YWwgdm9pZCBjb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZWQoYm9vbCkg
PSAwOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNp
b24gMTEwNDM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MTcsNiArNTE3LDggQEAgcHVibGljOgogICAgIHZvaWQgZHJhZ0Vu
ZGVkKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pOwogI2lmIFBM
QVRGT1JNKE1BQykKICAgICB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBkcmFnSW1h
Z2VIYW5kbGUsIGJvb2wgaXNMaW5rRHJhZyk7CisgICAgdm9pZCBzZXRQcm9taXNlZERhdGEoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGlt
YWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFN0cmluZyYgZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZpc2libGVVUkws
IGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBhcmNoaXZlSGFuZGxlLCB1aW50NjRfdCBhcmNo
aXZlU2l6ZSk7CiAjZW5kaWYKICNpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBzdGFydERyYWdE
cm9wKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBpbWFnZVBvaW50LCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZHJhZ1BvaW50LCB1aW50NjRfdCBva0VmZmVjdCwgY29uc3QgSGFzaE1hcDxVSU5U
LCBWZWN0b3I8U3RyaW5nPiA+JiBkYXRhTWFwLCB1aW50NjRfdCBmaWxlU2l6ZSwgY29uc3QgU3Ry
aW5nJiBwYXRobmFtZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGZpbGVDb250ZW50SGFu
ZGxlLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkcmFnSW1hZ2VTaXplLCBjb25zdCBTaGFyZWRN
ZW1vcnk6OkhhbmRsZSYgZHJhZ0ltYWdlSGFuZGxlLCBib29sIGlzTGlua0RyYWcpOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiAxMTA0MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3LDcgQEAgbWVzc2Fn
ZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24o
V2ViQ29yZTo6RHJhZ1Nlc3Npb24gZHJhZ1Nlc3Npb24pCiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IFNldERyYWdJbWFnZShXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBkcmFnSW1hZ2UsIGJvb2wgbGlua0RyYWcpCisgICAgU2V0
UHJvbWlzZWREYXRhKFdURjo6U3RyaW5nIHBhc3RlYm9hcmROYW1lLCBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNpemUsIFdURjo6U3RyaW5n
IGZpbGVuYW1lLCBXVEY6OlN0cmluZyBleHRlbnNpb24sIFdURjo6U3RyaW5nIHRpdGxlLCBXVEY6
OlN0cmluZyB1cmwsIFdURjo6U3RyaW5nIHZpc2libGVVUkwsIFdlYktpdDo6U2hhcmVkTWVtb3J5
OjpIYW5kbGUgYXJjaGl2ZUhhbmRsZSwgdWludDY0X3QgYXJjaGl2ZVNpemUpCiAjZW5kaWYKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgU3RhcnREcmFnRHJvcChXZWJDb3JlOjpJbnRQb2ludCBpbWFn
ZVBvaW50LCBXZWJDb3JlOjpJbnRQb2ludCBkcmFnUG9pbnQsIHVpbnQ2NF90IG9rRWZmZWN0LCBI
YXNoTWFwPFVJTlQsVmVjdG9yPFN0cmluZz4gPiBkYXRhTWFwLCB1aW50NjRfdCBmaWxlU2l6ZSwg
U3RyaW5nIHBhdGhuYW1lLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGZpbGVDb250ZW50
SGFuZGxlLCBXZWJDb3JlOjpJbnRTaXplIGRyYWdJbWFnZVNpemUsIFdlYktpdDo6U2hhcmVkTWVt
b3J5OjpIYW5kbGUgZHJhZ0ltYWdlLCBib29sIGxpbmtEcmFnKQpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCShyZXZpc2lvbiAx
MTA0MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3Miw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBW
ZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwogICAgIHZpcnR1YWwgYm9vbCBleGVj
dXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBjbGllbnRQ
b3NpdGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSwgYm9vbCBpc0xp
bmtEcmFnKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJvbWlzZWREYXRhKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBpbWFnZUJ1
ZmZlciwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIGNv
bnN0IFN0cmluZyYgdGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2aXNpYmxlVXJsLCBQYXNzUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZUJ1ZmZlcik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRleHRJbnB1dFN0YXRlKGJvb2wgdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSk7CiAgICAgdmlydHVh
bCB2b2lkIHJlc2V0VGV4dElucHV0U3RhdGUoKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHJldmlzaW9uIDExMDQz
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTUgQEAKICNpbXBvcnQgIldlYkNvbnRleHRN
ZW51UHJveHlNYWMuaCIKICNpbXBvcnQgIldlYkVkaXRDb21tYW5kUHJveHkuaCIKICNpbXBvcnQg
IldlYlBvcHVwTWVudVByb3h5TWFjLmgiCisjaW1wb3J0IDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJlY3Qu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRm91bmRhdGlvbkV4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNpbXBvcnQgPHd0Zi9QYXNz
T3duUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW1wb3J0IDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KQEAgLTI3OCw2ICsyODEsMTMgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
c2V0RHJhZ0ltYWdlKGNvbnN0IAogICAgIFttX3drVmlldyBfc2V0RHJhZ0ltYWdlOmRyYWdOU0lt
YWdlLmdldCgpIGF0OmNsaWVudFBvc2l0aW9uIGxpbmtEcmFnOmlzTGlua0RyYWddOwogfQogCit2
b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRQcm9taXNlZERhdGEoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGltYWdlQnVmZmVyLCBjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IGFyY2hpdmVCdWZmZXIpCit7CisgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKKyAgICBpbWFnZS0+c2V0RGF0YShpbWFnZUJ1ZmZl
ci5nZXQoKSwgdHJ1ZSk7CisgICAgW21fd2tWaWV3IF9zZXRQcm9taXNlZERhdGE6aW1hZ2UuZ2V0
KCkgd2l0aEZpbGVOYW1lOmZpbGVuYW1lIHdpdGhFeHRlbnNpb246ZXh0ZW5zaW9uIHdpdGhUaXRs
ZTp0aXRsZSB3aXRoVVJMOnVybCB3aXRoVmlzaWJsZVVSTDp2aXNpYmxlVXJsIHdpdGhBcmNoaXZl
OmFyY2hpdmVCdWZmZXIuZ2V0KCkgZm9yUGFzdGVib2FyZDpwYXN0ZWJvYXJkTmFtZV07Cit9CisK
IHZvaWQgUGFnZUNsaWVudEltcGw6OnVwZGF0ZVRleHRJbnB1dFN0YXRlKGJvb2wgdXBkYXRlU2Vj
dXJlSW5wdXRTdGF0ZSkKIHsKICAgICBbbV93a1ZpZXcgX3VwZGF0ZVRleHRJbnB1dFN0YXRlSW5j
bHVkaW5nU2VjdXJlSW5wdXRTdGF0ZTp1cGRhdGVTZWN1cmVJbnB1dFN0YXRlXTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDExMDQz
NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9EcmFnRGF0YS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9EcmFnU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSW1hZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW50UmVj
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0xvY2FsaXplZFN0cmluZ3MuaD4KQEAgLTcxLDcgKzcyLDExIEBACiAjaW1wb3J0IDxXZWJDb3Jl
L1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JlZ2lvbi5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SdW5Mb29wLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9XZWJDb3JlTlNTdHJpbmdFeHRyYXMuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
RmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjaW1wb3J0
IDxzeXMvc3RhdC5oPgogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFp
blB0ci5oPgogCkBAIC0xOTQsNiArMTk5LDkgQEAgQGludGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNP
YmplY3QgewogICAgIC8vIFdlIHVzZSB0aGlzIGZsYWcgdG8gZGV0ZXJtaW5lIHdoZW4gd2UgbmVl
ZCB0byBwYWludCB0aGUgYmFja2dyb3VuZCAod2hpdGUgb3IgY2xlYXIpCiAgICAgLy8gd2hlbiB0
aGUgd2ViIHByb2Nlc3MgaXMgdW5yZXNwb25zaXZlIG9yIHRha2VzIHRvbyBsb25nIHRvIHBhaW50
LgogICAgIEJPT0wgX3dpbmRvd0hhc1ZhbGlkQmFja2luZ1N0b3JlOworICAgIFJlZlB0cjxXZWJD
b3JlOjpJbWFnZT4gX3Byb21pc2VkSW1hZ2U7CisgICAgU3RyaW5nIF9wcm9taXNlZEZpbGVuYW1l
OworICAgIFN0cmluZyBfcHJvbWlzZWRVUkw7CiB9CiAKIEBlbmQKQEAgLTI1ODgsNiArMjU5Niwx
MjAgQEAgLSAodm9pZClfc2V0RHJhZ0ltYWdlOihOU0ltYWdlICopaW1hZ2UgYQogICAgIF9kYXRh
LT5fZHJhZ0hhc1N0YXJ0ZWQgPSBOTzsKIH0KIAorc3RhdGljIGJvb2wgbWF0Y2hlc0V4dGVuc2lv
bk9yRXF1aXZhbGVudChOU1N0cmluZyAqZmlsZW5hbWUsIE5TU3RyaW5nICpleHRlbnNpb24pCit7
CisgICAgTlNTdHJpbmcgKmV4dGVuc2lvbkFzU3VmZml4ID0gW0AiLiIgc3RyaW5nQnlBcHBlbmRp
bmdTdHJpbmc6ZXh0ZW5zaW9uXTsKKyAgICByZXR1cm4gaGFzQ2FzZUluc2Vuc2l0aXZlU3VmZml4
KGZpbGVuYW1lLCBleHRlbnNpb25Bc1N1ZmZpeCkgfHwgKHN0cmluZ0lzQ2FzZUluc2Vuc2l0aXZl
RXF1YWxUb1N0cmluZyhleHRlbnNpb24sIEAianBlZyIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBoYXNDYXNl
SW5zZW5zaXRpdmVTdWZmaXgoZmlsZW5hbWUsIEAiLmpwZyIpKTsKK30KKworLSAodm9pZClfc2V0
UHJvbWlzZWREYXRhOihXZWJDb3JlOjpJbWFnZSAqKWltYWdlIHdpdGhGaWxlTmFtZTooTlNTdHJp
bmcgKilmaWxlbmFtZSB3aXRoRXh0ZW5zaW9uOihOU1N0cmluZyAqKWV4dGVuc2lvbiB3aXRoVGl0
bGU6KE5TU3RyaW5nICopdGl0bGUgd2l0aFVSTDooTlNTdHJpbmcgKil1cmwgd2l0aFZpc2libGVV
Ukw6KE5TU3RyaW5nICopdmlzaWJsZVVybCB3aXRoQXJjaGl2ZTooV2ViQ29yZTo6U2hhcmVkQnVm
ZmVyKikgYXJjaGl2ZUJ1ZmZlciBmb3JQYXN0ZWJvYXJkOihOU1N0cmluZyAqKXBhc3RlYm9hcmRO
YW1lCisKK3sKKyAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbTlNQYXN0ZWJvYXJkIHBh
c3RlYm9hcmRXaXRoTmFtZTpwYXN0ZWJvYXJkTmFtZV07CisgICAgUmV0YWluUHRyPE5TTXV0YWJs
ZUFycmF5PiB0eXBlcyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBpbml0V2l0aE9i
amVjdHM6TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBlLCBuaWxdKTsKKyAgICAKKyAgICBbdHlwZXMu
Z2V0KCkgYWRkT2JqZWN0c0Zyb21BcnJheTphcmNoaXZlQnVmZmVyID8gUGFzdGVib2FyZFR5cGVz
Ojpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpIDogUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXMoKV07
CisgICAgW3Bhc3RlYm9hcmQgZGVjbGFyZVR5cGVzOnR5cGVzLmdldCgpIG93bmVyOnNlbGZdOwor
ICAgIGlmICghbWF0Y2hlc0V4dGVuc2lvbk9yRXF1aXZhbGVudChmaWxlbmFtZSwgZXh0ZW5zaW9u
KSkKKyAgICAgICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5n
OkAiLiJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmV4dGVuc2lvbl07CisKKyAgICBbcGFzdGVi
b2FyZCBzZXRTdHJpbmc6dXJsIGZvclR5cGU6TlNVUkxQYm9hcmRUeXBlXTsKKyAgICBbcGFzdGVi
b2FyZCBzZXRTdHJpbmc6dmlzaWJsZVVybCBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViVVJM
UGJvYXJkVHlwZV07CisgICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOnRpdGxlIGZvclR5cGU6UGFz
dGVib2FyZFR5cGVzOjpXZWJVUkxOYW1lUGJvYXJkVHlwZV07CisgICAgW3Bhc3RlYm9hcmQgc2V0
UHJvcGVydHlMaXN0OltOU0FycmF5IGFycmF5V2l0aE9iamVjdHM6W05TQXJyYXkgYXJyYXlXaXRo
T2JqZWN0OnVybF0sIFtOU0FycmF5IGFycmF5V2l0aE9iamVjdDp0aXRsZV0sIG5pbF0gZm9yVHlw
ZTpQYXN0ZWJvYXJkVHlwZXM6OldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZV07CisgICAgW3Bh
c3RlYm9hcmQgc2V0UHJvcGVydHlMaXN0OltOU0FycmF5IGFycmF5V2l0aE9iamVjdDpleHRlbnNp
b25dIGZvclR5cGU6TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBlXTsKKworICAgIGlmIChhcmNoaXZl
QnVmZmVyKQorICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOlthcmNoaXZlQnVmZmVyLT5jcmVh
dGVOU0RhdGEoKSBhdXRvcmVsZWFzZV0gZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6OldlYkFyY2hp
dmVQYm9hcmRUeXBlXTsKKworICAgIF9kYXRhLT5fcHJvbWlzZWRJbWFnZSA9IGltYWdlOworICAg
IF9kYXRhLT5fcHJvbWlzZWRGaWxlbmFtZSA9IGZpbGVuYW1lOworICAgIF9kYXRhLT5fcHJvbWlz
ZWRVUkwgPSB1cmw7Cit9CisKKy0gKHZvaWQpcGFzdGVib2FyZENoYW5nZWRPd25lcjooTlNQYXN0
ZWJvYXJkICopcGFzdGVib2FyZAoreworICAgIF9kYXRhLT5fcHJvbWlzZWRJbWFnZSA9IDA7Cisg
ICAgX2RhdGEtPl9wcm9taXNlZEZpbGVuYW1lID0gIiI7CisgICAgX2RhdGEtPl9wcm9taXNlZFVS
TCA9ICIiOworfQorCistICh2b2lkKXBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9h
cmQgcHJvdmlkZURhdGFGb3JUeXBlOihOU1N0cmluZyAqKXR5cGUKK3sKKyAgICAvLyBGSVhNRTog
bmVlZCB0byBzdXBwb3J0IE5TUlRGRFBib2FyZFR5cGUKKworICAgIGlmIChbdHlwZSBpc0VxdWFs
Ok5TVElGRlBib2FyZFR5cGVdICYmIF9kYXRhLT5fcHJvbWlzZWRJbWFnZSkgeworICAgICAgICBb
cGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilfZGF0YS0+X3Byb21pc2VkSW1hZ2UtPmdldFRJ
RkZSZXByZXNlbnRhdGlvbigpIGZvclR5cGU6TlNUSUZGUGJvYXJkVHlwZV07CisgICAgICAgIF9k
YXRhLT5fcHJvbWlzZWRJbWFnZSA9IDA7CisgICAgfQorfQorCitzdGF0aWMgQk9PTCBmaWxlRXhp
c3RzKE5TU3RyaW5nICpwYXRoKQoreworICAgIHN0cnVjdCBzdGF0IHN0YXRCdWZmZXI7CisgICAg
cmV0dXJuICFsc3RhdChbcGF0aCBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dLCAmc3RhdEJ1ZmZl
cik7Cit9CisKK3N0YXRpYyBOU1N0cmluZyAqcGF0aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGgo
TlNTdHJpbmcgKnBhdGgpCit7CisgICAgLy8gIkZpeCIgdGhlIGZpbGVuYW1lIG9mIHRoZSBwYXRo
LgorICAgIE5TU3RyaW5nICpmaWxlbmFtZSA9IGZpbGVuYW1lQnlGaXhpbmdJbGxlZ2FsQ2hhcmFj
dGVycyhbcGF0aCBsYXN0UGF0aENvbXBvbmVudF0pOworICAgIHBhdGggPSBbW3BhdGggc3RyaW5n
QnlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50XSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6ZmlsZW5hbWVdOworICAgIAorICAgIGlmIChmaWxlRXhpc3RzKHBhdGgpKSB7CisgICAgICAg
IC8vIERvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlIGJ5IGFwcGVuZGluZyAiLW4iLCAiLW4u
ZXh0IiBvciAiLW4uZXh0LmV4dCIgdG8gdGhlIGZpbGVuYW1lLgorICAgICAgICBOU1N0cmluZyAq
ZXh0ZW5zaW9ucyA9IG5pbDsKKyAgICAgICAgTlNTdHJpbmcgKnBhdGhXaXRob3V0RXh0ZW5zaW9u
czsKKyAgICAgICAgTlNTdHJpbmcgKmxhc3RQYXRoQ29tcG9uZW50ID0gW3BhdGggbGFzdFBhdGhD
b21wb25lbnRdOworICAgICAgICBOU1JhbmdlIHBlcmlvZFJhbmdlID0gW2xhc3RQYXRoQ29tcG9u
ZW50IHJhbmdlT2ZTdHJpbmc6QCIuIl07CisgICAgICAgIAorICAgICAgICBpZiAocGVyaW9kUmFu
Z2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgeworICAgICAgICAgICAgcGF0aFdpdGhvdXRFeHRl
bnNpb25zID0gcGF0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4dGVuc2lvbnMg
PSBbbGFzdFBhdGhDb21wb25lbnQgc3Vic3RyaW5nRnJvbUluZGV4OnBlcmlvZFJhbmdlLmxvY2F0
aW9uICsgMV07CisgICAgICAgICAgICBsYXN0UGF0aENvbXBvbmVudCA9IFtsYXN0UGF0aENvbXBv
bmVudCBzdWJzdHJpbmdUb0luZGV4OnBlcmlvZFJhbmdlLmxvY2F0aW9uXTsKKyAgICAgICAgICAg
IHBhdGhXaXRob3V0RXh0ZW5zaW9ucyA9IFtbcGF0aCBzdHJpbmdCeURlbGV0aW5nTGFzdFBhdGhD
b21wb25lbnRdIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpsYXN0UGF0aENvbXBvbmVu
dF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IDsg
aSsrKSB7CisgICAgICAgICAgICBOU1N0cmluZyAqcGF0aFdpdGhBcHBlbmRlZE51bWJlciA9IFtO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAtJWQiLCBwYXRoV2l0aG91dEV4dGVuc2lvbnMs
IGldOworICAgICAgICAgICAgcGF0aCA9IFtleHRlbnNpb25zIGxlbmd0aF0gPyBbcGF0aFdpdGhB
cHBlbmRlZE51bWJlciBzdHJpbmdCeUFwcGVuZGluZ1BhdGhFeHRlbnNpb246ZXh0ZW5zaW9uc10g
OiBwYXRoV2l0aEFwcGVuZGVkTnVtYmVyOworICAgICAgICAgICAgaWYgKCFmaWxlRXhpc3RzKHBh
dGgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBwYXRoOworfQorCistIChOU0FycmF5ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9w
cGVkQXREZXN0aW5hdGlvbjooTlNVUkwgKilkcm9wRGVzdGluYXRpb24KK3sKKyAgICBSZXRhaW5Q
dHI8TlNGaWxlV3JhcHBlcj4gd3JhcHBlcjsKKyAgICAKKyAgICBpZiAoX2RhdGEtPl9wcm9taXNl
ZEltYWdlKSB7ICAgICAgICAKKyAgICAgICAgTlNEYXRhICpkYXRhID0gW19kYXRhLT5fcHJvbWlz
ZWRJbWFnZS0+ZGF0YSgpLT5jcmVhdGVOU0RhdGEoKSBhdXRvcmVsZWFzZV07CisgICAgICAgIHdy
YXBwZXIuYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhD
b250ZW50czpkYXRhXSk7CisgICAgICAgIFt3cmFwcGVyLmdldCgpIHNldFByZWZlcnJlZEZpbGVu
YW1lOl9kYXRhLT5fcHJvbWlzZWRGaWxlbmFtZV07CisgICAgfQorICAgIAorICAgIGlmICghd3Jh
cHBlcikgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZS4i
KTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CisgICAgCisgICAgLy8gRklYTUU6IFJlcG9y
dCBhbiBlcnJvciBpZiB3ZSBmYWlsIHRvIGNyZWF0ZSBhIGZpbGUuCisgICAgTlNTdHJpbmcgKnBh
dGggPSBbW2Ryb3BEZXN0aW5hdGlvbiBwYXRoXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25l
bnQ6W3dyYXBwZXIuZ2V0KCkgcHJlZmVycmVkRmlsZW5hbWVdXTsKKyAgICBwYXRoID0gcGF0aFdp
dGhVbmlxdWVGaWxlbmFtZUZvclBhdGgocGF0aCk7CisgICAgaWYgKCFbd3JhcHBlci5nZXQoKSB3
cml0ZVRvRmlsZTpwYXRoIGF0b21pY2FsbHk6Tk8gdXBkYXRlRmlsZW5hbWVzOllFU10pCisgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBmaWxlIHZpYSAtW05TRmlsZVdy
YXBwZXIgd3JpdGVUb0ZpbGU6YXRvbWljYWxseTp1cGRhdGVGaWxlbmFtZXM6XSIpOworICAgIAor
ICAgIGlmICghX2RhdGEtPl9wcm9taXNlZFVSTC5pc0VtcHR5KCkpCisgICAgICAgIFdlYkNvcmU6
OnNldE1ldGFkYXRhVVJMKF9kYXRhLT5fcHJvbWlzZWRVUkwsICIiLCBTdHJpbmcocGF0aCkpOwor
ICAgIAorICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W3BhdGggbGFzdFBhdGhD
b21wb25lbnRdXTsKK30KKwogLSAodm9pZClfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZQogewogICAg
IGlmICghW1tzZWxmIHdpbmRvd10gaXNLZXlXaW5kb3ddIHx8ICFbc2VsZiBfaXNGb2N1c2VkXSkg
ewpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJ
bnRlcm5hbC5oCShyZXZpc2lvbiAxMTA0MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBA
IG5hbWVzcGFjZSBDb3JlSVBDIHsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBL
ZXlwcmVzc0NvbW1hbmQ7CisgICAgY2xhc3MgSW1hZ2U7CisgICAgY2xhc3MgU2hhcmVkQnVmZmVy
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTc4LDYgKzgwLDcgQEAgQGludGVyZmFjZSBX
S1ZpZXcgKEludGVybmFsKQogLSAodm9pZClfZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRp
b246KE5TU3RyaW5nICopc3RyaW5nIHdpdGhGaW5kT3B0aW9uczooV2ViS2l0OjpGaW5kT3B0aW9u
cylvcHRpb25zIG1heE1hdGNoQ291bnQ6KE5TVUludGVnZXIpY291bnQ7CiAtICh2b2lkKV9jb3Vu
dFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uOihOU1N0cmluZyAqKXN0cmluZyB3
aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6RmluZE9wdGlvbnMpb3B0aW9ucyBtYXhNYXRjaENvdW50
OihOU1VJbnRlZ2VyKWNvdW50OwogLSAodm9pZClfc2V0RHJhZ0ltYWdlOihOU0ltYWdlICopaW1h
Z2UgYXQ6KE5TUG9pbnQpY2xpZW50UG9pbnQgbGlua0RyYWc6KEJPT0wpbGlua0RyYWc7CistICh2
b2lkKV9zZXRQcm9taXNlZERhdGE6KFdlYkNvcmU6OkltYWdlICopaW1hZ2Ugd2l0aEZpbGVOYW1l
OihOU1N0cmluZyAqKWZpbGVuYW1lIHdpdGhFeHRlbnNpb246KE5TU3RyaW5nICopZXh0ZW5zaW9u
IHdpdGhUaXRsZTooTlNTdHJpbmcgKil0aXRsZSB3aXRoVVJMOihOU1N0cmluZyAqKXVybCB3aXRo
VmlzaWJsZVVSTDooTlNTdHJpbmcgKil2aXNpYmxlVXJsIHdpdGhBcmNoaXZlOihXZWJDb3JlOjpT
aGFyZWRCdWZmZXIqKSBhcmNoaXZlQnVmZmVyIGZvclBhc3RlYm9hcmQ6KE5TU3RyaW5nICopcGFz
dGVib2FyZE5hbWU7CiAtICh2b2lkKV91cGRhdGVTZWN1cmVJbnB1dFN0YXRlOwogLSAodm9pZClf
dXBkYXRlVGV4dElucHV0U3RhdGVJbmNsdWRpbmdTZWN1cmVJbnB1dFN0YXRlOihCT09MKXVwZGF0
ZVNlY3VyZUlucHV0U3RhdGU7CiAtICh2b2lkKV9yZXNldFRleHRJbnB1dFN0YXRlOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHJl
dmlzaW9uIDExMDQzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW1wb3J0ICJUZXh0
Q2hlY2tlci5oIgogI2ltcG9ydCAiV2ViUGFnZU1lc3NhZ2VzLmgiCiAjaW1wb3J0ICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDxX
ZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlLmg+CiAKQEAgLTI4Nyw2ICsyODgsMjAgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldERyYWdJ
bWFnZShjb25zdCBXZQogICAgIG1fcGFnZUNsaWVudC0+c2V0RHJhZ0ltYWdlKGNsaWVudFBvc2l0
aW9uLCBkcmFnSW1hZ2UucmVsZWFzZSgpLCBpc0xpbmtEcmFnKTsKIH0KIAordm9pZCBXZWJQYWdl
UHJveHk6OnNldFByb21pc2VkRGF0YShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaW1hZ2VIYW5kbGUsIHVpbnQ2NF90IGltYWdlU2l6ZSwg
Y29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0
cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZpc2libGVVUkwsIGNvbnN0IFNoYXJlZE1lbW9yeTo6
SGFuZGxlJiBhcmNoaXZlSGFuZGxlLCB1aW50NjRfdCBhcmNoaXZlU2l6ZSkKK3sKKyAgICBSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlJbWFnZSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRl
KGltYWdlSGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKKyAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBpbWFnZUJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihzaGFyZWRNZW1vcnlJbWFnZS0+ZGF0YSgpKSwgaW1hZ2VTaXplKTsKKyAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlQnVmZmVyOworICAgIAorICAgIGlmICghYXJj
aGl2ZUhhbmRsZS5pc051bGwoKSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnlBcmNoaXZlID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoYXJjaGl2ZUhhbmRsZSwgU2hh
cmVkTWVtb3J5OjpSZWFkT25seSk7OworICAgICAgICBhcmNoaXZlQnVmZmVyID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNoYXJlZE1lbW9yeUFyY2hp
dmUtPmRhdGEoKSksIGFyY2hpdmVTaXplKTsKKyAgICB9CisgICAgbV9wYWdlQ2xpZW50LT5zZXRQ
cm9taXNlZERhdGEocGFzdGVib2FyZE5hbWUsIGltYWdlQnVmZmVyLCBmaWxlbmFtZSwgZXh0ZW5z
aW9uLCB0aXRsZSwgdXJsLCB2aXNpYmxlVVJMLCBhcmNoaXZlQnVmZmVyKTsKK30KKwogdm9pZCBX
ZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJEcmFnQ2xpZW50LmNwcAkocmV2aXNpb24gMTEwNDM1KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTIgKzU4LDYgQEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdl
UgogfQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oTUFDKQotdm9pZCBXZWJEcmFnQ2xpZW50Ojpk
cmFnRW5kZWQoKQotewotfQotI2VuZGlmCi0KIHZvaWQgV2ViRHJhZ0NsaWVudDo6ZHJhZ0NvbnRy
b2xsZXJEZXN0cm95ZWQoKQogewogICAgIGRlbGV0ZSB0aGlzOwpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50
LmgJKHJldmlzaW9uIDExMDQzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsNiBA
QAogCiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFnQ2xpZW50Lmg+CiAKLSNpZiBQTEFURk9STShNQUMp
Ci1PQkpDX0NMQVNTIFdLUGFzdGVib2FyZEZpbGVQcm9taXNlT3duZXI7Ci1PQkpDX0NMQVNTIFdL
UGFzdGVib2FyZE93bmVyOwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBX
ZWJQYWdlOwpAQCAtNTYsMTYgKzUxLDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIERPTUVs
ZW1lbnQqLCBOU1VSTCosIE5TU3RyaW5nKiwgV2ViQ29yZTo6RnJhbWUqKSBPVkVSUklERTsKICNl
bmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGRyYWdFbmRlZCgpIE9WRVJSSURFOwotCiAgICAgdmly
dHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgT1ZFUlJJREU7CiAKICAgICBXZWJQ
YWdlKiBtX3BhZ2U7Ci0gICAgCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxXS1Bh
c3RlYm9hcmRGaWxlUHJvbWlzZU93bmVyPiBtX2ZpbGVQcm9taXNlT3duZXI7Ci0gICAgUmV0YWlu
UHRyPFdLUGFzdGVib2FyZE93bmVyPiBtX3Bhc3RlYm9hcmRPd25lcjsKLSNlbmRpZgogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMu
bW0JKHJldmlzaW9uIDExMDQzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0LDI4
ICs1NCw2IEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiAKLS8vIEludGVybmFsIEFwcEtpdCBjbGFzcy4gSWYgdGhlIHBhc3RlYm9hcmQgaGFuZGxp
bmcgd2FzIGluIHRoZSBzYW1lIHByb2Nlc3MKLS8vIHRoYXQgY2FsbGVkIHRoZSBkcmFnSW1hZ2Ug
bWV0aG9kLCB0aGlzIHdvdWxkIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4KLS8vIENyZWF0ZSBp
dCBleHBsaWNpdGx5IGJlY2F1c2UgZHJhZ0ltYWdlIGlzIGNhbGxlZCBpbiB0aGUgVUkgcHJvY2Vz
cy4KLUBpbnRlcmZhY2UgTlNGaWxlUHJvbWlzZURyYWdTb3VyY2UgOiBOU09iamVjdAotewotICAg
IGlkIF9kcmFnU291cmNlOwotICAgIGNoYXIgX3Vua25vd25GaWVsZHNbMjU2XTsKLX0KLS0gKGlk
KWluaXRXaXRoU291cmNlOihpZClkcmFnU291cmNlOwotLSAodm9pZClzZXRUeXBlczooTlNBcnJh
eSAqKXR5cGVzIG9uUGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZDsKLUBlbmQK
LQotQGludGVyZmFjZSBXS1Bhc3RlYm9hcmRGaWxlUHJvbWlzZU93bmVyIDogTlNGaWxlUHJvbWlz
ZURyYWdTb3VyY2UKLUBlbmQKLQotQGludGVyZmFjZSBXS1Bhc3RlYm9hcmRPd25lciA6IE5TT2Jq
ZWN0Ci17Ci0gICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+IF9p
bWFnZTsKLX0KLS0gKGlkKWluaXRXaXRoSW1hZ2U6KFdlYkNvcmU6OkNhY2hlZEltYWdlKilpbWFn
ZTsKLUBlbmQKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJl
YWJsZUJpdG1hcD4gY29udmVydEltYWdlVG9CaXRtYXAoTlNJbWFnZSAqaW1hZ2UsIGNvbnN0IElu
dFNpemUmIHNpemUpCkBAIC0xMTksMTIgKzk3LDYgQEAgc3RhdGljIFdlYkNvcmU6OkNhY2hlZElt
YWdlKiBjYWNoZWRJbWFnZQogICAgIHJldHVybiBpbWFnZTsKIH0KIAotc3RhdGljIE5TQXJyYXkg
KmFycmF5Rm9yVVJMc1dpdGhUaXRsZXMoTlNVUkwgKlVSTCwgTlNTdHJpbmcgKnRpdGxlKQotewot
ICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOltOU0FycmF5IGFycmF5V2l0aE9i
amVjdDpbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddXSwKLSAgICAgICAgW05TQXJyYXkg
YXJyYXlXaXRoT2JqZWN0Olt0aXRsZSBfd2Via2l0X3N0cmluZ0J5VHJpbW1pbmdXaGl0ZXNwYWNl
XV0sIG5pbF07Ci19Ci0KIHZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIERPTUVsZW1lbnQgKmVsZW1lbnQsIE5T
VVJMICpVUkwsIE5TU3RyaW5nICp0aXRsZSwgV2ViQ29yZTo6RnJhbWUqKQogewogICAgIEFTU0VS
VChlbGVtZW50KTsKQEAgLTE0OSwxOTAgKzEyMSwyNyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OmRl
Y2xhcmVBbmRXcml0ZURyYWdJCiAKICAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2
ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb3JlRWxlbWVudCk7CiAKLSAgICBSZXRhaW5Q
dHI8TlNNdXRhYmxlQXJyYXk+IHR5cGVzKEFkb3B0TlMsIFtbTlNNdXRhYmxlQXJyYXkgYWxsb2Nd
IGluaXRXaXRoT2JqZWN0czpOU0ZpbGVzUHJvbWlzZVBib2FyZFR5cGUsIG5pbF0pOwotICAgIFt0
eXBlcy5nZXQoKSBhZGRPYmplY3RzRnJvbUFycmF5OmFyY2hpdmUgPyBQYXN0ZWJvYXJkVHlwZXM6
OmZvckltYWdlc1dpdGhBcmNoaXZlKCkgOiBQYXN0ZWJvYXJkVHlwZXM6OmZvckltYWdlcygpXTsK
LQotICAgIG1fcGFzdGVib2FyZE93bmVyLmFkb3B0TlMoW1tXS1Bhc3RlYm9hcmRPd25lciBhbGxv
Y10gaW5pdFdpdGhJbWFnZTppbWFnZV0pOwotICAgIG1fZmlsZVByb21pc2VPd25lci5hZG9wdE5T
KFsoV0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lciAqKVtXS1Bhc3RlYm9hcmRGaWxlUHJvbWlz
ZU93bmVyIGFsbG9jXSBpbml0V2l0aFNvdXJjZTptX3Bhc3RlYm9hcmRPd25lci5nZXQoKV0pOwot
Ci0gICAgTlNQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJk
V2l0aE5hbWU6cGFzdGVib2FyZE5hbWVdOwotICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0
eXBlcy5nZXQoKSBvd25lcjptX3Bhc3RlYm9hcmRPd25lci5sZWFrUmVmKCldOyAgICAKLQotICAg
IFtwYXN0ZWJvYXJkIHNldFByb3BlcnR5TGlzdDpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZXh0
ZW5zaW9uXSBmb3JUeXBlOk5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZV07Ci0KLSAgICBbbV9maWxl
UHJvbWlzZU93bmVyLmdldCgpIHNldFR5cGVzOltwYXN0ZWJvYXJkIHByb3BlcnR5TGlzdEZvclR5
cGU6TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBlXSBvblBhc3RlYm9hcmQ6cGFzdGVib2FyZF07Ci0K
LSAgICBbVVJMIHdyaXRlVG9QYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOwotCi0gICAgW3Bhc3RlYm9h
cmQgc2V0U3RyaW5nOltVUkwgX3dlYl9vcmlnaW5hbERhdGFBc1N0cmluZ10gZm9yVHlwZTpQYXN0
ZWJvYXJkVHlwZXM6OldlYlVSTFBib2FyZFR5cGVdOwotCi0gICAgW3Bhc3RlYm9hcmQgc2V0U3Ry
aW5nOnRpdGxlIGZvclR5cGU6UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxOYW1lUGJvYXJkVHlwZV07
Ci0KLSAgICBbcGFzdGVib2FyZCBzZXRTdHJpbmc6W1VSTCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5n
XSBmb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV07Ci0KLSAgICBbcGFzdGVib2FyZCBzZXRQcm9w
ZXJ0eUxpc3Q6YXJyYXlGb3JVUkxzV2l0aFRpdGxlcyhVUkwsIHRpdGxlKSBmb3JUeXBlOlBhc3Rl
Ym9hcmRUeXBlczo6V2ViVVJMc1dpdGhUaXRsZXNQYm9hcmRUeXBlXTsKLQotICAgIGlmIChhcmNo
aXZlKQotICAgICAgICBbcGFzdGVib2FyZCBzZXREYXRhOihOU0RhdGEgKilhcmNoaXZlLT5yYXdE
YXRhUmVwcmVzZW50YXRpb24oKS5nZXQoKSBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViQXJj
aGl2ZVBib2FyZFR5cGVdOwotfQotCi12b2lkIFdlYkRyYWdDbGllbnQ6OmRyYWdFbmRlZCgpCi17
Ci0gICAgLy8gVGhlIGRyYWdnZWRJbWFnZSBtZXRob2QgcmVsZWFzZXMgaXRzIHJlc3BvbmRlcjsg
d2UgbXVzdCByZXRhaW4gdGhlIFdLUGFzdGVib2FyZEZpbGVQcm9taXNlT3duZXIgYW4gZXh0cmEg
dGltZSB0byBiYWxhbmNlIHRoZSByZWxlYXNlCi0gICAgLy8gaW5zaWRlIG9mIHRoZSBmdW5jdGlv
bi4KLSAgICBbbV9maWxlUHJvbWlzZU93bmVyLmdldCgpIHJldGFpbl07Ci0KLSAgICAvLyBUaGUg
ZHJhZyBzb3VyY2Ugd2UgY2FyZSBhYm91dCBoZXJlIGlzIE5TRmlsZVByb21pc2VEcmFnU291cmNl
LCB3aGljaCBkb2Vzbid0IGxvb2sgYXQKLSAgICAvLyB0aGUgYXJndW1lbnRzLiBJdCdzIE9LIHRv
IGp1c3QgcGFzcyBhcmJpdHJhcnkgY29uc3RhbnQgdmFsdWVzLCBzbyB3ZSBqdXN0IHBhc3MgYWxs
IHplcm9lcy4KLSAgICBbbV9maWxlUHJvbWlzZU93bmVyLmdldCgpIGRyYWdnZWRJbWFnZTpuaWwg
ZW5kZWRBdDpOU1plcm9Qb2ludCBvcGVyYXRpb246TlNEcmFnT3BlcmF0aW9uTm9uZV07CisgICAg
TlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBpbWFnZS0+cmVzcG9uc2UoKS5uc1VSTFJlc3BvbnNl
KCk7CiAgICAgCi0gICAgbV9wYXN0ZWJvYXJkT3duZXIgPSBudWxscHRyOwotICAgIG1fZmlsZVBy
b21pc2VPd25lciA9IG51bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi1AaW1w
bGVtZW50YXRpb24gV0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lcgotCi0tIChpZClpbml0V2l0
aFNvdXJjZTooaWQpZHJhZ1NvdXJjZQotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhTb3Vy
Y2U6ZHJhZ1NvdXJjZV07Ci0gICAgaWYgKCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotICAg
IFtfZHJhZ1NvdXJjZSByZXRhaW5dOwotICAgIHJldHVybiBzZWxmOwotfQotCi0tICh2b2lkKWRl
YWxsb2MKLXsKLSAgICBbX2RyYWdTb3VyY2UgcmVsZWFzZV07Ci0gICAgW3N1cGVyIGRlYWxsb2Nd
OwotfQotCi0vLyBUaGUgQXBwS2l0IGltcGxlbWVudGF0aW9uIG9mIGNvcHlEcm9wRGlyZWN0b3J5
IGdldHMgdGhlIGN1cnJlbnQgcGFzdGVib2FyZCBpbgotLy8gYSB3YXkgdGhhdCBvbmx5IHdvcmtz
IGluIHRoZSBwcm9jZXNzIHdoZXJlIHRoZSBkcmFnIGlzIGluaXRpYXRlZC4gV2Ugc3VwcGx5Ci0v
LyBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGdldHMgdGhlIHBhc3RlYm9hcmQgYnkgbmFtZSBpbnN0
ZWFkLgotLSAoQ0ZVUkxSZWYpY29weURyb3BEaXJlY3RvcnkKLXsKLSAgICBQYXN0ZWJvYXJkUmVm
IHBhc3RlYm9hcmQ7Ci0gICAgT1NTdGF0dXMgc3RhdHVzID0gUGFzdGVib2FyZENyZWF0ZSgoQ0ZT
dHJpbmdSZWYpTlNEcmFnUGJvYXJkLCAmcGFzdGVib2FyZCk7Ci0gICAgaWYgKHN0YXR1cyAhPSBu
b0VyciB8fCAhcGFzdGVib2FyZCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ0ZVUkxSZWYgbG9j
YXRpb24gPSAwOwotICAgIHN0YXR1cyA9IFBhc3RlYm9hcmRDb3B5UGFzdGVMb2NhdGlvbihwYXN0
ZWJvYXJkLCAmbG9jYXRpb24pOwotICAgIENGUmVsZWFzZShwYXN0ZWJvYXJkKTsKLSAgICBpZiAo
c3RhdHVzICE9IG5vRXJyIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQ0ZN
YWtlQ29sbGVjdGFibGUobG9jYXRpb24pOwotICAgIHJldHVybiBsb2NhdGlvbjsKLX0KLQotQGVu
ZAotCi1AaW1wbGVtZW50YXRpb24gV0tQYXN0ZWJvYXJkT3duZXIKLQotc3RhdGljIENhY2hlZElt
YWdlQ2xpZW50KiBwcm9taXNlZERhdGFDbGllbnQoKQotewotICAgIHN0YXRpYyBDYWNoZWRJbWFn
ZUNsaWVudCogY2xpZW50ID0gbmV3IENhY2hlZEltYWdlQ2xpZW50OwotICAgIHJldHVybiBjbGll
bnQ7Ci19Ci0KLS0gKHZvaWQpY2xlYXJJbWFnZQotewotICAgIGlmICghX2ltYWdlKQotICAgICAg
ICByZXR1cm47Ci0gICAgX2ltYWdlLT5yZW1vdmVDbGllbnQocHJvbWlzZWREYXRhQ2xpZW50KCkp
OwotICAgIF9pbWFnZSA9IDA7Ci19Ci0KLS0gKGlkKWluaXRXaXRoSW1hZ2U6KFdlYkNvcmU6OkNh
Y2hlZEltYWdlKilpbWFnZQotewotICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Ci0gICAgaWYgKCFz
ZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgX2ltYWdlID0gaW1hZ2U7Ci0gICAgaWYg
KGltYWdlKQotICAgICAgICBpbWFnZS0+YWRkQ2xpZW50KHByb21pc2VkRGF0YUNsaWVudCgpKTsK
LSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9pZClkZWFsbG9jCi17Ci0gICAgW3NlbGYgY2xl
YXJJbWFnZV07Ci0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tICh2b2lkKWZpbmFsaXplCi17
Ci0gICAgW3NlbGYgY2xlYXJJbWFnZV07Ci0gICAgW3N1cGVyIGZpbmFsaXplXTsKLX0KLQotLSAo
dm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvYXJkIHByb3ZpZGVEYXRhRm9y
VHlwZTooTlNTdHJpbmcgKil0eXBlCi17Ci0gICAgaWYgKFt0eXBlIGlzRXF1YWw6TlNUSUZGUGJv
YXJkVHlwZV0pIHsKLSAgICAgICAgaWYgKF9pbWFnZSkgewotICAgICAgICAgICAgaWYgKEltYWdl
KiBpbWFnZSA9IF9pbWFnZS0+aW1hZ2UoKSkKLSAgICAgICAgICAgICAgICBbcGFzdGVib2FyZCBz
ZXREYXRhOihOU0RhdGEgKilpbWFnZS0+Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkgZm9yVHlwZTpO
U1RJRkZQYm9hcmRUeXBlXTsKLSAgICAgICAgICAgIFtzZWxmIGNsZWFySW1hZ2VdOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IEhhbmRsZSBSVEZEIGhl
cmUuCi19Ci0KLS0gKHZvaWQpcGFzdGVib2FyZENoYW5nZWRPd25lcjooTlNQYXN0ZWJvYXJkICop
cGFzdGVib2FyZAotewotICAgIFtzZWxmIGNsZWFySW1hZ2VdOwotICAgIENGUmVsZWFzZShzZWxm
KTsgLy8gQmFsYW5jZWQgYnkgdGhlIGxlYWtSZWYgdGhhdCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UgZG9lcyB3aGVuIG1ha2luZyB0aGlzIHBhc3RlYm9hcmQgb3duZXIu
Ci19Ci0KLXN0YXRpYyBib29sIG1hdGNoZXNFeHRlbnNpb25PckVxdWl2YWxlbnQoTlNTdHJpbmcg
KmZpbGVuYW1lLCBOU1N0cmluZyAqZXh0ZW5zaW9uKQotewotICAgIE5TU3RyaW5nICpleHRlbnNp
b25Bc1N1ZmZpeCA9IFtAIi4iIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOmV4dGVuc2lvbl07Ci0g
ICAgcmV0dXJuIFtmaWxlbmFtZSBfd2Via2l0X2hhc0Nhc2VJbnNlbnNpdGl2ZVN1ZmZpeDpleHRl
bnNpb25Bc1N1ZmZpeF0KLSAgICAgICAgfHwgKFtleHRlbnNpb24gX3dlYmtpdF9pc0Nhc2VJbnNl
bnNpdGl2ZUVxdWFsVG9TdHJpbmc6QCJqcGVnIl0KLSAgICAgICAgICAgICYmIFtmaWxlbmFtZSBf
d2Via2l0X2hhc0Nhc2VJbnNlbnNpdGl2ZVN1ZmZpeDpAIi5qcGciXSk7Ci19Ci0KLS0gKE5TQXJy
YXkgKiluYW1lc09mUHJvbWlzZWRGaWxlc0Ryb3BwZWRBdERlc3RpbmF0aW9uOihOU1VSTCAqKWRy
b3BEZXN0aW5hdGlvbgotewotICAgIE5TRmlsZVdyYXBwZXIgKndyYXBwZXIgPSBuaWw7Ci0gICAg
TlNVUkwgKmRyYWdnaW5nSW1hZ2VVUkwgPSBuaWw7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
aW1hZ2VCdWZmZXIgPSBpbWFnZS0+aW1hZ2UoKS0+ZGF0YSgpOworICAgIHNpemVfdCBpbWFnZVNp
emUgPSBpbWFnZUJ1ZmZlci0+c2l6ZSgpOworICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGltYWdl
SGFuZGxlOwogICAgIAotICAgIGlmIChfaW1hZ2UpIHsKLSAgICAgICAgaWYgKFNoYXJlZEJ1ZmZl
ciogYnVmZmVyID0gX2ltYWdlLT5DYWNoZWRSZXNvdXJjZTo6ZGF0YSgpKSB7Ci0gICAgICAgICAg
ICBOU0RhdGEgKmRhdGEgPSBidWZmZXItPmNyZWF0ZU5TRGF0YSgpOwotICAgICAgICAgICAgTlNV
UkxSZXNwb25zZSAqcmVzcG9uc2UgPSBfaW1hZ2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgp
OwotICAgICAgICAgICAgZHJhZ2dpbmdJbWFnZVVSTCA9IFtyZXNwb25zZSBVUkxdOwotICAgICAg
ICAgICAgd3JhcHBlciA9IFtbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdp
dGhDb250ZW50czpkYXRhXSBhdXRvcmVsZWFzZV07Ci0gICAgICAgICAgICBOU1N0cmluZyogZmls
ZW5hbWUgPSBbcmVzcG9uc2Ugc3VnZ2VzdGVkRmlsZW5hbWVdOwotICAgICAgICAgICAgTlNTdHJp
bmcqIHRydWVFeHRlbnNpb24oX2ltYWdlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpKTsK
LSAgICAgICAgICAgIGlmICghbWF0Y2hlc0V4dGVuc2lvbk9yRXF1aXZhbGVudChmaWxlbmFtZSwg
dHJ1ZUV4dGVuc2lvbikpCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBbW2ZpbGVuYW1lIHN0
cmluZ0J5QXBwZW5kaW5nU3RyaW5nOkAiLiJdIHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5nOnRydWVF
eHRlbnNpb25dOwotICAgICAgICAgICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6Zmls
ZW5hbWVdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8g
aGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGRvIG5vdCBoYXZlIGEgQ2FjaGVkSW1hZ2U/Ci0gICAg
Ly8gV2ViS2l0MSBoYWQgY29kZSBmb3IgdGhpcyBjYXNlLgorICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGltYWdlQnVmZmVy
LT5zaXplKCkpOworICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwgaW1hZ2VC
dWZmZXItPmRhdGEoKSwgaW1hZ2VTaXplKTsKKyAgICBzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0
ZUhhbmRsZShpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CiAgICAgCi0gICAg
aWYgKCF3cmFwcGVyKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBpbWFn
ZSBmaWxlLiIpOwotICAgICAgICByZXR1cm4gbmlsOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGRhdGEgPSBhcmNoaXZlID8gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkgOiAwOwor
ICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGFyY2hpdmVIYW5kbGU7CisgICAgc2l6ZV90IGFyY2hp
dmVTaXplID0gMDsKKyAgICBpZiAoZGF0YSkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoKE5TRGF0YSAqKWRhdGEuZ2V0KCkp
OworICAgICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFy
ZWRNZW1vcnk6OmNyZWF0ZShidWZmZXItPnNpemUoKSk7CisgICAgICAgIGFyY2hpdmVTaXplID0g
YnVmZmVyLT5zaXplKCk7CisgICAgICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEo
KSwgYnVmZmVyLT5kYXRhKCksIGFyY2hpdmVTaXplKTsKKyAgICAgICAgc2hhcmVkTWVtb3J5QnVm
ZmVyLT5jcmVhdGVIYW5kbGUoYXJjaGl2ZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7
ICAgICAgICAgICAgCiAgICAgfQotCi0gICAgLy8gRklYTUU6IFJlcG9ydCBhbiBlcnJvciBpZiB3
ZSBmYWlsIHRvIGNyZWF0ZSBhIGZpbGUuCi0gICAgTlNTdHJpbmcgKnBhdGggPSBbW2Ryb3BEZXN0
aW5hdGlvbiBwYXRoXSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6W3dyYXBwZXIgcHJl
ZmVycmVkRmlsZW5hbWVdXTsKLSAgICBwYXRoID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXSBfd2Via2l0X3BhdGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRoOnBhdGhdOwotICAgIGlm
ICghW3dyYXBwZXIgd3JpdGVUb0ZpbGU6cGF0aCBhdG9taWNhbGx5Ok5PIHVwZGF0ZUZpbGVuYW1l
czpZRVNdKQotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZSB2
aWEgLVtOU0ZpbGVXcmFwcGVyIHdyaXRlVG9GaWxlOmF0b21pY2FsbHk6dXBkYXRlRmlsZW5hbWVz
Ol0gYXQgcGF0aCAlQCIsIHBhdGgpOwotCi0gICAgaWYgKGRyYWdnaW5nSW1hZ2VVUkwpCi0gICAg
ICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gX3dlYmtpdF9zZXRNZXRhZGF0YVVS
TDpbZHJhZ2dpbmdJbWFnZVVSTCBhYnNvbHV0ZVN0cmluZ10gcmVmZXJyZXI6bmlsIGF0UGF0aDpw
YXRoXTsKLQotICAgIHJldHVybiBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6W3BhdGggbGFzdFBh
dGhDb21wb25lbnRdXTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2V0UHJvbWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUhhbmRsZSwgaW1hZ2VTaXplLCBT
dHJpbmcoW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXSksIFN0cmluZyhleHRlbnNpb24pLCBT
dHJpbmcodGl0bGUpLCBTdHJpbmcoW1tyZXNwb25zZSBVUkxdIGFic29sdXRlU3RyaW5nXSksIFN0
cmluZyhbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddKSwgYXJjaGl2ZUhhbmRsZSwgYXJjaGl2
ZVNpemUpKTsKIH0KIAotQGVuZAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2Uu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9tYWMvV2ViU3lzdGVtSW50ZXJmYWNlLm1tCShyZXZpc2lvbiAxMTA0MzUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJTeXN0ZW1JbnRlcmZhY2Uu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsOCBAQCB2b2lkIEluaXRXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlKHZvaWQpCiAgICAgICAgIElOSVQoU2V0SFRUUENvb2tpZXNGb3JVUkwpOwog
ICAgICAgICBJTklUKERlbGV0ZUhUVFBDb29raWUpOwogCisgICAgICAgIElOSVQoU2V0TWV0YWRh
dGFVUkwpOworICAgICAgICAKICNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9TTk9XX0xFT1BBUkQp
CiAgICAgICAgIElOSVQoSU9TdXJmYWNlQ29udGV4dENyZWF0ZSk7CiAgICAgICAgIElOSVQoSU9T
dXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131370</attachid>
            <date>2012-03-12 11:55:31 -0700</date>
            <delta_ts>2012-03-12 12:55:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>dragclient.txt</filename>
            <type>text/plain</type>
            <size>31096</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDQ0OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDEyLTAzLTEyICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0MjogcmVtb3ZlIHRo
ZSBsYXN0IE5TUGFzdGVib2FyZCBhY2Nlc3MgZnJvbSB0aGUgV2ViUHJvY2VzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAwNzMKKyAgICAgICAgCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5l
eHAuaW46IEFkZGVkIHR3byBleHBvcnRlZCBtZXRob2RzLgorCiAyMDEyLTAzLTEyICBTYWRydWwg
SGFiaWIgQ2hvd2RodXJ5ICA8c2FkcnVsQGNocm9taXVtLm9yZz4KIAogICAgICAgICBUb3VjaCBl
dmVudCBoYW5kbGVyIGNvdW50IGlzIG5vdCB1cGRhdGVkIHdoZW4gYWRkaW5nIGhhbmRsZXJzIHRv
IHRoZSB3aW5kb3cuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTEwNDM1KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTExNTMs
NiArMTE1Myw4IEBAIF9fWk43V2ViQ29yZTlwYWdlQ2FjaGVFdgogX19aTjdXZWJDb3JlOXBsYWlu
VGV4dEVQS05TXzVSYW5nZUVOU18yMFRleHRJdGVyYXRvckJlaGF2aW9yRQogX19aTjdXZWJDb3Jl
OXRvRWxlbWVudEVOM0pTQzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlOXVuaW9uUmVjdEVSS04zV1RG
NlZlY3RvcklOU185RmxvYXRSZWN0RUxtMEVFRQorX19aTjdXZWJDb3JlMTFCaXRtYXBJbWFnZUMx
RVBOU18xM0ltYWdlT2JzZXJ2ZXJFCitfX1pON1dlYkNvcmU1SW1hZ2U3c2V0RGF0YUVOM1dURjEw
UGFzc1JlZlB0cklOU18xMlNoYXJlZEJ1ZmZlckVFRWIKIF9fWk5LM0pTQzhCaW5kaW5nczEwUm9v
dE9iamVjdDEyZ2xvYmFsT2JqZWN0RXYKIF9fWk5LM1dURjZTdHJpbmcxNGNyZWF0ZUNGU3RyaW5n
RXYKIF9fWk5LN1dlYkNvcmUxMENyZWRlbnRpYWwxMWhhc1Bhc3N3b3JkRXYKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDExMDQ0OCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAzLTEyICBFbnJpY2EgQ2FzdWNjaSAgPGVu
cmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViS2l0MjogcmVtb3ZlIHRoZSBsYXN0IE5TUGFz
dGVib2FyZCBhY2Nlc3MgZnJvbSB0aGUgV2ViUHJvY2VzcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODAwNzMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIGxhc3QgcmVt
YWluaW5nIGFjY2VzcyB0byBOU1Bhc3RlYm9hcmQgZnJvbSB0aGUgV2ViUHJvY2Vzcy4KKyAgICAg
ICAgVGhlIGNvZGUgaW4gV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlIG5v
dyBwYWNrYWdlcyBhbGwgdGhlIGRhdGEKKyAgICAgICAgcmVxdWlyZWQgZm9yIHRoZSBkcmFnIGFu
ZCB0aGUgcHJvbWlzZWQgZHJhZyB0eXBlcyBhbmQgc2VuZHMgb25lIHJlcXVlc3QgdG8gdGhlIFVJ
CisgICAgICAgIHByb2Nlc3MgdGhhdCB3aWxsIHBsYWNlIHRoZSBkYXRhIGluIHRoZSBOU1Bhc3Rl
Ym9hcmQgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAgICAgCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9tYWMvUGFnZUNsaWVudEltcGwuaDogQWRkZWQgc2V0UHJvbWlzZWREYXRhIG1ldGhvZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdl
YktpdDo6UGFnZUNsaWVudEltcGw6OnNldFByb21pc2VkRGF0YSk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgorICAgICAgICAobWF0Y2hlc0V4dGVuc2lvbk9yRXF1aXZh
bGVudCk6IEFkZGVkLgorICAgICAgICAoZmlsZUV4aXN0cyk6IEFkZGVkLgorICAgICAgICAocGF0
aFdpdGhVbmlxdWVGaWxlbmFtZUZvclBhdGgpOiBBZGRlZC4KKyAgICAgICAgKC1bV0tWaWV3IF9z
ZXRQcm9taXNlZERhdGE6V2ViQ29yZTo6d2l0aEZpbGVOYW1lOndpdGhFeHRlbnNpb246d2l0aFRp
dGxlOndpdGhVUkw6d2l0aFZpc2libGVVUkw6d2l0aEFyY2hpdmU6V2ViQ29yZTo6Zm9yUGFzdGVi
b2FyZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IHBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6XSk6Cisg
ICAgICAgICgtW1dLVmlldyBwYXN0ZWJvYXJkOnByb3ZpZGVEYXRhRm9yVHlwZTpdKToKKyAgICAg
ICAgKC1bV0tWaWV3IG5hbWVzT2ZQcm9taXNlZEZpbGVzRHJvcHBlZEF0RGVzdGluYXRpb246XSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDogQWRkZWQgX3Nl
dFByb21pc2VkRGF0YS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDogQWRkZWQgbWV0aG9kIGZvciB0aGUgbmV3IG1l
c3NhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjogQWRk
ZWQgc2V0UHJvbWlzZWREYXRhIG1lc3NhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9XZWJQ
YWdlUHJveHlNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0UHJvbWlz
ZWREYXRhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGll
bnQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVu
dC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGll
bnRNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
U3lzdGVtSW50ZXJmYWNlLm1tOgorICAgICAgICAoSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Up
OiBBZGRlZCBTZXRNZXRhZGF0YVVSTC4KKwogMjAxMi0wMy0xMiAgQW5kcmFzIEJlY3NpICA8YW5k
cmFzLmJlY3NpQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdW1dLMl0gQWRkIHN1cHBvcnQgZm9y
IHJ1ZGltZW50YXJ5IHNjcm9sbCBpbmRpY2F0b3JzIGluIE1pbmlCcm93c2VyCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlzaW9uIDExMDQzNSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2
ICsxMzcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRl
KGJvb2wgdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXNl
dFRleHRJbnB1dFN0YXRlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBtYWtlRmlyc3RSZXNwb25k
ZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByb21pc2VkRGF0YShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gaW1hZ2VC
dWZmZXIsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBj
b25zdCBTdHJpbmcmIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IGFyY2hpdmVCdWZmZXIpID0gMDsKICNlbmRpZgogI2lmIFBMQVRG
T1JNKFdJTikKICAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2VkKGJv
b2wpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDExMDQzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDYgKzUxNyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRy
YWdFbmRlZChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3Qgb3BlcmF0aW9uKTsKICNp
ZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgZHJh
Z0ltYWdlSGFuZGxlLCBib29sIGlzTGlua0RyYWcpOworICAgIHZvaWQgc2V0UHJvbWlzZWREYXRh
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxl
JiBpbWFnZUhhbmRsZSwgdWludDY0X3QgaW1hZ2VTaXplLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2aXNpYmxl
VVJMLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgYXJjaGl2ZUhhbmRsZSwgdWludDY0X3Qg
YXJjaGl2ZVNpemUpOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgc3RhcnRE
cmFnRHJvcChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgaW1hZ2VQb2ludCwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGRyYWdQb2ludCwgdWludDY0X3Qgb2tFZmZlY3QsIGNvbnN0IEhhc2hNYXA8
VUlOVCwgVmVjdG9yPFN0cmluZz4gPiYgZGF0YU1hcCwgdWludDY0X3QgZmlsZVNpemUsIGNvbnN0
IFN0cmluZyYgcGF0aG5hbWUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBmaWxlQ29udGVu
dEhhbmRsZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZHJhZ0ltYWdlU2l6ZSwgY29uc3QgU2hh
cmVkTWVtb3J5OjpIYW5kbGUmIGRyYWdJbWFnZUhhbmRsZSwgYm9vbCBpc0xpbmtEcmFnKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgkocmV2aXNpb24gMTEwNDM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMjI3LDYgKzIyNyw3IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgRGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKFdlYkNvcmU6OkRyYWdTZXNzaW9uIGRyYWdTZXNzaW9uKQogI2lmIFBMQVRGT1JNKE1BQykK
ICAgICBTZXREcmFnSW1hZ2UoV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYktp
dDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgZHJhZ0ltYWdlLCBib29sIGxpbmtEcmFnKQorICAg
IFNldFByb21pc2VkRGF0YShXVEY6OlN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgV2ViS2l0OjpTaGFy
ZWRNZW1vcnk6OkhhbmRsZSBpbWFnZUhhbmRsZSwgdWludDY0X3QgaW1hZ2VTaXplLCBXVEY6OlN0
cmluZyBmaWxlbmFtZSwgV1RGOjpTdHJpbmcgZXh0ZW5zaW9uLCBXVEY6OlN0cmluZyB0aXRsZSwg
V1RGOjpTdHJpbmcgdXJsLCBXVEY6OlN0cmluZyB2aXNpYmxlVVJMLCBXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlIGFyY2hpdmVIYW5kbGUsIHVpbnQ2NF90IGFyY2hpdmVTaXplKQogI2VuZGlm
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFN0YXJ0RHJhZ0Ryb3AoV2ViQ29yZTo6SW50UG9pbnQg
aW1hZ2VQb2ludCwgV2ViQ29yZTo6SW50UG9pbnQgZHJhZ1BvaW50LCB1aW50NjRfdCBva0VmZmVj
dCwgSGFzaE1hcDxVSU5ULFZlY3RvcjxTdHJpbmc+ID4gZGF0YU1hcCwgdWludDY0X3QgZmlsZVNp
emUsIFN0cmluZyBwYXRobmFtZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBmaWxlQ29u
dGVudEhhbmRsZSwgV2ViQ29yZTo6SW50U2l6ZSBkcmFnSW1hZ2VTaXplLCBXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGRyYWdJbWFnZSwgYm9vbCBsaW5rRHJhZykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkocmV2aXNp
b24gMTEwNDM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVu
dEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKTsKICAgICB2aXJ0dWFsIGJvb2wg
ZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CiAg
ICAgdmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xp
ZW50UG9zaXRpb24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wg
aXNMaW5rRHJhZyk7CisgICAgdmlydHVhbCB2b2lkIHNldFByb21pc2VkRGF0YShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gaW1h
Z2VCdWZmZXIsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
LCBjb25zdCBTdHJpbmcmIHRpdGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdmlzaWJsZVVybCwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGFyY2hpdmVCdWZmZXIpOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUZXh0SW5wdXRTdGF0ZShib29sIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUpOwogICAgIHZp
cnR1YWwgdm9pZCByZXNldFRleHRJbnB1dFN0YXRlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAx
MTA0MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1w
bC5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDE1IEBACiAjaW1wb3J0ICJXZWJDb250
ZXh0TWVudVByb3h5TWFjLmgiCiAjaW1wb3J0ICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCiAjaW1w
b3J0ICJXZWJQb3B1cE1lbnVQcm94eU1hYy5oIgorI2ltcG9ydCA8V2ViQ29yZS9CaXRtYXBJbWFn
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvdW5kYXRpb25FeHRyYXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW1wb3J0IDx3dGYv
UGFzc093blB0ci5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CkBAIC0yNzgsNiArMjgxLDEzIEBAIHZvaWQgUGFnZUNsaWVudElt
cGw6OnNldERyYWdJbWFnZShjb25zdCAKICAgICBbbV93a1ZpZXcgX3NldERyYWdJbWFnZTpkcmFn
TlNJbWFnZS5nZXQoKSBhdDpjbGllbnRQb3NpdGlvbiBsaW5rRHJhZzppc0xpbmtEcmFnXTsKIH0K
IAordm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0UHJvbWlzZWREYXRhKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBpbWFnZUJ1ZmZlciwgY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIGNvbnN0IFN0cmluZyYg
dGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHZpc2libGVVcmwsIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiBhcmNoaXZlQnVmZmVyKQoreworICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAgaW1hZ2UtPnNldERhdGEoaW1hZ2VC
dWZmZXIuZ2V0KCksIHRydWUpOworICAgIFttX3drVmlldyBfc2V0UHJvbWlzZWREYXRhOmltYWdl
LmdldCgpIHdpdGhGaWxlTmFtZTpmaWxlbmFtZSB3aXRoRXh0ZW5zaW9uOmV4dGVuc2lvbiB3aXRo
VGl0bGU6dGl0bGUgd2l0aFVSTDp1cmwgd2l0aFZpc2libGVVUkw6dmlzaWJsZVVybCB3aXRoQXJj
aGl2ZTphcmNoaXZlQnVmZmVyLmdldCgpIGZvclBhc3RlYm9hcmQ6cGFzdGVib2FyZE5hbWVdOwor
fQorCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjp1cGRhdGVUZXh0SW5wdXRTdGF0ZShib29sIHVwZGF0
ZVNlY3VyZUlucHV0U3RhdGUpCiB7CiAgICAgW21fd2tWaWV3IF91cGRhdGVUZXh0SW5wdXRTdGF0
ZUluY2x1ZGluZ1NlY3VyZUlucHV0U3RhdGU6dXBkYXRlU2VjdXJlSW5wdXRTdGF0ZV07CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCShyZXZpc2lvbiAx
MTA0MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRHJhZ0RhdGEu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRHJhZ1Nlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRmxv
YXRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0ltYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0lu
dFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9Mb2NhbGl6ZWRTdHJpbmdzLmg+CkBAIC03MSw3ICs3MiwxMSBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZWdpb24uaD4KICNpbXBv
cnQgPFdlYkNvcmUvUnVuTG9vcC5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmg+CisjaW1wb3J0IDxXZWJD
b3JlL0ZpbGVTeXN0ZW0uaD4KICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2lt
cG9ydCA8c3lzL3N0YXQuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIApAQCAtMTk0LDYgKzE5OSw5IEBAIEBpbnRlcmZhY2UgV0tWaWV3RGF0YSA6
IE5TT2JqZWN0IHsKICAgICAvLyBXZSB1c2UgdGhpcyBmbGFnIHRvIGRldGVybWluZSB3aGVuIHdl
IG5lZWQgdG8gcGFpbnQgdGhlIGJhY2tncm91bmQgKHdoaXRlIG9yIGNsZWFyKQogICAgIC8vIHdo
ZW4gdGhlIHdlYiBwcm9jZXNzIGlzIHVucmVzcG9uc2l2ZSBvciB0YWtlcyB0b28gbG9uZyB0byBw
YWludC4KICAgICBCT09MIF93aW5kb3dIYXNWYWxpZEJhY2tpbmdTdG9yZTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6SW1hZ2U+IF9wcm9taXNlZEltYWdlOworICAgIFN0cmluZyBfcHJvbWlzZWRGaWxl
bmFtZTsKKyAgICBTdHJpbmcgX3Byb21pc2VkVVJMOwogfQogCiBAZW5kCkBAIC0yNTg4LDYgKzI1
OTYsMTIwIEBAIC0gKHZvaWQpX3NldERyYWdJbWFnZTooTlNJbWFnZSAqKWltYWdlIGEKICAgICBf
ZGF0YS0+X2RyYWdIYXNTdGFydGVkID0gTk87CiB9CiAKK3N0YXRpYyBib29sIG1hdGNoZXNFeHRl
bnNpb25PckVxdWl2YWxlbnQoTlNTdHJpbmcgKmZpbGVuYW1lLCBOU1N0cmluZyAqZXh0ZW5zaW9u
KQoreworICAgIE5TU3RyaW5nICpleHRlbnNpb25Bc1N1ZmZpeCA9IFtAIi4iIHN0cmluZ0J5QXBw
ZW5kaW5nU3RyaW5nOmV4dGVuc2lvbl07CisgICAgcmV0dXJuIGhhc0Nhc2VJbnNlbnNpdGl2ZVN1
ZmZpeChmaWxlbmFtZSwgZXh0ZW5zaW9uQXNTdWZmaXgpIHx8IChzdHJpbmdJc0Nhc2VJbnNlbnNp
dGl2ZUVxdWFsVG9TdHJpbmcoZXh0ZW5zaW9uLCBAImpwZWciKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgaGFz
Q2FzZUluc2Vuc2l0aXZlU3VmZml4KGZpbGVuYW1lLCBAIi5qcGciKSk7Cit9CisKKy0gKHZvaWQp
X3NldFByb21pc2VkRGF0YTooV2ViQ29yZTo6SW1hZ2UgKilpbWFnZSB3aXRoRmlsZU5hbWU6KE5T
U3RyaW5nICopZmlsZW5hbWUgd2l0aEV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRlbnNpb24gd2l0
aFRpdGxlOihOU1N0cmluZyAqKXRpdGxlIHdpdGhVUkw6KE5TU3RyaW5nICopdXJsIHdpdGhWaXNp
YmxlVVJMOihOU1N0cmluZyAqKXZpc2libGVVcmwgd2l0aEFyY2hpdmU6KFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlciopIGFyY2hpdmVCdWZmZXIgZm9yUGFzdGVib2FyZDooTlNTdHJpbmcgKilwYXN0ZWJv
YXJkTmFtZQorCit7CisgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW05TUGFzdGVib2Fy
ZCBwYXN0ZWJvYXJkV2l0aE5hbWU6cGFzdGVib2FyZE5hbWVdOworICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gdHlwZXMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdFdp
dGhPYmplY3RzOk5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZSwgbmlsXSk7CisgICAgCisgICAgW3R5
cGVzLmdldCgpIGFkZE9iamVjdHNGcm9tQXJyYXk6YXJjaGl2ZUJ1ZmZlciA/IFBhc3RlYm9hcmRU
eXBlczo6Zm9ySW1hZ2VzV2l0aEFyY2hpdmUoKSA6IFBhc3RlYm9hcmRUeXBlczo6Zm9ySW1hZ2Vz
KCldOworICAgIFtwYXN0ZWJvYXJkIGRlY2xhcmVUeXBlczp0eXBlcy5nZXQoKSBvd25lcjpzZWxm
XTsKKyAgICBpZiAoIW1hdGNoZXNFeHRlbnNpb25PckVxdWl2YWxlbnQoZmlsZW5hbWUsIGV4dGVu
c2lvbikpCisgICAgICAgIGZpbGVuYW1lID0gW1tmaWxlbmFtZSBzdHJpbmdCeUFwcGVuZGluZ1N0
cmluZzpAIi4iXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpleHRlbnNpb25dOworCisgICAgW3Bh
c3RlYm9hcmQgc2V0U3RyaW5nOnVybCBmb3JUeXBlOk5TVVJMUGJvYXJkVHlwZV07CisgICAgW3Bh
c3RlYm9hcmQgc2V0U3RyaW5nOnZpc2libGVVcmwgZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6Oldl
YlVSTFBib2FyZFR5cGVdOworICAgIFtwYXN0ZWJvYXJkIHNldFN0cmluZzp0aXRsZSBmb3JUeXBl
OlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMTmFtZVBib2FyZFR5cGVdOworICAgIFtwYXN0ZWJvYXJk
IHNldFByb3BlcnR5TGlzdDpbTlNBcnJheSBhcnJheVdpdGhPYmplY3RzOltOU0FycmF5IGFycmF5
V2l0aE9iamVjdDp1cmxdLCBbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6dGl0bGVdLCBuaWxdIGZv
clR5cGU6UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxzV2l0aFRpdGxlc1Bib2FyZFR5cGVdOworICAg
IFtwYXN0ZWJvYXJkIHNldFByb3BlcnR5TGlzdDpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZXh0
ZW5zaW9uXSBmb3JUeXBlOk5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZV07CisKKyAgICBpZiAoYXJj
aGl2ZUJ1ZmZlcikKKyAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTpbYXJjaGl2ZUJ1ZmZlci0+
Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdIGZvclR5cGU6UGFzdGVib2FyZFR5cGVzOjpXZWJB
cmNoaXZlUGJvYXJkVHlwZV07CisKKyAgICBfZGF0YS0+X3Byb21pc2VkSW1hZ2UgPSBpbWFnZTsK
KyAgICBfZGF0YS0+X3Byb21pc2VkRmlsZW5hbWUgPSBmaWxlbmFtZTsKKyAgICBfZGF0YS0+X3By
b21pc2VkVVJMID0gdXJsOworfQorCistICh2b2lkKXBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6KE5T
UGFzdGVib2FyZCAqKXBhc3RlYm9hcmQKK3sKKyAgICBfZGF0YS0+X3Byb21pc2VkSW1hZ2UgPSAw
OworICAgIF9kYXRhLT5fcHJvbWlzZWRGaWxlbmFtZSA9ICIiOworICAgIF9kYXRhLT5fcHJvbWlz
ZWRVUkwgPSAiIjsKK30KKworLSAodm9pZClwYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvYXJkIHByb3ZpZGVEYXRhRm9yVHlwZTooTlNTdHJpbmcgKil0eXBlCit7CisgICAgLy8gRklY
TUU6IG5lZWQgdG8gc3VwcG9ydCBOU1JURkRQYm9hcmRUeXBlCisKKyAgICBpZiAoW3R5cGUgaXNF
cXVhbDpOU1RJRkZQYm9hcmRUeXBlXSAmJiBfZGF0YS0+X3Byb21pc2VkSW1hZ2UpIHsKKyAgICAg
ICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopX2RhdGEtPl9wcm9taXNlZEltYWdlLT5n
ZXRUSUZGUmVwcmVzZW50YXRpb24oKSBmb3JUeXBlOk5TVElGRlBib2FyZFR5cGVdOworICAgICAg
ICBfZGF0YS0+X3Byb21pc2VkSW1hZ2UgPSAwOworICAgIH0KK30KKworc3RhdGljIEJPT0wgZmls
ZUV4aXN0cyhOU1N0cmluZyAqcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0QnVmZmVyOwor
ICAgIHJldHVybiAhbHN0YXQoW3BhdGggZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uXSwgJnN0YXRC
dWZmZXIpOworfQorCitzdGF0aWMgTlNTdHJpbmcgKnBhdGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQ
YXRoKE5TU3RyaW5nICpwYXRoKQoreworICAgIC8vICJGaXgiIHRoZSBmaWxlbmFtZSBvZiB0aGUg
cGF0aC4KKyAgICBOU1N0cmluZyAqZmlsZW5hbWUgPSBmaWxlbmFtZUJ5Rml4aW5nSWxsZWdhbENo
YXJhY3RlcnMoW3BhdGggbGFzdFBhdGhDb21wb25lbnRdKTsKKyAgICBwYXRoID0gW1twYXRoIHN0
cmluZ0J5RGVsZXRpbmdMYXN0UGF0aENvbXBvbmVudF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OmZpbGVuYW1lXTsKKyAgICAKKyAgICBpZiAoZmlsZUV4aXN0cyhwYXRoKSkgeworICAg
ICAgICAvLyBEb24ndCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZSBieSBhcHBlbmRpbmcgIi1uIiwg
Ii1uLmV4dCIgb3IgIi1uLmV4dC5leHQiIHRvIHRoZSBmaWxlbmFtZS4KKyAgICAgICAgTlNTdHJp
bmcgKmV4dGVuc2lvbnMgPSBuaWw7CisgICAgICAgIE5TU3RyaW5nICpwYXRoV2l0aG91dEV4dGVu
c2lvbnM7CisgICAgICAgIE5TU3RyaW5nICpsYXN0UGF0aENvbXBvbmVudCA9IFtwYXRoIGxhc3RQ
YXRoQ29tcG9uZW50XTsKKyAgICAgICAgTlNSYW5nZSBwZXJpb2RSYW5nZSA9IFtsYXN0UGF0aENv
bXBvbmVudCByYW5nZU9mU3RyaW5nOkAiLiJdOworICAgICAgICAKKyAgICAgICAgaWYgKHBlcmlv
ZFJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpIHsKKyAgICAgICAgICAgIHBhdGhXaXRob3V0
RXh0ZW5zaW9ucyA9IHBhdGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHRlbnNp
b25zID0gW2xhc3RQYXRoQ29tcG9uZW50IHN1YnN0cmluZ0Zyb21JbmRleDpwZXJpb2RSYW5nZS5s
b2NhdGlvbiArIDFdOworICAgICAgICAgICAgbGFzdFBhdGhDb21wb25lbnQgPSBbbGFzdFBhdGhD
b21wb25lbnQgc3Vic3RyaW5nVG9JbmRleDpwZXJpb2RSYW5nZS5sb2NhdGlvbl07CisgICAgICAg
ICAgICBwYXRoV2l0aG91dEV4dGVuc2lvbnMgPSBbW3BhdGggc3RyaW5nQnlEZWxldGluZ0xhc3RQ
YXRoQ29tcG9uZW50XSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6bGFzdFBhdGhDb21w
b25lbnRdOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyA7IGkrKykgeworICAgICAgICAgICAgTlNTdHJpbmcgKnBhdGhXaXRoQXBwZW5kZWROdW1iZXIg
PSBbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVALSVkIiwgcGF0aFdpdGhvdXRFeHRlbnNp
b25zLCBpXTsKKyAgICAgICAgICAgIHBhdGggPSBbZXh0ZW5zaW9ucyBsZW5ndGhdID8gW3BhdGhX
aXRoQXBwZW5kZWROdW1iZXIgc3RyaW5nQnlBcHBlbmRpbmdQYXRoRXh0ZW5zaW9uOmV4dGVuc2lv
bnNdIDogcGF0aFdpdGhBcHBlbmRlZE51bWJlcjsKKyAgICAgICAgICAgIGlmICghZmlsZUV4aXN0
cyhwYXRoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICByZXR1cm4gcGF0aDsKK30KKworLSAoTlNBcnJheSAqKW5hbWVzT2ZQcm9taXNlZEZpbGVz
RHJvcHBlZEF0RGVzdGluYXRpb246KE5TVVJMICopZHJvcERlc3RpbmF0aW9uCit7CisgICAgUmV0
YWluUHRyPE5TRmlsZVdyYXBwZXI+IHdyYXBwZXI7CisgICAgCisgICAgaWYgKF9kYXRhLT5fcHJv
bWlzZWRJbWFnZSkgeyAgICAgICAgCisgICAgICAgIE5TRGF0YSAqZGF0YSA9IFtfZGF0YS0+X3By
b21pc2VkSW1hZ2UtPmRhdGEoKS0+Y3JlYXRlTlNEYXRhKCkgYXV0b3JlbGVhc2VdOworICAgICAg
ICB3cmFwcGVyLmFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVX
aXRoQ29udGVudHM6ZGF0YV0pOworICAgICAgICBbd3JhcHBlci5nZXQoKSBzZXRQcmVmZXJyZWRG
aWxlbmFtZTpfZGF0YS0+X3Byb21pc2VkRmlsZW5hbWVdOworICAgIH0KKyAgICAKKyAgICBpZiAo
IXdyYXBwZXIpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGltYWdlIGZp
bGUuIik7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBS
ZXBvcnQgYW4gZXJyb3IgaWYgd2UgZmFpbCB0byBjcmVhdGUgYSBmaWxlLgorICAgIE5TU3RyaW5n
ICpwYXRoID0gW1tkcm9wRGVzdGluYXRpb24gcGF0aF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50Olt3cmFwcGVyLmdldCgpIHByZWZlcnJlZEZpbGVuYW1lXV07CisgICAgcGF0aCA9IHBh
dGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRoKHBhdGgpOworICAgIGlmICghW3dyYXBwZXIuZ2V0
KCkgd3JpdGVUb0ZpbGU6cGF0aCBhdG9taWNhbGx5Ok5PIHVwZGF0ZUZpbGVuYW1lczpZRVNdKQor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgaW1hZ2UgZmlsZSB2aWEgLVtOU0Zp
bGVXcmFwcGVyIHdyaXRlVG9GaWxlOmF0b21pY2FsbHk6dXBkYXRlRmlsZW5hbWVzOl0iKTsKKyAg
ICAKKyAgICBpZiAoIV9kYXRhLT5fcHJvbWlzZWRVUkwuaXNFbXB0eSgpKQorICAgICAgICBXZWJD
b3JlOjpzZXRNZXRhZGF0YVVSTChfZGF0YS0+X3Byb21pc2VkVVJMLCAiIiwgU3RyaW5nKHBhdGgp
KTsKKyAgICAKKyAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltwYXRoIGxhc3RQ
YXRoQ29tcG9uZW50XV07Cit9CisKIC0gKHZvaWQpX3VwZGF0ZVNlY3VyZUlucHV0U3RhdGUKIHsK
ICAgICBpZiAoIVtbc2VsZiB3aW5kb3ddIGlzS2V5V2luZG93XSB8fCAhW3NlbGYgX2lzRm9jdXNl
ZF0pIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVy
bmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tW
aWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMTEwNDM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUs
OCBAQCBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBzdHJ1
Y3QgS2V5cHJlc3NDb21tYW5kOworICAgIGNsYXNzIEltYWdlOworICAgIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC03OCw2ICs4MCw3IEBAIEBpbnRlcmZh
Y2UgV0tWaWV3IChJbnRlcm5hbCkKIC0gKHZvaWQpX2ZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2Vu
dGF0aW9uOihOU1N0cmluZyAqKXN0cmluZyB3aXRoRmluZE9wdGlvbnM6KFdlYktpdDo6RmluZE9w
dGlvbnMpb3B0aW9ucyBtYXhNYXRjaENvdW50OihOU1VJbnRlZ2VyKWNvdW50OwogLSAodm9pZClf
Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbjooTlNTdHJpbmcgKilzdHJp
bmcgd2l0aEZpbmRPcHRpb25zOihXZWJLaXQ6OkZpbmRPcHRpb25zKW9wdGlvbnMgbWF4TWF0Y2hD
b3VudDooTlNVSW50ZWdlciljb3VudDsKIC0gKHZvaWQpX3NldERyYWdJbWFnZTooTlNJbWFnZSAq
KWltYWdlIGF0OihOU1BvaW50KWNsaWVudFBvaW50IGxpbmtEcmFnOihCT09MKWxpbmtEcmFnOwor
LSAodm9pZClfc2V0UHJvbWlzZWREYXRhOihXZWJDb3JlOjpJbWFnZSAqKWltYWdlIHdpdGhGaWxl
TmFtZTooTlNTdHJpbmcgKilmaWxlbmFtZSB3aXRoRXh0ZW5zaW9uOihOU1N0cmluZyAqKWV4dGVu
c2lvbiB3aXRoVGl0bGU6KE5TU3RyaW5nICopdGl0bGUgd2l0aFVSTDooTlNTdHJpbmcgKil1cmwg
d2l0aFZpc2libGVVUkw6KE5TU3RyaW5nICopdmlzaWJsZVVybCB3aXRoQXJjaGl2ZTooV2ViQ29y
ZTo6U2hhcmVkQnVmZmVyKikgYXJjaGl2ZUJ1ZmZlciBmb3JQYXN0ZWJvYXJkOihOU1N0cmluZyAq
KXBhc3RlYm9hcmROYW1lOwogLSAodm9pZClfdXBkYXRlU2VjdXJlSW5wdXRTdGF0ZTsKIC0gKHZv
aWQpX3VwZGF0ZVRleHRJbnB1dFN0YXRlSW5jbHVkaW5nU2VjdXJlSW5wdXRTdGF0ZTooQk9PTCl1
cGRhdGVTZWN1cmVJbnB1dFN0YXRlOwogLSAodm9pZClfcmVzZXRUZXh0SW5wdXRTdGF0ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1t
CShyZXZpc2lvbiAxMTA0MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBh
Z2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2ltcG9ydCAi
VGV4dENoZWNrZXIuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNzYWdlcy5oIgogI2ltcG9ydCAiV2Vi
UHJvY2Vzc1Byb3h5LmgiCisjaW1wb3J0IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgogI2ltcG9y
dCA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZS5oPgogCkBAIC0yODcsNiArMjg4LDIwIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRE
cmFnSW1hZ2UoY29uc3QgV2UKICAgICBtX3BhZ2VDbGllbnQtPnNldERyYWdJbWFnZShjbGllbnRQ
b3NpdGlvbiwgZHJhZ0ltYWdlLnJlbGVhc2UoKSwgaXNMaW5rRHJhZyk7CiB9CiAKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRQcm9taXNlZERhdGEoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
Y29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNp
emUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB2aXNpYmxlVVJMLCBjb25zdCBTaGFyZWRNZW1v
cnk6OkhhbmRsZSYgYXJjaGl2ZUhhbmRsZSwgdWludDY0X3QgYXJjaGl2ZVNpemUpCit7CisgICAg
UmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5SW1hZ2UgPSBTaGFyZWRNZW1vcnk6OmNy
ZWF0ZShpbWFnZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc2hhcmVkTWVtb3J5SW1hZ2UtPmRhdGEoKSksIGltYWdlU2l6ZSk7
CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYXJjaGl2ZUJ1ZmZlcjsKKyAgICAKKyAgICBpZiAo
IWFyY2hpdmVIYW5kbGUuaXNOdWxsKCkpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4g
c2hhcmVkTWVtb3J5QXJjaGl2ZSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGFyY2hpdmVIYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOzsKKyAgICAgICAgYXJjaGl2ZUJ1ZmZlciA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzaGFyZWRNZW1vcnlB
cmNoaXZlLT5kYXRhKCkpLCBhcmNoaXZlU2l6ZSk7CisgICAgfQorICAgIG1fcGFnZUNsaWVudC0+
c2V0UHJvbWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUJ1ZmZlciwgZmlsZW5hbWUsIGV4
dGVuc2lvbiwgdGl0bGUsIHVybCwgdmlzaWJsZVVSTCwgYXJjaGl2ZUJ1ZmZlcik7Cit9CisKIHZv
aWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24oY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgcG9pbnQpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRHJhZ0NsaWVudC5jcHAJKHJldmlzaW9uIDExMDQzNSkKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDEyICs1OCw2IEBAIHZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJ
bWFnZVIKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKE1BQykKLXZvaWQgV2ViRHJhZ0NsaWVu
dDo6ZHJhZ0VuZGVkKCkKLXsKLX0KLSNlbmRpZgotCiB2b2lkIFdlYkRyYWdDbGllbnQ6OmRyYWdD
b250cm9sbGVyRGVzdHJveWVkKCkKIHsKICAgICBkZWxldGUgdGhpczsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5oCShyZXZpc2lvbiAxMTA0MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTEgKzI4
LDYgQEAKIAogI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0NsaWVudC5oPgogCi0jaWYgUExBVEZPUk0o
TUFDKQotT0JKQ19DTEFTUyBXS1Bhc3RlYm9hcmRGaWxlUHJvbWlzZU93bmVyOwotT0JKQ19DTEFT
UyBXS1Bhc3RlYm9hcmRPd25lcjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgV2ViUGFnZTsKQEAgLTU2LDE2ICs1MSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lk
IGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBE
T01FbGVtZW50KiwgTlNVUkwqLCBOU1N0cmluZyosIFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7
CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBkcmFnRW5kZWQoKSBPVkVSUklERTsKLQogICAg
IHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpIE9WRVJSSURFOwogCiAgICAg
V2ViUGFnZSogbV9wYWdlOwotICAgIAotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8
V0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lcj4gbV9maWxlUHJvbWlzZU93bmVyOwotICAgIFJl
dGFpblB0cjxXS1Bhc3RlYm9hcmRPd25lcj4gbV9wYXN0ZWJvYXJkT3duZXI7Ci0jZW5kaWYKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50
TWFjLm1tCShyZXZpc2lvbiAxMTA0MzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
NCwyOCArNTQsNiBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogCi0vLyBJbnRlcm5hbCBBcHBLaXQgY2xhc3MuIElmIHRoZSBwYXN0ZWJvYXJkIGhh
bmRsaW5nIHdhcyBpbiB0aGUgc2FtZSBwcm9jZXNzCi0vLyB0aGF0IGNhbGxlZCB0aGUgZHJhZ0lt
YWdlIG1ldGhvZCwgdGhpcyB3b3VsZCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuCi0vLyBDcmVh
dGUgaXQgZXhwbGljaXRseSBiZWNhdXNlIGRyYWdJbWFnZSBpcyBjYWxsZWQgaW4gdGhlIFVJIHBy
b2Nlc3MuCi1AaW50ZXJmYWNlIE5TRmlsZVByb21pc2VEcmFnU291cmNlIDogTlNPYmplY3QKLXsK
LSAgICBpZCBfZHJhZ1NvdXJjZTsKLSAgICBjaGFyIF91bmtub3duRmllbGRzWzI1Nl07Ci19Ci0t
IChpZClpbml0V2l0aFNvdXJjZTooaWQpZHJhZ1NvdXJjZTsKLS0gKHZvaWQpc2V0VHlwZXM6KE5T
QXJyYXkgKil0eXBlcyBvblBhc3RlYm9hcmQ6KE5TUGFzdGVib2FyZCAqKXBhc3RlYm9hcmQ7Ci1A
ZW5kCi0KLUBpbnRlcmZhY2UgV0tQYXN0ZWJvYXJkRmlsZVByb21pc2VPd25lciA6IE5TRmlsZVBy
b21pc2VEcmFnU291cmNlCi1AZW5kCi0KLUBpbnRlcmZhY2UgV0tQYXN0ZWJvYXJkT3duZXIgOiBO
U09iamVjdAotewotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPFdlYkNvcmU6OkNhY2hlZEltYWdl
PiBfaW1hZ2U7Ci19Ci0tIChpZClpbml0V2l0aEltYWdlOihXZWJDb3JlOjpDYWNoZWRJbWFnZSop
aW1hZ2U7Ci1AZW5kCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGNvbnZlcnRJbWFnZVRvQml0bWFwKE5TSW1hZ2UgKmltYWdlLCBjb25z
dCBJbnRTaXplJiBzaXplKQpAQCAtMTE5LDEyICs5Nyw2IEBAIHN0YXRpYyBXZWJDb3JlOjpDYWNo
ZWRJbWFnZSogY2FjaGVkSW1hZ2UKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLXN0YXRpYyBOU0Fy
cmF5ICphcnJheUZvclVSTHNXaXRoVGl0bGVzKE5TVVJMICpVUkwsIE5TU3RyaW5nICp0aXRsZSkK
LXsKLSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0czpbTlNBcnJheSBhcnJheVdp
dGhPYmplY3Q6W1VSTCBfd2ViX29yaWdpbmFsRGF0YUFzU3RyaW5nXV0sCi0gICAgICAgIFtOU0Fy
cmF5IGFycmF5V2l0aE9iamVjdDpbdGl0bGUgX3dlYmtpdF9zdHJpbmdCeVRyaW1taW5nV2hpdGVz
cGFjZV1dLCBuaWxdOwotfQotCiB2b2lkIFdlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURy
YWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBET01FbGVtZW50ICplbGVtZW50
LCBOU1VSTCAqVVJMLCBOU1N0cmluZyAqdGl0bGUsIFdlYkNvcmU6OkZyYW1lKikKIHsKICAgICBB
U1NFUlQoZWxlbWVudCk7CkBAIC0xNDksMTkwICsxMjEsMjcgQEAgdm9pZCBXZWJEcmFnQ2xpZW50
OjpkZWNsYXJlQW5kV3JpdGVEcmFnSQogCiAgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFy
Y2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoY29yZUVsZW1lbnQpOwogCi0gICAgUmV0
YWluUHRyPE5TTXV0YWJsZUFycmF5PiB0eXBlcyhBZG9wdE5TLCBbW05TTXV0YWJsZUFycmF5IGFs
bG9jXSBpbml0V2l0aE9iamVjdHM6TlNGaWxlc1Byb21pc2VQYm9hcmRUeXBlLCBuaWxdKTsKLSAg
ICBbdHlwZXMuZ2V0KCkgYWRkT2JqZWN0c0Zyb21BcnJheTphcmNoaXZlID8gUGFzdGVib2FyZFR5
cGVzOjpmb3JJbWFnZXNXaXRoQXJjaGl2ZSgpIDogUGFzdGVib2FyZFR5cGVzOjpmb3JJbWFnZXMo
KV07Ci0KLSAgICBtX3Bhc3RlYm9hcmRPd25lci5hZG9wdE5TKFtbV0tQYXN0ZWJvYXJkT3duZXIg
YWxsb2NdIGluaXRXaXRoSW1hZ2U6aW1hZ2VdKTsKLSAgICBtX2ZpbGVQcm9taXNlT3duZXIuYWRv
cHROUyhbKFdLUGFzdGVib2FyZEZpbGVQcm9taXNlT3duZXIgKilbV0tQYXN0ZWJvYXJkRmlsZVBy
b21pc2VPd25lciBhbGxvY10gaW5pdFdpdGhTb3VyY2U6bV9wYXN0ZWJvYXJkT3duZXIuZ2V0KCld
KTsKLQotICAgIE5TUGFzdGVib2FyZCogcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVi
b2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXTsKLSAgICBbcGFzdGVib2FyZCBkZWNsYXJlVHlw
ZXM6dHlwZXMuZ2V0KCkgb3duZXI6bV9wYXN0ZWJvYXJkT3duZXIubGVha1JlZigpXTsgICAgCi0K
LSAgICBbcGFzdGVib2FyZCBzZXRQcm9wZXJ0eUxpc3Q6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0
OmV4dGVuc2lvbl0gZm9yVHlwZTpOU0ZpbGVzUHJvbWlzZVBib2FyZFR5cGVdOwotCi0gICAgW21f
ZmlsZVByb21pc2VPd25lci5nZXQoKSBzZXRUeXBlczpbcGFzdGVib2FyZCBwcm9wZXJ0eUxpc3RG
b3JUeXBlOk5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZV0gb25QYXN0ZWJvYXJkOnBhc3RlYm9hcmRd
OwotCi0gICAgW1VSTCB3cml0ZVRvUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKLQotICAgIFtwYXN0
ZWJvYXJkIHNldFN0cmluZzpbVVJMIF93ZWJfb3JpZ2luYWxEYXRhQXNTdHJpbmddIGZvclR5cGU6
UGFzdGVib2FyZFR5cGVzOjpXZWJVUkxQYm9hcmRUeXBlXTsKLQotICAgIFtwYXN0ZWJvYXJkIHNl
dFN0cmluZzp0aXRsZSBmb3JUeXBlOlBhc3RlYm9hcmRUeXBlczo6V2ViVVJMTmFtZVBib2FyZFR5
cGVdOwotCi0gICAgW3Bhc3RlYm9hcmQgc2V0U3RyaW5nOltVUkwgX3dlYl91c2VyVmlzaWJsZVN0
cmluZ10gZm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdOwotCi0gICAgW3Bhc3RlYm9hcmQgc2V0
UHJvcGVydHlMaXN0OmFycmF5Rm9yVVJMc1dpdGhUaXRsZXMoVVJMLCB0aXRsZSkgZm9yVHlwZTpQ
YXN0ZWJvYXJkVHlwZXM6OldlYlVSTHNXaXRoVGl0bGVzUGJvYXJkVHlwZV07Ci0KLSAgICBpZiAo
YXJjaGl2ZSkKLSAgICAgICAgW3Bhc3RlYm9hcmQgc2V0RGF0YTooTlNEYXRhICopYXJjaGl2ZS0+
cmF3RGF0YVJlcHJlc2VudGF0aW9uKCkuZ2V0KCkgZm9yVHlwZTpQYXN0ZWJvYXJkVHlwZXM6Oldl
YkFyY2hpdmVQYm9hcmRUeXBlXTsKLX0KLQotdm9pZCBXZWJEcmFnQ2xpZW50OjpkcmFnRW5kZWQo
KQotewotICAgIC8vIFRoZSBkcmFnZ2VkSW1hZ2UgbWV0aG9kIHJlbGVhc2VzIGl0cyByZXNwb25k
ZXI7IHdlIG11c3QgcmV0YWluIHRoZSBXS1Bhc3RlYm9hcmRGaWxlUHJvbWlzZU93bmVyIGFuIGV4
dHJhIHRpbWUgdG8gYmFsYW5jZSB0aGUgcmVsZWFzZQotICAgIC8vIGluc2lkZSBvZiB0aGUgZnVu
Y3Rpb24uCi0gICAgW21fZmlsZVByb21pc2VPd25lci5nZXQoKSByZXRhaW5dOwotCi0gICAgLy8g
VGhlIGRyYWcgc291cmNlIHdlIGNhcmUgYWJvdXQgaGVyZSBpcyBOU0ZpbGVQcm9taXNlRHJhZ1Nv
dXJjZSwgd2hpY2ggZG9lc24ndCBsb29rIGF0Ci0gICAgLy8gdGhlIGFyZ3VtZW50cy4gSXQncyBP
SyB0byBqdXN0IHBhc3MgYXJiaXRyYXJ5IGNvbnN0YW50IHZhbHVlcywgc28gd2UganVzdCBwYXNz
IGFsbCB6ZXJvZXMuCi0gICAgW21fZmlsZVByb21pc2VPd25lci5nZXQoKSBkcmFnZ2VkSW1hZ2U6
bmlsIGVuZGVkQXQ6TlNaZXJvUG9pbnQgb3BlcmF0aW9uOk5TRHJhZ09wZXJhdGlvbk5vbmVdOwor
ICAgIE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gaW1hZ2UtPnJlc3BvbnNlKCkubnNVUkxSZXNw
b25zZSgpOwogICAgIAotICAgIG1fcGFzdGVib2FyZE93bmVyID0gbnVsbHB0cjsKLSAgICBtX2Zp
bGVQcm9taXNlT3duZXIgPSBudWxscHRyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
QGltcGxlbWVudGF0aW9uIFdLUGFzdGVib2FyZEZpbGVQcm9taXNlT3duZXIKLQotLSAoaWQpaW5p
dFdpdGhTb3VyY2U6KGlkKWRyYWdTb3VyY2UKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRo
U291cmNlOmRyYWdTb3VyY2VdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBbX2RyYWdTb3VyY2UgcmV0YWluXTsKLSAgICByZXR1cm4gc2VsZjsKLX0KLQotLSAodm9p
ZClkZWFsbG9jCi17Ci0gICAgW19kcmFnU291cmNlIHJlbGVhc2VdOwotICAgIFtzdXBlciBkZWFs
bG9jXTsKLX0KLQotLy8gVGhlIEFwcEtpdCBpbXBsZW1lbnRhdGlvbiBvZiBjb3B5RHJvcERpcmVj
dG9yeSBnZXRzIHRoZSBjdXJyZW50IHBhc3RlYm9hcmQgaW4KLS8vIGEgd2F5IHRoYXQgb25seSB3
b3JrcyBpbiB0aGUgcHJvY2VzcyB3aGVyZSB0aGUgZHJhZyBpcyBpbml0aWF0ZWQuIFdlIHN1cHBs
eQotLy8gYW4gaW1wbGVtZW50YXRpb24gdGhhdCBnZXRzIHRoZSBwYXN0ZWJvYXJkIGJ5IG5hbWUg
aW5zdGVhZC4KLS0gKENGVVJMUmVmKWNvcHlEcm9wRGlyZWN0b3J5Ci17Ci0gICAgUGFzdGVib2Fy
ZFJlZiBwYXN0ZWJvYXJkOwotICAgIE9TU3RhdHVzIHN0YXR1cyA9IFBhc3RlYm9hcmRDcmVhdGUo
KENGU3RyaW5nUmVmKU5TRHJhZ1Bib2FyZCwgJnBhc3RlYm9hcmQpOwotICAgIGlmIChzdGF0dXMg
IT0gbm9FcnIgfHwgIXBhc3RlYm9hcmQpCi0gICAgICAgIHJldHVybiAwOwotICAgIENGVVJMUmVm
IGxvY2F0aW9uID0gMDsKLSAgICBzdGF0dXMgPSBQYXN0ZWJvYXJkQ29weVBhc3RlTG9jYXRpb24o
cGFzdGVib2FyZCwgJmxvY2F0aW9uKTsKLSAgICBDRlJlbGVhc2UocGFzdGVib2FyZCk7Ci0gICAg
aWYgKHN0YXR1cyAhPSBub0VyciB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybiAwOwotICAg
IENGTWFrZUNvbGxlY3RhYmxlKGxvY2F0aW9uKTsKLSAgICByZXR1cm4gbG9jYXRpb247Ci19Ci0K
LUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdLUGFzdGVib2FyZE93bmVyCi0KLXN0YXRpYyBDYWNo
ZWRJbWFnZUNsaWVudCogcHJvbWlzZWREYXRhQ2xpZW50KCkKLXsKLSAgICBzdGF0aWMgQ2FjaGVk
SW1hZ2VDbGllbnQqIGNsaWVudCA9IG5ldyBDYWNoZWRJbWFnZUNsaWVudDsKLSAgICByZXR1cm4g
Y2xpZW50OwotfQotCi0tICh2b2lkKWNsZWFySW1hZ2UKLXsKLSAgICBpZiAoIV9pbWFnZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIF9pbWFnZS0+cmVtb3ZlQ2xpZW50KHByb21pc2VkRGF0YUNsaWVu
dCgpKTsKLSAgICBfaW1hZ2UgPSAwOwotfQotCi0tIChpZClpbml0V2l0aEltYWdlOihXZWJDb3Jl
OjpDYWNoZWRJbWFnZSopaW1hZ2UKLXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlm
ICghc2VsZikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIF9pbWFnZSA9IGltYWdlOwotICAg
IGlmIChpbWFnZSkKLSAgICAgICAgaW1hZ2UtPmFkZENsaWVudChwcm9taXNlZERhdGFDbGllbnQo
KSk7Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKHZvaWQpZGVhbGxvYwotewotICAgIFtzZWxm
IGNsZWFySW1hZ2VdOwotICAgIFtzdXBlciBkZWFsbG9jXTsKLX0KLQotLSAodm9pZClmaW5hbGl6
ZQotewotICAgIFtzZWxmIGNsZWFySW1hZ2VdOwotICAgIFtzdXBlciBmaW5hbGl6ZV07Ci19Ci0K
LS0gKHZvaWQpcGFzdGVib2FyZDooTlNQYXN0ZWJvYXJkICopcGFzdGVib2FyZCBwcm92aWRlRGF0
YUZvclR5cGU6KE5TU3RyaW5nICopdHlwZQotewotICAgIGlmIChbdHlwZSBpc0VxdWFsOk5TVElG
RlBib2FyZFR5cGVdKSB7Ci0gICAgICAgIGlmIChfaW1hZ2UpIHsKLSAgICAgICAgICAgIGlmIChJ
bWFnZSogaW1hZ2UgPSBfaW1hZ2UtPmltYWdlKCkpCi0gICAgICAgICAgICAgICAgW3Bhc3RlYm9h
cmQgc2V0RGF0YTooTlNEYXRhICopaW1hZ2UtPmdldFRJRkZSZXByZXNlbnRhdGlvbigpIGZvclR5
cGU6TlNUSUZGUGJvYXJkVHlwZV07Ci0gICAgICAgICAgICBbc2VsZiBjbGVhckltYWdlXTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBIYW5kbGUgUlRG
RCBoZXJlLgotfQotCi0tICh2b2lkKXBhc3RlYm9hcmRDaGFuZ2VkT3duZXI6KE5TUGFzdGVib2Fy
ZCAqKXBhc3RlYm9hcmQKLXsKLSAgICBbc2VsZiBjbGVhckltYWdlXTsKLSAgICBDRlJlbGVhc2Uo
c2VsZik7IC8vIEJhbGFuY2VkIGJ5IHRoZSBsZWFrUmVmIHRoYXQgV2ViRHJhZ0NsaWVudDo6ZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlIGRvZXMgd2hlbiBtYWtpbmcgdGhpcyBwYXN0ZWJvYXJkIG93
bmVyLgotfQotCi1zdGF0aWMgYm9vbCBtYXRjaGVzRXh0ZW5zaW9uT3JFcXVpdmFsZW50KE5TU3Ry
aW5nICpmaWxlbmFtZSwgTlNTdHJpbmcgKmV4dGVuc2lvbikKLXsKLSAgICBOU1N0cmluZyAqZXh0
ZW5zaW9uQXNTdWZmaXggPSBbQCIuIiBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpleHRlbnNpb25d
OwotICAgIHJldHVybiBbZmlsZW5hbWUgX3dlYmtpdF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXg6
ZXh0ZW5zaW9uQXNTdWZmaXhdCi0gICAgICAgIHx8IChbZXh0ZW5zaW9uIF93ZWJraXRfaXNDYXNl
SW5zZW5zaXRpdmVFcXVhbFRvU3RyaW5nOkAianBlZyJdCi0gICAgICAgICAgICAmJiBbZmlsZW5h
bWUgX3dlYmtpdF9oYXNDYXNlSW5zZW5zaXRpdmVTdWZmaXg6QCIuanBnIl0pOwotfQotCi0tIChO
U0FycmF5ICopbmFtZXNPZlByb21pc2VkRmlsZXNEcm9wcGVkQXREZXN0aW5hdGlvbjooTlNVUkwg
Kilkcm9wRGVzdGluYXRpb24KLXsKLSAgICBOU0ZpbGVXcmFwcGVyICp3cmFwcGVyID0gbmlsOwot
ICAgIE5TVVJMICpkcmFnZ2luZ0ltYWdlVVJMID0gbmlsOworICAgIFJlZlB0cjxTaGFyZWRCdWZm
ZXI+IGltYWdlQnVmZmVyID0gaW1hZ2UtPmltYWdlKCktPmRhdGEoKTsKKyAgICBzaXplX3QgaW1h
Z2VTaXplID0gaW1hZ2VCdWZmZXItPnNpemUoKTsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBp
bWFnZUhhbmRsZTsKICAgICAKLSAgICBpZiAoX2ltYWdlKSB7Ci0gICAgICAgIGlmIChTaGFyZWRC
dWZmZXIqIGJ1ZmZlciA9IF9pbWFnZS0+Q2FjaGVkUmVzb3VyY2U6OmRhdGEoKSkgewotICAgICAg
ICAgICAgTlNEYXRhICpkYXRhID0gYnVmZmVyLT5jcmVhdGVOU0RhdGEoKTsKLSAgICAgICAgICAg
IE5TVVJMUmVzcG9uc2UgKnJlc3BvbnNlID0gX2ltYWdlLT5yZXNwb25zZSgpLm5zVVJMUmVzcG9u
c2UoKTsKLSAgICAgICAgICAgIGRyYWdnaW5nSW1hZ2VVUkwgPSBbcmVzcG9uc2UgVVJMXTsKLSAg
ICAgICAgICAgIHdyYXBwZXIgPSBbW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZp
bGVXaXRoQ29udGVudHM6ZGF0YV0gYXV0b3JlbGVhc2VdOwotICAgICAgICAgICAgTlNTdHJpbmcq
IGZpbGVuYW1lID0gW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXTsKLSAgICAgICAgICAgIE5T
U3RyaW5nKiB0cnVlRXh0ZW5zaW9uKF9pbWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24o
KSk7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoZXNFeHRlbnNpb25PckVxdWl2YWxlbnQoZmlsZW5h
bWUsIHRydWVFeHRlbnNpb24pKQotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gW1tmaWxlbmFt
ZSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzpAIi4iXSBzdHJpbmdCeUFwcGVuZGluZ1N0cmluZzp0
cnVlRXh0ZW5zaW9uXTsKLSAgICAgICAgICAgIFt3cmFwcGVyIHNldFByZWZlcnJlZEZpbGVuYW1l
OmZpbGVuYW1lXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBkbyBub3QgaGF2ZSBhIENhY2hlZEltYWdlPwot
ICAgIC8vIFdlYktpdDEgaGFkIGNvZGUgZm9yIHRoaXMgY2FzZS4KKyAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShpbWFnZUJ1
ZmZlci0+c2l6ZSgpKTsKKyAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGlt
YWdlQnVmZmVyLT5kYXRhKCksIGltYWdlU2l6ZSk7CisgICAgc2hhcmVkTWVtb3J5QnVmZmVyLT5j
cmVhdGVIYW5kbGUoaW1hZ2VIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwogICAgIAot
ICAgIGlmICghd3JhcHBlcikgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUg
aW1hZ2UgZmlsZS4iKTsKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBkYXRhID0gYXJjaGl2ZSA/IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpIDog
MDsKKyAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBhcmNoaXZlSGFuZGxlOworICAgIHNpemVfdCBh
cmNoaXZlU2l6ZSA9IDA7CisgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKChOU0RhdGEgKilkYXRhLmdl
dCgpKTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0g
U2hhcmVkTWVtb3J5OjpjcmVhdGUoYnVmZmVyLT5zaXplKCkpOworICAgICAgICBhcmNoaXZlU2l6
ZSA9IGJ1ZmZlci0+c2l6ZSgpOworICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5k
YXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBhcmNoaXZlU2l6ZSk7CisgICAgICAgIHNoYXJlZE1lbW9y
eUJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGFyY2hpdmVIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpOyAgICAgICAgICAgIAogICAgIH0KLQotICAgIC8vIEZJWE1FOiBSZXBvcnQgYW4gZXJyb3Ig
aWYgd2UgZmFpbCB0byBjcmVhdGUgYSBmaWxlLgotICAgIE5TU3RyaW5nICpwYXRoID0gW1tkcm9w
RGVzdGluYXRpb24gcGF0aF0gc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50Olt3cmFwcGVy
IHByZWZlcnJlZEZpbGVuYW1lXV07Ci0gICAgcGF0aCA9IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gX3dlYmtpdF9wYXRoV2l0aFVuaXF1ZUZpbGVuYW1lRm9yUGF0aDpwYXRoXTsKLSAg
ICBpZiAoIVt3cmFwcGVyIHdyaXRlVG9GaWxlOnBhdGggYXRvbWljYWxseTpOTyB1cGRhdGVGaWxl
bmFtZXM6WUVTXSkKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGltYWdlIGZp
bGUgdmlhIC1bTlNGaWxlV3JhcHBlciB3cml0ZVRvRmlsZTphdG9taWNhbGx5OnVwZGF0ZUZpbGVu
YW1lczpdIGF0IHBhdGggJUAiLCBwYXRoKTsKLQotICAgIGlmIChkcmFnZ2luZ0ltYWdlVVJMKQot
ICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIF93ZWJraXRfc2V0TWV0YWRh
dGFVUkw6W2RyYWdnaW5nSW1hZ2VVUkwgYWJzb2x1dGVTdHJpbmddIHJlZmVycmVyOm5pbCBhdFBh
dGg6cGF0aF07Ci0KLSAgICByZXR1cm4gW05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OltwYXRoIGxh
c3RQYXRoQ29tcG9uZW50XV07CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlNldFByb21pc2VkRGF0YShwYXN0ZWJvYXJkTmFtZSwgaW1hZ2VIYW5kbGUsIGltYWdlU2l6
ZSwgU3RyaW5nKFtyZXNwb25zZSBzdWdnZXN0ZWRGaWxlbmFtZV0pLCBTdHJpbmcoZXh0ZW5zaW9u
KSwgU3RyaW5nKHRpdGxlKSwgU3RyaW5nKFtbcmVzcG9uc2UgVVJMXSBhYnNvbHV0ZVN0cmluZ10p
LCBTdHJpbmcoW1VSTCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXSksIGFyY2hpdmVIYW5kbGUsIGFy
Y2hpdmVTaXplKSk7CiB9CiAKLUBlbmQKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJm
YWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvbWFjL1dlYlN5c3RlbUludGVyZmFjZS5tbQkocmV2aXNpb24gMTEwNDM1KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViU3lzdGVtSW50ZXJm
YWNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDggQEAgdm9pZCBJbml0V2ViQ29y
ZVN5c3RlbUludGVyZmFjZSh2b2lkKQogICAgICAgICBJTklUKFNldEhUVFBDb29raWVzRm9yVVJM
KTsKICAgICAgICAgSU5JVChEZWxldGVIVFRQQ29va2llKTsKIAorICAgICAgICBJTklUKFNldE1l
dGFkYXRhVVJMKTsKKyAgICAgICAgCiAjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9Q
QVJEKQogICAgICAgICBJTklUKElPU3VyZmFjZUNvbnRleHRDcmVhdGUpOwogICAgICAgICBJTklU
KElPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSk7Cg==
</data>
<flag name="review"
          id="134669"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>