<?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>145867</bug_id>
          
          <creation_ts>2015-06-10 20:00:23 -0700</creation_ts>
          <short_desc>[EFL] Support indexeddb for WK2</short_desc>
          <delta_ts>2015-07-27 01:36:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit 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>147221</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gyuyoung Kim">gyuyoung.kim</reporter>
          <assigned_to name="Gyuyoung Kim">gyuyoung.kim</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hyungwook.lee</cc>
    
    <cc>jh718.park</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1101204</commentid>
    <comment_count>0</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-06-10 20:00:23 -0700</bug_when>
    <thetext>Though GTK and Mac ports have supported indexed db on WK2, EFL WK2 doesn&apos;t support it yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1101205</commentid>
    <comment_count>1</comment_count>
      <attachid>254701</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-06-10 20:02:55 -0700</bug_when>
    <thetext>Created attachment 254701
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102738</commentid>
    <comment_count>2</comment_count>
      <attachid>255055</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-06-17 18:10:24 -0700</bug_when>
    <thetext>Created attachment 255055
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1102805</commentid>
    <comment_count>3</comment_count>
      <attachid>255084</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-06-17 22:23:54 -0700</bug_when>
    <thetext>Created attachment 255084
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103221</commentid>
    <comment_count>4</comment_count>
      <attachid>255084</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-06-19 02:29:04 -0700</bug_when>
    <thetext>Comment on attachment 255084
WIP

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

&gt; Source/WebKit2/Shared/AsyncTask.h:61
&gt; -        m_taskFunction = [callee, method, arguments...] {
&gt; -            (callee-&gt;*method)(arguments...);
&gt; -        };
&gt; +        // m_taskFunction = [callee, method, arguments...] {
&gt; +        //     (callee-&gt;*method)(arguments...);
&gt; +        // };

We will require at least GCC 4.9.0 or clang to build this code.
I don&apos;t have any objection against bumping, but I will have
to install newer GCC on the ARM bots before we do it.

The question is if it is reasonable for the EFL port maintainers.

In nutshell bumping means we will require at least Ubuntu 14.10.

