<?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>211103</bug_id>
          
          <creation_ts>2020-04-27 16:47:29 -0700</creation_ts>
          <short_desc>Improve SandboxExtension::HandleArray to reduce boilerplate</short_desc>
          <delta_ts>2020-04-30 15:13:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>Safari 13</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=211253</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>pvollan</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1646304</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-27 16:47:29 -0700</bug_when>
    <thetext>There are a number of boilerplate patterns needed when using SandboxExtension::HandleArray. We could make these simpler and less error prone by improving the class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646582</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-28 11:42:06 -0700</bug_when>
    <thetext>&lt;rdar://problem/62533632&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646601</commentid>
    <comment_count>2</comment_count>
      <attachid>397866</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-28 12:11:25 -0700</bug_when>
    <thetext>Created attachment 397866
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646626</commentid>
    <comment_count>3</comment_count>
      <attachid>397866</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2020-04-28 12:41:44 -0700</bug_when>
    <thetext>Comment on attachment 397866
Patch

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

I think this is a great idea. R=me.

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:296
&gt; +Optional&lt;SandboxExtension::HandleArray&gt; SandboxExtension::createHandlesForFiles(const String&amp; logLabel, const Vector&lt;String&gt;&amp; paths, Type type)

Since it seems this method is only called with the ReadOnly type, maybe the type argument can be removed?

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:299
&gt; +    if (paths.isEmpty())
&gt; +        return WTF::nullopt;

