<?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>223897</bug_id>
          
          <creation_ts>2021-03-29 13:19:39 -0700</creation_ts>
          <short_desc>Add ability to set HTTP proxy on a per-WKWebView basis</short_desc>
          <delta_ts>2021-03-30 14:38:54 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1744858</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-03-29 13:19:39 -0700</bug_when>
    <thetext>Add ability to set HTTP proxy on a per-WKWebView basis</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744894</commentid>
    <comment_count>1</comment_count>
      <attachid>424574</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-03-29 13:51:51 -0700</bug_when>
    <thetext>Created attachment 424574
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744909</commentid>
    <comment_count>2</comment_count>
      <attachid>424574</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-03-29 14:15:00 -0700</bug_when>
    <thetext>Comment on attachment 424574
Patch

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

&gt; Source/WebKit/ChangeLog:18
&gt; +        If multiple WKWebViews are created with the same proxy configuration they&apos;ll all share the
&gt; +        same proxy-specific NSURLSessions.

Could you add a test that verifies this?

&gt; Source/WebKit/Shared/ProxyConfigurationParameters.cpp:38
&gt; +    IPC::encode(encoder, proxyConfigurationDictionary.get());

Do we care if someone puts something in the NSDictionary that isn&apos;t encodable?

&gt; Source/WebKit/Shared/ProxyConfigurationRegistry.h:60
&gt; +    HashMap&lt;ProxyConfigurationIdentifier, ProxyConfiguration*&gt; m_proxyConfigurations;

WeakHashMap?

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.h:213
&gt; + For more information refer to the documentation of NSURLSessionConfiguration

This documentation isn&apos;t great.  It would be nice to have a list of supported values, and then sanitize the dictionary.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:616
&gt; +        auto proxyConfiguration = WebKit::ProxyConfigurationRegistry::singleton().getOrCreateProxyConfiguration(_proxyConfiguration.get());

