<?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>129812</bug_id>
          
          <creation_ts>2014-03-06 12:12:44 -0800</creation_ts>
          <short_desc>[Mac] Don&apos;t perform a round-trip through WebProcess before interpreting key events</short_desc>
          <delta_ts>2014-03-21 09:50:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jeffm</cc>
    
    <cc>kangil.han</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>987803</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-06 12:12:44 -0800</bug_when>
    <thetext>WebKit2 currently sends key events to WebProcess, which immediately bounces them back for -interpretKeyEvents:. This is unnecessarily complicated. Also, this means that keyboard and mouse events are not handled as part of the same event stream, which is not great.

We capture all commands that result from key interpretation for later execution anyway, so it&apos;s doesn&apos;t matter when we do this. Input method actions are not captured, but they happen before DOM key event dispatch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987877</commentid>
    <comment_count>1</comment_count>
      <attachid>226044</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-06 14:55:02 -0800</bug_when>
    <thetext>Created attachment 226044
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987980</commentid>
    <comment_count>2</comment_count>
      <attachid>226044</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-03-06 18:11:42 -0800</bug_when>
    <thetext>Comment on attachment 226044
proposed patch

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

&gt; Source/WebCore/dom/KeyboardEvent.cpp:105
&gt; +#if USE(APPKIT)

USE(APPKIT) here but PLATFORM(COCOA) in the header?

&gt; Source/WebKit2/Shared/NativeWebKeyboardEvent.h:63
&gt; +    NativeWebKeyboardEvent(NSEvent *, BOOL handledByInputMethod, const Vector&lt;WebCore::KeypressCommand&gt;&amp;);

Why not bool instead of BOOL?

&gt; Source/WebKit2/Shared/WebEvent.h:223
&gt; +#if USE(APPKIT)
&gt; +    WebKeyboardEvent(Type, const String&amp; text, const String&amp; unmodifiedText, const String&amp; keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool handledByInputMethod, const Vector&lt;WebCore::KeypressCommand&gt;&amp;, bool isAutoRepeat, bool isKeypad, bool isSystemKey, Modifiers, double timestamp);
&gt; +#else
&gt;      WebKeyboardEvent(Type, const String&amp; text, const String&amp; unmodifiedText, const String&amp; keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool isAutoRepeat, bool isKeypad, bool isSystemKey, Modifiers, double timestamp);
&gt; +#endif

Should we do something with a structure instead of these ridiculously long argument lists?

&gt; Source/WebKit2/Shared/WebKeyboardEvent.cpp:39
&gt; +#if USE(APPKIT)
&gt; +WebKeyboardEvent::WebKeyboardEvent(Type type, const String&amp; text, const String&amp; unmodifiedText, const String&amp; keyIdentifier, int windowsVirtualKeyCode, int nativeVirtualKeyCode, int macCharCode, bool handledByInputMethod, const Vector&lt;WebCore::KeypressCommand&gt;&amp; commands, bool isAutoRepeat, bool isKeypad, bool isSystemKey, Modifiers modifiers, double timestamp)

Missing blank line here.

&gt; Source/WebKit2/Shared/WebKeyboardEvent.cpp:72
&gt;  }
&gt; +#endif

Missing blank line here.

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:348
&gt; +        _data-&gt;_page-&gt;setInitialFocus(direction == NSSelectingNext, keyboardEvent != nil, NativeWebKeyboardEvent(keyboardEvent, false, Vector&lt;KeypressCommand&gt;()));

This false/empty-vector stuff is a bit ugly. Should these be default argument values instead perhaps?

&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1310
&gt; +    if ([[event charactersIgnoringModifiers] isEqualToString:@&quot;\e&quot;] &amp;&amp; !([event modifierFlags] &amp; NSDeviceIndependentModifierFlagsMask))
&gt; +        return [super performKeyEquivalent:event];

Hard-coding a specific key string and modifiers seems a more fragile rule than what the old code had. Is there some way to handle this without that?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:240
&gt;      bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);

Seems like this should take a reference, not a pointer. Next time, maybe.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:213
&gt; +    const Vector&lt;KeypressCommand&gt;&amp; commands = event-&gt;keypressCommands();

I think this would read better with auto.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:219
&gt; +    // Don&apos;t handle Esc while handling keydown event, we need to dispatch a keypress first.
&gt; +    if (platformEvent-&gt;type() != PlatformEvent::Char &amp;&amp; event-&gt;windowsVirtualKeyCode() == VK_ESCAPE &amp;&amp; commands.size() == 1 &amp;&amp; commandNameForSelectorName(commands[0].commandName) == &quot;cancelOperation&quot;)
&gt;          return false;

Really unfortunate to have this key hard-coded. Also seems strange to convert the selector name into a command name just to do == on it.

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:231
&gt; +    for (size_t i = 0; i &lt; commands.size(); ++i) {
&gt; +        if (frame-&gt;editor().command(commandNameForSelectorName(commands[i].commandName)).isTextInsertion())
&gt; +            haveTextInsertionCommands = true;
&gt; +    }

This should be a C++ for loop:

    for (auto&amp; command : commands) {
        if (frame-&gt;editor().command(commandNameForSelectorName(command.commandName)).isTextInsertion())
            haveTextInsertionCommands = true;
    }

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:294
&gt; +        handled = frame.editor().insertText(text, 0);

Can this be nullptr instead of 0?

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:314
&gt; +    handled = frame.editor().insertDictatedText(text, dictationAlternativeLocations, 0);

Can this be nullptr instead of 0?

&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:428
&gt; +    handled = executeKeypressCommandsInternal(commands, 0);

Can this be nullptr instead of 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988264</commentid>
    <comment_count>3</comment_count>
      <attachid>226044</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-07 12:27:01 -0800</bug_when>
    <thetext>Comment on attachment 226044
proposed patch

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

Will address all other comments, and fix the builds.

&gt;&gt; Source/WebKit2/Shared/WebEvent.h:223
&gt;&gt; +#endif
&gt; 
&gt; Should we do something with a structure instead of these ridiculously long argument lists?

Maybe! I&apos;m not sure if I fully understand the design here, why do we have events and event factories?

&gt;&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:348
&gt;&gt; +        _data-&gt;_page-&gt;setInitialFocus(direction == NSSelectingNext, keyboardEvent != nil, NativeWebKeyboardEvent(keyboardEvent, false, Vector&lt;KeypressCommand&gt;()));
&gt; 
&gt; This false/empty-vector stuff is a bit ugly. Should these be default argument values instead perhaps?

I&apos;d like to keep it ugly for now to maybe pass something more appropriate than an event. It&apos;s not clear why setInitialFocus needs a keyboard event.

&gt;&gt; Source/WebKit2/UIProcess/API/mac/WKView.mm:1310
&gt;&gt; +        return [super performKeyEquivalent:event];
&gt; 
&gt; Hard-coding a specific key string and modifiers seems a more fragile rule than what the old code had. Is there some way to handle this without that?

I think that it&apos;s more accurate too - the Esc key is specifically what&apos;s passed to performKeyEquivalent: from AppKit as an exception, there is no generality here.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:240
&gt;&gt;      bool handleEditingKeyboardEvent(WebCore::KeyboardEvent*);
&gt; 
&gt; Seems like this should take a reference, not a pointer. Next time, maybe.

Yes, there is a good amount of cleanup to do, especially once all platforms follow suit.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:213
&gt;&gt; +    const Vector&lt;KeypressCommand&gt;&amp; commands = event-&gt;keypressCommands();
&gt; 
&gt; I think this would read better with auto.

I prefer to keep the type, I like to see what my variables actually are.

&gt;&gt; Source/WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:219
&gt;&gt;          return false;
&gt; 
&gt; Really unfortunate to have this key hard-coded. Also seems strange to convert the selector name into a command name just to do == on it.

Again, I think that this is the correct way to handle the Esc key. An alternative would be to add a CancelOperation EditorCommand, and mark it as text insertion command, but that would have its own downsides:

1. That would be a hack, as it&apos;s not really a text insertion command, despite the need to dispatch keypress event.

2. We would dispatch key press for Cmd+period, and theoretically for any user defined key bindings that generate cancelOperation:, which would be wrong.

Calling commandNameForSelectorName is silly indeed. I did this because KeypressCommand.commandName is poorly defined, it may be either a selector or a command name, and commandNameForSelectorName normalizes that. This should be cleaned up separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988270</commentid>
    <comment_count>4</comment_count>
      <attachid>226148</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-07 12:34:27 -0800</bug_when>
    <thetext>Created attachment 226148
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988462</commentid>
    <comment_count>5</comment_count>
      <attachid>226148</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-03-07 17:58:53 -0800</bug_when>
    <thetext>Comment on attachment 226148
proposed patch

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

&gt; Source/WebCore/dom/KeyboardEvent.h:102
&gt; +    const Vector&lt;KeypressCommand&gt;&amp; keypressCommands() const { return m_keypressCommands; }
&gt; +
&gt; +    // This is only needed for WebKit1 - with WebKit2, the commands are delivered from UI process.
&gt;      Vector&lt;KeypressCommand&gt;&amp; keypressCommands() { return m_keypressCommands; }

I just noticed the strange fact that the const overload for this is in a different paragraph from the non-const overload. You should fix that.

&gt; Source/WebCore/platform/KeypressCommand.h:34
&gt; +#if PLATFORM(COCOA)

Should this wrap the whole file instead of just the struct?

&gt; Source/WebCore/platform/KeypressCommand.h:45
&gt; +
&gt; +

Extra blank space here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988471</commentid>
    <comment_count>6</comment_count>
      <attachid>226148</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-07 18:44:55 -0800</bug_when>
    <thetext>Comment on attachment 226148
proposed patch

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

&gt;&gt; Source/WebCore/dom/KeyboardEvent.h:102
&gt;&gt;      Vector&lt;KeypressCommand&gt;&amp; keypressCommands() { return m_keypressCommands; }
&gt; 
&gt; I just noticed the strange fact that the const overload for this is in a different paragraph from the non-const overload. You should fix that.

This is intentional - as a comment above states, the non-const override is only needed for ports that still interpret key events after creating them.

I should restate the comment in a clearer way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>988751</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-09 15:50:38 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/r165356&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993151</commentid>
    <comment_count>8</comment_count>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2014-03-21 09:44:39 -0700</bug_when>
    <thetext>This appears to have caused &lt;rdar://problem/16387169&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993154</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-21 09:50:20 -0700</bug_when>
    <thetext>Yes, there were two or three regressions from this change, all known ones fixed already.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226044</attachid>
            <date>2014-03-06 14:55:02 -0800</date>
            <delta_ts>2014-03-07 12:34:27 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>InterpretKeyEvents.txt</filename>
            <type>text/plain</type>
            <size>47549</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE0LTAzLTA2ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIERvbid0IHBlcmZv
