<?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>59580</bug_id>
          
          <creation_ts>2011-04-26 22:03:03 -0700</creation_ts>
          <short_desc>Extract KeyboardEventHandler from EventHandler</short_desc>
          <delta_ts>2011-11-07 18:56:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>56410</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>393338</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-26 22:03:03 -0700</bug_when>
    <thetext>Right now EventHandler deals with both keyboard events and mouse events.  Since keyboard and mouse events don&apos;t interact each other, we should split EventHandler into two classes KeyboardEventHandler and MouseEventHandler.

And as the first step, we should extract KeyboardEventHandler from EventHandler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393343</commentid>
    <comment_count>1</comment_count>
      <attachid>91229</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-26 22:09:38 -0700</bug_when>
    <thetext>Created attachment 91229
work in progress

Here&apos;s a work in progress patch (r? only because I want EWS to find build errors)

Sam &amp; Alexey, could you tell me what CurrentEventScope is trying to do in EventHandlerMac.mm?  I removed EventHandler::keyEvent(NSEvent*) and replaced call sites in WebHTMLView.mm by keyEvent(PlatformKeyboardEvent(event)) but I didn&apos;t add CurrentEventScope in those places.  Should I be adding them?  As far as I looked at the definition of CurrentEventScope, they only seem to have a retain pointer for NSEvent which makes me think that the code is there only to resolve some binding issues between C++ and Objective-C but I&apos;m entirely sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393355</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-26 22:30:37 -0700</bug_when>
    <thetext>CurrentEventScope makes sure that currentNSEvent() returns the right thing. It&apos;s used in many places in the code, but I can&apos;t say anything about reasons for its existence without reading svn history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393379</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-26 23:25:17 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; CurrentEventScope makes sure that currentNSEvent() returns the right thing. It&apos;s used in many places in the code, but I can&apos;t say anything about reasons for its existence without reading svn history.

Ah... now I see what it&apos;s trying to do. But it seems like currentNSEvent() is only called in mouse-related methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393657</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-27 11:01:25 -0700</bug_when>
    <thetext>It seems like CurrentEventScope was introduced in http://trac.webkit.org/changeset/17770.

We only call currentNSEvent in EventHandlerMac.mm and
WebCore/platform/mac/PopupMenuMac.mm:    NSEvent* event = [frame-&gt;eventHandler()-&gt;currentNSEvent() retain];
WebKit/mac/WebCoreSupport/WebDragClient.mm:    NSEvent *event = linkDrag ? frame-&gt;eventHandler()-&gt;currentNSEvent() : [htmlView.get() _mouseDownEvent];
WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:        NSEvent* currentNSEvent = frame-&gt;eventHandler()-&gt;currentNSEvent();
WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:            [(WebBaseNetscapePluginView *)platformWidget() handleMouseMoved:currentNSEvent];
WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:            [(WebBaseNetscapePluginView *)platformWidget() handleMouseEntered:currentNSEvent];
WebKit/mac/WebCoreSupport/WebFrameLoaderClient.mm:            [(WebBaseNetscapePluginView *)platformWidget() handleMouseExited:currentNSEvent];

So maybe we need to add macEvent to PlatformMouseEvent as well and pump Event through PopupMenuMac::show and DragClient::startDrag.  Regardless, I don&apos;t think we should have a global object just so that we can access to NSEvent in all those places.

Darin, do you have any suggestion as to how to clean this up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395304</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-29 09:43:04 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Darin, do you have any suggestion as to how to clean this up?

To me the global variable seems fine. If you’d prefer we could instead attach it to the DOM event object somehow, or to the event handler, but it could be tricky to get the logic right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395322</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-29 10:05:03 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Darin, do you have any suggestion as to how to clean this up?
&gt; 
&gt; To me the global variable seems fine. If you’d prefer we could instead attach it to the DOM event object somehow, or to the event handler, but it could be tricky to get the logic right.

The problem is that it&apos;s preventing us from splitting KeyboardEventHandler and MouseEventHandler.  PlatformMouseEvent already has a pointer to NSEvent so I think we can follow the same pattern but you&apos;re right that getting the logic right might be tricky given how under tested this code is.

It&apos;ll be ideal if someone more familiar with Mac port&apos;s event handling could write a patch to add NSEvent* to PlatformMouseEvent instead and get rid of CurrentEventScope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408392</commentid>
    <comment_count>7</comment_count>
      <attachid>91229</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-23 15:28:22 -0700</bug_when>
    <thetext>Comment on attachment 91229
work in progress

if it&apos;s wip, sounds like you don&apos;t want it marked r?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91229</attachid>
            <date>2011-04-26 22:09:38 -0700</date>
            <delta_ts>2011-05-23 15:28:21 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>wip59580</filename>
            <type>text/plain</type>
            <size>32688</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlz
