<?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>129322</bug_id>
          
          <creation_ts>2014-02-25 12:35:16 -0800</creation_ts>
          <short_desc>[iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).</short_desc>
          <delta_ts>2014-03-24 12:45:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yongjun Zhang">yongjun_zhang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aestes</cc>
    
    <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>psolanki</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>984438</commentid>
    <comment_count>0</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2014-02-25 12:35:16 -0800</bug_when>
    <thetext>It would be nice to enable download support by using CFURLDownload API under USE(CFNETWORK).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984452</commentid>
    <comment_count>1</comment_count>
      <attachid>225173</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2014-02-25 12:55:57 -0800</bug_when>
    <thetext>Created attachment 225173
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984500</commentid>
    <comment_count>2</comment_count>
      <attachid>225185</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2014-02-25 14:30:16 -0800</bug_when>
    <thetext>Created attachment 225185
Fixed a build break for Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984765</commentid>
    <comment_count>3</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2014-02-26 09:34:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/16125311&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984766</commentid>
    <comment_count>4</comment_count>
      <attachid>225185</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-26 09:41:12 -0800</bug_when>
    <thetext>Comment on attachment 225185
Fixed a build break for Mac.

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

review- because there are at least three things here that I think need to be fixed. (The leak because of lack of adoptCF, the BOOL * vs. bool * casting, and the way the releaseConnectionForDownload relates to the CFRelease call after it.)

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:31
&gt; +#if USE(CFNETWORK)
&gt; +#import &lt;CFNetwork/CFURLDownload.h&gt;
&gt; +#endif

The correct WebKit project coding style is to put conditional imports in a separate paragraph after all the unconditional ones. But I don’t understand why this needs to be conditional? Is there someone who needs to compile DownloadIOS with USE(CFNETWORK) false? And if they do, is it really critical to avoid this include in that case? I suggest just a plain old import here with no conditional.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:39
&gt; +using namespace WTF;

This is not correct. WTF headers are supposed to export their symbols with a &quot;using&quot; in the main namespace, and you should never need WTF:: prefixes. If you do need them, the fix should be in WTF, not adding one of these &quot;using namespace&quot;.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:44
&gt; +// FIXME: It would be nice if these callbacks wouldn&apos;t have to be invoked on the main thread.

Would be nice if this comment explained why we need to do it rather than just saying it would be nice if we didn’t.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:47
&gt; +    if (RunLoop::isMain()) {

If we’re going to use RunLoop here, can we use the RunLoop version of &quot;run on main thread&quot; instead?

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:56
&gt; +static void setUpDownloadClient(CFURLDownloadClient &amp;client, Download *dl)

Incorrect formatting here. It should be CFURLDownloadClient&amp; with the space after the &quot;&amp;&quot;. Also, I suggest a name like download instead of &quot;dl&quot; for the download argument. Since the download argument can never be null, I suggest a reference rather than a pointer.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:69
&gt; +    client.didStart = [](CFURLDownloadRef downloadRef, const void *clientInfo)
&gt; +    {
&gt; +        dispatchOnMainThread(^{
&gt; +            Download *download = (Download *)clientInfo;
&gt; +            download-&gt;didStart();
&gt; +        });
&gt; +    };

Why use clientInfo here to pass in the Download, when a lambda and a block can simply capture the pointer value instead. Avoiding the typecast would be really nice. Also, why not use lambdas for both rather than one lambda and one block? Same comments about the same idiom elsewhere in the patch. Also, I suggest omitting the argument names for unused arguments in the lambda.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:78
&gt; +        notImplemented();

Is it really important to call the notImplemented function here? How will this help us in the future?

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:110
&gt; +        __block BOOL returnValue;
&gt; +        dispatchOnMainThread(^{
&gt; +            Download *download = (Download *)clientInfo;
&gt; +            returnValue = download-&gt;shouldDecodeSourceDataOfMIMEType(encodingType);
&gt; +        });
&gt; +
&gt; +        return returnValue;;

It seems a little strange to use a block here instead of a lambda.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:149
&gt; +            RetainPtr&lt;NSData&gt; resumeData = (NSData *)CFURLDownloadCopyResumeData(downloadRef);
&gt; +            IPC::DataReference dataReference(reinterpret_cast&lt;const uint8_t*&gt;([resumeData bytes]), [resumeData length]);

This leaks the resume data, because it omits the adoptCF call. Also, why convert the CFData to an NSData? CFDataGetBytePtr and CFDataGetLength would work fine without converting the type and even avoid the reinterpret cast, I believe. WebPage::getSelectionAsWebArchiveData and WebPage::getWebArchiveOfFrame have examples that do this correctly, and WebPage::drawPagesToPDF has an example I like even better that skips the local variable.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:170
&gt; +    CFURLConnectionRef connection = handle-&gt;connection();
&gt; +    m_download = CFURLDownloadCreateAndStartWithLoadingConnection(NULL, connection, m_request.cfURLRequest(UpdateHTTPBody), response.cfURLResponse(), &amp;client);
&gt; +    handle-&gt;releaseConnectionForDownload();
&gt; +    CFRelease(connection);

This is a really awkward construction. It seems that ResourceHandle::releaseConnectionForDownload should return a RetainPtr of the connection. An explicit CFRelease like this seems both unclear and dangerous.

Is m_download a RetainPtr? It worries me to see a Create here and not see the CFRelease that balances it. I suggest use of RetainPtr.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:179
&gt; +static void didStart(WKContextRef context, WKDownloadRef download, const void *clientInfo)

This should be const void*, not const void *, to match WebKit coding style.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:181
&gt; +    WKProcessGroup *processGroup = (WKProcessGroup *)clientInfo;

Please use a static_cast here rather than a C-style cast.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:186
&gt; +    if ([downloadDelegate respondsToSelector:@selector(downloadDidStart:)]) {
&gt; +        [downloadDelegate downloadDidStart:wrapper(*toImpl(download))];
&gt; +    }

Brace style in WebKIt omits them on single line if statements, and while it’s OK to change that style rule some day I’m not sure we should change it today.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:191
&gt; +    WKProcessGroup *processGroup = (WKProcessGroup *)clientInfo;

Please use a static_cast here rather than a C-style cast.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:195
&gt; +        NSString *destination = [downloadDelegate download:wrapper(*toImpl(download)) decideDestinationWithSuggestedFilename:wrapper(*toImpl(filename)) allowOverwrite:(BOOL *)allowOverwrite];

The typecast from (bool *) to (BOOL *) is not safe here. Please don’t do that. Using a temporary BOOL and then assigning to the bool would be the safe idiom.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebDownload.h:30
&gt; +#import &lt;Foundation/Foundation.h&gt;

Is this import really needed? I am pretty sure that it’s not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984770</commentid>
    <comment_count>5</comment_count>
      <attachid>225185</attachid>
    <who name="">mitz</who>
    <bug_when>2014-02-26 09:47:31 -0800</bug_when>
    <thetext>Comment on attachment 225185
Fixed a build break for Mac.

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

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebDownload.h:30
&gt;&gt; +#import &lt;Foundation/Foundation.h&gt;
&gt; 
&gt; Is this import really needed? I am pretty sure that it’s not.

Since this is a private header, it should be self-contained, so I think it’s correct to import Foundation.h here for NSObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985321</commentid>
    <comment_count>6</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2014-02-27 13:02:36 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 225185 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=225185&amp;action=review
&gt; 

Thanks for the comments! I will address these in another patch.

&gt; review- because there are at least three things here that I think need to be fixed. (The leak because of lack of adoptCF, the BOOL * vs. bool * casting,

Will fix.
  
&gt;and the way the releaseConnectionForDownload relates to the CFRelease call after it.)
&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:31
&gt; &gt; +#if USE(CFNETWORK)
&gt; &gt; +#import &lt;CFNetwork/CFURLDownload.h&gt;
&gt; &gt; +#endif
&gt; 
&gt; The correct WebKit project coding style is to put conditional imports in a separate paragraph after all the unconditional ones. But I don’t understand why this needs to be conditional? Is there someone who needs to compile DownloadIOS with USE(CFNETWORK) false? And if they do, is it really critical to avoid this include in that case? I suggest just a plain old import here with no conditional.

No, I don&apos;t think we will build iOS with USE(CFNETWORK) false, will remove the guards.

&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:39
&gt; &gt; +using namespace WTF;
&gt; 
&gt; This is not correct. WTF headers are supposed to export their symbols with a &quot;using&quot; in the main namespace, and you should never need WTF:: prefixes. If you do need them, the fix should be in WTF, not adding one of these &quot;using namespace&quot;.

I will remove this.

&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:44
&gt; &gt; +// FIXME: It would be nice if these callbacks wouldn&apos;t have to be invoked on the main thread.
&gt; 
&gt; Would be nice if this comment explained why we need to do it rather than just saying it would be nice if we didn’t.
&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:47
&gt; &gt; +    if (RunLoop::isMain()) {
&gt; 
&gt; If we’re going to use RunLoop here, can we use the RunLoop version of &quot;run on main thread&quot; instead?
&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:56
&gt; &gt; +static void setUpDownloadClient(CFURLDownloadClient &amp;client, Download *dl)
&gt; 
&gt; Incorrect formatting here. It should be CFURLDownloadClient&amp; with the space after the &quot;&amp;&quot;. Also, I suggest a name like download instead of &quot;dl&quot; for the download argument. Since the download argument can never be null, I suggest a reference rather than a pointer.
&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:69
&gt; &gt; +    client.didStart = [](CFURLDownloadRef downloadRef, const void *clientInfo)
&gt; &gt; +    {
&gt; &gt; +        dispatchOnMainThread(^{
&gt; &gt; +            Download *download = (Download *)clientInfo;
&gt; &gt; +            download-&gt;didStart();
&gt; &gt; +        });
&gt; &gt; +    };
&gt; 
&gt; Why use clientInfo here to pass in the Download, when a lambda and a block can simply capture the pointer value instead. Avoiding the typecast would be really nice. 

I tried to capture &apos;download&apos; in the lambda but the compiler complained it couldn&apos;t assign a lambda to the callback.  It seems like lambda with no capture can be converted to a function pointer; which doesn&apos;t seem to be the case for lambda with capture.

&gt; Also, why not use lambdas for both rather than one lambda and one block? 

I will change the block to lambda as well.

&gt; Same comments about the same idiom elsewhere in the patch. Also, I suggest omitting the argument names for unused arguments in the lambda.

Will do.

&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:78
&gt; &gt; +        notImplemented();
&gt; 
&gt; Is it really important to call the notImplemented function here? How will this help us in the future?

I was following the pattern for other unimplemented methods in this class.

&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:110
&gt; &gt; +        __block BOOL returnValue;
&gt; &gt; +        dispatchOnMainThread(^{
&gt; &gt; +            Download *download = (Download *)clientInfo;
&gt; &gt; +            returnValue = download-&gt;shouldDecodeSourceDataOfMIMEType(encodingType);
&gt; &gt; +        });
&gt; &gt; +
&gt; &gt; +        return returnValue;;
&gt; 
&gt; It seems a little strange to use a block here instead of a lambda.
&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:149
&gt; &gt; +            RetainPtr&lt;NSData&gt; resumeData = (NSData *)CFURLDownloadCopyResumeData(downloadRef);
&gt; &gt; +            IPC::DataReference dataReference(reinterpret_cast&lt;const uint8_t*&gt;([resumeData bytes]), [resumeData length]);
&gt; 
&gt; This leaks the resume data, because it omits the adoptCF call. Also, why convert the CFData to an NSData? CFDataGetBytePtr and CFDataGetLength would work fine without converting the type and even avoid the reinterpret cast, I believe. WebPage::getSelectionAsWebArchiveData and WebPage::getWebArchiveOfFrame have examples that do this correctly, and WebPage::drawPagesToPDF has an example I like even better that skips the local variable.

this is an oversight when I copied the impl from DownloadMac.mm. Will fix.

&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:170
&gt; &gt; +    CFURLConnectionRef connection = handle-&gt;connection();
&gt; &gt; +    m_download = CFURLDownloadCreateAndStartWithLoadingConnection(NULL, connection, m_request.cfURLRequest(UpdateHTTPBody), response.cfURLResponse(), &amp;client);
&gt; &gt; +    handle-&gt;releaseConnectionForDownload();
&gt; &gt; +    CFRelease(connection);
&gt; 
&gt; This is a really awkward construction. It seems that ResourceHandle::releaseConnectionForDownload should return a RetainPtr of the connection. An explicit CFRelease like this seems both unclear and dangerous.

I agree. 

This pattern is copied from WebKit1 WebFrameLoaderClient:  https://trac.webkit.org/changeset/91198/trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm

If ResourceHandle::releaseConnectionForDownload returns RetainPtr then we won&apos;t need to call CFRelease.  It currently returns CFURLConnectionRef (not RetainPtr).  This could be misleading since all releaseConnectionForDownload does is clear the connection data member (a RetainPtr) by calling leadRef() in ResourceHandleCFNet.cpp:

    return d-&gt;m_connection.leakRef();

I will file another bug to track this.

&gt; 
&gt; Is m_download a RetainPtr? It worries me to see a Create here and not see the CFRelease that balances it. I suggest use of RetainPtr.

Yes it is RetainPtr in Download.h:

RetainPtr&lt;CFURLDownloadRef&gt; m_download;

I also realize I should call adoptCF for CFURLDownloadCreateAndStartWithLoadingConnection too.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:179
&gt; &gt; +static void didStart(WKContextRef context, WKDownloadRef download, const void *clientInfo)
&gt; 
&gt; This should be const void*, not const void *, to match WebKit coding style.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:181
&gt; &gt; +    WKProcessGroup *processGroup = (WKProcessGroup *)clientInfo;
&gt; 
&gt; Please use a static_cast here rather than a C-style cast.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:186
&gt; &gt; +    if ([downloadDelegate respondsToSelector:@selector(downloadDidStart:)]) {
&gt; &gt; +        [downloadDelegate downloadDidStart:wrapper(*toImpl(download))];
&gt; &gt; +    }
&gt; 
&gt; Brace style in WebKIt omits them on single line if statements, and while it’s OK to change that style rule some day I’m not sure we should change it today.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:191
&gt; &gt; +    WKProcessGroup *processGroup = (WKProcessGroup *)clientInfo;
&gt; 
&gt; Please use a static_cast here rather than a C-style cast.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:195
&gt; &gt; +        NSString *destination = [downloadDelegate download:wrapper(*toImpl(download)) decideDestinationWithSuggestedFilename:wrapper(*toImpl(filename)) allowOverwrite:(BOOL *)allowOverwrite];
&gt; 
&gt; The typecast from (bool *) to (BOOL *) is not safe here. Please don’t do that. Using a temporary BOOL and then assigning to the bool would be the safe idiom.

Will fix.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebDownload.h:30
&gt; &gt; +#import &lt;Foundation/Foundation.h&gt;
&gt; 
&gt; Is this import really needed? I am pretty sure that it’s not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985746</commentid>
    <comment_count>7</comment_count>
      <attachid>225499</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2014-02-28 15:25:06 -0800</bug_when>
    <thetext>Created attachment 225499
Revised patch to address review comment.

Main changes:

1) Fixed leak for resumeData in didFail; and adoptCF for CFURLDownloadRef created on Download::startWithHandle.
2) Use a temporary variable BOOL instead of casting (bool*) to (BOOL*) in decideDestinationWithSuggestedFilename.
3) Changed to use lambda for blocks passing into dispatchOnMainThread.
4) Some style fixes pointed out in reviewing comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>991940</commentid>
    <comment_count>8</comment_count>
      <attachid>225499</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-03-18 16:15:44 -0700</bug_when>
    <thetext>Comment on attachment 225499