cm0gYSByb3VuZC10cmlwIHRocm91Z2ggV2ViUHJvY2VzcyBiZWZvcmUgaW50ZXJwcmV0aW5nIGtl
eSBldmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyOTgxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIHNpZ25pZmljYW50IGJlaGF2aW9yIGNoYW5nZXMgZXhwZWN0ZWQsIGV4Y2VwdCBmb3IgRXNj
IGtleSBwcm9jZXNzaW5nLCB3aGljaCBub3cKKyAgICAgICAgZGlzcGF0Y2hlcyBhIGtleXByZXNz
IGJlZm9yZSBleGVjdXRpbmcgaXRzIGRlZmF1bHQgYWN0aW9uLgorCisgICAgICAgICogZG9tL0tl
eWJvYXJkRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudDo6S2V5Ym9h
cmRFdmVudCk6CisgICAgICAgICogZG9tL0tleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OktleWJvYXJkRXZlbnQ6OmhhbmRsZWRCeUlucHV0TWV0aG9kKToKKyAgICAgICAgKFdlYkNv
cmU6OktleWJvYXJkRXZlbnQ6OmtleXByZXNzQ29tbWFuZHMpOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXli
b2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1LZXlib2FyZEV2ZW50OjpoYW5kbGVkQnlJbnB1dE1ldGhvZCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmNvbW1hbmRzKToKKyAgICAgICAgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50IG5vdyBjYXJyaWVzIHJlc3VsdHMgb2YgaW50ZXJwcmV0aW5nIHRoZSBldmVu
dCBieSBBcHBLaXQuIFRoaXMKKyAgICAgICAgaXMgbG9naWNhbGx5IG5vdCBtdWNoIGRpZmZlcmVu
dCBmcm9tIGNhcnJ5aW5nIGNoYXJjb2RlLCBhbmQgaXMgc2ltaWxhciB0byB3aGF0IEd0aworICAg
ICAgICBkb2VzIGZvciBpbnB1dCBtZXRob2RzLgorICAgICAgICBLZXlib2FyZEV2ZW50IGFscmVh
ZHkgaGFkIGtleXByZXNzIGNvbW1hbmRzLCB3aGljaCB3ZXJlIGFkZGVkIHRvIGl0IGFmdGVyIGNv
bnN0cnVjdGlvbi4KKyAgICAgICAgSXQncyBzdGlsbCBwb3NzaWJsZSBmb3IgV2ViS2l0MSwgd2hp
bGUgd2l0aCBXZWJLaXQyLCB0aGV5IGFyZSBwcm92aWRlZCBhdCBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgdGltZS4gVGhlIGV2ZW50IG5vdyBhbHNvIGhhcyBhIGJvb2xlYW4gZm9yIHdoZXRoZXIgSU0g
aGFuZGxlZCBpdCBhbHJlYWR5LgorCiAyMDE0LTAzLTA1ICBKb24gSG9uZXljdXR0ICA8amhvbmV5
Y3V0dEBhcHBsZS5jb20+CiAKICAgICAgICAgSW52YWxpZCBjYXN0IGluIFdlYkNvcmU6OlJlbmRl
ckxheWVyOjpGaWx0ZXJJbmZvOjp1cGRhdGVSZWZlcmVuY2VGaWx0ZXJDbGllbnRzKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAJKHJldmlzaW9uIDE2NTIwNikKKysrIFNv
dXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAy
LDYgKzEwMiw5IEBAIEtleWJvYXJkRXZlbnRJbml0OjpLZXlib2FyZEV2ZW50SW5pdCgpCiBLZXli
b2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KCkKICAgICA6IG1fbG9jYXRpb24oRE9NX0tFWV9MT0NB
VElPTl9TVEFOREFSRCkKICAgICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCisjaWYgVVNFKEFQUEtJ
VCkKKyAgICAsIG1faGFuZGxlZEJ5SW5wdXRNZXRob2QoZmFsc2UpCisjZW5kaWYKIHsKIH0KIApA
QCAtMTEyLDYgKzExNSwxMCBAQCBLZXlib2FyZEV2ZW50OjpLZXlib2FyZEV2ZW50KGNvbnN0IFBs
YXRmCiAgICAgLCBtX2tleUlkZW50aWZpZXIoa2V5LmtleUlkZW50aWZpZXIoKSkKICAgICAsIG1f
bG9jYXRpb24oa2V5TG9jYXRpb25Db2RlKGtleSkpCiAgICAgLCBtX2FsdEdyYXBoS2V5KGZhbHNl
KQorI2lmIFVTRShBUFBLSVQpCisgICAgLCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kKGtleS5oYW5k
bGVkQnlJbnB1dE1ldGhvZCgpKQorICAgICwgbV9rZXlwcmVzc0NvbW1hbmRzKGtleS5jb21tYW5k
cygpKQorI2VuZGlmCiB7CiB9CiAKQEAgLTEyMCw2ICsxMjcsOSBAQCBLZXlib2FyZEV2ZW50OjpL
ZXlib2FyZEV2ZW50KGNvbnN0IEF0b21pCiAgICAgLCBtX2tleUlkZW50aWZpZXIoaW5pdGlhbGl6
ZXIua2V5SWRlbnRpZmllcikKICAgICAsIG1fbG9jYXRpb24oaW5pdGlhbGl6ZXIubG9jYXRpb24p
CiAgICAgLCBtX2FsdEdyYXBoS2V5KGZhbHNlKQorI2lmIFVTRShBUFBLSVQpCisgICAgLCBtX2hh
bmRsZWRCeUlucHV0TWV0aG9kKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0tleWJvYXJkRXZlbnQuaAkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL0tleWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSwxMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBpbnQgd2hpY2goKSBjb25zdCBvdmVycmlkZTsKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGlzIG5lZWQgdG8gc3RvcmUga2V5
cHJlc3MgY29tbWFuZCBpbmZvIG9uIHRoZSBNYWMuCisgICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1l
dGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlZEJ5SW5wdXRNZXRob2Q7IH0KKyAgICBjb25z
dCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYga2V5cHJlc3NDb21tYW5kcygpIGNvbnN0IHsgcmV0
dXJuIG1fa2V5cHJlc3NDb21tYW5kczsgfQorCisgICAgLy8gVGhpcyBpcyBvbmx5IG5lZWRlZCBm
b3IgV2ViS2l0MSAtIHdpdGggV2ViS2l0MiwgdGhlIGNvbW1hbmRzIGFyZSBkZWxpdmVyZWQgZnJv
bSBVSSBwcm9jZXNzLgogICAgIFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+JiBrZXlwcmVzc0NvbW1h
bmRzKCkgeyByZXR1cm4gbV9rZXlwcmVzc0NvbW1hbmRzOyB9CiAjZW5kaWYKIApAQCAtMTIxLDYg
KzEyNCw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBDb21tYW5k
cyB0aGF0IHdlcmUgc2VudCBieSBBcHBLaXQgd2hlbiBpbnRlcnByZXRpbmcgdGhlIGV2ZW50LiBE
b2Vzbid0IGluY2x1ZGUgaW5wdXQgbWV0aG9kIGNvbW1hbmRzLgorICAgIGJvb2wgbV9oYW5kbGVk
QnlJbnB1dE1ldGhvZDsKICAgICBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiBtX2tleXByZXNzQ29t
bWFuZHM7CiAjZW5kaWYKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpZm5kZWYgUGxhdGZvcm1LZXlib2FyZEV2ZW50X2gKICNkZWZpbmUgUGxh
dGZvcm1LZXlib2FyZEV2ZW50X2gKIAorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUV2ZW50LmgiCiAjaW5jbHVkZSA8d3RmL1dpbmRvd3NFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTYwLDYgKzYxLDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSgwKQogICAg
ICAgICAgICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKDApCiAgICAgICAgICAgICAsIG1fbWFj
Q2hhckNvZGUoMCkKKyNpZiBVU0UoQVBQS0lUKQorICAgICAgICAgICAgLCBtX2hhbmRsZWRCeUlu
cHV0TWV0aG9kKGZhbHNlKQorI2VuZGlmCiAgICAgICAgICAgICAsIG1fYXV0b1JlcGVhdChmYWxz
ZSkKICAgICAgICAgICAgICwgbV9pc0tleXBhZChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc1N5
c3RlbUtleShmYWxzZSkKQEAgLTc3LDYgKzgxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzVmlydHVhbEtleUNvZGUp
CiAgICAgICAgICAgICAsIG1fbmF0aXZlVmlydHVhbEtleUNvZGUobmF0aXZlVmlydHVhbEtleUNv
ZGUpCiAgICAgICAgICAgICAsIG1fbWFjQ2hhckNvZGUobWFjQ2hhckNvZGUpCisjaWYgVVNFKEFQ
UEtJVCkKKyAgICAgICAgICAgICwgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZChmYWxzZSkKKyNlbmRp
ZgogICAgICAgICAgICAgLCBtX2F1dG9SZXBlYXQoaXNBdXRvUmVwZWF0KQogICAgICAgICAgICAg
LCBtX2lzS2V5cGFkKGlzS2V5cGFkKQogICAgICAgICAgICAgLCBtX2lzU3lzdGVtS2V5KGlzU3lz
dGVtS2V5KQpAQCAtMTA4LDYgKzExNSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlVmlydHVh
bEtleUNvZGU7IH0KICAgICAgICAgaW50IG1hY0NoYXJDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9t
YWNDaGFyQ29kZTsgfQogCisjaWYgVVNFKEFQUEtJVCkKKyAgICAgICAgYm9vbCBoYW5kbGVkQnlJ
bnB1dE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlZEJ5SW5wdXRNZXRob2Q7IH0KKyAg
ICAgICAgY29uc3QgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb21tYW5kczsgfQorI2VuZGlmCisKICAgICAgICAgYm9vbCBpc0F1dG9SZXBlYXQo
KSBjb25zdCB7IHJldHVybiBtX2F1dG9SZXBlYXQ7IH0KICAgICAgICAgYm9vbCBpc0tleXBhZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNLZXlwYWQ7IH0KICAgICAgICAgYm9vbCBpc1N5c3RlbUtleSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1LZXk7IH0KQEAgLTE1MCw2ICsxNjIsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbV93aW5kb3dzVmlydHVhbEtleUNvZGU7CiAg
ICAgICAgIGludCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlOwogICAgICAgICBpbnQgbV9tYWNDaGFy
Q29kZTsKKyNpZiBVU0UoQVBQS0lUKQorICAgICAgICBib29sIG1faGFuZGxlZEJ5SW5wdXRNZXRo
b2Q7CisgICAgICAgIFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+IG1fY29tbWFuZHM7CisjZW5kaWYK
ICAgICAgICAgYm9vbCBtX2F1dG9SZXBlYXQ7CiAgICAgICAgIGJvb2wgbV9pc0tleXBhZDsKICAg
ICAgICAgYm9vbCBtX2lzU3lzdGVtS2V5OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTY1MjA2
KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
ODUgQEAKKzIwMTQtMDMtMDYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CisK
KyAgICAgICAgW01hY10gRG9uJ3QgcGVyZm9ybSBhIHJvdW5kLXRyaXAgdGhyb3VnaCBXZWJQcm9j
ZXNzIGJlZm9yZSBpbnRlcnByZXRpbmcga2V5IGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5ODEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJFdmVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJL
ZXlib2FyZEV2ZW50OjpoYW5kbGVkQnlJbnB1dE1ldGhvZCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YktleWJvYXJkRXZlbnQ6OmNvbW1hbmRzKToKKyAgICAgICAgKiBTaGFyZWQvV2ViRXZlbnRDb252
ZXJzaW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0MlBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6V2ViS2l0MlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICogU2hhcmVkL1dlYktl
eWJvYXJkRXZlbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50OjpXZWJL
ZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudDo6fldlYktl
eWJvYXJkRXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50OjplbmNvZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50OjpkZWNvZGUpOgorICAgICAgICAq
IFNoYXJlZC9tYWMvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1hYy5tbToKKyAgICAgICAgKFdlYktp
dDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudCk6CisgICAg
ICAgICogU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkuaDoKKyAgICAgICAgKiBTaGFyZWQvbWFj
L1dlYkV2ZW50RmFjdG9yeS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRXZlbnRGYWN0b3J5Ojpj
cmVhdGVXZWJLZXlib2FyZEV2ZW50KToKKyAgICAgICAgS2V5Ym9hcmQgZXZlbnRzIG5vdyBjYXJy
eSByZXN1bHRzIG9mIGludGVycHJldGF0aW9uIHdpdGggdGhlbS4KKyAgICAgICAgSWRlYWxseSwg
bW91c2UgZXZlbnRzIHNob3VsZCBhbHNvIGhhdmUgYSBoYW5kbGVkQnlJbnB1dE1ldGhvZCBtZW1i
ZXIsIGJlY2F1c2UgSU1zCisgICAgICAgIGNhbiBoYW5kbGUgZXZlbnRzLCBidXQgdGhhdCBjYW4g
d2FpdCB1bnRpbCB3ZSBoYXZlIGFjdHVhbCBidWdzIGNhdXNlZCBieSBub3QgZGlhYmxpbmcKKyAg
ICAgICAgZGVmYXVsdCBwcm9jZXNzaW5nIGZvciB0aGVzZS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IGJlY29tZUZpcnN0UmVzcG9u
ZGVyXSk6IFVwZGF0ZWQgZm9yIG5ldyBOYXRpdmVXZWJLZXlib2FyZEV2ZW50IGNvbnRydWN0b3IK
KyAgICAgICAgc2lnbmF0dXJlLiBXZSBkb24ndCBpbnRlcnByZXQgdGhlIGV2ZW50IGluIHRoaXMg
Y29kZSBwYXRoLgorICAgICAgICAoLVtXS1ZpZXcgZG9Db21tYW5kQnlTZWxlY3RvcjpdKTogQWRk
ZWQgbG9nZ2luZy4KKyAgICAgICAgKC1bV0tWaWV3IHBlcmZvcm1LZXlFcXVpdmFsZW50Ol0pOiBS
ZWltcGxlbWVudGVkIEVzYyBhbmQgQ21kK3BlcmlvZCBoYW5kbGluZyB0byBhdm9pZAorICAgICAg
ICBpbmZpbml0ZSBsb29wcyBhbmQgcmUtZW50cmFuY3kuIFRoZXNlIHR3byB3b3JrIGluIGEgdW5p
cXVlIHdheSBpbiBBcHBLaXQuCisgICAgICAgIEludGVycHJldCBrZXkgZXZlbnQgYmVmb3JlIHNl
bmRpbmcgaXQgZG93biB0byBXZWJQcm9jZXNzLgorICAgICAgICAoLVtXS1ZpZXcga2V5VXA6XSk6
IEludGVycHJldCBrZXkgZXZlbnQgYmVmb3JlIHNlbmRpbmcgaXQgZG93biB0byBXZWJQcm9jZXNz
LgorICAgICAgICBXZSBuZWVkIHRvIHRlbGwgSU1zIGFib3V0IHRoZSBldmVudCwgYnV0IGtleSBi
aW5kaW5nIHByb2Nlc3NpbmcgaXMgbW9vdCwgYWxsIGNvbW1hbmRzCisgICAgICAgIGFyZSBleGVj
dXRlZCBvbiBrZXlkb3duLgorICAgICAgICAoLVtXS1ZpZXcga2V5RG93bjpdKTogSW50ZXJwcmV0
IHRoZSBldmVudC4KKyAgICAgICAgKC1bV0tWaWV3IGZsYWdzQ2hhbmdlZDpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dLVmlldyBfaW50ZXJwcmV0S2V5RXZlbnQ6c2F2aW5nQ29tbWFuZHNUbzpXZWJD
b3JlOjpdKTogQWRkZWQgYW4gYXNzZXJ0aW9uIGluCisgICAgICAgIGNvbnN1bWVkQnlJTSBjb2Rl
IHBhdGguCisgICAgICAgICgtW1dLVmlldyBfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3I6
XSk6IEFkZGVkIGxvZ2dpbmcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9t
YWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tOgorICAgICAgICBSZW1vdmVkIGludGVycHJldFF1ZXVlZEtleUV2ZW50L2ludGVy
cHJldEtleUV2ZW50LCBXZWJQcm9jZXNzIG5vIGxvbmdlciBhc2tzIFVJUHJvY2VzcyB0byBkbyB0
aGlzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViRWRpdG9y
Q2xpZW50SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUtl
eWJvYXJkRXZlbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkVkaXRvckNsaWVudE1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojpo
YW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojpo
YW5kbGVJbnB1dE1ldGhvZEtleWRvd24pOgorICAgICAgICBXZWJQYWdlOjpoYW5kbGVFZGl0aW5n
S2V5Ym9hcmRFdmVudCBpcyBub3cgb25lIGZ1bmN0aW9uIGluc3RlYWQgb2YgdHdvIHdpdGggYSBi
b29sZWFuCisgICAgICAgIHN3aXRjaCBiZXR3ZWVuIHR3byBiZWhhdmlvcnMuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6KFdlYktpdDo6V2ViUGFnZTo6V2ViUGFn
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgUmVt
b3ZlZCBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkLCBhcyB3ZSBubyBsb25nZXIgc2Vu
ZCB0aGUgZXZlbnQgZm9yIGludGVycHJldGF0aW9uLgorICAgICAgICBUaGlzIG1lYW5zIHRoYXQg
d2Ugc29tZXRpbWVzIGhhdmUgdG8gcGFzcyBhIG51bGwgZXZlbnQgZG93biB0byBXZWJDb3JlLCBi
dXQgSSB3YXNuJ3QKKyAgICAgICAgYWJsZSB0byBmaW5kIGFueSBiZWhhdmlvciBkaWZmZXJlbmNl
cyBmcm9tIHVzIGRvaW5nIHNvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tOiAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVu
dCk6CisgICAgICAgIEFkZGVkIGEgRklYTUUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmV4ZWN1dGVL
ZXlwcmVzc0NvbW1hbmRzSW50ZXJuYWwpOiBXaGVuIHdlIGRvbid0IGhhdmUgYW4gZXZlbnQsCisg
ICAgICAgIHVzZSBjdXJyZW50IGZyYW1lIGFzIGEgdGFyZ2V0LCBqdXN0IGxpa2UgaW5wdXQgbWV0
aG9kIG1lc3NhZ2VzIGRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVFZGl0aW5n
S2V5Ym9hcmRFdmVudCk6IFRoaXMgZnVuY3Rpb24gbm8gbG9uZ2VyIHNhdmVzIGNvbW1hbmRzLAor
ICAgICAgICBpdCBvbmx5IGludGVycHJldHMgdGhlbS4KKyAgICAgICAgQWRkZWQgYSBjaGVjayBm
b3IgRXNjLCBhcyB3ZSBkb24ndCB3YW50IHRvIGhhbmRsZSBpdCBpbiBrZXlkb3duIGV2ZW50IGhh
bmRsZXIuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omluc2VydFRleHQpOiBQYXNzIDAgaW5z
dGVhZCBvZiBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMpOiBEaXR0by4KKwogMjAxNC0wMy0wNiAg
Sm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IEV4cG9zZSB0aGUgY29uc29sZSBvYmplY3QgaW4gSlNDb250ZXh0cyB0byBpbnRlcmFj
dCB3aXRoIFdlYiBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVX
ZWJLZXlib2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05h
dGl2ZVdlYktleWJvYXJkRXZlbnQuaAkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYktp
dDIvU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NiArMzMsMTAgQEAKICNpZiBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
IE9CSkNfQ0xBU1MgTlNWaWV3OworCituYW1lc3BhY2UgV2ViQ29yZSB7CitzdHJ1Y3QgS2V5cHJl
c3NDb21tYW5kOworfQogI2VuZGlmCiAKICNpZiBQTEFURk9STShFRkwpCkBAIC01Niw3ICs2MCw3
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCA6IHB1
YmxpYyBXZWJLZXlib2FyZEV2ZW50IHsKIHB1YmxpYzoKICNpZiBVU0UoQVBQS0lUKQotICAgIE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQoTlNFdmVudCAqLCBOU1ZpZXcgKik7CisgICAgTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudChOU0V2ZW50ICosIEJPT0wgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAjZWxpZiBQTEFURk9STShHVEsp
CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
Jik7CiAgICAgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChHZGtFdmVudCosIGNvbnN0IFdlYkNvcmU6
OkNvbXBvc2l0aW9uUmVzdWx0cyYsIFdlYkNvcmU6Okd0a0lucHV0TWV0aG9kRmlsdGVyOjpFdmVu
dEZha2VkRm9yQ29tcG9zaXRpb24pOwpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50LmgJKHJl
dmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSwxMiBAQCBuYW1lc3BhY2UgSVBDIHsKICAgICBjbGFzcyBB
cmd1bWVudEVuY29kZXI7CiB9CiAKKyNpZiBVU0UoQVBQS0lUKQorbmFtZXNwYWNlIFdlYkNvcmUg
eworc3RydWN0IEtleXByZXNzQ29tbWFuZDsKK30KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgV2ViRXZlbnQgewpAQCAtMjA3LDkgKzIxMywxNCBAQCBwcml2YXRlOgogLy8g
RklYTUU6IE1vdmUgdGhpcyBjbGFzcyB0byBpdHMgb3duIGhlYWRlciBmaWxlLgogY2xhc3MgV2Vi
S2V5Ym9hcmRFdmVudCA6IHB1YmxpYyBXZWJFdmVudCB7CiBwdWJsaWM6Ci0gICAgV2ViS2V5Ym9h
cmRFdmVudCgpIHsgfQorICAgIFdlYktleWJvYXJkRXZlbnQoKTsKKyAgICB+V2ViS2V5Ym9hcmRF
dmVudCgpOwogCisjaWYgVVNFKEFQUEtJVCkKKyAgICBXZWJLZXlib2FyZEV2ZW50KFR5cGUsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVkVGV4dCwgY29uc3QgU3Ry
aW5nJiBrZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZl
VmlydHVhbEtleUNvZGUsIGludCBtYWNDaGFyQ29kZSwgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhv
ZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mLCBib29sIGlzQXV0b1Jl
cGVhdCwgYm9vbCBpc0tleXBhZCwgYm9vbCBpc1N5c3RlbUtleSwgTW9kaWZpZXJzLCBkb3VibGUg
dGltZXN0YW1wKTsKKyNlbHNlCiAgICAgV2ViS2V5Ym9hcmRFdmVudChUeXBlLCBjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFN0cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0cmluZyYga2V5
SWRlbnRpZmllciwgaW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxL
ZXlDb2RlLCBpbnQgbWFjQ2hhckNvZGUsIGJvb2wgaXNBdXRvUmVwZWF0LCBib29sIGlzS2V5cGFk
LCBib29sIGlzU3lzdGVtS2V5LCBNb2RpZmllcnMsIGRvdWJsZSB0aW1lc3RhbXApOworI2VuZGlm
CiAKICAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KICAg
ICBjb25zdCBTdHJpbmcmIHVubW9kaWZpZWRUZXh0KCkgY29uc3QgeyByZXR1cm4gbV91bm1vZGlm
aWVkVGV4dDsgfQpAQCAtMjE3LDYgKzIyOCwxMCBAQCBwdWJsaWM6CiAgICAgaW50MzJfdCB3aW5k
b3dzVmlydHVhbEtleUNvZGUoKSBjb25zdCB7IHJldHVybiBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29k
ZTsgfQogICAgIGludDMyX3QgbmF0aXZlVmlydHVhbEtleUNvZGUoKSBjb25zdCB7IHJldHVybiBt
X25hdGl2ZVZpcnR1YWxLZXlDb2RlOyB9CiAgICAgaW50MzJfdCBtYWNDaGFyQ29kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFjQ2hhckNvZGU7IH0KKyNpZiBVU0UoQVBQS0lUKQorICAgIGJvb2wgaGFu
ZGxlZEJ5SW5wdXRNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2hhbmRsZWRCeUlucHV0TWV0aG9k
OyB9CisgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRz
KCkgY29uc3QgeyByZXR1cm4gbV9jb21tYW5kczsgfQorI2VuZGlmCiAgICAgYm9vbCBpc0F1dG9S
ZXBlYXQoKSBjb25zdCB7IHJldHVybiBtX2lzQXV0b1JlcGVhdDsgfQogICAgIGJvb2wgaXNLZXlw
YWQoKSBjb25zdCB7IHJldHVybiBtX2lzS2V5cGFkOyB9CiAgICAgYm9vbCBpc1N5c3RlbUtleSgp
IGNvbnN0IHsgcmV0dXJuIG1faXNTeXN0ZW1LZXk7IH0KQEAgLTIzMyw2ICsyNDgsMTAgQEAgcHJp
dmF0ZToKICAgICBpbnQzMl90IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlOwogICAgIGludDMyX3Qg
bV9uYXRpdmVWaXJ0dWFsS2V5Q29kZTsKICAgICBpbnQzMl90IG1fbWFjQ2hhckNvZGU7CisjaWYg
VVNFKEFQUEtJVCkKKyAgICBib29sIG1faGFuZGxlZEJ5SW5wdXRNZXRob2Q7CisgICAgVmVjdG9y
PFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4gbV9jb21tYW5kczsKKyNlbmRpZgogICAgIGJvb2wg
bV9pc0F1dG9SZXBlYXQ7CiAgICAgYm9vbCBtX2lzS2V5cGFkOwogICAgIGJvb2wgbV9pc1N5c3Rl
bUtleTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudENvbnZlcnNpb24u
Y3BwCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRD
b252ZXJzaW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gd2ViRXZlbnQud2luZG93c1ZpcnR1
YWxLZXlDb2RlKCk7CiAgICAgICAgIG1fbmF0aXZlVmlydHVhbEtleUNvZGUgPSB3ZWJFdmVudC5u
YXRpdmVWaXJ0dWFsS2V5Q29kZSgpOwogICAgICAgICBtX21hY0NoYXJDb2RlID0gd2ViRXZlbnQu
bWFjQ2hhckNvZGUoKTsKKyNpZiBVU0UoQVBQS0lUKQorICAgICAgICBtX2hhbmRsZWRCeUlucHV0
TWV0aG9kID0gd2ViRXZlbnQuaGFuZGxlZEJ5SW5wdXRNZXRob2QoKTsKKyAgICAgICAgbV9jb21t
YW5kcyA9IHdlYkV2ZW50LmNvbW1hbmRzKCk7CisjZW5kaWYKICAgICAgICAgbV9hdXRvUmVwZWF0
ID0gd2ViRXZlbnQuaXNBdXRvUmVwZWF0KCk7CiAgICAgICAgIG1faXNLZXlwYWQgPSB3ZWJFdmVu
dC5pc0tleXBhZCgpOwogICAgICAgICBtX2lzU3lzdGVtS2V5ID0gd2ViRXZlbnQuaXNTeXN0ZW1L
ZXkoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAJ
KHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJLZXlib2FyZEV2
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDM1IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKIAorI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9h
cmRFdmVudC5oPgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAorV2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudCgpCit7Cit9
CisKKyNpZiBVU0UoQVBQS0lUKQorV2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudChU
eXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVkVGV4
dCwgY29uc3QgU3RyaW5nJiBrZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2Rl
LCBpbnQgbmF0aXZlVmlydHVhbEtleUNvZGUsIGludCBtYWNDaGFyQ29kZSwgYm9vbCBoYW5kbGVk
QnlJbnB1dE1ldGhvZCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNv
bW1hbmRzLCBib29sIGlzQXV0b1JlcGVhdCwgYm9vbCBpc0tleXBhZCwgYm9vbCBpc1N5c3RlbUtl
eSwgTW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKKyAgICA6IFdlYkV2ZW50
KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQorICAgICwgbV90ZXh0KHRleHQpCisgICAgLCBt
X3VubW9kaWZpZWRUZXh0KHVubW9kaWZpZWRUZXh0KQorICAgICwgbV9rZXlJZGVudGlmaWVyKGtl
eUlkZW50aWZpZXIpCisgICAgLCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSh3aW5kb3dzVmlydHVh
bEtleUNvZGUpCisgICAgLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKG5hdGl2ZVZpcnR1YWxLZXlD
b2RlKQorICAgICwgbV9tYWNDaGFyQ29kZShtYWNDaGFyQ29kZSkKKyAgICAsIG1faGFuZGxlZEJ5
SW5wdXRNZXRob2QoaGFuZGxlZEJ5SW5wdXRNZXRob2QpCisgICAgLCBtX2NvbW1hbmRzKGNvbW1h
bmRzKQorICAgICwgbV9pc0F1dG9SZXBlYXQoaXNBdXRvUmVwZWF0KQorICAgICwgbV9pc0tleXBh
ZChpc0tleXBhZCkKKyAgICAsIG1faXNTeXN0ZW1LZXkoaXNTeXN0ZW1LZXkpCit7CisgICAgQVNT
RVJUKGlzS2V5Ym9hcmRFdmVudFR5cGUodHlwZSkpOworfQorCisjZWxzZQorCiBXZWJLZXlib2Fy
ZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5cGUgdHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBj
b25zdCBTdHJpbmcmIHVubW9kaWZpZWRUZXh0LCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIs
IGludCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgaW50
IG1hY0NoYXJDb2RlLCBib29sIGlzQXV0b1JlcGVhdCwgYm9vbCBpc0tleXBhZCwgYm9vbCBpc1N5
c3RlbUtleSwgTW9kaWZpZXJzIG1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCkKICAgICA6IFdl
YkV2ZW50KHR5cGUsIG1vZGlmaWVycywgdGltZXN0YW1wKQogICAgICwgbV90ZXh0KHRleHQpCkBA
IC00NCw2ICs2OSwxMSBAQCBXZWJLZXlib2FyZEV2ZW50OjpXZWJLZXlib2FyZEV2ZW50KFR5cGUg
CiB7CiAgICAgQVNTRVJUKGlzS2V5Ym9hcmRFdmVudFR5cGUodHlwZSkpOwogfQorI2VuZGlmCisK
K1dlYktleWJvYXJkRXZlbnQ6On5XZWJLZXlib2FyZEV2ZW50KCkKK3sKK30KIAogdm9pZCBXZWJL
ZXlib2FyZEV2ZW50OjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CiB7CkBAIC01NSw2ICs4NSwxMCBAQCB2b2lkIFdlYktleWJvYXJkRXZlbnQ6OmVuY29kZShJUEM6
OkFyZ3VtCiAgICAgZW5jb2RlciA8PCBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZTsKICAgICBlbmNv
ZGVyIDw8IG1fbmF0aXZlVmlydHVhbEtleUNvZGU7CiAgICAgZW5jb2RlciA8PCBtX21hY0NoYXJD
b2RlOworI2lmIFVTRShBUFBLSVQpCisgICAgZW5jb2RlciA8PCBtX2hhbmRsZWRCeUlucHV0TWV0
aG9kOworICAgIGVuY29kZXIgPDwgbV9jb21tYW5kczsKKyNlbmRpZgogICAgIGVuY29kZXIgPDwg
bV9pc0F1dG9SZXBlYXQ7CiAgICAgZW5jb2RlciA8PCBtX2lzS2V5cGFkOwogICAgIGVuY29kZXIg
PDwgbV9pc1N5c3RlbUtleTsKQEAgLTc3LDYgKzExMSwxMiBAQCBib29sIFdlYktleWJvYXJkRXZl
bnQ6OmRlY29kZShJUEM6OkFyZ3VtCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHJlc3VsdC5tX21hY0NoYXJDb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OworI2lmIFVTRShBUFBLSVQpCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9oYW5k
bGVkQnlJbnB1dE1ldGhvZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWRlY29k
ZXIuZGVjb2RlKHJlc3VsdC5tX2NvbW1hbmRzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9pc0F1dG9SZXBlYXQpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubV9pc0tl
eXBhZCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL05hdGl2ZVdlYktleWJvYXJk
RXZlbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9OYXRp
dmVXZWJLZXlib2FyZEV2ZW50TWFjLm1tCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL05hdGl2ZVdlYktleWJvYXJkRXZlbnRNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDExICsyOSwxNCBAQAogI2lmIFVTRShBUFBLSVQpCiAKICNpbXBvcnQgIldlYkV2
ZW50RmFjdG9yeS5oIgorI2ltcG9ydCA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudDo6TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChOU0V2ZW50ICpldmVudCwgTlNWaWV3
ICp2aWV3KQotICAgIDogV2ViS2V5Ym9hcmRFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdl
YktleWJvYXJkRXZlbnQoZXZlbnQsIHZpZXcpKQorTmF0aXZlV2ViS2V5Ym9hcmRFdmVudDo6TmF0
aXZlV2ViS2V5Ym9hcmRFdmVudChOU0V2ZW50ICpldmVudCwgQk9PTCBoYW5kbGVkQnlJbnB1dE1l
dGhvZCwgY29uc3QgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzKQorICAgIDogV2Vi
S2V5Ym9hcmRFdmVudChXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoZXZl
bnQsIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb21tYW5kcykpCiAgICAgLCBtX25hdGl2ZUV2ZW50
KGV2ZW50KQogewogfQpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZh
Y3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50
RmFjdG9yeS5oCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYkV2ZW50RmFjdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogY2xhc3MgV2ViRXZlbnRGYWN0b3J5IHsKIHB1YmxpYzoKICNpZiBVU0Uo
QVBQS0lUKQotICAgIHN0YXRpYyBXZWJNb3VzZUV2ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoTlNF
dmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93Vmlldyk7Ci0gICAgc3RhdGljIFdlYldoZWVsRXZl
bnQgY3JlYXRlV2ViV2hlZWxFdmVudChOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3
KTsKLSAgICBzdGF0aWMgV2ViS2V5Ym9hcmRFdmVudCBjcmVhdGVXZWJLZXlib2FyZEV2ZW50KE5T
RXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpOworICAgIHN0YXRpYyBXZWJNb3VzZUV2
ZW50IGNyZWF0ZVdlYk1vdXNlRXZlbnQoTlNFdmVudCAqLCBOU1ZpZXcgKndpbmRvd1ZpZXcpOwor
ICAgIHN0YXRpYyBXZWJXaGVlbEV2ZW50IGNyZWF0ZVdlYldoZWVsRXZlbnQoTlNFdmVudCAqLCBO
U1ZpZXcgKndpbmRvd1ZpZXcpOworICAgIHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdl
YktleWJvYXJkRXZlbnQoTlNFdmVudCAqLCBCT09MIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwogI2VuZGlmIC8vIFVTRShBUFBL
SVQpCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9y
eS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFj
dG9yeS5tbQkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9X
ZWJFdmVudEZhY3RvcnkubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBV
U0UoQVBQS0lUKQogCiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQg
PFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QbGF0Zm9ybUV2ZW50
RmFjdG9yeU1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvV2luZG93c0tleWJvYXJkQ29kZXMuaD4KQEAgLTQwNSw3ICs0MDYsNyBAQCBXZWJXaGVl
bEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViCiAgICAgcmV0dXJuIFdlYldoZWVsRXZl
bnQoV2ViRXZlbnQ6OldoZWVsLCBJbnRQb2ludChwb3NpdGlvbiksIEludFBvaW50KGdsb2JhbFBv
c2l0aW9uKSwgRmxvYXRTaXplKGRlbHRhWCwgZGVsdGFZKSwgRmxvYXRTaXplKHdoZWVsVGlja3NY
LCB3aGVlbFRpY2tzWSksIGdyYW51bGFyaXR5LCBkaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2Us
IHBoYXNlLCBtb21lbnR1bVBoYXNlLCBoYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzLCBzY3JvbGxD
b3VudCwgdW5hY2NlbGVyYXRlZFNjcm9sbGluZ0RlbHRhLCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7
CiB9CiAKLVdlYktleWJvYXJkRXZlbnQgV2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2Fy
ZEV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKikKK1dlYktleWJvYXJkRXZlbnQgV2ViRXZl
bnRGYWN0b3J5OjpjcmVhdGVXZWJLZXlib2FyZEV2ZW50KE5TRXZlbnQgKmV2ZW50LCBCT09MIGhh
bmRsZWRCeUlucHV0TWV0aG9kLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5k
PiYgY29tbWFuZHMpCiB7CiAgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSAgICAgICAgICAgICA9IGlz
S2V5VXBFdmVudChldmVudCkgPyBXZWJFdmVudDo6S2V5VXAgOiBXZWJFdmVudDo6S2V5RG93bjsK
ICAgICBTdHJpbmcgdGV4dCAgICAgICAgICAgICAgICAgICAgID0gdGV4dEZyb21FdmVudChldmVu
dCk7CkBAIC00MzgsNyArNDM5LDcgQEAgV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6
OmNyZWF0ZQogICAgICAgICB1bm1vZGlmaWVkVGV4dCA9ICJceDkiOwogICAgIH0KIAotICAgIHJl
dHVybiBXZWJLZXlib2FyZEV2ZW50KHR5cGUsIHRleHQsIHVubW9kaWZpZWRUZXh0LCBrZXlJZGVu
dGlmaWVyLCB3aW5kb3dzVmlydHVhbEtleUNvZGUsIG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBtYWND
aGFyQ29kZSwgYXV0b1JlcGVhdCwgaXNLZXlwYWQsIGlzU3lzdGVtS2V5LCBtb2RpZmllcnMsIHRp
bWVzdGFtcCk7CisgICAgcmV0dXJuIFdlYktleWJvYXJkRXZlbnQodHlwZSwgdGV4dCwgdW5tb2Rp
ZmllZFRleHQsIGtleUlkZW50aWZpZXIsIHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgbmF0aXZlVmly
dHVhbEtleUNvZGUsIG1hY0NoYXJDb2RlLCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgY29tbWFuZHMs
IGF1dG9SZXBlYXQsIGlzS2V5cGFkLCBpc1N5c3RlbUtleSwgbW9kaWZpZXJzLCB0aW1lc3RhbXAp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BhZ2VDbGllbnQuaAkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09y
UmVkbykgPSAwOwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3Np
YmlsaXR5V2ViUHJvY2Vzc1Rva2VuUmVjZWl2ZWQoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhZ0ltYWdlKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGRyYWdJbWFnZSwgYm9vbCBpc0xpbmtEcmFnKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVNlY3VyZUlucHV0U3RhdGUoKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNjYsNyArMTA2Niw2IEBA
IHByaXZhdGU6CiAKICAgICAvLyBLZXlib2FyZCBoYW5kbGluZwogI2lmIFBMQVRGT1JNKENPQ09B
KQotICAgIHZvaWQgaW50ZXJwcmV0UXVldWVkS2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmLCBi
b29sJiBoYW5kbGVkLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpOwogICAgIHZv
aWQgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rvciwg
Ym9vbCYgaGFuZGxlZCk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiAxNjUyMDYpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTksNyArMjU5LDYgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAg
ICBEaWRQZXJmb3JtRGljdGlvbmFyeUxvb2t1cChXZWJLaXQ6OkF0dHJpYnV0ZWRTdHJpbmcgdGV4
dCwgV2ViS2l0OjpEaWN0aW9uYXJ5UG9wdXBJbmZvIGRpY3Rpb25hcnlQb3B1cEluZm8pCiAKICAg
ICAjIEtleWJvYXJkIGlucHV0IHN1cHBvcnQgbWVzc2FnZXMKLSAgICBJbnRlcnByZXRRdWV1ZWRL
ZXlFdmVudChXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRlKSAtPiAoYm9vbCBoYW5kbGVkLCBWZWN0
b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiBzYXZlZENvbW1hbmRzKQogICAgIEV4ZWN1dGVT
YXZlZENvbW1hbmRCeVNlbGVjdG9yKFN0cmluZyBzZWxlY3RvcikgLT4gKGJvb2wgaGFuZGxlZCkK
IAogICAgICMgUmVtb3RlIGFjY2Vzc2liaWxpdHkgbWVzc2FnZXMKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDE2NTIwNikKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzQ1LDcgKzM0NSw3IEBAIC0gKEJPT0wpYmVjb21lRmlyc3RSZXNwb25kZXIKICAgICAgICAg
TlNFdmVudCAqa2V5Ym9hcmRFdmVudCA9IG5pbDsKICAgICAgICAgaWYgKFtldmVudCB0eXBlXSA9
PSBOU0tleURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TS2V5VXApCiAgICAgICAgICAgICBrZXli
b2FyZEV2ZW50ID0gZXZlbnQ7Ci0gICAgICAgIF9kYXRhLT5fcGFnZS0+c2V0SW5pdGlhbEZvY3Vz
KGRpcmVjdGlvbiA9PSBOU1NlbGVjdGluZ05leHQsIGtleWJvYXJkRXZlbnQgIT0gbmlsLCBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQsIHNlbGYpKTsKKyAgICAgICAgX2RhdGEt
Pl9wYWdlLT5zZXRJbml0aWFsRm9jdXMoZGlyZWN0aW9uID09IE5TU2VsZWN0aW5nTmV4dCwga2V5
Ym9hcmRFdmVudCAhPSBuaWwsIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoa2V5Ym9hcmRFdmVudCwg
ZmFsc2UsIFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+KCkpKTsKICAgICB9CiAgICAgcmV0dXJuIFlF
UzsKIH0KQEAgLTEyMjUsNiArMTIyNSw3IEBAIC0gKHZvaWQpZG9Db21tYW5kQnlTZWxlY3Rvcjoo
U0VMKXNlbGVjdG8KICAgICBpZiAocGFyYW1ldGVycyAmJiAhaXNGcm9tSW5wdXRNZXRob2QpIHsK
ICAgICAgICAgS2V5cHJlc3NDb21tYW5kIGNvbW1hbmQoTlNTdHJpbmdGcm9tU2VsZWN0b3Ioc2Vs
ZWN0b3IpKTsKICAgICAgICAgcGFyYW1ldGVycy0+Y29tbWFuZHMtPmFwcGVuZChjb21tYW5kKTsK
KyAgICAgICAgTE9HKFRleHRJbnB1dCwgIi4uLnN0b3JlZCIpOwogICAgICAgICBfZGF0YS0+X3Bh
Z2UtPnJlZ2lzdGVyS2V5cHJlc3NDb21tYW5kTmFtZShjb21tYW5kLmNvbW1hbmROYW1lKTsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBGSVhNRTogU2VuZCB0aGUgY29tbWFuZCB0byBFZGl0b3Ig
c3luY2hyb25vdXNseSBhbmQgb25seSBzZW5kIGl0IGFsb25nIHRoZQpAQCAtMTMwMSwxOCArMTMw
MiwyOSBAQCAtIChCT09MKXBlcmZvcm1LZXlFcXVpdmFsZW50OihOU0V2ZW50ICopCiAgICAgLy8g
ZmV0Y2hpbmcgYSBuZXcgZXZlbnQgbWlnaHQgcmVsZWFzZSB0aGUgb2xkIG9uZS4gUmV0YWluaW5n
IGFuZCB0aGVuIGF1dG9yZWxlYXNpbmcKICAgICAvLyB0aGUgY3VycmVudCBldmVudCBwcmV2ZW50
cyB0aGF0IGZyb20gY2F1c2luZyBhIHByb2JsZW0gaW5zaWRlIFdlYktpdCBvciBBcHBLaXQgY29k
ZS4KICAgICBbW2V2ZW50IHJldGFpbl0gYXV0b3JlbGVhc2VdOwotICAgIAorCisgICAgLy8gV2Ug
Z2V0IEVzYyBrZXkgaGVyZSBhZnRlciBwcm9jZXNzaW5nIGVpdGhlciBFc2Mgb3IgQ21kK3Blcmlv
ZC4gVGhlIGZvcm1lciBzdGFydHMgYXMgYSBrZXlEb3duLCBhbmQgdGhlIGxhdHRlciBzdGFydHMg
YXMgYSBrZXkgZXF1aXZhbGVudCwKKyAgICAvLyBidXQgYm90aCBnZXQgdHJhbnNmb3JtZWQgdG8g
YSBjYW5jZWxPcGVyYXRpb246IGNvbW1hbmQsIGV4ZWN1dGluZyB3aGljaCBwYXNzZXMgYW4gRXNj
IGtleSBldmVudCB0byAtcGVyZm9ybUtleUVxdWl2YWxlbnQ6LgorICAgIC8vIERvbid0IGludGVy
cHJldCB0aGlzIGV2ZW50IGFnYWluLCBhdm9pZGluZyByZS1lbnRyYW5jeSBhbmQgaW5maW5pdGUg
bG9vcHMuCisgICAgaWYgKFtbZXZlbnQgY2hhcmFjdGVyc0lnbm9yaW5nTW9kaWZpZXJzXSBpc0Vx
dWFsVG9TdHJpbmc6QCJcZSJdICYmICEoW2V2ZW50IG1vZGlmaWVyRmxhZ3NdICYgTlNEZXZpY2VJ
bmRlcGVuZGVudE1vZGlmaWVyRmxhZ3NNYXNrKSkKKyAgICAgICAgcmV0dXJuIFtzdXBlciBwZXJm
b3JtS2V5RXF1aXZhbGVudDpldmVudF07CisKKyAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSByZS1z
ZW5kaW5nIHRoZSBldmVudCwgdGhlbiBXZWJDb3JlIGhhcyBhbHJlYWR5IHNlZW4gaXQsIG5vIG5l
ZWQgZm9yIGN1c3RvbSBwcm9jZXNzaW5nLgogICAgIEJPT0wgZXZlbnRXYXNTZW50VG9XZWJDb3Jl
ID0gKF9kYXRhLT5fa2V5RG93bkV2ZW50QmVpbmdSZXNlbnQgPT0gZXZlbnQpOworICAgIGlmIChl
dmVudFdhc1NlbnRUb1dlYkNvcmUpCisgICAgICAgIHJldHVybiBbc3VwZXIgcGVyZm9ybUtleUVx
dWl2YWxlbnQ6ZXZlbnRdOwogCi0gICAgaWYgKCFldmVudFdhc1NlbnRUb1dlYkNvcmUpCi0gICAg
ICAgIFtzZWxmIF9kaXNhYmxlQ29tcGxleFRleHRJbnB1dElmTmVjZXNzYXJ5XTsKKyAgICBBU1NF
UlQoZXZlbnQgPT0gW05TQXBwIGN1cnJlbnRFdmVudF0pOworCisgICAgW3NlbGYgX2Rpc2FibGVD
b21wbGV4VGV4dElucHV0SWZOZWNlc3NhcnldOwogCiAgICAgLy8gUGFzcyBrZXkgY29tYm9zIHRo
cm91Z2ggV2ViQ29yZSBpZiB0aGVyZSBpcyBhIGtleSBiaW5kaW5nIGF2YWlsYWJsZSBmb3IKICAg
ICAvLyB0aGlzIGV2ZW50LiBUaGlzIGxldHMgd2ViIHBhZ2VzIGhhdmUgYSBjcmFjayBhdCBpbnRl
cmNlcHRpbmcga2V5LW1vZGlmaWVkIGtleXByZXNzZXMuCi0gICAgLy8gQnV0IGRvbid0IGRvIGl0
IGlmIHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBldmVudC4KLSAgICAvLyBQcmVzc2luZyBF
c2MgcmVzdWx0cyBpbiBhIGZha2UgZXZlbnQgYmVpbmcgc2VudCAtIGRvbid0IHBhc3MgaXQgdG8g
V2ViQ29yZS4KLSAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBldmVudCA9PSBbTlNB
cHAgY3VycmVudEV2ZW50XSAmJiBzZWxmID09IFtbc2VsZiB3aW5kb3ddIGZpcnN0UmVzcG9uZGVy
XSkgewotICAgICAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudChldmVudCwgc2VsZikpOworICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhlIGZp
cnN0UmVzcG9uZGVyIGNoZWNrIG5lZWRlZD8KKyAgICBpZiAoc2VsZiA9PSBbW3NlbGYgd2luZG93
XSBmaXJzdFJlc3BvbmRlcl0pIHsKKyAgICAgICAgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4gY29t
bWFuZHM7CisgICAgICAgIEJPT0wgaGFuZGxlZEJ5SW5wdXRNZXRob2QgPSBbc2VsZiBfaW50ZXJw
cmV0S2V5RXZlbnQ6ZXZlbnQgc2F2aW5nQ29tbWFuZHNUbzpjb21tYW5kc107CisgICAgICAgIF9k
YXRhLT5fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGV2
ZW50LCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgY29tbWFuZHMpKTsKICAgICAgICAgcmV0dXJuIFlF
UzsKICAgICB9CiAgICAgCkBAIC0xMzIyLDcgKzEzMzQsMTEgQEAgLSAoQk9PTClwZXJmb3JtS2V5
RXF1aXZhbGVudDooTlNFdmVudCAqKQogLSAodm9pZClrZXlVcDooTlNFdmVudCAqKXRoZUV2ZW50
CiB7CiAgICAgTE9HKFRleHRJbnB1dCwgImtleVVwOiVwICVAIiwgdGhlRXZlbnQsIHRoZUV2ZW50
KTsKLSAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCh0aGVFdmVudCwgc2VsZikpOworCisgICAgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4g
Y29tbWFuZHM7CisgICAgQk9PTCBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IFtzZWxmIF9pbnRlcnBy
ZXRLZXlFdmVudDp0aGVFdmVudCBzYXZpbmdDb21tYW5kc1RvOmNvbW1hbmRzXTsKKworICAgIF9k
YXRhLT5fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHRo
ZUV2ZW50LCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgY29tbWFuZHMpKTsKIH0KIAogLSAodm9pZClf
ZGlzYWJsZUNvbXBsZXhUZXh0SW5wdXRJZk5lY2Vzc2FyeQpAQCAtMTM5Niw3ICsxNDEyLDE3IEBA
IC0gKHZvaWQpa2V5RG93bjooTlNFdmVudCAqKXRoZUV2ZW50CiAgICAgICAgIFtzdXBlciBrZXlE
b3duOnRoZUV2ZW50XTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBfZGF0YS0+X3BhZ2Ut
PmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh0aGVFdmVudCwgc2Vs
ZikpOworCisgICAgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4gY29tbWFuZHM7CisgICAgQk9PTCBo
YW5kbGVkQnlJbnB1dE1ldGhvZCA9IFtzZWxmIF9pbnRlcnByZXRLZXlFdmVudDp0aGVFdmVudCBz
YXZpbmdDb21tYW5kc1RvOmNvbW1hbmRzXTsKKyAgICBpZiAoIWNvbW1hbmRzLmlzRW1wdHkoKSkg
eworICAgICAgICAvLyBBbiBpbnB1dCBtZXRob2QgbWF5IG1ha2Ugc2V2ZXJhbCBhY3Rpb25zIHBl
ciBrZXlwcmVzcy4gRm9yIGV4YW1wbGUsIHByZXNzaW5nIFJldHVybiB3aXRoIEtvcmVhbiBJTSBi
b3RoIGNvbmZpcm1zIGl0IGFuZCBzZW5kcyBhIG5ld2xpbmUuCisgICAgICAgIC8vIElNLWxpa2Ug
YWN0aW9ucyBhcmUgaGFuZGxlZCBpbW1lZGlhdGVseSAoc28gdGhlIHJldHVybiB2YWx1ZSBmcm9t
IFVJIHByb2Nlc3MgaXMgdHJ1ZSksIGJ1dCB0aGVyZSBhcmUgc2F2ZWQgY29tbWFuZHMgdGhhdAor
ICAgICAgICAvLyBzaG91bGQgYmUgaGFuZGxlZCBsaWtlIG5vcm1hbCB0ZXh0IGlucHV0IGFmdGVy
IERPTSBldmVudCBkaXNwYXRjaC4KKyAgICAgICAgaGFuZGxlZEJ5SW5wdXRNZXRob2QgPSBOTzsK
KyAgICB9CisKKyAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2Vi
S2V5Ym9hcmRFdmVudCh0aGVFdmVudCwgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGNvbW1hbmRzKSk7
CiB9CiAKIC0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihOU0V2ZW50ICopdGhlRXZlbnQKQEAgLTE0MTQs
NyArMTQ0MCwxMCBAQCAtICh2b2lkKWZsYWdzQ2hhbmdlZDooTlNFdmVudCAqKXRoZUV2ZW50CiAg
ICAgaWYgKCFrZXlDb2RlIHx8IGtleUNvZGUgPT0gMTAgfHwga2V5Q29kZSA9PSA2MykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQodGhlRXZlbnQsIHNlbGYpKTsKKyAgICBWZWN0b3I8S2V5cHJlc3ND
b21tYW5kPiBjb21tYW5kczsKKyAgICBCT09MIGhhbmRsZWRCeUlucHV0TWV0aG9kID0gW3NlbGYg
X2ludGVycHJldEtleUV2ZW50OnRoZUV2ZW50IHNhdmluZ0NvbW1hbmRzVG86Y29tbWFuZHNdOwor
CisgICAgX2RhdGEtPl9wYWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQodGhlRXZlbnQsIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb21tYW5kcykpOwogfQogCiAt
ICh2b2lkKV9leGVjdXRlU2F2ZWRLZXlwcmVzc0NvbW1hbmRzCkBAIC0yMzEwLDExICsyMzM5LDEy
IEBAIC0gKEJPT0wpX2ludGVycHJldEtleUV2ZW50OihOU0V2ZW50ICopZXYKICAgICBMT0coVGV4
dElucHV0LCAiLT4gaW50ZXJwcmV0S2V5RXZlbnRzOiVwICVAIiwgZXZlbnQsIGV2ZW50KTsKICAg
ICBbc2VsZiBpbnRlcnByZXRLZXlFdmVudHM6W05TQXJyYXkgYXJyYXlXaXRoT2JqZWN0OmV2ZW50
XV07CiAKLSAgICBfZGF0YS0+X2ludGVycHJldEtleUV2ZW50c1BhcmFtZXRlcnMgPSAwOworICAg
IF9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IG51bGxwdHI7CiAKICAgICAv
LyBBbiBpbnB1dCBtZXRob2QgbWF5IGNvbnN1bWUgYW4gZXZlbnQgYW5kIG5vdCB0ZWxsIHVzIChl
LmcuIHdoZW4gZGlzcGxheWluZyBhIGNhbmRpZGF0ZSB3aW5kb3cpLAogICAgIC8vIGluIHdoaWNo
IGNhc2Ugd2Ugc2hvdWxkIG5vdCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSBET00uCiAgICAgaWYg
KHBhcmFtZXRlcnMuY29uc3VtZWRCeUlNKSB7CisgICAgICAgIEFTU0VSVChjb21tYW5kcy5pc0Vt
cHR5KCkpOwogICAgICAgICBMT0coVGV4dElucHV0LCAiLi4uZXZlbnQgJXAgd2FzIGNvbnN1bWVk
IGJ5IGFuIGlucHV0IG1ldGhvZCIsIGV2ZW50KTsKICAgICAgICAgcmV0dXJuIFlFUzsKICAgICB9
CkBAIC0yODIzLDYgKzI4NTMsNyBAQCAtICh2b2lkKV9jbG9zZUZ1bGxTY3JlZW5XaW5kb3dDb250
cm9sbGVyCiAKIC0gKGJvb2wpX2V4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2Vs
ZWN0b3IKIHsKKyAgICBMT0coVGV4dElucHV0LCAiRXhlY3V0aW5nIHByZXZpb3VzbHkgc2F2ZWQg
Y29tbWFuZCAlcyIsIHNlbF9nZXROYW1lKHNlbGVjdG9yKSk7CiAgICAgLy8gVGhlIHNpbmsgZG9l
cyB0d28gdGhpbmdzOiAxKSBUZWxscyB1cyBpZiB0aGUgcmVzcG9uZGVyIHdlbnQgdW5oYW5kbGVk
LCBhbmQKICAgICAvLyAyKSBwcmV2ZW50cyBhbnkgTlNCZWVwOyB3ZSBkb24ndCBldmVyIHdhbnQg
dG8gYmVlcCBoZXJlLgogICAgIFJldGFpblB0cjxXS1Jlc3BvbmRlckNoYWluU2luaz4gc2luayA9
IGFkb3B0TlMoW1tXS1Jlc3BvbmRlckNoYWluU2luayBhbGxvY10gaW5pdFdpdGhSZXNwb25kZXJD
aGFpbjpzZWxmXSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5oCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcg
KzcyLDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2FuVW5kb1JlZG8oV2ViUGFnZVBy
b3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVVuZG9S
ZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IGFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW5SZWNlaXZlZChjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29u
c3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1h
bmQ+Jikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNl
bGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBQ
YXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBib29sIGlzTGlua0RyYWcpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTZWN1cmVJbnB1dFN0YXRlKCkgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVu
dEltcGxJT1MubW0JKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5MywxMiArMTkz
LDYgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6YWNjZXNzaWJpbGl0eVdlYlBybwogICAgIFttX2Nv
bnRlbnRWaWV3IF9zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuOnJlbW90ZVRva2VuXTsK
IH0KIAotYm9vbCBQYWdlQ2xpZW50SW1wbDo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+JikKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBQYWdlQ2xpZW50SW1w
bDo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQs
IGJvb2wgaXNDaGFyRXZlbnQpCiB7CiAgICAgcmV0dXJuIFttX2NvbnRlbnRWaWV3IF9pbnRlcnBy
ZXRLZXlFdmVudDpldmVudC5uYXRpdmVFdmVudCgpIGlzQ2hhckV2ZW50OmlzQ2hhckV2ZW50XTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9T
Lm1tCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDEyLDExICs0MTIsNiBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZXh0ZW5kU2VsZWN0aW9uKFdlYkNvCiAgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpFeHRlbmRTZWxlY3Rpb24oc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGdyYW51bGFyaXR5KSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmludGVy
cHJldFF1ZXVlZEtleUV2ZW50KGNvbnN0IEVkaXRvclN0YXRlJiwgYm9vbCYsIFZlY3RvcjxXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQ+JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2
b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmIHN0
YXRlLCBib29sIGlzQ2hhckV2ZW50LCBib29sJiBoYW5kbGVkKQogewogICAgIG1fZWRpdG9yU3Rh
dGUgPSBzdGF0ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsLmgJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAgIHZp
cnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudCYsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAgICAgdmlydHVhbCBi
b29sIGV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc2VsZWN0b3Ip
OwogICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGNsaWVudFBvc2l0aW9uLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlLCBi
b29sIGlzTGlua0RyYWcpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQcm9taXNlZERhdGEoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
IGltYWdlQnVmZmVyLCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGV4dGVu
c2lvbiwgY29uc3QgU3RyaW5nJiB0aXRsZSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzMyLDExICszMzIsNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGVjdXRlVW5kb1JlZG8o
V2ViCiAgICAgcmV0dXJuICh1bmRvT3JSZWRvID09IFdlYlBhZ2VQcm94eTo6VW5kbykgPyBbW21f
d2tWaWV3IHVuZG9NYW5hZ2VyXSB1bmRvXSA6IFtbbV93a1ZpZXcgdW5kb01hbmFnZXJdIHJlZG9d
OwogfQogCi1ib29sIFBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFu
ZD4mIGNvbW1hbmRzKQotewotICAgIHJldHVybiBbbV93a1ZpZXcgX2ludGVycHJldEtleUV2ZW50
OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgc2F2aW5nQ29tbWFuZHNUbzpjb21tYW5kc107Ci19Ci0KIHZv
aWQgUGFnZUNsaWVudEltcGw6OnNldERyYWdJbWFnZShjb25zdCBJbnRQb2ludCYgY2xpZW50UG9z
aXRpb24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wgaXNMaW5r
RHJhZykKIHsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZHJhZ0NHSW1hZ2UgPSBkcmFnSW1h
Z2UtPm1ha2VDR0ltYWdlKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dl
YlBhZ2VQcm94eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0
OCwxMiArMzQ4LDYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EaWN0aW9uYXJ5TG9vawog
ICAgIHByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRGljdGlvbmFyeUxv
b2t1cEF0TG9jYXRpb24ocG9pbnQpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjppbnRlcnByZXRRdWV1ZWRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYgc3RhdGUsIGJvb2wm
IGhhbmRsZWQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcykKLXsK
LSAgICBtX2VkaXRvclN0YXRlID0gc3RhdGU7Ci0gICAgaGFuZGxlZCA9IG1fcGFnZUNsaWVudC5p
bnRlcnByZXRLZXlFdmVudChtX2tleUV2ZW50UXVldWUuZmlyc3QoKSwgY29tbWFuZHMpOwotfQot
CiAvLyBDb21wbGV4IHRleHQgaW5wdXQgc3VwcG9ydCBmb3IgcGx1Zy1pbnMuCiB2b2lkIFdlYlBh
Z2VQcm94eTo6c2VuZENvbXBsZXhUZXh0SW5wdXRUb1BsdWdpbih1aW50NjRfdCBwbHVnaW5Db21w
bGV4VGV4dElucHV0SWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB0ZXh0SW5wdXQpCiB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJFZGl0b3JD
bGllbnRJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9pb3MvV2ViRWRpdG9yQ2xpZW50SU9TLm1tCShyZXZpc2lvbiAxNjUyMDYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJFZGl0b3JD
bGllbnRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAgICAgCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudChL
ZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAobV9wYWdlLT5oYW5kbGVFZGl0aW5nS2V5
Ym9hcmRFdmVudChldmVudCwgZmFsc2UpKQorICAgIGlmIChtX3BhZ2UtPmhhbmRsZUVkaXRpbmdL
ZXlib2FyZEV2ZW50KGV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYkVkaXRvckNsaWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHJldmlzaW9u
IDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYkVkaXRvckNsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMsMTMgKzYzLDEzIEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogICAgIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUtl
eWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKG1fcGFnZS0+aGFu
ZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoZXZlbnQsIGZhbHNlKSkKKyAgICBpZiAobV9wYWdlLT5o
YW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChldmVudCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZh
dWx0SGFuZGxlZCgpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRo
b2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIGlmIChtX3BhZ2UtPmhhbmRs
ZUVkaXRpbmdLZXlib2FyZEV2ZW50KGV2ZW50LCB0cnVlKSkKKyAgICBpZiAoZXZlbnQtPmhhbmRs
ZWRCeUlucHV0TWV0aG9kKCkpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwog
fQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyArMjUzLDYgQEAgV2Vi
UGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IAogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgICwgbV9wZGZQbHVnaW5FbmFibGVkKGZhbHNlKQogICAgICwgbV9oYXNDYWNoZWRXaW5k
b3dGcmFtZShmYWxzZSkKLSAgICAsIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQoMCkK
ICAgICAsIG1fdmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3RvcigqdGhpcykKICNlbGlmIFBMQVRG
T1JNKEdUSykgJiYgSEFWRShBQ0NFU1NJQklMSVRZKQogICAgICwgbV9hY2Nlc3NpYmlsaXR5T2Jq
ZWN0KDApCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNywxMSArMjM3LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgbGF5b3V0SWZOZWVkZWQoKTsKIAogICAgIC8vIC0tIENhbGxlZCBmcm9tIFdlYkNv
cmUgY2xpZW50cy4KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBib29sIGhhbmRsZUVkaXRpbmdL
ZXlib2FyZEV2ZW50KFdlYkNvcmU6OktleWJvYXJkRXZlbnQqLCBib29sIHNhdmVDb21tYW5kcyk7
Ci0jZWxpZiAhUExBVEZPUk0oR1RLKQogICAgIGJvb2wgaGFuZGxlRWRpdGluZ0tleWJvYXJkRXZl
bnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCopOwotI2VuZGlmCiAKICAgICB2b2lkIGRpZFN0YXJ0
UGFnZVRyYW5zaXRpb24oKTsKICAgICB2b2lkIGRpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24oKTsK
QEAgLTk5Niw4ICs5OTIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIFJldGFpblB0cjxXS0FjY2Vz
c2liaWxpdHlXZWJQYWdlT2JqZWN0PiBtX21vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudDsKIAotICAg
IFdlYkNvcmU6OktleWJvYXJkRXZlbnQqIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQ7
Ci0KICAgICBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yIG1fdmlld0dlc3R1cmVHZW9tZXRy
eUNvbGxlY3RvcjsKIAogI2VsaWYgSEFWRShBQ0NFU1NJQklMSVRZKSAmJiAoUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShFRkwpKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTY1MjA2KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIsOCArMTQyLDkgQEAgYm9vbCBXZWJQYWdlOjphbGxvd3NVc2VyU2NhbGlu
ZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fdmlld3BvcnRDb25maWd1cmF0aW9uLmFsbG93c1VzZXJT
Y2FsaW5nKCk7CiB9CiAKLWJvb2wgV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQo
S2V5Ym9hcmRFdmVudCogZXZlbnQsIGJvb2wpCitib29sIFdlYlBhZ2U6OmhhbmRsZUVkaXRpbmdL
ZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogeworICAgIC8vIEZJWE1FOiBJbnRl
cnByZXQgdGhlIGV2ZW50IGltbWVkaWF0ZWx5IHVwb24gcmVjZWl2aW5nIGl0IGluIFVJIHByb2Nl
c3MsIHdpdGhvdXQgc2VuZGluZyB0byBXZWJQcm9jZXNzIGZpcnN0LgogICAgIGJvb2wgZXZlbnRX
YXNIYW5kbGVkID0gZmFsc2U7CiAgICAgYm9vbCBzZW5kUmVzdWx0ID0gV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6SW50ZXJwcmV0S2V5RXZlbnQoZWRpdG9yU3RhdGUoKSwgZXZlbnQtPmtleUV2ZW50
KCktPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludGVycHJldEtleUV2ZW50OjpSZXBs
eShldmVudFdhc0hhbmRsZWQpLCBtX3BhZ2VJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxNjUy
MDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTE2NiwyMiArMTY2LDI1IEBAIHN0YXRpYyBGcmFtZSogZnJh
bWVGb3JFdmVudChLZXlib2FyZEV2ZW4KIAogYm9vbCBXZWJQYWdlOjpleGVjdXRlS2V5cHJlc3ND
b21tYW5kc0ludGVybmFsKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBj
b21tYW5kcywgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZnJh
bWVGb3JFdmVudChldmVudCk7Ci0gICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkgPT0gY29yZVBhZ2Uo
KSk7CisgICAgRnJhbWUmIGZyYW1lID0gZXZlbnQgPyAqZnJhbWVGb3JFdmVudChldmVudCkgOiBt
X3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEFTU0VS
VChmcmFtZS5wYWdlKCkgPT0gY29yZVBhZ2UoKSk7CiAKICAgICBib29sIGV2ZW50V2FzSGFuZGxl
ZCA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tbWFuZHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgaWYgKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lID09ICJpbnNlcnRUZXh0
OiIpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9u
KCkpOwotCi0gICAgICAgICAgICBpZiAoIWZyYW1lLT5lZGl0b3IoKS5jYW5FZGl0KCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZnJhbWUuZWRpdG9yKCkuaGFz
Q29tcG9zaXRpb24oKSkgeworICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKGNvbW1h
bmRzW2ldLnRleHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWZyYW1lLmVkaXRvcigpLmNhbkVkaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgICAgIC8vIEFuIGluc2VydFRleHQ6IG1pZ2h0IGJlIGhhbmRsZWQgYnkgb3Ro
ZXIgcmVzcG9uZGVycyBpbiB0aGUgY2hhaW4gaWYgd2UgZG9uJ3QgaGFuZGxlIGl0LgotICAgICAg
ICAgICAgLy8gT25lIGV4YW1wbGUgaXMgc3BhY2UgYmFyIHRoYXQgcmVzdWx0cyBpbiBzY3JvbGxp
bmcgZG93biB0aGUgcGFnZS4KLSAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCB8PSBmcmFtZS0+
ZWRpdG9yKCkuaW5zZXJ0VGV4dChjb21tYW5kc1tpXS50ZXh0LCBldmVudCk7CisgICAgICAgICAg
ICAgICAgLy8gQW4gaW5zZXJ0VGV4dDogbWlnaHQgYmUgaGFuZGxlZCBieSBvdGhlciByZXNwb25k
ZXJzIGluIHRoZSBjaGFpbiBpZiB3ZSBkb24ndCBoYW5kbGUgaXQuCisgICAgICAgICAgICAgICAg
Ly8gT25lIGV4YW1wbGUgaXMgc3BhY2UgYmFyIHRoYXQgcmVzdWx0cyBpbiBzY3JvbGxpbmcgZG93
biB0aGUgcGFnZS4KKyAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgfD0gZnJhbWUuZWRp
dG9yKCkuaW5zZXJ0VGV4dChjb21tYW5kc1tpXS50ZXh0LCBldmVudCk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9
IGZyYW1lLT5lZGl0b3IoKS5jb21tYW5kKGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbW1h
bmRzW2ldLmNvbW1hbmROYW1lKSk7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFu
ZCA9IGZyYW1lLmVkaXRvcigpLmNvbW1hbmQoY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29t
bWFuZHNbaV0uY29tbWFuZE5hbWUpKTsKICAgICAgICAgICAgIGlmIChjb21tYW5kLmlzU3VwcG9y
dGVkKCkpIHsKICAgICAgICAgICAgICAgICBib29sIGNvbW1hbmRFeGVjdXRlZEJ5RWRpdG9yID0g
Y29tbWFuZC5leGVjdXRlKGV2ZW50KTsKICAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQg
fD0gY29tbWFuZEV4ZWN1dGVkQnlFZGl0b3I7CkBAIC0yMDAsNTMgKzIwMywzOSBAQCBib29sIFdl
YlBhZ2U6OmV4ZWN1dGVLZXlwcmVzc0NvbW1hbmRzSW50CiAgICAgcmV0dXJuIGV2ZW50V2FzSGFu
ZGxlZDsKIH0KIAotYm9vbCBXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXli
b2FyZEV2ZW50KiBldmVudCwgYm9vbCBzYXZlQ29tbWFuZHMpCitib29sIFdlYlBhZ2U6OmhhbmRs
ZUVkaXRpbmdLZXlib2FyZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEFTU0VS
VCghc2F2ZUNvbW1hbmRzIHx8IGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuaXNFbXB0eSgpKTsg
Ly8gU2F2ZSBjb21tYW5kcyBvbmNlIGZvciBlYWNoIGV2ZW50LgotCiAgICAgRnJhbWUqIGZyYW1l
ID0gZnJhbWVGb3JFdmVudChldmVudCk7CiAgICAgCiAgICAgY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50KiBwbGF0Zm9ybUV2ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7CiAgICAgaWYgKCFwbGF0
Zm9ybUV2ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgVmVjdG9yPEtleXByZXNzQ29t
bWFuZD4mIGNvbW1hbmRzID0gZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKTsKKyAgICBjb25zdCBW
ZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMgPSBldmVudC0+a2V5cHJlc3NDb21tYW5k
cygpOworCisgICAgQVNTRVJUKCFwbGF0Zm9ybUV2ZW50LT5tYWNFdmVudCgpKTsgLy8gQ2Fubm90
IGhhdmUgYSBuYXRpdmUgZXZlbnQgaW4gV2ViUHJvY2Vzcy4KIAotICAgIGlmIChbcGxhdGZvcm1F
dmVudC0+bWFjRXZlbnQoKSB0eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCkKKyAgICAvLyBEb24ndCBo
YW5kbGUgRXNjIHdoaWxlIGhhbmRsaW5nIGtleWRvd24gZXZlbnQsIHdlIG5lZWQgdG8gZGlzcGF0
Y2ggYSBrZXlwcmVzcyBmaXJzdC4KKyAgICBpZiAocGxhdGZvcm1FdmVudC0+dHlwZSgpICE9IFBs
YXRmb3JtRXZlbnQ6OkNoYXIgJiYgZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpID09IFZL
X0VTQ0FQRSAmJiBjb21tYW5kcy5zaXplKCkgPT0gMSAmJiBjb21tYW5kTmFtZUZvclNlbGVjdG9y
TmFtZShjb21tYW5kc1swXS5jb21tYW5kTmFtZSkgPT0gImNhbmNlbE9wZXJhdGlvbiIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJvb2wgZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7Ci0g
ICAgCi0gICAgaWYgKHNhdmVDb21tYW5kcykgewotICAgICAgICBLZXlib2FyZEV2ZW50KiBvbGRF
dmVudCA9IG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQ7Ci0gICAgICAgIG1fa2V5Ym9h
cmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQgPSBldmVudDsKLSAgICAgICAgYm9vbCBzZW5kUmVzdWx0
ID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0UXVldWVkS2V5RXZlbnQoZWRpdG9y
U3RhdGUoKSksIAotICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0
UXVldWVkS2V5RXZlbnQ6OlJlcGx5KGV2ZW50V2FzSGFuZGxlZCwgY29tbWFuZHMpLCBtX3BhZ2VJ
RCk7Ci0gICAgICAgIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQgPSBvbGRFdmVudDsK
LSAgICAgICAgaWYgKCFzZW5kUmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIC8vIEFuIGlucHV0IG1ldGhvZCBtYXkgbWFrZSBzZXZlcmFsIGFjdGlvbnMgcGVyIGtl
eXByZXNzLiBGb3IgZXhhbXBsZSwgcHJlc3NpbmcgUmV0dXJuIHdpdGggS29yZWFuIElNIGJvdGgg
Y29uZmlybXMgaXQgYW5kIHNlbmRzIGEgbmV3bGluZS4KLSAgICAgICAgLy8gSU0tbGlrZSBhY3Rp
b25zIGFyZSBoYW5kbGVkIGltbWVkaWF0ZWx5IChzbyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gVUkg
cHJvY2VzcyBpcyB0cnVlKSwgYnV0IHRoZXJlIGFyZSBzYXZlZCBjb21tYW5kcyB0aGF0Ci0gICAg
ICAgIC8vIHNob3VsZCBiZSBoYW5kbGVkIGxpa2Ugbm9ybWFsIHRleHQgaW5wdXQgYWZ0ZXIgRE9N
IGV2ZW50IGRpc3BhdGNoLgotICAgICAgICBpZiAoIWV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCku
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIEFyZSB0aGVyZSBjb21tYW5kcyB0aGF0IGNvdWxkIGp1c3QgY2F1c2UgdGV4dCBpbnNl
cnRpb24gaWYgZXhlY3V0ZWQgdmlhIEVkaXRvcj8KLSAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3Qg
aGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgbW9kZSB0byBkZWNpZGUgaG93IHRoZXkgc2hv
dWxkIGJlIHRyZWF0ZWQsIHNvIHdlIGxlYXZlIGl0IHVwb24gV2ViQ29yZQotICAgICAgICAvLyB0
byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1tZWRpYXRlbHkgKGUuZy4gVGFiIHRoYXQgY2hhbmdlcyBm
b2N1cykgb3IgbGV0IGEga2V5cHJlc3MgZXZlbnQgYmUgZ2VuZXJhdGVkCi0gICAgICAgIC8vIChl
LmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hhcmFjdGVyLCBvciBFbnRlcikuCi0gICAgICAg
IGJvb2wgaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyA9IGZhbHNlOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvbW1hbmRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
ZnJhbWUtPmVkaXRvcigpLmNvbW1hbmQoY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29tbWFu
ZHNbaV0uY29tbWFuZE5hbWUpKS5pc1RleHRJbnNlcnRpb24oKSkKLSAgICAgICAgICAgICAgICBo
YXZlVGV4dEluc2VydGlvbkNvbW1hbmRzID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAvLyBJ
ZiB0aGVyZSBhcmUgbm8gdGV4dCBpbnNlcnRpb24gY29tbWFuZHMsIGRlZmF1bHQga2V5ZG93biBo
YW5kbGVyIGlzIHRoZSByaWdodCB0aW1lIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmRzLgotICAgICAg
ICAvLyBLZXlwcmVzcyAoQ2hhciBldmVudCkgaGFuZGxlciBpcyB0aGUgbGF0ZXN0IG9wcG9ydHVu
aXR5IHRvIGV4ZWN1dGUuCi0gICAgICAgIGlmICghaGF2ZVRleHRJbnNlcnRpb25Db21tYW5kcyB8
fCBwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1FdmVudDo6Q2hhcikgewotICAgICAg
ICAgICAgZXZlbnRXYXNIYW5kbGVkID0gZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChl
dmVudC0+a2V5cHJlc3NDb21tYW5kcygpLCBldmVudCk7Ci0gICAgICAgICAgICBldmVudC0+a2V5
cHJlc3NDb21tYW5kcygpLmNsZWFyKCk7Ci0gICAgICAgIH0KKworICAgIC8vIEFyZSB0aGVyZSBj
b21tYW5kcyB0aGF0IGNvdWxkIGp1c3QgY2F1c2UgdGV4dCBpbnNlcnRpb24gaWYgZXhlY3V0ZWQg
dmlhIEVkaXRvcj8KKyAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlv
biBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgdGhleSBzaG91bGQgYmUgdHJlYXRlZCwgc28gd2Ug
bGVhdmUgaXQgdXBvbiBXZWJDb3JlCisgICAgLy8gdG8gZWl0aGVyIGhhbmRsZSB0aGVtIGltbWVk
aWF0ZWx5IChlLmcuIFRhYiB0aGF0IGNoYW5nZXMgZm9jdXMpIG9yIGxldCBhIGtleXByZXNzIGV2
ZW50IGJlIGdlbmVyYXRlZAorICAgIC8vIChlLmcuIFRhYiB0aGF0IGluc2VydHMgYSBUYWIgY2hh
cmFjdGVyLCBvciBFbnRlcikuCisgICAgYm9vbCBoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzID0g
ZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb21tYW5kcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmNvbW1hbmQoY29tbWFuZE5hbWVGb3JTZWxl
Y3Rvck5hbWUoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpKS5pc1RleHRJbnNlcnRpb24oKSkKKyAg
ICAgICAgICAgIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSB0cnVlOworICAgIH0KKyAgICAv
LyBJZiB0aGVyZSBhcmUgbm8gdGV4dCBpbnNlcnRpb24gY29tbWFuZHMsIGRlZmF1bHQga2V5ZG93
biBoYW5kbGVyIGlzIHRoZSByaWdodCB0aW1lIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmRzLgorICAg
IC8vIEtleXByZXNzIChDaGFyIGV2ZW50KSBoYW5kbGVyIGlzIHRoZSBsYXRlc3Qgb3Bwb3J0dW5p
dHkgdG8gZXhlY3V0ZS4KKyAgICBpZiAoIWhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgfHwgcGxh
dGZvcm1FdmVudC0+dHlwZSgpID09IFBsYXRmb3JtRXZlbnQ6OkNoYXIpIHsKKyAgICAgICAgZXZl
bnRXYXNIYW5kbGVkID0gZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChldmVudC0+a2V5
cHJlc3NDb21tYW5kcygpLCBldmVudCk7CisgICAgICAgIGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRz
KCkuY2xlYXIoKTsKICAgICB9CisKICAgICByZXR1cm4gZXZlbnRXYXNIYW5kbGVkOwogfQogCkBA
IC0zMDIsNyArMjkxLDcgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnRUZXh0KGNvbnN0IFN0cmluZyYg
dAogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewogICAgICAgICAv
LyBBbiBpbnNlcnRUZXh0OiBtaWdodCBiZSBoYW5kbGVkIGJ5IG90aGVyIHJlc3BvbmRlcnMgaW4g
dGhlIGNoYWluIGlmIHdlIGRvbid0IGhhbmRsZSBpdC4KICAgICAgICAgLy8gT25lIGV4YW1wbGUg
aXMgc3BhY2UgYmFyIHRoYXQgcmVzdWx0cyBpbiBzY3JvbGxpbmcgZG93biB0aGUgcGFnZS4KLSAg
ICAgICAgaGFuZGxlZCA9IGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQodGV4dCwgbV9rZXlib2Fy
ZEV2ZW50QmVpbmdJbnRlcnByZXRlZCk7CisgICAgICAgIGhhbmRsZWQgPSBmcmFtZS5lZGl0b3Io
KS5pbnNlcnRUZXh0KHRleHQsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwogICAgICAgICBmcmFtZS5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRpb24odGV4dCk7CkBA
IC0zMjIsNyArMzExLDcgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3Qg
UwogICAgIH0KIAogICAgIEFTU0VSVCghZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSk7
Ci0gICAgaGFuZGxlZCA9IGZyYW1lLmVkaXRvcigpLmluc2VydERpY3RhdGVkVGV4dCh0ZXh0LCBk
aWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnBy
ZXRlZCk7CisgICAgaGFuZGxlZCA9IGZyYW1lLmVkaXRvcigpLmluc2VydERpY3RhdGVkVGV4dCh0
ZXh0LCBkaWN0YXRpb25BbHRlcm5hdGl2ZUxvY2F0aW9ucywgMCk7CiAgICAgbmV3U3RhdGUgPSBl
ZGl0b3JTdGF0ZSgpOwogfQogCkBAIC00MzYsNyArNDI1LDcgQEAgdm9pZCBXZWJQYWdlOjpmaXJz
dFJlY3RGb3JDaGFyYWN0ZXJSYW5nZQogCiB2b2lkIFdlYlBhZ2U6OmV4ZWN1dGVLZXlwcmVzc0Nv
bW1hbmRzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcywg
Ym9vbCYgaGFuZGxlZCwgRWRpdG9yU3RhdGUmIG5ld1N0YXRlKQogewotICAgIGhhbmRsZWQgPSBl
eGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVybmFsKGNvbW1hbmRzLCBtX2tleWJvYXJkRXZlbnRC
ZWluZ0ludGVycHJldGVkKTsKKyAgICBoYW5kbGVkID0gZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJ
bnRlcm5hbChjb21tYW5kcywgMCk7CiAgICAgbmV3U3RhdGUgPSBlZGl0b3JTdGF0ZSgpOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNC0wMy0w
NiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAgICAgICBbTWFjXSBE
b24ndCBwZXJmb3JtIGEgcm91bmQtdHJpcCB0aHJvdWdoIFdlYlByb2Nlc3MgYmVmb3JlIGludGVy
cHJldGluZyBrZXkgZXZlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjk4MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbTogKFdlYkVkaXRv
ckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKToKKyAgICAgICAgQWRkZWQgYSBGSVhN
RS4gV2ViS2l0MS9tYWMgaXMgdGhlIG9ubHkgcG9ydCB0aGF0IHVzZXMgdGhpcyByb3VuZGFib3V0
IHdheSB0bworICAgICAgICBpbnRlcnByZXQgZXZlbnRzLCBzbyBpdCB3b3VsZCBzaW1wbGlmeSBj
b2RlIGlmIHdlIHN3aXRjaGVkIGl0IHRvIFdlYktpdDIvbWFjIG1vZGVsLgorCiAyMDE0LTAzLTA2
ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogRXhwb3NlIHRoZSBjb25zb2xlIG9iamVjdCBpbiBKU0NvbnRleHRzIHRvIGludGVy
YWN0IHdpdGggV2ViIEluc3BlY3RvcgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQkocmV2aXNpb24gMTY1MjA2KQorKysg
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRs
ZUtleWJvYXJkRXZlbgogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZUlucHV0TWV0aG9kS2V5
ZG93bihLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICNpZiAhUExBVEZPUk0oSU9TKQorICAgIC8v
IEZJWE1FOiBTd2l0Y2ggdG8gV2ViS2l0MiBtb2RlbCwgaW50ZXJwcmV0aW5nIHRoZSBldmVudCBi
ZWZvcmUgaXQncyBzZW50IGRvd24gdG8gV2ViQ29yZS4KICAgICBGcmFtZSogZnJhbWUgPSBldmVu
dC0+dGFyZ2V0KCktPnRvTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7CiAgICAgV2ViSFRNTFZp
ZXcgKndlYkhUTUxWaWV3ID0gW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsK
ICAgICBpZiAoW3dlYkhUTUxWaWV3IF9pbnRlcnByZXRLZXlFdmVudDpldmVudCBzYXZpbmdDb21t
YW5kczpZRVNdKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>226148</attachid>
            <date>2014-03-07 12:34:27 -0800</date>
            <delta_ts>2014-03-07 18:44:55 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>InterpretKeyEvents.txt</filename>
            <type>text/plain</type>
            <size>57400</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTIzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTAzLTA2ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIERvbid0IHBlcmZv