&gt; Source/WebKit2/Shared/efl/KeyedDecoder.cpp:1
&gt; +/*

Why don&apos;t we simply reuse GTK&apos;s KeyedEncoder/KeyedDecoder?
Their implementation only needs glib, nothing else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103594</commentid>
    <comment_count>5</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-06-20 00:07:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 255084 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=255084&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/AsyncTask.h:61
&gt; &gt; -        m_taskFunction = [callee, method, arguments...] {
&gt; &gt; -            (callee-&gt;*method)(arguments...);
&gt; &gt; -        };
&gt; &gt; +        // m_taskFunction = [callee, method, arguments...] {
&gt; &gt; +        //     (callee-&gt;*method)(arguments...);
&gt; &gt; +        // };
&gt; 
&gt; We will require at least GCC 4.9.0 or clang to build this code.
&gt; I don&apos;t have any objection against bumping, but I will have
&gt; to install newer GCC on the ARM bots before we do it.
&gt; 
&gt; The question is if it is reasonable for the EFL port maintainers.
&gt; 
&gt; In nutshell bumping means we will require at least Ubuntu 14.10.

Yes, I also think now is time to consider to bump Ubuntu ver. Let me send a mail to webkit-efl soon.
 
&gt; &gt; Source/WebKit2/Shared/efl/KeyedDecoder.cpp:1
&gt; &gt; +/*
&gt; 
&gt; Why don&apos;t we simply reuse GTK&apos;s KeyedEncoder/KeyedDecoder?
&gt; Their implementation only needs glib, nothing else.

If there won&apos;t any need supported by EFL, it would be good to use GTK&apos;s KeyedDecoder.cpp. Let me check it further.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108560</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-07-10 02:38:35 -0700</bug_when>
    <thetext>*** Bug 139643 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108562</commentid>
    <comment_count>7</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-07-10 02:44:15 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created attachment 255084 [details]
&gt; WIP

The patch here is the older one, so I closed the other bug as duplicated.

(In reply to comment #6)
&gt; *** Bug 139643 has been marked as a duplicate of this bug. ***

Do we really need ecore things in platformInitialize/platformFinalize ?
Additionally we should add executablePathOfDatabaseProcess() implementation
from bug139643 with adding credit to Joonghun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108564</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-07-10 02:46:34 -0700</bug_when>
    <thetext>And I still think we should reuse GTK&apos;s KeyedEncoder/KeyedDecoder
implementation which need only glib, nothing GTK specific.
We could simply move these files from gtk to glib directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108612</commentid>
    <comment_count>9</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-07-10 07:55:23 -0700</bug_when>
    <thetext>*** Bug 144625 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108855</commentid>
    <comment_count>10</comment_count>
      <attachid>256640</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-07-10 19:49:23 -0700</bug_when>
    <thetext>Created attachment 256640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108856</commentid>
    <comment_count>11</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-07-10 19:50:30 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; And I still think we should reuse GTK&apos;s KeyedEncoder/KeyedDecoder
&gt; implementation which need only glib, nothing GTK specific.
&gt; We could simply move these files from gtk to glib directory.

Done. I agree with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109072</commentid>
    <comment_count>12</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-07-13 01:26:22 -0700</bug_when>
    <thetext>(In reply to comment #7)

&gt; Do we really need ecore things in platformInitialize/platformFinalize ?
&gt; Additionally we should add executablePathOfDatabaseProcess() implementation
&gt; from bug139643 with adding credit to Joonghun.

Joonghun, please upload a patch to add executablePathOfDatabaseProcess() after landing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109080</commentid>
    <comment_count>13</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2015-07-13 04:36:18 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #7)

&gt; Do we really need ecore things in
&gt; platformInitialize/platformFinalize ?
&gt; Additionally we should add
&gt; executablePathOfDatabaseProcess() implementation
&gt; from bug139643 with
&gt; adding credit to Joonghun.

Joonghun, please upload a patch to add
&gt; executablePathOfDatabaseProcess() after landing this patch.

Ok, please leave it to me. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111127</commentid>
    <comment_count>14</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-07-21 16:58:37 -0700</bug_when>
    <thetext>Ossy ping ? Could you take a look this patch ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111262</commentid>
    <comment_count>15</comment_count>
      <attachid>256640</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-07-22 07:12:05 -0700</bug_when>
    <thetext>Comment on attachment 256640
Patch

LGTM. 

And we can enable it too with executablePathOfDatabaseProcess patch if the tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111264</commentid>
    <comment_count>16</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-07-22 07:14:12 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 256640 [details]
&gt; Patch
&gt; 
&gt; LGTM. 
&gt; 
&gt; And we can enable it too with executablePathOfDatabaseProcess patch if the
&gt; tests pass.

yes, joonghun is going to upload a patch to add executablePathOfDatabaseProcess().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111266</commentid>
    <comment_count>17</comment_count>
      <attachid>256640</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-22 07:16:49 -0700</bug_when>
    <thetext>Comment on attachment 256640
Patch

Rejecting attachment 256640 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 256640, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
.h
rm &apos;Source/WebKit2/Shared/gtk/KeyedDecoder.h&apos;
patching file Source/WebKit2/Shared/gtk/KeyedEncoder.cpp
rm &apos;Source/WebKit2/Shared/gtk/KeyedEncoder.cpp&apos;
patching file Source/WebKit2/Shared/gtk/KeyedEncoder.h
rm &apos;Source/WebKit2/Shared/gtk/KeyedEncoder.h&apos;
patching file Source/WebKit2/UIProcess/Databases/efl/DatabaseProcessProxyEfl.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Csaba Osztrogon\xe1c&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.appspot.com/results/6571805431037952</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111272</commentid>
    <comment_count>18</comment_count>
      <attachid>257267</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-07-22 07:52:20 -0700</bug_when>
    <thetext>Created attachment 257267
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111460</commentid>
    <comment_count>19</comment_count>
      <attachid>257267</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-22 15:52:54 -0700</bug_when>
    <thetext>Comment on attachment 257267
Patch for landing

Clearing flags on attachment: 257267

Committed r187191: &lt;http://trac.webkit.org/changeset/187191&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111461</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-22 15:52:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254701</attachid>
            <date>2015-06-10 20:02:55 -0700</date>
            <delta_ts>2015-06-17 18:10:19 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-145867-20150611120228.patch</filename>
            <type>text/plain</type>
            <size>18205</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1NDA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjc2NWNhNDNiNDNiNzE2
ZDMzNDI2OWE1NTk1NjUwZWNhMDkxM2YwNy4uMmNlY2NkNGYxYWM1ODc2NWRmYTVhOTgxNTU2ZDIx
YjE0OWYxZGNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE1LTA2LTEwICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBTdXBw
b3J0IGluZGV4ZWRkYiBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDU4NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFNoYXJlZC9lZmwv
S2V5ZWREZWNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNv
ZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVCeXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlU2ltcGxlVmFsdWUpOgorICAgICAgICAo
V2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUJvb2wpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmRlY29kZVVJbnQzMik6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
ZGVjb2RlSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDY0
KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9hdCk6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlRG91YmxlKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29k
ZXI6OmJlZ2luT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjplbmRPYmpl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmJlZ2luQXJyYXkpOgorICAgICAg
ICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWREZWNvZGVyOjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpL
ZXllZERlY29kZXI6OmVuZEFycmF5KToKKyAgICAgICAgKiBTaGFyZWQvZWZsL0tleWVkRGVjb2Rl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvZWZsL0tleWVkRW5jb2Rlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OktleWVkRW5jb2Rlcik6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6fktleWVkRW5jb2Rlcik6CisgICAgICAgIChXZWJLaXQ6
OktleWVkRW5jb2Rlcjo6ZW5jb2RlQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29k
ZXI6OmVuY29kZUJvb2wpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZVVJ
bnQzMik6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlSW50MzIpOgorICAg
ICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUludDY0KToKKyAgICAgICAgKFdlYktp
dDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVGbG9hdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5j
b2Rlcjo6ZW5jb2RlRG91YmxlKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNv
ZGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmJlZ2luT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmRPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVu
Y29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVy
OjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuZEFy
cmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZyk6Cisg
ICAgICAgICogU2hhcmVkL2VmbC9LZXllZEVuY29kZXIuaDogQWRkZWQuCisKIDIwMTUtMDYtMDkg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYnVp
bGQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDhkZmZlMWQyNzE3Y2JiYTFiY2ZkMTk2
MDNmNTE1YWY2Mzg1M2VmMzIuLmQ3OWQ4N2U0NDgwNzZhODZjNmEyNDk2MTg5OTJmMDhjZjg1MjUx
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0zNiw2ICszNiw4IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdDJfU09VUkNFUwogCiAgICAgU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENh
aXJvLmNwcAogCisgICAgU2hhcmVkL2VmbC9LZXllZERlY29kZXIuY3BwCisgICAgU2hhcmVkL2Vm
bC9LZXllZEVuY29kZXIuY3BwCiAgICAgU2hhcmVkL2VmbC9OYXRpdmVDb250ZXh0TWVudUl0ZW1F
ZmwuY3BwCiAgICAgU2hhcmVkL2VmbC9OYXRpdmVXZWJLZXlib2FyZEV2ZW50RWZsLmNwcAogICAg
IFNoYXJlZC9lZmwvTmF0aXZlV2ViVG91Y2hFdmVudEVmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWREZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9lZmwvS2V5ZWREZWNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMmIwYTU0ZDZlNWZkMmYzMGMy
YmMzZTVkMzczNmQzZjJiZjdkNjY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2VmbC9LZXllZERlY29kZXIuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IE5hdmVyIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZERlY29kZXIuaCIKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK0tleWVk
RGVjb2Rlcjo6S2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQor
eworfQorCitLZXllZERlY29kZXI6On5LZXllZERlY29kZXIoKQoreworfQorCitib29sIEtleWVk
RGVjb2Rlcjo6ZGVjb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiBi
eXRlcywgc2l6ZV90JiBzaXplKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4KK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTaW1wbGVW
YWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUJvb2woY29uc3Qg
U3RyaW5nJiBrZXksIGJvb2wmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFs
dWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfYm9vbGVhbik7Cit9CisKK2Jvb2wgS2V5ZWRE
ZWNvZGVyOjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQp
Cit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRf
Z2V0X3VpbnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQzMihjb25zdCBT
dHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVW
YWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9pbnQzMik7Cit9CisKK2Jvb2wgS2V5ZWRE
ZWNvZGVyOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYgcmVzdWx0KQor
eworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dl
dF9pbnQ2NCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9hdChjb25zdCBTdHJp
bmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUo
a2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfZG91YmxlKTsKK30KKworYm9vbCBLZXllZERlY29k
ZXI6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiByZXN1bHQpCit7Cisg
ICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2Rv
dWJsZSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5n
JiBrZXksIFN0cmluZyYgcmVzdWx0KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBL
ZXllZERlY29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBLZXllZERlY29kZXI6OmVuZE9iamVjdCgpCit7Cit9CisKK2Jv
b2wgS2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJheUVs
ZW1lbnQoKQoreworfQorCit2b2lkIEtleWVkRGVjb2Rlcjo6ZW5kQXJyYXkoKQoreworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9l
ZmwvS2V5ZWREZWNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRGVjb2Rl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY4NWU1NDgyN2U0NzRkZGU3NzZjY2RjNjRkNjczMGVmODg3Y2Q1YjUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRGVjb2Rl
ci5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgTmF2ZXIgQ29y
cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXllZERlY29kZXJf
aAorI2RlZmluZSBLZXllZERlY29kZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgS2V5ZWREZWNvZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OktleWVk
RGVjb2RlciB7CitwdWJsaWM6CisgICAgS2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRhdGEs
IHNpemVfdCk7CisgICAgdmlydHVhbCB+S2V5ZWREZWNvZGVyKCkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBib29sIGRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCB1aW50OF90KiYsIHNpemVfdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVC
b29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IGRlY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QmKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXks
IGludDY0X3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRmxvYXQoY29uc3Qg
U3RyaW5nJiBrZXksIGZsb2F0Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZURv
dWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIGRlY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJikgb3ZlcnJpZGU7CisK
KyAgICB2aXJ0dWFsIGJvb2wgYmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwg
Ym9vbCBiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IGJvb2wgYmVnaW5BcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5k
QXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5KCkgb3Zl
cnJpZGU7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGPiBib29sIGRlY29k
ZVNpbXBsZVZhbHVlKGNvbnN0IFN0cmluZyYga2V5LCBUJiByZXN1bHQsIEYgZ2V0RnVuY3Rpb24p
OworCisgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2FycmF5SW5kZXhTdGFjazsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gS2V5ZWREZWNvZGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWRFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9lZmwvS2V5ZWRFbmNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMjk3MDlhMDRlMTJh
ODZhMGQ3MGIwNjhkYzUzZTZlMTdlNTNkYjlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2VmbC9LZXllZEVuY29kZXIuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IE5hdmVyIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJLZXllZEVuY29kZXIuaCIK
KworI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK0tleWVkRW5jb2Rlcjo6S2V5ZWRFbmNvZGVyKCkKK3sKK30KKworS2V5ZWRFbmNvZGVy
Ojp+S2V5ZWRFbmNvZGVyKCkKK3sKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUJ5dGVz
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IHNpemUpCit7
Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBi
b29sIHZhbHVlKQoreworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlVUludDMyKGNvbnN0
IFN0cmluZyYga2V5LCB1aW50MzJfdCB2YWx1ZSkKK3sKK30KKwordm9pZCBLZXllZEVuY29kZXI6
OmVuY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90IHZhbHVlKQoreworfQorCit2
b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3Qg
dmFsdWUpCit7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVGbG9hdChjb25zdCBTdHJp
bmcmIGtleSwgZmxvYXQgdmFsdWUpCit7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVE
b3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSB2YWx1ZSkKK3sKK30KKwordm9pZCBLZXll
ZEVuY29kZXI6OmVuY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKK3sKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0IFN0cmlu
ZyYga2V5KQoreworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5kT2JqZWN0KCkKK3sKK30KKwor
dm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7Cit9CisK
K3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCit7Cit9CisKK3ZvaWQgS2V5
ZWRFbmNvZGVyOjplbmRBcnJheUVsZW1lbnQoKQoreworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6
ZW5kQXJyYXkoKQoreworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gS2V5ZWRFbmNvZGVy
OjpmaW5pc2hFbmNvZGluZygpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9LZXll
ZEVuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWRFbmNvZGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDUwZjkwNTQzNDAxYTQzOTdiZDM0OGIzNTViYTc0Mjg4MWZhZmRiOAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWRFbmNvZGVyLmgKQEAg
LTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBOYXZlciBDb3JwLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleWVkRW5jb2Rlcl9oCisjZGVm
aW5lIEtleWVkRW5jb2Rlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgS2V5ZWRFbmNvZGVyIGZpbmFsIDogcHVibGlj
IFdlYkNvcmU6OktleWVkRW5jb2RlciB7CitwdWJsaWM6CisgICAgS2V5ZWRFbmNvZGVyKCk7Cisg
ICAgfktleWVkRW5jb2RlcigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gZmluaXNoRW5jb2RpbmcoKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgZW5jb2RlQnl0ZXMoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3Qq
LCBzaXplX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCb29sKGNvbnN0IFN0
cmluZyYga2V5LCBib29sKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlVUludDMy
KGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGVuY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90KSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZW5jb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxv
YXQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVEb3VibGUoY29uc3QgU3RyaW5n
JiBrZXksIGRvdWJsZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZVN0cmluZyhj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBlbmRPYmplY3QoKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFy
cmF5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5B
cnJheUVsZW1lbnQoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEtleWVkRW5jb2Rlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlCmluZGV4IDU5NTRhMjZhMmYyMmU1NGIyNDY5YmM3YTE0NmNmNjFkMmY1YmI3
NjkuLmUwOWJiOWFlMjFlYmMwN2FjM2RmMGU3OGNhOWY3MjVkOGJjYjU0ZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25z
RWZsLmNtYWtlCkBAIC04NCw3ICs4NCw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZB
TFVFKEVOQUJMRV9HQU1FUEFEIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfR0FNRVBBRF9ERVBSRUNBVEVEIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJ
T05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9HRU9MT0NBVElPTiBQVUJMSUMgT04pCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRV9JTl9X
T1JLRVJTIFBVQkxJQyBPRkYpCi1XRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFC
TEVfSU5ERVhFRF9EQVRBQkFTRSBQVUJMSUMgT0ZGKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BP
UlRfVkFMVUUoRU5BQkxFX0lOREVYRURfREFUQUJBU0UgUFVCTElDIE9OKQogV0VCS0lUX09QVElP
Tl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lOUFVUX1RZUEVfQ09MT1IgUFVCTElDIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0xJTktfUFJFRkVUQ0ggUFVC
TElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX01FRElBX0NB
UFRVUkUgUFVCTElDIE9OKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDY3MWQ2YWNlZDBhYjc4YjAyZDkwMGJmMDE3ZjRiNjA2YmFlZTIxYWMuLmIy
OWNhYmU2M2M2OGE5NjUxMzhkZjEyNmI0MWZmNjUxMTU3ZjQ2ODUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0w
Ni0xMCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W0VGTF0gU3VwcG9ydCBpbmRleGVkZGIgZm9yIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1ODY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG06CisKIDIwMTUtMDYtMTAgIEh5dW5nd29vayBMZWUgIDxoeXVuZ3dvb2subGVlQG5hdmVyY29y
cC5jb20+CiAKICAgICAgICAgW0VGTF0gRXhlY3V0ZSBKYXZhc2NyaXB0IG1ldGhvZCBpbiBtaW5p
IGJyb3dzZXIgYWRkcmVzcyBiYXIuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBl
cmwvRmVhdHVyZUxpc3QucG0gYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVyZUxpc3Qu
cG0KaW5kZXggY2E3YzcxNjdlY2NkYjY3MGEzMDgzZTg4MjcwN2EzNWFlMmQwYTUwMC4uZjM3N2Y5
ZmVkMDU5YTY0OGQ3YThjYmRmOTUwMGFkYjk2MTQ4YmNjNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cGVybC9GZWF0dXJlTGlzdC5wbQpAQCAtMjYyLDcgKzI2Miw3IEBAIG15IEBmZWF0dXJlcyA9ICgK
ICAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0lDT05EQVRBQkFTRSIsIGRlZmF1bHQgPT4gIWlzSU9T
V2ViS2l0KCksIHZhbHVlID0+IFwkaWNvbmRhdGFiYXNlU3VwcG9ydCB9LAogCiAgICAgeyBvcHRp
b24gPT4gImluZGV4ZWQtZGF0YWJhc2UiLCBkZXNjID0+ICJUb2dnbGUgSW5kZXhlZCBEYXRhYmFz
ZSBzdXBwb3J0IiwKLSAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0lOREVYRURfREFUQUJBU0UiLCBk
ZWZhdWx0ID0+IGlzR3RrKCksIHZhbHVlID0+IFwkaW5kZXhlZERhdGFiYXNlU3VwcG9ydCB9LAor
ICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSIsIGRlZmF1bHQgPT4gKGlz
R3RrKCkgfHwgaXNFZmwoKSksIHZhbHVlID0+IFwkaW5kZXhlZERhdGFiYXNlU3VwcG9ydCB9LAog
CiAgICAgeyBvcHRpb24gPT4gImlucHV0LXNwZWVjaCIsIGRlc2MgPT4gIlRvZ2dsZSBJbnB1dCBT
cGVlY2ggc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9JTlBVVF9TUEVFQ0giLCBk
ZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkaW5wdXRTcGVlY2hTdXBwb3J0IH0sCmRpZmYgLS1naXQg
YS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggODdhNjU2MmQ2ODM4ZTRiZmIwMzkxZTE2MzBm
MjgyZjFjMDUyNzQwOS4uNTM0ZDlhYjMxMTZiN2RkYjljZDc5MDBkODdjYjlkYTA2YmIyMWUxYSAx
MDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDE1LTA2LTEwICBHeXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBbRUZMXSBTdXBwb3J0IGluZGV4ZWRkYiBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4NjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNt
YWtlOgorCiAyMDE1LTA2LTAzICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBDYXBzIGxvY2sgaW5kaWNhdG9yIHNob3VsZCBub3QgYmUgc2hvd24gaW4gcmVhZC1v
bmx5IG9yIGRpc2FibGVkIGZpZWxkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255055</attachid>
            <date>2015-06-17 18:10:24 -0700</date>
            <delta_ts>2015-06-17 22:23:48 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-145867-20150618100947.patch</filename>
            <type>text/plain</type>
            <size>18861</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1NjQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzNhZWM1ZDM4NjJkMGZl
YjcxMGU3MjMwZGVjYjBkMGIyYTQ3ZTA4MS4uODYxZGE2MjdjMTE4M2Q0OTY3MTJmZjMzNWYzNmNl
ZjFiZjc4ZTI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE1LTA2LTE3ICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBTdXBw
b3J0IGluZGV4ZWRkYiBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDU4NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFNoYXJlZC9lZmwv
S2V5ZWREZWNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNv
ZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVCeXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlU2ltcGxlVmFsdWUpOgorICAgICAgICAo
V2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUJvb2wpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmRlY29kZVVJbnQzMik6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
ZGVjb2RlSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDY0
KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9hdCk6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlRG91YmxlKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29k
ZXI6OmJlZ2luT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjplbmRPYmpl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmJlZ2luQXJyYXkpOgorICAgICAg
ICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWREZWNvZGVyOjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpL
ZXllZERlY29kZXI6OmVuZEFycmF5KToKKyAgICAgICAgKiBTaGFyZWQvZWZsL0tleWVkRGVjb2Rl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvZWZsL0tleWVkRW5jb2Rlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OktleWVkRW5jb2Rlcik6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6fktleWVkRW5jb2Rlcik6CisgICAgICAgIChXZWJLaXQ6
OktleWVkRW5jb2Rlcjo6ZW5jb2RlQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29k
ZXI6OmVuY29kZUJvb2wpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZVVJ
bnQzMik6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlSW50MzIpOgorICAg
ICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUludDY0KToKKyAgICAgICAgKFdlYktp
dDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVGbG9hdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5j
b2Rlcjo6ZW5jb2RlRG91YmxlKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNv
ZGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmJlZ2luT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmRPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVu
Y29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVy
OjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuZEFy
cmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZyk6Cisg
ICAgICAgICogU2hhcmVkL2VmbC9LZXllZEVuY29kZXIuaDogQWRkZWQuCisKIDIwMTUtMDYtMTYg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIEluaGliaXQgc2NyZWVuIHNhdmVyIHdoZW4gcGxheWluZyBmdWxsIHNjcmVlbiB2aWRlbwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAzODk0OTFjMzAwMDAxMWMzOWZjMmU0NWUyZWE2
OGIwMjM0Y2VhZWQxLi4wYzA1MjcxYTVhNGVlMDg0ZWNlMzk2OTVlZDU2ZWNhYzZjNjA5YWZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMzEzLDYgKzMxMywxMCBAQCBsaXN0KEFQUEVO
RCBOZXR3b3JrUHJvY2Vzc19TT1VSQ0VTCiAgICAgTmV0d29ya1Byb2Nlc3MvRW50cnlQb2ludC91
bml4L05ldHdvcmtQcm9jZXNzTWFpbi5jcHAKICkKIAorbGlzdChBUFBFTkQgRGF0YWJhc2VQcm9j
ZXNzX1NPVVJDRVMKKyAgICBEYXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNl
UHJvY2Vzc01haW4uY3BwCispCisKIGxpc3QoQVBQRU5EIFdlYlByb2Nlc3NfTElCUkFSSUVTCiAg
ICAgJHtDQUlST19MSUJSQVJJRVN9CiAgICAgJHtFQ09SRV9JTUZfRVZBU19MSUJSQVJJRVN9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRGVjb2Rlci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRGVjb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDJi
MGE1NGQ2ZTVmZDJmMzBjMmJjM2U1ZDM3MzZkM2YyYmY3ZDY2NAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWREZWNvZGVyLmNwcApAQCAtMCwwICsxLDEx
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBOYXZlciBDb3JwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWRE
ZWNvZGVyLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitLZXllZERlY29kZXI6OktleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRh
LCBzaXplX3Qgc2l6ZSkKK3sKK30KKworS2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNvZGVyKCkKK3sK
K30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCB1aW50OF90KiYgYnl0ZXMsIHNpemVfdCYgc2l6ZSkKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEY+Citib29sIEtleWVkRGVjb2Rl
cjo6ZGVjb2RlU2ltcGxlVmFsdWUoY29uc3QgU3RyaW5nJiBrZXksIFQmIHJlc3VsdCwgRiBnZXRG
dW5jdGlvbikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpk
ZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJiByZXN1bHQpCit7CisgICAgcmV0dXJu
IGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2Jvb2xlYW4pOwor
fQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1
aW50MzJfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJl
c3VsdCwgZ192YXJpYW50X2dldF91aW50MzIpOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVj
b2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXR1
cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfaW50MzIpOwor
fQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50NjQoY29uc3QgU3RyaW5nJiBrZXksIGlu
dDY0X3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1
bHQsIGdfdmFyaWFudF9nZXRfaW50NjQpOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2Rl
RmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRl
Y29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSk7Cit9CisK
K2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJs
ZSYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwg
Z192YXJpYW50X2dldF9kb3VibGUpOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlU3Ry
aW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtl
eSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgS2V5ZWREZWNvZGVyOjplbmRPYmpl
Y3QoKQoreworfQorCitib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5BcnJheShjb25zdCBTdHJpbmcm
IGtleSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpiZWdp
bkFycmF5RWxlbWVudCgpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEtleWVkRGVj
b2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKK3sKK30KKwordm9pZCBLZXllZERlY29kZXI6OmVuZEFy
cmF5KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2VmbC9LZXllZERlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODVlNTQ4MjdlNDc0ZGRlNzc2Y2NkYzY0
ZDY3MzBlZjg4N2NkNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2VmbC9LZXllZERlY29kZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IE5hdmVyIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgS2V5ZWREZWNvZGVyX2gKKyNkZWZpbmUgS2V5ZWREZWNvZGVyX2gKKworI2luY2x1ZGUgPFdl
YkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEtleWVkRGVjb2RlciBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpLZXllZERlY29kZXIgeworcHVibGljOgorICAgIEtleWVkRGVjb2Rlcihjb25z
dCB1aW50OF90KiBkYXRhLCBzaXplX3QpOworICAgIHZpcnR1YWwgfktleWVkRGVjb2RlcigpIG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCeXRlcyhjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgdWludDhfdComLCBzaXplX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDMyKGNvbnN0IFN0cmluZyYg
a2V5LCBpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDY0KGNv
bnN0IFN0cmluZyYga2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRl
Y29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmlu
ZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmlu
ZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBlbmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRj4gYm9vbCBkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0
LCBGIGdldEZ1bmN0aW9uKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9hcnJheUluZGV4U3Rh
Y2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEtleWVkRGVjb2Rl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRW5jb2Rlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRW5jb2Rlci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjI5NzA5YTA0ZTEyYTg2YTBkNzBiMDY4ZGM1M2U2ZTE3ZTUzZGI5YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWRFbmNvZGVyLmNwcApAQCAtMCww
ICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBOYXZlciBDb3JwLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
S2V5ZWRFbmNvZGVyLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitLZXllZEVuY29kZXI6OktleWVkRW5jb2RlcigpCit7Cit9
CisKK0tleWVkRW5jb2Rlcjo6fktleWVkRW5jb2RlcigpCit7Cit9CisKK3ZvaWQgS2V5ZWRFbmNv
ZGVyOjplbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdCogYnl0ZXMs
IHNpemVfdCBzaXplKQoreworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlQm9vbChjb25z
dCBTdHJpbmcmIGtleSwgYm9vbCB2YWx1ZSkKK3sKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVu
Y29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QgdmFsdWUpCit7Cit9CisKK3Zv
aWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCB2
YWx1ZSkKK3sKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUludDY0KGNvbnN0IFN0cmlu
ZyYga2V5LCBpbnQ2NF90IHZhbHVlKQoreworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2Rl
RmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0IHZhbHVlKQoreworfQorCit2b2lkIEtleWVk
RW5jb2Rlcjo6ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUgdmFsdWUpCit7
Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbk9i
amVjdChjb25zdCBTdHJpbmcmIGtleSkKK3sKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuZE9i
amVjdCgpCit7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5KGNvbnN0IFN0cmlu
ZyYga2V5KQoreworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQor
eworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKK3sKK30KKwordm9p
ZCBLZXllZEVuY29kZXI6OmVuZEFycmF5KCkKK3sKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+IEtleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcoKQoreworICAgIHJldHVybiBudWxscHRy
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9lZmwvS2V5ZWRFbmNvZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tl
eWVkRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1MGY5MDU0MzQwMWE0Mzk3YmQzNDhiMzU1YmE3NDI4
ODFmYWZkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tl
eWVkRW5jb2Rlci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
TmF2ZXIgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBLZXll
ZEVuY29kZXJfaAorI2RlZmluZSBLZXllZEVuY29kZXJfaAorCisjaW5jbHVkZSA8V2ViQ29yZS9L
ZXllZENvZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEtleWVkRW5jb2Rl
ciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZEVuY29kZXIgeworcHVibGljOgorICAgIEtl
eWVkRW5jb2RlcigpOworICAgIH5LZXllZEVuY29kZXIoKTsKKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5j
b2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5
LCBpbnQ2NF90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxvYXQoY29uc3Qg
U3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRG91
YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
OworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgp
IG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBLZXll
ZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UgYi9T
b3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCBhZGE0OTg4YTc0MDY4ZTUxYmQxNTY4
MzIxNWRlYThjZTBlZDZmYTJkLi44OWUwOGMwYWUwMzBmMDQ5OTdhZTI0NzE2YWMwMWU4MWRkYTNk
NzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgYi9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQpAQCAtNzIsNiArNzIsNyBAQCBXRUJLSVRfT1BUSU9O
X0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1JFR0lPTlMgUFVCTElDIE9OKQogV0VCS0lU
X09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19TQ1JPTExfU05BUCBQVUJMSUMg
T0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NTU19TRUxFQ1RP
UlNfTEVWRUw0IFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DVVNUT01fU0NIRU1FX0hBTkRMRVIgUFVCTElDIE9OKQorV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RBVEFCQVNFX1BST0NFU1MgUFJJVkFURSBPTikKIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9EQVRBTElTVF9FTEVNRU5UIFBVQkxJ
QyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ET000X0VWRU5U
U19DT05TVFJVQ1RPUiBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfRE9XTkxPQURfQVRUUklCVVRFIFBVQkxJQyBPTikKQEAgLTg0LDcgKzg1LDcgQEAg
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0dBTUVQQUQgUFVCTElDIE9G
RikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9HQU1FUEFEX0RFUFJF
Q0FURUQgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X0dFT0xPQ0FUSU9OIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFX0lOX1dPUktFUlMgUFVCTElDIE9GRikKLVdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFIFBVQkxJQyBP
RkYpCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfSU5ERVhFRF9EQVRB
QkFTRSBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
SU5QVVRfVFlQRV9DT0xPUiBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfTElOS19QUkVGRVRDSCBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfTUVESUFfQ0FQVFVSRSBQVUJMSUMgT04pCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmRhNzM5YWZjYWY5NjBl
NmIxNTI0ZmJlMjA0MmJhZDYzZTk5ODRiYy4uMzMxNzUwZDI0OGJkZmJjY2QxZmZkYWQ4MTlkZjQ1
ODFmMTI3NTIwNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA2LTE3ICBHeXV5b3VuZyBLaW0gIDxneXV5b3Vu
Zy5raW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBTdXBwb3J0IGluZGV4ZWRkYiBmb3Ig
V0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbToKKwogMjAxNS0wNi0xNSAgQ2hyaXMgRmxl
aXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiAgaU9TIGFjY2Vzc2li
aWxpdHkgdGVzdHMgYXJlIG5vdCBydW5uaW5nIGJlY2F1c2Ugd2UgbmVlZCBXS1RSIHN1cHBvcnQK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQppbmRleCBjYTdjNzE2N2VjY2Ri
NjcwYTMwODNlODgyNzA3YTM1YWUyZDBhNTAwLi5mMzc3ZjlmZWQwNTlhNjQ4ZDdhOGNiZGY5NTAw
YWRiOTYxNDhiY2M0IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwvRmVhdHVy
ZUxpc3QucG0KKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCkBA
IC0yNjIsNyArMjYyLDcgQEAgbXkgQGZlYXR1cmVzID0gKAogICAgICAgZGVmaW5lID0+ICJFTkFC
TEVfSUNPTkRBVEFCQVNFIiwgZGVmYXVsdCA9PiAhaXNJT1NXZWJLaXQoKSwgdmFsdWUgPT4gXCRp
Y29uZGF0YWJhc2VTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiaW5kZXhlZC1kYXRhYmFz
ZSIsIGRlc2MgPT4gIlRvZ2dsZSBJbmRleGVkIERhdGFiYXNlIHN1cHBvcnQiLAotICAgICAgZGVm
aW5lID0+ICJFTkFCTEVfSU5ERVhFRF9EQVRBQkFTRSIsIGRlZmF1bHQgPT4gaXNHdGsoKSwgdmFs
dWUgPT4gXCRpbmRleGVkRGF0YWJhc2VTdXBwb3J0IH0sCisgICAgICBkZWZpbmUgPT4gIkVOQUJM
RV9JTkRFWEVEX0RBVEFCQVNFIiwgZGVmYXVsdCA9PiAoaXNHdGsoKSB8fCBpc0VmbCgpKSwgdmFs
dWUgPT4gXCRpbmRleGVkRGF0YWJhc2VTdXBwb3J0IH0sCiAKICAgICB7IG9wdGlvbiA9PiAiaW5w
dXQtc3BlZWNoIiwgZGVzYyA9PiAiVG9nZ2xlIElucHV0IFNwZWVjaCBzdXBwb3J0IiwKICAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX0lOUFVUX1NQRUVDSCIsIGRlZmF1bHQgPT4gMCwgdmFsdWUgPT4g
XCRpbnB1dFNwZWVjaFN1cHBvcnQgfSwKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxv
ZwppbmRleCA1ZGUyMmY2MTcyODJlZTZiMjQ4NGQzNGIzY2IyODdhY2Q5ZmVjMWFmLi5hMzdkNmVm
NzIyN2YwMmQxZDM4ZjlkMjA4ODJmNjE4ODIwMGQwZmJmIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cK
KysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMDYtMTcgIEd5dXlvdW5nIEtp
bSAgPGd5dXlvdW5nLmtpbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtFRkxdIFN1cHBvcnQgaW5k
ZXhlZGRiIGZvciBXSzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NTg2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2U6CisKIDIwMTUtMDYtMTYgIFJ5
dWFuIENob2kgIDxyeXVhbi5jaG9pQG5hdmVyY29ycC5jb20+CiAKICAgICAgICAgW0VGTF0gUmVt
b3ZlIGR1cGxpY2F0ZWQgUFVCTElDIGFyZ3VtZW50IGluIE9wdGlvbnNFZmwuY21ha2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255084</attachid>
            <date>2015-06-17 22:23:54 -0700</date>
            <delta_ts>2015-07-10 19:49:17 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-145867-20150618142320.patch</filename>
            <type>text/plain</type>
            <size>24977</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1Njg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOGUyY2UwZjY0YjMzNWQ4
ZTRlMWYzNzVjNDQ2Mzc5NzllZTE3OGIzMy4uNzdmZDdhOTVhYjcwYzQwMzFiOTUzYWRkNjI0NmUx
YzQwZjRmMTBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE1LTA2LTE3ICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBTdXBw
b3J0IGluZGV4ZWRkYiBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDU4NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFNoYXJlZC9lZmwv
S2V5ZWREZWNvZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNv
ZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVCeXRlcyk6CisgICAg
ICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlU2ltcGxlVmFsdWUpOgorICAgICAgICAo
V2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUJvb2wpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmRlY29kZVVJbnQzMik6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
ZGVjb2RlSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDY0
KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9hdCk6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlRG91YmxlKToKKyAgICAgICAgKFdlYktpdDo6
S2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29k
ZXI6OmJlZ2luT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjplbmRPYmpl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmJlZ2luQXJyYXkpOgorICAgICAg
ICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWREZWNvZGVyOjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpL
ZXllZERlY29kZXI6OmVuZEFycmF5KToKKyAgICAgICAgKiBTaGFyZWQvZWZsL0tleWVkRGVjb2Rl
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBTaGFyZWQvZWZsL0tleWVkRW5jb2Rlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OktleWVkRW5jb2Rlcik6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6fktleWVkRW5jb2Rlcik6CisgICAgICAgIChXZWJLaXQ6
OktleWVkRW5jb2Rlcjo6ZW5jb2RlQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29k
ZXI6OmVuY29kZUJvb2wpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZVVJ
bnQzMik6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlSW50MzIpOgorICAg
ICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUludDY0KToKKyAgICAgICAgKFdlYktp
dDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVGbG9hdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5j
b2Rlcjo6ZW5jb2RlRG91YmxlKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNv
ZGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmJlZ2luT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmRPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVu
Y29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVy
OjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuZEFy
cmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZyk6Cisg
ICAgICAgICogU2hhcmVkL2VmbC9LZXllZEVuY29kZXIuaDogQWRkZWQuCisKIDIwMTUtMDYtMTcg
IFlvbmdqdW4gWmhhbmcgIDx5b25nanVuX3poYW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBBbHNv
IHR1cm4gb2ZmIGxvbmcgcHJlc3Mgb24gbGluayBwcmV2aWV3LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL2VmbC9EYXRhYmFzZVByb2Nlc3NNYWluRWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9lZmwvRGF0YWJhc2VQcm9jZXNzTWFpbkVm
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGFkY2JmNjMwZjE1MmEzMzVmZGNhMjMyYzE5NjNjN2U0ZGEyYjFi
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9lZmwv
RGF0YWJhc2VQcm9jZXNzTWFpbkVmbC5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBOYXZlciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzTWFpblVuaXgu
aCIKKworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ2hpbGRQcm9j
ZXNzTWFpbi5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzcy5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERhdGFiYXNlUHJvY2Vz
c01haW4gZmluYWw6IHB1YmxpYyBDaGlsZFByb2Nlc3NNYWluQmFzZSB7CitwdWJsaWM6CisgICAg
Ym9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorfTsKKworaW50IERhdGFiYXNlUHJvY2Vzc01haW5Vbml4KGludCBhcmdj
LCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gQ2hpbGRQcm9jZXNzTWFpbjxEYXRhYmFzZVBy
b2Nlc3MsIERhdGFiYXNlUHJvY2Vzc01haW4+KGFyZ2MsIGFyZ3YpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCAzODk0OTFjMzAwMDAxMWMzOWZjMmU0NWUyZWE2OGIwMjM0
Y2VhZWQxLi45MWFiY2JmYzc2OWMxZjkyMGYxMDhiNWFjYjViNTdjY2EyOTFjMmUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMSw0ICsxLDYgQEAKIGxpc3QoQVBQRU5EIFdlYktpdDJf
U09VUkNFUworICAgIERhdGFiYXNlUHJvY2Vzcy9lZmwvRGF0YWJhc2VQcm9jZXNzTWFpbkVmbC5j
cHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJvY2Vzc01haW5FZmwuY3BwCiAK
ICAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNzU291cC5jcHAKQEAgLTM2LDYg
KzM4LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFyZWQvY2Fpcm8v
U2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCiAKKyAgICBTaGFyZWQvZWZsL0tleWVkRGVjb2Rlci5j
cHAKKyAgICBTaGFyZWQvZWZsL0tleWVkRW5jb2Rlci5jcHAKICAgICBTaGFyZWQvZWZsL05hdGl2
ZUNvbnRleHRNZW51SXRlbUVmbC5jcHAKICAgICBTaGFyZWQvZWZsL05hdGl2ZVdlYktleWJvYXJk
RXZlbnRFZmwuY3BwCiAgICAgU2hhcmVkL2VmbC9OYXRpdmVXZWJUb3VjaEV2ZW50RWZsLmNwcApA
QCAtMTIxLDYgKzEyNSw4IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXcuY3BwCiAgICAgVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvV2ViVmlld0NsaWVudC5jcHAKIAorICAgIFVJUHJvY2Vzcy9EYXRhYmFz
ZXMvZWZsL0RhdGFiYXNlUHJvY2Vzc1Byb3h5RWZsLmNwcAorCiAgICAgVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9lZmwvV2ViSW5zcGVjdG9yU2VydmVyRWZsLmNwcAogCiAgICAgVUlQcm9jZXNz
L0luc3BlY3RvclNlcnZlci9zb3VwL1dlYlNvY2tldFNlcnZlclNvdXAuY3BwCkBAIC0yMjgsNiAr
MjM0LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3gxMSIKICAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vbmV0d29yay9zb3VwIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0
L2VuY2hhbnQiCisgICAgIiR7V0VCS0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy91bml4IgogICAg
ICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9
L05ldHdvcmtQcm9jZXNzL3VuaXgiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1BsYXRmb3JtL2VmbCIK
QEAgLTI1Nyw2ICsyNjQsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJLSVQyX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MiCiAgICAgIiR7V1RGX0RJUn0vd3RmL2VmbCIKICAgICAiJHtXVEZfRElSfS93dGYvZ2xp
YiIKKyAgICAiJHtXVEZfRElSfSIKKyAgICAiJHtXRUJLSVQyX0RJUn0iCiApCiAKIGxpc3QoQVBQ
RU5EIFdlYktpdDJfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKQEAgLTMxMyw2ICszMjIsMTAg
QEAgbGlzdChBUFBFTkQgTmV0d29ya1Byb2Nlc3NfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNz
L0VudHJ5UG9pbnQvdW5peC9OZXR3b3JrUHJvY2Vzc01haW4uY3BwCiApCiAKK2xpc3QoQVBQRU5E
IERhdGFiYXNlUHJvY2Vzc19TT1VSQ0VTCisgICAgRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQv
dW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNwcAorKQorCiBsaXN0KEFQUEVORCBXZWJQcm9jZXNz
X0xJQlJBUklFUwogICAgICR7Q0FJUk9fTElCUkFSSUVTfQogICAgICR7RUNPUkVfSU1GX0VWQVNf
TElCUkFSSUVTfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jVGFzay5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0FzeW5jVGFzay5oCmluZGV4IDM2ZDg1M2M1YjllMDky
MGU5YzA1NTJhM2RjNmIzNjE3OGY2MDE2YzUuLjllZjg5ODQ3Y2E4YzJmMGEzNjI5YjU0NTFjMjEy
ZTkxZGYyYjA4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Bc3luY1Rhc2su
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXN5bmNUYXNrLmgKQEAgLTU2LDkgKzU2LDkg
QEAgY2xhc3MgQXN5bmNUYXNrSW1wbCBmaW5hbCA6IHB1YmxpYyBBc3luY1Rhc2sgewogcHVibGlj
OgogICAgIEFzeW5jVGFza0ltcGwoVCogY2FsbGVlLCB2b2lkIChUOjoqbWV0aG9kKShBcmd1bWVu
dHMuLi4pLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCiAgICAgewotICAgICAgICBtX3Rhc2tG
dW5jdGlvbiA9IFtjYWxsZWUsIG1ldGhvZCwgYXJndW1lbnRzLi4uXSB7Ci0gICAgICAgICAgICAo
Y2FsbGVlLT4qbWV0aG9kKShhcmd1bWVudHMuLi4pOwotICAgICAgICB9OworICAgICAgICAvLyBt
X3Rhc2tGdW5jdGlvbiA9IFtjYWxsZWUsIG1ldGhvZCwgYXJndW1lbnRzLi4uXSB7CisgICAgICAg
IC8vICAgICAoY2FsbGVlLT4qbWV0aG9kKShhcmd1bWVudHMuLi4pOworICAgICAgICAvLyB9Owog
ICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWRE
ZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWREZWNvZGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYTcwNjRhYWNjNWJjN2FhMmM3MjAzOTA5NmUwZWVjMzI4NWUzMjFiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9LZXllZERlY29kZXIuY3Bw
CkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IE5hdmVyIENvcnAu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJLZXllZERlY29kZXIuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK0tleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQoreworfQorCitLZXllZERlY29kZXI6On5LZXll
ZERlY29kZXIoKQoreworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlQnl0ZXMoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IHVpbnQ4X3QqJiBieXRlcywgc2l6ZV90JiBzaXplKQoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4KK2Jv
b2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYg
cmVzdWx0LCBGIGdldEZ1bmN0aW9uKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBL
ZXllZERlY29kZXI6OmRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHJlc3VsdCkK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50
MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBr
ZXksIGludDMyX3QmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS2V5
ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCYgcmVzdWx0
KQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUZs
b2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYgcmVzdWx0KQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtl
eSwgZG91YmxlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEtleWVk
RGVjb2Rlcjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHJlc3VsdCkK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbk9iamVj
dChjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgS2V5
ZWREZWNvZGVyOjplbmRPYmplY3QoKQoreworfQorCitib29sIEtleWVkRGVjb2Rlcjo6YmVnaW5B
cnJheShjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
S2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCgpCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIEtleWVkRGVjb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKK3sKK30KKwordm9pZCBL
ZXllZERlY29kZXI6OmVuZEFycmF5KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRGVjb2Rlci5oIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9LZXllZERlY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODVlNTQ4
MjdlNDc0ZGRlNzc2Y2NkYzY0ZDY3MzBlZjg4N2NkNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2VmbC9LZXllZERlY29kZXIuaApAQCAtMCwwICsxLDY2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IE5hdmVyIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgS2V5ZWREZWNvZGVyX2gKKyNkZWZpbmUgS2V5ZWREZWNvZGVy
X2gKKworI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEtleWVkRGVj
b2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZERlY29kZXIgeworcHVibGljOgorICAg
IEtleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QpOworICAgIHZpcnR1YWwg
fktleWVkRGVjb2RlcigpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBk
ZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdComLCBzaXplX3QmKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwg
Ym9vbCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVVSW50MzIoY29uc3QgU3Ry
aW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUlu
dDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBi
b29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCYpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXks
IGRvdWJsZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3Qg
U3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGJlZ2lu
T2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5k
T2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50
KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4gYm9vbCBkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJp
bmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKTsKKworICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gbV9hcnJheUluZGV4U3RhY2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEtleWVkRGVjb2Rlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
ZWZsL0tleWVkRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZWZsL0tleWVkRW5j
b2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjI5NzA5YTA0ZTEyYTg2YTBkNzBiMDY4ZGM1M2U2ZTE3ZTUz
ZGI5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWRF
bmNvZGVyLmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBO
YXZlciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWRFbmNvZGVyLmgiCisKKyNpbmNsdWRlIDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitLZXllZEVuY29kZXI6Oktl
eWVkRW5jb2RlcigpCit7Cit9CisKK0tleWVkRW5jb2Rlcjo6fktleWVkRW5jb2RlcigpCit7Cit9
CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgdWludDhfdCogYnl0ZXMsIHNpemVfdCBzaXplKQoreworfQorCit2b2lkIEtleWVkRW5jb2Rl
cjo6ZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCB2YWx1ZSkKK3sKK30KKwordm9p
ZCBLZXllZEVuY29kZXI6OmVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3Qg
dmFsdWUpCit7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQzMihjb25zdCBTdHJp
bmcmIGtleSwgaW50MzJfdCB2YWx1ZSkKK3sKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29k
ZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90IHZhbHVlKQoreworfQorCit2b2lkIEtl
eWVkRW5jb2Rlcjo6ZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0IHZhbHVlKQor
eworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5
LCBkb3VibGUgdmFsdWUpCit7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVTdHJpbmco
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cit9CisKK3ZvaWQgS2V5
ZWRFbmNvZGVyOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKK3sKK30KKwordm9pZCBL
ZXllZEVuY29kZXI6OmVuZE9iamVjdCgpCit7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdp
bkFycmF5KGNvbnN0IFN0cmluZyYga2V5KQoreworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6YmVn
aW5BcnJheUVsZW1lbnQoKQoreworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVt
ZW50KCkKK3sKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuZEFycmF5KCkKK3sKK30KKworUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IEtleWVkRW5jb2Rlcjo6ZmluaXNoRW5jb2RpbmcoKQorewor
ICAgIHJldHVybiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9lZmwvS2V5ZWRFbmNvZGVyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZWZsL0tleWVkRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1MGY5MDU0MzQwMWE0
Mzk3YmQzNDhiMzU1YmE3NDI4ODFmYWZkYjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZWZsL0tleWVkRW5jb2Rlci5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgTmF2ZXIgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBLZXllZEVuY29kZXJfaAorI2RlZmluZSBLZXllZEVuY29kZXJfaAorCisj
aW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIEtleWVkRW5jb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZEVuY29kZXIg
eworcHVibGljOgorICAgIEtleWVkRW5jb2RlcigpOworICAgIH5LZXllZEVuY29kZXIoKTsKKwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29k
aW5nKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVz
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWlu
dDMyX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJp
bmcmIGtleSwgaW50MzJfdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0
KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5jb2RlRG91YmxlKGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0
IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0
IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3Zl
cnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBLZXllZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0RhdGFiYXNlcy9lZmwvRGF0YWJhc2VQcm9jZXNzUHJveHlFZmwuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9lZmwvRGF0YWJhc2VQcm9jZXNzUHJveHlF
ZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk2ZWVkZWVhZjA4MTdlNTBhNTM2OTQ1NWFmZmJjZDk1OTM2MGVk
MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2Vz
L2VmbC9EYXRhYmFzZVByb2Nlc3NQcm94eUVmbC5jcHAKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBOYXZlciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzUHJv
eHkuaCIKKworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordm9pZCBEYXRhYmFzZVByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25z
KFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYpCit7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZs
LmNtYWtlCmluZGV4IGFkYTQ5ODhhNzQwNjhlNTFiZDE1NjgzMjE1ZGVhOGNlMGVkNmZhMmQuLjg5
ZTA4YzBhZTAzMGYwNDk5N2FlMjQ3MTZhYzAxZTgxZGRhM2Q3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNt
YWtlCkBAIC03Miw2ICs3Miw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVO
QUJMRV9DU1NfUkVHSU9OUyBQVUJMSUMgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9W
QUxVRShFTkFCTEVfQ1NTX1NDUk9MTF9TTkFQIFBVQkxJQyBPRkYpCiBXRUJLSVRfT1BUSU9OX0RF
RkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQgUFVCTElDIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NVU1RPTV9TQ0hFTUVfSEFO
RExFUiBQVUJMSUMgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
REFUQUJBU0VfUFJPQ0VTUyBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0RBVEFMSVNUX0VMRU1FTlQgUFVCTElDIE9OKQogV0VCS0lUX09QVElPTl9E
RUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0RPTTRfRVZFTlRTX0NPTlNUUlVDVE9SIFBVQkxJQyBP
TikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9ET1dOTE9BRF9BVFRS
SUJVVEUgUFVCTElDIE9OKQpAQCAtODQsNyArODUsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfR0FNRVBBRCBQVUJMSUMgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZB
VUxUX1BPUlRfVkFMVUUoRU5BQkxFX0dBTUVQQURfREVQUkVDQVRFRCBQVUJMSUMgT04pCiBXRUJL
SVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfR0VPTE9DQVRJT04gUFVCTElDIE9O
KQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0lOREVYRURfREFUQUJB
U0VfSU5fV09SS0VSUyBQVUJMSUMgT0ZGKQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFM
VUUoRU5BQkxFX0lOREVYRURfREFUQUJBU0UgUFVCTElDIE9GRikKK1dFQktJVF9PUFRJT05fREVG
QVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFIFBVQkxJQyBPTikKIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9JTlBVVF9UWVBFX0NPTE9SIFBVQkxJ
QyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9MSU5LX1BSRUZF
VENIIFBVQkxJQyBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9N
RURJQV9DQVBUVVJFIFBVQkxJQyBPTikKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBlMTA1NjA1OTcyNWYzNmNjNzA2MDM4OGVhZWFmY2RmMjk0MTYw
NTc0Li5mY2JhOWFiOTE5OGRkMGYwNGVlNGZhZjAwN2U2YmFhMTk2NGZkOWQzIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTUtMDYtMTcgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFtFRkxdIFN1cHBvcnQgaW5kZXhlZGRiIGZvciBXSzIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTg2NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1
cmVMaXN0LnBtOgorCiAyMDE1LTA2LTE3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0NvbnRlbnQgRXh0ZW5zaW9uc10gRmFpbCB0byBwYXJz
ZSBpbnZhbGlkIGFycmF5cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0Zl
YXR1cmVMaXN0LnBtIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRwZXJsL0ZlYXR1cmVMaXN0LnBtCmlu
ZGV4IGNhN2M3MTY3ZWNjZGI2NzBhMzA4M2U4ODI3MDdhMzVhZTJkMGE1MDAuLmYzNzdmOWZlZDA1
OWE2NDhkN2E4Y2JkZjk1MDBhZGI5NjE0OGJjYzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cGVybC9GZWF0dXJlTGlzdC5wbQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHBlcmwv
RmVhdHVyZUxpc3QucG0KQEAgLTI2Miw3ICsyNjIsNyBAQCBteSBAZmVhdHVyZXMgPSAoCiAgICAg
ICBkZWZpbmUgPT4gIkVOQUJMRV9JQ09OREFUQUJBU0UiLCBkZWZhdWx0ID0+ICFpc0lPU1dlYktp
dCgpLCB2YWx1ZSA9PiBcJGljb25kYXRhYmFzZVN1cHBvcnQgfSwKIAogICAgIHsgb3B0aW9uID0+
ICJpbmRleGVkLWRhdGFiYXNlIiwgZGVzYyA9PiAiVG9nZ2xlIEluZGV4ZWQgRGF0YWJhc2Ugc3Vw
cG9ydCIsCi0gICAgICBkZWZpbmUgPT4gIkVOQUJMRV9JTkRFWEVEX0RBVEFCQVNFIiwgZGVmYXVs
dCA9PiBpc0d0aygpLCB2YWx1ZSA9PiBcJGluZGV4ZWREYXRhYmFzZVN1cHBvcnQgfSwKKyAgICAg
IGRlZmluZSA9PiAiRU5BQkxFX0lOREVYRURfREFUQUJBU0UiLCBkZWZhdWx0ID0+IChpc0d0aygp
IHx8IGlzRWZsKCkpLCB2YWx1ZSA9PiBcJGluZGV4ZWREYXRhYmFzZVN1cHBvcnQgfSwKIAogICAg
IHsgb3B0aW9uID0+ICJpbnB1dC1zcGVlY2giLCBkZXNjID0+ICJUb2dnbGUgSW5wdXQgU3BlZWNo
IHN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfSU5QVVRfU1BFRUNIIiwgZGVmYXVs
dCA9PiAwLCB2YWx1ZSA9PiBcJGlucHV0U3BlZWNoU3VwcG9ydCB9LApkaWZmIC0tZ2l0IGEvQ2hh
bmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDVkZTIyZjYxNzI4MmVlNmIyNDg0ZDM0YjNjYjI4N2Fj
ZDlmZWMxYWYuLmEzN2Q2ZWY3MjI3ZjAyZDFkMzhmOWQyMDg4MmY2MTg4MjAwZDBmYmYgMTAwNjQ0
Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxNS0w
Ni0xNyAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
W0VGTF0gU3VwcG9ydCBpbmRleGVkZGIgZm9yIFdLMgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1ODY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZToK
KwogMjAxNS0wNi0xNiAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAbmF2ZXJjb3JwLmNvbT4KIAog
ICAgICAgICBbRUZMXSBSZW1vdmUgZHVwbGljYXRlZCBQVUJMSUMgYXJndW1lbnQgaW4gT3B0aW9u
c0VmbC5jbWFrZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256640</attachid>
            <date>2015-07-10 19:49:23 -0700</date>
            <delta_ts>2015-07-22 07:52:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145867-20150711114819.patch</filename>
            <type>text/plain</type>
            <size>46562</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2NjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDJlNmNiYzU1MzU4ZWQ3
MzFhOTRjNDk0YWUyZmQ5ZmM3ZjEzYjk0Ny4uY2VkNDNmOWIwYTg1OTRkMzgzZGM3NDA0NGJmOWM2
MzAzYjIxYTkzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE1LTA3LTEwICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBTdXBw
b3J0IGluZGV4ZWRkYiBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDU4NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgc3R1YiBpbXBsZW1lbnRhdGlvbiBmb3IgaW5kZXhlZGRiLiBNb3Zl
IEtleWVkRGVjb2RlciBhbmQgS2V5ZWRFbmNvZGVyIGZyb20gZ3RrIHRvIGdsaWIKKyAgICAgICAg
aW4gb3JkZXIgdG8gc2hhcmUgaXQgYmV0d2VlbiBHVEsgYW5kIEVGTCBwb3J0cy4KKworICAgICAg
ICAqIERhdGFiYXNlUHJvY2Vzcy9FbnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5j
cHA6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL2VmbC9EYXRhYmFzZVByb2Nlc3NNYWluRWZs
LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9p
bnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNwcC4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJh
c2VQcm9jZXNzTWFpblVuaXgpOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAg
ICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFNoYXJlZC9nbGliL0tleWVkRGVjb2Rl
ci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rl
ci5jcHAuCisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKToKKyAg
ICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjp+S2V5ZWREZWNvZGVyKToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWREZWNvZGVyOjpkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVCeXRlcyk6CisgICAgICAgIChXZWJLaXQ6OktleWVk
RGVjb2Rlcjo6ZGVjb2RlU2ltcGxlVmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29k
ZXI6OmRlY29kZUJvb2wpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZVVJ
bnQzMik6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlSW50MzIpOgorICAg
ICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDY0KToKKyAgICAgICAgKFdlYktp
dDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVGbG9hdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVj
b2Rlcjo6ZGVjb2RlRG91YmxlKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNv
ZGVTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmJlZ2luT2JqZWN0KToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjplbmRPYmplY3QpOgorICAgICAgICAoV2Vi
S2l0OjpLZXllZERlY29kZXI6OmJlZ2luQXJyYXkpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERl
Y29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVy
OjplbmRBcnJheUVsZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmVuZEFy
cmF5KToKKyAgICAgICAgKiBTaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmguCisgICAgICAgICogU2hh
cmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmNwcC4KKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVy
OjpLZXllZEVuY29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6On5LZXllZEVu
Y29kZXIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUJ5dGVzKToKKyAg
ICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVCb29sKToKKyAgICAgICAgKFdlYktp
dDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVu
Y29kZXI6OmVuY29kZUludDMyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNv
ZGVJbnQ2NCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlRmxvYXQpOgor
ICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZURvdWJsZSk6CisgICAgICAgIChX
ZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6S2V5
ZWRFbmNvZGVyOjpiZWdpbk9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6
ZW5kT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5KToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAg
ICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdl
YktpdDo6S2V5ZWRFbmNvZGVyOjplbmRBcnJheSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5j
b2Rlcjo6ZmluaXNoRW5jb2RpbmcpOgorICAgICAgICAqIFNoYXJlZC9nbGliL0tleWVkRW5jb2Rl
ci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIu
aC4KKyAgICAgICAgKiBVSVByb2Nlc3MvRGF0YWJhc2VzL2VmbC9EYXRhYmFzZVByb2Nlc3NQcm94
eUVmbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9FbnRy
eVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAuCisgICAgICAgIChXZWJLaXQ6OkRh
dGFiYXNlUHJvY2Vzc1Byb3h5OjpwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMpOgorCiAyMDE1LTA3
LTA5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0MiBw
YXJ0IG9mIFRyYWNrIGFuZCBleHBvc2UgcG9saWNpZXMgZm9yIGV4dGVybmFsIFVSTCBzY2hlbWVz
IGFuZCBBcHAgTGlua3Mgc2VwYXJhdGVseQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9FbnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9j
ZXNzTWFpbi5jcHAKaW5kZXggMWQ1NTIyYjRjZDI0ZDAyZjAxNzRhNmM5NzNlMjQ2ZTgyMTRmZDE5
Mi4uOWQ4YjgxODM4OGE3ZDEyZDg0OTgwMmFkOGU1ZGIwOTA1MGNkODNjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVBy
b2Nlc3NNYWluLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRW50cnlQ
b2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc01haW5Vbml4LmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvZWZs
L0RhdGFiYXNlUHJvY2Vzc01haW5FZmwuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL2VmbC9EYXRhYmFzZVByb2Nlc3NNYWluRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNGExMmNlYTcw
Nzg5ZjQ3NDgxMGFhMmJjYjI1ZjQwZTA4ZGZlMTQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL2VmbC9EYXRhYmFzZVByb2Nlc3NNYWluRWZsLmNwcApA
QCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IE5hdmVyIENvcnAuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJEYXRhYmFzZVByb2Nlc3MuaCIKKworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiQ2hpbGRQcm9jZXNzTWFpbi5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vz
c01haW5Vbml4LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgRGF0YWJhc2VQcm9jZXNzTWFpbiBmaW5hbDogcHVibGljIENoaWxkUHJv
Y2Vzc01haW5CYXNlIHsKK3B1YmxpYzoKKyAgICBib29sIHBsYXRmb3JtSW5pdGlhbGl6ZSgpIG92
ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitpbnQgRGF0
YWJhc2VQcm9jZXNzTWFpblVuaXgoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIHJldHVy
biBDaGlsZFByb2Nlc3NNYWluPERhdGFiYXNlUHJvY2VzcywgRGF0YWJhc2VQcm9jZXNzTWFpbj4o
YXJnYywgYXJndik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDljMWNk
ODE0NTA3M2VkMTBiNTc2ZWQ0Y2Y2ZjM5YWYzNWQzODNlMjguLjA0MmJjZjY1ZWViMGNmMjQyNWE3
NzgzOTk4ZjUyMzk0NDAyZjU5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xLDQg
KzEsNiBAQAogbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCisgICAgRGF0YWJhc2VQcm9jZXNz
L2VmbC9EYXRhYmFzZVByb2Nlc3NNYWluRWZsLmNwcAorCiAgICAgTmV0d29ya1Byb2Nlc3MvZWZs
L05ldHdvcmtQcm9jZXNzTWFpbkVmbC5jcHAKIAogICAgIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtNDMsNiArNDUsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKICAgICBTaGFyZWQvZWZsL1Byb2Nlc3NFeGVjdXRhYmxlUGF0aEVmbC5jcHAKICAg
ICBTaGFyZWQvZWZsL1dlYkV2ZW50RmFjdG9yeS5jcHAKIAorICAgIFNoYXJlZC9nbGliL0tleWVk
RGVjb2Rlci5jcHAKKyAgICBTaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuY3BwCisKICAgICBTaGFy
ZWQvbGludXgvV2ViTWVtb3J5U2FtcGxlckxpbnV4LmNwcAogCiAgICAgU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzL09wZW5TeXNjYWxsLmNwcApAQCAtMTIxLDYgKzEyNiw4IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dl
YlZpZXcuY3BwCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViVmlld0NsaWVu
dC5jcHAKIAorICAgIFVJUHJvY2Vzcy9EYXRhYmFzZXMvZWZsL0RhdGFiYXNlUHJvY2Vzc1Byb3h5
RWZsLmNwcAorCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9lZmwvV2ViSW5zcGVjdG9y
U2VydmVyRWZsLmNwcAogCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9zb3VwL1dlYlNv
Y2tldFNlcnZlclNvdXAuY3BwCkBAIC0yMjgsNiArMjM1LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0
Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL3gxMSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwIgogICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQiCisgICAgIiR7V0VCS0lUMl9E
SVJ9L0RhdGFiYXNlUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJv
Y2Vzcy9lZmwiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L05ldHdvcmtQcm9jZXNzL3VuaXgiCiAgICAg
IiR7V0VCS0lUMl9ESVJ9L1BsYXRmb3JtL2VmbCIKQEAgLTI1Nyw2ICsyNjUsOCBAQCBsaXN0KEFQ
UEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVQyX0RJUn0vV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCiAgICAgIiR7V1RGX0RJUn0vd3Rm
L2VmbCIKICAgICAiJHtXVEZfRElSfS93dGYvZ2xpYiIKKyAgICAiJHtXVEZfRElSfSIKKyAgICAi
JHtXRUJLSVQyX0RJUn0iCiApCiAKIGxpc3QoQVBQRU5EIFdlYktpdDJfU1lTVEVNX0lOQ0xVREVf
RElSRUNUT1JJRVMKQEAgLTMxMyw2ICszMjMsMTAgQEAgbGlzdChBUFBFTkQgTmV0d29ya1Byb2Nl
c3NfU09VUkNFUwogICAgIE5ldHdvcmtQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9OZXR3b3JrUHJv
Y2Vzc01haW4uY3BwCiApCiAKK2xpc3QoQVBQRU5EIERhdGFiYXNlUHJvY2Vzc19TT1VSQ0VTCisg
ICAgRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9EYXRhYmFzZVByb2Nlc3NNYWluLmNw
cAorKQorCiBsaXN0KEFQUEVORCBXZWJQcm9jZXNzX0xJQlJBUklFUwogICAgICR7Q0FJUk9fTElC
UkFSSUVTfQogICAgICR7RUNPUkVfSU1GX0VWQVNfTElCUkFSSUVTfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUdU
Sy5jbWFrZQppbmRleCA0NjExODNiZmZmY2QwMTZjOTc3YzBjMzFmN2E0NDgzOGYyZjI4OTYyLi42
M2M2M2FiNTg3YWY0ZTM0MDg5MzZjNDRjMTc0NjllNjJmMjE2YzQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUdUSy5jbWFrZQpAQCAtNTcsOSArNTcsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMK
IAogICAgIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKIAorICAgIFNoYXJl
ZC9nbGliL0tleWVkRGVjb2Rlci5jcHAKKyAgICBTaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuY3Bw
CiAgICAgU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKLSAgICBTaGFyZWQvZ3RrL0tl
eWVkRGVjb2Rlci5jcHAKLSAgICBTaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5jcHAKICAgICBTaGFy
ZWQvZ3RrL05hdGl2ZUNvbnRleHRNZW51SXRlbUd0ay5jcHAKICAgICBTaGFyZWQvZ3RrL05hdGl2
ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2
ZW50R3RrLmNwcApAQCAtNDcwLDYgKzQ3MCw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVE
RV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVDJfRElSfS9TaGFyZWQvQVBJL2MvZ3RrIgogICAg
ICIke1dFQktJVDJfRElSfS9TaGFyZWQvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvc291cCIKICAg
ICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL0Rvd25sb2Fkcy9zb3VwIgorICAgICIke1dFQktJVDJf
RElSfS9TaGFyZWQvZ2xpYiIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2d0ayIKICAgICAi
JHtXRUJLSVQyX0RJUn0vU2hhcmVkL3NvdXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC91
bml4IgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2QyMGQ5MDY2OTQ0MDFiNmVjMmIzMTZlMGZhYWJlNzllN2MyY2Y0ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5jcHAKQEAg
LTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktleWVkRGVjb2Rlci5oIgor
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
S2V5ZWREZWNvZGVyOjpLZXllZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNp
emUpCit7CisgICAgR1JlZlB0cjxHQnl0ZXM+IGJ5dGVzID0gYWRvcHRHUmVmKGdfYnl0ZXNfbmV3
KGRhdGEsIHNpemUpKTsKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gZ192YXJpYW50
X25ld19mcm9tX2J5dGVzKEdfVkFSSUFOVF9UWVBFKCJhe3N2fSIpLCBieXRlcy5nZXQoKSwgVFJV
RSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQo
dmFyaWFudC5nZXQoKSkpOworfQorCitLZXllZERlY29kZXI6On5LZXllZERlY29kZXIoKQorewor
ICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKG1f
YXJyYXlTdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2FycmF5SW5kZXhTdGFjay5pc0Vt
cHR5KCkpOworfQorCitIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IEtleWVkRGVj
b2Rlcjo6ZGljdGlvbmFyeUZyb21HVmFyaWFudChHVmFyaWFudCogdmFyaWFudCkKK3sKKyAgICBI
YXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnk7CisgICAgR1Zhcmlh
bnRJdGVyIGl0ZXI7CisgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgdmFyaWFudCk7Cisg
ICAgY29uc3QgY2hhcioga2V5OworICAgIEdWYXJpYW50KiB2YWx1ZTsKKyAgICB3aGlsZSAoZ192
YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkKKyAgICAgICAg
ZGljdGlvbmFyeS5zZXQoU3RyaW5nOjpmcm9tVVRGOChrZXkpLCB2YWx1ZSk7CisgICAgcmV0dXJu
IFdURjo6bW92ZShkaWN0aW9uYXJ5KTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZUJ5
dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMsIHNpemVfdCYgc2l6
ZSkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzaXplID0gZ192YXJpYW50X2dldF9zaXplKHZhbHVlLmdldCgpKTsKKyAgICBieXRlcyA9
IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX3ZhcmlhbnRfZ2V0X2RhdGEodmFsdWUuZ2V0
KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgRj4KK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcm
IGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+
IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFs
dWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdldEZ1bmN0aW9uKHZh
bHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRl
Y29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4g
ZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfYm9vbGVhbik7Cit9
CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVp
bnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVz
dWx0LCBnX3ZhcmlhbnRfZ2V0X3VpbnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNv
ZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQoreworICAgIHJldHVy
biBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9pbnQzMik7Cit9
CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50
NjRfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3Vs
dCwgZ192YXJpYW50X2dldF9pbnQ2NCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVG
bG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gZGVj
b2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfZG91YmxlKTsKK30KKwor
Ym9vbCBLZXllZERlY29kZXI6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91Ymxl
JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBn
X3ZhcmlhbnRfZ2V0X2RvdWJsZSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTdHJp
bmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgcmVzdWx0KQoreworICAgIEdSZWZQdHI8R1Zh
cmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlm
ICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IFN0cmluZzo6
ZnJvbVVURjgoZ192YXJpYW50X2dldF9zdHJpbmcodmFsdWUuZ2V0KCksIG51bGxwdHIpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJlZ2luT2JqZWN0KGNvbnN0
IFN0cmluZyYga2V5KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9u
YXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5RnJvbUdW
YXJpYW50KHZhbHVlLmdldCgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgS2V5ZWRE
ZWNvZGVyOjplbmRPYmplY3QoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3Qo
KTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkp
Cit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0
KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV9hcnJheVN0YWNrLmFwcGVuZCh2YWx1ZS5nZXQoKSk7CisgICAgbV9hcnJheUluZGV4U3Rh
Y2suYXBwZW5kKDApOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVkRGVjb2Rlcjo6
YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIGlmIChtX2FycmF5SW5kZXhTdGFjay5sYXN0KCkg
Pj0gZ192YXJpYW50X25fY2hpbGRyZW4obV9hcnJheVN0YWNrLmxhc3QoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBhZG9wdEdSZWYo
Z192YXJpYW50X2dldF9jaGlsZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLCBtX2FycmF5SW5k
ZXhTdGFjay5sYXN0KCkrKykpOworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9u
YXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBLZXllZERlY29kZXI6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9kaWN0aW9uYXJ5
U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2Rlcjo6ZW5kQXJyYXkoKQor
eworICAgIG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9hcnJheUluZGV4U3RhY2su
cmVtb3ZlTGFzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGViMWM2MTMyYzg2ZWU0YmIy
N2MwMDNiZTAyM2Y5ZmEzOGZiMTg0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgSWdhaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtleWVkRGVjb2Rl
cl9oCisjZGVmaW5lIEtleWVkRGVjb2Rlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29k
aW5nLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIEtleWVkRGVjb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZERlY29k
ZXIgeworcHVibGljOgorICAgIEtleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBkYXRhLCBzaXpl
X3QpOworICAgIHZpcnR1YWwgfktleWVkRGVjb2RlcigpIG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWlu
dDhfdComLCBzaXplX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlQm9vbChj
b25zdCBTdHJpbmcmIGtleSwgYm9vbCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2
NF90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNvbnN0IFN0cmlu
ZyYga2V5LCBmbG9hdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVEb3VibGUo
Y29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBk
ZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRlOworCisgICAg
dmlydHVhbCBib29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wg
YmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29s
IGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5
RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRl
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4gYm9vbCBkZWNvZGVTaW1w
bGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnlGcm9tR1Zhcmlh
bnQoR1ZhcmlhbnQqKTsKKworICAgIFZlY3RvcjxIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFy
aWFudD4+PiBtX2RpY3Rpb25hcnlTdGFjazsKKyAgICBWZWN0b3I8R1ZhcmlhbnQqLCAxNj4gbV9h
cnJheVN0YWNrOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9hcnJheUluZGV4U3RhY2s7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEtleWVkRGVjb2Rlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2Rm
ZDhkMGE0MjQ2OWQ5NTk3OGQ0MTIzMTFjMDI3Yzk1YTMwYzNiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcApAQCAtMCwwICsxLDEz
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWRFbmNvZGVyLmgiCisKKyNpbmNsdWRl
IDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitLZXll
ZEVuY29kZXI6OktleWVkRW5jb2RlcigpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfaW5pdCgm
bV92YXJpYW50QnVpbGRlciwgR19WQVJJQU5UX1RZUEUoImF7c3Z9IikpOworICAgIG1fdmFyaWFu
dEJ1aWxkZXJTdGFjay5hcHBlbmQoJm1fdmFyaWFudEJ1aWxkZXIpOworfQorCitLZXllZEVuY29k
ZXI6On5LZXllZEVuY29kZXIoKQoreworICAgIEFTU0VSVChtX3ZhcmlhbnRCdWlsZGVyU3RhY2su
c2l6ZSgpID09IDEpOworICAgIEFTU0VSVChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpID09
ICZtX3ZhcmlhbnRCdWlsZGVyKTsKKyAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7
CisgICAgQVNTRVJUKG1fb2JqZWN0U3RhY2suaXNFbXB0eSgpKTsKK30KKwordm9pZCBLZXllZEVu
Y29kZXI6OmVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiBieXRl
cywgc2l6ZV90IHNpemUpCit7CisgICAgR1JlZlB0cjxHQnl0ZXM+IGdCeXRlcyA9IGFkb3B0R1Jl
ZihnX2J5dGVzX25ld19zdGF0aWMoYnl0ZXMsIHNpemUpKTsKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRh
dGEoKSwgZ192YXJpYW50X25ld19mcm9tX2J5dGVzKEdfVkFSSUFOVF9UWVBFKCJheSIpLCBnQnl0
ZXMuZ2V0KCksIFRSVUUpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUJvb2woY29u
c3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRk
KG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCks
IGdfdmFyaWFudF9uZXdfYm9vbGVhbih2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6
ZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0i
LCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld191aW50MzIodmFsdWUpKTsKK30KKwor
dm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90
IHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3Rh
Y2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2ludDMy
KHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQ2NChjb25zdCBTdHJp
bmcmIGtleSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92
YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192
YXJpYW50X25ld19pbnQ2NCh2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2Rl
RmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0IHZhbHVlKQoreworICAgIGVuY29kZURvdWJs
ZShrZXksIHZhbHVlKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZURvdWJsZShjb25z
dCBTdHJpbmcmIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgp
LCBnX3ZhcmlhbnRfbmV3X2RvdWJsZSh2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6
ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAi
e3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyh2YWx1ZS51dGY4
KCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbk9iamVjdChjb25zdCBT
dHJpbmcmIGtleSkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4gYnVpbGRlciA9IGFk
b3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIpKSk7
CisgICAgbV9vYmplY3RTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoa2V5LCBidWlsZGVyKSk7
CisgICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZChidWlsZGVyLmdldCgpKTsKK30KKwor
dm9pZCBLZXllZEVuY29kZXI6OmVuZE9iamVjdCgpCit7CisgICAgR1ZhcmlhbnRCdWlsZGVyKiBi
dWlsZGVyID0gbV92YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCk7CisgICAgZ192YXJpYW50
X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9IiwgbV9vYmpl
Y3RTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5k
KGJ1aWxkZXIpKTsKKyAgICBtX29iamVjdFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBL
ZXllZEVuY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7CisgICAgbV9hcnJh
eVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXksIGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVp
bGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIpKSkpKTsKK30KKwordm9pZCBLZXllZEVu
Y29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKK3sKKyAgICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2su
YXBwZW5kKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSkpOwor
fQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKK3sKKyAgICBHUmVmUHRy
PEdWYXJpYW50QnVpbGRlcj4gdmFyaWFudEJ1aWxkZXIgPSBhZG9wdEdSZWYobV92YXJpYW50QnVp
bGRlclN0YWNrLnRha2VMYXN0KCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZF92YWx1ZSht
X2FycmF5U3RhY2subGFzdCgpLnNlY29uZC5nZXQoKSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKHZh
cmlhbnRCdWlsZGVyLmdldCgpKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmRBcnJheSgp
Cit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0
KCksICJ7c3Z9IiwgbV9hcnJheVN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCkuZGF0YSgpLCBnX3Zh
cmlhbnRfYnVpbGRlcl9lbmQobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNvbmQuZ2V0KCkpKTsKKyAg
ICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gS2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZygpCit7CisgICAgZ19hc3NlcnQobV92YXJp
YW50QnVpbGRlclN0YWNrLmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7CisgICAgR1JlZlB0
cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9idWlsZGVyX2VuZCgmbV92YXJpYW50QnVp
bGRlcik7CisgICAgR1JlZlB0cjxHQnl0ZXM+IGRhdGEgPSBnX3ZhcmlhbnRfZ2V0X2RhdGFfYXNf
Ynl0ZXModmFyaWFudC5nZXQoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihnX2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0
KCksIG51bGxwdHIpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdfYnl0ZXNfZ2V0X3NpemUoZGF0
YS5nZXQoKSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9nbGliL0tleWVkRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYmI3NmIyZmI4MTkxMDI0MmQy
YWI5M2RiM2YzMTA5NDIwYTZiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgS2V5ZWRFbmNvZGVy
X2gKKyNkZWZpbmUgS2V5ZWRFbmNvZGVyX2gKKworI2luY2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2Rp
bmcuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEtleWVkRW5jb2RlciBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpLZXllZEVuY29kZXIgeworcHVibGljOgorICAgIEtleWVkRW5jb2RlcigpOwor
ICAgIH5LZXllZEVuY29kZXIoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90
Kiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9vbChjb25zdCBT
dHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZVVJbnQz
Mihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9p
ZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2NF90KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZs
b2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRG91YmxlKGNvbnN0IFN0cmlu
ZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVTdHJpbmco
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAgdmlydHVh
bCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5B
cnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGJlZ2lu
QXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFycmF5RWxlbWVu
dCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJyaWRlOworCisg
ICAgR1ZhcmlhbnRCdWlsZGVyIG1fdmFyaWFudEJ1aWxkZXI7CisgICAgVmVjdG9yPEdWYXJpYW50
QnVpbGRlciosIDE2PiBtX3ZhcmlhbnRCdWlsZGVyU3RhY2s7CisgICAgVmVjdG9yPHN0ZDo6cGFp
cjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX2FycmF5U3RhY2s7Cisg
ICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2
PiBtX29iamVjdFN0YWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBLZXllZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9L
ZXllZERlY29kZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDIwZDkwNjY5NDQwMWI2ZWMyYjMx
NmUwZmFhYmU3OWU3YzJjZjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVyLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLZXll
ZERlY29kZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLUtleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4X3QqIGRh
dGEsIHNpemVfdCBzaXplKQotewotICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9IGFkb3B0R1Jl
ZihnX2J5dGVzX25ldyhkYXRhLCBzaXplKSk7Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFu
dCA9IGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgiYXtzdn0iKSwgYnl0
ZXMuZ2V0KCksIFRSVUUpOwotICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9uYXJ5
RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKLX0KLQotS2V5ZWREZWNvZGVyOjp+S2V5ZWRE
ZWNvZGVyKCkKLXsKLSAgICBBU1NFUlQobV9kaWN0aW9uYXJ5U3RhY2suc2l6ZSgpID09IDEpOwot
ICAgIEFTU0VSVChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQobV9hcnJheUlu
ZGV4U3RhY2suaXNFbXB0eSgpKTsKLX0KLQotSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1Zhcmlh
bnQ+PiBLZXllZERlY29kZXI6OmRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1ZhcmlhbnQqIHZhcmlh
bnQpCi17Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBkaWN0aW9uYXJ5
OwotICAgIEdWYXJpYW50SXRlciBpdGVyOwotICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIs
IHZhcmlhbnQpOwotICAgIGNvbnN0IGNoYXIqIGtleTsKLSAgICBHVmFyaWFudCogdmFsdWU7Ci0g
ICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZrZXksICZ2YWx1
ZSkpCi0gICAgICAgIGRpY3Rpb25hcnkuc2V0KFN0cmluZzo6ZnJvbVVURjgoa2V5KSwgdmFsdWUp
OwotICAgIHJldHVybiBXVEY6Om1vdmUoZGljdGlvbmFyeSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNv
ZGVyOjpkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhfdComIGJ5dGVz
LCBzaXplX3QmIHNpemUpCi17Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rp
b25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgc2l6ZSA9IGdfdmFyaWFudF9nZXRfc2l6ZSh2YWx1ZS5nZXQoKSk7
Ci0gICAgYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ192YXJpYW50X2dldF9k
YXRhKHZhbHVlLmdldCgpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEY+Ci1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlU2ltcGxlVmFsdWUo
Y29uc3QgU3RyaW5nJiBrZXksIFQmIHJlc3VsdCwgRiBnZXRGdW5jdGlvbikKLXsKLSAgICBHUmVm
UHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsK
LSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1bHQgPSBn
ZXRGdW5jdGlvbih2YWx1ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5
ZWREZWNvZGVyOjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJiByZXN1bHQpCi17
Ci0gICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0
X2Jvb2xlYW4pOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlVUludDMyKGNvbnN0IFN0
cmluZyYga2V5LCB1aW50MzJfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVTaW1wbGVW
YWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF91aW50MzIpOwotfQotCi1ib29sIEtleWVk
RGVjb2Rlcjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3QmIHJlc3VsdCkK
LXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9n
ZXRfaW50MzIpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50NjQoY29uc3QgU3Ry
aW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFs
dWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfaW50NjQpOwotfQotCi1ib29sIEtleWVkRGVj
b2Rlcjo6ZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0JiByZXN1bHQpCi17Ci0g
ICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2Rv
dWJsZSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVEb3VibGUoY29uc3QgU3RyaW5n
JiBrZXksIGRvdWJsZSYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShr
ZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9kb3VibGUpOwotfQotCi1ib29sIEtleWVkRGVjb2Rl
cjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHJlc3VsdCkKLXsKLSAg
ICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQo
a2V5KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXN1
bHQgPSBTdHJpbmc6OmZyb21VVEY4KGdfdmFyaWFudF9nZXRfc3RyaW5nKHZhbHVlLmdldCgpLCBu
dWxscHRyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpiZWdp
bk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1
ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKLSAgICBpZiAoIXZhbHVlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2RpY3Rpb25hcnlTdGFjay5hcHBlbmQoZGlj
dGlvbmFyeUZyb21HVmFyaWFudCh2YWx1ZS5nZXQoKSkpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEtleWVkRGVjb2Rlcjo6ZW5kT2JqZWN0KCkKLXsKLSAgICBtX2RpY3Rpb25hcnlTdGFj
ay5yZW1vdmVMYXN0KCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5KGNvbnN0
IFN0cmluZyYga2V5KQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9u
YXJ5U3RhY2subGFzdCgpLmdldChrZXkpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG1fYXJyYXlTdGFjay5hcHBlbmQodmFsdWUuZ2V0KCkpOwotICAgIG1f
YXJyYXlJbmRleFN0YWNrLmFwcGVuZCgwKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBL
ZXllZERlY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKLXsKLSAgICBpZiAobV9hcnJheUluZGV4
U3RhY2subGFzdCgpID49IGdfdmFyaWFudF9uX2NoaWxkcmVuKG1fYXJyYXlTdGFjay5sYXN0KCkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50
ID0gYWRvcHRHUmVmKGdfdmFyaWFudF9nZXRfY2hpbGRfdmFsdWUobV9hcnJheVN0YWNrLmxhc3Qo
KSwgbV9hcnJheUluZGV4U3RhY2subGFzdCgpKyspKTsKLSAgICBtX2RpY3Rpb25hcnlTdGFjay5h
cHBlbmQoZGljdGlvbmFyeUZyb21HVmFyaWFudCh2YXJpYW50LmdldCgpKSk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJheUVsZW1lbnQoKQotewotICAg
IG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBLZXllZERlY29kZXI6
OmVuZEFycmF5KCkKLXsKLSAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIG1fYXJy
YXlJbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGViMWM2MTMyYzg2ZWU0YmIyN2MwMDNiZTAyM2Y5ZmEzOGZiMTg0NS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FpYSBTLkwuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgS2V5ZWREZWNvZGVyX2gKLSNkZWZpbmUgS2V5ZWREZWNvZGVyX2gKLQotI2luY2x1ZGUgPFdl
YkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgS2V5ZWREZWNvZGVyIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OktleWVkRGVjb2RlciB7Ci1wdWJsaWM6Ci0gICAgS2V5ZWREZWNvZGVyKGNvbnN0IHVpbnQ4
X3QqIGRhdGEsIHNpemVfdCk7Ci0gICAgdmlydHVhbCB+S2V5ZWREZWNvZGVyKCkgb3ZlcnJpZGU7
Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCB1aW50OF90KiYsIHNpemVfdCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9v
bCBkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIGRlY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QmKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGlu
dDMyX3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50NjQoY29uc3QgU3Ry
aW5nJiBrZXksIGludDY0X3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlRmxv
YXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IGRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIGRlY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJikgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5PYmplY3QoY29uc3QgU3RyaW5nJiBrZXkp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSBvdmVycmlkZTsKLQotICAg
IHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZW5kQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFy
cmF5KCkgb3ZlcnJpZGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBGPiBi
b29sIGRlY29kZVNpbXBsZVZhbHVlKGNvbnN0IFN0cmluZyYga2V5LCBUJiByZXN1bHQsIEYgZ2V0
RnVuY3Rpb24pOwotICAgIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4gZGljdGlv
bmFyeUZyb21HVmFyaWFudChHVmFyaWFudCopOwotCi0gICAgVmVjdG9yPEhhc2hNYXA8U3RyaW5n
LCBHUmVmUHRyPEdWYXJpYW50Pj4+IG1fZGljdGlvbmFyeVN0YWNrOwotICAgIFZlY3RvcjxHVmFy
aWFudCosIDE2PiBtX2FycmF5U3RhY2s7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBtX2FycmF5SW5k
ZXhTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gS2V5ZWRE
ZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNv
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVyLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkZmQ4ZDBhNDI0NjlkOTU5NzhkNDEyMzExYzAy
N2M5NWEzMGMzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5ZWRFbmNvZGVy
LmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotCi1LZXllZEVuY29kZXI6OktleWVkRW5jb2RlcigpCi17Ci0gICAgZ192YXJpYW50
X2J1aWxkZXJfaW5pdCgmbV92YXJpYW50QnVpbGRlciwgR19WQVJJQU5UX1RZUEUoImF7c3Z9Iikp
OwotICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoJm1fdmFyaWFudEJ1aWxkZXIpOwot
fQotCi1LZXllZEVuY29kZXI6On5LZXllZEVuY29kZXIoKQotewotICAgIEFTU0VSVChtX3Zhcmlh
bnRCdWlsZGVyU3RhY2suc2l6ZSgpID09IDEpOwotICAgIEFTU0VSVChtX3ZhcmlhbnRCdWlsZGVy
U3RhY2subGFzdCgpID09ICZtX3ZhcmlhbnRCdWlsZGVyKTsKLSAgICBBU1NFUlQobV9hcnJheVN0
YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RhY2suaXNFbXB0eSgpKTsKLX0K
LQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCB1aW50OF90KiBieXRlcywgc2l6ZV90IHNpemUpCi17Ci0gICAgR1JlZlB0cjxHQnl0ZXM+IGdC
eXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ld19zdGF0aWMoYnl0ZXMsIHNpemUpKTsKLSAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0i
LCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19mcm9tX2J5dGVzKEdfVkFSSUFOVF9U
WVBFKCJheSIpLCBnQnl0ZXMuZ2V0KCksIFRSVUUpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6
OmVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCi17Ci0gICAgZ192YXJp
YW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5
LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfYm9vbGVhbih2YWx1ZSkpOwotfQotCi12b2lk
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCB2
YWx1ZSkKLXsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNr
Lmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld191aW50MzIo
dmFsdWUpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUludDMyKGNvbnN0IFN0cmlu
ZyYga2V5LCBpbnQzMl90IHZhbHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3Zh
cmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3Zh
cmlhbnRfbmV3X2ludDMyKHZhbHVlKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJ
bnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCB2YWx1ZSkKLXsKLSAgICBnX3ZhcmlhbnRf
YnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRm
OCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19pbnQ2NCh2YWx1ZSkpOwotfQotCi12b2lkIEtleWVk
RW5jb2Rlcjo6ZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0IHZhbHVlKQotewot
ICAgIGVuY29kZURvdWJsZShrZXksIHZhbHVlKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVu
Y29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlIHZhbHVlKQotewotICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtl
eS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2RvdWJsZSh2YWx1ZSkpOwotfQotCi12b2lk
IEtleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVy
U3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X3N0
cmluZyh2YWx1ZS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdp
bk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBHUmVmUHRyPEdWYXJpYW50QnVpbGRl
cj4gYnVpbGRlciA9IGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZ
UEUoImFhe3N2fSIpKSk7Ci0gICAgbV9vYmplY3RTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIo
a2V5LCBidWlsZGVyKSk7Ci0gICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZChidWlsZGVy
LmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuZE9iamVjdCgpCi17Ci0gICAgR1Zh
cmlhbnRCdWlsZGVyKiBidWlsZGVyID0gbV92YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCk7
Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCks
ICJ7c3Z9IiwgbV9vYmplY3RTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgpLmRhdGEoKSwgZ192YXJp
YW50X2J1aWxkZXJfZW5kKGJ1aWxkZXIpKTsKLSAgICBtX29iamVjdFN0YWNrLnJlbW92ZUxhc3Qo
KTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkp
Ci17Ci0gICAgbV9hcnJheVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXksIGFkb3B0R1Jl
ZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIpKSkpKTsKLX0K
LQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKLXsKLSAgICBtX3Zhcmlh
bnRCdWlsZGVyU3RhY2suYXBwZW5kKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQ
RSgiYXtzdn0iKSkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkK
LXsKLSAgICBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4gdmFyaWFudEJ1aWxkZXIgPSBhZG9wdEdS
ZWYobV92YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCkpOwotICAgIGdfdmFyaWFudF9idWls
ZGVyX2FkZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLnNlY29uZC5nZXQoKSwgZ192YXJpYW50
X2J1aWxkZXJfZW5kKHZhcmlhbnRCdWlsZGVyLmdldCgpKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNv
ZGVyOjplbmRBcnJheSgpCi17Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1
aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9IiwgbV9hcnJheVN0YWNrLmxhc3QoKS5maXJzdC51dGY4
KCkuZGF0YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNv
bmQuZ2V0KCkpKTsKLSAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCi1QYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gS2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZygpCi17Ci0gICAg
Z19hc3NlcnQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRl
cik7Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9idWlsZGVyX2Vu
ZCgmbV92YXJpYW50QnVpbGRlcik7Ci0gICAgR1JlZlB0cjxHQnl0ZXM+IGRhdGEgPSBnX3Zhcmlh
bnRfZ2V0X2RhdGFfYXNfYnl0ZXModmFyaWFudC5nZXQoKSk7Ci0gICAgcmV0dXJuIFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihnX2J5dGVzX2dl
dF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdfYnl0
ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5oIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYWNiYjc2YjJmYjgxOTEwMjQyZDJhYjkzZGIzZjMxMDk0MjBhNmJiZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEtleWVkRW5jb2Rlcl9oCi0jZGVmaW5lIEtleWVkRW5jb2Rlcl9oCi0KLSNpbmNsdWRlIDxX
ZWJDb3JlL0tleWVkQ29kaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBLZXllZEVuY29k
ZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWRFbmNvZGVyIHsKLXB1YmxpYzoKLSAgICBL
ZXllZEVuY29kZXIoKTsKLSAgICB+S2V5ZWRFbmNvZGVyKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBmaW5pc2hFbmNvZGluZygpIG92ZXJyaWRlOwot
Ci1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgdWludDhfdCosIHNpemVfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVu
Y29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBlbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90KSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3Qp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtl
eSwgaW50NjRfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUZsb2F0KGNvbnN0
IFN0cmluZyYga2V5LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZURv
dWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmKSBvdmVycmlk
ZTsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOwotCi0gICAgdmly
dHVhbCB2b2lkIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXko
KSBvdmVycmlkZTsKLQotICAgIEdWYXJpYW50QnVpbGRlciBtX3ZhcmlhbnRCdWlsZGVyOwotICAg
IFZlY3RvcjxHVmFyaWFudEJ1aWxkZXIqLCAxNj4gbV92YXJpYW50QnVpbGRlclN0YWNrOwotICAg
IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4+LCAxNj4g
bV9hcnJheVN0YWNrOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJp
YW50QnVpbGRlcj4+LCAxNj4gbV9vYmplY3RTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YktpdAotCi0jZW5kaWYgLy8gS2V5ZWRFbmNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9EYXRhYmFzZXMvZWZsL0RhdGFiYXNlUHJvY2Vzc1Byb3h5RWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EYXRhYmFzZXMvZWZsL0RhdGFiYXNlUHJvY2Vzc1By
b3h5RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmVlZGVlYWYwODE3ZTUwYTUzNjk0NTVhZmZiY2Q5NTkz
NjBlZDAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFi
YXNlcy9lZmwvRGF0YWJhc2VQcm9jZXNzUHJveHlFZmwuY3BwCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgTmF2ZXIgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vz
c1Byb3h5LmgiCisKKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0TGF1bmNoT3B0
aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257267</attachid>
            <date>2015-07-22 07:52:20 -0700</date>
            <delta_ts>2015-07-22 15:52:54 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-145867-20150722235104.patch</filename>
            <type>text/plain</type>
            <size>46571</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3MTU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMWFkY2ZiMGRhYTMxYWVl
MDE3Mzc4ZWNjZTg3MjExNjI4MjQ4NWRkNC4uMjdkMzkzYTBhNTBjM2E3MGYwMjVjZTM2ZmI4Mjhi
MDNhODQ4MjgzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDE1LTA3LTIyICBHeXV5
b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXSBTdXBw
b3J0IGluZGV4ZWRkYiBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDU4NjcKKworICAgICAgICBSZXZpZXdlZCBieSBDc2FiYSBPc3p0cm9n
b27DoWMuCisKKyAgICAgICAgQWRkIHN0dWIgaW1wbGVtZW50YXRpb24gZm9yIGluZGV4ZWRkYi4g
TW92ZSBLZXllZERlY29kZXIgYW5kIEtleWVkRW5jb2RlciBmcm9tIGd0ayB0byBnbGliCisgICAg
ICAgIGluIG9yZGVyIHRvIHNoYXJlIGl0IGJldHdlZW4gR1RLIGFuZCBFRkwgcG9ydHMuCisKKyAg
ICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01h
aW4uY3BwOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9lZmwvRGF0YWJhc2VQcm9jZXNzTWFp
bkVmbC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9FbnRy
eVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAuCisgICAgICAgIChXZWJLaXQ6OkRh
dGFiYXNlUHJvY2Vzc01haW5Vbml4KToKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAg
ICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBTaGFyZWQvZ2xpYi9LZXllZERl
Y29kZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERl
Y29kZXIuY3BwLgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OktleWVkRGVjb2Rlcik6
CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6fktleWVkRGVjb2Rlcik6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGljdGlvbmFyeUZyb21HVmFyaWFudCk6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlQnl0ZXMpOgorICAgICAgICAoV2ViS2l0OjpL
ZXllZERlY29kZXI6OmRlY29kZVNpbXBsZVZhbHVlKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRE
ZWNvZGVyOjpkZWNvZGVCb29sKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNv
ZGVVSW50MzIpOgorICAgICAgICAoV2ViS2l0OjpLZXllZERlY29kZXI6OmRlY29kZUludDMyKToK
KyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NCk6CisgICAgICAgIChX
ZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZGVjb2RlRmxvYXQpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZERlY29kZXI6OmRlY29kZURvdWJsZSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6
ZGVjb2RlU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbk9iamVj
dCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVjb2Rlcjo6ZW5kT2JqZWN0KToKKyAgICAgICAg
KFdlYktpdDo6S2V5ZWREZWNvZGVyOjpiZWdpbkFycmF5KToKKyAgICAgICAgKFdlYktpdDo6S2V5
ZWREZWNvZGVyOjpiZWdpbkFycmF5RWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRGVj
b2Rlcjo6ZW5kQXJyYXlFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWREZWNvZGVyOjpl
bmRBcnJheSk6CisgICAgICAgICogU2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmg6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oLgorICAgICAgICAq
IFNoYXJlZC9nbGliL0tleWVkRW5jb2Rlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5jcHAuCisgICAgICAgIChXZWJLaXQ6OktleWVkRW5j
b2Rlcjo6S2V5ZWRFbmNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjp+S2V5
ZWRFbmNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVCeXRlcyk6
CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlQm9vbCk6CisgICAgICAgIChX
ZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5jb2RlVUludDMyKToKKyAgICAgICAgKFdlYktpdDo6S2V5
ZWRFbmNvZGVyOjplbmNvZGVJbnQzMik6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6
ZW5jb2RlSW50NjQpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZUZsb2F0
KToKKyAgICAgICAgKFdlYktpdDo6S2V5ZWRFbmNvZGVyOjplbmNvZGVEb3VibGUpOgorICAgICAg
ICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuY29kZVN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6
OktleWVkRW5jb2Rlcjo6YmVnaW5PYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29k
ZXI6OmVuZE9iamVjdCk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6YmVnaW5BcnJh
eSk6CisgICAgICAgIChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQpOgor
ICAgICAgICAoV2ViS2l0OjpLZXllZEVuY29kZXI6OmVuZEFycmF5RWxlbWVudCk6CisgICAgICAg
IChXZWJLaXQ6OktleWVkRW5jb2Rlcjo6ZW5kQXJyYXkpOgorICAgICAgICAoV2ViS2l0OjpLZXll
ZEVuY29kZXI6OmZpbmlzaEVuY29kaW5nKToKKyAgICAgICAgKiBTaGFyZWQvZ2xpYi9LZXllZEVu
Y29kZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNv
ZGVyLmguCisgICAgICAgICogVUlQcm9jZXNzL0RhdGFiYXNlcy9lZmwvRGF0YWJhc2VQcm9jZXNz
UHJveHlFZmwuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
RW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3BwLgorICAgICAgICAoV2ViS2l0
OjpEYXRhYmFzZVByb2Nlc3NQcm94eTo6cGxhdGZvcm1HZXRMYXVuY2hPcHRpb25zKToKKwogMjAx
NS0wNy0yMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZC4gRml4IHNvbWUgd2FybmluZ3Mgd2hlbiBnZW5lcmF0aW5nIEdUSysg
SFRNTCBBUEkgZG9jcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9FbnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRW50cnlQb2ludC91bml4L0RhdGFiYXNlUHJvY2Vzc01haW4uY3Bw
CmluZGV4IDFkNTUyMmI0Y2QyNGQwMmYwMTc0YTZjOTczZTI0NmU4MjE0ZmQxOTIuLjlkOGI4MTgz
ODhhN2QxMmQ4NDk4MDJhZDhlNWRiMDkwNTBjZDgzYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9FbnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvdW5peC9E
YXRhYmFzZVByb2Nlc3NNYWluLmNwcApAQCAtMjMsNiArMjMsNyBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJEYXRhYmFzZVByb2Nlc3NNYWluVW5peC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL2VmbC9EYXRhYmFzZVBy
b2Nlc3NNYWluRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9lZmwvRGF0
YWJhc2VQcm9jZXNzTWFpbkVmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDRhMTJjZWE3MDc4OWY0NzQ4MTBh
YTJiY2IyNWY0MGUwOGRmZTE0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9lZmwvRGF0YWJhc2VQcm9jZXNzTWFpbkVmbC5jcHAKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBOYXZlciBDb3JwLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGF0YWJh
c2VQcm9jZXNzLmgiCisKKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworI2luY2x1ZGUg
IkNoaWxkUHJvY2Vzc01haW4uaCIKKyNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NNYWluVW5peC5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIERhdGFiYXNlUHJvY2Vzc01haW4gZmluYWw6IHB1YmxpYyBDaGlsZFByb2Nlc3NNYWluQmFz
ZSB7CitwdWJsaWM6CisgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworaW50IERhdGFiYXNlUHJvY2Vz
c01haW5Vbml4KGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICByZXR1cm4gQ2hpbGRQcm9j
ZXNzTWFpbjxEYXRhYmFzZVByb2Nlc3MsIERhdGFiYXNlUHJvY2Vzc01haW4+KGFyZ2MsIGFyZ3Yp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFT
RV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBhMzFkNjY5ZWJjZTBiOGY4
ZDQ5ZDgwOWZmMDMwY2IyYTQwMzFjYTM4Li5jYmU3OTM2MjAzYmQyNmE1OTk5NjIzZjJjZDk3OTI4
MDY5NjdhOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMSw0ICsxLDYgQEAKIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUworICAgIERhdGFiYXNlUHJvY2Vzcy9lZmwvRGF0YWJh
c2VQcm9jZXNzTWFpbkVmbC5jcHAKKwogICAgIE5ldHdvcmtQcm9jZXNzL2VmbC9OZXR3b3JrUHJv
Y2Vzc01haW5FZmwuY3BwCiAKICAgICBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtQcm9jZXNz
U291cC5jcHAKQEAgLTQ1LDYgKzQ3LDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgU2hhcmVkL2VmbC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhFZmwuY3BwCiAgICAgU2hhcmVkL2Vm
bC9XZWJFdmVudEZhY3RvcnkuY3BwCiAKKyAgICBTaGFyZWQvZ2xpYi9LZXllZERlY29kZXIuY3Bw
CisgICAgU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcAorCiAgICAgU2hhcmVkL2xpbnV4L1dl
Yk1lbW9yeVNhbXBsZXJMaW51eC5jcHAKIAogICAgIFNoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy9PcGVuU3lzY2FsbC5jcHAKQEAgLTEyMyw2ICsxMjgsOCBAQCBsaXN0KEFQUEVORCBXZWJLaXQy
X1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJWaWV3LmNwcAog
ICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL1dlYlZpZXdDbGllbnQuY3BwCiAKKyAg
ICBVSVByb2Nlc3MvRGF0YWJhc2VzL2VmbC9EYXRhYmFzZVByb2Nlc3NQcm94eUVmbC5jcHAKKwog
ICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZWZsL1dlYkluc3BlY3RvclNlcnZlckVmbC5j
cHAKIAogICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvc291cC9XZWJTb2NrZXRTZXJ2ZXJT
b3VwLmNwcApAQCAtMjMwLDYgKzIzNyw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfSU5DTFVERV9E
SVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy94MTEiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL25ldHdvcmsvc291cCIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vdGV4dC9lbmNoYW50IgorICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFz
ZVByb2Nlc3MvdW5peCIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nlc3MvZWZsIgog
ICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy91bml4IgogICAgICIke1dFQktJVDJf
RElSfS9QbGF0Zm9ybS9lZmwiCkBAIC0yNjAsNiArMjY4LDggQEAgbGlzdChBUFBFTkQgV2ViS2l0
Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzIgogICAgICIke1dURl9ESVJ9L3d0Zi9lZmwiCiAgICAg
IiR7V1RGX0RJUn0vd3RmL2dsaWIiCisgICAgIiR7V1RGX0RJUn0iCisgICAgIiR7V0VCS0lUMl9E
SVJ9IgogKQogCiBsaXN0KEFQUEVORCBXZWJLaXQyX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVT
CkBAIC0zMTYsNiArMzI2LDEwIEBAIGxpc3QoQVBQRU5EIE5ldHdvcmtQcm9jZXNzX1NPVVJDRVMK
ICAgICBOZXR3b3JrUHJvY2Vzcy9FbnRyeVBvaW50L3VuaXgvTmV0d29ya1Byb2Nlc3NNYWluLmNw
cAogKQogCitsaXN0KEFQUEVORCBEYXRhYmFzZVByb2Nlc3NfU09VUkNFUworICAgIERhdGFiYXNl
UHJvY2Vzcy9FbnRyeVBvaW50L3VuaXgvRGF0YWJhc2VQcm9jZXNzTWFpbi5jcHAKKykKKwogbGlz
dChBUFBFTkQgV2ViUHJvY2Vzc19MSUJSQVJJRVMKICAgICAke0NBSVJPX0xJQlJBUklFU30KICAg
ICAke0VDT1JFX0lNRl9FVkFTX0xJQlJBUklFU30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UKaW5k
ZXggODRmZWJmOWMzMjgwMDhmNWRjYjgzNTM0MTQxNTQ5NzUxMmU3MDFlZi4uYTlmYTY5MTZlODBj
ZmM2YWQ0OGQwYjYzNDZhNjUxYTU4MWFjZDg5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1HVEsuY21ha2UK
QEAgLTYyLDkgKzYyLDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAKICAgICBTaGFy
ZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCiAKKyAgICBTaGFyZWQvZ2xpYi9LZXll
ZERlY29kZXIuY3BwCisgICAgU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcAogICAgIFNoYXJl
ZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwCi0gICAgU2hhcmVkL2d0ay9LZXllZERlY29kZXIu
Y3BwCi0gICAgU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRp
dmVDb250ZXh0TWVudUl0ZW1HdGsuY3BwCiAgICAgU2hhcmVkL2d0ay9OYXRpdmVXZWJLZXlib2Fy
ZEV2ZW50R3RrLmNwcAogICAgIFNoYXJlZC9ndGsvTmF0aXZlV2ViTW91c2VFdmVudEd0ay5jcHAK
QEAgLTQ4Miw2ICs0ODIsNyBAQCBsaXN0KEFQUEVORCBXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL3Nv
dXAiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9Eb3dubG9hZHMvc291cCIKICAgICAiJHtX
RUJLSVQyX0RJUn0vU2hhcmVkL1BsdWdpbnMvdW5peCIKKyAgICAiJHtXRUJLSVQyX0RJUn0vU2hh
cmVkL2dsaWIiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1NoYXJlZC9ndGsiCiAgICAgIiR7V0VCS0lU
Ml9ESVJ9L1NoYXJlZC9saW51eCIKICAgICAiJHtXRUJLSVQyX0RJUn0vU2hhcmVkL2xpbnV4L1Nl
Y2NvbXBGaWx0ZXJzIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5
ZWREZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2QyMGQ5MDY2OTQ0MDFiNmVjMmIzMTZlMGZhYWJlNzllN2MyY2Y0ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rl
ci5jcHAKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIktleWVkRGVj
b2Rlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworS2V5ZWREZWNvZGVyOjpLZXllZERlY29kZXIoY29uc3QgdWludDhfdCogZGF0YSwg
c2l6ZV90IHNpemUpCit7CisgICAgR1JlZlB0cjxHQnl0ZXM+IGJ5dGVzID0gYWRvcHRHUmVmKGdf
Ynl0ZXNfbmV3KGRhdGEsIHNpemUpKTsKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0g
Z192YXJpYW50X25ld19mcm9tX2J5dGVzKEdfVkFSSUFOVF9UWVBFKCJhe3N2fSIpLCBieXRlcy5n
ZXQoKSwgVFJVRSk7CisgICAgbV9kaWN0aW9uYXJ5U3RhY2suYXBwZW5kKGRpY3Rpb25hcnlGcm9t
R1ZhcmlhbnQodmFyaWFudC5nZXQoKSkpOworfQorCitLZXllZERlY29kZXI6On5LZXllZERlY29k
ZXIoKQoreworICAgIEFTU0VSVChtX2RpY3Rpb25hcnlTdGFjay5zaXplKCkgPT0gMSk7CisgICAg
QVNTRVJUKG1fYXJyYXlTdGFjay5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2FycmF5SW5kZXhT
dGFjay5pc0VtcHR5KCkpOworfQorCitIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+
IEtleWVkRGVjb2Rlcjo6ZGljdGlvbmFyeUZyb21HVmFyaWFudChHVmFyaWFudCogdmFyaWFudCkK
K3sKKyAgICBIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnk7Cisg
ICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgdmFy
aWFudCk7CisgICAgY29uc3QgY2hhcioga2V5OworICAgIEdWYXJpYW50KiB2YWx1ZTsKKyAgICB3
aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkK
KyAgICAgICAgZGljdGlvbmFyeS5zZXQoU3RyaW5nOjpmcm9tVVRGOChrZXkpLCB2YWx1ZSk7Cisg
ICAgcmV0dXJuIFdURjo6bW92ZShkaWN0aW9uYXJ5KTsKK30KKworYm9vbCBLZXllZERlY29kZXI6
OmRlY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYgYnl0ZXMsIHNp
emVfdCYgc2l6ZSkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFy
eVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzaXplID0gZ192YXJpYW50X2dldF9zaXplKHZhbHVlLmdldCgpKTsKKyAg
ICBieXRlcyA9IHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX3ZhcmlhbnRfZ2V0X2RhdGEo
dmFsdWUuZ2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgRj4KK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVTaW1wbGVWYWx1ZShjb25z
dCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0aW9uKQoreworICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9IGdldEZ1
bmN0aW9uKHZhbHVlLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERl
Y29kZXI6OmRlY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wmIHJlc3VsdCkKK3sKKyAg
ICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfYm9v
bGVhbik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5n
JiBrZXksIHVpbnQzMl90JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVl
KGtleSwgcmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X3VpbnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNv
ZGVyOjpkZWNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCYgcmVzdWx0KQorewor
ICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9p
bnQzMik7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVJbnQ2NChjb25zdCBTdHJpbmcm
IGtleSwgaW50NjRfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBkZWNvZGVTaW1wbGVWYWx1ZShr
ZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9pbnQ2NCk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVy
OjpkZWNvZGVGbG9hdChjb25zdCBTdHJpbmcmIGtleSwgZmxvYXQmIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfZG91Ymxl
KTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtl
eSwgZG91YmxlJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwg
cmVzdWx0LCBnX3ZhcmlhbnRfZ2V0X2RvdWJsZSk7Cit9CisKK2Jvb2wgS2V5ZWREZWNvZGVyOjpk
ZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgcmVzdWx0KQoreworICAgIEdS
ZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0gbV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJlc3VsdCA9
IFN0cmluZzo6ZnJvbVVURjgoZ192YXJpYW50X2dldF9zdHJpbmcodmFsdWUuZ2V0KCksIG51bGxw
dHIpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJlZ2luT2Jq
ZWN0KGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0g
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOworICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChkaWN0aW9u
YXJ5RnJvbUdWYXJpYW50KHZhbHVlLmdldCgpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgS2V5ZWREZWNvZGVyOjplbmRPYmplY3QoKQoreworICAgIG1fZGljdGlvbmFyeVN0YWNrLnJl
bW92ZUxhc3QoKTsKK30KKworYm9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3Ry
aW5nJiBrZXkpCit7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUgPSBtX2RpY3Rpb25hcnlT
dGFjay5sYXN0KCkuZ2V0KGtleSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9hcnJheVN0YWNrLmFwcGVuZCh2YWx1ZS5nZXQoKSk7CisgICAgbV9hcnJh
eUluZGV4U3RhY2suYXBwZW5kKDApOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEtleWVk
RGVjb2Rlcjo6YmVnaW5BcnJheUVsZW1lbnQoKQoreworICAgIGlmIChtX2FycmF5SW5kZXhTdGFj
ay5sYXN0KCkgPj0gZ192YXJpYW50X25fY2hpbGRyZW4obV9hcnJheVN0YWNrLmxhc3QoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhcmlhbnQgPSBh
ZG9wdEdSZWYoZ192YXJpYW50X2dldF9jaGlsZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLCBt
X2FycmF5SW5kZXhTdGFjay5sYXN0KCkrKykpOworICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVu
ZChkaWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBLZXllZERlY29kZXI6OmVuZEFycmF5RWxlbWVudCgpCit7CisgICAgbV9k
aWN0aW9uYXJ5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit2b2lkIEtleWVkRGVjb2Rlcjo6ZW5k
QXJyYXkoKQoreworICAgIG1fYXJyYXlTdGFjay5yZW1vdmVMYXN0KCk7CisgICAgbV9hcnJheUlu
ZGV4U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWREZWNvZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGViMWM2MTMy
Yzg2ZWU0YmIyN2MwMDNiZTAyM2Y5ZmEzOGZiMTg0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRGVjb2Rlci5oCkBAIC0wLDAgKzEsNzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEtl
eWVkRGVjb2Rlcl9oCisjZGVmaW5lIEtleWVkRGVjb2Rlcl9oCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0tleWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIEtleWVkRGVjb2RlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpL
ZXllZERlY29kZXIgeworcHVibGljOgorICAgIEtleWVkRGVjb2Rlcihjb25zdCB1aW50OF90KiBk
YXRhLCBzaXplX3QpOworICAgIHZpcnR1YWwgfktleWVkRGVjb2RlcigpIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIHZpcnR1YWwgYm9vbCBkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgdWludDhfdComLCBzaXplX3QmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVj
b2RlQm9vbChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
Ym9vbCBkZWNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90Jikgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5LCBpbnQzMl90
Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUludDY0KGNvbnN0IFN0cmluZyYg
a2V5LCBpbnQ2NF90Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGRlY29kZUZsb2F0KGNv
bnN0IFN0cmluZyYga2V5LCBmbG9hdCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBkZWNv
ZGVEb3VibGUoY29uc3QgU3RyaW5nJiBrZXksIGRvdWJsZSYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgYm9vbCBkZWNvZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYpIG92ZXJyaWRl
OworCisgICAgdmlydHVhbCBib29sIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0
dWFsIGJvb2wgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBib29sIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGVuZEFycmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgp
IG92ZXJyaWRlOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRj4gYm9vbCBk
ZWNvZGVTaW1wbGVWYWx1ZShjb25zdCBTdHJpbmcmIGtleSwgVCYgcmVzdWx0LCBGIGdldEZ1bmN0
aW9uKTsKKyAgICBIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxHVmFyaWFudD4+IGRpY3Rpb25hcnlG
cm9tR1ZhcmlhbnQoR1ZhcmlhbnQqKTsKKworICAgIFZlY3RvcjxIYXNoTWFwPFN0cmluZywgR1Jl
ZlB0cjxHVmFyaWFudD4+PiBtX2RpY3Rpb25hcnlTdGFjazsKKyAgICBWZWN0b3I8R1ZhcmlhbnQq
LCAxNj4gbV9hcnJheVN0YWNrOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9hcnJheUluZGV4U3Rh
Y2s7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEtleWVkRGVjb2Rl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mY2RmZDhkMGE0MjQ2OWQ5NTk3OGQ0MTIzMTFjMDI3Yzk1YTMwYzNiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2dsaWIvS2V5ZWRFbmNvZGVyLmNwcApAQCAt
MCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiS2V5ZWRFbmNvZGVyLmgiCisK
KyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitLZXllZEVuY29kZXI6OktleWVkRW5jb2RlcigpCit7CisgICAgZ192YXJpYW50X2J1aWxk
ZXJfaW5pdCgmbV92YXJpYW50QnVpbGRlciwgR19WQVJJQU5UX1RZUEUoImF7c3Z9IikpOworICAg
IG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoJm1fdmFyaWFudEJ1aWxkZXIpOworfQorCitL
ZXllZEVuY29kZXI6On5LZXllZEVuY29kZXIoKQoreworICAgIEFTU0VSVChtX3ZhcmlhbnRCdWls
ZGVyU3RhY2suc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChtX3ZhcmlhbnRCdWlsZGVyU3RhY2su
bGFzdCgpID09ICZtX3ZhcmlhbnRCdWlsZGVyKTsKKyAgICBBU1NFUlQobV9hcnJheVN0YWNrLmlz
RW1wdHkoKSk7CisgICAgQVNTRVJUKG1fb2JqZWN0U3RhY2suaXNFbXB0eSgpKTsKK30KKwordm9p
ZCBLZXllZEVuY29kZXI6OmVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCB1aW50
OF90KiBieXRlcywgc2l6ZV90IHNpemUpCit7CisgICAgR1JlZlB0cjxHQnl0ZXM+IGdCeXRlcyA9
IGFkb3B0R1JlZihnX2J5dGVzX25ld19zdGF0aWMoYnl0ZXMsIHNpemUpKTsKKyAgICBnX3Zhcmlh
bnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXku
dXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19mcm9tX2J5dGVzKEdfVkFSSUFOVF9UWVBFKCJh
eSIpLCBnQnl0ZXMuZ2V0KCksIFRSVUUpKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29k
ZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCit7CisgICAgZ192YXJpYW50X2J1
aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9Iiwga2V5LnV0Zjgo
KS5kYXRhKCksIGdfdmFyaWFudF9uZXdfYm9vbGVhbih2YWx1ZSkpOworfQorCit2b2lkIEtleWVk
RW5jb2Rlcjo6ZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCB2YWx1ZSkK
K3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3Qo
KSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld191aW50MzIodmFsdWUp
KTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUludDMyKGNvbnN0IFN0cmluZyYga2V5
LCBpbnQzMl90IHZhbHVlKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRC
dWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRf
bmV3X2ludDMyKHZhbHVlKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjplbmNvZGVJbnQ2NChj
b25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCB2YWx1ZSkKK3sKKyAgICBnX3ZhcmlhbnRfYnVpbGRl
cl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRh
dGEoKSwgZ192YXJpYW50X25ld19pbnQ2NCh2YWx1ZSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rl
cjo6ZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0IHZhbHVlKQoreworICAgIGVu
Y29kZURvdWJsZShrZXksIHZhbHVlKTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuY29kZURv
dWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlIHZhbHVlKQoreworICAgIGdfdmFyaWFudF9i
dWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4
KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2RvdWJsZSh2YWx1ZSkpOworfQorCit2b2lkIEtleWVk
RW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2su
bGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyh2
YWx1ZS51dGY4KCkuZGF0YSgpKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpiZWdpbk9iamVj
dChjb25zdCBTdHJpbmcmIGtleSkKK3sKKyAgICBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4gYnVp
bGRlciA9IGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFh
e3N2fSIpKSk7CisgICAgbV9vYmplY3RTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoa2V5LCBi
dWlsZGVyKSk7CisgICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVuZChidWlsZGVyLmdldCgp
KTsKK30KKwordm9pZCBLZXllZEVuY29kZXI6OmVuZE9iamVjdCgpCit7CisgICAgR1ZhcmlhbnRC
dWlsZGVyKiBidWlsZGVyID0gbV92YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCk7CisgICAg
Z192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9
IiwgbV9vYmplY3RTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X2J1
aWxkZXJfZW5kKGJ1aWxkZXIpKTsKKyAgICBtX29iamVjdFN0YWNrLnJlbW92ZUxhc3QoKTsKK30K
Kwordm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpCit7Cisg
ICAgbV9hcnJheVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXksIGFkb3B0R1JlZihnX3Zh
cmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIpKSkpKTsKK30KKwordm9p
ZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKK3sKKyAgICBtX3ZhcmlhbnRCdWls
ZGVyU3RhY2suYXBwZW5kKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZBUklBTlRfVFlQRSgiYXtz
dn0iKSkpOworfQorCit2b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXlFbGVtZW50KCkKK3sKKyAg
ICBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4gdmFyaWFudEJ1aWxkZXIgPSBhZG9wdEdSZWYobV92
YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCkpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2Fk
ZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLnNlY29uZC5nZXQoKSwgZ192YXJpYW50X2J1aWxk
ZXJfZW5kKHZhcmlhbnRCdWlsZGVyLmdldCgpKSk7Cit9CisKK3ZvaWQgS2V5ZWRFbmNvZGVyOjpl
bmRBcnJheSgpCit7CisgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJT
dGFjay5sYXN0KCksICJ7c3Z9IiwgbV9hcnJheVN0YWNrLmxhc3QoKS5maXJzdC51dGY4KCkuZGF0
YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQobV9hcnJheVN0YWNrLmxhc3QoKS5zZWNvbmQuZ2V0
KCkpKTsKKyAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOworfQorCitQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gS2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZygpCit7CisgICAgZ19hc3Nl
cnQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSA9PSAmbV92YXJpYW50QnVpbGRlcik7Cisg
ICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9idWlsZGVyX2VuZCgmbV92
YXJpYW50QnVpbGRlcik7CisgICAgR1JlZlB0cjxHQnl0ZXM+IGRhdGEgPSBnX3ZhcmlhbnRfZ2V0
X2RhdGFfYXNfYnl0ZXModmFyaWFudC5nZXQoKSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihnX2J5dGVzX2dldF9kYXRh
KGRhdGEuZ2V0KCksIG51bGxwdHIpKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdfYnl0ZXNfZ2V0
X3NpemUoZGF0YS5nZXQoKSkpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9nbGliL0tleWVkRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYmI3NmIyZmI4
MTkxMDI0MmQyYWI5M2RiM2YzMTA5NDIwYTZiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ2xpYi9LZXllZEVuY29kZXIuaApAQCAtMCwwICsxLDcwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgS2V5
ZWRFbmNvZGVyX2gKKyNkZWZpbmUgS2V5ZWRFbmNvZGVyX2gKKworI2luY2x1ZGUgPFdlYkNvcmUv
S2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEtleWVkRW5jb2RlciBmaW5h
bCA6IHB1YmxpYyBXZWJDb3JlOjpLZXllZEVuY29kZXIgeworcHVibGljOgorICAgIEtleWVkRW5j
b2RlcigpOworICAgIH5LZXllZEVuY29kZXIoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGZpbmlzaEVuY29kaW5nKCkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCB1aW50OF90Kiwgc2l6ZV90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlQm9v
bChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVu
Y29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMyX3QpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBlbmNvZGVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgaW50MzJfdCkgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIGVuY29kZUludDY0KGNvbnN0IFN0cmluZyYga2V5LCBpbnQ2
NF90KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5n
JiBrZXksIGZsb2F0KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlRG91YmxlKGNv
bnN0IFN0cmluZyYga2V5LCBkb3VibGUpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmNv
ZGVTdHJpbmcoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisg
ICAgdmlydHVhbCB2b2lkIGJlZ2luT2JqZWN0KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYmVnaW5BcnJheShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGJlZ2luQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGVuZEFy
cmF5RWxlbWVudCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBlbmRBcnJheSgpIG92ZXJy
aWRlOworCisgICAgR1ZhcmlhbnRCdWlsZGVyIG1fdmFyaWFudEJ1aWxkZXI7CisgICAgVmVjdG9y
PEdWYXJpYW50QnVpbGRlciosIDE2PiBtX3ZhcmlhbnRCdWlsZGVyU3RhY2s7CisgICAgVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWlsZGVyPj4sIDE2PiBtX2FycmF5
U3RhY2s7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnRCdWls
ZGVyPj4sIDE2PiBtX29iamVjdFN0YWNrOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBLZXllZEVuY29kZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9LZXllZERlY29kZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXll
ZERlY29kZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDIwZDkwNjY5NDQw
MWI2ZWMyYjMxNmUwZmFhYmU3OWU3YzJjZjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWREZWNvZGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE1IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJLZXllZERlY29kZXIuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLUtleWVkRGVjb2Rlcjo6S2V5ZWREZWNvZGVyKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBzaXplKQotewotICAgIEdSZWZQdHI8R0J5dGVzPiBieXRlcyA9
IGFkb3B0R1JlZihnX2J5dGVzX25ldyhkYXRhLCBzaXplKSk7Ci0gICAgR1JlZlB0cjxHVmFyaWFu
dD4gdmFyaWFudCA9IGdfdmFyaWFudF9uZXdfZnJvbV9ieXRlcyhHX1ZBUklBTlRfVFlQRSgiYXtz
dn0iKSwgYnl0ZXMuZ2V0KCksIFRSVUUpOwotICAgIG1fZGljdGlvbmFyeVN0YWNrLmFwcGVuZChk
aWN0aW9uYXJ5RnJvbUdWYXJpYW50KHZhcmlhbnQuZ2V0KCkpKTsKLX0KLQotS2V5ZWREZWNvZGVy
Ojp+S2V5ZWREZWNvZGVyKCkKLXsKLSAgICBBU1NFUlQobV9kaWN0aW9uYXJ5U3RhY2suc2l6ZSgp
ID09IDEpOwotICAgIEFTU0VSVChtX2FycmF5U3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
bV9hcnJheUluZGV4U3RhY2suaXNFbXB0eSgpKTsKLX0KLQotSGFzaE1hcDxTdHJpbmcsIEdSZWZQ
dHI8R1ZhcmlhbnQ+PiBLZXllZERlY29kZXI6OmRpY3Rpb25hcnlGcm9tR1ZhcmlhbnQoR1Zhcmlh
bnQqIHZhcmlhbnQpCi17Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdSZWZQdHI8R1ZhcmlhbnQ+PiBk
aWN0aW9uYXJ5OwotICAgIEdWYXJpYW50SXRlciBpdGVyOwotICAgIGdfdmFyaWFudF9pdGVyX2lu
aXQoJml0ZXIsIHZhcmlhbnQpOwotICAgIGNvbnN0IGNoYXIqIGtleTsKLSAgICBHVmFyaWFudCog
dmFsdWU7Ci0gICAgd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AoJml0ZXIsICJ7JnN2fSIsICZr
ZXksICZ2YWx1ZSkpCi0gICAgICAgIGRpY3Rpb25hcnkuc2V0KFN0cmluZzo6ZnJvbVVURjgoa2V5
KSwgdmFsdWUpOwotICAgIHJldHVybiBXVEY6Om1vdmUoZGljdGlvbmFyeSk7Ci19Ci0KLWJvb2wg
S2V5ZWREZWNvZGVyOjpkZWNvZGVCeXRlcyhjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgdWludDhf
dComIGJ5dGVzLCBzaXplX3QmIHNpemUpCi17Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFsdWUg
PSBtX2RpY3Rpb25hcnlTdGFjay5sYXN0KCkuZ2V0KGtleSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2l6ZSA9IGdfdmFyaWFudF9nZXRfc2l6ZSh2YWx1
ZS5nZXQoKSk7Ci0gICAgYnl0ZXMgPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50OF90Kj4oZ192YXJp
YW50X2dldF9kYXRhKHZhbHVlLmdldCgpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEY+Ci1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlU2lt
cGxlVmFsdWUoY29uc3QgU3RyaW5nJiBrZXksIFQmIHJlc3VsdCwgRiBnZXRGdW5jdGlvbikKLXsK
LSAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5n
ZXQoa2V5KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBy
ZXN1bHQgPSBnZXRGdW5jdGlvbih2YWx1ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJiBy
ZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3Zh
cmlhbnRfZ2V0X2Jvb2xlYW4pOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlVUludDMy
KGNvbnN0IFN0cmluZyYga2V5LCB1aW50MzJfdCYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNv
ZGVTaW1wbGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF91aW50MzIpOwotfQotCi1i
b29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIGludDMyX3Qm
IHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2RlU2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdf
dmFyaWFudF9nZXRfaW50MzIpOwotfQotCi1ib29sIEtleWVkRGVjb2Rlcjo6ZGVjb2RlSW50NjQo
Y29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gZGVjb2Rl
U2ltcGxlVmFsdWUoa2V5LCByZXN1bHQsIGdfdmFyaWFudF9nZXRfaW50NjQpOwotfQotCi1ib29s
IEtleWVkRGVjb2Rlcjo6ZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0JiByZXN1
bHQpCi17Ci0gICAgcmV0dXJuIGRlY29kZVNpbXBsZVZhbHVlKGtleSwgcmVzdWx0LCBnX3Zhcmlh
bnRfZ2V0X2RvdWJsZSk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpkZWNvZGVEb3VibGUoY29u
c3QgU3RyaW5nJiBrZXksIGRvdWJsZSYgcmVzdWx0KQotewotICAgIHJldHVybiBkZWNvZGVTaW1w
bGVWYWx1ZShrZXksIHJlc3VsdCwgZ192YXJpYW50X2dldF9kb3VibGUpOwotfQotCi1ib29sIEtl
eWVkRGVjb2Rlcjo6ZGVjb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHJlc3Vs
dCkKLXsKLSAgICBHUmVmUHRyPEdWYXJpYW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxh
c3QoKS5nZXQoa2V5KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXN1bHQgPSBTdHJpbmc6OmZyb21VVEY4KGdfdmFyaWFudF9nZXRfc3RyaW5nKHZhbHVl
LmdldCgpLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5ZWREZWNv
ZGVyOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBHUmVmUHRyPEdWYXJp
YW50PiB2YWx1ZSA9IG1fZGljdGlvbmFyeVN0YWNrLmxhc3QoKS5nZXQoa2V5KTsKLSAgICBpZiAo
IXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2RpY3Rpb25hcnlTdGFjay5h
cHBlbmQoZGljdGlvbmFyeUZyb21HVmFyaWFudCh2YWx1ZS5nZXQoKSkpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEtleWVkRGVjb2Rlcjo6ZW5kT2JqZWN0KCkKLXsKLSAgICBtX2RpY3Rp
b25hcnlTdGFjay5yZW1vdmVMYXN0KCk7Ci19Ci0KLWJvb2wgS2V5ZWREZWNvZGVyOjpiZWdpbkFy
cmF5KGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IHZhbHVlID0g
bV9kaWN0aW9uYXJ5U3RhY2subGFzdCgpLmdldChrZXkpOwotICAgIGlmICghdmFsdWUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fYXJyYXlTdGFjay5hcHBlbmQodmFsdWUuZ2V0KCkp
OwotICAgIG1fYXJyYXlJbmRleFN0YWNrLmFwcGVuZCgwKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBLZXllZERlY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKLXsKLSAgICBpZiAobV9h
cnJheUluZGV4U3RhY2subGFzdCgpID49IGdfdmFyaWFudF9uX2NoaWxkcmVuKG1fYXJyYXlTdGFj
ay5sYXN0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdWYXJpYW50
PiB2YXJpYW50ID0gYWRvcHRHUmVmKGdfdmFyaWFudF9nZXRfY2hpbGRfdmFsdWUobV9hcnJheVN0
YWNrLmxhc3QoKSwgbV9hcnJheUluZGV4U3RhY2subGFzdCgpKyspKTsKLSAgICBtX2RpY3Rpb25h
cnlTdGFjay5hcHBlbmQoZGljdGlvbmFyeUZyb21HVmFyaWFudCh2YXJpYW50LmdldCgpKSk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS2V5ZWREZWNvZGVyOjplbmRBcnJheUVsZW1lbnQo
KQotewotICAgIG1fZGljdGlvbmFyeVN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotdm9pZCBLZXll
ZERlY29kZXI6OmVuZEFycmF5KCkKLXsKLSAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwot
ICAgIG1fYXJyYXlJbmRleFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rl
ci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZERlY29kZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOGViMWM2MTMyYzg2ZWU0YmIyN2MwMDNiZTAyM2Y5ZmEzOGZi
MTg0NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRGVjb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FpYSBTLkwuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgS2V5ZWREZWNvZGVyX2gKLSNkZWZpbmUgS2V5ZWREZWNvZGVyX2gKLQotI2lu
Y2x1ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KLSNpbmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgS2V5ZWREZWNvZGVyIGZpbmFsIDogcHVi
bGljIFdlYkNvcmU6OktleWVkRGVjb2RlciB7Ci1wdWJsaWM6Ci0gICAgS2V5ZWREZWNvZGVyKGNv
bnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCk7Ci0gICAgdmlydHVhbCB+S2V5ZWREZWNvZGVyKCkg
b3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgdmlydHVhbCBib29sIGRlY29kZUJ5dGVzKGNvbnN0
IFN0cmluZyYga2V5LCBjb25zdCB1aW50OF90KiYsIHNpemVfdCYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgYm9vbCBkZWNvZGVCb29sKGNvbnN0IFN0cmluZyYga2V5LCBib29sJikgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIGRlY29kZVVJbnQzMihjb25zdCBTdHJpbmcmIGtleSwgdWludDMy
X3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50MzIoY29uc3QgU3RyaW5n
JiBrZXksIGludDMyX3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgZGVjb2RlSW50NjQo
Y29uc3QgU3RyaW5nJiBrZXksIGludDY0X3QmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGVjb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0Jikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBib29sIGRlY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBib29sIGRlY29kZVN0cmluZyhjb25zdCBTdHJpbmcmIGtleSwgU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5PYmplY3QoY29uc3QgU3Ry
aW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmRPYmplY3QoKSBvdmVycmlk
ZTsKLQotICAgIHZpcnR1YWwgYm9vbCBiZWdpbkFycmF5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYmVnaW5BcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZW5kQXJyYXlFbGVtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2
b2lkIGVuZEFycmF5KCkgb3ZlcnJpZGU7Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBGPiBib29sIGRlY29kZVNpbXBsZVZhbHVlKGNvbnN0IFN0cmluZyYga2V5LCBUJiByZXN1
bHQsIEYgZ2V0RnVuY3Rpb24pOwotICAgIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50
Pj4gZGljdGlvbmFyeUZyb21HVmFyaWFudChHVmFyaWFudCopOwotCi0gICAgVmVjdG9yPEhhc2hN
YXA8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50Pj4+IG1fZGljdGlvbmFyeVN0YWNrOwotICAgIFZl
Y3RvcjxHVmFyaWFudCosIDE2PiBtX2FycmF5U3RhY2s7Ci0gICAgVmVjdG9yPHVuc2lnbmVkPiBt
X2FycmF5SW5kZXhTdGFjazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gS2V5ZWREZWNvZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
S2V5ZWRFbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvS2V5ZWRFbmNvZGVy
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkZmQ4ZDBhNDI0NjlkOTU5Nzhk
NDEyMzExYzAyN2M5NWEzMGMzYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5
ZWRFbmNvZGVyLmgiCi0KLSNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1LZXllZEVuY29kZXI6OktleWVkRW5jb2RlcigpCi17Ci0gICAg
Z192YXJpYW50X2J1aWxkZXJfaW5pdCgmbV92YXJpYW50QnVpbGRlciwgR19WQVJJQU5UX1RZUEUo
ImF7c3Z9IikpOwotICAgIG1fdmFyaWFudEJ1aWxkZXJTdGFjay5hcHBlbmQoJm1fdmFyaWFudEJ1
aWxkZXIpOwotfQotCi1LZXllZEVuY29kZXI6On5LZXllZEVuY29kZXIoKQotewotICAgIEFTU0VS
VChtX3ZhcmlhbnRCdWlsZGVyU3RhY2suc2l6ZSgpID09IDEpOwotICAgIEFTU0VSVChtX3Zhcmlh
bnRCdWlsZGVyU3RhY2subGFzdCgpID09ICZtX3ZhcmlhbnRCdWlsZGVyKTsKLSAgICBBU1NFUlQo
bV9hcnJheVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RhY2suaXNFbXB0
eSgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUJ5dGVzKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCB1aW50OF90KiBieXRlcywgc2l6ZV90IHNpemUpCi17Ci0gICAgR1JlZlB0cjxH
Qnl0ZXM+IGdCeXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ld19zdGF0aWMoYnl0ZXMsIHNpemUp
KTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3Qo
KSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19mcm9tX2J5dGVzKEdf
VkFSSUFOVF9UWVBFKCJheSIpLCBnQnl0ZXMuZ2V0KCksIFRSVUUpKTsKLX0KLQotdm9pZCBLZXll
ZEVuY29kZXI6OmVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wgdmFsdWUpCi17Ci0g
ICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7
c3Z9Iiwga2V5LnV0ZjgoKS5kYXRhKCksIGdfdmFyaWFudF9uZXdfYm9vbGVhbih2YWx1ZSkpOwot
fQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlVUludDMyKGNvbnN0IFN0cmluZyYga2V5LCB1
aW50MzJfdCB2YWx1ZSkKLXsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVp
bGRlclN0YWNrLmxhc3QoKSwgIntzdn0iLCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25l
d191aW50MzIodmFsdWUpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuY29kZUludDMyKGNv
bnN0IFN0cmluZyYga2V5LCBpbnQzMl90IHZhbHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVy
X2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0
YSgpLCBnX3ZhcmlhbnRfbmV3X2ludDMyKHZhbHVlKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNvZGVy
OjplbmNvZGVJbnQ2NChjb25zdCBTdHJpbmcmIGtleSwgaW50NjRfdCB2YWx1ZSkKLXsKLSAgICBn
X3ZhcmlhbnRfYnVpbGRlcl9hZGQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSwgIntzdn0i
LCBrZXkudXRmOCgpLmRhdGEoKSwgZ192YXJpYW50X25ld19pbnQ2NCh2YWx1ZSkpOwotfQotCi12
b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlRmxvYXQoY29uc3QgU3RyaW5nJiBrZXksIGZsb2F0IHZh
bHVlKQotewotICAgIGVuY29kZURvdWJsZShrZXksIHZhbHVlKTsKLX0KLQotdm9pZCBLZXllZEVu
Y29kZXI6OmVuY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlIHZhbHVlKQotewot
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3ZhcmlhbnRCdWlsZGVyU3RhY2subGFzdCgpLCAi
e3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfbmV3X2RvdWJsZSh2YWx1ZSkpOwot
fQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChtX3Zhcmlh
bnRCdWlsZGVyU3RhY2subGFzdCgpLCAie3N2fSIsIGtleS51dGY4KCkuZGF0YSgpLCBnX3Zhcmlh
bnRfbmV3X3N0cmluZyh2YWx1ZS51dGY4KCkuZGF0YSgpKSk7Ci19Ci0KLXZvaWQgS2V5ZWRFbmNv
ZGVyOjpiZWdpbk9iamVjdChjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBHUmVmUHRyPEdWYXJp
YW50QnVpbGRlcj4gYnVpbGRlciA9IGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19W
QVJJQU5UX1RZUEUoImFhe3N2fSIpKSk7Ci0gICAgbV9vYmplY3RTdGFjay5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoa2V5LCBidWlsZGVyKSk7Ci0gICAgbV92YXJpYW50QnVpbGRlclN0YWNrLmFwcGVu
ZChidWlsZGVyLmdldCgpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmVuZE9iamVjdCgpCi17
Ci0gICAgR1ZhcmlhbnRCdWlsZGVyKiBidWlsZGVyID0gbV92YXJpYW50QnVpbGRlclN0YWNrLnRh
a2VMYXN0KCk7Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1fdmFyaWFudEJ1aWxkZXJTdGFj
ay5sYXN0KCksICJ7c3Z9IiwgbV9vYmplY3RTdGFjay5sYXN0KCkuZmlyc3QudXRmOCgpLmRhdGEo
KSwgZ192YXJpYW50X2J1aWxkZXJfZW5kKGJ1aWxkZXIpKTsKLSAgICBtX29iamVjdFN0YWNrLnJl
bW92ZUxhc3QoKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXkoY29uc3QgU3Ry
aW5nJiBrZXkpCi17Ci0gICAgbV9hcnJheVN0YWNrLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihrZXks
IGFkb3B0R1JlZihnX3ZhcmlhbnRfYnVpbGRlcl9uZXcoR19WQVJJQU5UX1RZUEUoImFhe3N2fSIp
KSkpKTsKLX0KLQotdm9pZCBLZXllZEVuY29kZXI6OmJlZ2luQXJyYXlFbGVtZW50KCkKLXsKLSAg
ICBtX3ZhcmlhbnRCdWlsZGVyU3RhY2suYXBwZW5kKGdfdmFyaWFudF9idWlsZGVyX25ldyhHX1ZB
UklBTlRfVFlQRSgiYXtzdn0iKSkpOwotfQotCi12b2lkIEtleWVkRW5jb2Rlcjo6ZW5kQXJyYXlF
bGVtZW50KCkKLXsKLSAgICBHUmVmUHRyPEdWYXJpYW50QnVpbGRlcj4gdmFyaWFudEJ1aWxkZXIg
PSBhZG9wdEdSZWYobV92YXJpYW50QnVpbGRlclN0YWNrLnRha2VMYXN0KCkpOwotICAgIGdfdmFy
aWFudF9idWlsZGVyX2FkZF92YWx1ZShtX2FycmF5U3RhY2subGFzdCgpLnNlY29uZC5nZXQoKSwg
Z192YXJpYW50X2J1aWxkZXJfZW5kKHZhcmlhbnRCdWlsZGVyLmdldCgpKSk7Ci19Ci0KLXZvaWQg
S2V5ZWRFbmNvZGVyOjplbmRBcnJheSgpCi17Ci0gICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKG1f
dmFyaWFudEJ1aWxkZXJTdGFjay5sYXN0KCksICJ7c3Z9IiwgbV9hcnJheVN0YWNrLmxhc3QoKS5m
aXJzdC51dGY4KCkuZGF0YSgpLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQobV9hcnJheVN0YWNrLmxh
c3QoKS5zZWNvbmQuZ2V0KCkpKTsKLSAgICBtX2FycmF5U3RhY2sucmVtb3ZlTGFzdCgpOwotfQot
Ci1QYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gS2V5ZWRFbmNvZGVyOjpmaW5pc2hFbmNvZGluZygp
Ci17Ci0gICAgZ19hc3NlcnQobV92YXJpYW50QnVpbGRlclN0YWNrLmxhc3QoKSA9PSAmbV92YXJp
YW50QnVpbGRlcik7Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gdmFyaWFudCA9IGdfdmFyaWFudF9i
dWlsZGVyX2VuZCgmbV92YXJpYW50QnVpbGRlcik7Ci0gICAgR1JlZlB0cjxHQnl0ZXM+IGRhdGEg
PSBnX3ZhcmlhbnRfZ2V0X2RhdGFfYXNfYnl0ZXModmFyaWFudC5nZXQoKSk7Ci0gICAgcmV0dXJu
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihn
X2J5dGVzX2dldF9kYXRhKGRhdGEuZ2V0KCksIG51bGxwdHIpKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGdfYnl0ZXNfZ2V0X3NpemUoZGF0YS5nZXQoKSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rl
ci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9LZXllZEVuY29kZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWNiYjc2YjJmYjgxOTEwMjQyZDJhYjkzZGIzZjMxMDk0MjBh
NmJiZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0tleWVkRW5jb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEgUy5MLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEtleWVkRW5jb2Rlcl9oCi0jZGVmaW5lIEtleWVkRW5jb2Rlcl9oCi0KLSNp
bmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+Ci0jaW5jbHVkZSA8Z2xpYi5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBL
ZXllZEVuY29kZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6S2V5ZWRFbmNvZGVyIHsKLXB1Ymxp
YzoKLSAgICBLZXllZEVuY29kZXIoKTsKLSAgICB+S2V5ZWRFbmNvZGVyKCk7Ci0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBmaW5pc2hFbmNvZGluZygpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVCeXRlcyhjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgdWludDhfdCosIHNpemVfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGVuY29kZUJvb2woY29uc3QgU3RyaW5nJiBrZXksIGJvb2wpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBlbmNvZGVVSW50MzIoY29uc3QgU3RyaW5nJiBrZXksIHVpbnQzMl90KSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5jb2RlSW50MzIoY29uc3QgU3RyaW5nJiBrZXks
IGludDMyX3QpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBlbmNvZGVJbnQ2NChjb25zdCBT
dHJpbmcmIGtleSwgaW50NjRfdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuY29kZUZs
b2F0KGNvbnN0IFN0cmluZyYga2V5LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGVuY29kZURvdWJsZShjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgZW5jb2RlU3RyaW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcm
KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpbk9iamVjdChjb25zdCBTdHJpbmcm
IGtleSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGVuZE9iamVjdCgpIG92ZXJyaWRlOwot
Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQXJyYXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkFycmF5RWxlbWVudCgpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBlbmRBcnJheUVsZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5kQXJyYXkoKSBvdmVycmlkZTsKLQotICAgIEdWYXJpYW50QnVpbGRlciBtX3ZhcmlhbnRCdWls
ZGVyOwotICAgIFZlY3RvcjxHVmFyaWFudEJ1aWxkZXIqLCAxNj4gbV92YXJpYW50QnVpbGRlclN0
YWNrOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVmUHRyPEdWYXJpYW50QnVpbGRl
cj4+LCAxNj4gbV9hcnJheVN0YWNrOwotICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBHUmVm
UHRyPEdWYXJpYW50QnVpbGRlcj4+LCAxNj4gbV9vYmplY3RTdGFjazsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gS2V5ZWRFbmNvZGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EYXRhYmFzZXMvZWZsL0RhdGFiYXNlUHJvY2Vzc1Byb3h5
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9EYXRhYmFzZXMvZWZsL0RhdGFiYXNl
UHJvY2Vzc1Byb3h5RWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NmVlZGVlYWYwODE3ZTUwYTUzNjk0NTVh
ZmZiY2Q5NTkzNjBlZDAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0RhdGFiYXNlcy9lZmwvRGF0YWJhc2VQcm9jZXNzUHJveHlFZmwuY3BwCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgTmF2ZXIgQ29ycC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRhdGFi
YXNlUHJvY2Vzc1Byb3h5LmgiCisKKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzUHJveHk6OnBsYXRmb3JtR2V0
TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKQoreworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNT
KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>