If the method did not return an Optional, but only a HandleArray, this if statement could be removed.

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:304
&gt; +    for (size_t i = 0; i &lt; paths.size(); ++i) {

Can this be a modern for loop?

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:306
&gt; +        if (!SandboxExtension::createHandle(paths[i], type, handleArray[i])) {
&gt; +            // This can legitimately fail if a directory containing the file is deleted after the file was chosen.

Perhaps you could add an ASSERT_NOT_REACHED() here, so we can catch it in the debugger?

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:379
&gt; +Optional&lt;SandboxExtension::HandleArray&gt; SandboxExtension::createHandlesForMachLookup(const Vector&lt;String&gt;&amp; services, Optional&lt;audit_token_t&gt; auditToken, OptionSet&lt;Flags&gt; flags)

Could this simply return a HandleArray?

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:387
&gt; +    for (size_t i = 0; i &lt; services.size(); ++i) {

Can a modern for loop be used?

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:389
&gt; +        if (!SandboxExtension::createHandleForMachLookup(services[i], auditToken, handleArray[i], flags))
&gt; +            return WTF::nullopt;

I think it would be good to keep going, even if this call should fail for a service. Also, I think it would be good to add an ASSERT_NOT_REACHED() in the case it fails.

&gt; Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:452
&gt; +        if (auto mediaExtensionHandles = SandboxExtension::createHandlesForMachLookup(mediaRelatedMachServices(), WTF::nullopt))
&gt; +            parameters.mediaExtensionHandles = WTFMove(*mediaExtensionHandles);

If the function simply returned a HandleArray, this could be just one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647198</commentid>
    <comment_count>4</comment_count>
      <attachid>398006</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-29 16:12:31 -0700</bug_when>
    <thetext>Created attachment 398006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647205</commentid>
    <comment_count>5</comment_count>
      <attachid>397866</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-29 16:35:45 -0700</bug_when>
    <thetext>Comment on attachment 397866
Patch

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

&gt;&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:296
&gt;&gt; +Optional&lt;SandboxExtension::HandleArray&gt; SandboxExtension::createHandlesForFiles(const String&amp; logLabel, const Vector&lt;String&gt;&amp; paths, Type type)
&gt; 
&gt; Since it seems this method is only called with the ReadOnly type, maybe the type argument can be removed?

Good point. I&apos;ll try that.

&gt;&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:299
&gt;&gt; +        return WTF::nullopt;
&gt; 
&gt; If the method did not return an Optional, but only a HandleArray, this if statement could be removed.

Will do!

&gt;&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:304
&gt;&gt; +    for (size_t i = 0; i &lt; paths.size(); ++i) {
&gt; 
&gt; Can this be a modern for loop?

Sure -- that way I can only fill the handle array with paths that succeed, rather than null handles. I&apos;m not sure if that ever happens, but it doesn&apos;t seem like it&apos;s valid to consume them.

&gt;&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:379
&gt;&gt; +Optional&lt;SandboxExtension::HandleArray&gt; SandboxExtension::createHandlesForMachLookup(const Vector&lt;String&gt;&amp; services, Optional&lt;audit_token_t&gt; auditToken, OptionSet&lt;Flags&gt; flags)
&gt; 
&gt; Could this simply return a HandleArray?

Sure.

&gt;&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:387
&gt;&gt; +    for (size_t i = 0; i &lt; services.size(); ++i) {
&gt; 
&gt; Can a modern for loop be used?

Will do.

&gt;&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:389
&gt;&gt; +            return WTF::nullopt;
&gt; 
&gt; I think it would be good to keep going, even if this call should fail for a service. Also, I think it would be good to add an ASSERT_NOT_REACHED() in the case it fails.

Will do!

&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:452
&gt;&gt; +            parameters.mediaExtensionHandles = WTFMove(*mediaExtensionHandles);
&gt; 
&gt; If the function simply returned a HandleArray, this could be just one line.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647209</commentid>
    <comment_count>6</comment_count>
      <attachid>398009</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-29 16:52:02 -0700</bug_when>
    <thetext>Created attachment 398009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647234</commentid>
    <comment_count>7</comment_count>
      <attachid>398014</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-29 18:20:45 -0700</bug_when>
    <thetext>Created attachment 398014
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647245</commentid>
    <comment_count>8</comment_count>
      <attachid>398014</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2020-04-29 19:04:54 -0700</bug_when>
    <thetext>Comment on attachment 398014
Patch

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

R=me.

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:296
&gt; +static SandboxExtension::HandleArray createHandlesForInput(const Vector&lt;String&gt;&amp; services, Function&lt;bool(const String&amp;, SandboxExtension::Handle&amp; handle)&gt;&amp;&amp; createFunction)

The name of the first parameter does not seem to describe all variations of possible input types, since it can be services, paths, and IOKit classes. Perhaps this function could be renamed &apos;createHandlesForResources&apos;, and the first parameter could be renamed &apos;resources&apos;, or something similar?

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:300
&gt; +    handleArray.allocate(services.size());

Is allocating with size 0 gracefully handled by HandleArray? On a related note, would it be better to typedef HandleArray to Vector&lt;Handle&gt;? That&apos;s outside the scope of this patch, though. In that case, allocating up front would not be needed, we could just append in the loop.

&gt; Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:401
&gt; +        parameters.dynamicIOKitExtensionHandles = createHandlesForIOKitClassExtensions(agxCompilerClasses(), WTF::nullopt);

I think this should be SandboxExtension::createHandlesForIOKitClassExtensions(agxCompilerClasses(), WTF::nullopt);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647251</commentid>
    <comment_count>9</comment_count>
      <attachid>398014</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-29 19:37:25 -0700</bug_when>
    <thetext>Comment on attachment 398014
Patch

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

&gt;&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:296
&gt;&gt; +static SandboxExtension::HandleArray createHandlesForInput(const Vector&lt;String&gt;&amp; services, Function&lt;bool(const String&amp;, SandboxExtension::Handle&amp; handle)&gt;&amp;&amp; createFunction)
&gt; 
&gt; The name of the first parameter does not seem to describe all variations of possible input types, since it can be services, paths, and IOKit classes. Perhaps this function could be renamed &apos;createHandlesForResources&apos;, and the first parameter could be renamed &apos;resources&apos;, or something similar?

Good idea.

&gt;&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:300
&gt;&gt; +    handleArray.allocate(services.size());
&gt; 
&gt; Is allocating with size 0 gracefully handled by HandleArray? On a related note, would it be better to typedef HandleArray to Vector&lt;Handle&gt;? That&apos;s outside the scope of this patch, though. In that case, allocating up front would not be needed, we could just append in the loop.

Maybe. I&apos;ll take a look at that in a future patch.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm:401
&gt;&gt; +        parameters.dynamicIOKitExtensionHandles = createHandlesForIOKitClassExtensions(agxCompilerClasses(), WTF::nullopt);
&gt; 
&gt; I think this should be SandboxExtension::createHandlesForIOKitClassExtensions(agxCompilerClasses(), WTF::nullopt);

Whoops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647252</commentid>
    <comment_count>10</comment_count>
      <attachid>398022</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-29 19:38:49 -0700</bug_when>
    <thetext>Created attachment 398022
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647264</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-29 20:03:22 -0700</bug_when>
    <thetext>Committed r260932: &lt;https://trac.webkit.org/changeset/260932&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 398022.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647369</commentid>
    <comment_count>12</comment_count>
      <attachid>398022</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2020-04-30 08:03:36 -0700</bug_when>
    <thetext>Comment on attachment 398022
Patch for landing

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

&gt; Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm:313
&gt; +SandboxExtension::HandleArray SandboxExtension::createReadOnlyHandlesForFiles(const String&amp; logLabel, const Vector&lt;String&gt;&amp; paths)

You could also pass an error handler function instead of the log label String, which would be invoked for each error. The caller would then be responsible for customizing the logging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647380</commentid>
    <comment_count>13</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2020-04-30 08:58:51 -0700</bug_when>
    <thetext>It looks like the changes in https://trac.webkit.org/changeset/260932/webkit

broke TestWebKitAPI.WebKit.UploadDirectory on Mac Debug with an Assert

history:
https://results.webkit.org/?suite=api-tests&amp;suite=api-tests&amp;suite=api-tests&amp;suite=api-tests&amp;test=TestWebKitAPI.WebKit.UploadDirectory&amp;test=TestWebKitAPI.URLSchemeHandler.DisableCORSCredentials&amp;test=TestWebKitAPI.MultipleClientCertificateConnections.NonPersistentDataStore&amp;test=TestWebKitAPI.Fullscreen.Delegate

Crash Log:
Crashed

    TestWebKitAPI.WebKit.UploadDirectory
        ASSERTION FAILED: ok
        /Volumes/Data/slave/catalina-debug/build/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm(506) : static bool WebKit::SandboxExtension::consumePermanently(const WebKit::SandboxExtension::HandleArray &amp;)
        1   0x108267609 WTFCrash
        2   0x11147aeeb WTFCrashWithInfo(int, char const*, char const*, int)
        3   0x111c649ac WebKit::SandboxExtension::consumePermanently(WebKit::SandboxExtension::HandleArray const&amp;)
        4   0x11171c71b IPC::FormDataReference::decode(IPC::Decoder&amp;)
        5   0x11171c49c WTF::Optional&lt;IPC::FormDataReference&gt; IPC::ArgumentCoder&lt;IPC::FormDataReference&gt;::decode&lt;IPC::FormDataReference, (void*)0&gt;(IPC::Decoder&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647382</commentid>
    <comment_count>14</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2020-04-30 08:59:57 -0700</bug_when>
    <thetext>Better history link: https://results.webkit.org/?suite=api-tests&amp;test=TestWebKitAPI.WebKit.UploadDirectory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647416</commentid>
    <comment_count>15</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2020-04-30 10:53:34 -0700</bug_when>
    <thetext>It looks like this also broke these two tests:
http/tests/misc/form-submit-file-cross-site-redirect.html
http/tests/misc/form-submit-file-cross-site.html

History:
https://results.webkit.org/?suite=layout-tests&amp;suite=layout-tests&amp;test=http%2Ftests%2Fmisc%2Fform-submit-file-cross-site.html&amp;test=http%2Ftests%2Fmisc%2Fform-submit-file-cross-site-redirect.html

Results:
https://build.webkit.org/results/Apple-Catalina-Debug-WK2-Tests/r260952%20(3943)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647424</commentid>
    <comment_count>16</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-30 11:10:00 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #14)
&gt; Better history link:
&gt; https://results.webkit.org/?suite=api-tests&amp;test=TestWebKitAPI.WebKit.
&gt; UploadDirectory

Interesting. This test is triggering a new assert I added to detect when we are unable to consume a sandbox extension.

In this case, an extension is being sent from the WebContent process (which cannot issue extensions) to the UIProcess, and the UIProcess is correctly reporting that it cannot consume this extension.

I suspect the code resulting in a sandbox extension being passed from the WCP to the UIProcess is wrong, so this may have uncovered a real bug.

Note: We should consider disabling this API test until we fix the underlying bug. We should not roll this patch out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647425</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-04-30 11:11:41 -0700</bug_when>
    <thetext>(In reply to Truitt Savell from comment #15)
&gt; It looks like this also broke these two tests:
&gt; http/tests/misc/form-submit-file-cross-site-redirect.html
&gt; http/tests/misc/form-submit-file-cross-site.html
&gt; 
&gt; History:
&gt; https://results.webkit.org/?suite=layout-tests&amp;suite=layout-
&gt; tests&amp;test=http%2Ftests%2Fmisc%2Fform-submit-file-cross-site.
&gt; html&amp;test=http%2Ftests%2Fmisc%2Fform-submit-file-cross-site-redirect.html
&gt; 
&gt; Results:
&gt; https://build.webkit.org/results/Apple-Catalina-Debug-WK2-Tests/
&gt; r260952%20(3943)/results.html

These two crashes are the same issue. WCP is sending a sandbox extension to the UIProcess.

There is never a case where the WCP has access to something the UIProcess does not. Access always flows from the UIProcess to its helper processes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1647541</commentid>
    <comment_count>18</comment_count>
    <who name="Truitt Savell">tsavell</who>
    <bug_when>2020-04-30 14:17:08 -0700</bug_when>
    <thetext>New bug to track this regression: https://bugs.webkit.org/show_bug.cgi?id=211253</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397866</attachid>
            <date>2020-04-28 12:11:25 -0700</date>
            <delta_ts>2020-04-29 16:12:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211103-20200428121124.patch</filename>
            <type>text/plain</type>
            <size>23846</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwODMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDM3NWUyYWRjY2ZlNWFlMjdh
ZTM3MGFiOGRlZWQ2ZDJkMzI3OGU4ZDkuLjViNWIxZTdkNDhhOGNiMjA2M2E3NGZhNjI4MzdhNTU0
YjAwYzVlNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjAtMDQtMjggIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSB0byByZWR1Y2UgYm9pbGVycGxhdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTEwMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjI1MzM2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGJvaWxlcnBsYXRlIHBhdHRlcm5zIG5l
ZWRlZCB3aGVuIHVzaW5nIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5LgorICAgICAgICBX
ZSBjb3VsZCBtYWtlIHRoZXNlIHNpbXBsZXIgYW5kIGxlc3MgZXJyb3IgcHJvbmUgYnkgaW1wcm92
aW5nIHRoZSBjbGFzcy4KKworICAgICAgICBUaGlzIHBhdGNoOgorICAgICAgICAxLiBBZGRzIGNv
bnZlbmllbmNlIG1ldGhvZHMgdG8gY3JlYXRlIGFuZCBjb25zdW1lIEhhbmRsZUFycmF5cy4KKyAg
ICAgICAgMi4gVXBkYXRlcyB1c2VzIG9mIEhhbmRsZUFycmF5IHRvIHVzZSB0aGUgY29udmVuaWVu
Y2UgbWV0aG9kcy4KKworICAgICAgICBUZXN0ZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaDoKKyAgICAgICAgKElQQzo6Rm9y
bURhdGFSZWZlcmVuY2U6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL0NvY29hL1NhbmRib3hF
eHRlbnNpb25Db2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlc0ZvckZpbGVzKToKKyAgICAgICAgKFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlc0Zvck1hY2hMb29rdXApOgorICAgICAgICAoV2ViS2l0OjpTYW5kYm94RXh0
ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkpOgorICAgICAgICAqIFNoYXJlZC9TYW5kYm94RXh0
ZW5zaW9uLmg6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZUhhbmRsZXNGb3JGaWxlcyk6CisgICAg
ICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQcm94eTo6dW5ibG9ja1ByZWZlcmVuY2VTZXJ2aWNlSWZOZWVk
ZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQYXRobmFtZXNGb3JUeXBlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nl
c3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL2NvY29hL1dl
YlByb2Nlc3NDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnVuYmxv
Y2tQcmVmZXJlbmNlU2VydmljZSk6CisKIDIwMjAtMDQtMjggIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gQWRvcHQga01UU3VwcG9ydE5vdGlmaWNhdGlv
bl9TaG91bGRQbGF5SERSVmlkZW9DaGFuZ2VkIG5vdGlmaWNhdGlvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmgKaW5kZXggYmM0OTdjNjIzNWZkMWU1
MjhiMjNhYjU0MDIzMGUwNDBhZDYxMmRiZC4uMTE2MTU3ZDE3YjZjMDBjMzQ2ZjNkOGQyODU1NTVh
MmM3YmVlOWE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURh
dGFSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJl
ZmVyZW5jZS5oCkBAIC04NSw4ICs4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCFzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlcykKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy0+c2l6
ZSgpOyArK2kpCi0gICAgICAgICAgICBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy0+YXQoaSkpOworICAgICAgICBXZWJL
aXQ6OlNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSgqc2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMpOwogCiAgICAgICAgIHJldHVybiBGb3JtRGF0YVJlZmVyZW5jZSB7IGZvcm1EYXRh
LnJlbGVhc2VOb25OdWxsKCkgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29jb2EubW0KaW5kZXggOGJmMDMzNzhkMmRkNzNiYTY5
MTY3YTlkNDY2M2NmYjQxNDQwYzYyYy4uNDFhMDhlZWJlYmJmY2Q4ZTQ1MDA5YzRlMmI4MDdjMmY1
YTFmNGM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29jb2EvU2FuZGJveEV4
dGVuc2lvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hF
eHRlbnNpb25Db2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5Myw2ICsyOTMsMjUgQEAgYm9vbCBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBUeXBlIHR5cGUsIEhhbmRsZSYg
aGFuZGwKICAgICByZXR1cm4gY3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocmVzb2x2
ZVBhdGhGb3JTYW5kYm94RXh0ZW5zaW9uKHBhdGgpLCB0eXBlLCBoYW5kbGUpOwogfQogCitPcHRp
b25hbDxTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheT4gU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlc0ZvckZpbGVzKGNvbnN0IFN0cmluZyYgbG9nTGFiZWwsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocywgVHlwZSB0eXBlKQoreworICAgIGlmIChwYXRocy5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGVBcnJheSBoYW5kbGVBcnJheTsKKyAgICAKKyAgICBoYW5kbGVBcnJheS5hbGxvY2F0ZShwYXRo
cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKCFTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aHNbaV0s
IHR5cGUsIGhhbmRsZUFycmF5W2ldKSkgeworICAgICAgICAgICAgLy8gVGhpcyBjYW4gbGVnaXRp
bWF0ZWx5IGZhaWwgaWYgYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmlsZSBpcyBkZWxldGVk
IGFmdGVyIHRoZSBmaWxlIHdhcyBjaG9zZW4uCisgICAgICAgICAgICAvLyBXZSBhbHNvIGhhdmUg
cmVwb3J0cyBvZiBjYXNlcyB3aGVyZSB0aGlzIGxpa2VseSBmYWlscyBmb3Igc29tZSB1bmtub3du
IHJlYXNvbiwgPHJkYXI6Ly9wcm9ibGVtLzEwMTU2NzEwPi4KKyAgICAgICAgICAgIFdURkxvZ0Fs
d2F5cygiJXM6IGNvdWxkIG5vdCBjcmVhdGUgYSBzYW5kYm94IGV4dGVuc2lvbiBmb3IgJyVzJ1xu
IiwgbG9nTGFiZWwudXRmOCgpLmRhdGEoKSwgcGF0aHNbaV0udXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaGFuZGxlQXJyYXk7Cit9CisKIGJvb2wgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgU3RyaW5n
IHJlc29sdmVkUGF0aCA9IHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlGb3JTYW5k
Ym94RXh0ZW5zaW9uKHBhdGgpOwpAQCAtMzU3LDYgKzM3NiwyMiBAQCBib29sIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoY29uc3QgU3RyaW5nJiBzZXJ2aWNlLCBP
cHRpb25hbAogICAgIHJldHVybiB0cnVlOwogfQogCitPcHRpb25hbDxTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGVBcnJheT4gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0Zvck1hY2hMb29r
dXAoY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlcnZpY2VzLCBPcHRpb25hbDxhdWRpdF90b2tlbl90
PiBhdWRpdFRva2VuLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQoreworICAgIGlmIChzZXJ2aWNl
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBoYW5kbGVBcnJheTsKKyAgICAKKyAgICBoYW5kbGVBcnJh
eS5hbGxvY2F0ZShzZXJ2aWNlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2VydmljZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVGb3JNYWNoTG9va3VwKHNlcnZpY2VzW2ldLCBhdWRpdFRva2VuLCBoYW5kbGVB
cnJheVtpXSwgZmxhZ3MpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIGhhbmRsZUFycmF5OworfQorCiBib29sIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRCeUF1ZGl0VG9rZW4oY29uc3QgU3RyaW5nJiBwYXRoLCBh
dWRpdF90b2tlbl90IGF1ZGl0VG9rZW4sIEhhbmRsZSYgaGFuZGxlKQogewogICAgIEFTU0VSVCgh
aGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbik7CkBAIC00NDIsNiArNDc3LDIxIEBAIGJvb2wgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNvbnN0IEhhbmRsZSYgaGFuZGxlKQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KGNvbnN0IEhhbmRsZUFycmF5JiBoYW5kbGVBcnJheSkKK3sKKyAgICBib29sIGFs
bFN1Y2NlZWRlZCA9IHRydWU7CisgICAgZm9yIChhdXRvJiBoYW5kbGUgOiBoYW5kbGVBcnJheSkg
eworICAgICAgICBpZiAoIWhhbmRsZS5tX3NhbmRib3hFeHRlbnNpb24pCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBib29sIG9rID0gU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KGhhbmRsZSk7CisgICAgICAgIEFTU0VSVChvayk7CisgICAgICAgIGFsbFN1Y2Nl
ZWRlZCAmPSBvazsKKyAgICB9CisKKyAgICByZXR1cm4gYWxsU3VjY2VlZGVkOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmggYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKaW5kZXggZDA4ZjcyYTk1OTE1
MTFkMTUxNjlhNGIxYjk5ZWRlOGY5ZmJiYzhjZC4uYzMzOTNmZTY4NTExMzgwYWVjMjBiNmFiOTM5
YmIwNmM2NjE1YzNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvU2FuZGJveEV4
dGVuc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC05
Myw2ICs5MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIEhhbmRsZSYgb3BlcmF0b3JbXShzaXplX3Qg
aSk7CiAgICAgICAgIEhhbmRsZSYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG9wZXJhdG9yW10oaSk7
IH0KICAgICAgICAgY29uc3QgSGFuZGxlJiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdDsKKyAg
ICAgICAgSGFuZGxlKiBiZWdpbigpOworICAgICAgICBIYW5kbGUqIGVuZCgpOworICAgICAgICBj
b25zdCBIYW5kbGUqIGJlZ2luKCkgY29uc3Q7CisgICAgICAgIGNvbnN0IEhhbmRsZSogZW5kKCkg
Y29uc3Q7CiAgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgZW5jb2Rl
KElQQzo6RW5jb2RlciYpIGNvbnN0OwogICAgICAgICBzdGF0aWMgT3B0aW9uYWw8SGFuZGxlQXJy
YXk+IGRlY29kZShJUEM6OkRlY29kZXImKTsKQEAgLTEwNywxMiArMTExLDE0IEBAIHB1YmxpYzoK
ICAgICAKICAgICBzdGF0aWMgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IGNyZWF0ZShIYW5kbGUm
Jik7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgVHlw
ZSwgSGFuZGxlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRs
ZUFycmF5PiBjcmVhdGVIYW5kbGVzRm9yRmlsZXMoY29uc3QgU3RyaW5nJiBsb2dMYWJlbCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBUeXBlKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVI
YW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUsIEhhbmRs
ZSYpOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgsIEhhbmRsZSYpOyAvLyBXaWxsIGF0dGVtcHQgdG8gY3JlYXRlIHRo
ZSBkaXJlY3RvcnkuCiAgICAgc3RhdGljIFN0cmluZyBjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlG
aWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBUeXBlLCBIYW5kbGUmKTsKICAgICBzdGF0aWMgYm9v
bCBjcmVhdGVIYW5kbGVGb3JHZW5lcmljRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
Q2xhc3MsIEhhbmRsZSYpOwogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgc3RhdGljIGJvb2wg
Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1cChjb25zdCBTdHJpbmcmIHNlcnZpY2UsIE9wdGlvbmFs
PGF1ZGl0X3Rva2VuX3Q+LCBIYW5kbGUmLCBPcHRpb25TZXQ8RmxhZ3M+ID0gRmxhZ3M6OkRlZmF1
bHQpOworICAgIHN0YXRpYyBPcHRpb25hbDxIYW5kbGVBcnJheT4gY3JlYXRlSGFuZGxlc0Zvck1h
Y2hMb29rdXAoY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlcnZpY2VzLCBPcHRpb25hbDxhdWRpdF90
b2tlbl90PiwgT3B0aW9uU2V0PEZsYWdzPiA9IEZsYWdzOjpEZWZhdWx0KTsKICAgICBzdGF0aWMg
Ym9vbCBjcmVhdGVIYW5kbGVGb3JSZWFkQnlBdWRpdFRva2VuKGNvbnN0IFN0cmluZyYgcGF0aCwg
YXVkaXRfdG9rZW5fdCwgSGFuZGxlJik7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlSGFuZGxlRm9y
SU9LaXRDbGFzc0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlva2l0Q2xhc3MsIE9wdGlvbmFsPGF1
ZGl0X3Rva2VuX3Q+LCBIYW5kbGUmLCBPcHRpb25TZXQ8RmxhZ3M+ID0gRmxhZ3M6OkRlZmF1bHQp
OwogI2VuZGlmCkBAIC0xMjMsNiArMTI5LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjb25zdW1l
UGVybWFuZW50bHkoKTsKICAgICBzdGF0aWMgYm9vbCBjb25zdW1lUGVybWFuZW50bHkoY29uc3Qg
SGFuZGxlJik7CisgICAgc3RhdGljIGJvb2wgY29uc3VtZVBlcm1hbmVudGx5KGNvbnN0IEhhbmRs
ZUFycmF5Jik7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgU2FuZGJveEV4dGVuc2lvbihjb25z
dCBIYW5kbGUmKTsKQEAgLTE0NCwxMCArMTUxLDE1IEBAIGlubGluZSB2b2lkIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5OjphbGxvY2F0ZShzaXplX3QpIHsgfQogaW5saW5lIHNpemVfdCBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0g
ICAgCiBpbmxpbmUgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGVBcnJheTo6b3BlcmF0b3JbXShzaXplX3QpIGNvbnN0IHsgcmV0dXJuIG1fZW1w
dHlIYW5kbGU7IH0KIGlubGluZSBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVfdCkgeyByZXR1cm4gbV9lbXB0eUhh
bmRsZTsgfQoraW5saW5lIEhhbmRsZSogYmVnaW4oKSB7IHJldHVybiAmbV9lbXB0eUhhbmRsZTsg
fQoraW5saW5lIEhhbmRsZSogZW5kKCkgeyByZXR1cm4gJm1fZW1wdHlIYW5kbGU7IH0KK2lubGlu
ZSBjb25zdCBIYW5kbGUqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gJm1fZW1wdHlIYW5kbGU7IH0K
K2lubGluZSBjb25zdCBIYW5kbGUqIGVuZCgpIGNvbnN0IHsgcmV0dXJuICZtX2VtcHR5SGFuZGxl
OyB9CiBpbmxpbmUgdm9pZCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZW5jb2RlKElQ
Qzo6RW5jb2RlciYpIGNvbnN0IHsgfQogaW5saW5lIGF1dG8gU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OmRlY29kZShJUEM6OkRlY29kZXImKSAtPiBPcHRpb25hbDxIYW5kbGVBcnJheT4g
eyByZXR1cm4ge3sgfX07IH0KIGlubGluZSBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlKEhhbmRsZSYmKSB7IHJldHVybiBudWxscHRyOyB9CiBpbmxpbmUg
Ym9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5nJiwgVHlwZSwg
SGFuZGxlJikgeyByZXR1cm4gdHJ1ZTsgfQoraW5saW5lIE9wdGlvbmFsPFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5PiBjcmVhdGVIYW5kbGVzRm9yRmlsZXMoY29uc3QgU3RyaW5nJiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mLCBUeXBlKSB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KIGlubGlu
ZSBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRo
KGNvbnN0IFN0cmluZyYsIFR5cGUsIEhhbmRsZSYpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBi
b29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
b25zdCBTdHJpbmcmLCBIYW5kbGUmKSB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgU3RyaW5nIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5n
JiAvKnByZWZpeCovLCBUeXBlLCBIYW5kbGUmKSB7cmV0dXJuIFN0cmluZygpO30KQEAgLTE1Nywx
MCArMTY5LDE1IEBAIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OnJldm9rZSgpIHsgcmV0
dXJuIHRydWU7IH0KIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWUoKSB7IHJl
dHVybiB0cnVlOyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoKSB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpj
b25zdW1lUGVybWFuZW50bHkoY29uc3QgSGFuZGxlJikgeyByZXR1cm4gdHJ1ZTsgfQoraW5saW5l
IGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNvbnN0IEhhbmRsZUFy
cmF5JikgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIFN0cmluZyBzdHJpbmdCeVJlc29sdmluZ1N5
bWxpbmtzSW5QYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkgeyByZXR1cm4gcGF0aDsgfQogaW5saW5l
IFN0cmluZyByZXNvbHZlUGF0aEZvclNhbmRib3hFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRo
KSB7IHJldHVybiBwYXRoOyB9CiBpbmxpbmUgU3RyaW5nIHJlc29sdmVBbmRDcmVhdGVSZWFkV3Jp
dGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCkgeyByZXR1
cm4gcGF0aDsgfQogI2Vsc2UKK2lubGluZSBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUqIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpiZWdpbigpIHsgcmV0dXJuIG1fZGF0YS5iZWdpbigp
OyB9CitpbmxpbmUgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheTo6ZW5kKCkgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CitpbmxpbmUgY29uc3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6
YmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQoraW5saW5lIGNvbnN0IFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5lbmQoKTsgfQogU3RyaW5nIHN0cmluZ0J5UmVzb2x2
aW5nU3ltbGlua3NJblBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKIFN0cmluZyByZXNvbHZlUGF0
aEZvclNhbmRib3hFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKIFN0cmluZyByZXNvbHZl
QW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIHBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlBy
b2Nlc3NQb29sQ29jb2EubW0KaW5kZXggOGYzNWEyOWU2MjZmNzZlNDBkZTFhNzE2NjA0Njc3NGEw
MWY0MGM3My4uYTIzZGE5MDIzOGIxM2U4NWZiNmY4YmYxMWQ0ODIxYTZlZmIxYjc1ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCkBAIC00NDgsMjggKzQ0OCwxNCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUlu
aXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcwogCiAgICAg
aWYgKG5lZWRXZWJQcm9jZXNzRXh0ZW5zaW9ucykgewogICAgICAgICAvLyBGSVhNRSgyMDc3MTYp
OiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhlIEdQVSBwcm9jZXNzIGlz
IGNvbXBsZXRlLgotICAgICAgICBjb25zdCBhdXRvJiBzZXJ2aWNlcyA9IG1lZGlhUmVsYXRlZE1h
Y2hTZXJ2aWNlcygpOwotICAgICAgICBwYXJhbWV0ZXJzLm1lZGlhRXh0ZW5zaW9uSGFuZGxlcy5h
bGxvY2F0ZShzZXJ2aWNlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6
ZSA9IHNlcnZpY2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoc2VydmljZXNbaV0sIFdURjo6bnVs
bG9wdCwgcGFyYW1ldGVycy5tZWRpYUV4dGVuc2lvbkhhbmRsZXNbaV0pOworICAgICAgICBpZiAo
YXV0byBtZWRpYUV4dGVuc2lvbkhhbmRsZXMgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVzRm9yTWFjaExvb2t1cChtZWRpYVJlbGF0ZWRNYWNoU2VydmljZXMoKSwgV1RGOjpudWxsb3B0
KSkKKyAgICAgICAgICAgIHBhcmFtZXRlcnMubWVkaWFFeHRlbnNpb25IYW5kbGVzID0gV1RGTW92
ZSgqbWVkaWFFeHRlbnNpb25IYW5kbGVzKTsKICAgICB9CiAKICNpZiBFTkFCTEUoQ0ZQUkVGU19E
SVJFQ1RfTU9ERSkgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBpZiAoX0FYU0FwcGxpY2F0
aW9uQWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheSBwcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXM7Ci0gICAgICAgIAotICAgICAg
ICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHNlcnZpY2VzW10gPSB7Ci0gICAgICAgICAg
ICAiY29tLmFwcGxlLmNmcHJlZnNkLmFnZW50IiwKLSAgICAgICAgICAgICJjb20uYXBwbGUuY2Zw
cmVmc2QuZGFlbW9uIgotICAgICAgICB9OwotICAgICAgICBhdXRvIHNpemUgPSBzdGQ6OnNpemUo
c2VydmljZXMpOwotICAgICAgICBwcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMuYWxsb2NhdGUo
c2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICBib29sIG9rID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExv
b2t1cChzZXJ2aWNlc1tpXSwgV1RGOjpudWxsb3B0LCBwcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRs
ZXNbaV0pOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBwYXJhbWV0ZXJzLnByZWZlcmVuY2VzRXh0ZW5zaW9uSGFuZGxlcyA9
IFdURk1vdmUocHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzKTsKKyAgICAgICAgaWYgKGF1dG8g
cHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlc0Zvck1hY2hMb29rdXAoIHsgImNvbS5hcHBsZS5jZnByZWZzZC5hZ2VudCJfcywgImNvbS5h
cHBsZS5jZnByZWZzZC5kYWVtb24iX3MgfSwgV1RGOjpudWxsb3B0KSkKKyAgICAgICAgICAgIHBh
cmFtZXRlcnMucHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzID0gV1RGTW92ZSgqcHJlZmVyZW5j
ZXNFeHRlbnNpb25IYW5kbGVzKTsKICAgICB9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggOTk4
MjlhYmUyYjQ0NGIyMTJmMGExZmZmYWE4MzQ3YmI4N2JjZGMxOS4uMjEyOWE1ZTExOGY3NGRmNTI1
NTY2YjYxYzE2YzgxY2NjZDg4MDc4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzksMTkgKzIzOSwxMSBA
QCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6dW5ibG9ja1ByZWZlcmVuY2VTZXJ2aWNlSWZOZWVkZWQo
KQogICAgIGlmICghY2FuU2VuZE1lc3NhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgaGFuZGxlQXJyYXk7Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBjb25zdCBjaGFyKiBzZXJ2aWNlc1tdID0gewotICAgICAgICAiY29tLmFwcGxlLmNmcHJl
ZnNkLmFnZW50IiwKLSAgICAgICAgImNvbS5hcHBsZS5jZnByZWZzZC5kYWVtb24iCi0gICAgfTsK
LSAgICBhdXRvIHNpemUgPSBzdGQ6OnNpemUoc2VydmljZXMpOwotICAgIGhhbmRsZUFycmF5LmFs
bG9jYXRlKHNpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgIGlmICghU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1cChz
ZXJ2aWNlc1tpXSwgY29ubmVjdGlvbigpID8gY29ubmVjdGlvbigpLT5nZXRBdWRpdFRva2VuKCkg
OiBXVEY6Om51bGxvcHQsIGhhbmRsZUFycmF5W2ldKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgYXV0byBoYW5kbGVBcnJheSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZXNGb3JNYWNoTG9va3VwKHsgImNvbS5hcHBsZS5jZnByZWZzZC5hZ2VudCJfcywgImNvbS5hcHBs
ZS5jZnByZWZzZC5kYWVtb24iX3MgfSwgY29ubmVjdGlvbigpID8gY29ubmVjdGlvbigpLT5nZXRB
dWRpdFRva2VuKCkgOiBXVEY6Om51bGxvcHQpOworICAgIGlmICghaGFuZGxlQXJyYXkpCisgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVbmJsb2Nr
UHJlZmVyZW5jZVNlcnZpY2UoaGFuZGxlQXJyYXkpLCAwKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpVbmJsb2NrUHJlZmVyZW5jZVNlcnZpY2UoKmhhbmRsZUFycmF5KSwgMCk7CiAg
ICAgbV9oYXNTZW50TWVzc2FnZVRvVW5ibG9ja1ByZWZlcmVuY2VTZXJ2aWNlID0gdHJ1ZTsKIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggM2Ey
MjdlNTU5MGY3OWRmYTNjODVmOGE5NDhlM2JkNmY5NjM0OTdjNy4uNThiYWE1MjUxZmViMDI3NTU4
NTVmM2NhYjYyMWU5YzEyNWU1MjcxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCkBAIC02NjMyLDEyICs2NjMyLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENo
b29zZUZpbGVzRm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3QK
ICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKLSAg
ICBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy5hbGxvY2F0ZShmaWxlVVJMcy5zaXplKCkpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZVVSTHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShmaWxlVVJMc1tpXSwgU2FuZGJveEV4dGVuc2lv
bjo6VHlwZTo6UmVhZE9ubHksIHNhbmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKTsKLQotICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwo
c2FuZGJveEV4dGVuc2lvbkhhbmRsZXMpKTsKKyAgICBhdXRvIHNhbmRib3hFeHRlbnNpb25IYW5k
bGVzID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0ZvckZpbGVzKCJXZWJQYWdlUHJv
eHk6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uIl9z
LCBmaWxlVVJMcywgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHkpOworICAgIEFTU0VS
VChzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChXVEZNb3ZlKCpzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlcykpKTsKICNlbmRpZgogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGZy
b250Ym9hcmRTZXJ2aWNlc1NhbmRib3hFeHRlbnNpb24sIGljb25TZXJ2aWNlc1NhbmRib3hFeHRl
bnNpb247CkBAIC02NjU3LDE5ICs2NjU0LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENob29z
ZUZpbGVzRm9yT3BlblBhbmVsKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlVVJMcykKICAgICAg
ICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKLSAgICBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlcy5hbGxvY2F0ZShmaWxlVVJMcy5zaXplKCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmlsZVVSTHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBj
cmVhdGVkRXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGZpbGVVUkxz
W2ldLCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZXNbaV0pOwotICAgICAgICBpZiAoIWNyZWF0ZWRFeHRlbnNpb24pIHsKLSAgICAgICAgICAg
IC8vIFRoaXMgY2FuIGxlZ2l0aW1hdGVseSBmYWlsIGlmIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcg
dGhlIGZpbGUgaXMgZGVsZXRlZCBhZnRlciB0aGUgZmlsZSB3YXMgY2hvc2VuLgotICAgICAgICAg
ICAgLy8gV2UgYWxzbyBoYXZlIHJlcG9ydHMgb2YgY2FzZXMgd2hlcmUgdGhpcyBsaWtlbHkgZmFp
bHMgZm9yIHNvbWUgdW5rbm93biByZWFzb24sIDxyZGFyOi8vcHJvYmxlbS8xMDE1NjcxMD4uCi0g
ICAgICAgICAgICBXVEZMb2dBbHdheXMoIldlYlBhZ2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JP
cGVuUGFuZWw6IGNvdWxkIG5vdCBjcmVhdGUgYSBzYW5kYm94IGV4dGVuc2lvbiBmb3IgJyVzJ1xu
IiwgZmlsZVVSTHNbaV0udXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRi
b3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMpKTsKKyAgICBh
dXRvIHNhbmRib3hFeHRlbnNpb25IYW5kbGVzID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlc0ZvckZpbGVzKCJXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsIl9z
LCBmaWxlVVJMcywgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHkpOworICAgIEFTU0VS
VChzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChXVEZNb3ZlKCpzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlcykpKTsKICNlbmRpZgogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlk
Q2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoZmlsZVVSTHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3Ry
YXRlZ2llcy5jcHAKaW5kZXggYzVhYTc1MWFiN2Y4ZmM4ZjBmMGMwOGU4YjViNjkyODczODM5ZTEw
YS4uMjFmOTg3ZGNjYWViYzQ0Y2UzMTI3YTg1NDcyYWYxYTQyZmVjN2Y5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTE0OSwxMCArMTQ5LDcgQEAgdm9pZCBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhu
YW1lcywgY29uc3QKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0
ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLAog
ICAgICAgICBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkUGF0aG5h
bWVzRm9yVHlwZTo6UmVwbHkocGF0aG5hbWVzLCBzYW5kYm94RXh0ZW5zaW9uc0hhbmRsZUFycmF5
KSwgMCk7CiAgICAgQVNTRVJUKHBhdGhuYW1lcy5zaXplKCkgPT0gc2FuZGJveEV4dGVuc2lvbnNI
YW5kbGVBcnJheS5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2FuZGJveEV4
dGVuc2lvbnNIYW5kbGVBcnJheS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoYXV0byBleHRl
bnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9u
c0hhbmRsZUFycmF5W2ldKSkpCi0gICAgICAgICAgICBleHRlbnNpb24tPmNvbnN1bWVQZXJtYW5l
bnRseSgpOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
c2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheSk7CiB9CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOTFlZjg2MTVmZDM4YjVmZDU0ZmQzYTYxYjlhY2Q1MzAy
NTBmNjdkOS4uMWE1ZTg3Mjc5YmI5NWZlZDM4YzI2MmQ2YmYxNGY1ZTViNzM2NDUxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQyNzcsMTIg
KzQyNzcsMTAgQEAgdm9pZCBXZWJQYWdlOjpkaWRDYW5jZWxGb3JPcGVuUGFuZWwoKQogI2lmIEVO
QUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCiB2b2lkIFdlYlBhZ2U6OmV4dGVuZFNhbmRib3hGb3JG
aWxlc0Zyb21PcGVuUGFuZWwoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJiBoYW5kbGVz
KQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGFuZGxlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBib29sIHJlc3VsdCA9IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRs
eShoYW5kbGVzW2ldKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIC8vIFdl
IGhhdmUgcmVwb3J0cyBvZiBjYXNlcyB3aGVyZSB0aGlzIGZhaWxzIGZvciBzb21lIHVua25vd24g
cmVhc29uLCA8cmRhcjovL3Byb2JsZW0vMTAxNTY3MTA+LgotICAgICAgICAgICAgV1RGTG9nQWx3
YXlzKCJXZWJQYWdlOjpleHRlbmRTYW5kYm94Rm9yRmlsZUZyb21PcGVuUGFuZWwoKTogQ291bGQg
bm90IGNvbnN1bWUgYSBzYW5kYm94IGV4dGVuc2lvbiIpOwotICAgICAgICB9CisgICAgYm9vbCBy
ZXN1bHQgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlcyk7Cisg
ICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSByZXBvcnRzIG9mIGNhc2VzIHdo
ZXJlIHRoaXMgZmFpbHMgZm9yIHNvbWUgdW5rbm93biByZWFzb24sIDxyZGFyOi8vcHJvYmxlbS8x
MDE1NjcxMD4uCisgICAgICAgIFdURkxvZ0Fsd2F5cygiV2ViUGFnZTo6ZXh0ZW5kU2FuZGJveEZv
ckZpbGVGcm9tT3BlblBhbmVsKCk6IENvdWxkIG5vdCBjb25zdW1lIGEgc2FuZGJveCBleHRlbnNp
b24iKTsKICAgICB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNz
LmNwcAppbmRleCBlYjFlMmI2ZTQ1NDk0NThjYjE2OGQzZmFkOWJhMDU1NTYxYWM1MjRmLi5mZGJk
YWE0ZGZhOTlhMGJiOTY5ZWJmOTA2ZDA1ZmZhMWZhMDY5YjExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0zODAsOCArMzgwLDcgQEAgdm9pZCBXZWJQcm9jZXNz
Ojppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFy
YW1ldGVycykKICAgICAgICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyLmluc3RhbGwoKTsKICAgICB9
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHBhcmFtZXRlcnMuYWRkaXRpb25hbFNh
bmRib3hFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuYWRkaXRpb25hbFNh
bmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkocGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMp
OwogCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIG1faW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6Y3JlYXRlKHBhcmFtZXRl
cnMsIHRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHMocGFyYW1ldGVycy5pbml0aWFsaXphdGlvblVz
ZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCA5YTk3OTg1YzM3NWU0MGU5YmJjYjM5Y2Ji
ZmIwNjBiODMwMDQ3ZmI0Li43MzM1YTlhMjBmMGZlYjM3YTQzNDBjYmY3ZjhjMGRlNTY2NGU2MTI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0Nv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29j
b2EubW0KQEAgLTMxMSwxMSArMzExLDggQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRp
YWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmEKICAgICBp
ZiAocGFyYW1ldGVycy5kaWFnbm9zdGljc0V4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KCpwYXJhbWV0ZXJzLmRpYWdub3N0aWNzRXh0
ZW5zaW9uSGFuZGxlKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcGFyYW1ldGVy
cy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5keW5h
bWljTWFjaEV4dGVuc2lvbkhhbmRsZXNbaV0pOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDAsIHNp
emUgPSBwYXJhbWV0ZXJzLmR5bmFtaWNJT0tpdEV4dGVuc2lvbkhhbmRsZXMuc2l6ZSgpOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHko
cGFyYW1ldGVycy5keW5hbWljSU9LaXRFeHRlbnNpb25IYW5kbGVzW2ldKTsKKyAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVu
c2lvbkhhbmRsZXMpOworICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShw
YXJhbWV0ZXJzLmR5bmFtaWNJT0tpdEV4dGVuc2lvbkhhbmRsZXMpOwogI2VuZGlmCiAgICAgCiAg
ICAgaWYgKHBhcmFtZXRlcnMubmVIZWxwZXJFeHRlbnNpb25IYW5kbGUpCkBAIC0zMzIsMTYgKzMy
OSwxMSBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2Vi
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQogI2VuZGlmCiAKICAgICAvLyBGSVhNRSgy
MDc3MTYpOiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhlIEdQVSBwcm9j
ZXNzIGlzIGNvbXBsZXRlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcGFyYW1ldGVy
cy5tZWRpYUV4dGVuc2lvbkhhbmRsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5tZWRpYUV4dGVu
c2lvbkhhbmRsZXNbaV0pOworICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRs
eShwYXJhbWV0ZXJzLm1lZGlhRXh0ZW5zaW9uSGFuZGxlcyk7CiAKICNpZiBFTkFCTEUoQ0ZQUkVG
U19ESVJFQ1RfTU9ERSkKICAgICBpZiAocGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhh
bmRsZXMpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnByZWZl
cmVuY2VzRXh0ZW5zaW9uSGFuZGxlcy0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGJvb2wg
b2sgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wcmVm
ZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMtPmF0KGkpKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQob2ssIG9rKTsKLSAgICAgICAgfQotCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseSgqcGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMpOwog
ICAgICAgICBfQ0ZQcmVmc1NldERpcmVjdE1vZGVFbmFibGVkKGZhbHNlKTsKICAgICB9CiAjZW5k
aWYKQEAgLTk1MSwxMSArOTQzLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpub3RpZnlQcmVmZXJlbmNl
c0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2UKIAogdm9pZCBX
ZWJQcm9jZXNzOjp1bmJsb2NrUHJlZmVyZW5jZVNlcnZpY2UoU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXkmJiBoYW5kbGVBcnJheSkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhh
bmRsZUFycmF5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGJvb2wgb2sgPSBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlQXJyYXlbaV0pOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKG9rLCBvayk7Ci0gICAgfQotCisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KGhhbmRsZUFycmF5KTsKICAgICBfQ0ZQcmVmc1NldERpcmVjdE1vZGVFbmFibGVk
KGZhbHNlKTsKIH0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398006</attachid>
            <date>2020-04-29 16:12:31 -0700</date>
            <delta_ts>2020-04-29 16:51:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211103-20200429161230.patch</filename>
            <type>text/plain</type>
            <size>23882</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwOTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhiNmZmMzlhNWE0MTZlODRk
NjFkOTUwNzQ1OWMyZmM5NGExNGY2OWIuLjZlMmQ1ZDcwM2ViM2YyNjg0N2FkMzJmNjQxZWM5YjFl
Y2U0NDA3NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjAtMDQtMjkgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSB0byByZWR1Y2UgYm9pbGVycGxhdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTEwMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjI1MzM2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUGVyIEFybmUgVm9sbGFu
LgorCisgICAgICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBib2lsZXJwbGF0ZSBwYXR0ZXJucyBu
ZWVkZWQgd2hlbiB1c2luZyBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheS4KKyAgICAgICAg
V2UgY291bGQgbWFrZSB0aGVzZSBzaW1wbGVyIGFuZCBsZXNzIGVycm9yIHByb25lIGJ5IGltcHJv
dmluZyB0aGUgY2xhc3MuCisKKyAgICAgICAgVGhpcyBwYXRjaDoKKyAgICAgICAgMS4gQWRkcyBj
b252ZW5pZW5jZSBtZXRob2RzIHRvIGNyZWF0ZSBhbmQgY29uc3VtZSBIYW5kbGVBcnJheXMuCisg
ICAgICAgIDIuIFVwZGF0ZXMgdXNlcyBvZiBIYW5kbGVBcnJheSB0byB1c2UgdGhlIGNvbnZlbmll
bmNlIG1ldGhvZHMuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmg6CisgICAgICAgIChJUEM6OkZv
cm1EYXRhUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9TYW5kYm94
RXh0ZW5zaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZXNGb3JGaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKToKKyAgICAgICAgKFdlYktpdDo6U2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KToKKyAgICAgICAgKiBTaGFyZWQvU2FuZGJveEV4
dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVIYW5kbGVzRm9yRmlsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVuYmxvY2tQcmVmZXJlbmNlU2VydmljZUlmTmVl
ZGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpleHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9X
ZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1bmJs
b2NrUHJlZmVyZW5jZVNlcnZpY2UpOgorCiAyMDIwLTA0LTI5ICBQZXIgQXJuZSBWb2xsYW4gIDxw
dm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHNhbmRib3ggY29tcGlsZSBm
aXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVy
ZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaApp
bmRleCBiYzQ5N2M2MjM1ZmQxZTUyOGIyM2FiNTQwMjMwZTA0MGFkNjEyZGJkLi4xMTYxNTdkMTdi
NmMwMGMzNDZmM2Q4ZDI4NTU1NWEyYzdiZWU5YTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmgKQEAgLTg1LDggKzg1LDcgQEAgcHVibGljOgog
ICAgICAgICBpZiAoIXNhbmRib3hFeHRlbnNpb25IYW5kbGVzKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNhbmRib3hF
eHRlbnNpb25IYW5kbGVzLT5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHNhbmRib3hFeHRlbnNpb25IYW5kbGVzLT5h
dChpKSk7CisgICAgICAgIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KCpzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyk7CiAKICAgICAgICAgcmV0dXJuIEZvcm1EYXRh
UmVmZXJlbmNlIHsgZm9ybURhdGEucmVsZWFzZU5vbk51bGwoKSB9OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbQppbmRl
eCA4YmYwMzM3OGQyZGQ3M2JhNjkxNjdhOWQ0NjYzY2ZiNDE0NDBjNjJjLi40MWEwOGVlYmViYmZj
ZDhlNDUwMDljNGUyYjgwN2MyZjVhMWY0Yzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvU2FuZGJveEV4dGVuc2lvbkNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkzLDYgKzI5MywyNSBA
QCBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgs
IFR5cGUgdHlwZSwgSGFuZGxlJiBoYW5kbAogICAgIHJldHVybiBjcmVhdGVIYW5kbGVXaXRob3V0
UmVzb2x2aW5nUGF0aChyZXNvbHZlUGF0aEZvclNhbmRib3hFeHRlbnNpb24ocGF0aCksIHR5cGUs
IGhhbmRsZSk7CiB9CiAKK09wdGlvbmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5PiBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVzRm9yRmlsZXMoY29uc3QgU3RyaW5nJiBsb2dM
YWJlbCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBUeXBlIHR5cGUpCit7CisgICAgaWYg
KHBhdGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IGhhbmRsZUFycmF5OworICAgIAorICAgIGhhbmRs
ZUFycmF5LmFsbG9jYXRlKHBhdGhzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwYXRocy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIVNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZShwYXRoc1tpXSwgdHlwZSwgaGFuZGxlQXJyYXlbaV0pKSB7CisgICAgICAgICAg
ICAvLyBUaGlzIGNhbiBsZWdpdGltYXRlbHkgZmFpbCBpZiBhIGRpcmVjdG9yeSBjb250YWluaW5n
IHRoZSBmaWxlIGlzIGRlbGV0ZWQgYWZ0ZXIgdGhlIGZpbGUgd2FzIGNob3Nlbi4KKyAgICAgICAg
ICAgIC8vIFdlIGFsc28gaGF2ZSByZXBvcnRzIG9mIGNhc2VzIHdoZXJlIHRoaXMgbGlrZWx5IGZh
aWxzIGZvciBzb21lIHVua25vd24gcmVhc29uLCA8cmRhcjovL3Byb2JsZW0vMTAxNTY3MTA+Lgor
ICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogY291bGQgbm90IGNyZWF0ZSBhIHNhbmRib3gg
ZXh0ZW5zaW9uIGZvciAnJXMnXG4iLCBsb2dMYWJlbC51dGY4KCkuZGF0YSgpLCBwYXRoc1tpXS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBoYW5kbGVBcnJh
eTsKK30KKwogYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIGhh
bmRsZSkKIHsKICAgICBTdHJpbmcgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRX
cml0ZURpcmVjdG9yeUZvclNhbmRib3hFeHRlbnNpb24ocGF0aCk7CkBAIC0zNTcsNiArMzc2LDIy
IEBAIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1cChjb25z
dCBTdHJpbmcmIHNlcnZpY2UsIE9wdGlvbmFsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK09wdGlv
bmFsPFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5PiBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVzRm9yTWFjaExvb2t1cChjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VydmljZXMsIE9w
dGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9rZW4sIE9wdGlvblNldDxGbGFncz4gZmxhZ3Mp
Cit7CisgICAgaWYgKHNlcnZpY2VzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IGhhbmRsZUFycmF5Owor
ICAgIAorICAgIGhhbmRsZUFycmF5LmFsbG9jYXRlKHNlcnZpY2VzLnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzZXJ2aWNlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
IVNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoc2VydmljZXNbaV0s
IGF1ZGl0VG9rZW4sIGhhbmRsZUFycmF5W2ldLCBmbGFncykpCisgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFuZGxlQXJyYXk7Cit9CisK
IGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZEJ5QXVkaXRUb2tlbihj
b25zdCBTdHJpbmcmIHBhdGgsIGF1ZGl0X3Rva2VuX3QgYXVkaXRUb2tlbiwgSGFuZGxlJiBoYW5k
bGUpCiB7CiAgICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKTsKQEAgLTQ0Miw2
ICs0NzcsMjEgQEAgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY29u
c3QgSGFuZGxlJiBoYW5kbGUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY29uc3QgSGFuZGxlQXJyYXkmIGhhbmRsZUFy
cmF5KQoreworICAgIGJvb2wgYWxsU3VjY2VlZGVkID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGhh
bmRsZSA6IGhhbmRsZUFycmF5KSB7CisgICAgICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVu
c2lvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJvb2wgb2sgPSBTYW5kYm94
RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlKTsKKyAgICAgICAgQVNTRVJUKG9r
KTsKKyAgICAgICAgYWxsU3VjY2VlZGVkICY9IG9rOworICAgIH0KKworICAgIHJldHVybiBhbGxT
dWNjZWVkZWQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxF
KFNBTkRCT1hfRVhURU5TSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1Nh
bmRib3hFeHRlbnNpb24uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24u
aAppbmRleCBkMDhmNzJhOTU5MTUxMWQxNTE2OWE0YjFiOTllZGU4ZjlmYmJjOGNkLi5hNjU4OWRl
NmE1YTFmOWQ1ZjlhM2UxMGY5OGY1YmU3ZjRiODhhMDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
U2FuZGJveEV4dGVuc2lvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgSGFuZGxl
JiBvcGVyYXRvcltdKHNpemVfdCBpKTsKICAgICAgICAgSGFuZGxlJiBhdChzaXplX3QgaSkgeyBy
ZXR1cm4gb3BlcmF0b3JbXShpKTsgfQogICAgICAgICBjb25zdCBIYW5kbGUmIG9wZXJhdG9yW10o
c2l6ZV90IGkpIGNvbnN0OworICAgICAgICBIYW5kbGUqIGJlZ2luKCk7CisgICAgICAgIEhhbmRs
ZSogZW5kKCk7CisgICAgICAgIGNvbnN0IEhhbmRsZSogYmVnaW4oKSBjb25zdDsKKyAgICAgICAg
Y29uc3QgSGFuZGxlKiBlbmQoKSBjb25zdDsKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdDsK
ICAgICAgICAgdm9pZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHN0YXRp
YyBPcHRpb25hbDxIYW5kbGVBcnJheT4gZGVjb2RlKElQQzo6RGVjb2RlciYpOwpAQCAtMTA3LDEy
ICsxMTEsMTQgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBSZWZQdHI8U2FuZGJveEV4dGVu
c2lvbj4gY3JlYXRlKEhhbmRsZSYmKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVIYW5kbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBUeXBlLCBIYW5kbGUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8U2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk+IGNyZWF0ZUhhbmRsZXNGb3JGaWxlcyhjb25zdCBT
dHJpbmcmIGxvZ0xhYmVsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIFR5cGUpOwogICAg
IHN0YXRpYyBib29sIGNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgVHlwZSwgSGFuZGxlJik7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlSGFuZGxlRm9y
UmVhZFdyaXRlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgSGFuZGxlJik7IC8vIFdpbGwg
YXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeS4KICAgICBzdGF0aWMgU3RyaW5nIGNyZWF0
ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFR5cGUsIEhhbmRs
ZSYpOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUhhbmRsZUZvckdlbmVyaWNFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBleHRlbnNpb25DbGFzcywgSGFuZGxlJik7CiAjaWYgSEFWRShBVURJVF9UT0tF
TikKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVIYW5kbGVGb3JNYWNoTG9va3VwKGNvbnN0IFN0cmlu
ZyYgc2VydmljZSwgT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4sIEhhbmRsZSYsIE9wdGlvblNldDxG
bGFncz4gPSBGbGFnczo6RGVmYXVsdCk7CisgICAgc3RhdGljIE9wdGlvbmFsPEhhbmRsZUFycmF5
PiBjcmVhdGVIYW5kbGVzRm9yTWFjaExvb2t1cChjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2Vydmlj
ZXMsIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+LCBPcHRpb25TZXQ8RmxhZ3M+ID0gRmxhZ3M6OkRl
ZmF1bHQpOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUhhbmRsZUZvclJlYWRCeUF1ZGl0VG9rZW4o
Y29uc3QgU3RyaW5nJiBwYXRoLCBhdWRpdF90b2tlbl90LCBIYW5kbGUmKTsKICAgICBzdGF0aWMg
Ym9vbCBjcmVhdGVIYW5kbGVGb3JJT0tpdENsYXNzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaW9r
aXRDbGFzcywgT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4sIEhhbmRsZSYsIE9wdGlvblNldDxGbGFn
cz4gPSBGbGFnczo6RGVmYXVsdCk7CiAjZW5kaWYKQEAgLTEyMyw2ICsxMjksNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGNvbnN1bWVQZXJtYW5lbnRseSgpOwogICAgIHN0YXRpYyBib29sIGNvbnN1
bWVQZXJtYW5lbnRseShjb25zdCBIYW5kbGUmKTsKKyAgICBzdGF0aWMgYm9vbCBjb25zdW1lUGVy
bWFuZW50bHkoY29uc3QgSGFuZGxlQXJyYXkmKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBT
YW5kYm94RXh0ZW5zaW9uKGNvbnN0IEhhbmRsZSYpOwpAQCAtMTQ0LDEwICsxNTEsMTUgQEAgaW5s
aW5lIHZvaWQgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmFsbG9jYXRlKHNpemVfdCkg
eyB9CiBpbmxpbmUgc2l6ZV90IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpzaXplKCkg
Y29uc3QgeyByZXR1cm4gMDsgfSAgICAKIGlubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVfdCkg
Y29uc3QgeyByZXR1cm4gbV9lbXB0eUhhbmRsZTsgfQogaW5saW5lIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90
KSB7IHJldHVybiBtX2VtcHR5SGFuZGxlOyB9CitpbmxpbmUgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlKiBiZWdpbigpIHsgcmV0dXJuICZtX2VtcHR5SGFuZGxlOyB9CitpbmxpbmUgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlKiBlbmQoKSB7IHJldHVybiAmbV9lbXB0eUhhbmRsZTsgfQoraW5saW5l
IGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSogYmVnaW4oKSBjb25zdCB7IHJldHVybiAm
bV9lbXB0eUhhbmRsZTsgfQoraW5saW5lIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSog
ZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fZW1wdHlIYW5kbGU7IH0KIGlubGluZSB2b2lkIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3QgeyB9
CiBpbmxpbmUgYXV0byBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZGVjb2RlKElQQzo6
RGVjb2RlciYpIC0+IE9wdGlvbmFsPEhhbmRsZUFycmF5PiB7IHJldHVybiB7eyB9fTsgfQogaW5s
aW5lIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoSGFu
ZGxlJiYpIHsgcmV0dXJuIG51bGxwdHI7IH0KIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmLCBUeXBlLCBIYW5kbGUmKSB7IHJldHVybiB0cnVl
OyB9CitpbmxpbmUgT3B0aW9uYWw8U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk+IGNyZWF0
ZUhhbmRsZXNGb3JGaWxlcyhjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFR5
cGUpIHsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQogaW5saW5lIGJvb2wgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgoY29uc3QgU3RyaW5nJiwgVHlwZSwg
SGFuZGxlJikgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYsIEhhbmRsZSYp
IHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBTdHJpbmcgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIC8qcHJlZml4Ki8sIFR5cGUsIEhh
bmRsZSYpIHtyZXR1cm4gU3RyaW5nKCk7fQpAQCAtMTU3LDEwICsxNjksMTUgQEAgaW5saW5lIGJv
b2wgU2FuZGJveEV4dGVuc2lvbjo6cmV2b2tlKCkgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJv
b2wgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZSgpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBi
b29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSgpIHsgcmV0dXJuIHRydWU7
IH0KIGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjb25z
dCBIYW5kbGUmKSB7IHJldHVybiB0cnVlOyB9CitpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkoY29uc3QgSGFuZGxlQXJyYXkmKSB7IHJldHVybiB0cnVlOyB9
CiBpbmxpbmUgU3RyaW5nIHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlua3NJblBhdGgoY29uc3QgU3Ry
aW5nJiBwYXRoKSB7IHJldHVybiBwYXRoOyB9CiBpbmxpbmUgU3RyaW5nIHJlc29sdmVQYXRoRm9y
U2FuZGJveEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIHBhdGgpIHsgcmV0dXJuIHBhdGg7IH0KIGlu
bGluZSBTdHJpbmcgcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRib3hF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoKSB7IHJldHVybiBwYXRoOyB9CiAjZWxzZQoraW5s
aW5lIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJy
YXk6OmJlZ2luKCkgeyByZXR1cm4gbV9kYXRhLmJlZ2luKCk7IH0KK2lubGluZSBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUqIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmQoKSB7IHJl
dHVybiBtX2RhdGEuZW5kKCk7IH0KK2lubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUqIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5iZWdpbigpOyB9CitpbmxpbmUgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
KiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmVuZCgpOyB9CiBTdHJpbmcgc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChjb25z
dCBTdHJpbmcmIHBhdGgpOwogU3RyaW5nIHJlc29sdmVQYXRoRm9yU2FuZGJveEV4dGVuc2lvbihj
b25zdCBTdHJpbmcmIHBhdGgpOwogU3RyaW5nIHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJl
Y3RvcnlGb3JTYW5kYm94RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRl
eCBkMzUzMDNlZjZiZGYxMjNjMDhjOGQwNGQxMzcxNmE3MWMzMjc5ODJiLi5hNzZhYTE1YTBjZGM0
OTlkZmJjYjFiMzA2MWMzZGI0YTM2ZTY0OGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTQ0MiwyOSArNDQyLDE1
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29u
c3QgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzCiAKICAgICBpZiAobmVlZFdlYlByb2Nlc3NFeHRl
bnNpb25zKSB7CiAgICAgICAgIC8vIEZJWE1FKDIwNzcxNik6IFRoZSBmb2xsb3dpbmcgc2hvdWxk
IGJlIHJlbW92ZWQgd2hlbiB0aGUgR1BVIHByb2Nlc3MgaXMgY29tcGxldGUuCi0gICAgICAgIGNv
bnN0IGF1dG8mIHNlcnZpY2VzID0gbWVkaWFSZWxhdGVkTWFjaFNlcnZpY2VzKCk7Ci0gICAgICAg
IHBhcmFtZXRlcnMubWVkaWFFeHRlbnNpb25IYW5kbGVzLmFsbG9jYXRlKHNlcnZpY2VzLnNpemUo
KSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gc2VydmljZXMuc2l6ZSgpOyBp
IDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yTWFjaExvb2t1cChzZXJ2aWNlc1tpXSwgV1RGOjpudWxsb3B0LCBwYXJhbWV0ZXJzLm1lZGlh
RXh0ZW5zaW9uSGFuZGxlc1tpXSk7CisgICAgICAgIGlmIChhdXRvIG1lZGlhRXh0ZW5zaW9uSGFu
ZGxlcyA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKG1lZGlh
UmVsYXRlZE1hY2hTZXJ2aWNlcygpLCBXVEY6Om51bGxvcHQpKQorICAgICAgICAgICAgcGFyYW1l
dGVycy5tZWRpYUV4dGVuc2lvbkhhbmRsZXMgPSBXVEZNb3ZlKCptZWRpYUV4dGVuc2lvbkhhbmRs
ZXMpOwogICAgIH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAgICAgaWYgKF9BWFNBcHBsaWNhdGlvbkFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgcHJlZmVyZW5j
ZXNFeHRlbnNpb25IYW5kbGVzOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBj
b25zdCBjaGFyKiBzZXJ2aWNlc1tdID0gewotICAgICAgICAgICAgImNvbS5hcHBsZS5jZnByZWZz
ZC5hZ2VudCIsCi0gICAgICAgICAgICAiY29tLmFwcGxlLmNmcHJlZnNkLmRhZW1vbiIKLSAgICAg
ICAgfTsKLSAgICAgICAgYXV0byBzaXplID0gc3RkOjpzaXplKHNlcnZpY2VzKTsKLSAgICAgICAg
cHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzLmFsbG9jYXRlKHNpemUpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgYm9vbCBvayA9IFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoc2VydmljZXNbaV0sIFdU
Rjo6bnVsbG9wdCwgcHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzW2ldKTsKLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcGFy
YW1ldGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMgPSBXVEZNb3ZlKHByZWZlcmVuY2Vz
RXh0ZW5zaW9uSGFuZGxlcyk7CisgICAgICAgIGlmIChhdXRvIHByZWZlcmVuY2VzRXh0ZW5zaW9u
SGFuZGxlcyA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKCB7
ICJjb20uYXBwbGUuY2ZwcmVmc2QuYWdlbnQiX3MsICJjb20uYXBwbGUuY2ZwcmVmc2QuZGFlbW9u
Il9zIH0sIFdURjo6bnVsbG9wdCkpCisgICAgICAgICAgICBwYXJhbWV0ZXJzLnByZWZlcmVuY2Vz
RXh0ZW5zaW9uSGFuZGxlcyA9IFdURk1vdmUoKnByZWZlcmVuY2VzRXh0ZW5zaW9uSGFuZGxlcyk7
CiAgICAgfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0KaW5kZXggOTk4MjlhYmUyYjQ0NGIyMTJmMGExZmZm
YWE4MzQ3YmI4N2JjZGMxOS4uMjEyOWE1ZTExOGY3NGRmNTI1NTY2YjYxYzE2YzgxY2NjZDg4MDc4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1By
b3h5Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Byb3h5Q29jb2EubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMzksMTkgKzIzOSwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQcm94
eTo6dW5ibG9ja1ByZWZlcmVuY2VTZXJ2aWNlSWZOZWVkZWQoKQogICAgIGlmICghY2FuU2VuZE1l
c3NhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXkgaGFuZGxlQXJyYXk7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBzZXJ2
aWNlc1tdID0gewotICAgICAgICAiY29tLmFwcGxlLmNmcHJlZnNkLmFnZW50IiwKLSAgICAgICAg
ImNvbS5hcHBsZS5jZnByZWZzZC5kYWVtb24iCi0gICAgfTsKLSAgICBhdXRvIHNpemUgPSBzdGQ6
OnNpemUoc2VydmljZXMpOwotICAgIGhhbmRsZUFycmF5LmFsbG9jYXRlKHNpemUpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGlmICghU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1cChzZXJ2aWNlc1tpXSwgY29ubmVjdGlv
bigpID8gY29ubmVjdGlvbigpLT5nZXRBdWRpdFRva2VuKCkgOiBXVEY6Om51bGxvcHQsIGhhbmRs
ZUFycmF5W2ldKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBoYW5kbGVB
cnJheSA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKHsgImNv
bS5hcHBsZS5jZnByZWZzZC5hZ2VudCJfcywgImNvbS5hcHBsZS5jZnByZWZzZC5kYWVtb24iX3Mg
fSwgY29ubmVjdGlvbigpID8gY29ubmVjdGlvbigpLT5nZXRBdWRpdFRva2VuKCkgOiBXVEY6Om51
bGxvcHQpOworICAgIGlmICghaGFuZGxlQXJyYXkpCisgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVbmJsb2NrUHJlZmVyZW5jZVNlcnZpY2UoaGFu
ZGxlQXJyYXkpLCAwKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVbmJsb2NrUHJl
ZmVyZW5jZVNlcnZpY2UoKmhhbmRsZUFycmF5KSwgMCk7CiAgICAgbV9oYXNTZW50TWVzc2FnZVRv
VW5ibG9ja1ByZWZlcmVuY2VTZXJ2aWNlID0gdHJ1ZTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMGQzMDhlNmNiZjY4Njc5MjZkNDE3Nzkx
YTAzNDJhZGZhZjc1YzEyOC4uNDY1YTIyMDUwMjc2MTUzZGI1ZmVhNzA5MGIwOWI4NGVmMmFlYTZj
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC02NjMyLDEy
ICs2NjMyLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVs
V2l0aERpc3BsYXlTdHJpbmdBbmRJY29uKGNvbnN0IFZlY3QKICAgICAgICAgcmV0dXJuOwogCiAj
aWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKLSAgICBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlcy5hbGxvY2F0ZShmaWxlVVJMcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZmlsZVVSTHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZShmaWxlVVJMc1tpXSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHksIHNh
bmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKTsKLQotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZXMpKTsKKyAgICBhdXRvIHNhbmRib3hFeHRlbnNpb25IYW5kbGVzID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlc0ZvckZpbGVzKCJXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9y
T3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uIl9zLCBmaWxlVVJMcywgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHkpOworICAgIEFTU0VSVChzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlcyk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVz
RnJvbU9wZW5QYW5lbChXVEZNb3ZlKCpzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykpKTsKICNlbmRp
ZgogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGZyb250Ym9hcmRTZXJ2aWNlc1NhbmRi
b3hFeHRlbnNpb24sIGljb25TZXJ2aWNlc1NhbmRib3hFeHRlbnNpb247CkBAIC02NjU3LDE5ICs2
NjU0LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlVVJMcykKICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5B
QkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJh
eSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKLSAgICBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcy5h
bGxvY2F0ZShmaWxlVVJMcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmls
ZVVSTHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBjcmVhdGVkRXh0ZW5zaW9uID0gU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGZpbGVVUkxzW2ldLCBTYW5kYm94RXh0ZW5zaW9u
OjpUeXBlOjpSZWFkT25seSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZXNbaV0pOwotICAgICAgICBp
ZiAoIWNyZWF0ZWRFeHRlbnNpb24pIHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FuIGxlZ2l0aW1h
dGVseSBmYWlsIGlmIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUgaXMgZGVsZXRlZCBh
ZnRlciB0aGUgZmlsZSB3YXMgY2hvc2VuLgotICAgICAgICAgICAgLy8gV2UgYWxzbyBoYXZlIHJl
cG9ydHMgb2YgY2FzZXMgd2hlcmUgdGhpcyBsaWtlbHkgZmFpbHMgZm9yIHNvbWUgdW5rbm93biBy
ZWFzb24sIDxyZGFyOi8vcHJvYmxlbS8xMDE1NjcxMD4uCi0gICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIldlYlBhZ2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWw6IGNvdWxkIG5vdCBj
cmVhdGUgYSBzYW5kYm94IGV4dGVuc2lvbiBmb3IgJyVzJ1xuIiwgZmlsZVVSTHNbaV0udXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFu
ZWwoc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMpKTsKKyAgICBhdXRvIHNhbmRib3hFeHRlbnNpb25I
YW5kbGVzID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0ZvckZpbGVzKCJXZWJQYWdl
UHJveHk6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsIl9zLCBmaWxlVVJMcywgU2FuZGJveEV4
dGVuc2lvbjo6VHlwZTo6UmVhZE9ubHkpOworICAgIEFTU0VSVChzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlcyk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVz
RnJvbU9wZW5QYW5lbChXVEZNb3ZlKCpzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykpKTsKICNlbmRp
ZgogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFu
ZWwoZmlsZVVSTHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggYzVh
YTc1MWFiN2Y4ZmM4ZjBmMGMwOGU4YjViNjkyODczODM5ZTEwYS4uMjFmOTg3ZGNjYWViYzQ0Y2Uz
MTI3YTg1NDcyYWYxYTQyZmVjN2Y5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5j
cHAKQEAgLTE0OSwxMCArMTQ5LDcgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBh
dGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QKICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlw
ZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLAogICAgICAgICBNZXNzYWdlczo6V2Vi
UGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkocGF0
aG5hbWVzLCBzYW5kYm94RXh0ZW5zaW9uc0hhbmRsZUFycmF5KSwgMCk7CiAgICAgQVNTRVJUKHBh
dGhuYW1lcy5zaXplKCkgPT0gc2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheS5zaXplKCkpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheS5z
aXplKCk7IGkrKykgewotICAgICAgICBpZiAoYXV0byBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGUoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uc0hhbmRsZUFycmF5W2ldKSkpCi0g
ICAgICAgICAgICBleHRlbnNpb24tPmNvbnN1bWVQZXJtYW5lbnRseSgpOwotICAgIH0KKyAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoc2FuZGJveEV4dGVuc2lvbnNIYW5k
bGVBcnJheSk7CiB9CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0ZvclR5
cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5k
ZXggOGIzYzA2NDk4Yzc0ZDQzZTAzYzM1NGVjYTBlYjU2Zjc3ZThhYzUzZC4uM2VkMDI5M2E5ODg0
NmFjYTAyNzZmMjYyZGQ2OTY3OWY3ZDA1ODlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQyNzcsMTIgKzQyNzcsMTAgQEAgdm9pZCBXZWJQ
YWdlOjpkaWRDYW5jZWxGb3JPcGVuUGFuZWwoKQogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lP
TlMpCiB2b2lkIFdlYlBhZ2U6OmV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJiBoYW5kbGVzKQogewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaGFuZGxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIHJlc3VsdCA9
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGVzW2ldKTsKLSAgICAg
ICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgcmVwb3J0cyBvZiBjYXNl
cyB3aGVyZSB0aGlzIGZhaWxzIGZvciBzb21lIHVua25vd24gcmVhc29uLCA8cmRhcjovL3Byb2Js
ZW0vMTAxNTY3MTA+LgotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJXZWJQYWdlOjpleHRlbmRT
YW5kYm94Rm9yRmlsZUZyb21PcGVuUGFuZWwoKTogQ291bGQgbm90IGNvbnN1bWUgYSBzYW5kYm94
IGV4dGVuc2lvbiIpOwotICAgICAgICB9CisgICAgYm9vbCByZXN1bHQgPSBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlcyk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgLy8gV2UgaGF2ZSByZXBvcnRzIG9mIGNhc2VzIHdoZXJlIHRoaXMgZmFpbHMgZm9yIHNv
bWUgdW5rbm93biByZWFzb24sIDxyZGFyOi8vcHJvYmxlbS8xMDE1NjcxMD4uCisgICAgICAgIFdU
RkxvZ0Fsd2F5cygiV2ViUGFnZTo6ZXh0ZW5kU2FuZGJveEZvckZpbGVGcm9tT3BlblBhbmVsKCk6
IENvdWxkIG5vdCBjb25zdW1lIGEgc2FuZGJveCBleHRlbnNpb24iKTsKICAgICB9CiB9CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA2ODEwNGJkZmQy
OTk0MDc2MTM2MWFlY2NiNmI2NGI5Y2Y0YTEwYTdhLi41OTM2NmMwYjJlZTY1MDE3NzQxNzk3YjI0
ZDdiMGM5YzAzMzA0ZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3Bw
CkBAIC0zNzMsOCArMzczLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vz
cyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICAgICAgbWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmluc3RhbGwoKTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMCwgc2l6ZSA9IHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVz
LnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVz
W2ldKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVy
cy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lvbkhhbmRsZXMpOwogCiAgICAgaWYgKCFwYXJhbWV0
ZXJzLmluamVjdGVkQnVuZGxlUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIG1faW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6Y3JlYXRlKHBhcmFtZXRlcnMsIHRyYW5zZm9ybUhhbmRsZXNU
b09iamVjdHMocGFyYW1ldGVycy5pbml0aWFsaXphdGlvblVzZXJEYXRhLm9iamVjdCgpKS5nZXQo
KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vz
c0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2Nv
YS5tbQppbmRleCA4NzFiZGQ0ZmY5YTk2OTQ3YTc1YTM1Njk5OGY0MjI2OWYxNmQyMzYyLi40ZjU1
YjBjNmQwYTJiYWNhMmZlNDM2Mjk5OWE1ZWYxYmQ1ZjkxNDY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTMyMywxMSArMzIz
LDggQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmEKICAgICBpZiAocGFyYW1ldGVycy5kaWFnbm9z
dGljc0V4dGVuc2lvbkhhbmRsZSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBl
cm1hbmVudGx5KCpwYXJhbWV0ZXJzLmRpYWdub3N0aWNzRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lv
bkhhbmRsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRs
ZXNbaV0pOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBwYXJhbWV0ZXJzLmR5bmFt
aWNJT0tpdEV4dGVuc2lvbkhhbmRsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5keW5hbWljSU9L
aXRFeHRlbnNpb25IYW5kbGVzW2ldKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXMpOworICAgIFNh
bmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmR5bmFtaWNJT0tp
dEV4dGVuc2lvbkhhbmRsZXMpOwogI2VuZGlmCiAgICAgCiAgICAgaWYgKHBhcmFtZXRlcnMubmVI
ZWxwZXJFeHRlbnNpb25IYW5kbGUpCkBAIC0zNDQsMTYgKzM0MSwxMSBAQCB2b2lkIFdlYlByb2Nl
c3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYgcGFyYQogI2VuZGlmCiAKICAgICAvLyBGSVhNRSgyMDc3MTYpOiBUaGUgZm9sbG93aW5n
IHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhlIEdQVSBwcm9jZXNzIGlzIGNvbXBsZXRlLgotICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcGFyYW1ldGVycy5tZWRpYUV4dGVuc2lvbkhhbmRs
ZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25z
dW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5tZWRpYUV4dGVuc2lvbkhhbmRsZXNbaV0pOworICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLm1lZGlhRXh0
ZW5zaW9uSGFuZGxlcyk7CiAKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICBp
ZiAocGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMpIHsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLnByZWZlcmVuY2VzRXh0ZW5zaW9uSGFuZGxl
cy0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGJvb2wgb2sgPSBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRs
ZXMtPmF0KGkpKTsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAg
fQotCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSgqcGFyYW1l
dGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMpOwogICAgICAgICBfQ0ZQcmVmc1NldERp
cmVjdE1vZGVFbmFibGVkKGZhbHNlKTsKICAgICB9CiAjZW5kaWYKQEAgLTk2MywxMSArOTU1LDcg
QEAgdm9pZCBXZWJQcm9jZXNzOjpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5n
JiBkb21haW4sIGNvbnN0IFN0cmluZyYga2UKIAogdm9pZCBXZWJQcm9jZXNzOjp1bmJsb2NrUHJl
ZmVyZW5jZVNlcnZpY2UoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJiBoYW5kbGVBcnJh
eSkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGhhbmRsZUFycmF5LnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIGJvb2wgb2sgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50
bHkoaGFuZGxlQXJyYXlbaV0pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAg
fQotCisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZUFycmF5
KTsKICAgICBfQ0ZQcmVmc1NldERpcmVjdE1vZGVFbmFibGVkKGZhbHNlKTsKIH0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398009</attachid>
            <date>2020-04-29 16:52:02 -0700</date>
            <delta_ts>2020-04-29 18:20:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211103-20200429165201.patch</filename>
            <type>text/plain</type>
            <size>28623</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwOTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhiNmZmMzlhNWE0MTZlODRk
NjFkOTUwNzQ1OWMyZmM5NGExNGY2OWIuLjZlMmQ1ZDcwM2ViM2YyNjg0N2FkMzJmNjQxZWM5YjFl
Y2U0NDA3NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjAtMDQtMjkgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSB0byByZWR1Y2UgYm9pbGVycGxhdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTEwMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjI1MzM2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUGVyIEFybmUgVm9sbGFu
LgorCisgICAgICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBib2lsZXJwbGF0ZSBwYXR0ZXJucyBu
ZWVkZWQgd2hlbiB1c2luZyBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheS4KKyAgICAgICAg
V2UgY291bGQgbWFrZSB0aGVzZSBzaW1wbGVyIGFuZCBsZXNzIGVycm9yIHByb25lIGJ5IGltcHJv
dmluZyB0aGUgY2xhc3MuCisKKyAgICAgICAgVGhpcyBwYXRjaDoKKyAgICAgICAgMS4gQWRkcyBj
b252ZW5pZW5jZSBtZXRob2RzIHRvIGNyZWF0ZSBhbmQgY29uc3VtZSBIYW5kbGVBcnJheXMuCisg
ICAgICAgIDIuIFVwZGF0ZXMgdXNlcyBvZiBIYW5kbGVBcnJheSB0byB1c2UgdGhlIGNvbnZlbmll
bmNlIG1ldGhvZHMuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmg6CisgICAgICAgIChJUEM6OkZv
cm1EYXRhUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9TYW5kYm94
RXh0ZW5zaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZXNGb3JGaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKToKKyAgICAgICAgKFdlYktpdDo6U2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KToKKyAgICAgICAgKiBTaGFyZWQvU2FuZGJveEV4
dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVIYW5kbGVzRm9yRmlsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVuYmxvY2tQcmVmZXJlbmNlU2VydmljZUlmTmVl
ZGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpleHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9X
ZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1bmJs
b2NrUHJlZmVyZW5jZVNlcnZpY2UpOgorCiAyMDIwLTA0LTI5ICBQZXIgQXJuZSBWb2xsYW4gIDxw
dm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHNhbmRib3ggY29tcGlsZSBm
aXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVy
ZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaApp
bmRleCBiYzQ5N2M2MjM1ZmQxZTUyOGIyM2FiNTQwMjMwZTA0MGFkNjEyZGJkLi4xMTYxNTdkMTdi
NmMwMGMzNDZmM2Q4ZDI4NTU1NWEyYzdiZWU5YTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmgKQEAgLTg1LDggKzg1LDcgQEAgcHVibGljOgog
ICAgICAgICBpZiAoIXNhbmRib3hFeHRlbnNpb25IYW5kbGVzKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNhbmRib3hF
eHRlbnNpb25IYW5kbGVzLT5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHNhbmRib3hFeHRlbnNpb25IYW5kbGVzLT5h
dChpKSk7CisgICAgICAgIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KCpzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyk7CiAKICAgICAgICAgcmV0dXJuIEZvcm1EYXRh
UmVmZXJlbmNlIHsgZm9ybURhdGEucmVsZWFzZU5vbk51bGwoKSB9OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbQppbmRl
eCA4YmYwMzM3OGQyZGQ3M2JhNjkxNjdhOWQ0NjYzY2ZiNDE0NDBjNjJjLi5lMjFhYjJhNzA0MWY2
ZmM2YjFlMDBhNTc5NGZkYzkwMWY3N2I0ODRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvU2FuZGJveEV4dGVuc2lvbkNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkzLDYgKzI5MywyNiBA
QCBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgs
IFR5cGUgdHlwZSwgSGFuZGxlJiBoYW5kbAogICAgIHJldHVybiBjcmVhdGVIYW5kbGVXaXRob3V0
UmVzb2x2aW5nUGF0aChyZXNvbHZlUGF0aEZvclNhbmRib3hFeHRlbnNpb24ocGF0aCksIHR5cGUs
IGhhbmRsZSk7CiB9CiAKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZVJlYWRPbmx5SGFuZGxlc0ZvckZpbGVzKGNvbnN0IFN0cmluZyYgbG9nTGFi
ZWwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgVHlwZSB0eXBlKQoreworICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZUFycmF5IGhhbmRsZUFycmF5OworICAgIAorICAgIGhhbmRsZUFy
cmF5LmFsbG9jYXRlKHBhdGhzLnNpemUoKSk7CisgICAgc2l6ZV90IGN1cnJlbnRIYW5kbGUgPSAw
OworICAgIGZvciAoY29uc3QgYXV0byYgcGF0aCA6IHBhdGhzKSB7CisgICAgICAgIGlmICghU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhdGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6
OlJlYWRPbmx5LCBoYW5kbGVBcnJheVtjdXJyZW50SGFuZGxlXSkpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgY2FuIGxlZ2l0aW1hdGVseSBmYWlsIGlmIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhl
IGZpbGUgaXMgZGVsZXRlZCBhZnRlciB0aGUgZmlsZSB3YXMgY2hvc2VuLgorICAgICAgICAgICAg
Ly8gV2UgYWxzbyBoYXZlIHJlcG9ydHMgb2YgY2FzZXMgd2hlcmUgdGhpcyBsaWtlbHkgZmFpbHMg
Zm9yIHNvbWUgdW5rbm93biByZWFzb24sIDxyZGFyOi8vcHJvYmxlbS8xMDE1NjcxMD4uCisgICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIiVzOiBjb3VsZCBub3QgY3JlYXRlIGEgc2FuZGJveCBleHRl
bnNpb24gZm9yICclcydcbiIsIGxvZ0xhYmVsLnV0ZjgoKS5kYXRhKCksIHBhdGhzW2ldLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICArK2N1cnJlbnRIYW5kbGU7CisgICAgfQor
CisgICAgcmV0dXJuIGhhbmRsZUFycmF5OworfQorCiBib29sIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYgaGFuZGxlKQogewogICAgIFN0cmluZyByZXNvbHZlZFBhdGgg
PSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihw
YXRoKTsKQEAgLTM1Nyw2ICszNzcsMjMgQEAgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JNYWNoTG9va3VwKGNvbnN0IFN0cmluZyYgc2VydmljZSwgT3B0aW9uYWwKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0Zvck1hY2hMb29rdXAoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHNlcnZpY2VzLCBPcHRpb25hbDxhdWRpdF90b2tlbl90PiBhdWRpdFRva2VuLCBPcHRpb25TZXQ8
RmxhZ3M+IGZsYWdzKQoreworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IGhhbmRs
ZUFycmF5OworICAgIAorICAgIGhhbmRsZUFycmF5LmFsbG9jYXRlKHNlcnZpY2VzLnNpemUoKSk7
CisgICAgc2l6ZV90IGN1cnJlbnRIYW5kbGUgPSAwOworICAgIGZvciAoY29uc3QgYXV0byYgc2Vy
dmljZSA6IHNlcnZpY2VzKSB7CisgICAgICAgIGlmICghU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yTWFjaExvb2t1cChzZXJ2aWNlLCBhdWRpdFRva2VuLCBoYW5kbGVBcnJheVtjdXJy
ZW50SGFuZGxlXSwgZmxhZ3MpKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgICsrY3VycmVudEhhbmRs
ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGhhbmRsZUFycmF5OworfQorCiBib29sIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRCeUF1ZGl0VG9rZW4oY29uc3QgU3RyaW5n
JiBwYXRoLCBhdWRpdF90b2tlbl90IGF1ZGl0VG9rZW4sIEhhbmRsZSYgaGFuZGxlKQogewogICAg
IEFTU0VSVCghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbik7CkBAIC0zODMsNiArNDIwLDIzIEBA
IGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9ySU9LaXRDbGFzc0V4dGVuc2lv
bihjb25zdCBTdHJpbmcmIGlvS2l0Q2xhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1NhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JJ
T0tpdENsYXNzRXh0ZW5zaW9ucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW9raXRDbGFzc2VzLCBP
cHRpb25hbDxhdWRpdF90b2tlbl90PiBhdWRpdFRva2VuLCBPcHRpb25TZXQ8RmxhZ3M+ID0gZmxh
Z3MpCit7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgaGFuZGxlQXJyYXk7Cisg
ICAgCisgICAgaGFuZGxlQXJyYXkuYWxsb2NhdGUoaW9raXRDbGFzc2VzLnNpemUoKSk7CisgICAg
c2l6ZV90IGN1cnJlbnRIYW5kbGUgPSAwOworICAgIGZvciAoY29uc3QgYXV0byYgaW9raXRDbGFz
cyA6IGlva2l0Q2xhc3NlcykgeworICAgICAgICBpZiAoIVNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvcklPS2l0Q2xhc3NFeHRlbnNpb24oaW9raXRDbGFzcywgYXVkaXRUb2tlbiwgaGFu
ZGxlQXJyYXlbY3VycmVudEhhbmRsZV0sIGZsYWdzKSkgeworICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAr
K2N1cnJlbnRIYW5kbGU7CisgICAgfQorICAgIAorICAgIHJldHVybiBoYW5kbGVBcnJheTsKK30K
KwogU2FuZGJveEV4dGVuc2lvbjo6U2FuZGJveEV4dGVuc2lvbihjb25zdCBIYW5kbGUmIGhhbmRs
ZSkKICAgICA6IG1fc2FuZGJveEV4dGVuc2lvbihXVEZNb3ZlKGhhbmRsZS5tX3NhbmRib3hFeHRl
bnNpb24pKQogewpAQCAtNDQyLDYgKzQ5NiwyMSBAQCBib29sIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShjb25zdCBIYW5kbGUmIGhhbmRsZSkKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCitib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShjb25zdCBI
YW5kbGVBcnJheSYgaGFuZGxlQXJyYXkpCit7CisgICAgYm9vbCBhbGxTdWNjZWVkZWQgPSB0cnVl
OworICAgIGZvciAoYXV0byYgaGFuZGxlIDogaGFuZGxlQXJyYXkpIHsKKyAgICAgICAgaWYgKCFo
YW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgYm9vbCBvayA9IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGUp
OworICAgICAgICBBU1NFUlQob2spOworICAgICAgICBhbGxTdWNjZWVkZWQgJj0gb2s7CisgICAg
fQorCisgICAgcmV0dXJuIGFsbFN1Y2NlZWRlZDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKICNlbmRpZiAvLyBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvU2FuZGJveEV4dGVuc2lvbi5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvU2FuZGJveEV4dGVuc2lvbi5oCmluZGV4IGQwOGY3MmE5NTkxNTExZDE1MTY5YTRiMWI5OWVk
ZThmOWZiYmM4Y2QuLjVlZTUzZDU2YWI5ZDIxZGE0ZjJhZDczYWVmNDQ3OTYxNzhhMjEwZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAorKysgYi9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9TYW5kYm94RXh0ZW5zaW9uLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsNiArOTMsMTAgQEAgcHVi
bGljOgogICAgICAgICBIYW5kbGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpOwogICAgICAgICBIYW5k
bGUmIGF0KHNpemVfdCBpKSB7IHJldHVybiBvcGVyYXRvcltdKGkpOyB9CiAgICAgICAgIGNvbnN0
IEhhbmRsZSYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3Q7CisgICAgICAgIEhhbmRsZSogYmVn
aW4oKTsKKyAgICAgICAgSGFuZGxlKiBlbmQoKTsKKyAgICAgICAgY29uc3QgSGFuZGxlKiBiZWdp
bigpIGNvbnN0OworICAgICAgICBjb25zdCBIYW5kbGUqIGVuZCgpIGNvbnN0OwogICAgICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0OwogICAgICAgICB2b2lkIGVuY29kZShJUEM6OkVuY29kZXImKSBj
b25zdDsKICAgICAgICAgc3RhdGljIE9wdGlvbmFsPEhhbmRsZUFycmF5PiBkZWNvZGUoSVBDOjpE
ZWNvZGVyJik7CkBAIC0xMDcsMTQgKzExMSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGlj
IFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBjcmVhdGUoSGFuZGxlJiYpOwogICAgIHN0YXRpYyBi
b29sIGNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUsIEhhbmRsZSYpOworICAg
IHN0YXRpYyBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBjcmVhdGVSZWFkT25seUhhbmRs
ZXNGb3JGaWxlcyhjb25zdCBTdHJpbmcmIGxvZ0xhYmVsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGF0aHMpOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCwgVHlwZSwgSGFuZGxlJik7CiAgICAgc3RhdGljIGJvb2wgY3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgSGFuZGxl
Jik7IC8vIFdpbGwgYXR0ZW1wdCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeS4KICAgICBzdGF0aWMg
U3RyaW5nIGNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgs
IFR5cGUsIEhhbmRsZSYpOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUhhbmRsZUZvckdlbmVyaWNF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb25DbGFzcywgSGFuZGxlJik7CiAjaWYgSEFW
RShBVURJVF9UT0tFTikKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVIYW5kbGVGb3JNYWNoTG9va3Vw
KGNvbnN0IFN0cmluZyYgc2VydmljZSwgT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4sIEhhbmRsZSYs
IE9wdGlvblNldDxGbGFncz4gPSBGbGFnczo6RGVmYXVsdCk7CisgICAgc3RhdGljIEhhbmRsZUFy
cmF5IGNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzZXJ2
aWNlcywgT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4sIE9wdGlvblNldDxGbGFncz4gPSBGbGFnczo6
RGVmYXVsdCk7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlSGFuZGxlRm9yUmVhZEJ5QXVkaXRUb2tl
bihjb25zdCBTdHJpbmcmIHBhdGgsIGF1ZGl0X3Rva2VuX3QsIEhhbmRsZSYpOwogICAgIHN0YXRp
YyBib29sIGNyZWF0ZUhhbmRsZUZvcklPS2l0Q2xhc3NFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBp
b2tpdENsYXNzLCBPcHRpb25hbDxhdWRpdF90b2tlbl90PiwgSGFuZGxlJiwgT3B0aW9uU2V0PEZs
YWdzPiA9IEZsYWdzOjpEZWZhdWx0KTsKKyAgICBzdGF0aWMgSGFuZGxlQXJyYXkgY3JlYXRlSGFu
ZGxlc0ZvcklPS2l0Q2xhc3NFeHRlbnNpb25zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpb2tpdENs
YXNzZXMsIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+LCBPcHRpb25TZXQ8RmxhZ3M+ID0gRmxhZ3M6
OkRlZmF1bHQpOwogI2VuZGlmCiAgICAgflNhbmRib3hFeHRlbnNpb24oKTsKIApAQCAtMTIzLDYg
KzEzMCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29uc3VtZVBlcm1hbmVudGx5KCk7CiAgICAg
c3RhdGljIGJvb2wgY29uc3VtZVBlcm1hbmVudGx5KGNvbnN0IEhhbmRsZSYpOworICAgIHN0YXRp
YyBib29sIGNvbnN1bWVQZXJtYW5lbnRseShjb25zdCBIYW5kbGVBcnJheSYpOwogCiBwcml2YXRl
OgogICAgIGV4cGxpY2l0IFNhbmRib3hFeHRlbnNpb24oY29uc3QgSGFuZGxlJik7CkBAIC0xNDQs
MTAgKzE1MiwxNSBAQCBpbmxpbmUgdm9pZCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6
YWxsb2NhdGUoc2l6ZV90KSB7IH0KIGlubGluZSBzaXplX3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXk6OnNpemUoKSBjb25zdCB7IHJldHVybiAwOyB9ICAgIAogaW5saW5lIGNvbnN0IFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6Om9w
ZXJhdG9yW10oc2l6ZV90KSBjb25zdCB7IHJldHVybiBtX2VtcHR5SGFuZGxlOyB9CiBpbmxpbmUg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6
b3BlcmF0b3JbXShzaXplX3QpIHsgcmV0dXJuIG1fZW1wdHlIYW5kbGU7IH0KK2lubGluZSBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGUqIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpiZWdp
bigpIHsgcmV0dXJuICZtX2VtcHR5SGFuZGxlOyB9CitpbmxpbmUgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZW5kKCkgeyByZXR1cm4gJm1f
ZW1wdHlIYW5kbGU7IH0KK2lubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUqIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpiZWdpbigpIGNvbnN0IHsgcmV0dXJuICZtX2Vt
cHR5SGFuZGxlOyB9CitpbmxpbmUgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fZW1wdHlI
YW5kbGU7IH0KIGlubGluZSB2b2lkIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmNv
ZGUoSVBDOjpFbmNvZGVyJikgY29uc3QgeyB9CiBpbmxpbmUgYXV0byBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGVBcnJheTo6ZGVjb2RlKElQQzo6RGVjb2RlciYpIC0+IE9wdGlvbmFsPEhhbmRsZUFy
cmF5PiB7IHJldHVybiB7eyB9fTsgfQogaW5saW5lIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoSGFuZGxlJiYpIHsgcmV0dXJuIG51bGxwdHI7IH0KIGlu
bGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmLCBU
eXBlLCBIYW5kbGUmKSB7IHJldHVybiB0cnVlOyB9CitpbmxpbmUgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlQXJyYXkgY3JlYXRlUmVhZE9ubHlIYW5kbGVzRm9yRmlsZXMoY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mKSB7IHJldHVybiB7IH07IH0KIGlubGluZSBib29sIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKGNvbnN0IFN0cmlu
ZyYsIFR5cGUsIEhhbmRsZSYpIHsgcmV0dXJuIHRydWU7IH0KIGlubGluZSBib29sIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb25zdCBTdHJpbmcm
LCBIYW5kbGUmKSB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgU3RyaW5nIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiAvKnByZWZpeCov
LCBUeXBlLCBIYW5kbGUmKSB7cmV0dXJuIFN0cmluZygpO30KQEAgLTE1NywxMCArMTcwLDE1IEBA
IGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OnJldm9rZSgpIHsgcmV0dXJuIHRydWU7IH0K
IGlubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWUoKSB7IHJldHVybiB0cnVlOyB9
CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoKSB7IHJl
dHVybiB0cnVlOyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFu
ZW50bHkoY29uc3QgSGFuZGxlJikgeyByZXR1cm4gdHJ1ZTsgfQoraW5saW5lIGJvb2wgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNvbnN0IEhhbmRsZUFycmF5JikgeyByZXR1
cm4gdHJ1ZTsgfQogaW5saW5lIFN0cmluZyBzdHJpbmdCeVJlc29sdmluZ1N5bWxpbmtzSW5QYXRo
KGNvbnN0IFN0cmluZyYgcGF0aCkgeyByZXR1cm4gcGF0aDsgfQogaW5saW5lIFN0cmluZyByZXNv
bHZlUGF0aEZvclNhbmRib3hFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoKSB7IHJldHVybiBw
YXRoOyB9CiBpbmxpbmUgU3RyaW5nIHJlc29sdmVBbmRDcmVhdGVSZWFkV3JpdGVEaXJlY3RvcnlG
b3JTYW5kYm94RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCkgeyByZXR1cm4gcGF0aDsgfQog
I2Vsc2UKK2lubGluZSBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUqIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZUFycmF5OjpiZWdpbigpIHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9CitpbmxpbmUg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6
ZW5kKCkgeyByZXR1cm4gbV9kYXRhLmVuZCgpOyB9CitpbmxpbmUgY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6YmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQoraW5saW5lIGNvbnN0IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YS5lbmQoKTsgfQogU3RyaW5nIHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlua3NJ
blBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKIFN0cmluZyByZXNvbHZlUGF0aEZvclNhbmRib3hF
eHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKIFN0cmluZyByZXNvbHZlQW5kQ3JlYXRlUmVh
ZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIHBhdGgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0KaW5kZXggZDM1MzAzZWY2YmRmMTIzYzA4YzhkMDRkMTM3MTZhNzFjMzI3OTgyYi4uMDg1
ZDk4MDIxZWJkNDU4MTI4OTJhYzI0MTc3ZTQyZjg4ZTdmODJjNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0yNDQs
NiArMjQ0LDM3IEBAIHN0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbWVkaWFSZWxhdGVkTWFj
aFNlcnZpY2VzKCkKICAgICByZXR1cm4gc2VydmljZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgbm9uQnJvd3NlclNlcnZpY2VzKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIHN0YXRpYyBjb25zdCBhdXRvIHNlcnZpY2VzID0gbWFrZU5ldmVyRGVzdHJv
eWVkKFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgImNvbS5hcHBsZS5sc2Qub3BlbiIsCisgICAg
ICAgICJjb20uYXBwbGUubW9iaWxlYXNzZXRkIiwKKyAgICAgICAgImNvbS5hcHBsZS5pY29uc2Vy
dmljZXMiLAorICAgICAgICAiY29tLmFwcGxlLlBvd2VyTWFuYWdlbWVudC5jb250cm9sIiwKKyAg
ICAgICAgImNvbS5hcHBsZS5mcm9udGJvYXJkLnN5c3RlbWFwcHNlcnZpY2VzIgorICAgIH0pOwor
ICAgIHJldHVybiBzZXJ2aWNlczsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBh
Z3hDb21waWxlckNsYXNzZXMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
c3RhdGljIGNvbnN0IGF1dG8gaW9raXRDbGFzc2VzID0gbWFrZU5ldmVyRGVzdHJveWVkKFZlY3Rv
cjxTdHJpbmc+IHsKKyAgICAgICAgIkFHWENvbW1hbmRRdWV1ZSIsCisgICAgICAgICJBR1hEZXZp
Y2UiLAorICAgICAgICAiQUdYU2hhcmVkVXNlckNsaWVudCIsCisgICAgICAgICJJT0FjY2VsQ29u
dGV4dCIsCisgICAgICAgICJJT0FjY2VsQ29udGV4dDIiLAorICAgICAgICAiSU9BY2NlbERldmlj
ZSIsCisgICAgICAgICJJT0FjY2VsRGV2aWNlMiIsCisgICAgICAgICJJT0FjY2VsU2hhcmVkVXNl
ckNsaWVudCIsCisgICAgICAgICJJT0FjY2VsU2hhcmVkVXNlckNsaWVudDIiCisgICAgICAgICJJ
T0FjY2VsU3VibWl0dGVyMiIsCisgICAgfSk7CisgICAgcmV0dXJuIGlva2l0Q2xhc3NlczsKK30K
Kwogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhjb25z
dCBXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMpCiB7CiAgICAgcGFyYW1ldGVycy5tZWRpYU1JTUVUeXBlcyA9IHByb2Nlc3Mu
bWVkaWFNSU1FVHlwZXMoKTsKQEAgLTM1MSwxOSArMzgyLDggQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzUHJveHkmIHBy
b2Nlc3MKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoIVdlYkNv
cmU6OklPU0FwcGxpY2F0aW9uOjppc01vYmlsZVNhZmFyaSgpIHx8IF9BWFNBcHBsaWNhdGlvbkFj
Y2Vzc2liaWxpdHlFbmFibGVkKCkpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNlcnZp
Y2VzW10gPSB7Ci0gICAgICAgICAgICAiY29tLmFwcGxlLmxzZC5vcGVuIiwKLSAgICAgICAgICAg
ICJjb20uYXBwbGUubW9iaWxlYXNzZXRkIiwKLSAgICAgICAgICAgICJjb20uYXBwbGUuaWNvbnNl
cnZpY2VzIiwKLSAgICAgICAgICAgICJjb20uYXBwbGUuUG93ZXJNYW5hZ2VtZW50LmNvbnRyb2wi
LAotICAgICAgICAgICAgImNvbS5hcHBsZS5mcm9udGJvYXJkLnN5c3RlbWFwcHNlcnZpY2VzIgot
ICAgICAgICB9OwotICAgICAgICBhdXRvIHNpemUgPSBXVEZfQVJSQVlfTEVOR1RIKHNlcnZpY2Vz
KTsKLSAgICAgICAgcGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXMuYWxsb2Nh
dGUoc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAg
ICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1cChzZXJ2
aWNlc1tpXSwgV1RGOjpudWxsb3B0LCBwYXJhbWV0ZXJzLmR5bmFtaWNNYWNoRXh0ZW5zaW9uSGFu
ZGxlc1tpXSk7Ci0gICAgfQorICAgIGlmICghV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9i
aWxlU2FmYXJpKCkgfHwgX0FYU0FwcGxpY2F0aW9uQWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKKyAg
ICAgICAgcGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXMgPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVzRm9yTWFjaExvb2t1cChub25Ccm93c2VyU2VydmljZXMoKSwg
V1RGOjpudWxsb3B0KTsKICAgICAKICAgICBpZiAoaXNJbnRlcm5hbEluc3RhbGwoKSkgewogICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZGlhZ25vc3RpY3NFeHRlbnNpb25IYW5kbGU7
CkBAIC0zNzUsMjQgKzM5NSw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlh
bGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzCiAgICAgaWYgKFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoImNvbS5hcHBsZS5ydW5u
aW5nYm9hcmQiLCBXVEY6Om51bGxvcHQsIHJ1bm5pbmdib2FyZEV4dGVuc2lvbkhhbmRsZSwgU2Fu
ZGJveEV4dGVuc2lvbjo6RmxhZ3M6Ok5vUmVwb3J0KSkKICAgICAgICAgcGFyYW1ldGVycy5ydW5u
aW5nYm9hcmRFeHRlbnNpb25IYW5kbGUgPSBXVEZNb3ZlKHJ1bm5pbmdib2FyZEV4dGVuc2lvbkhh
bmRsZSk7CiAKLSAgICBpZiAoV2ViQ29yZTo6ZGV2aWNlSGFzQUdYQ29tcGlsZXJTZXJ2aWNlKCkp
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGlvS2l0Q2xhc3Nlc1tdID0gewot
ICAgICAgICAgICAgIkFHWENvbW1hbmRRdWV1ZSIsCi0gICAgICAgICAgICAiQUdYRGV2aWNlIiwK
LSAgICAgICAgICAgICJBR1hTaGFyZWRVc2VyQ2xpZW50IiwKLSAgICAgICAgICAgICJJT0FjY2Vs
Q29udGV4dCIsCi0gICAgICAgICAgICAiSU9BY2NlbENvbnRleHQyIiwKLSAgICAgICAgICAgICJJ
T0FjY2VsRGV2aWNlIiwKLSAgICAgICAgICAgICJJT0FjY2VsRGV2aWNlMiIsCi0gICAgICAgICAg
ICAiSU9BY2NlbFNoYXJlZFVzZXJDbGllbnQiLAotICAgICAgICAgICAgIklPQWNjZWxTaGFyZWRV
c2VyQ2xpZW50MiIKLSAgICAgICAgICAgICJJT0FjY2VsU3VibWl0dGVyMiIsCi0gICAgICAgIH07
Ci0gICAgICAgIGF1dG8gc2l6ZSA9IFdURl9BUlJBWV9MRU5HVEgoaW9LaXRDbGFzc2VzKTsKLSAg
ICAgICAgcGFyYW1ldGVycy5keW5hbWljSU9LaXRFeHRlbnNpb25IYW5kbGVzLmFsbG9jYXRlKHNp
emUpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAg
ICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvcklPS2l0Q2xhc3NFeHRlbnNpb24o
aW9LaXRDbGFzc2VzW2ldLCBXVEY6Om51bGxvcHQsIHBhcmFtZXRlcnMuZHluYW1pY0lPS2l0RXh0
ZW5zaW9uSGFuZGxlc1tpXSk7Ci0gICAgfQorICAgIGlmIChXZWJDb3JlOjpkZXZpY2VIYXNBR1hD
b21waWxlclNlcnZpY2UoKSkKKyAgICAgICAgcGFyYW1ldGVycy5keW5hbWljSU9LaXRFeHRlbnNp
b25IYW5kbGVzID0gY3JlYXRlSGFuZGxlc0ZvcklPS2l0Q2xhc3NFeHRlbnNpb25zKGFneENvbXBp
bGVyQ2xhc3NlcygpLCBXVEY6Om51bGxvcHQpOwogI2VuZGlmCiAgICAgCiAjaWYgUExBVEZPUk0o
Q09DT0EpCkBAIC00NDIsMzAgKzQ0NiwxMyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9y
bUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcwogCiAg
ICAgaWYgKG5lZWRXZWJQcm9jZXNzRXh0ZW5zaW9ucykgewogICAgICAgICAvLyBGSVhNRSgyMDc3
MTYpOiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhlIEdQVSBwcm9jZXNz
IGlzIGNvbXBsZXRlLgotICAgICAgICBjb25zdCBhdXRvJiBzZXJ2aWNlcyA9IG1lZGlhUmVsYXRl
ZE1hY2hTZXJ2aWNlcygpOwotICAgICAgICBwYXJhbWV0ZXJzLm1lZGlhRXh0ZW5zaW9uSGFuZGxl
cy5hbGxvY2F0ZShzZXJ2aWNlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwg
c2l6ZSA9IHNlcnZpY2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgICAgIFNhbmRi
b3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoc2VydmljZXNbaV0sIFdURjo6
bnVsbG9wdCwgcGFyYW1ldGVycy5tZWRpYUV4dGVuc2lvbkhhbmRsZXNbaV0pOworICAgICAgICBw
YXJhbWV0ZXJzLm1lZGlhRXh0ZW5zaW9uSGFuZGxlcyA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZXNGb3JNYWNoTG9va3VwKG1lZGlhUmVsYXRlZE1hY2hTZXJ2aWNlcygpLCBXVEY6Om51
bGxvcHQpOwogICAgIH0KIAogI2lmIEVOQUJMRShDRlBSRUZTX0RJUkVDVF9NT0RFKQogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKF9BWFNBcHBsaWNhdGlvbkFjY2Vzc2liaWxpdHlF
bmFibGVkKCkpIHsKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgcHJlZmVy
ZW5jZXNFeHRlbnNpb25IYW5kbGVzOwotICAgICAgICAKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCBjaGFyKiBzZXJ2aWNlc1tdID0gewotICAgICAgICAgICAgImNvbS5hcHBsZS5jZnBy
ZWZzZC5hZ2VudCIsCi0gICAgICAgICAgICAiY29tLmFwcGxlLmNmcHJlZnNkLmRhZW1vbiIKLSAg
ICAgICAgfTsKLSAgICAgICAgYXV0byBzaXplID0gc3RkOjpzaXplKHNlcnZpY2VzKTsKLSAgICAg
ICAgcHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzLmFsbG9jYXRlKHNpemUpOwotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgYm9vbCBvayA9
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoc2VydmljZXNbaV0s
IFdURjo6bnVsbG9wdCwgcHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzW2ldKTsKLSAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
cGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMgPSBXVEZNb3ZlKHByZWZlcmVu
Y2VzRXh0ZW5zaW9uSGFuZGxlcyk7Ci0gICAgfQorICAgIGlmIChfQVhTQXBwbGljYXRpb25BY2Nl
c3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBwYXJhbWV0ZXJzLnByZWZlcmVuY2VzRXh0ZW5z
aW9uSGFuZGxlcyA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3Vw
KHsgImNvbS5hcHBsZS5jZnByZWZzZC5hZ2VudCJfcywgImNvbS5hcHBsZS5jZnByZWZzZC5kYWVt
b24iX3MgfSwgV1RGOjpudWxsb3B0KTsKICNlbmRpZgogCiAgICAgYXV0byBnbG9iYWxQcmVmZXJl
bmNlc0RpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgMCwgbnVsbHB0ciwgbnVsbHB0cikpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Byb3h5Q29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbQppbmRleCA5OTgy
OWFiZTJiNDQ0YjIxMmYwYTFmZmZhYTgzNDdiYjg3YmNkYzE5Li4wMjNjZTljMWM2OTBkM2NmNmZh
YTg0OTI3ZDQ0ZDQwNWRmMTQ0MjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzOSwxOSArMjM5LDEwIEBA
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojp1bmJsb2NrUHJlZmVyZW5jZVNlcnZpY2VJZk5lZWRlZCgp
CiAgICAgaWYgKCFjYW5TZW5kTWVzc2FnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBoYW5kbGVBcnJheTsKLSAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IGNoYXIqIHNlcnZpY2VzW10gPSB7Ci0gICAgICAgICJjb20uYXBwbGUuY2ZwcmVm
c2QuYWdlbnQiLAotICAgICAgICAiY29tLmFwcGxlLmNmcHJlZnNkLmRhZW1vbiIKLSAgICB9Owot
ICAgIGF1dG8gc2l6ZSA9IHN0ZDo6c2l6ZShzZXJ2aWNlcyk7Ci0gICAgaGFuZGxlQXJyYXkuYWxs
b2NhdGUoc2l6ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JNYWNoTG9va3VwKHNl
cnZpY2VzW2ldLCBjb25uZWN0aW9uKCkgPyBjb25uZWN0aW9uKCktPmdldEF1ZGl0VG9rZW4oKSA6
IFdURjo6bnVsbG9wdCwgaGFuZGxlQXJyYXlbaV0pKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBhdXRvIGhhbmRsZUFycmF5ID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
c0Zvck1hY2hMb29rdXAoeyAiY29tLmFwcGxlLmNmcHJlZnNkLmFnZW50Il9zLCAiY29tLmFwcGxl
LmNmcHJlZnNkLmRhZW1vbiJfcyB9LCBjb25uZWN0aW9uKCkgPyBjb25uZWN0aW9uKCktPmdldEF1
ZGl0VG9rZW4oKSA6IFdURjo6bnVsbG9wdCk7CisgICAgQVNTRVJUKGhhbmRsZUFycmF5LnNpemUo
KSA9PSAyKTsKICAgICAKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpVbmJsb2NrUHJl
ZmVyZW5jZVNlcnZpY2UoaGFuZGxlQXJyYXkpLCAwKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpVbmJsb2NrUHJlZmVyZW5jZVNlcnZpY2UoV1RGTW92ZShoYW5kbGVBcnJheSkpLCAw
KTsKICAgICBtX2hhc1NlbnRNZXNzYWdlVG9VbmJsb2NrUHJlZmVyZW5jZVNlcnZpY2UgPSB0cnVl
OwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRl
eCAwZDMwOGU2Y2JmNjg2NzkyNmQ0MTc3OTFhMDM0MmFkZmFmNzVjMTI4Li4zN2Y0MzZkN2VjZjk1
Zjk1YTk5N2JkNjMwYWUwYjU3OTZhODdkYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKQEAgLTY2MzIsMTIgKzY2MzIsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRoRGlzcGxheVN0cmluZ0FuZEljb24oY29uc3Qg
VmVjdAogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJT05TKQot
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25IYW5kbGVz
OwotICAgIHNhbmRib3hFeHRlbnNpb25IYW5kbGVzLmFsbG9jYXRlKGZpbGVVUkxzLnNpemUoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlVVJMcy5zaXplKCk7ICsraSkKLSAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGZpbGVVUkxzW2ldLCBTYW5kYm94RXh0
ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZXNbaV0pOwotCi0g
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5Q
YW5lbChzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykpOworICAgIGF1dG8gc2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVSZWFkT25seUhhbmRsZXNGb3JGaWxl
cygiV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbFdpdGhEaXNwbGF5U3Ry
aW5nQW5kSWNvbiJfcywgZmlsZVVSTHMpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4
dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlcykpKTsKICNlbmRpZgogCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGZyb250
Ym9hcmRTZXJ2aWNlc1NhbmRib3hFeHRlbnNpb24sIGljb25TZXJ2aWNlc1NhbmRib3hFeHRlbnNp
b247CkBAIC02NjU3LDE5ICs2NjUzLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZENob29zZUZp
bGVzRm9yT3BlblBhbmVsKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlVVJMcykKICAgICAgICAg
cmV0dXJuOwogCiAjaWYgRU5BQkxFKFNBTkRCT1hfRVhURU5TSU9OUykKLSAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlczsKLSAgICBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlcy5hbGxvY2F0ZShmaWxlVVJMcy5zaXplKCkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmlsZVVSTHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9vbCBjcmVh
dGVkRXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKGZpbGVVUkxzW2ld
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZXNbaV0pOwotICAgICAgICBpZiAoIWNyZWF0ZWRFeHRlbnNpb24pIHsKLSAgICAgICAgICAgIC8v
IFRoaXMgY2FuIGxlZ2l0aW1hdGVseSBmYWlsIGlmIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhl
IGZpbGUgaXMgZGVsZXRlZCBhZnRlciB0aGUgZmlsZSB3YXMgY2hvc2VuLgotICAgICAgICAgICAg
Ly8gV2UgYWxzbyBoYXZlIHJlcG9ydHMgb2YgY2FzZXMgd2hlcmUgdGhpcyBsaWtlbHkgZmFpbHMg
Zm9yIHNvbWUgdW5rbm93biByZWFzb24sIDxyZGFyOi8vcHJvYmxlbS8xMDE1NjcxMD4uCi0gICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIldlYlBhZ2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVu
UGFuZWw6IGNvdWxkIG5vdCBjcmVhdGUgYSBzYW5kYm94IGV4dGVuc2lvbiBmb3IgJyVzJ1xuIiwg
ZmlsZVVSTHNbaV0udXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hG
b3JGaWxlc0Zyb21PcGVuUGFuZWwoc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMpKTsKKyAgICBhdXRv
IHNhbmRib3hFeHRlbnNpb25IYW5kbGVzID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlUmVhZE9u
bHlIYW5kbGVzRm9yRmlsZXMoIldlYlBhZ2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFu
ZWwiX3MsIGZpbGVVUkxzKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeHRlbmRTYW5k
Ym94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMp
KSk7CiAjZW5kaWYKIAogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkRpZENob29zZUZpbGVz
Rm9yT3BlblBhbmVsKGZpbGVVUkxzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3Bw
CmluZGV4IGM1YWE3NTFhYjdmOGZjOGYwZjBjMDhlOGI1YjY5Mjg3MzgzOWUxMGEuLjIxZjk4N2Rj
Y2FlYmM0NGNlMzEyN2E4NTQ3MmFmMWE0MmZlYzdmOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0
cmF0ZWdpZXMuY3BwCkBAIC0xNDksMTAgKzE0OSw3IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpnZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0
CiAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFBhdGhu
YW1lc0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwKICAgICAgICAgTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGU6
OlJlcGx5KHBhdGhuYW1lcywgc2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheSksIDApOwogICAg
IEFTU0VSVChwYXRobmFtZXMuc2l6ZSgpID09IHNhbmRib3hFeHRlbnNpb25zSGFuZGxlQXJyYXku
c2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNhbmRib3hFeHRlbnNpb25zSGFu
ZGxlQXJyYXkuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGF1dG8gZXh0ZW5zaW9uID0gU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlKFdURk1vdmUoc2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJh
eVtpXSkpKQotICAgICAgICAgICAgZXh0ZW5zaW9uLT5jb25zdW1lUGVybWFuZW50bHkoKTsKLSAg
ICB9CisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHNhbmRib3hFeHRl
bnNpb25zSGFuZGxlQXJyYXkpOwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpz
dHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCmluZGV4IDhiM2MwNjQ5OGM3NGQ0M2UwM2MzNTRlY2EwZWI1NmY3N2U4YWM1M2QuLjNl
ZDAyOTNhOTg4NDZhY2EwMjc2ZjI2MmRkNjk2NzlmN2QwNTg5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC00Mjc3LDEyICs0Mjc3LDEwIEBA
IHZvaWQgV2ViUGFnZTo6ZGlkQ2FuY2VsRm9yT3BlblBhbmVsKCkKICNpZiBFTkFCTEUoU0FOREJP
WF9FWFRFTlNJT05TKQogdm9pZCBXZWJQYWdlOjpleHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3Bl
blBhbmVsKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYgaGFuZGxlcykKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGhhbmRsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYm9v
bCByZXN1bHQgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlc1tp
XSk7Ci0gICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICAvLyBXZSBoYXZlIHJlcG9y
dHMgb2YgY2FzZXMgd2hlcmUgdGhpcyBmYWlscyBmb3Igc29tZSB1bmtub3duIHJlYXNvbiwgPHJk
YXI6Ly9wcm9ibGVtLzEwMTU2NzEwPi4KLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiV2ViUGFn
ZTo6ZXh0ZW5kU2FuZGJveEZvckZpbGVGcm9tT3BlblBhbmVsKCk6IENvdWxkIG5vdCBjb25zdW1l
IGEgc2FuZGJveCBleHRlbnNpb24iKTsKLSAgICAgICAgfQorICAgIGJvb2wgcmVzdWx0ID0gU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZXMpOworICAgIGlmICghcmVz
dWx0KSB7CisgICAgICAgIC8vIFdlIGhhdmUgcmVwb3J0cyBvZiBjYXNlcyB3aGVyZSB0aGlzIGZh
aWxzIGZvciBzb21lIHVua25vd24gcmVhc29uLCA8cmRhcjovL3Byb2JsZW0vMTAxNTY3MTA+Lgor
ICAgICAgICBXVEZMb2dBbHdheXMoIldlYlBhZ2U6OmV4dGVuZFNhbmRib3hGb3JGaWxlRnJvbU9w
ZW5QYW5lbCgpOiBDb3VsZCBub3QgY29uc3VtZSBhIHNhbmRib3ggZXh0ZW5zaW9uIik7CiAgICAg
fQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXgg
NjgxMDRiZGZkMjk5NDA3NjEzNjFhZWNjYjZiNjRiOWNmNGExMGE3YS4uNTkzNjZjMGIyZWU2NTAx
Nzc0MTc5N2IyNGQ3YjBjOWMwMzMwNGY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcApAQCAtMzczLDggKzM3Myw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6
ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAg
ICAgICAgIG1lbW9yeVByZXNzdXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQogCi0gICAgZm9y
IChzaXplX3QgaSA9IDAsIHNpemUgPSBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5z
aW9uSGFuZGxlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpCi0gICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5z
aW9uSGFuZGxlc1tpXSk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzKTsKIAogICAgIGlm
ICghcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGguaXNFbXB0eSgpKQogICAgICAgICBtX2lu
amVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OmNyZWF0ZShwYXJhbWV0ZXJzLCB0cmFuc2Zv
cm1IYW5kbGVzVG9PYmplY3RzKHBhcmFtZXRlcnMuaW5pdGlhbGl6YXRpb25Vc2VyRGF0YS5vYmpl
Y3QoKSkuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29h
L1dlYlByb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQ
cm9jZXNzQ29jb2EubW0KaW5kZXggODcxYmRkNGZmOWE5Njk0N2E3NWEzNTY5OThmNDIyNjlmMTZk
MjM2Mi4uNGY1NWIwYzZkMGEyYmFjYTJmZTQzNjI5OTlhNWVmMWJkNWY5MTQ2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCkBAIC0z
MjMsMTEgKzMyMyw4IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJv
Y2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhCiAgICAgaWYgKHBhcmFtZXRl
cnMuZGlhZ25vc3RpY3NFeHRlbnNpb25IYW5kbGUpCiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNvbnN1bWVQZXJtYW5lbnRseSgqcGFyYW1ldGVycy5kaWFnbm9zdGljc0V4dGVuc2lvbkhhbmRs
ZSk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHBhcmFtZXRlcnMuZHluYW1pY01h
Y2hFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZHluYW1pY01hY2hFeHRl
bnNpb25IYW5kbGVzW2ldKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gcGFyYW1l
dGVycy5keW5hbWljSU9LaXRFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkK
LSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMu
ZHluYW1pY0lPS2l0RXh0ZW5zaW9uSGFuZGxlc1tpXSk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZHluYW1pY01hY2hFeHRlbnNpb25IYW5kbGVz
KTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5k
eW5hbWljSU9LaXRFeHRlbnNpb25IYW5kbGVzKTsKICNlbmRpZgogICAgIAogICAgIGlmIChwYXJh
bWV0ZXJzLm5lSGVscGVyRXh0ZW5zaW9uSGFuZGxlKQpAQCAtMzQ0LDE2ICszNDEsMTEgQEAgdm9p
ZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmIHBhcmEKICNlbmRpZgogCiAgICAgLy8gRklYTUUoMjA3NzE2KTogVGhl
IGZvbGxvd2luZyBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRoZSBHUFUgcHJvY2VzcyBpcyBjb21w
bGV0ZS4KLSAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHBhcmFtZXRlcnMubWVkaWFFeHRl
bnNpb25IYW5kbGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgU2FuZGJveEV4dGVu
c2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMubWVkaWFFeHRlbnNpb25IYW5kbGVz
W2ldKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVy
cy5tZWRpYUV4dGVuc2lvbkhhbmRsZXMpOwogCiAjaWYgRU5BQkxFKENGUFJFRlNfRElSRUNUX01P
REUpCiAgICAgaWYgKHBhcmFtZXRlcnMucHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzKSB7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4dGVu
c2lvbkhhbmRsZXMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBib29sIG9rID0gU2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMucHJlZmVyZW5jZXNFeHRl
bnNpb25IYW5kbGVzLT5hdChpKSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7
Ci0gICAgICAgIH0KLQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50
bHkoKnBhcmFtZXRlcnMucHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzKTsKICAgICAgICAgX0NG
UHJlZnNTZXREaXJlY3RNb2RlRW5hYmxlZChmYWxzZSk7CiAgICAgfQogI2VuZGlmCkBAIC05NjMs
MTEgKzk1NSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKGNv
bnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIGtlCiAKIHZvaWQgV2ViUHJvY2Vzczo6
dW5ibG9ja1ByZWZlcmVuY2VTZXJ2aWNlKFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiYg
aGFuZGxlQXJyYXkpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBoYW5kbGVBcnJheS5z
aXplKCk7ICsraSkgewotICAgICAgICBib29sIG9rID0gU2FuZGJveEV4dGVuc2lvbjo6Y29uc3Vt
ZVBlcm1hbmVudGx5KGhhbmRsZUFycmF5W2ldKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOwotICAgIH0KLQorICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSho
YW5kbGVBcnJheSk7CiAgICAgX0NGUHJlZnNTZXREaXJlY3RNb2RlRW5hYmxlZChmYWxzZSk7CiB9
CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398014</attachid>
            <date>2020-04-29 18:20:45 -0700</date>
            <delta_ts>2020-04-29 19:38:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211103-20200429182044.patch</filename>
            <type>text/plain</type>
            <size>28814</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwOTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhiNmZmMzlhNWE0MTZlODRk
NjFkOTUwNzQ1OWMyZmM5NGExNGY2OWIuLjZlMmQ1ZDcwM2ViM2YyNjg0N2FkMzJmNjQxZWM5YjFl
Y2U0NDA3NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjAtMDQtMjkgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSB0byByZWR1Y2UgYm9pbGVycGxhdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTEwMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjI1MzM2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUGVyIEFybmUgVm9sbGFu
LgorCisgICAgICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBib2lsZXJwbGF0ZSBwYXR0ZXJucyBu
ZWVkZWQgd2hlbiB1c2luZyBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheS4KKyAgICAgICAg
V2UgY291bGQgbWFrZSB0aGVzZSBzaW1wbGVyIGFuZCBsZXNzIGVycm9yIHByb25lIGJ5IGltcHJv
dmluZyB0aGUgY2xhc3MuCisKKyAgICAgICAgVGhpcyBwYXRjaDoKKyAgICAgICAgMS4gQWRkcyBj
b252ZW5pZW5jZSBtZXRob2RzIHRvIGNyZWF0ZSBhbmQgY29uc3VtZSBIYW5kbGVBcnJheXMuCisg
ICAgICAgIDIuIFVwZGF0ZXMgdXNlcyBvZiBIYW5kbGVBcnJheSB0byB1c2UgdGhlIGNvbnZlbmll
bmNlIG1ldGhvZHMuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmg6CisgICAgICAgIChJUEM6OkZv
cm1EYXRhUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9TYW5kYm94
RXh0ZW5zaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZXNGb3JGaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKToKKyAgICAgICAgKFdlYktpdDo6U2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KToKKyAgICAgICAgKiBTaGFyZWQvU2FuZGJveEV4
dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVIYW5kbGVzRm9yRmlsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVuYmxvY2tQcmVmZXJlbmNlU2VydmljZUlmTmVl
ZGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpleHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9X
ZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1bmJs
b2NrUHJlZmVyZW5jZVNlcnZpY2UpOgorCiAyMDIwLTA0LTI5ICBQZXIgQXJuZSBWb2xsYW4gIDxw
dm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHNhbmRib3ggY29tcGlsZSBm
aXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVy
ZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaApp
bmRleCBiYzQ5N2M2MjM1ZmQxZTUyOGIyM2FiNTQwMjMwZTA0MGFkNjEyZGJkLi4xMTYxNTdkMTdi
NmMwMGMzNDZmM2Q4ZDI4NTU1NWEyYzdiZWU5YTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmgKQEAgLTg1LDggKzg1LDcgQEAgcHVibGljOgog
ICAgICAgICBpZiAoIXNhbmRib3hFeHRlbnNpb25IYW5kbGVzKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNhbmRib3hF
eHRlbnNpb25IYW5kbGVzLT5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHNhbmRib3hFeHRlbnNpb25IYW5kbGVzLT5h
dChpKSk7CisgICAgICAgIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KCpzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyk7CiAKICAgICAgICAgcmV0dXJuIEZvcm1EYXRh
UmVmZXJlbmNlIHsgZm9ybURhdGEucmVsZWFzZU5vbk51bGwoKSB9OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbQppbmRl
eCA4YmYwMzM3OGQyZGQ3M2JhNjkxNjdhOWQ0NjYzY2ZiNDE0NDBjNjJjLi44NDAwNDIxYmU5ZjM4
NWUxYTZiNTg2ZGM5OGJjZGQ4ZjBkZDQ5MTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvU2FuZGJveEV4dGVuc2lvbkNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkzLDYgKzI5MywzNSBA
QCBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgs
IFR5cGUgdHlwZSwgSGFuZGxlJiBoYW5kbAogICAgIHJldHVybiBjcmVhdGVIYW5kbGVXaXRob3V0
UmVzb2x2aW5nUGF0aChyZXNvbHZlUGF0aEZvclNhbmRib3hFeHRlbnNpb24ocGF0aCksIHR5cGUs
IGhhbmRsZSk7CiB9CiAKK3N0YXRpYyBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBjcmVh
dGVIYW5kbGVzRm9ySW5wdXQoY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlcnZpY2VzLCBGdW5jdGlv
bjxib29sKGNvbnN0IFN0cmluZyYsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgaGFuZGxlKT4m
JiBjcmVhdGVGdW5jdGlvbikKK3sKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBo
YW5kbGVBcnJheTsKKyAgICAKKyAgICBoYW5kbGVBcnJheS5hbGxvY2F0ZShzZXJ2aWNlcy5zaXpl
KCkpOworICAgIHNpemVfdCBjdXJyZW50SGFuZGxlID0gMDsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHNlcnZpY2UgOiBzZXJ2aWNlcykgeworICAgICAgICBpZiAoIWNyZWF0ZUZ1bmN0aW9uKHNlcnZp
Y2UsIGhhbmRsZUFycmF5W2N1cnJlbnRIYW5kbGVdKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICArK2N1cnJlbnRIYW5kbGU7CisgICAgfQorICAgIAorICAgIHJldHVybiBoYW5kbGVB
cnJheTsKK30KKworU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlUmVhZE9ubHlIYW5kbGVzRm9yRmlsZXMoY29uc3QgU3RyaW5nJiBsb2dMYWJlbCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQoreworICAgIHJldHVybiBjcmVhdGVIYW5kbGVz
Rm9ySW5wdXQocGF0aHMsIFsmbG9nTGFiZWxdIChjb25zdCBTdHJpbmcmIHBhdGgsIEhhbmRsZSYg
aGFuZGxlKSB7CisgICAgICAgIGlmICghU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBh
dGgsIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBoYW5kbGUpKSB7CisgICAgICAg
ICAgICAvLyBUaGlzIGNhbiBsZWdpdGltYXRlbHkgZmFpbCBpZiBhIGRpcmVjdG9yeSBjb250YWlu
aW5nIHRoZSBmaWxlIGlzIGRlbGV0ZWQgYWZ0ZXIgdGhlIGZpbGUgd2FzIGNob3Nlbi4KKyAgICAg
ICAgICAgIC8vIFdlIGFsc28gaGF2ZSByZXBvcnRzIG9mIGNhc2VzIHdoZXJlIHRoaXMgbGlrZWx5
IGZhaWxzIGZvciBzb21lIHVua25vd24gcmVhc29uLCA8cmRhcjovL3Byb2JsZW0vMTAxNTY3MTA+
LgorICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIlczogY291bGQgbm90IGNyZWF0ZSBhIHNhbmRi
b3ggZXh0ZW5zaW9uIGZvciAnJXMnXG4iLCBsb2dMYWJlbC51dGY4KCkuZGF0YSgpLCBwYXRoLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fSk7Cit9CisKIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRl
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBo
YW5kbGUpCiB7CiAgICAgU3RyaW5nIHJlc29sdmVkUGF0aCA9IHJlc29sdmVBbmRDcmVhdGVSZWFk
V3JpdGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0ZW5zaW9uKHBhdGgpOwpAQCAtMzU3LDYgKzM4Niwx
NyBAQCBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoY29u
c3QgU3RyaW5nJiBzZXJ2aWNlLCBPcHRpb25hbAogICAgIHJldHVybiB0cnVlOwogfQogCitTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVz
Rm9yTWFjaExvb2t1cChjb25zdCBWZWN0b3I8U3RyaW5nPiYgc2VydmljZXMsIE9wdGlvbmFsPGF1
ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9rZW4sIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCit7CisgICAg
cmV0dXJuIGNyZWF0ZUhhbmRsZXNGb3JJbnB1dChzZXJ2aWNlcywgW2F1ZGl0VG9rZW4sIGZsYWdz
XSAoY29uc3QgU3RyaW5nJiBzZXJ2aWNlLCBIYW5kbGUmIGhhbmRsZSkgeworICAgICAgICBpZiAo
IVNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoc2VydmljZSwgYXVk
aXRUb2tlbiwgaGFuZGxlLCBmbGFncykpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0pOworfQorCiBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRs
ZUZvclJlYWRCeUF1ZGl0VG9rZW4oY29uc3QgU3RyaW5nJiBwYXRoLCBhdWRpdF90b2tlbl90IGF1
ZGl0VG9rZW4sIEhhbmRsZSYgaGFuZGxlKQogewogICAgIEFTU0VSVCghaGFuZGxlLm1fc2FuZGJv
eEV4dGVuc2lvbik7CkBAIC0zODMsNiArNDIzLDE3IEBAIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlRm9ySU9LaXRDbGFzc0V4dGVuc2lvbihjb25zdCBTdHJpbmcmIGlvS2l0Q2xh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1NhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IFNh
bmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JJT0tpdENsYXNzRXh0ZW5zaW9ucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW9raXRDbGFzc2VzLCBPcHRpb25hbDxhdWRpdF90b2tlbl90PiBh
dWRpdFRva2VuLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQoreworICAgIHJldHVybiBjcmVhdGVI
YW5kbGVzRm9ySW5wdXQoaW9raXRDbGFzc2VzLCBbYXVkaXRUb2tlbiwgZmxhZ3NdIChjb25zdCBT
dHJpbmcmIGlva2l0Q2xhc3MsIEhhbmRsZSYgaGFuZGxlKSB7CisgICAgICAgIGlmICghU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9ySU9LaXRDbGFzc0V4dGVuc2lvbihpb2tpdENsYXNz
LCBhdWRpdFRva2VuLCBoYW5kbGUsIGZsYWdzKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfSk7Cit9CisKIFNhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRl
bnNpb24oY29uc3QgSGFuZGxlJiBoYW5kbGUpCiAgICAgOiBtX3NhbmRib3hFeHRlbnNpb24oV1RG
TW92ZShoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKSkKIHsKQEAgLTQ0Miw2ICs0OTMsMjEgQEAg
Ym9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY29uc3QgSGFuZGxlJiBo
YW5kbGUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpj
b25zdW1lUGVybWFuZW50bHkoY29uc3QgSGFuZGxlQXJyYXkmIGhhbmRsZUFycmF5KQoreworICAg
IGJvb2wgYWxsU3VjY2VlZGVkID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGhhbmRsZSA6IGhhbmRs
ZUFycmF5KSB7CisgICAgICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbikKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJvb2wgb2sgPSBTYW5kYm94RXh0ZW5zaW9uOjpj
b25zdW1lUGVybWFuZW50bHkoaGFuZGxlKTsKKyAgICAgICAgQVNTRVJUKG9rKTsKKyAgICAgICAg
YWxsU3VjY2VlZGVkICY9IG9rOworICAgIH0KKworICAgIHJldHVybiBhbGxTdWNjZWVkZWQ7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKFNBTkRCT1hfRVhU
RU5TSU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NhbmRib3hFeHRlbnNp
b24uaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAppbmRleCBkMDhm
NzJhOTU5MTUxMWQxNTE2OWE0YjFiOTllZGU4ZjlmYmJjOGNkLi5lYjM5NGFlNjE1NjhhYmNlYmQy
MmIzMTc1OWM5MTJjYzBiZGI5NmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9T
YW5kYm94RXh0ZW5zaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2FuZGJveEV4dGVu
c2lvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgSGFuZGxlJiBvcGVyYXRvcltd
KHNpemVfdCBpKTsKICAgICAgICAgSGFuZGxlJiBhdChzaXplX3QgaSkgeyByZXR1cm4gb3BlcmF0
b3JbXShpKTsgfQogICAgICAgICBjb25zdCBIYW5kbGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNv
bnN0OworICAgICAgICBIYW5kbGUqIGJlZ2luKCk7CisgICAgICAgIEhhbmRsZSogZW5kKCk7Cisg
ICAgICAgIGNvbnN0IEhhbmRsZSogYmVnaW4oKSBjb25zdDsKKyAgICAgICAgY29uc3QgSGFuZGxl
KiBlbmQoKSBjb25zdDsKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKICAgICAgICAgdm9p
ZCBlbmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBPcHRpb25hbDxI
YW5kbGVBcnJheT4gZGVjb2RlKElQQzo6RGVjb2RlciYpOwpAQCAtMTA3LDE0ICsxMTEsMTcgQEAg
cHVibGljOgogICAgIAogICAgIHN0YXRpYyBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gY3JlYXRl
KEhhbmRsZSYmKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBUeXBlLCBIYW5kbGUmKTsKKyAgICBzdGF0aWMgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXkgY3JlYXRlUmVhZE9ubHlIYW5kbGVzRm9yRmlsZXMoY29uc3QgU3RyaW5nJiBsb2dMYWJl
bCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVI
YW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUsIEhhbmRs
ZSYpOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgsIEhhbmRsZSYpOyAvLyBXaWxsIGF0dGVtcHQgdG8gY3JlYXRlIHRo
ZSBkaXJlY3RvcnkuCiAgICAgc3RhdGljIFN0cmluZyBjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlG
aWxlKGNvbnN0IFN0cmluZyYgcHJlZml4LCBUeXBlLCBIYW5kbGUmKTsKICAgICBzdGF0aWMgYm9v
bCBjcmVhdGVIYW5kbGVGb3JHZW5lcmljRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9u
Q2xhc3MsIEhhbmRsZSYpOwogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgc3RhdGljIGJvb2wg
Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1cChjb25zdCBTdHJpbmcmIHNlcnZpY2UsIE9wdGlvbmFs
PGF1ZGl0X3Rva2VuX3Q+LCBIYW5kbGUmLCBPcHRpb25TZXQ8RmxhZ3M+ID0gRmxhZ3M6OkRlZmF1
bHQpOworICAgIHN0YXRpYyBIYW5kbGVBcnJheSBjcmVhdGVIYW5kbGVzRm9yTWFjaExvb2t1cChj
b25zdCBWZWN0b3I8U3RyaW5nPiYgc2VydmljZXMsIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+LCBP
cHRpb25TZXQ8RmxhZ3M+ID0gRmxhZ3M6OkRlZmF1bHQpOwogICAgIHN0YXRpYyBib29sIGNyZWF0
ZUhhbmRsZUZvclJlYWRCeUF1ZGl0VG9rZW4oY29uc3QgU3RyaW5nJiBwYXRoLCBhdWRpdF90b2tl
bl90LCBIYW5kbGUmKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVIYW5kbGVGb3JJT0tpdENsYXNz
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaW9raXRDbGFzcywgT3B0aW9uYWw8YXVkaXRfdG9rZW5f
dD4sIEhhbmRsZSYsIE9wdGlvblNldDxGbGFncz4gPSBGbGFnczo6RGVmYXVsdCk7CisgICAgc3Rh
dGljIEhhbmRsZUFycmF5IGNyZWF0ZUhhbmRsZXNGb3JJT0tpdENsYXNzRXh0ZW5zaW9ucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW9raXRDbGFzc2VzLCBPcHRpb25hbDxhdWRpdF90b2tlbl90Piwg
T3B0aW9uU2V0PEZsYWdzPiA9IEZsYWdzOjpEZWZhdWx0KTsKICNlbmRpZgogICAgIH5TYW5kYm94
RXh0ZW5zaW9uKCk7CiAKQEAgLTEyMyw2ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNv
bnN1bWVQZXJtYW5lbnRseSgpOwogICAgIHN0YXRpYyBib29sIGNvbnN1bWVQZXJtYW5lbnRseShj
b25zdCBIYW5kbGUmKTsKKyAgICBzdGF0aWMgYm9vbCBjb25zdW1lUGVybWFuZW50bHkoY29uc3Qg
SGFuZGxlQXJyYXkmKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTYW5kYm94RXh0ZW5zaW9u
KGNvbnN0IEhhbmRsZSYpOwpAQCAtMTQ0LDEwICsxNTIsMTUgQEAgaW5saW5lIHZvaWQgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmFsbG9jYXRlKHNpemVfdCkgeyB9CiBpbmxpbmUgc2l6
ZV90IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpzaXplKCkgY29uc3QgeyByZXR1cm4g
MDsgfSAgICAKIGlubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVfdCkgY29uc3QgeyByZXR1cm4g
bV9lbXB0eUhhbmRsZTsgfQogaW5saW5lIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90KSB7IHJldHVybiBtX2Vt
cHR5SGFuZGxlOyB9CitpbmxpbmUgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheTo6YmVnaW4oKSB7IHJldHVybiAmbV9lbXB0eUhhbmRsZTsgfQor
aW5saW5lIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxl
QXJyYXk6OmVuZCgpIHsgcmV0dXJuICZtX2VtcHR5SGFuZGxlOyB9CitpbmxpbmUgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6YmVn
aW4oKSBjb25zdCB7IHJldHVybiAmbV9lbXB0eUhhbmRsZTsgfQoraW5saW5lIGNvbnN0IFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmVuZCgp
IGNvbnN0IHsgcmV0dXJuICZtX2VtcHR5SGFuZGxlOyB9CiBpbmxpbmUgdm9pZCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheTo6ZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0IHsgfQogaW5s
aW5lIGF1dG8gU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShJUEM6OkRlY29k
ZXImKSAtPiBPcHRpb25hbDxIYW5kbGVBcnJheT4geyByZXR1cm4ge3sgfX07IH0KIGlubGluZSBS
ZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKEhhbmRsZSYm
KSB7IHJldHVybiBudWxscHRyOyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGUoY29uc3QgU3RyaW5nJiwgVHlwZSwgSGFuZGxlJikgeyByZXR1cm4gdHJ1ZTsgfQor
aW5saW5lIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZVJlYWRPbmx5SGFuZGxlc0ZvckZpbGVzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JikgeyByZXR1cm4geyB9OyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChjb25zdCBTdHJpbmcmLCBUeXBlLCBIYW5k
bGUmKSB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiwgSGFuZGxlJikgeyBy
ZXR1cm4gdHJ1ZTsgfQogaW5saW5lIFN0cmluZyBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JUZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgLypwcmVmaXgqLywgVHlwZSwgSGFuZGxl
Jikge3JldHVybiBTdHJpbmcoKTt9CkBAIC0xNTcsMTAgKzE3MCwxNSBAQCBpbmxpbmUgYm9vbCBT
YW5kYm94RXh0ZW5zaW9uOjpyZXZva2UoKSB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgYm9vbCBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lKCkgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wg
U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KCkgeyByZXR1cm4gdHJ1ZTsgfQog
aW5saW5lIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNvbnN0IEhh
bmRsZSYpIHsgcmV0dXJuIHRydWU7IH0KK2lubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OmNv
bnN1bWVQZXJtYW5lbnRseShjb25zdCBIYW5kbGVBcnJheSYpIHsgcmV0dXJuIHRydWU7IH0KIGlu
bGluZSBTdHJpbmcgc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpIHsgcmV0dXJuIHBhdGg7IH0KIGlubGluZSBTdHJpbmcgcmVzb2x2ZVBhdGhGb3JTYW5k
Ym94RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCkgeyByZXR1cm4gcGF0aDsgfQogaW5saW5l
IFN0cmluZyByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIHBhdGgpIHsgcmV0dXJuIHBhdGg7IH0KICNlbHNlCitpbmxpbmUg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6
YmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQoraW5saW5lIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmVuZCgpIHsgcmV0dXJu
IG1fZGF0YS5lbmQoKTsgfQoraW5saW5lIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSog
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhLmJlZ2luKCk7IH0KK2lubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUqIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
ZW5kKCk7IH0KIFN0cmluZyBzdHJpbmdCeVJlc29sdmluZ1N5bWxpbmtzSW5QYXRoKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiBTdHJpbmcgcmVzb2x2ZVBhdGhGb3JTYW5kYm94RXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYgcGF0aCk7CiBTdHJpbmcgcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9y
eUZvclNhbmRib3hFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IGQz
NTMwM2VmNmJkZjEyM2MwOGM4ZDA0ZDEzNzE2YTcxYzMyNzk4MmIuLmQwOWQyMmE2MGMwOWMwMTg2
MTRlN2YwOGY5N2FlZDI0Y2IyYmE4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMjQ0LDYgKzI0NCwzOSBAQCBz
dGF0aWMgY29uc3QgVmVjdG9yPFN0cmluZz4mIG1lZGlhUmVsYXRlZE1hY2hTZXJ2aWNlcygpCiAg
ICAgcmV0dXJuIHNlcnZpY2VzOwogfQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3N0YXRp
YyBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbm9uQnJvd3NlclNlcnZpY2VzKCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBjb25zdCBhdXRvIHNlcnZpY2VzID0gbWFr
ZU5ldmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgImNvbS5hcHBsZS5sc2Qu
b3BlbiIsCisgICAgICAgICJjb20uYXBwbGUubW9iaWxlYXNzZXRkIiwKKyAgICAgICAgImNvbS5h
cHBsZS5pY29uc2VydmljZXMiLAorICAgICAgICAiY29tLmFwcGxlLlBvd2VyTWFuYWdlbWVudC5j
b250cm9sIiwKKyAgICAgICAgImNvbS5hcHBsZS5mcm9udGJvYXJkLnN5c3RlbWFwcHNlcnZpY2Vz
IgorICAgIH0pOworICAgIHJldHVybiBzZXJ2aWNlczsKK30KKworc3RhdGljIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBhZ3hDb21waWxlckNsYXNzZXMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gaW9raXRDbGFzc2VzID0gbWFrZU5ldmVyRGVz
dHJveWVkKFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgIkFHWENvbW1hbmRRdWV1ZSIsCisgICAg
ICAgICJBR1hEZXZpY2UiLAorICAgICAgICAiQUdYU2hhcmVkVXNlckNsaWVudCIsCisgICAgICAg
ICJJT0FjY2VsQ29udGV4dCIsCisgICAgICAgICJJT0FjY2VsQ29udGV4dDIiLAorICAgICAgICAi
SU9BY2NlbERldmljZSIsCisgICAgICAgICJJT0FjY2VsRGV2aWNlMiIsCisgICAgICAgICJJT0Fj
Y2VsU2hhcmVkVXNlckNsaWVudCIsCisgICAgICAgICJJT0FjY2VsU2hhcmVkVXNlckNsaWVudDIi
CisgICAgICAgICJJT0FjY2VsU3VibWl0dGVyMiIsCisgICAgfSk7CisgICAgcmV0dXJuIGlva2l0
Q2xhc3NlczsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRp
YWxpemVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2ViUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICBwYXJhbWV0ZXJzLm1lZGlh
TUlNRVR5cGVzID0gcHJvY2Vzcy5tZWRpYU1JTUVUeXBlcygpOwpAQCAtMzUxLDE5ICszODQsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0
IFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIGlmICghV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCkg
fHwgX0FYU0FwcGxpY2F0aW9uQWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogc2VydmljZXNbXSA9IHsKLSAgICAgICAgICAgICJjb20uYXBwbGUubHNk
Lm9wZW4iLAotICAgICAgICAgICAgImNvbS5hcHBsZS5tb2JpbGVhc3NldGQiLAotICAgICAgICAg
ICAgImNvbS5hcHBsZS5pY29uc2VydmljZXMiLAotICAgICAgICAgICAgImNvbS5hcHBsZS5Qb3dl
ck1hbmFnZW1lbnQuY29udHJvbCIsCi0gICAgICAgICAgICAiY29tLmFwcGxlLmZyb250Ym9hcmQu
c3lzdGVtYXBwc2VydmljZXMiCi0gICAgICAgIH07Ci0gICAgICAgIGF1dG8gc2l6ZSA9IFdURl9B
UlJBWV9MRU5HVEgoc2VydmljZXMpOwotICAgICAgICBwYXJhbWV0ZXJzLmR5bmFtaWNNYWNoRXh0
ZW5zaW9uSGFuZGxlcy5hbGxvY2F0ZShzaXplKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVGb3JNYWNoTG9va3VwKHNlcnZpY2VzW2ldLCBXVEY6Om51bGxvcHQsIHBhcmFtZXRlcnMuZHlu
YW1pY01hY2hFeHRlbnNpb25IYW5kbGVzW2ldKTsKLSAgICB9CisgICAgaWYgKCFXZWJDb3JlOjpJ
T1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKSB8fCBfQVhTQXBwbGljYXRpb25BY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBwYXJhbWV0ZXJzLmR5bmFtaWNNYWNoRXh0ZW5zaW9u
SGFuZGxlcyA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKG5v
bkJyb3dzZXJTZXJ2aWNlcygpLCBXVEY6Om51bGxvcHQpOwogICAgIAogICAgIGlmIChpc0ludGVy
bmFsSW5zdGFsbCgpKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBkaWFnbm9z
dGljc0V4dGVuc2lvbkhhbmRsZTsKQEAgLTM3NSwyNCArMzk3LDggQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzUHJveHkm
IHByb2Nlc3MKICAgICBpZiAoU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExv
b2t1cCgiY29tLmFwcGxlLnJ1bm5pbmdib2FyZCIsIFdURjo6bnVsbG9wdCwgcnVubmluZ2JvYXJk
RXh0ZW5zaW9uSGFuZGxlLCBTYW5kYm94RXh0ZW5zaW9uOjpGbGFnczo6Tm9SZXBvcnQpKQogICAg
ICAgICBwYXJhbWV0ZXJzLnJ1bm5pbmdib2FyZEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUocnVu
bmluZ2JvYXJkRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChXZWJDb3JlOjpkZXZpY2VIYXNB
R1hDb21waWxlclNlcnZpY2UoKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
aW9LaXRDbGFzc2VzW10gPSB7Ci0gICAgICAgICAgICAiQUdYQ29tbWFuZFF1ZXVlIiwKLSAgICAg
ICAgICAgICJBR1hEZXZpY2UiLAotICAgICAgICAgICAgIkFHWFNoYXJlZFVzZXJDbGllbnQiLAot
ICAgICAgICAgICAgIklPQWNjZWxDb250ZXh0IiwKLSAgICAgICAgICAgICJJT0FjY2VsQ29udGV4
dDIiLAotICAgICAgICAgICAgIklPQWNjZWxEZXZpY2UiLAotICAgICAgICAgICAgIklPQWNjZWxE
ZXZpY2UyIiwKLSAgICAgICAgICAgICJJT0FjY2VsU2hhcmVkVXNlckNsaWVudCIsCi0gICAgICAg
ICAgICAiSU9BY2NlbFNoYXJlZFVzZXJDbGllbnQyIgotICAgICAgICAgICAgIklPQWNjZWxTdWJt
aXR0ZXIyIiwKLSAgICAgICAgfTsKLSAgICAgICAgYXV0byBzaXplID0gV1RGX0FSUkFZX0xFTkdU
SChpb0tpdENsYXNzZXMpOwotICAgICAgICBwYXJhbWV0ZXJzLmR5bmFtaWNJT0tpdEV4dGVuc2lv
bkhhbmRsZXMuYWxsb2NhdGUoc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9y
SU9LaXRDbGFzc0V4dGVuc2lvbihpb0tpdENsYXNzZXNbaV0sIFdURjo6bnVsbG9wdCwgcGFyYW1l
dGVycy5keW5hbWljSU9LaXRFeHRlbnNpb25IYW5kbGVzW2ldKTsKLSAgICB9CisgICAgaWYgKFdl
YkNvcmU6OmRldmljZUhhc0FHWENvbXBpbGVyU2VydmljZSgpKQorICAgICAgICBwYXJhbWV0ZXJz
LmR5bmFtaWNJT0tpdEV4dGVuc2lvbkhhbmRsZXMgPSBjcmVhdGVIYW5kbGVzRm9ySU9LaXRDbGFz
c0V4dGVuc2lvbnMoYWd4Q29tcGlsZXJDbGFzc2VzKCksIFdURjo6bnVsbG9wdCk7CiAjZW5kaWYK
ICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTQ0MiwzMCArNDQ4LDEzIEBAIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MoY29uc3QgV2ViUHJvY2Vz
c1Byb3h5JiBwcm9jZXNzCiAKICAgICBpZiAobmVlZFdlYlByb2Nlc3NFeHRlbnNpb25zKSB7CiAg
ICAgICAgIC8vIEZJWE1FKDIwNzcxNik6IFRoZSBmb2xsb3dpbmcgc2hvdWxkIGJlIHJlbW92ZWQg
d2hlbiB0aGUgR1BVIHByb2Nlc3MgaXMgY29tcGxldGUuCi0gICAgICAgIGNvbnN0IGF1dG8mIHNl
cnZpY2VzID0gbWVkaWFSZWxhdGVkTWFjaFNlcnZpY2VzKCk7Ci0gICAgICAgIHBhcmFtZXRlcnMu
bWVkaWFFeHRlbnNpb25IYW5kbGVzLmFsbG9jYXRlKHNlcnZpY2VzLnNpemUoKSk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gc2VydmljZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1
cChzZXJ2aWNlc1tpXSwgV1RGOjpudWxsb3B0LCBwYXJhbWV0ZXJzLm1lZGlhRXh0ZW5zaW9uSGFu
ZGxlc1tpXSk7CisgICAgICAgIHBhcmFtZXRlcnMubWVkaWFFeHRlbnNpb25IYW5kbGVzID0gU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0Zvck1hY2hMb29rdXAobWVkaWFSZWxhdGVkTWFj
aFNlcnZpY2VzKCksIFdURjo6bnVsbG9wdCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKENGUFJFRlNf
RElSRUNUX01PREUpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoX0FYU0FwcGxp
Y2F0aW9uQWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGVBcnJheSBwcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXM7Ci0gICAgICAgIAotICAg
ICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHNlcnZpY2VzW10gPSB7Ci0gICAgICAg
ICAgICAiY29tLmFwcGxlLmNmcHJlZnNkLmFnZW50IiwKLSAgICAgICAgICAgICJjb20uYXBwbGUu
Y2ZwcmVmc2QuZGFlbW9uIgotICAgICAgICB9OwotICAgICAgICBhdXRvIHNpemUgPSBzdGQ6OnNp
emUoc2VydmljZXMpOwotICAgICAgICBwcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMuYWxsb2Nh
dGUoc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgICAgICBib29sIG9rID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFj
aExvb2t1cChzZXJ2aWNlc1tpXSwgV1RGOjpudWxsb3B0LCBwcmVmZXJlbmNlc0V4dGVuc2lvbkhh
bmRsZXNbaV0pOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBwYXJhbWV0ZXJzLnByZWZlcmVuY2VzRXh0ZW5zaW9uSGFuZGxl
cyA9IFdURk1vdmUocHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzKTsKLSAgICB9CisgICAgaWYg
KF9BWFNBcHBsaWNhdGlvbkFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgIHBhcmFtZXRl
cnMucHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlc0Zvck1hY2hMb29rdXAoeyAiY29tLmFwcGxlLmNmcHJlZnNkLmFnZW50Il9zLCAiY29t
LmFwcGxlLmNmcHJlZnNkLmRhZW1vbiJfcyB9LCBXVEY6Om51bGxvcHQpOwogI2VuZGlmCiAKICAg
ICBhdXRvIGdsb2JhbFByZWZlcmVuY2VzRGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBudWxscHRyLCBudWxscHRyKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUHJv
eHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94
eUNvY29hLm1tCmluZGV4IDk5ODI5YWJlMmI0NDRiMjEyZjBhMWZmZmFhODM0N2JiODdiY2RjMTku
LjAyM2NlOWMxYzY5MGQzY2Y2ZmFhODQ5MjdkNDRkNDA1ZGYxNDQyMTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjM5LDE5ICsyMzksMTAgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6OnVuYmxvY2tQcmVmZXJl
bmNlU2VydmljZUlmTmVlZGVkKCkKICAgICBpZiAoIWNhblNlbmRNZXNzYWdlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IGhhbmRsZUFycmF5
OwotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogc2VydmljZXNbXSA9IHsKLSAgICAg
ICAgImNvbS5hcHBsZS5jZnByZWZzZC5hZ2VudCIsCi0gICAgICAgICJjb20uYXBwbGUuY2ZwcmVm
c2QuZGFlbW9uIgotICAgIH07Ci0gICAgYXV0byBzaXplID0gc3RkOjpzaXplKHNlcnZpY2VzKTsK
LSAgICBoYW5kbGVBcnJheS5hbGxvY2F0ZShzaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoIVNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvck1hY2hMb29rdXAoc2VydmljZXNbaV0sIGNvbm5lY3Rpb24oKSA/IGNvbm5lY3Rpb24o
KS0+Z2V0QXVkaXRUb2tlbigpIDogV1RGOjpudWxsb3B0LCBoYW5kbGVBcnJheVtpXSkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gaGFuZGxlQXJyYXkgPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVzRm9yTWFjaExvb2t1cCh7ICJjb20uYXBwbGUuY2ZwcmVmc2Qu
YWdlbnQiX3MsICJjb20uYXBwbGUuY2ZwcmVmc2QuZGFlbW9uIl9zIH0sIGNvbm5lY3Rpb24oKSA/
IGNvbm5lY3Rpb24oKS0+Z2V0QXVkaXRUb2tlbigpIDogV1RGOjpudWxsb3B0KTsKKyAgICBBU1NF
UlQoaGFuZGxlQXJyYXkuc2l6ZSgpID09IDIpOwogICAgIAotICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlVuYmxvY2tQcmVmZXJlbmNlU2VydmljZShoYW5kbGVBcnJheSksIDApOworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVuYmxvY2tQcmVmZXJlbmNlU2VydmljZShXVEZN
b3ZlKGhhbmRsZUFycmF5KSksIDApOwogICAgIG1faGFzU2VudE1lc3NhZ2VUb1VuYmxvY2tQcmVm
ZXJlbmNlU2VydmljZSA9IHRydWU7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCmluZGV4IDBkMzA4ZTZjYmY2ODY3OTI2ZDQxNzc5MWEwMzQyYWRmYWY3
NWMxMjguLjM3ZjQzNmQ3ZWNmOTVmOTVhOTk3YmQ2MzBhZTBiNTc5NmE4N2RhN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNjYzMiwxMiArNjYzMiw4IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbFdpdGhEaXNwbGF5
U3RyaW5nQW5kSWNvbihjb25zdCBWZWN0CiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShT
QU5EQk9YX0VYVEVOU0lPTlMpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZXM7Ci0gICAgc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMuYWxsb2Nh
dGUoZmlsZVVSTHMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVVUkxz
LnNpemUoKTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZmls
ZVVSTHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlc1tpXSk7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFeHRlbmRTYW5k
Ym94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKHNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSk7CisgICAg
YXV0byBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZVJl
YWRPbmx5SGFuZGxlc0ZvckZpbGVzKCJXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9yT3Bl
blBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uIl9zLCBmaWxlVVJMcyk7CisgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChXVEZN
b3ZlKHNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSkpOwogI2VuZGlmCiAKICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGUgZnJvbnRib2FyZFNlcnZpY2VzU2FuZGJveEV4dGVuc2lvbiwgaWNvblNl
cnZpY2VzU2FuZGJveEV4dGVuc2lvbjsKQEAgLTY2NTcsMTkgKzY2NTMsOCBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVVUkxzKQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoU0FOREJPWF9FWFRFTlNJ
T05TKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25I
YW5kbGVzOwotICAgIHNhbmRib3hFeHRlbnNpb25IYW5kbGVzLmFsbG9jYXRlKGZpbGVVUkxzLnNp
emUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlVVJMcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBib29sIGNyZWF0ZWRFeHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGUoZmlsZVVSTHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5LCBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlc1tpXSk7Ci0gICAgICAgIGlmICghY3JlYXRlZEV4dGVuc2lv
bikgewotICAgICAgICAgICAgLy8gVGhpcyBjYW4gbGVnaXRpbWF0ZWx5IGZhaWwgaWYgYSBkaXJl
Y3RvcnkgY29udGFpbmluZyB0aGUgZmlsZSBpcyBkZWxldGVkIGFmdGVyIHRoZSBmaWxlIHdhcyBj
aG9zZW4uCi0gICAgICAgICAgICAvLyBXZSBhbHNvIGhhdmUgcmVwb3J0cyBvZiBjYXNlcyB3aGVy
ZSB0aGlzIGxpa2VseSBmYWlscyBmb3Igc29tZSB1bmtub3duIHJlYXNvbiwgPHJkYXI6Ly9wcm9i
bGVtLzEwMTU2NzEwPi4KLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiV2ViUGFnZVByb3h5Ojpk
aWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbDogY291bGQgbm90IGNyZWF0ZSBhIHNhbmRib3ggZXh0
ZW5zaW9uIGZvciAnJXMnXG4iLCBmaWxlVVJMc1tpXS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlcykpOworICAgIGF1dG8gc2FuZGJveEV4dGVuc2lvbkhhbmRsZXMgPSBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVSZWFkT25seUhhbmRsZXNGb3JGaWxlcygiV2ViUGFnZVByb3h5OjpkaWRD
aG9vc2VGaWxlc0Zvck9wZW5QYW5lbCJfcywgZmlsZVVSTHMpOworICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoV1RGTW92ZShzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlcykpKTsKICNlbmRpZgogCiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoZmlsZVVSTHMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBs
YXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggYzVhYTc1MWFiN2Y4ZmM4ZjBmMGMwOGU4YjViNjky
ODczODM5ZTEwYS4uMjFmOTg3ZGNjYWViYzQ0Y2UzMTI3YTg1NDcyYWYxYTQyZmVjN2Y5OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTE0OSwxMCArMTQ5LDcgQEAgdm9p
ZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmlu
Zz4mIHBhdGhuYW1lcywgY29uc3QKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2Fy
ZFR5cGUpLAogICAgICAgICBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJv
YXJkUGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkocGF0aG5hbWVzLCBzYW5kYm94RXh0ZW5zaW9uc0hh
bmRsZUFycmF5KSwgMCk7CiAgICAgQVNTRVJUKHBhdGhuYW1lcy5zaXplKCkgPT0gc2FuZGJveEV4
dGVuc2lvbnNIYW5kbGVBcnJheS5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheS5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAo
YXV0byBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoV1RGTW92ZShzYW5kYm94
RXh0ZW5zaW9uc0hhbmRsZUFycmF5W2ldKSkpCi0gICAgICAgICAgICBleHRlbnNpb24tPmNvbnN1
bWVQZXJtYW5lbnRseSgpOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkoc2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheSk7CiB9CiAKIFN0cmluZyBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOGIzYzA2NDk4Yzc0ZDQzZTAzYzM1NGVj
YTBlYjU2Zjc3ZThhYzUzZC4uM2VkMDI5M2E5ODg0NmFjYTAyNzZmMjYyZGQ2OTY3OWY3ZDA1ODlk
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAg
LTQyNzcsMTIgKzQyNzcsMTAgQEAgdm9pZCBXZWJQYWdlOjpkaWRDYW5jZWxGb3JPcGVuUGFuZWwo
KQogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCiB2b2lkIFdlYlBhZ2U6OmV4dGVuZFNh
bmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkm
JiBoYW5kbGVzKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaGFuZGxlcy5zaXplKCk7
ICsraSkgewotICAgICAgICBib29sIHJlc3VsdCA9IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShoYW5kbGVzW2ldKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAg
ICAgIC8vIFdlIGhhdmUgcmVwb3J0cyBvZiBjYXNlcyB3aGVyZSB0aGlzIGZhaWxzIGZvciBzb21l
IHVua25vd24gcmVhc29uLCA8cmRhcjovL3Byb2JsZW0vMTAxNTY3MTA+LgotICAgICAgICAgICAg
V1RGTG9nQWx3YXlzKCJXZWJQYWdlOjpleHRlbmRTYW5kYm94Rm9yRmlsZUZyb21PcGVuUGFuZWwo
KTogQ291bGQgbm90IGNvbnN1bWUgYSBzYW5kYm94IGV4dGVuc2lvbiIpOwotICAgICAgICB9Cisg
ICAgYm9vbCByZXN1bHQgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFu
ZGxlcyk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSByZXBvcnRzIG9m
IGNhc2VzIHdoZXJlIHRoaXMgZmFpbHMgZm9yIHNvbWUgdW5rbm93biByZWFzb24sIDxyZGFyOi8v
cHJvYmxlbS8xMDE1NjcxMD4uCisgICAgICAgIFdURkxvZ0Fsd2F5cygiV2ViUGFnZTo6ZXh0ZW5k
U2FuZGJveEZvckZpbGVGcm9tT3BlblBhbmVsKCk6IENvdWxkIG5vdCBjb25zdW1lIGEgc2FuZGJv
eCBleHRlbnNpb24iKTsKICAgICB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAppbmRleCA2ODEwNGJkZmQyOTk0MDc2MTM2MWFlY2NiNmI2NGI5Y2Y0YTEw
YTdhLi41OTM2NmMwYjJlZTY1MDE3NzQxNzk3YjI0ZDdiMGM5YzAzMzA0ZjkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0zNzMsOCArMzczLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzJiYgcGFyYW1ldGVycykKICAgICAgICAgbWVtb3J5UHJlc3N1cmVIYW5kbGVyLmluc3RhbGwo
KTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHBhcmFtZXRlcnMuYWRk
aXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKLSAg
ICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuYWRk
aXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9u
Ojpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5hZGRpdGlvbmFsU2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMpOwogCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aC5pc0Vt
cHR5KCkpCiAgICAgICAgIG1faW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6Y3JlYXRl
KHBhcmFtZXRlcnMsIHRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHMocGFyYW1ldGVycy5pbml0aWFs
aXphdGlvblVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCA4NzFiZGQ0ZmY5YTk2OTQ3
YTc1YTM1Njk5OGY0MjI2OWYxNmQyMzYyLi40ZjU1YjBjNmQwYTJiYWNhMmZlNDM2Mjk5OWE1ZWYx
YmQ1ZjkxNDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2Vi
UHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQ
cm9jZXNzQ29jb2EubW0KQEAgLTMyMywxMSArMzIzLDggQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0
Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBh
cmEKICAgICBpZiAocGFyYW1ldGVycy5kaWFnbm9zdGljc0V4dGVuc2lvbkhhbmRsZSkKICAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KCpwYXJhbWV0ZXJzLmRpYWdu
b3N0aWNzRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0g
cGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsg
KytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXNbaV0pOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDAsIHNpemUgPSBwYXJhbWV0ZXJzLmR5bmFtaWNJT0tpdEV4dGVuc2lvbkhhbmRsZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5keW5hbWljSU9LaXRFeHRlbnNpb25IYW5kbGVzW2ldKTsKKyAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5keW5hbWlj
TWFjaEV4dGVuc2lvbkhhbmRsZXMpOworICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJt
YW5lbnRseShwYXJhbWV0ZXJzLmR5bmFtaWNJT0tpdEV4dGVuc2lvbkhhbmRsZXMpOwogI2VuZGlm
CiAgICAgCiAgICAgaWYgKHBhcmFtZXRlcnMubmVIZWxwZXJFeHRlbnNpb25IYW5kbGUpCkBAIC0z
NDQsMTYgKzM0MSwxMSBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlBy
b2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQogI2VuZGlmCiAKICAgICAv
LyBGSVhNRSgyMDc3MTYpOiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gdGhl
IEdQVSBwcm9jZXNzIGlzIGNvbXBsZXRlLgotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0g
cGFyYW1ldGVycy5tZWRpYUV4dGVuc2lvbkhhbmRsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQot
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5t
ZWRpYUV4dGVuc2lvbkhhbmRsZXNbaV0pOworICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQ
ZXJtYW5lbnRseShwYXJhbWV0ZXJzLm1lZGlhRXh0ZW5zaW9uSGFuZGxlcyk7CiAKICNpZiBFTkFC
TEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICBpZiAocGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4
dGVuc2lvbkhhbmRsZXMpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0
ZXJzLnByZWZlcmVuY2VzRXh0ZW5zaW9uSGFuZGxlcy0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGJvb2wgb2sgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMtPmF0KGkpKTsKLSAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgfQotCisgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNvbnN1bWVQZXJtYW5lbnRseSgqcGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhh
bmRsZXMpOwogICAgICAgICBfQ0ZQcmVmc1NldERpcmVjdE1vZGVFbmFibGVkKGZhbHNlKTsKICAg
ICB9CiAjZW5kaWYKQEAgLTk2MywxMSArOTU1LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpub3RpZnlQ
cmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYga2UK
IAogdm9pZCBXZWJQcm9jZXNzOjp1bmJsb2NrUHJlZmVyZW5jZVNlcnZpY2UoU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlQXJyYXkmJiBoYW5kbGVBcnJheSkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGhhbmRsZUFycmF5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGJvb2wgb2sgPSBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlQXJyYXlbaV0pOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgfQotCisgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZUFycmF5KTsKICAgICBfQ0ZQcmVmc1NldERpcmVjdE1v
ZGVFbmFibGVkKGZhbHNlKTsKIH0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>398022</attachid>
            <date>2020-04-29 19:38:49 -0700</date>
            <delta_ts>2020-04-29 20:03:23 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-211103-20200429193849.patch</filename>
            <type>text/plain</type>
            <size>28886</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwOTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhiNmZmMzlhNWE0MTZlODRk
NjFkOTUwNzQ1OWMyZmM5NGExNGY2OWIuLjZlMmQ1ZDcwM2ViM2YyNjg0N2FkMzJmNjQxZWM5YjFl
Y2U0NDA3NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjAtMDQtMjkgIEJyZW50IEZ1
bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wcm92ZSBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSB0byByZWR1Y2UgYm9pbGVycGxhdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTEwMworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjI1MzM2MzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUGVyIEFybmUgVm9sbGFu
LgorCisgICAgICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBib2lsZXJwbGF0ZSBwYXR0ZXJucyBu
ZWVkZWQgd2hlbiB1c2luZyBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheS4KKyAgICAgICAg
V2UgY291bGQgbWFrZSB0aGVzZSBzaW1wbGVyIGFuZCBsZXNzIGVycm9yIHByb25lIGJ5IGltcHJv
dmluZyB0aGUgY2xhc3MuCisKKyAgICAgICAgVGhpcyBwYXRjaDoKKyAgICAgICAgMS4gQWRkcyBj
b252ZW5pZW5jZSBtZXRob2RzIHRvIGNyZWF0ZSBhbmQgY29uc3VtZSBIYW5kbGVBcnJheXMuCisg
ICAgICAgIDIuIFVwZGF0ZXMgdXNlcyBvZiBIYW5kbGVBcnJheSB0byB1c2UgdGhlIGNvbnZlbmll
bmNlIG1ldGhvZHMuCisKKyAgICAgICAgVGVzdGVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmg6CisgICAgICAgIChJUEM6OkZv
cm1EYXRhUmVmZXJlbmNlOjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9Db2NvYS9TYW5kYm94
RXh0ZW5zaW9uQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZXNGb3JGaWxlcyk6CisgICAgICAgIChXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKToKKyAgICAgICAgKFdlYktpdDo6U2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KToKKyAgICAgICAgKiBTaGFyZWQvU2FuZGJveEV4
dGVuc2lvbi5oOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVIYW5kbGVzRm9yRmlsZXMpOgorICAg
ICAgICAoV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94eUNvY29hLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzUHJveHk6OnVuYmxvY2tQcmVmZXJlbmNlU2VydmljZUlmTmVl
ZGVkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpleHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9j
ZXNzOjppbml0aWFsaXplV2ViUHJvY2Vzcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9jb2NvYS9X
ZWJQcm9jZXNzQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjp1bmJs
b2NrUHJlZmVyZW5jZVNlcnZpY2UpOgorCiAyMDIwLTA0LTI5ICBQZXIgQXJuZSBWb2xsYW4gIDxw
dm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIHNhbmRib3ggY29tcGlsZSBm
aXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVy
ZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvRm9ybURhdGFSZWZlcmVuY2UuaApp
bmRleCBiYzQ5N2M2MjM1ZmQxZTUyOGIyM2FiNTQwMjMwZTA0MGFkNjEyZGJkLi4xMTYxNTdkMTdi
NmMwMGMzNDZmM2Q4ZDI4NTU1NWEyYzdiZWU5YTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0lQQy9Gb3JtRGF0YVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0Zvcm1EYXRhUmVmZXJlbmNlLmgKQEAgLTg1LDggKzg1LDcgQEAgcHVibGljOgog
ICAgICAgICBpZiAoIXNhbmRib3hFeHRlbnNpb25IYW5kbGVzKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNhbmRib3hF
eHRlbnNpb25IYW5kbGVzLT5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHNhbmRib3hFeHRlbnNpb25IYW5kbGVzLT5h
dChpKSk7CisgICAgICAgIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVu
dGx5KCpzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyk7CiAKICAgICAgICAgcmV0dXJuIEZvcm1EYXRh
UmVmZXJlbmNlIHsgZm9ybURhdGEucmVsZWFzZU5vbk51bGwoKSB9OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL0NvY29hL1NhbmRib3hFeHRlbnNpb25Db2NvYS5tbQppbmRl
eCA4YmYwMzM3OGQyZGQ3M2JhNjkxNjdhOWQ0NjYzY2ZiNDE0NDBjNjJjLi4xZTM3NWY5NjVlODNk
Y2M2ZmU3NWVmYjE4MWY2NmJlZTliYWZiMmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9Db2NvYS9TYW5kYm94RXh0ZW5zaW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQ29jb2EvU2FuZGJveEV4dGVuc2lvbkNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjkzLDYgKzI5MywzNyBA
QCBib29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgs
IFR5cGUgdHlwZSwgSGFuZGxlJiBoYW5kbAogICAgIHJldHVybiBjcmVhdGVIYW5kbGVXaXRob3V0
UmVzb2x2aW5nUGF0aChyZXNvbHZlUGF0aEZvclNhbmRib3hFeHRlbnNpb24ocGF0aCksIHR5cGUs
IGhhbmRsZSk7CiB9CiAKK3N0YXRpYyBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBjcmVh
dGVIYW5kbGVzRm9yUmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXNvdXJjZXMsIEZ1
bmN0aW9uPGJvb2woY29uc3QgU3RyaW5nJiwgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBoYW5k
bGUpPiYmIGNyZWF0ZUZ1bmN0aW9uKQoreworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFy
cmF5IGhhbmRsZUFycmF5OworCisgICAgaWYgKHJlc291cmNlcy5zaXplKCkgPiAwKQorICAgICAg
ICBoYW5kbGVBcnJheS5hbGxvY2F0ZShyZXNvdXJjZXMuc2l6ZSgpKTsKKworICAgIHNpemVfdCBj
dXJyZW50SGFuZGxlID0gMDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHJlc291cmNlIDogcmVzb3Vy
Y2VzKSB7CisgICAgICAgIGlmICghY3JlYXRlRnVuY3Rpb24ocmVzb3VyY2UsIGhhbmRsZUFycmF5
W2N1cnJlbnRIYW5kbGVdKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICArK2N1cnJl
bnRIYW5kbGU7CisgICAgfQorICAgIAorICAgIHJldHVybiBoYW5kbGVBcnJheTsKK30KKworU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlUmVhZE9u
bHlIYW5kbGVzRm9yRmlsZXMoY29uc3QgU3RyaW5nJiBsb2dMYWJlbCwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhdGhzKQoreworICAgIHJldHVybiBjcmVhdGVIYW5kbGVzRm9yUmVzb3VyY2VzKHBh
dGhzLCBbJmxvZ0xhYmVsXSAoY29uc3QgU3RyaW5nJiBwYXRoLCBIYW5kbGUmIGhhbmRsZSkgewor
ICAgICAgICBpZiAoIVNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94
RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgaGFuZGxlKSkgeworICAgICAgICAgICAgLy8gVGhp
cyBjYW4gbGVnaXRpbWF0ZWx5IGZhaWwgaWYgYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmls
ZSBpcyBkZWxldGVkIGFmdGVyIHRoZSBmaWxlIHdhcyBjaG9zZW4uCisgICAgICAgICAgICAvLyBX
ZSBhbHNvIGhhdmUgcmVwb3J0cyBvZiBjYXNlcyB3aGVyZSB0aGlzIGxpa2VseSBmYWlscyBmb3Ig
c29tZSB1bmtub3duIHJlYXNvbiwgPHJkYXI6Ly9wcm9ibGVtLzEwMTU2NzEwPi4KKyAgICAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiJXM6IGNvdWxkIG5vdCBjcmVhdGUgYSBzYW5kYm94IGV4dGVuc2lv
biBmb3IgJyVzJ1xuIiwgbG9nTGFiZWwudXRmOCgpLmRhdGEoKSwgcGF0aC51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworfQorCiBi
b29sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgaGFuZGxlKQogewog
ICAgIFN0cmluZyByZXNvbHZlZFBhdGggPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0
b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihwYXRoKTsKQEAgLTM1Nyw2ICszODgsMTcgQEAgYm9vbCBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JNYWNoTG9va3VwKGNvbnN0IFN0cmluZyYg
c2VydmljZSwgT3B0aW9uYWwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlQXJyYXkgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0Zvck1hY2hMb29r
dXAoY29uc3QgVmVjdG9yPFN0cmluZz4mIHNlcnZpY2VzLCBPcHRpb25hbDxhdWRpdF90b2tlbl90
PiBhdWRpdFRva2VuLCBPcHRpb25TZXQ8RmxhZ3M+IGZsYWdzKQoreworICAgIHJldHVybiBjcmVh
dGVIYW5kbGVzRm9yUmVzb3VyY2VzKHNlcnZpY2VzLCBbYXVkaXRUb2tlbiwgZmxhZ3NdIChjb25z
dCBTdHJpbmcmIHNlcnZpY2UsIEhhbmRsZSYgaGFuZGxlKSB7CisgICAgICAgIGlmICghU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1cChzZXJ2aWNlLCBhdWRpdFRva2Vu
LCBoYW5kbGUsIGZsYWdzKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSk7Cit9CisKIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVh
ZEJ5QXVkaXRUb2tlbihjb25zdCBTdHJpbmcmIHBhdGgsIGF1ZGl0X3Rva2VuX3QgYXVkaXRUb2tl
biwgSGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgQVNTRVJUKCFoYW5kbGUubV9zYW5kYm94RXh0ZW5z
aW9uKTsKQEAgLTM4Myw2ICs0MjUsMTcgQEAgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JJT0tpdENsYXNzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgaW9LaXRDbGEKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0ZvcklPS2l0Q2xhc3NFeHRlbnNpb25zKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBpb2tpdENsYXNzZXMsIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9r
ZW4sIE9wdGlvblNldDxGbGFncz4gZmxhZ3MpCit7CisgICAgcmV0dXJuIGNyZWF0ZUhhbmRsZXNG
b3JSZXNvdXJjZXMoaW9raXRDbGFzc2VzLCBbYXVkaXRUb2tlbiwgZmxhZ3NdIChjb25zdCBTdHJp
bmcmIGlva2l0Q2xhc3MsIEhhbmRsZSYgaGFuZGxlKSB7CisgICAgICAgIGlmICghU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9ySU9LaXRDbGFzc0V4dGVuc2lvbihpb2tpdENsYXNzLCBh
dWRpdFRva2VuLCBoYW5kbGUsIGZsYWdzKSkgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSk7Cit9CisKIFNhbmRib3hFeHRlbnNpb246OlNhbmRib3hFeHRlbnNp
b24oY29uc3QgSGFuZGxlJiBoYW5kbGUpCiAgICAgOiBtX3NhbmRib3hFeHRlbnNpb24oV1RGTW92
ZShoYW5kbGUubV9zYW5kYm94RXh0ZW5zaW9uKSkKIHsKQEAgLTQ0Miw2ICs0OTUsMjEgQEAgYm9v
bCBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoY29uc3QgSGFuZGxlJiBoYW5k
bGUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjb25z
dW1lUGVybWFuZW50bHkoY29uc3QgSGFuZGxlQXJyYXkmIGhhbmRsZUFycmF5KQoreworICAgIGJv
b2wgYWxsU3VjY2VlZGVkID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGhhbmRsZSA6IGhhbmRsZUFy
cmF5KSB7CisgICAgICAgIGlmICghaGFuZGxlLm1fc2FuZGJveEV4dGVuc2lvbikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGJvb2wgb2sgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25z
dW1lUGVybWFuZW50bHkoaGFuZGxlKTsKKyAgICAgICAgQVNTRVJUKG9rKTsKKyAgICAgICAgYWxs
U3VjY2VlZGVkICY9IG9rOworICAgIH0KKworICAgIHJldHVybiBhbGxTdWNjZWVkZWQ7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKFNBTkRCT1hfRVhURU5T
SU9OUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24u
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1NhbmRib3hFeHRlbnNpb24uaAppbmRleCBkMDhmNzJh
OTU5MTUxMWQxNTE2OWE0YjFiOTllZGU4ZjlmYmJjOGNkLi5lYjM5NGFlNjE1NjhhYmNlYmQyMmIz
MTc1OWM5MTJjYzBiZGI5NmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9TYW5k
Ym94RXh0ZW5zaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvU2FuZGJveEV4dGVuc2lv
bi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTkzLDYgKzkzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgSGFuZGxlJiBvcGVyYXRvcltdKHNp
emVfdCBpKTsKICAgICAgICAgSGFuZGxlJiBhdChzaXplX3QgaSkgeyByZXR1cm4gb3BlcmF0b3Jb
XShpKTsgfQogICAgICAgICBjb25zdCBIYW5kbGUmIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0
OworICAgICAgICBIYW5kbGUqIGJlZ2luKCk7CisgICAgICAgIEhhbmRsZSogZW5kKCk7CisgICAg
ICAgIGNvbnN0IEhhbmRsZSogYmVnaW4oKSBjb25zdDsKKyAgICAgICAgY29uc3QgSGFuZGxlKiBl
bmQoKSBjb25zdDsKICAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdDsKICAgICAgICAgdm9pZCBl
bmNvZGUoSVBDOjpFbmNvZGVyJikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBPcHRpb25hbDxIYW5k
bGVBcnJheT4gZGVjb2RlKElQQzo6RGVjb2RlciYpOwpAQCAtMTA3LDE0ICsxMTEsMTcgQEAgcHVi
bGljOgogICAgIAogICAgIHN0YXRpYyBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4gY3JlYXRlKEhh
bmRsZSYmKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRo
LCBUeXBlLCBIYW5kbGUmKTsKKyAgICBzdGF0aWMgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJy
YXkgY3JlYXRlUmVhZE9ubHlIYW5kbGVzRm9yRmlsZXMoY29uc3QgU3RyaW5nJiBsb2dMYWJlbCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVIYW5k
bGVXaXRob3V0UmVzb2x2aW5nUGF0aChjb25zdCBTdHJpbmcmIHBhdGgsIFR5cGUsIEhhbmRsZSYp
OwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb25z
dCBTdHJpbmcmIHBhdGgsIEhhbmRsZSYpOyAvLyBXaWxsIGF0dGVtcHQgdG8gY3JlYXRlIHRoZSBk
aXJlY3RvcnkuCiAgICAgc3RhdGljIFN0cmluZyBjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxl
KGNvbnN0IFN0cmluZyYgcHJlZml4LCBUeXBlLCBIYW5kbGUmKTsKICAgICBzdGF0aWMgYm9vbCBj
cmVhdGVIYW5kbGVGb3JHZW5lcmljRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uQ2xh
c3MsIEhhbmRsZSYpOwogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgc3RhdGljIGJvb2wgY3Jl
YXRlSGFuZGxlRm9yTWFjaExvb2t1cChjb25zdCBTdHJpbmcmIHNlcnZpY2UsIE9wdGlvbmFsPGF1
ZGl0X3Rva2VuX3Q+LCBIYW5kbGUmLCBPcHRpb25TZXQ8RmxhZ3M+ID0gRmxhZ3M6OkRlZmF1bHQp
OworICAgIHN0YXRpYyBIYW5kbGVBcnJheSBjcmVhdGVIYW5kbGVzRm9yTWFjaExvb2t1cChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgc2VydmljZXMsIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+LCBPcHRp
b25TZXQ8RmxhZ3M+ID0gRmxhZ3M6OkRlZmF1bHQpOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUhh
bmRsZUZvclJlYWRCeUF1ZGl0VG9rZW4oY29uc3QgU3RyaW5nJiBwYXRoLCBhdWRpdF90b2tlbl90
LCBIYW5kbGUmKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVIYW5kbGVGb3JJT0tpdENsYXNzRXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgaW9raXRDbGFzcywgT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4s
IEhhbmRsZSYsIE9wdGlvblNldDxGbGFncz4gPSBGbGFnczo6RGVmYXVsdCk7CisgICAgc3RhdGlj
IEhhbmRsZUFycmF5IGNyZWF0ZUhhbmRsZXNGb3JJT0tpdENsYXNzRXh0ZW5zaW9ucyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgaW9raXRDbGFzc2VzLCBPcHRpb25hbDxhdWRpdF90b2tlbl90PiwgT3B0
aW9uU2V0PEZsYWdzPiA9IEZsYWdzOjpEZWZhdWx0KTsKICNlbmRpZgogICAgIH5TYW5kYm94RXh0
ZW5zaW9uKCk7CiAKQEAgLTEyMyw2ICsxMzAsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnN1
bWVQZXJtYW5lbnRseSgpOwogICAgIHN0YXRpYyBib29sIGNvbnN1bWVQZXJtYW5lbnRseShjb25z
dCBIYW5kbGUmKTsKKyAgICBzdGF0aWMgYm9vbCBjb25zdW1lUGVybWFuZW50bHkoY29uc3QgSGFu
ZGxlQXJyYXkmKTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTYW5kYm94RXh0ZW5zaW9uKGNv
bnN0IEhhbmRsZSYpOwpAQCAtMTQ0LDEwICsxNTIsMTUgQEAgaW5saW5lIHZvaWQgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmFsbG9jYXRlKHNpemVfdCkgeyB9CiBpbmxpbmUgc2l6ZV90
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjpzaXplKCkgY29uc3QgeyByZXR1cm4gMDsg
fSAgICAKIGlubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5OjpvcGVyYXRvcltdKHNpemVfdCkgY29uc3QgeyByZXR1cm4gbV9l
bXB0eUhhbmRsZTsgfQogaW5saW5lIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlQXJyYXk6Om9wZXJhdG9yW10oc2l6ZV90KSB7IHJldHVybiBtX2VtcHR5
SGFuZGxlOyB9CitpbmxpbmUgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGVBcnJheTo6YmVnaW4oKSB7IHJldHVybiAmbV9lbXB0eUhhbmRsZTsgfQoraW5s
aW5lIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJy
YXk6OmVuZCgpIHsgcmV0dXJuICZtX2VtcHR5SGFuZGxlOyB9CitpbmxpbmUgY29uc3QgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6YmVnaW4o
KSBjb25zdCB7IHJldHVybiAmbV9lbXB0eUhhbmRsZTsgfQoraW5saW5lIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmVuZCgpIGNv
bnN0IHsgcmV0dXJuICZtX2VtcHR5SGFuZGxlOyB9CiBpbmxpbmUgdm9pZCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGVBcnJheTo6ZW5jb2RlKElQQzo6RW5jb2RlciYpIGNvbnN0IHsgfQogaW5saW5l
IGF1dG8gU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmRlY29kZShJUEM6OkRlY29kZXIm
KSAtPiBPcHRpb25hbDxIYW5kbGVBcnJheT4geyByZXR1cm4ge3sgfX07IH0KIGlubGluZSBSZWZQ
dHI8U2FuZGJveEV4dGVuc2lvbj4gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKEhhbmRsZSYmKSB7
IHJldHVybiBudWxscHRyOyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUoY29uc3QgU3RyaW5nJiwgVHlwZSwgSGFuZGxlJikgeyByZXR1cm4gdHJ1ZTsgfQoraW5s
aW5lIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZVJlYWRPbmx5SGFuZGxlc0ZvckZpbGVzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JikgeyByZXR1cm4geyB9OyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChjb25zdCBTdHJpbmcmLCBUeXBlLCBIYW5kbGUm
KSB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgYm9vbCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiwgSGFuZGxlJikgeyByZXR1
cm4gdHJ1ZTsgfQogaW5saW5lIFN0cmluZyBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JUZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgLypwcmVmaXgqLywgVHlwZSwgSGFuZGxlJikg
e3JldHVybiBTdHJpbmcoKTt9CkBAIC0xNTcsMTAgKzE3MCwxNSBAQCBpbmxpbmUgYm9vbCBTYW5k
Ym94RXh0ZW5zaW9uOjpyZXZva2UoKSB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgYm9vbCBTYW5k
Ym94RXh0ZW5zaW9uOjpjb25zdW1lKCkgeyByZXR1cm4gdHJ1ZTsgfQogaW5saW5lIGJvb2wgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KCkgeyByZXR1cm4gdHJ1ZTsgfQogaW5s
aW5lIGJvb2wgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGNvbnN0IEhhbmRs
ZSYpIHsgcmV0dXJuIHRydWU7IH0KK2lubGluZSBib29sIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShjb25zdCBIYW5kbGVBcnJheSYpIHsgcmV0dXJuIHRydWU7IH0KIGlubGlu
ZSBTdHJpbmcgc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChjb25zdCBTdHJpbmcmIHBh
dGgpIHsgcmV0dXJuIHBhdGg7IH0KIGlubGluZSBTdHJpbmcgcmVzb2x2ZVBhdGhGb3JTYW5kYm94
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgcGF0aCkgeyByZXR1cm4gcGF0aDsgfQogaW5saW5lIFN0
cmluZyByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lv
bihjb25zdCBTdHJpbmcmIHBhdGgpIHsgcmV0dXJuIHBhdGg7IH0KICNlbHNlCitpbmxpbmUgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlKiBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheTo6YmVn
aW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQoraW5saW5lIFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSogU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmVuZCgpIHsgcmV0dXJuIG1f
ZGF0YS5lbmQoKTsgfQoraW5saW5lIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSogU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXk6OmJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
LmJlZ2luKCk7IH0KK2lubGluZSBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUqIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZUFycmF5OjplbmQoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuZW5k
KCk7IH0KIFN0cmluZyBzdHJpbmdCeVJlc29sdmluZ1N5bWxpbmtzSW5QYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCk7CiBTdHJpbmcgcmVzb2x2ZVBhdGhGb3JTYW5kYm94RXh0ZW5zaW9uKGNvbnN0IFN0
cmluZyYgcGF0aCk7CiBTdHJpbmcgcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZv
clNhbmRib3hFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBwYXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IGQzNTMw
M2VmNmJkZjEyM2MwOGM4ZDA0ZDEzNzE2YTcxYzMyNzk4MmIuLjM2MjFiOTljMzcwYzRlMDY4ZmZi
MTNiZTk3ODdjNzZjM2IwY2QzZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMjQ0LDYgKzI0NCwzOSBAQCBzdGF0
aWMgY29uc3QgVmVjdG9yPFN0cmluZz4mIG1lZGlhUmVsYXRlZE1hY2hTZXJ2aWNlcygpCiAgICAg
cmV0dXJuIHNlcnZpY2VzOwogfQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK3N0YXRpYyBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgbm9uQnJvd3NlclNlcnZpY2VzKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHN0YXRpYyBjb25zdCBhdXRvIHNlcnZpY2VzID0gbWFrZU5l
dmVyRGVzdHJveWVkKFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgImNvbS5hcHBsZS5sc2Qub3Bl
biIsCisgICAgICAgICJjb20uYXBwbGUubW9iaWxlYXNzZXRkIiwKKyAgICAgICAgImNvbS5hcHBs
ZS5pY29uc2VydmljZXMiLAorICAgICAgICAiY29tLmFwcGxlLlBvd2VyTWFuYWdlbWVudC5jb250
cm9sIiwKKyAgICAgICAgImNvbS5hcHBsZS5mcm9udGJvYXJkLnN5c3RlbWFwcHNlcnZpY2VzIgor
ICAgIH0pOworICAgIHJldHVybiBzZXJ2aWNlczsKK30KKworc3RhdGljIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBhZ3hDb21waWxlckNsYXNzZXMoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgc3RhdGljIGNvbnN0IGF1dG8gaW9raXRDbGFzc2VzID0gbWFrZU5ldmVyRGVzdHJv
eWVkKFZlY3RvcjxTdHJpbmc+IHsKKyAgICAgICAgIkFHWENvbW1hbmRRdWV1ZSIsCisgICAgICAg
ICJBR1hEZXZpY2UiLAorICAgICAgICAiQUdYU2hhcmVkVXNlckNsaWVudCIsCisgICAgICAgICJJ
T0FjY2VsQ29udGV4dCIsCisgICAgICAgICJJT0FjY2VsQ29udGV4dDIiLAorICAgICAgICAiSU9B
Y2NlbERldmljZSIsCisgICAgICAgICJJT0FjY2VsRGV2aWNlMiIsCisgICAgICAgICJJT0FjY2Vs
U2hhcmVkVXNlckNsaWVudCIsCisgICAgICAgICJJT0FjY2VsU2hhcmVkVXNlckNsaWVudDIiCisg
ICAgICAgICJJT0FjY2VsU3VibWl0dGVyMiIsCisgICAgfSk7CisgICAgcmV0dXJuIGlva2l0Q2xh
c3NlczsKK30KKyNlbmRpZgorCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxp
emVXZWJQcm9jZXNzKGNvbnN0IFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2ViUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICBwYXJhbWV0ZXJzLm1lZGlhTUlN
RVR5cGVzID0gcHJvY2Vzcy5tZWRpYU1JTUVUeXBlcygpOwpAQCAtMzUxLDE5ICszODQsOCBAQCB2
b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKGNvbnN0IFdl
YlByb2Nlc3NQcm94eSYgcHJvY2VzcwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmICghV2ViQ29yZTo6SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCkgfHwg
X0FYU0FwcGxpY2F0aW9uQWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBzdGF0aWMg
Y29uc3QgY2hhciogc2VydmljZXNbXSA9IHsKLSAgICAgICAgICAgICJjb20uYXBwbGUubHNkLm9w
ZW4iLAotICAgICAgICAgICAgImNvbS5hcHBsZS5tb2JpbGVhc3NldGQiLAotICAgICAgICAgICAg
ImNvbS5hcHBsZS5pY29uc2VydmljZXMiLAotICAgICAgICAgICAgImNvbS5hcHBsZS5Qb3dlck1h
bmFnZW1lbnQuY29udHJvbCIsCi0gICAgICAgICAgICAiY29tLmFwcGxlLmZyb250Ym9hcmQuc3lz
dGVtYXBwc2VydmljZXMiCi0gICAgICAgIH07Ci0gICAgICAgIGF1dG8gc2l6ZSA9IFdURl9BUlJB
WV9MRU5HVEgoc2VydmljZXMpOwotICAgICAgICBwYXJhbWV0ZXJzLmR5bmFtaWNNYWNoRXh0ZW5z
aW9uSGFuZGxlcy5hbGxvY2F0ZShzaXplKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JNYWNoTG9va3VwKHNlcnZpY2VzW2ldLCBXVEY6Om51bGxvcHQsIHBhcmFtZXRlcnMuZHluYW1p
Y01hY2hFeHRlbnNpb25IYW5kbGVzW2ldKTsKLSAgICB9CisgICAgaWYgKCFXZWJDb3JlOjpJT1NB
cHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKSB8fCBfQVhTQXBwbGljYXRpb25BY2Nlc3NpYmls
aXR5RW5hYmxlZCgpKQorICAgICAgICBwYXJhbWV0ZXJzLmR5bmFtaWNNYWNoRXh0ZW5zaW9uSGFu
ZGxlcyA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZXNGb3JNYWNoTG9va3VwKG5vbkJy
b3dzZXJTZXJ2aWNlcygpLCBXVEY6Om51bGxvcHQpOwogICAgIAogICAgIGlmIChpc0ludGVybmFs
SW5zdGFsbCgpKSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBkaWFnbm9zdGlj
c0V4dGVuc2lvbkhhbmRsZTsKQEAgLTM3NSwyNCArMzk3LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9v
bDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhjb25zdCBXZWJQcm9jZXNzUHJveHkmIHBy
b2Nlc3MKICAgICBpZiAoU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yTWFjaExvb2t1
cCgiY29tLmFwcGxlLnJ1bm5pbmdib2FyZCIsIFdURjo6bnVsbG9wdCwgcnVubmluZ2JvYXJkRXh0
ZW5zaW9uSGFuZGxlLCBTYW5kYm94RXh0ZW5zaW9uOjpGbGFnczo6Tm9SZXBvcnQpKQogICAgICAg
ICBwYXJhbWV0ZXJzLnJ1bm5pbmdib2FyZEV4dGVuc2lvbkhhbmRsZSA9IFdURk1vdmUocnVubmlu
Z2JvYXJkRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGlmIChXZWJDb3JlOjpkZXZpY2VIYXNBR1hD
b21waWxlclNlcnZpY2UoKSkgewotICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgaW9L
aXRDbGFzc2VzW10gPSB7Ci0gICAgICAgICAgICAiQUdYQ29tbWFuZFF1ZXVlIiwKLSAgICAgICAg
ICAgICJBR1hEZXZpY2UiLAotICAgICAgICAgICAgIkFHWFNoYXJlZFVzZXJDbGllbnQiLAotICAg
ICAgICAgICAgIklPQWNjZWxDb250ZXh0IiwKLSAgICAgICAgICAgICJJT0FjY2VsQ29udGV4dDIi
LAotICAgICAgICAgICAgIklPQWNjZWxEZXZpY2UiLAotICAgICAgICAgICAgIklPQWNjZWxEZXZp
Y2UyIiwKLSAgICAgICAgICAgICJJT0FjY2VsU2hhcmVkVXNlckNsaWVudCIsCi0gICAgICAgICAg
ICAiSU9BY2NlbFNoYXJlZFVzZXJDbGllbnQyIgotICAgICAgICAgICAgIklPQWNjZWxTdWJtaXR0
ZXIyIiwKLSAgICAgICAgfTsKLSAgICAgICAgYXV0byBzaXplID0gV1RGX0FSUkFZX0xFTkdUSChp
b0tpdENsYXNzZXMpOwotICAgICAgICBwYXJhbWV0ZXJzLmR5bmFtaWNJT0tpdEV4dGVuc2lvbkhh
bmRsZXMuYWxsb2NhdGUoc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9ySU9L
aXRDbGFzc0V4dGVuc2lvbihpb0tpdENsYXNzZXNbaV0sIFdURjo6bnVsbG9wdCwgcGFyYW1ldGVy
cy5keW5hbWljSU9LaXRFeHRlbnNpb25IYW5kbGVzW2ldKTsKLSAgICB9CisgICAgaWYgKFdlYkNv
cmU6OmRldmljZUhhc0FHWENvbXBpbGVyU2VydmljZSgpKQorICAgICAgICBwYXJhbWV0ZXJzLmR5
bmFtaWNJT0tpdEV4dGVuc2lvbkhhbmRsZXMgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5k
bGVzRm9ySU9LaXRDbGFzc0V4dGVuc2lvbnMoYWd4Q29tcGlsZXJDbGFzc2VzKCksIFdURjo6bnVs
bG9wdCk7CiAjZW5kaWYKICAgICAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTQ0MiwzMCArNDQ4
LDEzIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3Mo
Y29uc3QgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzCiAKICAgICBpZiAobmVlZFdlYlByb2Nlc3NF
eHRlbnNpb25zKSB7CiAgICAgICAgIC8vIEZJWE1FKDIwNzcxNik6IFRoZSBmb2xsb3dpbmcgc2hv
dWxkIGJlIHJlbW92ZWQgd2hlbiB0aGUgR1BVIHByb2Nlc3MgaXMgY29tcGxldGUuCi0gICAgICAg
IGNvbnN0IGF1dG8mIHNlcnZpY2VzID0gbWVkaWFSZWxhdGVkTWFjaFNlcnZpY2VzKCk7Ci0gICAg
ICAgIHBhcmFtZXRlcnMubWVkaWFFeHRlbnNpb25IYW5kbGVzLmFsbG9jYXRlKHNlcnZpY2VzLnNp
emUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gc2VydmljZXMuc2l6ZSgp
OyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFu
ZGxlRm9yTWFjaExvb2t1cChzZXJ2aWNlc1tpXSwgV1RGOjpudWxsb3B0LCBwYXJhbWV0ZXJzLm1l
ZGlhRXh0ZW5zaW9uSGFuZGxlc1tpXSk7CisgICAgICAgIHBhcmFtZXRlcnMubWVkaWFFeHRlbnNp
b25IYW5kbGVzID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0Zvck1hY2hMb29rdXAo
bWVkaWFSZWxhdGVkTWFjaFNlcnZpY2VzKCksIFdURjo6bnVsbG9wdCk7CiAgICAgfQogCiAjaWYg
RU5BQkxFKENGUFJFRlNfRElSRUNUX01PREUpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBpZiAoX0FYU0FwcGxpY2F0aW9uQWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkgewotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBwcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXM7
Ci0gICAgICAgIAotICAgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIHNlcnZpY2Vz
W10gPSB7Ci0gICAgICAgICAgICAiY29tLmFwcGxlLmNmcHJlZnNkLmFnZW50IiwKLSAgICAgICAg
ICAgICJjb20uYXBwbGUuY2ZwcmVmc2QuZGFlbW9uIgotICAgICAgICB9OwotICAgICAgICBhdXRv
IHNpemUgPSBzdGQ6OnNpemUoc2VydmljZXMpOwotICAgICAgICBwcmVmZXJlbmNlc0V4dGVuc2lv
bkhhbmRsZXMuYWxsb2NhdGUoc2l6ZSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBib29sIG9rID0gU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yTWFjaExvb2t1cChzZXJ2aWNlc1tpXSwgV1RGOjpudWxsb3B0LCBwcmVmZXJl
bmNlc0V4dGVuc2lvbkhhbmRsZXNbaV0pOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvaywg
b2spOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwYXJhbWV0ZXJzLnByZWZlcmVuY2Vz
RXh0ZW5zaW9uSGFuZGxlcyA9IFdURk1vdmUocHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzKTsK
LSAgICB9CisgICAgaWYgKF9BWFNBcHBsaWNhdGlvbkFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisg
ICAgICAgIHBhcmFtZXRlcnMucHJlZmVyZW5jZXNFeHRlbnNpb25IYW5kbGVzID0gU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlc0Zvck1hY2hMb29rdXAoeyAiY29tLmFwcGxlLmNmcHJlZnNk
LmFnZW50Il9zLCAiY29tLmFwcGxlLmNmcHJlZnNkLmRhZW1vbiJfcyB9LCBXVEY6Om51bGxvcHQp
OwogI2VuZGlmCiAKICAgICBhdXRvIGdsb2JhbFByZWZlcmVuY2VzRGljdGlvbmFyeSA9IGFkb3B0
Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwLCBudWxs
cHRyLCBudWxscHRyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUHJveHlDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQcm94eUNvY29hLm1tCmluZGV4IDk5ODI5YWJlMmI0NDRiMjEyZjBhMWZmZmFh
ODM0N2JiODdiY2RjMTkuLjAyM2NlOWMxYzY5MGQzY2Y2ZmFhODQ5MjdkNDRkNDA1ZGYxNDQyMTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQcm94
eUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
cm94eUNvY29hLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjM5LDE5ICsyMzksMTAgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OnVuYmxvY2tQcmVmZXJlbmNlU2VydmljZUlmTmVlZGVkKCkKICAgICBpZiAoIWNhblNlbmRNZXNz
YWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFy
cmF5IGhhbmRsZUFycmF5OwotICAgIHN0YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogc2Vydmlj
ZXNbXSA9IHsKLSAgICAgICAgImNvbS5hcHBsZS5jZnByZWZzZC5hZ2VudCIsCi0gICAgICAgICJj
b20uYXBwbGUuY2ZwcmVmc2QuZGFlbW9uIgotICAgIH07Ci0gICAgYXV0byBzaXplID0gc3RkOjpz
aXplKHNlcnZpY2VzKTsKLSAgICBoYW5kbGVBcnJheS5hbGxvY2F0ZShzaXplKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAoIVNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZUZvck1hY2hMb29rdXAoc2VydmljZXNbaV0sIGNvbm5lY3Rpb24o
KSA/IGNvbm5lY3Rpb24oKS0+Z2V0QXVkaXRUb2tlbigpIDogV1RGOjpudWxsb3B0LCBoYW5kbGVB
cnJheVtpXSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gaGFuZGxlQXJy
YXkgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVzRm9yTWFjaExvb2t1cCh7ICJjb20u
YXBwbGUuY2ZwcmVmc2QuYWdlbnQiX3MsICJjb20uYXBwbGUuY2ZwcmVmc2QuZGFlbW9uIl9zIH0s
IGNvbm5lY3Rpb24oKSA/IGNvbm5lY3Rpb24oKS0+Z2V0QXVkaXRUb2tlbigpIDogV1RGOjpudWxs
b3B0KTsKKyAgICBBU1NFUlQoaGFuZGxlQXJyYXkuc2l6ZSgpID09IDIpOwogICAgIAotICAgIHNl
bmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVuYmxvY2tQcmVmZXJlbmNlU2VydmljZShoYW5kbGVB
cnJheSksIDApOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVuYmxvY2tQcmVmZXJl
bmNlU2VydmljZShXVEZNb3ZlKGhhbmRsZUFycmF5KSksIDApOwogICAgIG1faGFzU2VudE1lc3Nh
Z2VUb1VuYmxvY2tQcmVmZXJlbmNlU2VydmljZSA9IHRydWU7CiB9CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDBkMzA4ZTZjYmY2ODY3OTI2ZDQx
Nzc5MWEwMzQyYWRmYWY3NWMxMjguLjM3ZjQzNmQ3ZWNmOTVmOTVhOTk3YmQ2MzBhZTBiNTc5NmE4
N2RhN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNjYz
MiwxMiArNjYzMiw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5Q
YW5lbFdpdGhEaXNwbGF5U3RyaW5nQW5kSWNvbihjb25zdCBWZWN0CiAgICAgICAgIHJldHVybjsK
IAogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCi0gICAgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlQXJyYXkgc2FuZGJveEV4dGVuc2lvbkhhbmRsZXM7Ci0gICAgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZXMuYWxsb2NhdGUoZmlsZVVSTHMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGVVUkxzLnNpemUoKTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUoZmlsZVVSTHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlR5cGU6OlJlYWRPbmx5
LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlc1tpXSk7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpFeHRlbmRTYW5kYm94Rm9yRmlsZXNGcm9tT3BlblBhbmVsKHNhbmRib3hFeHRlbnNpb25I
YW5kbGVzKSk7CisgICAgYXV0byBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcyA9IFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZVJlYWRPbmx5SGFuZGxlc0ZvckZpbGVzKCJXZWJQYWdlUHJveHk6OmRpZENo
b29zZUZpbGVzRm9yT3BlblBhbmVsV2l0aERpc3BsYXlTdHJpbmdBbmRJY29uIl9zLCBmaWxlVVJM
cyk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJv
bU9wZW5QYW5lbChXVEZNb3ZlKHNhbmRib3hFeHRlbnNpb25IYW5kbGVzKSkpOwogI2VuZGlmCiAK
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZnJvbnRib2FyZFNlcnZpY2VzU2FuZGJveEV4
dGVuc2lvbiwgaWNvblNlcnZpY2VzU2FuZGJveEV4dGVuc2lvbjsKQEAgLTY2NTcsMTkgKzY2NTMs
OCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGZpbGVVUkxzKQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUo
U0FOREJPWF9FWFRFTlNJT05TKQotICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNh
bmRib3hFeHRlbnNpb25IYW5kbGVzOwotICAgIHNhbmRib3hFeHRlbnNpb25IYW5kbGVzLmFsbG9j
YXRlKGZpbGVVUkxzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlVVJM
cy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIGNyZWF0ZWRFeHRlbnNpb24gPSBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZmlsZVVSTHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5LCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlc1tpXSk7Ci0gICAgICAgIGlmICgh
Y3JlYXRlZEV4dGVuc2lvbikgewotICAgICAgICAgICAgLy8gVGhpcyBjYW4gbGVnaXRpbWF0ZWx5
IGZhaWwgaWYgYSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgZmlsZSBpcyBkZWxldGVkIGFmdGVy
IHRoZSBmaWxlIHdhcyBjaG9zZW4uCi0gICAgICAgICAgICAvLyBXZSBhbHNvIGhhdmUgcmVwb3J0
cyBvZiBjYXNlcyB3aGVyZSB0aGlzIGxpa2VseSBmYWlscyBmb3Igc29tZSB1bmtub3duIHJlYXNv
biwgPHJkYXI6Ly9wcm9ibGVtLzEwMTU2NzEwPi4KLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygi
V2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbDogY291bGQgbm90IGNyZWF0
ZSBhIHNhbmRib3ggZXh0ZW5zaW9uIGZvciAnJXMnXG4iLCBmaWxlVVJMc1tpXS51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RXh0ZW5kU2FuZGJveEZvckZpbGVzRnJvbU9wZW5QYW5lbChz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlcykpOworICAgIGF1dG8gc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZXMgPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVSZWFkT25seUhhbmRsZXNGb3JGaWxlcygiV2Vi
UGFnZVByb3h5OjpkaWRDaG9vc2VGaWxlc0Zvck9wZW5QYW5lbCJfcywgZmlsZVVSTHMpOworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFu
ZWwoV1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uSGFuZGxlcykpKTsKICNlbmRpZgogCiAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6RGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWwoZmlsZVVSTHMp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggYzVhYTc1MWFiN2Y4ZmM4
ZjBmMGMwOGU4YjViNjkyODczODM5ZTEwYS4uMjFmOTg3ZGNjYWViYzQ0Y2UzMTI3YTg1NDcyYWYx
YTQyZmVjN2Y5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTE0OSwx
MCArMTQ5LDcgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1lc0ZvclR5
cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QKICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJvYXJk
TmFtZSwgcGFzdGVib2FyZFR5cGUpLAogICAgICAgICBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkocGF0aG5hbWVzLCBzYW5k
Ym94RXh0ZW5zaW9uc0hhbmRsZUFycmF5KSwgMCk7CiAgICAgQVNTRVJUKHBhdGhuYW1lcy5zaXpl
KCkgPT0gc2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheS5zaXplKCkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheS5zaXplKCk7IGkrKykg
ewotICAgICAgICBpZiAoYXV0byBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUo
V1RGTW92ZShzYW5kYm94RXh0ZW5zaW9uc0hhbmRsZUFycmF5W2ldKSkpCi0gICAgICAgICAgICBl
eHRlbnNpb24tPmNvbnN1bWVQZXJtYW5lbnRseSgpOwotICAgIH0KKyAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkoc2FuZGJveEV4dGVuc2lvbnNIYW5kbGVBcnJheSk7CiB9
CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0ZvclR5cGUoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOGIzYzA2NDk4
Yzc0ZDQzZTAzYzM1NGVjYTBlYjU2Zjc3ZThhYzUzZC4uM2VkMDI5M2E5ODg0NmFjYTAyNzZmMjYy
ZGQ2OTY3OWY3ZDA1ODlkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKQEAgLTQyNzcsMTIgKzQyNzcsMTAgQEAgdm9pZCBXZWJQYWdlOjpkaWRDYW5j
ZWxGb3JPcGVuUGFuZWwoKQogI2lmIEVOQUJMRShTQU5EQk9YX0VYVEVOU0lPTlMpCiB2b2lkIFdl
YlBhZ2U6OmV4dGVuZFNhbmRib3hGb3JGaWxlc0Zyb21PcGVuUGFuZWwoU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlQXJyYXkmJiBoYW5kbGVzKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aGFuZGxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBib29sIHJlc3VsdCA9IFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShoYW5kbGVzW2ldKTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgcmVwb3J0cyBvZiBjYXNlcyB3aGVyZSB0aGlz
IGZhaWxzIGZvciBzb21lIHVua25vd24gcmVhc29uLCA8cmRhcjovL3Byb2JsZW0vMTAxNTY3MTA+
LgotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJXZWJQYWdlOjpleHRlbmRTYW5kYm94Rm9yRmls
ZUZyb21PcGVuUGFuZWwoKTogQ291bGQgbm90IGNvbnN1bWUgYSBzYW5kYm94IGV4dGVuc2lvbiIp
OwotICAgICAgICB9CisgICAgYm9vbCByZXN1bHQgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1l
UGVybWFuZW50bHkoaGFuZGxlcyk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgLy8gV2Ug
aGF2ZSByZXBvcnRzIG9mIGNhc2VzIHdoZXJlIHRoaXMgZmFpbHMgZm9yIHNvbWUgdW5rbm93biBy
ZWFzb24sIDxyZGFyOi8vcHJvYmxlbS8xMDE1NjcxMD4uCisgICAgICAgIFdURkxvZ0Fsd2F5cygi
V2ViUGFnZTo6ZXh0ZW5kU2FuZGJveEZvckZpbGVGcm9tT3BlblBhbmVsKCk6IENvdWxkIG5vdCBj
b25zdW1lIGEgc2FuZGJveCBleHRlbnNpb24iKTsKICAgICB9CiB9CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA2ODEwNGJkZmQyOTk0MDc2MTM2MWFl
Y2NiNmI2NGI5Y2Y0YTEwYTdhLi41OTM2NmMwYjJlZTY1MDE3NzQxNzk3YjI0ZDdiMGM5YzAzMzA0
ZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0zNzMsOCAr
MzczLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKICAgICAgICAgbWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmluc3RhbGwoKTsKICAgICB9CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9
IHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzLnNpemUoKTsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5
KHBhcmFtZXRlcnMuYWRkaXRpb25hbFNhbmRib3hFeHRlbnNpb25IYW5kbGVzW2ldKTsKKyAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5hZGRpdGlvbmFs
U2FuZGJveEV4dGVuc2lvbkhhbmRsZXMpOwogCiAgICAgaWYgKCFwYXJhbWV0ZXJzLmluamVjdGVk
QnVuZGxlUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIG1faW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6Y3JlYXRlKHBhcmFtZXRlcnMsIHRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHMocGFy
YW1ldGVycy5pbml0aWFsaXphdGlvblVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQppbmRleCA4
NzFiZGQ0ZmY5YTk2OTQ3YTc1YTM1Njk5OGY0MjI2OWYxNmQyMzYyLi40ZjU1YjBjNmQwYTJiYWNh
MmZlNDM2Mjk5OWE1ZWYxYmQ1ZjkxNDY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTMyMywxMSArMzIzLDggQEAgdm9pZCBX
ZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMmIHBhcmEKICAgICBpZiAocGFyYW1ldGVycy5kaWFnbm9zdGljc0V4dGVuc2lv
bkhhbmRsZSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KCpw
YXJhbWV0ZXJzLmRpYWdub3N0aWNzRXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBzaXplID0gcGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXNbaV0pOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBwYXJhbWV0ZXJzLmR5bmFtaWNJT0tpdEV4dGVu
c2lvbkhhbmRsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5keW5hbWljSU9LaXRFeHRlbnNpb25I
YW5kbGVzW2ldKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFy
YW1ldGVycy5keW5hbWljTWFjaEV4dGVuc2lvbkhhbmRsZXMpOworICAgIFNhbmRib3hFeHRlbnNp
b246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmR5bmFtaWNJT0tpdEV4dGVuc2lvbkhh
bmRsZXMpOwogI2VuZGlmCiAgICAgCiAgICAgaWYgKHBhcmFtZXRlcnMubmVIZWxwZXJFeHRlbnNp
b25IYW5kbGUpCkBAIC0zNDQsMTYgKzM0MSwxMSBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYQog
I2VuZGlmCiAKICAgICAvLyBGSVhNRSgyMDc3MTYpOiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSBy
ZW1vdmVkIHdoZW4gdGhlIEdQVSBwcm9jZXNzIGlzIGNvbXBsZXRlLgotICAgIGZvciAoc2l6ZV90
IGkgPSAwLCBzaXplID0gcGFyYW1ldGVycy5tZWRpYUV4dGVuc2lvbkhhbmRsZXMuc2l6ZSgpOyBp
IDwgc2l6ZTsgKytpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50
bHkocGFyYW1ldGVycy5tZWRpYUV4dGVuc2lvbkhhbmRsZXNbaV0pOworICAgIFNhbmRib3hFeHRl
bnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLm1lZGlhRXh0ZW5zaW9uSGFuZGxl
cyk7CiAKICNpZiBFTkFCTEUoQ0ZQUkVGU19ESVJFQ1RfTU9ERSkKICAgICBpZiAocGFyYW1ldGVy
cy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwYXJhbWV0ZXJzLnByZWZlcmVuY2VzRXh0ZW5zaW9uSGFuZGxlcy0+c2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGJvb2wgb2sgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVy
bWFuZW50bHkocGFyYW1ldGVycy5wcmVmZXJlbmNlc0V4dGVuc2lvbkhhbmRsZXMtPmF0KGkpKTsK
LSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLSAgICAgICAgfQotCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseSgqcGFyYW1ldGVycy5wcmVmZXJl
bmNlc0V4dGVuc2lvbkhhbmRsZXMpOwogICAgICAgICBfQ0ZQcmVmc1NldERpcmVjdE1vZGVFbmFi
bGVkKGZhbHNlKTsKICAgICB9CiAjZW5kaWYKQEAgLTk2MywxMSArOTU1LDcgQEAgdm9pZCBXZWJQ
cm9jZXNzOjpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoY29uc3QgU3RyaW5nJiBkb21haW4sIGNv
bnN0IFN0cmluZyYga2UKIAogdm9pZCBXZWJQcm9jZXNzOjp1bmJsb2NrUHJlZmVyZW5jZVNlcnZp
Y2UoU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmJiBoYW5kbGVBcnJheSkKIHsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGhhbmRsZUFycmF5LnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGJvb2wgb2sgPSBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkoaGFuZGxlQXJy
YXlbaV0pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0gICAgfQotCisgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KGhhbmRsZUFycmF5KTsKICAgICBfQ0ZQ
cmVmc1NldERpcmVjdE1vZGVFbmFibGVkKGZhbHNlKTsKIH0KICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>