cm0gYSByb3VuZC10cmlwIHRocm91Z2ggV2ViUHJvY2VzcyBiZWZvcmUgaW50ZXJwcmV0aW5nIGtl
eSBldmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyOTgxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIHNpZ25pZmljYW50IGJlaGF2aW9yIGNoYW5nZXMgZXhwZWN0ZWQsIGV4Y2VwdCBmb3IgRXNj
IGtleSBwcm9jZXNzaW5nLCB3aGljaCBub3cKKyAgICAgICAgZGlzcGF0Y2hlcyBhIGtleXByZXNz
IGJlZm9yZSBleGVjdXRpbmcgaXRzIGRlZmF1bHQgYWN0aW9uLgorCisgICAgICAgICogcGxhdGZv
cm0vS2V5cHJlc3NDb21tYW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5cHJlc3ND
b21tYW5kOjpLZXlwcmVzc0NvbW1hbmQpOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
CisgICAgICAgICogV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBNb3ZlZCBLZXlwcmVzc0NvbW1h
bmQgZnJvbSBkb20vS2V5Ym9hcmRFdmVudC5oIHRvIGl0cyBvd24gaGVhZGVyLCBhcyBpdCBuZWVk
ZWQKKyAgICAgICAgaW4gcGxhdGZvcm0vIGRpcmVjdG9yeSBub3cuCisKKyAgICAgICAgKiBkb20v
S2V5Ym9hcmRFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLZXlib2FyZEV2ZW50OjpLZXli
b2FyZEV2ZW50KToKKyAgICAgICAgKiBkb20vS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5Ym9hcmRFdmVudDo6aGFuZGxlZEJ5SW5wdXRNZXRob2QpOgorICAgICAgICAoV2Vi
Q29yZTo6S2V5Ym9hcmRFdmVudDo6a2V5cHJlc3NDb21tYW5kcyk6CisgICAgICAgICogcGxhdGZv
cm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmhhbmRsZWRCeUlucHV0TWV0aG9kKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Y29tbWFuZHMpOgorICAgICAgICBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQgbm93IGNhcnJpZXMgcmVzdWx0cyBvZiBpbnRlcnByZXRpbmcgdGhlIGV2
ZW50IGJ5IEFwcEtpdC4gVGhpcworICAgICAgICBpcyBsb2dpY2FsbHkgbm90IG11Y2ggZGlmZmVy
ZW50IGZyb20gY2FycnlpbmcgY2hhcmNvZGUsIGFuZCBpcyBzaW1pbGFyIHRvIHdoYXQgR3RrCisg
ICAgICAgIGRvZXMgZm9yIGlucHV0IG1ldGhvZHMuCisgICAgICAgIEtleWJvYXJkRXZlbnQgYWxy
ZWFkeSBoYWQga2V5cHJlc3MgY29tbWFuZHMsIHdoaWNoIHdlcmUgYWRkZWQgdG8gaXQgYWZ0ZXIg
Y29uc3RydWN0aW9uLgorICAgICAgICBJdCdzIHN0aWxsIHBvc3NpYmxlIGZvciBXZWJLaXQxLCB3
aGlsZSB3aXRoIFdlYktpdDIsIHRoZXkgYXJlIHByb3ZpZGVkIGF0IGNvbnN0cnVjdGlvbgorICAg
ICAgICB0aW1lLiBUaGUgZXZlbnQgbm93IGFsc28gaGFzIGEgYm9vbGVhbiBmb3Igd2hldGhlciBJ
TSBoYW5kbGVkIGl0IGFscmVhZHkuCisKIDIwMTQtMDMtMDYgIE1hcmsgTGFtICA8bWFyay5sYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFhNTEh0dHBSZXF1ZXN0OiBzdGF0dXMgYW5kIHN0YXR1c1Rl
eHQgdGhyb3cgRE9NIEV4Y2VwdGlvbiAxMSB3aGVuIHRoZSBzdGF0ZSBpcyBVTlNFTlQgb3IgT1BF
TkVELgpJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjUyMDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC01OTk5LDYgKzU5OTksNyBAQCBwbGF0Zm9ybV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkwuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMSGFzaC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LZXllZENvZGluZy5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9LZXlwcmVzc0NvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
S2lsbFJpbmcuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS2lsbFJpbmdOb25lLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwIFwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagkocmV2aXNpb24gMTY1
MjA2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTg5NDcsNiArMTg5NDcsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Ncd2luXFNoYXJlZEdESU9iamVjdC5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cSGlzdG9ncmFtU3VwcG9ydC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cSG9zdFdpbmRvdy5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cS2V5cHJlc3NDb21tYW5kLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxLaWxsUmluZy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGxhdGZvcm1cVVJMLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwbGF0Zm9ybVxVUkxIYXNoLmgiIC8+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCShyZXZp
c2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMJKHdvcmtpbmcgY29weSkKQEAgLTc5NjQsNiArNzk2NCw5IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxVUkxIYXNoLmgiPgogICAgICAgPEZpbHRl
cj5wbGF0Zm9ybTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGxhdGZvcm1cS2V5cHJlc3NDb21tYW5kLmgiPgorICAgICAgPEZpbHRlcj5wbGF0
Zm9ybTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccGxhdGZvcm1cTGFuZ3VhZ2UuaCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtPC9GaWx0ZXI+
CiAgICAgPC9DbEluY2x1ZGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTU3ODYsNiArNTc4Niw3IEBACiAJCUUxNTdBOEYxMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0
b0FsZ29yaXRobUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNTdBOEVGMTgxODU0MjUwMDlGODIxRCAvKiBKU0NyeXB0b0FsZ29yaXRobUJ1
aWxkZXIuaCAqLzsgfTsKIAkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFtZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ2
MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggKi87IH07CiAJCUUxNUEzNkQ5MTEwNDU3
MjcwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxNUEzNkQ4MTEwNDU3MjcwMEI3QjYzOSAvKiBYTUxOU05hbWVz
LmNwcCAqLzsgfTsKKwkJRTE1RkY3RDUxOEM5NTUzODAwRkU0Qzg3IC8qIEtleXByZXNzQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE1RkY3
RDQxOEM5NTUzODAwRkU0Qzg3IC8qIEtleXByZXNzQ29tbWFuZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxNjRGQUEzMTgzMTVCRjQwMERCNEU2
MSAvKiBDcnlwdG9LZXlSU0EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNjRGQUEyMTgzMTVCRjQwMERCNEU2MSAvKiBDcnlwdG9LZXlSU0EuaCAqLzsg
fTsKIAkJRTE2NEZBQTUxODMxNUUxQTAwREI0RTYxIC8qIENyeXB0b0tleVJTQU1hYy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY0RkFBNDE4MzE1
RTFBMDBEQjRFNjEgLyogQ3J5cHRvS2V5UlNBTWFjLmNwcCAqLzsgfTsKIAkJRTE2OTgwM0QxMTMz
NTQyRDAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODAzQzExMzM1NDJEMDA4OTQxMTUgLyogQ1J1bnRp
bWVPYmplY3QuaCAqLzsgfTsKQEAgLTEzMTAwLDYgKzEzMTAxLDcgQEAKIAkJRTE1N0E4RUYxODE4
NTQyNTAwOUY4MjFEIC8qIEpTQ3J5cHRvQWxnb3JpdGhtQnVpbGRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NyeXB0b0FsZ29yaXRobUJ1aWxkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE1QTM2RDYxMTA0NTcyMDAwQjdCNjM5IC8qIFhNTE5TTmFt
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gWE1MTlNOYW1lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTVBMzZEODExMDQ1NzI3MDBCN0I2MzkgLyogWE1M
TlNOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYTUxOU05h
bWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTE1RkY3RDQxOEM5NTUzODAw
RkU0Qzg3IC8qIEtleXByZXNzQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBLZXlwcmVzc0NvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE2
NEZBQTIxODMxNUJGNDAwREI0RTYxIC8qIENyeXB0b0tleVJTQS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBDcnlwdG9LZXlSU0EuaDsgcGF0aCA9IGtleXMvQ3J5cHRvS2V5UlNB
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjRGQUE0MTgzMTVFMUEwMERCNEU2
MSAvKiBDcnlwdG9LZXlSU0FNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQ3J5cHRvS2V5UlNBTWFjLmNwcDsgcGF0aCA9IG1hYy9DcnlwdG9LZXlSU0FNYWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTY5ODAzQzExMzM1NDJEMDA4OTQxMTUg
LyogQ1J1bnRpbWVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1J1
bnRpbWVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzk3LDYgKzIw
Nzk5LDcgQEAKIAkJCQlENjMwRTJBQjE0OUJGMzQ0MDA1QjJGOTMgLyogSGlzdG9ncmFtU3VwcG9y
dC5oICovLAogCQkJCUJDM0JDMjlCMEU5MUFCMEYwMDgzNTU4OCAvKiBIb3N0V2luZG93LmggKi8s
CiAJCQkJODYyRjEyOUYxOEMxRENFNDAwNUM1NEFGIC8qIEh5c3RlcmVzaXNBY3Rpdml0eS5oICov
LAorCQkJCUUxNUZGN0Q0MThDOTU1MzgwMEZFNEM4NyAvKiBLZXlwcmVzc0NvbW1hbmQuaCAqLywK
IAkJCQkxQUUwMEQ1NzE4MkRBQzhEMDAwODdERDcgLyogS2V5ZWRDb2RpbmcuaCAqLywKIAkJCQk1
MjFENDZGNzExQUVDOUIxMDA1MTQ2MTMgLyogS2lsbFJpbmcuaCAqLywKIAkJCQk0MzA2RTRFNTE0
OTU1NTQzMDA3RjE3QUMgLyogS2lsbFJpbmdOb25lLmNwcCAqLywKQEAgLTIzMjI2LDYgKzIzMjI5
LDcgQEAKIAkJCQk4NUU3MTE5MzBBQzVENTM1MDA1MzI3MEYgLyogRE9NQ1NTU3R5bGVEZWNsYXJh
dGlvbkludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTAzMkRFNzBBQThDOUJFMDA3RDNC
N0QgLyogRE9NQ1NTU3R5bGVSdWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTkwOUNFMjBBQ0M3
QTdFMDBERjAxRjEgLyogRE9NQ1NTU3R5bGVSdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCUUxNUZGN0Q1MThDOTU1MzgwMEZFNEM4NyAvKiBLZXlwcmVzc0NvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg1OEMzOTI4MEFBOEZGOUQwMEIxODdBNCAvKiBET01DU1NTdHlsZVNoZWV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTkwOUNFMzBBQ0M3QTdFMDBERjAxRjEgLyogRE9NQ1NT
U3R5bGVTaGVldEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlGQ0Q4ODMyQTE2QTQ5Rjgy
MDA5NjIyMjcgLyogRE9NQ1NTU3VwcG9ydHNSdWxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5jcHAJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYg
KzEwMiw5IEBAIEtleWJvYXJkRXZlbnRJbml0OjpLZXlib2FyZEV2ZW50SW5pdCgpCiBLZXlib2Fy
ZEV2ZW50OjpLZXlib2FyZEV2ZW50KCkKICAgICA6IG1fbG9jYXRpb24oRE9NX0tFWV9MT0NBVElP
Tl9TVEFOREFSRCkKICAgICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgLCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAK
QEAgLTExMiw2ICsxMTUsMTAgQEAgS2V5Ym9hcmRFdmVudDo6S2V5Ym9hcmRFdmVudChjb25zdCBQ
bGF0ZgogICAgICwgbV9rZXlJZGVudGlmaWVyKGtleS5rZXlJZGVudGlmaWVyKCkpCiAgICAgLCBt
X2xvY2F0aW9uKGtleUxvY2F0aW9uQ29kZShrZXkpKQogICAgICwgbV9hbHRHcmFwaEtleShmYWxz
ZSkKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAsIG1faGFuZGxlZEJ5SW5wdXRNZXRob2Qoa2V5
LmhhbmRsZWRCeUlucHV0TWV0aG9kKCkpCisgICAgLCBtX2tleXByZXNzQ29tbWFuZHMoa2V5LmNv
bW1hbmRzKCkpCisjZW5kaWYKIHsKIH0KIApAQCAtMTIwLDYgKzEyNyw5IEBAIEtleWJvYXJkRXZl
bnQ6OktleWJvYXJkRXZlbnQoY29uc3QgQXRvbWkKICAgICAsIG1fa2V5SWRlbnRpZmllcihpbml0
aWFsaXplci5rZXlJZGVudGlmaWVyKQogICAgICwgbV9sb2NhdGlvbihpbml0aWFsaXplci5sb2Nh
dGlvbikKICAgICAsIG1fYWx0R3JhcGhLZXkoZmFsc2UpCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgLCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQs
NyBAQAogI2lmbmRlZiBLZXlib2FyZEV2ZW50X2gKICNkZWZpbmUgS2V5Ym9hcmRFdmVudF9oCiAK
KyNpbmNsdWRlICJLZXlwcmVzc0NvbW1hbmQuaCIKICNpbmNsdWRlICJVSUV2ZW50V2l0aEtleVN0
YXRlLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTMz
LDE3ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIE5vZGU7CiBjbGFzcyBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQ7CiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0cnVjdCBLZXlwcmVz
c0NvbW1hbmQgewotICAgIEtleXByZXNzQ29tbWFuZCgpIHsgfQotICAgIGV4cGxpY2l0IEtleXBy
ZXNzQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKSA6IGNvbW1hbmROYW1lKGNvbW1h
bmROYW1lKSB7IEFTU0VSVChpc0FTQ0lJTG93ZXIoY29tbWFuZE5hbWVbMFVdKSk7IH0KLSAgICBL
ZXlwcmVzc0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiB0
ZXh0KSA6IGNvbW1hbmROYW1lKGNvbW1hbmROYW1lKSwgdGV4dCh0ZXh0KSB7IEFTU0VSVChjb21t
YW5kTmFtZSA9PSAiaW5zZXJ0VGV4dDoiKTsgfQotCi0gICAgU3RyaW5nIGNvbW1hbmROYW1lOyAv
LyBBY3R1YWxseSwgYSBzZWxlY3RvciBuYW1lIC0gaXQgbWF5IGhhdmUgYSB0cmFpbGluZyBjb2xv
biwgYW5kIGEgbmFtZSB0aGF0IGNhbiBiZSBkaWZmZXJlbnQgZnJvbSBhbiBlZGl0b3IgY29tbWFu
ZCBuYW1lLgotICAgIFN0cmluZyB0ZXh0OwotfTsKLSNlbmRpZgotCiBzdHJ1Y3QgS2V5Ym9hcmRF
dmVudEluaXQgOiBwdWJsaWMgVUlFdmVudEluaXQgewogICAgIEtleWJvYXJkRXZlbnRJbml0KCk7
CiAKQEAgLTEwNSw3ICs5NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgd2hpY2goKSBj
b25zdCBvdmVycmlkZTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIC8vIFdlIG9ubHkgaGF2
ZSB0aGlzIG5lZWQgdG8gc3RvcmUga2V5cHJlc3MgY29tbWFuZCBpbmZvIG9uIHRoZSBNYWMuCisg
ICAgYm9vbCBoYW5kbGVkQnlJbnB1dE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlZEJ5
SW5wdXRNZXRob2Q7IH0KKyAgICBjb25zdCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYga2V5cHJl
c3NDb21tYW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5cHJlc3NDb21tYW5kczsgfQorCisgICAg
Ly8gVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgV2ViS2l0MSAtIHdpdGggV2ViS2l0MiwgdGhlIGNv
bW1hbmRzIGFyZSBkZWxpdmVyZWQgZnJvbSBVSSBwcm9jZXNzLgogICAgIFZlY3RvcjxLZXlwcmVz
c0NvbW1hbmQ+JiBrZXlwcmVzc0NvbW1hbmRzKCkgeyByZXR1cm4gbV9rZXlwcmVzc0NvbW1hbmRz
OyB9CiAjZW5kaWYKIApAQCAtMTIxLDYgKzExNCw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICAgICAvLyBDb21tYW5kcyB0aGF0IHdlcmUgc2VudCBieSBBcHBLaXQgd2hlbiBp
bnRlcnByZXRpbmcgdGhlIGV2ZW50LiBEb2Vzbid0IGluY2x1ZGUgaW5wdXQgbWV0aG9kIGNvbW1h
bmRzLgorICAgIGJvb2wgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZDsKICAgICBWZWN0b3I8S2V5cHJl
c3NDb21tYW5kPiBtX2tleXByZXNzQ29tbWFuZHM7CiAjZW5kaWYKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9LZXlwcmVzc0NvbW1hbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9LZXlwcmVzc0NvbW1hbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0tleXByZXNzQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleXByZXNzQ29tbWFuZF9oCisjZGVm
aW5lIEtleXByZXNzQ29tbWFuZF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNp
ZiBQTEFURk9STShDT0NPQSkKK3N0cnVjdCBLZXlwcmVzc0NvbW1hbmQgeworICAgIEtleXByZXNz
Q29tbWFuZCgpIHsgfQorICAgIGV4cGxpY2l0IEtleXByZXNzQ29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lKSA6IGNvbW1hbmROYW1lKGNvbW1hbmROYW1lKSB7IEFTU0VSVChpc0FTQ0lJ
TG93ZXIoY29tbWFuZE5hbWVbMFVdKSk7IH0KKyAgICBLZXlwcmVzc0NvbW1hbmQoY29uc3QgU3Ry
aW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiB0ZXh0KSA6IGNvbW1hbmROYW1lKGNvbW1h
bmROYW1lKSwgdGV4dCh0ZXh0KSB7IEFTU0VSVChjb21tYW5kTmFtZSA9PSAiaW5zZXJ0VGV4dDoi
KTsgfQorCisgICAgU3RyaW5nIGNvbW1hbmROYW1lOyAvLyBBY3R1YWxseSwgYSBzZWxlY3RvciBu
YW1lIC0gaXQgbWF5IGhhdmUgYSB0cmFpbGluZyBjb2xvbiwgYW5kIGEgbmFtZSB0aGF0IGNhbiBi
ZSBkaWZmZXJlbnQgZnJvbSBhbiBlZGl0b3IgY29tbWFuZCBuYW1lLgorICAgIFN0cmluZyB0ZXh0
OworfTsKKyNlbmRpZgorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8g
S2V5cHJlc3NDb21tYW5kX2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0tleXByZXNzQ29tbWFuZC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
IyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
CShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBQ
bGF0Zm9ybUtleWJvYXJkRXZlbnRfaAogI2RlZmluZSBQbGF0Zm9ybUtleWJvYXJkRXZlbnRfaAog
CisjaW5jbHVkZSAiS2V5cHJlc3NDb21tYW5kLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1FdmVudC5o
IgogI2luY2x1ZGUgPHd0Zi9XaW5kb3dzRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CkBAIC02MCw2ICs2MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgICwgbV93aW5kb3dzVmlydHVhbEtleUNvZGUoMCkKICAgICAgICAgICAgICwgbV9uYXRpdmVW
aXJ0dWFsS2V5Q29kZSgwKQogICAgICAgICAgICAgLCBtX21hY0NoYXJDb2RlKDApCisjaWYgVVNF
KEFQUEtJVCkKKyAgICAgICAgICAgICwgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZChmYWxzZSkKKyNl
bmRpZgogICAgICAgICAgICAgLCBtX2F1dG9SZXBlYXQoZmFsc2UpCiAgICAgICAgICAgICAsIG1f
aXNLZXlwYWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNTeXN0ZW1LZXkoZmFsc2UpCkBAIC03
Nyw2ICs4MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV93aW5kb3dz
VmlydHVhbEtleUNvZGUod2luZG93c1ZpcnR1YWxLZXlDb2RlKQogICAgICAgICAgICAgLCBtX25h
dGl2ZVZpcnR1YWxLZXlDb2RlKG5hdGl2ZVZpcnR1YWxLZXlDb2RlKQogICAgICAgICAgICAgLCBt
X21hY0NoYXJDb2RlKG1hY0NoYXJDb2RlKQorI2lmIFVTRShBUFBLSVQpCisgICAgICAgICAgICAs
IG1faGFuZGxlZEJ5SW5wdXRNZXRob2QoZmFsc2UpCisjZW5kaWYKICAgICAgICAgICAgICwgbV9h
dXRvUmVwZWF0KGlzQXV0b1JlcGVhdCkKICAgICAgICAgICAgICwgbV9pc0tleXBhZChpc0tleXBh
ZCkKICAgICAgICAgICAgICwgbV9pc1N5c3RlbUtleShpc1N5c3RlbUtleSkKQEAgLTEwOCw2ICsx
MTUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbmF0aXZlVmlydHVhbEtl
eUNvZGUoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlOyB9CiAgICAgICAg
IGludCBtYWNDaGFyQ29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFjQ2hhckNvZGU7IH0KIAorI2lm
IFVTRShBUFBLSVQpCisgICAgICAgIGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QoKSBjb25zdCB7
IHJldHVybiBtX2hhbmRsZWRCeUlucHV0TWV0aG9kOyB9CisgICAgICAgIGNvbnN0IFZlY3RvcjxL
ZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcygpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWFuZHM7IH0K
KyNlbmRpZgorCiAgICAgICAgIGJvb2wgaXNBdXRvUmVwZWF0KCkgY29uc3QgeyByZXR1cm4gbV9h
dXRvUmVwZWF0OyB9CiAgICAgICAgIGJvb2wgaXNLZXlwYWQoKSBjb25zdCB7IHJldHVybiBtX2lz
S2V5cGFkOyB9CiAgICAgICAgIGJvb2wgaXNTeXN0ZW1LZXkoKSBjb25zdCB7IHJldHVybiBtX2lz
U3lzdGVtS2V5OyB9CkBAIC0xNTAsNiArMTYyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgaW50IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlOwogICAgICAgICBpbnQgbV9uYXRpdmVW
aXJ0dWFsS2V5Q29kZTsKICAgICAgICAgaW50IG1fbWFjQ2hhckNvZGU7CisjaWYgVVNFKEFQUEtJ
VCkKKyAgICAgICAgYm9vbCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kOworICAgICAgICBWZWN0b3I8
S2V5cHJlc3NDb21tYW5kPiBtX2NvbW1hbmRzOworI2VuZGlmCiAgICAgICAgIGJvb2wgbV9hdXRv
UmVwZWF0OwogICAgICAgICBib29sIG1faXNLZXlwYWQ7CiAgICAgICAgIGJvb2wgbV9pc1N5c3Rl
bUtleTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDE0LTAzLTA2ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIERvbid0
IHBlcmZvcm0gYSByb3VuZC10cmlwIHRocm91Z2ggV2ViUHJvY2VzcyBiZWZvcmUgaW50ZXJwcmV0
aW5nIGtleSBldmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyOTgxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU2hhcmVkL05hdGl2ZVdlYktleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKiBTaGFy
ZWQvV2ViRXZlbnQuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudDo6aGFuZGxl
ZEJ5SW5wdXRNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50Ojpjb21t
YW5kcyk6CisgICAgICAgICogU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYktpdDJQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OldlYktpdDJQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9XZWJLZXlib2FyZEV2ZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQ6On5XZWJLZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudDo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViS2V5Ym9hcmRFdmVudDo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvbWFjL05hdGl2ZVdl
YktleWJvYXJkRXZlbnRNYWMubW06CisgICAgICAgIChXZWJLaXQ6Ok5hdGl2ZVdlYktleWJvYXJk
RXZlbnQ6Ok5hdGl2ZVdlYktleWJvYXJkRXZlbnQpOgorICAgICAgICAqIFNoYXJlZC9tYWMvV2Vi
RXZlbnRGYWN0b3J5Lmg6CisgICAgICAgICogU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW06
CisgICAgICAgIChXZWJLaXQ6OldlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVu
dCk6CisgICAgICAgIEtleWJvYXJkIGV2ZW50cyBub3cgY2FycnkgcmVzdWx0cyBvZiBpbnRlcnBy
ZXRhdGlvbiB3aXRoIHRoZW0uCisgICAgICAgIElkZWFsbHksIG1vdXNlIGV2ZW50cyBzaG91bGQg
YWxzbyBoYXZlIGEgaGFuZGxlZEJ5SW5wdXRNZXRob2QgbWVtYmVyLCBiZWNhdXNlIElNcworICAg
ICAgICBjYW4gaGFuZGxlIGV2ZW50cywgYnV0IHRoYXQgY2FuIHdhaXQgdW50aWwgd2UgaGF2ZSBh
Y3R1YWwgYnVncyBjYXVzZWQgYnkgbm90IGRpYWJsaW5nCisgICAgICAgIGRlZmF1bHQgcHJvY2Vz
c2luZyBmb3IgdGhlc2UuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06
CisgICAgICAgICgtW1dLVmlldyBiZWNvbWVGaXJzdFJlc3BvbmRlcl0pOiBVcGRhdGVkIGZvciBu
ZXcgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCBjb250cnVjdG9yCisgICAgICAgIHNpZ25hdHVyZS4g
V2UgZG9uJ3QgaW50ZXJwcmV0IHRoZSBldmVudCBpbiB0aGlzIGNvZGUgcGF0aC4KKyAgICAgICAg
KC1bV0tWaWV3IGRvQ29tbWFuZEJ5U2VsZWN0b3I6XSk6IEFkZGVkIGxvZ2dpbmcuCisgICAgICAg
ICgtW1dLVmlldyBwZXJmb3JtS2V5RXF1aXZhbGVudDpdKTogUmVpbXBsZW1lbnRlZCBFc2MgYW5k
IENtZCtwZXJpb2QgaGFuZGxpbmcgdG8gYXZvaWQKKyAgICAgICAgaW5maW5pdGUgbG9vcHMgYW5k
IHJlLWVudHJhbmN5LiBUaGVzZSB0d28gd29yayBpbiBhIHVuaXF1ZSB3YXkgaW4gQXBwS2l0Lgor
ICAgICAgICBJbnRlcnByZXQga2V5IGV2ZW50IGJlZm9yZSBzZW5kaW5nIGl0IGRvd24gdG8gV2Vi
UHJvY2Vzcy4KKyAgICAgICAgKC1bV0tWaWV3IGtleVVwOl0pOiBJbnRlcnByZXQga2V5IGV2ZW50
IGJlZm9yZSBzZW5kaW5nIGl0IGRvd24gdG8gV2ViUHJvY2Vzcy4KKyAgICAgICAgV2UgbmVlZCB0
byB0ZWxsIElNcyBhYm91dCB0aGUgZXZlbnQsIGJ1dCBrZXkgYmluZGluZyBwcm9jZXNzaW5nIGlz
IG1vb3QsIGFsbCBjb21tYW5kcworICAgICAgICBhcmUgZXhlY3V0ZWQgb24ga2V5ZG93bi4KKyAg
ICAgICAgKC1bV0tWaWV3IGtleURvd246XSk6IEludGVycHJldCB0aGUgZXZlbnQuCisgICAgICAg
ICgtW1dLVmlldyBmbGFnc0NoYW5nZWQ6XSk6IERpdHRvLgorICAgICAgICAoLVtXS1ZpZXcgX2lu
dGVycHJldEtleUV2ZW50OnNhdmluZ0NvbW1hbmRzVG86V2ViQ29yZTo6XSk6IEFkZGVkIGFuIGFz
c2VydGlvbiBpbgorICAgICAgICBjb25zdW1lZEJ5SU0gY29kZSBwYXRoLgorICAgICAgICAoLVtX
S1ZpZXcgX2V4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOl0pOiBBZGRlZCBsb2dnaW5nLgor
CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5tbToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLmg6
CisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbToKKyAgICAgICAg
UmVtb3ZlZCBpbnRlcnByZXRRdWV1ZWRLZXlFdmVudC9pbnRlcnByZXRLZXlFdmVudCwgV2ViUHJv
Y2VzcyBubyBsb25nZXIgYXNrcyBVSVByb2Nlc3MgdG8gZG8gdGhpcy4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkVkaXRvckNsaWVudElPUy5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRFdmVudCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlk
b3duKToKKyAgICAgICAgV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQgaXMgbm93
IG9uZSBmdW5jdGlvbiBpbnN0ZWFkIG9mIHR3byB3aXRoIGEgYm9vbGVhbgorICAgICAgICBzd2l0
Y2ggYmV0d2VlbiB0d28gYmVoYXZpb3JzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwOihXZWJLaXQ6OldlYlBhZ2U6OldlYlBhZ2UpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgIFJlbW92ZWQgbV9rZXlib2FyZEV2ZW50
QmVpbmdJbnRlcnByZXRlZCwgYXMgd2Ugbm8gbG9uZ2VyIHNlbmQgdGhlIGV2ZW50IGZvciBpbnRl
cnByZXRhdGlvbi4KKyAgICAgICAgVGhpcyBtZWFucyB0aGF0IHdlIHNvbWV0aW1lcyBoYXZlIHRv
IHBhc3MgYSBudWxsIGV2ZW50IGRvd24gdG8gV2ViQ29yZSwgYnV0IEkgd2Fzbid0CisgICAgICAg
IGFibGUgdG8gZmluZCBhbnkgYmVoYXZpb3IgZGlmZmVyZW5jZXMgZnJvbSB1cyBkb2luZyBzby4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbTogKFdlYktp
dDo6V2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQpOgorICAgICAgICBBZGRlZCBh
IEZJWE1FLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVy
bmFsKTogV2hlbiB3ZSBkb24ndCBoYXZlIGFuIGV2ZW50LAorICAgICAgICB1c2UgY3VycmVudCBm
cmFtZSBhcyBhIHRhcmdldCwganVzdCBsaWtlIGlucHV0IG1ldGhvZCBtZXNzYWdlcyBkby4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQpOiBUaGlz
IGZ1bmN0aW9uIG5vIGxvbmdlciBzYXZlcyBjb21tYW5kcywKKyAgICAgICAgaXQgb25seSBpbnRl
cnByZXRzIHRoZW0uCisgICAgICAgIEFkZGVkIGEgY2hlY2sgZm9yIEVzYywgYXMgd2UgZG9uJ3Qg
d2FudCB0byBoYW5kbGUgaXQgaW4ga2V5ZG93biBldmVudCBoYW5kbGVyLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjppbnNlcnRUZXh0KTogUGFzcyAwIGluc3RlYWQgb2YgbV9rZXlib2FyZEV2
ZW50QmVpbmdJbnRlcnByZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5zZXJ0RGlj
dGF0ZWRUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmV4ZWN1dGVLZXlw
cmVzc0NvbW1hbmRzKTogRGl0dG8uCisKIDIwMTQtMDMtMDYgIEpvc2VwaCBQZWNvcmFybyAgPHBl
Y29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFeHBvc2UgdGhlIGNv
bnNvbGUgb2JqZWN0IGluIEpTQ29udGV4dHMgdG8gaW50ZXJhY3Qgd2l0aCBXZWIgSW5zcGVjdG9y
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmgJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OYXRpdmVXZWJL
ZXlib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDEwIEBACiAjaWYgVVNF
KEFQUEtJVCkKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiBPQkpDX0NMQVNTIE5TVmlldzsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworc3RydWN0IEtleXByZXNzQ29tbWFuZDsKK30KICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oRUZMKQpAQCAtNTYsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIGNsYXNzIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQgOiBwdWJsaWMgV2ViS2V5Ym9hcmRFdmVu
dCB7CiBwdWJsaWM6CiAjaWYgVVNFKEFQUEtJVCkKLSAgICBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
KE5TRXZlbnQgKiwgTlNWaWV3ICopOworICAgIE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoTlNFdmVu
dCAqLCBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5
cHJlc3NDb21tYW5kPiYpOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIE5hdGl2ZVdlYktleWJv
YXJkRXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYpOwogICAgIE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQoR2RrRXZlbnQqLCBjb25zdCBXZWJDb3JlOjpDb21wb3NpdGlvblJlc3VsdHMm
LCBXZWJDb3JlOjpHdGtJbnB1dE1ldGhvZEZpbHRlcjo6RXZlbnRGYWtlZEZvckNvbXBvc2l0aW9u
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJFdmVudC5oCShyZXZpc2lvbiAxNjUyMDYpCisrKyBT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsMTIgQEAgbmFtZXNwYWNlIElQQyB7CiAgICAgY2xhc3MgQXJndW1lbnRFbmNvZGVyOwogfQog
CisjaWYgVVNFKEFQUEtJVCkKK25hbWVzcGFjZSBXZWJDb3JlIHsKK3N0cnVjdCBLZXlwcmVzc0Nv
bW1hbmQ7Cit9CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkV2ZW50
IHsKQEAgLTIwNyw5ICsyMTMsMTQgQEAgcHJpdmF0ZToKIC8vIEZJWE1FOiBNb3ZlIHRoaXMgY2xh
c3MgdG8gaXRzIG93biBoZWFkZXIgZmlsZS4KIGNsYXNzIFdlYktleWJvYXJkRXZlbnQgOiBwdWJs
aWMgV2ViRXZlbnQgewogcHVibGljOgotICAgIFdlYktleWJvYXJkRXZlbnQoKSB7IH0KKyAgICBX
ZWJLZXlib2FyZEV2ZW50KCk7CisgICAgfldlYktleWJvYXJkRXZlbnQoKTsKIAorI2lmIFVTRShB
UFBLSVQpCisgICAgV2ViS2V5Ym9hcmRFdmVudChUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFN0cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwg
aW50IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBpbnQg
bWFjQ2hhckNvZGUsIGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGNvbnN0IFZlY3RvcjxXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiwgYm9vbCBpc0F1dG9SZXBlYXQsIGJvb2wgaXNLZXlwYWQs
IGJvb2wgaXNTeXN0ZW1LZXksIE1vZGlmaWVycywgZG91YmxlIHRpbWVzdGFtcCk7CisjZWxzZQog
ICAgIFdlYktleWJvYXJkRXZlbnQoVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJp
bmcmIHVubW9kaWZpZWRUZXh0LCBjb25zdCBTdHJpbmcmIGtleUlkZW50aWZpZXIsIGludCB3aW5k
b3dzVmlydHVhbEtleUNvZGUsIGludCBuYXRpdmVWaXJ0dWFsS2V5Q29kZSwgaW50IG1hY0NoYXJD
b2RlLCBib29sIGlzQXV0b1JlcGVhdCwgYm9vbCBpc0tleXBhZCwgYm9vbCBpc1N5c3RlbUtleSwg
TW9kaWZpZXJzLCBkb3VibGUgdGltZXN0YW1wKTsKKyNlbmRpZgogCiAgICAgY29uc3QgU3RyaW5n
JiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CiAgICAgY29uc3QgU3RyaW5nJiB1bm1v
ZGlmaWVkVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdW5tb2RpZmllZFRleHQ7IH0KQEAgLTIxNyw2
ICsyMjgsMTAgQEAgcHVibGljOgogICAgIGludDMyX3Qgd2luZG93c1ZpcnR1YWxLZXlDb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV93aW5kb3dzVmlydHVhbEtleUNvZGU7IH0KICAgICBpbnQzMl90IG5h
dGl2ZVZpcnR1YWxLZXlDb2RlKCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVWaXJ0dWFsS2V5Q29k
ZTsgfQogICAgIGludDMyX3QgbWFjQ2hhckNvZGUoKSBjb25zdCB7IHJldHVybiBtX21hY0NoYXJD
b2RlOyB9CisjaWYgVVNFKEFQUEtJVCkKKyAgICBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kKCkg
Y29uc3QgeyByZXR1cm4gbV9oYW5kbGVkQnlJbnB1dE1ldGhvZDsgfQorICAgIGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29tbWFuZHM7IH0KKyNlbmRpZgogICAgIGJvb2wgaXNBdXRvUmVwZWF0KCkgY29uc3QgeyByZXR1
cm4gbV9pc0F1dG9SZXBlYXQ7IH0KICAgICBib29sIGlzS2V5cGFkKCkgY29uc3QgeyByZXR1cm4g
bV9pc0tleXBhZDsgfQogICAgIGJvb2wgaXNTeXN0ZW1LZXkoKSBjb25zdCB7IHJldHVybiBtX2lz
U3lzdGVtS2V5OyB9CkBAIC0yMzMsNiArMjQ4LDEwIEBAIHByaXZhdGU6CiAgICAgaW50MzJfdCBt
X3dpbmRvd3NWaXJ0dWFsS2V5Q29kZTsKICAgICBpbnQzMl90IG1fbmF0aXZlVmlydHVhbEtleUNv
ZGU7CiAgICAgaW50MzJfdCBtX21hY0NoYXJDb2RlOworI2lmIFVTRShBUFBLSVQpCisgICAgYm9v
bCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kOworICAgIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0Nv
bW1hbmQ+IG1fY29tbWFuZHM7CisjZW5kaWYKICAgICBib29sIG1faXNBdXRvUmVwZWF0OwogICAg
IGJvb2wgbV9pc0tleXBhZDsKICAgICBib29sIG1faXNTeXN0ZW1LZXk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvV2ViRXZlbnRDb252ZXJzaW9uLmNwcAkocmV2aXNpb24gMTY1MjA2
KQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkV2ZW50Q29udmVyc2lvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTAgQEAgcHVibGljOgogICAgICAgICBtX3dpbmRvd3NW
aXJ0dWFsS2V5Q29kZSA9IHdlYkV2ZW50LndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpOwogICAgICAg
ICBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlID0gd2ViRXZlbnQubmF0aXZlVmlydHVhbEtleUNvZGUo
KTsKICAgICAgICAgbV9tYWNDaGFyQ29kZSA9IHdlYkV2ZW50Lm1hY0NoYXJDb2RlKCk7CisjaWYg
VVNFKEFQUEtJVCkKKyAgICAgICAgbV9oYW5kbGVkQnlJbnB1dE1ldGhvZCA9IHdlYkV2ZW50Lmhh
bmRsZWRCeUlucHV0TWV0aG9kKCk7CisgICAgICAgIG1fY29tbWFuZHMgPSB3ZWJFdmVudC5jb21t
YW5kcygpOworI2VuZGlmCiAgICAgICAgIG1fYXV0b1JlcGVhdCA9IHdlYkV2ZW50LmlzQXV0b1Jl
cGVhdCgpOwogICAgICAgICBtX2lzS2V5cGFkID0gd2ViRXZlbnQuaXNLZXlwYWQoKTsKICAgICAg
ICAgbV9pc1N5c3RlbUtleSA9IHdlYkV2ZW50LmlzU3lzdGVtS2V5KCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYktleWJvYXJkRXZlbnQuY3BwCShyZXZpc2lvbiAxNjUyMDYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViS2V5Ym9hcmRFdmVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDkgKzI3LDM1IEBACiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKIAogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvS2V5cHJlc3NDb21t
YW5kLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitXZWJLZXlib2FyZEV2ZW50OjpXZWJLZXli
b2FyZEV2ZW50KCkKK3sKK30KKworI2lmIFVTRShBUFBLSVQpCisKK1dlYktleWJvYXJkRXZlbnQ6
OldlYktleWJvYXJkRXZlbnQoVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0
cmluZyYgdW5tb2RpZmllZFRleHQsIGNvbnN0IFN0cmluZyYga2V5SWRlbnRpZmllciwgaW50IHdp
bmRvd3NWaXJ0dWFsS2V5Q29kZSwgaW50IG5hdGl2ZVZpcnR1YWxLZXlDb2RlLCBpbnQgbWFjQ2hh
ckNvZGUsIGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpL
ZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcywgYm9vbCBpc0F1dG9SZXBlYXQsIGJvb2wgaXNLZXlw
YWQsIGJvb2wgaXNTeXN0ZW1LZXksIE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0aW1lc3Rh
bXApCisgICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKKyAgICAsIG1f
dGV4dCh0ZXh0KQorICAgICwgbV91bm1vZGlmaWVkVGV4dCh1bm1vZGlmaWVkVGV4dCkKKyAgICAs
IG1fa2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyKQorICAgICwgbV93aW5kb3dzVmlydHVhbEtl
eUNvZGUod2luZG93c1ZpcnR1YWxLZXlDb2RlKQorICAgICwgbV9uYXRpdmVWaXJ0dWFsS2V5Q29k
ZShuYXRpdmVWaXJ0dWFsS2V5Q29kZSkKKyAgICAsIG1fbWFjQ2hhckNvZGUobWFjQ2hhckNvZGUp
CisgICAgLCBtX2hhbmRsZWRCeUlucHV0TWV0aG9kKGhhbmRsZWRCeUlucHV0TWV0aG9kKQorICAg
ICwgbV9jb21tYW5kcyhjb21tYW5kcykKKyAgICAsIG1faXNBdXRvUmVwZWF0KGlzQXV0b1JlcGVh
dCkKKyAgICAsIG1faXNLZXlwYWQoaXNLZXlwYWQpCisgICAgLCBtX2lzU3lzdGVtS2V5KGlzU3lz
dGVtS2V5KQoreworICAgIEFTU0VSVChpc0tleWJvYXJkRXZlbnRUeXBlKHR5cGUpKTsKK30KKwor
I2Vsc2UKKwogV2ViS2V5Ym9hcmRFdmVudDo6V2ViS2V5Ym9hcmRFdmVudChUeXBlIHR5cGUsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiB1bm1vZGlmaWVkVGV4dCwgY29uc3QgU3Ry
aW5nJiBrZXlJZGVudGlmaWVyLCBpbnQgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBpbnQgbmF0aXZl
VmlydHVhbEtleUNvZGUsIGludCBtYWNDaGFyQ29kZSwgYm9vbCBpc0F1dG9SZXBlYXQsIGJvb2wg
aXNLZXlwYWQsIGJvb2wgaXNTeXN0ZW1LZXksIE1vZGlmaWVycyBtb2RpZmllcnMsIGRvdWJsZSB0
aW1lc3RhbXApCiAgICAgOiBXZWJFdmVudCh0eXBlLCBtb2RpZmllcnMsIHRpbWVzdGFtcCkKICAg
ICAsIG1fdGV4dCh0ZXh0KQpAQCAtNDUsNiArNzEsMTIgQEAgV2ViS2V5Ym9hcmRFdmVudDo6V2Vi
S2V5Ym9hcmRFdmVudChUeXBlIAogICAgIEFTU0VSVChpc0tleWJvYXJkRXZlbnRUeXBlKHR5cGUp
KTsKIH0KIAorI2VuZGlmCisKK1dlYktleWJvYXJkRXZlbnQ6On5XZWJLZXlib2FyZEV2ZW50KCkK
K3sKK30KKwogdm9pZCBXZWJLZXlib2FyZEV2ZW50OjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29k
ZXImIGVuY29kZXIpIGNvbnN0CiB7CiAgICAgV2ViRXZlbnQ6OmVuY29kZShlbmNvZGVyKTsKQEAg
LTU1LDYgKzg3LDEwIEBAIHZvaWQgV2ViS2V5Ym9hcmRFdmVudDo6ZW5jb2RlKElQQzo6QXJndW0K
ICAgICBlbmNvZGVyIDw8IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlOwogICAgIGVuY29kZXIgPDwg
bV9uYXRpdmVWaXJ0dWFsS2V5Q29kZTsKICAgICBlbmNvZGVyIDw8IG1fbWFjQ2hhckNvZGU7Cisj
aWYgVVNFKEFQUEtJVCkKKyAgICBlbmNvZGVyIDw8IG1faGFuZGxlZEJ5SW5wdXRNZXRob2Q7Cisg
ICAgZW5jb2RlciA8PCBtX2NvbW1hbmRzOworI2VuZGlmCiAgICAgZW5jb2RlciA8PCBtX2lzQXV0
b1JlcGVhdDsKICAgICBlbmNvZGVyIDw8IG1faXNLZXlwYWQ7CiAgICAgZW5jb2RlciA8PCBtX2lz
U3lzdGVtS2V5OwpAQCAtNzcsNiArMTEzLDEyIEBAIGJvb2wgV2ViS2V5Ym9hcmRFdmVudDo6ZGVj
b2RlKElQQzo6QXJndW0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUocmVzdWx0Lm1fbWFjQ2hhckNvZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisjaWYg
VVNFKEFQUEtJVCkKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2hhbmRsZWRCeUlu
cHV0TWV0aG9kKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUocmVzdWx0Lm1fY29tbWFuZHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKICAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2lzQXV0b1JlcGVhdCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2lzS2V5cGFkKSkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL05hdGl2ZVdlYktl
eWJvYXJkRXZlbnRNYWMubW0JKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvTmF0aXZlV2ViS2V5Ym9hcmRFdmVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjksMTEgKzI5LDE0IEBACiAjaWYgVVNFKEFQUEtJVCkKIAogI2ltcG9ydCAiV2ViRXZlbnRGYWN0
b3J5LmgiCisjaW1wb3J0IDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1OYXRpdmVXZWJLZXlib2FyZEV2
ZW50OjpOYXRpdmVXZWJLZXlib2FyZEV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKnZpZXcp
Ci0gICAgOiBXZWJLZXlib2FyZEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9h
cmRFdmVudChldmVudCwgdmlldykpCitOYXRpdmVXZWJLZXlib2FyZEV2ZW50OjpOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50KE5TRXZlbnQgKmV2ZW50LCBib29sIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBj
b25zdCBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiYgY29tbWFuZHMpCisgICAgOiBXZWJLZXlib2Fy
ZEV2ZW50KFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRlV2ViS2V5Ym9hcmRFdmVudChldmVudCwgaGFu
ZGxlZEJ5SW5wdXRNZXRob2QsIGNvbW1hbmRzKSkKICAgICAsIG1fbmF0aXZlRXZlbnQoZXZlbnQp
CiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5
LmgJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZl
bnRGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBXZWJFdmVudEZhY3RvcnkgewogcHVibGljOgogI2lmIFVTRShBUFBLSVQp
Ci0gICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3JlYXRlV2ViTW91c2VFdmVudChOU0V2ZW50ICpl
dmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KTsKLSAgICBzdGF0aWMgV2ViV2hlZWxFdmVudCBjcmVh
dGVXZWJXaGVlbEV2ZW50KE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpOwotICAg
IHN0YXRpYyBXZWJLZXlib2FyZEV2ZW50IGNyZWF0ZVdlYktleWJvYXJkRXZlbnQoTlNFdmVudCAq
ZXZlbnQsIE5TVmlldyAqd2luZG93Vmlldyk7CisgICAgc3RhdGljIFdlYk1vdXNlRXZlbnQgY3Jl
YXRlV2ViTW91c2VFdmVudChOU0V2ZW50ICosIE5TVmlldyAqd2luZG93Vmlldyk7CisgICAgc3Rh
dGljIFdlYldoZWVsRXZlbnQgY3JlYXRlV2ViV2hlZWxFdmVudChOU0V2ZW50ICosIE5TVmlldyAq
d2luZG93Vmlldyk7CisgICAgc3RhdGljIFdlYktleWJvYXJkRXZlbnQgY3JlYXRlV2ViS2V5Ym9h
cmRFdmVudChOU0V2ZW50ICosIGJvb2wgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAjZW5kaWYgLy8gVVNFKEFQUEtJVCkKIH07
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1t
CShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50
RmFjdG9yeS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFVTRShBUFBL
SVQpCiAKICNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCA8V2ViQ29y
ZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtRXZlbnRGYWN0b3J5
TWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Njcm9sbGJhci5oPgogI2ltcG9ydCA8V2ViQ29yZS9X
aW5kb3dzS2V5Ym9hcmRDb2Rlcy5oPgpAQCAtNDA1LDcgKzQwNiw3IEBAIFdlYldoZWVsRXZlbnQg
V2ViRXZlbnRGYWN0b3J5OjpjcmVhdGVXZWIKICAgICByZXR1cm4gV2ViV2hlZWxFdmVudChXZWJF
dmVudDo6V2hlZWwsIEludFBvaW50KHBvc2l0aW9uKSwgSW50UG9pbnQoZ2xvYmFsUG9zaXRpb24p
LCBGbG9hdFNpemUoZGVsdGFYLCBkZWx0YVkpLCBGbG9hdFNpemUod2hlZWxUaWNrc1gsIHdoZWVs
VGlja3NZKSwgZ3JhbnVsYXJpdHksIGRpcmVjdGlvbkludmVydGVkRnJvbURldmljZSwgcGhhc2Us
IG1vbWVudHVtUGhhc2UsIGhhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMsIHNjcm9sbENvdW50LCB1
bmFjY2VsZXJhdGVkU2Nyb2xsaW5nRGVsdGEsIG1vZGlmaWVycywgdGltZXN0YW1wKTsKIH0KIAot
V2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rvcnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQo
TlNFdmVudCAqZXZlbnQsIE5TVmlldyAqKQorV2ViS2V5Ym9hcmRFdmVudCBXZWJFdmVudEZhY3Rv
cnk6OmNyZWF0ZVdlYktleWJvYXJkRXZlbnQoTlNFdmVudCAqZXZlbnQsIGJvb2wgaGFuZGxlZEJ5
SW5wdXRNZXRob2QsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21t
YW5kcykKIHsKICAgICBXZWJFdmVudDo6VHlwZSB0eXBlICAgICAgICAgICAgID0gaXNLZXlVcEV2
ZW50KGV2ZW50KSA/IFdlYkV2ZW50OjpLZXlVcCA6IFdlYkV2ZW50OjpLZXlEb3duOwogICAgIFN0
cmluZyB0ZXh0ICAgICAgICAgICAgICAgICAgICAgPSB0ZXh0RnJvbUV2ZW50KGV2ZW50KTsKQEAg
LTQzOCw3ICs0MzksNyBAQCBXZWJLZXlib2FyZEV2ZW50IFdlYkV2ZW50RmFjdG9yeTo6Y3JlYXRl
CiAgICAgICAgIHVubW9kaWZpZWRUZXh0ID0gIlx4OSI7CiAgICAgfQogCi0gICAgcmV0dXJuIFdl
YktleWJvYXJkRXZlbnQodHlwZSwgdGV4dCwgdW5tb2RpZmllZFRleHQsIGtleUlkZW50aWZpZXIs
IHdpbmRvd3NWaXJ0dWFsS2V5Q29kZSwgbmF0aXZlVmlydHVhbEtleUNvZGUsIG1hY0NoYXJDb2Rl
LCBhdXRvUmVwZWF0LCBpc0tleXBhZCwgaXNTeXN0ZW1LZXksIG1vZGlmaWVycywgdGltZXN0YW1w
KTsKKyAgICByZXR1cm4gV2ViS2V5Ym9hcmRFdmVudCh0eXBlLCB0ZXh0LCB1bm1vZGlmaWVkVGV4
dCwga2V5SWRlbnRpZmllciwgd2luZG93c1ZpcnR1YWxLZXlDb2RlLCBuYXRpdmVWaXJ0dWFsS2V5
Q29kZSwgbWFjQ2hhckNvZGUsIGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb21tYW5kcywgYXV0b1Jl
cGVhdCwgaXNLZXlwYWQsIGlzU3lzdGVtS2V5LCBtb2RpZmllcnMsIHRpbWVzdGFtcCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFn
ZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKSA9
IDA7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc2liaWxpdHlX
ZWJQcm9jZXNzVG9rZW5SZWNlaXZlZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmLCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYpID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREcmFnSW1hZ2UoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJh
Z0ltYWdlLCBib29sIGlzTGlua0RyYWcpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Vj
dXJlSW5wdXRTdGF0ZSgpID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2Niw3ICsxMDY2LDYgQEAgcHJpdmF0
ZToKIAogICAgIC8vIEtleWJvYXJkIGhhbmRsaW5nCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAg
dm9pZCBpbnRlcnByZXRRdWV1ZWRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYsIGJvb2wmIGhh
bmRsZWQsIFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+Jik7CiAgICAgdm9pZCBleGVj
dXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBib29sJiBo
YW5kbGVkKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTI1OSw3ICsyNTksNiBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIERpZFBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwKFdlYktpdDo6QXR0cmlidXRlZFN0cmluZyB0ZXh0LCBXZWJL
aXQ6OkRpY3Rpb25hcnlQb3B1cEluZm8gZGljdGlvbmFyeVBvcHVwSW5mbykKIAogICAgICMgS2V5
Ym9hcmQgaW5wdXQgc3VwcG9ydCBtZXNzYWdlcwotICAgIEludGVycHJldFF1ZXVlZEtleUV2ZW50
KFdlYktpdDo6RWRpdG9yU3RhdGUgc3RhdGUpIC0+IChib29sIGhhbmRsZWQsIFZlY3RvcjxXZWJD
b3JlOjpLZXlwcmVzc0NvbW1hbmQ+IHNhdmVkQ29tbWFuZHMpCiAgICAgRXhlY3V0ZVNhdmVkQ29t
bWFuZEJ5U2VsZWN0b3IoU3RyaW5nIHNlbGVjdG9yKSAtPiAoYm9vbCBoYW5kbGVkKQogCiAgICAg
IyBSZW1vdGUgYWNjZXNzaWJpbGl0eSBtZXNzYWdlcwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUs
NyArMzQ1LDcgQEAgLSAoQk9PTCliZWNvbWVGaXJzdFJlc3BvbmRlcgogICAgICAgICBOU0V2ZW50
ICprZXlib2FyZEV2ZW50ID0gbmlsOwogICAgICAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TS2V5
RG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNLZXlVcCkKICAgICAgICAgICAgIGtleWJvYXJkRXZl
bnQgPSBldmVudDsKLSAgICAgICAgX2RhdGEtPl9wYWdlLT5zZXRJbml0aWFsRm9jdXMoZGlyZWN0
aW9uID09IE5TU2VsZWN0aW5nTmV4dCwga2V5Ym9hcmRFdmVudCAhPSBuaWwsIE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQoa2V5Ym9hcmRFdmVudCwgc2VsZikpOworICAgICAgICBfZGF0YS0+X3BhZ2Ut
PnNldEluaXRpYWxGb2N1cyhkaXJlY3Rpb24gPT0gTlNTZWxlY3RpbmdOZXh0LCBrZXlib2FyZEV2
ZW50ICE9IG5pbCwgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChrZXlib2FyZEV2ZW50LCBmYWxzZSwg
VmVjdG9yPEtleXByZXNzQ29tbWFuZD4oKSkpOwogICAgIH0KICAgICByZXR1cm4gWUVTOwogfQpA
QCAtMTIyNSw2ICsxMjI1LDcgQEAgLSAodm9pZClkb0NvbW1hbmRCeVNlbGVjdG9yOihTRUwpc2Vs
ZWN0bwogICAgIGlmIChwYXJhbWV0ZXJzICYmICFpc0Zyb21JbnB1dE1ldGhvZCkgewogICAgICAg
ICBLZXlwcmVzc0NvbW1hbmQgY29tbWFuZChOU1N0cmluZ0Zyb21TZWxlY3RvcihzZWxlY3Rvcikp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5jb21tYW5kcy0+YXBwZW5kKGNvbW1hbmQpOworICAgICAg
ICBMT0coVGV4dElucHV0LCAiLi4uc3RvcmVkIik7CiAgICAgICAgIF9kYXRhLT5fcGFnZS0+cmVn
aXN0ZXJLZXlwcmVzc0NvbW1hbmROYW1lKGNvbW1hbmQuY29tbWFuZE5hbWUpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSBjb21tYW5kIHRvIEVkaXRvciBzeW5jaHJv
bm91c2x5IGFuZCBvbmx5IHNlbmQgaXQgYWxvbmcgdGhlCkBAIC0xMzAxLDE4ICsxMzAyLDI5IEBA
IC0gKEJPT0wpcGVyZm9ybUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQgKikKICAgICAvLyBmZXRjaGlu
ZyBhIG5ldyBldmVudCBtaWdodCByZWxlYXNlIHRoZSBvbGQgb25lLiBSZXRhaW5pbmcgYW5kIHRo
ZW4gYXV0b3JlbGVhc2luZwogICAgIC8vIHRoZSBjdXJyZW50IGV2ZW50IHByZXZlbnRzIHRoYXQg
ZnJvbSBjYXVzaW5nIGEgcHJvYmxlbSBpbnNpZGUgV2ViS2l0IG9yIEFwcEtpdCBjb2RlLgogICAg
IFtbZXZlbnQgcmV0YWluXSBhdXRvcmVsZWFzZV07Ci0gICAgCisKKyAgICAvLyBXZSBnZXQgRXNj
IGtleSBoZXJlIGFmdGVyIHByb2Nlc3NpbmcgZWl0aGVyIEVzYyBvciBDbWQrcGVyaW9kLiBUaGUg
Zm9ybWVyIHN0YXJ0cyBhcyBhIGtleURvd24sIGFuZCB0aGUgbGF0dGVyIHN0YXJ0cyBhcyBhIGtl
eSBlcXVpdmFsZW50LAorICAgIC8vIGJ1dCBib3RoIGdldCB0cmFuc2Zvcm1lZCB0byBhIGNhbmNl
bE9wZXJhdGlvbjogY29tbWFuZCwgZXhlY3V0aW5nIHdoaWNoIHBhc3NlcyBhbiBFc2Mga2V5IGV2
ZW50IHRvIC1wZXJmb3JtS2V5RXF1aXZhbGVudDouCisgICAgLy8gRG9uJ3QgaW50ZXJwcmV0IHRo
aXMgZXZlbnQgYWdhaW4sIGF2b2lkaW5nIHJlLWVudHJhbmN5IGFuZCBpbmZpbml0ZSBsb29wcy4K
KyAgICBpZiAoW1tldmVudCBjaGFyYWN0ZXJzSWdub3JpbmdNb2RpZmllcnNdIGlzRXF1YWxUb1N0
cmluZzpAIlxlIl0gJiYgIShbZXZlbnQgbW9kaWZpZXJGbGFnc10gJiBOU0RldmljZUluZGVwZW5k
ZW50TW9kaWZpZXJGbGFnc01hc2spKQorICAgICAgICByZXR1cm4gW3N1cGVyIHBlcmZvcm1LZXlF
cXVpdmFsZW50OmV2ZW50XTsKKworICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IHJlLXNlbmRpbmcg
dGhlIGV2ZW50LCB0aGVuIFdlYkNvcmUgaGFzIGFscmVhZHkgc2VlbiBpdCwgbm8gbmVlZCBmb3Ig
Y3VzdG9tIHByb2Nlc3NpbmcuCiAgICAgQk9PTCBldmVudFdhc1NlbnRUb1dlYkNvcmUgPSAoX2Rh
dGEtPl9rZXlEb3duRXZlbnRCZWluZ1Jlc2VudCA9PSBldmVudCk7CisgICAgaWYgKGV2ZW50V2Fz
U2VudFRvV2ViQ29yZSkKKyAgICAgICAgcmV0dXJuIFtzdXBlciBwZXJmb3JtS2V5RXF1aXZhbGVu
dDpldmVudF07CiAKLSAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSkKLSAgICAgICAgW3Nl
bGYgX2Rpc2FibGVDb21wbGV4VGV4dElucHV0SWZOZWNlc3NhcnldOworICAgIEFTU0VSVChldmVu
dCA9PSBbTlNBcHAgY3VycmVudEV2ZW50XSk7CisKKyAgICBbc2VsZiBfZGlzYWJsZUNvbXBsZXhU
ZXh0SW5wdXRJZk5lY2Vzc2FyeV07CiAKICAgICAvLyBQYXNzIGtleSBjb21ib3MgdGhyb3VnaCBX
ZWJDb3JlIGlmIHRoZXJlIGlzIGEga2V5IGJpbmRpbmcgYXZhaWxhYmxlIGZvcgogICAgIC8vIHRo
aXMgZXZlbnQuIFRoaXMgbGV0cyB3ZWIgcGFnZXMgaGF2ZSBhIGNyYWNrIGF0IGludGVyY2VwdGlu
ZyBrZXktbW9kaWZpZWQga2V5cHJlc3Nlcy4KLSAgICAvLyBCdXQgZG9uJ3QgZG8gaXQgaWYgd2Ug
aGF2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGV2ZW50LgotICAgIC8vIFByZXNzaW5nIEVzYyByZXN1
bHRzIGluIGEgZmFrZSBldmVudCBiZWluZyBzZW50IC0gZG9uJ3QgcGFzcyBpdCB0byBXZWJDb3Jl
LgotICAgIGlmICghZXZlbnRXYXNTZW50VG9XZWJDb3JlICYmIGV2ZW50ID09IFtOU0FwcCBjdXJy
ZW50RXZlbnRdICYmIHNlbGYgPT0gW1tzZWxmIHdpbmRvd10gZmlyc3RSZXNwb25kZXJdKSB7Ci0g
ICAgICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50KGV2ZW50LCBzZWxmKSk7CisgICAgLy8gRklYTUU6IFdoeSBpcyB0aGUgZmlyc3RSZXNw
b25kZXIgY2hlY2sgbmVlZGVkPworICAgIGlmIChzZWxmID09IFtbc2VsZiB3aW5kb3ddIGZpcnN0
UmVzcG9uZGVyXSkgeworICAgICAgICBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiBjb21tYW5kczsK
KyAgICAgICAgQk9PTCBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IFtzZWxmIF9pbnRlcnByZXRLZXlF
dmVudDpldmVudCBzYXZpbmdDb21tYW5kc1RvOmNvbW1hbmRzXTsKKyAgICAgICAgX2RhdGEtPl9w
YWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQoZXZlbnQsIGhh
bmRsZWRCeUlucHV0TWV0aG9kLCBjb21tYW5kcykpOwogICAgICAgICByZXR1cm4gWUVTOwogICAg
IH0KICAgICAKQEAgLTEzMjIsNyArMTMzNCwxMSBAQCAtIChCT09MKXBlcmZvcm1LZXlFcXVpdmFs
ZW50OihOU0V2ZW50ICopCiAtICh2b2lkKWtleVVwOihOU0V2ZW50ICopdGhlRXZlbnQKIHsKICAg
ICBMT0coVGV4dElucHV0LCAia2V5VXA6JXAgJUAiLCB0aGVFdmVudCwgdGhlRXZlbnQpOwotICAg
IF9kYXRhLT5fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50
KHRoZUV2ZW50LCBzZWxmKSk7CisKKyAgICBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiBjb21tYW5k
czsKKyAgICBCT09MIGhhbmRsZWRCeUlucHV0TWV0aG9kID0gW3NlbGYgX2ludGVycHJldEtleUV2
ZW50OnRoZUV2ZW50IHNhdmluZ0NvbW1hbmRzVG86Y29tbWFuZHNdOworCisgICAgX2RhdGEtPl9w
YWdlLT5oYW5kbGVLZXlib2FyZEV2ZW50KE5hdGl2ZVdlYktleWJvYXJkRXZlbnQodGhlRXZlbnQs
IGhhbmRsZWRCeUlucHV0TWV0aG9kLCBjb21tYW5kcykpOwogfQogCiAtICh2b2lkKV9kaXNhYmxl
Q29tcGxleFRleHRJbnB1dElmTmVjZXNzYXJ5CkBAIC0xMzk2LDcgKzE0MTIsMTcgQEAgLSAodm9p
ZClrZXlEb3duOihOU0V2ZW50ICopdGhlRXZlbnQKICAgICAgICAgW3N1cGVyIGtleURvd246dGhl
RXZlbnRdOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxl
S2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KHRoZUV2ZW50LCBzZWxmKSk7CisK
KyAgICBWZWN0b3I8S2V5cHJlc3NDb21tYW5kPiBjb21tYW5kczsKKyAgICBCT09MIGhhbmRsZWRC
eUlucHV0TWV0aG9kID0gW3NlbGYgX2ludGVycHJldEtleUV2ZW50OnRoZUV2ZW50IHNhdmluZ0Nv
bW1hbmRzVG86Y29tbWFuZHNdOworICAgIGlmICghY29tbWFuZHMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIC8vIEFuIGlucHV0IG1ldGhvZCBtYXkgbWFrZSBzZXZlcmFsIGFjdGlvbnMgcGVyIGtleXBy
ZXNzLiBGb3IgZXhhbXBsZSwgcHJlc3NpbmcgUmV0dXJuIHdpdGggS29yZWFuIElNIGJvdGggY29u
ZmlybXMgaXQgYW5kIHNlbmRzIGEgbmV3bGluZS4KKyAgICAgICAgLy8gSU0tbGlrZSBhY3Rpb25z
IGFyZSBoYW5kbGVkIGltbWVkaWF0ZWx5IChzbyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gVUkgcHJv
Y2VzcyBpcyB0cnVlKSwgYnV0IHRoZXJlIGFyZSBzYXZlZCBjb21tYW5kcyB0aGF0CisgICAgICAg
IC8vIHNob3VsZCBiZSBoYW5kbGVkIGxpa2Ugbm9ybWFsIHRleHQgaW5wdXQgYWZ0ZXIgRE9NIGV2
ZW50IGRpc3BhdGNoLgorICAgICAgICBoYW5kbGVkQnlJbnB1dE1ldGhvZCA9IE5POworICAgIH0K
KworICAgIF9kYXRhLT5fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50KHRoZUV2ZW50LCBoYW5kbGVkQnlJbnB1dE1ldGhvZCwgY29tbWFuZHMpKTsKIH0KIAog
LSAodm9pZClmbGFnc0NoYW5nZWQ6KE5TRXZlbnQgKil0aGVFdmVudApAQCAtMTQxNCw3ICsxNDQw
LDEwIEBAIC0gKHZvaWQpZmxhZ3NDaGFuZ2VkOihOU0V2ZW50ICopdGhlRXZlbnQKICAgICBpZiAo
IWtleUNvZGUgfHwga2V5Q29kZSA9PSAxMCB8fCBrZXlDb2RlID09IDYzKQogICAgICAgICByZXR1
cm47CiAKLSAgICBfZGF0YS0+X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5
Ym9hcmRFdmVudCh0aGVFdmVudCwgc2VsZikpOworICAgIFZlY3RvcjxLZXlwcmVzc0NvbW1hbmQ+
IGNvbW1hbmRzOworICAgIEJPT0wgaGFuZGxlZEJ5SW5wdXRNZXRob2QgPSBbc2VsZiBfaW50ZXJw
cmV0S2V5RXZlbnQ6dGhlRXZlbnQgc2F2aW5nQ29tbWFuZHNUbzpjb21tYW5kc107CisKKyAgICBf
ZGF0YS0+X3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCh0
aGVFdmVudCwgaGFuZGxlZEJ5SW5wdXRNZXRob2QsIGNvbW1hbmRzKSk7CiB9CiAKIC0gKHZvaWQp
X2V4ZWN1dGVTYXZlZEtleXByZXNzQ29tbWFuZHMKQEAgLTIzMTAsMTEgKzIzMzksMTIgQEAgLSAo
Qk9PTClfaW50ZXJwcmV0S2V5RXZlbnQ6KE5TRXZlbnQgKilldgogICAgIExPRyhUZXh0SW5wdXQs
ICItPiBpbnRlcnByZXRLZXlFdmVudHM6JXAgJUAiLCBldmVudCwgZXZlbnQpOwogICAgIFtzZWxm
IGludGVycHJldEtleUV2ZW50czpbTlNBcnJheSBhcnJheVdpdGhPYmplY3Q6ZXZlbnRdXTsKIAot
ICAgIF9kYXRhLT5faW50ZXJwcmV0S2V5RXZlbnRzUGFyYW1ldGVycyA9IDA7CisgICAgX2RhdGEt
Pl9pbnRlcnByZXRLZXlFdmVudHNQYXJhbWV0ZXJzID0gbnVsbHB0cjsKIAogICAgIC8vIEFuIGlu
cHV0IG1ldGhvZCBtYXkgY29uc3VtZSBhbiBldmVudCBhbmQgbm90IHRlbGwgdXMgKGUuZy4gd2hl
biBkaXNwbGF5aW5nIGEgY2FuZGlkYXRlIHdpbmRvdyksCiAgICAgLy8gaW4gd2hpY2ggY2FzZSB3
ZSBzaG91bGQgbm90IGJ1YmJsZSB0aGUgZXZlbnQgdXAgdGhlIERPTS4KICAgICBpZiAocGFyYW1l
dGVycy5jb25zdW1lZEJ5SU0pIHsKKyAgICAgICAgQVNTRVJUKGNvbW1hbmRzLmlzRW1wdHkoKSk7
CiAgICAgICAgIExPRyhUZXh0SW5wdXQsICIuLi5ldmVudCAlcCB3YXMgY29uc3VtZWQgYnkgYW4g
aW5wdXQgbWV0aG9kIiwgZXZlbnQpOwogICAgICAgICByZXR1cm4gWUVTOwogICAgIH0KQEAgLTI4
MjMsNiArMjg1Myw3IEBAIC0gKHZvaWQpX2Nsb3NlRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIK
IAogLSAoYm9vbClfZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3I6KFNFTClzZWxlY3Rvcgog
eworICAgIExPRyhUZXh0SW5wdXQsICJFeGVjdXRpbmcgcHJldmlvdXNseSBzYXZlZCBjb21tYW5k
ICVzIiwgc2VsX2dldE5hbWUoc2VsZWN0b3IpKTsKICAgICAvLyBUaGUgc2luayBkb2VzIHR3byB0
aGluZ3M6IDEpIFRlbGxzIHVzIGlmIHRoZSByZXNwb25kZXIgd2VudCB1bmhhbmRsZWQsIGFuZAog
ICAgIC8vIDIpIHByZXZlbnRzIGFueSBOU0JlZXA7IHdlIGRvbid0IGV2ZXIgd2FudCB0byBiZWVw
IGhlcmUuCiAgICAgUmV0YWluUHRyPFdLUmVzcG9uZGVyQ2hhaW5TaW5rPiBzaW5rID0gYWRvcHRO
UyhbW1dLUmVzcG9uZGVyQ2hhaW5TaW5rIGFsbG9jXSBpbml0V2l0aFJlc3BvbmRlckNoYWluOnNl
bGZdKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJ
T1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIsNiBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVu
ZG9PclJlZG8pIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlVW5kb1JlZG8oV2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNz
aWJpbGl0eVdlYlByb2Nlc3NUb2tlblJlY2VpdmVkKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRp
dmVXZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgZXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3Io
Y29uc3QgU3RyaW5nJiBzZWxlY3Rvcikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldERy
YWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wgaXNMaW5rRHJhZykgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNlY3VyZUlucHV0U3RhdGUoKSBvdmVycmlkZTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbQkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkzLDEyICsxOTMsNiBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjphY2Nlc3NpYmlsaXR5V2ViUHJvCiAgICAgW21fY29udGVudFZp
ZXcgX3NldEFjY2Vzc2liaWxpdHlXZWJQcm9jZXNzVG9rZW46cmVtb3RlVG9rZW5dOwogfQogCi1i
b29sIFBhZ2VDbGllbnRJbXBsOjppbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXli
b2FyZEV2ZW50JiwgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBib29sIFBhZ2VDbGllbnRJbXBsOjppbnRl
cnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgYm9vbCBp
c0NoYXJFdmVudCkKIHsKICAgICByZXR1cm4gW21fY29udGVudFZpZXcgX2ludGVycHJldEtleUV2
ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCkgaXNDaGFyRXZlbnQ6aXNDaGFyRXZlbnRdOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJl
dmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MTIsMTEgKzQxMiw2IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpleHRlbmRTZWxlY3Rpb24oV2ViQ28KICAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkV4dGVuZFNlbGVjdGlvbihzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ3JhbnVs
YXJpdHkpKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0UXVl
dWVkS2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmLCBib29sJiwgVmVjdG9yPFdlYkNvcmU6Oktl
eXByZXNzQ29tbWFuZD4mKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgV2Vi
UGFnZVByb3h5OjppbnRlcnByZXRLZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYgc3RhdGUsIGJv
b2wgaXNDaGFyRXZlbnQsIGJvb2wmIGhhbmRsZWQpCiB7CiAgICAgbV9lZGl0b3JTdGF0ZSA9IHN0
YXRlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudElt
cGwuaAkocmV2aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw2IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CiAgICAgdmlydHVhbCBi
b29sIGNhblVuZG9SZWRvKFdlYlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVVbmRvUmVkbyhXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwotICAgIHZpcnR1
YWwgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jiwg
VmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mKTsKICAgICB2aXJ0dWFsIGJvb2wgZXhl
Y3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CiAgICAg
dmlydHVhbCB2b2lkIHNldERyYWdJbWFnZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50
UG9zaXRpb24sIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UsIGJvb2wgaXNM
aW5rRHJhZyk7CiAgICAgdmlydHVhbCB2b2lkIHNldFByb21pc2VkRGF0YShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gaW1hZ2VC
dWZmZXIsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBj
b25zdCBTdHJpbmcmIHRpdGxlLApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9Q
YWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIs
MTEgKzMzMiw2IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmV4ZWN1dGVVbmRvUmVkbyhXZWIKICAg
ICByZXR1cm4gKHVuZG9PclJlZG8gPT0gV2ViUGFnZVByb3h5OjpVbmRvKSA/IFtbbV93a1ZpZXcg
dW5kb01hbmFnZXJdIHVuZG9dIDogW1ttX3drVmlldyB1bmRvTWFuYWdlcl0gcmVkb107CiB9CiAK
LWJvb2wgUGFnZUNsaWVudEltcGw6OmludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQmIGV2ZW50LCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tYW5kPiYgY29t
bWFuZHMpCi17Ci0gICAgcmV0dXJuIFttX3drVmlldyBfaW50ZXJwcmV0S2V5RXZlbnQ6ZXZlbnQu
bmF0aXZlRXZlbnQoKSBzYXZpbmdDb21tYW5kc1RvOmNvbW1hbmRzXTsKLX0KLQogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2V0RHJhZ0ltYWdlKGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwg
UGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSwgYm9vbCBpc0xpbmtEcmFnKQog
ewogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBkcmFnQ0dJbWFnZSA9IGRyYWdJbWFnZS0+bWFr
ZUNHSW1hZ2UoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViUGFnZVBy
b3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2Vi
UGFnZVByb3h5TWFjLm1tCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dlYlBhZ2VQcm94eU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDEyICsz
NDgsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURpY3Rpb25hcnlMb29rCiAgICAgcHJv
Y2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRM
b2NhdGlvbihwb2ludCksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmludGVy
cHJldFF1ZXVlZEtleUV2ZW50KGNvbnN0IEVkaXRvclN0YXRlJiBzdGF0ZSwgYm9vbCYgaGFuZGxl
ZCwgVmVjdG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzKQotewotICAgIG1f
ZWRpdG9yU3RhdGUgPSBzdGF0ZTsKLSAgICBoYW5kbGVkID0gbV9wYWdlQ2xpZW50LmludGVycHJl
dEtleUV2ZW50KG1fa2V5RXZlbnRRdWV1ZS5maXJzdCgpLCBjb21tYW5kcyk7Ci19Ci0KIC8vIENv
bXBsZXggdGV4dCBpbnB1dCBzdXBwb3J0IGZvciBwbHVnLWlucy4KIHZvaWQgV2ViUGFnZVByb3h5
OjpzZW5kQ29tcGxleFRleHRJbnB1dFRvUGx1Z2luKHVpbnQ2NF90IHBsdWdpbkNvbXBsZXhUZXh0
SW5wdXRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRleHRJbnB1dCkKIHsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkVkaXRvckNsaWVudElP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2lvcy9XZWJFZGl0b3JDbGllbnRJT1MubW0JKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkVkaXRvckNsaWVudElP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsK
ICAgICAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50KEtleWJvYXJk
RXZlbnQqIGV2ZW50KQogewotICAgIGlmIChtX3BhZ2UtPmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2
ZW50KGV2ZW50LCBmYWxzZSkpCisgICAgaWYgKG1fcGFnZS0+aGFuZGxlRWRpdGluZ0tleWJvYXJk
RXZlbnQoZXZlbnQpKQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRp
dG9yQ2xpZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQkocmV2aXNpb24gMTY1MjA2
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRp
dG9yQ2xpZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MywxMyArNjMsMTMgQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAgICAgCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRF
dmVudChLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKLSAgICBpZiAobV9wYWdlLT5oYW5kbGVFZGl0
aW5nS2V5Ym9hcmRFdmVudChldmVudCwgZmFsc2UpKQorICAgIGlmIChtX3BhZ2UtPmhhbmRsZUVk
aXRpbmdLZXlib2FyZEV2ZW50KGV2ZW50KSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5k
bGVkKCk7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRv
d24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7Ci0gICAgaWYgKG1fcGFnZS0+aGFuZGxlRWRpdGlu
Z0tleWJvYXJkRXZlbnQoZXZlbnQsIHRydWUpKQorICAgIGlmIChldmVudC0+aGFuZGxlZEJ5SW5w
dXRNZXRob2QoKSkKICAgICAgICAgZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CiB9CiAgICAg
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsyNTMsNiBAQCBXZWJQYWdlOjpX
ZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
LCBtX3BkZlBsdWdpbkVuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2hhc0NhY2hlZFdpbmRvd0ZyYW1l
KGZhbHNlKQotICAgICwgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZCgwKQogICAgICwg
bV92aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yKCp0aGlzKQogI2VsaWYgUExBVEZPUk0oR1RL
KSAmJiBIQVZFKEFDQ0VTU0lCSUxJVFkpCiAgICAgLCBtX2FjY2Vzc2liaWxpdHlPYmplY3QoMCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2
aXNpb24gMTY1MjA2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDExICsyMzcsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBsYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgLy8gLS0gQ2FsbGVkIGZyb20gV2ViQ29yZSBjbGll
bnRzLgotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIGJvb2wgaGFuZGxlRWRpdGluZ0tleWJvYXJk
RXZlbnQoV2ViQ29yZTo6S2V5Ym9hcmRFdmVudCosIGJvb2wgc2F2ZUNvbW1hbmRzKTsKLSNlbGlm
ICFQTEFURk9STShHVEspCiAgICAgYm9vbCBoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChXZWJD
b3JlOjpLZXlib2FyZEV2ZW50Kik7Ci0jZW5kaWYKIAogICAgIHZvaWQgZGlkU3RhcnRQYWdlVHJh
bnNpdGlvbigpOwogICAgIHZvaWQgZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbigpOwpAQCAtOTk2
LDggKzk5Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgUmV0YWluUHRyPFdLQWNjZXNzaWJpbGl0
eVdlYlBhZ2VPYmplY3Q+IG1fbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50OwogCi0gICAgV2ViQ29y
ZTo6S2V5Ym9hcmRFdmVudCogbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZDsKLQogICAg
IFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IgbV92aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVj
dG9yOwogCiAjZWxpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIChQTEFURk9STShHVEspIHx8IFBM
QVRGT1JNKEVGTCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE0Miw4ICsxNDIsOSBAQCBib29sIFdlYlBhZ2U6OmFsbG93c1VzZXJTY2FsaW5nKCkgY29u
c3QKICAgICByZXR1cm4gbV92aWV3cG9ydENvbmZpZ3VyYXRpb24uYWxsb3dzVXNlclNjYWxpbmco
KTsKIH0KIAotYm9vbCBXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2Fy
ZEV2ZW50KiBldmVudCwgYm9vbCkKK2Jvb2wgV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJk
RXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CisgICAgLy8gRklYTUU6IEludGVycHJldCB0
aGUgZXZlbnQgaW1tZWRpYXRlbHkgdXBvbiByZWNlaXZpbmcgaXQgaW4gVUkgcHJvY2Vzcywgd2l0
aG91dCBzZW5kaW5nIHRvIFdlYlByb2Nlc3MgZmlyc3QuCiAgICAgYm9vbCBldmVudFdhc0hhbmRs
ZWQgPSBmYWxzZTsKICAgICBib29sIHNlbmRSZXN1bHQgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpJbnRlcnByZXRLZXlFdmVudChlZGl0b3JTdGF0ZSgpLCBldmVudC0+a2V5RXZlbnQoKS0+dHlw
ZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhciksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0S2V5RXZlbnQ6OlJlcGx5KGV2ZW50
V2FzSGFuZGxlZCksIG1fcGFnZUlEKTsKQEAgLTIwNiw3ICsyMDcsNyBAQCB2b2lkIFdlYlBhZ2U6
Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0CiAgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5oYXND
b21wb3NpdGlvbigpKSB7CiAgICAgICAgIC8vIEFuIGluc2VydFRleHQ6IG1pZ2h0IGJlIGhhbmRs
ZWQgYnkgb3RoZXIgcmVzcG9uZGVycyBpbiB0aGUgY2hhaW4gaWYgd2UgZG9uJ3QgaGFuZGxlIGl0
LgogICAgICAgICAvLyBPbmUgZXhhbXBsZSBpcyBzcGFjZSBiYXIgdGhhdCByZXN1bHRzIGluIHNj
cm9sbGluZyBkb3duIHRoZSBwYWdlLgotICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0
KHRleHQsIDApOworICAgICAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRUZXh0KHRleHQsIG51bGxw
dHIpOwogICAgIH0gZWxzZQogICAgICAgICBmcmFtZS5lZGl0b3IoKS5jb25maXJtQ29tcG9zaXRp
b24odGV4dCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTE2NiwyMiArMTY2LDI1IEBAIHN0YXRpYyBGcmFtZSogZnJhbWVGb3JFdmVudChLZXlib2Fy
ZEV2ZW4KIAogYm9vbCBXZWJQYWdlOjpleGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVybmFsKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW1hbmQ+JiBjb21tYW5kcywgS2V5Ym9hcmRF
dmVudCogZXZlbnQpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gZnJhbWVGb3JFdmVudChldmVudCk7
Ci0gICAgQVNTRVJUKGZyYW1lLT5wYWdlKCkgPT0gY29yZVBhZ2UoKSk7CisgICAgRnJhbWUmIGZy
YW1lID0gZXZlbnQgPyAqZnJhbWVGb3JFdmVudChldmVudCkgOiBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEFTU0VSVChmcmFtZS5wYWdlKCkgPT0g
Y29yZVBhZ2UoKSk7CiAKICAgICBib29sIGV2ZW50V2FzSGFuZGxlZCA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29tbWFuZHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYg
KGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lID09ICJpbnNlcnRUZXh0OiIpIHsKLSAgICAgICAgICAg
IEFTU0VSVCghZnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpOwotCi0gICAgICAgICAg
ICBpZiAoIWZyYW1lLT5lZGl0b3IoKS5jYW5FZGl0KCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoZnJhbWUuZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkgewor
ICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ZnJhbWUuZWRpdG9yKCkuY29uZmlybUNvbXBvc2l0aW9uKGNvbW1hbmRzW2ldLnRleHQpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNh
bkVkaXQoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIC8v
IEFuIGluc2VydFRleHQ6IG1pZ2h0IGJlIGhhbmRsZWQgYnkgb3RoZXIgcmVzcG9uZGVycyBpbiB0
aGUgY2hhaW4gaWYgd2UgZG9uJ3QgaGFuZGxlIGl0LgotICAgICAgICAgICAgLy8gT25lIGV4YW1w
bGUgaXMgc3BhY2UgYmFyIHRoYXQgcmVzdWx0cyBpbiBzY3JvbGxpbmcgZG93biB0aGUgcGFnZS4K
LSAgICAgICAgICAgIGV2ZW50V2FzSGFuZGxlZCB8PSBmcmFtZS0+ZWRpdG9yKCkuaW5zZXJ0VGV4
dChjb21tYW5kc1tpXS50ZXh0LCBldmVudCk7CisgICAgICAgICAgICAgICAgLy8gQW4gaW5zZXJ0
VGV4dDogbWlnaHQgYmUgaGFuZGxlZCBieSBvdGhlciByZXNwb25kZXJzIGluIHRoZSBjaGFpbiBp
ZiB3ZSBkb24ndCBoYW5kbGUgaXQuCisgICAgICAgICAgICAgICAgLy8gT25lIGV4YW1wbGUgaXMg
c3BhY2UgYmFyIHRoYXQgcmVzdWx0cyBpbiBzY3JvbGxpbmcgZG93biB0aGUgcGFnZS4KKyAgICAg
ICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgfD0gZnJhbWUuZWRpdG9yKCkuaW5zZXJ0VGV4dChj
b21tYW5kc1tpXS50ZXh0LCBldmVudCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS5j
b21tYW5kKGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1l
KSk7CisgICAgICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZyYW1lLmVkaXRvcigp
LmNvbW1hbmQoY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29tbWFuZHNbaV0uY29tbWFuZE5h
bWUpKTsKICAgICAgICAgICAgIGlmIChjb21tYW5kLmlzU3VwcG9ydGVkKCkpIHsKICAgICAgICAg
ICAgICAgICBib29sIGNvbW1hbmRFeGVjdXRlZEJ5RWRpdG9yID0gY29tbWFuZC5leGVjdXRlKGV2
ZW50KTsKICAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgfD0gY29tbWFuZEV4ZWN1dGVk
QnlFZGl0b3I7CkBAIC0yMDAsNTMgKzIwMywzOSBAQCBib29sIFdlYlBhZ2U6OmV4ZWN1dGVLZXlw
cmVzc0NvbW1hbmRzSW50CiAgICAgcmV0dXJuIGV2ZW50V2FzSGFuZGxlZDsKIH0KIAotYm9vbCBX
ZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVudCwg
Ym9vbCBzYXZlQ29tbWFuZHMpCitib29sIFdlYlBhZ2U6OmhhbmRsZUVkaXRpbmdLZXlib2FyZEV2
ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIEFTU0VSVCghc2F2ZUNvbW1hbmRzIHx8
IGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCkuaXNFbXB0eSgpKTsgLy8gU2F2ZSBjb21tYW5kcyBv
bmNlIGZvciBlYWNoIGV2ZW50LgotCiAgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVGb3JFdmVudChl
dmVudCk7CiAgICAgCiAgICAgY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50KiBwbGF0Zm9ybUV2
ZW50ID0gZXZlbnQtPmtleUV2ZW50KCk7CiAgICAgaWYgKCFwbGF0Zm9ybUV2ZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgVmVjdG9yPEtleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzID0g
ZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKTsKKyAgICBjb25zdCBWZWN0b3I8S2V5cHJlc3NDb21t
YW5kPiYgY29tbWFuZHMgPSBldmVudC0+a2V5cHJlc3NDb21tYW5kcygpOworCisgICAgQVNTRVJU
KCFwbGF0Zm9ybUV2ZW50LT5tYWNFdmVudCgpKTsgLy8gQ2Fubm90IGhhdmUgYSBuYXRpdmUgZXZl
bnQgaW4gV2ViUHJvY2Vzcy4KIAotICAgIGlmIChbcGxhdGZvcm1FdmVudC0+bWFjRXZlbnQoKSB0
eXBlXSA9PSBOU0ZsYWdzQ2hhbmdlZCkKKyAgICAvLyBEb24ndCBoYW5kbGUgRXNjIHdoaWxlIGhh
bmRsaW5nIGtleWRvd24gZXZlbnQsIHdlIG5lZWQgdG8gZGlzcGF0Y2ggYSBrZXlwcmVzcyBmaXJz
dC4KKyAgICBpZiAocGxhdGZvcm1FdmVudC0+dHlwZSgpICE9IFBsYXRmb3JtRXZlbnQ6OkNoYXIg
JiYgcGxhdGZvcm1FdmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkgPT0gVktfRVNDQVBFICYm
IGNvbW1hbmRzLnNpemUoKSA9PSAxICYmIGNvbW1hbmROYW1lRm9yU2VsZWN0b3JOYW1lKGNvbW1h
bmRzWzBdLmNvbW1hbmROYW1lKSA9PSAiY2FuY2VsT3BlcmF0aW9uIikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgYm9vbCBldmVudFdhc0hhbmRsZWQgPSBmYWxzZTsKLSAgICAKLSAgICBp
ZiAoc2F2ZUNvbW1hbmRzKSB7Ci0gICAgICAgIEtleWJvYXJkRXZlbnQqIG9sZEV2ZW50ID0gbV9r
ZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZDsKLSAgICAgICAgbV9rZXlib2FyZEV2ZW50QmVp
bmdJbnRlcnByZXRlZCA9IGV2ZW50OwotICAgICAgICBib29sIHNlbmRSZXN1bHQgPSBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRRdWV1ZWRLZXlFdmVudChlZGl0b3JTdGF0ZSgpKSwg
Ci0gICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRRdWV1ZWRLZXlF
dmVudDo6UmVwbHkoZXZlbnRXYXNIYW5kbGVkLCBjb21tYW5kcyksIG1fcGFnZUlEKTsKLSAgICAg
ICAgbV9rZXlib2FyZEV2ZW50QmVpbmdJbnRlcnByZXRlZCA9IG9sZEV2ZW50OwotICAgICAgICBp
ZiAoIXNlbmRSZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8g
QW4gaW5wdXQgbWV0aG9kIG1heSBtYWtlIHNldmVyYWwgYWN0aW9ucyBwZXIga2V5cHJlc3MuIEZv
ciBleGFtcGxlLCBwcmVzc2luZyBSZXR1cm4gd2l0aCBLb3JlYW4gSU0gYm90aCBjb25maXJtcyBp
dCBhbmQgc2VuZHMgYSBuZXdsaW5lLgotICAgICAgICAvLyBJTS1saWtlIGFjdGlvbnMgYXJlIGhh
bmRsZWQgaW1tZWRpYXRlbHkgKHNvIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBVSSBwcm9jZXNzIGlz
IHRydWUpLCBidXQgdGhlcmUgYXJlIHNhdmVkIGNvbW1hbmRzIHRoYXQKLSAgICAgICAgLy8gc2hv
dWxkIGJlIGhhbmRsZWQgbGlrZSBub3JtYWwgdGV4dCBpbnB1dCBhZnRlciBET00gZXZlbnQgZGlz
cGF0Y2guCi0gICAgICAgIGlmICghZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKS5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQXJl
IHRoZXJlIGNvbW1hbmRzIHRoYXQgY291bGQganVzdCBjYXVzZSB0ZXh0IGluc2VydGlvbiBpZiBl
eGVjdXRlZCB2aWEgRWRpdG9yPwotICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBoYXZlIGVub3Vn
aCBpbmZvcm1hdGlvbiBhYm91dCBtb2RlIHRvIGRlY2lkZSBob3cgdGhleSBzaG91bGQgYmUgdHJl
YXRlZCwgc28gd2UgbGVhdmUgaXQgdXBvbiBXZWJDb3JlCi0gICAgICAgIC8vIHRvIGVpdGhlciBo
YW5kbGUgdGhlbSBpbW1lZGlhdGVseSAoZS5nLiBUYWIgdGhhdCBjaGFuZ2VzIGZvY3VzKSBvciBs
ZXQgYSBrZXlwcmVzcyBldmVudCBiZSBnZW5lcmF0ZWQKLSAgICAgICAgLy8gKGUuZy4gVGFiIHRo
YXQgaW5zZXJ0cyBhIFRhYiBjaGFyYWN0ZXIsIG9yIEVudGVyKS4KLSAgICAgICAgYm9vbCBoYXZl
VGV4dEluc2VydGlvbkNvbW1hbmRzID0gZmFsc2U7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29tbWFuZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRp
dG9yKCkuY29tbWFuZChjb21tYW5kTmFtZUZvclNlbGVjdG9yTmFtZShjb21tYW5kc1tpXS5jb21t
YW5kTmFtZSkpLmlzVGV4dEluc2VydGlvbigpKQotICAgICAgICAgICAgICAgIGhhdmVUZXh0SW5z
ZXJ0aW9uQ29tbWFuZHMgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIHRoZXJlIGFy
ZSBubyB0ZXh0IGluc2VydGlvbiBjb21tYW5kcywgZGVmYXVsdCBrZXlkb3duIGhhbmRsZXIgaXMg
dGhlIHJpZ2h0IHRpbWUgdG8gZXhlY3V0ZSB0aGUgY29tbWFuZHMuCi0gICAgICAgIC8vIEtleXBy
ZXNzIChDaGFyIGV2ZW50KSBoYW5kbGVyIGlzIHRoZSBsYXRlc3Qgb3Bwb3J0dW5pdHkgdG8gZXhl
Y3V0ZS4KLSAgICAgICAgaWYgKCFoYXZlVGV4dEluc2VydGlvbkNvbW1hbmRzIHx8IHBsYXRmb3Jt
RXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpDaGFyKSB7Ci0gICAgICAgICAgICBldmVu
dFdhc0hhbmRsZWQgPSBleGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVybmFsKGV2ZW50LT5rZXlw
cmVzc0NvbW1hbmRzKCksIGV2ZW50KTsKLSAgICAgICAgICAgIGV2ZW50LT5rZXlwcmVzc0NvbW1h
bmRzKCkuY2xlYXIoKTsKLSAgICAgICAgfQorCisgICAgLy8gQXJlIHRoZXJlIGNvbW1hbmRzIHRo
YXQgY291bGQganVzdCBjYXVzZSB0ZXh0IGluc2VydGlvbiBpZiBleGVjdXRlZCB2aWEgRWRpdG9y
PworICAgIC8vIFdlYktpdCBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIGFib3V0IG1v
ZGUgdG8gZGVjaWRlIGhvdyB0aGV5IHNob3VsZCBiZSB0cmVhdGVkLCBzbyB3ZSBsZWF2ZSBpdCB1
cG9uIFdlYkNvcmUKKyAgICAvLyB0byBlaXRoZXIgaGFuZGxlIHRoZW0gaW1tZWRpYXRlbHkgKGUu
Zy4gVGFiIHRoYXQgY2hhbmdlcyBmb2N1cykgb3IgbGV0IGEga2V5cHJlc3MgZXZlbnQgYmUgZ2Vu
ZXJhdGVkCisgICAgLy8gKGUuZy4gVGFiIHRoYXQgaW5zZXJ0cyBhIFRhYiBjaGFyYWN0ZXIsIG9y
IEVudGVyKS4KKyAgICBib29sIGhhdmVUZXh0SW5zZXJ0aW9uQ29tbWFuZHMgPSBmYWxzZTsKKyAg
ICBmb3IgKGF1dG8mIGNvbW1hbmQgOiBjb21tYW5kcykgeworICAgICAgICBpZiAoZnJhbWUtPmVk
aXRvcigpLmNvbW1hbmQoY29tbWFuZE5hbWVGb3JTZWxlY3Rvck5hbWUoY29tbWFuZC5jb21tYW5k
TmFtZSkpLmlzVGV4dEluc2VydGlvbigpKQorICAgICAgICAgICAgaGF2ZVRleHRJbnNlcnRpb25D
b21tYW5kcyA9IHRydWU7CisgICAgfQorICAgIC8vIElmIHRoZXJlIGFyZSBubyB0ZXh0IGluc2Vy
dGlvbiBjb21tYW5kcywgZGVmYXVsdCBrZXlkb3duIGhhbmRsZXIgaXMgdGhlIHJpZ2h0IHRpbWUg
dG8gZXhlY3V0ZSB0aGUgY29tbWFuZHMuCisgICAgLy8gS2V5cHJlc3MgKENoYXIgZXZlbnQpIGhh
bmRsZXIgaXMgdGhlIGxhdGVzdCBvcHBvcnR1bml0eSB0byBleGVjdXRlLgorICAgIGlmICghaGF2
ZVRleHRJbnNlcnRpb25Db21tYW5kcyB8fCBwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZv
cm1FdmVudDo6Q2hhcikgeworICAgICAgICBldmVudFdhc0hhbmRsZWQgPSBleGVjdXRlS2V5cHJl
c3NDb21tYW5kc0ludGVybmFsKGV2ZW50LT5rZXlwcmVzc0NvbW1hbmRzKCksIGV2ZW50KTsKKyAg
ICAgICAgZXZlbnQtPmtleXByZXNzQ29tbWFuZHMoKS5jbGVhcigpOwogICAgIH0KKwogICAgIHJl
dHVybiBldmVudFdhc0hhbmRsZWQ7CiB9CiAKQEAgLTMwMiw3ICsyOTEsNyBAQCB2b2lkIFdlYlBh
Z2U6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0CiAgICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5o
YXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIC8vIEFuIGluc2VydFRleHQ6IG1pZ2h0IGJlIGhh
bmRsZWQgYnkgb3RoZXIgcmVzcG9uZGVycyBpbiB0aGUgY2hhaW4gaWYgd2UgZG9uJ3QgaGFuZGxl
IGl0LgogICAgICAgICAvLyBPbmUgZXhhbXBsZSBpcyBzcGFjZSBiYXIgdGhhdCByZXN1bHRzIGlu
IHNjcm9sbGluZyBkb3duIHRoZSBwYWdlLgotICAgICAgICBoYW5kbGVkID0gZnJhbWUuZWRpdG9y
KCkuaW5zZXJ0VGV4dCh0ZXh0LCBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkKTsKKyAg
ICAgICAgaGFuZGxlZCA9IGZyYW1lLmVkaXRvcigpLmluc2VydFRleHQodGV4dCwgbnVsbHB0cik7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIGZyYW1lLmVk
aXRvcigpLmNvbmZpcm1Db21wb3NpdGlvbih0ZXh0KTsKQEAgLTMyMiw3ICszMTEsNyBAQCB2b2lk
IFdlYlBhZ2U6Omluc2VydERpY3RhdGVkVGV4dChjb25zdCBTCiAgICAgfQogCiAgICAgQVNTRVJU
KCFmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKTsKLSAgICBoYW5kbGVkID0gZnJhbWUu
ZWRpdG9yKCkuaW5zZXJ0RGljdGF0ZWRUZXh0KHRleHQsIGRpY3RhdGlvbkFsdGVybmF0aXZlTG9j
YXRpb25zLCBtX2tleWJvYXJkRXZlbnRCZWluZ0ludGVycHJldGVkKTsKKyAgICBoYW5kbGVkID0g
ZnJhbWUuZWRpdG9yKCkuaW5zZXJ0RGljdGF0ZWRUZXh0KHRleHQsIGRpY3RhdGlvbkFsdGVybmF0
aXZlTG9jYXRpb25zLCBudWxscHRyKTsKICAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CiB9
CiAKQEAgLTQzNiw3ICs0MjUsNyBAQCB2b2lkIFdlYlBhZ2U6OmZpcnN0UmVjdEZvckNoYXJhY3Rl
clJhbmdlCiAKIHZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OktleXByZXNzQ29tbWFuZD4mIGNvbW1hbmRzLCBib29sJiBoYW5kbGVkLCBF
ZGl0b3JTdGF0ZSYgbmV3U3RhdGUpCiB7Ci0gICAgaGFuZGxlZCA9IGV4ZWN1dGVLZXlwcmVzc0Nv
bW1hbmRzSW50ZXJuYWwoY29tbWFuZHMsIG1fa2V5Ym9hcmRFdmVudEJlaW5nSW50ZXJwcmV0ZWQp
OworICAgIGhhbmRsZWQgPSBleGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVybmFsKGNvbW1hbmRz
LCBudWxscHRyKTsKICAgICBuZXdTdGF0ZSA9IGVkaXRvclN0YXRlKCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NTIwNikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE0LTAzLTA2ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIERvbid0IHBlcmZv
cm0gYSByb3VuZC10cmlwIHRocm91Z2ggV2ViUHJvY2VzcyBiZWZvcmUgaW50ZXJwcmV0aW5nIGtl
eSBldmVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyOTgxMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOiAoV2ViRWRpdG9yQ2xpZW50Ojpo
YW5kbGVJbnB1dE1ldGhvZEtleWRvd24pOgorICAgICAgICBBZGRlZCBhIEZJWE1FLiBXZWJLaXQx
L21hYyBpcyB0aGUgb25seSBwb3J0IHRoYXQgdXNlcyB0aGlzIHJvdW5kYWJvdXQgd2F5IHRvCisg
ICAgICAgIGludGVycHJldCBldmVudHMsIHNvIGl0IHdvdWxkIHNpbXBsaWZ5IGNvZGUgaWYgd2Ug
c3dpdGNoZWQgaXQgdG8gV2ViS2l0Mi9tYWMgbW9kZWwuCisKIDIwMTQtMDMtMDYgIEpvc2VwaCBQ
ZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBF
eHBvc2UgdGhlIGNvbnNvbGUgb2JqZWN0IGluIEpTQ29udGV4dHMgdG8gaW50ZXJhY3Qgd2l0aCBX
ZWIgSW5zcGVjdG9yCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAxNjUyMDYpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcgY29weSkK
QEAgLTY5Myw2ICs2OTMsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlS2V5Ym9hcmRF
dmVuCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJv
YXJkRXZlbnQqIGV2ZW50KQogewogI2lmICFQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6IFN3
aXRjaCB0byBXZWJLaXQyIG1vZGVsLCBpbnRlcnByZXRpbmcgdGhlIGV2ZW50IGJlZm9yZSBpdCdz
IHNlbnQgZG93biB0byBXZWJDb3JlLgogICAgIEZyYW1lKiBmcmFtZSA9IGV2ZW50LT50YXJnZXQo
KS0+dG9Ob2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICBXZWJIVE1MVmlldyAqd2ViSFRN
TFZpZXcgPSBbW2tpdChmcmFtZSkgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddOwogICAgIGlmIChb
d2ViSFRNTFZpZXcgX2ludGVycHJldEtleUV2ZW50OmV2ZW50IHNhdmluZ0NvbW1hbmRzOllFU10p
Cg==
</data>
<flag name="review"
          id="250344"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>