<?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>62451</bug_id>
          
          <creation_ts>2011-06-10 04:57:37 -0700</creation_ts>
          <short_desc>[EFL] Move keyIdentifierForEvasKeyName() and windowsKeyCodeForEvasKeyName() to the EflKeyboardUtilities.cpp to use in the WebKit2</short_desc>
          <delta_ts>2011-11-17 22:14:32 -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>WebKit EFL</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>
          
          <blocked>61993</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Eunmi Lee">enmi.lee</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>antognolli+webkit</cc>
    
    <cc>aroben</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>leandro</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sangseok.lim</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>youngtaeck.song</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>418669</commentid>
    <comment_count>0</comment_count>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-06-10 04:57:37 -0700</bug_when>
    <thetext>I change the keyIdentifierForEvasKeyName and windowsKeyCodeForEvasKeyName function to members of PlatformKeyboardEvent to use in the WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418672</commentid>
    <comment_count>1</comment_count>
      <attachid>96738</attachid>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-06-10 05:16:44 -0700</bug_when>
    <thetext>Created attachment 96738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418691</commentid>
    <comment_count>2</comment_count>
      <attachid>96738</attachid>
    <who name="Lucas De Marchi">lucas.de.marchi</who>
    <bug_when>2011-06-10 06:27:18 -0700</bug_when>
    <thetext>Comment on attachment 96738
Patch

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

&gt; Source/WebCore/platform/PlatformKeyboardEvent.h:214
&gt; +
&gt; +        // Used by WebKit2
&gt; +        static String keyIdentifierForEvasKeyName(String&amp;);
&gt; +        static int windowsKeyCodeForEvasKeyName(String&amp;);

Do we really need this? What if WebKit2 is not used? I know GTK is using a similar approach to this, but maybe there&apos;s a better approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419390</commentid>
    <comment_count>3</comment_count>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-06-12 19:27:49 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 96738 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96738&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/PlatformKeyboardEvent.h:214
&gt; &gt; +
&gt; &gt; +        // Used by WebKit2
&gt; &gt; +        static String keyIdentifierForEvasKeyName(String&amp;);
&gt; &gt; +        static int windowsKeyCodeForEvasKeyName(String&amp;);
&gt; 
&gt; Do we really need this? What if WebKit2 is not used? I know GTK is using a similar approach to this, but maybe there&apos;s a better approach?

Yes, I really need this because we have to copy all codes for KeyMap (createKeyMap(), createWindowKeyMap()) to the WebKit2 efl port without this.
And I think that this code will not raise any problem without WebKit2.
About a better approach,
I think it is better to unite WebKit1&apos;s PlatformKeyboardEvent and WebKit2&apos;s NativeWebKeyboardEvent but it is hard to me because that will cause modifications of all ports&apos;s KeyboardEvent.
I will be grateful if you share your idea about that :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420175</commentid>
    <comment_count>4</comment_count>
    <who name="Lucas De Marchi">lucas.de.marchi</who>
    <bug_when>2011-06-13 20:12:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 96738 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96738&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/PlatformKeyboardEvent.h:214
&gt; &gt; &gt; +
&gt; &gt; &gt; +        // Used by WebKit2
&gt; &gt; &gt; +        static String keyIdentifierForEvasKeyName(String&amp;);
&gt; &gt; &gt; +        static int windowsKeyCodeForEvasKeyName(String&amp;);
&gt; &gt; 
&gt; &gt; Do we really need this? What if WebKit2 is not used? I know GTK is using a similar approach to this, but maybe there&apos;s a better approach?
&gt; 
&gt; Yes, I really need this because we have to copy all codes for KeyMap (createKeyMap(), createWindowKeyMap()) to the WebKit2 efl port without this.
&gt; And I think that this code will not raise any problem without WebKit2.
&gt; About a better approach,
&gt; I think it is better to unite WebKit1&apos;s PlatformKeyboardEvent and WebKit2&apos;s NativeWebKeyboardEvent but it is hard to me because that will cause modifications of all ports&apos;s KeyboardEvent.
&gt; I will be grateful if you share your idea about that :)

I certainly think it&apos;s better to share code among all ports, even if it&apos;s more difficult to do. However I don&apos;t know this piece of code sufficiently to tell you what to do. I&apos;m CC&apos;ing people who know more than me on this area.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420355</commentid>
    <comment_count>5</comment_count>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-06-14 06:02:26 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 96738 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96738&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/platform/PlatformKeyboardEvent.h:214
&gt; &gt; &gt; &gt; +
&gt; &gt; &gt; &gt; +        // Used by WebKit2
&gt; &gt; &gt; &gt; +        static String keyIdentifierForEvasKeyName(String&amp;);
&gt; &gt; &gt; &gt; +        static int windowsKeyCodeForEvasKeyName(String&amp;);
&gt; &gt; &gt; 
&gt; &gt; &gt; Do we really need this? What if WebKit2 is not used? I know GTK is using a similar approach to this, but maybe there&apos;s a better approach?
&gt; &gt; 
&gt; &gt; Yes, I really need this because we have to copy all codes for KeyMap (createKeyMap(), createWindowKeyMap()) to the WebKit2 efl port without this.
&gt; &gt; And I think that this code will not raise any problem without WebKit2.
&gt; &gt; About a better approach,
&gt; &gt; I think it is better to unite WebKit1&apos;s PlatformKeyboardEvent and WebKit2&apos;s NativeWebKeyboardEvent but it is hard to me because that will cause modifications of all ports&apos;s KeyboardEvent.
&gt; &gt; I will be grateful if you share your idea about that :)
&gt; 
&gt; I certainly think it&apos;s better to share code among all ports, even if it&apos;s more difficult to do. However I don&apos;t know this piece of code sufficiently to tell you what to do. I&apos;m CC&apos;ing people who know more than me on this area.

The WebCore/platform/PlatformKeyboardEvent and WebKit2/Shared/WebKeyboardEvent looks very similar. but WebKeyboardEvent has the encode and decode function to transmit to the WebProcess.
I think it is hard to unify those two classes.
So, I have another idea about that
=&gt; adding the function which creats WebKeyboardEvent from PlatformKeyboardEvent.
If that exists, I can create PlatformKeyboardEvent firstly (using PlatformKeyboardEventEfl) and then convert it to the WebKeyboardEvent.
in this case, we do not have to open PlatformKeyboardEvent&apos;s static functions for KeyMap.
How do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421888</commentid>
    <comment_count>6</comment_count>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-06-16 03:07:35 -0700</bug_when>
    <thetext>Hello Weining,
I found your name in the WebKit2/Shared/WebEventConversion.cpp changelog.
and I add you because I think you are the expert of WebEvent.
I have a problem to implement NativeWebKeyboardEventEfl, because I have to do same thing in the PlatformKeyboardEventEfl.
So, I imagine that convert EFL&apos;s native event to PlatformEvent firstly, and then convert PlatformEvent to WebEvent.
Is that a right approach?
Would you give me an advice about that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423630</commentid>
    <comment_count>7</comment_count>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-06-20 06:11:45 -0700</bug_when>
    <thetext>I&apos;ve tried to convert PlatformKeyboardEvent to WebKeyboardEvent,
but there are some problems.
m_macCharCode and m_timestamp do not exist in the PlatformKeyboardEvent, so I have to add those variables to the PlatformKeyboardEvent in order to convert to WebKeyboardEvent.
I think it is not a good idea.
So, I think this patch (open keyIdentifierForEvasKeyName and windowsKeyCodeForEvasKeyName) is better than convert PlatformKeyboardEvent to WebKeyboardEvent.

Dear Lucas and Weining,
Would you review current patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505424</commentid>
    <comment_count>8</comment_count>
      <attachid>115725</attachid>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-11-17 18:52:03 -0800</bug_when>
    <thetext>Created attachment 115725
EflKeyboardUtilities patch.

I moved keyIdentifierForEvasKeyName() and windowsKeyCodeForEvasKeyName() to the separated file - EflKeyboardUtilities.cpp in order to use for WebKit2 EFL&apos;s WebKeyboardEvent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505426</commentid>
    <comment_count>9</comment_count>
      <attachid>115725</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-17 18:58:39 -0800</bug_when>
    <thetext>Comment on attachment 115725
EflKeyboardUtilities patch.

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

Seems fine overall, but I have a few style nits.

&gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:33
&gt; +#include &quot;WindowsKeyboardCodes.h&quot;
&gt; +
&gt; +#include &lt;wtf/HashMap.h&gt;

No need for a newline here.

&gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:44
&gt; +static KeyMap gKeyMap;
&gt; +static WindowsKeyMap gWindowsKeyMap;
&gt; +

Static initializers inrease startup time and can lead to tricky errors. It&apos;s probably better to remove them. For an example see here: http://trac.webkit.org/changeset/100070

&gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:80
&gt; +    gWindowsKeyMap.set(&quot;Return&quot;,     VK_RETURN);
&gt; +    gWindowsKeyMap.set(&quot;KP_Return&quot;,  VK_RETURN);
&gt; +    gWindowsKeyMap.set(&quot;Alt_L&quot;,      VK_MENU);
&gt; +    gWindowsKeyMap.set(&quot;ISO_Level3_Shift&quot;, VK_MENU);
&gt; +    gWindowsKeyMap.set(&quot;Menu&quot;,       VK_MENU);
&gt; +    gWindowsKeyMap.set(&quot;Shift_L&quot;,    VK_SHIFT);

This kind of alignment is a violation of WebKit style rules.

&gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:125
&gt; +    // Alphabet

Comments should be full sentences with a period at the end.

&gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:132
&gt; +    // Digits

Ditto.

&gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:138
&gt; +    // Shifted digits

Ditto.

&gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:154
&gt; +    // F_XX

Ditto.

&gt; Source/WebCore/platform/efl/PlatformKeyboardEventEfl.cpp:34
&gt;  #include &quot;PlatformKeyboardEvent.h&quot;
&gt;  