aW9uIDg0ODgwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MDEsMTAgKzYwMSw2IEBACiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRXZlbnRIYW5kbGVyKiBoYW5kbGVyID0gZnJhbWUt
PmV2ZW50SGFuZGxlcigpOwotICAgIGlmICghaGFuZGxlcikKLSAgICAgICAgcmV0dXJuIGtleUV2
ZW50RGVmYXVsdChldmVudCk7Ci0KICNpZiBPUyhXSU5ET1dTKSB8fCBPUyhMSU5VWCkgfHwgT1Mo
RlJFRUJTRCkKICAgICBjb25zdCBXZWJJbnB1dEV2ZW50OjpUeXBlIGNvbnRleHRNZW51VHJpZ2dl
cmluZ0V2ZW50VHlwZSA9CiAjaWYgT1MoV0lORE9XUykKQEAgLTYyMyw3ICs2MTksNyBAQAogCiAg
ICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlciBldnQoZXZlbnQpOwogCi0gICAgaWYgKGhh
bmRsZXItPmtleUV2ZW50KGV2dCkpIHsKKyAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5r
ZXlFdmVudChldnQpKSB7CiAgICAgICAgIGlmIChXZWJJbnB1dEV2ZW50OjpSYXdLZXlEb3duID09
IGV2ZW50LnR5cGUpIHsKICAgICAgICAgICAgIC8vIFN1cHByZXNzIHRoZSBuZXh0IGtleXByZXNz
IGV2ZW50IHVubGVzcyB0aGUgZm9jdXNlZCBub2RlIGlzIGEgcGx1Zy1pbiBub2RlLgogICAgICAg
ICAgICAgLy8gKEZsYXNoIG5lZWRzIHRoZXNlIGtleXByZXNzIGV2ZW50cyB0byBoYW5kbGUgbm9u
LVVTIGtleWJvYXJkcy4pCkBAIC03MTIsOSArNzA4LDcgQEAKICAgICBpZiAoIWZyYW1lKQogICAg
ICAgICByZXR1cm4gc3VwcHJlc3M7CiAKLSAgICBFdmVudEhhbmRsZXIqIGhhbmRsZXIgPSBmcmFt
ZS0+ZXZlbnRIYW5kbGVyKCk7Ci0gICAgaWYgKCFoYW5kbGVyKQotICAgICAgICByZXR1cm4gc3Vw
cHJlc3MgfHwga2V5RXZlbnREZWZhdWx0KGV2ZW50KTsKKyAgICBLZXlib2FyZEV2ZW50SGFuZGxl
ciogaGFuZGxlciA9IGZyYW1lLT5rZXlib2FyZEV2ZW50SGFuZGxlcigpOwogCiAgICAgUGxhdGZv
cm1LZXlib2FyZEV2ZW50QnVpbGRlciBldnQoZXZlbnQpOwogICAgIGlmICghZXZ0LmlzQ2hhcmFj
dGVyS2V5KCkpCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCShyZXZpc2lvbiA4NDg4
MCkKKysrIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTAwLDEzICs5MDAsMTEgQEAKIAogdm9pZCBRV2ViUGFnZVByaXZhdGU6OmtleVByZXNzRXZl
bnQoUUtleUV2ZW50ICpldikKIHsKLSAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKICAgICBXZWJD
b3JlOjpGcmFtZSogZnJhbWUgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFp
bkZyYW1lKCk7CiAgICAgLy8gd2UgZm9yd2FyZCB0aGUga2V5IGV2ZW50IHRvIFdlYkNvcmUgZmly
c3QgdG8gaGFuZGxlIHBvdGVudGlhbCBET00KICAgICAvLyBkZWZpbmVkIGV2ZW50IGhhbmRsZXJz
IGFuZCBsYXRlciBvbiBlbmQgdXAgaW4gRWRpdG9yQ2xpZW50UXQ6OmhhbmRsZUtleWJvYXJkRXZl
bnQKICAgICAvLyB0byB0cmlnZ2VyIGVkaXRvciBjb21tYW5kcyB2aWEgdHJpZ2dlckFjdGlvbigp
LgotICAgIGlmICghaGFuZGxlZCkKLSAgICAgICAgaGFuZGxlZCA9IGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+a2V5RXZlbnQoZXYpOworICAgIGJvb2wgaGFuZGxlZCA9IGZyYW1lLT5rZXlib2FyZEV2
ZW50SGFuZGxlcigpLT5rZXlFdmVudChldik7CiAgICAgaWYgKCFoYW5kbGVkKSB7CiAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwogICAgICAgICBpZiAoIWhhbmRsZVNjcm9sbGluZyhldiwgZnJhbWUp
KSB7CkBAIC05NDcsOCArOTQ1LDcgQEAKICAgICB9CiAKICAgICBXZWJDb3JlOjpGcmFtZSogZnJh
bWUgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAg
Ym9vbCBoYW5kbGVkID0gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldik7Ci0gICAg
ZXYtPnNldEFjY2VwdGVkKGhhbmRsZWQpOworICAgIGV2LT5zZXRBY2NlcHRlZChmcmFtZS0+a2V5
Ym9hcmRFdmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXYpKTsKIH0KIAogdm9pZCBRV2ViUGFnZVBy
aXZhdGU6OmZvY3VzSW5FdmVudChRRm9jdXNFdmVudCopCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiA4NDg4MCkKKysrIFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI2
LDcgKzcyNiw3IEBACiAgICAgaWYgKCFmcmFtZS0+dmlldygpKQogICAgICAgICByZXR1cm4gRkFM
U0U7CiAKLSAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlib2FyZEV2
ZW50KSkKKyAgICBpZiAoZnJhbWUtPmtleWJvYXJkRXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGtl
eWJvYXJkRXZlbnQpKQogICAgICAgICByZXR1cm4gVFJVRTsKIAogICAgIC8qIENoYWluIHVwIHRv
IG91ciBwYXJlbnQgY2xhc3MgZm9yIGJpbmRpbmcgYWN0aXZhdGlvbiAqLwpAQCAtNzUwLDcgKzc1
MCw3IEBACiAgICAgICAgIHJldHVybiBGQUxTRTsKIAogICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dCBrZXlib2FyZEV2ZW50KGV2ZW50KTsKLSAgICBpZiAoZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5r
ZXlFdmVudChrZXlib2FyZEV2ZW50KSkKKyAgICBpZiAoZnJhbWUtPmtleWJvYXJkRXZlbnRIYW5k
bGVyKCktPmtleUV2ZW50KGtleWJvYXJkRXZlbnQpKQogICAgICAgICByZXR1cm4gVFJVRTsKIAog
ICAgIC8qIENoYWluIHVwIHRvIG91ciBwYXJlbnQgY2xhc3MgZm9yIGJpbmRpbmcgYWN0aXZhdGlv
biAqLwpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHJldmlzaW9uIDg0ODgwKQorKysgU291cmNl
L1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NzgsNyArMTc3OCw3
IEBACiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CiAgICAgbV9jdXJyZW50Q2hhcmFjdGVyQ29kZSA9IDA7CiAKLSAgICBy
ZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7CisgICAgcmV0
dXJuIGZyYW1lLT5rZXlib2FyZEV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7CiB9
CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBDdHJsS2V5ID0gMSA8PCAwOwpAQCAtMTkzNyw3ICsx
OTM3LDcgQEAKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVu
dChtX3ZpZXdXaW5kb3csIHZpcnR1YWxLZXlDb2RlLCBrZXlEYXRhLCBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OlJhd0tleURvd24sIHN5c3RlbUtleURvd24pOwotICAgIGJvb2wgaGFuZGxlZCA9IGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoa2V5RXZlbnQpOworICAgIGJvb2wgaGFuZGxl
ZCA9IGZyYW1lLT5rZXlib2FyZEV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7CiAK
ICAgICAvLyBUaGVzZSBldmVudHMgY2Fubm90IGJlIGNhbmNlbGVkLCBhbmQgd2UgaGF2ZSBubyBk
ZWZhdWx0IGhhbmRsaW5nIGZvciB0aGVtLgogICAgIC8vIEZJWE1FOiBtYXRjaCBJRSBsaXN0IG1v
cmUgY2xvc2VseSwgc2VlIDxodHRwOi8vbXNkbjIubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5
L21zNTM2OTM4LmFzcHg+LgpAQCAtMjAwMSw3ICsyMDAxLDcgQEAKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zY3Jv
bGxSZWN1cnNpdmVseShkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gZnJhbWUt
PmtleWJvYXJkRXZlbnRIYW5kbGVyKCktPnNjcm9sbFJlY3Vyc2l2ZWx5KGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHkpOwogfQogCiBib29sIFdlYlZpZXc6OmtleVByZXNzKFdQQVJBTSBjaGFyQ29kZSwg
TFBBUkFNIGtleURhdGEsIGJvb2wgc3lzdGVtS2V5RG93bikKQEAgLTIwMTEsOCArMjAxMSw4IEBA
CiAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50KG1fdmlld1dpbmRvdywgY2hhckNv
ZGUsIGtleURhdGEsIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhciwgc3lzdGVtS2V5RG93bik7
CiAgICAgLy8gSUUgZG9lcyBub3QgZGlzcGF0Y2gga2V5cHJlc3MgZXZlbnQgZm9yIFdNX1NZU0NI
QVIuCiAgICAgaWYgKHN5c3RlbUtleURvd24pCi0gICAgICAgIHJldHVybiBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmhhbmRsZUFjY2Vzc0tleShrZXlFdmVudCk7Ci0gICAgcmV0dXJuIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoa2V5RXZlbnQpOworICAgICAgICByZXR1cm4gZnJhbWUt
PmtleWJvYXJkRXZlbnRIYW5kbGVyKCktPmhhbmRsZUFjY2Vzc0tleShrZXlFdmVudCk7CisgICAg
cmV0dXJuIGZyYW1lLT5rZXlib2FyZEV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7
CiB9CiAKIHZvaWQgV2ViVmlldzo6c2V0SXNCZWluZ0Rlc3Ryb3llZCgpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDg0ODgwKQorKysgU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDE0Nyw3ICs0MTQ3LDcgQEAKIAogICAgIEJPT0wgY29tcGxldGlvblBvcHVwV2FzT3BlbiA9IF9w
cml2YXRlLT5jb21wbGV0aW9uQ29udHJvbGxlciAmJiBbX3ByaXZhdGUtPmNvbXBsZXRpb25Db250
cm9sbGVyIHBvcHVwV2luZG93SXNPcGVuXTsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICBpZiAoIWV2ZW50V2FzU2VudFRvV2ViQ29yZSAmJiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpKSB7CisgICAg
aWYgKCFldmVudFdhc1NlbnRUb1dlYkNvcmUgJiYgY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+a2V5
Ym9hcmRFdmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50
KSkpIHsKICAgICAgICAgLy8gV2ViQ29yZSBwcm9jZXNzZWQgYSBrZXkgZXZlbnQsIGJhaWwgb24g
YW55IHByZWV4aXN0aW5nIGNvbXBsZXRlOiBVSQogICAgICAgICBpZiAoY29tcGxldGlvblBvcHVw
V2FzT3BlbikKICAgICAgICAgICAgIFtfcHJpdmF0ZS0+Y29tcGxldGlvbkNvbnRyb2xsZXIgZW5k
UmV2ZXJ0aW5nQ2hhbmdlOllFUyBtb3ZlTGVmdDpOT107CkBAIC00MTc0LDcgKzQxNzQsNyBAQAog
ICAgIFJldGFpblB0cjxXZWJIVE1MVmlldz4gc2VsZlByb3RlY3RvciA9IHNlbGY7CiAgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgaWYgKGNvcmVGcmFtZSAm
JiAhZXZlbnRXYXNTZW50VG9XZWJDb3JlKQotICAgICAgICBjb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5rZXlFdmVudChldmVudCk7CisgICAgICAgIGNvcmVGcmFtZS0+a2V5Ym9hcmRFdmVudEhh
bmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50KSk7CiAgICAgZWxz
ZQogICAgICAgICBbc3VwZXIga2V5VXA6ZXZlbnRdOwogfQpAQCAtNDE5Myw3ICs0MTkzLDcgQEAK
IAogICAgIC8vIERvbid0IG1ha2UgYW4gZXZlbnQgZnJvbSB0aGUgbnVtIGxvY2sgYW5kIGZ1bmN0
aW9uIGtleXMuCiAgICAgaWYgKGNvcmVGcmFtZSAmJiBrZXlDb2RlICE9IDAgJiYga2V5Q29kZSAh
PSAxMCAmJiBrZXlDb2RlICE9IDYzKSB7Ci0gICAgICAgIGNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOworICAgICAgICBjb3Jl
RnJhbWUtPmtleWJvYXJkRXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KFBsYXRmb3JtS2V5Ym9hcmRF
dmVudChldmVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTQ0Mzcs
NyArNDQzNyw3IEBACiAgICAgLy8gUHJlc3NpbmcgRXNjIHJlc3VsdHMgaW4gYSBmYWtlIGV2ZW50
IGJlaW5nIHNlbnQgLSBkb24ndCBwYXNzIGl0IHRvIFdlYkNvcmUuCiAgICAgaWYgKCFldmVudFdh
c1NlbnRUb1dlYkNvcmUgJiYgZXZlbnQgPT0gW05TQXBwIGN1cnJlbnRFdmVudF0gJiYgc2VsZiA9
PSBbW3NlbGYgd2luZG93XSBmaXJzdFJlc3BvbmRlcl0pCiAgICAgICAgIGlmIChGcmFtZSogZnJh
bWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pKQotICAgICAgICAgICAgcmV0ID0gZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7CisgICAgICAgICAgICByZXQgPSBmcmFtZS0+a2V5
Ym9hcmRFdmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50KGV2ZW50
KSk7CiAKICAgICBpZiAoIXJldCkKICAgICAgICAgcmV0ID0gW3NlbGYgX2hhbmRsZVN0eWxlS2V5
RXF1aXZhbGVudDpldmVudF0gfHwgW3N1cGVyIHBlcmZvcm1LZXlFcXVpdmFsZW50OmV2ZW50XTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luY2UvV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC93aW5jZS9XZWJWaWV3LmNwcAkocmV2aXNpb24gODQ4ODApCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbmNlL1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDksNyArMzQ5LDcg
QEAKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKIAogICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVudChtX3dp
bmRvd0hhbmRsZSwgdmlydHVhbEtleUNvZGUsIGtleURhdGEsIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6UmF3S2V5RG93biwgc3lzdGVtS2V5RG93bik7Ci0gICAgYm9vbCBoYW5kbGVkID0gZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7CisgICAgYm9vbCBoYW5kbGVkID0g
ZnJhbWUtPmtleWJvYXJkRXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGtleUV2ZW50KTsKIAogICAg
IC8vIFRoZXNlIGV2ZW50cyBjYW5ub3QgYmUgY2FuY2VsZWQsIGFuZCB3ZSBoYXZlIG5vIGRlZmF1
bHQgaGFuZGxpbmcgZm9yIHRoZW0uCiAgICAgLy8gRklYTUU6IG1hdGNoIElFIGxpc3QgbW9yZSBj
bG9zZWx5LCBzZWUgPGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1
MzY5MzguYXNweD4uCkBAIC0zNzMsOCArMzczLDggQEAKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQga2V5RXZlbnQobV93aW5kb3dIYW5kbGUsIGNoYXJDb2RlLCBrZXlEYXRhLCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OkNoYXIsIHN5c3RlbUtleURvd24pOwogICAgIC8vIElFIGRvZXMgbm90IGRp
c3BhdGNoIGtleXByZXNzIGV2ZW50IGZvciBXTV9TWVNDSEFSLgogICAgIGlmIChzeXN0ZW1LZXlE
b3duKQotICAgICAgICByZXR1cm4gZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVBY2Nlc3NL
ZXkoa2V5RXZlbnQpOwotICAgIGlmIChmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGtl
eUV2ZW50KSkKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5rZXlib2FyZEV2ZW50SGFuZGxlcigpLT5o
YW5kbGVBY2Nlc3NLZXkoa2V5RXZlbnQpOworICAgIGlmIChmcmFtZS0+a2V5Ym9hcmRFdmVudEhh
bmRsZXIoKS0+a2V5RXZlbnQoa2V5RXZlbnQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IHJldHVybiBmYWxzZTsKQEAgLTM4NSw3ICszODUsNyBAQAogICAgIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudCBrZXlFdmVudChtX3dpbmRvd0hhbmRsZSwgdmlydHVhbEtleUNvZGUsIGtleURhdGEsIFBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6S2V5VXAsIHN5c3RlbUtleURvd24pOwogCiAgICAgRnJhbWUq
IGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7
Ci0gICAgcmV0dXJuIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoa2V5RXZlbnQpOwor
ICAgIHJldHVybiBmcmFtZS0+a2V5Ym9hcmRFdmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoa2V5RXZl
bnQpOwogfQogCiBMUkVTVUxUIFdlYlZpZXc6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2ZyYW1lLmNwcAkocmV2aXNpb24gODQ4ODApCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwMiw3ICsxNjAyLDcgQEAKICAgICAg
ICAgbywgZXYtPmtleW5hbWUsIGV2LT5rZXkgPyBldi0+a2V5IDogIiIsIGV2LT5zdHJpbmcgPyBl
di0+c3RyaW5nIDogIiIpOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2
ZW50KGV2KTsKLSAgICBpZiAoc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZl
bnQpKQorICAgIGlmIChzZC0+ZnJhbWUtPmtleWJvYXJkRXZlbnRIYW5kbGVyKCktPmtleUV2ZW50
KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdrX2Zy
YW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKHNkLT5mcmFtZSwgZXZlbnQpOwpAQCAtMTYyNiw3ICsx
NjI2LDcgQEAKICAgICAgICAgbywgZXYtPmtleW5hbWUsIGV2LT5rZXkgPyBldi0+a2V5IDogIiIs
IGV2LT5zdHJpbmcgPyBldi0+c3RyaW5nIDogIiIpOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1L
ZXlib2FyZEV2ZW50IGV2ZW50KGV2KTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+a2V5RXZlbnQoZXZlbnQpOworICAgIHJldHVybiBzZC0+ZnJhbWUtPmtleWJvYXJkRXZl
bnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKIH0KIAogLyogaW50ZXJuYWwgbWV0aG9kcyAq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDg0ODgwKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNiBAQAogX19aTjdX
ZWJDb3JlMTJFdmVudEhhbmRsZXIxMm1vdXNlRHJhZ2dlZEVQN05TRXZlbnQKIF9fWk43V2ViQ29y
ZTEyRXZlbnRIYW5kbGVyMTRjdXJyZW50TlNFdmVudEV2CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFu
ZGxlcjE0c2Nyb2xsT3ZlcmZsb3dFTlNfMTVTY3JvbGxEaXJlY3Rpb25FTlNfMTdTY3JvbGxHcmFu
dWxhcml0eUVQTlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE1aGFuZGxlQWNj
ZXNzS2V5RVJLTlNfMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50
SGFuZGxlcjE1c2VuZFNjcm9sbEV2ZW50RXYKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTZo
YW5kbGVXaGVlbEV2ZW50RVJOU18xOFBsYXRmb3JtV2hlZWxFdmVudEUKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyMTdzY3JvbGxSZWN1cnNpdmVseUVOU18xNVNjcm9sbERpcmVjdGlvbkVOU18x
N1Njcm9sbEdyYW51bGFyaXR5RVBOU180Tm9kZUUKQEAgLTIzOSwxMCArMjM4LDcgQEAKIF9fWk43
V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjFoYW5kbGVNb3VzZVByZXNzRXZlbnRFUktOU18xOFBsYXRm
b3JtTW91c2VFdmVudEUKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyMjNoYW5kbGVNb3VzZVJl
bGVhc2VFdmVudEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3JlMTJFdmVu
dEhhbmRsZXIyNGxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseUVOU18yMlNjcm9sbExvZ2ljYWxEaXJl
Y3Rpb25FTlNfMTdTY3JvbGxHcmFudWxhcml0eUVQTlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxMkV2
ZW50SGFuZGxlcjI3Y2Fwc0xvY2tTdGF0ZU1heUhhdmVDaGFuZ2VkRXYKIF9fWk43V2ViQ29yZTEy
RXZlbnRIYW5kbGVyN21vdXNlVXBFUDdOU0V2ZW50Ci1fX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjhrZXlFdmVudEVQN05TRXZlbnQKLV9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVyOGtleUV2ZW50
RVJLTlNfMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRFCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxl
cjltb3VzZURvd25FUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkdDQ29udHJvbGxlcjE3Z2FyYmFn
ZUNvbGxlY3ROb3dFdgogX19aTjdXZWJDb3JlMTJHQ0NvbnRyb2xsZXI0M2dhcmJhZ2VDb2xsZWN0
T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmdFYgpAQCAtNTM0LDYgKzUzMCw4IEBACiBfX1pO
N1dlYkNvcmUxOVRleHRSZXNvdXJjZURlY29kZXJDMUVSS04zV1RGNlN0cmluZ0VSS05TXzEyVGV4
dEVuY29kaW5nRWIKIF9fWk43V2ViQ29yZTE5VGV4dFJlc291cmNlRGVjb2RlckQxRXYKIF9fWk43
V2ViQ29yZTE5YXBwbGljYXRpb25Jc1NhZmFyaUV2CitfX1pON1dlYkNvcmUyMEtleWJvYXJkRXZl
bnRIYW5kbGVyMTVoYW5kbGVBY2Nlc3NLZXlFUktOU18yMVBsYXRmb3JtS2V5Ym9hcmRFdmVudEUK
K19fWk43V2ViQ29yZTIwS2V5Ym9hcmRFdmVudEhhbmRsZXI4a2V5RXZlbnRFUktOU18yMVBsYXRm
b3JtS2V5Ym9hcmRFdmVudEUKIF9fWk43V2ViQ29yZTIwUmVuZGVyRW1iZWRkZWRPYmplY3QzMHNl
dFNob3dzQ3Jhc2hlZFBsdWdpbkluZGljYXRvckV2CiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVz
cG9uc2VCYXNlMjRzZXRFeHBlY3RlZENvbnRlbnRMZW5ndGhFeAogX19aTjdXZWJDb3JlMjBSZXNv
dXJjZVJlc3BvbnNlQmFzZUMyRXYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9LZXlib2FyZEV2
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vS2V5Ym9hcmRFdmVudC5j
cHAJKHJldmlzaW9uIDg0ODgwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0tleWJvYXJkRXZlbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAvLyBXZSBtYXRjaCBG
aXJlZm94LCB1bmxlc3MgaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSBtb2RlLCB3aGVyZSB3ZSBh
bHdheXMgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgY29kZS4KICAgICBib29sIGJhY2t3YXJkQ29tcGF0
aWJpbGl0eU1vZGUgPSBmYWxzZTsKICAgICBpZiAodmlldygpICYmIHZpZXcoKS0+ZnJhbWUoKSkK
LSAgICAgICAgYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSA9IHZpZXcoKS0+ZnJhbWUoKS0+ZXZl
bnRIYW5kbGVyKCktPm5lZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtzKCk7Cisg
ICAgICAgIGJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUgPSB2aWV3KCktPmZyYW1lKCktPmtleWJv
YXJkRXZlbnRIYW5kbGVyKCktPm5lZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtz
KCk7CiAKICAgICBpZiAoIW1fa2V5RXZlbnQgfHwgKHR5cGUoKSAhPSBldmVudE5hbWVzKCkua2V5
cHJlc3NFdmVudCAmJiAhYmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSkpCiAgICAgICAgIHJldHVy
biAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gODQ4ODApCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4ODQsNyArMjg4NCw3IEBACiAg
ICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50IHx8IGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkgewogICAgICAgICBpZiAoZXZlbnQtPmlz
S2V5Ym9hcmRFdmVudCgpKQogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCktPmZyYW1lKCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kZWZh
dWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50
KSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmtleWJvYXJkRXZlbnRIYW5kbGVyKCktPmRlZmF1
bHRLZXlib2FyZEV2ZW50SGFuZGxlcihzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZlbnQp
KTsKICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkg
ewogICAgICAgICBpbnQgZGV0YWlsID0gZXZlbnQtPmlzVUlFdmVudCgpID8gc3RhdGljX2Nhc3Q8
VUlFdmVudCo+KGV2ZW50KS0+ZGV0YWlsKCkgOiAwOwogICAgICAgICBkaXNwYXRjaFVJRXZlbnQo
ZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQsIGRldGFpbCwgZXZlbnQpOwpAQCAtMjg5Nyw3
ICsyODk3LDcgQEAKICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudGV4
dElucHV0RXZlbnQpIHsKICAgICAgICAgaWYgKGV2ZW50LT5pc1RleHRFdmVudCgpKQogICAgICAg
ICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCi0gICAgICAgICAg
ICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5kZWZhdWx0VGV4dElucHV0RXZlbnRIYW5kbGVy
KHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2ZW50KSk7CisgICAgICAgICAgICAgICAgZnJhbWUt
PmtleWJvYXJkRXZlbnRIYW5kbGVyKCktPmRlZmF1bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoc3Rh
dGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZlbnQpKTsKICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykK
ICAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkubW91c2Vkb3duRXZlbnQg
JiYgZXZlbnQtPmlzTW91c2VFdmVudCgpKSB7CiAgICAgICAgIE1vdXNlRXZlbnQqIG1vdXNlRXZl
bnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA4NDg4MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Niw3
ICs0NzYsNyBAQAogCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0QmFja3RhYihGcmFtZSogZnJh
bWUsIEV2ZW50KiBldmVudCwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsK
LSAgICByZXR1cm4gdGFyZ2V0RnJhbWUoZnJhbWUsIGV2ZW50KS0+ZXZlbnRIYW5kbGVyKCktPmhh
bmRsZVRleHRJbnB1dEV2ZW50KCJcdCIsIGV2ZW50LCBUZXh0RXZlbnRJbnB1dEJhY2tUYWIpOwor
ICAgIHJldHVybiB0YXJnZXRGcmFtZShmcmFtZSwgZXZlbnQpLT5rZXlib2FyZEV2ZW50SGFuZGxl
cigpLT5oYW5kbGVUZXh0SW5wdXRFdmVudCgiXHQiLCBldmVudCwgVGV4dEV2ZW50SW5wdXRCYWNr
VGFiKTsKIH0KIAogc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEhvcml6b250YWxSdWxlKEZyYW1l
KiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQpAQCAtNTA0LDcgKzUwNCw3IEBACiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBjYXNl
IENvbW1hbmRGcm9tTWVudU9yS2V5QmluZGluZzoKLSAgICAgICAgcmV0dXJuIHRhcmdldEZyYW1l
KGZyYW1lLCBldmVudCktPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVUZXh0SW5wdXRFdmVudCgiXG4i
LCBldmVudCwgVGV4dEV2ZW50SW5wdXRMaW5lQnJlYWspOworICAgICAgICByZXR1cm4gdGFyZ2V0
RnJhbWUoZnJhbWUsIGV2ZW50KS0+a2V5Ym9hcmRFdmVudEhhbmRsZXIoKS0+aGFuZGxlVGV4dElu
cHV0RXZlbnQoIlxuIiwgZXZlbnQsIFRleHRFdmVudElucHV0TGluZUJyZWFrKTsKICAgICBjYXNl
IENvbW1hbmRGcm9tRE9NOgogICAgIGNhc2UgQ29tbWFuZEZyb21ET01XaXRoVXNlckludGVyZmFj
ZToKICAgICAgICAgLy8gRG9lc24ndCBzY3JvbGwgdG8gbWFrZSB0aGUgc2VsZWN0aW9uIHZpc2li
bGUsIG9yIG1vZGlmeSB0aGUga2lsbCByaW5nLgpAQCAtNTIwLDcgKzUyMCw3IEBACiBzdGF0aWMg
Ym9vbCBleGVjdXRlSW5zZXJ0TmV3bGluZShGcmFtZSogZnJhbWUsIEV2ZW50KiBldmVudCwgRWRp
dG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBGcmFtZSogdGFyZ2V0RnJh
bWUgPSBXZWJDb3JlOjp0YXJnZXRGcmFtZShmcmFtZSwgZXZlbnQpOwotICAgIHJldHVybiB0YXJn
ZXRGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVRleHRJbnB1dEV2ZW50KCJcbiIsIGV2ZW50
LCB0YXJnZXRGcmFtZS0+ZWRpdG9yKCktPmNhbkVkaXRSaWNobHkoKSA/IFRleHRFdmVudElucHV0
S2V5Ym9hcmQgOiBUZXh0RXZlbnRJbnB1dExpbmVCcmVhayk7CisgICAgcmV0dXJuIHRhcmdldEZy
YW1lLT5rZXlib2FyZEV2ZW50SGFuZGxlcigpLT5oYW5kbGVUZXh0SW5wdXRFdmVudCgiXG4iLCBl
dmVudCwgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLT5jYW5FZGl0UmljaGx5KCkgPyBUZXh0RXZlbnRJ
bnB1dEtleWJvYXJkIDogVGV4dEV2ZW50SW5wdXRMaW5lQnJlYWspOwogfQogCiBzdGF0aWMgYm9v
bCBleGVjdXRlSW5zZXJ0TmV3bGluZUluUXVvdGVkQ29udGVudChGcmFtZSogZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKQEAgLTU0Myw3ICs1NDMsNyBA
QAogCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0VGFiKEZyYW1lKiBmcmFtZSwgRXZlbnQqIGV2
ZW50LCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIHJldHVybiB0
YXJnZXRGcmFtZShmcmFtZSwgZXZlbnQpLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVGV4dElucHV0
RXZlbnQoIlx0IiwgZXZlbnQpOworICAgIHJldHVybiB0YXJnZXRGcmFtZShmcmFtZSwgZXZlbnQp
LT5rZXlib2FyZEV2ZW50SGFuZGxlcigpLT5oYW5kbGVUZXh0SW5wdXRFdmVudCgiXHQiLCBldmVu
dCk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRUZXh0KEZyYW1lKiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gODQ4ODApCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzEsMTIgKzEwNzEsMTIg
QEAKIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFdmVudCog
dHJpZ2dlcmluZ0V2ZW50KQogewotICAgIHJldHVybiBtX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgdHJpZ2dlcmluZ0V2ZW50KTsKKyAgICByZXR1cm4g
bV9mcmFtZS0+a2V5Ym9hcmRFdmVudEhhbmRsZXIoKS0+aGFuZGxlVGV4dElucHV0RXZlbnQodGV4
dCwgdHJpZ2dlcmluZ0V2ZW50KTsKIH0KIAogYm9vbCBFZGl0b3I6Omluc2VydFRleHRGb3JDb25m
aXJtZWRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgcmV0dXJuIG1fZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVUZXh0SW5wdXRFdmVudCh0ZXh0LCAwLCBUZXh0RXZl
bnRJbnB1dENvbXBvc2l0aW9uKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+a2V5Ym9hcmRFdmVudEhh
bmRsZXIoKS0+aGFuZGxlVGV4dElucHV0RXZlbnQodGV4dCwgMCwgVGV4dEV2ZW50SW5wdXRDb21w
b3NpdGlvbik7CiB9CiAKIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0
RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluc2VydGVkVGV4dCwgVGV4dEV2
ZW50KiB0cmlnZ2VyaW5nRXZlbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NlbGVj
dGlvbkNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDg0ODgwKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUw
Myw3ICsxNTAzLDcgQEAKICAgICBzZXRDYXJldFZpc2libGUoYWN0aXZlQW5kRm9jdXNlZCk7CiAK
ICAgICAvLyBVcGRhdGUgZm9yIGNhcHMgbG9jayBzdGF0ZQotICAgIG1fZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5jYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKKyAgICBtX2ZyYW1lLT5rZXli
b2FyZEV2ZW50SGFuZGxlcigpLT5jYXBzTG9ja1N0YXRlTWF5SGF2ZUNoYW5nZWQoKTsKIAogICAg
IC8vIEJlY2F1c2UgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigpIGFuZAogICAg
IC8vIFJlbmRlclRoZW1lOjppc0ZvY3VzZWQoKSBjaGVjayBpZiB0aGUgZnJhbWUgaXMgYWN0aXZl
LCB3ZSBoYXZlIHRvCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9u
IDg0ODgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtOTAsNiArOTAsMzYgQEAKIAogZW51bSBIaXRUZXN0U2Nyb2xsYmFycyB7IFNob3Vs
ZEhpdFRlc3RTY3JvbGxiYXJzLCBEb250SGl0VGVzdFNjcm9sbGJhcnMgfTsKIAorY2xhc3MgS2V5
Ym9hcmRFdmVudEhhbmRsZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEtleWJvYXJkRXZl
bnRIYW5kbGVyKTsKKworcHVibGljOgorICAgIEtleWJvYXJkRXZlbnRIYW5kbGVyKEZyYW1lKik7
CisgICAgfktleWJvYXJkRXZlbnRIYW5kbGVyKCk7CisKKyAgICBib29sIG5lZWRzS2V5Ym9hcmRF
dmVudERpc2FtYmlndWF0aW9uUXVpcmtzKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
YWNjZXNzS2V5TW9kaWZpZXJzKCk7CisgICAgYm9vbCBoYW5kbGVBY2Nlc3NLZXkoY29uc3QgUGxh
dGZvcm1LZXlib2FyZEV2ZW50Jik7CisgICAgYm9vbCBrZXlFdmVudChjb25zdCBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQmKTsKKyAgICB2b2lkIGRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXli
b2FyZEV2ZW50Kik7CisKKyAgICBib29sIGhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCA9IDAsIFRleHRFdmVudElucHV0VHlwZSA9
IFRleHRFdmVudElucHV0S2V5Ym9hcmQpOworICAgIHZvaWQgZGVmYXVsdFRleHRJbnB1dEV2ZW50
SGFuZGxlcihUZXh0RXZlbnQqKTsKKyAgICAKKyAgICB2b2lkIGRlZmF1bHRTcGFjZUV2ZW50SGFu
ZGxlcihLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBkZWZhdWx0QmFja3NwYWNlRXZlbnRIYW5k
bGVyKEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lkIGRlZmF1bHRUYWJFdmVudEhhbmRsZXIoS2V5
Ym9hcmRFdmVudCopOworICAgIHZvaWQgZGVmYXVsdEFycm93RXZlbnRIYW5kbGVyKEZvY3VzRGly
ZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7CisKKyAgICB2b2lkIGhhbmRsZUtleWJvYXJkU2VsZWN0
aW9uTW92ZW1lbnQoS2V5Ym9hcmRFdmVudCopOworCisgICAgdm9pZCBjYXBzTG9ja1N0YXRlTWF5
SGF2ZUNoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICBGcmFtZSogbV9mcmFtZTsKK307CisKIGNs
YXNzIEV2ZW50SGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXZlbnRIYW5kbGVy
KTsKIHB1YmxpYzoKQEAgLTE0Niw3ICsxNzYsNiBAQAogICAgIHN0YXRpYyBGcmFtZSogc3ViZnJh
bWVGb3JIaXRUZXN0UmVzdWx0KGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmKTsK
IAogICAgIGJvb2wgc2Nyb2xsT3ZlcmZsb3coU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7Ci0gICAgYm9vbCBsb2dpY2FsU2Nyb2xsT3Zl
cmZsb3coU2Nyb2xsTG9naWNhbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIE5vZGUqIHN0
YXJ0aW5nTm9kZSA9IDApOwogCiAgICAgYm9vbCBzY3JvbGxSZWN1cnNpdmVseShTY3JvbGxEaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUgPSAwKTsKICAgICBi
b29sIGxvZ2ljYWxTY3JvbGxSZWN1cnNpdmVseShTY3JvbGxMb2dpY2FsRGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSwgTm9kZSogc3RhcnRpbmdOb2RlID0gMCk7CkBAIC0xODMsMTYgKzIxMiw2
IEBACiAKICAgICB2b2lkIHNldE1vdXNlRG93bk1heVN0YXJ0QXV0b3Njcm9sbCgpIHsgbV9tb3Vz
ZURvd25NYXlTdGFydEF1dG9zY3JvbGwgPSB0cnVlOyB9CiAKLSAgICBib29sIG5lZWRzS2V5Ym9h
cmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtzKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgdW5zaWdu
ZWQgYWNjZXNzS2V5TW9kaWZpZXJzKCk7Ci0gICAgYm9vbCBoYW5kbGVBY2Nlc3NLZXkoY29uc3Qg
UGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7Ci0gICAgYm9vbCBrZXlFdmVudChjb25zdCBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQmKTsKLSAgICB2b2lkIGRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihL
ZXlib2FyZEV2ZW50Kik7Ci0KLSAgICBib29sIGhhbmRsZVRleHRJbnB1dEV2ZW50KGNvbnN0IFN0
cmluZyYgdGV4dCwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCA9IDAsIFRleHRFdmVudElucHV0VHlw
ZSA9IFRleHRFdmVudElucHV0S2V5Ym9hcmQpOwotICAgIHZvaWQgZGVmYXVsdFRleHRJbnB1dEV2
ZW50SGFuZGxlcihUZXh0RXZlbnQqKTsKLQogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAg
Ym9vbCBldmVudE1heVN0YXJ0RHJhZyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKSBjb25zdDsK
ICAgICAKQEAgLTIwMCw4ICsyMTksNiBAQAogI2VuZGlmCiAKICAgICB2b2lkIGZvY3VzRG9jdW1l
bnRWaWV3KCk7Ci0KLSAgICB2b2lkIGNhcHNMb2NrU3RhdGVNYXlIYXZlQ2hhbmdlZCgpOwogICAg
IAogICAgIHZvaWQgc2VuZFJlc2l6ZUV2ZW50KCk7CiAgICAgdm9pZCBzZW5kU2Nyb2xsRXZlbnQo
KTsKQEAgLTIxMyw3ICsyMzAsNiBAQAogICAgIHZvaWQgbW91c2VEcmFnZ2VkKE5TRXZlbnQgKik7
CiAgICAgdm9pZCBtb3VzZVVwKE5TRXZlbnQgKik7CiAgICAgdm9pZCBtb3VzZU1vdmVkKE5TRXZl
bnQgKik7Ci0gICAgYm9vbCBrZXlFdmVudChOU0V2ZW50ICopOwogICAgIGJvb2wgd2hlZWxFdmVu
dChOU0V2ZW50ICopOwogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCkBAIC0yODAsOCArMjk2
LDYgQEAKICAgICBib29sIGhhbmRsZU1vdXNlRHJhZ2dlZEV2ZW50KGNvbnN0IE1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMmKTsKICNlbmRpZgogICAgIGJvb2wgaGFuZGxlTW91c2VSZWxlYXNl
RXZlbnQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwotCi0gICAgdm9pZCBo
YW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KEtleWJvYXJkRXZlbnQqKTsKICAgICAKICAg
ICBDdXJzb3Igc2VsZWN0Q3Vyc29yKGNvbnN0IE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMm
LCBTY3JvbGxiYXIqKTsKICNpZiBFTkFCTEUoUEFOX1NDUk9MTElORykKQEAgLTM0NCwxMSArMzU4
LDYgQEAKICAgICBib29sIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopOwogICAg
IGJvb2wgcGFzc1doZWVsRXZlbnRUb1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQq
KTsKIAotICAgIHZvaWQgZGVmYXVsdFNwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqKTsK
LSAgICB2b2lkIGRlZmF1bHRCYWNrc3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOwot
ICAgIHZvaWQgZGVmYXVsdFRhYkV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7Ci0gICAgdm9p
ZCBkZWZhdWx0QXJyb3dFdmVudEhhbmRsZXIoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJkRXZlbnQq
KTsKLQogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgdm9pZCBhbGxvd0RIVE1MRHJhZyhi
b29sJiBmbGFnREhUTUwsIGJvb2wmIGZsYWdVQSkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDg0ODgwKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4
LDE1IEBACiAKICNlbmRpZgogCitLZXlib2FyZEV2ZW50SGFuZGxlcjo6S2V5Ym9hcmRFdmVudEhh
bmRsZXIoRnJhbWUqIGZyYW1lKQorICAgIDogbV9mcmFtZShmcmFtZSkKK3sKK30KKworS2V5Ym9h
cmRFdmVudEhhbmRsZXI6On5LZXlib2FyZEV2ZW50SGFuZGxlcigpCit7Cit9CisKIEV2ZW50SGFu
ZGxlcjo6RXZlbnRIYW5kbGVyKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiAg
ICAgLCBtX21vdXNlUHJlc3NlZChmYWxzZSkKQEAgLTEwNDEsMjAgKzEwNTAsMTQgQEAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpsb2dpY2FsU2Nyb2xsT3ZlcmZs
b3coU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBOb2RlKiBzdGFydGluZ05vZGUpCitzdGF0aWMgYm9vbCBsb2dpY2FsU2Nyb2xs
T3ZlcmZsb3coU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBOb2RlKiBub2RlKQogewotICAgIE5vZGUqIG5vZGUgPSBzdGFydGlu
Z05vZGU7Ci0KLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIG5vZGUgPSBtX2ZyYW1lLT5kb2N1bWVu
dCgpLT5mb2N1c2VkTm9kZSgpOwotCi0gICAgaWYgKCFub2RlKQotICAgICAgICBub2RlID0gbV9t
b3VzZVByZXNzTm9kZS5nZXQoKTsKLSAgICAKICAgICBpZiAobm9kZSkgewogICAgICAgICBSZW5k
ZXJPYmplY3QqIHIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAociAmJiAhci0+aXNM
aXN0Qm94KCkgJiYgci0+ZW5jbG9zaW5nQm94KCktPmxvZ2ljYWxTY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSkpIHsKLSAgICAgICAgICAgIHNldEZyYW1lV2FzU2Nyb2xsZWRCeVVzZXIoKTsK
KyAgICAgICAgICAgIEZyYW1lVmlldyogdiA9IG5vZGUtPmRvY3VtZW50KCktPnZpZXcoKTsKKyAg
ICAgICAgICAgIGlmICh2KQorICAgICAgICAgICAgICAgIHYtPnNldFdhc1Njcm9sbGVkQnlVc2Vy
KHRydWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
MDg0LDcgKzEwODcsMTQgQEAKICAgICAvLyBUaGUgbGF5b3V0IG5lZWRzIHRvIGJlIHVwIHRvIGRh
dGUgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBzY3JvbGwuIFdlIG1heSBiZQogICAgIC8vIGhlcmUg
YmVjYXVzZSBvZiBhbiBvbkxvYWQgZXZlbnQsIGluIHdoaWNoIGNhc2UgdGhlIGZpbmFsIGxheW91
dCBoYXNuJ3QgYmVlbiBwZXJmb3JtZWQgeWV0LgogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChsb2dpY2FsU2Ny
b2xsT3ZlcmZsb3coZGlyZWN0aW9uLCBncmFudWxhcml0eSwgc3RhcnRpbmdOb2RlKSkKKyAgICBO
b2RlKiBub2RlRm9yTG9naXZhbFNjcm9sbCA9IHN0YXJ0aW5nTm9kZTsKKworICAgIGlmICghbm9k
ZUZvckxvZ2l2YWxTY3JvbGwpCisgICAgICAgIG5vZGVGb3JMb2dpdmFsU2Nyb2xsID0gbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+Zm9jdXNlZE5vZGUoKTsKKyAgICBpZiAoIW5vZGVGb3JMb2dpdmFsU2Ny
b2xsKQorICAgICAgICBub2RlRm9yTG9naXZhbFNjcm9sbCA9IG1fbW91c2VQcmVzc05vZGUuZ2V0
KCk7CisKKyAgICBpZiAobG9naWNhbFNjcm9sbE92ZXJmbG93KGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHksIG5vZGVGb3JMb2dpdmFsU2Nyb2xsKSkKICAgICAgICAgcmV0dXJuIHRydWU7ICAgIAogICAg
IEZyYW1lKiBmcmFtZSA9IG1fZnJhbWU7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZp
ZXcoKTsKQEAgLTIzOTUsNyArMjQwNSw3IEBACiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLWJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVBY2Nlc3NLZXkoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50
JiBldnQpCitib29sIEtleWJvYXJkRXZlbnRIYW5kbGVyOjpoYW5kbGVBY2Nlc3NLZXkoY29uc3Qg
UGxhdGZvcm1LZXlib2FyZEV2ZW50JiBldnQpCiB7CiAgICAgLy8gRklYTUU6IElnbm9yaW5nIHRo
ZSBzdGF0ZSBvZiBTaGlmdCBrZXkgaXMgd2hhdCBuZWl0aGVyIElFIG5vciBGaXJlZm94IGRvLgog
ICAgIC8vIElFIG1hdGNoZXMgbG93ZXIgYW5kIHVwcGVyIGNhc2UgYWNjZXNzIGtleXMgcmVnYXJk
bGVzcyBvZiBTaGlmdCBrZXkgc3RhdGUgLSBidXQgaWYgYm90aCB1cHBlciBhbmQKQEAgLTI0MTMs
MTMgKzI0MjMsMTMgQEAKIH0KIAogI2lmICFQTEFURk9STShNQUMpCi1ib29sIEV2ZW50SGFuZGxl
cjo6bmVlZHNLZXlib2FyZEV2ZW50RGlzYW1iaWd1YXRpb25RdWlya3MoKSBjb25zdAorYm9vbCBL
ZXlib2FyZEV2ZW50SGFuZGxlcjo6bmVlZHNLZXlib2FyZEV2ZW50RGlzYW1iaWd1YXRpb25RdWly
a3MoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKIH0KICNlbmRpZgogCi1ib29sIEV2ZW50
SGFuZGxlcjo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBpbml0aWFsS2V5
RXZlbnQpCitib29sIEtleWJvYXJkRXZlbnRIYW5kbGVyOjprZXlFdmVudChjb25zdCBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQmIGluaXRpYWxLZXlFdmVudCkKIHsKICAgICBSZWZQdHI8RnJhbWVWaWV3
PiBwcm90ZWN0b3IobV9mcmFtZS0+dmlldygpKTsgCiAKQEAgLTI1MzIsNyArMjU0Miw3IEBACiAg
ICAgcmV0dXJuIGtleWRvd25SZXN1bHQgfHwga2V5cHJlc3MtPmRlZmF1bHRQcmV2ZW50ZWQoKSB8
fCBrZXlwcmVzcy0+ZGVmYXVsdEhhbmRsZWQoKTsKIH0KIAotdm9pZCBFdmVudEhhbmRsZXI6Omhh
bmRsZUtleWJvYXJkU2VsZWN0aW9uTW92ZW1lbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCit2b2lk
IEtleWJvYXJkRXZlbnRIYW5kbGVyOjpoYW5kbGVLZXlib2FyZFNlbGVjdGlvbk1vdmVtZW50KEtl
eWJvYXJkRXZlbnQqIGV2ZW50KQogewogICAgIGlmICghZXZlbnQpCiAgICAgICAgIHJldHVybjsK
QEAgLTI1NTYsOCArMjU2NiwyOSBAQAogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQo
KTsKICAgICB9ICAgIAogfQorCitzdGF0aWMgRm9jdXNEaXJlY3Rpb24gZm9jdXNEaXJlY3Rpb25G
b3JLZXkoY29uc3QgQXRvbWljU3RyaW5nJiBrZXlJZGVudGlmaWVyKQoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBEb3duLCAoIkRvd24iKSk7CisgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIFVwLCAoIlVwIikpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoQXRvbWljU3RyaW5nLCBMZWZ0LCAoIkxlZnQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChBdG9taWNTdHJpbmcsIFJpZ2h0LCAoIlJpZ2h0IikpOwogICAgIAotdm9pZCBFdmVudEhh
bmRsZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50KiBldmVudCkK
KyAgICBGb2N1c0RpcmVjdGlvbiByZXRWYWwgPSBGb2N1c0RpcmVjdGlvbk5vbmU7CisgICAgCisg
ICAgaWYgKGtleUlkZW50aWZpZXIgPT0gRG93bikKKyAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJl
Y3Rpb25Eb3duOworICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gVXApCisgICAgICAgIHJl
dFZhbCA9IEZvY3VzRGlyZWN0aW9uVXA7CisgICAgZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSBM
ZWZ0KQorICAgICAgICByZXRWYWwgPSBGb2N1c0RpcmVjdGlvbkxlZnQ7CisgICAgZWxzZSBpZiAo
a2V5SWRlbnRpZmllciA9PSBSaWdodCkKKyAgICAgICAgcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25S
aWdodDsKKyAgICAKKyAgICByZXR1cm4gcmV0VmFsOworfQorCit2b2lkIEtleWJvYXJkRXZlbnRI
YW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQp
CiB7CiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCkg
ewogICAgICAgICBtX2ZyYW1lLT5lZGl0b3IoKS0+aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudCk7
CkBAIC0yNTg2LDI3ICsyNjE3LDYgQEAKICAgICB9CiB9CiAKLUZvY3VzRGlyZWN0aW9uIEV2ZW50
SGFuZGxlcjo6Zm9jdXNEaXJlY3Rpb25Gb3JLZXkoY29uc3QgQXRvbWljU3RyaW5nJiBrZXlJZGVu
dGlmaWVyKSBjb25zdAotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBE
b3duLCAoIkRvd24iKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIFVw
LCAoIlVwIikpOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBMZWZ0LCAo
IkxlZnQiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIFJpZ2h0LCAo
IlJpZ2h0IikpOwotCi0gICAgRm9jdXNEaXJlY3Rpb24gcmV0VmFsID0gRm9jdXNEaXJlY3Rpb25O
b25lOwotCi0gICAgaWYgKGtleUlkZW50aWZpZXIgPT0gRG93bikKLSAgICAgICAgcmV0VmFsID0g
Rm9jdXNEaXJlY3Rpb25Eb3duOwotICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gVXApCi0g
ICAgICAgIHJldFZhbCA9IEZvY3VzRGlyZWN0aW9uVXA7Ci0gICAgZWxzZSBpZiAoa2V5SWRlbnRp
ZmllciA9PSBMZWZ0KQotICAgICAgICByZXRWYWwgPSBGb2N1c0RpcmVjdGlvbkxlZnQ7Ci0gICAg
ZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSBSaWdodCkKLSAgICAgICAgcmV0VmFsID0gRm9jdXNE
aXJlY3Rpb25SaWdodDsKLQotICAgIHJldHVybiByZXRWYWw7Ci19Ci0KICNpZiBFTkFCTEUoRFJB
R19TVVBQT1JUKQogYm9vbCBFdmVudEhhbmRsZXI6OmRyYWdIeXN0ZXJlc2lzRXhjZWVkZWQoY29u
c3QgRmxvYXRQb2ludCYgZmxvYXREcmFnVmlld3BvcnRMb2NhdGlvbikgY29uc3QKIHsKQEAgLTI4
MDUsNyArMjgxNSw3IEBACiB9CiAjZW5kaWYgLy8gRU5BQkxFKERSQUdfU1VQUE9SVCkKICAgCi1i
b29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBFdmVudCogdW5kZXJseWluZ0V2ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5wdXRUeXBlKQor
Ym9vbCBLZXlib2FyZEV2ZW50SGFuZGxlcjo6aGFuZGxlVGV4dElucHV0RXZlbnQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBFdmVudCogdW5kZXJseWluZ0V2ZW50LCBUZXh0RXZlbnRJbnB1dFR5cGUgaW5w
dXRUeXBlKQogewogICAgIC8vIFBsYXRmb3JtcyBzaG91bGQgZGlmZmVyZW50aWF0ZSByZWFsIGNv
bW1hbmRzIGxpa2Ugc2VsZWN0QWxsIGZyb20gdGV4dCBpbnB1dCBpbiBkaXNndWlzZSAobGlrZSBp
bnNlcnROZXdsaW5lKSwKICAgICAvLyBhbmQgYXZvaWQgZGlzcGF0Y2hpbmcgdGV4dCBpbnB1dCBl
dmVudHMgZnJvbSBrZXlkb3duIGRlZmF1bHQgaGFuZGxlcnMuCkBAIC0yODYyLDcgKzI4NzIsNyBA
QAogICAgIHJldHVybiBldmVudEludmVydHNUYWJzVG9MaW5rc0NsaWVudENhbGxSZXN1bHQoZXZl
bnQpID8gIXRhYnNUb0xpbmtzQ2xpZW50Q2FsbFJlc3VsdCA6IHRhYnNUb0xpbmtzQ2xpZW50Q2Fs
bFJlc3VsdDsKIH0KIAotdm9pZCBFdmVudEhhbmRsZXI6OmRlZmF1bHRUZXh0SW5wdXRFdmVudEhh
bmRsZXIoVGV4dEV2ZW50KiBldmVudCkKK3ZvaWQgS2V5Ym9hcmRFdmVudEhhbmRsZXI6OmRlZmF1
bHRUZXh0SW5wdXRFdmVudEhhbmRsZXIoVGV4dEV2ZW50KiBldmVudCkKIHsKICAgICBpZiAobV9m
cmFtZS0+ZWRpdG9yKCktPmhhbmRsZVRleHRFdmVudChldmVudCkpCiAgICAgICAgIGV2ZW50LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOwpAQCAtMjg3Niw3ICsyODg2LDcgQEAKIH0KICNlbHNlCiAKLXZv
aWQgRXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCit2b2lkIEtleWJvYXJkRXZlbnRIYW5kbGVyOjpkZWZhdWx0U3BhY2VFdmVudEhhbmRs
ZXIoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0g
ZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpOwogCkBAIC0yODg0LDcgKzI4OTQsNyBAQAogICAg
ICAgICByZXR1cm47CiAKICAgICBTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGV2
ZW50LT5zaGlmdEtleSgpID8gU2Nyb2xsQmxvY2tEaXJlY3Rpb25CYWNrd2FyZCA6IFNjcm9sbEJs
b2NrRGlyZWN0aW9uRm9yd2FyZDsKLSAgICBpZiAobG9naWNhbFNjcm9sbE92ZXJmbG93KGRpcmVj
dGlvbiwgU2Nyb2xsQnlQYWdlKSkgeworICAgIGlmIChsb2dpY2FsU2Nyb2xsT3ZlcmZsb3coZGly
ZWN0aW9uLCBTY3JvbGxCeVBhZ2UsIG1fZnJhbWUtPmRvY3VtZW50KCktPmZvY3VzZWROb2RlKCkp
KSB7CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMjg5OSw3ICsyOTA5LDcgQEAKIAogI2VuZGlmCiAKLXZvaWQgRXZlbnRIYW5k
bGVyOjpkZWZhdWx0QmFja3NwYWNlRXZlbnRIYW5kbGVyKEtleWJvYXJkRXZlbnQqIGV2ZW50KQor
dm9pZCBLZXlib2FyZEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEJhY2tzcGFjZUV2ZW50SGFuZGxlcihL
ZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5ZG93bkV2ZW50KTsKIApAQCAtMjkyMiw3ICsyOTMyLDcgQEAKIH0KIAogCi12
b2lkIEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEFycm93RXZlbnRIYW5kbGVyKEZvY3VzRGlyZWN0aW9u
IGZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiBldmVudCkKK3ZvaWQgS2V5Ym9hcmRFdmVu
dEhhbmRsZXI6OmRlZmF1bHRBcnJvd0V2ZW50SGFuZGxlcihGb2N1c0RpcmVjdGlvbiBmb2N1c0Rp
cmVjdGlvbiwgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudCk7CiAKQEAgLTI5NDUsNyArMjk1NSw3IEBA
CiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwogfQogCi12b2lkIEV2ZW50SGFu
ZGxlcjo6ZGVmYXVsdFRhYkV2ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50KiBldmVudCkKK3ZvaWQg
S2V5Ym9hcmRFdmVudEhhbmRsZXI6OmRlZmF1bHRUYWJFdmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVu
dCogZXZlbnQpCiB7CiAgICAgQVNTRVJUKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtl
eWRvd25FdmVudCk7CiAKQEAgLTI5NjksNyArMjk3OSw3IEBACiAgICAgICAgIGV2ZW50LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6Y2Fwc0xvY2tTdGF0ZU1h
eUhhdmVDaGFuZ2VkKCkKK3ZvaWQgS2V5Ym9hcmRFdmVudEhhbmRsZXI6OmNhcHNMb2NrU3RhdGVN
YXlIYXZlQ2hhbmdlZCgpCiB7CiAgICAgRG9jdW1lbnQqIGQgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
OwogICAgIGlmIChOb2RlKiBub2RlID0gZC0+Zm9jdXNlZE5vZGUoKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5jcHAJKHJldmlzaW9uIDg0ODgwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsxNTYsNyBAQAogICAgICwgbV9lZGl0b3Io
dGhpcykKICAgICAsIG1fc2VsZWN0aW9uQ29udHJvbGxlcih0aGlzKQogICAgICwgbV9ldmVudEhh
bmRsZXIodGhpcykKKyAgICAsIG1fa2V5Ym9hcmRFdmVudEhhbmRsZXIodGhpcykKICAgICAsIG1f
YW5pbWF0aW9uQ29udHJvbGxlcih0aGlzKQogICAgICwgbV9saWZlU3VwcG9ydFRpbWVyKHRoaXMs
ICZGcmFtZTo6bGlmZVN1cHBvcnRUaW1lckZpcmVkKQogICAgICwgbV9wYWdlWm9vbUZhY3Rvcihw
YXJlbnRQYWdlWm9vbUZhY3Rvcih0aGlzKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0JKHJldmlzaW9uIDg0ODgwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsMjAgKzEz
Nyw2IEBACiAgICAgfQogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6a2V5RXZlbnQoTlNFdmVudCAq
ZXZlbnQpCi17Ci0gICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotCi0gICAgQVNTRVJU
KFtldmVudCB0eXBlXSA9PSBOU0tleURvd24gfHwgW2V2ZW50IHR5cGVdID09IE5TS2V5VXApOwot
Ci0gICAgQ3VycmVudEV2ZW50U2NvcGUgc2NvcGUoZXZlbnQpOwotICAgIHJldHVybiBrZXlFdmVu
dChQbGF0Zm9ybUtleWJvYXJkRXZlbnQoZXZlbnQpKTsKLQotICAgIEVORF9CTE9DS19PQkpDX0VY
Q0VQVElPTlM7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgRXZlbnRIYW5kbGVyOjpm
b2N1c0RvY3VtZW50VmlldygpCiB7CiAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsK
QEAgLTc0MCw3ICs3MjYsNyBAQAogICAgIHJldHVybiBoYW5kbGluZ09wdGlvblRhYjsKIH0KIAot
Ym9vbCBFdmVudEhhbmRsZXI6Om5lZWRzS2V5Ym9hcmRFdmVudERpc2FtYmlndWF0aW9uUXVpcmtz
KCkgY29uc3QKK2Jvb2wgS2V5Ym9hcmRFdmVudEhhbmRsZXI6Om5lZWRzS2V5Ym9hcmRFdmVudERp
c2FtYmlndWF0aW9uUXVpcmtzKCkgY29uc3QKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBt
X2ZyYW1lLT5kb2N1bWVudCgpOwogCkBAIC03NjIsNyArNzQ4LDcgQEAKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXVuc2lnbmVkIEV2ZW50SGFuZGxlcjo6YWNjZXNzS2V5TW9kaWZpZXJzKCkKK3Vu
c2lnbmVkIEtleWJvYXJkRXZlbnRIYW5kbGVyOjphY2Nlc3NLZXlNb2RpZmllcnMoKQogewogICAg
IC8vIENvbnRyb2wrT3B0aW9uIGtleSBjb21iaW5hdGlvbnMgYXJlIHVzdWFsbHkgdW51c2VkIG9u
IE1hYyBPUyBYLCBidXQgbm90IHdoZW4gVm9pY2VPdmVyIGlzIGVuYWJsZWQuCiAgICAgLy8gU28s
IHdlIHVzZSBDb250cm9sIGluIHRoaXMgY2FzZSwgZXZlbiB0aG91Z2ggaXQgY29uZmxpY3RzIHdp
dGggRW1hY3Mtc3R5bGUga2V5IGJpbmRpbmdzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAkocmV2aXNp
b24gODQ4ODApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNiw2ICsxMDYsNyBAQAogCiAgICAgICAgIEVkaXRvciogZWRpdG9yKCkgY29uc3Q7CiAg
ICAgICAgIEV2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyKCkgY29uc3Q7CisgICAgICAgIEtleWJv
YXJkRXZlbnRIYW5kbGVyKiBrZXlib2FyZEV2ZW50SGFuZGxlcigpIGNvbnN0OwogICAgICAgICBG
cmFtZUxvYWRlciogbG9hZGVyKCkgY29uc3Q7CiAgICAgICAgIE5hdmlnYXRpb25TY2hlZHVsZXIq
IG5hdmlnYXRpb25TY2hlZHVsZXIoKSBjb25zdDsKICAgICAgICAgU2VsZWN0aW9uQ29udHJvbGxl
ciogc2VsZWN0aW9uKCkgY29uc3Q7CkBAIC0yMzIsNiArMjMzLDcgQEAKICAgICAgICAgbXV0YWJs
ZSBFZGl0b3IgbV9lZGl0b3I7CiAgICAgICAgIG11dGFibGUgU2VsZWN0aW9uQ29udHJvbGxlciBt
X3NlbGVjdGlvbkNvbnRyb2xsZXI7CiAgICAgICAgIG11dGFibGUgRXZlbnRIYW5kbGVyIG1fZXZl
bnRIYW5kbGVyOworICAgICAgICBtdXRhYmxlIEtleWJvYXJkRXZlbnRIYW5kbGVyIG1fa2V5Ym9h
cmRFdmVudEhhbmRsZXI7CiAgICAgICAgIG11dGFibGUgQW5pbWF0aW9uQ29udHJvbGxlciBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXI7CiAKICAgICAgICAgVGltZXI8RnJhbWU+IG1fbGlmZVN1cHBvcnRU
aW1lcjsKQEAgLTM2OSw2ICszNzEsMTEgQEAKICAgICAgICAgcmV0dXJuICZtX2V2ZW50SGFuZGxl
cjsKICAgICB9CiAKKyAgICBpbmxpbmUgS2V5Ym9hcmRFdmVudEhhbmRsZXIqIEZyYW1lOjprZXli
b2FyZEV2ZW50SGFuZGxlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gJm1fa2V5Ym9h
cmRFdmVudEhhbmRsZXI7CisgICAgfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBGcmFtZV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA4NDg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwNCw4ICsxMDA0LDgg
QEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlwZSgp
ID09IFdlYkV2ZW50OjpDaGFyICYmIGtleWJvYXJkRXZlbnQuaXNTeXN0ZW1LZXkoKSkKLSAgICAg
ICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZUFjY2Vzc0tleShwbGF0Zm9ybShrZXlib2FyZEV2ZW50KSk7
Ci0gICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KHBsYXRmb3JtKGtleWJvYXJkRXZlbnQpKTsKKyAg
ICAgICAgcmV0dXJuIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUo
KS0+a2V5Ym9hcmRFdmVudEhhbmRsZXIoKS0+aGFuZGxlQWNjZXNzS2V5KHBsYXRmb3JtKGtleWJv
YXJkRXZlbnQpKTsKKyAgICByZXR1cm4gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRP
ck1haW5GcmFtZSgpLT5rZXlib2FyZEV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChwbGF0Zm9ybShr
ZXlib2FyZEV2ZW50KSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6a2V5RXZlbnQoY29uc3QgV2ViS2V5
Ym9hcmRFdmVudCYga2V5Ym9hcmRFdmVudCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>