Revised patch to address review comment.

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

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.h:45
&gt; +@protocol WKDownloadDelegate &lt;NSObject&gt;
&gt; +@optional
&gt; +
&gt; +- (void)downloadDidStart:(WKWebDownload *)download;
&gt; +- (NSString *)download:(WKWebDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename allowOverwrite:(BOOL *)allowOverwrite;
&gt; +- (void)downloadDidFinish:(WKWebDownload *)download;
&gt; +- (void)download:(WKWebDownload *)download didReceiveResponse:(NSURLResponse *)response;
&gt; +- (void)download:(WKWebDownload *)download didReceiveData:(uint64_t)length;
&gt; +
&gt; +@end

This should not be here. It should probably be in WKProcessPoolPrivate, and named accordingly.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.h:67
&gt; +@property (assign) id &lt;WKDownloadDelegate&gt; downloadDelegate;

This should be on WKProcessPoolPrivate (and named accordingly). It should also be weak.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:244
&gt; +static void setUpDownloadClient(WKProcessGroup *processGroup, WKContextRef contextRef)
&gt; +{
&gt; +    WKContextDownloadClientV0 downloadClient;
&gt; +    memset(&amp;downloadClient, 0, sizeof(downloadClient));
&gt; +
&gt; +    downloadClient.base.version = 0;
&gt; +    downloadClient.base.clientInfo = processGroup;
&gt; +    downloadClient.didStart = didStart;
&gt; +    downloadClient.decideDestinationWithSuggestedFilename = decideDestinationWithSuggestedFilename;
&gt; +    downloadClient.didFinish = didFinish;
&gt; +    downloadClient.didReceiveResponse = didReceiveResponse;
&gt; +    downloadClient.didReceiveData = didReceiveData;
&gt; +
&gt; +    WKContextSetDownloadClient(contextRef, &amp;downloadClient.base);
&gt; +}

This is also wrong. You should create an APIDownloadClient subclass, see what we&apos;ve done for APILoaderClient and APIPolicyClient for example.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebDownload.h:33
&gt; +@interface WKWebDownload : NSObject

Should be SPI and marked accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992308</commentid>
    <comment_count>9</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2014-03-19 16:28:35 -0700</bug_when>
    <thetext>For API::DownloadClient, I filed: https://bugs.webkit.org/show_bug.cgi?id=130484</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>992860</commentid>
    <comment_count>10</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-03-20 19:01:57 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 225185 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=225185&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:47
&gt; &gt; +    if (RunLoop::isMain()) {
&gt; 
&gt; If we’re going to use RunLoop here, can we use the RunLoop version of &quot;run on main thread&quot; instead?

As far as I can tell, RunLoop only supports asynchronous dispatch to the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993395</commentid>
    <comment_count>11</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-03-21 17:51:11 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 225185 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=225185&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:110
&gt; &gt; +        __block BOOL returnValue;
&gt; &gt; +        dispatchOnMainThread(^{
&gt; &gt; +            Download *download = (Download *)clientInfo;
&gt; &gt; +            returnValue = download-&gt;shouldDecodeSourceDataOfMIMEType(encodingType);
&gt; &gt; +        });
&gt; &gt; +
&gt; &gt; +        return returnValue;;
&gt; 
&gt; It seems a little strange to use a block here instead of a lambda.

Since we&apos;re ultimately invoking a block in dispatch_sync(), I think it makes sense to use a block instead of always converting from a lambda.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993402</commentid>
    <comment_count>12</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-03-21 18:13:28 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 225185 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=225185&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:170
&gt; &gt; &gt; +    CFURLConnectionRef connection = handle-&gt;connection();
&gt; &gt; &gt; +    m_download = CFURLDownloadCreateAndStartWithLoadingConnection(NULL, connection, m_request.cfURLRequest(UpdateHTTPBody), response.cfURLResponse(), &amp;client);
&gt; &gt; &gt; +    handle-&gt;releaseConnectionForDownload();
&gt; &gt; &gt; +    CFRelease(connection);
&gt; &gt; 
&gt; &gt; This is a really awkward construction. It seems that ResourceHandle::releaseConnectionForDownload should return a RetainPtr of the connection. An explicit CFRelease like this seems both unclear and dangerous.
&gt; 
&gt; I agree. 
&gt; 
&gt; This pattern is copied from WebKit1 WebFrameLoaderClient:  https://trac.webkit.org/changeset/91198/trunk/Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm
&gt; 
&gt; If ResourceHandle::releaseConnectionForDownload returns RetainPtr then we won&apos;t need to call CFRelease.  It currently returns CFURLConnectionRef (not RetainPtr).  This could be misleading since all releaseConnectionForDownload does is clear the connection data member (a RetainPtr) by calling leadRef() in ResourceHandleCFNet.cpp:
&gt; 
&gt;     return d-&gt;m_connection.leakRef();
&gt; 
&gt; I will file another bug to track this.

I&apos;m going to fix this as part of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993565</commentid>
    <comment_count>13</comment_count>
      <attachid>227570</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-03-22 13:51:11 -0700</bug_when>
    <thetext>Created attachment 227570
[iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993566</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-22 13:53:57 -0700</bug_when>
    <thetext>Attachment 227570 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h:45:  Missing spaces around =  [whitespace/operators] [4]
Total errors found: 1 in 20 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>993567</commentid>
    <comment_count>15</comment_count>
      <attachid>227570</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-03-22 13:55:25 -0700</bug_when>
    <thetext>Comment on attachment 227570
[iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).

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

&gt; Source/WebKit2/ChangeLog:42
&gt; +2014-02-25  Yongjun Zhang  &lt;yongjun_zhang@apple.com&gt;
&gt; +
&gt; +        [iOS] Download support by CFURLDownloadRef under USE(CFNETWORK)
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=129322
&gt; +
&gt; +        Enable download support for WK2 by using CFURLDownload API.
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).

Oops, I meant to merge this into my ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993895</commentid>
    <comment_count>16</comment_count>
      <attachid>227570</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-03-24 11:18:37 -0700</bug_when>
    <thetext>Comment on attachment 227570
[iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).

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

Looks great overall. Please move the DownloadClient to its own file (similar to UIClient and HistoryClient). The reason why i decided to make the C SPI clients local classes was to encapsulate that legacy C SPI in as few files as possible. We don&apos;t need to do that with the modern API.

&gt; Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp:466
&gt; +    return adoptCF(d-&gt;m_connection.leakRef());

I think this can just be std::move(d-&gt;m_connection);

&gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:333
&gt; +    RetainPtr&lt;CFURLConnectionRef&gt; connection = handle-&gt;releaseConnectionForDownload();

auto connection =

&gt; Source/WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:338
&gt;                                                                       request:request.cfURLRequest(UpdateHTTPBody)
&gt;                                                                      response:response.cfURLResponse()
&gt;                                                                      delegate:[webView downloadDelegate]
&gt;                                                                         proxy:nil];

I&apos;d get rid of this weird lineup indentation and put everything on a single row.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:45
&gt; +// making them asynchorous calls.

Spelling error, asynchorous.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:67
&gt; +    {

Lambdas aren&apos;t functions (well they are), so there shouldn&apos;t be a newline before the { here. (Same for all the other callbacks).

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:75
&gt; +        return request;

I think this needs to return a retained request.

&gt; Source/WebKit2/Shared/Downloads/ios/DownloadIOS.mm:128
&gt; +            RetainPtr&lt;CFDataRef&gt; resumeData = adoptCF(CFURLDownloadCopyResumeData(downloadRef));

auto resumeData =</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993930</commentid>
    <comment_count>17</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2014-03-24 12:45:35 -0700</bug_when>
    <thetext>Committed r166186: &lt;http://trac.webkit.org/changeset/166186&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225173</attachid>
            <date>2014-02-25 12:55:57 -0800</date>
            <delta_ts>2014-02-25 14:17:33 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>download_wk2.patch</filename>
            <type>text/plain</type>
            <size>26983</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">Y29tbWl0IDY5MWYwMTE5OWEzOWU4ZTFmNDk0MzFiMmVlMDdjMmNhZmMzYmVlZjMKQXV0aG9yOiBZ
b25nanVuIFpoYW5nIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgRmViIDI1
IDEyOjQ0OjU5IDIwMTQgLTA4MDAKCiAgICBbaU9TXSBEb3dubG9hZCBzdXBwb3J0IGJ5IENGVVJM
RG93bmxvYWRSZWYgdW5kZXIgVVNFKENGTkVUV09SSykKICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkzMjIKICAgIAogICAgRW5hYmxlIGRvd25sb2FkIHN1cHBv
cnQgZm9yIFdLMiBieSB1c2luZyBDRlVSTERvd25sb2FkIEFQSS4KICAgIAogICAgKiBTaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tOiBDcmVhdGUgV0tXZWJEb3dubG9hZCB3cmFwcGVyIG9iamVjdCBm
b3IgRG93bmxvYWRQcm94eS4KICAgIChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKICAgICogU2hh
cmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW06CiAgICAoV2ViS2l0OjpkaXNwYXRjaE9u
TWFpblRocmVhZCk6CiAgICAoV2ViS2l0OjpzZXRVcERvd25sb2FkQ2xpZW50KToKICAgIChXZWJL
aXQ6OkRvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUpOiBVc2UgQ0ZVUkxEb3dubG9hZFJlZiBmb3Ig
ZG93bmxvYWQsIGFuZCBzZXR1cCBDRlVSTERvd25sb2FkQ2xpZW50CiAgICAgICAgIGZvciBkb3du
bG9hZCBjYWxsYmFja3MuCiAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAu
aDogQWRkIFdLRG93bmxvYWREZWxlZ2F0ZSBmb3IgV0syIHRvIGxpc3RlbiB0byBkb3dubG9hZCBl
dmVudHMuCiAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW06CiAgICAo
ZGlkU3RhcnQpOgogICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToK
ICAgIChkaWRGaW5pc2gpOgogICAgKGRpZFJlY2VpdmVSZXNwb25zZSk6CiAgICAoZGlkUmVjZWl2
ZURhdGEpOgogICAgKHNldFVwRG93bmxvYWRDbGllbnQpOgogICAgKC1bV0tQcm9jZXNzR3JvdXAg
ZG93bmxvYWREZWxlZ2F0ZV0pOgogICAgKC1bV0tQcm9jZXNzR3JvdXAgc2V0RG93bmxvYWREZWxl
Z2F0ZTpdKTogV2hlbiBzZXQgYSBuZXcgZG93bmxvYWQgZGVsZWdhdGUsIGFsc28gc2V0dXAgdGhl
IGRvd25sb2FkIGNsaWVudAogICAgICAgIGZvciBXS0NvbnRleHQuCiAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJEb3dubG9hZC5oOiBBZGQgT2JqQyBBUEkgb2JqZWN0IGZvciBEb3dubG9h
ZFByb3h5LgogICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQubW06CiAgICAo
LVtXS1dlYkRvd25sb2FkIGRlYWxsb2NdKToKICAgICgtW1dLV2ViRG93bmxvYWQgQVBJOjpdKToK
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkSW50ZXJuYWwuaDoKICAgIChX
ZWJLaXQ6OndyYXBwZXIpOgogICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IDQ3ZWI2YWMuLjUzZjgzYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OCBAQAorMjAxNC0wMi0yNSAgWW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5femhhbmdAYXBwbGUuY29t
PgorCisgICAgICAgIFtpT1NdIERvd25sb2FkIHN1cHBvcnQgYnkgQ0ZVUkxEb3dubG9hZFJlZiB1
bmRlciBVU0UoQ0ZORVRXT1JLKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI5MzIyCisKKyAgICAgICAgRW5hYmxlIGRvd25sb2FkIHN1cHBvcnQgZm9y
IFdLMiBieSB1c2luZyBDRlVSTERvd25sb2FkIEFQSS4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06IENy
ZWF0ZSBXS1dlYkRvd25sb2FkIHdyYXBwZXIgb2JqZWN0IGZvciBEb3dubG9hZFByb3h5LgorICAg
ICAgICAoQVBJOjpPYmplY3Q6Om5ld09iamVjdCk6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fk
cy9pb3MvRG93bmxvYWRJT1MubW06CisgICAgICAgIChXZWJLaXQ6OmRpc3BhdGNoT25NYWluVGhy
ZWFkKToKKyAgICAgICAgKFdlYktpdDo6c2V0VXBEb3dubG9hZENsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUpOiBVc2UgQ0ZVUkxEb3dubG9hZFJlZiBm
b3IgZG93bmxvYWQsIGFuZCBzZXR1cCBDRlVSTERvd25sb2FkQ2xpZW50CisgICAgICAgICAgICAg
Zm9yIGRvd25sb2FkIGNhbGxiYWNrcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc0dyb3VwLmg6IEFkZCBXS0Rvd25sb2FkRGVsZWdhdGUgZm9yIFdLMiB0byBsaXN0ZW4g
dG8gZG93bmxvYWQgZXZlbnRzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzR3JvdXAubW06CisgICAgICAgIChkaWRTdGFydCk6CisgICAgICAgIChkZWNpZGVEZXN0aW5h
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChkaWRGaW5pc2gpOgorICAgICAg
ICAoZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKGRpZFJlY2VpdmVEYXRhKToKKyAgICAg
ICAgKHNldFVwRG93bmxvYWRDbGllbnQpOgorICAgICAgICAoLVtXS1Byb2Nlc3NHcm91cCBkb3du
bG9hZERlbGVnYXRlXSk6CisgICAgICAgICgtW1dLUHJvY2Vzc0dyb3VwIHNldERvd25sb2FkRGVs
ZWdhdGU6XSk6IFdoZW4gc2V0IGEgbmV3IGRvd25sb2FkIGRlbGVnYXRlLCBhbHNvIHNldHVwIHRo
ZSBkb3dubG9hZCBjbGllbnQKKyAgICAgICAgICAgIGZvciBXS0NvbnRleHQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkLmg6IEFkZCBPYmpDIEFQSSBvYmplY3Qg
Zm9yIERvd25sb2FkUHJveHkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRv
d25sb2FkLm1tOgorICAgICAgICAoLVtXS1dlYkRvd25sb2FkIGRlYWxsb2NdKToKKyAgICAgICAg
KC1bV0tXZWJEb3dubG9hZCBBUEk6Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJEb3dubG9hZEludGVybmFsLmg6CisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIpOgorICAg
ICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNC0wMi0yNSAg
U2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ1NT
IEdyaWQgTGF5b3V0XSBBZGQgRU5BQkxFIGZsYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2Ev
QVBJT2JqZWN0Lm1tCmluZGV4IDUwMWViNGMuLjY5YzMxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0NvY29hL0FQSU9iamVjdC5tbQpAQCAtNDQsNiArNDQsNyBAQAogI2ltcG9ydCAiV0tOU1VS
TFByb3RlY3Rpb25TcGFjZS5oIgogI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGF0YUludGVybmFsLmgi
CiAjaW1wb3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViRG93bmxv
YWRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lSW50
ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHRJbnRlcm5h
bC5oIgpAQCAtMTEzLDYgKzExNCwxMCBAQCB2b2lkKiBPYmplY3Q6Om5ld09iamVjdChzaXplX3Qg
c2l6ZSwgVHlwZSB0eXBlKQogICAgICAgICB3cmFwcGVyID0gW1dLTlNEaWN0aW9uYXJ5IGFsbG9j
XTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFR5cGU6OkRvd25sb2FkOgorICAgICAgICB3
cmFwcGVyID0gW1dLV2ViRG93bmxvYWQgYWxsb2NdOworICAgICAgICBicmVhazsKKwogICAgIGNh
c2UgVHlwZTo6RXJyb3I6CiAgICAgICAgIHdyYXBwZXIgPSBOU0FsbG9jYXRlT2JqZWN0KFtXS05T
RXJyb3Igc2VsZl0sIHNpemUsIG51bGxwdHIpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvaW9zL0Rvd25sb2FkSU9TLm1tIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KaW5kZXggMjdj
NWEzNC4uZjI3NDEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fk
cy9pb3MvRG93bmxvYWRJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fk
cy9pb3MvRG93bmxvYWRJT1MubW0KQEAgLTI2LDIwICsyNiwxNTEgQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCAiRG93bmxvYWQuaCIKIAorI2lmIFVTRShDRk5FVFdPUkspCisjaW1wb3J0
IDxDRk5ldHdvcmsvQ0ZVUkxEb3dubG9hZC5oPgorI2VuZGlmCiAjaW1wb3J0IDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VS
ZXNwb25zZS5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBvcnQgIkRhdGFSZWZlcmVu
Y2UuaCIKIAordXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKworLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2Ug
aWYgdGhlc2UgY2FsbGJhY2tzIHdvdWxkbid0IGhhdmUgdG8gYmUgaW52b2tlZCBvbiB0aGUgbWFp
biB0aHJlYWQuCitzdGF0aWMgdm9pZCBkaXNwYXRjaE9uTWFpblRocmVhZCh2b2lkICheYmxvY2sp
KCkpCit7CisgICAgaWYgKFJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGJsb2NrKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaXNwYXRjaF9zeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIGJsb2NrKTsKK30KKworI2lmIFVTRShDRk5FVFdPUkspCitzdGF0aWMgdm9p
ZCBzZXRVcERvd25sb2FkQ2xpZW50KENGVVJMRG93bmxvYWRDbGllbnQgJmNsaWVudCwgRG93bmxv
YWQgKmRsKQoreworICAgIG1lbXNldCgmY2xpZW50LCAwLCBzaXplb2YoY2xpZW50KSk7CisKKyAg
ICBjbGllbnQudmVyc2lvbiA9IDA7CisgICAgY2xpZW50LmNsaWVudEluZm8gPSBkbDsKKworICAg
IGNsaWVudC5kaWRTdGFydCA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCisgICAgeworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChe
eworICAgICAgICAgICAgRG93bmxvYWQgKmRvd25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5m
bzsKKyAgICAgICAgICAgIGRvd25sb2FkLT5kaWRTdGFydCgpOworICAgICAgICB9KTsKKyAgICB9
OworCisgICAgY2xpZW50LndpbGxTZW5kUmVxdWVzdCA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93
bmxvYWRSZWYsIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIHJlZGly
ZWN0aW9uUmVzcG9uc2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pIC0+IENGVVJMUmVxdWVzdFJl
ZgorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgfTsKKworICAgIGNsaWVudC5k
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBbXShDRlVSTERvd25sb2FkUmVmIGRv
d25sb2FkLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdlLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQorICAgIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9OworCisgICAg
Y2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWRS
ZWYsIENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCisg
ICAgeworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheeworICAgICAgICAgICAgRG93bmxv
YWQgKmRvd25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5mbzsKKyAgICAgICAgICAgIGRvd25s
b2FkLT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgICAgICB9KTsKKyAgICB9Owor
CisgICAgY2xpZW50LndpbGxSZXN1bWVXaXRoUmVzcG9uc2UgPSBbXShDRlVSTERvd25sb2FkUmVm
IGRvd25sb2FkLCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBVSW50NjQgc3RhcnRpbmdCeXRl
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICB9OworCisgICAgY2xpZW50LmRpZFJlY2VpdmVEYXRhID0gW10oQ0ZVUkxEb3dubG9h
ZFJlZiBkb3dubG9hZFJlZiwgQ0ZJbmRleCBsZW5ndGgsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
CisgICAgeworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheeworICAgICAgICAgICAgRG93
bmxvYWQgKmRvd25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5mbzsKKyAgICAgICAgICAgIGRv
d25sb2FkLT5kaWRSZWNlaXZlRGF0YShsZW5ndGgpOworICAgICAgICB9KTsKKyAgICB9OworCisg
ICAgY2xpZW50LnNob3VsZERlY29kZURhdGFPZk1JTUVUeXBlID0gW10oQ0ZVUkxEb3dubG9hZFJl
ZiBkb3dubG9hZFJlZiwgQ0ZTdHJpbmdSZWYgZW5jb2RpbmdUeXBlLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKSAtPiBCb29sZWFuCisgICAgeworICAgICAgICBfX2Jsb2NrIEJPT0wgcmV0dXJuVmFs
dWU7CisgICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57CisgICAgICAgICAgICBEb3dubG9h
ZCAqZG93bmxvYWQgPSAoRG93bmxvYWQgKiljbGllbnRJbmZvOworICAgICAgICAgICAgcmV0dXJu
VmFsdWUgPSBkb3dubG9hZC0+c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoZW5jb2Rp
bmdUeXBlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOzsKKyAg
ICB9OworCisgICAgY2xpZW50LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZE9iamVjdE5h
bWUgPSBbXShDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkUmVmLCBDRlN0cmluZ1JlZiBvYmplY3RO
YW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgZGlzcGF0Y2hPbk1h
aW5UaHJlYWQoXnsKKyAgICAgICAgICAgIFN0cmluZyBkZXN0aW5hdGlvbjsKKyAgICAgICAgICAg
IEJPT0wgYWxsb3dPdmVyd3JpdGU7CisgICAgICAgICAgICBEb3dubG9hZCAqZG93bmxvYWQgPSAo
RG93bmxvYWQgKiljbGllbnRJbmZvOworICAgICAgICAgICAgaWYgKGRvd25sb2FkKQorICAgICAg
ICAgICAgICAgIGRlc3RpbmF0aW9uID0gZG93bmxvYWQtPmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKG9iamVjdE5hbWUsIGFsbG93T3ZlcndyaXRlKTsKKworICAgICAgICAg
ICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBDRlVSTERvd25s
b2FkU2V0RGVzdGluYXRpb24oZG93bmxvYWRSZWYsIChDRlVSTFJlZilbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOihOU1N0cmluZyopZGVzdGluYXRpb25dLCBhbGxvd092ZXJ3cml0ZSk7CisgICAgICAg
IH0pOworICAgIH07CisKKyAgICBjbGllbnQuZGlkQ3JlYXRlRGVzdGluYXRpb24gPSBbXShDRlVS
TERvd25sb2FkUmVmIGRvd25sb2FkUmVmLCBDRlVSTFJlZiBwYXRoLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQorICAgIHsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKKyAgICAgICAg
ICAgIERvd25sb2FkICpkb3dubG9hZCA9IChEb3dubG9hZCAqKWNsaWVudEluZm87CisgICAgICAg
ICAgICBkb3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24oQ0ZVUkxHZXRTdHJpbmcocGF0aCkp
OworICAgICAgICB9KTsKKyAgICB9OworCisgICAgY2xpZW50LmRpZEZpbmlzaCA9IFtdKENGVVJM
RG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCisgICAgewor
ICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheeworICAgICAgICAgICAgRG93bmxvYWQgKmRv
d25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5mbzsKKyAgICAgICAgICAgIGRvd25sb2FkLT5k
aWRGaW5pc2goKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGNsaWVudC5kaWRGYWlsID0g
W10oQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZFJlZiwgQ0ZFcnJvclJlZiBlcnJvciwgY29uc3Qg
dm9pZCAqY2xpZW50SW5mbykKKyAgICB7CisgICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57
CisgICAgICAgICAgICBEb3dubG9hZCAqZG93bmxvYWQgPSAoRG93bmxvYWQgKiljbGllbnRJbmZv
OworCisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiByZXN1bWVEYXRhID0gKE5TRGF0YSAq
KUNGVVJMRG93bmxvYWRDb3B5UmVzdW1lRGF0YShkb3dubG9hZFJlZik7CisgICAgICAgICAgICBJ
UEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihbcmVzdW1lRGF0YSBieXRlc10pLCBbcmVzdW1lRGF0YSBsZW5ndGhdKTsKKyAgICAg
ICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBkYXRhUmVmZXJlbmNlKTsKKyAgICAgICAg
fSk7CisgICAgfTsKK30KKyNlbmRpZgorCiB2b2lkIERvd25sb2FkOjpzdGFydCgpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIERvd25sb2FkOjpz
dGFydFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCiB7CisjaWYgVVNFKENGTkVUV09SSykKKyAgICBDRlVSTERvd25sb2Fk
Q2xpZW50IGNsaWVudDsKKyAgICBzZXRVcERvd25sb2FkQ2xpZW50KGNsaWVudCwgdGhpcyk7CisK
KyAgICBDRlVSTENvbm5lY3Rpb25SZWYgY29ubmVjdGlvbiA9IGhhbmRsZS0+Y29ubmVjdGlvbigp
OworICAgIG1fZG93bmxvYWQgPSBDRlVSTERvd25sb2FkQ3JlYXRlQW5kU3RhcnRXaXRoTG9hZGlu
Z0Nvbm5lY3Rpb24oTlVMTCwgY29ubmVjdGlvbiwgbV9yZXF1ZXN0LmNmVVJMUmVxdWVzdChVcGRh
dGVIVFRQQm9keSksIHJlc3BvbnNlLmNmVVJMUmVzcG9uc2UoKSwgJmNsaWVudCk7CisgICAgaGFu
ZGxlLT5yZWxlYXNlQ29ubmVjdGlvbkZvckRvd25sb2FkKCk7CisgICAgQ0ZSZWxlYXNlKGNvbm5l
Y3Rpb24pOworI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCiB9CiAKIHZvaWQg
RG93bmxvYWQ6OmNhbmNlbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJvY2Vzc0dyb3VwLmgKaW5kZXggMjJhYTU3ZS4uMjIwMWJkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAuaApA
QCAtMzAsOCArMzAsMjAgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0Mi9XS0Nvbm5lY3Rpb24uaD4KIAorQGNsYXNzIFdLV2ViRG93bmxvYWQ7CiBA
Y2xhc3MgV0tQcm9jZXNzR3JvdXA7CiAKK0Bwcm90b2NvbCBXS0Rvd25sb2FkRGVsZWdhdGUgPE5T
T2JqZWN0PgorQG9wdGlvbmFsCisKKy0gKHZvaWQpZG93bmxvYWREaWRTdGFydDooV0tXZWJEb3du
bG9hZCAqKWRvd25sb2FkOworLSAoTlNTdHJpbmcgKilkb3dubG9hZDooV0tXZWJEb3dubG9hZCAq
KWRvd25sb2FkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmlu
ZyAqKWZpbGVuYW1lIGFsbG93T3ZlcndyaXRlOihCT09MICopYWxsb3dPdmVyd3JpdGU7CistICh2
b2lkKWRvd25sb2FkRGlkRmluaXNoOihXS1dlYkRvd25sb2FkICopZG93bmxvYWQ7CistICh2b2lk
KWRvd25sb2FkOihXS1dlYkRvd25sb2FkICopZG93bmxvYWQgZGlkUmVjZWl2ZVJlc3BvbnNlOihO
U1VSTFJlc3BvbnNlICopcmVzcG9uc2U7CistICh2b2lkKWRvd25sb2FkOihXS1dlYkRvd25sb2Fk
ICopZG93bmxvYWQgZGlkUmVjZWl2ZURhdGE6KHVpbnQ2NF90KWxlbmd0aDsKKworQGVuZAorCiBA
cHJvdG9jb2wgV0tQcm9jZXNzR3JvdXBEZWxlZ2F0ZSA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKIApA
QCAtNTIsNiArNjQsNyBAQCBXS19BUElfQ0xBU1MKICNwcmFnbWEgbWFyayBEZWxlZ2F0ZXMKIAog
QHByb3BlcnR5IChhc3NpZ24pIGlkIDxXS1Byb2Nlc3NHcm91cERlbGVnYXRlPiBkZWxlZ2F0ZTsK
K0Bwcm9wZXJ0eSAoYXNzaWduKSBpZCA8V0tEb3dubG9hZERlbGVnYXRlPiBkb3dubG9hZERlbGVn
YXRlOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzR3JvdXAubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc0dyb3VwLm1tCmluZGV4IDUwOWFjYTUuLmNjMWU0M2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQpA
QCAtMzksNiArMzksOCBAQAogI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGF0YUludGVybmFsLmgiCiAj
aW1wb3J0ICJXS1JldGFpblB0ci5oIgogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgorI2ltcG9ydCAi
V0tVUkxSZXNwb25zZU5TLmgiCisjaW1wb3J0ICJXS1dlYkRvd25sb2FkSW50ZXJuYWwuaCIKICNp
bXBvcnQgIldlYWtPYmpDUHRyLmgiCiAjaW1wb3J0ICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKICNp
bXBvcnQgIldlYkNvbnRleHQuaCIKQEAgLTU3LDYgKzU5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKICAgICBSZWZQdHI8V2ViQ29udGV4dD4gX2NvbnRleHQ7CiAKICAgICBXZWFrT2JqQ1B0
cjxpZCA8V0tQcm9jZXNzR3JvdXBEZWxlZ2F0ZT4+IF9kZWxlZ2F0ZTsKKyAgICBXZWFrT2JqQ1B0
cjxpZCA8V0tEb3dubG9hZERlbGVnYXRlPj4gX2Rvd25sb2FkRGVsZWdhdGU7CiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgUmV0YWluUHRyPFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUz4gX2dlb2xv
Y2F0aW9uUHJvdmlkZXI7CkBAIC0xNzMsNiArMTc2LDcyIEBAIHN0YXRpYyB2b2lkIHNldFVwSGlz
dG9yeUNsaWVudChXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRSZWYgY29u
dGV4CiAgICAgV0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudChjb250ZXh0UmVmLCAmaGlzdG9yeUNs
aWVudC5iYXNlKTsKIH0KIAorc3RhdGljIHZvaWQgZGlkU3RhcnQoV0tDb250ZXh0UmVmIGNvbnRl
eHQsIFdLRG93bmxvYWRSZWYgZG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7Cisg
ICAgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91cCAqKWNsaWVu
dEluZm87CisgICAgYXV0byBkb3dubG9hZERlbGVnYXRlID0gcHJvY2Vzc0dyb3VwLT5fZG93bmxv
YWREZWxlZ2F0ZS5nZXQoKTsKKworICAgIGlmIChbZG93bmxvYWREZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGRvd25sb2FkRGlkU3RhcnQ6KV0pIHsKKyAgICAgICAgW2Rvd25s
b2FkRGVsZWdhdGUgZG93bmxvYWREaWRTdGFydDp3cmFwcGVyKCp0b0ltcGwoZG93bmxvYWQpKV07
CisgICAgfQorfQorCitzdGF0aWMgV0tTdHJpbmdSZWYgZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLRG93bmxvYWRSZWYgZG93bmxv
YWQsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092ZXJ3cml0ZSwgY29uc3Qgdm9p
ZCAqY2xpZW50SW5mbykKK3sKKyAgICBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwID0gKFdL
UHJvY2Vzc0dyb3VwICopY2xpZW50SW5mbzsKKyAgICBhdXRvIGRvd25sb2FkRGVsZWdhdGUgPSBw
cm9jZXNzR3JvdXAtPl9kb3dubG9hZERlbGVnYXRlLmdldCgpOworCisgICAgaWYgKFtkb3dubG9h
ZERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZG93bmxvYWQ6ZGVjaWRlRGVz
dGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6YWxsb3dPdmVyd3JpdGU6KV0pIHsKKyAgICAg
ICAgTlNTdHJpbmcgKmRlc3RpbmF0aW9uID0gW2Rvd25sb2FkRGVsZWdhdGUgZG93bmxvYWQ6d3Jh
cHBlcigqdG9JbXBsKGRvd25sb2FkKSkgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmls
ZW5hbWU6d3JhcHBlcigqdG9JbXBsKGZpbGVuYW1lKSkgYWxsb3dPdmVyd3JpdGU6YWxsb3dPdmVy
d3JpdGVdOworICAgICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoKENGU3Ry
aW5nUmVmKWRlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
c3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0Rvd25sb2FkUmVm
IGRvd25sb2FkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIFdLUHJvY2Vzc0dyb3Vw
ICpwcm9jZXNzR3JvdXAgPSAoV0tQcm9jZXNzR3JvdXAgKiljbGllbnRJbmZvOworICAgIGF1dG8g
ZG93bmxvYWREZWxlZ2F0ZSA9IHByb2Nlc3NHcm91cC0+X2Rvd25sb2FkRGVsZWdhdGUuZ2V0KCk7
CisKKyAgICBpZiAoW2Rvd25sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihkb3dubG9hZERpZEZpbmlzaDopXSkKKyAgICAgICAgW2Rvd25sb2FkRGVsZWdhdGUgZG93bmxv
YWREaWRGaW5pc2g6d3JhcHBlcigqdG9JbXBsKGRvd25sb2FkKSldOworfQorCitzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlUmVzcG9uc2UoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLRG93bmxvYWRSZWYg
ZG93bmxvYWQsIFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCit7CisgICAgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91
cCAqKWNsaWVudEluZm87CisgICAgYXV0byBkb3dubG9hZERlbGVnYXRlID0gcHJvY2Vzc0dyb3Vw
LT5fZG93bmxvYWREZWxlZ2F0ZS5nZXQoKTsKKworICAgIGlmIChbZG93bmxvYWREZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGRvd25sb2FkOmRpZFJlY2VpdmVSZXNwb25zZTop
XSkKKyAgICAgICAgW2Rvd25sb2FkRGVsZWdhdGUgZG93bmxvYWQ6d3JhcHBlcigqdG9JbXBsKGRv
d25sb2FkKSkgZGlkUmVjZWl2ZVJlc3BvbnNlOmFkb3B0TlMoV0tVUkxSZXNwb25zZUNvcHlOU1VS
TFJlc3BvbnNlKHJlc3BvbnNlKSkuZ2V0KCldOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
RGF0YShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3dubG9hZFJlZiBkb3dubG9hZCwgdWludDY0
X3QgbGVuZ3RoLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIFdLUHJvY2Vzc0dyb3Vw
ICpwcm9jZXNzR3JvdXAgPSAoV0tQcm9jZXNzR3JvdXAgKiljbGllbnRJbmZvOworICAgIGF1dG8g
ZG93bmxvYWREZWxlZ2F0ZSA9IHByb2Nlc3NHcm91cC0+X2Rvd25sb2FkRGVsZWdhdGUuZ2V0KCk7
CisKKyAgICBpZiAoW2Rvd25sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihkb3dubG9hZDpkaWRSZWNlaXZlRGF0YTopXSkKKyAgICAgICAgW2Rvd25sb2FkRGVsZWdhdGUg
ZG93bmxvYWQ6d3JhcHBlcigqdG9JbXBsKGRvd25sb2FkKSkgZGlkUmVjZWl2ZURhdGE6bGVuZ3Ro
XTsKK30KKworc3RhdGljIHZvaWQgc2V0VXBEb3dubG9hZENsaWVudChXS1Byb2Nlc3NHcm91cCAq
cHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZikKK3sKKyAgICBXS0NvbnRleHRE
b3dubG9hZENsaWVudFYwIGRvd25sb2FkQ2xpZW50OworICAgIG1lbXNldCgmZG93bmxvYWRDbGll
bnQsIDAsIHNpemVvZihkb3dubG9hZENsaWVudCkpOworCisgICAgZG93bmxvYWRDbGllbnQuYmFz
ZS52ZXJzaW9uID0gMDsKKyAgICBkb3dubG9hZENsaWVudC5iYXNlLmNsaWVudEluZm8gPSBwcm9j
ZXNzR3JvdXA7CisgICAgZG93bmxvYWRDbGllbnQuZGlkU3RhcnQgPSBkaWRTdGFydDsKKyAgICBk
b3dubG9hZENsaWVudC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSA9IGRl
Y2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOworICAgIGRvd25sb2FkQ2xpZW50
LmRpZEZpbmlzaCA9IGRpZEZpbmlzaDsKKyAgICBkb3dubG9hZENsaWVudC5kaWRSZWNlaXZlUmVz
cG9uc2UgPSBkaWRSZWNlaXZlUmVzcG9uc2U7CisgICAgZG93bmxvYWRDbGllbnQuZGlkUmVjZWl2
ZURhdGEgPSBkaWRSZWNlaXZlRGF0YTsKKworICAgIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50
KGNvbnRleHRSZWYsICZkb3dubG9hZENsaWVudC5iYXNlKTsKK30KKwogLSAoaWQpaW5pdAogewog
ICAgIHJldHVybiBbc2VsZiBpbml0V2l0aEluamVjdGVkQnVuZGxlVVJMOm5pbF07CkBAIC0yMTIs
NiArMjgxLDIwIEBAIHN0YXRpYyB2b2lkIHNldFVwSGlzdG9yeUNsaWVudChXS1Byb2Nlc3NHcm91
cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRSZWYgY29udGV4CiAgICAgX2RlbGVnYXRlID0gZGVs
ZWdhdGU7CiB9CiAKKy0gKGlkIDxXS0Rvd25sb2FkRGVsZWdhdGU+KWRvd25sb2FkRGVsZWdhdGUK
K3sKKyAgICByZXR1cm4gX2Rvd25sb2FkRGVsZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7Cit9CisK
Ky0gKHZvaWQpc2V0RG93bmxvYWREZWxlZ2F0ZTooaWQgPFdLRG93bmxvYWREZWxlZ2F0ZT4pZG93
bmxvYWREZWxlZ2F0ZQoreworICAgIF9kb3dubG9hZERlbGVnYXRlID0gZG93bmxvYWREZWxlZ2F0
ZTsKKyAgICBpZiAoZG93bmxvYWREZWxlZ2F0ZSkKKyAgICAgICAgc2V0VXBEb3dubG9hZENsaWVu
dChzZWxmLCB0b0FQSShfY29udGV4dC5nZXQoKSkpOworICAgIGVsc2UKKyAgICAgICAgV0tDb250
ZXh0U2V0RG93bmxvYWRDbGllbnQodG9BUEkoX2NvbnRleHQuZ2V0KCkpLCBudWxscHRyKTsKK30K
KwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tQcm9jZXNzR3JvdXAgKFByaXZhdGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJEb3dubG9hZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDdjZGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQuaApA
QCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCA8V2ViS2l0Mi9XS0ZvdW5kYXRp
b24uaD4KKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRh
dGlvbi5oPgorCitXS19BUElfQ0xBU1MKK0BpbnRlcmZhY2UgV0tXZWJEb3dubG9hZCA6IE5TT2Jq
ZWN0CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmNDg2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJEb3dubG9hZC5tbQpAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1dlYkRv
d25sb2FkSW50ZXJuYWwuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK0BpbXBsZW1lbnRhdGlvbiBXS1dlYkRvd25sb2FkIHsKKyAgICBBUEk6Ok9i
amVjdFN0b3JhZ2U8RG93bmxvYWRQcm94eT4gX2Rvd25sb2FkOworfQorCistICh2b2lkKWRlYWxs
b2MKK3sKKyAgICBfZG93bmxvYWQtPn5Eb3dubG9hZFByb3h5KCk7CisKKyAgICBbc3VwZXIgZGVh
bGxvY107Cit9CisKKyNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlv
bgorCistIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdAoreworICAgIHJldHVybiAqX2Rvd25sb2Fk
OworfQorCitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkSW50ZXJuYWwuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJEb3dubG9hZEludGVybmFs
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQxMDYwOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJEb3dubG9h
ZEludGVybmFsLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldLV2Vi
RG93bmxvYWQuaCIKKworI2lmIFdLX0FQSV9FTkFCTEVECisKKyNpbXBvcnQgIldLT2JqZWN0Lmgi
CisjaW1wb3J0ICJEb3dubG9hZFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitpbmxp
bmUgV0tXZWJEb3dubG9hZCAqd3JhcHBlcihEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKK3sKKyAg
ICBBU1NFUlQoW2Rvd25sb2FkLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS1dlYkRvd25sb2Fk
IGNsYXNzXV0pOworICAgIHJldHVybiAoV0tXZWJEb3dubG9hZCAqKWRvd25sb2FkLndyYXBwZXIo
KTsKK30KKworfQorCitAaW50ZXJmYWNlIFdLV2ViRG93bmxvYWQgKCkgPFdLT2JqZWN0PgorQGVu
ZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNDNjYzA1Li41OWZmNzdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC00MzgsNiArNDM4LDkgQEAKIAkJMUY3NTA2QjYxODU5MTY1NzAwRUMwRkY3IC8qIFdLV2ViUHJv
Y2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUYwMTgxNzExODU4REMxNjAwRjkyODg0IC8qIFdLV2ViUHJv
Y2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRlcm5hbC5oICovOyB9OwogCQkxRjc1MDZCNzE4NTkxNjVB
MDBFQzBGRjcgLyogV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdEludGVybmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjAxODE2RTE4NThE
QzE2MDBGOTI4ODQgLyogV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdEludGVybmFsLmgg
Ki87IH07CiAJCTFGNzUwNkI4MTg1OTE2NUQwMEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5G
cmFtZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxRjAxODE2QjE4NThEQzE1MDBGOTI4ODQgLyogV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWVJ
bnRlcm5hbC5oICovOyB9OworCQkxRjdEQ0IxRTE4QkQyODM1MDBFODIzMDcgLyogV0tXZWJEb3du
bG9hZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFG
N0RDQjE5MThCRDI2RTUwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkLm1tICovOyB9OworCQkxRjdE
Q0IxRjE4QkQyODNBMDBFODIzMDcgLyogV0tXZWJEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUY3RENCMTgxOEJEMjZFNTAwRTgyMzA3IC8q
IFdLV2ViRG93bmxvYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkxRjdEQ0IyMDE4QkQyODQ5MDBFODIzMDcgLyogV0tXZWJEb3dubG9hZEludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjdE
Q0IxQTE4QkQyNkU1MDBFODIzMDcgLyogV0tXZWJEb3dubG9hZEludGVybmFsLmggKi87IH07CiAJ
CTFGQjAwQUM3MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQjAwQUM0
MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxRkIwMEFDODE4NUY3
NjQ2MDAxOTE0MkUgLyogV0tXZWJQcm9jZXNzUGx1Z0luUGFnZUdyb3VwLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZCMDBBQzUxODVGNzY0NjAwMTkx
NDJFIC8qIFdLV2ViUHJvY2Vzc1BsdWdJblBhZ2VHcm91cC5tbSAqLzsgfTsKIAkJMUZCMDBBQzkx
ODVGNzY0NjAwMTkxNDJFIC8qIFdLV2ViUHJvY2Vzc1BsdWdJblBhZ2VHcm91cEludGVybmFsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkIwMEFDNjE4
NUY3NjQ2MDAxOTE0MkUgLyogV0tXZWJQcm9jZXNzUGx1Z0luUGFnZUdyb3VwSW50ZXJuYWwuaCAq
LzsgfTsKQEAgLTIxNDgsNiArMjE1MSw5IEBACiAJCTFGMzM1QkJGMTg1Qjg0RDgwMDFBMjAxQSAv
KiBXS1dlYlByb2Nlc3NQbHVnSW5Mb2FkRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tXZWJQcm9jZXNzUGx1Z0luTG9hZERlbGVnYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFGNjA0QkE2MTg4OUZBNzQwMEVFMDM5NSAvKiBXS1JlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUmVu
ZGVyaW5nUHJvZ3Jlc3NFdmVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY2
MDRCQTcxODg5RkE3NDAwRUUwMzk1IC8qIFdLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHNJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1JlbmRlcmluZ1Byb2dyZXNz
RXZlbnRzSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUY3RENCMTgx
OEJEMjZFNTAwRTgyMzA3IC8qIFdLV2ViRG93bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tXZWJEb3dubG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxRjdEQ0IxOTE4QkQyNkU1MDBFODIzMDcgLyogV0tXZWJEb3dubG9hZC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViRG93bmxvYWQubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGN0RDQjFBMThCRDI2RTUwMEU4MjMwNyAvKiBXS1dlYkRv
d25sb2FkSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJE
b3dubG9hZEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQjAwQUM0
MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJQcm9jZXNzUGx1Z0luUGFnZUdyb3VwLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQjAwQUM1MTg1Rjc2NDYwMDE5MTQyRSAv
KiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXAubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXAubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQjAwQUM2MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlBy
b2Nlc3NQbHVnSW5QYWdlR3JvdXBJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXBJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzY1MCw2ICszNjU2LDkgQEAKIAkJCQk3Q0Q1RUJCQzE3NDZC
MDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3JhcHBlci5tbSAqLywKIAkJCQlCQzg2OTlCMjExNkFB
REFBMDAyQTkyNUIgLyogV0tWaWV3LmggKi8sCiAJCQkJQkZBNjE3OUUxMkYwQjk5RDAwMzNFMENB
IC8qIFdLVmlld1ByaXZhdGUuaCAqLywKKwkJCQkxRjdEQ0IxODE4QkQyNkU1MDBFODIzMDcgLyog
V0tXZWJEb3dubG9hZC5oICovLAorCQkJCTFGN0RDQjE5MThCRDI2RTUwMEU4MjMwNyAvKiBXS1dl
YkRvd25sb2FkLm1tICovLAorCQkJCTFGN0RDQjFBMThCRDI2RTUwMEU4MjMwNyAvKiBXS1dlYkRv
d25sb2FkSW50ZXJuYWwuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gRGVwcmVjYXRlZDsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02MzQzLDYgKzYzNTIsNyBAQAogCQkJCUJDQkFBRDBC
MTQ1NjBBNDMwMDUzRjgyRiAvKiBXS0Jyb3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNBMjg0RDcxNDkyRjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMTdEMDcxNjI2MEZGNDAwNzA1NEY1IC8qIFdLRE9NRG9j
dW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTFGN0RDQjFGMThCRDI4M0EwMEU4MjMwNyAvKiBX
S1dlYkRvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAxN0QwOTE2MjYwRkY0MDA3MDU0
RjUgLyogV0tET01FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNCNEU2MjE4QkJFM0Q5
MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDE3RDBE
MTYyNjBGRjQwMDcwNTRGNSAvKiBXS0RPTU5vZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjY3MSw2
ICs2NjgxLDcgQEAKIAkJCQlGNjJBNzY1RDEyQjFBQkMzMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VN
YW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNDQ1QkEzMTg0RDVGQ0YwMDRCMzQx
NCAvKiBXS0NvbnRleHREb3dubG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMz
ODYxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTFGN0RDQjIwMThCRDI4NDkwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2Fk
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQUMxMTFGMTJDOTJDMUYwMEIwOEVFRSAv
KiBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjYy
QTc2QjkxMkIxQjI1RjAwMDVGMUI2IC8qIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5TWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdENzJDMTI4OENBQUQwMENGRDA4QyAvKiBXZWJEb3du
bG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC03Nzc5LDYgKzc3OTAsNyBAQAogCQkJCTUx
OEU4RjBEMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTUxOEU4RjBCMTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZE1hbmFnZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFCN0Q0Q0IxMjg4QUFBNzAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUY3RENCMUUxOEJEMjgzNTAwRTgyMzA3IC8qIFdLV2Vi
RG93bmxvYWQubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUQyNUU5NTE2N0FCMDgxMDBFQTlCQ0Qg
LyogRG93bmxvYWRQcm94eU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0M0QzA4NjE4MTQ5
QzVCMDAzNjg4QjkgLyogV0tCYWNrRm9yd2FyZExpc3RJdGVtLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMUFCN0Q2MTkxMjg4QjlEOTAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225185</attachid>
            <date>2014-02-25 14:30:16 -0800</date>
            <delta_ts>2014-02-28 15:25:06 -0800</delta_ts>
            <desc>Fixed a build break for Mac.</desc>
            <filename>download_wk2.patch</filename>
            <type>text/plain</type>
            <size>26991</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">Y29tbWl0IDgxZWNiNjVlZTE1OTM4YTJlMTM1OGYxNzJmNWI4MzYzNjc3NDA5MzkKQXV0aG9yOiBZ
b25nanVuIFpoYW5nIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgRmViIDI1
IDEyOjQ0OjU5IDIwMTQgLTA4MDAKCiAgICBbaU9TXSBEb3dubG9hZCBzdXBwb3J0IGJ5IENGVVJM
RG93bmxvYWRSZWYgdW5kZXIgVVNFKENGTkVUV09SSykKICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkzMjIKICAgIAogICAgRW5hYmxlIGRvd25sb2FkIHN1cHBv
cnQgZm9yIFdLMiBieSB1c2luZyBDRlVSTERvd25sb2FkIEFQSS4KICAgIAogICAgKiBTaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tOiBDcmVhdGUgV0tXZWJEb3dubG9hZCB3cmFwcGVyIG9iamVjdCBm
b3IgRG93bmxvYWRQcm94eS4KICAgIChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKICAgICogU2hh
cmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW06CiAgICAoV2ViS2l0OjpkaXNwYXRjaE9u
TWFpblRocmVhZCk6CiAgICAoV2ViS2l0OjpzZXRVcERvd25sb2FkQ2xpZW50KToKICAgIChXZWJL
aXQ6OkRvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUpOiBVc2UgQ0ZVUkxEb3dubG9hZFJlZiBmb3Ig
ZG93bmxvYWQsIGFuZCBzZXR1cCBDRlVSTERvd25sb2FkQ2xpZW50CiAgICAgICAgIGZvciBkb3du
bG9hZCBjYWxsYmFja3MuCiAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAu
aDogQWRkIFdLRG93bmxvYWREZWxlZ2F0ZSBmb3IgV0syIHRvIGxpc3RlbiB0byBkb3dubG9hZCBl
dmVudHMuCiAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW06CiAgICAo
ZGlkU3RhcnQpOgogICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToK
ICAgIChkaWRGaW5pc2gpOgogICAgKGRpZFJlY2VpdmVSZXNwb25zZSk6CiAgICAoZGlkUmVjZWl2
ZURhdGEpOgogICAgKHNldFVwRG93bmxvYWRDbGllbnQpOgogICAgKC1bV0tQcm9jZXNzR3JvdXAg
ZG93bmxvYWREZWxlZ2F0ZV0pOgogICAgKC1bV0tQcm9jZXNzR3JvdXAgc2V0RG93bmxvYWREZWxl
Z2F0ZTpdKTogV2hlbiBzZXQgYSBuZXcgZG93bmxvYWQgZGVsZWdhdGUsIGFsc28gc2V0dXAgdGhl
IGRvd25sb2FkIGNsaWVudAogICAgICAgIGZvciBXS0NvbnRleHQuCiAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJEb3dubG9hZC5oOiBBZGQgT2JqQyBBUEkgb2JqZWN0IGZvciBEb3dubG9h
ZFByb3h5LgogICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQubW06CiAgICAo
LVtXS1dlYkRvd25sb2FkIGRlYWxsb2NdKToKICAgICgtW1dLV2ViRG93bmxvYWQgQVBJOjpdKToK
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkSW50ZXJuYWwuaDoKICAgIChX
ZWJLaXQ6OndyYXBwZXIpOgogICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IDQ3ZWI2YWMuLjUzZjgzYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OCBAQAorMjAxNC0wMi0yNSAgWW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5femhhbmdAYXBwbGUuY29t
PgorCisgICAgICAgIFtpT1NdIERvd25sb2FkIHN1cHBvcnQgYnkgQ0ZVUkxEb3dubG9hZFJlZiB1
bmRlciBVU0UoQ0ZORVRXT1JLKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI5MzIyCisKKyAgICAgICAgRW5hYmxlIGRvd25sb2FkIHN1cHBvcnQgZm9y
IFdLMiBieSB1c2luZyBDRlVSTERvd25sb2FkIEFQSS4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06IENy
ZWF0ZSBXS1dlYkRvd25sb2FkIHdyYXBwZXIgb2JqZWN0IGZvciBEb3dubG9hZFByb3h5LgorICAg
ICAgICAoQVBJOjpPYmplY3Q6Om5ld09iamVjdCk6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fk
cy9pb3MvRG93bmxvYWRJT1MubW06CisgICAgICAgIChXZWJLaXQ6OmRpc3BhdGNoT25NYWluVGhy
ZWFkKToKKyAgICAgICAgKFdlYktpdDo6c2V0VXBEb3dubG9hZENsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUpOiBVc2UgQ0ZVUkxEb3dubG9hZFJlZiBm
b3IgZG93bmxvYWQsIGFuZCBzZXR1cCBDRlVSTERvd25sb2FkQ2xpZW50CisgICAgICAgICAgICAg
Zm9yIGRvd25sb2FkIGNhbGxiYWNrcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc0dyb3VwLmg6IEFkZCBXS0Rvd25sb2FkRGVsZWdhdGUgZm9yIFdLMiB0byBsaXN0ZW4g
dG8gZG93bmxvYWQgZXZlbnRzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzR3JvdXAubW06CisgICAgICAgIChkaWRTdGFydCk6CisgICAgICAgIChkZWNpZGVEZXN0aW5h
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChkaWRGaW5pc2gpOgorICAgICAg
ICAoZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKGRpZFJlY2VpdmVEYXRhKToKKyAgICAg
ICAgKHNldFVwRG93bmxvYWRDbGllbnQpOgorICAgICAgICAoLVtXS1Byb2Nlc3NHcm91cCBkb3du
bG9hZERlbGVnYXRlXSk6CisgICAgICAgICgtW1dLUHJvY2Vzc0dyb3VwIHNldERvd25sb2FkRGVs
ZWdhdGU6XSk6IFdoZW4gc2V0IGEgbmV3IGRvd25sb2FkIGRlbGVnYXRlLCBhbHNvIHNldHVwIHRo
ZSBkb3dubG9hZCBjbGllbnQKKyAgICAgICAgICAgIGZvciBXS0NvbnRleHQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkLmg6IEFkZCBPYmpDIEFQSSBvYmplY3Qg
Zm9yIERvd25sb2FkUHJveHkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRv
d25sb2FkLm1tOgorICAgICAgICAoLVtXS1dlYkRvd25sb2FkIGRlYWxsb2NdKToKKyAgICAgICAg
KC1bV0tXZWJEb3dubG9hZCBBUEk6Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJEb3dubG9hZEludGVybmFsLmg6CisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIpOgorICAg
ICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNC0wMi0yNSAg
U2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ1NT
IEdyaWQgTGF5b3V0XSBBZGQgRU5BQkxFIGZsYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2Ev
QVBJT2JqZWN0Lm1tCmluZGV4IDUwMWViNGMuLjY5YzMxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0NvY29hL0FQSU9iamVjdC5tbQpAQCAtNDQsNiArNDQsNyBAQAogI2ltcG9ydCAiV0tOU1VS
TFByb3RlY3Rpb25TcGFjZS5oIgogI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGF0YUludGVybmFsLmgi
CiAjaW1wb3J0ICJXS1Byb2Nlc3NQb29sSW50ZXJuYWwuaCIKKyNpbXBvcnQgIldLV2ViRG93bmxv
YWRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRD
b250cm9sbGVySW50ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lSW50
ZXJuYWwuaCIKICNpbXBvcnQgIldLV2ViUHJvY2Vzc1BsdWdJbkhpdFRlc3RSZXN1bHRJbnRlcm5h
bC5oIgpAQCAtMTEzLDYgKzExNCwxMCBAQCB2b2lkKiBPYmplY3Q6Om5ld09iamVjdChzaXplX3Qg
c2l6ZSwgVHlwZSB0eXBlKQogICAgICAgICB3cmFwcGVyID0gW1dLTlNEaWN0aW9uYXJ5IGFsbG9j
XTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFR5cGU6OkRvd25sb2FkOgorICAgICAgICB3
cmFwcGVyID0gW1dLV2ViRG93bmxvYWQgYWxsb2NdOworICAgICAgICBicmVhazsKKwogICAgIGNh
c2UgVHlwZTo6RXJyb3I6CiAgICAgICAgIHdyYXBwZXIgPSBOU0FsbG9jYXRlT2JqZWN0KFtXS05T
RXJyb3Igc2VsZl0sIHNpemUsIG51bGxwdHIpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvaW9zL0Rvd25sb2FkSU9TLm1tIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KaW5kZXggMjdj
NWEzNC4uZjI3NDEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fk
cy9pb3MvRG93bmxvYWRJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fk
cy9pb3MvRG93bmxvYWRJT1MubW0KQEAgLTI2LDIwICsyNiwxNTEgQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCAiRG93bmxvYWQuaCIKIAorI2lmIFVTRShDRk5FVFdPUkspCisjaW1wb3J0
IDxDRk5ldHdvcmsvQ0ZVUkxEb3dubG9hZC5oPgorI2VuZGlmCiAjaW1wb3J0IDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VS
ZXNwb25zZS5oPgorI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KKyNpbXBvcnQgIkRhdGFSZWZlcmVu
Y2UuaCIKIAordXNpbmcgbmFtZXNwYWNlIFdURjsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKworLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2Ug
aWYgdGhlc2UgY2FsbGJhY2tzIHdvdWxkbid0IGhhdmUgdG8gYmUgaW52b2tlZCBvbiB0aGUgbWFp
biB0aHJlYWQuCitzdGF0aWMgdm9pZCBkaXNwYXRjaE9uTWFpblRocmVhZCh2b2lkICheYmxvY2sp
KCkpCit7CisgICAgaWYgKFJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGJsb2NrKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaXNwYXRjaF9zeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIGJsb2NrKTsKK30KKworI2lmIFVTRShDRk5FVFdPUkspCitzdGF0aWMgdm9p
ZCBzZXRVcERvd25sb2FkQ2xpZW50KENGVVJMRG93bmxvYWRDbGllbnQgJmNsaWVudCwgRG93bmxv
YWQgKmRsKQoreworICAgIG1lbXNldCgmY2xpZW50LCAwLCBzaXplb2YoY2xpZW50KSk7CisKKyAg
ICBjbGllbnQudmVyc2lvbiA9IDA7CisgICAgY2xpZW50LmNsaWVudEluZm8gPSBkbDsKKworICAg
IGNsaWVudC5kaWRTdGFydCA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pCisgICAgeworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChe
eworICAgICAgICAgICAgRG93bmxvYWQgKmRvd25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5m
bzsKKyAgICAgICAgICAgIGRvd25sb2FkLT5kaWRTdGFydCgpOworICAgICAgICB9KTsKKyAgICB9
OworCisgICAgY2xpZW50LndpbGxTZW5kUmVxdWVzdCA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93
bmxvYWRSZWYsIENGVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBDRlVSTFJlc3BvbnNlUmVmIHJlZGly
ZWN0aW9uUmVzcG9uc2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pIC0+IENGVVJMUmVxdWVzdFJl
ZgorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgfTsKKworICAgIGNsaWVudC5k
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBbXShDRlVSTERvd25sb2FkUmVmIGRv
d25sb2FkLCBDRlVSTEF1dGhDaGFsbGVuZ2VSZWYgY2hhbGxlbmdlLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQorICAgIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9OworCisgICAg
Y2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9IFtdKENGVVJMRG93bmxvYWRSZWYgZG93bmxvYWRS
ZWYsIENGVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCisg
ICAgeworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheeworICAgICAgICAgICAgRG93bmxv
YWQgKmRvd25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5mbzsKKyAgICAgICAgICAgIGRvd25s
b2FkLT5kaWRSZWNlaXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgICAgICB9KTsKKyAgICB9Owor
CisgICAgY2xpZW50LndpbGxSZXN1bWVXaXRoUmVzcG9uc2UgPSBbXShDRlVSTERvd25sb2FkUmVm
IGRvd25sb2FkLCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBVSW50NjQgc3RhcnRpbmdCeXRl
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICB9OworCisgICAgY2xpZW50LmRpZFJlY2VpdmVEYXRhID0gW10oQ0ZVUkxEb3dubG9h
ZFJlZiBkb3dubG9hZFJlZiwgQ0ZJbmRleCBsZW5ndGgsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
CisgICAgeworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheeworICAgICAgICAgICAgRG93
bmxvYWQgKmRvd25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5mbzsKKyAgICAgICAgICAgIGRv
d25sb2FkLT5kaWRSZWNlaXZlRGF0YShsZW5ndGgpOworICAgICAgICB9KTsKKyAgICB9OworCisg
ICAgY2xpZW50LnNob3VsZERlY29kZURhdGFPZk1JTUVUeXBlID0gW10oQ0ZVUkxEb3dubG9hZFJl
ZiBkb3dubG9hZFJlZiwgQ0ZTdHJpbmdSZWYgZW5jb2RpbmdUeXBlLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKSAtPiBCb29sZWFuCisgICAgeworICAgICAgICBfX2Jsb2NrIEJPT0wgcmV0dXJuVmFs
dWU7CisgICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57CisgICAgICAgICAgICBEb3dubG9h
ZCAqZG93bmxvYWQgPSAoRG93bmxvYWQgKiljbGllbnRJbmZvOworICAgICAgICAgICAgcmV0dXJu
VmFsdWUgPSBkb3dubG9hZC0+c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoZW5jb2Rp
bmdUeXBlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOzsKKyAg
ICB9OworCisgICAgY2xpZW50LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZE9iamVjdE5h
bWUgPSBbXShDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkUmVmLCBDRlN0cmluZ1JlZiBvYmplY3RO
YW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgZGlzcGF0Y2hPbk1h
aW5UaHJlYWQoXnsKKyAgICAgICAgICAgIFN0cmluZyBkZXN0aW5hdGlvbjsKKyAgICAgICAgICAg
IEJPT0wgYWxsb3dPdmVyd3JpdGU7CisgICAgICAgICAgICBEb3dubG9hZCAqZG93bmxvYWQgPSAo
RG93bmxvYWQgKiljbGllbnRJbmZvOworICAgICAgICAgICAgaWYgKGRvd25sb2FkKQorICAgICAg
ICAgICAgICAgIGRlc3RpbmF0aW9uID0gZG93bmxvYWQtPmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1
Z2dlc3RlZEZpbGVuYW1lKG9iamVjdE5hbWUsIGFsbG93T3ZlcndyaXRlKTsKKworICAgICAgICAg
ICAgaWYgKCFkZXN0aW5hdGlvbi5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBDRlVSTERvd25s
b2FkU2V0RGVzdGluYXRpb24oZG93bmxvYWRSZWYsIChDRlVSTFJlZilbTlNVUkwgZmlsZVVSTFdp
dGhQYXRoOihOU1N0cmluZyopZGVzdGluYXRpb25dLCBhbGxvd092ZXJ3cml0ZSk7CisgICAgICAg
IH0pOworICAgIH07CisKKyAgICBjbGllbnQuZGlkQ3JlYXRlRGVzdGluYXRpb24gPSBbXShDRlVS
TERvd25sb2FkUmVmIGRvd25sb2FkUmVmLCBDRlVSTFJlZiBwYXRoLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQorICAgIHsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKKyAgICAgICAg
ICAgIERvd25sb2FkICpkb3dubG9hZCA9IChEb3dubG9hZCAqKWNsaWVudEluZm87CisgICAgICAg
ICAgICBkb3dubG9hZC0+ZGlkQ3JlYXRlRGVzdGluYXRpb24oQ0ZVUkxHZXRTdHJpbmcocGF0aCkp
OworICAgICAgICB9KTsKKyAgICB9OworCisgICAgY2xpZW50LmRpZEZpbmlzaCA9IFtdKENGVVJM
RG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCisgICAgewor
ICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheeworICAgICAgICAgICAgRG93bmxvYWQgKmRv
d25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5mbzsKKyAgICAgICAgICAgIGRvd25sb2FkLT5k
aWRGaW5pc2goKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGNsaWVudC5kaWRGYWlsID0g
W10oQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZFJlZiwgQ0ZFcnJvclJlZiBlcnJvciwgY29uc3Qg
dm9pZCAqY2xpZW50SW5mbykKKyAgICB7CisgICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKF57
CisgICAgICAgICAgICBEb3dubG9hZCAqZG93bmxvYWQgPSAoRG93bmxvYWQgKiljbGllbnRJbmZv
OworCisgICAgICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiByZXN1bWVEYXRhID0gKE5TRGF0YSAq
KUNGVVJMRG93bmxvYWRDb3B5UmVzdW1lRGF0YShkb3dubG9hZFJlZik7CisgICAgICAgICAgICBJ
UEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihbcmVzdW1lRGF0YSBieXRlc10pLCBbcmVzdW1lRGF0YSBsZW5ndGhdKTsKKyAgICAg
ICAgICAgIGRvd25sb2FkLT5kaWRGYWlsKGVycm9yLCBkYXRhUmVmZXJlbmNlKTsKKyAgICAgICAg
fSk7CisgICAgfTsKK30KKyNlbmRpZgorCiB2b2lkIERvd25sb2FkOjpzdGFydCgpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJl
c291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIERvd25sb2FkOjpz
dGFydFdpdGhIYW5kbGUoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCiB7CisjaWYgVVNFKENGTkVUV09SSykKKyAgICBDRlVSTERvd25sb2Fk
Q2xpZW50IGNsaWVudDsKKyAgICBzZXRVcERvd25sb2FkQ2xpZW50KGNsaWVudCwgdGhpcyk7CisK
KyAgICBDRlVSTENvbm5lY3Rpb25SZWYgY29ubmVjdGlvbiA9IGhhbmRsZS0+Y29ubmVjdGlvbigp
OworICAgIG1fZG93bmxvYWQgPSBDRlVSTERvd25sb2FkQ3JlYXRlQW5kU3RhcnRXaXRoTG9hZGlu
Z0Nvbm5lY3Rpb24oTlVMTCwgY29ubmVjdGlvbiwgbV9yZXF1ZXN0LmNmVVJMUmVxdWVzdChVcGRh
dGVIVFRQQm9keSksIHJlc3BvbnNlLmNmVVJMUmVzcG9uc2UoKSwgJmNsaWVudCk7CisgICAgaGFu
ZGxlLT5yZWxlYXNlQ29ubmVjdGlvbkZvckRvd25sb2FkKCk7CisgICAgQ0ZSZWxlYXNlKGNvbm5l
Y3Rpb24pOworI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCiB9CiAKIHZvaWQg
RG93bmxvYWQ6OmNhbmNlbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJvY2Vzc0dyb3VwLmgKaW5kZXggMjJhYTU3ZS4uMjIwMWJkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAuaApA
QCAtMzAsOCArMzAsMjAgQEAKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2lt
cG9ydCA8V2ViS2l0Mi9XS0Nvbm5lY3Rpb24uaD4KIAorQGNsYXNzIFdLV2ViRG93bmxvYWQ7CiBA
Y2xhc3MgV0tQcm9jZXNzR3JvdXA7CiAKK0Bwcm90b2NvbCBXS0Rvd25sb2FkRGVsZWdhdGUgPE5T
T2JqZWN0PgorQG9wdGlvbmFsCisKKy0gKHZvaWQpZG93bmxvYWREaWRTdGFydDooV0tXZWJEb3du
bG9hZCAqKWRvd25sb2FkOworLSAoTlNTdHJpbmcgKilkb3dubG9hZDooV0tXZWJEb3dubG9hZCAq
KWRvd25sb2FkIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmlu
ZyAqKWZpbGVuYW1lIGFsbG93T3ZlcndyaXRlOihCT09MICopYWxsb3dPdmVyd3JpdGU7CistICh2
b2lkKWRvd25sb2FkRGlkRmluaXNoOihXS1dlYkRvd25sb2FkICopZG93bmxvYWQ7CistICh2b2lk
KWRvd25sb2FkOihXS1dlYkRvd25sb2FkICopZG93bmxvYWQgZGlkUmVjZWl2ZVJlc3BvbnNlOihO
U1VSTFJlc3BvbnNlICopcmVzcG9uc2U7CistICh2b2lkKWRvd25sb2FkOihXS1dlYkRvd25sb2Fk
ICopZG93bmxvYWQgZGlkUmVjZWl2ZURhdGE6KHVpbnQ2NF90KWxlbmd0aDsKKworQGVuZAorCiBA
cHJvdG9jb2wgV0tQcm9jZXNzR3JvdXBEZWxlZ2F0ZSA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKIApA
QCAtNTIsNiArNjQsNyBAQCBXS19BUElfQ0xBU1MKICNwcmFnbWEgbWFyayBEZWxlZ2F0ZXMKIAog
QHByb3BlcnR5IChhc3NpZ24pIGlkIDxXS1Byb2Nlc3NHcm91cERlbGVnYXRlPiBkZWxlZ2F0ZTsK
K0Bwcm9wZXJ0eSAoYXNzaWduKSBpZCA8V0tEb3dubG9hZERlbGVnYXRlPiBkb3dubG9hZERlbGVn
YXRlOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcm9jZXNzR3JvdXAubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJvY2Vzc0dyb3VwLm1tCmluZGV4IDUwOWFjYTUuLjc1YzQxZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQpA
QCAtMzksNiArMzksOCBAQAogI2ltcG9ydCAiV0tOYXZpZ2F0aW9uRGF0YUludGVybmFsLmgiCiAj
aW1wb3J0ICJXS1JldGFpblB0ci5oIgogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgorI2ltcG9ydCAi
V0tVUkxSZXNwb25zZU5TLmgiCisjaW1wb3J0ICJXS1dlYkRvd25sb2FkSW50ZXJuYWwuaCIKICNp
bXBvcnQgIldlYWtPYmpDUHRyLmgiCiAjaW1wb3J0ICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKICNp
bXBvcnQgIldlYkNvbnRleHQuaCIKQEAgLTU3LDYgKzU5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKICAgICBSZWZQdHI8V2ViQ29udGV4dD4gX2NvbnRleHQ7CiAKICAgICBXZWFrT2JqQ1B0
cjxpZCA8V0tQcm9jZXNzR3JvdXBEZWxlZ2F0ZT4+IF9kZWxlZ2F0ZTsKKyAgICBXZWFrT2JqQ1B0
cjxpZCA8V0tEb3dubG9hZERlbGVnYXRlPj4gX2Rvd25sb2FkRGVsZWdhdGU7CiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgUmV0YWluUHRyPFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUz4gX2dlb2xv
Y2F0aW9uUHJvdmlkZXI7CkBAIC0xNzMsNiArMTc2LDcyIEBAIHN0YXRpYyB2b2lkIHNldFVwSGlz
dG9yeUNsaWVudChXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRSZWYgY29u
dGV4CiAgICAgV0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudChjb250ZXh0UmVmLCAmaGlzdG9yeUNs
aWVudC5iYXNlKTsKIH0KIAorc3RhdGljIHZvaWQgZGlkU3RhcnQoV0tDb250ZXh0UmVmIGNvbnRl
eHQsIFdLRG93bmxvYWRSZWYgZG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7Cisg
ICAgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91cCAqKWNsaWVu
dEluZm87CisgICAgYXV0byBkb3dubG9hZERlbGVnYXRlID0gcHJvY2Vzc0dyb3VwLT5fZG93bmxv
YWREZWxlZ2F0ZS5nZXQoKTsKKworICAgIGlmIChbZG93bmxvYWREZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGRvd25sb2FkRGlkU3RhcnQ6KV0pIHsKKyAgICAgICAgW2Rvd25s
b2FkRGVsZWdhdGUgZG93bmxvYWREaWRTdGFydDp3cmFwcGVyKCp0b0ltcGwoZG93bmxvYWQpKV07
CisgICAgfQorfQorCitzdGF0aWMgV0tTdHJpbmdSZWYgZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLRG93bmxvYWRSZWYgZG93bmxv
YWQsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sICphbGxvd092ZXJ3cml0ZSwgY29uc3Qgdm9p
ZCAqY2xpZW50SW5mbykKK3sKKyAgICBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwID0gKFdL
UHJvY2Vzc0dyb3VwICopY2xpZW50SW5mbzsKKyAgICBhdXRvIGRvd25sb2FkRGVsZWdhdGUgPSBw
cm9jZXNzR3JvdXAtPl9kb3dubG9hZERlbGVnYXRlLmdldCgpOworCisgICAgaWYgKFtkb3dubG9h
ZERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZG93bmxvYWQ6ZGVjaWRlRGVz
dGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6YWxsb3dPdmVyd3JpdGU6KV0pIHsKKyAgICAg
ICAgTlNTdHJpbmcgKmRlc3RpbmF0aW9uID0gW2Rvd25sb2FkRGVsZWdhdGUgZG93bmxvYWQ6d3Jh
cHBlcigqdG9JbXBsKGRvd25sb2FkKSkgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmls
ZW5hbWU6d3JhcHBlcigqdG9JbXBsKGZpbGVuYW1lKSkgYWxsb3dPdmVyd3JpdGU6KEJPT0wgKilh
bGxvd092ZXJ3cml0ZV07CisgICAgICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZygoQ0ZTdHJpbmdSZWYpZGVzdGluYXRpb24pOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCitzdGF0aWMgdm9pZCBkaWRGaW5pc2goV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLRG93
bmxvYWRSZWYgZG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgV0tQcm9j
ZXNzR3JvdXAgKnByb2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91cCAqKWNsaWVudEluZm87Cisg
ICAgYXV0byBkb3dubG9hZERlbGVnYXRlID0gcHJvY2Vzc0dyb3VwLT5fZG93bmxvYWREZWxlZ2F0
ZS5nZXQoKTsKKworICAgIGlmIChbZG93bmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGRvd25sb2FkRGlkRmluaXNoOildKQorICAgICAgICBbZG93bmxvYWREZWxlZ2F0
ZSBkb3dubG9hZERpZEZpbmlzaDp3cmFwcGVyKCp0b0ltcGwoZG93bmxvYWQpKV07Cit9CisKK3N0
YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tEb3du
bG9hZFJlZiBkb3dubG9hZCwgV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgY29uc3Qgdm9pZCAq
Y2xpZW50SW5mbykKK3sKKyAgICBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwID0gKFdLUHJv
Y2Vzc0dyb3VwICopY2xpZW50SW5mbzsKKyAgICBhdXRvIGRvd25sb2FkRGVsZWdhdGUgPSBwcm9j
ZXNzR3JvdXAtPl9kb3dubG9hZERlbGVnYXRlLmdldCgpOworCisgICAgaWYgKFtkb3dubG9hZERl
bGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZG93bmxvYWQ6ZGlkUmVjZWl2ZVJl
c3BvbnNlOildKQorICAgICAgICBbZG93bmxvYWREZWxlZ2F0ZSBkb3dubG9hZDp3cmFwcGVyKCp0
b0ltcGwoZG93bmxvYWQpKSBkaWRSZWNlaXZlUmVzcG9uc2U6YWRvcHROUyhXS1VSTFJlc3BvbnNl
Q29weU5TVVJMUmVzcG9uc2UocmVzcG9uc2UpKS5nZXQoKV07Cit9CisKK3N0YXRpYyB2b2lkIGRp
ZFJlY2VpdmVEYXRhKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS0Rvd25sb2FkUmVmIGRvd25sb2Fk
LCB1aW50NjRfdCBsZW5ndGgsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgV0tQcm9j
ZXNzR3JvdXAgKnByb2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91cCAqKWNsaWVudEluZm87Cisg
ICAgYXV0byBkb3dubG9hZERlbGVnYXRlID0gcHJvY2Vzc0dyb3VwLT5fZG93bmxvYWREZWxlZ2F0
ZS5nZXQoKTsKKworICAgIGlmIChbZG93bmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGRvd25sb2FkOmRpZFJlY2VpdmVEYXRhOildKQorICAgICAgICBbZG93bmxvYWRE
ZWxlZ2F0ZSBkb3dubG9hZDp3cmFwcGVyKCp0b0ltcGwoZG93bmxvYWQpKSBkaWRSZWNlaXZlRGF0
YTpsZW5ndGhdOworfQorCitzdGF0aWMgdm9pZCBzZXRVcERvd25sb2FkQ2xpZW50KFdLUHJvY2Vz
c0dyb3VwICpwcm9jZXNzR3JvdXAsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQoreworICAgIFdL
Q29udGV4dERvd25sb2FkQ2xpZW50VjAgZG93bmxvYWRDbGllbnQ7CisgICAgbWVtc2V0KCZkb3du
bG9hZENsaWVudCwgMCwgc2l6ZW9mKGRvd25sb2FkQ2xpZW50KSk7CisKKyAgICBkb3dubG9hZENs
aWVudC5iYXNlLnZlcnNpb24gPSAwOworICAgIGRvd25sb2FkQ2xpZW50LmJhc2UuY2xpZW50SW5m
byA9IHByb2Nlc3NHcm91cDsKKyAgICBkb3dubG9hZENsaWVudC5kaWRTdGFydCA9IGRpZFN0YXJ0
OworICAgIGRvd25sb2FkQ2xpZW50LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVu
YW1lID0gZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgZG93bmxv
YWRDbGllbnQuZGlkRmluaXNoID0gZGlkRmluaXNoOworICAgIGRvd25sb2FkQ2xpZW50LmRpZFJl
Y2VpdmVSZXNwb25zZSA9IGRpZFJlY2VpdmVSZXNwb25zZTsKKyAgICBkb3dubG9hZENsaWVudC5k
aWRSZWNlaXZlRGF0YSA9IGRpZFJlY2VpdmVEYXRhOworCisgICAgV0tDb250ZXh0U2V0RG93bmxv
YWRDbGllbnQoY29udGV4dFJlZiwgJmRvd25sb2FkQ2xpZW50LmJhc2UpOworfQorCiAtIChpZClp
bml0CiB7CiAgICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6bmlsXTsK
QEAgLTIxMiw2ICsyODEsMjAgQEAgc3RhdGljIHZvaWQgc2V0VXBIaXN0b3J5Q2xpZW50KFdLUHJv
Y2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAsIFdLQ29udGV4dFJlZiBjb250ZXgKICAgICBfZGVsZWdh
dGUgPSBkZWxlZ2F0ZTsKIH0KIAorLSAoaWQgPFdLRG93bmxvYWREZWxlZ2F0ZT4pZG93bmxvYWRE
ZWxlZ2F0ZQoreworICAgIHJldHVybiBfZG93bmxvYWREZWxlZ2F0ZS5nZXRBdXRvcmVsZWFzZWQo
KTsKK30KKworLSAodm9pZClzZXREb3dubG9hZERlbGVnYXRlOihpZCA8V0tEb3dubG9hZERlbGVn
YXRlPilkb3dubG9hZERlbGVnYXRlCit7CisgICAgX2Rvd25sb2FkRGVsZWdhdGUgPSBkb3dubG9h
ZERlbGVnYXRlOworICAgIGlmIChkb3dubG9hZERlbGVnYXRlKQorICAgICAgICBzZXRVcERvd25s
b2FkQ2xpZW50KHNlbGYsIHRvQVBJKF9jb250ZXh0LmdldCgpKSk7CisgICAgZWxzZQorICAgICAg
ICBXS0NvbnRleHRTZXREb3dubG9hZENsaWVudCh0b0FQSShfY29udGV4dC5nZXQoKSksIG51bGxw
dHIpOworfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1Byb2Nlc3NHcm91cCAoUHJpdmF0
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJE
b3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25s
b2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwN2NkYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJEb3du
bG9hZC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQyL1dL
Rm91bmRhdGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CisKK1dLX0FQSV9DTEFTUworQGludGVyZmFjZSBXS1dlYkRvd25sb2Fk
IDogTlNPYmplY3QKKworQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJEb3dubG9hZC5tbSBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJEb3dubG9hZC5tbQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmY0ODY3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkLm1tCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQg
IldLV2ViRG93bmxvYWRJbnRlcm5hbC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworQGltcGxlbWVudGF0aW9uIFdLV2ViRG93bmxvYWQgeworICAg
IEFQSTo6T2JqZWN0U3RvcmFnZTxEb3dubG9hZFByb3h5PiBfZG93bmxvYWQ7Cit9CisKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIF9kb3dubG9hZC0+fkRvd25sb2FkUHJveHkoKTsKKworICAgIFtz
dXBlciBkZWFsbG9jXTsKK30KKworI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxl
bWVudGF0aW9uCisKKy0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0Cit7CisgICAgcmV0dXJuICpf
ZG93bmxvYWQ7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFdLX0FQSV9FTkFCTEVECmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWRJbnRl
cm5hbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2Fk
SW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDEwNjA4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YkRvd25sb2FkSW50ZXJuYWwuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiV0tXZWJEb3dubG9hZC5oIgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiV0tP
YmplY3QuaCIKKyNpbXBvcnQgIkRvd25sb2FkUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2lubGluZSBXS1dlYkRvd25sb2FkICp3cmFwcGVyKERvd25sb2FkUHJveHkmIGRvd25sb2Fk
KQoreworICAgIEFTU0VSVChbZG93bmxvYWQud3JhcHBlcigpIGlzS2luZE9mQ2xhc3M6W1dLV2Vi
RG93bmxvYWQgY2xhc3NdXSk7CisgICAgcmV0dXJuIChXS1dlYkRvd25sb2FkICopZG93bmxvYWQu
d3JhcHBlcigpOworfQorCit9CisKK0BpbnRlcmZhY2UgV0tXZWJEb3dubG9hZCAoKSA8V0tPYmpl
Y3Q+CitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktp
dDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGM0M2NjMDUuLjU5ZmY3
N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTQzOCw2ICs0MzgsOSBAQAogCQkxRjc1MDZCNjE4NTkxNjU3MDBFQzBGRjcgLyog
V0tXZWJQcm9jZXNzUGx1Z0luTm9kZUhhbmRsZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjAxODE3MTE4NThEQzE2MDBGOTI4ODQgLyog
V0tXZWJQcm9jZXNzUGx1Z0luTm9kZUhhbmRsZUludGVybmFsLmggKi87IH07CiAJCTFGNzUwNkI3
MTg1OTE2NUEwMEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGMDE4
MTZFMTg1OERDMTYwMEY5Mjg4NCAvKiBXS1dlYlByb2Nlc3NQbHVnSW5IaXRUZXN0UmVzdWx0SW50
ZXJuYWwuaCAqLzsgfTsKIAkJMUY3NTA2QjgxODU5MTY1RDAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vz
c1BsdWdJbkZyYW1lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFGMDE4MTZCMTg1OERDMTUwMEY5Mjg4NCAvKiBXS1dlYlByb2Nlc3NQbHVn
SW5GcmFtZUludGVybmFsLmggKi87IH07CisJCTFGN0RDQjFFMThCRDI4MzUwMEU4MjMwNyAvKiBX
S1dlYkRvd25sb2FkLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUY3RENCMTkxOEJEMjZFNTAwRTgyMzA3IC8qIFdLV2ViRG93bmxvYWQubW0gKi87IH07
CisJCTFGN0RDQjFGMThCRDI4M0EwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjdEQ0IxODE4QkQyNkU1MDBF
ODIzMDcgLyogV0tXZWJEb3dubG9hZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTFGN0RDQjIwMThCRDI4NDkwMEU4MjMwNyAvKiBXS1dlYkRvd25s
b2FkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFGN0RDQjFBMThCRDI2RTUwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkSW50ZXJuYWwuaCAq
LzsgfTsKIAkJMUZCMDBBQzcxODVGNzY0NjAwMTkxNDJFIC8qIFdLV2ViUHJvY2Vzc1BsdWdJblBh
Z2VHcm91cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUZCMDBBQzQxODVGNzY0NjAwMTkxNDJFIC8qIFdLV2ViUHJvY2Vzc1BsdWdJblBhZ2VHcm91cC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFGQjAw
QUM4MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXAubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRkIwMEFDNTE4NUY3
NjQ2MDAxOTE0MkUgLyogV0tXZWJQcm9jZXNzUGx1Z0luUGFnZUdyb3VwLm1tICovOyB9OwogCQkx
RkIwMEFDOTE4NUY3NjQ2MDAxOTE0MkUgLyogV0tXZWJQcm9jZXNzUGx1Z0luUGFnZUdyb3VwSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFG
QjAwQUM2MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXBJbnRl
cm5hbC5oICovOyB9OwpAQCAtMjE0OCw2ICsyMTUxLDkgQEAKIAkJMUYzMzVCQkYxODVCODREODAw
MUEyMDFBIC8qIFdLV2ViUHJvY2Vzc1BsdWdJbkxvYWREZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlByb2Nlc3NQbHVnSW5Mb2FkRGVsZWdhdGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY2MDRCQTYxODg5RkE3NDAwRUUwMzk1IC8qIFdL
UmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxRjYwNEJBNzE4ODlGQTc0MDBFRTAzOTUgLyogV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50
c0ludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUmVuZGVyaW5n
UHJvZ3Jlc3NFdmVudHNJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
RjdEQ0IxODE4QkQyNkU1MDBFODIzMDcgLyogV0tXZWJEb3dubG9hZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYkRvd25sb2FkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFGN0RDQjE5MThCRDI2RTUwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJEb3dubG9hZC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUY3RENCMUExOEJEMjZFNTAwRTgyMzA3IC8q
IFdLV2ViRG93bmxvYWRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS1dlYkRvd25sb2FkSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUZCMDBBQzQxODVGNzY0NjAwMTkxNDJFIC8qIFdLV2ViUHJvY2Vzc1BsdWdJblBhZ2VHcm91cC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlByb2Nlc3NQbHVnSW5QYWdl
R3JvdXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUZCMDBBQzUxODVGNzY0NjAw
MTkxNDJFIC8qIFdLV2ViUHJvY2Vzc1BsdWdJblBhZ2VHcm91cC5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViUHJvY2Vzc1BsdWdJblBhZ2VHcm91cC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUZCMDBBQzYxODVGNzY0NjAwMTkxNDJFIC8q
IFdLV2ViUHJvY2Vzc1BsdWdJblBhZ2VHcm91cEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLV2ViUHJvY2Vzc1BsdWdJblBhZ2VHcm91cEludGVybmFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjUwLDYgKzM2NTYsOSBAQAogCQkJCTdDRDVF
QkJDMTc0NkIwNEMwMDBDMUM0NSAvKiBXS1R5cGVSZWZXcmFwcGVyLm1tICovLAogCQkJCUJDODY5
OUIyMTE2QUFEQUEwMDJBOTI1QiAvKiBXS1ZpZXcuaCAqLywKIAkJCQlCRkE2MTc5RTEyRjBCOTlE
MDAzM0UwQ0EgLyogV0tWaWV3UHJpdmF0ZS5oICovLAorCQkJCTFGN0RDQjE4MThCRDI2RTUwMEU4
MjMwNyAvKiBXS1dlYkRvd25sb2FkLmggKi8sCisJCQkJMUY3RENCMTkxOEJEMjZFNTAwRTgyMzA3
IC8qIFdLV2ViRG93bmxvYWQubW0gKi8sCisJCQkJMUY3RENCMUExOEJEMjZFNTAwRTgyMzA3IC8q
IFdLV2ViRG93bmxvYWRJbnRlcm5hbC5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBEZXByZWNhdGVk
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTYzNDMsNiArNjM1Miw3IEBACiAJCQkJ
QkNCQUFEMEIxNDU2MEE0MzAwNTNGODJGIC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0EyODRENzE0OTJGMkM3MDAxRjkwNDIgLyogV0tDb25u
ZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAxN0QwNzE2MjYwRkY0MDA3MDU0RjUgLyog
V0tET01Eb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUY3RENCMUYxOEJEMjgzQTAwRTgy
MzA3IC8qIFdLV2ViRG93bmxvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDE3RDA5MTYyNjBG
RjQwMDcwNTRGNSAvKiBXS0RPTUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0I0RTYy
MThCQkUzRDkwMDBGQ0ZDOSAvKiBQYWdlQ2xpZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwMTdEMEQxNjI2MEZGNDAwNzA1NEY1IC8qIFdLRE9NTm9kZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjcxLDYgKzY2ODEsNyBAQAogCQkJCUY2MkE3NjVEMTJCMUFCQzMwMDA1RjFCNiAvKiBXZWJE
YXRhYmFzZU1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0NDVCQTMxODRENUZD
RjAwNEIzNDE0IC8qIFdLQ29udGV4dERvd25sb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQUMxMzM4NjE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMUY3RENCMjAxOEJEMjg0OTAwRTgyMzA3IC8qIFdLV2Vi
RG93bmxvYWRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBQzExMUYxMkM5MkMxRjAw
QjA4RUVFIC8qIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5Q2xpZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNjJBNzZCOTEyQjFCMjVGMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHlN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFCN0Q3MkMxMjg4Q0FBRDAwQ0ZEMDhDIC8q
IFdlYkRvd25sb2FkQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTc3NzksNiArNzc5MCw3IEBA
CiAJCQkJNTE4RThGMEQxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTE4RThGMEIxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkTWFuYWdlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUI3RDRDQjEyODhBQUE3MDBDRkQwOEMgLyogRG93bmxv
YWRQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxRjdEQ0IxRTE4QkQyODM1MDBFODIzMDcg
LyogV0tXZWJEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBRDI1RTk1MTY3QUIwODEw
MEVBOUJDRCAvKiBEb3dubG9hZFByb3h5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3QzRD
MDg2MTgxNDlDNUIwMDM2ODhCOSAvKiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW0ubW0gaW4gU291cmNl
cyAqLywKIAkJCQkxQUI3RDYxOTEyODhCOUQ5MDBDRkQwOEMgLyogRG93bmxvYWRQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
</data>
<flag name="review"
          id="249307"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225499</attachid>
            <date>2014-02-28 15:25:06 -0800</date>
            <delta_ts>2014-03-22 13:51:08 -0700</delta_ts>
            <desc>Revised patch to address review comment.</desc>
            <filename>download_wk2.patch</filename>
            <type>text/plain</type>
            <size>26671</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">Y29tbWl0IGM0ZDc1MWNiODEzOTBkMjM1ZTAwMGY5OGVmMTNhNzcxNGRlZTg3ZWUKQXV0aG9yOiBZ
b25nanVuIFpoYW5nIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgRmViIDI1
IDEyOjQ0OjU5IDIwMTQgLTA4MDAKCiAgICBbaU9TXSBEb3dubG9hZCBzdXBwb3J0IGJ5IENGVVJM
RG93bmxvYWRSZWYgdW5kZXIgVVNFKENGTkVUV09SSykKICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkzMjIKICAgIAogICAgRW5hYmxlIGRvd25sb2FkIHN1cHBv
cnQgZm9yIFdLMiBieSB1c2luZyBDRlVSTERvd25sb2FkIEFQSS4KICAgIAogICAgKiBTaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tOiBDcmVhdGUgV0tXZWJEb3dubG9hZCB3cmFwcGVyIG9iamVjdCBm
b3IgRG93bmxvYWRQcm94eS4KICAgIChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0KToKICAgICogU2hh
cmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW06CiAgICAoV2ViS2l0OjpkaXNwYXRjaE9u
TWFpblRocmVhZCk6CiAgICAoV2ViS2l0OjpzZXRVcERvd25sb2FkQ2xpZW50KToKICAgIChXZWJL
aXQ6OkRvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUpOiBVc2UgQ0ZVUkxEb3dubG9hZFJlZiBmb3Ig
ZG93bmxvYWQsIGFuZCBzZXR1cCBDRlVSTERvd25sb2FkQ2xpZW50CiAgICAgICAgIGZvciBkb3du
bG9hZCBjYWxsYmFja3MuCiAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAu
aDogQWRkIFdLRG93bmxvYWREZWxlZ2F0ZSBmb3IgV0syIHRvIGxpc3RlbiB0byBkb3dubG9hZCBl
dmVudHMuCiAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW06CiAgICAo
ZGlkU3RhcnQpOgogICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToK
ICAgIChkaWRGaW5pc2gpOgogICAgKGRpZFJlY2VpdmVSZXNwb25zZSk6CiAgICAoZGlkUmVjZWl2
ZURhdGEpOgogICAgKHNldFVwRG93bmxvYWRDbGllbnQpOgogICAgKC1bV0tQcm9jZXNzR3JvdXAg
ZG93bmxvYWREZWxlZ2F0ZV0pOgogICAgKC1bV0tQcm9jZXNzR3JvdXAgc2V0RG93bmxvYWREZWxl
Z2F0ZTpdKTogV2hlbiBzZXQgYSBuZXcgZG93bmxvYWQgZGVsZWdhdGUsIGFsc28gc2V0dXAgdGhl
IGRvd25sb2FkIGNsaWVudAogICAgICAgIGZvciBXS0NvbnRleHQuCiAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJEb3dubG9hZC5oOiBBZGQgT2JqQyBBUEkgb2JqZWN0IGZvciBEb3dubG9h
ZFByb3h5LgogICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQubW06CiAgICAo
LVtXS1dlYkRvd25sb2FkIGRlYWxsb2NdKToKICAgICgtW1dLV2ViRG93bmxvYWQgQVBJOjpdKToK
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkSW50ZXJuYWwuaDoKICAgIChX
ZWJLaXQ6OndyYXBwZXIpOgogICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCmluZGV4IGJiMTlhNGEuLjI5NjBhMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OCBAQAorMjAxNC0wMi0yNSAgWW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5femhhbmdAYXBwbGUuY29t
PgorCisgICAgICAgIFtpT1NdIERvd25sb2FkIHN1cHBvcnQgYnkgQ0ZVUkxEb3dubG9hZFJlZiB1
bmRlciBVU0UoQ0ZORVRXT1JLKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI5MzIyCisKKyAgICAgICAgRW5hYmxlIGRvd25sb2FkIHN1cHBvcnQgZm9y
IFdLMiBieSB1c2luZyBDRlVSTERvd25sb2FkIEFQSS4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9Db2NvYS9BUElPYmplY3QubW06IENy
ZWF0ZSBXS1dlYkRvd25sb2FkIHdyYXBwZXIgb2JqZWN0IGZvciBEb3dubG9hZFByb3h5LgorICAg
ICAgICAoQVBJOjpPYmplY3Q6Om5ld09iamVjdCk6CisgICAgICAgICogU2hhcmVkL0Rvd25sb2Fk
cy9pb3MvRG93bmxvYWRJT1MubW06CisgICAgICAgIChXZWJLaXQ6OmRpc3BhdGNoT25NYWluVGhy
ZWFkKToKKyAgICAgICAgKFdlYktpdDo6c2V0VXBEb3dubG9hZENsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OkRvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUpOiBVc2UgQ0ZVUkxEb3dubG9hZFJlZiBm
b3IgZG93bmxvYWQsIGFuZCBzZXR1cCBDRlVSTERvd25sb2FkQ2xpZW50CisgICAgICAgICAgICAg
Zm9yIGRvd25sb2FkIGNhbGxiYWNrcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJvY2Vzc0dyb3VwLmg6IEFkZCBXS0Rvd25sb2FkRGVsZWdhdGUgZm9yIFdLMiB0byBsaXN0ZW4g
dG8gZG93bmxvYWQgZXZlbnRzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9j
ZXNzR3JvdXAubW06CisgICAgICAgIChkaWRTdGFydCk6CisgICAgICAgIChkZWNpZGVEZXN0aW5h
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAgIChkaWRGaW5pc2gpOgorICAgICAg
ICAoZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKGRpZFJlY2VpdmVEYXRhKToKKyAgICAg
ICAgKHNldFVwRG93bmxvYWRDbGllbnQpOgorICAgICAgICAoLVtXS1Byb2Nlc3NHcm91cCBkb3du
bG9hZERlbGVnYXRlXSk6CisgICAgICAgICgtW1dLUHJvY2Vzc0dyb3VwIHNldERvd25sb2FkRGVs
ZWdhdGU6XSk6IFdoZW4gc2V0IGEgbmV3IGRvd25sb2FkIGRlbGVnYXRlLCBhbHNvIHNldHVwIHRo
ZSBkb3dubG9hZCBjbGllbnQKKyAgICAgICAgICAgIGZvciBXS0NvbnRleHQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkLmg6IEFkZCBPYmpDIEFQSSBvYmplY3Qg
Zm9yIERvd25sb2FkUHJveHkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRv
d25sb2FkLm1tOgorICAgICAgICAoLVtXS1dlYkRvd25sb2FkIGRlYWxsb2NdKToKKyAgICAgICAg
KC1bV0tXZWJEb3dubG9hZCBBUEk6Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJEb3dubG9hZEludGVybmFsLmg6CisgICAgICAgIChXZWJLaXQ6OndyYXBwZXIpOgorICAg
ICAgICAqIFdlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNC0wMi0yOCAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
IGJ1aWxkIGZpeCBhZnRlciByMTY0ODMyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0NvY29hL0FQSU9iamVjdC5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElP
YmplY3QubW0KaW5kZXggNTAxZWI0Yy4uNjljMzFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29jb2EvQVBJT2JqZWN0Lm1tCkBAIC00NCw2ICs0NCw3IEBACiAjaW1wb3J0ICJXS05TVVJMUHJv
dGVjdGlvblNwYWNlLmgiCiAjaW1wb3J0ICJXS05hdmlnYXRpb25EYXRhSW50ZXJuYWwuaCIKICNp
bXBvcnQgIldLUHJvY2Vzc1Bvb2xJbnRlcm5hbC5oIgorI2ltcG9ydCAiV0tXZWJEb3dubG9hZElu
dGVybmFsLmgiCiAjaW1wb3J0ICJXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRy
b2xsZXJJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWVJbnRlcm5h
bC5oIgogI2ltcG9ydCAiV0tXZWJQcm9jZXNzUGx1Z0luSGl0VGVzdFJlc3VsdEludGVybmFsLmgi
CkBAIC0xMTMsNiArMTE0LDEwIEBAIHZvaWQqIE9iamVjdDo6bmV3T2JqZWN0KHNpemVfdCBzaXpl
LCBUeXBlIHR5cGUpCiAgICAgICAgIHdyYXBwZXIgPSBbV0tOU0RpY3Rpb25hcnkgYWxsb2NdOwog
ICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVHlwZTo6RG93bmxvYWQ6CisgICAgICAgIHdyYXBw
ZXIgPSBbV0tXZWJEb3dubG9hZCBhbGxvY107CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBU
eXBlOjpFcnJvcjoKICAgICAgICAgd3JhcHBlciA9IE5TQWxsb2NhdGVPYmplY3QoW1dLTlNFcnJv
ciBzZWxmXSwgc2l6ZSwgbnVsbHB0cik7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5tbQppbmRleCA5YmRhNjAx
Li45MjA5MDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2lv
cy9Eb3dubG9hZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRG93bmxvYWRzL2lv
cy9Eb3dubG9hZElPUy5tbQpAQCAtMjgsMjAgKzI4LDEzMiBAQAogCiAjaWYgUExBVEZPUk0oSU9T
KQogCisjaW1wb3J0IDxDRk5ldHdvcmsvQ0ZVUkxEb3dubG9hZC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZUVycm9yLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Jlc291
cmNlUmVzcG9uc2UuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9S
dW5Mb29wLmg+CisjaW1wb3J0ICJEYXRhUmVmZXJlbmNlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLSAgICAKKworLy8gRklYTUU6IElmIHBvc3Np
YmxlLCB3ZSBzaG91bGQgY29uc2lkZXIgdG8gbW92ZSBzb21lIGNhbGxiYWNrcyBvZmYgdGhlIG1h
aW4gdGhyZWFkIG9yIGF0IGxlYXN0CisvLyBtYWtlIHRoZW0gYXN5bmNob3JvdXMgY2FsbHMuCitz
dGF0aWMgdm9pZCBkaXNwYXRjaE9uTWFpblRocmVhZCh2b2lkICheYmxvY2spKCkpCit7CisgICAg
aWYgKFJ1bkxvb3A6OmlzTWFpbigpKSB7CisgICAgICAgIGJsb2NrKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBkaXNwYXRjaF9zeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCks
IGJsb2NrKTsKK30KKworc3RhdGljIHZvaWQgc2V0VXBEb3dubG9hZENsaWVudChDRlVSTERvd25s
b2FkQ2xpZW50JiBjbGllbnQsIERvd25sb2FkJiBkb3dubG9hZCkKK3sKKyAgICBtZW1zZXQoJmNs
aWVudCwgMCwgc2l6ZW9mKGNsaWVudCkpOworCisgICAgY2xpZW50LnZlcnNpb24gPSAwOworICAg
IGNsaWVudC5jbGllbnRJbmZvID0gJmRvd25sb2FkOworCisgICAgY2xpZW50LmRpZFN0YXJ0ID0g
W10oQ0ZVUkxEb3dubG9hZFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKKyAgICB7CisgICAg
ICAgIERvd25sb2FkICpkb3dubG9hZCA9IChEb3dubG9hZCAqKWNsaWVudEluZm87CisgICAgICAg
IGRpc3BhdGNoT25NYWluVGhyZWFkKFtkb3dubG9hZF17CisgICAgICAgICAgICBkb3dubG9hZC0+
ZGlkU3RhcnQoKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGNsaWVudC53aWxsU2VuZFJl
cXVlc3QgPSBbXShDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZV
UkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCopIC0+IENGVVJMUmVxdWVzdFJlZgorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgfTsKKworICAgIGNsaWVudC5kaWRSZWNlaXZlUmVz
cG9uc2UgPSBbXShDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgRG93bmxvYWQgKmRvd25sb2Fk
ID0gKERvd25sb2FkICopY2xpZW50SW5mbzsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQo
W2Rvd25sb2FkLCByZXNwb25zZV17CisgICAgICAgICAgICBkb3dubG9hZC0+ZGlkUmVjZWl2ZVJl
c3BvbnNlKHJlc3BvbnNlKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGNsaWVudC5kaWRS
ZWNlaXZlRGF0YSA9IFtdKENGVVJMRG93bmxvYWRSZWYsIENGSW5kZXggbGVuZ3RoLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgRG93bmxvYWQgKmRvd25sb2FkID0gKERv
d25sb2FkICopY2xpZW50SW5mbzsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoW2Rvd25s
b2FkLCBsZW5ndGhdeworICAgICAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVEYXRhKGxlbmd0
aCk7CisgICAgICAgIH0pOworICAgIH07CisKKyAgICBjbGllbnQuc2hvdWxkRGVjb2RlRGF0YU9m
TUlNRVR5cGUgPSBbXShDRlVSTERvd25sb2FkUmVmLCBDRlN0cmluZ1JlZiBlbmNvZGluZ1R5cGUs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIC0+IEJvb2xlYW4KKyAgICB7CisgICAgICAgIEJPT0wg
cmV0dXJuVmFsdWUgPSBOTzsKKyAgICAgICAgRG93bmxvYWQgKmRvd25sb2FkID0gKERvd25sb2Fk
ICopY2xpZW50SW5mbzsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoW2Rvd25sb2FkLCBl
bmNvZGluZ1R5cGUsICZyZXR1cm5WYWx1ZV17CisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGRv
d25sb2FkLT5zaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZShlbmNvZGluZ1R5cGUpOwor
ICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7OworICAgIH07CisKKyAg
ICBjbGllbnQuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkT2JqZWN0TmFtZSA9IFtdKENG
VVJMRG93bmxvYWRSZWYgZG93bmxvYWRSZWYsIENGU3RyaW5nUmVmIG9iamVjdE5hbWUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCisgICAgeworICAgICAgICBEb3dubG9hZCAqZG93bmxvYWQgPSAo
RG93bmxvYWQgKiljbGllbnRJbmZvOworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChbZG93
bmxvYWQsIGRvd25sb2FkUmVmLCBvYmplY3ROYW1lXXsKKyAgICAgICAgICAgIFN0cmluZyBkZXN0
aW5hdGlvbjsKKyAgICAgICAgICAgIEJPT0wgYWxsb3dPdmVyd3JpdGU7CisgICAgICAgICAgICBp
ZiAoZG93bmxvYWQpCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gPSBkb3dubG9hZC0+ZGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUob2JqZWN0TmFtZSwgYWxsb3dPdmVy
d3JpdGUpOworCisgICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgIENGVVJMRG93bmxvYWRTZXREZXN0aW5hdGlvbihkb3dubG9hZFJlZiwgKENGVVJM
UmVmKVtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6KE5TU3RyaW5nKilkZXN0aW5hdGlvbl0sIGFsbG93
T3ZlcndyaXRlKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGNsaWVudC5kaWRDcmVhdGVE
ZXN0aW5hdGlvbiA9IFtdKENGVVJMRG93bmxvYWRSZWYsIENGVVJMUmVmIHBhdGgsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCisgICAgeworICAgICAgICBEb3dubG9hZCAqZG93bmxvYWQgPSAoRG93
bmxvYWQgKiljbGllbnRJbmZvOworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChbZG93bmxv
YWQsIHBhdGhdeworICAgICAgICAgICAgZG93bmxvYWQtPmRpZENyZWF0ZURlc3RpbmF0aW9uKENG
VVJMR2V0U3RyaW5nKHBhdGgpKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGNsaWVudC5k
aWRGaW5pc2ggPSBbXShDRlVSTERvd25sb2FkUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
ICAgIHsKKyAgICAgICAgRG93bmxvYWQgKmRvd25sb2FkID0gKERvd25sb2FkICopY2xpZW50SW5m
bzsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoW2Rvd25sb2FkXXsKKyAgICAgICAgICAg
IGRvd25sb2FkLT5kaWRGaW5pc2goKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGNsaWVu
dC5kaWRGYWlsID0gW10oQ0ZVUkxEb3dubG9hZFJlZiBkb3dubG9hZFJlZiwgQ0ZFcnJvclJlZiBl
cnJvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKKyAgICB7CisgICAgICAgIERvd25sb2FkICpk
b3dubG9hZCA9IChEb3dubG9hZCAqKWNsaWVudEluZm87CisgICAgICAgIGRpc3BhdGNoT25NYWlu
VGhyZWFkKFtkb3dubG9hZCwgZG93bmxvYWRSZWYsIGVycm9yXXsKKyAgICAgICAgICAgIFJldGFp
blB0cjxDRkRhdGFSZWY+IHJlc3VtZURhdGEgPSBhZG9wdENGKENGVVJMRG93bmxvYWRDb3B5UmVz
dW1lRGF0YShkb3dubG9hZFJlZikpOworICAgICAgICAgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRh
dGFSZWZlcmVuY2UoQ0ZEYXRhR2V0Qnl0ZVB0cihyZXN1bWVEYXRhLmdldCgpKSwgQ0ZEYXRhR2V0
TGVuZ3RoKHJlc3VtZURhdGEuZ2V0KCkpKTsKKyAgICAgICAgICAgIGRvd25sb2FkLT5kaWRGYWls
KGVycm9yLCBkYXRhUmVmZXJlbmNlKTsKKyAgICAgICAgfSk7CisgICAgfTsKK30KKwogdm9pZCBE
b3dubG9hZDo6c3RhcnQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRG93
bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKQordm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgQ0ZVUkxEb3dubG9hZENsaWVudCBjbGllbnQ7CisgICAgc2V0VXBEb3du
bG9hZENsaWVudChjbGllbnQsICp0aGlzKTsKKworICAgIENGVVJMQ29ubmVjdGlvblJlZiBjb25u
ZWN0aW9uID0gaGFuZGxlLT5yZWxlYXNlQ29ubmVjdGlvbkZvckRvd25sb2FkKCk7CisgICAgbV9k
b3dubG9hZCA9IGFkb3B0Q0YoQ0ZVUkxEb3dubG9hZENyZWF0ZUFuZFN0YXJ0V2l0aExvYWRpbmdD
b25uZWN0aW9uKE5VTEwsIGNvbm5lY3Rpb24sIG1fcmVxdWVzdC5jZlVSTFJlcXVlc3QoVXBkYXRl
SFRUUEJvZHkpLCByZXNwb25zZS5jZlVSTFJlc3BvbnNlKCksICZjbGllbnQpKTsKKyAgICBDRlJl
bGVhc2UoY29ubmVjdGlvbik7CiB9CiAKIHZvaWQgRG93bmxvYWQ6OmNhbmNlbCgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLmgKaW5k
ZXggMjJhYTU3ZS4uMjIwMWJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAuaApAQCAtMzAsOCArMzAsMjAgQEAKICNpbXBvcnQg
PEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8V2ViS2l0Mi9XS0Nvbm5lY3Rpb24u
aD4KIAorQGNsYXNzIFdLV2ViRG93bmxvYWQ7CiBAY2xhc3MgV0tQcm9jZXNzR3JvdXA7CiAKK0Bw
cm90b2NvbCBXS0Rvd25sb2FkRGVsZWdhdGUgPE5TT2JqZWN0PgorQG9wdGlvbmFsCisKKy0gKHZv
aWQpZG93bmxvYWREaWRTdGFydDooV0tXZWJEb3dubG9hZCAqKWRvd25sb2FkOworLSAoTlNTdHJp
bmcgKilkb3dubG9hZDooV0tXZWJEb3dubG9hZCAqKWRvd25sb2FkIGRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihOU1N0cmluZyAqKWZpbGVuYW1lIGFsbG93T3ZlcndyaXRl
OihCT09MICopYWxsb3dPdmVyd3JpdGU7CistICh2b2lkKWRvd25sb2FkRGlkRmluaXNoOihXS1dl
YkRvd25sb2FkICopZG93bmxvYWQ7CistICh2b2lkKWRvd25sb2FkOihXS1dlYkRvd25sb2FkICop
ZG93bmxvYWQgZGlkUmVjZWl2ZVJlc3BvbnNlOihOU1VSTFJlc3BvbnNlICopcmVzcG9uc2U7Cist
ICh2b2lkKWRvd25sb2FkOihXS1dlYkRvd25sb2FkICopZG93bmxvYWQgZGlkUmVjZWl2ZURhdGE6
KHVpbnQ2NF90KWxlbmd0aDsKKworQGVuZAorCiBAcHJvdG9jb2wgV0tQcm9jZXNzR3JvdXBEZWxl
Z2F0ZSA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKIApAQCAtNTIsNiArNjQsNyBAQCBXS19BUElfQ0xB
U1MKICNwcmFnbWEgbWFyayBEZWxlZ2F0ZXMKIAogQHByb3BlcnR5IChhc3NpZ24pIGlkIDxXS1By
b2Nlc3NHcm91cERlbGVnYXRlPiBkZWxlZ2F0ZTsKK0Bwcm9wZXJ0eSAoYXNzaWduKSBpZCA8V0tE
b3dubG9hZERlbGVnYXRlPiBkb3dubG9hZERlbGVnYXRlOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLm1tCmluZGV4
IDUwOWFjYTUuLmJiNGZjMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQpAQCAtMzksNiArMzksOCBAQAogI2ltcG9ydCAi
V0tOYXZpZ2F0aW9uRGF0YUludGVybmFsLmgiCiAjaW1wb3J0ICJXS1JldGFpblB0ci5oIgogI2lt
cG9ydCAiV0tTdHJpbmdDRi5oIgorI2ltcG9ydCAiV0tVUkxSZXNwb25zZU5TLmgiCisjaW1wb3J0
ICJXS1dlYkRvd25sb2FkSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYWtPYmpDUHRyLmgiCiAjaW1w
b3J0ICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKICNpbXBvcnQgIldlYkNvbnRleHQuaCIKQEAgLTU3
LDYgKzU5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKICAgICBSZWZQdHI8V2ViQ29udGV4
dD4gX2NvbnRleHQ7CiAKICAgICBXZWFrT2JqQ1B0cjxpZCA8V0tQcm9jZXNzR3JvdXBEZWxlZ2F0
ZT4+IF9kZWxlZ2F0ZTsKKyAgICBXZWFrT2JqQ1B0cjxpZCA8V0tEb3dubG9hZERlbGVnYXRlPj4g
X2Rvd25sb2FkRGVsZWdhdGU7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgUmV0YWluUHRyPFdL
R2VvbG9jYXRpb25Qcm92aWRlcklPUz4gX2dlb2xvY2F0aW9uUHJvdmlkZXI7CkBAIC0xNzMsNiAr
MTc2LDczIEBAIHN0YXRpYyB2b2lkIHNldFVwSGlzdG9yeUNsaWVudChXS1Byb2Nlc3NHcm91cCAq
cHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRSZWYgY29udGV4CiAgICAgV0tDb250ZXh0U2V0SGlzdG9y
eUNsaWVudChjb250ZXh0UmVmLCAmaGlzdG9yeUNsaWVudC5iYXNlKTsKIH0KIAorc3RhdGljIHZv
aWQgZGlkU3RhcnQoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIGRvd25sb2FkLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAgPSBz
dGF0aWNfY2FzdDxXS1Byb2Nlc3NHcm91cCo+KGNsaWVudEluZm8pOworICAgIGF1dG8gZG93bmxv
YWREZWxlZ2F0ZSA9IHByb2Nlc3NHcm91cC0+X2Rvd25sb2FkRGVsZWdhdGUuZ2V0KCk7CisKKyAg
ICBpZiAoW2Rvd25sb2FkRGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihkb3du
bG9hZERpZFN0YXJ0OildKQorICAgICAgICBbZG93bmxvYWREZWxlZ2F0ZSBkb3dubG9hZERpZFN0
YXJ0OndyYXBwZXIoKnRvSW1wbChkb3dubG9hZCkpXTsKK30KKworc3RhdGljIFdLU3RyaW5nUmVm
IGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tE
b3dubG9hZFJlZiBkb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5hbWUsIGJvb2wqIGFsbG93T3Zl
cndyaXRlLCBjb25zdCB2b2lkKmNsaWVudEluZm8pCit7CisgICAgV0tQcm9jZXNzR3JvdXAgKnBy
b2Nlc3NHcm91cCA9IHN0YXRpY19jYXN0PFdLUHJvY2Vzc0dyb3VwKj4oY2xpZW50SW5mbyk7Cisg
ICAgYXV0byBkb3dubG9hZERlbGVnYXRlID0gcHJvY2Vzc0dyb3VwLT5fZG93bmxvYWREZWxlZ2F0
ZS5nZXQoKTsKKworICAgIGlmIChbZG93bmxvYWREZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGRvd25sb2FkOmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1l
OmFsbG93T3ZlcndyaXRlOildKSB7CisgICAgICAgIEJPT0wgYWxsb3dPdmVyd3JpdGVEZXNpbmF0
aW9uOworICAgICAgICBOU1N0cmluZyAqZGVzdGluYXRpb24gPSBbZG93bmxvYWREZWxlZ2F0ZSBk
b3dubG9hZDp3cmFwcGVyKCp0b0ltcGwoZG93bmxvYWQpKSBkZWNpZGVEZXN0aW5hdGlvbldpdGhT
dWdnZXN0ZWRGaWxlbmFtZTp3cmFwcGVyKCp0b0ltcGwoZmlsZW5hbWUpKSBhbGxvd092ZXJ3cml0
ZTomYWxsb3dPdmVyd3JpdGVEZXNpbmF0aW9uXTsKKyAgICAgICAgKmFsbG93T3ZlcndyaXRlID0g
YWxsb3dPdmVyd3JpdGVEZXNpbmF0aW9uOworICAgICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVX
aXRoQ0ZTdHJpbmcoKENGU3RyaW5nUmVmKWRlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiwgV0tE
b3dubG9hZFJlZiBkb3dubG9hZCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXS1By
b2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwID0gc3RhdGljX2Nhc3Q8V0tQcm9jZXNzR3JvdXAqPihj
bGllbnRJbmZvKTsKKyAgICBhdXRvIGRvd25sb2FkRGVsZWdhdGUgPSBwcm9jZXNzR3JvdXAtPl9k
b3dubG9hZERlbGVnYXRlLmdldCgpOworCisgICAgaWYgKFtkb3dubG9hZERlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZG93bmxvYWREaWRGaW5pc2g6KV0pCisgICAgICAgIFtk
b3dubG9hZERlbGVnYXRlIGRvd25sb2FkRGlkRmluaXNoOndyYXBwZXIoKnRvSW1wbChkb3dubG9h
ZCkpXTsKK30KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwg
V0tEb3dubG9hZFJlZiBkb3dubG9hZCwgV0tVUkxSZXNwb25zZVJlZiByZXNwb25zZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwID0g
c3RhdGljX2Nhc3Q8V0tQcm9jZXNzR3JvdXAqPihjbGllbnRJbmZvKTsKKyAgICBhdXRvIGRvd25s
b2FkRGVsZWdhdGUgPSBwcm9jZXNzR3JvdXAtPl9kb3dubG9hZERlbGVnYXRlLmdldCgpOworCisg
ICAgaWYgKFtkb3dubG9hZERlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZG93
bmxvYWQ6ZGlkUmVjZWl2ZVJlc3BvbnNlOildKQorICAgICAgICBbZG93bmxvYWREZWxlZ2F0ZSBk
b3dubG9hZDp3cmFwcGVyKCp0b0ltcGwoZG93bmxvYWQpKSBkaWRSZWNlaXZlUmVzcG9uc2U6YWRv
cHROUyhXS1VSTFJlc3BvbnNlQ29weU5TVVJMUmVzcG9uc2UocmVzcG9uc2UpKS5nZXQoKV07Cit9
CisKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJl
ZiBkb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIFdLUHJvY2Vzc0dyb3VwICpwcm9jZXNzR3JvdXAgPSBzdGF0aWNfY2FzdDxXS1Byb2Nlc3NH
cm91cCo+KGNsaWVudEluZm8pOworICAgIGF1dG8gZG93bmxvYWREZWxlZ2F0ZSA9IHByb2Nlc3NH
cm91cC0+X2Rvd25sb2FkRGVsZWdhdGUuZ2V0KCk7CisKKyAgICBpZiAoW2Rvd25sb2FkRGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihkb3dubG9hZDpkaWRSZWNlaXZlRGF0YTop
XSkKKyAgICAgICAgW2Rvd25sb2FkRGVsZWdhdGUgZG93bmxvYWQ6d3JhcHBlcigqdG9JbXBsKGRv
d25sb2FkKSkgZGlkUmVjZWl2ZURhdGE6bGVuZ3RoXTsKK30KKworc3RhdGljIHZvaWQgc2V0VXBE
b3dubG9hZENsaWVudChXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRSZWYg
Y29udGV4dFJlZikKK3sKKyAgICBXS0NvbnRleHREb3dubG9hZENsaWVudFYwIGRvd25sb2FkQ2xp
ZW50OworICAgIG1lbXNldCgmZG93bmxvYWRDbGllbnQsIDAsIHNpemVvZihkb3dubG9hZENsaWVu
dCkpOworCisgICAgZG93bmxvYWRDbGllbnQuYmFzZS52ZXJzaW9uID0gMDsKKyAgICBkb3dubG9h
ZENsaWVudC5iYXNlLmNsaWVudEluZm8gPSBwcm9jZXNzR3JvdXA7CisgICAgZG93bmxvYWRDbGll
bnQuZGlkU3RhcnQgPSBkaWRTdGFydDsKKyAgICBkb3dubG9hZENsaWVudC5kZWNpZGVEZXN0aW5h
dGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSA9IGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lOworICAgIGRvd25sb2FkQ2xpZW50LmRpZEZpbmlzaCA9IGRpZEZpbmlzaDsKKyAg
ICBkb3dubG9hZENsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UgPSBkaWRSZWNlaXZlUmVzcG9uc2U7
CisgICAgZG93bmxvYWRDbGllbnQuZGlkUmVjZWl2ZURhdGEgPSBkaWRSZWNlaXZlRGF0YTsKKwor
ICAgIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50KGNvbnRleHRSZWYsICZkb3dubG9hZENsaWVu
dC5iYXNlKTsKK30KKwogLSAoaWQpaW5pdAogewogICAgIHJldHVybiBbc2VsZiBpbml0V2l0aElu
amVjdGVkQnVuZGxlVVJMOm5pbF07CkBAIC0yMTIsNiArMjgyLDIwIEBAIHN0YXRpYyB2b2lkIHNl
dFVwSGlzdG9yeUNsaWVudChXS1Byb2Nlc3NHcm91cCAqcHJvY2Vzc0dyb3VwLCBXS0NvbnRleHRS
ZWYgY29udGV4CiAgICAgX2RlbGVnYXRlID0gZGVsZWdhdGU7CiB9CiAKKy0gKGlkIDxXS0Rvd25s
b2FkRGVsZWdhdGU+KWRvd25sb2FkRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2Rvd25sb2FkRGVs
ZWdhdGUuZ2V0QXV0b3JlbGVhc2VkKCk7Cit9CisKKy0gKHZvaWQpc2V0RG93bmxvYWREZWxlZ2F0
ZTooaWQgPFdLRG93bmxvYWREZWxlZ2F0ZT4pZG93bmxvYWREZWxlZ2F0ZQoreworICAgIF9kb3du
bG9hZERlbGVnYXRlID0gZG93bmxvYWREZWxlZ2F0ZTsKKyAgICBpZiAoZG93bmxvYWREZWxlZ2F0
ZSkKKyAgICAgICAgc2V0VXBEb3dubG9hZENsaWVudChzZWxmLCB0b0FQSShfY29udGV4dC5nZXQo
KSkpOworICAgIGVsc2UKKyAgICAgICAgV0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQodG9BUEko
X2NvbnRleHQuZ2V0KCkpLCBudWxscHRyKTsKK30KKwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24g
V0tQcm9jZXNzR3JvdXAgKFByaXZhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJEb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmU4MDdjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2ltcG9ydCA8V2ViS2l0Mi9XS0ZvdW5kYXRpb24uaD4KKworI2lmIFdLX0FQSV9FTkFCTEVE
CisKKyNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgorCitXS19BUElfQ0xBU1MKK0Bp
bnRlcmZhY2UgV0tXZWJEb3dubG9hZCA6IE5TT2JqZWN0CisKK0BlbmQKKworI2VuZGlmIC8vIFdL
X0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViRG93bmxvYWQubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViRG93bmxvYWQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJm
NDg2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJEb3dubG9hZC5tbQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJXS1dlYkRvd25sb2FkSW50ZXJuYWwuaCIKKworI2lmIFdL
X0FQSV9FTkFCTEVECisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0BpbXBsZW1lbnRhdGlv
biBXS1dlYkRvd25sb2FkIHsKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8RG93bmxvYWRQcm94eT4g
X2Rvd25sb2FkOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfZG93bmxvYWQtPn5Eb3du
bG9hZFByb3h5KCk7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKyNwcmFnbWEgbWFyayBX
S09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9iamVjdCYpX2FwaU9i
amVjdAoreworICAgIHJldHVybiAqX2Rvd25sb2FkOworfQorCitAZW5kCisKKyNlbmRpZiAvLyBX
S19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYkRvd25sb2FkSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJEb3dubG9hZEludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uODQxMDYwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJEb3dubG9hZEludGVybmFsLmgKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbXBvcnQgIldLV2ViRG93bmxvYWQuaCIKKworI2lmIFdLX0FQSV9F
TkFCTEVECisKKyNpbXBvcnQgIldLT2JqZWN0LmgiCisjaW1wb3J0ICJEb3dubG9hZFByb3h5Lmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitpbmxpbmUgV0tXZWJEb3dubG9hZCAqd3JhcHBlcihE
b3dubG9hZFByb3h5JiBkb3dubG9hZCkKK3sKKyAgICBBU1NFUlQoW2Rvd25sb2FkLndyYXBwZXIo
KSBpc0tpbmRPZkNsYXNzOltXS1dlYkRvd25sb2FkIGNsYXNzXV0pOworICAgIHJldHVybiAoV0tX
ZWJEb3dubG9hZCAqKWRvd25sb2FkLndyYXBwZXIoKTsKK30KKworfQorCitAaW50ZXJmYWNlIFdL
V2ViRG93bmxvYWQgKCkgPFdLT2JqZWN0PgorQGVuZAorCisjZW5kaWYgLy8gV0tfQVBJX0VOQUJM
RUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA4N2M3NzJkLi4yMmEzYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NDIsNiArNDQyLDkgQEAKIAkJMUY3NTA2
QjYxODU5MTY1NzAwRUMwRkY3IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUYwMTgx
NzExODU4REMxNjAwRjkyODg0IC8qIFdLV2ViUHJvY2Vzc1BsdWdJbk5vZGVIYW5kbGVJbnRlcm5h
bC5oICovOyB9OwogCQkxRjc1MDZCNzE4NTkxNjVBMDBFQzBGRjcgLyogV0tXZWJQcm9jZXNzUGx1
Z0luSGl0VGVzdFJlc3VsdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxRjAxODE2RTE4NThEQzE2MDBGOTI4ODQgLyogV0tXZWJQcm9jZXNz
UGx1Z0luSGl0VGVzdFJlc3VsdEludGVybmFsLmggKi87IH07CiAJCTFGNzUwNkI4MTg1OTE2NUQw
MEVDMEZGNyAvKiBXS1dlYlByb2Nlc3NQbHVnSW5GcmFtZUludGVybmFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjAxODE2QjE4NThEQzE1MDBGOTI4
ODQgLyogV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWVJbnRlcm5hbC5oICovOyB9OworCQkxRjdEQ0Ix
RTE4QkQyODM1MDBFODIzMDcgLyogV0tXZWJEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGN0RDQjE5MThCRDI2RTUwMEU4MjMwNyAvKiBX
S1dlYkRvd25sb2FkLm1tICovOyB9OworCQkxRjdEQ0IxRjE4QkQyODNBMDBFODIzMDcgLyogV0tX
ZWJEb3dubG9hZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUY3RENCMTgxOEJEMjZFNTAwRTgyMzA3IC8qIFdLV2ViRG93bmxvYWQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxRjdEQ0IyMDE4QkQyODQ5
MDBFODIzMDcgLyogV0tXZWJEb3dubG9hZEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxRjdEQ0IxQTE4QkQyNkU1MDBFODIzMDcgLyogV0tX
ZWJEb3dubG9hZEludGVybmFsLmggKi87IH07CiAJCTFGQjAwQUM3MTg1Rjc2NDYwMDE5MTQyRSAv
KiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQjAwQUM0MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlBy
b2Nlc3NQbHVnSW5QYWdlR3JvdXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxRkIwMEFDODE4NUY3NjQ2MDAxOTE0MkUgLyogV0tXZWJQcm9jZXNz
UGx1Z0luUGFnZUdyb3VwLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUZCMDBBQzUxODVGNzY0NjAwMTkxNDJFIC8qIFdLV2ViUHJvY2Vzc1BsdWdJblBh
Z2VHcm91cC5tbSAqLzsgfTsKIAkJMUZCMDBBQzkxODVGNzY0NjAwMTkxNDJFIC8qIFdLV2ViUHJv
Y2Vzc1BsdWdJblBhZ2VHcm91cEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxRkIwMEFDNjE4NUY3NjQ2MDAxOTE0MkUgLyogV0tXZWJQcm9j
ZXNzUGx1Z0luUGFnZUdyb3VwSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTIxNzMsNiArMjE3Niw5IEBA
CiAJCTFGMzM1QkJGMTg1Qjg0RDgwMDFBMjAxQSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5Mb2FkRGVs
ZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJQcm9jZXNzUGx1
Z0luTG9hZERlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGNjA0QkE2
MTg4OUZBNzQwMEVFMDM5NSAvKiBXS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUY2MDRCQTcxODg5RkE3NDAwRUUwMzk1IC8qIFdL
UmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHNJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRzSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUY3RENCMTgxOEJEMjZFNTAwRTgyMzA3IC8qIFdLV2ViRG93
bmxvYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJEb3dubG9hZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxRjdEQ0IxOTE4QkQyNkU1MDBFODIzMDcg
LyogV0tXZWJEb3dubG9hZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdLV2ViRG93bmxvYWQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFGN0RD
QjFBMThCRDI2RTUwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkSW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJEb3dubG9hZEludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQjAwQUM0MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlBy
b2Nlc3NQbHVnSW5QYWdlR3JvdXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tXZWJQcm9jZXNzUGx1Z0luUGFnZUdyb3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFGQjAwQUM1MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3Jv
dXAubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlByb2Nl
c3NQbHVnSW5QYWdlR3JvdXAubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFGQjAw
QUM2MTg1Rjc2NDYwMDE5MTQyRSAvKiBXS1dlYlByb2Nlc3NQbHVnSW5QYWdlR3JvdXBJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYlByb2Nlc3NQbHVnSW5Q
YWdlR3JvdXBJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzY5Myw2
ICszNjk5LDkgQEAKIAkJCQk3Q0Q1RUJCQzE3NDZCMDRDMDAwQzFDNDUgLyogV0tUeXBlUmVmV3Jh
cHBlci5tbSAqLywKIAkJCQlCQzg2OTlCMjExNkFBREFBMDAyQTkyNUIgLyogV0tWaWV3LmggKi8s
CiAJCQkJQkZBNjE3OUUxMkYwQjk5RDAwMzNFMENBIC8qIFdLVmlld1ByaXZhdGUuaCAqLywKKwkJ
CQkxRjdEQ0IxODE4QkQyNkU1MDBFODIzMDcgLyogV0tXZWJEb3dubG9hZC5oICovLAorCQkJCTFG
N0RDQjE5MThCRDI2RTUwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkLm1tICovLAorCQkJCTFGN0RD
QjFBMThCRDI2RTUwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkSW50ZXJuYWwuaCAqLywKIAkJCSk7
CiAJCQluYW1lID0gRGVwcmVjYXRlZDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02
NDE2LDYgKzY0MjUsNyBAQAogCQkJCUJDQkFBRDBCMTQ1NjBBNDMwMDUzRjgyRiAvKiBXS0Jyb3dz
aW5nQ29udGV4dExvYWREZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBMjg0RDcxNDky
RjJDNzAwMUY5MDQyIC8qIFdLQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMTdE
MDcxNjI2MEZGNDAwNzA1NEY1IC8qIFdLRE9NRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTFGN0RDQjFGMThCRDI4M0EwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAxN0QwOTE2MjYwRkY0MDA3MDU0RjUgLyogV0tET01FbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkNCNEU2MjE4QkJFM0Q5MDAwRkNGQzkgLyogUGFnZUNsaWVudEltcGwu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDE3RDBEMTYyNjBGRjQwMDcwNTRGNSAvKiBXS0RPTU5v
ZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjc1MSw2ICs2NzYxLDcgQEAKIAkJCQlGNjJBNzY1RDEy
QjFBQkMzMDAwNUYxQjYgLyogV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNDQ1QkEzMTg0RDVGQ0YwMDRCMzQxNCAvKiBXS0NvbnRleHREb3dubG9hZENsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMzODYxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90
ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTFGN0RDQjIwMThC
RDI4NDkwMEU4MjMwNyAvKiBXS1dlYkRvd25sb2FkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDQUMxMTFGMTJDOTJDMUYwMEIwOEVFRSAvKiBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eUNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjYyQTc2QjkxMkIxQjI1RjAwMDVGMUI2IC8qIFdl
YkRhdGFiYXNlTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQjdE
NzJDMTI4OENBQUQwMENGRDA4QyAvKiBXZWJEb3dubG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC03ODY2LDYgKzc4NzcsNyBAQAogCQkJCTUxOEU4RjBEMTZCMjA5MzcwMEU5MTQyOSAvKiBE
b3dubG9hZE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxOEU4RjBCMTZCMjA5MzcwMEU5MTQy
OSAvKiBEb3dubG9hZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q0Q0IxMjg4
QUFBNzAwQ0ZEMDhDIC8qIERvd25sb2FkUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUY3
RENCMUUxOEJEMjgzNTAwRTgyMzA3IC8qIFdLV2ViRG93bmxvYWQubW0gaW4gU291cmNlcyAqLywK
IAkJCQkxQUQyNUU5NTE2N0FCMDgxMDBFQTlCQ0QgLyogRG93bmxvYWRQcm94eU1hcC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzN0M0QzA4NjE4MTQ5QzVCMDAzNjg4QjkgLyogV0tCYWNrRm9yd2Fy
ZExpc3RJdGVtLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFCN0Q2MTkxMjg4QjlEOTAwQ0ZEMDhD
IC8qIERvd25sb2FkUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227570</attachid>
            <date>2014-03-22 13:51:11 -0700</date>
            <delta_ts>2014-03-24 11:18:37 -0700</delta_ts>
            <desc>[iOS] Download support by CFURLDownloadRef under USE(CFNETWORK).</desc>
            <filename>bug-129322-20140322135050.patch</filename>
            <type>text/plain</type>
            <size>53021</size>
            <attacher name="Andy Estes">aestes</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY2MDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGIzM2RhNmUwYjNjN2Zj
MzNiZmEyMTliZjAxYWQ3ODU5ZGIzNzViZi4uZDY5MWE5OGQyMjU4OTZmMTY5MWU2NzhjZDhmM2Qz
OGY5ZmM0Yzc0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAzLTIyICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBEb3dubG9hZCBzdXBw
b3J0IGJ5IENGVVJMRG93bmxvYWRSZWYgdW5kZXIgVVNFKENGTkVUV09SSykuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkzMjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnJlbGVh
c2VDb25uZWN0aW9uRm9yRG93bmxvYWQpOiBDaGFuZ2VkIHRvCisgICAgICAgIHJldHVybiBhIFJl
dGFpblB0ciB0aGF0IGFkb3B0cyB0aGUgY29ubmVjdGlvbidzIHJldGFpbiBjb3VudC4KKwogMjAx
NC0wMy0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAg
ICBQc2V1ZG8gdHlwZSBjbGVhbnVwIHBhcnQgMjogc3BsaXQgcHNldWRvIGVsZW1lbnRzIHBhcnNp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwppbmRleCBlYWU4ZTBhODUyNDM5Yjg4ZmQ2NDRmMjQzZTZkYmI5MzY2
NDc3MDgwLi5lY2VhZTU1ZmViZTk3MzI2YmIyODIzOTIyZjgzMDRmOTMzMzY4MTc0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTQtMDMtMjIgIEFuZHkgRXN0ZXMgIDxhZXN0
ZXNAYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIERvd25sb2FkIHN1cHBvcnQgYnkgQ0ZVUkxE
b3dubG9hZFJlZiB1bmRlciBVU0UoQ0ZORVRXT1JLKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTMyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQubW06CisgICAgICAgIChXZWJGcmFtZUxvYWRlckNsaWVudDo6Y29udmVydE1haW5SZXNv
dXJjZUxvYWRUb0Rvd25sb2FkKTogVXNlIHRoZQorICAgICAgICBSZXRhaW5QdHIgcmV0dXJuZWQg
YnkgcmVsZWFzZUNvbm5lY3Rpb25Gb3JEb3dubG9hZCgpIHJhdGhlciB0aGFuCisgICAgICAgIG1h
bnVhbGx5IHJlbGVhc2luZy4KKwogMjAxNC0wMy0yMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgSW1wcm92ZSBpZGlvbSB1c2VkIGZvciBzdHJpbmcgYnVpbGRpbmcg
aW4gYSBmZXcgcGxhY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDdhMjdiMDE2ODE4NGMyMjU3ZjI4NDAwNDA4
Mzk4ODRiZjUxNmFjMS4uY2MzMzliNjlmODAzMzAzZTUyNTNkNDhlNmNmZWZmZmRmNzZjNDI2MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE0LTAzLTIyICBBbmR5IEVzdGVzICA8YWVz
dGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBEb3dubG9hZCBzdXBwb3J0IGJ5IENGVVJM
RG93bmxvYWRSZWYgdW5kZXIgVVNFKENGTkVUV09SSykuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkzMjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCYXNlZCBvbiBhbiBvcmlnaW5hbCBwYXRjaCBieSBZ
b25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+LgorCisgICAgICAgICogU2hh
cmVkL0NvY29hL0FQSU9iamVjdC5tbToKKyAgICAgICAgKEFQSTo6T2JqZWN0OjpuZXdPYmplY3Qp
OgorICAgICAgICAqIFNoYXJlZC9Eb3dubG9hZHMvaW9zL0Rvd25sb2FkSU9TLm1tOgorICAgICAg
ICAoV2ViS2l0OjpkaXNwYXRjaE9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJLaXQ6OnRvRG93
bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpzZXRVcERvd25sb2FkQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6RG93bmxvYWQ6OnN0YXJ0V2l0aEhhbmRsZSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9BUElEb3dubG9hZENsaWVudC5oOgorICAgICAgICAoQVBJOjpEb3dubG9hZENsaWVudDo6
fkRvd25sb2FkQ2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW06CisgICAgICAgICgtW1dLUHJvY2Vzc1Bv
b2wgX2Rvd25sb2FkRGVsZWdhdGVdKToKKyAgICAgICAgKC1bV0tQcm9jZXNzUG9vbCBfc2V0RG93
bmxvYWREZWxlZ2F0ZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vz
c1Bvb2xQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9h
ZC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1t
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6d3JhcHBlcik6CisgICAgICAgIChXZWJLaXQ6OmNy
ZWF0ZUFQSURvd25sb2FkQ2xpZW50KToKKyAgICAgICAgKC1bX1dLRG93bmxvYWQgZGVhbGxvY10p
OgorICAgICAgICAoLVtfV0tEb3dubG9hZCBBUEk6Ol0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLRG93bmxvYWREZWxlZ2F0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL19XS0Rvd25sb2FkSW50ZXJuYWwuaDogQWRkZWQuCisgICAgICAgICogV2Vi
S2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE0LTAyLTI1ICBZb25nanVuIFpo
YW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU10gRG93bmxvYWQg
c3VwcG9ydCBieSBDRlVSTERvd25sb2FkUmVmIHVuZGVyIFVTRShDRk5FVFdPUkspCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkzMjIKKworICAgICAg
ICBFbmFibGUgZG93bmxvYWQgc3VwcG9ydCBmb3IgV0syIGJ5IHVzaW5nIENGVVJMRG93bmxvYWQg
QVBJLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbTogQ3JlYXRlIFdLV2ViRG93bmxvYWQgd3JhcHBlciBv
YmplY3QgZm9yIERvd25sb2FkUHJveHkuCisgICAgICAgIChBUEk6Ok9iamVjdDo6bmV3T2JqZWN0
KToKKyAgICAgICAgKiBTaGFyZWQvRG93bmxvYWRzL2lvcy9Eb3dubG9hZElPUy5tbToKKyAgICAg
ICAgKFdlYktpdDo6ZGlzcGF0Y2hPbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViS2l0OjpzZXRV
cERvd25sb2FkQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6RG93bmxvYWQ6OnN0YXJ0V2l0aEhh
bmRsZSk6IFVzZSBDRlVSTERvd25sb2FkUmVmIGZvciBkb3dubG9hZCwgYW5kIHNldHVwIENGVVJM
RG93bmxvYWRDbGllbnQKKyAgICAgICAgICAgICBmb3IgZG93bmxvYWQgY2FsbGJhY2tzLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAuaDogQWRkIFdLRG93bmxv
YWREZWxlZ2F0ZSBmb3IgV0syIHRvIGxpc3RlbiB0byBkb3dubG9hZCBldmVudHMuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbToKKyAgICAgICAgKGRpZFN0
YXJ0KToKKyAgICAgICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKToK
KyAgICAgICAgKGRpZEZpbmlzaCk6CisgICAgICAgIChkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAg
ICAgICAoZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoc2V0VXBEb3dubG9hZENsaWVudCk6Cisg
ICAgICAgICgtW1dLUHJvY2Vzc0dyb3VwIGRvd25sb2FkRGVsZWdhdGVdKToKKyAgICAgICAgKC1b
V0tQcm9jZXNzR3JvdXAgc2V0RG93bmxvYWREZWxlZ2F0ZTpdKTogV2hlbiBzZXQgYSBuZXcgZG93
bmxvYWQgZGVsZWdhdGUsIGFsc28gc2V0dXAgdGhlIGRvd25sb2FkIGNsaWVudAorICAgICAgICAg
ICAgZm9yIFdLQ29udGV4dC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93
bmxvYWQuaDogQWRkIE9iakMgQVBJIG9iamVjdCBmb3IgRG93bmxvYWRQcm94eS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViRG93bmxvYWQubW06CisgICAgICAgICgtW1dLV2Vi
RG93bmxvYWQgZGVhbGxvY10pOgorICAgICAgICAoLVtXS1dlYkRvd25sb2FkIEFQSTo6XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYkRvd25sb2FkSW50ZXJuYWwuaDoKKyAg
ICAgICAgKFdlYktpdDo6d3JhcHBlcik6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorCiAyMDE0LTAzLTIxICBZb25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYmtpdDJdIEFkZCBBUElEb3dubG9hZENsaWVudCBm
b3IgZG93bmxvYWQgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCA1MGY4YjhjZjVjNjc4NTdjYmM0ZDU5ZDAxYTVmY2Yw
ZTA0MjJjM2RkLi40YTVkZGFmNTBmZWQ2YzgwMWViZWRlYmQ2YTc0YTQwNGUzNGNiNjk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCkBA
IC0xMzgsNyArMTM4LDcgQEAgcHVibGljOgogI2lmIFVTRShDRk5FVFdPUkspCiAgICAgQ0ZVUkxT
dG9yYWdlU2Vzc2lvblJlZiBzdG9yYWdlU2Vzc2lvbigpIGNvbnN0OwogICAgIENGVVJMQ29ubmVj
dGlvblJlZiBjb25uZWN0aW9uKCkgY29uc3Q7Ci0gICAgQ0ZVUkxDb25uZWN0aW9uUmVmIHJlbGVh
c2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxDb25uZWN0aW9u
UmVmPiByZWxlYXNlQ29ubmVjdGlvbkZvckRvd25sb2FkKCk7CiAgICAgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiBjdXJyZW50UmVxdWVzdCgpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHNldEhvc3RB
bGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2b2lk
IHNldENsaWVudENlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCwgQ0ZEYXRhUmVmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5k
bGVDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNl
SGFuZGxlQ0ZOZXQuY3BwCmluZGV4IDBjMzA1YzAyYTJjOWRjMjIyOTZkY2MwYTg0MjYzYmZkNThi
YWRiYTYuLjJiZjE2ZDRmOGM5ZDg5YTAzMjcwNDlkNWMyNTZkOWNiNzFjNjQ3NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5l
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhh
bmRsZUNGTmV0LmNwcApAQCAtNDYwLDEwICs0NjAsMTAgQEAgQ0ZVUkxDb25uZWN0aW9uUmVmIFJl
c291cmNlSGFuZGxlOjpjb25uZWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gZC0+bV9jb25uZWN0
aW9uLmdldCgpOwogfQogCi1DRlVSTENvbm5lY3Rpb25SZWYgUmVzb3VyY2VIYW5kbGU6OnJlbGVh
c2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKQorUmV0YWluUHRyPENGVVJMQ29ubmVjdGlvblJlZj4g
UmVzb3VyY2VIYW5kbGU6OnJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKQogewogICAgIExP
RyhOZXR3b3JrLCAiQ0ZOZXQgLSBKb2IgJXAgcmVsZWFzaW5nIGNvbm5lY3Rpb24gJXAgZm9yIGRv
d25sb2FkIiwgdGhpcywgZC0+bV9jb25uZWN0aW9uLmdldCgpKTsKLSAgICByZXR1cm4gZC0+bV9j
b25uZWN0aW9uLmxlYWtSZWYoKTsKKyAgICByZXR1cm4gYWRvcHRDRihkLT5tX2Nvbm5lY3Rpb24u
bGVha1JlZigpKTsKIH0KIAogQ0ZTdHJpbmdSZWYgUmVzb3VyY2VIYW5kbGU6OnN5bmNocm9ub3Vz
TG9hZFJ1bkxvb3BNb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggMTY5MTM5ZjM5Mzk1N2ZiYWU2
ZjJmZDEyMmFlMGVlZTk2ZTI2MDM4YS4uYzg4N2I0NjMyZGVjYjkxYzhhYTc5ZTA4Y2M4NjQ0ODk1
YTg5YzdlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTMzMCwxNiArMzMwLDEyIEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChEb2N1
bWVudExvYWRlciogZG9jCiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIEFTU0VSVChbV2ViRG93
bmxvYWQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfZG93bmxvYWRXaXRoTG9hZGluZ0NG
VVJMQ29ubmVjdGlvbjpyZXF1ZXN0OnJlc3BvbnNlOmRlbGVnYXRlOnByb3h5OildKTsKLSAgICBD
RlVSTENvbm5lY3Rpb25SZWYgY29ubmVjdGlvbiA9IGhhbmRsZS0+Y29ubmVjdGlvbigpOwotICAg
IFtXZWJEb3dubG9hZCBfZG93bmxvYWRXaXRoTG9hZGluZ0NGVVJMQ29ubmVjdGlvbjpjb25uZWN0
aW9uCisgICAgUmV0YWluUHRyPENGVVJMQ29ubmVjdGlvblJlZj4gY29ubmVjdGlvbiA9IGhhbmRs
ZS0+cmVsZWFzZUNvbm5lY3Rpb25Gb3JEb3dubG9hZCgpOworICAgIFtXZWJEb3dubG9hZCBfZG93
bmxvYWRXaXRoTG9hZGluZ0NGVVJMQ29ubmVjdGlvbjpjb25uZWN0aW9uLmdldCgpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXF1ZXN0OnJlcXVlc3QuY2ZVUkxSZXF1ZXN0KFVwZGF0ZUhUVFBCb2R5KQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXNwb25zZTpyZXNwb25zZS5jZlVSTFJlc3BvbnNlKCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZWdh
dGU6W3dlYlZpZXcgZG93bmxvYWREZWxlZ2F0ZV0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHk6bmlsXTsK
LQotICAgIC8vIFJlbGVhc2UgdGhlIGNvbm5lY3Rpb24gc2luY2UgdGhlIE5TVVJMRG93bmxvYWQg
KGFjdHVhbGx5IENGVVJMRG93bmxvYWQpIHdpbGwgcmV0YWluIHRoZSBjb25uZWN0aW9uIGFuZCB1
c2UgaXQuCi0gICAgaGFuZGxlLT5yZWxlYXNlQ29ubmVjdGlvbkZvckRvd25sb2FkKCk7Ci0gICAg
Q0ZSZWxlYXNlKGNvbm5lY3Rpb24pOwogI2Vsc2UKICAgICBbV2ViRG93bmxvYWQgX2Rvd25sb2Fk
V2l0aExvYWRpbmdDb25uZWN0aW9uOmhhbmRsZS0+Y29ubmVjdGlvbigpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9keSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCmluZGV4IDUwMWViNGMyZjEzYmU5Nzk3ZjIwMDE5Y2M1ZjBh
MTM0MjcxZjczMzkuLmY2MjEzNTAyN2YxZDBlOTVjOWRkZTZlYTkwYmFkZGViMjBhODc0NzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0KKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL0FQSU9iamVjdC5tbQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAorI2ltcG9ydCAiX1dLRG93bmxvYWRJbnRlcm5hbC5o
IgogI2ltcG9ydCAiV0tCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tCYWNr
Rm9yd2FyZExpc3RJdGVtSW50ZXJuYWwuaCIKICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29u
dHJvbGxlckludGVybmFsLmgiCkBAIC0xMTMsNiArMTE0LDEwIEBAIHZvaWQqIE9iamVjdDo6bmV3
T2JqZWN0KHNpemVfdCBzaXplLCBUeXBlIHR5cGUpCiAgICAgICAgIHdyYXBwZXIgPSBbV0tOU0Rp
Y3Rpb25hcnkgYWxsb2NdOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgVHlwZTo6RG93bmxv
YWQ6CisgICAgICAgIHdyYXBwZXIgPSBbX1dLRG93bmxvYWQgYWxsb2NdOworICAgICAgICBicmVh
azsKKwogICAgIGNhc2UgVHlwZTo6RXJyb3I6CiAgICAgICAgIHdyYXBwZXIgPSBOU0FsbG9jYXRl
T2JqZWN0KFtXS05TRXJyb3Igc2VsZl0sIHNpemUsIG51bGxwdHIpOwogICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Eb3dubG9hZHMvaW9zL0Rvd25sb2Fk
SU9TLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1Mu
bW0KaW5kZXggOWJkYTYwMWUxMDlmOGRmYmFlYzFiZTYzMzM4NzYxZGIyOGEzOWVlNi4uYzczYWQ5
ZDc0ZTliNGY4M2VjOTExODFmYWZkZmRjODEwNTlkNTU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Rvd25sb2Fkcy9pb3MvRG93bmxvYWRJT1MubW0KQEAgLTI4LDIwICsyOCwx
MTkgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAorI2ltcG9ydCAiRGF0YVJlZmVyZW5jZS5oIgor
I2ltcG9ydCA8Q0ZOZXR3b3JrL0NGVVJMRG93bmxvYWQuaD4KICNpbXBvcnQgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2ltcG9y
dCA8V2ViQ29yZS9SZXNvdXJjZUhhbmRsZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9SZXNvdXJjZVJl
c3BvbnNlLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1wb3J0IDx3dGYvUnVuTG9v
cC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0g
ICAgCisKKy8vIEZJWE1FOiBJZiBwb3NzaWJsZSwgd2Ugc2hvdWxkIGNvbnNpZGVyIG1vdmluZyBz
b21lIGNhbGxiYWNrcyBvZmYgdGhlIG1haW4gdGhyZWFkIG9yIGF0IGxlYXN0CisvLyBtYWtpbmcg
dGhlbSBhc3luY2hvcm91cyBjYWxscy4KK3N0YXRpYyB2b2lkIGRpc3BhdGNoT25NYWluVGhyZWFk
KHZvaWQoXmJsb2NrKSgpKQoreworICAgIGlmIChSdW5Mb29wOjppc01haW4oKSkgeworICAgICAg
ICBibG9jaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGlzcGF0Y2hfc3luYyhk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBibG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRG93
bmxvYWQqIHRvRG93bmxvYWQoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RG93bmxvYWQqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHNldFVwRG93bmxvYWRDbGllbnQoQ0ZVUkxEb3dubG9hZENsaWVudCYg
Y2xpZW50LCBEb3dubG9hZCYgZG93bmxvYWQpCit7CisgICAgbWVtc2V0KCZjbGllbnQsIDAsIHNp
emVvZihjbGllbnQpKTsKKyAgICBjbGllbnQuY2xpZW50SW5mbyA9ICZkb3dubG9hZDsKKworICAg
IGNsaWVudC5kaWRTdGFydCA9IFtdKENGVVJMRG93bmxvYWRSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCisgICAgeworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZCheeworICAgICAgICAg
ICAgdG9Eb3dubG9hZChjbGllbnRJbmZvKS0+ZGlkU3RhcnQoKTsKKyAgICAgICAgfSk7CisgICAg
fTsKKworICAgIGNsaWVudC53aWxsU2VuZFJlcXVlc3QgPSBbXShDRlVSTERvd25sb2FkUmVmLCBD
RlVSTFJlcXVlc3RSZWYgcmVxdWVzdCwgQ0ZVUkxSZXNwb25zZVJlZiwgY29uc3Qgdm9pZCopIC0+
IENGVVJMUmVxdWVzdFJlZgorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlcXVlc3Q7CisgICAgfTsK
KworICAgIGNsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UgPSBbXShDRlVSTERvd25sb2FkUmVmLCBD
RlVSTFJlc3BvbnNlUmVmIHJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorICAgIHsK
KyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKKyAgICAgICAgICAgIHRvRG93bmxvYWQo
Y2xpZW50SW5mbyktPmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgICAgIH0pOwor
ICAgIH07CisKKyAgICBjbGllbnQuZGlkUmVjZWl2ZURhdGEgPSBbXShDRlVSTERvd25sb2FkUmVm
LCBDRkluZGV4IGxlbmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKKyAgICB7CisgICAgICAg
IGRpc3BhdGNoT25NYWluVGhyZWFkKF57CisgICAgICAgICAgICB0b0Rvd25sb2FkKGNsaWVudElu
Zm8pLT5kaWRSZWNlaXZlRGF0YShsZW5ndGgpOworICAgICAgICB9KTsKKyAgICB9OworCisgICAg
Y2xpZW50LnNob3VsZERlY29kZURhdGFPZk1JTUVUeXBlID0gW10oQ0ZVUkxEb3dubG9hZFJlZiwg
Q0ZTdHJpbmdSZWYgZW5jb2RpbmdUeXBlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSAtPiBCb29s
ZWFuCisgICAgeworICAgICAgICBfX2Jsb2NrIEJPT0wgcmV0dXJuVmFsdWUgPSBOTzsKKyAgICAg
ICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKKyAgICAgICAgICAgIHJldHVyblZhbHVlID0gdG9E
b3dubG9hZChjbGllbnRJbmZvKS0+c2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoZW5j
b2RpbmdUeXBlKTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAg
ICB9OworCisgICAgY2xpZW50LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZE9iamVjdE5h
bWUgPSBbXShDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkUmVmLCBDRlN0cmluZ1JlZiBvYmplY3RO
YW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgZGlzcGF0Y2hPbk1h
aW5UaHJlYWQoXnsKKyAgICAgICAgICAgIEJPT0wgYWxsb3dPdmVyd3JpdGU7CisgICAgICAgICAg
ICBTdHJpbmcgZGVzdGluYXRpb24gPSB0b0Rvd25sb2FkKGNsaWVudEluZm8pLT5kZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShvYmplY3ROYW1lLCBhbGxvd092ZXJ3cml0ZSk7
CisgICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9uLmlzTnVsbCgpKQorICAgICAgICAgICAgICAg
IENGVVJMRG93bmxvYWRTZXREZXN0aW5hdGlvbihkb3dubG9hZFJlZiwgcmVpbnRlcnByZXRfY2Fz
dDxDRlVSTFJlZj4oW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpkZXN0aW5hdGlvbl0pLCBhbGxvd092
ZXJ3cml0ZSk7CisgICAgICAgIH0pOworICAgIH07CisKKyAgICBjbGllbnQuZGlkQ3JlYXRlRGVz
dGluYXRpb24gPSBbXShDRlVSTERvd25sb2FkUmVmLCBDRlVSTFJlZiBwYXRoLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKKyAg
ICAgICAgICAgIHRvRG93bmxvYWQoY2xpZW50SW5mbyktPmRpZENyZWF0ZURlc3RpbmF0aW9uKENG
VVJMR2V0U3RyaW5nKHBhdGgpKTsKKyAgICAgICAgfSk7CisgICAgfTsKKworICAgIGNsaWVudC5k
aWRGaW5pc2ggPSBbXShDRlVSTERvd25sb2FkUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
ICAgIHsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoXnsKKyAgICAgICAgICAgIHRvRG93
bmxvYWQoY2xpZW50SW5mbyktPmRpZEZpbmlzaCgpOworICAgICAgICB9KTsKKyAgICB9OworCisg
ICAgY2xpZW50LmRpZEZhaWwgPSBbXShDRlVSTERvd25sb2FkUmVmIGRvd25sb2FkUmVmLCBDRkVy
cm9yUmVmIGVycm9yLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorICAgIHsKKyAgICAgICAgZGlz
cGF0Y2hPbk1haW5UaHJlYWQoXnsKKyAgICAgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHJl
c3VtZURhdGEgPSBhZG9wdENGKENGVVJMRG93bmxvYWRDb3B5UmVzdW1lRGF0YShkb3dubG9hZFJl
ZikpOworICAgICAgICAgICAgdG9Eb3dubG9hZChjbGllbnRJbmZvKS0+ZGlkRmFpbChlcnJvciwg
SVBDOjpEYXRhUmVmZXJlbmNlKENGRGF0YUdldEJ5dGVQdHIocmVzdW1lRGF0YS5nZXQoKSksIENG
RGF0YUdldExlbmd0aChyZXN1bWVEYXRhLmdldCgpKSkpOworICAgICAgICB9KTsKKyAgICB9Owor
fQorCiB2b2lkIERvd25sb2FkOjpzdGFydCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBEb3dubG9hZDo6c3RhcnRXaXRoSGFuZGxlKFJlc291cmNlSGFuZGxlKiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpCit2b2lkIERvd25sb2FkOjpzdGFydFdpdGhIYW5kbGUoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBDRlVSTERvd25sb2FkQ2xpZW50IGNsaWVudDsKKyAg
ICBzZXRVcERvd25sb2FkQ2xpZW50KGNsaWVudCwgKnRoaXMpOworICAgIG1fZG93bmxvYWQgPSBh
ZG9wdENGKENGVVJMRG93bmxvYWRDcmVhdGVBbmRTdGFydFdpdGhMb2FkaW5nQ29ubmVjdGlvbihO
VUxMLCBoYW5kbGUtPnJlbGVhc2VDb25uZWN0aW9uRm9yRG93bmxvYWQoKS5nZXQoKSwgbV9yZXF1
ZXN0LmNmVVJMUmVxdWVzdChVcGRhdGVIVFRQQm9keSksIHJlc3BvbnNlLmNmVVJMUmVzcG9uc2Uo
KSwgJmNsaWVudCkpOwogfQogCiB2b2lkIERvd25sb2FkOjpjYW5jZWwoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElEb3dubG9hZENsaWVudC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElEb3dubG9hZENsaWVudC5oCmluZGV4IGExNTMxZWIw
MDA3Mjk3OTUyODJjZmJkYzIyODQ3OTBmMmNjNmE0NTcuLmE0NDgwNDFhYTliZGJjZDU5NzgyYjA3
MWQxMjdiZTU1NjQwMzI0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQVBJRG93bmxvYWRDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0FQSURvd25sb2FkQ2xpZW50LmgKQEAgLTI5LDIxICsyOSwyMSBAQAogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBSZXNvdXJjZVJl
c3BvbnNlOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKK2NsYXNzIFJlc291cmNlUmVzcG9uc2U7CiB9
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eTsKLWNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBEb3dubG9hZFByb3h5OworY2xhc3MgV2ViQ29u
dGV4dDsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CiAKIGNsYXNzIERvd25sb2FkQ2xpZW50IHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIH5Eb3dubG9hZENsaWVudCgpICAgeyB9CisgICAgdmlydHVhbCB+
RG93bmxvYWRDbGllbnQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydChXZWJLaXQ6
OldlYkNvbnRleHQqLCBXZWJLaXQ6OkRvd25sb2FkUHJveHkqKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktpdDo6V2ViQ29udGV4dCos
IFdlYktpdDo6RG93bmxvYWRQcm94eSosIFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eSopIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNw
cAppbmRleCBkNmRlZDVjN2QyOGUyODI4MzllNGMyMGJlMmUxNzM1OTMwMjJlYmQ2Li43YWNkNzZl
MDQ5MjZlZTg5NzQ1ZmFjOTkxNmMwOTg3ODYyNDc1OGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgV0tD
b250ZXh0U2V0RG93bmxvYWRDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGNvbnN0IFdL
Q29udGV4dERvd25sb2FkCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydChXZWJDb250ZXh0
KiB3ZWJDb250ZXh0LCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5KSBvdmVycmlkZQogICAg
ICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRpZFN0YXJ0KQotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgbV9jbGllbnQu
ZGlkU3RhcnQodG9BUEkod2ViQ29udGV4dCksIHRvQVBJKGRvd25sb2FkUHJveHkpLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBX
S0NvbnRleHRTZXREb3dubG9hZENsaWVudChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgY29uc3Qg
V0tDb250ZXh0RG93bmxvYWQKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShXZWJDb250ZXh0KiB3ZWJDb250ZXh0LCBEb3dubG9hZFByb3h5KiBk
b3dubG9hZFByb3h5LCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5KSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1f
Y2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIG1fY2xpZW50LmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSh0b0FQSSh3ZWJDb250ZXh0KSwgdG9BUEko
ZG93bmxvYWRQcm94eSksIHRvQVBJKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CkBAIC0xODYsNyArMTg2LDcgQEAgdm9p
ZCBXS0NvbnRleHRTZXREb3dubG9hZENsaWVudChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgY29u
c3QgV0tDb250ZXh0RG93bmxvYWQKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNw
b25zZShXZWJDb250ZXh0KiB3ZWJDb250ZXh0LCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgb3ZlcnJpZGUKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRSZWNlaXZlUmVzcG9uc2UpCi0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBtX2NsaWVu
dC5kaWRSZWNlaXZlUmVzcG9uc2UodG9BUEkod2ViQ29udGV4dCksIHRvQVBJKGRvd25sb2FkUHJv
eHkpLCB0b0FQSShBUEk6OlVSTFJlc3BvbnNlOjpjcmVhdGUocmVzcG9uc2UpLmdldCgpKSwgbV9j
bGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQpAQCAtMTk0LDcgKzE5NCw3IEBAIHZv
aWQgV0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGNv
bnN0IFdLQ29udGV4dERvd25sb2FkCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0
YShXZWJDb250ZXh0KiB3ZWJDb250ZXh0LCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5LCB1
aW50NjRfdCBsZW5ndGgpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9j
bGllbnQuZGlkUmVjZWl2ZURhdGEpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgICAgICBtX2NsaWVudC5kaWRSZWNlaXZlRGF0YSh0b0FQSSh3
ZWJDb250ZXh0KSwgdG9BUEkoZG93bmxvYWRQcm94eSksIGxlbmd0aCwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKICAgICAgICAgfQpAQCAtMjAyLDcgKzIwMiw3IEBAIHZvaWQgV0tDb250ZXh0
U2V0RG93bmxvYWRDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGNvbnN0IFdLQ29udGV4
dERvd25sb2FkCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZN
SU1FVHlwZShXZWJDb250ZXh0KiB3ZWJDb250ZXh0LCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFBy
b3h5LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoIW1fY2xpZW50LnNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAgICAgICAgIHJldHVybiBtX2NsaWVudC5zaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlw
ZSh0b0FQSSh3ZWJDb250ZXh0KSwgdG9BUEkoZG93bmxvYWRQcm94eSksIHRvQVBJKG1pbWVUeXBl
LmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KQEAgLTIxMCw3
ICsyMTAsNyBAQCB2b2lkIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50KFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBjb25zdCBXS0NvbnRleHREb3dubG9hZAogICAgICAgICB2aXJ0dWFsIFN0cmlu
ZyBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXZWJDb250ZXh0KiB3ZWJD
b250ZXh0LCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5LCBjb25zdCBTdHJpbmcmIGZpbGVu
YW1lLCBib29sJiBhbGxvd092ZXJ3cml0ZSkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSkK
LSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKICAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkZXN0aW5hdGlv
bihBZG9wdFdLLCBtX2NsaWVudC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFt
ZSh0b0FQSSh3ZWJDb250ZXh0KSwgdG9BUEkoZG93bmxvYWRQcm94eSksIHRvQVBJKGZpbGVuYW1l
LmltcGwoKSksICZhbGxvd092ZXJ3cml0ZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdG9XVEZTdHJpbmcoZGVzdGluYXRpb24uZ2V0KCkpOwpAQCAtMjE5
LDcgKzIxOSw3IEBAIHZvaWQgV0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIGNvbnN0IFdLQ29udGV4dERvd25sb2FkCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXZWJDb250ZXh0KiB3ZWJDb250ZXh0LCBEb3dubG9hZFBy
b3h5KiBkb3dubG9hZFByb3h5LCBjb25zdCBTdHJpbmcmIHBhdGgpIG92ZXJyaWRlCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZGlkQ3JlYXRlRGVzdGluYXRpb24pCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBt
X2NsaWVudC5kaWRDcmVhdGVEZXN0aW5hdGlvbih0b0FQSSh3ZWJDb250ZXh0KSwgdG9BUEkoZG93
bmxvYWRQcm94eSksIHRvQVBJKHBhdGguaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKICAgICAgICAgfQpAQCAtMjI3LDcgKzIyNyw3IEBAIHZvaWQgV0tDb250ZXh0U2V0RG93bmxv
YWRDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGNvbnN0IFdLQ29udGV4dERvd25sb2Fk
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2goV2ViQ29udGV4dCogd2ViQ29udGV4dCwg
RG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudC5kaWRGaW5pc2gpCi0gICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBtX2NsaWVudC5kaWRGaW5pc2godG9B
UEkod2ViQ29udGV4dCksIHRvQVBJKGRvd25sb2FkUHJveHkpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOwogICAgICAgICB9CkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBXS0NvbnRleHRTZXRE
b3dubG9hZENsaWVudChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgY29uc3QgV0tDb250ZXh0RG93
bmxvYWQKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2ViQ29udGV4dCogd2ViQ29udGV4
dCwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJy
b3IpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZGlkRmFp
bCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgICAgIG1fY2xpZW50LmRpZEZhaWwodG9BUEkod2ViQ29udGV4dCksIHRvQVBJKGRvd25sb2Fk
UHJveHkpLCB0b0FQSShlcnJvciksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAg
IH0KQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50KFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBjb25zdCBXS0NvbnRleHREb3dubG9hZAogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKFdlYkNvbnRleHQqIHdlYkNvbnRleHQsIERvd25sb2FkUHJv
eHkqIGRvd25sb2FkUHJveHkpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgh
bV9jbGllbnQuZGlkQ2FuY2VsKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9jbGllbnQuZGlkQ2FuY2VsKHRv
QVBJKHdlYkNvbnRleHQpLCB0b0FQSShkb3dubG9hZFByb3h5KSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKICAgICAgICAgfQpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgV0tDb250ZXh0U2V0
RG93bmxvYWRDbGllbnQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGNvbnN0IFdLQ29udGV4dERv
d25sb2FkCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goV2ViQ29udGV4dCog
d2ViQ29udGV4dCwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5wcm9jZXNzRGlkQ3Jhc2gpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2NsaWVudC5wcm9jZXNzRGlkQ3Jhc2godG9BUEkod2ViQ29udGV4dCksIHRvQVBJ
KGRvd25sb2FkUHJveHkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2wubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wu
bW0KaW5kZXggZTE1NTc2MzViMmE2ZDg5OWUxMzg2NmYyMWYyZmM5ZjJlMDMwNzJmZC4uZWE4OWZk
NTAzZDhjZjNhZWQ0NjdhOTY3YTkwNTNmZjVmYmNmZWIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbC5tbQpAQCAtMjgsMTEgKzI4
LDE0IEBACiAKICNpZiBXS19BUElfRU5BQkxFRAogCisjaW1wb3J0ICJfV0tEb3dubG9hZEludGVy
bmFsLmgiCisjaW1wb3J0ICJBUElEb3dubG9hZENsaWVudC5oIgogI2ltcG9ydCAiQ2FjaGVNb2Rl
bC5oIgogI2ltcG9ydCAiSGlzdG9yeUNsaWVudC5oIgogI2ltcG9ydCAiUHJvY2Vzc01vZGVsLmgi
CiAjaW1wb3J0ICJXS09iamVjdC5oIgogI2ltcG9ydCAiV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRp
b25Qcml2YXRlLmgiCisjaW1wb3J0ICJXZWFrT2JqQ1B0ci5oIgogI2ltcG9ydCAiV2ViQ2VydGlm
aWNhdGVJbmZvLmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0LmgiCiAjaW1wb3J0ICJXZWJDb29raWVN
YW5hZ2VyUHJveHkuaCIKQEAgLTU4LDcgKzYxLDkgQEAgLSAodm9pZClzZXRSZXF1aXJlc1NlY3Vy
ZUNvZGluZzooQk9PTCliOwogQGVuZAogI2VuZGlmCiAKLUBpbXBsZW1lbnRhdGlvbiBXS1Byb2Nl
c3NQb29sCitAaW1wbGVtZW50YXRpb24gV0tQcm9jZXNzUG9vbCB7CisgICAgV2ViS2l0OjpXZWFr
T2JqQ1B0cjxpZCA8X1dLRG93bmxvYWREZWxlZ2F0ZT4+IF9kb3dubG9hZERlbGVnYXRlOworfQog
CiAtIChpbnN0YW5jZXR5cGUpaW5pdAogewpAQCAtMTczLDYgKzE3OCwxNyBAQCAtICh2b2lkKV9z
ZXRPYmplY3Q6KGlkIDxOU0NvcHlpbmcsIE5TU2VjdXJlQ29kaW5nPilvYmplY3QgZm9yQnVuZGxl
UGFyYW1ldGVyOihOUwogICAgIF9jb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlNldEluamVjdGVkQnVuZGxlUGFyYW1ldGVyKHBhcmFtZXRlciwgSVBDOjpE
YXRhUmVmZXJlbmNlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbZGF0YSBieXRlc10pLCBb
ZGF0YSBsZW5ndGhdKSkpOwogfQogCistIChpZCA8X1dLRG93bmxvYWREZWxlZ2F0ZT4pX2Rvd25s
b2FkRGVsZWdhdGUKK3sKKyAgICByZXR1cm4gX2Rvd25sb2FkRGVsZWdhdGUuZ2V0QXV0b3JlbGVh
c2VkKCk7Cit9CisKKy0gKHZvaWQpX3NldERvd25sb2FkRGVsZWdhdGU6KGlkIDxfV0tEb3dubG9h
ZERlbGVnYXRlPilkb3dubG9hZERlbGVnYXRlCit7CisgICAgX2Rvd25sb2FkRGVsZWdhdGUgPSBk
b3dubG9hZERlbGVnYXRlOworICAgIF9jb250ZXh0LT5zZXREb3dubG9hZENsaWVudChXZWJLaXQ6
OmNyZWF0ZUFQSURvd25sb2FkQ2xpZW50KGRvd25sb2FkRGVsZWdhdGUpKTsKK30KKwogQGVuZAog
CiAjZW5kaWYgLy8gV0tfQVBJX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzUG9vbFByaXZhdGUuaAppbmRleCBiYTEyY2U4
NjdjOWFiYTMwZGMwMGMwNjQ2YTE5NWQwOWJiM2I3ZjJlLi41MDk0NjRhNTBjMTRlY2M4ZDUzM2U5
ZTAwOWIzNGYwMjc5NjU1YTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sUHJpdmF0ZS5oCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogQGNsYXNzIF9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlv
bjsKK0Bwcm90b2NvbCBfV0tEb3dubG9hZERlbGVnYXRlOwogCiBAaW50ZXJmYWNlIFdLUHJvY2Vz
c1Bvb2wgKFdLUHJpdmF0ZSkKIApAQCAtNDEsNiArNDIsOCBAQAogLSAoaWQpX29iamVjdEZvckJ1
bmRsZVBhcmFtZXRlcjooTlNTdHJpbmcgKilwYXJhbWV0ZXI7CiAtICh2b2lkKV9zZXRPYmplY3Q6
KGlkIDxOU0NvcHlpbmcsIE5TU2VjdXJlQ29kaW5nPilvYmplY3QgZm9yQnVuZGxlUGFyYW1ldGVy
OihOU1N0cmluZyAqKXBhcmFtZXRlcjsKIAorQHByb3BlcnR5IChub25hdG9taWMsIHdlYWssIHNl
dHRlcj1fc2V0RG93bmxvYWREZWxlZ2F0ZTopIGlkIDxfV0tEb3dubG9hZERlbGVnYXRlPiBfZG93
bmxvYWREZWxlZ2F0ZTsKKwogQGVuZAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvX1dLRG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTYyZmU0N2FhMzU2
NGI4NTAwNzlmNDc0NDI3YTZiMTJlMzc3NTAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5oCkBAIC0wLDAgKzEsMzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW1wb3J0IDxXZWJLaXQyL1dLRm91bmRhdGlvbi5oPgorCisjaWYgV0tf
QVBJX0VOQUJMRUQKKworI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CisKK1dLX0FQ
SV9DTEFTUworQGludGVyZmFjZSBfV0tEb3dubG9hZCA6IE5TT2JqZWN0CisKK0BlbmQKKworI2Vu
ZGlmIC8vIFdLX0FQSV9FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0Rvd25sb2FkLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9fV0tEb3dubG9hZC5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTExYjljMDFkMGJhMjlmZDc0MGRl
Zjk1MWI0NDk1MDQ2YjBlZTYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZC5tbQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiX1dLRG93bmxvYWRJbnRlcm5hbC5o
IgorCisjaW1wb3J0ICJfV0tEb3dubG9hZERlbGVnYXRlLmgiCisjaW1wb3J0ICJBUElEb3dubG9h
ZENsaWVudC5oIgorI2ltcG9ydCAiRG93bmxvYWRQcm94eS5oIgorI2ltcG9ydCAiV2Vha09iakNQ
dHIuaCIKKyNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VFcnJvci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9SZXNvdXJjZVJlc3BvbnNlLmg+CisjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgorCisjaWYgV0tf
QVBJX0VOQUJMRUQKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OworCituYW1lc3BhY2UgV2ViS2l0IHsKKyAgICAKK3N0YXRpYyBpbmxpbmUgX1dLRG93
bmxvYWQgKndyYXBwZXIoRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCit7CisgICAgQVNTRVJUKFtk
b3dubG9hZC53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbX1dLRG93bmxvYWQgY2xhc3NdXSk7Cisg
ICAgcmV0dXJuIChfV0tEb3dubG9hZCAqKWRvd25sb2FkLndyYXBwZXIoKTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEFQSTo6RG93bmxvYWRDbGllbnQ+IGNyZWF0ZUFQSURvd25sb2FkQ2xpZW50KGlk
IDxfV0tEb3dubG9hZERlbGVnYXRlPiBkZWxlZ2F0ZSkKK3sKKyAgICBpZiAoIWRlbGVnYXRlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsYXNzIERvd25sb2FkQ2xpZW50IGZpbmFs
IDogcHVibGljIEFQSTo6RG93bmxvYWRDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgZXhw
bGljaXQgRG93bmxvYWRDbGllbnQoaWQgPF9XS0Rvd25sb2FkRGVsZWdhdGU+IGRlbGVnYXRlKQor
ICAgICAgICAgICAgOiBtX2RlbGVnYXRlKGRlbGVnYXRlKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2RlbGVnYXRlTWV0aG9kcy5kb3dubG9hZERpZFN0YXJ0ID0gW2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoX2Rvd25sb2FkRGlkU3RhcnQ6KV07CisgICAgICAgICAgICBt
X2RlbGVnYXRlTWV0aG9kcy5kb3dubG9hZERpZFJlY2VpdmVSZXNwb25zZSA9IFtkZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9kb3dubG9hZDpkaWRSZWNlaXZlUmVzcG9uc2U6
KV07CisgICAgICAgICAgICBtX2RlbGVnYXRlTWV0aG9kcy5kb3dubG9hZERpZFJlY2VpdmVEYXRh
ID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2Rvd25sb2FkOmRpZFJl
Y2VpdmVEYXRhOildOworICAgICAgICAgICAgbV9kZWxlZ2F0ZU1ldGhvZHMuZG93bmxvYWREZWNp
ZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFsbG93T3ZlcndyaXRlID0gW2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX2Rvd25sb2FkOmRlY2lkZURlc3RpbmF0
aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOmFsbG93T3ZlcndyaXRlOildOworICAgICAgICAgICAg
bV9kZWxlZ2F0ZU1ldGhvZHMuZG93bmxvYWREaWRGaW5pc2ggPSBbZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihfZG93bmxvYWREaWRGaW5pc2g6KV07CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZGlkU3RhcnQoV2ViQ29udGV4dCosIERvd25sb2Fk
UHJveHkqIGRvd25sb2FkUHJveHkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX2RlbGVn
YXRlTWV0aG9kcy5kb3dubG9hZERpZFN0YXJ0KQorICAgICAgICAgICAgICAgIFttX2RlbGVnYXRl
LmdldCgpIF9kb3dubG9hZERpZFN0YXJ0OndyYXBwZXIoKmRvd25sb2FkUHJveHkpXTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvbnRleHQqLCBEb3du
bG9hZFByb3h5KiBkb3dubG9hZFByb3h5LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fZGVsZWdhdGVNZXRob2RzLmRvd25sb2Fk
RGlkUmVjZWl2ZVJlc3BvbnNlKQorICAgICAgICAgICAgICAgIFttX2RlbGVnYXRlLmdldCgpIF9k
b3dubG9hZDp3cmFwcGVyKCpkb3dubG9hZFByb3h5KSBkaWRSZWNlaXZlUmVzcG9uc2U6cmVzcG9u
c2UubnNVUkxSZXNwb25zZSgpXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZGlkUmVjZWl2
ZURhdGEoV2ViQ29udGV4dCosIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHksIHVpbnQ2NF90
IGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fZGVsZWdhdGVNZXRob2RzLmRv
d25sb2FkRGlkUmVjZWl2ZURhdGEpCisgICAgICAgICAgICAgICAgW21fZGVsZWdhdGUuZ2V0KCkg
X2Rvd25sb2FkOndyYXBwZXIoKmRvd25sb2FkUHJveHkpIGRpZFJlY2VpdmVEYXRhOmxlbmd0aF07
CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2Vz
dGVkRmlsZW5hbWUoV2ViQ29udGV4dCosIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHksIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlUGFyYW0pCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghbV9kZWxlZ2F0ZU1ldGhvZHMuZG93bmxvYWREZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFsbG93T3ZlcndyaXRlKQorICAgICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgICAgICAgICAgQk9PTCBhbGxvd092ZXJ3cml0ZTsK
KyAgICAgICAgICAgIE5TU3RyaW5nICpkZXN0aW5hdGlvbiA9IFttX2RlbGVnYXRlLmdldCgpIF9k
b3dubG9hZDp3cmFwcGVyKCpkb3dubG9hZFByb3h5KSBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZTpmaWxlbmFtZSBhbGxvd092ZXJ3cml0ZTomYWxsb3dPdmVyd3JpdGVdOwor
ICAgICAgICAgICAgYWxsb3dPdmVyd3JpdGVQYXJhbSA9IGFsbG93T3ZlcndyaXRlOworICAgICAg
ICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkaWRG
aW5pc2goV2ViQ29udGV4dCosIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChtX2RlbGVnYXRlTWV0aG9kcy5kb3dubG9hZERpZEZpbmlzaCkK
KyAgICAgICAgICAgICAgICBbbV9kZWxlZ2F0ZS5nZXQoKSBfZG93bmxvYWREaWRGaW5pc2g6d3Jh
cHBlcigqZG93bmxvYWRQcm94eSldOworICAgICAgICB9CisKKyAgICAgICAgV2Vha09iakNQdHI8
aWQgPF9XS0Rvd25sb2FkRGVsZWdhdGU+PiBtX2RlbGVnYXRlOworICAgICAgICBzdHJ1Y3Qgewor
ICAgICAgICAgICAgYm9vbCBkb3dubG9hZERpZFN0YXJ0IDogMTsgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGJvb2wgZG93bmxvYWREaWRSZWNlaXZlUmVzcG9uc2UgOiAxOworICAgICAgICAgICAg
Ym9vbCBkb3dubG9hZERpZFJlY2VpdmVEYXRhIDogMTsKKyAgICAgICAgICAgIGJvb2wgZG93bmxv
YWREZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZUFsbG93T3ZlcndyaXRlIDog
MTsKKyAgICAgICAgICAgIGJvb2wgZG93bmxvYWREaWRGaW5pc2ggOiAxOworICAgICAgICB9IG1f
ZGVsZWdhdGVNZXRob2RzOworICAgIH07CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxE
b3dubG9hZENsaWVudD4oZGVsZWdhdGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
QGltcGxlbWVudGF0aW9uIF9XS0Rvd25sb2FkIHsKKyAgICBBUEk6Ok9iamVjdFN0b3JhZ2U8RG93
bmxvYWRQcm94eT4gX2Rvd25sb2FkOworfQorCistICh2b2lkKWRlYWxsb2MKK3sKKyAgICBfZG93
bmxvYWQtPn5Eb3dubG9hZFByb3h5KCk7CisKKyAgICBbc3VwZXIgZGVhbGxvY107Cit9CisKKyNw
cmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgorCistIChBUEk6Ok9i
amVjdCYpX2FwaU9iamVjdAoreworICAgIHJldHVybiAqX2Rvd25sb2FkOworfQorCitAZW5kCisK
KyNlbmRpZiAvLyBXS19BUElfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZERlbGVnYXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL19XS0Rvd25sb2FkRGVsZWdhdGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDM3
MTc5NmYyMmZiMjdkYzkwNzljNTY2OGYyMTFkNGEyM2I1MDk0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZERlbGVnYXRlLmgK
QEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgPFdlYktpdDIvV0tGb3VuZGF0
aW9uLmg+CisKKyNpZiBXS19BUElfRU5BQkxFRAorCisjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5k
YXRpb24uaD4KKworQGNsYXNzIF9XS0Rvd25sb2FkOworCitAcHJvdG9jb2wgX1dLRG93bmxvYWRE
ZWxlZ2F0ZSA8TlNPYmplY3Q+CitAb3B0aW9uYWwKKy0gKHZvaWQpX2Rvd25sb2FkRGlkU3RhcnQ6
KF9XS0Rvd25sb2FkICopZG93bmxvYWQ7CistICh2b2lkKV9kb3dubG9hZDooX1dLRG93bmxvYWQg
Kilkb3dubG9hZCBkaWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZTsK
Ky0gKHZvaWQpX2Rvd25sb2FkOihfV0tEb3dubG9hZCAqKWRvd25sb2FkIGRpZFJlY2VpdmVEYXRh
Oih1aW50NjRfdClsZW5ndGg7CistIChOU1N0cmluZyAqKV9kb3dubG9hZDooX1dLRG93bmxvYWQg
Kilkb3dubG9hZCBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTooTlNTdHJp
bmcgKilmaWxlbmFtZSBhbGxvd092ZXJ3cml0ZTooQk9PTCAqKWFsbG93T3ZlcndyaXRlOworLSAo
dm9pZClfZG93bmxvYWREaWRGaW5pc2g6KF9XS0Rvd25sb2FkICopZG93bmxvYWQ7CitAZW5kCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tEb3dubG9hZEludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L19XS0Rvd25sb2FkSW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2VkMDhjNGY4NjMyNzI5NmJlYmFm
MGYwMjYxMmQ3NzFhZjA0Zjk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tEb3dubG9hZEludGVybmFsLmgKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgIl9XS0Rvd25sb2FkLmgiCisKKyNpZiBXS19BUElfRU5BQkxF
RAorCisjaW1wb3J0ICJXS09iamVjdC5oIgorCitAcHJvdG9jb2wgX1dLRG93bmxvYWREZWxlZ2F0
ZTsKKworbmFtZXNwYWNlIEFQSSB7CitjbGFzcyBEb3dubG9hZENsaWVudDsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CitzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpEb3dubG9hZENsaWVudD4gY3JlYXRl
QVBJRG93bmxvYWRDbGllbnQoaWQgPF9XS0Rvd25sb2FkRGVsZWdhdGU+KTsKK30KKworQGludGVy
ZmFjZSBfV0tEb3dubG9hZCAoKSA8V0tPYmplY3Q+CitAZW5kCisKKyNlbmRpZiAvLyBXS19BUElf
RU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGQwYzc2MDMzODIxMTNiZGZjZmRhOTczY2IxYjAyNzVhMDIwZjNlZDQuLjNi
OTQzY2M4YmJlZTQxZTMyNmIzNThkNDhkYTk2NjNlZDBhZWFiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4Niw2ICs5ODYs
MTAgQEAKIAkJOUY1NEY4OTUxNjQ4QUUwRjAwN0RGODFBIC8qIFBsdWdpblByb2Nlc3NNYW5hZ2Vy
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUY1
NEY4OTQxNjQ4QUUwRTAwN0RGODFBIC8qIFBsdWdpblByb2Nlc3NNYW5hZ2VyTWFjLm1tICovOyB9
OwogCQk5RkI1RjM5NDE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlGQjVGMzkyMTY5
RTZBODAwMDJDMjVCRiAvKiBXS0NvbnRleHRQcml2YXRlTWFjLm1tICovOyB9OwogCQk5RkI1RjM5
NTE2OUU2QTgwMDAyQzI1QkYgLyogV0tDb250ZXh0UHJpdmF0ZU1hYy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUZCNUYzOTMxNjlFNkE4MDAwMkMyNUJG
IC8qIFdLQ29udGV4dFByaXZhdGVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBMUE0RkU1QTE4RENFOUZBMDBCNUVBOEEgLyogX1dLRG93bmxv
YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExQTRG
RTU3MThEQ0U5RkEwMEI1RUE4QSAvKiBfV0tEb3dubG9hZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUExQTRGRTVCMThEQ0U5RkEwMEI1RUE4QSAv
KiBfV0tEb3dubG9hZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEExQTRGRTU4MThEQ0U5RkEwMEI1RUE4QSAvKiBfV0tEb3dubG9hZC5tbSAqLzsgfTsK
KwkJQTFBNEZFNUMxOERDRTlGQTAwQjVFQThBIC8qIF9XS0Rvd25sb2FkSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExQTRGRTU5MThEQ0U5
RkEwMEI1RUE4QSAvKiBfV0tEb3dubG9hZEludGVybmFsLmggKi87IH07CisJCUExQTRGRTYxMThE
RDU0QTQwMEI1RUE4QSAvKiBfV0tEb3dubG9hZERlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMUE0RkU2MDE4REQ1NEE0MDBCNUVBOEEgLyog
X1dLRG93bmxvYWREZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE1RUZEMzhDMTZCMEU4OEMwMEIyRjBFOCAvKiBXS1BhZ2VWaXNpYmls
aXR5VHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1RUZEMzhCMTZCMEU4OEMwMEIyRjBFOCAvKiBXS1BhZ2VWaXNpYmlsaXR5VHlwZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0Q3OTJENjE3
NjdDQjZFMDA4ODFDQkUgLyogQWN0aXZpdHlBc3NlcnRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdENzkyRDUxNzY3Q0I2RTAwODgxQ0JFIC8q
IEFjdGl2aXR5QXNzZXJ0aW9uLmNwcCAqLzsgfTsKIAkJQTdENzkyRDgxNzY3Q0NBMzAwODgxQ0JF
IC8qIEFjdGl2aXR5QXNzZXJ0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0Q3OTJENDE3NjdDQjA5MDA4ODFDQkUgLyogQWN0aXZpdHlBc3NlcnRp
b24uaCAqLzsgfTsKQEAgLTI4MDIsNiArMjgwNiwxMCBAQAogCQk5RjU0Rjg5NDE2NDhBRTBFMDA3
REY4MUEgLyogUGx1Z2luUHJvY2Vzc01hbmFnZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBQbHVnaW5Qcm9jZXNzTWFuYWdlck1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUZCNUYzOTIxNjlFNkE4MDAwMkMyNUJGIC8qIFdLQ29udGV4
dFByaXZhdGVNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBX
S0NvbnRleHRQcml2YXRlTWFjLm1tOyBwYXRoID0gbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlGQjVGMzkzMTY5RTZBODAwMDJDMjVCRiAv
KiBXS0NvbnRleHRQcml2YXRlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFdLQ29udGV4dFByaXZhdGVNYWMuaDsgcGF0aCA9IG1hYy9XS0NvbnRleHRQcml2YXRlTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExQTRGRTU3MThEQ0U5RkEwMEI1RUE4QSAv
KiBfV0tEb3dubG9hZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tEb3du
bG9hZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUE0RkU1ODE4RENFOUZBMDBC
NUVBOEEgLyogX1dLRG93bmxvYWQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBfV0tEb3dubG9hZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTFB
NEZFNTkxOERDRTlGQTAwQjVFQThBIC8qIF9XS0Rvd25sb2FkSW50ZXJuYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dLRG93bmxvYWRJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBMUE0RkU2MDE4REQ1NEE0MDBCNUVBOEEgLyogX1dLRG93bmxv
YWREZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tEb3dubG9h
ZERlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRUREMkQ5MTg4NEFD
RTAwMEJCRkU5OCAvKiBBbGwueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQWxsLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUVERDJEQjE4ODRCOTY0MDBCQkZFOTggLyog
UGx1Z2luUHJvY2Vzc1NoaW0ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gUGx1Z2luUHJvY2Vzc1No
aW0ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExRUREMkRDMTg4NEI5
QjUwMEJCRkU5OCAvKiBTZWNJdGVtU2hpbS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBTZWNJdGVt
U2hpbS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1MzcsNiArNDU0
NSwxMCBAQAogCQkJCTM3QTVFMDEyMThCQkY5MzcwMDBBMDgxRSAvKiBfV0tBY3RpdmF0ZWRFbGVt
ZW50SW5mby5oICovLAogCQkJCTM3QTVFMDExMThCQkY5MzcwMDBBMDgxRSAvKiBfV0tBY3RpdmF0
ZWRFbGVtZW50SW5mby5tbSAqLywKIAkJCQkzNzlBODczNTE4QkJGQTQzMDA1ODhBRjIgLyogX1dL
QWN0aXZhdGVkRWxlbWVudEluZm9JbnRlcm5hbC5oICovLAorCQkJCUExQTRGRTU3MThEQ0U5RkEw
MEI1RUE4QSAvKiBfV0tEb3dubG9hZC5oICovLAorCQkJCUExQTRGRTU4MThEQ0U5RkEwMEI1RUE4
QSAvKiBfV0tEb3dubG9hZC5tbSAqLywKKwkJCQlBMUE0RkU2MDE4REQ1NEE0MDBCNUVBOEEgLyog
X1dLRG93bmxvYWREZWxlZ2F0ZS5oICovLAorCQkJCUExQTRGRTU5MThEQ0U5RkEwMEI1RUE4QSAv
KiBfV0tEb3dubG9hZEludGVybmFsLmggKi8sCiAJCQkJMzc5QTg3MzgxOEJCRkUwRjAwNTg4QUYy
IC8qIF9XS0VsZW1lbnRBY3Rpb24uaCAqLywKIAkJCQkzNzlBODczNzE4QkJGRTBGMDA1ODhBRjIg
LyogX1dLRWxlbWVudEFjdGlvbi5tbSAqLywKIAkJCQkzNzlBODczQjE4QkJGRjA3MDA1ODhBRjIg
LyogX1dLRWxlbWVudEFjdGlvbkludGVybmFsLmggKi8sCkBAIC02NTQ5LDYgKzY1NjEsNyBAQAog
CQkJCUM1MTczODgxMTJERjhGNEYwMEVFM0Y0NyAvKiBEcmFnQ29udHJvbGxlckFjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM4NDUyQTgxMTYyQzgwOTAwQ0FCOUI1IC8qIERyYXdpbmdBcmVh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzhFMUE0QTE4MjA4Q0Q2MDAzMTAwN0EgLyogV0tOU1N0
cmluZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTFBNEZFNUMxOERDRTlGQTAwQjVFQThBIC8qIF9X
S0Rvd25sb2FkSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEODk0OUYxMTgyMDQ0RjYw
MEU4OThBQSAvKiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVUaWxlZEJhY2tpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjY1OTIzMTIwOEI0REIwMDQ0ODE2QyAvKiBEcmF3aW5nQXJlYUluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCTI2RjlBODNCMThBMzQ2ODEwMEFFQjg4QSAvKiBXS1dlYlZpZXdQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMzMsNiArNzA0Niw3IEBACiAJCQkJN0NGNDdG
RkYxNzI3NkFFMzAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lck1hYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM3QjYzM0QxMkE0NUQxMjAwRDE3NEE0IC8qIFdLQnVuZGxlUGFnZUdyb3VwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFRDgyQTdGMjEyOEM2RkFGMDA0NDc3QjMgLyogV0tCdW5kbGVQ
YWdlT3ZlcmxheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTFBNEZFNUExOERDRTlGQTAwQjVFQThB
IC8qIF9XS0Rvd25sb2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFCNDE5ODExRDQxRDU3MDAx
MUU4REQgLyogV0tCdW5kbGVQYWdlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGMDQ5
RTcxMUZFMjBGNjAwRjg2QTU4IC8qIFdLQnVuZGxlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM2MEM1NzkxMjQwQTU0NjAwOEM1RTI5IC8qIFdLQnVuZGxlUmFuZ2VIYW5kbGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzA1Nyw2ICs3MDcxLDcgQEAKIAkJCQkxQUUwMEQ1RDE4MkRBREUxMDAw
ODdERDcgLyogS2V5ZWRFbmNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMzA5MzQ1QjEzMTVC
OTk4MDA5N0E3QkMgLyogV0tDb29raWVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJG
NThGQTEyQTg4QTU0MDA2Mjk1MzAgLyogV0tDcmVkZW50aWFsLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBMUE0RkU2MTE4REQ1NEE0MDBCNUVBOEEgLyogX1dLRG93bmxvYWREZWxlZ2F0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDQjRFNDYxOEJCRTA0NDAwMEZDRkM5IC8qIFBhZ2VDbGllbnRJbXBs
SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MThBQ0YxMTEyQjAxNUY4MDBCMDRCODMgLyogV0tD
cmVkZW50aWFsVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRkREMzE3MTg5MUM5NDcwMDE1
Mzk3MCAvKiBXS1ByZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKQEAgLTgzOTgsNiArODQxMyw3
IEBACiAJCQkJQkMzMDY2QkUxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxMTFCMTExMTJGNUU0RjAwMzM3QkFCIC8q
IFdlYlByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTAzMkYxODE4MEY3M0JC
MDA5NjFCQjcgLyogV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUExQTRGRTVCMThEQ0U5RkEwMEI1RUE4QSAvKiBfV0tEb3dubG9hZC5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTUxRDEzMDU4MTM4MkYxMDUwMDM1MUVERCAvKiBXZWJQcm9jZXNzUHJv
eHlNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQ0VFN0FEMDEyODE3OTg4MDA5ODI3REEgLyog
V2ViUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
MkY1ODlDMTJBODgzODgwMDYyOTUzMCAvKiBXZWJQcm90ZWN0aW9uU3BhY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggOTJkZjUwZjdjMDk4OTA1OTc1N2JhNmM2ZDdhZDk5NzI1MGI1NWMyNi4uNjEzMDUzMTM5ZGU4
NDkwODE0ZDlhYWE4M2M1YTBiODRkZTllYjg1YyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE0LTAzLTIyICBBbmR5
IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBbaU9TXSBEb3dubG9hZCBzdXBw
b3J0IGJ5IENGVVJMRG93bmxvYWRSZWYgdW5kZXIgVVNFKENGTkVUV09SSykuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkzMjIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYW4gQVBJIHRlc3Qgc3Vp
dGUgZm9yIF9XS0Rvd25sb2FkLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyQ29jb2EvRG93bmxvYWQubW06IEFkZGVkLgorICAgICAgICAoLVtEb3dubG9h
ZERlbGVnYXRlIGluaXRXaXRoU291cmNlVVJMOl0pOgorICAgICAgICAoLVtEb3dubG9hZERlbGVn
YXRlIHNvdXJjZVVSTF0pOgorICAgICAgICAoLVtEb3dubG9hZERlbGVnYXRlIF9kb3dubG9hZERp
ZFN0YXJ0Ol0pOgorICAgICAgICAoLVtEb3dubG9hZERlbGVnYXRlIF9kb3dubG9hZDpkaWRSZWNl
aXZlUmVzcG9uc2U6XSk6CisgICAgICAgICgtW0Rvd25sb2FkRGVsZWdhdGUgX2Rvd25sb2FkOmRp
ZFJlY2VpdmVEYXRhOl0pOgorICAgICAgICAoLVtEb3dubG9hZERlbGVnYXRlIF9kb3dubG9hZDpk
ZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZTphbGxvd092ZXJ3cml0ZTpdKToK
KyAgICAgICAgKC1bRG93bmxvYWREZWxlZ2F0ZSBfZG93bmxvYWREaWRGaW5pc2g6XSk6CisgICAg
ICAgIChURVNUKToKKyAgICAgICAgKHJ1blRlc3RXaXRoTmF2aWdhdGlvbkRlbGVnYXRlKToKKyAg
ICAgICAgKC1bRG93bmxvYWROYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzpkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bQ29udmVy
dFJlc3BvbnNlVG9Eb3dubG9hZE5hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25SZXNwb25zZTpkZWNpc2lvbkhhbmRsZXI6XSk6CisKIDIwMTQtMDMtMjEg
IERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBmaXgtYmxpbmst
cGF0Y2g6IHRvb2wgdG8gZml4IHVwIHJlbmFtZWQgZGlyZWN0b3J5IHBhdGhzIGluIEJsaW5rCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJlNDFmOGMyYmU5NzNhYzNhNWZkZjNmYzE2NDAxNjY4
NmU3MzJmMmMuLjhiYmI1NzBmY2ViOGFhMmJlZWYxOWZjNTE4YjJhNDMzYjlhOGNjOTYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDIsNiArMTQyLDcgQEAKIAkJOUIyNkZDQ0ExNTlEMTZE
RTAwQ0MzNzY1IC8qIEhUTUxGb3JtQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sIGluIENvcHkgUmVz
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDlCMjZGQ0I0MTU5RDE1
RTcwMENDMzc2NSAvKiBIVE1MRm9ybUNvbGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCAqLzsgfTsKIAkJ
OUI0RjhGQTQxNTlENTJCMTAwMkQ5Rjk0IC8qIEhUTUxDb2xsZWN0aW9uTmFtZWRJdGVtLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOUI0RjhGQTMxNTlE
NTJCMTAwMkQ5Rjk0IC8qIEhUTUxDb2xsZWN0aW9uTmFtZWRJdGVtLm1tICovOyB9OwogCQk5QjRG
OEZBNzE1OUQ1MkREMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCBpbiBD
b3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5QjRGOEZB
NjE1OUQ1MkNBMDAyRDlGOTQgLyogSFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCAqLzsgfTsK
KwkJQTFBNEZFNUYxOEREM0RCNzAwQjVFQThBIC8qIERvd25sb2FkLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTFBNEZFNUQxOEREM0RCNzAwQjVFQThB
IC8qIERvd25sb2FkLm1tICovOyB9OwogCQlBNTdBMzRGMDE2QUY2NzcyMDBDMjUwMUYgLyogUGFn
ZVZpc2liaWxpdHlTdGF0ZVdpdGhXaW5kb3dDaGFuZ2VzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU3QTM0RUYxNkFGNjc3MjAwQzI1MDFGIC8qIFBh
Z2VWaXNpYmlsaXR5U3RhdGVXaXRoV2luZG93Q2hhbmdlcy5tbSAqLzsgfTsKIAkJQTU3QTM0RjIx
NkFGNkIyQjAwQzI1MDFGIC8qIFBhZ2VWaXNpYmlsaXR5U3RhdGVXaXRoV2luZG93Q2hhbmdlcy5o
dG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1N0EzNEYxMTZBRjY5RTIwMEMyNTAxRiAvKiBQYWdlVmlzaWJpbGl0eVN0YXRlV2l0aFdpbmRv
d0NoYW5nZXMuaHRtbCAqLzsgfTsKIAkJQTVFMjAyNzMxNUIyMTgxOTAwQzEzRTE0IC8qIFdpbmRv
d2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTVFMjAyNzIxNUIyMTgxOTAwQzEzRTE0IC8qIFdpbmRvd2xlc3NXZWJW
aWV3V2l0aE1lZGlhLm1tICovOyB9OwpAQCAtNDY5LDYgKzQ3MCw3IEBACiAJCTlCMjZGQ0I0MTU5
RDE1RTcwMENDMzc2NSAvKiBIVE1MRm9ybUNvbGxlY3Rpb25OYW1lZEl0ZW0uaHRtbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuaHRtbDsgcGF0aCA9IEhUTUxGb3JtQ29sbGVjdGlvbk5hbWVkSXRlbS5odG1sOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QjRGOEZBMzE1OUQ1MkIxMDAyRDlGOTQgLyog
SFRNTENvbGxlY3Rpb25OYW1lZEl0ZW0ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOUI0RjhGQTYxNTlENTJDQTAwMkQ5Rjk0IC8qIEhUTUxDb2xsZWN0aW9uTmFt
ZWRJdGVtLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBIVE1MQ29sbGVjdGlvbk5h
bWVkSXRlbS5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMUE0RkU1RDE4REQz
REI3MDBCNUVBOEEgLyogRG93bmxvYWQubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBEb3dubG9hZC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU3
QTM0RUYxNkFGNjc3MjAwQzI1MDFGIC8qIFBhZ2VWaXNpYmlsaXR5U3RhdGVXaXRoV2luZG93Q2hh
bmdlcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBhZ2VWaXNp
YmlsaXR5U3RhdGVXaXRoV2luZG93Q2hhbmdlcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTU3QTM0RjExNkFGNjlFMjAwQzI1MDFGIC8qIFBhZ2VWaXNpYmlsaXR5U3RhdGVXaXRo
V2luZG93Q2hhbmdlcy5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gUGFnZVZpc2li
aWxpdHlTdGF0ZVdpdGhXaW5kb3dDaGFuZ2VzLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1RTIwMjcwMTVCMjE4MDYwMEMxM0UxNCAvKiBXaW5kb3dsZXNzV2ViVmlld1dpdGhN
ZWRpYS5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gV2luZG93bGVzc1dlYlZpZXdX
aXRoTWVkaWEuaHRtbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY3Miw2ICs2NzQs
NyBAQAogCQkxQUJDM0RFQzE4OTlCRTU1MDA0RjA2MjYgLyogV2ViS2l0MiBDb2NvYSAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQTFBNEZFNUQxOEREM0RC
NzAwQjVFQThBIC8qIERvd25sb2FkLm1tICovLAogCQkJCTFBQkMzREVEMTg5OUJFNkQwMDRGMDYy
NiAvKiBOYXZpZ2F0aW9uLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSAiV2ViS2l0MiBDb2NvYSI7
CkBAIC0xMjA3LDYgKzEyMTAsNyBAQAogCQkJCTE0NDY0MDEzMTY3QTgzMDUwMDBCRDIxOCAvKiBM
YXlvdXRVbml0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJENjQwQjU1MTc4NzVERkYwMEJGQUY5
OSAvKiBTY3JvbGxQaW5uaW5nQmVoYXZpb3JzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTI2MzAw
QjE4MTY3NTVDRDkwMDY2ODg2RCAvKiBMaXN0SGFzaFNldC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBMUE0RkU1RjE4REQzREI3MDBCNUVBOEEgLyogRG93bmxvYWQubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MkNCNDc0MTE0NDhGQjkzMDA4NzM5OTUgLyogTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdX
aXRoTm9uRGlyZWN0b3J5VVJMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMzREM4OTExMTQxOTUz
QTMwMDc0N0VGNyAvKiBMb2FkQ2FuY2VsZWROb1NlcnZlclJlZGlyZWN0Q2FsbGJhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOEFBMjhDMUExNkQyRkE3QjAwMkZGNERCIC8qIExvYWRQYWdlT25D
cmFzaC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0MkNvY29hL0Rvd25sb2FkLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyQ29jb2EvRG93bmxvYWQubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGY5ZTU4MTMxZWM3YjE4MjEx
Mzg1NjljMmNkYzBkOGNkYzYzZjIyNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0MkNvY29hL0Rvd25sb2FkLm1tCkBAIC0wLDAgKzEsMTc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0IDxXZWJLaXQyL1dLRm91bmRh
dGlvbi5oPgorCisjaWYgV0tfQVBJX0VOQUJMRUQKKworI2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRp
ZXMuaCIKKyNpbXBvcnQgIlRlc3QuaCIKKyNpbXBvcnQgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgor
I2ltcG9ydCA8V2ViS2l0Mi9fV0tEb3dubG9hZERlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJLaXQy
L1dLTmF2aWdhdGlvbkRlbGVnYXRlLmg+CisjaW1wb3J0IDxXZWJLaXQyL1dLUHJvY2Vzc1Bvb2xQ
cml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQyL1dLV2ViVmlldy5oPgorI2ltcG9ydCA8V2ViS2l0
Mi9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Cisj
aW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworc3RhdGljIGJvb2wgaXNEb25lOworCitA
aW50ZXJmYWNlIERvd25sb2FkRGVsZWdhdGUgOiBOU09iamVjdCA8X1dLRG93bmxvYWREZWxlZ2F0
ZT4KKy0gKGlkKWluaXRXaXRoU291cmNlVVJMOihOU1VSTCAqKXNvdXJjZVVSTDsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNVUkwgKnNvdXJjZVVSTDsKK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIERvd25sb2FkRGVsZWdhdGUgeworICAgIFJldGFpblB0cjxfV0tEb3dubG9hZD4g
X2Rvd25sb2FkOworICAgIFJldGFpblB0cjxOU1VSTD4gX3NvdXJjZVVSTDsKKyAgICBTdHJpbmcg
X2Rlc3RpbmF0aW9uUGF0aDsKKyAgICBsb25nIGxvbmcgX2V4cGVjdGVkQ29udGVudExlbmd0aDsK
KyAgICB1aW50NjRfdCBfcmVjZWl2ZWRDb250ZW50TGVuZ3RoOworfQorCistIChpZClpbml0V2l0
aFNvdXJjZVVSTDooTlNVUkwgKilzb3VyY2VVUkwKK3sKKyAgICBpZiAoIShzZWxmID0gW3N1cGVy
IGluaXRdKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBfc291cmNlVVJMID0gc291cmNlVVJM
OworICAgIF9leHBlY3RlZENvbnRlbnRMZW5ndGggPSAwOworICAgIF9yZWNlaXZlZENvbnRlbnRM
ZW5ndGggPSAwOworICAgIHJldHVybiBzZWxmOworfQorCistIChOU1VSTCAqKXNvdXJjZVVSTAor
eworICAgIHJldHVybiBfc291cmNlVVJMLmdldCgpOworfQorCistICh2b2lkKV9kb3dubG9hZERp
ZFN0YXJ0OihfV0tEb3dubG9hZCAqKWRvd25sb2FkCit7CisgICAgRVhQRUNUX05VTEwoX2Rvd25s
b2FkKTsKKyAgICBFWFBFQ1RfTk9UX05VTEwoZG93bmxvYWQpOworICAgIF9kb3dubG9hZCA9IGRv
d25sb2FkOworfQorCistICh2b2lkKV9kb3dubG9hZDooX1dLRG93bmxvYWQgKilkb3dubG9hZCBk
aWRSZWNlaXZlUmVzcG9uc2U6KE5TVVJMUmVzcG9uc2UgKilyZXNwb25zZQoreworICAgIEVYUEVD
VF9FUShfZG93bmxvYWQsIGRvd25sb2FkKTsKKyAgICBFWFBFQ1RfVFJVRShfZXhwZWN0ZWRDb250
ZW50TGVuZ3RoID09IDApOworICAgIEVYUEVDVF9UUlVFKF9yZWNlaXZlZENvbnRlbnRMZW5ndGgg
PT0gMCk7CisgICAgRVhQRUNUX1RSVUUoW1tyZXNwb25zZSBVUkxdIGlzRXF1YWw6W3NlbGYgc291
cmNlVVJMXV0pOworICAgIF9leHBlY3RlZENvbnRlbnRMZW5ndGggPSBbcmVzcG9uc2UgZXhwZWN0
ZWRDb250ZW50TGVuZ3RoXTsKK30KKworLSAodm9pZClfZG93bmxvYWQ6KF9XS0Rvd25sb2FkICop
ZG93bmxvYWQgZGlkUmVjZWl2ZURhdGE6KHVpbnQ2NF90KWxlbmd0aAoreworICAgIEVYUEVDVF9F
UShfZG93bmxvYWQsIGRvd25sb2FkKTsKKyAgICBfcmVjZWl2ZWRDb250ZW50TGVuZ3RoICs9IGxl
bmd0aDsKK30KKworLSAoTlNTdHJpbmcgKilfZG93bmxvYWQ6KF9XS0Rvd25sb2FkICopZG93bmxv
YWQgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KE5TU3RyaW5nICopZmls
ZW5hbWUgYWxsb3dPdmVyd3JpdGU6KEJPT0wgKilhbGxvd092ZXJ3cml0ZQoreworICAgIEVYUEVD
VF9FUShfZG93bmxvYWQsIGRvd25sb2FkKTsKKworICAgIFdlYkNvcmU6OlBsYXRmb3JtRmlsZUhh
bmRsZSBmaWxlSGFuZGxlOworICAgIF9kZXN0aW5hdGlvblBhdGggPSBXZWJDb3JlOjpvcGVuVGVt
cG9yYXJ5RmlsZSgiVGVzdFdlYktpdEFQSSIsIGZpbGVIYW5kbGUpOworICAgIEVYUEVDVF9UUlVF
KGZpbGVIYW5kbGUgIT0gV2ViQ29yZTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSk7CisgICAg
V2ViQ29yZTo6Y2xvc2VGaWxlKGZpbGVIYW5kbGUpOworCisgICAgKmFsbG93T3ZlcndyaXRlID0g
WUVTOworICAgIHJldHVybiBfZGVzdGluYXRpb25QYXRoOworfQorCistICh2b2lkKV9kb3dubG9h
ZERpZEZpbmlzaDooX1dLRG93bmxvYWQgKilkb3dubG9hZAoreworICAgIEVYUEVDVF9FUShfZG93
bmxvYWQsIGRvd25sb2FkKTsKKyAgICBFWFBFQ1RfVFJVRShfZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
ID09IE5TVVJMUmVzcG9uc2VVbmtub3duTGVuZ3RoIHx8IHN0YXRpY19jYXN0PHVpbnQ2NF90Pihf
ZXhwZWN0ZWRDb250ZW50TGVuZ3RoKSA9PSBfcmVjZWl2ZWRDb250ZW50TGVuZ3RoKTsKKyAgICBF
WFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNvbnRlbnRzRXF1YWxB
dFBhdGg6X2Rlc3RpbmF0aW9uUGF0aCBhbmRQYXRoOltfc291cmNlVVJMIHBhdGhdXSk7CisgICAg
V2ViQ29yZTo6ZGVsZXRlRmlsZShfZGVzdGluYXRpb25QYXRoKTsKKyAgICBpc0RvbmUgPSB0cnVl
OworfQorCitAZW5kCisKK1RFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkRGVsZWdhdGUpCit7Cisg
ICAgUmV0YWluUHRyPFdLUHJvY2Vzc1Bvb2w+IHByb2Nlc3NQb29sID0gYWRvcHROUyhbW1dLUHJv
Y2Vzc1Bvb2wgYWxsb2NdIGluaXRdKTsKKyAgICBEb3dubG9hZERlbGVnYXRlICpkb3dubG9hZERl
bGVnYXRlID0gW1tEb3dubG9hZERlbGVnYXRlIGFsbG9jXSBpbml0XTsKKyAgICBbcHJvY2Vzc1Bv
b2wgX3NldERvd25sb2FkRGVsZWdhdGU6ZG93bmxvYWREZWxlZ2F0ZV07CisKKyAgICBAYXV0b3Jl
bGVhc2Vwb29sIHsKKyAgICAgICAgRVhQRUNUX0VRKGRvd25sb2FkRGVsZWdhdGUsIFtwcm9jZXNz
UG9vbCBfZG93bmxvYWREZWxlZ2F0ZV0pOworICAgIH0KKworICAgIFtkb3dubG9hZERlbGVnYXRl
IHJlbGVhc2VdOworICAgIEVYUEVDVF9OVUxMKFtwcm9jZXNzUG9vbCBfZG93bmxvYWREZWxlZ2F0
ZV0pOworfQorCitzdGF0aWMgdm9pZCBydW5UZXN0V2l0aE5hdmlnYXRpb25EZWxlZ2F0ZShpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGU+IG5hdmlnYXRpb25EZWxlZ2F0ZSkKK3sKKyAgICBSZXRhaW5Q
dHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdp
dGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworICAgIFt3ZWJWaWV3IHNldE5h
dmlnYXRpb25EZWxlZ2F0ZTpuYXZpZ2F0aW9uRGVsZWdhdGVdOworCisgICAgUmV0YWluUHRyPERv
d25sb2FkRGVsZWdhdGU+IGRvd25sb2FkRGVsZWdhdGUgPSBhZG9wdE5TKFtbRG93bmxvYWREZWxl
Z2F0ZSBhbGxvY10gaW5pdFdpdGhTb3VyY2VVUkw6W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl1dKTsKKyAgICBbW1t3ZWJWaWV3IGNvbmZpZ3VyYXRp
b25dIHByb2Nlc3NQb29sXSBfc2V0RG93bmxvYWREZWxlZ2F0ZTpkb3dubG9hZERlbGVnYXRlLmdl
dCgpXTsKKworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W2Rvd25sb2FkRGVsZWdhdGUgc291cmNlVVJMXV1dOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmaXNEb25lKTsKK30KKworQGludGVyZmFjZSBEb3dubG9hZE5hdmlnYXRpb25E
ZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS05hdmlnYXRpb25EZWxlZ2F0ZT4KK0BlbmQKKworQGltcGxl
bWVudGF0aW9uIERvd25sb2FkTmF2aWdhdGlvbkRlbGVnYXRlCistICh2b2lkKXdlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjooV0tOYXZp
Z2F0aW9uQWN0aW9uICopbmF2aWdhdGlvbkFjdGlvbiBkZWNpc2lvbkhhbmRsZXI6KHZvaWQgKF4p
KFdLTmF2aWdhdGlvblBvbGljeURlY2lzaW9uKSlkZWNpc2lvbkhhbmRsZXIKK3sKKyAgICBkZWNp
c2lvbkhhbmRsZXIoV0tOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Eb3dubG9hZCk7Cit9CitAZW5k
CisKK1RFU1QoX1dLRG93bmxvYWQsIERvd25sb2FkUmVxdWVzdCkKK3sKKyAgICBydW5UZXN0V2l0
aE5hdmlnYXRpb25EZWxlZ2F0ZShhZG9wdE5TKFtbRG93bmxvYWROYXZpZ2F0aW9uRGVsZWdhdGUg
YWxsb2NdIGluaXRdKS5nZXQoKSk7Cit9CisKK0BpbnRlcmZhY2UgQ29udmVydFJlc3BvbnNlVG9E
b3dubG9hZE5hdmlnYXRpb25EZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS05hdmlnYXRpb25EZWxlZ2F0
ZT4KK0BlbmQKKworQGltcGxlbWVudGF0aW9uIENvbnZlcnRSZXNwb25zZVRvRG93bmxvYWROYXZp
Z2F0aW9uRGVsZWdhdGUKKy0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2U6KFdLTmF2aWdhdGlvblJlc3BvbnNlICopbmF2
aWdhdGlvblJlc3BvbnNlIGRlY2lzaW9uSGFuZGxlcjoodm9pZCAoXikoV0tOYXZpZ2F0aW9uUmVz
cG9uc2VQb2xpY3lEZWNpc2lvbikpZGVjaXNpb25IYW5kbGVyCit7CisgICAgZGVjaXNpb25IYW5k
bGVyKFdLTmF2aWdhdGlvblJlc3BvbnNlUG9saWN5RGVjaXNpb25CZWNvbWVEb3dubG9hZCk7Cit9
CitAZW5kCisKK1RFU1QoX1dLRG93bmxvYWQsIENvbnZlcnRSZXNwb25zZVRvRG93bmxvYWQpCit7
CisgICAgcnVuVGVzdFdpdGhOYXZpZ2F0aW9uRGVsZWdhdGUoYWRvcHROUyhbW0NvbnZlcnRSZXNw
b25zZVRvRG93bmxvYWROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKS5nZXQoKSk7Cit9
CisKKyNlbmRpZgo=
</data>
<flag name="review"
          id="251815"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>