I don&apos;t think it&apos;s a good idea to have this in the UI process.  Just pass the dictionary along and do the session finding in the network process.
I especially don&apos;t think it&apos;s a good idea to have this function do more than just call API::PageConfiguration::copy

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:99
&gt; +    TCPServer server([] (int socket) mutable {

Would it be possible to use HTTPServer instead?  I&apos;m trying to move away from TCPServer, which uses non-main threads and hangs the whole test if anything goes wrong instead of being well debuggable.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:115
&gt; +        (NSString *)kCFStreamPropertyHTTPProxyPort : [NSNumber numberWithInt:server.port()],

@(server.port()) is nicer syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744930</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-03-29 14:51:07 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #2)
&gt; Comment on attachment 424574 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424574&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:18
&gt; &gt; +        If multiple WKWebViews are created with the same proxy configuration they&apos;ll all share the
&gt; &gt; +        same proxy-specific NSURLSessions.
&gt; 
&gt; Could you add a test that verifies this?

Not without adding test-specific SPI.

Which I can if you think is worth it.

&gt; 
&gt; &gt; Source/WebKit/Shared/ProxyConfigurationParameters.cpp:38
&gt; &gt; +    IPC::encode(encoder, proxyConfigurationDictionary.get());
&gt; 
&gt; Do we care if someone puts something in the NSDictionary that isn&apos;t
&gt; encodable?

What do we do for other dictionaries that fall into that?

&gt; 
&gt; &gt; Source/WebKit/Shared/ProxyConfigurationRegistry.h:60
&gt; &gt; +    HashMap&lt;ProxyConfigurationIdentifier, ProxyConfiguration*&gt; m_proxyConfigurations;
&gt; 
&gt; WeakHashMap?

The lifetime is explicitly managed.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.h:213
&gt; &gt; + For more information refer to the documentation of NSURLSessionConfiguration
&gt; 
&gt; This documentation isn&apos;t great.  It would be nice to have a list of
&gt; supported values, and then sanitize the dictionary.

I&apos;ll ping you on slack, but I don&apos;t know how we&apos;d go about making that list.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:616
&gt; &gt; +        auto proxyConfiguration = WebKit::ProxyConfigurationRegistry::singleton().getOrCreateProxyConfiguration(_proxyConfiguration.get());
&gt; 
&gt; I don&apos;t think it&apos;s a good idea to have this in the UI process.  Just pass
&gt; the dictionary along and do the session finding in the network process.
&gt; I especially don&apos;t think it&apos;s a good idea to have this function do more than
&gt; just call API::PageConfiguration::copy

At one point, I was convinced it was important to keep this in the UI process for a very specific reason related to sessions outliving web views, or something like that.

But I can&apos;t remember why right now - Or, something changed over the life of the patch.

I&apos;ll strongly consider this.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:99
&gt; &gt; +    TCPServer server([] (int socket) mutable {
&gt; 
&gt; Would it be possible to use HTTPServer instead?  I&apos;m trying to move away
&gt; from TCPServer, which uses non-main threads and hangs the whole test if
&gt; anything goes wrong instead of being well debuggable.

Sure.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:115
&gt; &gt; +        (NSString *)kCFStreamPropertyHTTPProxyPort : [NSNumber numberWithInt:server.port()],
&gt; 
&gt; @(server.port()) is nicer syntax.

&quot;Back in my day, we didn&apos;t *HAVE* objective-c literals... uphill... both ways...&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745176</commentid>
    <comment_count>4</comment_count>
      <attachid>424657</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-03-30 10:26:29 -0700</bug_when>
    <thetext>Created attachment 424657
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745186</commentid>
    <comment_count>5</comment_count>
      <attachid>424657</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-03-30 11:08:06 -0700</bug_when>
    <thetext>Comment on attachment 424657
Patch

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

&gt; Source/WebKit/Shared/Cocoa/ProxyOptionsCocoa.mm:32
&gt; +// These constants are copied from &lt;SystemConfiguration/SCSchemaDefinitions.h&gt;
&gt; +static NSString *httpProxyHostKey = @&quot;HTTPProxy&quot;;

I think it would be better to use them from the header, kSCPropNetProxiesHTTPProxy instead of @&quot;HTTPProxy&quot; etc.

&gt; Source/WebKit/Shared/Cocoa/ProxyOptionsCocoa.mm:53
&gt; +    auto podPort = [(NSNumber *)port longLongValue];

unsigned long long value?

&gt; Source/WebKit/Shared/Cocoa/ProxyOptionsCocoa.mm:58
&gt; +    portResult = (uint16_t)podPort;

static_cast

&gt; Source/WebKit/Shared/Cocoa/ProxyOptionsCocoa.mm:68
&gt; +NSDictionary *ProxyOptions::toProxyConfigurationDictionary() const

This should probably return nil instead of an allocated empty dictionary if all proxies are unset.

&gt; Source/WebKit/Shared/Cocoa/ProxyOptionsCocoa.mm:70
&gt; +    auto result = [NSMutableDictionary dictionaryWithCapacity:3];

6

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.h:217
&gt; + Key - kSCPropNetProxiesHTTPPort - @&quot;HTTPPort&quot;

I don&apos;t think it&apos;s good to have the value @&quot;HTTPPort&quot; which should be opaque.  We don&apos;t want people to write that value.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.h:218
&gt; + Value - NSNumber in the range 1-65535

No port zero, huh?

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebViewConfiguration.mm:183
&gt; +    RetainPtr&lt;NSDictionary&gt; _connectionProxyDictionary;

This is unnecessary and has the side effect that if you set a dictionary with ignored values, the getter will have a copy of those values.  I think we should just call toProxyConfigurationDictionary() in the getter instead.

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStorePrivate.h:101
&gt; +- (void)_proxySessionSetCountForTesting:(void(^)(unsigned))completionHandler;

This needs availability macros.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:96
&gt; +TEST(WebKit, WKWebViewProxyAPI)

Let&apos;s test adding invalid things to the dictionary and catching the exceptions.  Like negative port numbers, etc.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/NetworkProcess.mm:126
&gt; +    Util::run(&amp;requested);

This currently mandates that the second web view makes a second connection to the proxy.  This is probably a valid assumption because we never respond.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745283</commentid>
    <comment_count>6</comment_count>
      <attachid>424686</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-03-30 13:40:10 -0700</bug_when>
    <thetext>Created attachment 424686
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745292</commentid>
    <comment_count>7</comment_count>
      <attachid>424686</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-03-30 13:49:09 -0700</bug_when>
    <thetext>Comment on attachment 424686
Patch

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

&gt; Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm:1316
&gt; +#ifndef NDEBUG
&gt; +    if (!webPageProxyID) {

This is a bit verbose.  ASSERT(webPageProxyID) would do.

&gt; Source/WebKit/Shared/ProxyConfiguration.cpp:44
&gt; +ProxyConfiguration::ProxyConfiguration()

I think it would be better to pass the identifier and dictionary as constructor parameters than to not initialize m_identifier at all in the constructor, then set it after the one call site of the constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1745333</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2021-03-30 14:38:54 -0700</bug_when>
    <thetext>Nevermind, not quite ready to do this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424574</attachid>
            <date>2021-03-29 13:51:51 -0700</date>
            <delta_ts>2021-03-30 10:26:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55372</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNzE0ZDdlNDkwYmM0Li5jMmMzZDNmOTI3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsODggQEAKKzIwMjEtMDMtMjkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBhYmlsaXR5IHRvIHNldCBIVFRQIHByb3h5IG9uIGEgcGVyLVdLV2ViVmll
dyBiYXNpcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMzg5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IENvdmVyZWQgYnkgbmV3IEFQSSB0ZXN0cy4KKworICAgICAgICBUaGlzIGFkZHMgYSBuZXcgcHJv
cGVydHkgb24gV0tXZWJWaWV3Q29uZmlndXJhdGlvbjogY29ubmVjdGlvblByb3h5RGljdGlvbmFy
eS4KKyAgICAgICAgCisgICAgICAgIFRoZSBkaWN0aW9uYXJ5IGNhbiBob2xkIHRoZSBzYW1lIHZh
bHVlcyBhcyB0aGUgTlNVUkxTZXNzaW9uIGNvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnkgbWVtYmVy
LgorICAgICAgICAKKyAgICAgICAgV2hlbiBhIFdLV2ViVmlldyBpcyBjcmVhdGVkIHdpdGggYSBj
b25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5LCB0aGVuIGEgc2V0IG9mIHByb3h5LXNwZWNpZmljCisg
ICAgICAgIE5TVVJMU2Vzc2lvbnMgaXMgY3JlYXRlZCB0aGF0IHdpbGwgaGFuZGxlIG5ldHdvcmtp
bmcgZm9yIHRoYXQgV0tXZWJWaWV3LgorICAgICAgICAKKyAgICAgICAgSWYgbXVsdGlwbGUgV0tX
ZWJWaWV3cyBhcmUgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIHByb3h5IGNvbmZpZ3VyYXRpb24gdGhl
eSdsbCBhbGwgc2hhcmUgdGhlCisgICAgICAgIHNhbWUgcHJveHktc3BlY2lmaWMgTlNVUkxTZXNz
aW9ucy4KKworICAgICAgICAKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRQcm94eUNvbmZpZ3Vy
YXRpb24pOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAg
ICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Nlc3Npb246OmFkZFByb3h5Q29uZmlndXJhdGlvbik6CisgICAgICAgIAorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL1ByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6ZmVhdHVyZUVuYWJs
ZWQgY29uc3QpOgorICAgICAgICAKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3
b3JrU2Vzc2lvbkNvY29hLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Nlc3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6
TmV0d29ya1Nlc3Npb25Db2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29j
b2E6OmluaXRpYWxpemVQcm94eVNlc3Npb25TZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
U2Vzc2lvbkNvY29hOjpzZXNzaW9uU2V0Rm9yUGFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtTZXNzaW9uQ29jb2E6OnNlc3Npb25TZXRGb3JQYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkUHJveHlDb25maWd1cmF0aW9uKToKKyAgICAKKyAg
ICAgICAgKiBTaGFyZWQvUHJveHlDb25maWd1cmF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlByb3h5Q29uZmlndXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UHJv
eHlDb25maWd1cmF0aW9uOjpQcm94eUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpQ
cm94eUNvbmZpZ3VyYXRpb246OnBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQ
cm94eUNvbmZpZ3VyYXRpb246On5Qcm94eUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAqIFNoYXJl
ZC9Qcm94eUNvbmZpZ3VyYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29u
ZmlndXJhdGlvbjo6cHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSBjb25zdCk6CisgICAgICAg
ICogU2hhcmVkL0NvY29hL1Byb3h5Q29uZmlndXJhdGlvbkNvY29hLm1tOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UHJveHlDb25maWd1cmF0aW9uOjpjcmVhdGUpOgorCisgICAgICAgIEEgY2xh
c3MgdG8gcmVwcmVzZW50IGEgY29uZmlndXJhYmx5IHVuaXF1ZSBwcm94eSBjb25maWd1cmF0aW9u
OgorICAgICAgICAoV2ViS2l0OjpQcm94eUNvbmZpZ3VyYXRpb246OmlkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAqIFNoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnM6OmVuY29k
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnM6
OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMu
aDogQWRkZWQuCisgICAgICAgIAorICAgICAgICBBIGNsYXNzIHRvIG1hcCBtdWx0aXBsZSBlcXVp
dmFsZW50IE5TRGljdGlvbmFyeXMgdG8gdGhlIHNhbWUgUHJveHlDb25maWd1cmF0aW9uIG9iamVj
dHM6CisgICAgICAgICogU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5OjpzaW5nbGV0
b24pOgorICAgICAgICAoV2ViS2l0OjpQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeTo6Z2V0T3JD
cmVhdGVQcm94eUNvbmZpZ3VyYXRpb25CeUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpQ
cm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeTo6cHJveHlDb25maWd1cmF0aW9uRGVzdHJveWVkKToK
KyAgICAgICAgKiBTaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkuaDogQWRkZWQuCisg
ICAgICAgICogU2hhcmVkL0NvY29hL1Byb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5Q29jb2EubW06
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeTo6Z2V0
T3JDcmVhdGVQcm94eUNvbmZpZ3VyYXRpb24pOgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9B
UElQYWdlQ29uZmlndXJhdGlvbi5jcHA6CisgICAgICAgIChBUEk6OlBhZ2VDb25maWd1cmF0aW9u
Ojpjb3B5IGNvbnN0KToKKyAgICAgICAgKEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OnByb3h5Q29u
ZmlndXJhdGlvbiBjb25zdCk6CisgICAgICAgIChBUEk6OlBhZ2VDb25maWd1cmF0aW9uOjpzZXRQ
cm94eUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUGFnZUNvbmZp
Z3VyYXRpb24uaDoKKyAgICAgICAgCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdDb25maWd1cmF0aW9uLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXdDb25maWd1cmF0aW9u
IGNvcHlQYWdlQ29uZmlndXJhdGlvbl0pOgorICAgICAgICAoLVtXS1dlYlZpZXdDb25maWd1cmF0
aW9uIGNvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnldKToKKyAgICAgICAgKC1bV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiBzZXRDb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5Ol0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmluaXRpYWxpemVXZWJQYWdlKToKKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAq
IFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9Db3JlTWVkaWFX
cmFwcGVkLmg6IERlYWwgd2l0aCB1cGRhdGVkIHVuaWZpZWQgc291cmNlIGJ1aWxkIGJyZWFrYWdl
LgorICAgICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVDdXJz
b3IuaDogRGl0dG8uCisgICAgICAgICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVRyYWNrUmVhZGVyLmg6IERpdHRvLgorCiAyMDIxLTAzLTI2ICBQZXIgQXJuZSAgPHB2b2xsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIEVuZm9yY2Ugbm90aWZ5ZCBtZXNzYWdlIGZpbHRlcmluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRl
eCBjMTMxNjhlYmY0NzguLjMzYmE1N2ZmMGM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbi5oIgogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCiAjaW5jbHVkZSAiUHJlY29ubmVjdFRhc2suaCIKKyNpbmNsdWRlICJQcm94eUNv
bmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKICNpbmNsdWRl
ICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCkBAIC00MjUsNiArNDI2LDE1IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMm
JiBwYXJhbWV0ZXJzCiAgICAgUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OmVuc3VyZVdlYnNpdGVE
YXRhU3RvcmVTZXNzaW9uKCp0aGlzLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKIH0KIAordm9pZCBO
ZXR3b3JrUHJvY2Vzczo6YWRkUHJveHlDb25maWd1cmF0aW9uKFByb3h5Q29uZmlndXJhdGlvblBh
cmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQoreworICAgIGF1dG8gc2Vzc2lvbiA9IG5ldHdvcmtTZXNz
aW9uKHBhcmFtZXRlcnMuc2Vzc2lvbklEKTsKKyAgICBpZiAoIXNlc3Npb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIHNlc3Npb24tPmFkZFByb3h5Q29uZmlndXJhdGlvbihXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkU2Vzc2lvblN0b3JhZ2VRdW90
YU1hbmFnZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCB1aW50NjRfdCBkZWZhdWx0UXVvdGEs
IHVpbnQ2NF90IGRlZmF1bHRUaGlyZFBhcnR5UXVvdGEsIGNvbnN0IFN0cmluZyYgY2FjaGVSb290
UGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBjYWNoZVJvb3RQYXRoSGFuZGxlKQogewog
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fc2Vzc2lvblN0b3JhZ2VRdW90YU1hbmFnZXJzTG9jayk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5kZXgg
NWNlYmM3ZmQ1MTg3Li5hMDc5MjJiODFmOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTExMyw2ICsxMTMsNyBAQCBlbnVtIGNsYXNzIFN0
b3JhZ2VBY2Nlc3NTdGF0dXMgOiB1aW50OF90OwogZW51bSBjbGFzcyBXZWJzaXRlRGF0YUZldGNo
T3B0aW9uIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlIDogdWludDMyX3Q7
CiBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CitzdHJ1Y3QgUHJveHlD
b25maWd1cmF0aW9uUGFyYW1ldGVyczsKIHN0cnVjdCBXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVy
czsKIAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKQEAgLTIwNSw2ICsyMDYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmKTsKIAogICAgIHZvaWQgYWRk
V2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyYmKTsKKyAgICB2b2lk
IGFkZFByb3h5Q29uZmlndXJhdGlvbihQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzJiYpOwog
CiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKICAgICB2b2lkIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2UoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDlkMWVkODhl
YTA0YS4uZTM3ZmUzYzgyYzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTQwLDYgKzQwLDcgQEAgbWVz
c2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIENsZWFyQ2FjaGVk
Q3JlZGVudGlhbHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogCiAgICAgQWRkV2Vic2l0ZURh
dGFTdG9yZShzdHJ1Y3QgV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyB3ZWJzaXRl
RGF0YVN0b3JlUGFyYW1ldGVycyk7CisgICAgQWRkUHJveHlDb25maWd1cmF0aW9uKHN0cnVjdCBX
ZWJLaXQ6OlByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMgcHJveHlDb25maWd1cmF0aW9uUGFy
YW1ldGVycyk7CiAgICAgRGVzdHJveVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQog
CiAgICAgRmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgT3B0aW9uU2V0PFdl
YktpdDo6V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBXZWJLaXQ6OkNhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb24uaAppbmRleCBlMzkyZTk2MTdjMjEuLjgyZjgwZjlkNTA1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaApAQCAtNjEsNiArNjEsNyBA
QCBjbGFzcyBOZXR3b3JrU29ja2V0Q2hhbm5lbDsKIGNsYXNzIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTsKIGNsYXNzIFdlYlNvY2tldFRhc2s7CiBzdHJ1Y3QgTmV0d29ya1Nlc3Npb25D
cmVhdGlvblBhcmFtZXRlcnM7CitzdHJ1Y3QgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVyczsK
IAogZW51bSBjbGFzcyBXZWJzaXRlRGF0YVR5cGUgOiB1aW50MzJfdDsKIApAQCAtODgsNiArODks
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0
YVRhc2smKTsKICAgICB2b2lkIHVucmVnaXN0ZXJOZXR3b3JrRGF0YVRhc2soTmV0d29ya0RhdGFU
YXNrJik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgYWRkUHJveHlDb25maWd1cmF0aW9uKFByb3h5Q29u
ZmlndXJhdGlvblBhcmFtZXRlcnMmJikgeyB9OworCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUqIHJlc291cmNl
TG9hZFN0YXRpc3RpY3MoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3Mu
Z2V0KCk7IH0KICAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tN
ZWFzdXJlbWVudE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2
YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCmluZGV4IGFiMWZkMzhkNjQzZC4uNmNiZjM0
YTEyZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1ByaXZhdGVD
bGlja01lYXN1cmVtZW50TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJlbWVudE1hbmFnZXIuY3BwCkBAIC01MDIsNiArNTAyLDEw
IEBAIHZvaWQgUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpzZXRQQ01GcmF1ZFByZXZl
bnRpb25WYWx1ZXNGb3JUZXN0aW5nKFN0cmluCiAKIGJvb2wgUHJpdmF0ZUNsaWNrTWVhc3VyZW1l
bnRNYW5hZ2VyOjpmZWF0dXJlRW5hYmxlZCgpIGNvbnN0CiB7CisgICAgLy8gRklYTUU6IENhbGxl
cnMgb2YgImZlYXR1cmVFbmFibGVkIiBzaG91bGQgaGF2ZSBXZWJQYWdlUHJveHlJZGVudGlmaWVy
IGNvbnRleHQsCisgICAgLy8gYW5kIFdlYlBhZ2VQcm94eXMgY3VycmVudGx5IHVzaW5nIGFuIEhU
VFAgcHJveHkgZm9yIG5ldHdvcmtpbmcgc2hvdWxkIG5vdCBnZXQgUENNLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM4OTgKKyAgICAKICAgICByZXR1
cm4gbV9uZXR3b3JrU2Vzc2lvbiAmJiBtX25ldHdvcmtQcm9jZXNzLT5wcml2YXRlQ2xpY2tNZWFz
dXJlbWVudEVuYWJsZWQoKSAmJiAhbV9zZXNzaW9uSUQuaXNFcGhlbWVyYWwoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lv
bkNvY29hLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNz
aW9uQ29jb2EuaAppbmRleCAxYWNkZDI3MTRmNWMuLjc1ZTQzYjA2ODU3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNv
Y29hLmgKQEAgLTM4LDYgKzM4LDcgQEAgT0JKQ19DTEFTUyBfTlNIU1RTU3RvcmFnZTsKICNpbmNs
dWRlICJEb3dubG9hZElELmgiCiAjaW5jbHVkZSAiTmV0d29ya0RhdGFUYXNrQ29jb2EuaCIKICNp
bmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlByb3h5Q29uZmlndXJhdGlvbi5o
IgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJXZWJTb2Nr
ZXRUYXNrLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrTG9hZE1ldHJpY3MuaD4KQEAgLTEz
Niw5ICsxMzcsOSBAQCBwcml2YXRlOgogCiAgICAgc3RydWN0IFNlc3Npb25TZXQgOiBwdWJsaWMg
UmVmQ291bnRlZDxTZXNzaW9uU2V0PiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUmVm
PFNlc3Npb25TZXQ+IGNyZWF0ZSgpCisgICAgICAgIHN0YXRpYyBSZWY8U2Vzc2lvblNldD4gY3Jl
YXRlKFJlZlB0cjxQcm94eUNvbmZpZ3VyYXRpb24+JiYgcHJveHlDb25maWd1cmF0aW9uKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXNzaW9uU2V0KTsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNlc3Npb25TZXQoV1RGTW92ZShwcm94eUNv
bmZpZ3VyYXRpb24pKSk7CiAgICAgICAgIH0KICAgICAKICAgICAgICAgU2Vzc2lvbldyYXBwZXIm
IGlzb2xhdGVkU2Vzc2lvbihXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeSwgY29uc3Qg
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4sIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBO
ZXR3b3JrU2Vzc2lvbkNvY29hJik7CkBAIC0xNTEsMTggKzE1MiwyOCBAQCBwcml2YXRlOgogICAg
ICAgICBTZXNzaW9uV3JhcHBlciBzZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlOwogICAg
ICAgICBTZXNzaW9uV3JhcHBlciBlcGhlbWVyYWxTdGF0ZWxlc3NTZXNzaW9uOwogCisgICAgICAg
IFJlZlB0cjxQcm94eUNvbmZpZ3VyYXRpb24+IHByb3h5Q29uZmlndXJhdGlvbjsKKwogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFNlc3Npb25TZXQoKSA9IGRlZmF1bHQ7CisgICAgICAgIFNlc3Npb25T
ZXQoUmVmUHRyPFByb3h5Q29uZmlndXJhdGlvbj4mJiBwcm94eUNvbmZpZ3VyYXRpb24pCisgICAg
ICAgICAgICA6IHByb3h5Q29uZmlndXJhdGlvbihXVEZNb3ZlKHByb3h5Q29uZmlndXJhdGlvbikp
CisgICAgICAgIHsKKyAgICAgICAgfQogICAgIH07CiAKICAgICBSZWY8U2Vzc2lvblNldD4gbV9k
ZWZhdWx0U2Vzc2lvblNldDsKKyAgICBIYXNoTWFwPFByb3h5Q29uZmlndXJhdGlvbklkZW50aWZp
ZXIsIFJlZjxTZXNzaW9uU2V0Pj4gbV9wZXJQcm94eVNlc3Npb25TZXRzOwogICAgIEhhc2hNYXA8
V2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVmPFNlc3Npb25TZXQ+PiBtX3BlclBhZ2VTZXNzaW9u
U2V0czsKIAorICAgIHZvaWQgYWRkUHJveHlDb25maWd1cmF0aW9uKFByb3h5Q29uZmlndXJhdGlv
blBhcmFtZXRlcnMmJikgZmluYWw7CisKICAgICB2b2lkIGluaXRpYWxpemVTdGFuZGFyZFNlc3Np
b25zSW5TZXQoU2Vzc2lvblNldCYsIE5TVVJMU2Vzc2lvbkNvbmZpZ3VyYXRpb24gKik7CisgICAg
dm9pZCBpbml0aWFsaXplUHJveHlTZXNzaW9uU2V0KFNlc3Npb25TZXQmKTsKKwogICAgIFNlc3Np
b25TZXQmIHNlc3Npb25TZXRGb3JQYWdlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIpOwogICAgIGNv
bnN0IFNlc3Npb25TZXQmIHNlc3Npb25TZXRGb3JQYWdlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIp
IGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZUFuZENhbmNlbFNlc3Npb25TZXQoU2Vzc2lvblNl
dCYpOwotICAgIAorCiAgICAgU3RyaW5nIG1fYm91bmRJbnRlcmZhY2VJZGVudGlmaWVyOwogICAg
IFN0cmluZyBtX3NvdXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcjsKICAgICBTdHJpbmcg
bV9zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0K
aW5kZXggMjRhNDJkZjMxMTkwLi5jNTc0MzNkZjcwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KQEAg
LTM2LDYgKzM2LDggQEAKICNpbXBvcnQgIk5ldHdvcmtMb2FkLmgiCiAjaW1wb3J0ICJOZXR3b3Jr
UHJvY2Vzcy5oIgogI2ltcG9ydCAiTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCIK
KyNpbXBvcnQgIlByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaCIKKyNpbXBvcnQgIlByb3h5
Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJXZWJTb2NrZXRUYXNrLmgiCiAjaW1w
b3J0IDxGb3VuZGF0aW9uL05TVVJMU2Vzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9DcmVkZW50
aWFsLmg+CkBAIC0xMTYwLDcgKzExNjIsNyBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZVNlc3Npb25D
bGVhbnVwKE5ldHdvcmtTZXNzaW9uQ29jb2EmIHNlc3Npb24sIGNvbnN0IE5ldHdvcmtTZQogCiBO
ZXR3b3JrU2Vzc2lvbkNvY29hOjpOZXR3b3JrU2Vzc2lvbkNvY29hKE5ldHdvcmtQcm9jZXNzJiBu
ZXR3b3JrUHJvY2VzcywgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0
ZXJzKQogICAgIDogTmV0d29ya1Nlc3Npb24obmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRlcnMpCi0g
ICAgLCBtX2RlZmF1bHRTZXNzaW9uU2V0KFNlc3Npb25TZXQ6OmNyZWF0ZSgpKQorICAgICwgbV9k
ZWZhdWx0U2Vzc2lvblNldChTZXNzaW9uU2V0OjpjcmVhdGUobnVsbHB0cikpCiAgICAgLCBtX2Jv
dW5kSW50ZXJmYWNlSWRlbnRpZmllcihwYXJhbWV0ZXJzLmJvdW5kSW50ZXJmYWNlSWRlbnRpZmll
cikKICAgICAsIG1fc291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKHBhcmFtZXRlcnMu
c291cmNlQXBwbGljYXRpb25CdW5kbGVJZGVudGlmaWVyKQogICAgICwgbV9zb3VyY2VBcHBsaWNh
dGlvblNlY29uZGFyeUlkZW50aWZpZXIocGFyYW1ldGVycy5zb3VyY2VBcHBsaWNhdGlvblNlY29u
ZGFyeUlkZW50aWZpZXIpCkBAIC0xMjk4LDE2ICsxMzAwLDQ3IEBAIHZvaWQgTmV0d29ya1Nlc3Np
b25Db2NvYTo6aW5pdGlhbGl6ZVN0YW5kYXJkU2Vzc2lvbnNJblNldChTZXNzaW9uU2V0JiBzZXNz
aW9uU2V0CiAgICAgc2Vzc2lvblNldC5zZXNzaW9uV2l0aG91dENyZWRlbnRpYWxTdG9yYWdlLmlu
aXRpYWxpemUoY29uZmlndXJhdGlvbiwgKnRoaXMsIFdlYkNvcmU6OlN0b3JlZENyZWRlbnRpYWxz
UG9saWN5OjpEb05vdFVzZSwgTmF2aWdhdGluZ1RvQXBwQm91bmREb21haW46Ok5vKTsKIH0KIAor
dm9pZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjppbml0aWFsaXplUHJveHlTZXNzaW9uU2V0KFNlc3Np
b25TZXQmIHNlc3Npb25TZXQpCit7CisgICAgQVNTRVJUKHNlc3Npb25TZXQucHJveHlDb25maWd1
cmF0aW9uKTsKKyAgICBBU1NFUlQoc2Vzc2lvblNldC5wcm94eUNvbmZpZ3VyYXRpb24tPnByb3h5
Q29uZmlndXJhdGlvbkRpY3Rpb25hcnkoKSk7CisKKyAgICBOU1VSTFNlc3Npb25Db25maWd1cmF0
aW9uICpjb25maWd1cmF0aW9uID0gW21fZGVmYXVsdFNlc3Npb25TZXQtPnNlc3Npb25XaXRoQ3Jl
ZGVudGlhbFN0b3JhZ2Uuc2Vzc2lvbi5nZXQoKS5jb25maWd1cmF0aW9uIGNvcHldOworICAgIGNv
bmZpZ3VyYXRpb24uY29ubmVjdGlvblByb3h5RGljdGlvbmFyeSA9IChOU0RpY3Rpb25hcnkgKilz
ZXNzaW9uU2V0LnByb3h5Q29uZmlndXJhdGlvbi0+cHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFy
eSgpOworICAgIGluaXRpYWxpemVTdGFuZGFyZFNlc3Npb25zSW5TZXQoc2Vzc2lvblNldCwgY29u
ZmlndXJhdGlvbik7Cit9CisKIE5ldHdvcmtTZXNzaW9uQ29jb2E6OlNlc3Npb25TZXQmIE5ldHdv
cmtTZXNzaW9uQ29jb2E6OnNlc3Npb25TZXRGb3JQYWdlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIg
d2ViUGFnZVByb3h5SUQpCiB7CisjaWZuZGVmIE5ERUJVRworICAgIGlmICghd2ViUGFnZVByb3h5
SUQpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9u
U2V0Rm9yUGFnZSAtIEludmFsaWQgV2ViUGFnZVByb3h5SWRlbnRpZmllciBjb250ZXh0LCBmYWxs
aW5nIGJhY2sgdG8gdGhlIGRlZmF1bHQgU2Vzc2lvblNldC4gUGxlYXNlIGZpbGUgYSBidWcuIik7
CisgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOworICAgIH0KKyNlbmRpZgorCiAgICAgU2Vz
c2lvblNldCogc2Vzc2lvblNldCA9IHdlYlBhZ2VQcm94eUlEID8gbV9wZXJQYWdlU2Vzc2lvblNl
dHMuZ2V0KHdlYlBhZ2VQcm94eUlEKSA6IG51bGxwdHI7CiAgICAgcmV0dXJuIHNlc3Npb25TZXQg
PyAqc2Vzc2lvblNldCA6IG1fZGVmYXVsdFNlc3Npb25TZXQuZ2V0KCk7CiB9CiAKIGNvbnN0IE5l
dHdvcmtTZXNzaW9uQ29jb2E6OlNlc3Npb25TZXQmIE5ldHdvcmtTZXNzaW9uQ29jb2E6OnNlc3Np
b25TZXRGb3JQYWdlKFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQpIGNvbnN0
CiB7Ci0gICAgU2Vzc2lvblNldCogc2Vzc2lvblNldCA9IHdlYlBhZ2VQcm94eUlEID8gbV9wZXJQ
YWdlU2Vzc2lvblNldHMuZ2V0KHdlYlBhZ2VQcm94eUlEKSA6IG51bGxwdHI7Ci0gICAgcmV0dXJu
IHNlc3Npb25TZXQgPyAqc2Vzc2lvblNldCA6IG1fZGVmYXVsdFNlc3Npb25TZXQuZ2V0KCk7Cisg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TmV0d29ya1Nlc3Npb25Db2NvYSY+KCp0aGlzKS5zZXNzaW9u
U2V0Rm9yUGFnZSh3ZWJQYWdlUHJveHlJRCk7Cit9CisKK3ZvaWQgTmV0d29ya1Nlc3Npb25Db2Nv
YTo6YWRkUHJveHlDb25maWd1cmF0aW9uKFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMmJiBw
YXJhbWV0ZXJzKQoreworICAgIEFTU0VSVChwYXJhbWV0ZXJzLnNlc3Npb25JRCAmJiBtX3Nlc3Np
b25JRCA9PSBwYXJhbWV0ZXJzLnNlc3Npb25JRCk7CisKKyAgICBhdXRvIHNlc3Npb25TZXQgPSBt
X3BlclByb3h5U2Vzc2lvblNldHMuZW5zdXJlKHBhcmFtZXRlcnMucHJveHlDb25maWd1cmF0aW9u
SWRlbnRpZmllciwgWyZdIHsKKyAgICAgICAgYXV0byBwcm94eUNvbmZpZ3VyYXRpb24gPSBQcm94
eUNvbmZpZ3VyYXRpb25SZWdpc3RyeTo6c2luZ2xldG9uKCkuZ2V0T3JDcmVhdGVQcm94eUNvbmZp
Z3VyYXRpb25CeUlkZW50aWZpZXIocGFyYW1ldGVycy5wcm94eUNvbmZpZ3VyYXRpb25JZGVudGlm
aWVyLCBXVEZNb3ZlKHBhcmFtZXRlcnMucHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSkpOwor
CisgICAgICAgIGF1dG8gbmV3U2V0ID0gU2Vzc2lvblNldDo6Y3JlYXRlKFdURk1vdmUocHJveHlD
b25maWd1cmF0aW9uKSk7CisgICAgICAgIGluaXRpYWxpemVQcm94eVNlc3Npb25TZXQobmV3U2V0
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG5ld1NldDsKKyAgICB9KTsKKyAgICAKKyAgICBtX3Bl
clBhZ2VTZXNzaW9uU2V0cy5zZXQocGFyYW1ldGVycy53ZWJQYWdlUHJveHlJRCwgc2Vzc2lvblNl
dC5pdGVyYXRvci0+dmFsdWUpOwogfQogCiBTZXNzaW9uV3JhcHBlciYgTmV0d29ya1Nlc3Npb25D
b2NvYTo6aW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVzc1Nlc3Npb25JZk5lZWRlZChXZWJQYWdl
UHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFp
biBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvQ29jb2EvUHJveHlDb25maWd1cmF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9Db2NvYS9Qcm94eUNvbmZpZ3VyYXRpb25Db2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmJlZjY0YzAyNjY0ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1Byb3h5Q29uZmlndXJhdGlvbkNvY29hLm1tCkBA
IC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUHJveHlDb25maWd1cmF0aW9uLmgiCisKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb25S
ZWdpc3RyeS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUmVmUHRyPFByb3h5Q29uZmlndXJh
dGlvbj4gUHJveHlDb25maWd1cmF0aW9uOjpjcmVhdGUoTlNEaWN0aW9uYXJ5ICpwcm94eUNvbmZp
Z3VyYXRpb25EaWN0aW9uYXJ5KQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0UmVm
KG5ldyBQcm94eUNvbmZpZ3VyYXRpb24pOworICAgIGNvbmZpZ3VyYXRpb24tPm1faWRlbnRpZmll
ciA9IFByb3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgY29uZmln
dXJhdGlvbi0+bV9wcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5ID0gKENGRGljdGlvbmFyeVJl
Zilwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5OworICAgIHJldHVybiBjb25maWd1cmF0aW9u
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL0NvY29hL1Byb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5Q29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9Db2NvYS9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29hLm1tCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGFlM2YzYzI0ODExCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvUHJveHlDb25maWd1cmF0
aW9uUmVnaXN0cnlDb2NvYS5tbQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9y
dCAiY29uZmlnLmgiCisjaW1wb3J0ICJQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5oIgorCisj
aW1wb3J0ICJQcm94eUNvbmZpZ3VyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Jl
ZlB0cjxQcm94eUNvbmZpZ3VyYXRpb24+IFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5OjpnZXRP
ckNyZWF0ZVByb3h5Q29uZmlndXJhdGlvbihOU0RpY3Rpb25hcnkgKnByb3h5Q29uZmlndXJhdGlv
bkRpY3Rpb25hcnkpCit7CisgICAgaWYgKCFtX2RpY3Rpb25hcnlUb1Byb3h5Q29uZmlndXJhdGlv
bk1hcCkKKyAgICAgICAgbV9kaWN0aW9uYXJ5VG9Qcm94eUNvbmZpZ3VyYXRpb25NYXAgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlRGljdGlvbmFyeTxOU0RpY3Rpb25hcnkgKiwgTlNOdW1iZXIgKj4gYWxs
b2NdIGluaXRdKTsKKyAgICAKKyAgICBOU051bWJlciAqbnNQcm94eUNvbmZpZ3VyYXRpb25JRCA9
IFttX2RpY3Rpb25hcnlUb1Byb3h5Q29uZmlndXJhdGlvbk1hcC5nZXQoKSBvYmplY3RGb3JLZXk6
cHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeV07CisgICAgaWYgKG5zUHJveHlDb25maWd1cmF0
aW9uSUQpIHsKKyAgICAgICAgYXV0byBwcm94eUNvbmZpZ3VyYXRpb25JRCA9IG1ha2VPYmplY3RJ
ZGVudGlmaWVyPFdlYktpdDo6UHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllclR5cGU+KG5zUHJv
eHlDb25maWd1cmF0aW9uSUQudW5zaWduZWRMb25nTG9uZ1ZhbHVlKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChhdXRvIHByb3h5Q29uZmlndXJhdGlvbiA9IG1fcHJveHlDb25maWd1cmF0aW9ucy5n
ZXQocHJveHlDb25maWd1cmF0aW9uSUQpKQorICAgICAgICAgICAgcmV0dXJuIHByb3h5Q29uZmln
dXJhdGlvbjsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBvbGQgUHJveHlDb25maWd1cmF0aW9u
IGZvciB0aGUgZXF1aXZhbGVudCBOU0RpY3Rpb25hcnkgaGFzIGJlZW4gZGVhbGxvY2F0ZWQsCisg
ICAgICAgIC8vIHNvIGxldCdzIGFsc28gZm9yZ2V0IGFib3V0IHRoZSBvbGQgTlNEaWN0aW9uYXJ5
IHRoYXQgc3Bhd25lZCBpdC4KKyAgICAgICAgW21fZGljdGlvbmFyeVRvUHJveHlDb25maWd1cmF0
aW9uTWFwLmdldCgpIHJlbW92ZU9iamVjdEZvcktleTpwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9u
YXJ5XTsKKyAgICB9CisKKyAgICBhdXRvIG5ld0lkZW50aWZpZXIgPSBQcm94eUNvbmZpZ3VyYXRp
b25JZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Byb3h5Q29u
ZmlndXJhdGlvbnMuZW5zdXJlKG5ld0lkZW50aWZpZXIsIFtdKCkgeworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9KS5pdGVyYXRvcjsKKworICAgIGF1dG8gcHJveHlDb25maWd1cmF0aW9u
ID0gUHJveHlDb25maWd1cmF0aW9uOjpjcmVhdGUobmV3SWRlbnRpZmllciwgKENGRGljdGlvbmFy
eVJlZilwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5KTsKKyAgICBpdGVyYXRvci0+dmFsdWUg
PSBwcm94eUNvbmZpZ3VyYXRpb24uZ2V0KCk7CisgICAgW21fZGljdGlvbmFyeVRvUHJveHlDb25m
aWd1cmF0aW9uTWFwLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVk
TG9uZ0xvbmc6bmV3SWRlbnRpZmllci50b1VJbnQ2NCgpXSBmb3JLZXk6cHJveHlDb25maWd1cmF0
aW9uRGljdGlvbmFyeV07CisKKyAgICByZXR1cm4gcHJveHlDb25maWd1cmF0aW9uOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1By
b3h5Q29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3Vy
YXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZGQ0MGE0
NGUyYmFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25m
aWd1cmF0aW9uLmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlByb3h5Q29uZmlndXJhdGlvbi5oIgorCisjaW5jbHVkZSAiUHJv
eHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIlByb3h5Q29uZmlndXJhdGlv
blJlZ2lzdHJ5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisjaWYgVVNFKENGKQorUmVmUHRy
PFByb3h5Q29uZmlndXJhdGlvbj4gUHJveHlDb25maWd1cmF0aW9uOjpjcmVhdGUoUHJveHlDb25m
aWd1cmF0aW9uSWRlbnRpZmllciBwcm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyLCBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiYmIGRpY3Rpb25hcnkpCit7CisgICAgYXV0byBjb25maWd1cmF0
aW9uID0gYWRvcHRSZWYobmV3IFByb3h5Q29uZmlndXJhdGlvbik7CisgICAgY29uZmlndXJhdGlv
bi0+bV9pZGVudGlmaWVyID0gcHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllcjsKKyAgICBjb25m
aWd1cmF0aW9uLT5tX3Byb3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnkgPSBXVEZNb3ZlKGRpY3Rp
b25hcnkpOworICAgIHJldHVybiBjb25maWd1cmF0aW9uOworfQorI2VuZGlmIC8vIFVTRShDRikK
KworUHJveHlDb25maWd1cmF0aW9uOjpQcm94eUNvbmZpZ3VyYXRpb24oKQoreworfQorCitQcm94
eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIFByb3h5Q29uZmlndXJhdGlvbjo6cGFyYW1ldGVycygp
IGNvbnN0Cit7CisgICAgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyByZXN1bHQ7CisgICAg
cmVzdWx0LnByb3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXIgPSBtX2lkZW50aWZpZXI7CisKKyNp
ZiBVU0UoQ0YpCisgICAgcmVzdWx0LnByb3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnkgPSBtX3By
b3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1Byb3h5Q29uZmlndXJhdGlvbjo6flByb3h5Q29uZmlndXJhdGlvbigpCit7CisgICAg
UHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnk6OnNpbmdsZXRvbigpLnByb3h5Q29uZmlndXJhdGlv
bkRlc3Ryb3llZCgqdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmY3ZDRmN2ZlNTVhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvbi5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24u
aD4KKyNlbmRpZgorCitPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2VudW0gUHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcg
UHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UHJveHlDb25m
aWd1cmF0aW9uSWRlbnRpZmllclR5cGU+OworCitzdHJ1Y3QgUHJveHlDb25maWd1cmF0aW9uUGFy
YW1ldGVyczsKKworY2xhc3MgUHJveHlDb25maWd1cmF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8
UHJveHlDb25maWd1cmF0aW9uPiB7CitwdWJsaWM6CisgICAgflByb3h5Q29uZmlndXJhdGlvbigp
OworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgc3RhdGljIFJlZlB0cjxQcm94eUNvbmZpZ3Vy
YXRpb24+IGNyZWF0ZShOU0RpY3Rpb25hcnkgKik7CisjZW5kaWYKKworI2lmIFVTRShDRikKKyAg
ICBzdGF0aWMgUmVmUHRyPFByb3h5Q29uZmlndXJhdGlvbj4gY3JlYXRlKFByb3h5Q29uZmlndXJh
dGlvbklkZW50aWZpZXIsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiYpOworICAgIENGRGlj
dGlvbmFyeVJlZiBwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1cm4g
bV9wcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5LmdldCgpOyB9CisjZW5kaWYKKworICAgIFBy
b3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXIgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
aWRlbnRpZmllcjsgfQorCisgICAgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyBwYXJhbWV0
ZXJzKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUHJveHlDb25maWd1cmF0aW9uKCk7CisgICAg
UHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisjaWYgVVNFKENGKQor
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IG1fcHJveHlDb25maWd1cmF0aW9uRGljdGlv
bmFyeTsKKyNlbmRpZgorCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMTU3ODQ1NzRlNjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25QYXJh
bWV0ZXJzLmNwcApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaCIKKworI2luY2x1
ZGUgIkFyZ3VtZW50Q29kZXJzQ0YuaCIKKyNpbmNsdWRlICJEZWNvZGVyLmgiCisjaW5jbHVkZSAi
RW5jb2Rlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBQcm94eUNvbmZpZ3VyYXRp
b25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAg
IGVuY29kZXIgPDwgc2Vzc2lvbklEIDw8IHdlYlBhZ2VQcm94eUlEIDw8IHByb3h5Q29uZmlndXJh
dGlvbklkZW50aWZpZXI7CisgICAgSVBDOjplbmNvZGUoZW5jb2RlciwgcHJveHlDb25maWd1cmF0
aW9uRGljdGlvbmFyeS5nZXQoKSk7Cit9CisKK09wdGlvbmFsPFByb3h5Q29uZmlndXJhdGlvblBh
cmFtZXRlcnM+IFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY29kZXIpCit7CisgICAgT3B0aW9uYWw8UEFMOjpTZXNzaW9uSUQ+IHNlc3Npb25JRDsK
KyAgICBkZWNvZGVyID4+IHNlc3Npb25JRDsKKyAgICBpZiAoIXNlc3Npb25JRCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPFdlYlBhZ2VQcm94eUlkZW50aWZp
ZXI+IHdlYlBhZ2VQcm94eUlEOworICAgIGRlY29kZXIgPj4gd2ViUGFnZVByb3h5SUQ7CisgICAg
aWYgKCF3ZWJQYWdlUHJveHlJRCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IE9wdGlvbmFsPFByb3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXI+IHByb3h5Q29uZmlndXJhdGlv
bklkZW50aWZpZXI7CisgICAgZGVjb2RlciA+PiBwcm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVy
OworICAgIGlmICghcHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHByb3h5Q29u
ZmlndXJhdGlvbkRpY3Rpb25hcnk7CisgICAgaWYgKCFJUEM6OmRlY29kZShkZWNvZGVyLCBwcm94
eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHJldHVybiB7eworICAgICAgICBXVEZNb3ZlKCpzZXNzaW9uSUQpLAorICAgICAgICBX
VEZNb3ZlKCp3ZWJQYWdlUHJveHlJRCksCisgICAgICAgIFdURk1vdmUoKnByb3h5Q29uZmlndXJh
dGlvbklkZW50aWZpZXIpLAorICAgICAgICBXVEZNb3ZlKHByb3h5Q29uZmlndXJhdGlvbkRpY3Rp
b25hcnkpLAorICAgIH19OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJmNjJhYjNkMzZmZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRl
cnMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJQcm94eUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFVTRShDRikKKyNpbmNsdWRl
IDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBJ
UEMgeworY2xhc3MgRGVjb2RlcjsKK2NsYXNzIEVuY29kZXI7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdHJ1Y3QgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyB7CisgICAgUHJveHlD
b25maWd1cmF0aW9uUGFyYW1ldGVycygpID0gZGVmYXVsdDsKKyAgICBQcm94eUNvbmZpZ3VyYXRp
b25QYXJhbWV0ZXJzKFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMmJikgPSBkZWZhdWx0Owor
ICAgIFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMmIG9wZXJhdG9yPShQcm94eUNvbmZpZ3Vy
YXRpb25QYXJhbWV0ZXJzJiYpID0gZGVmYXVsdDsKKworICAgIHZvaWQgZW5jb2RlKElQQzo6RW5j
b2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBPcHRpb25hbDxQcm94eUNvbmZpZ3VyYXRpb25QYXJh
bWV0ZXJzPiBkZWNvZGUoSVBDOjpEZWNvZGVyJik7CisKKyAgICBQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQgeyBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpIH07CisgICAgV2ViUGFn
ZVByb3h5SWRlbnRpZmllciB3ZWJQYWdlUHJveHlJRDsKKyAgICBQcm94eUNvbmZpZ3VyYXRpb25J
ZGVudGlmaWVyIHByb3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXI7CisKKyNpZiBVU0UoQ0YpCisg
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFy
eTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4wODE3Nzk5NTI0MzEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5jcHAK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5oIgorCisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQcm94eUNvbmZpZ3VyYXRpb25S
ZWdpc3RyeSYgUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnk6OnNpbmdsZXRvbigpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5PiByZWdpc3Ry
eTsKKyAgICByZXR1cm4gcmVnaXN0cnk7Cit9CisKKyNpZiBVU0UoQ0YpCitSZWZQdHI8UHJveHlD
b25maWd1cmF0aW9uPiBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeTo6Z2V0T3JDcmVhdGVQcm94
eUNvbmZpZ3VyYXRpb25CeUlkZW50aWZpZXIoUHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllciBw
cm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiYm
IHByb3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnkpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1f
cHJveHlDb25maWd1cmF0aW9ucy5lbnN1cmUocHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllciwg
W10oKSB7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0pLml0ZXJhdG9yOworCisgICAg
UmVmUHRyPFByb3h5Q29uZmlndXJhdGlvbj4gcHJveHlDb25maWd1cmF0aW9uID0gaXRlcmF0b3It
PnZhbHVlOworICAgIGlmICghcHJveHlDb25maWd1cmF0aW9uKSB7CisgICAgICAgIHByb3h5Q29u
ZmlndXJhdGlvbiA9IFByb3h5Q29uZmlndXJhdGlvbjo6Y3JlYXRlKHByb3h5Q29uZmlndXJhdGlv
bklkZW50aWZpZXIsIFdURk1vdmUocHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSkpOworICAg
ICAgICBpdGVyYXRvci0+dmFsdWUgPSBwcm94eUNvbmZpZ3VyYXRpb24uZ2V0KCk7CisgICAgfQor
CisgICAgcmV0dXJuIHByb3h5Q29uZmlndXJhdGlvbjsKK30KKyNlbmRpZgorCit2b2lkIFByb3h5
Q29uZmlndXJhdGlvblJlZ2lzdHJ5Ojpwcm94eUNvbmZpZ3VyYXRpb25EZXN0cm95ZWQoUHJveHlD
b25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIGF1dG8gdGFrZW4gPSBtX3Byb3h5
Q29uZmlndXJhdGlvbnMudGFrZShjb25maWd1cmF0aW9uLmlkZW50aWZpZXIoKSk7CisgICAgQVNT
RVJUX1VOVVNFRCh0YWtlbiwgdGFrZW4gPT0gJmNvbmZpZ3VyYXRpb24pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29u
ZmlndXJhdGlvblJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3Vy
YXRpb25SZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u
YWFiNDcxOWQ3ZjdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUHJv
eHlDb25maWd1cmF0aW9uUmVnaXN0cnkuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCisjaWYg
VVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjZW5k
aWYKKyNpZiBQTEFURk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OworT0JKQ19D
TEFTUyBOU011dGFibGVEaWN0aW9uYXJ5OworT0JKQ19DTEFTUyBOU051bWJlcjsKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5KTsK
K3B1YmxpYzoKKyAgICBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeSgpID0gZGVmYXVsdDsKKyAg
ICBzdGF0aWMgUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkmIHNpbmdsZXRvbigpOworCisjaWYg
VVNFKENGKQorICAgIFJlZlB0cjxQcm94eUNvbmZpZ3VyYXRpb24+IGdldE9yQ3JlYXRlUHJveHlD
b25maWd1cmF0aW9uQnlJZGVudGlmaWVyKFByb3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXIsIFJl
dGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiYpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICBSZWZQdHI8UHJveHlDb25maWd1cmF0aW9uPiBnZXRPckNyZWF0ZVByb3h5Q29uZmln
dXJhdGlvbihOU0RpY3Rpb25hcnkgKik7CisjZW5kaWYKKworICAgIHZvaWQgcHJveHlDb25maWd1
cmF0aW9uRGVzdHJveWVkKFByb3h5Q29uZmlndXJhdGlvbiYpOworCitwcml2YXRlOgorICAgIEhh
c2hNYXA8UHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllciwgUHJveHlDb25maWd1cmF0aW9uKj4g
bV9wcm94eUNvbmZpZ3VyYXRpb25zOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUmV0YWlu
UHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG1fZGljdGlvbmFyeVRvUHJveHlDb25maWd1cmF0aW9u
TWFwOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9Db3JlTWVkaWFXcmFwcGVk
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvQ29yZU1lZGlh
V3JhcHBlZC5oCmluZGV4IDFjMDY1YmQ2NGNlOC4uMjQyOGUzNWJkODdjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvQ29yZU1lZGlhV3JhcHBl
ZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9Db3Jl
TWVkaWFXcmFwcGVkLmgKQEAgLTI5LDcgKzI5LDEwIEBACiAKICNpbmNsdWRlIDxwYWwvc3BpL2Nv
Y29hL01lZGlhVG9vbGJveFNQSS5oPgogI2luY2x1ZGUgPHd0Zi9Gb3JiaWRIZWFwQWxsb2NhdGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxl
Q3Vyc29yLmgKaW5kZXggNjg3YjEzMDA0N2E4Li5hYzVjOWYyZWJjMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNv
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVNhbXBsZUN1cnNvci5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJDb3JlTWVkaWFX
cmFwcGVkLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
SWRlbnRpZmllZC5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgogCkBAIC00OCw4ICs0OSw4IEBAIGNsYXNzIE1lZGlhVHJhY2tSZWFkZXI7CiAK
IGNsYXNzIE1lZGlhU2FtcGxlQ3Vyc29yIDogcHVibGljIENvcmVNZWRpYVdyYXBwZWQ8TWVkaWFT
YW1wbGVDdXJzb3I+LCBUaHJlYWRTYWZlSWRlbnRpZmllZDxNZWRpYVNhbXBsZUN1cnNvcj4gewog
cHVibGljOgotICAgIHVzaW5nIERlY29kZU9yZGVySXRlcmF0b3IgPSBEZWNvZGVPcmRlclNhbXBs
ZU1hcDo6aXRlcmF0b3I7Ci0gICAgdXNpbmcgUHJlc2VudGF0aW9uT3JkZXJJdGVyYXRvciA9IFBy
ZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcjsKKyAgICB1c2luZyBEZWNvZGVPcmRl
ckl0ZXJhdG9yID0gV2ViQ29yZTo6RGVjb2RlT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yOworICAg
IHVzaW5nIFByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3IgPSBXZWJDb3JlOjpQcmVzZW50YXRpb25P
cmRlclNhbXBsZU1hcDo6aXRlcmF0b3I7CiAgICAgdXNpbmcgTG9jYXRvciA9IFZhcmlhbnQ8TWVk
aWFUaW1lLCBEZWNvZGVPcmRlckl0ZXJhdG9yLCBQcmVzZW50YXRpb25PcmRlckl0ZXJhdG9yPjsK
IAogICAgIHN0cnVjdCBUaW1pbmcgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaCBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmgKaW5kZXggMDMz
ZTc0NTI1ZjJkLi40ZGUxMDFkZjJhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmgKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaApAQCAt
MzAsMTMgKzMwLDExIEBACiAjaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBlZC5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvU2FtcGxlTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9Mb2dnZXIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKIERFQ0xBUkVf
Q09SRV9NRURJQV9UUkFJVFMoVHJhY2tSZWFkZXIpOwogCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNz
IFdvcmtRdWV1ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQXVkaW9UcmFja1By
aXZhdGU7CiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOwpAQCAtNTQsNyArNTIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mgd3JhcHBlckNsYXNzKCk7
CiAgICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQoKTsKICAgICBzdGF0aWMg
Q29yZU1lZGlhV3JhcHBlZDxNZWRpYVRyYWNrUmVhZGVyPiogdW53cmFwKENNQmFzZU9iamVjdFJl
Zik7Ci0gICAgc3RhdGljIFdURjo6V29ya1F1ZXVlJiBzdG9yYWdlUXVldWUoKTsKKyAgICBzdGF0
aWMgV29ya1F1ZXVlJiBzdG9yYWdlUXVldWUoKTsKIAogICAgIHN0YXRpYyBSZWZQdHI8TWVkaWFU
cmFja1JlYWRlcj4gY3JlYXRlKEFsbG9jYXRvciYmLCBjb25zdCBNZWRpYUZvcm1hdFJlYWRlciYs
IENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9vbD4pOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRl
eCAzZWVkNGIyYTA3ZTAuLmI1N2E1ZDc4MWVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0xODAsNiArMTgw
LDkgQEAgU2hhcmVkL05hdmlnYXRpb25BY3Rpb25EYXRhLmNwcAogU2hhcmVkL1BlcnNpc3RlbmN5
VXRpbHMuY3BwCiBTaGFyZWQvUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmNwcAogU2hhcmVkL1ByaW50
SW5mby5jcHAKK1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb24uY3BwCitTaGFyZWQvUHJveHlDb25m
aWd1cmF0aW9uUGFyYW1ldGVycy5jcHAKK1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3Ry
eS5jcHAKIFNoYXJlZC9SVENOZXR3b3JrLmNwcAogU2hhcmVkL1JUQ1BhY2tldE9wdGlvbnMuY3Bw
CiBTaGFyZWQvU2VydmljZVdvcmtlckluaXRpYWxpemF0aW9uRGF0YS5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dAppbmRleCBkZDRkMmE1MDc2NTcuLjE1MDljMThkYjZkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dApAQCAtMTYwLDYgKzE2MCw4IEBAIFNoYXJlZC9Db2NvYS9EYXRhRGV0ZWN0aW9uUmVz
dWx0Lm1tCiBTaGFyZWQvQ29jb2EvSW5zZXJ0VGV4dE9wdGlvbnMuY3BwCiBTaGFyZWQvQ29jb2Ev
TG9hZFBhcmFtZXRlcnNDb2NvYS5tbQogU2hhcmVkL0NvY29hL1BERktpdFNvZnRMaW5rLm1tCitT
aGFyZWQvQ29jb2EvUHJveHlDb25maWd1cmF0aW9uQ29jb2EubW0KK1NoYXJlZC9Db2NvYS9Qcm94
eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29hLm1tCiBTaGFyZWQvQ29jb2EvU2FuZGJveEV4dGVu
c2lvbkNvY29hLm1tCiBTaGFyZWQvQ29jb2EvU2FuZGJveEluaXRpYWxpYXRpb25QYXJhbWV0ZXJz
Q29jb2EubW0KIFNoYXJlZC9Db2NvYS9TYW5kYm94VXRpbGl0aWVzLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVBhZ2VDb25maWd1cmF0aW9uLmNwcAppbmRleCBh
MzM1MmU2ZWI5YzcuLmFkNDcxNDNkOTRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSVBhZ2VDb25maWd1cmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJBUElX
ZWJzaXRlUG9saWNpZXMuaCIKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb24uaCIKICNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlcy5oIgpAQCAtOTUsNyArOTYsOCBAQCBSZWY8UGFnZUNvbmZpZ3VyYXRp
b24+IFBhZ2VDb25maWd1cmF0aW9uOjpjb3B5KCkgY29uc3QKIAogICAgIGNvcHktPm1fbWVkaWFD
YXB0dXJlRW5hYmxlZCA9IHRoaXMtPm1fbWVkaWFDYXB0dXJlRW5hYmxlZDsKICAgICBjb3B5LT5t
X2h0dHBzVXBncmFkZUVuYWJsZWQgPSB0aGlzLT5tX2h0dHBzVXBncmFkZUVuYWJsZWQ7Ci0KKyAg
ICBjb3B5LT5tX3Byb3h5Q29uZmlndXJhdGlvbiA9IHRoaXMtPm1fcHJveHlDb25maWd1cmF0aW9u
OworICAgIAogICAgIHJldHVybiBjb3B5OwogfQogCkBAIC0xOTAsNiArMTkyLDE2IEBAIHZvaWQg
UGFnZUNvbmZpZ3VyYXRpb246OnNldFVSTFNjaGVtZUhhbmRsZXJGb3JVUkxTY2hlbWUoUmVmPFdl
YktpdDo6V2ViVVJMU2NoZW1lCiAgICAgbV91cmxTY2hlbWVIYW5kbGVycy5zZXQoc2NoZW1lLCBX
VEZNb3ZlKGhhbmRsZXIpKTsKIH0KIAorV2ViS2l0OjpQcm94eUNvbmZpZ3VyYXRpb24qIFBhZ2VD
b25maWd1cmF0aW9uOjpwcm94eUNvbmZpZ3VyYXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBt
X3Byb3h5Q29uZmlndXJhdGlvbi5nZXQoKTsKK30KKwordm9pZCBQYWdlQ29uZmlndXJhdGlvbjo6
c2V0UHJveHlDb25maWd1cmF0aW9uKFJlZlB0cjxXZWJLaXQ6OlByb3h5Q29uZmlndXJhdGlvbj4g
cHJveHlDb25maWd1cmF0aW9uKQoreworICAgIG1fcHJveHlDb25maWd1cmF0aW9uID0gV1RGTW92
ZShwcm94eUNvbmZpZ3VyYXRpb24pOworfQorCiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklG
RVNUKQogQXBwbGljYXRpb25NYW5pZmVzdCogUGFnZUNvbmZpZ3VyYXRpb246OmFwcGxpY2F0aW9u
TWFuaWZlc3QoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSVBhZ2VDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJUGFnZUNvbmZpZ3VyYXRpb24uaAppbmRleCA5ZTgzOWY0NDU3MGUuLmY4NmRiMzAyNWIyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVBhZ2VDb25maWd1cmF0
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSVBhZ2VDb25maWd1cmF0
aW9uLmgKQEAgLTM5LDYgKzM5LDcgQEAgT0JKQ19QUk9UT0NPTChfVUlDbGlja0ludGVyYWN0aW9u
RHJpdmluZyk7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBQcm94eUNvbmZp
Z3VyYXRpb247CiBjbGFzcyBWaXNpdGVkTGlua1N0b3JlOwogY2xhc3MgV2ViUGFnZUdyb3VwOwog
Y2xhc3MgV2ViUGFnZVByb3h5OwpAQCAtMTY2LDcgKzE2NywxMCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldFNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nKFdlYkNvcmU6OlNob3Vs
ZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIHZhbHVlKSB7IG1fc2hvdWxkUmVsYXhUaGly
ZFBhcnR5Q29va2llQmxvY2tpbmcgPSB2YWx1ZTsgfQogICAgIFdlYkNvcmU6OlNob3VsZFJlbGF4
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIHNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2Nr
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2lu
ZzsgfQotICAgIAorCisgICAgV2ViS2l0OjpQcm94eUNvbmZpZ3VyYXRpb24qIHByb3h5Q29uZmln
dXJhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0UHJveHlDb25maWd1cmF0aW9uKFJlZlB0cjxX
ZWJLaXQ6OlByb3h5Q29uZmlndXJhdGlvbj4pOworCiBwcml2YXRlOgogCiAgICAgUmVmUHRyPFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2w+IG1fcHJvY2Vzc1Bvb2w7CkBAIC0yMTcsNiArMjIxLDggQEAg
cHJpdmF0ZToKICAgICBib29sIG1faHR0cHNVcGdyYWRlRW5hYmxlZCB7IHRydWUgfTsKIAogICAg
IFdlYkNvcmU6OlNob3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIG1fc2hvdWxkUmVs
YXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmcgeyBXZWJDb3JlOjpTaG91bGRSZWxheFRoaXJkUGFy
dHlDb29raWVCbG9ja2luZzo6Tm8gfTsKKworICAgIFJlZlB0cjxXZWJLaXQ6OlByb3h5Q29uZmln
dXJhdGlvbj4gbV9wcm94eUNvbmZpZ3VyYXRpb247CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdD
b25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Q29uZmlndXJhdGlvbi5oCmluZGV4IDk2ZjlhMGIxZGQxZC4uM2M4OWFhMmIxYzYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmln
dXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uLmgKQEAgLTIwNyw2ICsyMDcsMTMgQEAgV0tfQ0xBU1NfQVZBSUxBQkxF
KG1hY29zKDEwLjEwKSwgaW9zKDguMCkpCiAgKi8KIC0gKG51bGxhYmxlIGlkIDxXS1VSTFNjaGVt
ZUhhbmRsZXI+KXVybFNjaGVtZUhhbmRsZXJGb3JVUkxTY2hlbWU6KE5TU3RyaW5nICopdXJsU2No
ZW1lIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMpLCBpb3MoMTEuMCkpOwogCisvKiEgQGFi
c3RyYWN0IFRoZSBwcm94eSBjb25maWd1cmF0aW9uIGRpY3Rpb25hcnkKKyBAZGlzY3Vzc2lvbiBO
ZXR3b3JrIGNvbm5lY3Rpb25zIG9yaWdpbmF0aW5nIGZyb20gdGhlIFdLV2ViVmlldyB3aWxsIHVz
ZSB0aGUgcHJveHkgZGVzY3JpYmVkIGJ5IHRoZSBkaWN0aW9uYXJ5LgorIFRoZSBkaWN0aW9uYXJ5
IGNhbiBjb250YWluIHRoZSBzYW1lIHZhbHVlcyBleHBlY3RlZCBpbiBhbiBOU1VSTFNlc3Npb25D
b25maWd1cmF0aW9uJ3MgY29ubmVjdGlvblByb3h5RGljdGlvbmFyeS4KKyBGb3IgbW9yZSBpbmZv
cm1hdGlvbiByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiBOU1VSTFNlc3Npb25Db25maWd1
cmF0aW9uCisgKi8KK0Bwcm9wZXJ0eSAobnVsbGFibGUsIG5vbmF0b21pYywgY29weSkgTlNEaWN0
aW9uYXJ5ICpjb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CisKIEBlbmQKIAogI2lmIFRBUkdFVF9PU19J
UEhPTkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdDb25maWd1cmF0aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0KaW5kZXggYzUwMDliNjg4NmYzLi42YzhlMjdmNTVj
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXdDb25maWd1cmF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tCkBAIC0yNyw2ICsyNyw4IEBACiAjaW1wb3J0ICJX
S1dlYlZpZXdDb25maWd1cmF0aW9uSW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiQVBJUGFnZUNvbmZp
Z3VyYXRpb24uaCIKKyNpbXBvcnQgIlByb3h5Q29uZmlndXJhdGlvbi5oIgorI2ltcG9ydCAiUHJv
eHlDb25maWd1cmF0aW9uUmVnaXN0cnkuaCIKICNpbXBvcnQgIlVzZXJJbnRlcmZhY2VJZGlvbS5o
IgogI2ltcG9ydCAiV0tQcmVmZXJlbmNlcy5oIgogI2ltcG9ydCAiV0tQcm9jZXNzUG9vbC5oIgpA
QCAtMTI2LDYgKzEyOCw3IEBAIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXdDb25maWd1cmF0aW9u
IHsKICAgICBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+IF9yZWxhdGVkV2ViVmlldzsKICAgICBXZWFr
T2JqQ1B0cjxXS1dlYlZpZXc+IF9hbHRlcm5hdGVXZWJWaWV3Rm9yTmF2aWdhdGlvbkdlc3R1cmVz
OwogICAgIFJldGFpblB0cjxOU1N0cmluZz4gX2dyb3VwSWRlbnRpZmllcjsKKyAgICBSZXRhaW5Q
dHI8TlNEaWN0aW9uYXJ5PiBfcHJveHlDb25maWd1cmF0aW9uOwogICAgIE9wdGlvbmFsPFJldGFp
blB0cjxOU1N0cmluZz4+IF9hcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQ7CiAgICAgTlNUaW1l
SW50ZXJ2YWwgX2luY3JlbWVudGFsUmVuZGVyaW5nU3VwcHJlc3Npb25UaW1lb3V0OwogICAgIEJP
T0wgX3Jlc3BlY3RzSW1hZ2VPcmllbnRhdGlvbjsKQEAgLTYwOSw5ICs2MTIsMjYgQEAgLSAodm9p
ZClfc2V0Q29udGVudFByb3ZpZGVyUmVnaXN0cnk6KFdLV2ViVmlld0NvbnRlbnRQcm92aWRlclJl
Z2lzdHJ5ICopcmVnaXN0cnkKIAogLSAoUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+KWNvcHlQ
YWdlQ29uZmlndXJhdGlvbgogeworICAgIGlmIChfcHJveHlDb25maWd1cmF0aW9uICYmICFfcGFn
ZUNvbmZpZ3VyYXRpb24tPnByb3h5Q29uZmlndXJhdGlvbigpKSB7CisgICAgICAgIGF1dG8gcHJv
eHlDb25maWd1cmF0aW9uID0gV2ViS2l0OjpQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeTo6c2lu
Z2xldG9uKCkuZ2V0T3JDcmVhdGVQcm94eUNvbmZpZ3VyYXRpb24oX3Byb3h5Q29uZmlndXJhdGlv
bi5nZXQoKSk7CisgICAgICAgIGlmIChwcm94eUNvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICBf
cGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb3h5Q29uZmlndXJhdGlvbihXVEZNb3ZlKHByb3h5Q29u
ZmlndXJhdGlvbikpOworICAgIH0KKwogICAgIHJldHVybiBfcGFnZUNvbmZpZ3VyYXRpb24tPmNv
cHkoKTsKIH0KIAorLSAoTlNEaWN0aW9uYXJ5ICopY29ubmVjdGlvblByb3h5RGljdGlvbmFyeQor
eworICAgIHJldHVybiBfcHJveHlDb25maWd1cmF0aW9uLmdldCgpOworfQorCistICh2b2lkKXNl
dENvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnk6KE5TRGljdGlvbmFyeSAqKWNvbm5lY3Rpb25Qcm94
eURpY3Rpb25hcnkKK3sKKyAgICBfcGFnZUNvbmZpZ3VyYXRpb24tPnNldFByb3h5Q29uZmlndXJh
dGlvbihudWxscHRyKTsKKyAgICBfcHJveHlDb25maWd1cmF0aW9uID0gYWRvcHROUyhjb25uZWN0
aW9uUHJveHlEaWN0aW9uYXJ5LmNvcHkpOworfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBX
S1dlYlZpZXdDb25maWd1cmF0aW9uIChXS1ByaXZhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAppbmRleCA3NzkxMGFiZjNjMGQuLmU3MWRiMGYyYzE0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC04NSw2ICs4NSw4IEBACiAj
aW5jbHVkZSAiUHJpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlci5oIgogI2lu
Y2x1ZGUgIlByb3Zpc2lvbmFsUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiUHJveHlDb25maWd1cmF0
aW9uLmgiCisjaW5jbHVkZSAiUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1
ZGUgIlNhZmVCcm93c2luZ1dhcm5pbmcuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXJEYXRhUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiU3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uTWFuYWdlci5o
IgpAQCAtMTA5Nyw2ICsxMDk5LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojppbml0aWFsaXplV2Vi
UGFnZSgpCiAgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpOwogI2Vu
ZGlmCiAKKyAgICBpZiAoYXV0byBwcm94eUNvbmZpZ3VyYXRpb24gPSBtX2NvbmZpZ3VyYXRpb24t
PnByb3h5Q29uZmlndXJhdGlvbigpKSB7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IHByb3h5
Q29uZmlndXJhdGlvbi0+cGFyYW1ldGVycygpOworICAgICAgICBwYXJhbWV0ZXJzLnNlc3Npb25J
RCA9IHNlc3Npb25JRCgpOworICAgICAgICBwYXJhbWV0ZXJzLndlYlBhZ2VQcm94eUlEID0gbV9p
ZGVudGlmaWVyOworICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlKCkubmV0d29ya1Byb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWRkUHJveHlDb25maWd1cmF0aW9uKFdURk1v
dmUocGFyYW1ldGVycykpLCAwKTsKKyAgICB9CisgICAgCiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6Q3JlYXRlV2ViUGFnZShtX3dlYlBhZ2VJRCwgY3JlYXRpb25QYXJhbWV0ZXJzKG1f
cHJvY2VzcywgKm1fZHJhd2luZ0FyZWEpKSwgMCk7CiAKICAgICBtX3Byb2Nlc3MtPmFkZFZpc2l0
ZWRMaW5rU3RvcmVVc2VyKHZpc2l0ZWRMaW5rU3RvcmUoKSwgbV9pZGVudGlmaWVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDdlZmY0
ZjI2ZTMzNS4uNWRhMWU4NDhmOWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwOTcsNiArNDA5NywxNCBAQAogCQk1MUUzNTFDODE4
MEYyQ0NDMDBFNTNCRTkgLyogSURCVXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElEQlV0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxRTM1MUM5MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxRTM5OTA1MUQ2RjU0QzUwMDlDODgzMSAvKiBVSUdhbWVwYWRQcm92
aWRlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVUlH
YW1lcGFkUHJvdmlkZXJDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFF
N0UyQTgyNjBFOTM5MzAwODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5Q29jb2Eu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUU3RTJBOTI2MEU5M0IzMDA4ODVF
QTggLyogUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTFFN0UyQUEyNjBFOTNCMzAwODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eUNvbmZpZ3VyYXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MUU3RTJBQjI2MEU5M0I0MDA4ODVFQTggLyogUHJveHlDb25m
aWd1cmF0aW9uUGFyYW1ldGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eUNvbmZpZ3VyYXRpb25Q
YXJhbWV0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRTdFMkFDMjYwRTkz
QjQwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxRTdFMkFEMjYwRTkzQjUwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRp
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJveHlDb25maWd1cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxRTdFMkFFMjYwRTkzQjUwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3Vy
YXRpb25SZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3Ry
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUU3RTJBRjI2MEU5NEU4MDA4ODVF
QTggLyogUHJveHlDb25maWd1cmF0aW9uQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQ
cm94eUNvbmZpZ3VyYXRpb25Db2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTFFOEI2OEQxRTcxMjg3MzAwMUI3MTMyIC8qIFdlYlVSTFNjaGVtZVRhc2suY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViVVJMU2NoZW1lVGFzay5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTk0OTk2MUQ3NjFDQzcwMEVDOUVCOSAvKiBVSUdh
bWVwYWRQcm92aWRlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFVJR2FtZXBhZFByb3ZpZGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUYwNjBERDE2NTQzMTc1MDBGMzI4MUIgLyogV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJSZXNvdXJjZUxvYWRl
ck1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CkBAIC02NjM1LDYgKzY2NDMsMTIgQEAKIAkJCQlFMThDOTJGMzEyREI5RTcxMDBDRjJBRUIgLyog
UHJpbnRJbmZvLmNwcCAqLywKIAkJCQlFMUNDMUI4RTEyRDdFQURGMDA2MjU4MzggLyogUHJpbnRJ
bmZvLmggKi8sCiAJCQkJNDYzRkQ0ODExRUI5NEVBRDAwQTI5ODJDIC8qIFByb2Nlc3NUZXJtaW5h
dGlvblJlYXNvbi5oICovLAorCQkJCTUxRTdFMkFBMjYwRTkzQjMwMDg4NUVBOCAvKiBQcm94eUNv
bmZpZ3VyYXRpb24uY3BwICovLAorCQkJCTUxRTdFMkFEMjYwRTkzQjUwMDg4NUVBOCAvKiBQcm94
eUNvbmZpZ3VyYXRpb24uaCAqLywKKwkJCQk1MUU3RTJBOTI2MEU5M0IzMDA4ODVFQTggLyogUHJv
eHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5jcHAgKi8sCisJCQkJNTFFN0UyQUIyNjBFOTNCNDAw
ODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaCAqLywKKwkJCQk1MUU3RTJB
QzI2MEU5M0I0MDA4ODVFQTggLyogUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkuY3BwICovLAor
CQkJCTUxRTdFMkFFMjYwRTkzQjUwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3Ry
eS5oICovLAogCQkJCTlCMTIyOUQwMjNGRjJBNUUwMDhDQTc1MSAvKiBSZW1vdGVBdWRpb0Rlc3Rp
bmF0aW9uSWRlbnRpZmllci5oICovLAogCQkJCTVDQjdBRkU2MjNDNjgxQjAwMEU0OUNGMyAvKiBS
ZXNvdXJjZUxvYWRJbmZvLmggKi8sCiAJCQkJNUMwMDk5M0IyNDE3RkI3RTAwRDUzQzI1IC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQYXJhbWV0ZXJzLmggKi8sCkBAIC04MTQyLDYgKzgxNTYsOCBA
QAogCQkJCTJEMTA4NzYyMUQyQzY0MUIwMEI4NUY4MiAvKiBMb2FkUGFyYW1ldGVyc0NvY29hLm1t
ICovLAogCQkJCTJENDQwQjgzMjVFRjIzNUUwMEE5OEQ4NyAvKiBQREZLaXRTb2Z0TGluay5oICov
LAogCQkJCTJENDQwQjgyMjVFRjIzNUUwMEE5OEQ4NyAvKiBQREZLaXRTb2Z0TGluay5tbSAqLywK
KwkJCQk1MUU3RTJBRjI2MEU5NEU4MDA4ODVFQTggLyogUHJveHlDb25maWd1cmF0aW9uQ29jb2Eu
bW0gKi8sCisJCQkJNTFFN0UyQTgyNjBFOTM5MzAwODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlv
blJlZ2lzdHJ5Q29jb2EubW0gKi8sCiAJCQkJN0FCNEVBM0YyMjc3N0M0NjAwODVCQkFBIC8qIFNh
bmRib3hFeHRlbnNpb25Db2NvYS5tbSAqLywKIAkJCQk3QUI0RUE0MTIyNzc3RkM3MDA4NUJCQUEg
LyogU2FuZGJveEluaXRpYWxpYXRpb25QYXJhbWV0ZXJzQ29jb2EubW0gKi8sCiAJCQkJRTE5QkRB
ODgxOTM2ODZBNDAwQjk3RjU3IC8qIFNhbmRib3hVdGlsaXRpZXMuaCAqLywKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAzYmUxYjZjZjAxY2QuLmQx
NjUyODRkNGVmZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTAzLTI5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYWJpbGl0eSB0byBzZXQgSFRUUCBwcm94eSBvbiBh
IHBlci1XS1dlYlZpZXcgYmFzaXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjM4OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1By
b2Nlc3MubW06CisgICAgICAgIChURVNUKToKKwogMjAyMS0wMy0yNiAgWmFsYW4gQnVqdGFzICA8
emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtNaW5pQnJvd3Nlcl0gUmVtb3ZlIHJlZHVuZGFu
dCAiRGlzYWJsZSBTaW1wbGUgTGluZSBMYXlvdXQiIG1lbnUgaXRlbQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KaW5k
ZXggNzU1YzlhZTExMGJmLi42Y2RmNmI3MjY4ZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvTmV0d29ya1Byb2Nlc3MubW0KKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQpAQCAtMjYsMTAg
KzI2LDE0IEBACiAjaW1wb3J0ICJjb25maWcuaCIKIAogI2ltcG9ydCAiSFRUUFNlcnZlci5oIgor
I2ltcG9ydCAiUGxhdGZvcm1VdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRDUFNlcnZlci5oIgorI2lt
cG9ydCAiVGVzdFVJRGVsZWdhdGUuaCIKICNpbXBvcnQgIlRlc3RXS1dlYlZpZXcuaCIKICNpbXBv
cnQgIlV0aWxpdGllcy5oIgogI2ltcG9ydCA8V2ViS2l0L1dLUHJvY2Vzc1Bvb2xQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oPgorI2ltcG9ydCA8
V2ViS2l0L19XS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uLmg+CiAjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbXBvcnQgPHd0Zi9WZWN0
b3IuaD4KQEAgLTg4LDMgKzkyLDMxIEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0xhdW5j
aE9ubHlXaGVuTmVjZXNzYXJ5KQogICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNz
UG9vbCBfcmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeTpA
InRlc3QiXTsKICAgICBFWFBFQ1RfRkFMU0UoW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNp
dGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzRXhpc3RzXSk7CiB9CisKK1RFU1QoV2ViS2l0LCBX
S1dlYlZpZXdQcm94eUFQSSkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSTsK
KyAgICBUQ1BTZXJ2ZXIgc2VydmVyKFtdIChpbnQgc29ja2V0KSBtdXRhYmxlIHsKKyAgICAgICAg
VENQU2VydmVyOjpyZWFkKHNvY2tldCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnRlbnQgPSAi
IgorICAgICAgICAiSFRUUC8xLjEgMjAwIE9LXHJcbiIKKyAgICAgICAgIkNvbnRlbnQtTGVuZ3Ro
OiAzNFxyXG5cclxuIgorICAgICAgICAiPHNjcmlwdD5hbGVydCgnc3VjY2VzcyEnKTwvc2NyaXB0
PiI7CisgICAgICAgIFRDUFNlcnZlcjo6d3JpdGUoc29ja2V0LCBjb250ZW50LCBzdHJsZW4oY29u
dGVudCkpOworICAgIH0sIDEpOworCisgICAgYXV0byBzdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXROb25QZXJz
aXN0ZW50Q29uZmlndXJhdGlvbl0pOworICAgIFtzdG9yZUNvbmZpZ3VyYXRpb24gc2V0QWxsb3dz
U2VydmVyUHJlY29ubmVjdDpOT107CisgICAgCisgICAgYXV0byB2aWV3Q29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW3ZpZXdDb25maWd1
cmF0aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6YWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpzdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKS5n
ZXQoKV07CisgICAgdmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkuY29ubmVjdGlvblByb3h5RGljdGlv
bmFyeSA9IEB7CisgICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFByb3h5
SG9zdCA6IEAiMTI3LjAuMC4xIiwKKyAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVy
dHlIVFRQUHJveHlQb3J0IDogW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6c2VydmVyLnBvcnQoKV0s
CisgICAgfTsKKyAgICB2aWV3Q29uZmlndXJhdGlvbi5nZXQoKS51cGdyYWRlS25vd25Ib3N0c1Rv
SFRUUFMgPSBOTzsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkgY29uZmlndXJhdGlv
bjp2aWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8v
ZG93bmxvYWQvIl1dXTsKKyAgICBFWFBFQ1RfV0tfU1RSRVEoW3dlYlZpZXcgX3Rlc3Rfd2FpdEZv
ckFsZXJ0XSwgInN1Y2Nlc3MhIik7Cit9Cg==
</data>
<flag name="review"
          id="444281"
          type_id="1"
          status="-"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="444280"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424657</attachid>
            <date>2021-03-30 10:26:29 -0700</date>
            <delta_ts>2021-03-30 13:40:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>74588</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNzE0ZDdlNDkwYmM0Li42ZGRjYmRkZWJjODEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIxIEBACisyMDIxLTAzLTMwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgYWJpbGl0eSB0byBzZXQgSFRUUCBwcm94eSBvbiBhIHBlci1XS1dlYlZp
ZXcgYmFzaXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjM4OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgbmV3IHBy
b3BlcnR5IG9uIFdLV2ViVmlld0NvbmZpZ3VyYXRpb246IGNvbm5lY3Rpb25Qcm94eURpY3Rpb25h
cnkuCisgICAgICAgIAorICAgICAgICBUaGUgZGljdGlvbmFyeSBjYW4gaG9sZCB0aGUgc2FtZSB2
YWx1ZXMgYXMgdGhlIE5TVVJMU2Vzc2lvbiBjb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5IG1lbWJl
ci4KKyAgICAgICAgCisgICAgICAgIFdoZW4gYSBXS1dlYlZpZXcgaXMgY3JlYXRlZCB3aXRoIGEg
Y29ubmVjdGlvblByb3h5RGljdGlvbmFyeSwgdGhlbiBhIHNldCBvZiBwcm94eS1zcGVjaWZpYwor
ICAgICAgICBOU1VSTFNlc3Npb25zIGlzIGNyZWF0ZWQgdGhhdCB3aWxsIGhhbmRsZSBuZXR3b3Jr
aW5nIGZvciB0aGF0IFdLV2ViVmlldy4KKyAgICAgICAgCisgICAgICAgIElmIG11bHRpcGxlIFdL
V2ViVmlld3MgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBwcm94eSBjb25maWd1cmF0aW9uIHRo
ZXknbGwgYWxsIHNoYXJlIHRoZQorICAgICAgICBzYW1lIHByb3h5LXNwZWNpZmljIE5TVVJMU2Vz
c2lvbnMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRQcm94eUNvbmZpZ3VyYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cHJveHlTZXNzaW9uU2V0Q291bnRGb3JU
ZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Nlc3Npb246OmFkZFByb3h5Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtTZXNzaW9uOjpwcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcpOgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmZWF0dXJl
RW5hYmxlZCBjb25zdCk6CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nl
c3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0
d29ya1Nlc3Npb25Db2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6
OmluaXRpYWxpemVQcm94eVNlc3Npb25TZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vz
c2lvbkNvY29hOjpzZXNzaW9uU2V0Rm9yUGFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6OnNlc3Npb25TZXRGb3JQYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkUHJveHlDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6cHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5n
KToKKworICAgICAgICAqIFNoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb24uY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNvblV0aWxpdGllcy5oLgorICAgICAgICAo
V2ViS2l0OjpQcm94eUNvbmZpZ3VyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBy
b3h5Q29uZmlndXJhdGlvbjo6UHJveHlDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
UHJveHlDb25maWd1cmF0aW9uOjp+UHJveHlDb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBTaGFy
ZWQvUHJveHlDb25maWd1cmF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L2lvcy9XZWJJY29uVXRpbGl0aWVzLmguCisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmlndXJh
dGlvbjo6cHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlByb3h5Q29uZmlndXJhdGlvbjo6aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogU2hh
cmVkL0NvY29hL1Byb3h5Q29uZmlndXJhdGlvbkNvY29hLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNvblV0aWxpdGllcy5oLgorICAgICAgICAoV2ViS2l0OjpQ
cm94eUNvbmZpZ3VyYXRpb246OmNyZWF0ZSk6CisKKyAgICAgICAgKiBTaGFyZWQvUHJveHlDb25m
aWd1cmF0aW9uUGFyYW1ldGVycy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L2lvcy9XZWJJY29uVXRpbGl0aWVzLmguCisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmlndXJh
dGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29u
ZmlndXJhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1Byb3h5Q29u
ZmlndXJhdGlvblBhcmFtZXRlcnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQv
aW9zL1dlYkljb25VdGlsaXRpZXMuaC4KKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1Byb3h5
Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFy
ZWQvaW9zL1dlYkljb25VdGlsaXRpZXMuaC4KKyAgICAgICAgKFdlYktpdDo6UHJveHlDb25maWd1
cmF0aW9uUmVnaXN0cnk6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmln
dXJhdGlvblJlZ2lzdHJ5Ojpwcm94eUNvbmZpZ3VyYXRpb25EZXN0cm95ZWQpOgorICAgICAgICAq
IFNoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNvblV0aWxpdGllcy5oLgorICAgICAgICAqIFNoYXJlZC9D
b2NvYS9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnk6OmdldE9yQ3JlYXRlUHJveHlDb25m
aWd1cmF0aW9uKToKKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1Byb3h5T3B0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQcm94eU9wdGlvbnM6OlByb3h5T3B0aW9ucyk6Cisg
ICAgICAgIChXZWJLaXQ6OlByb3h5T3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UHJveHlPcHRpb25zOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Qcm94eU9wdGlv
bnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvaW9zL1dlYkljb25VdGlsaXRp
ZXMuaC4KKyAgICAgICAgKFdlYktpdDo6UHJveHlPcHRpb25zOjpodHRwUHJveHlIb3N0IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UHJveHlPcHRpb25zOjpodHRwUHJveHlQb3J0IGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UHJveHlPcHRpb25zOjpodHRwc1Byb3h5SG9zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlByb3h5T3B0aW9uczo6aHR0cHNQcm94eVBvcnQgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpQcm94eU9wdGlvbnM6OnNvY2tzUHJveHlIb3N0IGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UHJveHlPcHRpb25zOjpzb2Nrc1Byb3h5UG9ydCBjb25zdCk6CisgICAgICAg
ICogU2hhcmVkL0NvY29hL1Byb3h5T3B0aW9uc0NvY29hLm1tOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6dmVyaWZ5QW5kU2V0SG9zdFBvcnRQYWlyKToKKyAgICAgICAgKFdlYktpdDo6UHJveHlP
cHRpb25zOjpQcm94eU9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpQcm94eU9wdGlvbnM6OnRv
UHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSBjb25zdCk6CisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0FQSVBhZ2VDb25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb246OmNvcHkgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUGFnZUNv
bmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OnNob3VsZFJl
bGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIGNvbnN0KToKKyAgICAgICAgKEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb246OnNldFByb3h5T3B0aW9ucyk6CisgICAgICAgIChBUEk6OlBhZ2VDb25maWd1
cmF0aW9uOjpwcm94eU9wdGlvbnMgY29uc3QpOgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIGNvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnldKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBzZXRDb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5Ol0pOgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAg
ICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5nOl0p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oOgorCisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnByb3h5U2Vzc2lvblNl
dENvdW50Rm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3Rp
bmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6
CisKKyAgICAgICAgRGVhbCB3aXRoIHVwZGF0ZWQgdW5pZmllZCBzb3VyY2UgYnVpbGQgYnJlYWth
Z2U6CisgICAgICAgICogU2hhcmVkL2lvcy9XZWJJY29uVXRpbGl0aWVzLmg6CisgICAgICAgICog
U2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbToKKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL0NvcmVNZWRpYVdyYXBwZWQuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcDoKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmg6CisgICAgICAg
ICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5oOgorICAg
ICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDMtMjYgIFBl
ciBBcm5lICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgRW5mb3JjZSBub3RpZnlkIG1l
c3NhZ2UgZmlsdGVyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCmluZGV4IGMxMzE2OGViZjQ3OC4uZmM3YThhNTRkNjAxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNDgsNiAr
NDgsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJQcmVjb25uZWN0VGFzay5oIgor
I2luY2x1ZGUgIlByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJSZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKQEAgLTQyNSw2ICs0MjYs
MjYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMKICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVy
cykpOwogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRQcm94eUNvbmZpZ3VyYXRpb24oUHJv
eHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCit7CisgICAgYXV0byBzZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24ocGFyYW1ldGVycy5zZXNzaW9uSUQpOworICAgIGlmICghc2Vz
c2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Vzc2lvbi0+YWRkUHJveHlDb25maWd1cmF0
aW9uKFdURk1vdmUocGFyYW1ldGVycykpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcm94
eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKHVuc2lnbmVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBhdXRvIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpOworICAgIGlmICghc2Vz
c2lvbikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBjb21wbGV0aW9uSGFuZGxlcihzZXNzaW9uLT5wcm94eVNlc3Npb25T
ZXRDb3VudEZvclRlc3RpbmcoKSk7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3Qg
ZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJp
bmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgY2FjaGVSb290UGF0
aEhhbmRsZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2Vyc0xvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oCmluZGV4IDVjZWJjN2ZkNTE4Ny4uYzUyNTNiZTE0ZGZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xMTMsNiArMTEzLDcgQEAg
ZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzU3RhdHVzIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbiA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlw
ZSA6IHVpbnQzMl90Owogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwor
c3RydWN0IFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC0yMDUsNiAr
MjA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJik7CiAK
ICAgICB2b2lkIGFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMm
Jik7CisgICAgdm9pZCBhZGRQcm94eUNvbmZpZ3VyYXRpb24oUHJveHlDb25maWd1cmF0aW9uUGFy
YW1ldGVycyYmKTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAg
dm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC0zMDgsNiArMzEw
LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0UXVvdGFMb2dnaW5nRW5hYmxlZChQQUw6OlNlc3Np
b25JRCwgYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJMJiwg
Y29uc3QgVVJMJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKKyAgICB2b2lkIHByb3h5U2Vzc2lvblNldENvdW50Rm9yVGVzdGluZyhQ
QUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNpZ25lZCk+JiYpOworICAg
IAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBXZWJDb3JlOjpTV1NlcnZlciogc3dT
ZXJ2ZXJGb3JTZXNzaW9uSWZFeGlzdHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSB7IHJldHVy
biBtX3N3U2VydmVycy5nZXQoc2Vzc2lvbklEKTsgfQogICAgIFdlYkNvcmU6OlNXU2VydmVyJiBz
d1NlcnZlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggOWQx
ZWQ4OGVhMDRhLi43MmE0MzIwYjkxODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtNDAsNiArNDAsNyBA
QCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgQ2xlYXJD
YWNoZWRDcmVkZW50aWFscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKICAgICBBZGRXZWJz
aXRlRGF0YVN0b3JlKHN0cnVjdCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICBBZGRQcm94eUNvbmZpZ3VyYXRpb24oc3Ry
dWN0IFdlYktpdDo6UHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyBwcm94eUNvbmZpZ3VyYXRp
b25QYXJhbWV0ZXJzKTsKICAgICBEZXN0cm95U2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiAKICAgICBGZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0
aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBPcHRpb25T
ZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIFdlYktpdDo6
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtNDcsNiArNDgsOCBAQCBtZXNzYWdlcyAtPiBOZXR3
b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURh
dGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhPiBvcmlnaW5zLCBWZWN0b3I8U3RyaW5nPiBjb29raWVIb3N0TmFtZXMsIFZlY3RvcjxTdHJp
bmc+IEhTVFNDYWNoZUhvc3ROYW1lcywgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
PiByZWdpc3RyYWJsZURvbWFpbnMsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAg
IFJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBVUkwg
b2xkRG9tYWluLCBVUkwgbmV3RG9tYWluLCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5
cGU+IHdlYnNpdGVEYXRhVHlwZXMpIC0+ICgpIEFzeW5jCiAKKyAgICBQcm94eVNlc3Npb25TZXRD
b3VudEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAodW5zaWduZWQgY291
bnQpIEFzeW5jCisKICAgICBEb3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBXZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QsIGVudW06Ym9vbCBPcHRpb25hbDxXZWJLaXQ6Ok5hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBTdHJpbmcgc3VnZ2VzdGVkRmls
ZW5hbWUpCiAgICAgUmVzdW1lRG93bmxvYWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJL
aXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEs
IFN0cmluZyBwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlLCBlbnVtOmJvb2wgV2ViS2l0OjpDYWxsRG93bmxvYWREaWRTdGFydCBjYWxs
RG93bmxvYWREaWRTdGFydCkKICAgICBDYW5jZWxEb3dubG9hZChXZWJLaXQ6OkRvd25sb2FkSUQg
ZG93bmxvYWRJRCkgLT4gKElQQzo6RGF0YVJlZmVyZW5jZSByZXN1bWVEYXRhKSBBc3luYwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGUzOTJl
OTYxN2MyMS4uZjA4MDg2NjlkOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrU2Vzc2lvbi5oCkBAIC02MSw2ICs2MSw3IEBAIGNsYXNzIE5ldHdvcmtTb2NrZXRD
aGFubmVsOwogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwogY2xhc3MgV2Vi
U29ja2V0VGFzazsKIHN0cnVjdCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczsKK3N0
cnVjdCBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzOwogCiBlbnVtIGNsYXNzIFdlYnNpdGVE
YXRhVHlwZSA6IHVpbnQzMl90OwogCkBAIC04OCw2ICs4OSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRhVGFzayYpOwogICAgIHZvaWQgdW5y
ZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2smKTsKIAorICAgIHZpcnR1YWwg
dm9pZCBhZGRQcm94eUNvbmZpZ3VyYXRpb24oUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyYm
KSB7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHByb3h5U2Vzc2lvblNldENvdW50Rm9yVGVzdGlu
ZygpIHsgcmV0dXJuIDA7IH0KKwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKiByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmdldCgpOyB9CiAg
ICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRNYW5hZ2VyLmNwcAppbmRleCBhYjFmZDM4ZDY0M2QuLjZjYmYzNGExMmZjYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcApAQCAtNTAyLDYgKzUwMiwxMCBAQCB2b2lkIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6c2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVz
Rm9yVGVzdGluZyhTdHJpbgogCiBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6
ZmVhdHVyZUVuYWJsZWQoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBDYWxsZXJzIG9mICJmZWF0
dXJlRW5hYmxlZCIgc2hvdWxkIGhhdmUgV2ViUGFnZVByb3h5SWRlbnRpZmllciBjb250ZXh0LAor
ICAgIC8vIGFuZCBXZWJQYWdlUHJveHlzIGN1cnJlbnRseSB1c2luZyBhbiBIVFRQIHByb3h5IGZv
ciBuZXR3b3JraW5nIHNob3VsZCBub3QgZ2V0IFBDTS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk4CisgICAgCiAgICAgcmV0dXJuIG1fbmV0d29y
a1Nlc3Npb24gJiYgbV9uZXR3b3JrUHJvY2Vzcy0+cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRFbmFi
bGVkKCkgJiYgIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgK
aW5kZXggMWFjZGQyNzE0ZjVjLi4zY2YxYjIxMmExYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCkBAIC0z
OCw2ICszOCw3IEBAIE9CSkNfQ0xBU1MgX05TSFNUU1N0b3JhZ2U7CiAjaW5jbHVkZSAiRG93bmxv
YWRJRC5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHlJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0VGFzay5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CkBAIC0xMzYsOSArMTM3LDkg
QEAgcHJpdmF0ZToKIAogICAgIHN0cnVjdCBTZXNzaW9uU2V0IDogcHVibGljIFJlZkNvdW50ZWQ8
U2Vzc2lvblNldD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxTZXNzaW9uU2V0
PiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMgUmVmPFNlc3Npb25TZXQ+IGNyZWF0ZShSZWZQdHI8
UHJveHlDb25maWd1cmF0aW9uPiYmIHByb3h5Q29uZmlndXJhdGlvbikKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Vzc2lvblNldCk7CisgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXNzaW9uU2V0KFdURk1vdmUocHJveHlDb25maWd1cmF0aW9u
KSkpOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIFNlc3Npb25XcmFwcGVyJiBpc29sYXRlZFNl
c3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgTmV0d29ya1Nlc3Np
b25Db2NvYSYpOwpAQCAtMTUxLDE4ICsxNTIsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgU2Vzc2lv
bldyYXBwZXIgc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKICAgICAgICAgU2Vzc2lv
bldyYXBwZXIgZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbjsKIAorICAgICAgICBSZWZQdHI8UHJv
eHlDb25maWd1cmF0aW9uPiBwcm94eUNvbmZpZ3VyYXRpb247CisKICAgICBwcml2YXRlOgotICAg
ICAgICBTZXNzaW9uU2V0KCkgPSBkZWZhdWx0OworICAgICAgICBTZXNzaW9uU2V0KFJlZlB0cjxQ
cm94eUNvbmZpZ3VyYXRpb24+JiYgcHJveHlDb25maWd1cmF0aW9uKQorICAgICAgICAgICAgOiBw
cm94eUNvbmZpZ3VyYXRpb24oV1RGTW92ZShwcm94eUNvbmZpZ3VyYXRpb24pKQorICAgICAgICB7
CisgICAgICAgIH0KICAgICB9OwogCiAgICAgUmVmPFNlc3Npb25TZXQ+IG1fZGVmYXVsdFNlc3Np
b25TZXQ7CisgICAgSGFzaE1hcDxQcm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyLCBSZWY8U2Vz
c2lvblNldD4+IG1fcGVyUHJveHlTZXNzaW9uU2V0czsKICAgICBIYXNoTWFwPFdlYlBhZ2VQcm94
eUlkZW50aWZpZXIsIFJlZjxTZXNzaW9uU2V0Pj4gbV9wZXJQYWdlU2Vzc2lvblNldHM7CiAKKyAg
ICB2b2lkIGFkZFByb3h5Q29uZmlndXJhdGlvbihQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJz
JiYpIGZpbmFsOworICAgIHVuc2lnbmVkIHByb3h5U2Vzc2lvblNldENvdW50Rm9yVGVzdGluZygp
IGZpbmFsOworCiAgICAgdm9pZCBpbml0aWFsaXplU3RhbmRhcmRTZXNzaW9uc0luU2V0KFNlc3Np
b25TZXQmLCBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICopOworICAgIHZvaWQgaW5pdGlhbGl6
ZVByb3h5U2Vzc2lvblNldChTZXNzaW9uU2V0Jik7CisKICAgICBTZXNzaW9uU2V0JiBzZXNzaW9u
U2V0Rm9yUGFnZShXZWJQYWdlUHJveHlJZGVudGlmaWVyKTsKICAgICBjb25zdCBTZXNzaW9uU2V0
JiBzZXNzaW9uU2V0Rm9yUGFnZShXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICAgICB2
b2lkIGludmFsaWRhdGVBbmRDYW5jZWxTZXNzaW9uU2V0KFNlc3Npb25TZXQmKTsKLSAgICAKKwog
ICAgIFN0cmluZyBtX2JvdW5kSW50ZXJmYWNlSWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV9zb3Vy
Y2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fc291cmNlQXBwbGlj
YXRpb25TZWNvbmRhcnlJZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCmluZGV4IDI0YTQyZGYz
MTE5MC4uODM3YmE4OGU1YjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCkBAIC0zNiw2ICszNiw4IEBA
CiAjaW1wb3J0ICJOZXR3b3JrTG9hZC5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKICNp
bXBvcnQgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJQcm94
eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJQcm94eUNvbmZpZ3VyYXRpb25S
ZWdpc3RyeS5oIgogI2ltcG9ydCAiV2ViU29ja2V0VGFzay5oIgogI2ltcG9ydCA8Rm91bmRhdGlv
bi9OU1VSTFNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgpAQCAtMTE2
MCw3ICsxMTYyLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVTZXNzaW9uQ2xlYW51cChOZXR3b3Jr
U2Vzc2lvbkNvY29hJiBzZXNzaW9uLCBjb25zdCBOZXR3b3JrU2UKIAogTmV0d29ya1Nlc3Npb25D
b2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYShOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3Ms
IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICA6IE5l
dHdvcmtTZXNzaW9uKG5ldHdvcmtQcm9jZXNzLCBwYXJhbWV0ZXJzKQotICAgICwgbV9kZWZhdWx0
U2Vzc2lvblNldChTZXNzaW9uU2V0OjpjcmVhdGUoKSkKKyAgICAsIG1fZGVmYXVsdFNlc3Npb25T
ZXQoU2Vzc2lvblNldDo6Y3JlYXRlKG51bGxwdHIpKQogICAgICwgbV9ib3VuZEludGVyZmFjZUlk
ZW50aWZpZXIocGFyYW1ldGVycy5ib3VuZEludGVyZmFjZUlkZW50aWZpZXIpCiAgICAgLCBtX3Nv
dXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihwYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllcikKICAgICAsIG1fc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJ
ZGVudGlmaWVyKHBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KQpAQCAtMTI5OCwxNiArMTMwMCw1MiBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRp
YWxpemVTdGFuZGFyZFNlc3Npb25zSW5TZXQoU2Vzc2lvblNldCYgc2Vzc2lvblNldAogICAgIHNl
c3Npb25TZXQuc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5pbml0aWFsaXplKGNvbmZp
Z3VyYXRpb24sICp0aGlzLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RV
c2UsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObyk7CiB9CiAKK3ZvaWQgTmV0d29ya1Nl
c3Npb25Db2NvYTo6aW5pdGlhbGl6ZVByb3h5U2Vzc2lvblNldChTZXNzaW9uU2V0JiBzZXNzaW9u
U2V0KQoreworICAgIEFTU0VSVChzZXNzaW9uU2V0LnByb3h5Q29uZmlndXJhdGlvbik7CisgICAg
QVNTRVJUKHNlc3Npb25TZXQucHJveHlDb25maWd1cmF0aW9uLT5wcm94eUNvbmZpZ3VyYXRpb25E
aWN0aW9uYXJ5KCkpOworCisgICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFttX2RlZmF1bHRTZXNzaW9uU2V0LT5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
LnNlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiBjb3B5XTsKKyAgICBjb25maWd1cmF0aW9uLmNv
bm5lY3Rpb25Qcm94eURpY3Rpb25hcnkgPSAoTlNEaWN0aW9uYXJ5ICopc2Vzc2lvblNldC5wcm94
eUNvbmZpZ3VyYXRpb24tPnByb3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnkoKTsKKyAgICBpbml0
aWFsaXplU3RhbmRhcmRTZXNzaW9uc0luU2V0KHNlc3Npb25TZXQsIGNvbmZpZ3VyYXRpb24pOwor
fQorCiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpTZXNzaW9uU2V0JiBOZXR3b3JrU2Vzc2lvbkNvY29h
OjpzZXNzaW9uU2V0Rm9yUGFnZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlE
KQogeworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAoIXdlYlBhZ2VQcm94eUlEKSB7CisgICAgICAg
IFdURkxvZ0Fsd2F5cygiTmV0d29ya1Nlc3Npb25Db2NvYTo6c2Vzc2lvblNldEZvclBhZ2UgLSBJ
bnZhbGlkIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgY29udGV4dCwgZmFsbGluZyBiYWNrIHRvIHRo
ZSBkZWZhdWx0IFNlc3Npb25TZXQuIFBsZWFzZSBmaWxlIGEgYnVnLiIpOworICAgICAgICBXVEZS
ZXBvcnRCYWNrdHJhY2UoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIFNlc3Npb25TZXQqIHNlc3Np
b25TZXQgPSB3ZWJQYWdlUHJveHlJRCA/IG1fcGVyUGFnZVNlc3Npb25TZXRzLmdldCh3ZWJQYWdl
UHJveHlJRCkgOiBudWxscHRyOwogICAgIHJldHVybiBzZXNzaW9uU2V0ID8gKnNlc3Npb25TZXQg
OiBtX2RlZmF1bHRTZXNzaW9uU2V0LmdldCgpOwogfQogCiBjb25zdCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjpTZXNzaW9uU2V0JiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9uU2V0Rm9yUGFnZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlEKSBjb25zdAogewotICAgIFNlc3Np
b25TZXQqIHNlc3Npb25TZXQgPSB3ZWJQYWdlUHJveHlJRCA/IG1fcGVyUGFnZVNlc3Npb25TZXRz
LmdldCh3ZWJQYWdlUHJveHlJRCkgOiBudWxscHRyOwotICAgIHJldHVybiBzZXNzaW9uU2V0ID8g
KnNlc3Npb25TZXQgOiBtX2RlZmF1bHRTZXNzaW9uU2V0LmdldCgpOworICAgIHJldHVybiBjb25z
dF9jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPigqdGhpcykuc2Vzc2lvblNldEZvclBhZ2Uod2Vi
UGFnZVByb3h5SUQpOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZFByb3h5Q29u
ZmlndXJhdGlvbihQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKK3sK
KyAgICBBU1NFUlQocGFyYW1ldGVycy5zZXNzaW9uSUQgJiYgbV9zZXNzaW9uSUQgPT0gcGFyYW1l
dGVycy5zZXNzaW9uSUQpOworCisgICAgYXV0byBwcm94eUNvbmZpZ3VyYXRpb24gPSBQcm94eUNv
bmZpZ3VyYXRpb25SZWdpc3RyeTo6c2luZ2xldG9uKCkuZ2V0T3JDcmVhdGVQcm94eUNvbmZpZ3Vy
YXRpb24oV1RGTW92ZShwYXJhbWV0ZXJzLnByb3h5T3B0aW9ucykpOworICAgIAorICAgIGF1dG8g
c2Vzc2lvblNldCA9IG1fcGVyUHJveHlTZXNzaW9uU2V0cy5lbnN1cmUocHJveHlDb25maWd1cmF0
aW9uLT5pZGVudGlmaWVyKCksIFsmXSB7CisgICAgICAgIGF1dG8gbmV3U2V0ID0gU2Vzc2lvblNl
dDo6Y3JlYXRlKFdURk1vdmUocHJveHlDb25maWd1cmF0aW9uKSk7CisgICAgICAgIGluaXRpYWxp
emVQcm94eVNlc3Npb25TZXQobmV3U2V0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG5ld1NldDsK
KyAgICB9KTsKKyAgICAKKyAgICBtX3BlclBhZ2VTZXNzaW9uU2V0cy5zZXQocGFyYW1ldGVycy53
ZWJQYWdlUHJveHlJRCwgc2Vzc2lvblNldC5pdGVyYXRvci0+dmFsdWUpOworfQorCit1bnNpZ25l
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpwcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcoKQor
eworICAgIHJldHVybiBtX3BlclByb3h5U2Vzc2lvblNldHMuc2l6ZSgpOwogfQogCiBTZXNzaW9u
V3JhcHBlciYgTmV0d29ya1Nlc3Npb25Db2NvYTo6aW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVz
c1Nlc3Npb25JZk5lZWRlZChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvUHJveHlDb25maWd1cmF0aW9u
UmVnaXN0cnlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1Byb3h5Q29uZmln
dXJhdGlvblJlZ2lzdHJ5Q29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi5lNmRjNDJkNzA0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29hLm1tCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlByb3h5Q29u
ZmlndXJhdGlvblJlZ2lzdHJ5LmgiCisKKyNpbXBvcnQgIlByb3h5Q29uZmlndXJhdGlvbi5oIgor
I2ltcG9ydCAiUHJveHlPcHRpb25zLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWZQdHI8
UHJveHlDb25maWd1cmF0aW9uPiBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeTo6Z2V0T3JDcmVh
dGVQcm94eUNvbmZpZ3VyYXRpb24oUHJveHlPcHRpb25zJiYgcHJveHlPcHRpb25zKQoreworICAg
IGlmICghbV9kaWN0aW9uYXJ5VG9Qcm94eUNvbmZpZ3VyYXRpb25NYXApCisgICAgICAgIG1fZGlj
dGlvbmFyeVRvUHJveHlDb25maWd1cmF0aW9uTWFwID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rp
b25hcnk8TlNEaWN0aW9uYXJ5ICosIE5TTnVtYmVyICo+IGFsbG9jXSBpbml0XSk7CisgICAgCisg
ICAgTlNEaWN0aW9uYXJ5ICpwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5ID0gcHJveHlPcHRp
b25zLnRvUHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSgpOworCisgICAgTlNOdW1iZXIgKm5z
UHJveHlDb25maWd1cmF0aW9uSUQgPSBbbV9kaWN0aW9uYXJ5VG9Qcm94eUNvbmZpZ3VyYXRpb25N
YXAuZ2V0KCkgb2JqZWN0Rm9yS2V5OihOU0RpY3Rpb25hcnkgKilwcm94eUNvbmZpZ3VyYXRpb25E
aWN0aW9uYXJ5XTsKKyAgICBpZiAobnNQcm94eUNvbmZpZ3VyYXRpb25JRCkgeworICAgICAgICBh
dXRvIHByb3h5Q29uZmlndXJhdGlvbklEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViS2l0OjpQ
cm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyVHlwZT4obnNQcm94eUNvbmZpZ3VyYXRpb25JRC51
bnNpZ25lZExvbmdMb25nVmFsdWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGF1dG8gcHJveHlD
b25maWd1cmF0aW9uID0gbV9wcm94eUNvbmZpZ3VyYXRpb25zLmdldChwcm94eUNvbmZpZ3VyYXRp
b25JRCkpCisgICAgICAgICAgICByZXR1cm4gcHJveHlDb25maWd1cmF0aW9uOworICAgICAgICAK
KyAgICAgICAgLy8gVGhlIG9sZCBQcm94eUNvbmZpZ3VyYXRpb24gZm9yIHRoZSBlcXVpdmFsZW50
IE5TRGljdGlvbmFyeSBoYXMgYmVlbiBkZWFsbG9jYXRlZCwKKyAgICAgICAgLy8gc28gbGV0J3Mg
YWxzbyBmb3JnZXQgYWJvdXQgdGhlIG9sZCBOU0RpY3Rpb25hcnkgdGhhdCBzcGF3bmVkIGl0Lgor
ICAgICAgICBbbV9kaWN0aW9uYXJ5VG9Qcm94eUNvbmZpZ3VyYXRpb25NYXAuZ2V0KCkgcmVtb3Zl
T2JqZWN0Rm9yS2V5OihOU0RpY3Rpb25hcnkgKilwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5
XTsKKyAgICB9CisKKyAgICBhdXRvIG5ld0lkZW50aWZpZXIgPSBQcm94eUNvbmZpZ3VyYXRpb25J
ZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Byb3h5Q29uZmln
dXJhdGlvbnMuZW5zdXJlKG5ld0lkZW50aWZpZXIsIFtdKCkgeworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9KS5pdGVyYXRvcjsKKworICAgIGF1dG8gcHJveHlDb25maWd1cmF0aW9uID0g
UHJveHlDb25maWd1cmF0aW9uOjpjcmVhdGUobmV3SWRlbnRpZmllciwgKENGRGljdGlvbmFyeVJl
Zilwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5KTsKKyAgICBpdGVyYXRvci0+dmFsdWUgPSBw
cm94eUNvbmZpZ3VyYXRpb24uZ2V0KCk7CisgICAgW21fZGljdGlvbmFyeVRvUHJveHlDb25maWd1
cmF0aW9uTWFwLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkTG9u
Z0xvbmc6bmV3SWRlbnRpZmllci50b1VJbnQ2NCgpXSBmb3JLZXk6KE5TRGljdGlvbmFyeSAqKXBy
b3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnldOworCisgICAgcmV0dXJuIHByb3h5Q29uZmlndXJh
dGlvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db2NvYS9Qcm94eU9wdGlvbnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0NvY29hL1Byb3h5T3B0aW9uc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uOTQ4YTFkNDcwYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29jb2EvUHJveHlPcHRpb25zQ29jb2EubW0KQEAgLTAsMCArMSw5MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUHJveHlPcHRpb25zLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGVzZSBjb25zdGFudHMgYXJlIGNvcGllZCBm
cm9tIDxTeXN0ZW1Db25maWd1cmF0aW9uL1NDU2NoZW1hRGVmaW5pdGlvbnMuaD4KK3N0YXRpYyBO
U1N0cmluZyAqaHR0cFByb3h5SG9zdEtleSA9IEAiSFRUUFByb3h5IjsKK3N0YXRpYyBOU1N0cmlu
ZyAqaHR0cFByb3h5UG9ydEtleSA9IEAiSFRUUFBvcnQiOworc3RhdGljIE5TU3RyaW5nICpodHRw
c1Byb3h5SG9zdEtleSA9IEAiSFRUUFNQcm94eSI7CitzdGF0aWMgTlNTdHJpbmcgKmh0dHBzUHJv
eHlQb3J0S2V5ID0gQCJIVFRQU1BvcnQiOworc3RhdGljIE5TU3RyaW5nICpzb2Nrc1Byb3h5SG9z
dEtleSA9IEAiU09DS1NQcm94eSI7CitzdGF0aWMgTlNTdHJpbmcgKnNvY2tzUHJveHlQb3J0S2V5
ID0gQCJTT0NLU1BvcnQiOworCitzdGF0aWMgdm9pZCB2ZXJpZnlBbmRTZXRIb3N0UG9ydFBhaXIo
aWQgaG9zdCwgaWQgcG9ydCwgU3RyaW5nJiBob3N0UmVzdWx0LCB1aW50MTZfdCYgcG9ydFJlc3Vs
dCkKK3sKKyAgICBpZiAoIWhvc3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIVto
b3N0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgIFtOU0V4Y2VwdGlv
biByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRv
IHNldCBwcm94eSBob3N0IGZyb20gV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5jb25uZWN0aW9uUHJv
eHlEaWN0aW9uYXJ5IHRoYXQgaXMgbm90IGEgdmFsaWQgc3RyaW5nOiAlQCIsIGhvc3RdOworCisg
ICAgaWYgKCFwb3J0KQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1l
bnRFeGNlcHRpb24gZm9ybWF0OkAiQXR0ZW1wdGluZyB0byBzZXQgcHJveHkgaG9zdCBmcm9tIFdL
V2ViVmlld0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvblByb3h5RGljdGlvbmFyeSB3aXRob3V0IGEg
Y29ycmVzcG9uZGluZyBwcm94eSBwb3J0Il07CisKKyAgICBpZiAoIVtwb3J0IGlzS2luZE9mQ2xh
c3M6W05TTnVtYmVyIGNsYXNzXV0pCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFs
aWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRvIHNldCBwcm94eSBob3N0
IGZyb20gV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5jb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5IHdp
dGggYSBjb3JyZXNwb25kaW5nIHByb3h5IHBvcnQgdGhhdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2Yg
KE5TKU51bWJlcjogJUAiLCBwb3J0XTsKKyAgICAKKyAgICBhdXRvIHBvZFBvcnQgPSBbKE5TTnVt
YmVyICopcG9ydCBsb25nTG9uZ1ZhbHVlXTsKKyAgICBpZiAocG9kUG9ydCA8IDEgfHwgcG9kUG9y
dCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKKyAgICAgICAgW05TRXhj
ZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvcm1hdDpAIkF0dGVtcHRp
bmcgdG8gc2V0IHByb3h5IGhvc3QgZnJvbSBXS1dlYlZpZXdDb25maWd1cmF0aW9uLmNvbm5lY3Rp
b25Qcm94eURpY3Rpb25hcnkgd2l0aCBhIGNvcnJlc3BvbmRpbmcgcHJveHkgcG9ydCB0aGF0IGlz
IG91dHNpZGUgdGhlIHJhbmdlIDEtNjU1MzUiXTsKKworICAgIGhvc3RSZXN1bHQgPSAoTlNTdHJp
bmcgKilob3N0OworICAgIHBvcnRSZXN1bHQgPSAodWludDE2X3QpcG9kUG9ydDsKK30KKworUHJv
eHlPcHRpb25zOjpQcm94eU9wdGlvbnMoTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5KQoreworICAg
IHZlcmlmeUFuZFNldEhvc3RQb3J0UGFpcihkaWN0aW9uYXJ5W2h0dHBQcm94eUhvc3RLZXldLCBk
aWN0aW9uYXJ5W2h0dHBQcm94eVBvcnRLZXldLCBtX2h0dHBQcm94eUhvc3QsIG1faHR0cFByb3h5
UG9ydCk7CisgICAgdmVyaWZ5QW5kU2V0SG9zdFBvcnRQYWlyKGRpY3Rpb25hcnlbaHR0cHNQcm94
eUhvc3RLZXldLCBkaWN0aW9uYXJ5W2h0dHBzUHJveHlQb3J0S2V5XSwgbV9odHRwc1Byb3h5SG9z
dCwgbV9odHRwc1Byb3h5UG9ydCk7CisgICAgdmVyaWZ5QW5kU2V0SG9zdFBvcnRQYWlyKGRpY3Rp
b25hcnlbc29ja3NQcm94eUhvc3RLZXldLCBkaWN0aW9uYXJ5W3NvY2tzUHJveHlQb3J0S2V5XSwg
bV9zb2Nrc1Byb3h5SG9zdCwgbV9zb2Nrc1Byb3h5UG9ydCk7Cit9CisKK05TRGljdGlvbmFyeSAq
UHJveHlPcHRpb25zOjp0b1Byb3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnkoKSBjb25zdAorewor
ICAgIGF1dG8gcmVzdWx0ID0gW05TTXV0YWJsZURpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhDYXBh
Y2l0eTozXTsKKworICAgIGlmICghbV9odHRwUHJveHlIb3N0LmlzTnVsbCgpKSB7CisgICAgICAg
IEFTU0VSVChtX2h0dHBQcm94eVBvcnQpOworICAgICAgICByZXN1bHRbaHR0cFByb3h5SG9zdEtl
eV0gPSAoTlNTdHJpbmcgKiltX2h0dHBQcm94eUhvc3Q7CisgICAgICAgIHJlc3VsdFtodHRwUHJv
eHlQb3J0S2V5XSA9IEAobV9odHRwUHJveHlQb3J0KTsKKyAgICB9CisgICAgaWYgKCFtX2h0dHBz
UHJveHlIb3N0LmlzTnVsbCgpKSB7CisgICAgICAgIEFTU0VSVChtX2h0dHBzUHJveHlQb3J0KTsK
KyAgICAgICAgcmVzdWx0W2h0dHBzUHJveHlIb3N0S2V5XSA9IChOU1N0cmluZyAqKW1faHR0cHNQ
cm94eUhvc3Q7CisgICAgICAgIHJlc3VsdFtodHRwc1Byb3h5UG9ydEtleV0gPSBAKG1faHR0cHNQ
cm94eVBvcnQpOworICAgIH0KKyAgICBpZiAoIW1fc29ja3NQcm94eUhvc3QuaXNOdWxsKCkpIHsK
KyAgICAgICAgQVNTRVJUKG1fc29ja3NQcm94eVBvcnQpOworICAgICAgICByZXN1bHRbc29ja3NQ
cm94eUhvc3RLZXldID0gKE5TU3RyaW5nICopbV9zb2Nrc1Byb3h5SG9zdDsKKyAgICAgICAgcmVz
dWx0W3NvY2tzUHJveHlQb3J0S2V5XSA9IEAobV9zb2Nrc1Byb3h5UG9ydCk7CisgICAgfQorICAg
IAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xZTI4MTU5ZDgwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb24uY3BwCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJveHlDb25m
aWd1cmF0aW9uLmgiCisKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmgi
CisjaW5jbHVkZSAiUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKKyNpZiBVU0UoQ0YpCitSZWZQdHI8UHJveHlDb25maWd1cmF0aW9uPiBQcm94eUNv
bmZpZ3VyYXRpb246OmNyZWF0ZShQcm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyIHByb3h5Q29u
ZmlndXJhdGlvbklkZW50aWZpZXIsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiYgZGljdGlv
bmFyeSkKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdFJlZihuZXcgUHJveHlDb25m
aWd1cmF0aW9uKTsKKyAgICBjb25maWd1cmF0aW9uLT5tX2lkZW50aWZpZXIgPSBwcm94eUNvbmZp
Z3VyYXRpb25JZGVudGlmaWVyOworICAgIGNvbmZpZ3VyYXRpb24tPm1fcHJveHlDb25maWd1cmF0
aW9uRGljdGlvbmFyeSA9IFdURk1vdmUoZGljdGlvbmFyeSk7CisgICAgcmV0dXJuIGNvbmZpZ3Vy
YXRpb247Cit9CisjZW5kaWYgLy8gVVNFKENGKQorCitQcm94eUNvbmZpZ3VyYXRpb246OlByb3h5
Q29uZmlndXJhdGlvbigpCit7Cit9CisKK1Byb3h5Q29uZmlndXJhdGlvbjo6flByb3h5Q29uZmln
dXJhdGlvbigpCit7CisgICAgUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnk6OnNpbmdsZXRvbigp
LnByb3h5Q29uZmlndXJhdGlvbkRlc3Ryb3llZCgqdGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0
aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb24uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1ZDE4NjJiZGUwZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvbi5oCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRp
b24vQ29yZUZvdW5kYXRpb24uaD4KKyNlbmRpZgorCitPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmll
clR5cGUgeyB9OwordXNpbmcgUHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllciA9IE9iamVjdElk
ZW50aWZpZXI8UHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllclR5cGU+OworCitzdHJ1Y3QgUHJv
eHlDb25maWd1cmF0aW9uUGFyYW1ldGVyczsKKworY2xhc3MgUHJveHlDb25maWd1cmF0aW9uIDog
cHVibGljIFJlZkNvdW50ZWQ8UHJveHlDb25maWd1cmF0aW9uPiB7CitwdWJsaWM6CisgICAgflBy
b3h5Q29uZmlndXJhdGlvbigpOworCisjaWYgVVNFKENGKQorICAgIHN0YXRpYyBSZWZQdHI8UHJv
eHlDb25maWd1cmF0aW9uPiBjcmVhdGUoUHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllciwgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4mJik7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHByb3h5Q29u
ZmlndXJhdGlvbkRpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5Q29uZmlndXJhdGlv
bkRpY3Rpb25hcnkuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgUHJveHlDb25maWd1cmF0aW9uSWRl
bnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CisKK3By
aXZhdGU6CisgICAgUHJveHlDb25maWd1cmF0aW9uKCk7CisgICAgUHJveHlDb25maWd1cmF0aW9u
SWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisjaWYgVVNFKENGKQorICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IG1fcHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeTsKKyNlbmRpZgorCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi45ODAzYmI4MGM5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBy
b3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaCIKKworI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNp
bmNsdWRlICJFbmNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFByb3h5Q29u
ZmlndXJhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0
Cit7CisgICAgZW5jb2RlciA8PCBzZXNzaW9uSUQgPDwgd2ViUGFnZVByb3h5SUQgPDwgcHJveHlP
cHRpb25zOworfQorCitPcHRpb25hbDxQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzPiBQcm94
eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQor
eworICAgIE9wdGlvbmFsPFBBTDo6U2Vzc2lvbklEPiBzZXNzaW9uSUQ7CisgICAgZGVjb2RlciA+
PiBzZXNzaW9uSUQ7CisgICAgaWYgKCFzZXNzaW9uSUQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBPcHRpb25hbDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPiB3ZWJQYWdlUHJv
eHlJRDsKKyAgICBkZWNvZGVyID4+IHdlYlBhZ2VQcm94eUlEOworICAgIGlmICghd2ViUGFnZVBy
b3h5SUQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxQcm94
eU9wdGlvbnM+IHByb3h5T3B0aW9uczsKKyAgICBkZWNvZGVyID4+IHByb3h5T3B0aW9uczsKKyAg
ICBpZiAoIXByb3h5T3B0aW9ucykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiB7eworICAgICAgICBXVEZNb3ZlKCpzZXNzaW9uSUQpLAorICAgICAgICBXVEZNb3Zl
KCp3ZWJQYWdlUHJveHlJRCksCisgICAgICAgIFdURk1vdmUoKnByb3h5T3B0aW9ucyksCisgICAg
fX07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uYjk3YTFmOTYwMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlByb3h5T3B0
aW9ucy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxw
YWwvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERlY29kZXI7CitjbGFzcyBF
bmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFByb3h5Q29uZmlndXJh
dGlvblBhcmFtZXRlcnMgeworICAgIFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMoKSA9IGRl
ZmF1bHQ7CisgICAgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyhQcm94eUNvbmZpZ3VyYXRp
b25QYXJhbWV0ZXJzJiYpID0gZGVmYXVsdDsKKyAgICBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0
ZXJzJiBvcGVyYXRvcj0oUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyYmKSA9IGRlZmF1bHQ7
CisKKyAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgT3B0
aW9uYWw8UHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycz4gZGVjb2RlKElQQzo6RGVjb2RlciYp
OworCisgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEIHsgUEFMOjpTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSB9OworICAgIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5
SUQ7CisgICAgUHJveHlPcHRpb25zIHByb3h5T3B0aW9uczsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0
aW9uUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9u
UmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDQ0
OGI1MmI4ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlD
b25maWd1cmF0aW9uUmVnaXN0cnkuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnku
aCIKKworI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkmIFByb3h5Q29uZmlndXJhdGlvblJlZ2lz
dHJ5OjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQcm94eUNvbmZp
Z3VyYXRpb25SZWdpc3RyeT4gcmVnaXN0cnk7CisgICAgcmV0dXJuIHJlZ2lzdHJ5OworfQorCit2
b2lkIFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5Ojpwcm94eUNvbmZpZ3VyYXRpb25EZXN0cm95
ZWQoUHJveHlDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIGF1dG8gdGFrZW4g
PSBtX3Byb3h5Q29uZmlndXJhdGlvbnMudGFrZShjb25maWd1cmF0aW9uLmlkZW50aWZpZXIoKSk7
CisgICAgQVNTRVJUX1VOVVNFRCh0YWtlbiwgdGFrZW4gPT0gJmNvbmZpZ3VyYXRpb24pOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1Byb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94
eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uMGVjMjk5NWFmN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkuaApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb24uaCIK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9u
Lmg+CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5
OworT0JKQ19DTEFTUyBOU011dGFibGVEaWN0aW9uYXJ5OworT0JKQ19DTEFTUyBOU051bWJlcjsK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUHJveHlPcHRpb25zOworCitj
bGFzcyBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkpOworcHVibGljOgorICAgIFByb3h5Q29uZmln
dXJhdGlvblJlZ2lzdHJ5KCkgPSBkZWZhdWx0OworICAgIHN0YXRpYyBQcm94eUNvbmZpZ3VyYXRp
b25SZWdpc3RyeSYgc2luZ2xldG9uKCk7CisKKyAgICBSZWZQdHI8UHJveHlDb25maWd1cmF0aW9u
PiBnZXRPckNyZWF0ZVByb3h5Q29uZmlndXJhdGlvbihQcm94eU9wdGlvbnMmJik7CisKKyAgICB2
b2lkIHByb3h5Q29uZmlndXJhdGlvbkRlc3Ryb3llZChQcm94eUNvbmZpZ3VyYXRpb24mKTsKKwor
cHJpdmF0ZToKKyAgICBIYXNoTWFwPFByb3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXIsIFByb3h5
Q29uZmlndXJhdGlvbio+IG1fcHJveHlDb25maWd1cmF0aW9uczsKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtX2RpY3Rpb25hcnlUb1By
b3h5Q29uZmlndXJhdGlvbk1hcDsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eU9wdGlvbnMuY3BwIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvUHJveHlPcHRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAuLjVjNzhmNGY4NjEyMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1Byb3h5T3B0aW9ucy5jcHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm94eU9wdGlvbnMuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1Byb3h5T3B0aW9uczo6UHJveHlPcHRpb25zKGNvbnN0IFN0
cmluZyYgaHR0cEhvc3QsIHVpbnQxNl90IGh0dHBQb3J0LCBjb25zdCBTdHJpbmcmIGh0dHBzSG9z
dCwgdWludDE2X3QgaHR0cHNQb3J0LCBjb25zdCBTdHJpbmcmIHNvY2tzSG9zdCwgdWludDE2X3Qg
c29ja3NQb3J0KQorICAgIDogbV9odHRwUHJveHlIb3N0KGh0dHBIb3N0KQorICAgICwgbV9odHRw
UHJveHlQb3J0KGh0dHBQb3J0KQorICAgICwgbV9odHRwc1Byb3h5SG9zdChodHRwc0hvc3QpCisg
ICAgLCBtX2h0dHBzUHJveHlQb3J0KGh0dHBzUG9ydCkKKyAgICAsIG1fc29ja3NQcm94eUhvc3Qo
c29ja3NIb3N0KQorICAgICwgbV9zb2Nrc1Byb3h5UG9ydChzb2Nrc1BvcnQpCit7Cit9CisKK3Zv
aWQgUHJveHlPcHRpb25zOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAorewor
ICAgIGVuY29kZXIgPDwgbV9odHRwUHJveHlIb3N0IDw8IG1faHR0cFByb3h5UG9ydCA8PCBtX2h0
dHBzUHJveHlIb3N0IDw8IG1faHR0cHNQcm94eVBvcnQgPDwgbV9zb2Nrc1Byb3h5SG9zdCA8PCBt
X3NvY2tzUHJveHlQb3J0OworfQorCitPcHRpb25hbDxQcm94eU9wdGlvbnM+IFByb3h5T3B0aW9u
czo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxTdHJpbmc+
IGh0dHBIb3N0OworICAgIGRlY29kZXIgPj4gaHR0cEhvc3Q7CisgICAgaWYgKCFodHRwSG9zdCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQxNl90PiBo
dHRwUG9ydDsKKyAgICBkZWNvZGVyID4+IGh0dHBQb3J0OworICAgIGlmICghaHR0cFBvcnQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+IGh0dHBz
SG9zdDsKKyAgICBkZWNvZGVyID4+IGh0dHBzSG9zdDsKKyAgICBpZiAoIWh0dHBzSG9zdCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQxNl90PiBodHRw
c1BvcnQ7CisgICAgZGVjb2RlciA+PiBodHRwc1BvcnQ7CisgICAgaWYgKCFodHRwc1BvcnQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+IHNvY2tz
SG9zdDsKKyAgICBkZWNvZGVyID4+IHNvY2tzSG9zdDsKKyAgICBpZiAoIXNvY2tzSG9zdCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQxNl90PiBzb2Nr
c1BvcnQ7CisgICAgZGVjb2RlciA+PiBzb2Nrc1BvcnQ7CisgICAgaWYgKCFzb2Nrc1BvcnQpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBQcm94eU9wdGlvbnMgcmVzdWx0Owor
ICAgIHJldHVybiB7eworICAgICAgICBXVEZNb3ZlKCpodHRwSG9zdCksCisgICAgICAgIFdURk1v
dmUoKmh0dHBQb3J0KSwKKyAgICAgICAgV1RGTW92ZSgqaHR0cHNIb3N0KSwKKyAgICAgICAgV1RG
TW92ZSgqaHR0cHNQb3J0KSwKKyAgICAgICAgV1RGTW92ZSgqc29ja3NIb3N0KSwKKyAgICAgICAg
V1RGTW92ZSgqc29ja3NQb3J0KSwKKyAgICB9fTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eU9wdGlvbnMuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1Byb3h5T3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uMWQ4OTAyZTA4ODIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvUHJveHlPcHRpb25zLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK09CSkNf
Q0xBU1MgTlNEaWN0aW9uYXJ5OworCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERlY29kZXI7Citj
bGFzcyBFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUHJveHlPcHRp
b25zIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm94eU9w
dGlvbnMoKSA9IGRlZmF1bHQ7CisgICAgCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgUHJveHlP
cHRpb25zKE5TRGljdGlvbmFyeSAqKTsKKyAgICAKKyAgICBOU0RpY3Rpb25hcnkgKnRvUHJveHlD
b25maWd1cmF0aW9uRGljdGlvbmFyeSgpIGNvbnN0OworI2VuZGlmCisKKyAgICBjb25zdCBTdHJp
bmcmIGh0dHBQcm94eUhvc3QoKSBjb25zdCB7IHJldHVybiBtX2h0dHBQcm94eUhvc3Q7IH0KKyAg
ICB1aW50MTZfdCBodHRwUHJveHlQb3J0KCkgY29uc3QgeyByZXR1cm4gbV9odHRwUHJveHlQb3J0
OyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGh0dHBzUHJveHlIb3N0KCkgY29uc3QgeyByZXR1cm4g
bV9odHRwc1Byb3h5SG9zdDsgfQorICAgIHVpbnQxNl90IGh0dHBzUHJveHlQb3J0KCkgY29uc3Qg
eyByZXR1cm4gbV9odHRwc1Byb3h5UG9ydDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBzb2Nrc1By
b3h5SG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fc29ja3NQcm94eUhvc3Q7IH0KKyAgICB1aW50MTZf
dCBzb2Nrc1Byb3h5UG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fc29ja3NQcm94eVBvcnQ7IH0KKwor
ICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBPcHRpb25h
bDxQcm94eU9wdGlvbnM+IGRlY29kZShJUEM6OkRlY29kZXImKTsKKworcHJpdmF0ZToKKyAgICBQ
cm94eU9wdGlvbnMoY29uc3QgU3RyaW5nJiwgdWludDE2X3QsIGNvbnN0IFN0cmluZyYsIHVpbnQx
Nl90LCBjb25zdCBTdHJpbmcmLCB1aW50MTZfdCk7CisKKyAgICBTdHJpbmcgbV9odHRwUHJveHlI
b3N0OworICAgIHVpbnQxNl90IG1faHR0cFByb3h5UG9ydCB7IDAgfTsKKyAgICAKKyAgICBTdHJp
bmcgbV9odHRwc1Byb3h5SG9zdDsKKyAgICB1aW50MTZfdCBtX2h0dHBzUHJveHlQb3J0IHsgMCB9
OworICAgIAorICAgIFN0cmluZyBtX3NvY2tzUHJveHlIb3N0OworICAgIHVpbnQxNl90IG1fc29j
a3NQcm94eVBvcnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9XZWJJY29uVXRpbGl0aWVzLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNvblV0aWxpdGllcy5oCmluZGV4IDEyZDEyYjUyN2U1Yi4u
YjcxZDI0YjZjZmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNv
blV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9XZWJJY29uVXRpbGl0
aWVzLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiBAY2xhc3MgVUlJbWFn
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5t
bSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQppbmRleCAzZDRk
NTllNGJlMzAuLmM4MjRiY2U1MjdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL0NvbG9yU3BhY2VEYXRhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xv
clNwYWNlRGF0YS5tbQpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJDb2xvclNwYWNlRGF0YS5oIgogCisjaW1wb3J0ICJBcmd1bWVudENvZGVycy5oIgogI2lt
cG9ydCAiQXJndW1lbnRDb2RlcnNDRi5oIgogI2ltcG9ydCAiRGVjb2Rlci5oIgogI2ltcG9ydCAi
RW5jb2Rlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL0NvcmVNZWRpYVdyYXBwZWQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9N
ZWRpYUZvcm1hdFJlYWRlci9Db3JlTWVkaWFXcmFwcGVkLmgKaW5kZXggMWMwNjViZDY0Y2U4Li4y
NDI4ZTM1YmQ4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9Db3JlTWVkaWFXcmFwcGVkLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
bWFjL01lZGlhRm9ybWF0UmVhZGVyL0NvcmVNZWRpYVdyYXBwZWQuaApAQCAtMjksNyArMjksMTAg
QEAKIAogI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvTWVkaWFUb29sYm94U1BJLmg+CiAjaW5jbHVk
ZSA8d3RmL0ZvcmJpZEhlYXBBbGxvY2F0aW9uLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2Fz
dHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0
UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKaW5kZXggZDgzZWZj
ZjQ3NzVjLi4wOThkNTY3NTdjYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdl
LmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1l
ZGlhU2FtcGxlQnl0ZVJhbmdlLmgiCiAKKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oPgorCiAjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKIAogbmFtZXNwYWNlIFdlYktp
dCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFk
ZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRp
YUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCmluZGV4IGU0YmVmMjNjNmVlYS4u
NzAwZjUwMzNjMmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFG
b3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaApAQCAtMzIs
NiArMzIsOSBAQAogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAKK3VzaW5nIFdlYkNvcmU6OkZsb2F0U2l6ZTsKK3VzaW5nIFdlYkNvcmU6OlBs
YXRmb3JtU2FtcGxlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTWVkaWFTYW1wbGVC
eXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpDIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRp
YVNhbXBsZUN1cnNvci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVh
ZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmgKaW5kZXggNjg3YjEzMDA0N2E4Li5hYzVjOWYyZWJjMDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9N
ZWRpYVNhbXBsZUN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZv
cm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJDb3JlTWVkaWFXcmFwcGVkLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4K
ICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCkBAIC00OCw4ICs0OSw4IEBAIGNsYXNzIE1lZGlh
VHJhY2tSZWFkZXI7CiAKIGNsYXNzIE1lZGlhU2FtcGxlQ3Vyc29yIDogcHVibGljIENvcmVNZWRp
YVdyYXBwZWQ8TWVkaWFTYW1wbGVDdXJzb3I+LCBUaHJlYWRTYWZlSWRlbnRpZmllZDxNZWRpYVNh
bXBsZUN1cnNvcj4gewogcHVibGljOgotICAgIHVzaW5nIERlY29kZU9yZGVySXRlcmF0b3IgPSBE
ZWNvZGVPcmRlclNhbXBsZU1hcDo6aXRlcmF0b3I7Ci0gICAgdXNpbmcgUHJlc2VudGF0aW9uT3Jk
ZXJJdGVyYXRvciA9IFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcjsKKyAgICB1
c2luZyBEZWNvZGVPcmRlckl0ZXJhdG9yID0gV2ViQ29yZTo6RGVjb2RlT3JkZXJTYW1wbGVNYXA6
Oml0ZXJhdG9yOworICAgIHVzaW5nIFByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3IgPSBXZWJDb3Jl
OjpQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3I7CiAgICAgdXNpbmcgTG9jYXRv
ciA9IFZhcmlhbnQ8TWVkaWFUaW1lLCBEZWNvZGVPcmRlckl0ZXJhdG9yLCBQcmVzZW50YXRpb25P
cmRlckl0ZXJhdG9yPjsKIAogICAgIHN0cnVjdCBUaW1pbmcgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFkZXIuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVh
ZGVyLmgKaW5kZXggMDMzZTc0NTI1ZjJkLi40ZGUxMDFkZjJhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVhZGVyLmgK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJh
Y2tSZWFkZXIuaApAQCAtMzAsMTMgKzMwLDExIEBACiAjaW5jbHVkZSAiQ29yZU1lZGlhV3JhcHBl
ZC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0NvbmRp
dGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVl
Lmg+CiAKIERFQ0xBUkVfQ09SRV9NRURJQV9UUkFJVFMoVHJhY2tSZWFkZXIpOwogCi1uYW1lc3Bh
Y2UgV1RGIHsKLWNsYXNzIFdvcmtRdWV1ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQXVkaW9UcmFja1ByaXZhdGU7CiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOwpAQCAt
NTQsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVyQ2xhc3Mg
d3JhcHBlckNsYXNzKCk7CiAgICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNsYXNzSUQo
KTsKICAgICBzdGF0aWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVRyYWNrUmVhZGVyPiogdW53cmFw
KENNQmFzZU9iamVjdFJlZik7Ci0gICAgc3RhdGljIFdURjo6V29ya1F1ZXVlJiBzdG9yYWdlUXVl
dWUoKTsKKyAgICBzdGF0aWMgV29ya1F1ZXVlJiBzdG9yYWdlUXVldWUoKTsKIAogICAgIHN0YXRp
YyBSZWZQdHI8TWVkaWFUcmFja1JlYWRlcj4gY3JlYXRlKEFsbG9jYXRvciYmLCBjb25zdCBNZWRp
YUZvcm1hdFJlYWRlciYsIENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9vbD4pOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dAppbmRleCAzZWVkNGIyYTA3ZTAuLjcwZTViYTFkMTc4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CkBAIC0xODAsNiArMTgwLDEwIEBAIFNoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5jcHAKIFNo
YXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmNwcAogU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51RGF0YS5j
cHAKIFNoYXJlZC9QcmludEluZm8uY3BwCitTaGFyZWQvUHJveHlDb25maWd1cmF0aW9uLmNwcAor
U2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3BwCitTaGFyZWQvUHJveHlDb25m
aWd1cmF0aW9uUmVnaXN0cnkuY3BwCitTaGFyZWQvUHJveHlPcHRpb25zLmNwcAogU2hhcmVkL1JU
Q05ldHdvcmsuY3BwCiBTaGFyZWQvUlRDUGFja2V0T3B0aW9ucy5jcHAKIFNoYXJlZC9TZXJ2aWNl
V29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
b3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGRk
NGQyYTUwNzY1Ny4uN2ViYzNiZWFhMTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC0xNjAs
NiArMTYwLDggQEAgU2hhcmVkL0NvY29hL0RhdGFEZXRlY3Rpb25SZXN1bHQubW0KIFNoYXJlZC9D
b2NvYS9JbnNlcnRUZXh0T3B0aW9ucy5jcHAKIFNoYXJlZC9Db2NvYS9Mb2FkUGFyYW1ldGVyc0Nv
Y29hLm1tCiBTaGFyZWQvQ29jb2EvUERGS2l0U29mdExpbmsubW0KK1NoYXJlZC9Db2NvYS9Qcm94
eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29hLm1tCitTaGFyZWQvQ29jb2EvUHJveHlPcHRpb25z
Q29jb2EubW0KIFNoYXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29jb2EubW0KIFNoYXJlZC9D
b2NvYS9TYW5kYm94SW5pdGlhbGlhdGlvblBhcmFtZXRlcnNDb2NvYS5tbQogU2hhcmVkL0NvY29h
L1NhbmRib3hVdGlsaXRpZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9BUElQYWdlQ29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uY3BwCmluZGV4IGEzMzUyZTZlYjljNy4uMzFiYWRiZjEx
NzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUGFnZUNvbmZp
Z3VyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQYWdlQ29u
ZmlndXJhdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSVByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIkFQSVdlYnNpdGVQb2xpY2llcy5oIgorI2lu
Y2x1ZGUgIlByb3h5Q29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCkBA
IC05NSw2ICs5Niw3IEBAIFJlZjxQYWdlQ29uZmlndXJhdGlvbj4gUGFnZUNvbmZpZ3VyYXRpb246
OmNvcHkoKSBjb25zdAogCiAgICAgY29weS0+bV9tZWRpYUNhcHR1cmVFbmFibGVkID0gdGhpcy0+
bV9tZWRpYUNhcHR1cmVFbmFibGVkOwogICAgIGNvcHktPm1faHR0cHNVcGdyYWRlRW5hYmxlZCA9
IHRoaXMtPm1faHR0cHNVcGdyYWRlRW5hYmxlZDsKKyAgICBjb3B5LT5tX3Byb3h5T3B0aW9ucyA9
IHRoaXMtPm1fcHJveHlPcHRpb25zOwogCiAgICAgcmV0dXJuIGNvcHk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQYWdlQ29uZmlndXJhdGlvbi5oCmluZGV4IDll
ODM5ZjQ0NTcwZS4uZWUwNjQ0MmIyODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uaApAQCAtMjYsMTEgKzI2LDEzIEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIlByb3h5T3B0aW9u
cy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tp
bmcuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTE2Niw5ICsxNjgsMTEgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyhXZWJDb3Jl
OjpTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyB2YWx1ZSkgeyBtX3Nob3VsZFJl
bGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gdmFsdWU7IH0KICAgICBXZWJDb3JlOjpTaG91
bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyBzaG91bGRSZWxheFRoaXJkUGFydHlDb29r
aWVCbG9ja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmc7IH0KLSAgICAKLXByaXZhdGU6CiAKKyAgICB2b2lkIHNldFByb3h5T3B0aW9ucyhP
cHRpb25hbDxXZWJLaXQ6OlByb3h5T3B0aW9ucz4gcHJveHlPcHRpb25zKSB7IG1fcHJveHlPcHRp
b25zID0gV1RGTW92ZShwcm94eU9wdGlvbnMpOyB9CisgICAgT3B0aW9uYWw8V2ViS2l0OjpQcm94
eU9wdGlvbnM+IHByb3h5T3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPcHRpb25zOyB9
CisKK3ByaXZhdGU6CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w+IG1fcHJvY2Vz
c1Bvb2w7CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk+
IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwogICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VHcm91
cD4gbV9wYWdlR3JvdXA7CkBAIC0yMTcsNiArMjIxLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1f
aHR0cHNVcGdyYWRlRW5hYmxlZCB7IHRydWUgfTsKIAogICAgIFdlYkNvcmU6OlNob3VsZFJlbGF4
VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIG1fc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxv
Y2tpbmcgeyBXZWJDb3JlOjpTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZzo6Tm8g
fTsKKworICAgIE9wdGlvbmFsPFdlYktpdDo6UHJveHlPcHRpb25zPiBtX3Byb3h5T3B0aW9uczsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmgKaW5kZXggOTZmOWEw
YjFkZDFkLi5kMGI0Yjk5MzE3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaApAQCAtMjA3LDYgKzIw
NywzNSBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSkKICAqLwog
LSAobnVsbGFibGUgaWQgPFdLVVJMU2NoZW1lSGFuZGxlcj4pdXJsU2NoZW1lSGFuZGxlckZvclVS
TFNjaGVtZTooTlNTdHJpbmcgKil1cmxTY2hlbWUgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4x
MyksIGlvcygxMS4wKSk7CiAKKy8qISBAYWJzdHJhY3QgVGhlIHByb3h5IGNvbmZpZ3VyYXRpb24g
ZGljdGlvbmFyeQorIEBkaXNjdXNzaW9uIE5ldHdvcmsgY29ubmVjdGlvbnMgb3JpZ2luYXRpbmcg
ZnJvbSB0aGUgV0tXZWJWaWV3IHdpbGwgdXNlIHRoZSBwcm94eSBkZXNjcmliZWQgYnkgdGhlIGRp
Y3Rpb25hcnkuCisgWW91IGNhbiBzcGVjaWZ5IGEgc3RhbmRhcmQgSFRUUCwgSFRUUFMsIG9yIFNP
Q0tTNSBwcm94eSB3aXRoIHRoaXMgZGljdGlvbmFyeS4KKyBUaGUgZm9sbG93aW5nIGFyZSB0aGUg
YWxsb3dhYmxlIGtleXMgYW5kIHZhbHVlczoKKworIEtleSAtIGtTQ1Byb3BOZXRQcm94aWVzSFRU
UFByb3h5IC0gQCJIVFRQUHJveHkiCisgVmFsdWUgLSBBbiBOU1N0cmluZyByZXByZXNlbnRpbmcg
dGhlIGhvc3RuYW1lIG9mIHRoZSBwcm94eQorIEtleSAtIGtTQ1Byb3BOZXRQcm94aWVzSFRUUFBv
cnQgLSBAIkhUVFBQb3J0IgorIFZhbHVlIC0gTlNOdW1iZXIgaW4gdGhlIHJhbmdlIDEtNjU1MzUK
KworIEtleSAtIGtTQ1Byb3BOZXRQcm94aWVzSFRUUFNQcm94eSAtIEAiSFRUUFNQcm94eSIKKyBW
YWx1ZSAtIE5TU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaG9zdG5hbWUgb2YgdGhlIHByb3h5Cisg
S2V5IC0ga1NDUHJvcE5ldFByb3hpZXNIVFRQU1BvcnQgLSBAIkhUVFBTUHJveHkiCisgVmFsdWUg
LSBOU051bWJlciBpbiB0aGUgcmFuZ2UgMS02NTUzNQorCisgS2V5IC0ga1NDUHJvcE5ldFByb3hp
ZXNTT0NLU1Byb3h5IC0gQCJTT0NLU1Byb3h5IgorIFZhbHVlIC0gTlNTdHJpbmcgcmVwcmVzZW50
aW5nIHRoZSBob3N0bmFtZSBvZiB0aGUgcHJveHkKKyBLZXkgLSBrU0NQcm9wTmV0UHJveGllc1NP
Q0tTUG9ydCAtIEAiU09DS1NQb3J0IgorIFZhbHVlIC0gTlNOdW1iZXIgaW4gdGhlIHJhbmdlIDEt
NjU1MzUKKworIFRoZSBjb25zdGFudHMgZm9yIHRoZSBrZXlzIGNhbiBiZSBmb3VuZCBpbiBTQ1Nj
aGVtYURlZmluaXRpb25zLmgKKworIEFueSBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5IHdpdGgg
a2V5cyBvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBhYm92ZSB3aWxsIGJlIGlnbm9yZWQuCisKKyBJ
ZiBhbnkgc3BlY2lmaWVkIHZhbHVlcyBhcmUgbm90IGFzIGRlc2NyaWJlZCwgYW4gZXhjZXB0aW9u
IHdpbGwgYmUgdGhyb3duLgorIElmIHlvdSBzcGVjaWZ5IGEgcHJveHkgaG9zdG5hbWUgeW91IG11
c3QgYWxzbyBzcGVjaWZ5IGl0cyBjb3JyZXNwb25kaW5nIHBvcnQuIEZhaWx1cmUgdG8gZG8gc28g
cmVzdWx0cyBpbiBhbiBleGNlcHRpb24gYmVpbmcgdGhyb3duLgorICovCitAcHJvcGVydHkgKG51
bGxhYmxlLCBub25hdG9taWMsIGNvcHkpIE5TRGljdGlvbmFyeSAqY29ubmVjdGlvblByb3h5RGlj
dGlvbmFyeSBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RC
QSkpOworCiBAZW5kCiAKICNpZiBUQVJHRVRfT1NfSVBIT05FCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1t
CmluZGV4IGM1MDA5YjY4ODZmMy4uMDBkZTZjZWNjYjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5t
bQpAQCAtMTgwLDYgKzE4MCw3IEBAIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZpZXdDb25maWd1cmF0
aW9uIHsKIAogICAgIFJldGFpblB0cjxOU1N0cmluZz4gX21lZGlhQ29udGVudFR5cGVzUmVxdWly
aW5nSGFyZHdhcmVTdXBwb3J0OwogICAgIFJldGFpblB0cjxOU0FycmF5PE5TU3RyaW5nICo+PiBf
YWRkaXRpb25hbFN1cHBvcnRlZEltYWdlVHlwZXM7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFy
eT4gX2Nvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnk7CiB9CiAKIC0gKGluc3RhbmNldHlwZSlpbml0
CkBAIC02MTIsNiArNjEzLDIxIEBAIC0gKFJlZjxBUEk6OlBhZ2VDb25maWd1cmF0aW9uPiljb3B5
UGFnZUNvbmZpZ3VyYXRpb24KICAgICByZXR1cm4gX3BhZ2VDb25maWd1cmF0aW9uLT5jb3B5KCk7
CiB9CiAKKy0gKE5TRGljdGlvbmFyeSAqKWNvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnkKK3sKKyAg
ICByZXR1cm4gX2Nvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnkuZ2V0KCk7Cit9CisKKy0gKHZvaWQp
c2V0Q29ubmVjdGlvblByb3h5RGljdGlvbmFyeTooTlNEaWN0aW9uYXJ5ICopY29ubmVjdGlvblBy
b3h5RGljdGlvbmFyeQoreworICAgIF9jb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5ID0gW2Nvbm5l
Y3Rpb25Qcm94eURpY3Rpb25hcnkgY29weV07CisKKyAgICBpZiAoIWNvbm5lY3Rpb25Qcm94eURp
Y3Rpb25hcnkpCisgICAgICAgIF9wYWdlQ29uZmlndXJhdGlvbi0+c2V0UHJveHlPcHRpb25zKFdU
Rjo6bnVsbG9wdCk7CisgICAgZWxzZQorICAgICAgICBfcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBy
b3h5T3B0aW9ucyhXZWJLaXQ6OlByb3h5T3B0aW9ucyhjb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5
KSk7Cit9CisKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24g
KFdLUHJpdmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYnNpdGVEYXRhU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCmluZGV4IGMzOTM0NTUyYTIzYy4uNmNjYTMzZGU0NmVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRl
RGF0YVN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YnNpdGVEYXRhU3RvcmUubW0KQEAgLTcyNCw0ICs3MjQsMTEgQEAgLSAoQk9PTClfbmV0d29ya1By
b2Nlc3NFeGlzdHMKICAgICByZXR1cm4gISFfd2Vic2l0ZURhdGFTdG9yZS0+bmV0d29ya1Byb2Nl
c3NJZkV4aXN0cygpOwogfQogCistICh2b2lkKV9wcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3Rp
bmc6KHZvaWQgKF4pKHVuc2lnbmVkKSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIF93ZWJzaXRl
RGF0YVN0b3JlLT5wcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcoW2NvbXBsZXRpb25IYW5k
bGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0odW5zaWduZWQgY291bnQpIHsK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY291bnQpOworICAgIH0pOworfQorCiBAZW5kCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0
YVN0b3JlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vi
c2l0ZURhdGFTdG9yZVByaXZhdGUuaAppbmRleCA3ZThhYmVjNjg5N2QuLjI4ZTRiOWRlZTg0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURh
dGFTdG9yZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0ZS5oCkBAIC05OCw3ICs5OCw3IEBAIHR5cGVkZWYgTlNf
T1BUSU9OUyhOU1VJbnRlZ2VyLCBfV0tXZWJzaXRlRGF0YVN0b3JlRmV0Y2hPcHRpb25zKSB7CiAt
IChwaWRfdClfbmV0d29ya1Byb2Nlc3NJZGVudGlmaWVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiArICh2b2lkKV9tYWtlTmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNf
VEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKIC0gKEJPT0wpX25ldHdvcmtQcm9jZXNzRXhpc3RzIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7Ci0KKy0g
KHZvaWQpX3Byb3h5U2Vzc2lvblNldENvdW50Rm9yVGVzdGluZzoodm9pZCheKSh1bnNpZ25lZCkp
Y29tcGxldGlvbkhhbmRsZXI7CiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxMX0VORApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAKaW5kZXggOGQ5MDdlMWM0MWVhLi45ZWI2MjkwYTQ4ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApA
QCAtMzQ2LDYgKzM0NiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OnJlbmFtZU9yaWdp
bkluV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjbwogICAgIHNlbmRXaXRo
QXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlbmFtZU9yaWdpbkluV2Vic2l0
ZURhdGEoc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6cHJveHlT
ZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCh1bnNpZ25lZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
c2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJveHlTZXNzaW9u
U2V0Q291bnRGb3JUZXN0aW5nKHNlc3Npb25JRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
KQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5kZXggNzJiNGI0ZDVh
MGQzLi40YmM5NWQ1YjFlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC0xMjYsNiArMTI2LDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6U2Vzc2lvbklELCBP
cHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+LCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGNvb2tp
ZUhvc3ROYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIEhTVFNDYWNoZUhvc3ROYW1lcywgY29u
c3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBVUkwmLCBjb25zdCBVUkwmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIHZvaWQgcHJveHlTZXNzaW9uU2V0Q291bnRG
b3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKHVuc2lnbmVk
KT4mJik7CisKICAgICB2b2lkIGdldExvY2FsU3RvcmFnZURldGFpbHMoUEFMOjpTZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURhdGFiYXNlVHJhY2tl
cjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogCiAgICAgdm9pZCBwcmVjb25uZWN0VG8oUEFMOjpT
ZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVy
LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+LCBMYXN0TmF2aWdhdGlv
bldhc0FwcEJvdW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmlu
ZGV4IDc3OTEwYWJmM2MwZC4uNDdkODE1ZmU4MTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKQEAgLTg1LDYgKzg1LDggQEAKICNpbmNsdWRlICJQcmludEluZm8u
aCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCiAjaW5jbHVkZSAiUHJvdmlzaW9uYWxQ
YWdlUHJveHkuaCIKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJQ
cm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiU2FmZUJyb3dzaW5nV2Fy
bmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2UuaCIKICNpbmNsdWRl
ICJTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25NYW5hZ2VyLmgiCkBAIC0xMDk3LDYgKzEwOTks
MTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKCkKICAgICBJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCk7CiAjZW5kaWYKIAorICAgIGlmIChhdXRv
IHByb3h5T3B0aW9ucyA9IG1fY29uZmlndXJhdGlvbi0+cHJveHlPcHRpb25zKCkpIHsKKyAgICAg
ICAgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0geyBzZXNzaW9uSUQo
KSwgbV9pZGVudGlmaWVyLCAqcHJveHlPcHRpb25zIH07CisgICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRQ
cm94eUNvbmZpZ3VyYXRpb24oV1RGTW92ZShwYXJhbWV0ZXJzKSksIDApOworICAgIH0KKwogICAg
IHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNyZWF0ZVdlYlBhZ2UobV93ZWJQYWdlSUQsIGNy
ZWF0aW9uUGFyYW1ldGVycyhtX3Byb2Nlc3MsICptX2RyYXdpbmdBcmVhKSksIDApOwogCiAgICAg
bV9wcm9jZXNzLT5hZGRWaXNpdGVkTGlua1N0b3JlVXNlcih2aXNpdGVkTGlua1N0b3JlKCksIG1f
aWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGFiY2RkYzBmMTVjZi4uNzZmYjQ1Zjk0
ODBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMjEzMiw2ICsyMTMyLDExIEBAIHZvaWQgV2Vic2l0
ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBvbGROYW1lLCBVUkwm
JiBuZXdOYW1lLCBPCiAgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVPcmlnaW5JbldlYnNpdGVE
YXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMsIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwcm94eVNlc3Np
b25TZXRDb3VudEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNpZ25lZCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5wcm94eVNlc3Npb25T
ZXRDb3VudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKK30KKwogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKIHZvaWQgV2Vic2l0ZURhdGFT
dG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXggOGI0ZDQxMzQxNDJk
Li5hOWUzNDgzZTQwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNp
dGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTM1Myw2ICszNTMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2Vzcyhjb25zdCBT
dHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgY2xlYXJCdW5k
bGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogICAgIAorICAgIHZvaWQgcHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQodW5zaWduZWQpPiYmKTsKKwogcHJpdmF0ZToKICAgICBlbnVtIGNsYXNz
IEZvcmNlUmVpbml0aWFsaXphdGlvbiA6IGJvb2wgeyBObywgWWVzIH07CiAjaWYgRU5BQkxFKEFQ
UF9CT1VORF9ET01BSU5TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggN2VmZjRmMjZlMzM1Li5hM2JiNzk3M2ZiZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDA5Nyw2ICs0
MDk3LDE2IEBACiAJCTUxRTM1MUM4MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVXRpbGl0aWVzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMzUxQzkxODBGMkNDQzAwRTUzQkU5IC8q
IElEQlV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJVdGls
aXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMzk5MDUxRDZGNTRDNTAw
OUM4ODMxIC8qIFVJR2FtZXBhZFByb3ZpZGVyQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBVSUdhbWVwYWRQcm92aWRlckNvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1MUU3RTJBODI2MEU5MzkzMDA4ODVFQTggLyogUHJveHlDb25m
aWd1cmF0aW9uUmVnaXN0cnlDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByb3h5Q29u
ZmlndXJhdGlvblJlZ2lzdHJ5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxRTdFMkE5MjYwRTkzQjMwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUU3RTJBQTI2MEU5M0IzMDA4ODVFQTgg
LyogUHJveHlDb25maWd1cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5Q29uZmln
dXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRTdFMkFCMjYwRTkz
QjQwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTFFN0UyQUMyNjBFOTNCNDAwODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvblJl
Z2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFFN0UyQUQyNjBFOTNCNTAwODg1
RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcm94eUNvbmZpZ3Vy
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFFN0UyQUUyNjBFOTNCNTAw
ODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBy
b3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxRTdFMkI0MjYxMkNFN0EwMDg4NUVBOCAvKiBQcm94eU9wdGlvbnNDb2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFByb3h5T3B0aW9uc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MUU3RTJCNTI2MTJDRTk2MDA4ODVFQTggLyogUHJveHlPcHRpb25zLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5T3B0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxRTdFMkI2MjYxMkNFOTYwMDg4NUVBOCAvKiBQcm94eU9wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUHJveHlPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxRThCNjhEMUU3MTI4NzMwMDFCNzEzMiAvKiBXZWJVUkxTY2hlbWVUYXNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlVSTFNjaGVtZVRhc2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU5NDk5NjFENzYxQ0M3MDBFQzlFQjkgLyogVUlH
YW1lcGFkUHJvdmlkZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBVSUdhbWVwYWRQcm92aWRlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFGMDYwREQxNjU0MzE3NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlJlc291cmNlTG9hZGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViUmVzb3VyY2VMb2Fk
ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9
OwpAQCAtNjYzNSw2ICs2NjQ1LDE0IEBACiAJCQkJRTE4QzkyRjMxMkRCOUU3MTAwQ0YyQUVCIC8q
IFByaW50SW5mby5jcHAgKi8sCiAJCQkJRTFDQzFCOEUxMkQ3RUFERjAwNjI1ODM4IC8qIFByaW50
SW5mby5oICovLAogCQkJCTQ2M0ZENDgxMUVCOTRFQUQwMEEyOTgyQyAvKiBQcm9jZXNzVGVybWlu
YXRpb25SZWFzb24uaCAqLywKKwkJCQk1MUU3RTJBQTI2MEU5M0IzMDA4ODVFQTggLyogUHJveHlD
b25maWd1cmF0aW9uLmNwcCAqLywKKwkJCQk1MUU3RTJBRDI2MEU5M0I1MDA4ODVFQTggLyogUHJv
eHlDb25maWd1cmF0aW9uLmggKi8sCisJCQkJNTFFN0UyQTkyNjBFOTNCMzAwODg1RUE4IC8qIFBy
b3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3BwICovLAorCQkJCTUxRTdFMkFCMjYwRTkzQjQw
MDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmggKi8sCisJCQkJNTFFN0Uy
QUMyNjBFOTNCNDAwODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmNwcCAqLywK
KwkJCQk1MUU3RTJBRTI2MEU5M0I1MDA4ODVFQTggLyogUHJveHlDb25maWd1cmF0aW9uUmVnaXN0
cnkuaCAqLywKKwkJCQk1MUU3RTJCNTI2MTJDRTk2MDA4ODVFQTggLyogUHJveHlPcHRpb25zLmNw
cCAqLywKKwkJCQk1MUU3RTJCNjI2MTJDRTk2MDA4ODVFQTggLyogUHJveHlPcHRpb25zLmggKi8s
CiAJCQkJOUIxMjI5RDAyM0ZGMkE1RTAwOENBNzUxIC8qIFJlbW90ZUF1ZGlvRGVzdGluYXRpb25J
ZGVudGlmaWVyLmggKi8sCiAJCQkJNUNCN0FGRTYyM0M2ODFCMDAwRTQ5Q0YzIC8qIFJlc291cmNl
TG9hZEluZm8uaCAqLywKIAkJCQk1QzAwOTkzQjI0MTdGQjdFMDBENTNDMjUgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuaCAqLywKQEAgLTgxNDIsNiArODE2MCw4IEBACiAJCQkJ
MkQxMDg3NjIxRDJDNjQxQjAwQjg1RjgyIC8qIExvYWRQYXJhbWV0ZXJzQ29jb2EubW0gKi8sCiAJ
CQkJMkQ0NDBCODMyNUVGMjM1RTAwQTk4RDg3IC8qIFBERktpdFNvZnRMaW5rLmggKi8sCiAJCQkJ
MkQ0NDBCODIyNUVGMjM1RTAwQTk4RDg3IC8qIFBERktpdFNvZnRMaW5rLm1tICovLAorCQkJCTUx
RTdFMkE4MjYwRTkzOTMwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29h
Lm1tICovLAorCQkJCTUxRTdFMkI0MjYxMkNFN0EwMDg4NUVBOCAvKiBQcm94eU9wdGlvbnNDb2Nv
YS5tbSAqLywKIAkJCQk3QUI0RUEzRjIyNzc3QzQ2MDA4NUJCQUEgLyogU2FuZGJveEV4dGVuc2lv
bkNvY29hLm1tICovLAogCQkJCTdBQjRFQTQxMjI3NzdGQzcwMDg1QkJBQSAvKiBTYW5kYm94SW5p
dGlhbGlhdGlvblBhcmFtZXRlcnNDb2NvYS5tbSAqLywKIAkJCQlFMTlCREE4ODE5MzY4NkE0MDBC
OTdGNTcgLyogU2FuZGJveFV0aWxpdGllcy5oICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDNiZTFiNmNmMDFjZC4uOTI0NDJjN2JiOThkIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjEtMDMtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBhYmlsaXR5IHRvIHNldCBIVFRQIHByb3h5IG9uIGEgcGVyLVdLV2ViVmll
dyBiYXNpcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMzg5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbToKKyAg
ICAgICAgKFRFU1QpOgorCiAyMDIxLTAzLTI2ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgW01pbmlCcm93c2VyXSBSZW1vdmUgcmVkdW5kYW50ICJEaXNhYmxlIFNp
bXBsZSBMaW5lIExheW91dCIgbWVudSBpdGVtCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRleCA3NTVjOWFlMTEw
YmYuLmZkZWY5NTA2YTNmNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCkBAIC0yNiwxMCArMjYsMTQgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogCiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCisjaW1wb3J0ICJQbGF0
Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVENQU2VydmVyLmgiCisjaW1wb3J0ICJUZXN0VUlE
ZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9ydCAiVXRpbGl0aWVz
LmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4KICNpbXBvcnQgPFdl
YktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxXZWJLaXQvX1dLV2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgog
I2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rvci5oPgpAQCAtODgs
MyArOTIsNjAgQEAgVEVTVChXZWJLaXQsIE5ldHdvcmtQcm9jZXNzTGF1bmNoT25seVdoZW5OZWNl
c3NhcnkpCiAgICAgW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLnByb2Nlc3NQb29sIF9yZWdpc3Rl
clVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5OkAidGVzdCJdOwogICAg
IEVYUEVDVF9GQUxTRShbW3dlYlZpZXcgY29uZmlndXJhdGlvbl0ud2Vic2l0ZURhdGFTdG9yZSBf
bmV0d29ya1Byb2Nlc3NFeGlzdHNdKTsKIH0KKyAgICAKK1RFU1QoV2ViS2l0LCBXS1dlYlZpZXdQ
cm94eUFQSSkKK3sKKyAgICB1c2luZyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSTsKKworICAgIGJv
b2wgcmVxdWVzdGVkID0gZmFsc2U7CisKKyAgICBIVFRQU2VydmVyIHNlcnZlcihbJl0gKENvbm5l
Y3Rpb24gY29ubmVjdGlvbikgeworICAgICAgICBjb25uZWN0aW9uLnJlY2VpdmVIVFRQUmVxdWVz
dChbJl0oVmVjdG9yPGNoYXI+JiYpIHsKKyAgICAgICAgICAgIHJlcXVlc3RlZCA9IHRydWU7Cisg
ICAgICAgIH0pOworICAgIH0pOworCisgICAgYXV0byBzdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9w
dE5TKFtbX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXROb25QZXJz
aXN0ZW50Q29uZmlndXJhdGlvbl0pOworICAgIFtzdG9yZUNvbmZpZ3VyYXRpb24gc2V0QWxsb3dz
U2VydmVyUHJlY29ubmVjdDpOT107CisgICAgCisgICAgYXV0byB2aWV3Q29uZmlndXJhdGlvbiA9
IGFkb3B0TlMoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gbmV3XSk7CisgICAgW3ZpZXdDb25maWd1
cmF0aW9uIHNldFdlYnNpdGVEYXRhU3RvcmU6YWRvcHROUyhbW1dLV2Vic2l0ZURhdGFTdG9yZSBh
bGxvY10gX2luaXRXaXRoQ29uZmlndXJhdGlvbjpzdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCldKS5n
ZXQoKV07CisgICAgdmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkuY29ubmVjdGlvblByb3h5RGljdGlv
bmFyeSA9IEB7CisgICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFByb3h5
SG9zdCA6IEAiMTI3LjAuMC4xIiwKKyAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVy
dHlIVFRQUHJveHlQb3J0IDogQChzZXJ2ZXIucG9ydCgpKQorICAgIH07CisgICAgdmlld0NvbmZp
Z3VyYXRpb24uZ2V0KCkudXBncmFkZUtub3duSG9zdHNUb0hUVFBTID0gTk87CisKKyAgICBhdXRv
IHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVj
dE1ha2UoMCwgMCwgMTAwLCAxMDApIGNvbmZpZ3VyYXRpb246dmlld0NvbmZpZ3VyYXRpb24uZ2V0
KCldKTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRo
VVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2Rvd25sb2FkLyJdXV07CisgICAgVXRp
bDo6cnVuKCZyZXF1ZXN0ZWQpOworCisgICAgYXV0byB3ZWJWaWV3MiA9IGFkb3B0TlMoW1tXS1dl
YlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkgY29u
ZmlndXJhdGlvbjp2aWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MiBsb2Fk
UmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5n
OkAiaHR0cDovL2Rvd25sb2FkLyJdXV07CisgICAgcmVxdWVzdGVkID0gZmFsc2U7CisgICAgVXRp
bDo6cnVuKCZyZXF1ZXN0ZWQpOworICAgIAorICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIFt2
aWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0b3JlIF9wcm94eVNlc3Npb25TZXRD
b3VudEZvclRlc3Rpbmc6WyZdKHVuc2lnbmVkIGNvdW50KSB7CisgICAgICAgIEVYUEVDVF9FUShj
b3VudCwgMXUpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBVdGlsOjpydW4o
JmRvbmUpOworICAgIAorICAgIHZpZXdDb25maWd1cmF0aW9uLmdldCgpLmNvbm5lY3Rpb25Qcm94
eURpY3Rpb25hcnkgPSBAeworICAgICAgICAoTlNTdHJpbmcgKilrQ0ZTdHJlYW1Qcm9wZXJ0eUhU
VFBQcm94eUhvc3QgOiBAImxvY2FsaG9zdCIsCisgICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVh
bVByb3BlcnR5SFRUUFByb3h5UG9ydCA6IEAoc2VydmVyLnBvcnQoKSkKKyAgICB9OworCisgICAg
YXV0byB3ZWJWaWV3MyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6
Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkgY29uZmlndXJhdGlvbjp2aWV3Q29uZmlndXJhdGlv
bi5nZXQoKV0pOworICAgIFt3ZWJWaWV3MyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVl
c3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiaHR0cDovL2Rvd25sb2FkLyJdXV07Cisg
ICAgcmVxdWVzdGVkID0gZmFsc2U7CisgICAgVXRpbDo6cnVuKCZyZXF1ZXN0ZWQpOworCisgICAg
ZG9uZSA9IGZhbHNlOworICAgIFt2aWV3Q29uZmlndXJhdGlvbi5nZXQoKS53ZWJzaXRlRGF0YVN0
b3JlIF9wcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3Rpbmc6WyZdKHVuc2lnbmVkIGNvdW50KSB7
CisgICAgICAgIEVYUEVDVF9FUShjb3VudCwgMnUpOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAg
ICB9XTsKKyAgICBVdGlsOjpydW4oJmRvbmUpOworfQo=
</data>
<flag name="review"
          id="444392"
          type_id="1"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424686</attachid>
            <date>2021-03-30 13:40:10 -0700</date>
            <delta_ts>2021-03-30 14:38:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>78319</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggNzE0ZDdlNDkwYmM0Li42ZGRjYmRkZWJjODEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIxIEBACisyMDIxLTAzLTMwICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
KworICAgICAgICBBZGQgYWJpbGl0eSB0byBzZXQgSFRUUCBwcm94eSBvbiBhIHBlci1XS1dlYlZp
ZXcgYmFzaXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjM4OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb3ZlcmVkIGJ5IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgVGhpcyBhZGRzIGEgbmV3IHBy
b3BlcnR5IG9uIFdLV2ViVmlld0NvbmZpZ3VyYXRpb246IGNvbm5lY3Rpb25Qcm94eURpY3Rpb25h
cnkuCisgICAgICAgIAorICAgICAgICBUaGUgZGljdGlvbmFyeSBjYW4gaG9sZCB0aGUgc2FtZSB2
YWx1ZXMgYXMgdGhlIE5TVVJMU2Vzc2lvbiBjb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5IG1lbWJl
ci4KKyAgICAgICAgCisgICAgICAgIFdoZW4gYSBXS1dlYlZpZXcgaXMgY3JlYXRlZCB3aXRoIGEg
Y29ubmVjdGlvblByb3h5RGljdGlvbmFyeSwgdGhlbiBhIHNldCBvZiBwcm94eS1zcGVjaWZpYwor
ICAgICAgICBOU1VSTFNlc3Npb25zIGlzIGNyZWF0ZWQgdGhhdCB3aWxsIGhhbmRsZSBuZXR3b3Jr
aW5nIGZvciB0aGF0IFdLV2ViVmlldy4KKyAgICAgICAgCisgICAgICAgIElmIG11bHRpcGxlIFdL
V2ViVmlld3MgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBwcm94eSBjb25maWd1cmF0aW9uIHRo
ZXknbGwgYWxsIHNoYXJlIHRoZQorICAgICAgICBzYW1lIHByb3h5LXNwZWNpZmljIE5TVVJMU2Vz
c2lvbnMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRQcm94eUNvbmZpZ3VyYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6cHJveHlTZXNzaW9uU2V0Q291bnRGb3JU
ZXN0aW5nKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Nlc3Npb246OmFkZFByb3h5Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtTZXNzaW9uOjpwcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcpOgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6UHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyOjpmZWF0dXJl
RW5hYmxlZCBjb25zdCk6CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
U2Vzc2lvbkNvY29hLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nl
c3Npb25Db2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6TmV0
d29ya1Nlc3Npb25Db2NvYSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNzaW9uQ29jb2E6
OmluaXRpYWxpemVQcm94eVNlc3Npb25TZXQpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vz
c2lvbkNvY29hOjpzZXNzaW9uU2V0Rm9yUGFnZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtT
ZXNzaW9uQ29jb2E6OnNlc3Npb25TZXRGb3JQYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Nlc3Npb25Db2NvYTo6YWRkUHJveHlDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Nlc3Npb25Db2NvYTo6cHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5n
KToKKworICAgICAgICAqIFNoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb24uY3BwOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNvblV0aWxpdGllcy5oLgorICAgICAgICAo
V2ViS2l0OjpQcm94eUNvbmZpZ3VyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBy
b3h5Q29uZmlndXJhdGlvbjo6UHJveHlDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
UHJveHlDb25maWd1cmF0aW9uOjp+UHJveHlDb25maWd1cmF0aW9uKToKKyAgICAgICAgKiBTaGFy
ZWQvUHJveHlDb25maWd1cmF0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L2lvcy9XZWJJY29uVXRpbGl0aWVzLmguCisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmlndXJh
dGlvbjo6cHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlByb3h5Q29uZmlndXJhdGlvbjo6aWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogU2hh
cmVkL0NvY29hL1Byb3h5Q29uZmlndXJhdGlvbkNvY29hLm1tOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNvblV0aWxpdGllcy5oLgorICAgICAgICAoV2ViS2l0OjpQ
cm94eUNvbmZpZ3VyYXRpb246OmNyZWF0ZSk6CisKKyAgICAgICAgKiBTaGFyZWQvUHJveHlDb25m
aWd1cmF0aW9uUGFyYW1ldGVycy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvU2hhcmVk
L2lvcy9XZWJJY29uVXRpbGl0aWVzLmguCisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmlndXJh
dGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29u
ZmlndXJhdGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL1Byb3h5Q29u
ZmlndXJhdGlvblBhcmFtZXRlcnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQv
aW9zL1dlYkljb25VdGlsaXRpZXMuaC4KKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1Byb3h5
Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFy
ZWQvaW9zL1dlYkljb25VdGlsaXRpZXMuaC4KKyAgICAgICAgKFdlYktpdDo6UHJveHlDb25maWd1
cmF0aW9uUmVnaXN0cnk6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJLaXQ6OlByb3h5Q29uZmln
dXJhdGlvblJlZ2lzdHJ5Ojpwcm94eUNvbmZpZ3VyYXRpb25EZXN0cm95ZWQpOgorICAgICAgICAq
IFNoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNvblV0aWxpdGllcy5oLgorICAgICAgICAqIFNoYXJlZC9D
b2NvYS9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29hLm1tOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnk6OmdldE9yQ3JlYXRlUHJveHlDb25m
aWd1cmF0aW9uKToKKyAgICAgICAgCisgICAgICAgICogU2hhcmVkL1Byb3h5T3B0aW9ucy5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpQcm94eU9wdGlvbnM6OlByb3h5T3B0aW9ucyk6Cisg
ICAgICAgIChXZWJLaXQ6OlByb3h5T3B0aW9uczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UHJveHlPcHRpb25zOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Qcm94eU9wdGlv
bnMuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9TaGFyZWQvaW9zL1dlYkljb25VdGlsaXRp
ZXMuaC4KKyAgICAgICAgKFdlYktpdDo6UHJveHlPcHRpb25zOjpodHRwUHJveHlIb3N0IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UHJveHlPcHRpb25zOjpodHRwUHJveHlQb3J0IGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UHJveHlPcHRpb25zOjpodHRwc1Byb3h5SG9zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlByb3h5T3B0aW9uczo6aHR0cHNQcm94eVBvcnQgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpQcm94eU9wdGlvbnM6OnNvY2tzUHJveHlIb3N0IGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UHJveHlPcHRpb25zOjpzb2Nrc1Byb3h5UG9ydCBjb25zdCk6CisgICAgICAg
ICogU2hhcmVkL0NvY29hL1Byb3h5T3B0aW9uc0NvY29hLm1tOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6dmVyaWZ5QW5kU2V0SG9zdFBvcnRQYWlyKToKKyAgICAgICAgKFdlYktpdDo6UHJveHlP
cHRpb25zOjpQcm94eU9wdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpQcm94eU9wdGlvbnM6OnRv
UHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSBjb25zdCk6CisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0FQSVBhZ2VDb25maWd1cmF0aW9uLmNwcDoKKyAgICAgICAgKEFQSTo6UGFnZUNvbmZp
Z3VyYXRpb246OmNvcHkgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJUGFnZUNv
bmZpZ3VyYXRpb24uaDoKKyAgICAgICAgKEFQSTo6UGFnZUNvbmZpZ3VyYXRpb246OnNob3VsZFJl
bGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIGNvbnN0KToKKyAgICAgICAgKEFQSTo6UGFnZUNv
bmZpZ3VyYXRpb246OnNldFByb3h5T3B0aW9ucyk6CisgICAgICAgIChBUEk6OlBhZ2VDb25maWd1
cmF0aW9uOjpwcm94eU9wdGlvbnMgY29uc3QpOgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLm1tOgorICAgICAgICAoLVtXS1dlYlZpZXdDb25m
aWd1cmF0aW9uIGNvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnldKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3Q29uZmlndXJhdGlvbiBzZXRDb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5Ol0pOgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmUubW06CisgICAgICAg
ICgtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5nOl0p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlUHJpdmF0
ZS5oOgorCisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnByb3h5U2Vzc2lvblNl
dENvdW50Rm9yVGVzdGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5oOgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5pdGlhbGl6ZVdlYlBhZ2UpOgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpwcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3Rp
bmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6
CisKKyAgICAgICAgRGVhbCB3aXRoIHVwZGF0ZWQgdW5pZmllZCBzb3VyY2UgYnVpbGQgYnJlYWth
Z2U6CisgICAgICAgICogU2hhcmVkL2lvcy9XZWJJY29uVXRpbGl0aWVzLmg6CisgICAgICAgICog
U2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbToKKyAgICAgICAgKiBTaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL0NvcmVNZWRpYVdyYXBwZWQuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcDoKKyAgICAgICAgKiBTaGFy
ZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmg6CisgICAgICAg
ICogU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5oOgorICAg
ICAgICAqIFNoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFUcmFja1JlYWRlci5oOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjEtMDMtMjYgIFBl
ciBBcm5lICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgRW5mb3JjZSBub3RpZnlkIG1l
c3NhZ2UgZmlsdGVyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCmluZGV4IGMxMzE2OGViZjQ3OC4uZmM3YThhNTRkNjAxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNDgsNiAr
NDgsNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJQcmVjb25uZWN0VGFzay5oIgor
I2luY2x1ZGUgIlByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJSZW1v
dGVOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKQEAgLTQyNSw2ICs0MjYs
MjYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkV2Vic2l0ZURhdGFTdG9yZShXZWJzaXRlRGF0
YVN0b3JlUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMKICAgICBSZW1vdGVOZXR3b3JraW5nQ29udGV4
dDo6ZW5zdXJlV2Vic2l0ZURhdGFTdG9yZVNlc3Npb24oKnRoaXMsIFdURk1vdmUocGFyYW1ldGVy
cykpOwogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRQcm94eUNvbmZpZ3VyYXRpb24oUHJv
eHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCit7CisgICAgYXV0byBzZXNz
aW9uID0gbmV0d29ya1Nlc3Npb24ocGFyYW1ldGVycy5zZXNzaW9uSUQpOworICAgIGlmICghc2Vz
c2lvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Vzc2lvbi0+YWRkUHJveHlDb25maWd1cmF0
aW9uKFdURk1vdmUocGFyYW1ldGVycykpOworfQorCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpwcm94
eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKHVuc2lnbmVkKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBhdXRvIHNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihzZXNzaW9uSUQpOworICAgIGlmICghc2Vz
c2lvbikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBjb21wbGV0aW9uSGFuZGxlcihzZXNzaW9uLT5wcm94eVNlc3Npb25T
ZXRDb3VudEZvclRlc3RpbmcoKSk7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZFNlc3Np
b25TdG9yYWdlUXVvdGFNYW5hZ2VyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3Qg
ZGVmYXVsdFF1b3RhLCB1aW50NjRfdCBkZWZhdWx0VGhpcmRQYXJ0eVF1b3RhLCBjb25zdCBTdHJp
bmcmIGNhY2hlUm9vdFBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgY2FjaGVSb290UGF0
aEhhbmRsZSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX3Nlc3Npb25TdG9yYWdlUXVvdGFN
YW5hZ2Vyc0xvY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oCmluZGV4IDVjZWJjN2ZkNTE4Ny4uYzUyNTNiZTE0ZGZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xMTMsNiArMTEzLDcgQEAg
ZW51bSBjbGFzcyBTdG9yYWdlQWNjZXNzU3RhdHVzIDogdWludDhfdDsKIGVudW0gY2xhc3MgV2Vi
c2l0ZURhdGFGZXRjaE9wdGlvbiA6IHVpbnQ4X3Q7CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlw
ZSA6IHVpbnQzMl90Owogc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOwor
c3RydWN0IFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnM7CiBzdHJ1Y3QgV2Vic2l0ZURhdGFT
dG9yZVBhcmFtZXRlcnM7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCkBAIC0yMDUsNiAr
MjA2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJik7CiAK
ICAgICB2b2lkIGFkZFdlYnNpdGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMm
Jik7CisgICAgdm9pZCBhZGRQcm94eUNvbmZpZ3VyYXRpb24oUHJveHlDb25maWd1cmF0aW9uUGFy
YW1ldGVycyYmKTsKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAgICAg
dm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKFBBTDo6U2Vzc2lvbklELCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CkBAIC0zMDgsNiArMzEw
LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0UXVvdGFMb2dnaW5nRW5hYmxlZChQQUw6OlNlc3Np
b25JRCwgYm9vbCBlbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgcmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShQQUw6OlNlc3Npb25JRCwgY29uc3QgVVJMJiwg
Y29uc3QgVVJMJiwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKKyAgICB2b2lkIHByb3h5U2Vzc2lvblNldENvdW50Rm9yVGVzdGluZyhQ
QUw6OlNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNpZ25lZCk+JiYpOworICAg
IAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBXZWJDb3JlOjpTV1NlcnZlciogc3dT
ZXJ2ZXJGb3JTZXNzaW9uSWZFeGlzdHMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSB7IHJldHVy
biBtX3N3U2VydmVycy5nZXQoc2Vzc2lvbklEKTsgfQogICAgIFdlYkNvcmU6OlNXU2VydmVyJiBz
d1NlcnZlckZvclNlc3Npb24oUEFMOjpTZXNzaW9uSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggOWQx
ZWQ4OGVhMDRhLi43MmE0MzIwYjkxODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtNDAsNiArNDAsNyBA
QCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgQ2xlYXJD
YWNoZWRDcmVkZW50aWFscyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAKICAgICBBZGRXZWJz
aXRlRGF0YVN0b3JlKHN0cnVjdCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzIHdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzKTsKKyAgICBBZGRQcm94eUNvbmZpZ3VyYXRpb24oc3Ry
dWN0IFdlYktpdDo6UHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyBwcm94eUNvbmZpZ3VyYXRp
b25QYXJhbWV0ZXJzKTsKICAgICBEZXN0cm95U2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiAKICAgICBGZXRjaFdlYnNpdGVEYXRhKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0
aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBPcHRpb25T
ZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIFdlYktpdDo6
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtNDcsNiArNDgsOCBAQCBtZXNzYWdlcyAtPiBOZXR3
b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmln
aW5zKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURh
dGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhPiBvcmlnaW5zLCBWZWN0b3I8U3RyaW5nPiBjb29raWVIb3N0TmFtZXMsIFZlY3RvcjxTdHJp
bmc+IEhTVFNDYWNoZUhvc3ROYW1lcywgVmVjdG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
PiByZWdpc3RyYWJsZURvbWFpbnMsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAg
IFJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBVUkwg
b2xkRG9tYWluLCBVUkwgbmV3RG9tYWluLCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5
cGU+IHdlYnNpdGVEYXRhVHlwZXMpIC0+ICgpIEFzeW5jCiAKKyAgICBQcm94eVNlc3Npb25TZXRD
b3VudEZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAodW5zaWduZWQgY291
bnQpIEFzeW5jCisKICAgICBEb3dubG9hZFJlcXVlc3QoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCBXZWJLaXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QsIGVudW06Ym9vbCBPcHRpb25hbDxXZWJLaXQ6Ok5hdmlnYXRpbmdUb0FwcEJvdW5k
RG9tYWluPiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluLCBTdHJpbmcgc3VnZ2VzdGVkRmls
ZW5hbWUpCiAgICAgUmVzdW1lRG93bmxvYWQoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJL
aXQ6OkRvd25sb2FkSUQgZG93bmxvYWRJRCwgSVBDOjpEYXRhUmVmZXJlbmNlIHJlc3VtZURhdGEs
IFN0cmluZyBwYXRoLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlLCBlbnVtOmJvb2wgV2ViS2l0OjpDYWxsRG93bmxvYWREaWRTdGFydCBjYWxs
RG93bmxvYWREaWRTdGFydCkKICAgICBDYW5jZWxEb3dubG9hZChXZWJLaXQ6OkRvd25sb2FkSUQg
ZG93bmxvYWRJRCkgLT4gKElQQzo6RGF0YVJlZmVyZW5jZSByZXN1bWVEYXRhKSBBc3luYwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGUzOTJl
OTYxN2MyMS4uZjA4MDg2NjlkOTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrU2Vzc2lvbi5oCkBAIC02MSw2ICs2MSw3IEBAIGNsYXNzIE5ldHdvcmtTb2NrZXRD
aGFubmVsOwogY2xhc3MgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwogY2xhc3MgV2Vi
U29ja2V0VGFzazsKIHN0cnVjdCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczsKK3N0
cnVjdCBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzOwogCiBlbnVtIGNsYXNzIFdlYnNpdGVE
YXRhVHlwZSA6IHVpbnQzMl90OwogCkBAIC04OCw2ICs4OSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKE5ldHdvcmtEYXRhVGFzayYpOwogICAgIHZvaWQgdW5y
ZWdpc3Rlck5ldHdvcmtEYXRhVGFzayhOZXR3b3JrRGF0YVRhc2smKTsKIAorICAgIHZpcnR1YWwg
dm9pZCBhZGRQcm94eUNvbmZpZ3VyYXRpb24oUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyYm
KSB7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHByb3h5U2Vzc2lvblNldENvdW50Rm9yVGVzdGlu
ZygpIHsgcmV0dXJuIDA7IH0KKwogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CiAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKiByZXNvdXJjZUxvYWRTdGF0aXN0
aWNzKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmdldCgpOyB9CiAg
ICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRN
YW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0ZUNsaWNrTWVh
c3VyZW1lbnRNYW5hZ2VyLmNwcAppbmRleCBhYjFmZDM4ZDY0M2QuLjZjYmYzNGExMmZjYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9Qcml2YXRlQ2xpY2tNZWFzdXJl
bWVudE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvUHJpdmF0
ZUNsaWNrTWVhc3VyZW1lbnRNYW5hZ2VyLmNwcApAQCAtNTAyLDYgKzUwMiwxMCBAQCB2b2lkIFBy
aXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6c2V0UENNRnJhdWRQcmV2ZW50aW9uVmFsdWVz
Rm9yVGVzdGluZyhTdHJpbgogCiBib29sIFByaXZhdGVDbGlja01lYXN1cmVtZW50TWFuYWdlcjo6
ZmVhdHVyZUVuYWJsZWQoKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBDYWxsZXJzIG9mICJmZWF0
dXJlRW5hYmxlZCIgc2hvdWxkIGhhdmUgV2ViUGFnZVByb3h5SWRlbnRpZmllciBjb250ZXh0LAor
ICAgIC8vIGFuZCBXZWJQYWdlUHJveHlzIGN1cnJlbnRseSB1c2luZyBhbiBIVFRQIHByb3h5IGZv
ciBuZXR3b3JraW5nIHNob3VsZCBub3QgZ2V0IFBDTS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIzODk4CisgICAgCiAgICAgcmV0dXJuIG1fbmV0d29y
a1Nlc3Npb24gJiYgbV9uZXR3b3JrUHJvY2Vzcy0+cHJpdmF0ZUNsaWNrTWVhc3VyZW1lbnRFbmFi
bGVkKCkgJiYgIW1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLmgK
aW5kZXggMWFjZGQyNzE0ZjVjLi4zY2YxYjIxMmExYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5oCkBAIC0z
OCw2ICszOCw3IEBAIE9CSkNfQ0xBU1MgX05TSFNUU1N0b3JhZ2U7CiAjaW5jbHVkZSAiRG93bmxv
YWRJRC5oIgogI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza0NvY29hLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHlJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0VGFzay5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CkBAIC0xMzYsOSArMTM3LDkg
QEAgcHJpdmF0ZToKIAogICAgIHN0cnVjdCBTZXNzaW9uU2V0IDogcHVibGljIFJlZkNvdW50ZWQ8
U2Vzc2lvblNldD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxTZXNzaW9uU2V0
PiBjcmVhdGUoKQorICAgICAgICBzdGF0aWMgUmVmPFNlc3Npb25TZXQ+IGNyZWF0ZShSZWZQdHI8
UHJveHlDb25maWd1cmF0aW9uPiYmIHByb3h5Q29uZmlndXJhdGlvbikKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2Vzc2lvblNldCk7CisgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXNzaW9uU2V0KFdURk1vdmUocHJveHlDb25maWd1cmF0aW9u
KSkpOwogICAgICAgICB9CiAgICAgCiAgICAgICAgIFNlc3Npb25XcmFwcGVyJiBpc29sYXRlZFNl
c3Npb24oV2ViQ29yZTo6U3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIGNvbnN0IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluLCBOYXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiwgTmV0d29ya1Nlc3Np
b25Db2NvYSYpOwpAQCAtMTUxLDE4ICsxNTIsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgU2Vzc2lv
bldyYXBwZXIgc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZTsKICAgICAgICAgU2Vzc2lv
bldyYXBwZXIgZXBoZW1lcmFsU3RhdGVsZXNzU2Vzc2lvbjsKIAorICAgICAgICBSZWZQdHI8UHJv
eHlDb25maWd1cmF0aW9uPiBwcm94eUNvbmZpZ3VyYXRpb247CisKICAgICBwcml2YXRlOgotICAg
ICAgICBTZXNzaW9uU2V0KCkgPSBkZWZhdWx0OworICAgICAgICBTZXNzaW9uU2V0KFJlZlB0cjxQ
cm94eUNvbmZpZ3VyYXRpb24+JiYgcHJveHlDb25maWd1cmF0aW9uKQorICAgICAgICAgICAgOiBw
cm94eUNvbmZpZ3VyYXRpb24oV1RGTW92ZShwcm94eUNvbmZpZ3VyYXRpb24pKQorICAgICAgICB7
CisgICAgICAgIH0KICAgICB9OwogCiAgICAgUmVmPFNlc3Npb25TZXQ+IG1fZGVmYXVsdFNlc3Np
b25TZXQ7CisgICAgSGFzaE1hcDxQcm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyLCBSZWY8U2Vz
c2lvblNldD4+IG1fcGVyUHJveHlTZXNzaW9uU2V0czsKICAgICBIYXNoTWFwPFdlYlBhZ2VQcm94
eUlkZW50aWZpZXIsIFJlZjxTZXNzaW9uU2V0Pj4gbV9wZXJQYWdlU2Vzc2lvblNldHM7CiAKKyAg
ICB2b2lkIGFkZFByb3h5Q29uZmlndXJhdGlvbihQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJz
JiYpIGZpbmFsOworICAgIHVuc2lnbmVkIHByb3h5U2Vzc2lvblNldENvdW50Rm9yVGVzdGluZygp
IGZpbmFsOworCiAgICAgdm9pZCBpbml0aWFsaXplU3RhbmRhcmRTZXNzaW9uc0luU2V0KFNlc3Np
b25TZXQmLCBOU1VSTFNlc3Npb25Db25maWd1cmF0aW9uICopOworICAgIHZvaWQgaW5pdGlhbGl6
ZVByb3h5U2Vzc2lvblNldChTZXNzaW9uU2V0Jik7CisKICAgICBTZXNzaW9uU2V0JiBzZXNzaW9u
U2V0Rm9yUGFnZShXZWJQYWdlUHJveHlJZGVudGlmaWVyKTsKICAgICBjb25zdCBTZXNzaW9uU2V0
JiBzZXNzaW9uU2V0Rm9yUGFnZShXZWJQYWdlUHJveHlJZGVudGlmaWVyKSBjb25zdDsKICAgICB2
b2lkIGludmFsaWRhdGVBbmRDYW5jZWxTZXNzaW9uU2V0KFNlc3Npb25TZXQmKTsKLSAgICAKKwog
ICAgIFN0cmluZyBtX2JvdW5kSW50ZXJmYWNlSWRlbnRpZmllcjsKICAgICBTdHJpbmcgbV9zb3Vy
Y2VBcHBsaWNhdGlvbkJ1bmRsZUlkZW50aWZpZXI7CiAgICAgU3RyaW5nIG1fc291cmNlQXBwbGlj
YXRpb25TZWNvbmRhcnlJZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCmluZGV4IDI0YTQyZGYz
MTE5MC4uODM3YmE4OGU1YjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCkBAIC0zNiw2ICszNiw4IEBA
CiAjaW1wb3J0ICJOZXR3b3JrTG9hZC5oIgogI2ltcG9ydCAiTmV0d29ya1Byb2Nlc3MuaCIKICNp
bXBvcnQgIk5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJQcm94
eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJQcm94eUNvbmZpZ3VyYXRpb25S
ZWdpc3RyeS5oIgogI2ltcG9ydCAiV2ViU29ja2V0VGFzay5oIgogI2ltcG9ydCA8Rm91bmRhdGlv
bi9OU1VSTFNlc3Npb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvQ3JlZGVudGlhbC5oPgpAQCAtMTE2
MCw3ICsxMTYyLDcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGVTZXNzaW9uQ2xlYW51cChOZXR3b3Jr
U2Vzc2lvbkNvY29hJiBzZXNzaW9uLCBjb25zdCBOZXR3b3JrU2UKIAogTmV0d29ya1Nlc3Npb25D
b2NvYTo6TmV0d29ya1Nlc3Npb25Db2NvYShOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3Ms
IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICA6IE5l
dHdvcmtTZXNzaW9uKG5ldHdvcmtQcm9jZXNzLCBwYXJhbWV0ZXJzKQotICAgICwgbV9kZWZhdWx0
U2Vzc2lvblNldChTZXNzaW9uU2V0OjpjcmVhdGUoKSkKKyAgICAsIG1fZGVmYXVsdFNlc3Npb25T
ZXQoU2Vzc2lvblNldDo6Y3JlYXRlKG51bGxwdHIpKQogICAgICwgbV9ib3VuZEludGVyZmFjZUlk
ZW50aWZpZXIocGFyYW1ldGVycy5ib3VuZEludGVyZmFjZUlkZW50aWZpZXIpCiAgICAgLCBtX3Nv
dXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcihwYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0
aW9uQnVuZGxlSWRlbnRpZmllcikKICAgICAsIG1fc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJ
ZGVudGlmaWVyKHBhcmFtZXRlcnMuc291cmNlQXBwbGljYXRpb25TZWNvbmRhcnlJZGVudGlmaWVy
KQpAQCAtMTI5OCwxNiArMTMwMCw1MiBAQCB2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmluaXRp
YWxpemVTdGFuZGFyZFNlc3Npb25zSW5TZXQoU2Vzc2lvblNldCYgc2Vzc2lvblNldAogICAgIHNl
c3Npb25TZXQuc2Vzc2lvbldpdGhvdXRDcmVkZW50aWFsU3RvcmFnZS5pbml0aWFsaXplKGNvbmZp
Z3VyYXRpb24sICp0aGlzLCBXZWJDb3JlOjpTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RV
c2UsIE5hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluOjpObyk7CiB9CiAKK3ZvaWQgTmV0d29ya1Nl
c3Npb25Db2NvYTo6aW5pdGlhbGl6ZVByb3h5U2Vzc2lvblNldChTZXNzaW9uU2V0JiBzZXNzaW9u
U2V0KQoreworICAgIEFTU0VSVChzZXNzaW9uU2V0LnByb3h5Q29uZmlndXJhdGlvbik7CisgICAg
QVNTRVJUKHNlc3Npb25TZXQucHJveHlDb25maWd1cmF0aW9uLT5wcm94eUNvbmZpZ3VyYXRpb25E
aWN0aW9uYXJ5KCkpOworCisgICAgTlNVUkxTZXNzaW9uQ29uZmlndXJhdGlvbiAqY29uZmlndXJh
dGlvbiA9IFttX2RlZmF1bHRTZXNzaW9uU2V0LT5zZXNzaW9uV2l0aENyZWRlbnRpYWxTdG9yYWdl
LnNlc3Npb24uZ2V0KCkuY29uZmlndXJhdGlvbiBjb3B5XTsKKyAgICBjb25maWd1cmF0aW9uLmNv
bm5lY3Rpb25Qcm94eURpY3Rpb25hcnkgPSAoTlNEaWN0aW9uYXJ5ICopc2Vzc2lvblNldC5wcm94
eUNvbmZpZ3VyYXRpb24tPnByb3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnkoKTsKKyAgICBpbml0
aWFsaXplU3RhbmRhcmRTZXNzaW9uc0luU2V0KHNlc3Npb25TZXQsIGNvbmZpZ3VyYXRpb24pOwor
fQorCiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpTZXNzaW9uU2V0JiBOZXR3b3JrU2Vzc2lvbkNvY29h
OjpzZXNzaW9uU2V0Rm9yUGFnZShXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlE
KQogeworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAoIXdlYlBhZ2VQcm94eUlEKSB7CisgICAgICAg
IFdURkxvZ0Fsd2F5cygiTmV0d29ya1Nlc3Npb25Db2NvYTo6c2Vzc2lvblNldEZvclBhZ2UgLSBJ
bnZhbGlkIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgY29udGV4dCwgZmFsbGluZyBiYWNrIHRvIHRo
ZSBkZWZhdWx0IFNlc3Npb25TZXQuIFBsZWFzZSBmaWxlIGEgYnVnLiIpOworICAgICAgICBXVEZS
ZXBvcnRCYWNrdHJhY2UoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIFNlc3Npb25TZXQqIHNlc3Np
b25TZXQgPSB3ZWJQYWdlUHJveHlJRCA/IG1fcGVyUGFnZVNlc3Npb25TZXRzLmdldCh3ZWJQYWdl
UHJveHlJRCkgOiBudWxscHRyOwogICAgIHJldHVybiBzZXNzaW9uU2V0ID8gKnNlc3Npb25TZXQg
OiBtX2RlZmF1bHRTZXNzaW9uU2V0LmdldCgpOwogfQogCiBjb25zdCBOZXR3b3JrU2Vzc2lvbkNv
Y29hOjpTZXNzaW9uU2V0JiBOZXR3b3JrU2Vzc2lvbkNvY29hOjpzZXNzaW9uU2V0Rm9yUGFnZShX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlEKSBjb25zdAogewotICAgIFNlc3Np
b25TZXQqIHNlc3Npb25TZXQgPSB3ZWJQYWdlUHJveHlJRCA/IG1fcGVyUGFnZVNlc3Npb25TZXRz
LmdldCh3ZWJQYWdlUHJveHlJRCkgOiBudWxscHRyOwotICAgIHJldHVybiBzZXNzaW9uU2V0ID8g
KnNlc3Npb25TZXQgOiBtX2RlZmF1bHRTZXNzaW9uU2V0LmdldCgpOworICAgIHJldHVybiBjb25z
dF9jYXN0PE5ldHdvcmtTZXNzaW9uQ29jb2EmPigqdGhpcykuc2Vzc2lvblNldEZvclBhZ2Uod2Vi
UGFnZVByb3h5SUQpOworfQorCit2b2lkIE5ldHdvcmtTZXNzaW9uQ29jb2E6OmFkZFByb3h5Q29u
ZmlndXJhdGlvbihQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKK3sK
KyAgICBBU1NFUlQocGFyYW1ldGVycy5zZXNzaW9uSUQgJiYgbV9zZXNzaW9uSUQgPT0gcGFyYW1l
dGVycy5zZXNzaW9uSUQpOworCisgICAgYXV0byBwcm94eUNvbmZpZ3VyYXRpb24gPSBQcm94eUNv
bmZpZ3VyYXRpb25SZWdpc3RyeTo6c2luZ2xldG9uKCkuZ2V0T3JDcmVhdGVQcm94eUNvbmZpZ3Vy
YXRpb24oV1RGTW92ZShwYXJhbWV0ZXJzLnByb3h5T3B0aW9ucykpOworICAgIAorICAgIGF1dG8g
c2Vzc2lvblNldCA9IG1fcGVyUHJveHlTZXNzaW9uU2V0cy5lbnN1cmUocHJveHlDb25maWd1cmF0
aW9uLT5pZGVudGlmaWVyKCksIFsmXSB7CisgICAgICAgIGF1dG8gbmV3U2V0ID0gU2Vzc2lvblNl
dDo6Y3JlYXRlKFdURk1vdmUocHJveHlDb25maWd1cmF0aW9uKSk7CisgICAgICAgIGluaXRpYWxp
emVQcm94eVNlc3Npb25TZXQobmV3U2V0LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIG5ld1NldDsK
KyAgICB9KTsKKyAgICAKKyAgICBtX3BlclBhZ2VTZXNzaW9uU2V0cy5zZXQocGFyYW1ldGVycy53
ZWJQYWdlUHJveHlJRCwgc2Vzc2lvblNldC5pdGVyYXRvci0+dmFsdWUpOworfQorCit1bnNpZ25l
ZCBOZXR3b3JrU2Vzc2lvbkNvY29hOjpwcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcoKQor
eworICAgIHJldHVybiBtX3BlclByb3h5U2Vzc2lvblNldHMuc2l6ZSgpOwogfQogCiBTZXNzaW9u
V3JhcHBlciYgTmV0d29ya1Nlc3Npb25Db2NvYTo6aW5pdGlhbGl6ZUVwaGVtZXJhbFN0YXRlbGVz
c1Nlc3Npb25JZk5lZWRlZChXZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlELCBO
YXZpZ2F0aW5nVG9BcHBCb3VuZERvbWFpbiBpc05hdmlnYXRpbmdUb0FwcEJvdW5kRG9tYWluKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvUHJveHlDb25maWd1cmF0aW9u
UmVnaXN0cnlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1Byb3h5Q29uZmln
dXJhdGlvblJlZ2lzdHJ5Q29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi5lNmRjNDJkNzA0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29hLm1tCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlByb3h5Q29u
ZmlndXJhdGlvblJlZ2lzdHJ5LmgiCisKKyNpbXBvcnQgIlByb3h5Q29uZmlndXJhdGlvbi5oIgor
I2ltcG9ydCAiUHJveHlPcHRpb25zLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitSZWZQdHI8
UHJveHlDb25maWd1cmF0aW9uPiBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeTo6Z2V0T3JDcmVh
dGVQcm94eUNvbmZpZ3VyYXRpb24oUHJveHlPcHRpb25zJiYgcHJveHlPcHRpb25zKQoreworICAg
IGlmICghbV9kaWN0aW9uYXJ5VG9Qcm94eUNvbmZpZ3VyYXRpb25NYXApCisgICAgICAgIG1fZGlj
dGlvbmFyeVRvUHJveHlDb25maWd1cmF0aW9uTWFwID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rp
b25hcnk8TlNEaWN0aW9uYXJ5ICosIE5TTnVtYmVyICo+IGFsbG9jXSBpbml0XSk7CisgICAgCisg
ICAgTlNEaWN0aW9uYXJ5ICpwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5ID0gcHJveHlPcHRp
b25zLnRvUHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSgpOworCisgICAgTlNOdW1iZXIgKm5z
UHJveHlDb25maWd1cmF0aW9uSUQgPSBbbV9kaWN0aW9uYXJ5VG9Qcm94eUNvbmZpZ3VyYXRpb25N
YXAuZ2V0KCkgb2JqZWN0Rm9yS2V5OihOU0RpY3Rpb25hcnkgKilwcm94eUNvbmZpZ3VyYXRpb25E
aWN0aW9uYXJ5XTsKKyAgICBpZiAobnNQcm94eUNvbmZpZ3VyYXRpb25JRCkgeworICAgICAgICBh
dXRvIHByb3h5Q29uZmlndXJhdGlvbklEID0gbWFrZU9iamVjdElkZW50aWZpZXI8V2ViS2l0OjpQ
cm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyVHlwZT4obnNQcm94eUNvbmZpZ3VyYXRpb25JRC51
bnNpZ25lZExvbmdMb25nVmFsdWUpOworICAgICAgICAKKyAgICAgICAgaWYgKGF1dG8gcHJveHlD
b25maWd1cmF0aW9uID0gbV9wcm94eUNvbmZpZ3VyYXRpb25zLmdldChwcm94eUNvbmZpZ3VyYXRp
b25JRCkpCisgICAgICAgICAgICByZXR1cm4gcHJveHlDb25maWd1cmF0aW9uOworICAgICAgICAK
KyAgICAgICAgLy8gVGhlIG9sZCBQcm94eUNvbmZpZ3VyYXRpb24gZm9yIHRoZSBlcXVpdmFsZW50
IE5TRGljdGlvbmFyeSBoYXMgYmVlbiBkZWFsbG9jYXRlZCwKKyAgICAgICAgLy8gc28gbGV0J3Mg
YWxzbyBmb3JnZXQgYWJvdXQgdGhlIG9sZCBOU0RpY3Rpb25hcnkgdGhhdCBzcGF3bmVkIGl0Lgor
ICAgICAgICBbbV9kaWN0aW9uYXJ5VG9Qcm94eUNvbmZpZ3VyYXRpb25NYXAuZ2V0KCkgcmVtb3Zl
T2JqZWN0Rm9yS2V5OihOU0RpY3Rpb25hcnkgKilwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5
XTsKKyAgICB9CisKKyAgICBhdXRvIG5ld0lkZW50aWZpZXIgPSBQcm94eUNvbmZpZ3VyYXRpb25J
ZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3Byb3h5Q29uZmln
dXJhdGlvbnMuZW5zdXJlKG5ld0lkZW50aWZpZXIsIFtdKCkgeworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9KS5pdGVyYXRvcjsKKworICAgIGF1dG8gcHJveHlDb25maWd1cmF0aW9uID0g
UHJveHlDb25maWd1cmF0aW9uOjpjcmVhdGUobmV3SWRlbnRpZmllciwgKENGRGljdGlvbmFyeVJl
Zilwcm94eUNvbmZpZ3VyYXRpb25EaWN0aW9uYXJ5KTsKKyAgICBpdGVyYXRvci0+dmFsdWUgPSBw
cm94eUNvbmZpZ3VyYXRpb24uZ2V0KCk7CisgICAgW21fZGljdGlvbmFyeVRvUHJveHlDb25maWd1
cmF0aW9uTWFwLmdldCgpIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkTG9u
Z0xvbmc6bmV3SWRlbnRpZmllci50b1VJbnQ2NCgpXSBmb3JLZXk6KE5TRGljdGlvbmFyeSAqKXBy
b3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnldOworCisgICAgcmV0dXJuIHByb3h5Q29uZmlndXJh
dGlvbjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9Db2NvYS9Qcm94eU9wdGlvbnNDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL0NvY29hL1Byb3h5T3B0aW9uc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uMjU1MjUwYWY2MWNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvQ29jb2EvUHJveHlPcHRpb25zQ29jb2EubW0KQEAgLTAsMCArMSw4NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiUHJveHlPcHRpb25zLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgdm9pZCB2ZXJpZnlBbmRTZXRIb3N0UG9y
dFBhaXIoaWQgaG9zdCwgaWQgcG9ydCwgU3RyaW5nJiBob3N0UmVzdWx0LCB1aW50MTZfdCYgcG9y
dFJlc3VsdCkKK3sKKyAgICBpZiAoIWhvc3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAoIVtob3N0IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgIFtOU0V4
Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBdHRlbXB0
aW5nIHRvIHNldCBwcm94eSBob3N0IGZyb20gV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5jb25uZWN0
aW9uUHJveHlEaWN0aW9uYXJ5IHRoYXQgaXMgbm90IGEgdmFsaWQgc3RyaW5nOiAlQCIsIGhvc3Rd
OworCisgICAgaWYgKCFwb3J0KQorICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlk
QXJndW1lbnRFeGNlcHRpb24gZm9ybWF0OkAiQXR0ZW1wdGluZyB0byBzZXQgcHJveHkgaG9zdCBm
cm9tIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24uY29ubmVjdGlvblByb3h5RGljdGlvbmFyeSB3aXRo
b3V0IGEgY29ycmVzcG9uZGluZyBwcm94eSBwb3J0Il07CisKKyAgICBpZiAoIVtwb3J0IGlzS2lu
ZE9mQ2xhc3M6W05TTnVtYmVyIGNsYXNzXV0pCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpO
U0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBdHRlbXB0aW5nIHRvIHNldCBwcm94
eSBob3N0IGZyb20gV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5jb25uZWN0aW9uUHJveHlEaWN0aW9u
YXJ5IHdpdGggYSBjb3JyZXNwb25kaW5nIHByb3h5IHBvcnQgdGhhdCBpcyBub3QgYW4gaW5zdGFu
Y2Ugb2YgKE5TKU51bWJlcjogJUAiLCBwb3J0XTsKKyAgICAKKyAgICBhdXRvIHBvZFBvcnQgPSBb
KE5TTnVtYmVyICopcG9ydCB1bnNpZ25lZExvbmdMb25nVmFsdWVdOworICAgIGlmICghcG9kUG9y
dCB8fCBwb2RQb3J0ID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQorICAg
ICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9ybWF0
OkAiQXR0ZW1wdGluZyB0byBzZXQgcHJveHkgaG9zdCBmcm9tIFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24uY29ubmVjdGlvblByb3h5RGljdGlvbmFyeSB3aXRoIGEgY29ycmVzcG9uZGluZyBwcm94eSBw
b3J0IHRoYXQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgMS02NTUzNSJdOworCisgICAgaG9zdFJlc3Vs
dCA9IChOU1N0cmluZyAqKWhvc3Q7CisgICAgcG9ydFJlc3VsdCA9IHN0YXRpY19jYXN0PHVpbnQx
Nl90Pihwb2RQb3J0KTsKK30KKworUHJveHlPcHRpb25zOjpQcm94eU9wdGlvbnMoTlNEaWN0aW9u
YXJ5ICpkaWN0aW9uYXJ5KQoreworICAgIHZlcmlmeUFuZFNldEhvc3RQb3J0UGFpcihkaWN0aW9u
YXJ5WyhOU1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzSFRUUFByb3h5XSwgZGljdGlvbmFyeVso
TlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJveGllc0hUVFBQb3J0XSwgbV9odHRwUHJveHlIb3N0LCBt
X2h0dHBQcm94eVBvcnQpOworICAgIHZlcmlmeUFuZFNldEhvc3RQb3J0UGFpcihkaWN0aW9uYXJ5
WyhOU1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzSFRUUFNQcm94eV0sIGRpY3Rpb25hcnlbKE5T
U3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQU1BvcnRdLCBtX2h0dHBzUHJveHlIb3N0LCBt
X2h0dHBzUHJveHlQb3J0KTsKKyAgICB2ZXJpZnlBbmRTZXRIb3N0UG9ydFBhaXIoZGljdGlvbmFy
eVsoTlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJveGllc1NPQ0tTUHJveHldLCBkaWN0aW9uYXJ5WyhO
U1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzU09DS1NQb3J0XSwgbV9zb2Nrc1Byb3h5SG9zdCwg
bV9zb2Nrc1Byb3h5UG9ydCk7CisgICAgCisgICAgaWYgKCFtX3NvY2tzUHJveHlIb3N0LmlzTnVs
bCgpICYmICghbV9odHRwUHJveHlIb3N0LmlzTnVsbCgpIHx8ICFtX2h0dHBzUHJveHlIb3N0Lmlz
TnVsbCgpKSkKKyAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW52YWxpZEFyZ3VtZW50RXhj
ZXB0aW9uIGZvcm1hdDpAIkNhbm5vdCBzcGVjaWZ5IGJvdGggYSBTT0NLUzUgYW5kIGFuIEhUVFAo
UykgcHJveHkgaW4gV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5jb25uZWN0aW9uUHJveHlEaWN0aW9u
YXJ5Il07Cit9CisKK05TRGljdGlvbmFyeSAqUHJveHlPcHRpb25zOjp0b1Byb3h5Q29uZmlndXJh
dGlvbkRpY3Rpb25hcnkoKSBjb25zdAoreworICAgIGF1dG8gcmVzdWx0ID0gW05TTXV0YWJsZURp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhDYXBhY2l0eTo2XTsKKworICAgIGlmICghbV9odHRwUHJv
eHlIb3N0LmlzTnVsbCgpKSB7CisgICAgICAgIEFTU0VSVChtX2h0dHBQcm94eVBvcnQpOworICAg
ICAgICByZXN1bHRbKE5TU3RyaW5nICopa0NGTmV0d29ya1Byb3hpZXNIVFRQUHJveHldID0gKE5T
U3RyaW5nICopbV9odHRwUHJveHlIb3N0OworICAgICAgICByZXN1bHRbKE5TU3RyaW5nICopa0NG
TmV0d29ya1Byb3hpZXNIVFRQUG9ydF0gPSBAKG1faHR0cFByb3h5UG9ydCk7CisgICAgfQorICAg
IGlmICghbV9odHRwc1Byb3h5SG9zdC5pc051bGwoKSkgeworICAgICAgICBBU1NFUlQobV9odHRw
c1Byb3h5UG9ydCk7CisgICAgICAgIHJlc3VsdFsoTlNTdHJpbmcgKilrQ0ZOZXR3b3JrUHJveGll
c0hUVFBTUHJveHldID0gKE5TU3RyaW5nICopbV9odHRwc1Byb3h5SG9zdDsKKyAgICAgICAgcmVz
dWx0WyhOU1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzSFRUUFNQb3J0XSA9IEAobV9odHRwc1By
b3h5UG9ydCk7CisgICAgfQorICAgIGlmICghbV9zb2Nrc1Byb3h5SG9zdC5pc051bGwoKSkgewor
ICAgICAgICBBU1NFUlQobV9zb2Nrc1Byb3h5UG9ydCk7CisgICAgICAgIHJlc3VsdFsoTlNTdHJp
bmcgKilrQ0ZOZXR3b3JrUHJveGllc1NPQ0tTUHJveHldID0gKE5TU3RyaW5nICopbV9zb2Nrc1By
b3h5SG9zdDsKKyAgICAgICAgcmVzdWx0WyhOU1N0cmluZyAqKWtDRk5ldHdvcmtQcm94aWVzU09D
S1NQb3J0XSA9IEAobV9zb2Nrc1Byb3h5UG9ydCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBy
ZXN1bHQuY291bnQgPyByZXN1bHQgOiBuaWw7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xZTI4MTU5ZDgwNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb24uY3BwCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJv
eHlDb25maWd1cmF0aW9uLmgiCisKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0
ZXJzLmgiCisjaW5jbHVkZSAiUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKKyNpZiBVU0UoQ0YpCitSZWZQdHI8UHJveHlDb25maWd1cmF0aW9uPiBQ
cm94eUNvbmZpZ3VyYXRpb246OmNyZWF0ZShQcm94eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyIHBy
b3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXIsIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+JiYg
ZGljdGlvbmFyeSkKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdFJlZihuZXcgUHJv
eHlDb25maWd1cmF0aW9uKTsKKyAgICBjb25maWd1cmF0aW9uLT5tX2lkZW50aWZpZXIgPSBwcm94
eUNvbmZpZ3VyYXRpb25JZGVudGlmaWVyOworICAgIGNvbmZpZ3VyYXRpb24tPm1fcHJveHlDb25m
aWd1cmF0aW9uRGljdGlvbmFyeSA9IFdURk1vdmUoZGljdGlvbmFyeSk7CisgICAgcmV0dXJuIGNv
bmZpZ3VyYXRpb247Cit9CisjZW5kaWYgLy8gVVNFKENGKQorCitQcm94eUNvbmZpZ3VyYXRpb246
OlByb3h5Q29uZmlndXJhdGlvbigpCit7Cit9CisKK1Byb3h5Q29uZmlndXJhdGlvbjo6flByb3h5
Q29uZmlndXJhdGlvbigpCit7CisgICAgUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnk6OnNpbmds
ZXRvbigpLnByb3h5Q29uZmlndXJhdGlvbkRlc3Ryb3llZCgqdGhpcyk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25m
aWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb24uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjU1ZDE4NjJiZGUwZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvbi5o
CkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZiBVU0UoQ0YpCisjaW5jbHVkZSA8Q29yZUZv
dW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKyNlbmRpZgorCitPQkpDX0NMQVNTIE5TRGljdGlv
bmFyeTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUHJveHlDb25maWd1cmF0aW9uSWRl
bnRpZmllclR5cGUgeyB9OwordXNpbmcgUHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllciA9IE9i
amVjdElkZW50aWZpZXI8UHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmllclR5cGU+OworCitzdHJ1
Y3QgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVyczsKKworY2xhc3MgUHJveHlDb25maWd1cmF0
aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UHJveHlDb25maWd1cmF0aW9uPiB7CitwdWJsaWM6Cisg
ICAgflByb3h5Q29uZmlndXJhdGlvbigpOworCisjaWYgVVNFKENGKQorICAgIHN0YXRpYyBSZWZQ
dHI8UHJveHlDb25maWd1cmF0aW9uPiBjcmVhdGUoUHJveHlDb25maWd1cmF0aW9uSWRlbnRpZmll
ciwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4mJik7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHBy
b3h5Q29uZmlndXJhdGlvbkRpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX3Byb3h5Q29uZmln
dXJhdGlvbkRpY3Rpb25hcnkuZ2V0KCk7IH0KKyNlbmRpZgorCisgICAgUHJveHlDb25maWd1cmF0
aW9uSWRlbnRpZmllciBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9
CisKK3ByaXZhdGU6CisgICAgUHJveHlDb25maWd1cmF0aW9uKCk7CisgICAgUHJveHlDb25maWd1
cmF0aW9uSWRlbnRpZmllciBtX2lkZW50aWZpZXI7CisjaWYgVVNFKENGKQorICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IG1fcHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeTsKKyNlbmRp
ZgorCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45ODAzYmI4MGM5MGMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmNwcApA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaCIKKworI2luY2x1ZGUgIkRlY29kZXIu
aCIKKyNpbmNsdWRlICJFbmNvZGVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFBy
b3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIp
IGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBzZXNzaW9uSUQgPDwgd2ViUGFnZVByb3h5SUQgPDwg
cHJveHlPcHRpb25zOworfQorCitPcHRpb25hbDxQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJz
PiBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyKQoreworICAgIE9wdGlvbmFsPFBBTDo6U2Vzc2lvbklEPiBzZXNzaW9uSUQ7CisgICAgZGVj
b2RlciA+PiBzZXNzaW9uSUQ7CisgICAgaWYgKCFzZXNzaW9uSUQpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxXZWJQYWdlUHJveHlJZGVudGlmaWVyPiB3ZWJQ
YWdlUHJveHlJRDsKKyAgICBkZWNvZGVyID4+IHdlYlBhZ2VQcm94eUlEOworICAgIGlmICghd2Vi
UGFnZVByb3h5SUQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25h
bDxQcm94eU9wdGlvbnM+IHByb3h5T3B0aW9uczsKKyAgICBkZWNvZGVyID4+IHByb3h5T3B0aW9u
czsKKyAgICBpZiAoIXByb3h5T3B0aW9ucykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHJldHVybiB7eworICAgICAgICBXVEZNb3ZlKCpzZXNzaW9uSUQpLAorICAgICAgICBX
VEZNb3ZlKCp3ZWJQYWdlUHJveHlJRCksCisgICAgICAgIFdURk1vdmUoKnByb3h5T3B0aW9ucyks
CisgICAgfX07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjk3YTFmOTYwMWU4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycy5oCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlBy
b3h5T3B0aW9ucy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eUlkZW50aWZpZXIuaCIKKyNpbmNs
dWRlIDxwYWwvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERlY29kZXI7Citj
bGFzcyBFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFByb3h5Q29u
ZmlndXJhdGlvblBhcmFtZXRlcnMgeworICAgIFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMo
KSA9IGRlZmF1bHQ7CisgICAgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyhQcm94eUNvbmZp
Z3VyYXRpb25QYXJhbWV0ZXJzJiYpID0gZGVmYXVsdDsKKyAgICBQcm94eUNvbmZpZ3VyYXRpb25Q
YXJhbWV0ZXJzJiBvcGVyYXRvcj0oUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyYmKSA9IGRl
ZmF1bHQ7CisKKyAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0
aWMgT3B0aW9uYWw8UHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycz4gZGVjb2RlKElQQzo6RGVj
b2RlciYpOworCisgICAgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEIHsgUEFMOjpTZXNzaW9uSUQ6
OmRlZmF1bHRTZXNzaW9uSUQoKSB9OworICAgIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFn
ZVByb3h5SUQ7CisgICAgUHJveHlPcHRpb25zIHByb3h5T3B0aW9uczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25m
aWd1cmF0aW9uUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlDb25maWd1
cmF0aW9uUmVnaXN0cnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MC4uMDQ0OGI1MmI4ZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
UHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUHJveHlDb25maWd1cmF0aW9uUmVn
aXN0cnkuaCIKKworI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkmIFByb3h5Q29uZmlndXJhdGlv
blJlZ2lzdHJ5OjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQcm94
eUNvbmZpZ3VyYXRpb25SZWdpc3RyeT4gcmVnaXN0cnk7CisgICAgcmV0dXJuIHJlZ2lzdHJ5Owor
fQorCit2b2lkIFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5Ojpwcm94eUNvbmZpZ3VyYXRpb25E
ZXN0cm95ZWQoUHJveHlDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIGF1dG8g
dGFrZW4gPSBtX3Byb3h5Q29uZmlndXJhdGlvbnMudGFrZShjb25maWd1cmF0aW9uLmlkZW50aWZp
ZXIoKSk7CisgICAgQVNTRVJUX1VOVVNFRCh0YWtlbiwgdGFrZW4gPT0gJmNvbmZpZ3VyYXRpb24p
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uMGVjMjk5NWFmN2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkuaApAQCAtMCwwICsxLDYzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRp
b24uaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCisjaWYgVVNFKENGKQorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3Vu
ZGF0aW9uLmg+CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTlNEaWN0
aW9uYXJ5OworT0JKQ19DTEFTUyBOU011dGFibGVEaWN0aW9uYXJ5OworT0JKQ19DTEFTUyBOU051
bWJlcjsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUHJveHlPcHRpb25z
OworCitjbGFzcyBQcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnkpOworcHVibGljOgorICAgIFByb3h5
Q29uZmlndXJhdGlvblJlZ2lzdHJ5KCkgPSBkZWZhdWx0OworICAgIHN0YXRpYyBQcm94eUNvbmZp
Z3VyYXRpb25SZWdpc3RyeSYgc2luZ2xldG9uKCk7CisKKyAgICBSZWZQdHI8UHJveHlDb25maWd1
cmF0aW9uPiBnZXRPckNyZWF0ZVByb3h5Q29uZmlndXJhdGlvbihQcm94eU9wdGlvbnMmJik7CisK
KyAgICB2b2lkIHByb3h5Q29uZmlndXJhdGlvbkRlc3Ryb3llZChQcm94eUNvbmZpZ3VyYXRpb24m
KTsKKworcHJpdmF0ZToKKyAgICBIYXNoTWFwPFByb3h5Q29uZmlndXJhdGlvbklkZW50aWZpZXIs
IFByb3h5Q29uZmlndXJhdGlvbio+IG1fcHJveHlDb25maWd1cmF0aW9uczsKKworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBtX2RpY3Rpb25h
cnlUb1Byb3h5Q29uZmlndXJhdGlvbk1hcDsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eU9wdGlvbnMuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvUHJveHlPcHRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVjNzhmNGY4NjEyMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5T3B0aW9ucy5jcHAKQEAgLTAsMCArMSw4OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm94eU9wdGlvbnMu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Byb3h5T3B0aW9uczo6UHJveHlPcHRpb25zKGNv
bnN0IFN0cmluZyYgaHR0cEhvc3QsIHVpbnQxNl90IGh0dHBQb3J0LCBjb25zdCBTdHJpbmcmIGh0
dHBzSG9zdCwgdWludDE2X3QgaHR0cHNQb3J0LCBjb25zdCBTdHJpbmcmIHNvY2tzSG9zdCwgdWlu
dDE2X3Qgc29ja3NQb3J0KQorICAgIDogbV9odHRwUHJveHlIb3N0KGh0dHBIb3N0KQorICAgICwg
bV9odHRwUHJveHlQb3J0KGh0dHBQb3J0KQorICAgICwgbV9odHRwc1Byb3h5SG9zdChodHRwc0hv
c3QpCisgICAgLCBtX2h0dHBzUHJveHlQb3J0KGh0dHBzUG9ydCkKKyAgICAsIG1fc29ja3NQcm94
eUhvc3Qoc29ja3NIb3N0KQorICAgICwgbV9zb2Nrc1Byb3h5UG9ydChzb2Nrc1BvcnQpCit7Cit9
CisKK3ZvaWQgUHJveHlPcHRpb25zOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAoreworICAgIGVuY29kZXIgPDwgbV9odHRwUHJveHlIb3N0IDw8IG1faHR0cFByb3h5UG9ydCA8
PCBtX2h0dHBzUHJveHlIb3N0IDw8IG1faHR0cHNQcm94eVBvcnQgPDwgbV9zb2Nrc1Byb3h5SG9z
dCA8PCBtX3NvY2tzUHJveHlQb3J0OworfQorCitPcHRpb25hbDxQcm94eU9wdGlvbnM+IFByb3h5
T3B0aW9uczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBPcHRpb25hbDxT
dHJpbmc+IGh0dHBIb3N0OworICAgIGRlY29kZXIgPj4gaHR0cEhvc3Q7CisgICAgaWYgKCFodHRw
SG9zdCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQx
Nl90PiBodHRwUG9ydDsKKyAgICBkZWNvZGVyID4+IGh0dHBQb3J0OworICAgIGlmICghaHR0cFBv
cnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+
IGh0dHBzSG9zdDsKKyAgICBkZWNvZGVyID4+IGh0dHBzSG9zdDsKKyAgICBpZiAoIWh0dHBzSG9z
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQxNl90
PiBodHRwc1BvcnQ7CisgICAgZGVjb2RlciA+PiBodHRwc1BvcnQ7CisgICAgaWYgKCFodHRwc1Bv
cnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcHRpb25hbDxTdHJpbmc+
IHNvY2tzSG9zdDsKKyAgICBkZWNvZGVyID4+IHNvY2tzSG9zdDsKKyAgICBpZiAoIXNvY2tzSG9z
dCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPHVpbnQxNl90
PiBzb2Nrc1BvcnQ7CisgICAgZGVjb2RlciA+PiBzb2Nrc1BvcnQ7CisgICAgaWYgKCFzb2Nrc1Bv
cnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBQcm94eU9wdGlvbnMgcmVz
dWx0OworICAgIHJldHVybiB7eworICAgICAgICBXVEZNb3ZlKCpodHRwSG9zdCksCisgICAgICAg
IFdURk1vdmUoKmh0dHBQb3J0KSwKKyAgICAgICAgV1RGTW92ZSgqaHR0cHNIb3N0KSwKKyAgICAg
ICAgV1RGTW92ZSgqaHR0cHNQb3J0KSwKKyAgICAgICAgV1RGTW92ZSgqc29ja3NIb3N0KSwKKyAg
ICAgICAgV1RGTW92ZSgqc29ja3NQb3J0KSwKKyAgICB9fTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9Qcm94eU9wdGlvbnMuaCBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Byb3h5T3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uMWQ4OTAyZTA4ODIwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvUHJveHlPcHRpb25zLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K09CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OworCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERlY29k
ZXI7CitjbGFzcyBFbmNvZGVyOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUHJv
eHlPcHRpb25zIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQ
cm94eU9wdGlvbnMoKSA9IGRlZmF1bHQ7CisgICAgCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
UHJveHlPcHRpb25zKE5TRGljdGlvbmFyeSAqKTsKKyAgICAKKyAgICBOU0RpY3Rpb25hcnkgKnRv
UHJveHlDb25maWd1cmF0aW9uRGljdGlvbmFyeSgpIGNvbnN0OworI2VuZGlmCisKKyAgICBjb25z
dCBTdHJpbmcmIGh0dHBQcm94eUhvc3QoKSBjb25zdCB7IHJldHVybiBtX2h0dHBQcm94eUhvc3Q7
IH0KKyAgICB1aW50MTZfdCBodHRwUHJveHlQb3J0KCkgY29uc3QgeyByZXR1cm4gbV9odHRwUHJv
eHlQb3J0OyB9CisKKyAgICBjb25zdCBTdHJpbmcmIGh0dHBzUHJveHlIb3N0KCkgY29uc3QgeyBy
ZXR1cm4gbV9odHRwc1Byb3h5SG9zdDsgfQorICAgIHVpbnQxNl90IGh0dHBzUHJveHlQb3J0KCkg
Y29uc3QgeyByZXR1cm4gbV9odHRwc1Byb3h5UG9ydDsgfQorCisgICAgY29uc3QgU3RyaW5nJiBz
b2Nrc1Byb3h5SG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fc29ja3NQcm94eUhvc3Q7IH0KKyAgICB1
aW50MTZfdCBzb2Nrc1Byb3h5UG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fc29ja3NQcm94eVBvcnQ7
IH0KKworICAgIHZvaWQgZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0OworICAgIHN0YXRpYyBP
cHRpb25hbDxQcm94eU9wdGlvbnM+IGRlY29kZShJUEM6OkRlY29kZXImKTsKKworcHJpdmF0ZToK
KyAgICBQcm94eU9wdGlvbnMoY29uc3QgU3RyaW5nJiwgdWludDE2X3QsIGNvbnN0IFN0cmluZyYs
IHVpbnQxNl90LCBjb25zdCBTdHJpbmcmLCB1aW50MTZfdCk7CisKKyAgICBTdHJpbmcgbV9odHRw
UHJveHlIb3N0OworICAgIHVpbnQxNl90IG1faHR0cFByb3h5UG9ydCB7IDAgfTsKKyAgICAKKyAg
ICBTdHJpbmcgbV9odHRwc1Byb3h5SG9zdDsKKyAgICB1aW50MTZfdCBtX2h0dHBzUHJveHlQb3J0
IHsgMCB9OworICAgIAorICAgIFN0cmluZyBtX3NvY2tzUHJveHlIb3N0OworICAgIHVpbnQxNl90
IG1fc29ja3NQcm94eVBvcnQgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9XZWJJY29uVXRpbGl0aWVzLmggYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9pb3MvV2ViSWNvblV0aWxpdGllcy5oCmluZGV4IDEyZDEyYjUy
N2U1Yi4uYjcxZDI0YjZjZmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9pb3Mv
V2ViSWNvblV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2lvcy9XZWJJY29u
VXRpbGl0aWVzLmgKQEAgLTI1LDYgKzI1LDggQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+CisKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiBAY2xhc3Mg
VUlJbWFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNl
RGF0YS5tbSBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9Db2xvclNwYWNlRGF0YS5tbQppbmRl
eCAzZDRkNTllNGJlMzAuLmM4MjRiY2U1MjdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL0NvbG9yU3BhY2VEYXRhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9Db2xvclNwYWNlRGF0YS5tbQpAQCAtMjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgi
CiAjaW1wb3J0ICJDb2xvclNwYWNlRGF0YS5oIgogCisjaW1wb3J0ICJBcmd1bWVudENvZGVycy5o
IgogI2ltcG9ydCAiQXJndW1lbnRDb2RlcnNDRi5oIgogI2ltcG9ydCAiRGVjb2Rlci5oIgogI2lt
cG9ydCAiRW5jb2Rlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01l
ZGlhRm9ybWF0UmVhZGVyL0NvcmVNZWRpYVdyYXBwZWQuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L21hYy9NZWRpYUZvcm1hdFJlYWRlci9Db3JlTWVkaWFXcmFwcGVkLmgKaW5kZXggMWMwNjViZDY0
Y2U4Li4yNDI4ZTM1YmQ4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9N
ZWRpYUZvcm1hdFJlYWRlci9Db3JlTWVkaWFXcmFwcGVkLmgKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL0NvcmVNZWRpYVdyYXBwZWQuaApAQCAtMjksNyAr
MjksMTAgQEAKIAogI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvTWVkaWFUb29sYm94U1BJLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcmJpZEhlYXBBbGxvY2F0aW9uLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9jZi9U
eXBlQ2FzdHNDRi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlh
Rm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0ZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKaW5kZXgg
ZDgzZWZjZjQ3NzVjLi4wOThkNTY3NTdjYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhU2FtcGxlQnl0
ZVJhbmdlLmNwcApAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIk1lZGlhU2FtcGxlQnl0ZVJhbmdlLmgiCiAKKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oPgorCiAjaWYgRU5BQkxFKFdFQk1fRk9STUFUX1JFQURFUikKIAogbmFtZXNwYWNl
IFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMvTWVkaWFGb3Jt
YXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21h
Yy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUJ5dGVSYW5nZS5oCmluZGV4IGU0YmVmMjNj
NmVlYS4uNzAwZjUwMzNjMmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9tYWMv
TWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9tYWMvTWVkaWFGb3JtYXRSZWFkZXIvTWVkaWFTYW1wbGVCeXRlUmFuZ2UuaApA
QCAtMzIsNiArMzIsOSBAQAogI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiAKK3VzaW5nIFdlYkNvcmU6OkZsb2F0U2l6ZTsKK3VzaW5nIFdlYkNv
cmU6OlBsYXRmb3JtU2FtcGxlOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTWVkaWFT
YW1wbGVCeXRlUmFuZ2UgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6TWVkaWFTYW1wbGVBVkZPYmpD
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRl
ci9NZWRpYVNhbXBsZUN1cnNvci5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9y
bWF0UmVhZGVyL01lZGlhU2FtcGxlQ3Vyc29yLmgKaW5kZXggNjg3YjEzMDA0N2E4Li5hYzVjOWYy
ZWJjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJl
YWRlci9NZWRpYVNhbXBsZUN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9N
ZWRpYUZvcm1hdFJlYWRlci9NZWRpYVNhbXBsZUN1cnNvci5oCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJDb3JlTWVkaWFXcmFwcGVkLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TYW1wbGVN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvSWRlbnRpZmllZC5oPgogI2luY2x1ZGUgPHd0Zi9NZWRpYVRp
bWUuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCkBAIC00OCw4ICs0OSw4IEBAIGNsYXNz
IE1lZGlhVHJhY2tSZWFkZXI7CiAKIGNsYXNzIE1lZGlhU2FtcGxlQ3Vyc29yIDogcHVibGljIENv
cmVNZWRpYVdyYXBwZWQ8TWVkaWFTYW1wbGVDdXJzb3I+LCBUaHJlYWRTYWZlSWRlbnRpZmllZDxN
ZWRpYVNhbXBsZUN1cnNvcj4gewogcHVibGljOgotICAgIHVzaW5nIERlY29kZU9yZGVySXRlcmF0
b3IgPSBEZWNvZGVPcmRlclNhbXBsZU1hcDo6aXRlcmF0b3I7Ci0gICAgdXNpbmcgUHJlc2VudGF0
aW9uT3JkZXJJdGVyYXRvciA9IFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcjsK
KyAgICB1c2luZyBEZWNvZGVPcmRlckl0ZXJhdG9yID0gV2ViQ29yZTo6RGVjb2RlT3JkZXJTYW1w
bGVNYXA6Oml0ZXJhdG9yOworICAgIHVzaW5nIFByZXNlbnRhdGlvbk9yZGVySXRlcmF0b3IgPSBX
ZWJDb3JlOjpQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3I7CiAgICAgdXNpbmcg
TG9jYXRvciA9IFZhcmlhbnQ8TWVkaWFUaW1lLCBEZWNvZGVPcmRlckl0ZXJhdG9yLCBQcmVzZW50
YXRpb25PcmRlckl0ZXJhdG9yPjsKIAogICAgIHN0cnVjdCBUaW1pbmcgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01lZGlhVHJhY2tSZWFk
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRy
YWNrUmVhZGVyLmgKaW5kZXggMDMzZTc0NTI1ZjJkLi40ZGUxMDFkZjJhNzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL21hYy9NZWRpYUZvcm1hdFJlYWRlci9NZWRpYVRyYWNrUmVh
ZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvbWFjL01lZGlhRm9ybWF0UmVhZGVyL01l
ZGlhVHJhY2tSZWFkZXIuaApAQCAtMzAsMTMgKzMwLDExIEBACiAjaW5jbHVkZSAiQ29yZU1lZGlh
V3JhcHBlZC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2FtcGxlTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KKyNpbmNsdWRlIDx3dGYvV29y
a1F1ZXVlLmg+CiAKIERFQ0xBUkVfQ09SRV9NRURJQV9UUkFJVFMoVHJhY2tSZWFkZXIpOwogCi1u
YW1lc3BhY2UgV1RGIHsKLWNsYXNzIFdvcmtRdWV1ZTsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQXVkaW9UcmFja1ByaXZhdGU7CiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
OwpAQCAtNTQsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0ZXhwciBXcmFwcGVy
Q2xhc3Mgd3JhcHBlckNsYXNzKCk7CiAgICAgc3RhdGljIENNQmFzZUNsYXNzSUQgd3JhcHBlckNs
YXNzSUQoKTsKICAgICBzdGF0aWMgQ29yZU1lZGlhV3JhcHBlZDxNZWRpYVRyYWNrUmVhZGVyPiog
dW53cmFwKENNQmFzZU9iamVjdFJlZik7Ci0gICAgc3RhdGljIFdURjo6V29ya1F1ZXVlJiBzdG9y
YWdlUXVldWUoKTsKKyAgICBzdGF0aWMgV29ya1F1ZXVlJiBzdG9yYWdlUXVldWUoKTsKIAogICAg
IHN0YXRpYyBSZWZQdHI8TWVkaWFUcmFja1JlYWRlcj4gY3JlYXRlKEFsbG9jYXRvciYmLCBjb25z
dCBNZWRpYUZvcm1hdFJlYWRlciYsIENNTWVkaWFUeXBlLCB1aW50NjRfdCwgT3B0aW9uYWw8Ym9v
bD4pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dAppbmRleCAzZWVkNGIyYTA3ZTAuLjcwZTViYTFkMTc4MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CkBAIC0xODAsNiArMTgwLDEwIEBAIFNoYXJlZC9OYXZpZ2F0aW9uQWN0aW9uRGF0YS5j
cHAKIFNoYXJlZC9QZXJzaXN0ZW5jeVV0aWxzLmNwcAogU2hhcmVkL1BsYXRmb3JtUG9wdXBNZW51
RGF0YS5jcHAKIFNoYXJlZC9QcmludEluZm8uY3BwCitTaGFyZWQvUHJveHlDb25maWd1cmF0aW9u
LmNwcAorU2hhcmVkL1Byb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3BwCitTaGFyZWQvUHJv
eHlDb25maWd1cmF0aW9uUmVnaXN0cnkuY3BwCitTaGFyZWQvUHJveHlPcHRpb25zLmNwcAogU2hh
cmVkL1JUQ05ldHdvcmsuY3BwCiBTaGFyZWQvUlRDUGFja2V0T3B0aW9ucy5jcHAKIFNoYXJlZC9T
ZXJ2aWNlV29ya2VySW5pdGlhbGl6YXRpb25EYXRhLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IGRkNGQyYTUwNzY1Ny4uN2ViYzNiZWFhMTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBA
IC0xNjAsNiArMTYwLDggQEAgU2hhcmVkL0NvY29hL0RhdGFEZXRlY3Rpb25SZXN1bHQubW0KIFNo
YXJlZC9Db2NvYS9JbnNlcnRUZXh0T3B0aW9ucy5jcHAKIFNoYXJlZC9Db2NvYS9Mb2FkUGFyYW1l
dGVyc0NvY29hLm1tCiBTaGFyZWQvQ29jb2EvUERGS2l0U29mdExpbmsubW0KK1NoYXJlZC9Db2Nv
YS9Qcm94eUNvbmZpZ3VyYXRpb25SZWdpc3RyeUNvY29hLm1tCitTaGFyZWQvQ29jb2EvUHJveHlP
cHRpb25zQ29jb2EubW0KIFNoYXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29jb2EubW0KIFNo
YXJlZC9Db2NvYS9TYW5kYm94SW5pdGlhbGlhdGlvblBhcmFtZXRlcnNDb2NvYS5tbQogU2hhcmVk
L0NvY29hL1NhbmRib3hVdGlsaXRpZXMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9BUElQYWdlQ29uZmlndXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uY3BwCmluZGV4IGEzMzUyZTZlYjljNy4uMzFi
YWRiZjExNzAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUGFn
ZUNvbmZpZ3VyYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQ
YWdlQ29uZmlndXJhdGlvbi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFQSVBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIkFQSVdlYnNpdGVQb2xpY2llcy5o
IgorI2luY2x1ZGUgIlByb3h5Q29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2Vz
LmgiCkBAIC05NSw2ICs5Niw3IEBAIFJlZjxQYWdlQ29uZmlndXJhdGlvbj4gUGFnZUNvbmZpZ3Vy
YXRpb246OmNvcHkoKSBjb25zdAogCiAgICAgY29weS0+bV9tZWRpYUNhcHR1cmVFbmFibGVkID0g
dGhpcy0+bV9tZWRpYUNhcHR1cmVFbmFibGVkOwogICAgIGNvcHktPm1faHR0cHNVcGdyYWRlRW5h
YmxlZCA9IHRoaXMtPm1faHR0cHNVcGdyYWRlRW5hYmxlZDsKKyAgICBjb3B5LT5tX3Byb3h5T3B0
aW9ucyA9IHRoaXMtPm1fcHJveHlPcHRpb25zOwogCiAgICAgcmV0dXJuIGNvcHk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24u
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElQYWdlQ29uZmlndXJhdGlvbi5oCmlu
ZGV4IDllODM5ZjQ0NTcwZS4uZWUwNjQ0MmIyODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQVBJUGFnZUNvbmZpZ3VyYXRpb24uaApAQCAtMjYsMTEgKzI2LDEzIEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIlByb3h5
T3B0aW9ucy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2ll
QmxvY2tpbmcuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTE2Niw5ICsxNjgsMTEgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyhX
ZWJDb3JlOjpTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyB2YWx1ZSkgeyBtX3No
b3VsZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nID0gdmFsdWU7IH0KICAgICBXZWJDb3Jl
OjpTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZyBzaG91bGRSZWxheFRoaXJkUGFy
dHlDb29raWVCbG9ja2luZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmVsYXhUaGlyZFBhcnR5
Q29va2llQmxvY2tpbmc7IH0KLSAgICAKLXByaXZhdGU6CiAKKyAgICB2b2lkIHNldFByb3h5T3B0
aW9ucyhPcHRpb25hbDxXZWJLaXQ6OlByb3h5T3B0aW9ucz4gcHJveHlPcHRpb25zKSB7IG1fcHJv
eHlPcHRpb25zID0gV1RGTW92ZShwcm94eU9wdGlvbnMpOyB9CisgICAgT3B0aW9uYWw8V2ViS2l0
OjpQcm94eU9wdGlvbnM+IHByb3h5T3B0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlPcHRp
b25zOyB9CisKK3ByaXZhdGU6CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w+IG1f
cHJvY2Vzc1Bvb2w7CiAgICAgUmVmUHRyPFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVy
UHJveHk+IG1fdXNlckNvbnRlbnRDb250cm9sbGVyOwogICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBh
Z2VHcm91cD4gbV9wYWdlR3JvdXA7CkBAIC0yMTcsNiArMjIxLDggQEAgcHJpdmF0ZToKICAgICBi
b29sIG1faHR0cHNVcGdyYWRlRW5hYmxlZCB7IHRydWUgfTsKIAogICAgIFdlYkNvcmU6OlNob3Vs
ZFJlbGF4VGhpcmRQYXJ0eUNvb2tpZUJsb2NraW5nIG1fc2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29v
a2llQmxvY2tpbmcgeyBXZWJDb3JlOjpTaG91bGRSZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2lu
Zzo6Tm8gfTsKKworICAgIE9wdGlvbmFsPFdlYktpdDo6UHJveHlPcHRpb25zPiBtX3Byb3h5T3B0
aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmgKaW5kZXgg
OTZmOWEwYjFkZDFkLi41ZGY2NWY5NTJkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdDb25maWd1cmF0aW9uLmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24uaApAQCAtMjA3
LDYgKzIwNywzOCBAQCBXS19DTEFTU19BVkFJTEFCTEUobWFjb3MoMTAuMTApLCBpb3MoOC4wKSkK
ICAqLwogLSAobnVsbGFibGUgaWQgPFdLVVJMU2NoZW1lSGFuZGxlcj4pdXJsU2NoZW1lSGFuZGxl
ckZvclVSTFNjaGVtZTooTlNTdHJpbmcgKil1cmxTY2hlbWUgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cygxMC4xMyksIGlvcygxMS4wKSk7CiAKKy8qISBAYWJzdHJhY3QgVGhlIHByb3h5IGNvbmZpZ3Vy
YXRpb24gZGljdGlvbmFyeQorIEBkaXNjdXNzaW9uIE5ldHdvcmsgY29ubmVjdGlvbnMgb3JpZ2lu
YXRpbmcgZnJvbSB0aGUgV0tXZWJWaWV3IHdpbGwgdXNlIHRoZSBwcm94eSBkZXNjcmliZWQgYnkg
dGhlIGRpY3Rpb25hcnkuCisgWW91IGNhbiBzcGVjaWZ5IGEgc3RhbmRhcmQgSFRUUCwgSFRUUFMs
IG9yIFNPQ0tTNSBwcm94eSB3aXRoIHRoaXMgZGljdGlvbmFyeS4KKyBUaGUgZm9sbG93aW5nIGFy
ZSB0aGUgYWxsb3dhYmxlIGtleXMgYW5kIHZhbHVlczoKKworIEtleSAtIGtTQ1Byb3BOZXRQcm94
aWVzSFRUUFByb3h5CisgVmFsdWUgLSBBbiBOU1N0cmluZyByZXByZXNlbnRpbmcgdGhlIGhvc3Ru
YW1lIG9mIHRoZSBwcm94eQorIEtleSAtIGtTQ1Byb3BOZXRQcm94aWVzSFRUUFBvcnQKKyBWYWx1
ZSAtIE5TTnVtYmVyIGluIHRoZSByYW5nZSAxLTY1NTM1CisKKyBLZXkgLSBrU0NQcm9wTmV0UHJv
eGllc0hUVFBTUHJveHkKKyBWYWx1ZSAtIE5TU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaG9zdG5h
bWUgb2YgdGhlIHByb3h5CisgS2V5IC0ga1NDUHJvcE5ldFByb3hpZXNIVFRQU1BvcnQKKyBWYWx1
ZSAtIE5TTnVtYmVyIGluIHRoZSByYW5nZSAxLTY1NTM1CisKKyBLZXkgLSBrU0NQcm9wTmV0UHJv
eGllc1NPQ0tTUHJveHkKKyBWYWx1ZSAtIE5TU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaG9zdG5h
bWUgb2YgdGhlIHByb3h5CisgS2V5IC0ga1NDUHJvcE5ldFByb3hpZXNTT0NLU1BvcnQKKyBWYWx1
ZSAtIE5TTnVtYmVyIGluIHRoZSByYW5nZSAxLTY1NTM1CisKKyBUaGUgY29uc3RhbnRzIGZvciB0
aGUga2V5cyBjYW4gYmUgZm91bmQgaW4gU0NTY2hlbWFEZWZpbml0aW9ucy5oCisKKyBBbnkgZW50
cmllcyBpbiB0aGUgZGljdGlvbmFyeSB3aXRoIGtleXMgb3RoZXIgdGhhbiB0aG9zZSBsaXN0ZWQg
YWJvdmUgd2lsbCBiZSBpZ25vcmVkLgorCisgSWYgYW55IHNwZWNpZmllZCB2YWx1ZXMgYXJlIG5v
dCBhcyBkZXNjcmliZWQsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KKyBJZiB5b3Ugc3Bl
Y2lmeSBhIHByb3h5IGhvc3RuYW1lIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBpdHMgY29ycmVzcG9u
ZGluZyBwb3J0LiBGYWlsdXJlIHRvIGRvIHNvIHJlc3VsdHMgaW4gYW4gZXhjZXB0aW9uIGJlaW5n
IHRocm93bi4KKyAKKyBJZiB5b3Ugc3BlY2lmeSBhIFNPQ0tTNSBwcm94eSB5b3UgY2Fubm90IHNw
ZWNpZnkgYW4gSFRUUCBvciBIVFRQUyBwcm94eS4gRG9pbmcgc28gcmVzdWx0cyBpbiBhbiBleGNl
cHRpb24gYmVpbmcgdGhyb3cuCisgSWYgeW91IHNwZWNpZnkgYW4gSFRUUCBvciBIVFRQUyBwcm94
eSwgeW91IGNhbm5vdCBzcGVjaWZ5IGEgU09DS1M1IHByb3h5LiBEb2luZyBzbyByZXN1bHRzIGlu
IGFuIGV4Y2VwdGlvbiBiZWluZyB0aHJvdy4KKyAqLworQHByb3BlcnR5IChudWxsYWJsZSwgbm9u
YXRvbWljLCBjb3B5KSBOU0RpY3Rpb25hcnkgKmNvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnkgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJBKSwgaW9zKFdLX0lPU19UQkEpKTsKKwogQGVu
ZAogCiAjaWYgVEFSR0VUX09TX0lQSE9ORQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Q29uZmlndXJhdGlvbi5tbQppbmRleCBjNTAw
OWI2ODg2ZjMuLjFkNGQyNDY0NDcyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0NvbmZpZ3VyYXRpb24ubW0KQEAgLTYxMiw2
ICs2MTIsMjAgQEAgLSAoUmVmPEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24+KWNvcHlQYWdlQ29uZmln
dXJhdGlvbgogICAgIHJldHVybiBfcGFnZUNvbmZpZ3VyYXRpb24tPmNvcHkoKTsKIH0KIAorLSAo
TlNEaWN0aW9uYXJ5ICopY29ubmVjdGlvblByb3h5RGljdGlvbmFyeQoreworICAgIGF1dG8gcHJv
eHlPcHRpb25zID0gX3BhZ2VDb25maWd1cmF0aW9uLT5wcm94eU9wdGlvbnMoKTsKKyAgICByZXR1
cm4gcHJveHlPcHRpb25zID8gcHJveHlPcHRpb25zLT50b1Byb3h5Q29uZmlndXJhdGlvbkRpY3Rp
b25hcnkoKSA6IG5pbDsKK30KKworLSAodm9pZClzZXRDb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5
OihOU0RpY3Rpb25hcnkgKiljb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5Cit7CisgICAgaWYgKCFj
b25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5KQorICAgICAgICBfcGFnZUNvbmZpZ3VyYXRpb24tPnNl
dFByb3h5T3B0aW9ucyhXVEY6Om51bGxvcHQpOworICAgIGVsc2UKKyAgICAgICAgX3BhZ2VDb25m
aWd1cmF0aW9uLT5zZXRQcm94eU9wdGlvbnMoV2ViS2l0OjpQcm94eU9wdGlvbnMoY29ubmVjdGlv
blByb3h5RGljdGlvbmFyeSkpOworfQorCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIChXS1ByaXZhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQppbmRleCBjMzkzNDU1MmEy
M2MuLjZjY2EzM2RlNDZlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJzaXRlRGF0YVN0b3JlLm1tCkBAIC03MjQsNCArNzI0LDExIEBAIC0g
KEJPT0wpX25ldHdvcmtQcm9jZXNzRXhpc3RzCiAgICAgcmV0dXJuICEhX3dlYnNpdGVEYXRhU3Rv
cmUtPm5ldHdvcmtQcm9jZXNzSWZFeGlzdHMoKTsKIH0KIAorLSAodm9pZClfcHJveHlTZXNzaW9u
U2V0Q291bnRGb3JUZXN0aW5nOih2b2lkICheKSh1bnNpZ25lZCkpY29tcGxldGlvbkhhbmRsZXIK
K3sKKyAgICBfd2Vic2l0ZURhdGFTdG9yZS0+cHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5n
KFtjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildKHVu
c2lnbmVkIGNvdW50KSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGNvdW50KTsKKyAgICB9
KTsKK30KKwogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKaW5kZXggN2U4YWJlYzY4OTdk
Li5mNzM0ZTQ1MjdiMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2Vic2l0ZURhdGFTdG9yZVByaXZhdGUuaApAQCAtOTgsNyArOTgs
NyBAQCB0eXBlZGVmIE5TX09QVElPTlMoTlNVSW50ZWdlciwgX1dLV2Vic2l0ZURhdGFTdG9yZUZl
dGNoT3B0aW9ucykgewogLSAocGlkX3QpX25ldHdvcmtQcm9jZXNzSWRlbnRpZmllciBXS19BUElf
QVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogKyAodm9pZClf
bWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAtIChCT09MKV9uZXR3b3Jr
UHJvY2Vzc0V4aXN0cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tf
SU9TX1RCQSkpOwotCistICh2b2lkKV9wcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3Rpbmc6KHZv
aWQoXikodW5zaWduZWQpKWNvbXBsZXRpb25IYW5kbGVyIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
V0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiBAZW5kCiAKIE5TX0FTU1VNRV9OT05OVUxM
X0VORApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggOGQ5MDdlMWM0MWVhLi45ZWI2MjkwYTQ4ZjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcApAQCAtMzQ2LDYgKzM0NiwxMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6
OnJlbmFtZU9yaWdpbkluV2Vic2l0ZURhdGEoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjbwog
ICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlbmFtZU9y
aWdpbkluV2Vic2l0ZURhdGEoc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQ
cm94eTo6cHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1bnNpZ25lZCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
UHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0aW5nKHNlc3Npb25JRCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKK30KKwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJv
Y2Vzc0NyYXNoZWQoKQogewogICAgIGNsZWFyQ2FsbGJhY2tTdGF0ZXMoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKaW5k
ZXggNzJiNGI0ZDVhMGQzLi40YmM5NWQ1YjFlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCkBAIC0xMjYsNiArMTI2
LDggQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFBBTDo6
U2Vzc2lvbklELCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+LCBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYgb3JpZ2lucywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGNvb2tpZUhvc3ROYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIEhTVFNDYWNoZUhv
c3ROYW1lcywgY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCByZW5hbWVPcmlnaW5JbldlYnNpdGVEYXRhKFBBTDo6
U2Vzc2lvbklELCBjb25zdCBVUkwmLCBjb25zdCBVUkwmLCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAorICAgIHZvaWQgcHJveHlTZXNz
aW9uU2V0Q291bnRGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKHVuc2lnbmVkKT4mJik7CisKICAgICB2b2lkIGdldExvY2FsU3RvcmFnZURldGFpbHMoUEFM
OjpTZXNzaW9uSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPExvY2FsU3RvcmFnZURh
dGFiYXNlVHJhY2tlcjo6T3JpZ2luRGV0YWlscz4mJik+JiYpOwogCiAgICAgdm9pZCBwcmVjb25u
ZWN0VG8oUEFMOjpTZXNzaW9uSUQsIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFdlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpTdG9yZWRD
cmVkZW50aWFsc1BvbGljeSwgT3B0aW9uYWw8TmF2aWdhdGluZ1RvQXBwQm91bmREb21haW4+LCBM
YXN0TmF2aWdhdGlvbldhc0FwcEJvdW5kKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCmluZGV4IDc3OTEwYWJmM2MwZC4uNDdkODE1ZmU4MTlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTg1LDYgKzg1LDggQEAKICNpbmNsdWRl
ICJQcmludEluZm8uaCIKICNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCiAjaW5jbHVkZSAi
UHJvdmlzaW9uYWxQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb24uaCIK
KyNpbmNsdWRlICJQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiU2Fm
ZUJyb3dzaW5nV2FybmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlckRhdGFSZWZlcmVuY2Uu
aCIKICNpbmNsdWRlICJTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25NYW5hZ2VyLmgiCkBAIC0x
MDk3LDYgKzEwOTksMTEgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmluaXRpYWxpemVXZWJQYWdlKCkK
ICAgICBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCk7CiAjZW5kaWYKIAor
ICAgIGlmIChhdXRvIHByb3h5T3B0aW9ucyA9IG1fY29uZmlndXJhdGlvbi0+cHJveHlPcHRpb25z
KCkpIHsKKyAgICAgICAgUHJveHlDb25maWd1cmF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0g
eyBzZXNzaW9uSUQoKSwgbV9pZGVudGlmaWVyLCAqcHJveHlPcHRpb25zIH07CisgICAgICAgIHdl
YnNpdGVEYXRhU3RvcmUoKS5uZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpBZGRQcm94eUNvbmZpZ3VyYXRpb24oV1RGTW92ZShwYXJhbWV0ZXJzKSksIDApOwor
ICAgIH0KKwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNyZWF0ZVdlYlBhZ2UobV93
ZWJQYWdlSUQsIGNyZWF0aW9uUGFyYW1ldGVycyhtX3Byb2Nlc3MsICptX2RyYXdpbmdBcmVhKSks
IDApOwogCiAgICAgbV9wcm9jZXNzLT5hZGRWaXNpdGVkTGlua1N0b3JlVXNlcih2aXNpdGVkTGlu
a1N0b3JlKCksIG1faWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGFiY2RkYzBmMTVj
Zi4uNzZmYjQ1Zjk0ODBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJz
aXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMjEzMiw2ICsyMTMyLDExIEBA
IHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVuYW1lT3JpZ2luSW5XZWJzaXRlRGF0YShVUkwmJiBv
bGROYW1lLCBVUkwmJiBuZXdOYW1lLCBPCiAgICAgbmV0d29ya1Byb2Nlc3MoKS5yZW5hbWVPcmln
aW5JbldlYnNpdGVEYXRhKG1fc2Vzc2lvbklELCBvbGROYW1lLCBuZXdOYW1lLCBkYXRhVHlwZXMs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3Jl
Ojpwcm94eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCh1
bnNpZ25lZCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbmV0d29ya1Byb2Nlc3MoKS5w
cm94eVNlc3Npb25TZXRDb3VudEZvclRlc3RpbmcobV9zZXNzaW9uSUQsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKK30KKwogI2lmIEVOQUJMRShBUFBfQk9VTkRfRE9NQUlOUykKIHZvaWQg
V2Vic2l0ZURhdGFTdG9yZTo6aGFzQXBwQm91bmRTZXNzaW9uKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKaW5kZXgg
OGI0ZDQxMzQxNDJkLi5hOWUzNDgzZTQwYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmgKQEAgLTM1Myw2ICszNTMs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJv
Y2Vzcyhjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZv
aWQgY2xlYXJCdW5kbGVJZGVudGlmaWVySW5OZXR3b3JrUHJvY2VzcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwogICAgIAorICAgIHZvaWQgcHJveHlTZXNzaW9uU2V0Q291bnRGb3JUZXN0
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQodW5zaWduZWQpPiYmKTsKKwogcHJpdmF0ZToKICAg
ICBlbnVtIGNsYXNzIEZvcmNlUmVpbml0aWFsaXphdGlvbiA6IGJvb2wgeyBObywgWWVzIH07CiAj
aWYgRU5BQkxFKEFQUF9CT1VORF9ET01BSU5TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2VmZjRmMjZlMzM1Li5hM2JiNzk3M2ZiZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNDA5Nyw2ICs0MDk3LDE2IEBACiAJCTUxRTM1MUM4MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJV
dGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVXRp
bGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMzUxQzkxODBGMkND
QzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJREJVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFMzk5
MDUxRDZGNTRDNTAwOUM4ODMxIC8qIFVJR2FtZXBhZFByb3ZpZGVyQ29jb2EubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVSUdhbWVwYWRQcm92aWRlckNvY29hLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUU3RTJBODI2MEU5MzkzMDA4ODVFQTgg
LyogUHJveHlDb25maWd1cmF0aW9uUmVnaXN0cnlDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxRTdFMkE5MjYwRTkzQjMwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRp
b25QYXJhbWV0ZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5Q29uZmlndXJhdGlvblBh
cmFtZXRlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUU3RTJBQTI2MEU5
M0IzMDA4ODVFQTggLyogUHJveHlDb25maWd1cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFByb3h5Q29uZmlndXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUx
RTdFMkFCMjYwRTkzQjQwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFFN0UyQUMyNjBFOTNCNDAwODg1RUE4IC8qIFByb3h5Q29u
ZmlndXJhdGlvblJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5Q29uZmlndXJh
dGlvblJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFFN0UyQUQy
NjBFOTNCNTAwODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
cm94eUNvbmZpZ3VyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFFN0Uy
QUUyNjBFOTNCNTAwODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFByb3h5Q29uZmlndXJhdGlvblJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxRTdFMkI0MjYxMkNFN0EwMDg4NUVBOCAvKiBQcm94eU9wdGlvbnNDb2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByb3h5T3B0aW9uc0NvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1MUU3RTJCNTI2MTJDRTk2MDA4ODVFQTggLyogUHJveHlP
cHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5T3B0aW9ucy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRTdFMkI2MjYxMkNFOTYwMDg4NUVBOCAvKiBQcm94eU9w
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJveHlPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxRThCNjhEMUU3MTI4NzMwMDFCNzEzMiAvKiBXZWJVUkxTY2hlbWVUYXNr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlVSTFNjaGVtZVRh
c2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUU5NDk5NjFENzYxQ0M3MDBF
QzlFQjkgLyogVUlHYW1lcGFkUHJvdmlkZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBVSUdhbWVwYWRQcm92aWRlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTFGMDYwREQxNjU0MzE3NTAwRjMyODFCIC8qIFdlYlJlc291cmNlTG9h
ZGVyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlJlc291cmNlTG9h
ZGVyTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2Vi
UmVzb3VyY2VMb2FkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwpAQCAtNjYzNSw2ICs2NjQ1LDE0IEBACiAJCQkJRTE4QzkyRjMxMkRCOUU3
MTAwQ0YyQUVCIC8qIFByaW50SW5mby5jcHAgKi8sCiAJCQkJRTFDQzFCOEUxMkQ3RUFERjAwNjI1
ODM4IC8qIFByaW50SW5mby5oICovLAogCQkJCTQ2M0ZENDgxMUVCOTRFQUQwMEEyOTgyQyAvKiBQ
cm9jZXNzVGVybWluYXRpb25SZWFzb24uaCAqLywKKwkJCQk1MUU3RTJBQTI2MEU5M0IzMDA4ODVF
QTggLyogUHJveHlDb25maWd1cmF0aW9uLmNwcCAqLywKKwkJCQk1MUU3RTJBRDI2MEU5M0I1MDA4
ODVFQTggLyogUHJveHlDb25maWd1cmF0aW9uLmggKi8sCisJCQkJNTFFN0UyQTkyNjBFOTNCMzAw
ODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvblBhcmFtZXRlcnMuY3BwICovLAorCQkJCTUxRTdF
MkFCMjYwRTkzQjQwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmggKi8s
CisJCQkJNTFFN0UyQUMyNjBFOTNCNDAwODg1RUE4IC8qIFByb3h5Q29uZmlndXJhdGlvblJlZ2lz
dHJ5LmNwcCAqLywKKwkJCQk1MUU3RTJBRTI2MEU5M0I1MDA4ODVFQTggLyogUHJveHlDb25maWd1
cmF0aW9uUmVnaXN0cnkuaCAqLywKKwkJCQk1MUU3RTJCNTI2MTJDRTk2MDA4ODVFQTggLyogUHJv
eHlPcHRpb25zLmNwcCAqLywKKwkJCQk1MUU3RTJCNjI2MTJDRTk2MDA4ODVFQTggLyogUHJveHlP
cHRpb25zLmggKi8sCiAJCQkJOUIxMjI5RDAyM0ZGMkE1RTAwOENBNzUxIC8qIFJlbW90ZUF1ZGlv
RGVzdGluYXRpb25JZGVudGlmaWVyLmggKi8sCiAJCQkJNUNCN0FGRTYyM0M2ODFCMDAwRTQ5Q0Yz
IC8qIFJlc291cmNlTG9hZEluZm8uaCAqLywKIAkJCQk1QzAwOTkzQjI0MTdGQjdFMDBENTNDMjUg
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhcmFtZXRlcnMuaCAqLywKQEAgLTgxNDIsNiArODE2
MCw4IEBACiAJCQkJMkQxMDg3NjIxRDJDNjQxQjAwQjg1RjgyIC8qIExvYWRQYXJhbWV0ZXJzQ29j
b2EubW0gKi8sCiAJCQkJMkQ0NDBCODMyNUVGMjM1RTAwQTk4RDg3IC8qIFBERktpdFNvZnRMaW5r
LmggKi8sCiAJCQkJMkQ0NDBCODIyNUVGMjM1RTAwQTk4RDg3IC8qIFBERktpdFNvZnRMaW5rLm1t
ICovLAorCQkJCTUxRTdFMkE4MjYwRTkzOTMwMDg4NUVBOCAvKiBQcm94eUNvbmZpZ3VyYXRpb25S
ZWdpc3RyeUNvY29hLm1tICovLAorCQkJCTUxRTdFMkI0MjYxMkNFN0EwMDg4NUVBOCAvKiBQcm94
eU9wdGlvbnNDb2NvYS5tbSAqLywKIAkJCQk3QUI0RUEzRjIyNzc3QzQ2MDA4NUJCQUEgLyogU2Fu
ZGJveEV4dGVuc2lvbkNvY29hLm1tICovLAogCQkJCTdBQjRFQTQxMjI3NzdGQzcwMDg1QkJBQSAv
KiBTYW5kYm94SW5pdGlhbGlhdGlvblBhcmFtZXRlcnNDb2NvYS5tbSAqLywKIAkJCQlFMTlCREE4
ODE5MzY4NkE0MDBCOTdGNTcgLyogU2FuZGJveFV0aWxpdGllcy5oICovLApkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDNiZTFiNmNmMDFjZC4uOTI0
NDJjN2JiOThkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDMtMzAgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhYmlsaXR5IHRvIHNldCBIVFRQIHByb3h5IG9uIGEg
cGVyLVdLV2ViVmlldyBiYXNpcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMzg5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJv
Y2Vzcy5tbToKKyAgICAgICAgKFRFU1QpOgorCiAyMDIxLTAzLTI2ICBaYWxhbiBCdWp0YXMgIDx6
YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW01pbmlCcm93c2VyXSBSZW1vdmUgcmVkdW5kYW50
ICJEaXNhYmxlIFNpbXBsZSBMaW5lIExheW91dCIgbWVudSBpdGVtCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQppbmRl
eCA3NTVjOWFlMTEwYmYuLjBlNDRjMWIxOWFjOSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9OZXR3b3JrUHJvY2Vzcy5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL05ldHdvcmtQcm9jZXNzLm1tCkBAIC0yNiwxMCAr
MjYsMTQgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogCiAjaW1wb3J0ICJIVFRQU2VydmVyLmgiCisj
aW1wb3J0ICJQbGF0Zm9ybVV0aWxpdGllcy5oIgorI2ltcG9ydCAiVENQU2VydmVyLmgiCisjaW1w
b3J0ICJUZXN0VUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAiVGVzdFdLV2ViVmlldy5oIgogI2ltcG9y
dCAiVXRpbGl0aWVzLmgiCiAjaW1wb3J0IDxXZWJLaXQvV0tQcm9jZXNzUG9vbFByaXZhdGUuaD4K
ICNpbXBvcnQgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVQcml2YXRlLmg+CisjaW1wb3J0IDxX
ZWJLaXQvX1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24uaD4KICNpbXBvcnQgPHd0Zi9C
bG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1ZlY3Rv
ci5oPgpAQCAtODgsMyArOTIsMTY3IEBAIFRFU1QoV2ViS2l0LCBOZXR3b3JrUHJvY2Vzc0xhdW5j
aE9ubHlXaGVuTmVjZXNzYXJ5KQogICAgIFtbd2ViVmlldyBjb25maWd1cmF0aW9uXS5wcm9jZXNz
UG9vbCBfcmVnaXN0ZXJVUkxTY2hlbWVBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeTpA
InRlc3QiXTsKICAgICBFWFBFQ1RfRkFMU0UoW1t3ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLndlYnNp
dGVEYXRhU3RvcmUgX25ldHdvcmtQcm9jZXNzRXhpc3RzXSk7CiB9CisKK1RFU1QoV2ViS2l0LCBW
YWxpZFByb3h5Q29uZmlndXJhdGlvbikKK3sKKyAgICBhdXRvIHZpZXdDb25maWd1cmF0aW9uID0g
YWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBuZXddKTsKKworICAgIHVuc2lnbmVkIGV4
Y2VwdGlvbkNvdW50ID0gMDsKKyAgICBjb25zdCB1bnNpZ25lZCBleHBlY3RlZEV4Y2VwdGlvbnMg
PSAxMTsKKyAgICAKKyAgICAvLyBOb24tc3RyaW5nIGhvc3QgdmFsdWVzCisgICAgQHRyeSB7Cisg
ICAgICAgIHZpZXdDb25maWd1cmF0aW9uLmdldCgpLmNvbm5lY3Rpb25Qcm94eURpY3Rpb25hcnkg
PSBAeworICAgICAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlIVFRQUHJveHlI
b3N0IDogQCgxKSwKKyAgICAgICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRU
UFByb3h5UG9ydCA6IEAoMSkKKyAgICAgICAgfTsKKyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24q
KSB7CisgICAgICAgICsrZXhjZXB0aW9uQ291bnQ7CisgICAgfQorICAgIEB0cnkgeworICAgICAg
ICB2aWV3Q29uZmlndXJhdGlvbi5nZXQoKS5jb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5ID0gQHsK
KyAgICAgICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFNQcm94eUhvc3Qg
OiBAKDEpLAorICAgICAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlIVFRQU1By
b3h5UG9ydCA6IEAoMSkKKyAgICAgICAgfTsKKyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24qKSB7
CisgICAgICAgICsrZXhjZXB0aW9uQ291bnQ7CisgICAgfQorICAgIEB0cnkgeworICAgICAgICB2
aWV3Q29uZmlndXJhdGlvbi5nZXQoKS5jb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5ID0gQHsKKyAg
ICAgICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5U09DS1NQcm94eUhvc3QgOiBA
KDEpLAorICAgICAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5
UG9ydCA6IEAoMSkKKyAgICAgICAgfTsKKyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24qKSB7Cisg
ICAgICAgICsrZXhjZXB0aW9uQ291bnQ7CisgICAgfQorICAgIAorICAgIC8vIE91dC1vZi1ib3Vu
ZHMgcG9ydHMKKyAgICBAdHJ5IHsKKyAgICAgICAgdmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkuY29u
bmVjdGlvblByb3h5RGljdGlvbmFyeSA9IEB7CisgICAgICAgICAgICAoTlNTdHJpbmcgKilrQ0ZT
dHJlYW1Qcm9wZXJ0eUhUVFBQcm94eUhvc3QgOiBAIlRlc3QiLAorICAgICAgICAgICAgKE5TU3Ry
aW5nICopa0NGU3RyZWFtUHJvcGVydHlIVFRQUHJveHlQb3J0IDogQCgwKQorICAgICAgICB9Owor
ICAgIH0gQGNhdGNoIChOU0V4Y2VwdGlvbiopIHsKKyAgICAgICAgKytleGNlcHRpb25Db3VudDsK
KyAgICB9CisgICAgQHRyeSB7CisgICAgICAgIHZpZXdDb25maWd1cmF0aW9uLmdldCgpLmNvbm5l
Y3Rpb25Qcm94eURpY3Rpb25hcnkgPSBAeworICAgICAgICAgICAgKE5TU3RyaW5nICopa0NGU3Ry
ZWFtUHJvcGVydHlIVFRQUHJveHlIb3N0IDogQCJUZXN0IiwKKyAgICAgICAgICAgIChOU1N0cmlu
ZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFByb3h5UG9ydCA6IEAoLTEpCisgICAgICAgIH07Cisg
ICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uKikgeworICAgICAgICArK2V4Y2VwdGlvbkNvdW50Owor
ICAgIH0KKyAgICBAdHJ5IHsKKyAgICAgICAgdmlld0NvbmZpZ3VyYXRpb24uZ2V0KCkuY29ubmVj
dGlvblByb3h5RGljdGlvbmFyeSA9IEB7CisgICAgICAgICAgICAoTlNTdHJpbmcgKilrQ0ZTdHJl
YW1Qcm9wZXJ0eUhUVFBQcm94eUhvc3QgOiBAIlRlc3QiLAorICAgICAgICAgICAgKE5TU3RyaW5n
ICopa0NGU3RyZWFtUHJvcGVydHlIVFRQUHJveHlQb3J0IDogQCg2NTUzNikKKyAgICAgICAgfTsK
KyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24qKSB7CisgICAgICAgICsrZXhjZXB0aW9uQ291bnQ7
CisgICAgfQorCisgICAgLy8gTWlzc2luZyBwb3J0cworICAgIEB0cnkgeworICAgICAgICB2aWV3
Q29uZmlndXJhdGlvbi5nZXQoKS5jb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5ID0gQHsKKyAgICAg
ICAgICAgIChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFByb3h5SG9zdCA6IEAiVGVz
dCIKKyAgICAgICAgfTsKKyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24qKSB7CisgICAgICAgICsr
ZXhjZXB0aW9uQ291bnQ7CisgICAgfQorICAgIEB0cnkgeworICAgICAgICB2aWV3Q29uZmlndXJh
dGlvbi5nZXQoKS5jb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgICAgIChO
U1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFNQcm94eUhvc3QgOiBAIlRlc3QiCisgICAg
ICAgIH07CisgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uKikgeworICAgICAgICArK2V4Y2VwdGlv
bkNvdW50OworICAgIH0KKyAgICBAdHJ5IHsKKyAgICAgICAgdmlld0NvbmZpZ3VyYXRpb24uZ2V0
KCkuY29ubmVjdGlvblByb3h5RGljdGlvbmFyeSA9IEB7CisgICAgICAgICAgICAoTlNTdHJpbmcg
KilrQ0ZTdHJlYW1Qcm9wZXJ0eVNPQ0tTUHJveHlIb3N0IDogQCJUZXN0IiwKKyAgICAgICAgfTsK
KyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24qKSB7CisgICAgICAgICsrZXhjZXB0aW9uQ291bnQ7
CisgICAgfQorICAgIAorICAgIC8vIFNPQ0tTNSBhbmQgSFRUUChTKSBhdCB0aGUgc2FtZSB0aW1l
CisgICAgQHRyeSB7CisgICAgICAgIHZpZXdDb25maWd1cmF0aW9uLmdldCgpLmNvbm5lY3Rpb25Q
cm94eURpY3Rpb25hcnkgPSBAeworICAgICAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJv
cGVydHlIVFRQUHJveHlIb3N0IDogQCJUZXN0IiwKKyAgICAgICAgICAgIChOU1N0cmluZyAqKWtD
RlN0cmVhbVByb3BlcnR5SFRUUFByb3h5UG9ydCA6IEAoNDAwMDApLAorICAgICAgICAgICAgKE5T
U3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlTT0NLU1Byb3h5SG9zdCA6IEAiVGVzdCIsCisgICAg
ICAgICAgICAoTlNTdHJpbmcgKilrQ0ZTdHJlYW1Qcm9wZXJ0eVNPQ0tTUHJveHlQb3J0IDogQCg0
MDAwMSkKKyAgICAgICAgfTsKKyAgICB9IEBjYXRjaCAoTlNFeGNlcHRpb24qKSB7CisgICAgICAg
ICsrZXhjZXB0aW9uQ291bnQ7CisgICAgfQorICAgIEB0cnkgeworICAgICAgICB2aWV3Q29uZmln
dXJhdGlvbi5nZXQoKS5jb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgICAg
IChOU1N0cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFNQcm94eUhvc3QgOiBAIlRlc3QiLAor
ICAgICAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlIVFRQU1Byb3h5UG9ydCA6
IEAoNDAwMDApLAorICAgICAgICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlTT0NL
U1Byb3h5SG9zdCA6IEAiVGVzdCIsCisgICAgICAgICAgICAoTlNTdHJpbmcgKilrQ0ZTdHJlYW1Q
cm9wZXJ0eVNPQ0tTUHJveHlQb3J0IDogQCg0MDAwMSkKKyAgICAgICAgfTsKKyAgICB9IEBjYXRj
aCAoTlNFeGNlcHRpb24qKSB7CisgICAgICAgICsrZXhjZXB0aW9uQ291bnQ7CisgICAgfQorICAg
IAorICAgIEVYUEVDVF9FUShleGNlcHRpb25Db3VudCwgZXhwZWN0ZWRFeGNlcHRpb25zKTsKK30K
KworVEVTVChXZWJLaXQsIFdLV2ViVmlld1Byb3h5QVBJKQoreworICAgIHVzaW5nIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJOworCisgICAgYm9vbCByZXF1ZXN0ZWQgPSBmYWxzZTsKKworICAgIEhU
VFBTZXJ2ZXIgc2VydmVyKFsmXSAoQ29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CisgICAgICAgIGNv
bm5lY3Rpb24ucmVjZWl2ZUhUVFBSZXF1ZXN0KFsmXShWZWN0b3I8Y2hhcj4mJikgeworICAgICAg
ICAgICAgcmVxdWVzdGVkID0gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBhdXRv
IHN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tfV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbiBhbGxvY10gaW5pdE5vblBlcnNpc3RlbnRDb25maWd1cmF0aW9uXSk7CisgICAgW3N0
b3JlQ29uZmlndXJhdGlvbiBzZXRBbGxvd3NTZXJ2ZXJQcmVjb25uZWN0Ok5PXTsKKyAgICAKKyAg
ICBhdXRvIHZpZXdDb25maWd1cmF0aW9uID0gYWRvcHROUyhbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBuZXddKTsKKyAgICBbdmlld0NvbmZpZ3VyYXRpb24gc2V0V2Vic2l0ZURhdGFTdG9yZTphZG9w
dE5TKFtbV0tXZWJzaXRlRGF0YVN0b3JlIGFsbG9jXSBfaW5pdFdpdGhDb25maWd1cmF0aW9uOnN0
b3JlQ29uZmlndXJhdGlvbi5nZXQoKV0pLmdldCgpXTsKKyAgICB2aWV3Q29uZmlndXJhdGlvbi5n
ZXQoKS5jb25uZWN0aW9uUHJveHlEaWN0aW9uYXJ5ID0gQHsKKyAgICAgICAgKE5TU3RyaW5nICop
a0NGU3RyZWFtUHJvcGVydHlIVFRQUHJveHlIb3N0IDogQCIxMjcuMC4wLjEiLAorICAgICAgICAo
TlNTdHJpbmcgKilrQ0ZTdHJlYW1Qcm9wZXJ0eUhUVFBQcm94eVBvcnQgOiBAKHNlcnZlci5wb3J0
KCkpCisgICAgfTsKKyAgICB2aWV3Q29uZmlndXJhdGlvbi5nZXQoKS51cGdyYWRlS25vd25Ib3N0
c1RvSFRUUFMgPSBOTzsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAxMDAsIDEwMCkgY29uZmlndXJh
dGlvbjp2aWV3Q29uZmlndXJhdGlvbi5nZXQoKV0pOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRw
Oi8vZG93bmxvYWQvIl1dXTsKKyAgICBVdGlsOjpydW4oJnJlcXVlc3RlZCk7CisKKyAgICBhdXRv
IHdlYlZpZXcyID0gYWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1Jl
Y3RNYWtlKDAsIDAsIDEwMCwgMTAwKSBjb25maWd1cmF0aW9uOnZpZXdDb25maWd1cmF0aW9uLmdl
dCgpXSk7CisgICAgW3dlYlZpZXcyIGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdp
dGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJodHRwOi8vZG93bmxvYWQvIl1dXTsKKyAgICBy
ZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICBVdGlsOjpydW4oJnJlcXVlc3RlZCk7CisgICAgCisgICAg
Ym9vbCBkb25lID0gZmFsc2U7CisgICAgW3ZpZXdDb25maWd1cmF0aW9uLmdldCgpLndlYnNpdGVE
YXRhU3RvcmUgX3Byb3h5U2Vzc2lvblNldENvdW50Rm9yVGVzdGluZzpbJl0odW5zaWduZWQgY291
bnQpIHsKKyAgICAgICAgRVhQRUNUX0VRKGNvdW50LCAxdSk7CisgICAgICAgIGRvbmUgPSB0cnVl
OworICAgIH1dOworICAgIFV0aWw6OnJ1bigmZG9uZSk7CisgICAgCisgICAgdmlld0NvbmZpZ3Vy
YXRpb24uZ2V0KCkuY29ubmVjdGlvblByb3h5RGljdGlvbmFyeSA9IEB7CisgICAgICAgIChOU1N0
cmluZyAqKWtDRlN0cmVhbVByb3BlcnR5SFRUUFByb3h5SG9zdCA6IEAibG9jYWxob3N0IiwKKyAg
ICAgICAgKE5TU3RyaW5nICopa0NGU3RyZWFtUHJvcGVydHlIVFRQUHJveHlQb3J0IDogQChzZXJ2
ZXIucG9ydCgpKQorICAgIH07CisKKyAgICBhdXRvIHdlYlZpZXczID0gYWRvcHROUyhbW1dLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDEwMCwgMTAwKSBjb25m
aWd1cmF0aW9uOnZpZXdDb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW3dlYlZpZXczIGxvYWRS
ZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwOi8vZG93bmxvYWQvIl1dXTsKKyAgICByZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICBVdGls
OjpydW4oJnJlcXVlc3RlZCk7CisKKyAgICBkb25lID0gZmFsc2U7CisgICAgW3ZpZXdDb25maWd1
cmF0aW9uLmdldCgpLndlYnNpdGVEYXRhU3RvcmUgX3Byb3h5U2Vzc2lvblNldENvdW50Rm9yVGVz
dGluZzpbJl0odW5zaWduZWQgY291bnQpIHsKKyAgICAgICAgRVhQRUNUX0VRKGNvdW50LCAydSk7
CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFV0aWw6OnJ1bigmZG9uZSk7Cit9
Cg==
</data>
<flag name="review"
          id="444424"
          type_id="1"
          status="-"
          setter="beidson"
    />
    <flag name="commit-queue"
          id="444428"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>