No newlines necessary here.

&gt; Source/WebCore/platform/efl/PlatformKeyboardEventEfl.cpp:39
&gt;  #include &quot;TextEncoding.h&quot;
&gt; -#include &quot;WindowsKeyboardCodes.h&quot;
&gt;  
&gt;  #include &lt;Evas.h&gt;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505462</commentid>
    <comment_count>10</comment_count>
      <attachid>115732</attachid>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-11-17 21:08:30 -0800</bug_when>
    <thetext>Created attachment 115732
EflKeyboardUtilities patch.

Modified for Martin&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505464</commentid>
    <comment_count>11</comment_count>
    <who name="Eunmi Lee">enmi.lee</who>
    <bug_when>2011-11-17 21:14:55 -0800</bug_when>
    <thetext>I&apos;m very grateful for your kind review!

(In reply to comment #9)
&gt; (From update of attachment 115725 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115725&amp;action=review
&gt; 
&gt; Seems fine overall, but I have a few style nits.
&gt; 
&gt; &gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:33
&gt; &gt; +#include &quot;WindowsKeyboardCodes.h&quot;
&gt; &gt; +
&gt; &gt; +#include &lt;wtf/HashMap.h&gt;
&gt; 
&gt; No need for a newline here.
I removed newline.
&gt; 
&gt; &gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:44
&gt; &gt; +static KeyMap gKeyMap;
&gt; &gt; +static WindowsKeyMap gWindowsKeyMap;
&gt; &gt; +
&gt; 
&gt; Static initializers inrease startup time and can lead to tricky errors. It&apos;s probably better to remove them. For an example see here: http://trac.webkit.org/changeset/100070
I replaced global static variables with local ones as an example that you mentioned. Thanks for your kind guidance.

&gt; 
&gt; &gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:80
&gt; &gt; +    gWindowsKeyMap.set(&quot;Return&quot;,     VK_RETURN);
&gt; &gt; +    gWindowsKeyMap.set(&quot;KP_Return&quot;,  VK_RETURN);
&gt; &gt; +    gWindowsKeyMap.set(&quot;Alt_L&quot;,      VK_MENU);
&gt; &gt; +    gWindowsKeyMap.set(&quot;ISO_Level3_Shift&quot;, VK_MENU);
&gt; &gt; +    gWindowsKeyMap.set(&quot;Menu&quot;,       VK_MENU);
&gt; &gt; +    gWindowsKeyMap.set(&quot;Shift_L&quot;,    VK_SHIFT);
&gt; 
&gt; This kind of alignment is a violation of WebKit style rules.
&gt; 
&gt; &gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:125
&gt; &gt; +    // Alphabet
&gt; 
&gt; Comments should be full sentences with a period at the end.
&gt; 
&gt; &gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:132
&gt; &gt; +    // Digits
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:138
&gt; &gt; +    // Shifted digits
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/efl/EflKeyboardUtilities.cpp:154
&gt; &gt; +    // F_XX
&gt; 
&gt; Ditto.
&gt; 
I replaced all comments with full sentences.

&gt; &gt; Source/WebCore/platform/efl/PlatformKeyboardEventEfl.cpp:34
&gt; &gt;  #include &quot;PlatformKeyboardEvent.h&quot;
&gt; &gt;  
&gt; 
&gt; No newlines necessary here.
&gt; 
&gt; &gt; Source/WebCore/platform/efl/PlatformKeyboardEventEfl.cpp:39
&gt; &gt;  #include &quot;TextEncoding.h&quot;
&gt; &gt; -#include &quot;WindowsKeyboardCodes.h&quot;
&gt; &gt;  
&gt; &gt;  #include &lt;Evas.h&gt;
&gt; 
&gt; Ditto.
newlines are removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505504</commentid>
    <comment_count>12</comment_count>
      <attachid>115732</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-17 22:14:26 -0800</bug_when>
    <thetext>Comment on attachment 115732
EflKeyboardUtilities patch.

Clearing flags on attachment: 115732

Committed r100726: &lt;http://trac.webkit.org/changeset/100726&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505505</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-17 22:14:32 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96738</attachid>
            <date>2011-06-10 05:16:44 -0700</date>
            <delta_ts>2011-11-17 18:52:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62451-20110610211642.patch</filename>
            <type>text/plain</type>
            <size>3787</size>
            <attacher name="Eunmi Lee">enmi.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg1MjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3YzhmNjFjZjEzMjQwNmY1
NDg0MzNiNWZjYmMyYjYyNTU3MDM3OTZmLi4wMTMwMTNmYzFhZmYyNjMxMTJjOThlYWQxNWFiYTlh
ZDUwMzBmODkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDYtMTAgIEV1bm1p
IExlZSAgPGV1bm1pMTUubGVlQHNhbXN1bmcuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtFRkxdIG9wZW4ga2V5SWRlbnRpZmllckZvckV2YXNL
ZXlOYW1lIGFuZCB3aW5kb3dzS2V5Q29kZUZvckV2YXNLZXlOYW1lIHRvIHVzZSBpbiB0aGUgV2Vi
S2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI0
NTEKKworICAgICAgICBDaGFuZ2Uga2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKCkgYW5kIHdp
bmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoKQorICAgICAgICB0byBtZW1iZXJzIG9mIFBsYXRm
b3JtS2V5Ym9hcmRFdmVudCBpbiBvcmRlciB0byB1c2UgaW4gdGhlIFdlYktpdDIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9lZmwvUGxhdGZvcm1LZXlib2FyZEV2ZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtS2V5Ym9hcmRFdmVudDo6a2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNvZGVGb3JFdmFz
S2V5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRm
b3JtS2V5Ym9hcmRFdmVudCk6CisKIDIwMTEtMDYtMDkgIEh5b3dvbiBLaW0gIDxodzEwMDgua2lt
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCmluZGV4IGFj
M2FmMzY1ZjAwZTJlOWE5MGQxMWU0NjBmOGMxYmQwYjI3MGFlNDEuLjQ2Zjc4OGE3MzQ2NmZhZTI5
N2ZhODBjNjUyYTNjOGMwNDk5MjRiOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCkBAIC0yMDgsNiArMjA4LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICNpZiBQTEFURk9STShFRkwpCiAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dChjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKik7CiAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRF
dmVudChjb25zdCBFdmFzX0V2ZW50X0tleV9VcCopOworCisgICAgICAgIC8vIFVzZWQgYnkgV2Vi
S2l0MgorICAgICAgICBzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JFdmFzS2V5TmFtZShT
dHJpbmcmKTsKKyAgICAgICAgc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvckV2YXNLZXlOYW1l
KFN0cmluZyYpOwogI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1LZXlib2FyZEV2ZW50RWZsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwCmluZGV4
IDg5NmFhMDJhOTVhNWY3ZjViM2FkYzkzYzc3MGY3Y2U3ZDJjNjRjYzQuLmY2ODZiZTM3YmYzYzU5
YjgzZTVkYzg2MmU1NGZlNzVhMWM4Y2EwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwCkBAIC0xNjYsNyAr
MTY2LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlV2luZG93c0tleU1hcCgpCiAgICAgfQogfQogCi1z
dGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JFdmFzS2V5TmFtZShTdHJpbmcmIGtleU5hbWUp
CitTdHJpbmcgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yRXZhc0tleU5h
bWUoU3RyaW5nJiBrZXlOYW1lKQogewogICAgIGlmIChnS2V5TWFwLmlzRW1wdHkoKSkKICAgICAg
ICAgY3JlYXRlS2V5TWFwKCk7CkBAIC0xNzcsNyArMTc3LDcgQEAgc3RhdGljIFN0cmluZyBrZXlJ
ZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoU3RyaW5nJiBrZXlOYW1lKQogICAgIHJldHVybiBrZXlO
YW1lOwogfQogCi1zdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoU3RyaW5n
JiBrZXlOYW1lKQoraW50IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6d2luZG93c0tleUNvZGVGb3JF
dmFzS2V5TmFtZShTdHJpbmcmIGtleU5hbWUpCiB7CiAgICAgaWYgKGdXaW5kb3dzS2V5TWFwLmlz
RW1wdHkoKSkKICAgICAgICAgY3JlYXRlV2luZG93c0tleU1hcCgpOwpAQCAtMTk3LDggKzE5Nyw4
IEBAIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KGNvbnN0IEV2
YXNfRXZlbnRfS2V5X0Rvd24qIGV2ZW50KQogICAgICwgbV9tZXRhS2V5KGV2YXNfa2V5X21vZGlm
aWVyX2lzX3NldChldmVudC0+bW9kaWZpZXJzLCAiTWV0YSIpKQogewogICAgIFN0cmluZyBrZXlO
YW1lID0gU3RyaW5nKGV2ZW50LT5rZXkpOwotICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50
aWZpZXJGb3JFdmFzS2V5TmFtZShrZXlOYW1lKTsKLSAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29k
ZSA9IHdpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoa2V5TmFtZSk7CisgICAgbV9rZXlJZGVu
dGlmaWVyID0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yRXZhc0tleU5h
bWUoa2V5TmFtZSk7CisgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OndpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoa2V5TmFtZSk7CiAKICAgICAv
LyBGSVhNRToKICAgICBtX2lzS2V5cGFkID0gZmFsc2U7CkBAIC0yMTQsOCArMjE0LDggQEAgUGxh
dGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoY29uc3QgRXZhc19FdmVu
dF9LZXlfVXAqIGV2ZW50KQogICAgICwgbV9tZXRhS2V5KGV2YXNfa2V5X21vZGlmaWVyX2lzX3Nl
dChldmVudC0+bW9kaWZpZXJzLCAiTWV0YSIpKQogewogICAgIFN0cmluZyBrZXlOYW1lID0gU3Ry
aW5nKGV2ZW50LT5rZXkpOwotICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JF
dmFzS2V5TmFtZShrZXlOYW1lKTsKLSAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRv
d3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoa2V5TmFtZSk7CisgICAgbV9rZXlJZGVudGlmaWVyID0g
UGxhdGZvcm1LZXlib2FyZEV2ZW50OjprZXlJZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoa2V5TmFt
ZSk7CisgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OndpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoa2V5TmFtZSk7CiAKICAgICAvLyBGSVhNRToK
ICAgICBtX2lzS2V5cGFkID0gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115725</attachid>
            <date>2011-11-17 18:52:03 -0800</date>
            <delta_ts>2011-11-17 21:08:30 -0800</delta_ts>
            <desc>EflKeyboardUtilities patch.</desc>
            <filename>EflKeyboardUtilities.patch</filename>
            <type>text/plain</type>
            <size>16692</size>
            <attacher name="Eunmi Lee">enmi.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjODk1ZTNhLi5jMzUyODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTEtMTEtMTcgIEV1bm1pIExlZSAgPGV1bm1pMTUubGVlQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtFRkxdIE1vdmUga2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKCkgYW5kIHdpbmRv
d3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoKSB0byB0aGUKKyAgICAgICAgRWZsS2V5Ym9hcmRVdGls
aXRpZXMuY3BwIHRvIHVzZSBpbiB0aGUgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI0NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUga2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKCkg
YW5kIHdpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoKSB3ZXJlIHN0YXRpYyBmdW5jdGlvbnMK
KyAgICAgICAgaW4gdGhlIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEVmbC5jcHAuIEJ1dCB0aGV5IGFy
ZSBhbHNvIG5lZWRlZCBpbiB0aGUgV2ViS2l0MiBFRkwgcG9ydCwgc28gSQorICAgICAgICBtb3Zl
ZCB0aGVtIHRvIHRoZSBzZXBhcmF0ZWQgZmlsZSAtIEVmbEtleWJvYXJkVXRpbGl0aWVzLmNwcC4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9F
ZmxLZXlib2FyZFV0aWxpdGllcy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlS2V5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVdpbmRvd3NLZXlNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6a2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OndpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2VmbC9FZmxLZXlib2FyZFV0aWxpdGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9lZmwvUGxhdGZvcm1LZXlib2FyZEV2ZW50RWZsLmNwcDoKKwogMjAxMS0xMS0xNiAgQWRhbSBC
ZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CiAKICAgICAgICAgVXNlIGEg
c2ltcGxlIHBhZ2UgY2xpZW50IGZvciB1c2VyIGNvbnNlbnQgaW4gZ2V0VXNlck1lZGlhKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNjY1YWQ2Mi4uNjM1MjJmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTI3LDYgKzI3LDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgIHBsYXRmb3JtL2VmbC9DdXJzb3JFZmwuY3BwCiAgIHBsYXRmb3JtL2VmbC9EcmFnRGF0
YUVmbC5jcHAKICAgcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAKKyAgcGxhdGZvcm0vZWZs
L0VmbEtleWJvYXJkVXRpbGl0aWVzLmNwcAogICBwbGF0Zm9ybS9lZmwvRXZlbnRMb29wRWZsLmNw
cAogICBwbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAKICAgcGxhdGZvcm0vZWZsL0tVUkxF
ZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRWZsS2V5Ym9h
cmRVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0VmbEtleWJvYXJk
VXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzU5MzBi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0VmbEtleWJv
YXJkVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWZsS2V5Ym9hcmRVdGlsaXRpZXMu
aCIKKworI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+IEtleU1hcDsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIGlu
dD4gV2luZG93c0tleU1hcDsKKworc3RhdGljIEtleU1hcCBnS2V5TWFwOworc3RhdGljIFdpbmRv
d3NLZXlNYXAgZ1dpbmRvd3NLZXlNYXA7CisKK3N0YXRpYyB2b2lkIGNyZWF0ZUtleU1hcCgpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCAyNTsgaSsrKSB7CisgICAgICAgIFN0
cmluZyBrZXkgPSAiRiIgKyBTdHJpbmc6Om51bWJlcihpKTsKKyAgICAgICAgZ0tleU1hcC5zZXQo
a2V5LCBrZXkpOworICAgIH0KKyAgICBnS2V5TWFwLnNldCgiQWx0X0wiLCAiQWx0Iik7CisgICAg
Z0tleU1hcC5zZXQoIklTT19MZXZlbDNfU2hpZnQiLCAiQWx0Iik7CisgICAgZ0tleU1hcC5zZXQo
Ik1lbnUiLCAiQWx0Iik7CisgICAgZ0tleU1hcC5zZXQoIlNoaWZ0X0wiLCAiU2hpZnQiKTsKKyAg
ICBnS2V5TWFwLnNldCgiU2hpZnRfUiIsICJTaGlmdCIpOworICAgIGdLZXlNYXAuc2V0KCJEb3du
IiwgIkRvd24iKTsKKyAgICBnS2V5TWFwLnNldCgiRW5kIiwgIkVuZCIpOworICAgIGdLZXlNYXAu
c2V0KCJSZXR1cm4iLCAiRW50ZXIiKTsKKyAgICBnS2V5TWFwLnNldCgiS1BfRW50ZXIiLCAiRW50
ZXIiKTsKKyAgICBnS2V5TWFwLnNldCgiSG9tZSIsICJIb21lIik7CisgICAgZ0tleU1hcC5zZXQo
Ikluc2VydCIsICJJbnNlcnQiKTsKKyAgICBnS2V5TWFwLnNldCgiTGVmdCIsICJMZWZ0Iik7Cisg
ICAgZ0tleU1hcC5zZXQoIkRvd24iLCAiRG93biIpOworICAgIGdLZXlNYXAuc2V0KCJOZXh0Iiwg
IlBhZ2VEb3duIik7CisgICAgZ0tleU1hcC5zZXQoIlByaW9yIiwgIlBhZ2VVcCIpOworICAgIGdL
ZXlNYXAuc2V0KCJSaWdodCIsICJSaWdodCIpOworICAgIGdLZXlNYXAuc2V0KCJVcCIsICJVcCIp
OworICAgIGdLZXlNYXAuc2V0KCJEZWxldGUiLCAiVSswMDdGIik7CisgICAgZ0tleU1hcC5zZXQo
IlRhYiIsICJVKzAwMDkiKTsKKyAgICBnS2V5TWFwLnNldCgiSVNPX0xlZnRfVGFiIiwgIlUrMDAw
OSIpOworfQorCitzdGF0aWMgdm9pZCBjcmVhdGVXaW5kb3dzS2V5TWFwKCkKK3sKKyAgICBnV2lu
ZG93c0tleU1hcC5zZXQoIlJldHVybiIsICAgICBWS19SRVRVUk4pOworICAgIGdXaW5kb3dzS2V5
TWFwLnNldCgiS1BfUmV0dXJuIiwgIFZLX1JFVFVSTik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0
KCJBbHRfTCIsICAgICAgVktfTUVOVSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJJU09fTGV2
ZWwzX1NoaWZ0IiwgVktfTUVOVSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJNZW51IiwgICAg
ICAgVktfTUVOVSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJTaGlmdF9MIiwgICAgVktfU0hJ
RlQpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU2hpZnRfUiIsICAgIFZLX1NISUZUKTsKKyAg
ICBnV2luZG93c0tleU1hcC5zZXQoIkNvbnRyb2xfTCIsICBWS19DT05UUk9MKTsKKyAgICBnV2lu
ZG93c0tleU1hcC5zZXQoIkNvbnRyb2xfUiIsICBWS19DT05UUk9MKTsKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoIlBhdXNlIiwgICAgICBWS19QQVVTRSk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0
KCJCcmVhayIsICAgICAgVktfUEFVU0UpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiQ2Fwc19M
b2NrIiwgIFZLX0NBUElUQUwpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU2Nyb2xsX0xvY2si
LCBWS19TQ1JPTEwpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTnVtX0xvY2siLCAgIFZLX05V
TUxPQ0spOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiRXNjYXBlIiwgICAgIFZLX0VTQ0FQRSk7
CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJUYWIiLCAgICAgICAgVktfVEFCKTsKKyAgICBnV2lu
ZG93c0tleU1hcC5zZXQoIklTT19MZWZ0X1RhYiIsIFZLX1RBQik7CisgICAgZ1dpbmRvd3NLZXlN
YXAuc2V0KCJCYWNrU3BhY2UiLCAgVktfQkFDSyk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJT
cGFjZSIsICAgICAgVktfU1BBQ0UpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTmV4dCIsICAg
ICAgIFZLX05FWFQpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiUHJpb3IiLCAgICAgIFZLX1BS
SU9SKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIkhvbWUiLCAgICAgICBWS19IT01FKTsKKyAg
ICBnV2luZG93c0tleU1hcC5zZXQoIkVuZCIsICAgICAgICBWS19FTkQpOworICAgIGdXaW5kb3dz
S2V5TWFwLnNldCgiUmlnaHQiLCAgICAgIFZLX1JJR0hUKTsKKyAgICBnV2luZG93c0tleU1hcC5z
ZXQoIkxlZnQiLCAgICAgICBWS19MRUZUKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoIlVwIiwg
ICAgICAgICBWS19VUCk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJEb3duIiwgICAgICAgVktf
RE9XTik7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJQcmludCIsICAgICAgVktfUFJJTlQpOwor
ICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiSW5zZXJ0IiwgICAgIFZLX0lOU0VSVCk7CisgICAgZ1dp
bmRvd3NLZXlNYXAuc2V0KCJEZWxldGUiLCAgICAgVktfREVMRVRFKTsKKworICAgIGdXaW5kb3dz
S2V5TWFwLnNldCgiY29tbWEiLCAgICAgICAgVktfT0VNX0NPTU1BKTsKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoImxlc3MiLCAgICAgICAgIFZLX09FTV9DT01NQSk7CisgICAgZ1dpbmRvd3NLZXlN
YXAuc2V0KCJwZXJpb2QiLCAgICAgICBWS19PRU1fUEVSSU9EKTsKKyAgICBnV2luZG93c0tleU1h
cC5zZXQoImdyZWF0ZXIiLCAgICAgIFZLX09FTV9QRVJJT0QpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgic2VtaWNvbG9uIiwgICAgVktfT0VNXzEpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
Y29sb24iLCAgICAgICAgVktfT0VNXzEpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgic2xhc2gi
LCAgICAgICAgVktfT0VNXzIpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicXVlc3Rpb24iLCAg
ICAgVktfT0VNXzIpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiZ3JhdmUiLCAgICAgICAgVktf
T0VNXzMpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYXNjaWl0aWxkZSIsICAgVktfT0VNXzMp
OworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYnJhY2tldGxlZnQiLCAgVktfT0VNXzQpOworICAg
IGdXaW5kb3dzS2V5TWFwLnNldCgiYnJhY2VsZWZ0IiwgICAgVktfT0VNXzQpOworICAgIGdXaW5k
b3dzS2V5TWFwLnNldCgiYmFja3NsYXNoIiwgICAgVktfT0VNXzUpOworICAgIGdXaW5kb3dzS2V5
TWFwLnNldCgiYmFyIiwgICAgICAgICAgVktfT0VNXzUpOworICAgIGdXaW5kb3dzS2V5TWFwLnNl
dCgiYnJhY2tldHJpZ2h0IiwgVktfT0VNXzYpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYnJh
Y2VyaWdodCIsICAgVktfT0VNXzYpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYXBvc3Ryb3Bo
ZSIsICAgVktfT0VNXzcpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicXVvdGVkYmwiLCAgICAg
VktfT0VNXzcpOworCisgICAgLy8gQWxwaGFiZXQKKyAgICBjb25zdCBjaGFyKiBhbHBoYWJldCA9
ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCAyNjsgaSsrKSB7CisgICAgICAgIFN0cmluZyBrZXkoYWxwaGFiZXQgKyBpLCAxKTsK
KyAgICAgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KGtleSwgVktfQSArIGkpOworICAgIH0KKworICAg
IC8vIERpZ2l0cworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewor
ICAgICAgICBTdHJpbmcga2V5ID0gU3RyaW5nOjpudW1iZXIoaSk7CisgICAgICAgIGdXaW5kb3dz
S2V5TWFwLnNldChrZXksIFZLXzAgKyBpKTsKKyAgICB9CisKKyAgICAvLyBTaGlmdGVkIGRpZ2l0
cworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiZXhjbGFtIiwgICAgVktfMSk7CisgICAgZ1dpbmRv
d3NLZXlNYXAuc2V0KCJhdCIsICAgICAgICBWS18yKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQo
Im51bWJlcnNpZ24iLCBWS18zKTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoImRvbGxhciIsICAg
IFZLXzQpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicGVyY2VudCIsICAgVktfNSk7CisgICAg
Z1dpbmRvd3NLZXlNYXAuc2V0KCJhc2NpaWNpcmN1bSIsIFZLXzYpOworICAgIGdXaW5kb3dzS2V5
TWFwLnNldCgiYW1wZXJzYW5kIiwgVktfNyk7CisgICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJhc3Rl
cmlzayIsICBWS184KTsKKyAgICBnV2luZG93c0tleU1hcC5zZXQoInBhcmVubGVmdCIsIFZLXzkp
OworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicGFyZW5yaWdodCIsIFZLXzApOworICAgIGdXaW5k
b3dzS2V5TWFwLnNldCgibWludXMiLCAgICAgVktfT0VNX01JTlVTKTsKKyAgICBnV2luZG93c0tl
eU1hcC5zZXQoInVuZGVyc2NvcmUiLCBWS19PRU1fTUlOVVMpOworICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiZXF1YWwiLCAgICAgVktfT0VNX1BMVVMpOworICAgIGdXaW5kb3dzS2V5TWFwLnNldCgi
cGx1cyIsICAgICAgVktfT0VNX1BMVVMpOworCisgICAgLy8gRl9YWAorICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAxOyBpIDwgMjU7IGkrKykgeworICAgICAgICBTdHJpbmcga2V5ID0gIkYiICsg
U3RyaW5nOjpudW1iZXIoaSk7CisgICAgICAgIGdXaW5kb3dzS2V5TWFwLnNldChrZXksIFZLX0Yx
ICsgaSk7CisgICAgfQorfQorCitTdHJpbmcga2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKFN0
cmluZyYga2V5TmFtZSkKK3sKKyAgICBpZiAoZ0tleU1hcC5pc0VtcHR5KCkpCisgICAgICAgIGNy
ZWF0ZUtleU1hcCgpOworCisgICAgaWYgKGdLZXlNYXAuY29udGFpbnMoa2V5TmFtZSkpCisgICAg
ICAgIHJldHVybiBnS2V5TWFwLmdldChrZXlOYW1lKTsKKworICAgIHJldHVybiBrZXlOYW1lOwor
fQorCitpbnQgd2luZG93c0tleUNvZGVGb3JFdmFzS2V5TmFtZShTdHJpbmcmIGtleU5hbWUpCit7
CisgICAgaWYgKGdXaW5kb3dzS2V5TWFwLmlzRW1wdHkoKSkKKyAgICAgICAgY3JlYXRlV2luZG93
c0tleU1hcCgpOworCisgICAgaWYgKGdXaW5kb3dzS2V5TWFwLmNvbnRhaW5zKGtleU5hbWUpKQor
ICAgICAgICByZXR1cm4gZ1dpbmRvd3NLZXlNYXAuZ2V0KGtleU5hbWUpOworCisgICAgcmV0dXJu
IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9FZmxLZXlib2FyZFV0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZWZsL0VmbEtleWJvYXJkVXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDc5MTcwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9FZmxLZXlib2FyZFV0aWxpdGllcy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFZmxLZXlib2FyZFV0aWxpdGllc19oCisj
ZGVmaW5lIEVmbEtleWJvYXJkVXRpbGl0aWVzX2gKKworbmFtZXNwYWNlIFdURiB7CitjbGFzcyBT
dHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGOjpTdHJpbmcga2V5SWRlbnRp
ZmllckZvckV2YXNLZXlOYW1lKFdURjo6U3RyaW5nJik7CitpbnQgd2luZG93c0tleUNvZGVGb3JF
dmFzS2V5TmFtZShXVEY6OlN0cmluZyYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFZmxLZXlib2FyZFV0aWxpdGllc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvUGxhdGZvcm1LZXlib2FyZEV2ZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwCmluZGV4IGM2YWMz
ZTIuLjg0NDY2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0
Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwCkBAIC0zMiwxNjIgKzMyLDE1IEBACiAKICNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAorI2luY2x1ZGUgIkVmbEtleWJvYXJk
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgogCiAjaW5jbHVk
ZSA8RXZhcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBLZXlNYXA7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IFdpbmRvd3NL
ZXlNYXA7Ci0KLXN0YXRpYyBLZXlNYXAgZ0tleU1hcDsKLXN0YXRpYyBXaW5kb3dzS2V5TWFwIGdX
aW5kb3dzS2V5TWFwOwotCi1zdGF0aWMgdm9pZCBjcmVhdGVLZXlNYXAoKQotewotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDwgMjU7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5ID0g
IkYiICsgU3RyaW5nOjpudW1iZXIoaSk7Ci0gICAgICAgIGdLZXlNYXAuc2V0KGtleSwga2V5KTsK
LSAgICB9Ci0gICAgZ0tleU1hcC5zZXQoIkFsdF9MIiwgIkFsdCIpOwotICAgIGdLZXlNYXAuc2V0
KCJJU09fTGV2ZWwzX1NoaWZ0IiwgIkFsdCIpOwotICAgIGdLZXlNYXAuc2V0KCJNZW51IiwgIkFs
dCIpOwotICAgIGdLZXlNYXAuc2V0KCJTaGlmdF9MIiwgIlNoaWZ0Iik7Ci0gICAgZ0tleU1hcC5z
ZXQoIlNoaWZ0X1IiLCAiU2hpZnQiKTsKLSAgICBnS2V5TWFwLnNldCgiRG93biIsICJEb3duIik7
Ci0gICAgZ0tleU1hcC5zZXQoIkVuZCIsICJFbmQiKTsKLSAgICBnS2V5TWFwLnNldCgiUmV0dXJu
IiwgIkVudGVyIik7Ci0gICAgZ0tleU1hcC5zZXQoIktQX0VudGVyIiwgIkVudGVyIik7Ci0gICAg
Z0tleU1hcC5zZXQoIkhvbWUiLCAiSG9tZSIpOwotICAgIGdLZXlNYXAuc2V0KCJJbnNlcnQiLCAi
SW5zZXJ0Iik7Ci0gICAgZ0tleU1hcC5zZXQoIkxlZnQiLCAiTGVmdCIpOwotICAgIGdLZXlNYXAu
c2V0KCJEb3duIiwgIkRvd24iKTsKLSAgICBnS2V5TWFwLnNldCgiTmV4dCIsICJQYWdlRG93biIp
OwotICAgIGdLZXlNYXAuc2V0KCJQcmlvciIsICJQYWdlVXAiKTsKLSAgICBnS2V5TWFwLnNldCgi
UmlnaHQiLCAiUmlnaHQiKTsKLSAgICBnS2V5TWFwLnNldCgiVXAiLCAiVXAiKTsKLSAgICBnS2V5
TWFwLnNldCgiRGVsZXRlIiwgIlUrMDA3RiIpOwotICAgIGdLZXlNYXAuc2V0KCJUYWIiLCAiVSsw
MDA5Iik7Ci0gICAgZ0tleU1hcC5zZXQoIklTT19MZWZ0X1RhYiIsICJVKzAwMDkiKTsKLX0KLQot
c3RhdGljIHZvaWQgY3JlYXRlV2luZG93c0tleU1hcCgpCi17Ci0gICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJSZXR1cm4iLCAgICAgVktfUkVUVVJOKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIktQ
X1JldHVybiIsICBWS19SRVRVUk4pOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiQWx0X0wiLCAg
ICAgIFZLX01FTlUpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiSVNPX0xldmVsM19TaGlmdCIs
IFZLX01FTlUpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTWVudSIsICAgICAgIFZLX01FTlUp
OwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU2hpZnRfTCIsICAgIFZLX1NISUZUKTsKLSAgICBn
V2luZG93c0tleU1hcC5zZXQoIlNoaWZ0X1IiLCAgICBWS19TSElGVCk7Ci0gICAgZ1dpbmRvd3NL
ZXlNYXAuc2V0KCJDb250cm9sX0wiLCAgVktfQ09OVFJPTCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJDb250cm9sX1IiLCAgVktfQ09OVFJPTCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJQ
YXVzZSIsICAgICAgVktfUEFVU0UpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiQnJlYWsiLCAg
ICAgIFZLX1BBVVNFKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIkNhcHNfTG9jayIsICBWS19D
QVBJVEFMKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIlNjcm9sbF9Mb2NrIiwgVktfU0NST0xM
KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIk51bV9Mb2NrIiwgICBWS19OVU1MT0NLKTsKLSAg
ICBnV2luZG93c0tleU1hcC5zZXQoIkVzY2FwZSIsICAgICBWS19FU0NBUEUpOwotICAgIGdXaW5k
b3dzS2V5TWFwLnNldCgiVGFiIiwgICAgICAgIFZLX1RBQik7Ci0gICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJJU09fTGVmdF9UYWIiLCBWS19UQUIpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiQmFj
a1NwYWNlIiwgIFZLX0JBQ0spOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU3BhY2UiLCAgICAg
IFZLX1NQQUNFKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIk5leHQiLCAgICAgICBWS19ORVhU
KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIlByaW9yIiwgICAgICBWS19QUklPUik7Ci0gICAg
Z1dpbmRvd3NLZXlNYXAuc2V0KCJIb21lIiwgICAgICAgVktfSE9NRSk7Ci0gICAgZ1dpbmRvd3NL
ZXlNYXAuc2V0KCJFbmQiLCAgICAgICAgVktfRU5EKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQo
IlJpZ2h0IiwgICAgICBWS19SSUdIVCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJMZWZ0Iiwg
ICAgICAgVktfTEVGVCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJVcCIsICAgICAgICAgVktf
VVApOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiRG93biIsICAgICAgIFZLX0RPV04pOwotICAg
IGdXaW5kb3dzS2V5TWFwLnNldCgiUHJpbnQiLCAgICAgIFZLX1BSSU5UKTsKLSAgICBnV2luZG93
c0tleU1hcC5zZXQoIkluc2VydCIsICAgICBWS19JTlNFUlQpOwotICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiRGVsZXRlIiwgICAgIFZLX0RFTEVURSk7Ci0KLSAgICBnV2luZG93c0tleU1hcC5zZXQo
ImNvbW1hIiwgICAgICAgIFZLX09FTV9DT01NQSk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJs
ZXNzIiwgICAgICAgICBWS19PRU1fQ09NTUEpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicGVy
aW9kIiwgICAgICAgVktfT0VNX1BFUklPRCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJncmVh
dGVyIiwgICAgICBWS19PRU1fUEVSSU9EKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInNlbWlj
b2xvbiIsICAgIFZLX09FTV8xKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImNvbG9uIiwgICAg
ICAgIFZLX09FTV8xKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInNsYXNoIiwgICAgICAgIFZL
X09FTV8yKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInF1ZXN0aW9uIiwgICAgIFZLX09FTV8y
KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImdyYXZlIiwgICAgICAgIFZLX09FTV8zKTsKLSAg
ICBnV2luZG93c0tleU1hcC5zZXQoImFzY2lpdGlsZGUiLCAgIFZLX09FTV8zKTsKLSAgICBnV2lu
ZG93c0tleU1hcC5zZXQoImJyYWNrZXRsZWZ0IiwgIFZLX09FTV80KTsKLSAgICBnV2luZG93c0tl
eU1hcC5zZXQoImJyYWNlbGVmdCIsICAgIFZLX09FTV80KTsKLSAgICBnV2luZG93c0tleU1hcC5z
ZXQoImJhY2tzbGFzaCIsICAgIFZLX09FTV81KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImJh
ciIsICAgICAgICAgIFZLX09FTV81KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImJyYWNrZXRy
aWdodCIsIFZLX09FTV82KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImJyYWNlcmlnaHQiLCAg
IFZLX09FTV82KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImFwb3N0cm9waGUiLCAgIFZLX09F
TV83KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInF1b3RlZGJsIiwgICAgIFZLX09FTV83KTsK
LQotICAgIC8vIEFscGhhYmV0Ci0gICAgY29uc3QgY2hhciogYWxwaGFiZXQgPSAiYWJjZGVmZ2hp
amtsbW5vcHFyc3R1dnd4eXoiOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMjY7
IGkrKykgewotICAgICAgICBTdHJpbmcga2V5KGFscGhhYmV0ICsgaSwgMSk7Ci0gICAgICAgIGdX
aW5kb3dzS2V5TWFwLnNldChrZXksIFZLX0EgKyBpKTsKLSAgICB9Ci0KLSAgICAvLyBEaWdpdHMK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICAgICAgU3Ry
aW5nIGtleSA9IFN0cmluZzo6bnVtYmVyKGkpOwotICAgICAgICBnV2luZG93c0tleU1hcC5zZXQo
a2V5LCBWS18wICsgaSk7Ci0gICAgfQotCi0gICAgLy8gU2hpZnRlZCBkaWdpdHMKLSAgICBnV2lu
ZG93c0tleU1hcC5zZXQoImV4Y2xhbSIsICAgIFZLXzEpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNl
dCgiYXQiLCAgICAgICAgVktfMik7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJudW1iZXJzaWdu
IiwgVktfMyk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJkb2xsYXIiLCAgICBWS180KTsKLSAg
ICBnV2luZG93c0tleU1hcC5zZXQoInBlcmNlbnQiLCAgIFZLXzUpOwotICAgIGdXaW5kb3dzS2V5
TWFwLnNldCgiYXNjaWljaXJjdW0iLCBWS182KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImFt
cGVyc2FuZCIsIFZLXzcpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYXN0ZXJpc2siLCAgVktf
OCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJwYXJlbmxlZnQiLCBWS185KTsKLSAgICBnV2lu
ZG93c0tleU1hcC5zZXQoInBhcmVucmlnaHQiLCBWS18wKTsKLSAgICBnV2luZG93c0tleU1hcC5z
ZXQoIm1pbnVzIiwgICAgIFZLX09FTV9NSU5VUyk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJ1
bmRlcnNjb3JlIiwgVktfT0VNX01JTlVTKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImVxdWFs
IiwgICAgIFZLX09FTV9QTFVTKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInBsdXMiLCAgICAg
IFZLX09FTV9QTFVTKTsKLQotICAgIC8vIEZfWFgKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MTsgaSA8IDI1OyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGtleSA9ICJGIiArIFN0cmluZzo6bnVt
YmVyKGkpOwotICAgICAgICBnV2luZG93c0tleU1hcC5zZXQoa2V5LCBWS19GMSArIGkpOwotICAg
IH0KLX0KLQotc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoU3RyaW5n
JiBrZXlOYW1lKQotewotICAgIGlmIChnS2V5TWFwLmlzRW1wdHkoKSkKLSAgICAgICAgY3JlYXRl
S2V5TWFwKCk7Ci0KLSAgICBpZiAoZ0tleU1hcC5jb250YWlucyhrZXlOYW1lKSkKLSAgICAgICAg
cmV0dXJuIGdLZXlNYXAuZ2V0KGtleU5hbWUpOwotCi0gICAgcmV0dXJuIGtleU5hbWU7Ci19Ci0K
LXN0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JFdmFzS2V5TmFtZShTdHJpbmcmIGtleU5hbWUp
Ci17Ci0gICAgaWYgKGdXaW5kb3dzS2V5TWFwLmlzRW1wdHkoKSkKLSAgICAgICAgY3JlYXRlV2lu
ZG93c0tleU1hcCgpOwotCi0gICAgaWYgKGdXaW5kb3dzS2V5TWFwLmNvbnRhaW5zKGtleU5hbWUp
KQotICAgICAgICByZXR1cm4gZ1dpbmRvd3NLZXlNYXAuZ2V0KGtleU5hbWUpOwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50
KGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2ZW50KQogICAgIDogbV90eXBlKEtleURvd24p
CiAgICAgLCBtX3RleHQoU3RyaW5nOjpmcm9tVVRGOChldmVudC0+c3RyaW5nKSkK
</data>
<flag name="review"
          id="114706"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115732</attachid>
            <date>2011-11-17 21:08:30 -0800</date>
            <delta_ts>2011-11-17 22:14:26 -0800</delta_ts>
            <desc>EflKeyboardUtilities patch.</desc>
            <filename>EflKeyboardUtilities.patch</filename>
            <type>text/plain</type>
            <size>16863</size>
            <attacher name="Eunmi Lee">enmi.lee</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjODk1ZTNhLi5jMzUyODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTEtMTEtMTcgIEV1bm1pIExlZSAgPGV1bm1pMTUubGVlQHNhbXN1bmcuY29tPgorCisg
ICAgICAgIFtFRkxdIE1vdmUga2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKCkgYW5kIHdpbmRv
d3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoKSB0byB0aGUKKyAgICAgICAgRWZsS2V5Ym9hcmRVdGls
aXRpZXMuY3BwIHRvIHVzZSBpbiB0aGUgV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI0NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGUga2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKCkg
YW5kIHdpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUoKSB3ZXJlIHN0YXRpYyBmdW5jdGlvbnMK
KyAgICAgICAgaW4gdGhlIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEVmbC5jcHAuIEJ1dCB0aGV5IGFy
ZSBhbHNvIG5lZWRlZCBpbiB0aGUgV2ViS2l0MiBFRkwgcG9ydCwgc28gSQorICAgICAgICBtb3Zl
ZCB0aGVtIHRvIHRoZSBzZXBhcmF0ZWQgZmlsZSAtIEVmbEtleWJvYXJkVXRpbGl0aWVzLmNwcC4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9F
ZmxLZXlib2FyZFV0aWxpdGllcy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRFZmwuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlS2V5TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVdpbmRvd3NLZXlNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6a2V5SWRlbnRpZmllckZvckV2YXNLZXlOYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OndpbmRvd3NLZXlDb2RlRm9yRXZhc0tleU5hbWUpOgorICAgICAgICAqIHBsYXRm
b3JtL2VmbC9FZmxLZXlib2FyZFV0aWxpdGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9lZmwvUGxhdGZvcm1LZXlib2FyZEV2ZW50RWZsLmNwcDoKKwogMjAxMS0xMS0xNiAgQWRhbSBC
ZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CiAKICAgICAgICAgVXNlIGEg
c2ltcGxlIHBhZ2UgY2xpZW50IGZvciB1c2VyIGNvbnNlbnQgaW4gZ2V0VXNlck1lZGlhKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNjY1YWQ2Mi4uNjM1MjJmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTI3LDYgKzI3LDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgIHBsYXRmb3JtL2VmbC9DdXJzb3JFZmwuY3BwCiAgIHBsYXRmb3JtL2VmbC9EcmFnRGF0
YUVmbC5jcHAKICAgcGxhdGZvcm0vZWZsL0RyYWdJbWFnZUVmbC5jcHAKKyAgcGxhdGZvcm0vZWZs
L0VmbEtleWJvYXJkVXRpbGl0aWVzLmNwcAogICBwbGF0Zm9ybS9lZmwvRXZlbnRMb29wRWZsLmNw
cAogICBwbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAKICAgcGxhdGZvcm0vZWZsL0tVUkxF
ZmwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRWZsS2V5Ym9h
cmRVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0VmbEtleWJvYXJk
VXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQyYmJm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0VmbEtleWJv
YXJkVXRpbGl0aWVzLmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWZsS2V5Ym9hcmRVdGlsaXRpZXMu
aCIKKworI2luY2x1ZGUgIldpbmRvd3NLZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPiBLZXlNYXA7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+
IFdpbmRvd3NLZXlNYXA7CisKK3N0YXRpYyBLZXlNYXAmIGtleU1hcCgpCit7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChLZXlNYXAsIGtleU1hcCwgKCkpOworICAgIHJldHVybiBrZXlNYXA7Cit9
CisKK3N0YXRpYyBXaW5kb3dzS2V5TWFwJiB3aW5kb3dzS2V5TWFwKCkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFdpbmRvd3NLZXlNYXAsIHdpbmRvd3NLZXlNYXAsICgpKTsKKyAgICByZXR1
cm4gd2luZG93c0tleU1hcDsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlS2V5TWFwKCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IDI1OyBpKyspIHsKKyAgICAgICAgU3RyaW5n
IGtleSA9ICJGIiArIFN0cmluZzo6bnVtYmVyKGkpOworICAgICAgICBrZXlNYXAoKS5zZXQoa2V5
LCBrZXkpOworICAgIH0KKyAgICBrZXlNYXAoKS5zZXQoIkFsdF9MIiwgIkFsdCIpOworICAgIGtl
eU1hcCgpLnNldCgiSVNPX0xldmVsM19TaGlmdCIsICJBbHQiKTsKKyAgICBrZXlNYXAoKS5zZXQo
Ik1lbnUiLCAiQWx0Iik7CisgICAga2V5TWFwKCkuc2V0KCJTaGlmdF9MIiwgIlNoaWZ0Iik7Cisg
ICAga2V5TWFwKCkuc2V0KCJTaGlmdF9SIiwgIlNoaWZ0Iik7CisgICAga2V5TWFwKCkuc2V0KCJE
b3duIiwgIkRvd24iKTsKKyAgICBrZXlNYXAoKS5zZXQoIkVuZCIsICJFbmQiKTsKKyAgICBrZXlN
YXAoKS5zZXQoIlJldHVybiIsICJFbnRlciIpOworICAgIGtleU1hcCgpLnNldCgiS1BfRW50ZXIi
LCAiRW50ZXIiKTsKKyAgICBrZXlNYXAoKS5zZXQoIkhvbWUiLCAiSG9tZSIpOworICAgIGtleU1h
cCgpLnNldCgiSW5zZXJ0IiwgIkluc2VydCIpOworICAgIGtleU1hcCgpLnNldCgiTGVmdCIsICJM
ZWZ0Iik7CisgICAga2V5TWFwKCkuc2V0KCJEb3duIiwgIkRvd24iKTsKKyAgICBrZXlNYXAoKS5z
ZXQoIk5leHQiLCAiUGFnZURvd24iKTsKKyAgICBrZXlNYXAoKS5zZXQoIlByaW9yIiwgIlBhZ2VV
cCIpOworICAgIGtleU1hcCgpLnNldCgiUmlnaHQiLCAiUmlnaHQiKTsKKyAgICBrZXlNYXAoKS5z
ZXQoIlVwIiwgIlVwIik7CisgICAga2V5TWFwKCkuc2V0KCJEZWxldGUiLCAiVSswMDdGIik7Cisg
ICAga2V5TWFwKCkuc2V0KCJUYWIiLCAiVSswMDA5Iik7CisgICAga2V5TWFwKCkuc2V0KCJJU09f
TGVmdF9UYWIiLCAiVSswMDA5Iik7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZVdpbmRvd3NLZXlN
YXAoKQoreworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIlJldHVybiIsIFZLX1JFVFVSTik7Cisg
ICAgd2luZG93c0tleU1hcCgpLnNldCgiS1BfUmV0dXJuIiwgVktfUkVUVVJOKTsKKyAgICB3aW5k
b3dzS2V5TWFwKCkuc2V0KCJBbHRfTCIsIFZLX01FTlUpOworICAgIHdpbmRvd3NLZXlNYXAoKS5z
ZXQoIklTT19MZXZlbDNfU2hpZnQiLCBWS19NRU5VKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0
KCJNZW51IiwgVktfTUVOVSk7CisgICAgd2luZG93c0tleU1hcCgpLnNldCgiU2hpZnRfTCIsIFZL
X1NISUZUKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KCJTaGlmdF9SIiwgVktfU0hJRlQpOwor
ICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIkNvbnRyb2xfTCIsIFZLX0NPTlRST0wpOworICAgIHdp
bmRvd3NLZXlNYXAoKS5zZXQoIkNvbnRyb2xfUiIsIFZLX0NPTlRST0wpOworICAgIHdpbmRvd3NL
ZXlNYXAoKS5zZXQoIlBhdXNlIiwgVktfUEFVU0UpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQo
IkJyZWFrIiwgVktfUEFVU0UpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIkNhcHNfTG9jayIs
IFZLX0NBUElUQUwpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIlNjcm9sbF9Mb2NrIiwgVktf
U0NST0xMKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KCJOdW1fTG9jayIsIFZLX05VTUxPQ0sp
OworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIkVzY2FwZSIsIFZLX0VTQ0FQRSk7CisgICAgd2lu
ZG93c0tleU1hcCgpLnNldCgiVGFiIiwgVktfVEFCKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0
KCJJU09fTGVmdF9UYWIiLCBWS19UQUIpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIkJhY2tT
cGFjZSIsIFZLX0JBQ0spOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIlNwYWNlIiwgVktfU1BB
Q0UpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIk5leHQiLCBWS19ORVhUKTsKKyAgICB3aW5k
b3dzS2V5TWFwKCkuc2V0KCJQcmlvciIsIFZLX1BSSU9SKTsKKyAgICB3aW5kb3dzS2V5TWFwKCku
c2V0KCJIb21lIiwgVktfSE9NRSk7CisgICAgd2luZG93c0tleU1hcCgpLnNldCgiRW5kIiwgVktf
RU5EKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KCJSaWdodCIsIFZLX1JJR0hUKTsKKyAgICB3
aW5kb3dzS2V5TWFwKCkuc2V0KCJMZWZ0IiwgVktfTEVGVCk7CisgICAgd2luZG93c0tleU1hcCgp
LnNldCgiVXAiLCBWS19VUCk7CisgICAgd2luZG93c0tleU1hcCgpLnNldCgiRG93biIsIFZLX0RP
V04pOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoIlByaW50IiwgVktfUFJJTlQpOworICAgIHdp
bmRvd3NLZXlNYXAoKS5zZXQoIkluc2VydCIsIFZLX0lOU0VSVCk7CisgICAgd2luZG93c0tleU1h
cCgpLnNldCgiRGVsZXRlIiwgVktfREVMRVRFKTsKKworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQo
ImNvbW1hIiwgVktfT0VNX0NPTU1BKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KCJsZXNzIiwg
VktfT0VNX0NPTU1BKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KCJwZXJpb2QiLCBWS19PRU1f
UEVSSU9EKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KCJncmVhdGVyIiwgVktfT0VNX1BFUklP
RCk7CisgICAgd2luZG93c0tleU1hcCgpLnNldCgic2VtaWNvbG9uIiwgVktfT0VNXzEpOworICAg
IHdpbmRvd3NLZXlNYXAoKS5zZXQoImNvbG9uIiwgVktfT0VNXzEpOworICAgIHdpbmRvd3NLZXlN
YXAoKS5zZXQoInNsYXNoIiwgVktfT0VNXzIpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoInF1
ZXN0aW9uIiwgVktfT0VNXzIpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoImdyYXZlIiwgVktf
T0VNXzMpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoImFzY2lpdGlsZGUiLCBWS19PRU1fMyk7
CisgICAgd2luZG93c0tleU1hcCgpLnNldCgiYnJhY2tldGxlZnQiLCBWS19PRU1fNCk7CisgICAg
d2luZG93c0tleU1hcCgpLnNldCgiYnJhY2VsZWZ0IiwgVktfT0VNXzQpOworICAgIHdpbmRvd3NL
ZXlNYXAoKS5zZXQoImJhY2tzbGFzaCIsIFZLX09FTV81KTsKKyAgICB3aW5kb3dzS2V5TWFwKCku
c2V0KCJiYXIiLCBWS19PRU1fNSk7CisgICAgd2luZG93c0tleU1hcCgpLnNldCgiYnJhY2tldHJp
Z2h0IiwgVktfT0VNXzYpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoImJyYWNlcmlnaHQiLCBW
S19PRU1fNik7CisgICAgd2luZG93c0tleU1hcCgpLnNldCgiYXBvc3Ryb3BoZSIsIFZLX09FTV83
KTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KCJxdW90ZWRibCIsIFZLX09FTV83KTsKKworICAg
IC8vIFNldCBhbHBoYWJldCB0byB0aGUgd2luZG93c0tleU1hcC4KKyAgICBjb25zdCBjaGFyKiBh
bHBoYWJldCA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCAyNjsgaSsrKSB7CisgICAgICAgIFN0cmluZyBrZXkoYWxwaGFiZXQg
KyBpLCAxKTsKKyAgICAgICAgd2luZG93c0tleU1hcCgpLnNldChrZXksIFZLX0EgKyBpKTsKKyAg
ICB9CisKKyAgICAvLyBTZXQgZGlnaXRzIHRvIHRoZSB3aW5kb3dzS2V5TWFwLgorICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICBTdHJpbmcga2V5ID0g
U3RyaW5nOjpudW1iZXIoaSk7CisgICAgICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoa2V5LCBWS18w
ICsgaSk7CisgICAgfQorCisgICAgLy8gU2V0IHNoaWZ0ZWQgZGlnaXRzIHRvIHRoZSB3aW5kb3dz
S2V5TWFwLgorICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoImV4Y2xhbSIsIFZLXzEpOworICAgIHdp
bmRvd3NLZXlNYXAoKS5zZXQoImF0IiwgVktfMik7CisgICAgd2luZG93c0tleU1hcCgpLnNldCgi
bnVtYmVyc2lnbiIsIFZLXzMpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoImRvbGxhciIsIFZL
XzQpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoInBlcmNlbnQiLCBWS181KTsKKyAgICB3aW5k
b3dzS2V5TWFwKCkuc2V0KCJhc2NpaWNpcmN1bSIsIFZLXzYpOworICAgIHdpbmRvd3NLZXlNYXAo
KS5zZXQoImFtcGVyc2FuZCIsIFZLXzcpOworICAgIHdpbmRvd3NLZXlNYXAoKS5zZXQoImFzdGVy
aXNrIiwgVktfOCk7CisgICAgd2luZG93c0tleU1hcCgpLnNldCgicGFyZW5sZWZ0IiwgVktfOSk7
CisgICAgd2luZG93c0tleU1hcCgpLnNldCgicGFyZW5yaWdodCIsIFZLXzApOworICAgIHdpbmRv
d3NLZXlNYXAoKS5zZXQoIm1pbnVzIiwgVktfT0VNX01JTlVTKTsKKyAgICB3aW5kb3dzS2V5TWFw
KCkuc2V0KCJ1bmRlcnNjb3JlIiwgVktfT0VNX01JTlVTKTsKKyAgICB3aW5kb3dzS2V5TWFwKCku
c2V0KCJlcXVhbCIsIFZLX09FTV9QTFVTKTsKKyAgICB3aW5kb3dzS2V5TWFwKCkuc2V0KCJwbHVz
IiwgVktfT0VNX1BMVVMpOworCisgICAgLy8gU2V0IEZfWFgga2V5cyB0byB0aGUgd2luZG93c0tl
eU1hcC4KKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IDI1OyBpKyspIHsKKyAgICAg
ICAgU3RyaW5nIGtleSA9ICJGIiArIFN0cmluZzo6bnVtYmVyKGkpOworICAgICAgICB3aW5kb3dz
S2V5TWFwKCkuc2V0KGtleSwgVktfRjEgKyBpKTsKKyAgICB9Cit9CisKK1N0cmluZyBrZXlJZGVu
dGlmaWVyRm9yRXZhc0tleU5hbWUoU3RyaW5nJiBrZXlOYW1lKQoreworICAgIGlmIChrZXlNYXAo
KS5pc0VtcHR5KCkpCisgICAgICAgIGNyZWF0ZUtleU1hcCgpOworCisgICAgaWYgKGtleU1hcCgp
LmNvbnRhaW5zKGtleU5hbWUpKQorICAgICAgICByZXR1cm4ga2V5TWFwKCkuZ2V0KGtleU5hbWUp
OworCisgICAgcmV0dXJuIGtleU5hbWU7Cit9CisKK2ludCB3aW5kb3dzS2V5Q29kZUZvckV2YXNL
ZXlOYW1lKFN0cmluZyYga2V5TmFtZSkKK3sKKyAgICBpZiAod2luZG93c0tleU1hcCgpLmlzRW1w
dHkoKSkKKyAgICAgICAgY3JlYXRlV2luZG93c0tleU1hcCgpOworCisgICAgaWYgKHdpbmRvd3NL
ZXlNYXAoKS5jb250YWlucyhrZXlOYW1lKSkKKyAgICAgICAgcmV0dXJuIHdpbmRvd3NLZXlNYXAo
KS5nZXQoa2V5TmFtZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0VmbEtleWJvYXJk
VXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRWZsS2V5Ym9hcmRVdGls
aXRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzkxNzBiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0VmbEtleWJvYXJkVXRp
bGl0aWVzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1z
dW5nIEVsZWN0cm9uaWNzCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEVmbEtleWJvYXJkVXRpbGl0aWVzX2gKKyNkZWZpbmUgRWZsS2V5Ym9hcmRVdGlsaXRpZXNf
aAorCituYW1lc3BhY2UgV1RGIHsKK2NsYXNzIFN0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitXVEY6OlN0cmluZyBrZXlJZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoV1RGOjpTdHJp
bmcmKTsKK2ludCB3aW5kb3dzS2V5Q29kZUZvckV2YXNLZXlOYW1lKFdURjo6U3RyaW5nJik7CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVmbEtleWJvYXJkVXRpbGl0aWVz
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9QbGF0Zm9ybUtleWJv
YXJkRXZlbnRFZmwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtS2V5
Ym9hcmRFdmVudEVmbC5jcHAKaW5kZXggYzZhYzNlMi4uYjEzY2YzZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEVmbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1BsYXRmb3JtS2V5Ym9hcmRFdmVudEVmbC5j
cHAKQEAgLTI5LDE2NSArMjksMTYgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0KICNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAorI2luY2x1ZGUgIkVmbEtleWJvYXJk
VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIgotCiAjaW5jbHVk
ZSA8RXZhcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBLZXlNYXA7Ci10eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBpbnQ+IFdpbmRvd3NL
ZXlNYXA7Ci0KLXN0YXRpYyBLZXlNYXAgZ0tleU1hcDsKLXN0YXRpYyBXaW5kb3dzS2V5TWFwIGdX
aW5kb3dzS2V5TWFwOwotCi1zdGF0aWMgdm9pZCBjcmVhdGVLZXlNYXAoKQotewotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDwgMjU7IGkrKykgewotICAgICAgICBTdHJpbmcga2V5ID0g
IkYiICsgU3RyaW5nOjpudW1iZXIoaSk7Ci0gICAgICAgIGdLZXlNYXAuc2V0KGtleSwga2V5KTsK
LSAgICB9Ci0gICAgZ0tleU1hcC5zZXQoIkFsdF9MIiwgIkFsdCIpOwotICAgIGdLZXlNYXAuc2V0
KCJJU09fTGV2ZWwzX1NoaWZ0IiwgIkFsdCIpOwotICAgIGdLZXlNYXAuc2V0KCJNZW51IiwgIkFs
dCIpOwotICAgIGdLZXlNYXAuc2V0KCJTaGlmdF9MIiwgIlNoaWZ0Iik7Ci0gICAgZ0tleU1hcC5z
ZXQoIlNoaWZ0X1IiLCAiU2hpZnQiKTsKLSAgICBnS2V5TWFwLnNldCgiRG93biIsICJEb3duIik7
Ci0gICAgZ0tleU1hcC5zZXQoIkVuZCIsICJFbmQiKTsKLSAgICBnS2V5TWFwLnNldCgiUmV0dXJu
IiwgIkVudGVyIik7Ci0gICAgZ0tleU1hcC5zZXQoIktQX0VudGVyIiwgIkVudGVyIik7Ci0gICAg
Z0tleU1hcC5zZXQoIkhvbWUiLCAiSG9tZSIpOwotICAgIGdLZXlNYXAuc2V0KCJJbnNlcnQiLCAi
SW5zZXJ0Iik7Ci0gICAgZ0tleU1hcC5zZXQoIkxlZnQiLCAiTGVmdCIpOwotICAgIGdLZXlNYXAu
c2V0KCJEb3duIiwgIkRvd24iKTsKLSAgICBnS2V5TWFwLnNldCgiTmV4dCIsICJQYWdlRG93biIp
OwotICAgIGdLZXlNYXAuc2V0KCJQcmlvciIsICJQYWdlVXAiKTsKLSAgICBnS2V5TWFwLnNldCgi
UmlnaHQiLCAiUmlnaHQiKTsKLSAgICBnS2V5TWFwLnNldCgiVXAiLCAiVXAiKTsKLSAgICBnS2V5
TWFwLnNldCgiRGVsZXRlIiwgIlUrMDA3RiIpOwotICAgIGdLZXlNYXAuc2V0KCJUYWIiLCAiVSsw
MDA5Iik7Ci0gICAgZ0tleU1hcC5zZXQoIklTT19MZWZ0X1RhYiIsICJVKzAwMDkiKTsKLX0KLQot
c3RhdGljIHZvaWQgY3JlYXRlV2luZG93c0tleU1hcCgpCi17Ci0gICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJSZXR1cm4iLCAgICAgVktfUkVUVVJOKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIktQ
X1JldHVybiIsICBWS19SRVRVUk4pOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiQWx0X0wiLCAg
ICAgIFZLX01FTlUpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiSVNPX0xldmVsM19TaGlmdCIs
IFZLX01FTlUpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiTWVudSIsICAgICAgIFZLX01FTlUp
OwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU2hpZnRfTCIsICAgIFZLX1NISUZUKTsKLSAgICBn
V2luZG93c0tleU1hcC5zZXQoIlNoaWZ0X1IiLCAgICBWS19TSElGVCk7Ci0gICAgZ1dpbmRvd3NL
ZXlNYXAuc2V0KCJDb250cm9sX0wiLCAgVktfQ09OVFJPTCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJDb250cm9sX1IiLCAgVktfQ09OVFJPTCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJQ
YXVzZSIsICAgICAgVktfUEFVU0UpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiQnJlYWsiLCAg
ICAgIFZLX1BBVVNFKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIkNhcHNfTG9jayIsICBWS19D
QVBJVEFMKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIlNjcm9sbF9Mb2NrIiwgVktfU0NST0xM
KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIk51bV9Mb2NrIiwgICBWS19OVU1MT0NLKTsKLSAg
ICBnV2luZG93c0tleU1hcC5zZXQoIkVzY2FwZSIsICAgICBWS19FU0NBUEUpOwotICAgIGdXaW5k
b3dzS2V5TWFwLnNldCgiVGFiIiwgICAgICAgIFZLX1RBQik7Ci0gICAgZ1dpbmRvd3NLZXlNYXAu
c2V0KCJJU09fTGVmdF9UYWIiLCBWS19UQUIpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiQmFj
a1NwYWNlIiwgIFZLX0JBQ0spOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiU3BhY2UiLCAgICAg
IFZLX1NQQUNFKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIk5leHQiLCAgICAgICBWS19ORVhU
KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoIlByaW9yIiwgICAgICBWS19QUklPUik7Ci0gICAg
Z1dpbmRvd3NLZXlNYXAuc2V0KCJIb21lIiwgICAgICAgVktfSE9NRSk7Ci0gICAgZ1dpbmRvd3NL
ZXlNYXAuc2V0KCJFbmQiLCAgICAgICAgVktfRU5EKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQo
IlJpZ2h0IiwgICAgICBWS19SSUdIVCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJMZWZ0Iiwg
ICAgICAgVktfTEVGVCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJVcCIsICAgICAgICAgVktf
VVApOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiRG93biIsICAgICAgIFZLX0RPV04pOwotICAg
IGdXaW5kb3dzS2V5TWFwLnNldCgiUHJpbnQiLCAgICAgIFZLX1BSSU5UKTsKLSAgICBnV2luZG93
c0tleU1hcC5zZXQoIkluc2VydCIsICAgICBWS19JTlNFUlQpOwotICAgIGdXaW5kb3dzS2V5TWFw
LnNldCgiRGVsZXRlIiwgICAgIFZLX0RFTEVURSk7Ci0KLSAgICBnV2luZG93c0tleU1hcC5zZXQo
ImNvbW1hIiwgICAgICAgIFZLX09FTV9DT01NQSk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJs
ZXNzIiwgICAgICAgICBWS19PRU1fQ09NTUEpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgicGVy
aW9kIiwgICAgICAgVktfT0VNX1BFUklPRCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJncmVh
dGVyIiwgICAgICBWS19PRU1fUEVSSU9EKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInNlbWlj
b2xvbiIsICAgIFZLX09FTV8xKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImNvbG9uIiwgICAg
ICAgIFZLX09FTV8xKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInNsYXNoIiwgICAgICAgIFZL
X09FTV8yKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInF1ZXN0aW9uIiwgICAgIFZLX09FTV8y
KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImdyYXZlIiwgICAgICAgIFZLX09FTV8zKTsKLSAg
ICBnV2luZG93c0tleU1hcC5zZXQoImFzY2lpdGlsZGUiLCAgIFZLX09FTV8zKTsKLSAgICBnV2lu
ZG93c0tleU1hcC5zZXQoImJyYWNrZXRsZWZ0IiwgIFZLX09FTV80KTsKLSAgICBnV2luZG93c0tl
eU1hcC5zZXQoImJyYWNlbGVmdCIsICAgIFZLX09FTV80KTsKLSAgICBnV2luZG93c0tleU1hcC5z
ZXQoImJhY2tzbGFzaCIsICAgIFZLX09FTV81KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImJh
ciIsICAgICAgICAgIFZLX09FTV81KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImJyYWNrZXRy
aWdodCIsIFZLX09FTV82KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImJyYWNlcmlnaHQiLCAg
IFZLX09FTV82KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImFwb3N0cm9waGUiLCAgIFZLX09F
TV83KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInF1b3RlZGJsIiwgICAgIFZLX09FTV83KTsK
LQotICAgIC8vIEFscGhhYmV0Ci0gICAgY29uc3QgY2hhciogYWxwaGFiZXQgPSAiYWJjZGVmZ2hp
amtsbW5vcHFyc3R1dnd4eXoiOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgMjY7
IGkrKykgewotICAgICAgICBTdHJpbmcga2V5KGFscGhhYmV0ICsgaSwgMSk7Ci0gICAgICAgIGdX
aW5kb3dzS2V5TWFwLnNldChrZXksIFZLX0EgKyBpKTsKLSAgICB9Ci0KLSAgICAvLyBEaWdpdHMK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLSAgICAgICAgU3Ry
aW5nIGtleSA9IFN0cmluZzo6bnVtYmVyKGkpOwotICAgICAgICBnV2luZG93c0tleU1hcC5zZXQo
a2V5LCBWS18wICsgaSk7Ci0gICAgfQotCi0gICAgLy8gU2hpZnRlZCBkaWdpdHMKLSAgICBnV2lu
ZG93c0tleU1hcC5zZXQoImV4Y2xhbSIsICAgIFZLXzEpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNl
dCgiYXQiLCAgICAgICAgVktfMik7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJudW1iZXJzaWdu
IiwgVktfMyk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJkb2xsYXIiLCAgICBWS180KTsKLSAg
ICBnV2luZG93c0tleU1hcC5zZXQoInBlcmNlbnQiLCAgIFZLXzUpOwotICAgIGdXaW5kb3dzS2V5
TWFwLnNldCgiYXNjaWljaXJjdW0iLCBWS182KTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImFt
cGVyc2FuZCIsIFZLXzcpOwotICAgIGdXaW5kb3dzS2V5TWFwLnNldCgiYXN0ZXJpc2siLCAgVktf
OCk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJwYXJlbmxlZnQiLCBWS185KTsKLSAgICBnV2lu
ZG93c0tleU1hcC5zZXQoInBhcmVucmlnaHQiLCBWS18wKTsKLSAgICBnV2luZG93c0tleU1hcC5z
ZXQoIm1pbnVzIiwgICAgIFZLX09FTV9NSU5VUyk7Ci0gICAgZ1dpbmRvd3NLZXlNYXAuc2V0KCJ1
bmRlcnNjb3JlIiwgVktfT0VNX01JTlVTKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoImVxdWFs
IiwgICAgIFZLX09FTV9QTFVTKTsKLSAgICBnV2luZG93c0tleU1hcC5zZXQoInBsdXMiLCAgICAg
IFZLX09FTV9QTFVTKTsKLQotICAgIC8vIEZfWFgKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MTsgaSA8IDI1OyBpKyspIHsKLSAgICAgICAgU3RyaW5nIGtleSA9ICJGIiArIFN0cmluZzo6bnVt
YmVyKGkpOwotICAgICAgICBnV2luZG93c0tleU1hcC5zZXQoa2V5LCBWS19GMSArIGkpOwotICAg
IH0KLX0KLQotc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yRXZhc0tleU5hbWUoU3RyaW5n
JiBrZXlOYW1lKQotewotICAgIGlmIChnS2V5TWFwLmlzRW1wdHkoKSkKLSAgICAgICAgY3JlYXRl
S2V5TWFwKCk7Ci0KLSAgICBpZiAoZ0tleU1hcC5jb250YWlucyhrZXlOYW1lKSkKLSAgICAgICAg
cmV0dXJuIGdLZXlNYXAuZ2V0KGtleU5hbWUpOwotCi0gICAgcmV0dXJuIGtleU5hbWU7Ci19Ci0K
LXN0YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JFdmFzS2V5TmFtZShTdHJpbmcmIGtleU5hbWUp
Ci17Ci0gICAgaWYgKGdXaW5kb3dzS2V5TWFwLmlzRW1wdHkoKSkKLSAgICAgICAgY3JlYXRlV2lu
ZG93c0tleU1hcCgpOwotCi0gICAgaWYgKGdXaW5kb3dzS2V5TWFwLmNvbnRhaW5zKGtleU5hbWUp
KQotICAgICAgICByZXR1cm4gZ1dpbmRvd3NLZXlNYXAuZ2V0KGtleU5hbWUpOwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50
KGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2ZW50KQogICAgIDogbV90eXBlKEtleURvd24p
CiAgICAgLCBtX3RleHQoU3RyaW5nOjpmcm9tVVRGOChldmVudC0+c3RyaW5nKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>