<?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>45110</bug_id>
          
          <creation_ts>2010-09-02 07:47:39 -0700</creation_ts>
          <short_desc>Implement JSC features required for IndexedDB</short_desc>
          <delta_ts>2015-02-17 19:19:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>87963</dependson>
    
    <dependson>87965</dependson>
    
    <dependson>88048</dependson>
    
    <dependson>88052</dependson>
    
    <dependson>88283</dependson>
    
    <dependson>88287</dependson>
    
    <dependson>88338</dependson>
    
    <dependson>89447</dependson>
    
    <dependson>102268</dependson>
    
    <dependson>102270</dependson>
    
    <dependson>102288</dependson>
    
    <dependson>102430</dependson>
    
    <dependson>102552</dependson>
    
    <dependson>103461</dependson>
    
    <dependson>103484</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alecflett</cc>
    
    <cc>andreip</cc>
    
    <cc>bulach</cc>
    
    <cc>charles.wei</cc>
    
    <cc>dglazkov</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>d-r</cc>
    
    <cc>efidler</cc>
    
    <cc>gustavo</cc>
    
    <cc>hans</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>joone</cc>
    
    <cc>jrogers</cc>
    
    <cc>jsbell</cc>
    
    <cc>kihong.kwon</cc>
    
    <cc>levin+threading</cc>
    
    <cc>michael</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ojan</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>red47514f7</cc>
    
    <cc>robin.qiu.dev</cc>
    
    <cc>robin.qiu</cc>
    
    <cc>sakari.poussa</cc>
    
    <cc>s.choi</cc>
    
    <cc>staikos</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>vimff0</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>273387</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-02 07:47:39 -0700</bug_when>
    <thetext>In order for IndexedDB to work on JSC, we need to implement several features.  So far:
* SerializedScriptValue needs to be serializable to a &quot;wire&quot; format
* We need to support the Static extended attribute (being added in https://bugs.webkit.org/show_bug.cgi?id=45044)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274705</commentid>
    <comment_count>1</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-09-06 10:44:13 -0700</bug_when>
    <thetext>*** Bug 43863 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312330</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-22 07:16:58 -0800</bug_when>
    <thetext>Note also that currently all work happens on the main thread.  This is OK for Chromium because of our multi-process architecture (which runs IndexedDB on a &quot;main thread&quot; in a different process), but we&apos;ll need to actually do the work on a background process for any other implementation (including those using V8).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335694</commentid>
    <comment_count>3</comment_count>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-01-18 01:10:10 -0800</bug_when>
    <thetext>Is anybody fixing this bug? If nobody, I would like to have a try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335717</commentid>
    <comment_count>4</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-18 01:47:33 -0800</bug_when>
    <thetext>I&apos;m pretty sure no one has started on this yet.  If you&apos;d like to, that&apos;d be great!

Note that in addition to what&apos;s already listed:
* the build files probably need to be updates
and
* JSC should have custom bindings for everything we have v8 custom bindings (and you should double check the JSC ones have similar logic)

For the serializedScriptValue wire format, I&apos;d suggest trying to re-use the v8 SSV code.  My hunch is that you could split it into 2 fairly small JSC/V8 specific classes + a big template class with most of the logic.  Not only would this be more maintainable, but it&apos;d also allow implementations to switch between v8/jsc without needing to convert all their IndexedDB data.

Note that we&apos;re only about 80% done with the overall API.  We&apos;re hoping to have that done before too long, but lately we&apos;ve been spending a lot of time tracking down some ugly bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335718</commentid>
    <comment_count>5</comment_count>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-01-18 01:52:59 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m pretty sure no one has started on this yet.  If you&apos;d like to, that&apos;d be great!
&gt; 

Thanks for your advices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336301</commentid>
    <comment_count>6</comment_count>
    <who name="Robin Qiu">robin.qiu</who>
    <bug_when>2011-01-18 19:12:55 -0800</bug_when>
    <thetext>Some questions:

1. In many IndexedDB classes, object parameters are passed in ref, but JSC binding code, which are automatically generated, is in point, except changing code like this, is there another way to fix this? :

Source/WebCore/storage/IDBObjectStore.h: (see OptionsObject)
-    PassRefPtr&lt;IDBIndex&gt; createIndex(const String&amp; name, const String&amp; keyPath, const OptionsObject&amp;, ExceptionCode&amp;);
+    PassRefPtr&lt;IDBIndex&gt; createIndex(const String&amp; name, const String&amp; keyPath, OptionsObject*, ExceptionCode&amp;);

2. OptionsObject is not implemented in JSC, I plan to add OptionObject.idl, OptionObject.cpp/h, and use JSC::JSValue to take place of v8::Local&lt;v8::Value&gt;.
Is this all right?

3. In JSC, WebCore::SerializedScriptValue is not derived from ThreadSafeShared&lt;&gt; but from RefCounted&lt;&gt;. In IDB classes, it is assumed to be ThreadSafeShared&lt;&gt;, but in other classes, it is assumed to be RefCounted&lt;&gt;. How to deal with this? multi-inheritance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336413</commentid>
    <comment_count>7</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2011-01-19 02:56:11 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Some questions:
&gt; 
&gt; 1. In many IndexedDB classes, object parameters are passed in ref, but JSC binding code, which are automatically generated, is in point, except changing code like this, is there another way to fix this? :
&gt; 
&gt; Source/WebCore/storage/IDBObjectStore.h: (see OptionsObject)
&gt; -    PassRefPtr&lt;IDBIndex&gt; createIndex(const String&amp; name, const String&amp; keyPath, const OptionsObject&amp;, ExceptionCode&amp;);
&gt; +    PassRefPtr&lt;IDBIndex&gt; createIndex(const String&amp; name, const String&amp; keyPath, OptionsObject*, ExceptionCode&amp;);

The options object is not ref-counted, so I&apos;m pretty sure the const &amp; version is the right one.  There&apos;s probably some list in the generator that you need to add it to.  I believe I had to do something similar for v8, but the code bases are pretty different these days.

&gt; 2. OptionsObject is not implemented in JSC, I plan to add OptionObject.idl, OptionObject.cpp/h, and use JSC::JSValue to take place of v8::Local&lt;v8::Value&gt;.
&gt; Is this all right?

I don&apos;t think you need an IDL.  I implemented it much like how SerializedScriptValue is implemented, IIRC: i.e. it&apos;s a first class citizen in the bindings generator.  Maybe look at my patch that added OO?

Otherwise copying and changing the v8 specific parts probably makes sense (unless you can think of a clean way to share the code...but I can&apos;t off the top of my head).
 
&gt; 3. In JSC, WebCore::SerializedScriptValue is not derived from ThreadSafeShared&lt;&gt; but from RefCounted&lt;&gt;. In IDB classes, it is assumed to be ThreadSafeShared&lt;&gt;, but in other classes, it is assumed to be RefCounted&lt;&gt;. How to deal with this? multi-inheritance?

I&apos;m not sure what you mean by multi-inheritance.

I think V8&apos;s SerializedScriptValue should have a |threadSafeCopy()| method.  It would call |m_data.crossThreadString()| and then clone itself.

Not sure what we can do other than a copy for JSC&apos;s.  (Do you know why the latter uses a vector?  Would it be possible for it to use a String?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447696</commentid>
    <comment_count>8</comment_count>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-08-06 20:28:01 -0700</bug_when>
    <thetext>Is there any progress on this patch? I&apos;m interested in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447703</commentid>
    <comment_count>9</comment_count>
    <who name="Robin Qiu">robin.qiu.dev</who>
    <bug_when>2011-08-06 21:35:17 -0700</bug_when>
    <thetext>To be honest, I didn&apos;t really get start. So, please feel free to take it over.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497056</commentid>
    <comment_count>10</comment_count>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-11-07 04:08:57 -0800</bug_when>
    <thetext>I have a question about implementing IDBBindingUtilities for JSC. IDBBindingUtilities.cpp have createIDBKeyFromSerializedValueAndKeyPath and injectIDBKeyIntoSerializedValue in V8
To implement it for JSC, i should pass ExecState* to that methods but i couldn&apos;t pass to them because there is no way to pass it. Do you have any idea for that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527182</commentid>
    <comment_count>11</comment_count>
      <attachid>120546</attachid>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-12-26 03:45:11 -0800</bug_when>
    <thetext>Created attachment 120546
first patch

Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527191</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-26 04:28:58 -0800</bug_when>
    <thetext>Attachment 120546 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1

Source/WebCore/storage/IDBFactoryBackendInterface.h:59:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/IDBFactoryBackendInterface.h:60:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/IDBFactoryBackendInterface.h:61:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/IDBFactoryBackendImpl.h:61:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/IDBFactoryBackendImpl.h:62:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/IDBFactoryBackendImpl.h:63:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/storage/IDBFactoryBackendImpl.h:68:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 7 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527192</commentid>
    <comment_count>13</comment_count>
      <attachid>120549</attachid>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-12-26 04:38:42 -0800</bug_when>
    <thetext>Created attachment 120549
Patch

Fix style check problem</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527196</commentid>
    <comment_count>14</comment_count>
      <attachid>120549</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-26 05:05:33 -0800</bug_when>
    <thetext>Comment on attachment 120549
Patch

Attachment 120549 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11035076</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527236</commentid>
    <comment_count>15</comment_count>
      <attachid>120549</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-26 13:24:51 -0800</bug_when>
    <thetext>Comment on attachment 120549
Patch

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

&gt; Source/WebCore/storage/IDBKeyPathBackendImpl.cpp:51
&gt; +#if USE(JSC)

WebCore proper shouldn&apos;t have any JSC specific code.  All the JSC specific code should be in the bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527266</commentid>
    <comment_count>16</comment_count>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2011-12-26 20:27:31 -0800</bug_when>
    <thetext>I understand what you meant. 

However, without including USE(JSC), I couldn&apos;t find any way that enables KeyPathBackendImpl to use IDBBindingUtilities methods (e.g., createIDBKeyFromSerializedValueAndKeyPath and injectIDBKeyIntoSerializedValue).


In JSC, the above JSC binding mothods require ExecState as a parameter unlike to V8. Therefore, I have appended USE(JSC) into the WebCore codes. If you have any idea without needing to include USE(JSC) for this purpose, I would be happy to know about it. 

Thanks,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527376</commentid>
    <comment_count>17</comment_count>
      <attachid>120549</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-12-27 08:32:52 -0800</bug_when>
    <thetext>Comment on attachment 120549
Patch

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

This of course needs a changelog.

&gt; Source/WebCore/bindings/js/OptionsObject.h:58
&gt; +class OptionsObject {
&gt; +public:
&gt; +    OptionsObject();
&gt; +    OptionsObject(JSC::ExecState*, const JSC::JSValue&amp; options);
&gt; +
&gt; +    OptionsObject&amp; operator=(const OptionsObject&amp;);
&gt; +
&gt; +    bool get(const String&amp;, bool&amp;) const;
&gt; +    bool get(const String&amp;, int32_t&amp;) const;
&gt; +    bool get(const String&amp;, double&amp;) const;
&gt; +    bool get(const String&amp;, String&amp;) const;
&gt; +    bool get(const String&amp;, unsigned short&amp;) const;
&gt; +    bool get(const String&amp;, unsigned&amp;) const;
&gt; +    bool get(const String&amp;, unsigned long long&amp;) const;
&gt; +
&gt; +    bool getWithUndefinedOrNullCheck(const String&amp;, String&amp;) const;
&gt; +
&gt; +    ~OptionsObject();
&gt; +
&gt; +private:
&gt; +    bool getKey(const String&amp; key, JSC::JSValue&amp;) const;
&gt; +
&gt; +    JSC::ExecState* m_exec;
&gt; +    JSC::JSValue m_options;
&gt; +};

The JSC bindings have a class called JSDictionary which has much of the same functionality has this, I would rather we didn&apos;t duplicate this code.

&gt; Source/WebCore/bindings/js/SerializedScriptValue.h:77
&gt;      String toString();
&gt; +    String toWireString();

It would probably make sense to add a comment explaining what the differences between toString and toWireString are.

&gt;&gt; Source/WebCore/storage/IDBKeyPathBackendImpl.cpp:51
&gt;&gt; +#if USE(JSC)
&gt; 
&gt; WebCore proper shouldn&apos;t have any JSC specific code.  All the JSC specific code should be in the bindings.

Indeed, why does JSC need special cased code here?

&gt; Source/WebCore/storage/IDBTransactionBackendImpl.h:98
&gt; +    ScriptExecutionContext* m_scriptExecutionContext;

What ensures the lifetime of the ScriptExecutionContext here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528398</commentid>
    <comment_count>18</comment_count>
      <attachid>120854</attachid>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2012-01-01 19:23:20 -0800</bug_when>
    <thetext>Created attachment 120854
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528399</commentid>
    <comment_count>19</comment_count>
      <attachid>120854</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-01 19:39:13 -0800</bug_when>
    <thetext>Comment on attachment 120854
Patch

Attachment 120854 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11024322</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528406</commentid>
    <comment_count>20</comment_count>
      <attachid>120859</attachid>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2012-01-01 20:39:15 -0800</bug_when>
    <thetext>Created attachment 120859
Patch

Fix chromium build error and append comment to toString and toWireString of SerializedScriptValue.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528412</commentid>
    <comment_count>21</comment_count>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2012-01-01 20:49:40 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 120549 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=120549&amp;action=review
&gt; 
&gt; This of course needs a changelog.

I appended it.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/OptionsObject.h:58
&gt; &gt; +class OptionsObject {
&gt; &gt; +public:
&gt; &gt; +    OptionsObject();
&gt; &gt; +    OptionsObject(JSC::ExecState*, const JSC::JSValue&amp; options);
&gt; &gt; +
&gt; &gt; +    OptionsObject&amp; operator=(const OptionsObject&amp;);
&gt; &gt; +
&gt; &gt; +    bool get(const String&amp;, bool&amp;) const;
&gt; &gt; +    bool get(const String&amp;, int32_t&amp;) const;
&gt; &gt; +    bool get(const String&amp;, double&amp;) const;
&gt; &gt; +    bool get(const String&amp;, String&amp;) const;
&gt; &gt; +    bool get(const String&amp;, unsigned short&amp;) const;
&gt; &gt; +    bool get(const String&amp;, unsigned&amp;) const;
&gt; &gt; +    bool get(const String&amp;, unsigned long long&amp;) const;
&gt; &gt; +
&gt; &gt; +    bool getWithUndefinedOrNullCheck(const String&amp;, String&amp;) const;
&gt; &gt; +
&gt; &gt; +    ~OptionsObject();
&gt; &gt; +
&gt; &gt; +private:
&gt; &gt; +    bool getKey(const String&amp; key, JSC::JSValue&amp;) const;
&gt; &gt; +
&gt; &gt; +    JSC::ExecState* m_exec;
&gt; &gt; +    JSC::JSValue m_options;
&gt; &gt; +};
&gt; 
&gt; The JSC bindings have a class called JSDictionary which has much of the same functionality has this, I would rather we didn&apos;t duplicate this code.

OptionsObject is exposed to WebCore. so I think we should keep this interface like V8.

&gt; 
&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.h:77
&gt; &gt;      String toString();
&gt; &gt; +    String toWireString();
&gt; 
&gt; It would probably make sense to add a comment explaining what the differences between toString and toWireString are.

I appended comment to it.

&gt; 
&gt; &gt;&gt; Source/WebCore/storage/IDBKeyPathBackendImpl.cpp:51
&gt; &gt;&gt; +#if USE(JSC)
&gt; &gt; 
&gt; &gt; WebCore proper shouldn&apos;t have any JSC specific code.  All the JSC specific code should be in the bindings.
&gt; 
&gt; Indeed, why does JSC need special cased code here?

Two methods createIDBKeyFromSerializedValueAndKeyPath and injectIDBKeyIntoSerializedValue in IDBKeyPathBackendImpl have functionality that create and inject key from and into SerializedScriptValue. To do so, they should use bindings method of SerializedScriptValue. In JSC bindings, they require ExecState as parameter unlike V8.
&gt; 
&gt; &gt; Source/WebCore/storage/IDBTransactionBackendImpl.h:98
&gt; &gt; +    ScriptExecutionContext* m_scriptExecutionContext;
&gt; 
&gt; What ensures the lifetime of the ScriptExecutionContext here?
The lifetime of the ScriptExecutionContext is same as document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528414</commentid>
    <comment_count>22</comment_count>
      <attachid>120859</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-01 21:04:08 -0800</bug_when>
    <thetext>Comment on attachment 120859
Patch

Attachment 120859 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11028324</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528424</commentid>
    <comment_count>23</comment_count>
      <attachid>120864</attachid>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2012-01-01 22:30:53 -0800</bug_when>
    <thetext>Created attachment 120864
Patch

Fix chromium build error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528431</commentid>
    <comment_count>24</comment_count>
      <attachid>120864</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-01 22:51:22 -0800</bug_when>
    <thetext>Comment on attachment 120864
Patch

Attachment 120864 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11056763</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572186</commentid>
    <comment_count>25</comment_count>
    <who name="Jeff Rogers">jrogers</who>
    <bug_when>2012-03-06 15:00:08 -0800</bug_when>
    <thetext>Just curios if there is still working going on for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572397</commentid>
    <comment_count>26</comment_count>
    <who name="Donggwan Kim">donggwan.kim</who>
    <bug_when>2012-03-06 18:17:20 -0800</bug_when>
    <thetext>I have to fix chromium build error, but not yet fixed. I will update fixed patch as soon as possible. Thank you for your attention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>575232</commentid>
    <comment_count>27</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-03-09 14:31:09 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=80207 looks like a duplicated effort on this. Can these be consolidated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605992</commentid>
    <comment_count>28</comment_count>
      <attachid>120864</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-04-19 15:25:06 -0700</bug_when>
    <thetext>Comment on attachment 120864
Patch

Given the changes in http://trac.webkit.org/changeset/110539 this patch would need to be significantly reworked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638910</commentid>
    <comment_count>29</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2012-05-31 19:19:00 -0700</bug_when>
    <thetext>I would like to break this down to a serial of small bugs/patches with each one deals with a specific issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662690</commentid>
    <comment_count>30</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2012-07-03 23:47:22 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=88287  is the only outstanding bug that blocks indexeddb from working for JSC. anybody can help with pushing it forward by a review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709629</commentid>
    <comment_count>31</comment_count>
      <attachid>161701</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-08-31 08:01:34 -0700</bug_when>
    <thetext>Created attachment 161701
Implement IndexedDB for JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709632</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-31 08:04:13 -0700</bug_when>
    <thetext>Attachment 161701 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/IDBKeyPathBackendImpl.cpp:45:  Missing spaces around =  [whitespace/operators] [4]
Source/WebCore/Modules/indexeddb/IDBKeyPathBackendImpl.cpp:45:  Missing spaces around &lt;  [whitespace/operators] [3]
Source/WebCore/Modules/indexeddb/IDBKeyPathBackendImpl.cpp:47:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:46:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:98:  Missing spaces around =  [whitespace/operators] [4]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:98:  Missing spaces around &lt;  [whitespace/operators] [3]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:128:  Missing spaces around =  [whitespace/operators] [4]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:128:  Missing spaces around &lt;  [whitespace/operators] [3]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:169:  Missing spaces around =  [whitespace/operators] [4]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:169:  Missing spaces around &lt;  [whitespace/operators] [3]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:186:  Missing spaces around =  [whitespace/operators] [4]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:186:  Missing spaces around &lt;  [whitespace/operators] [3]
Source/WebCore/bindings/js/IDBBindingUtilities.cpp:202:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h:66:  Missing space inside { }.  [whitespace/braces] [5]
Total errors found: 15 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709687</commentid>
    <comment_count>33</comment_count>
      <attachid>161713</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-08-31 09:07:40 -0700</bug_when>
    <thetext>Created attachment 161713
Implement IndexedDB for JSC

With this patch, WebKitGTK+ passes 149 of the 184 tests in storage/indexeddb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709717</commentid>
    <comment_count>34</comment_count>
      <attachid>161713</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-08-31 09:28:37 -0700</bug_when>
    <thetext>Comment on attachment 161713
Implement IndexedDB for JSC

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

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h:66
&gt; +    virtual void postSuccessHandlerCallback() { }

This is fine - in the Chromium port there&apos;s an extra layer in place which uses this callback as part of a cursor pre-fetching mechanism, so making the back end be a no-op here is good.

&gt; Source/WebCore/Modules/indexeddb/IDBCursorWithValue.idl:32
&gt; +        readonly attribute [V8CustomGetter, JSCustomGetter, CachedAttribute] IDBAny value;

Drive-by comment: we had to use a custom getter for V8 because although we want the value to be re-used across script accesses it needed a mechanism to be invalidated by the cursor. Not sure if CachedAttribute is buying anything (but if it is simplifying code, great!).

&gt; Source/WebCore/Modules/indexeddb/IDBKeyPathBackendImpl.cpp:43
&gt; +void IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath(const Vector&lt;RefPtr&lt;SerializedScriptValue&gt;, 0&gt;&amp; values, const IDBKeyPath&amp; keyPath, Vector&lt;RefPtr&lt;IDBKey&gt;, 0&gt;&amp; keys)

This file is being removed in https://bugs.webkit.org/show_bug.cgi?id=95385 (it is no longer needed)

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:76
&gt; +static PassRefPtr&lt;IDBKey&gt; createIDBKeyFromValue(ExecState* exec, JSValue value, Vector&lt;JSArray*&gt;&amp; stack)

Some of this may be obsoleted by:
https://bugs.webkit.org/show_bug.cgi?id=94023
https://bugs.webkit.org/show_bug.cgi?id=95409
... which attempt to optimize the pattern of converting ScriptValue -&gt; SerializedScriptValue during binding, then converting SSV back to SV for these key operations, then (sometimes) re-serializing as SSV.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709731</commentid>
    <comment_count>35</comment_count>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-08-31 09:53:11 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; Drive-by comment: we had to use a custom getter for V8 because although we want the value to be re-used across script accesses it needed a mechanism to be invalidated by the cursor. Not sure if CachedAttribute is buying anything (but if it is simplifying code, great!).

I have taken the same approach with the JSC bindings. Although it is necessary to have a custom getter to invalidate the cached value when the cursor value is dirty, CachedAttribute is required for the JSC binding generator to declare the cached m_value member in the JSIDBCursorWithValue class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>724579</commentid>
    <comment_count>36</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-09-20 09:43:05 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; 
&gt; Some of this may be obsoleted by:
&gt; https://bugs.webkit.org/show_bug.cgi?id=94023
&gt; https://bugs.webkit.org/show_bug.cgi?id=95409
&gt; ... which attempt to optimize the pattern of converting ScriptValue -&gt; SerializedScriptValue during binding, then converting SSV back to SV for these key operations, then (sometimes) re-serializing as SSV.

This is all in now, so this bug should be unblocked. I believe we&apos;re done tinkering with these fundamentals, so now is a great time to revisit this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746124</commentid>
    <comment_count>37</comment_count>
      <attachid>169575</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-10-19 01:33:12 -0700</bug_when>
    <thetext>Created attachment 169575
Implement IndexedDB for JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746133</commentid>
    <comment_count>38</comment_count>
      <attachid>169575</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-19 01:47:19 -0700</bug_when>
    <thetext>Comment on attachment 169575
Implement IndexedDB for JSC

Attachment 169575 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14459408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746137</commentid>
    <comment_count>39</comment_count>
      <attachid>169577</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-10-19 01:59:10 -0700</bug_when>
    <thetext>Created attachment 169577
Implement IndexedDB for JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746148</commentid>
    <comment_count>40</comment_count>
      <attachid>169577</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-19 02:10:32 -0700</bug_when>
    <thetext>Comment on attachment 169577
Implement IndexedDB for JSC

Attachment 169577 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14412945</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746149</commentid>
    <comment_count>41</comment_count>
      <attachid>169581</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-10-19 02:11:31 -0700</bug_when>
    <thetext>Created attachment 169581
Implement IndexedDB for JSC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746174</commentid>
    <comment_count>42</comment_count>
      <attachid>169581</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-19 02:52:45 -0700</bug_when>
    <thetext>Comment on attachment 169581
Implement IndexedDB for JSC

Attachment 169581 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14424903

New failing tests:
fast/events/constructors/message-event-constructor.html
fast/files/blob-constructor.html
fast/events/constructors/custom-event-constructor.html
fast/events/constructors/event-constructors.html
fast/dom/Geolocation/argument-types.html
fast/events/constructors/pop-state-event-constructor.html
fast/events/constructors/storage-event-constructor.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747153</commentid>
    <comment_count>43</comment_count>
      <attachid>169813</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-10-21 15:13:15 -0700</bug_when>
    <thetext>Created attachment 169813
Implement IndexedDB for JSC

With this patch, WebKitGTK+ passes 121 of the 202 tests in storage/indexeddb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747880</commentid>
    <comment_count>44</comment_count>
      <attachid>169813</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-22 14:23:50 -0700</bug_when>
    <thetext>Comment on attachment 169813
Implement IndexedDB for JSC

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

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:149
&gt; +        RefPtr&lt;IDBKey&gt; keyPathKey = createIDBKeyFromScriptValueAndKeyPath(context, value, keyPath);

These changes look complimentary to the patch over in https://bugs.webkit.org/show_bug.cgi?id=99975 - watch for collisions.

&gt; Source/WebCore/Modules/indexeddb/IDBCursorWithValue.idl:30
&gt; +    [V8CustomGetter, JSCustomGetter, CachedAttribute] readonly attribute IDBAny value;

Does CachedAttribute gain anything here? In the V8 case the V8CustomGetter is used as CachedAttribute doesn&apos;t let us &quot;dirty&quot; the values.

(As an alternative approach, I was pondering having IDBCursor&apos;s properties be &quot;any&quot; in the IDL and just a ScriptValue in the C++, but haven&apos;t played with that yet.)

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:105
&gt; +    const IDBIndexMetadata&amp; indexMetadata,

Indentation here is odd.

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1845
&gt; +    if (m_data.size() &amp; 1) {

Looks like a similar fix to https://bugs.webkit.org/show_bug.cgi?id=99310

Include the test case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747929</commentid>
    <comment_count>45</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-10-22 14:56:36 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/Modules/indexeddb/IDBCursorWithValue.idl:30
&gt; &gt; +    [V8CustomGetter, JSCustomGetter, CachedAttribute] readonly attribute IDBAny value;

&gt; (As an alternative approach, I was pondering having IDBCursor&apos;s properties be &quot;any&quot; in the IDL and just a ScriptValue in the C++, but haven&apos;t played with that yet.)

FYI: https://bugs.webkit.org/show_bug.cgi?id=100034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762326</commentid>
    <comment_count>46</comment_count>
      <attachid>173148</attachid>
    <who name="Michael Pruett">michael</who>
    <bug_when>2012-11-08 16:51:16 -0800</bug_when>
    <thetext>Created attachment 173148
Implement IndexedDB for JSC

I&apos;ve updated this patch in accordance with other recent changes to IndexedDB. In particular I&apos;ve removed the custom bindings for IDBCursorWithValue.

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:105
&gt; &gt; +    const IDBIndexMetadata&amp; indexMetadata,
&gt;
&gt; Indentation here is odd.

Unfortunately the indentation in the file currently no longer passes check-webkit-style, so retaining the current indentation would seem not to be an option. I would be happy to change the indentation to any style you suggest.

&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1845
&gt; &gt; +    if (m_data.size() &amp; 1) {
&gt;
&gt; Looks like a similar fix to https://bugs.webkit.org/show_bug.cgi?id=99310
&gt;
&gt; Include the test case?

The only place the JSC implementation of SerializedScriptValue::toWireString() is called is in IDBObjectStoreBackendImpl::putInternal(). This change is covered by numerous tests in storage/indexeddb, including the following which fail without this change:

storage/indexeddb/cursor-delete.html
storage/indexeddb/cursor-inconsistency.html
storage/indexeddb/cursor-key-order.html
storage/indexeddb/cursor-prev-no-duplicate.html
storage/indexeddb/cursor-value.html
storage/indexeddb/database-close.html
storage/indexeddb/factory-deletedatabase.html
storage/indexeddb/index-multientry.html
storage/indexeddb/index-population.html
storage/indexeddb/mutating-cursor.html
storage/indexeddb/mozilla/put-get-values.html
storage/indexeddb/odd-strings.html
storage/indexeddb/open-cursor.html
storage/indexeddb/transaction-rollback.html
storage/indexeddb/two-version-changes.html
storage/indexeddb/value-undefined.html
storage/indexeddb/values-odd-types.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766173</commentid>
    <comment_count>47</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-13 16:36:58 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; &gt; &gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:105
&gt; &gt; &gt; +    const IDBIndexMetadata&amp; indexMetadata,
&gt; &gt;
&gt; &gt; Indentation here is odd.
&gt; 
&gt; Unfortunately the indentation in the file currently no longer passes check-webkit-style, so retaining the current indentation would seem not to be an option. I would be happy to change the indentation to any style you suggest.

Yep, the file is currently incorrect. Just remove the line breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766292</commentid>
    <comment_count>48</comment_count>
      <attachid>173148</attachid>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2012-11-13 18:34:32 -0800</bug_when>
    <thetext>Comment on attachment 173148
Implement IndexedDB for JSC

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

General comments:  it would make it easier to break up the big patches to series of small patches, with each one targetting to solve one specific problem.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:48
&gt; +class IDBJSContext {

For this, please refer 88287 which has similar solution but goes no where there waiting for review for a long time. Wish you good luck with this :-)

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1849
&gt; +    }

For this part, please refer: 99310.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766296</commentid>
    <comment_count>49</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2012-11-13 18:38:39 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=173148&amp;action=review

General comments:  it would make it easier to break up the big patches to series of small patches, with each one targetting to solve one specific problem.

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:48
&gt; +class IDBJSContext {

For this, please refer 88287 which has similar solution but goes no where there waiting for review for a long time. Wish you good luck with this :-)

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:1849
&gt; +    }

For this part, please refer: 99310.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769347</commentid>
    <comment_count>50</comment_count>
      <attachid>173148</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-16 09:19:02 -0800</bug_when>
    <thetext>Comment on attachment 173148
Implement IndexedDB for JSC

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

&gt; Source/WebCore/bindings/js/IDBBindingUtilities.cpp:73
&gt; +    ScriptState* m_scriptState;

Given that we&apos;re in the JSC bindings here, we should probably use the type ExecState* for this member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>810792</commentid>
    <comment_count>51</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-01-18 10:28:29 -0800</bug_when>
    <thetext>All dependent bugs are fixed now, so can this be closed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070013</commentid>
    <comment_count>52</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-02-17 19:19:06 -0800</bug_when>
    <thetext>Seems like that.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120546</attachid>
            <date>2011-12-26 03:45:11 -0800</date>
            <delta_ts>2011-12-26 04:38:42 -0800</delta_ts>
            <desc>first patch</desc>
            <filename>indexeddb.patch</filename>
            <type>text/plain</type>
            <size>61211</size>
            <attacher name="Donggwan Kim">donggwan.kim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTM0OSwyMiArMTM0OSwzNCBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKICAg
ICBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKICAgICBzdG9yYWdlL0lEQkFueS5jcHAKLSAg
ICBzdG9yYWdlL0lEQkRhdGFiYXNlLmNwcAotICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKICAgICBzdG9yYWdlL0lEQkN1cnNvci5jcHAKICAgICBzdG9yYWdlL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcAorICAgIHN0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAorICAg
IHN0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisgICAgc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAorICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAogICAgIHN0
b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwCiAgICAgc3RvcmFnZS9JREJFdmVudERpc3Bh
dGNoZXIuY3BwCisgICAgc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorICAgIHN0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCisgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwCiAgICAgc3RvcmFnZS9JREJJbmRleC5jcHAKICAgICBzdG9yYWdlL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwCiAgICAgc3RvcmFnZS9JREJLZXkuY3BwCisgICAgc3RvcmFnZS9JREJLZXlQ
YXRoLmNwcAorICAgIHN0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAogICAgIHN0b3Jh
Z2UvSURCS2V5UmFuZ2UuY3BwCi0gICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAorICAgIHN0b3Jh
Z2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKyAgICBzdG9yYWdlL0lEQkxldmVsREJDb2Rp
bmcuY3BwCiAgICAgc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKICAgICBzdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwCi0gICAgc3RvcmFnZS9JREJGYWN0b3J5LmNwcAotICAg
IHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCi0gICAgc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwCisgICAgc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yLmNwcAorICAgIHN0b3JhZ2UvSURCUmVxdWVzdC5jcHAKKyAgICBzdG9yYWdlL0lEQlRy
YW5zYWN0aW9uLmNwcAorICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAK
KyAgICBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisgICAgc3RvcmFnZS9J
REJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCisgICAgc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5jcHAKICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCiAgICAgc3RvcmFnZS9M
b2NhbFN0b3JhZ2VUaHJlYWQuY3BwCiAgICAgc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3Bw
CkBAIC0xNDk0LDYgKzE1MDYsNyBAQCBJRiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAg
TElTVChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKICAgICAgICAgc3RvcmFnZS9JREJBbnkuaWRs
CiAgICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmlkbAorICAgICAgICBzdG9yYWdlL0lEQkN1cnNv
cldpdGhWYWx1ZS5pZGwKICAgICAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbAogICAg
ICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAogICAgICAgICBzdG9yYWdlL0lE
QkRhdGFiYXNlLmlkbApAQCAtMTUwNCw2ICsxNTE3LDggQEAgSUYgKEVOQUJMRV9JTkRFWEVEX0RB
VEFCQVNFKQogICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbAogICAgICAgICBzdG9y
YWdlL0lEQlJlcXVlc3QuaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCisg
ICAgICAgIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAorICAgICAgICBzdG9yYWdl
L0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAogICAgICkKIEVORElGICgpCiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9V
c2VKU0MuY21ha2UJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw3IEBAIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCiAgICAg
YmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCisgICAgYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5jcHAK
ICAgICBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCiAgICAgYmluZGluZ3Mv
anMvU2NoZWR1bGVkQWN0aW9uLmNwcAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MjEgKzMwLDc2IEBACiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogCiAjaW5jbHVk
ZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9EYXRlSW5zdGFuY2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUoKTsKLSAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodmFsdWUudG9JbnQzMihl
eGVjKSk7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBJREJLZXk6
OmNyZWF0ZU51bWJlcih2YWx1ZS50b051bWJlcihleGVjKSk7CiAgICAgaWYgKHZhbHVlLmlzU3Ry
aW5nKCkpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh1c3RyaW5nVG9TdHJpbmcodmFs
dWUudG9TdHJpbmcoZXhlYykpKTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgorICAg
ICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRv
U3RyaW5nKGV4ZWMpKSk7CisgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNf
aW5mbykpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUodmFsdWVUb0RhdGUoZXhl
YywgdmFsdWUpKTsKICAgICByZXR1cm4gMDsKIH0KIAorSlNWYWx1ZSBnZXROdGhWYWx1ZU9uS2V5
UGF0aChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSByb290VmFsdWUsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3sKKyAgICBKU1ZhbHVl
IGN1cnJlbnRWYWx1ZTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gcm9vdFZhbHVlLnRvT2JqZWN0
KGV4ZWMpOworICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CisgICAgQVNTRVJUKGluZGV4
IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5kZXg7ICsraSkgeworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXIoZXhlYywga2V5UGF0aEVsZW1lbnRzW2ldLmltcGwoKSk7CisgICAgICAgIGlmICghb2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgY3VycmVudFZhbHVl
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKworICAgIHJldHVy
biBjdXJyZW50VmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9t
U2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5
UGF0aCkKK3sKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpOworICAgIEpTVmFsdWUganNLZXkgPSBnZXROdGhWYWx1ZU9uS2V5UGF0aChleGVj
LCBqc1ZhbHVlLCBrZXlQYXRoLCBrZXlQYXRoLnNpemUoKSk7CisgICAgaWYgKGpzS2V5LmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZy
b21WYWx1ZShleGVjLCBqc0tleSk7Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aCkKK3sKKyAgICBpZiAoIXZhbHVlKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgha2V5UGF0aC5zaXplKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNWYWx1ZSBwYXJlbnQgPSBnZXRO
dGhWYWx1ZU9uS2V5UGF0aChleGVjLCBqc1ZhbHVlLCBrZXlQYXRoLCBrZXlQYXRoLnNpemUoKSAt
IDEpOworICAgIGlmIChwYXJlbnQuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoIXBhcmVudC5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBwYXJlbnQudG9PYmplY3QoZXhlYyk7CisgICAgb2JqZWN0LT5wdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIGtleVBhdGgubGFzdCgp
LmltcGwoKSksIHBhcmVudCk7CisKKyAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoZXhlYywganNWYWx1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAkocmV2aXNpb24gMTAzNDAwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiIAorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYs
NiArMzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJLZXk7CiAKIFBhc3NSZWZQ
dHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUpOworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFs
dWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCAgY29uc3QgVmVjdG9yPFN0cmluZywgMD4mKTsKK1Bhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKEpTQzo6RXhlY1N0
YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmcsIDA+Jik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAkocmV2aXNpb24gMTAzNDAwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAKIAogI2luY2x1ZGUgIklEQkFueS5oIgogI2luY2x1
ZGUgIklEQkN1cnNvci5oIgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgogI2luY2x1
ZGUgIklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgogI2luY2x1ZGUgIklE
QkluZGV4LmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUu
aCIKICNpbmNsdWRlICJKU0lEQkN1cnNvci5oIgorI2luY2x1ZGUgIkpTSURCQ3Vyc29yV2l0aFZh
bHVlLmgiCiAjaW5jbHVkZSAiSlNJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkpTSURCRmFjdG9y
eS5oIgogI2luY2x1ZGUgIkpTSURCSW5kZXguaCIKQEAgLTYzLDYgKzY1LDggQEAgSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAgICAgY2FzZSBJREJBbnk6OklEQkN1cnNvclR5cGU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJDdXJzb3IoKSk7CisgICAgY2FzZSBJREJBbnk6
OklEQkN1cnNvcldpdGhWYWx1ZVR5cGU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgaWRiQW55LT5pZGJDdXJzb3JXaXRoVmFsdWUoKSk7CiAgICAgY2FzZSBJREJBbnk6
OklEQkRhdGFiYXNlVHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBpZGJBbnktPmlkYkRhdGFiYXNlKCkpOwogICAgIGNhc2UgSURCQW55OjpJREJGYWN0b3J5VHlw
ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5j
cHAJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
S2V5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsOCBAQCBKU1ZhbHVlIHRv
SlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgICAgIHJldHVybiBqc051bWJlcihr
ZXktPm51bWJlcigpKTsKICAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKICAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIGtleS0+c3RyaW5nKCkpOwotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZGF0ZXMuCisgICAgY2FzZSBJREJLZXk6OkRhdGVUeXBlOgorICAgICAgICByZXR1cm4ganNE
YXRlT3JOdWxsKGV4ZWMsIGtleS0+ZGF0ZSgpKTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFy
cmF5cy4KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlv
bnNPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
T3B0aW9uc09iamVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcHRp
b25zT2JqZWN0LmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitPcHRpb25zT2JqZWN0OjpPcHRpb25z
T2JqZWN0KCkKKyAgICA6IG1fZXhlYygwKQoreworfQorCitPcHRpb25zT2JqZWN0OjpPcHRpb25z
T2JqZWN0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU1ZhbHVlJiBvcHRpb25zKQorICAg
IDogbV9leGVjKGV4ZWMpCisgICAgLCBtX29wdGlvbnMob3B0aW9ucykKK3sKK30KKworT3B0aW9u
c09iamVjdDo6fk9wdGlvbnNPYmplY3QoKQoreworfQorCitPcHRpb25zT2JqZWN0JiBPcHRpb25z
T2JqZWN0OjpvcGVyYXRvcj0oY29uc3QgT3B0aW9uc09iamVjdCYgb3B0aW9uc09iamVjdCkKK3sK
KyAgICBtX2V4ZWMgPSBvcHRpb25zT2JqZWN0Lm1fZXhlYzsKKyAgICBtX29wdGlvbnMgPSBvcHRp
b25zT2JqZWN0Lm1fb3B0aW9uczsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgT3B0aW9u
c09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBib29sJiB2YWx1ZSkgY29uc3QKK3sKKyAg
ICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBqc1ZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVlLnRvQm9vbGVhbihtX2V4ZWMp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBT
dHJpbmcmIGtleSwgaW50MzJfdCYgdmFsdWUpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVl
OworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHZhbHVlID0ganNWYWx1ZS50b0ludDMyKG1fZXhlYyk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUm
IHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdldEtleShr
ZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IGpzVmFs
dWUudG9OdW1iZXIobV9leGVjKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25z
T2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgdmFsdWUpIGNvbnN0Cit7Cisg
ICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKHVzdHJpbmdUb1N0
cmluZyhqc1ZhbHVlLnRvU3RyaW5nKG1fZXhlYykpKTsKKyAgICB2YWx1ZSA9IHN0cmluZzsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5n
JiBrZXksIHVuc2lnbmVkIHNob3J0JiB2YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFs
dWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgdmFsdWUgPSBqc1ZhbHVlLnRvSW50MzIobV9leGVjKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIHVuc2ln
bmVkJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRL
ZXkoa2V5LCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBq
c1ZhbHVlLnRvSW50MzIobV9leGVjKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRp
b25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIHVuc2lnbmVkIGxvbmcgbG9uZyYgdmFs
dWUpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwg
anNWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0ganNWYWx1ZS50
b051bWJlcihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmpl
Y3Q6OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5n
JiB2YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXko
a2V5LCBqc1ZhbHVlKSB8fCBqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgIHZhbHVlID0gU3RyaW5nKCk7CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYg
c3RyaW5nKHVzdHJpbmdUb1N0cmluZyhqc1ZhbHVlLnRvU3RyaW5nKG1fZXhlYykpKTsKKyAgICAg
ICAgdmFsdWUgPSBzdHJpbmc7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
T3B0aW9uc09iamVjdDo6Z2V0S2V5KGNvbnN0IFN0cmluZyYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZXhlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fb3B0aW9ucy5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IG1fb3B0aW9ucy50b09iamVjdChtX2V4ZWMpOwor
ICAgIGlmICghb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIGtleS5pbXBs
KCkpKTsKKyAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuY3BwCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09w
dGlvbnNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9P
cHRpb25zT2JqZWN0LmgJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL09wdGlvbnNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMzcgQEAK
ICNpZm5kZWYgT3B0aW9uc09iamVjdF9oCiAjZGVmaW5lIE9wdGlvbnNPYmplY3RfaAogCi0vLyBG
SVhNRTogSW1wbGVtZW50LgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8
cnVudGltZS9KU1ZhbHVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgT3B0aW9u
c09iamVjdCB7CitwdWJsaWM6CisgICAgT3B0aW9uc09iamVjdCgpOworICAgIE9wdGlvbnNPYmpl
Y3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkpTVmFsdWUmIG9wdGlvbnMpOworCisgICAg
T3B0aW9uc09iamVjdCYgb3BlcmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmKTsKKworICAgIGJv
b2wgZ2V0KGNvbnN0IFN0cmluZyYsIGJvb2wmKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBT
dHJpbmcmLCBpbnQzMl90JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgZG91
YmxlJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7
CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKKyAg
ICBib29sIGdldChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCYpIGNvbnN0OworICAgIGJvb2wgZ2V0
KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OworCisgICAgYm9vbCBn
ZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7
CisKKyAgICB+T3B0aW9uc09iamVjdCgpOworCitwcml2YXRlOgorICAgIGJvb2wgZ2V0S2V5KGNv
bnN0IFN0cmluZyYga2V5LCBKU0M6OkpTVmFsdWUmKSBjb25zdDsKKworICAgIEpTQzo6RXhlY1N0
YXRlKiBtX2V4ZWM7CisgICAgSlNDOjpKU1ZhbHVlIG1fb3B0aW9uczsKK307CisKK30gLy8gV2Vi
Q29yZQogCiAjZW5kaWYgLy8gT3B0aW9uc09iamVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9u
IDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDggQEAgZW51bSBTZXJpYWxpemF0
aW9uVGFnIHsKICAgICBSZWdFeHBUYWcgPSAxOCwKICAgICBPYmplY3RSZWZlcmVuY2VUYWcgPSAx
OSwKICAgICBNZXNzYWdlUG9ydFJlZmVyZW5jZVRhZyA9IDIwLAorICAgIE51bWJlclRhZyA9IDIx
LAorICAgIFBhZGRpbmdUYWcgPSAyMiwKICAgICBFcnJvclRhZyA9IDI1NQogfTsKIApAQCAtMjcx
LDcgKzI3MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgd3JpdGVMaXR0bGVFbmRp
YW48dWludDhfdD4ob3V0LCBTdHJpbmdUYWcpOwogICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihv
dXQsIHMubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm4gd3JpdGVMaXR0bGVFbmRpYW4ob3V0LCBz
LmltcGwoKS0+Y2hhcmFjdGVycygpLCBzLmxlbmd0aCgpKTsKKyAgICAgICAgYm9vbCByZXQgPSB3
cml0ZUxpdHRsZUVuZGlhbihvdXQsIHMuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkp
OworCisgICAgICAgIGlmIChvdXQuc2l6ZSgpICUgMikKKyAgICAgICAgICAgIHdyaXRlTGl0dGxl
RW5kaWFuPHVpbnQ4X3Q+KG91dCwgUGFkZGluZ1RhZyk7CisKKyAgICAgICAgcmV0dXJuIHJldDsK
ICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBzZXJpYWxpemVVbmRlZmluZWQoVmVjdG9yPHVpbnQ4
X3Q+JiBvdXQpCkBAIC0yODYsNiArMjkzLDE4IEBAIHB1YmxpYzoKICAgICAgICAgd3JpdGVMaXR0
bGVFbmRpYW48dWludDhfdD4ob3V0LCB2YWx1ZSA/IFRydWVUYWcgOiBGYWxzZVRhZyk7CiAgICAg
fQogCisgICAgc3RhdGljIHZvaWQgc2VyaWFsaXplTnVtYmVyKGRvdWJsZSB2YWx1ZSwgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXQpCisgICAgeworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihvdXQsIEN1
cnJlbnRWZXJzaW9uKTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW48dWludDhfdD4ob3V0LCBO
dW1iZXJUYWcpOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAg
ICAgICAgIGludDY0X3QgaTsKKyAgICAgICAgfSB1OworICAgICAgICB1LmQgPSB2YWx1ZTsKKyAg
ICAgICAgd3JpdGVMaXR0bGVFbmRpYW4ob3V0LCB1LmkpOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBNZXNzYWdlUG9ydEFycmF5KiBtZXNz
YWdlUG9ydHMsIFZlY3Rvcjx1aW50OF90PiYgb3V0KQogICAgICAgICA6IENsb25lQmFzZShleGVj
KQpAQCAtNzk2LDExICs4MTUsMjUgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJp
YWxpemVyOgogICAgIGlmIChtX2ZhaWxlZCkKICAgICAgICAgcmV0dXJuIFVuc3BlY2lmaWVkRXJy
b3I7CiAKKyAgICBpZiAobV9idWZmZXIuc2l6ZSgpICUgMikKKyAgICAgICAgd3JpdGUoUGFkZGlu
Z1RhZyk7CisKICAgICByZXR1cm4gU3VjY2Vzc2Z1bGx5Q29tcGxldGVkOwogfQogCiBjbGFzcyBD
bG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiBwdWJsaWM6CisgICAgc3RhdGljIFN0cmlu
ZyB0b1dpcmVTdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCisgICAgeworICAg
ICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKKyAgICAgICAgY29uc3Qg
dWludDhfdCogZW5kID0gYnVmZmVyLmVuZCgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBsZW5n
dGggPSBidWZmZXIuc2l6ZSgpIC8gc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgVVN0cmluZyBzdHI7
CisgICAgICAgIGlmICghcmVhZFN0cmluZyhwdHIsIGVuZCwgc3RyLCBsZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5nKHN0ci5pbXBsKCkp
OworICAgIH0KKwogICAgIHN0YXRpYyBTdHJpbmcgZGVzZXJpYWxpemVTdHJpbmcoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBidWZmZXIpCiAgICAgewogICAgICAgICBjb25zdCB1aW50OF90KiBwdHIg
PSBidWZmZXIuYmVnaW4oKTsKQEAgLTE0MTYsNiArMTQ0OSwxNCBAQCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7CiB9CiAKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgaWYgKCF3cml0
ZUxpdHRsZUVuZGlhbihidWZmZXIsIHN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgc3RyaW5n
Lmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7Cit9CisKIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0NvbnRleHRSZWYg
b3JpZ2luQ29udGV4dCwgSlNWYWx1ZVJlZiBhcGlWYWx1ZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRB
cnJheSogbWVzc2FnZVBvcnRzLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CkBAIC0xNDQ0LDYg
KzE0ODUsMTEgQEAgU3RyaW5nIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoKQogICAg
IHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcobV9kYXRhKTsKIH0K
IAorU3RyaW5nIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKCkKK3sKKyAgICBy
ZXR1cm4gQ2xvbmVEZXNlcmlhbGl6ZXI6OnRvV2lyZVN0cmluZyhtX2RhdGEpOworfQorCiBKU1Zh
bHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6
YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewpAQCAtMTQ5NCw2ICsxNTQwLDEzIEBA
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWwKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKIH0KIAorUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFs
dWUoZG91YmxlIHZhbHVlKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgQ2xv
bmVTZXJpYWxpemVyOjpzZXJpYWxpemVOdW1iZXIodmFsdWUsIGJ1ZmZlcik7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7Cit9CisKIHZvaWQg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjptYXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxpemF0aW9u
RmFpbGVkKEV4ZWNTdGF0ZSogZXhlYywgU2VyaWFsaXphdGlvblJldHVybkNvZGUgY29kZSkKIHsK
ICAgICBpZiAoY29kZSA9PSBTdWNjZXNzZnVsbHlDb21wbGV0ZWQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNp
b24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwxNCBAQCBlbnVtIFNlcmlhbGl6
YXRpb25FcnJvck1vZGUgeyBOb25UaHJvd2luCiAKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotY2xh
c3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIE1lc3NhZ2VQb3J0QXJyYXkqLCBTZXJpYWxpemF0aW9uRXJyb3JN
b2RlID0gVGhyb3dpbmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBNZXNzYWdlUG9ydEFy
cmF5KiA9IDAsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBUaHJvd2luZyk7CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmLCBNZXNzYWdlUG9ydEFycmF5KiwgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9t
V2lyZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGFkb3B0KFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7CkBAIC03
MCwxMCArNzEsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBTZXJpYWxpemVkU2NyaXB0VmFsdWUq
IG51bGxWYWx1ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdW5kZWZpbmVkVmFsdWUoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGJvb2xlYW5WYWx1ZShib29sIHZhbHVlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG51bWJlclZhbHVlKGRvdWJsZSB2YWx1ZSk7CiAKICAg
ICBTdHJpbmcgdG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCk7CiAgICAgCi0g
ICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIE1lc3NhZ2VQb3J0QXJyYXkqLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gVGhy
b3dpbmcpOworICAgIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBNZXNzYWdlUG9ydEFycmF5KiA9IDAsIFNlcmlhbGl6YXRpb25F
cnJvck1vZGUgPSBUaHJvd2luZyk7CiAgICAgSlNWYWx1ZVJlZiBkZXNlcmlhbGl6ZShKU0NvbnRl
eHRSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgTWVzc2FnZVBvcnRBcnJheSopOwogICAgIEpT
VmFsdWVSZWYgZGVzZXJpYWxpemUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxMjYsMTEg
KzIxMjYsMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNz
TmFtZX0oZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7XG4iKTsKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMpXG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzaWYgKCEkZnVuY3Rp
b24tPmlzU3RhdGljKSB7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG15
ICRraW5kID0gJGZ1bmN0aW9uLT5pc1N0YXRpYyA/ICJDb25zdHJ1Y3RvciIgOiAiIjsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCYke2NsYXNzTmFtZX06OnNfaW5mbykp
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmJHtjbGFzc05hbWV9JHtraW5kfTo6c19pbmZvKSlcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmpl
Y3QodGhpc1ZhbHVlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAke2NsYXNzTmFtZX0ke2tpbmR9KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8JHtjbGFz
c05hbWV9JHtraW5kfSo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpO1xuIik7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgJiR7Y2xhc3NOYW1lfTo6c19pbmZvKTtcbiIpIHVubGVzcyAo
JGZ1bmN0aW9uLT5pc1N0YXRpYyk7CkBAIC0yMTg3LDM0ICsyMTg4LDM0IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlm
XG5cbiIpIGlmICRjb25kaXRpb25hbDsKICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmICgkbmVlZHNNYXJrQ2hpbGRyZW4gJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgJnNfaW5mbyk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7XG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpO1xuIik7Ci0gICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHRoaXNPYmplY3QtPmltcGwoKS0+dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZp
c2l0b3IpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJG51bUNhY2hlZEF0
dHJpYnV0ZXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAoQHskZGF0YU5vZGUtPmF0
dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRhdHRyaWJ1dGUgPSAkXzsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+bV8iIC4gJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5uYW1lIC4gIilcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tXyIgLiAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgaWYgKCRuZWVkc01hcmtDaGlsZHJlbiAmJiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09i
amVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZz
X2luZm8pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIENPTVBJTEVfQVNT
RVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTtcbiIpOworICAg
ICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifSkg
eworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+aW1wbCgp
LT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7XG4iKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoJG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSB7CisgICAgICAgICAgICBmb3JlYWNoIChA
eyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICBteSAkYXR0cmlidXRl
ID0gJF87CisgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5tXyIgLiAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPm5hbWUgLiAiKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV8iIC4gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIik7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAg
ICAgICAgIH0KLSAgICAgICAgIyBDYWNoZWQgYXR0cmlidXRlcyBhcmUgaW5kZWVkIGFsbG93ZWQg
d2hlbiB0aGVyZSBpcyBhIGN1c3RvbSBtYXJrL3Zpc2l0Q2hpbGRyZW4gZnVuY3Rpb24uCi0gICAg
ICAgICMgVGhlIGN1c3RvbSBmdW5jdGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBhY2NvdW50IGZvciB0
aGUgY2FjaGVkIGF0dHJpYnV0ZS4KLSAgICAgICAgIyBVbmNvbW1lbnQgdGhlIGJlbG93IGxpbmUg
dG8gdGVtcG9yYXJpbHkgZW5mb3JjZSBnZW5lcmF0ZWQgbWFyayBmdW5jdGlvbnMgd2hlbiBjYWNo
ZWQgYXR0cmlidXRlcyBhcmUgcHJlc2VudC4KLSAgICAgICAgIyBkaWUgIkNhbid0IGdlbmVyYXRl
IGJpbmRpbmcgZm9yIGNsYXNzIHdpdGggY2FjaGVkIGF0dHJpYnV0ZSBhbmQgY3VzdG9tIG1hcmsu
IiBpZiAoKCRudW1DYWNoZWRBdHRyaWJ1dGVzID4gMCkgYW5kICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSkpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CiAgICAgfQorICAgICMgQ2FjaGVkIGF0dHJpYnV0ZXMgYXJlIGlu
ZGVlZCBhbGxvd2VkIHdoZW4gdGhlcmUgaXMgYSBjdXN0b20gbWFyay92aXNpdENoaWxkcmVuIGZ1
bmN0aW9uLgorICAgICMgVGhlIGN1c3RvbSBmdW5jdGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBhY2Nv
dW50IGZvciB0aGUgY2FjaGVkIGF0dHJpYnV0ZS4KKyAgICAjIFVuY29tbWVudCB0aGUgYmVsb3cg
bGluZSB0byB0ZW1wb3JhcmlseSBlbmZvcmNlIGdlbmVyYXRlZCBtYXJrIGZ1bmN0aW9ucyB3aGVu
IGNhY2hlZCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LgorICAgICMgZGllICJDYW4ndCBnZW5lcmF0
ZSBiaW5kaW5nIGZvciBjbGFzcyB3aXRoIGNhY2hlZCBhdHRyaWJ1dGUgYW5kIGN1c3RvbSBtYXJr
LiIgaWYgKCgkbnVtQ2FjaGVkQXR0cmlidXRlcyA+IDApIGFuZCAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pKTsKIAogICAgIGlmICgkbnVtQ29u
c3RhbnRzID4gMCkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIENvbnN0YW50IGdl
dHRlcnNcblxuIik7CkBAIC0yNTM5LDkgKzI1NDAsMTYgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVy
c0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBlIGNvbnZlcnNp
b24gc3VjY2VlZGVkLgotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Cisg
ICAgICAgICAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEkbmFtZSkge1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBl
IGNvbnZlcnNpb24gc3VjY2VlZGVkLgorICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5vdCAkaW1wbENs
YXNzTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmICghJG5hbWUpIHtcbiIpOwpAQCAtMjgwMSw2ICsyODA5LDcgQEAgbXkgJW5hdGl2
ZVR5cGUgPSAoCiAgICAgIkRPTVN0cmluZ1tdIiA9PiAiRE9NU3RyaW5nTGlzdCoiLAogICAgICJE
T01PYmplY3QiID0+ICJTY3JpcHRWYWx1ZSIsCiAgICAgIk5vZGVGaWx0ZXIiID0+ICJSZWZQdHI8
Tm9kZUZpbHRlcj4iLAorICAgICJPcHRpb25zT2JqZWN0IiA9PiAiT3B0aW9uc09iamVjdCIsCiAg
ICAgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgPT4gIlJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IiwKICAgICAiSURCS2V5IiA9PiAiUmVmUHRyPElEQktleT4iLAogICAgICJib29sZWFuIiA9
PiAiYm9vbCIsCkBAIC0yODgxLDYgKzI4OTAsMTcgQEAgc3ViIElzQXJyYXlUeXBlCiAgICAgcmV0
dXJuICR0eXBlID1+IG0vXFtcXSQvOwogfQogCitzdWIgVHlwZUNhbkZhaWxDb252ZXJzaW9uCit7
CisgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworCisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVy
YXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiSURCS2V5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlIjsKKyAgICByZXR1cm4gMDsKK30KKwogc3ViIEpTVmFsdWVUb05hdGl2ZQogewog
ICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKQEAgLTI5MTksNiArMjkzOSwxMSBAQCBzdWIgSlNW
YWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3Jl
YXRlKFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgIiAuICR2YWx1ZSAuIikpIjsKICAg
ICB9CiAKKyAgICBpZiAoJHR5cGUgZXEgIk9wdGlvbnNPYmplY3QiIG9yICR0eXBlIGVxICJhbnki
KSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ik9wdGlvbnNPYmplY3QuaCJ9ID0gMTsKKyAgICAg
ICAgcmV0dXJuICJPcHRpb25zT2JqZWN0KGV4ZWMsICR2YWx1ZSkiOworICAgIH0KKwogICAgIGlm
ICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55Iikgewog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29u
ZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KGV4ZWMsICR2YWx1ZSkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JX
aXRoVmFsdWUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vy
c29yV2l0aFZhbHVlLmlkbAkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4
IEBACiBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UsCisgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gSURCQ3Vyc29yV2l0aFZhbHVlIDogSURC
Q3Vyc29yIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2YWx1ZTsKICAgICB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTkzLDggKzk0LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CiB9OwogCi1JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIGNv
b3JkaW5hdG9yLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYg
dW5pcXVlSWRlbnRpZmllcikKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKK0lE
QkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUq
IGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElE
QkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlm
aWVyKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX2Jh
Y2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAgICAgLCBtX2lkKEludmFsaWRJZCkKICAgICAsIG1f
bmFtZShuYW1lKQogICAgICwgbV92ZXJzaW9uKCIiKQpAQCAtMjMwLDcgKzIzMiw3IEBAIHZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbigKIAogICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKLSAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFu
c2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgb2JqZWN0U3RvcmVOYW1lcy5nZXQo
KSwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCB0aGlzKTsKICAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwsIGRhdGFiYXNlLCB2ZXJzaW9uLCBjYWxsYmFja3Ms
IHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24sIGRhdGFi
YXNlLCBtX3ZlcnNpb24pKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
T1RfQUxMT1dFRF9FUlI7CkBAIC0zMTEsNyArMzEzLDcgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhYwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90IGFs
bG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KLSAgICByZXR1cm4gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMpOwor
ICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBvYmplY3RTdG9yZU5hbWVzLCBtb2RlLCB0aGlzKTsKIH0KIAogdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGNhbGxiYWNrcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIg
KzQxLDEzIEBAIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OwogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsIDogcHVibGljIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1w
bCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0
YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIGNvb3JkaW5hdG9yLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChu
YW1lLCBkYXRhYmFzZSwgY29vcmRpbmF0b3IsIGZhY3RvcnksIHVuaXF1ZUlkZW50aWZpZXIpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnRl
eHQsIG5hbWUsIGRhdGFiYXNlLCBjb29yZGluYXRvciwgZmFjdG9yeSwgdW5pcXVlSWRlbnRpZmll
cikpOwogICAgIH0KICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCk7CiAKQEAg
LTc2LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogCiBwcml2YXRlOgotICAg
IElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
cmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJ
REJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwog
CiAgICAgdm9pZCBvcGVuSW50ZXJuYWwoKTsKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsK
QEAgLTkyLDcgKzkzLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBtX2JhY2tpbmdTdG9yZTsKLSAgICBpbnQ2NCBtX2lkOworICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBpbnQ2NF90IG1faWQ7CiAgICAg
U3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV92ZXJzaW9uOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKQEAgLTk0LDEyICs5NSwxMiBA
QCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAg
ICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRl
eHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICAgICAgbV9iYWNrZW5kLT5vcGVuKG5h
bWUsIHJlcXVlc3QuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJp
bmcoKSk7CisgICAgICAgIG1fYmFja2VuZC0+b3Blbihjb250ZXh0LCBuYW1lLCByZXF1ZXN0Lmdl
dCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBmcmFtZSwgU3RyaW5nKCkpOwogICAgICAg
ICByZXR1cm4gcmVxdWVzdDsKICAgICB9CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIDApOwotICAgIG1fYmFja2VuZC0+b3BlbkZyb21Xb3JrZXIobmFtZSwg
cmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8V29y
a2VyQ29udGV4dCo+KGNvbnRleHQpLCBTdHJpbmcoKSk7CisgICAgbV9iYWNrZW5kLT5vcGVuRnJv
bVdvcmtlcihjb250ZXh0LCBuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpLCBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIFN0cmluZygpKTsK
ICAgICByZXR1cm4gcmVxdWVzdDsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC0xMjQsNyArMTI1
LDcgQEAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRgogCiAgICAgUmVm
UHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGVOdWxsKCksICIiKTsKICAgICBH
cm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5n
cm91cFNldHRpbmdzKCk7Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1
ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3Vw
U2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0
ZURhdGFiYXNlKGNvbnRleHQsIG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQ
YXRoKCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM0MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgogI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtOTgsMTcgKzk5LDE3IEBA
IHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU4KICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKLSAg
ICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVj
dG9yeSk7CisgICAgb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIGNhbGxiYWNrcywgc2VjdXJp
dHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6b3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit2b2lkIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3BlbkZyb21Xb3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXJlY3RvcnkpCiB7Ci0gICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywg
c2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgIG9wZW5JbnRlcm5hbChjb250ZXh0
LCBuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKIH0KIAot
dm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
ZWN0b3J5KQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewogICAg
IGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIo
bmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwogCkBAIC0xMjcsNyArMTI4LDcgQEAgdm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCks
IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7
CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShjb250ZXh0LCBuYW1lLCBiYWNraW5nU3RvcmUu
Z2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRp
Zmllcik7CiAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRh
dGFiYXNlQmFja2VuZC5nZXQoKSk7CiAgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFz
ZShjYWxsYmFja3MpOwogfQpAQCAtMTU0LDcgKzE1NSw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBJREJGYWN0b3J5QmEKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBJREJGYWN0b3J5
QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNr
cyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQordm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQog
ewogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0
eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlx
dWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKQEAgLTE3NCw3ICsxNzUs
NyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdT
dG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJ
ZGVudGlmaWVyKTsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VC
YWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKGNvbnRleHQsIG5hbWUsIGJh
Y2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1
bmlxdWVJZGVudGlmaWVyKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlPihkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpLnJlbGVhc2UoKSk7
CiAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNl
QmFja2VuZC5nZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYg
KzQxLDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKIGNsYXNzIElEQkJhY2tpbmdTdG9yZTsKIGNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsIDogcHVibGljIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoK
QEAgLTU3LDE0ICs1OCwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJh
c2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2
b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNh
bGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsKICAg
ICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRy
PFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2b2lkIG9wZW5J
bnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZvaWQgb3BlbkludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKj4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwogICAgIElEQkRhdGFiYXNlQmFja2VuZE1h
cCBtX2RhdGFiYXNlQmFja2VuZE1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9uIDEwMzQwMCkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIElEQkRhdGFi
YXNlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBXb3JrZXJDb250ZXh0OworY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApA
QCAtNTUsOSArNTYsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VO
YW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lk
IG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3Mq
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUq
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21X
b3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4
dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVE
YXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5k
SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRo
QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICsz
Miw0NyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLXZvaWQgSURCS2V5UGF0
aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRo
KGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYsIDA+IHZhbHVlcywg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQor
I2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNp
bmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlh
bGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgMD4mIHZhbHVlcywgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQogewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2ly
ZUZvcm1hdCBmb3IgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgorICAgIFZlY3RvcjxTdHJpbmc+IGlk
YktleVBhdGg7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgcGFyc2VFcnJvcjsKKyAgICBJREJQ
YXJzZUtleVBhdGgoa2V5UGF0aCwgaWRiS2V5UGF0aCwgcGFyc2VFcnJvcik7CisgICAgaWYgKHBh
cnNlRXJyb3IgIT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKQorICAgICAgICByZXR1cm47CisK
KyNpZiBVU0UoSlNDKQorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBK
U0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgaSsrKQorICAgICAgICBrZXlzLmFw
cGVuZChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChl
eGVjLCB2YWx1ZXNbaV0sIGlkYktleVBhdGgpKTsKKyNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJ
bnRvU2VyaWFsaXplZFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQorUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0
SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kIG9uY2UgSlNDIHN1cHBvcnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS4KKyAgICBWZWN0b3I8U3RyaW5nPiBpZGJLZXlQYXRoOworICAgIElEQktl
eVBhdGhQYXJzZUVycm9yIHBhcnNlRXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgs
IGlkYktleVBhdGgsIHBhcnNlRXJyb3IpOworICAgIGlmIChwYXJzZUVycm9yICE9IElEQktleVBh
dGhQYXJzZUVycm9yTm9uZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyNpZiBVU0UoSlNDKQorICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNv
bnRleHQsIG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhl
YyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIHJldHVybiBXZWJDb3JlOjppbmpl
Y3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGV4ZWMsIGtleSwgdmFsdWUsIGlkYktleVBhdGgp
OworI2Vsc2UKICAgICByZXR1cm4gMDsKKyNlbmRpZgogfQogCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTAz
NDAwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIElEQktleTsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZXJp
YWxpemVkU2NyaXB0VmFsdWU7CiAKIGNsYXNzIElEQktleVBhdGhCYWNrZW5kSW1wbCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIHZvaWQgY3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5k
S2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIDA+JiB2
YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYg
a2V5cyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmpl
Y3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBTdHJpbmcmIGtleVBhdGgpOworICAgIHN0
YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwgMD4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRy
PElEQktleT4sIDA+JiBrZXlzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBjb25zdCBTdHJpbmcmIGtleVBhdGgpOwogfTsKIAogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCShyZXZpc2lv
biAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGV2ZWxE
QlNsaWNlLmgiCiAjaW5jbHVkZSAiTGV2ZWxEQlRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsMjEgKzEwMSwyMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdldEludGVyCiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJREJL
ZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2VyaWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoKQorc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZy
b21LZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZSogdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKICAgICBWZWN0b3I8UmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiB2YWx1ZXM7CiAgICAgdmFsdWVzLmFwcGVuZCh2
YWx1ZSk7CiAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4ga2V5czsKLSAgICBJREJLZXlQYXRo
QmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgo
dmFsdWVzLCBrZXlQYXRoLCBrZXlzKTsKKyAgICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0
ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29udGV4dCwgdmFsdWVzLCBr
ZXlQYXRoLCBrZXlzKTsKICAgICBpZiAoa2V5cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAw
OwogICAgIEFTU0VSVChrZXlzLnNpemUoKSA9PSAxKTsKICAgICByZXR1cm4ga2V5c1swXS5yZWxl
YXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5q
ZWN0S2V5SW50b0tleVBhdGgoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCitzdGF0aWMg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdEtleUludG9LZXlQYXRoKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoKQogewotICAgIHJldHVybiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUlu
dG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgcmV0dXJuIElEQktl
eVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShjb250ZXh0
LCBrZXksIHZhbHVlLCBrZXlQYXRoKTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJh
bnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3MKICAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwogfQogCi1QYXNzUmVmUHRyPElEQktleT4g
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2VsZWN0S2V5Rm9yUHV0KElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwqIG9iamVjdFN0b3JlLCBJREJLZXkqIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBJ
REJDYWxsYmFja3MqIGNhbGxiYWNrcywgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mIHZh
bHVlKQorUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNlbGVj
dEtleUZvclB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgSURCS2V5KiBrZXksIFB1dE1vZGUgcHV0TW9kZSwg
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiB2
YWx1ZSkKIHsKICAgICBpZiAocHV0TW9kZSA9PSBDdXJzb3JVcGRhdGUpCiAgICAgICAgIEFTU0VS
VChrZXkpOwpAQCAtMTc3LDE0ICsxNzcsMTQgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVj
dFN0b3JlQmFja2VuZAogICAgICAgICBpZiAoIWhhc0tleVBhdGgpCiAgICAgICAgICAgICByZXR1
cm4gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKIAotICAgICAgICBSZWZQdHI8
SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgb2Jq
ZWN0U3RvcmUtPm1fa2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkg
PSBmZXRjaEtleUZyb21LZXlQYXRoKGNvbnRleHQsIHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+
bV9rZXlQYXRoKTsKICAgICAgICAgaWYgKGtleVBhdGhLZXkpIHsKICAgICAgICAgICAgIG9iamVj
dFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRLZXlDYWNoZSgpOwogICAgICAgICAgICAgcmV0dXJu
IGtleVBhdGhLZXk7CiAgICAgICAgIH0KIAogICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5j
S2V5ID0gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKLSAgICAgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGluamVjdEtleUlu
dG9LZXlQYXRoKGF1dG9JbmNLZXksIHZhbHVlLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKKyAg
ICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9
IGluamVjdEtleUludG9LZXlQYXRoKGNvbnRleHQsIGF1dG9JbmNLZXksIHZhbHVlLCBvYmplY3RT
dG9yZS0+bV9rZXlQYXRoKTsKICAgICAgICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7CiAg
ICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUiwgIlRoZSBnZW5lcmF0ZWQga2V5IGNvdWxkIG5v
dCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvYmplY3QgdXNpbmcgdGhlIGtleVBhdGguIikpOwogICAg
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTQsNyArMTk0LDcgQEAgUGFzc1JlZlB0cjxJREJLZXk+
IElEQk9iamVjdFN0b3JlQmFja2VuZAogICAgIH0KIAogICAgIGlmIChoYXNLZXlQYXRoKSB7Ci0g
ICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZh
bHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElEQktl
eT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgoY29udGV4dCwgdmFsdWUuZ2V0KCks
IG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwogCiAgICAgICAgIGlmICgha2V5UGF0aEtleSkgewog
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJUaGUga2V5IGNvdWxkIG5vdCBiZSBmZXRj
aGVkIGZyb20gdGhlIGtleVBhdGguIikpOwpAQCAtMjE3LDEwICsyMTcsMTAgQEAgUGFzc1JlZlB0
cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZAogICAgIHJldHVybiBrZXk7CiB9CiAKLXZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2Rl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7CiAgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKLSAgICBSZWZQdHI8SURCS2V5PiBr
ZXkgPSBzZWxlY3RLZXlGb3JQdXQob2JqZWN0U3RvcmUuZ2V0KCksIHBycEtleS5nZXQoKSwgcHV0
TW9kZSwgY2FsbGJhY2tzLmdldCgpLCB2YWx1ZSk7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0g
c2VsZWN0S2V5Rm9yUHV0KGNvbnRleHQsIG9iamVjdFN0b3JlLmdldCgpLCBwcnBLZXkuZ2V0KCks
IHB1dE1vZGUsIGNhbGxiYWNrcy5nZXQoKSwgdmFsdWUpOwogICAgIGlmICgha2V5KQogICAgICAg
ICByZXR1cm47CiAKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dEludGVyCiAgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RT
dG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5k
KCk7ICsraXQpIHsKICAgICAgICAgY29uc3QgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBp
bmRleCA9IGl0LT5zZWNvbmQ7CiAKLSAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBm
ZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0aCgpKTsKKyAgICAg
ICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKGNvbnRleHQs
IHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0aCgpKTsKICAgICAgICAgaWYgKCFpbmRleEtleSkg
ewogICAgICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChpbmRleEtleS5yZWxlYXNlKCkpOwogICAg
ICAgICAgICAgY29udGludWU7CkBAIC0zODAsOCArMzgwLDkgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjbGVhckludAogbmFtZXNwYWNlIHsKIGNsYXNzIFBvcHVsYXRlSW5kZXhD
YWxsYmFjayA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkQ2FsbGJh
Y2sgewogcHVibGljOgotICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayhJREJCYWNraW5nU3RvcmUm
IGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCi0gICAgICAgIDogbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisgICAgICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250
ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAg
ICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQogICAgICAgICAsIG1fb2JqZWN0U3RvcmVJ
ZChvYmplY3RTdG9yZUlkKQogICAgICAgICAsIG1faW5kZXgoaW5kZXgpCkBAIC0zOTEsNyArMzky
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBJREJCYWNraW5n
U3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IG9iamVjdFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2ly
ZSh2YWx1ZSk7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9t
S2V5UGF0aChvYmplY3RWYWx1ZS5nZXQoKSwgbV9pbmRleC0+a2V5UGF0aCgpKTsKKyAgICAgICAg
UmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG1fc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgb2JqZWN0VmFsdWUuZ2V0KCksIG1faW5kZXgtPmtleVBhdGgoKSk7CiAK
ICAgICAgICAgaWYgKCFpbmRleEtleSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDEx
LDYgKzQxMiw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogICAgIElEQkJhY2tpbmdTdG9y
ZSYgbV9iYWNraW5nU3RvcmU7CiAgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CiAgICAgaW50NjRf
dCBtX29iamVjdFN0b3JlSWQ7CkBAIC00MTgsOSArNDIwLDkgQEAgcHJpdmF0ZToKIH07CiB9CiAK
LWJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cG9wdWxhdGVJbmRleChJREJCYWNraW5n
U3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCitib29sIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4KQogewotICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5n
U3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4KTsKKyAgICBQb3B1bGF0ZUlu
ZGV4Q2FsbGJhY2sgY2FsbGJhY2soY29udGV4dCwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleCk7CiAgICAgaWYgKCFiYWNraW5nU3RvcmUuZm9yRWFjaE9iamVj
dFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwpAQCAtNDU5LDcgKzQ2MSw3IEBAIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREIKICAgICByZXR1cm4gaW5kZXgu
cmVsZWFzZSgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUlu
ZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24pCiB7CiAgICAgaW50NjRfdCBpZDsKICAgICBpZiAoIW9iamVjdFN0b3Jl
LT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4
LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50cnkoKSwgaWQpKSB7CkBAIC00NjksNyArNDcxLDcg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbgogCiAgICAgaW5kZXgt
PnNldElkKGlkKTsKIAotICAgIGlmICghcG9wdWxhdGVJbmRleCgqb2JqZWN0U3RvcmUtPm1fYmFj
a2luZ1N0b3JlLCBvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9pZCwg
aW5kZXgpKSB7CisgICAgaWYgKCFwb3B1bGF0ZUluZGV4KGNvbnRleHQsICpvYmplY3RTdG9yZS0+
bV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5t
X2lkLCBpbmRleCkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJh
bmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBzdGF0aWMgYm9vbCBwb3B1bGF0ZUluZGV4
KElEQkJhY2tpbmdTdG9yZSYsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+KTsKKyAgICBzdGF0aWMgYm9vbCBw
b3B1bGF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJCYWNraW5nU3RvcmUmLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPik7CiAKIHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1l
bnQpOwpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsK
ICAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuQXV0b0luY3JlbWVudEtleSgpOwogICAgIHZvaWQg
cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKSB7IG1fYXV0b0luY3JlbWVudE51bWJlciA9IC0x
OyB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBzZWxlY3RLZXlGb3JQdXQoSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCosIElEQktleSosIFB1dE1vZGUsIElEQkNhbGxiYWNrcyosIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURC
S2V5PiBzZWxlY3RLZXlGb3JQdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwqLCBJREJLZXkqLCBQdXRNb2RlLCBJREJDYWxsYmFja3MqLCBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYpOwogCiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7
CiAgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEz
ICszNiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKERPTVN0
cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCogZGF0YWJhc2UpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0
IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUs
IGRhdGFiYXNlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKGNvbnRleHQsIG9iamVjdFN0b3JlcywgbW9kZSwgZGF0YWJhc2UpKTsKIH0KIAotSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJp
bmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqIGRhdGFiYXNlKQotICAgIDogbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3Jl
cykKK0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFz
ZSkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICwgbV9vYmpl
Y3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykKICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9z
dGF0ZShVbnVzZWQpCiAgICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlKQpAQCAtMjE3LDcgKzIxOCw3
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWUKICAgICAgICAgT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2socXVldWUuZmlyc3QoKS5yZWxl
YXNlKCkpOwogICAgICAgICBxdWV1ZS5yZW1vdmVGaXJzdCgpOwogICAgICAgICBtX3BlbmRpbmdF
dmVudHMrKzsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soMCk7CisgICAgICAgIHRhc2stPnBl
cmZvcm1UYXNrKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aAkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3Mg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShET01T
dHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNl
QmFja2VuZEltcGwqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERPTVN0cmluZ0xpc3QqIG9i
amVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCop
OwogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKTsKIAogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtNTksNyArNTksNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBydW4oKTsKIAogcHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9k
ZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3Jlcywg
dW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogCiAgICAgZW51
bSBTdGF0ZSB7CiAgICAgICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4K
QEAgLTk0LDYgKzk0LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9wZW5kaW5nRXZlbnRzOwogCiAg
ICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kSW1wbCo+IG1fb3BlbkN1cnNvcnM7CisKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogCiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QqIHRvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoKSB7
IHJldHVybiB0aGlzOyB9CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGJs
b2NrZWQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmlkbAkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAg
Q29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAgICAgR2VuZXJhdGVUb0pTLAogICAg
ICAgICBFdmVudFRhcmdldAogICAgIF0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QgOiBJREJSZXF1
ZXN0IHsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25ibG9ja2VkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120549</attachid>
            <date>2011-12-26 04:38:42 -0800</date>
            <delta_ts>2012-01-01 19:23:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>indexeddb.patch</filename>
            <type>text/plain</type>
            <size>61155</size>
            <attacher name="Donggwan Kim">donggwan.kim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTM0OSwyMiArMTM0OSwzNCBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAKICAg
ICBzdG9yYWdlL0RhdGFiYXNlVHJhY2tlci5jcHAKICAgICBzdG9yYWdlL0lEQkFueS5jcHAKLSAg
ICBzdG9yYWdlL0lEQkRhdGFiYXNlLmNwcAotICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5jcHAKICAgICBzdG9yYWdlL0lEQkN1cnNvci5jcHAKICAgICBzdG9yYWdlL0lEQkN1cnNv
ckJhY2tlbmRJbXBsLmNwcAorICAgIHN0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmNwcAorICAg
IHN0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisgICAgc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAorICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcAogICAgIHN0
b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uY3BwCiAgICAgc3RvcmFnZS9JREJFdmVudERpc3Bh
dGNoZXIuY3BwCisgICAgc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorICAgIHN0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCisgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwCiAgICAgc3RvcmFnZS9JREJJbmRleC5jcHAKICAgICBzdG9yYWdlL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwCiAgICAgc3RvcmFnZS9JREJLZXkuY3BwCisgICAgc3RvcmFnZS9JREJLZXlQ
YXRoLmNwcAorICAgIHN0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAogICAgIHN0b3Jh
Z2UvSURCS2V5UmFuZ2UuY3BwCi0gICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAorICAgIHN0b3Jh
Z2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKyAgICBzdG9yYWdlL0lEQkxldmVsREJDb2Rp
bmcuY3BwCiAgICAgc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKICAgICBzdG9yYWdlL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwCi0gICAgc3RvcmFnZS9JREJGYWN0b3J5LmNwcAotICAg
IHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwCi0gICAgc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwCisgICAgc3RvcmFnZS9JREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yLmNwcAorICAgIHN0b3JhZ2UvSURCUmVxdWVzdC5jcHAKKyAgICBzdG9yYWdlL0lEQlRy
YW5zYWN0aW9uLmNwcAorICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAK
KyAgICBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCisgICAgc3RvcmFnZS9J
REJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwCisgICAgc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5jcHAKICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCiAgICAgc3RvcmFnZS9M
b2NhbFN0b3JhZ2VUaHJlYWQuY3BwCiAgICAgc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuY3Bw
CkBAIC0xNDk0LDYgKzE1MDYsNyBAQCBJRiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAg
TElTVChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKICAgICAgICAgc3RvcmFnZS9JREJBbnkuaWRs
CiAgICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmlkbAorICAgICAgICBzdG9yYWdlL0lEQkN1cnNv
cldpdGhWYWx1ZS5pZGwKICAgICAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUVycm9yLmlkbAogICAg
ICAgICBzdG9yYWdlL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAogICAgICAgICBzdG9yYWdlL0lE
QkRhdGFiYXNlLmlkbApAQCAtMTUwNCw2ICsxNTE3LDggQEAgSUYgKEVOQUJMRV9JTkRFWEVEX0RB
VEFCQVNFKQogICAgICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmlkbAogICAgICAgICBzdG9y
YWdlL0lEQlJlcXVlc3QuaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaWRsCisg
ICAgICAgIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAorICAgICAgICBzdG9yYWdl
L0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAogICAgICkKIEVORElGICgpCiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9V
c2VKU0MuY21ha2UJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5j
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSw3IEBAIExJU1QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTWFBhdGhSZXN1bHRDdXN0b20uY3BwCiAgICAg
YmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0ph
dmFTY3JpcHRDYWxsRnJhbWUuY3BwCisgICAgYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5jcHAK
ICAgICBiaW5kaW5ncy9qcy9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCiAgICAgYmluZGluZ3Mv
anMvU2NoZWR1bGVkQWN0aW9uLmNwcAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1l
RGF0YS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
MjEgKzMwLDc2IEBACiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogCiAjaW5jbHVk
ZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSA8cnVudGlt
ZS9EYXRlSW5zdGFuY2UuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUoKTsKLSAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQotICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGUodmFsdWUudG9JbnQzMihl
eGVjKSk7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBJREJLZXk6
OmNyZWF0ZU51bWJlcih2YWx1ZS50b051bWJlcihleGVjKSk7CiAgICAgaWYgKHZhbHVlLmlzU3Ry
aW5nKCkpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZSh1c3RyaW5nVG9TdHJpbmcodmFs
dWUudG9TdHJpbmcoZXhlYykpKTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgorICAg
ICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRv
U3RyaW5nKGV4ZWMpKSk7CisgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNf
aW5mbykpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUodmFsdWVUb0RhdGUoZXhl
YywgdmFsdWUpKTsKICAgICByZXR1cm4gMDsKIH0KIAorSlNWYWx1ZSBnZXROdGhWYWx1ZU9uS2V5
UGF0aChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSByb290VmFsdWUsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHNpemVfdCBpbmRleCkKK3sKKyAgICBKU1ZhbHVl
IGN1cnJlbnRWYWx1ZTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gcm9vdFZhbHVlLnRvT2JqZWN0
KGV4ZWMpOworICAgIFByb3BlcnR5U2xvdCBzbG90KG9iamVjdCk7CisgICAgQVNTRVJUKGluZGV4
IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aW5kZXg7ICsraSkgeworICAgICAgICBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IElkZW50aWZp
ZXIoZXhlYywga2V5UGF0aEVsZW1lbnRzW2ldLmltcGwoKSk7CisgICAgICAgIGlmICghb2JqZWN0
LT5nZXRPd25Qcm9wZXJ0eVNsb3Qob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKQor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgY3VycmVudFZhbHVl
ID0gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKworICAgIHJldHVy
biBjdXJyZW50VmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9t
U2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5
UGF0aCkKK3sKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkpOworICAgIEpTVmFsdWUganNLZXkgPSBnZXROdGhWYWx1ZU9uS2V5UGF0aChleGVj
LCBqc1ZhbHVlLCBrZXlQYXRoLCBrZXlQYXRoLnNpemUoKSk7CisgICAgaWYgKGpzS2V5LmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZy
b21WYWx1ZShleGVjLCBqc0tleSk7Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aCkKK3sKKyAgICBpZiAoIXZhbHVlKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICgha2V5UGF0aC5zaXplKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNWYWx1ZSBwYXJlbnQgPSBnZXRO
dGhWYWx1ZU9uS2V5UGF0aChleGVjLCBqc1ZhbHVlLCBrZXlQYXRoLCBrZXlQYXRoLnNpemUoKSAt
IDEpOworICAgIGlmIChwYXJlbnQuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBpZiAoIXBhcmVudC5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBwYXJlbnQudG9PYmplY3QoZXhlYyk7CisgICAgb2JqZWN0LT5wdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBJZGVudGlmaWVyKGV4ZWMsIGtleVBhdGgubGFzdCgp
LmltcGwoKSksIHBhcmVudCk7CisKKyAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoZXhlYywganNWYWx1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAkocmV2aXNpb24gMTAzNDAwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAotI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiIAorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgi
CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzYs
NiArMzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJLZXk7CiAKIFBhc3NSZWZQ
dHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUpOworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFs
dWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCAgY29uc3QgVmVjdG9yPFN0cmluZywgMD4mKTsKK1Bhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKEpTQzo6RXhlY1N0
YXRlKiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4sIGNvbnN0IFZlY3RvcjxTdHJpbmcsIDA+Jik7CiAKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAkocmV2aXNpb24gMTAzNDAwKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMiArMzMsMTQgQEAKIAogI2luY2x1ZGUgIklEQkFueS5oIgogI2luY2x1
ZGUgIklEQkN1cnNvci5oIgorI2luY2x1ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgogI2luY2x1
ZGUgIklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURCRmFjdG9yeS5oIgogI2luY2x1ZGUgIklE
QkluZGV4LmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUu
aCIKICNpbmNsdWRlICJKU0lEQkN1cnNvci5oIgorI2luY2x1ZGUgIkpTSURCQ3Vyc29yV2l0aFZh
bHVlLmgiCiAjaW5jbHVkZSAiSlNJREJEYXRhYmFzZS5oIgogI2luY2x1ZGUgIkpTSURCRmFjdG9y
eS5oIgogI2luY2x1ZGUgIkpTSURCSW5kZXguaCIKQEAgLTYzLDYgKzY1LDggQEAgSlNWYWx1ZSB0
b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgICAgICByZXR1cm4ganNOdWxsKCk7
CiAgICAgY2FzZSBJREJBbnk6OklEQkN1cnNvclR5cGU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJDdXJzb3IoKSk7CisgICAgY2FzZSBJREJBbnk6
OklEQkN1cnNvcldpdGhWYWx1ZVR5cGU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgaWRiQW55LT5pZGJDdXJzb3JXaXRoVmFsdWUoKSk7CiAgICAgY2FzZSBJREJBbnk6
OklEQkRhdGFiYXNlVHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBpZGJBbnktPmlkYkRhdGFiYXNlKCkpOwogICAgIGNhc2UgSURCQW55OjpJREJGYWN0b3J5VHlw
ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5j
cHAJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
S2V5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsOCBAQCBKU1ZhbHVlIHRv
SlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgICAgIHJldHVybiBqc051bWJlcihr
ZXktPm51bWJlcigpKTsKICAgICBjYXNlIElEQktleTo6U3RyaW5nVHlwZToKICAgICAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIGtleS0+c3RyaW5nKCkpOwotICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgZGF0ZXMuCisgICAgY2FzZSBJREJLZXk6OkRhdGVUeXBlOgorICAgICAgICByZXR1cm4ganNE
YXRlT3JOdWxsKGV4ZWMsIGtleS0+ZGF0ZSgpKTsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGFy
cmF5cy4KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlv
bnNPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
T3B0aW9uc09iamVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcHRp
b25zT2JqZWN0LmgiCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitPcHRpb25zT2JqZWN0OjpPcHRpb25z
T2JqZWN0KCkKKyAgICA6IG1fZXhlYygwKQoreworfQorCitPcHRpb25zT2JqZWN0OjpPcHRpb25z
T2JqZWN0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU1ZhbHVlJiBvcHRpb25zKQorICAg
IDogbV9leGVjKGV4ZWMpCisgICAgLCBtX29wdGlvbnMob3B0aW9ucykKK3sKK30KKworT3B0aW9u
c09iamVjdDo6fk9wdGlvbnNPYmplY3QoKQoreworfQorCitPcHRpb25zT2JqZWN0JiBPcHRpb25z
T2JqZWN0OjpvcGVyYXRvcj0oY29uc3QgT3B0aW9uc09iamVjdCYgb3B0aW9uc09iamVjdCkKK3sK
KyAgICBtX2V4ZWMgPSBvcHRpb25zT2JqZWN0Lm1fZXhlYzsKKyAgICBtX29wdGlvbnMgPSBvcHRp
b25zT2JqZWN0Lm1fb3B0aW9uczsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2Jvb2wgT3B0aW9u
c09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBib29sJiB2YWx1ZSkgY29uc3QKK3sKKyAg
ICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBqc1ZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVlLnRvQm9vbGVhbihtX2V4ZWMp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBT
dHJpbmcmIGtleSwgaW50MzJfdCYgdmFsdWUpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVl
OworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHZhbHVlID0ganNWYWx1ZS50b0ludDMyKG1fZXhlYyk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBkb3VibGUm
IHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdldEtleShr
ZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IGpzVmFs
dWUudG9OdW1iZXIobV9leGVjKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25z
T2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIFN0cmluZyYgdmFsdWUpIGNvbnN0Cit7Cisg
ICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKHVzdHJpbmdUb1N0
cmluZyhqc1ZhbHVlLnRvU3RyaW5nKG1fZXhlYykpKTsKKyAgICB2YWx1ZSA9IHN0cmluZzsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5n
JiBrZXksIHVuc2lnbmVkIHNob3J0JiB2YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFs
dWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgdmFsdWUgPSBqc1ZhbHVlLnRvSW50MzIobV9leGVjKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIHVuc2ln
bmVkJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRL
ZXkoa2V5LCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBq
c1ZhbHVlLnRvSW50MzIobV9leGVjKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRp
b25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIHVuc2lnbmVkIGxvbmcgbG9uZyYgdmFs
dWUpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwg
anNWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0ganNWYWx1ZS50
b051bWJlcihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmpl
Y3Q6OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5n
JiB2YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXko
a2V5LCBqc1ZhbHVlKSB8fCBqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAg
ICAgIHZhbHVlID0gU3RyaW5nKCk7CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYg
c3RyaW5nKHVzdHJpbmdUb1N0cmluZyhqc1ZhbHVlLnRvU3RyaW5nKG1fZXhlYykpKTsKKyAgICAg
ICAgdmFsdWUgPSBzdHJpbmc7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
T3B0aW9uc09iamVjdDo6Z2V0S2V5KGNvbnN0IFN0cmluZyYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fZXhlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKG1fb3B0aW9ucy5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBKU09iamVjdCogb3B0aW9ucyA9IG1fb3B0aW9ucy50b09iamVjdChtX2V4ZWMpOwor
ICAgIGlmICghb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gb3B0aW9ucy0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIGtleS5pbXBs
KCkpKTsKKyAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuY3BwCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09w
dGlvbnNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9P
cHRpb25zT2JqZWN0LmgJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL09wdGlvbnNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMzcgQEAK
ICNpZm5kZWYgT3B0aW9uc09iamVjdF9oCiAjZGVmaW5lIE9wdGlvbnNPYmplY3RfaAogCi0vLyBG
SVhNRTogSW1wbGVtZW50LgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8
cnVudGltZS9KU1ZhbHVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgT3B0aW9u
c09iamVjdCB7CitwdWJsaWM6CisgICAgT3B0aW9uc09iamVjdCgpOworICAgIE9wdGlvbnNPYmpl
Y3QoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkpTVmFsdWUmIG9wdGlvbnMpOworCisgICAg
T3B0aW9uc09iamVjdCYgb3BlcmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmKTsKKworICAgIGJv
b2wgZ2V0KGNvbnN0IFN0cmluZyYsIGJvb2wmKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBT
dHJpbmcmLCBpbnQzMl90JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgZG91
YmxlJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7
CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKKyAg
ICBib29sIGdldChjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCYpIGNvbnN0OworICAgIGJvb2wgZ2V0
KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OworCisgICAgYm9vbCBn
ZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiwgU3RyaW5nJikgY29uc3Q7
CisKKyAgICB+T3B0aW9uc09iamVjdCgpOworCitwcml2YXRlOgorICAgIGJvb2wgZ2V0S2V5KGNv
bnN0IFN0cmluZyYga2V5LCBKU0M6OkpTVmFsdWUmKSBjb25zdDsKKworICAgIEpTQzo6RXhlY1N0
YXRlKiBtX2V4ZWM7CisgICAgSlNDOjpKU1ZhbHVlIG1fb3B0aW9uczsKK307CisKK30gLy8gV2Vi
Q29yZQogCiAjZW5kaWYgLy8gT3B0aW9uc09iamVjdF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9u
IDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDggQEAgZW51bSBTZXJpYWxpemF0
aW9uVGFnIHsKICAgICBSZWdFeHBUYWcgPSAxOCwKICAgICBPYmplY3RSZWZlcmVuY2VUYWcgPSAx
OSwKICAgICBNZXNzYWdlUG9ydFJlZmVyZW5jZVRhZyA9IDIwLAorICAgIE51bWJlclRhZyA9IDIx
LAorICAgIFBhZGRpbmdUYWcgPSAyMiwKICAgICBFcnJvclRhZyA9IDI1NQogfTsKIApAQCAtMjcx
LDcgKzI3MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICAgICAgd3JpdGVMaXR0bGVFbmRp
YW48dWludDhfdD4ob3V0LCBTdHJpbmdUYWcpOwogICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihv
dXQsIHMubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm4gd3JpdGVMaXR0bGVFbmRpYW4ob3V0LCBz
LmltcGwoKS0+Y2hhcmFjdGVycygpLCBzLmxlbmd0aCgpKTsKKyAgICAgICAgYm9vbCByZXQgPSB3
cml0ZUxpdHRsZUVuZGlhbihvdXQsIHMuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkp
OworCisgICAgICAgIGlmIChvdXQuc2l6ZSgpICUgMikKKyAgICAgICAgICAgIHdyaXRlTGl0dGxl
RW5kaWFuPHVpbnQ4X3Q+KG91dCwgUGFkZGluZ1RhZyk7CisKKyAgICAgICAgcmV0dXJuIHJldDsK
ICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBzZXJpYWxpemVVbmRlZmluZWQoVmVjdG9yPHVpbnQ4
X3Q+JiBvdXQpCkBAIC0yODYsNiArMjkzLDE4IEBAIHB1YmxpYzoKICAgICAgICAgd3JpdGVMaXR0
bGVFbmRpYW48dWludDhfdD4ob3V0LCB2YWx1ZSA/IFRydWVUYWcgOiBGYWxzZVRhZyk7CiAgICAg
fQogCisgICAgc3RhdGljIHZvaWQgc2VyaWFsaXplTnVtYmVyKGRvdWJsZSB2YWx1ZSwgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXQpCisgICAgeworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihvdXQsIEN1
cnJlbnRWZXJzaW9uKTsKKyAgICAgICAgd3JpdGVMaXR0bGVFbmRpYW48dWludDhfdD4ob3V0LCBO
dW1iZXJUYWcpOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBkb3VibGUgZDsKKyAgICAg
ICAgICAgIGludDY0X3QgaTsKKyAgICAgICAgfSB1OworICAgICAgICB1LmQgPSB2YWx1ZTsKKyAg
ICAgICAgd3JpdGVMaXR0bGVFbmRpYW4ob3V0LCB1LmkpOworICAgIH0KKwogcHJpdmF0ZToKICAg
ICBDbG9uZVNlcmlhbGl6ZXIoRXhlY1N0YXRlKiBleGVjLCBNZXNzYWdlUG9ydEFycmF5KiBtZXNz
YWdlUG9ydHMsIFZlY3Rvcjx1aW50OF90PiYgb3V0KQogICAgICAgICA6IENsb25lQmFzZShleGVj
KQpAQCAtNzk2LDExICs4MTUsMjUgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJp
YWxpemVyOgogICAgIGlmIChtX2ZhaWxlZCkKICAgICAgICAgcmV0dXJuIFVuc3BlY2lmaWVkRXJy
b3I7CiAKKyAgICBpZiAobV9idWZmZXIuc2l6ZSgpICUgMikKKyAgICAgICAgd3JpdGUoUGFkZGlu
Z1RhZyk7CisKICAgICByZXR1cm4gU3VjY2Vzc2Z1bGx5Q29tcGxldGVkOwogfQogCiBjbGFzcyBD
bG9uZURlc2VyaWFsaXplciA6IENsb25lQmFzZSB7CiBwdWJsaWM6CisgICAgc3RhdGljIFN0cmlu
ZyB0b1dpcmVTdHJpbmcoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCisgICAgeworICAg
ICAgICBjb25zdCB1aW50OF90KiBwdHIgPSBidWZmZXIuYmVnaW4oKTsKKyAgICAgICAgY29uc3Qg
dWludDhfdCogZW5kID0gYnVmZmVyLmVuZCgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBsZW5n
dGggPSBidWZmZXIuc2l6ZSgpIC8gc2l6ZW9mKFVDaGFyKTsKKyAgICAgICAgVVN0cmluZyBzdHI7
CisgICAgICAgIGlmICghcmVhZFN0cmluZyhwdHIsIGVuZCwgc3RyLCBsZW5ndGgpKQorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5nKHN0ci5pbXBsKCkp
OworICAgIH0KKwogICAgIHN0YXRpYyBTdHJpbmcgZGVzZXJpYWxpemVTdHJpbmcoY29uc3QgVmVj
dG9yPHVpbnQ4X3Q+JiBidWZmZXIpCiAgICAgewogICAgICAgICBjb25zdCB1aW50OF90KiBwdHIg
PSBidWZmZXIuYmVnaW4oKTsKQEAgLTE0MTYsNiArMTQ0OSwxNCBAQCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxp
emVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7CiB9CiAKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgaWYgKCF3cml0
ZUxpdHRsZUVuZGlhbihidWZmZXIsIHN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgc3RyaW5n
Lmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7Cit9CisKIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0NvbnRleHRSZWYg
b3JpZ2luQ29udGV4dCwgSlNWYWx1ZVJlZiBhcGlWYWx1ZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZVBvcnRB
cnJheSogbWVzc2FnZVBvcnRzLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CkBAIC0xNDQ0LDYg
KzE0ODUsMTEgQEAgU3RyaW5nIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9TdHJpbmcoKQogICAg
IHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemVTdHJpbmcobV9kYXRhKTsKIH0K
IAorU3RyaW5nIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKCkKK3sKKyAgICBy
ZXR1cm4gQ2xvbmVEZXNlcmlhbGl6ZXI6OnRvV2lyZVN0cmluZyhtX2RhdGEpOworfQorCiBKU1Zh
bHVlIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIFNlcmlhbGl6
YXRpb25FcnJvck1vZGUgdGhyb3dFeGNlcHRpb25zKQogewpAQCAtMTQ5NCw2ICsxNTQwLDEzIEBA
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWwKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKIH0KIAorUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFs
dWUoZG91YmxlIHZhbHVlKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgQ2xv
bmVTZXJpYWxpemVyOjpzZXJpYWxpemVOdW1iZXIodmFsdWUsIGJ1ZmZlcik7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7Cit9CisKIHZvaWQg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjptYXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxpemF0aW9u
RmFpbGVkKEV4ZWNTdGF0ZSogZXhlYywgU2VyaWFsaXphdGlvblJldHVybkNvZGUgY29kZSkKIHsK
ICAgICBpZiAoY29kZSA9PSBTdWNjZXNzZnVsbHlDb21wbGV0ZWQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAkocmV2aXNp
b24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwxNCBAQCBlbnVtIFNlcmlhbGl6
YXRpb25FcnJvck1vZGUgeyBOb25UaHJvd2luCiAKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotY2xh
c3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWUgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIE1lc3NhZ2VQb3J0QXJyYXkqLCBTZXJpYWxpemF0aW9uRXJyb3JN
b2RlID0gVGhyb3dpbmcpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBNZXNzYWdlUG9ydEFy
cmF5KiA9IDAsIFNlcmlhbGl6YXRpb25FcnJvck1vZGUgPSBUaHJvd2luZyk7CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDb250ZXh0UmVmLCBK
U1ZhbHVlUmVmLCBNZXNzYWdlUG9ydEFycmF5KiwgIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoSlNDb250
ZXh0UmVmLCBKU1ZhbHVlUmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogCiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGUoY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9t
V2lyZShjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGFkb3B0KFZlY3Rvcjx1aW50OF90PiYgYnVmZmVyKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTZXJpYWxpemVkU2NyaXB0VmFsdWUoYnVmZmVyKSk7CkBAIC03
MCwxMCArNzEsMTIgQEAgcHVibGljOgogICAgIHN0YXRpYyBTZXJpYWxpemVkU2NyaXB0VmFsdWUq
IG51bGxWYWx1ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdW5kZWZpbmVkVmFsdWUoKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGJvb2xlYW5WYWx1ZShib29sIHZhbHVlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG51bWJlclZhbHVlKGRvdWJsZSB2YWx1ZSk7CiAKICAg
ICBTdHJpbmcgdG9TdHJpbmcoKTsKKyAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCk7CiAgICAgCi0g
ICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIE1lc3NhZ2VQb3J0QXJyYXkqLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gVGhy
b3dpbmcpOworICAgIEpTQzo6SlNWYWx1ZSBkZXNlcmlhbGl6ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBNZXNzYWdlUG9ydEFycmF5KiA9IDAsIFNlcmlhbGl6YXRpb25F
cnJvck1vZGUgPSBUaHJvd2luZyk7CiAgICAgSlNWYWx1ZVJlZiBkZXNlcmlhbGl6ZShKU0NvbnRl
eHRSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbiwgTWVzc2FnZVBvcnRBcnJheSopOwogICAgIEpT
VmFsdWVSZWYgZGVzZXJpYWxpemUoSlNDb250ZXh0UmVmLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxMjYsMTEg
KzIxMjYsMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2NsYXNz
TmFtZX0oZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7XG4iKTsKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMpXG4i
KTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzaWYgKCEkZnVuY3Rp
b24tPmlzU3RhdGljKSB7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG15
ICRraW5kID0gJGZ1bmN0aW9uLT5pc1N0YXRpYyA/ICJDb25zdHJ1Y3RvciIgOiAiIjsKICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4
ZWMtPmhvc3RUaGlzVmFsdWUoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCYke2NsYXNzTmFtZX06OnNfaW5mbykp
XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXRoaXNW
YWx1ZS5pbmhlcml0cygmJHtjbGFzc05hbWV9JHtraW5kfTo6c19pbmZvKSlcbiIpOwogICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcihleGVjKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNPYmpl
Y3QodGhpc1ZhbHVlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAke2NsYXNzTmFtZX0ke2tpbmR9KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8JHtjbGFz
c05hbWV9JHtraW5kfSo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpO1xuIik7CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoY2FzdGVkVGhpcywgJiR7Y2xhc3NOYW1lfTo6c19pbmZvKTtcbiIpIHVubGVzcyAo
JGZ1bmN0aW9uLT5pc1N0YXRpYyk7CkBAIC0yMTg3LDM0ICsyMTg4LDM0IEBAIHN1YiBHZW5lcmF0
ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlm
XG5cbiIpIGlmICRjb25kaXRpb25hbDsKICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0gICAg
ICAgIGlmICgkbmVlZHNNYXJrQ2hpbGRyZW4gJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgJnNfaW5mbyk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7XG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpO1xuIik7Ci0gICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpO1xuIik7Ci0gICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIHRoaXNPYmplY3QtPmltcGwoKS0+dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZp
c2l0b3IpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJG51bUNhY2hlZEF0
dHJpYnV0ZXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAoQHskZGF0YU5vZGUtPmF0
dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRhdHRyaWJ1dGUgPSAkXzsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+bV8iIC4gJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT5uYW1lIC4gIilcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tXyIgLiAk
YXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKTtcbiIpOwotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgaWYgKCRuZWVkc01hcmtDaGlsZHJlbiAmJiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pIHsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhpc09i
amVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZz
X2luZm8pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIENPTVBJTEVfQVNT
RVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICIgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTtcbiIpOworICAg
ICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifSkg
eworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+aW1wbCgp
LT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7XG4iKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoJG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSB7CisgICAgICAgICAgICBmb3JlYWNoIChA
eyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICBteSAkYXR0cmlidXRl
ID0gJF87CisgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7CisgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5tXyIgLiAkYXR0cmlidXRl
LT5zaWduYXR1cmUtPm5hbWUgLiAiKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV8iIC4gJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIik7XG4iKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAg
ICAgICAgIH0KLSAgICAgICAgIyBDYWNoZWQgYXR0cmlidXRlcyBhcmUgaW5kZWVkIGFsbG93ZWQg
d2hlbiB0aGVyZSBpcyBhIGN1c3RvbSBtYXJrL3Zpc2l0Q2hpbGRyZW4gZnVuY3Rpb24uCi0gICAg
ICAgICMgVGhlIGN1c3RvbSBmdW5jdGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBhY2NvdW50IGZvciB0
aGUgY2FjaGVkIGF0dHJpYnV0ZS4KLSAgICAgICAgIyBVbmNvbW1lbnQgdGhlIGJlbG93IGxpbmUg
dG8gdGVtcG9yYXJpbHkgZW5mb3JjZSBnZW5lcmF0ZWQgbWFyayBmdW5jdGlvbnMgd2hlbiBjYWNo
ZWQgYXR0cmlidXRlcyBhcmUgcHJlc2VudC4KLSAgICAgICAgIyBkaWUgIkNhbid0IGdlbmVyYXRl
IGJpbmRpbmcgZm9yIGNsYXNzIHdpdGggY2FjaGVkIGF0dHJpYnV0ZSBhbmQgY3VzdG9tIG1hcmsu
IiBpZiAoKCRudW1DYWNoZWRBdHRyaWJ1dGVzID4gMCkgYW5kICgkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSkpOworICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIn1cblxuIik7CiAgICAgfQorICAgICMgQ2FjaGVkIGF0dHJpYnV0ZXMgYXJlIGlu
ZGVlZCBhbGxvd2VkIHdoZW4gdGhlcmUgaXMgYSBjdXN0b20gbWFyay92aXNpdENoaWxkcmVuIGZ1
bmN0aW9uLgorICAgICMgVGhlIGN1c3RvbSBmdW5jdGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBhY2Nv
dW50IGZvciB0aGUgY2FjaGVkIGF0dHJpYnV0ZS4KKyAgICAjIFVuY29tbWVudCB0aGUgYmVsb3cg
bGluZSB0byB0ZW1wb3JhcmlseSBlbmZvcmNlIGdlbmVyYXRlZCBtYXJrIGZ1bmN0aW9ucyB3aGVu
IGNhY2hlZCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LgorICAgICMgZGllICJDYW4ndCBnZW5lcmF0
ZSBiaW5kaW5nIGZvciBjbGFzcyB3aXRoIGNhY2hlZCBhdHRyaWJ1dGUgYW5kIGN1c3RvbSBtYXJr
LiIgaWYgKCgkbnVtQ2FjaGVkQXR0cmlidXRlcyA+IDApIGFuZCAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pKTsKIAogICAgIGlmICgkbnVtQ29u
c3RhbnRzID4gMCkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIENvbnN0YW50IGdl
dHRlcnNcblxuIik7CkBAIC0yNTM5LDkgKzI1NDAsMTYgQEAgc3ViIEdlbmVyYXRlUGFyYW1ldGVy
c0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBlIGNvbnZlcnNp
b24gc3VjY2VlZGVkLgotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7Cisg
ICAgICAgICAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7CisgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEkbmFtZSkge1xuIik7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlv
bihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBl
IGNvbnZlcnNpb24gc3VjY2VlZGVkLgorICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5vdCAkaW1wbENs
YXNzTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmICghJG5hbWUpIHtcbiIpOwpAQCAtMjgwMSw2ICsyODA5LDcgQEAgbXkgJW5hdGl2
ZVR5cGUgPSAoCiAgICAgIkRPTVN0cmluZ1tdIiA9PiAiRE9NU3RyaW5nTGlzdCoiLAogICAgICJE
T01PYmplY3QiID0+ICJTY3JpcHRWYWx1ZSIsCiAgICAgIk5vZGVGaWx0ZXIiID0+ICJSZWZQdHI8
Tm9kZUZpbHRlcj4iLAorICAgICJPcHRpb25zT2JqZWN0IiA9PiAiT3B0aW9uc09iamVjdCIsCiAg
ICAgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgPT4gIlJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IiwKICAgICAiSURCS2V5IiA9PiAiUmVmUHRyPElEQktleT4iLAogICAgICJib29sZWFuIiA9
PiAiYm9vbCIsCkBAIC0yODgxLDYgKzI4OTAsMTcgQEAgc3ViIElzQXJyYXlUeXBlCiAgICAgcmV0
dXJuICR0eXBlID1+IG0vXFtcXSQvOwogfQogCitzdWIgVHlwZUNhbkZhaWxDb252ZXJzaW9uCit7
CisgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworCisgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVy
YXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiSURCS2V5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU2VyaWFsaXplZFNj
cmlwdFZhbHVlIjsKKyAgICByZXR1cm4gMDsKK30KKwogc3ViIEpTVmFsdWVUb05hdGl2ZQogewog
ICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKQEAgLTI5MTksNiArMjkzOSwxMSBAQCBzdWIgSlNW
YWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3Jl
YXRlKFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgIiAuICR2YWx1ZSAuIikpIjsKICAg
ICB9CiAKKyAgICBpZiAoJHR5cGUgZXEgIk9wdGlvbnNPYmplY3QiIG9yICR0eXBlIGVxICJhbnki
KSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ik9wdGlvbnNPYmplY3QuaCJ9ID0gMTsKKyAgICAg
ICAgcmV0dXJuICJPcHRpb25zT2JqZWN0KGV4ZWMsICR2YWx1ZSkiOworICAgIH0KKwogICAgIGlm
ICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55Iikgewog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiLCAkY29u
ZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KGV4ZWMsICR2YWx1ZSkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JX
aXRoVmFsdWUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQ3Vy
c29yV2l0aFZhbHVlLmlkbAkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4
IEBACiBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UsCisgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gSURCQ3Vyc29yV2l0aFZhbHVlIDogSURC
Q3Vyc29yIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2YWx1ZTsKICAgICB9
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuY3BwCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTkzLDggKzk0LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CiB9OwogCi1JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIGNv
b3JkaW5hdG9yLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYg
dW5pcXVlSWRlbnRpZmllcikKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKK0lE
QkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUq
IGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElE
QkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlm
aWVyKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBtX2Jh
Y2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAgICAgLCBtX2lkKEludmFsaWRJZCkKICAgICAsIG1f
bmFtZShuYW1lKQogICAgICwgbV92ZXJzaW9uKCIiKQpAQCAtMjMwLDcgKzIzMiw3IEBAIHZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbigKIAogICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKLSAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFu
c2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgb2JqZWN0U3RvcmVOYW1lcy5nZXQo
KSwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCB0aGlzKTsKICAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwsIGRhdGFiYXNlLCB2ZXJzaW9uLCBjYWxsYmFja3Ms
IHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
Q2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24sIGRhdGFi
YXNlLCBtX3ZlcnNpb24pKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
T1RfQUxMT1dFRF9FUlI7CkBAIC0zMTEsNyArMzEzLDcgQEAgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhYwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90IGFs
bG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KLSAgICByZXR1cm4gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMpOwor
ICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUobV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBvYmplY3RTdG9yZU5hbWVzLCBtb2RlLCB0aGlzKTsKIH0KIAogdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+IGNhbGxiYWNrcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0
YWJhc2VCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTIg
KzQxLDEzIEBAIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OwogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsIDogcHVibGljIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4g
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1w
bCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0
YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIGNvb3JkaW5hdG9yLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChu
YW1lLCBkYXRhYmFzZSwgY29vcmRpbmF0b3IsIGZhY3RvcnksIHVuaXF1ZUlkZW50aWZpZXIpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnRl
eHQsIG5hbWUsIGRhdGFiYXNlLCBjb29yZGluYXRvciwgZmFjdG9yeSwgdW5pcXVlSWRlbnRpZmll
cikpOwogICAgIH0KICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCk7CiAKQEAg
LTc2LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogCiBwcml2YXRlOgotICAg
IElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
cmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJ
REJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwog
CiAgICAgdm9pZCBvcGVuSW50ZXJuYWwoKTsKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsK
QEAgLTkyLDcgKzkzLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBtX2JhY2tpbmdTdG9yZTsKLSAgICBpbnQ2NCBtX2lkOworICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKyAgICBpbnQ2NF90IG1faWQ7CiAgICAg
U3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV92ZXJzaW9uOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcg
QEAKICNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250
ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXb3JrZXJDb250
ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKQEAgLTk0LDEyICs5NSwxMiBA
QCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oCiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAg
ICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRl
eHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsKLSAgICAgICAgbV9iYWNrZW5kLT5vcGVuKG5h
bWUsIHJlcXVlc3QuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJp
bmcoKSk7CisgICAgICAgIG1fYmFja2VuZC0+b3Blbihjb250ZXh0LCBuYW1lLCByZXF1ZXN0Lmdl
dCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBmcmFtZSwgU3RyaW5nKCkpOwogICAgICAg
ICByZXR1cm4gcmVxdWVzdDsKICAgICB9CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55
OjpjcmVhdGUodGhpcyksIDApOwotICAgIG1fYmFja2VuZC0+b3BlbkZyb21Xb3JrZXIobmFtZSwg
cmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8V29y
a2VyQ29udGV4dCo+KGNvbnRleHQpLCBTdHJpbmcoKSk7CisgICAgbV9iYWNrZW5kLT5vcGVuRnJv
bVdvcmtlcihjb250ZXh0LCBuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9y
aWdpbigpLCBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIFN0cmluZygpKTsK
ICAgICByZXR1cm4gcmVxdWVzdDsKICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC0xMjQsNyArMTI1
LDcgQEAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRgogCiAgICAgUmVm
UHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55OjpjcmVhdGVOdWxsKCksICIiKTsKICAgICBH
cm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5n
cm91cFNldHRpbmdzKCk7Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1
ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3Vw
U2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0
ZURhdGFiYXNlKGNvbnRleHQsIG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQ
YXRoKCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM0MDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgogI2luY2x1ZGUgIklEQkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgpAQCAtOTgsMTcgKzk5LDE3IEBA
IHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpnZXREYXRhYmFzZU4KICAgICBjYWxsYmFja3Mt
Pm9uU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNl
Y3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKLSAg
ICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVj
dG9yeSk7CisgICAgb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIGNhbGxiYWNrcywgc2VjdXJp
dHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6b3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNv
bnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit2b2lkIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3BlbkZyb21Xb3JrZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXJlY3RvcnkpCiB7Ci0gICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywg
c2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOworICAgIG9wZW5JbnRlcm5hbChjb250ZXh0
LCBuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKIH0KIAot
dm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
ZWN0b3J5KQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewogICAg
IGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIo
bmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwogCkBAIC0xMjcsNyArMTI4LDcgQEAgdm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9
IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCks
IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7
CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShjb250ZXh0LCBuYW1lLCBiYWNraW5nU3RvcmUu
Z2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRp
Zmllcik7CiAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRh
dGFiYXNlQmFja2VuZC5nZXQoKSk7CiAgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFz
ZShjYWxsYmFja3MpOwogfQpAQCAtMTU0LDcgKzE1NSw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlPiBJREJGYWN0b3J5QmEKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBJREJGYWN0b3J5
QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNr
cyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQordm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQog
ewogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0
eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlx
dWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKQEAgLTE3NCw3ICsxNzUs
NyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJh
c2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdT
dG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJ
ZGVudGlmaWVyKTsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VC
YWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKGNvbnRleHQsIG5hbWUsIGJh
Y2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1
bmlxdWVJZGVudGlmaWVyKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlPihkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpLnJlbGVhc2UoKSk7
CiAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNl
QmFja2VuZC5nZXQoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYg
KzQxLDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsKIGNsYXNzIElEQkJhY2tpbmdTdG9yZTsKIGNs
YXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsIDogcHVibGljIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoK
QEAgLTU3LDE0ICs1OCwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJh
c2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2
b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3Mq
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToK
ICAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsKICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZT4gb3BlbkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2b2lkIG9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpOworICAgIHZvaWQgb3BlbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsK
ICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xh
c3MgRnJhbWU7CiBjbGFzcyBJREJEYXRhYmFzZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xh
c3MgV29ya2VyQ29udGV4dDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIHR5cGVk
ZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTU1LDkgKzU2LDkgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2Fs
bGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdv
cmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29y
a2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2Vu
ZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSAr
MzIsNDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi12b2lkIElEQktleVBh
dGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0
aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mLCAwPiB2YWx1ZXMs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cykK
KyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisj
aW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJp
YWxpemVkVmFsdWVzQW5kS2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIDA+JiB2YWx1ZXMsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cykKIHsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uY2UgSlNDIHN1cHBvcnRzIFdp
cmVGb3JtYXQgZm9yIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS4KKyAgICBWZWN0b3I8U3RyaW5nPiBp
ZGJLZXlQYXRoOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIHBhcnNlRXJyb3I7CisgICAgSURC
UGFyc2VLZXlQYXRoKGtleVBhdGgsIGlkYktleVBhdGgsIHBhcnNlRXJyb3IpOworICAgIGlmIChw
YXJzZUVycm9yICE9IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSkKKyAgICAgICAgcmV0dXJuOwor
CisjaWYgVVNFKEpTQykKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9K
U0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5zaXplKCk7IGkrKykKKyAgICAgICAga2V5cy5h
cHBlbmQoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgo
ZXhlYywgdmFsdWVzW2ldLCBpZGJLZXlQYXRoKSk7CisjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5
SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK1Bhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVj
dElEQktleUludG9TZXJpYWxpemVkVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzIG1ldGhvZCBvbmNlIEpTQyBzdXBwb3J0cyBXaXJlRm9ybWF0IGZvciBTZXJpYWxp
emVkU2NyaXB0VmFsdWUuCisgICAgVmVjdG9yPFN0cmluZz4gaWRiS2V5UGF0aDsKKyAgICBJREJL
ZXlQYXRoUGFyc2VFcnJvciBwYXJzZUVycm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRo
LCBpZGJLZXlQYXRoLCBwYXJzZUVycm9yKTsKKyAgICBpZiAocGFyc2VFcnJvciAhPSBJREJLZXlQ
YXRoUGFyc2VFcnJvck5vbmUpCisgICAgICAgIHJldHVybiAwOworCisjaWYgVVNFKEpTQykKKyAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChj
b250ZXh0LCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6aW5q
ZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShleGVjLCBrZXksIHZhbHVlLCBpZGJLZXlQYXRo
KTsKKyNlbHNlCiAgICAgcmV0dXJuIDA7CisjZW5kaWYKIH0KIAorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEw
MzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBJREJLZXk7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOwogCiBjbGFzcyBJREJLZXlQYXRoQmFja2VuZEltcGwgewogcHVi
bGljOgotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0Fu
ZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYg
dmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4m
IGtleXMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5q
ZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKKyAgICBz
dGF0aWMgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4sIDA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0
cjxJREJLZXk+LCAwPiYga2V5cyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkocmV2aXNp
b24gMTAzNDAwKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxldmVs
REJTbGljZS5oIgogI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAxLDIxICsxMDEsMjEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpnZXRJbnRlcgogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURC
S2V5PiBmZXRjaEtleUZyb21LZXlQYXRoKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCkKK3N0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gZmV0Y2hLZXlG
cm9tS2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUqIHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCiB7CiAgICAgVmVjdG9yPFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4gdmFsdWVzOwogICAgIHZhbHVlcy5hcHBlbmQo
dmFsdWUpOwogICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGtleXM7Ci0gICAgSURCS2V5UGF0
aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRo
KHZhbHVlcywga2V5UGF0aCwga2V5cyk7CisgICAgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVh
dGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnRleHQsIHZhbHVlcywg
a2V5UGF0aCwga2V5cyk7CiAgICAgaWYgKGtleXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
MDsKICAgICBBU1NFUlQoa2V5cy5zaXplKCkgPT0gMSk7CiAgICAgcmV0dXJuIGtleXNbMF0ucmVs
ZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGlu
amVjdEtleUludG9LZXlQYXRoKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQorc3RhdGlj
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RLZXlJbnRvS2V5UGF0aChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCkKIHsKLSAgICByZXR1cm4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJ
bnRvU2VyaWFsaXplZFZhbHVlKGtleSwgdmFsdWUsIGtleVBhdGgpOworICAgIHJldHVybiBJREJL
ZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoY29udGV4
dCwga2V5LCB2YWx1ZSwga2V5UGF0aCk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzCiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VSUjsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNlbGVjdEtleUZvclB1dChJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgSURCS2V5KiBrZXksIFB1dE1vZGUgcHV0TW9kZSwg
SURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiB2
YWx1ZSkKK1Bhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZWxl
Y3RLZXlGb3JQdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIElEQktleSoga2V5LCBQdXRNb2RlIHB1dE1vZGUs
IElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYg
dmFsdWUpCiB7CiAgICAgaWYgKHB1dE1vZGUgPT0gQ3Vyc29yVXBkYXRlKQogICAgICAgICBBU1NF
UlQoa2V5KTsKQEAgLTE3NywxNCArMTc3LDE0IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmQKICAgICAgICAgaWYgKCFoYXNLZXlQYXRoKQogICAgICAgICAgICAgcmV0
dXJuIG9iamVjdFN0b3JlLT5nZW5BdXRvSW5jcmVtZW50S2V5KCk7CiAKLSAgICAgICAgUmVmUHRy
PElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9i
amVjdFN0b3JlLT5tX2tleVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5
ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChjb250ZXh0LCB2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUt
Pm1fa2V5UGF0aCk7CiAgICAgICAgIGlmIChrZXlQYXRoS2V5KSB7CiAgICAgICAgICAgICBvYmpl
Y3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAgICAgIHJldHVy
biBrZXlQYXRoS2V5OwogICAgICAgICB9CiAKICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0lu
Y0tleSA9IG9iamVjdFN0b3JlLT5nZW5BdXRvSW5jcmVtZW50S2V5KCk7Ci0gICAgICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJ
bnRvS2V5UGF0aChhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7Cisg
ICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24g
PSBpbmplY3RLZXlJbnRvS2V5UGF0aChjb250ZXh0LCBhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0
U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgewog
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIsICJUaGUgZ2VuZXJhdGVkIGtleSBjb3VsZCBu
b3QgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2JqZWN0IHVzaW5nIHRoZSBrZXlQYXRoLiIpKTsKICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtMTk0LDcgKzE5NCw3IEBAIFBhc3NSZWZQdHI8SURCS2V5
PiBJREJPYmplY3RTdG9yZUJhY2tlbmQKICAgICB9CiAKICAgICBpZiAoaGFzS2V5UGF0aCkgewot
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2
YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJL
ZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKGNvbnRleHQsIHZhbHVlLmdldCgp
LCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKIAogICAgICAgICBpZiAoIWtleVBhdGhLZXkpIHsK
ICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSLCAiVGhlIGtleSBjb3VsZCBub3QgYmUgZmV0
Y2hlZCBmcm9tIHRoZSBrZXlQYXRoLiIpKTsKQEAgLTIxNywxMCArMjE3LDEwIEBAIFBhc3NSZWZQ
dHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmQKICAgICByZXR1cm4ga2V5OwogfQogCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9k
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewogICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7Ci0gICAgUmVmUHRyPElEQktleT4g
a2V5ID0gc2VsZWN0S2V5Rm9yUHV0KG9iamVjdFN0b3JlLmdldCgpLCBwcnBLZXkuZ2V0KCksIHB1
dE1vZGUsIGNhbGxiYWNrcy5nZXQoKSwgdmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9
IHNlbGVjdEtleUZvclB1dChjb250ZXh0LCBvYmplY3RTdG9yZS5nZXQoKSwgcHJwS2V5LmdldCgp
LCBwdXRNb2RlLCBjYWxsYmFja3MuZ2V0KCksIHZhbHVlKTsKICAgICBpZiAoIWtleSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRJbnRlcgogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0
U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVu
ZCgpOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYg
aW5kZXggPSBpdC0+c2Vjb25kOwogCi0gICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0g
ZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgaW5kZXgtPmtleVBhdGgoKSk7CisgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChjb250ZXh0
LCB2YWx1ZS5nZXQoKSwgaW5kZXgtPmtleVBhdGgoKSk7CiAgICAgICAgIGlmICghaW5kZXhLZXkp
IHsKICAgICAgICAgICAgIGluZGV4S2V5cy5hcHBlbmQoaW5kZXhLZXkucmVsZWFzZSgpKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzgwLDggKzM4MCw5IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnQKIG5hbWVzcGFjZSB7CiBjbGFzcyBQb3B1bGF0ZUluZGV4
Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZENhbGxi
YWNrIHsKIHB1YmxpYzoKLSAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQotICAgICAgICA6IG1fYmFj
a2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAgICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dChjb250ZXh0KQorICAgICAgICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKICAg
ICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKICAgICAgICAgLCBtX29iamVjdFN0b3Jl
SWQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBtX2luZGV4KGluZGV4KQpAQCAtMzkxLDcgKzM5
Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJhY2soY29uc3QgSURCQmFja2lu
Z1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmUodmFsdWUpOwotICAgICAgICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJv
bUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0KCksIG1faW5kZXgtPmtleVBhdGgoKSk7CisgICAgICAg
IFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIG9iamVjdFZhbHVlLmdldCgpLCBtX2luZGV4LT5rZXlQYXRoKCkpOwog
CiAgICAgICAgIGlmICghaW5kZXhLZXkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQx
MSw2ICs0MTIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgorICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBJREJCYWNraW5nU3Rv
cmUmIG1fYmFja2luZ1N0b3JlOwogICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwogICAgIGludDY0
X3QgbV9vYmplY3RTdG9yZUlkOwpAQCAtNDE4LDkgKzQyMCw5IEBAIHByaXZhdGU6CiB9OwogfQog
Ci1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoSURCQmFja2lu
Z1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorYm9vbCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwb3B1bGF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bXBsPiBpbmRleCkKIHsKLSAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgY2FsbGJhY2soYmFja2lu
Z1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleCk7CisgICAgUG9wdWxhdGVJ
bmRleENhbGxiYWNrIGNhbGxiYWNrKGNvbnRleHQsIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwg
b2JqZWN0U3RvcmVJZCwgaW5kZXgpOwogICAgIGlmICghYmFja2luZ1N0b3JlLmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFjaykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1OSw3ICs0NjEsNyBAQCBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCCiAgICAgcmV0dXJuIGluZGV4
LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0X3QgaWQ7CiAgICAgaWYgKCFvYmplY3RTdG9y
ZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQs
IG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+bmFtZSgpLCBpbmRleC0+a2V5UGF0aCgpLCBpbmRl
eC0+dW5pcXVlKCksIGluZGV4LT5tdWx0aUVudHJ5KCksIGlkKSkgewpAQCAtNDY5LDcgKzQ3MSw3
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW4KIAogICAgIGluZGV4
LT5zZXRJZChpZCk7CiAKLSAgICBpZiAoIXBvcHVsYXRlSW5kZXgoKm9iamVjdFN0b3JlLT5tX2Jh
Y2tpbmdTdG9yZSwgb2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPm1faWQs
IGluZGV4KSkgeworICAgIGlmICghcG9wdWxhdGVJbmRleChjb250ZXh0LCAqb2JqZWN0U3RvcmUt
Pm1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+
bV9pZCwgaW5kZXgpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNz
UmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCi0gICAgc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRl
eChJREJCYWNraW5nU3RvcmUmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIGJvb2wg
cG9wdWxhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgSURCQmFja2luZ1N0b3JlJiwg
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW1wbD4pOwogCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVt
ZW50KTsKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7
CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKICAgICB2b2lk
IHJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAt
MTsgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gc2VsZWN0S2V5Rm9yUHV0KElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwqLCBJREJLZXkqLCBQdXRNb2RlLCBJREJDYWxsYmFja3MqLCBS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QktleT4gc2VsZWN0S2V5Rm9yUHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsKiwgSURCS2V5KiwgUHV0TW9kZSwgSURCQ2FsbGJhY2tzKiwgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mKTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
OwogICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4p
OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM0MDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwx
MyArMzYsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShET01T
dHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNl
QmFja2VuZEltcGwqIGRhdGFiYXNlKQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9y
dCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwob2JqZWN0U3RvcmVzLCBtb2Rl
LCBkYXRhYmFzZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbChjb250ZXh0LCBvYmplY3RTdG9yZXMsIG1vZGUsIGRhdGFiYXNlKSk7CiB9CiAKLUlE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3Ry
aW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKiBkYXRhYmFzZSkKLSAgICA6IG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9y
ZXMpCitJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIERPTVN0cmluZ0xpc3QqIG9iamVjdFN0
b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJh
c2UpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fb2Jq
ZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZXMpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1f
c3RhdGUoVW51c2VkKQogICAgICwgbV9kYXRhYmFzZShkYXRhYmFzZSkKQEAgLTIxNyw3ICsyMTgs
NyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lCiAgICAgICAgIE93
blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrKHF1ZXVlLmZpcnN0KCkucmVs
ZWFzZSgpKTsKICAgICAgICAgcXVldWUucmVtb3ZlRmlyc3QoKTsKICAgICAgICAgbV9wZW5kaW5n
RXZlbnRzKys7Ci0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKDApOworICAgICAgICB0YXNrLT5w
ZXJmb3JtVGFzayhtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmgJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiAKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGwgOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoRE9N
U3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBET01TdHJpbmdMaXN0KiBv
YmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwq
KTsKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCk7CiAKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTU5LDcgKzU5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcnVuKCk7CiAKIHByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMs
IHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKIAogICAgIGVu
dW0gU3RhdGUgewogICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQu
CkBAIC05NCw2ICs5NCw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fcGVuZGluZ0V2ZW50czsKIAog
ICAgIEhhc2hTZXQ8SURCQ3Vyc29yQmFja2VuZEltcGwqPiBtX29wZW5DdXJzb3JzOworCisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaAkocmV2aXNpb24gMTAzNDAwKQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmly
dHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGludGVyZmFjZU5hbWUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KiB0b0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KCkg
eyByZXR1cm4gdGhpczsgfQogCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihi
bG9ja2VkKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5pZGwJKHJldmlzaW9uIDEwMzQwMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAg
IENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIEdlbmVyYXRlVG9KUywKICAg
ICAgICAgRXZlbnRUYXJnZXQKICAgICBdIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogSURCUmVx
dWVzdCB7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmxvY2tlZDsK
</data>
<flag name="review"
          id="120837"
          type_id="1"
          status="-"
          setter="sam"
    />
    <flag name="commit-queue"
          id="120838"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120854</attachid>
            <date>2012-01-01 19:23:20 -0800</date>
            <delta_ts>2012-01-01 20:39:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>indexeddb20120102.patch</filename>
            <type>text/plain</type>
            <size>67112</size>
            <attacher name="Donggwan Kim">donggwan.kim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDEyLTAxLTAxICBEb25nLUd3
YW4gS2ltICA8ZG9uZ2d3YW4ua2ltQHNhbXN1bmcuY29tPgorCisgICAgICAgIEltcGxlbWVudCBK
U0MgZmVhdHVyZXMgcmVxdWlyZWQgZm9yIEluZGV4ZWREQgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxMTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFVzZUpTQy5jbWFrZToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXROdGhWYWx1ZU9uS2V5
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXpl
ZFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvT3B0aW9uc09iamVj
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6T3B0aW9uc09i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAo
V2ViQ29yZTo6T3B0aW9uc09iamVjdDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNP
YmplY3Q6OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpP
cHRpb25zT2JqZWN0OjpnZXRLZXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL09wdGlvbnNPYmpl
Y3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnRvV2lyZVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6
CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChUeXBlQ2FuRmFp
bENvbnZlcnNpb24pOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFs
KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRo
QmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJ
bnRvU2VyaWFsaXplZFZhbHVlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVBhdGhCYWNrZW5k
SW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6Cisg
ICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZldGNoS2V5RnJvbUtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6aW5qZWN0
S2V5SW50b0tleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2VsZWN0S2V5Rm9yUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnB1dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdDo6dG9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6CisKIDIwMTItMDEtMDEgIEFuZHJlYXMg
S2xpbmcgIDxhd2Vzb21la2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlIENvbGxlY3Rp
b25DYWNoZSBpbnRvIEhUTUxDb2xsZWN0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMzUxLDIyICsxMzUxLDM0IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBz
dG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAogICAgIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNw
cAogICAgIHN0b3JhZ2UvSURCQW55LmNwcAotICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCi0g
ICAgc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAogICAgIHN0b3JhZ2UvSURCQ3Vy
c29yLmNwcAogICAgIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisgICAgc3RvcmFn
ZS9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCisgICAgc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKKyAg
ICBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisgICAgc3RvcmFnZS9JREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGwuY3BwCiAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5j
cHAKICAgICBzdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKKyAgICBzdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCisgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAKKyAg
ICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKICAgICBzdG9yYWdlL0lEQkluZGV4
LmNwcAogICAgIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKICAgICBzdG9yYWdlL0lE
QktleS5jcHAKKyAgICBzdG9yYWdlL0lEQktleVBhdGguY3BwCisgICAgc3RvcmFnZS9JREJLZXlQ
YXRoQmFja2VuZEltcGwuY3BwCiAgICAgc3RvcmFnZS9JREJLZXlSYW5nZS5jcHAKLSAgICBzdG9y
YWdlL0lEQlJlcXVlc3QuY3BwCisgICAgc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNw
cAorICAgIHN0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAKICAgICBzdG9yYWdlL0lEQk9iamVj
dFN0b3JlLmNwcAogICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKLSAg
ICBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwCi0gICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5jcHAKLSAgICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKyAgICBz
dG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCisgICAgc3RvcmFnZS9JREJS
ZXF1ZXN0LmNwcAorICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCisgICAgc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAKKyAgICBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKKyAg
ICBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAogICAgIHN0b3JhZ2UvTG9jYWxT
dG9yYWdlVGFzay5jcHAKICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKICAgICBz
dG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAKQEAgLTE0OTYsNiArMTUwOCw3IEBAIElGIChF
TkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lETF9GSUxF
UwogICAgICAgICBzdG9yYWdlL0lEQkFueS5pZGwKICAgICAgICAgc3RvcmFnZS9JREJDdXJzb3Iu
aWRsCisgICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAogICAgICAgICBzdG9y
YWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNl
cHRpb24uaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCkBAIC0xNTA2LDYgKzE1
MTksOCBAQCBJRiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAgICAgIHN0b3JhZ2UvSURC
T2JqZWN0U3RvcmUuaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCUmVxdWVzdC5pZGwKICAgICAgICAg
c3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwKKyAgICAgICAgc3RvcmFnZS9JREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaWRsCisgICAgICAgIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRs
CiAgICAgKQogRU5ESUYgKCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQkocmV2aXNpb24gMTAzODg5
KQorKysgU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjks
NiArMTI5LDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMv
SlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JD
dXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKKyAgICBi
aW5kaW5ncy9qcy9PcHRpb25zT2JqZWN0LmNwcAogICAgIGJpbmRpbmdzL2pzL1BhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKICAgICBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCiAgICAg
YmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9u
IDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyMSArMzAsNzYgQEAKICNpbmNsdWRlICJJREJC
aW5kaW5nVXRpbGl0aWVzLmgiCiAKICNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZSgpOwotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICBpZiAodmFsdWUuaXNOdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKTsKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZGF0ZXMuCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0
cmluZyh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAodmFs
dWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlRGF0ZSh2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkpOwogICAgIHJldHVybiAwOwog
fQogCitKU1ZhbHVlIGdldE50aFZhbHVlT25LZXlQYXRoKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywg
c2l6ZV90IGluZGV4KQoreworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlOworICAgIEpTT2JqZWN0
KiBvYmplY3QgPSByb290VmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgUHJvcGVydHlTbG90IHNs
b3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7CisgICAgICAgIElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcihleGVjLCBrZXlQYXRoRWxlbWVudHNbaV0u
aW1wbCgpKTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmdldE93blByb3BlcnR5U2xvdChvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgICAgICBjdXJyZW50VmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsKK30KKworUGFzc1Jl
ZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoKQoreworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUtPmRlc2VyaWFs
aXplKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNWYWx1ZSBqc0tl
eSA9IGdldE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFsdWUsIGtleVBhdGgsIGtleVBhdGgu
c2l6ZSgpKTsKKyAgICBpZiAoanNLZXkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIGpzS2V5KTsKK30KKwor
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxp
emVkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBr
ZXlQYXRoKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KCFrZXlQYXRoLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KTsKKyAgICBKU1ZhbHVlIHBhcmVudCA9IGdldE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFs
dWUsIGtleVBhdGgsIGtleVBhdGguc2l6ZSgpIC0gMSk7CisgICAgaWYgKHBhcmVudC5pc1VuZGVm
aW5lZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghcGFyZW50LmlzT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IHBhcmVudC50b09i
amVjdChleGVjKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElk
ZW50aWZpZXIoZXhlYywga2V5UGF0aC5sYXN0KCkuaW1wbCgpKSwgcGFyZW50KTsKKworICAgIHJl
dHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBqc1ZhbHVlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5oCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiU2NyaXB0VmFsdWUu
aCIgCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw2ICszNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIElEQktleTsKIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21W
YWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CitQYXNzUmVmUHRyPElEQktleT4g
Y3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoSlNDOjpFeGVjU3RhdGUq
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sICBjb25zdCBWZWN0b3I8U3RyaW5n
LCAwPiYpOworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUlu
dG9TZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4sIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgVmVjdG9yPFN0cmluZywgMD4m
KTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlD
dXN0b20uY3BwCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkFueUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxNCBAQAog
CiAjaW5jbHVkZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAi
SURCQ3Vyc29yV2l0aFZhbHVlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJJREJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSURCSW5kZXguaCIKICNpbmNsdWRlICJJREJLZXku
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIkpTSURCQ3Vyc29yLmgi
CisjaW5jbHVkZSAiSlNJREJDdXJzb3JXaXRoVmFsdWUuaCIKICNpbmNsdWRlICJKU0lEQkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiSlNJREJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSlNJREJJbmRleC5o
IgpAQCAtNjMsNiArNjUsOCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBjYXNlIElEQkFueTo6SURCQ3Vyc29y
VHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlk
YkN1cnNvcigpKTsKKyAgICBjYXNlIElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYkN1cnNvcldp
dGhWYWx1ZSgpKTsKICAgICBjYXNlIElEQkFueTo6SURCRGF0YWJhc2VUeXBlOgogICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRiRGF0YWJhc2UoKSk7CiAg
ICAgY2FzZSBJREJBbnk6OklEQkZhY3RvcnlUeXBlOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTAzODg5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw4IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmEKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGtleS0+bnVtYmVyKCkpOwogICAgIGNhc2UgSURC
S2V5OjpTdHJpbmdUeXBlOgogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywga2V5LT5zdHJp
bmcoKSk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICBjYXNlIElEQktleTo6
RGF0ZVR5cGU6CisgICAgICAgIHJldHVybiBqc0RhdGVPck51bGwoZXhlYywga2V5LT5kYXRlKCkp
OwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYXJyYXlzLgogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9PcHRpb25zT2JqZWN0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKKworI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNNZXNz
YWdlUG9ydEN1c3RvbS5oIgorI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgorI2luY2x1ZGUgIkpTVHJh
Y2tDdXN0b20uaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJKU1RleHRU
cmFjay5oIgorI2luY2x1ZGUgIlRyYWNrQmFzZS5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworT3B0aW9uc09iamVjdDo6T3B0aW9uc09i
amVjdCgpCisgICAgOiBtX2V4ZWMoMCkKK3sKK30KKworT3B0aW9uc09iamVjdDo6T3B0aW9uc09i
amVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNWYWx1ZSYgb3B0aW9ucykKKyAgICA6
IG1fZXhlYyhleGVjKQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCit7Cit9CisKK09wdGlvbnNP
YmplY3Q6On5PcHRpb25zT2JqZWN0KCkKK3sKK30KKworT3B0aW9uc09iamVjdCYgT3B0aW9uc09i
amVjdDo6b3BlcmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmIG9wdGlvbnNPYmplY3QpCit7Cisg
ICAgbV9leGVjID0gb3B0aW9uc09iamVjdC5tX2V4ZWM7CisgICAgbV9vcHRpb25zID0gb3B0aW9u
c09iamVjdC5tX29wdGlvbnM7CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIE9wdGlvbnNP
YmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0Cit7CisgICAg
SlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0ganNWYWx1ZS50b0Jvb2xlYW4obV9leGVjKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3Ry
aW5nJiBrZXksIGludDMyX3QmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsK
KyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB2YWx1ZSA9IGpzVmFsdWUudG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiB2
YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5
LCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVl
LnRvTnVtYmVyKG1fZXhlYyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09i
amVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAg
IEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTdHJpbmcmIHN0cmluZyh1c3RyaW5nVG9TdHJp
bmcoanNWYWx1ZS50b1N0cmluZyhtX2V4ZWMpKSk7CisgICAgdmFsdWUgPSBzdHJpbmc7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYg
a2V5LCBTY3JpcHRWYWx1ZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOwor
ICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHZhbHVlID0gU2NyaXB0VmFsdWUobV9leGVjLT5nbG9iYWxEYXRhKCksIGpzVmFsdWUpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJp
bmcmIGtleSwgdW5zaWduZWQgc2hvcnQmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNW
YWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB2YWx1ZSA9IGpzVmFsdWUudG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgdW5z
aWduZWQmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdl
dEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9
IGpzVmFsdWUudG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9w
dGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgdW5zaWduZWQgbG9uZyBsb25nJiB2
YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5
LCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVl
LnRvTnVtYmVyKG1fZXhlYyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09i
amVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8RE9NV2luZG93PiYgdmFsdWUpIGNv
bnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gdG9ET01XaW5kb3coanNW
YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNv
bnN0IFN0cmluZyYga2V5LCBSZWZQdHI8U3RvcmFnZT4mIHZhbHVlKSBjb25zdAoreworICAgIEpT
VmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IHRvU3RvcmFnZShqc1ZhbHVlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXks
IE1lc3NhZ2VQb3J0QXJyYXkmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsK
KyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShtX2V4ZWMsIGpzVmFsdWUsIHZhbHVlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2Jvb2wgT3B0aW9uc09i
amVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8VHJhY2tCYXNlPiYgdmFsdWUpIGNv
bnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gdG9UcmFjayhqc1ZhbHVl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIE9wdGlvbnNPYmplY3Q6Omdl
dFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1
ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBq
c1ZhbHVlKSB8fCBqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHZh
bHVlID0gU3RyaW5nKCk7CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5n
KHVzdHJpbmdUb1N0cmluZyhqc1ZhbHVlLnRvU3RyaW5nKG1fZXhlYykpKTsKKyAgICAgICAgdmFs
dWUgPSBzdHJpbmc7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9u
c09iamVjdDo6Z2V0S2V5KGNvbnN0IFN0cmluZyYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkgY29uc3QK
K3sKKyAgICBpZiAoIW1fZXhlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1f
b3B0aW9ucy5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBKU09iamVjdCogb3B0aW9ucyA9IG1fb3B0aW9ucy50b09iamVjdChtX2V4ZWMpOworICAgIGlm
ICghb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gb3B0aW9ucy0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIGtleS5pbXBsKCkpKTsK
KyAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9PcHRpb25z
T2JqZWN0LmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L09wdGlvbnNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNTAgQEAKICNpZm5k
ZWYgT3B0aW9uc09iamVjdF9oCiAjZGVmaW5lIE9wdGlvbnNPYmplY3RfaAogCi0vLyBGSVhNRTog
SW1wbGVtZW50LgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNW
YWx1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNz
IFN0b3JhZ2U7CitjbGFzcyBUcmFja0Jhc2U7CisKK2NsYXNzIE9wdGlvbnNPYmplY3QgeworcHVi
bGljOgorICAgIE9wdGlvbnNPYmplY3QoKTsKKyAgICBPcHRpb25zT2JqZWN0KEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpKU1ZhbHVlJiBvcHRpb25zKTsKKworICAgIE9wdGlvbnNPYmplY3Qm
IG9wZXJhdG9yPShjb25zdCBPcHRpb25zT2JqZWN0Jik7CisKKyAgICBib29sIGdldChjb25zdCBT
dHJpbmcmLCBib29sJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgaW50MzJf
dCYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIGRvdWJsZSYpIGNvbnN0Owor
ICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFN0cmluZyYpIGNvbnN0OworICAgIGJvb2wgZ2V0
KGNvbnN0IFN0cmluZyYsIFNjcmlwdFZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkIGxvbmcgbG9uZyYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0
cjxET01XaW5kb3c+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRy
PFN0b3JhZ2U+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBv
cnRBcnJheSYpIGNvbnN0OworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBib29sIGdldChj
b25zdCBTdHJpbmcmLCBSZWZQdHI8VHJhY2tCYXNlPiYpIGNvbnN0OworI2VuZGlmCisKKyAgICBi
b29sIGdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBj
b25zdDsKKworICAgIH5PcHRpb25zT2JqZWN0KCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBnZXRL
ZXkoY29uc3QgU3RyaW5nJiBrZXksIEpTQzo6SlNWYWx1ZSYpIGNvbnN0OworCisgICAgSlNDOjpF
eGVjU3RhdGUqIG1fZXhlYzsKKyAgICBKU0M6OkpTVmFsdWUgbV9vcHRpb25zOworfTsKKworfSAv
LyBXZWJDb3JlCiAKICNlbmRpZiAvLyBPcHRpb25zT2JqZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2
aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBlbnVtIFNlcmlh
bGl6YXRpb25UYWcgewogICAgIFJlZ0V4cFRhZyA9IDE4LAogICAgIE9iamVjdFJlZmVyZW5jZVRh
ZyA9IDE5LAogICAgIE1lc3NhZ2VQb3J0UmVmZXJlbmNlVGFnID0gMjAsCisgICAgTnVtYmVyVGFn
ID0gMjEsCisgICAgUGFkZGluZ1RhZyA9IDIyLAogICAgIEVycm9yVGFnID0gMjU1CiB9OwogCkBA
IC0yNzEsNyArMjczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICB3cml0ZUxpdHRs
ZUVuZGlhbjx1aW50OF90PihvdXQsIFN0cmluZ1RhZyk7CiAgICAgICAgIHdyaXRlTGl0dGxlRW5k
aWFuKG91dCwgcy5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiB3cml0ZUxpdHRsZUVuZGlhbihv
dXQsIHMuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOworICAgICAgICBib29sIHJl
dCA9IHdyaXRlTGl0dGxlRW5kaWFuKG91dCwgcy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgcy5sZW5n
dGgoKSk7CisKKyAgICAgICAgaWYgKG91dC5zaXplKCkgJSAyKQorICAgICAgICAgICAgd3JpdGVM
aXR0bGVFbmRpYW48dWludDhfdD4ob3V0LCBQYWRkaW5nVGFnKTsKKworICAgICAgICByZXR1cm4g
cmV0OwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVuZGVmaW5lZChWZWN0b3I8
dWludDhfdD4mIG91dCkKQEAgLTI4Niw2ICsyOTMsMTggQEAgcHVibGljOgogICAgICAgICB3cml0
ZUxpdHRsZUVuZGlhbjx1aW50OF90PihvdXQsIHZhbHVlID8gVHJ1ZVRhZyA6IEZhbHNlVGFnKTsK
ICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBzZXJpYWxpemVOdW1iZXIoZG91YmxlIHZhbHVlLCBW
ZWN0b3I8dWludDhfdD4mIG91dCkKKyAgICB7CisgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKG91
dCwgQ3VycmVudFZlcnNpb24pOworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbjx1aW50OF90Pihv
dXQsIE51bWJlclRhZyk7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIGRvdWJsZSBkOwor
ICAgICAgICAgICAgaW50NjRfdCBpOworICAgICAgICB9IHU7CisgICAgICAgIHUuZCA9IHZhbHVl
OworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihvdXQsIHUuaSk7CisgICAgfQorCiBwcml2YXRl
OgogICAgIENsb25lU2VyaWFsaXplcihFeGVjU3RhdGUqIGV4ZWMsIE1lc3NhZ2VQb3J0QXJyYXkq
IG1lc3NhZ2VQb3J0cywgVmVjdG9yPHVpbnQ4X3Q+JiBvdXQpCiAgICAgICAgIDogQ2xvbmVCYXNl
KGV4ZWMpCkBAIC03OTYsMTEgKzgxNSwyNSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9u
ZVNlcmlhbGl6ZXI6CiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm4gVW5zcGVjaWZp
ZWRFcnJvcjsKIAorICAgIGlmIChtX2J1ZmZlci5zaXplKCkgJSAyKQorICAgICAgICB3cml0ZShQ
YWRkaW5nVGFnKTsKKwogICAgIHJldHVybiBTdWNjZXNzZnVsbHlDb21wbGV0ZWQ7CiB9CiAKIGNs
YXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMg
U3RyaW5nIHRvV2lyZVN0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICB7
CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJ1ZmZlci5iZWdpbigpOworICAgICAgICBj
b25zdCB1aW50OF90KiBlbmQgPSBidWZmZXIuZW5kKCk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90
IGxlbmd0aCA9IGJ1ZmZlci5zaXplKCkgLyBzaXplb2YoVUNoYXIpOworICAgICAgICBVU3RyaW5n
IHN0cjsKKyAgICAgICAgaWYgKCFyZWFkU3RyaW5nKHB0ciwgZW5kLCBzdHIsIGxlbmd0aCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoc3RyLmlt
cGwoKSk7CisgICAgfQorCiAgICAgc3RhdGljIFN0cmluZyBkZXNlcmlhbGl6ZVN0cmluZyhjb25z
dCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKICAgICB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHB0ciA9IGJ1ZmZlci5iZWdpbigpOwpAQCAtMTQxNiw2ICsxNDQ5LDE0IEBAIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBpZiAo
IXdyaXRlTGl0dGxlRW5kaWFuKGJ1ZmZlciwgc3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCBz
dHJpbmcubGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKK30KKwogUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQ29udGV4
dFJlZiBvcmlnaW5Db250ZXh0LCBKU1ZhbHVlUmVmIGFwaVZhbHVlLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdl
UG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKQEAgLTE0
NDQsNiArMTQ4NSwxMSBAQCBTdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1N0cmluZygp
CiAgICAgcmV0dXJuIENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyhtX2RhdGEp
OwogfQogCitTdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJpbmcoKQorewor
ICAgIHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6dG9XaXJlU3RyaW5nKG1fZGF0YSk7Cit9CisK
IEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgU2Vy
aWFsaXphdGlvbkVycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCiB7CkBAIC0xNDk0LDYgKzE1NDAs
MTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbAogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKGJ1ZmZlcikpOwogfQogCitQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1i
ZXJWYWx1ZShkb3VibGUgdmFsdWUpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAg
ICBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZU51bWJlcih2YWx1ZSwgYnVmZmVyKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKK30KKwog
dm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om1heWJlVGhyb3dFeGNlcHRpb25JZlNlcmlhbGl6
YXRpb25GYWlsZWQoRXhlY1N0YXRlKiBleGVjLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBjb2Rl
KQogewogICAgIGlmIChjb2RlID09IFN1Y2Nlc3NmdWxseUNvbXBsZXRlZCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCShy
ZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTMgKzU0LDE0IEBAIGVudW0gU2Vy
aWFsaXphdGlvbkVycm9yTW9kZSB7IE5vblRocm93aW4KIAogY2xhc3MgU2hhcmVkQnVmZmVyOwog
Ci1jbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHsKK2NsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1YmxpYyBU
aHJlYWRTYWZlUmVmQ291bnRlZDxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgTWVzc2FnZVBvcnRBcnJheSosIFNlcmlhbGl6YXRpb25F
cnJvck1vZGUgPSBUaHJvd2luZyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBjcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIE1lc3NhZ2VQ
b3J0QXJyYXkqID0gMCwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0NvbnRleHRS
ZWYsIEpTVmFsdWVSZWYsIE1lc3NhZ2VQb3J0QXJyYXkqLCAgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShK
U0NvbnRleHRSZWYsIEpTVmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShjb25zdCBTdHJp
bmcmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0
ZUZyb21XaXJlKGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gYWRvcHQoVmVjdG9yPHVpbnQ4X3Q+JiBidWZmZXIpCiAgICAgewogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsK
QEAgLTcwLDEwICs3MSwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSogbnVsbFZhbHVlKCk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB1bmRlZmluZWRWYWx1ZSgpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gYm9vbGVhblZhbHVlKGJvb2wgdmFsdWUpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gbnVtYmVyVmFsdWUoZG91YmxlIHZhbHVlKTsK
IAogICAgIFN0cmluZyB0b1N0cmluZygpOworICAgIFN0cmluZyB0b1dpcmVTdHJpbmcoKTsKICAg
ICAKLSAgICBKU0M6OkpTVmFsdWUgZGVzZXJpYWxpemUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgTWVzc2FnZVBvcnRBcnJheSosIFNlcmlhbGl6YXRpb25FcnJvck1vZGUg
PSBUaHJvd2luZyk7CisgICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIE1lc3NhZ2VQb3J0QXJyYXkqID0gMCwgU2VyaWFsaXph
dGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKICAgICBKU1ZhbHVlUmVmIGRlc2VyaWFsaXplKEpT
Q29udGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uLCBNZXNzYWdlUG9ydEFycmF5Kik7CiAg
ICAgSlNWYWx1ZVJlZiBkZXNlcmlhbGl6ZShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjEy
OSwxMSArMjEyOSwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSB0byR7
Y2xhc3NOYW1lfShleGVjLT5ob3N0VGhpc1ZhbHVlKCkudG9UaGlzT2JqZWN0KGV4ZWMpKTtcbiIp
OwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghY2FzdGVkVGhp
cylcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOwotICAgICAgICAgICAgfSBlbHNpZiAoISRm
dW5jdGlvbi0+aXNTdGF0aWMpIHsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgbXkgJGtpbmQgPSAkZnVuY3Rpb24tPmlzU3RhdGljID8gIkNvbnN0cnVjdG9yIiA6ICIiOwog
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEpTVmFsdWUgdGhpc1ZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJiR7Y2xhc3NOYW1lfTo6c19p
bmZvKSlcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
dGhpc1ZhbHVlLmluaGVyaXRzKCYke2NsYXNzTmFtZX0ke2tpbmR9OjpzX2luZm8pKVxuIik7CiAg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKGV4ZWMpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgJGNsYXNzTmFtZSogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PCRjbGFzc05hbWUqPihh
c09iamVjdCh0aGlzVmFsdWUpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgICR7Y2xhc3NOYW1lfSR7a2luZH0qIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDwk
e2NsYXNzTmFtZX0ke2tpbmR9Kj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7XG4iKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCAmJHtjbGFzc05hbWV9OjpzX2luZm8pO1xuIikgdW5s
ZXNzICgkZnVuY3Rpb24tPmlzU3RhdGljKTsKQEAgLTIxOTAsMzQgKzIxOTEsMzQgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIj
ZW5kaWZcblxuIikgaWYgJGNvbmRpdGlvbmFsOwogICAgICAgICB9CisgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCRuZWVkc01hcmtDaGlsZHJlbiAmJiAhJGRhdGFOb2RlLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pIHsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAidm9pZCAke2NsYXNzTmFtZX06OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcilcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NO
YW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCAmc19pbmZvKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENo
aWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0
cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7XG4iKTsKLSAgICAgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9KSB7Ci0gICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+aW1wbCgpLT52aXNpdEpTRXZlbnRMaXN0ZW5l
cnModmlzaXRvcik7XG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgkbnVtQ2Fj
aGVkQXR0cmlidXRlcyA+IDApIHsKLSAgICAgICAgICAgICAgICBmb3JlYWNoIChAeyRkYXRhTm9k
ZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgICAgICAgICAgICAgbXkgJGF0dHJpYnV0ZSA9ICRf
OwotICAgICAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5tXyIgLiAkYXR0cmli
dXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
IiAuICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIpO1xuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICBpZiAoJG5lZWRzTWFya0NoaWxkcmVuICYmICEkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSkgeworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgJHtjbGFzc05hbWV9KiB0
aGlzT2JqZWN0ID0ganNDYXN0PCR7Y2xhc3NOYW1lfSo+KGNlbGwpO1xuIik7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgJnNfaW5mbyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgQ09NUElM
RV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlk
ZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTtcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZv
KCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpO1xuIik7
CisgICAgICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdl
dCJ9KSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB0aGlzT2JqZWN0LT5p
bXBsKCktPnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTtcbiIpOworICAgICAgICB9Cisg
ICAgICAgIGlmICgkbnVtQ2FjaGVkQXR0cmlidXRlcyA+IDApIHsKKyAgICAgICAgICAgIGZvcmVh
Y2ggKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgICAgIG15ICRhdHRy
aWJ1dGUgPSAkXzsKKyAgICAgICAgICAgICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKHRoaXNPYmplY3QtPm1fIiAuICRhdHRy
aWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSAuICIpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tXyIg
LiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKTtcbiIpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4i
KTsKICAgICAgICAgfQotICAgICAgICAjIENhY2hlZCBhdHRyaWJ1dGVzIGFyZSBpbmRlZWQgYWxs
b3dlZCB3aGVuIHRoZXJlIGlzIGEgY3VzdG9tIG1hcmsvdmlzaXRDaGlsZHJlbiBmdW5jdGlvbi4K
LSAgICAgICAgIyBUaGUgY3VzdG9tIGZ1bmN0aW9uIG11c3QgbWFrZSBzdXJlIHRvIGFjY291bnQg
Zm9yIHRoZSBjYWNoZWQgYXR0cmlidXRlLgotICAgICAgICAjIFVuY29tbWVudCB0aGUgYmVsb3cg
bGluZSB0byB0ZW1wb3JhcmlseSBlbmZvcmNlIGdlbmVyYXRlZCBtYXJrIGZ1bmN0aW9ucyB3aGVu
IGNhY2hlZCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LgotICAgICAgICAjIGRpZSAiQ2FuJ3QgZ2Vu
ZXJhdGUgYmluZGluZyBmb3IgY2xhc3Mgd2l0aCBjYWNoZWQgYXR0cmlidXRlIGFuZCBjdXN0b20g
bWFyay4iIGlmICgoJG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSBhbmQgKCRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9KSk7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAifVxuXG4iKTsKICAgICB9CisgICAgIyBDYWNoZWQgYXR0cmlidXRlcyBh
cmUgaW5kZWVkIGFsbG93ZWQgd2hlbiB0aGVyZSBpcyBhIGN1c3RvbSBtYXJrL3Zpc2l0Q2hpbGRy
ZW4gZnVuY3Rpb24uCisgICAgIyBUaGUgY3VzdG9tIGZ1bmN0aW9uIG11c3QgbWFrZSBzdXJlIHRv
IGFjY291bnQgZm9yIHRoZSBjYWNoZWQgYXR0cmlidXRlLgorICAgICMgVW5jb21tZW50IHRoZSBi
ZWxvdyBsaW5lIHRvIHRlbXBvcmFyaWx5IGVuZm9yY2UgZ2VuZXJhdGVkIG1hcmsgZnVuY3Rpb25z
IHdoZW4gY2FjaGVkIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQuCisgICAgIyBkaWUgIkNhbid0IGdl
bmVyYXRlIGJpbmRpbmcgZm9yIGNsYXNzIHdpdGggY2FjaGVkIGF0dHJpYnV0ZSBhbmQgY3VzdG9t
IG1hcmsuIiBpZiAoKCRudW1DYWNoZWRBdHRyaWJ1dGVzID4gMCkgYW5kICgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSkpOwogCiAgICAgaWYgKCRu
dW1Db25zdGFudHMgPiAwKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLy8gQ29uc3Rh
bnQgZ2V0dGVyc1xuXG4iKTsKQEAgLTI1NDIsOSArMjU0MywxNiBAQCBzdWIgR2VuZXJhdGVQYXJh
bWV0ZXJzQ2hlY2sKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgfVxu
Iik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhlIHR5cGUgY29u
dmVyc2lvbiBzdWNjZWVkZWQuCi0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4i
KTsKKyAgICAgICAgICAgIGlmIChUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsK
KyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoISRuYW1lKSB7XG4i
KTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIpOworICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgfVxu
Iik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhl
IHR5cGUgY29udmVyc2lvbiBzdWNjZWVkZWQuCisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOworICAgICAgICAgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJGNv
ZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhcmdUeXBlKSBhbmQgbm90ICRp
bXBsQ2xhc3NOYW1lID1+IC9MaXN0JC8pIHsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0
QXJyYXksICIgICAgaWYgKCEkbmFtZSkge1xuIik7CkBAIC0yODA0LDYgKzI4MTIsNyBAQCBteSAl
bmF0aXZlVHlwZSA9ICgKICAgICAiRE9NU3RyaW5nW10iID0+ICJET01TdHJpbmdMaXN0KiIsCiAg
ICAgIkRPTU9iamVjdCIgPT4gIlNjcmlwdFZhbHVlIiwKICAgICAiTm9kZUZpbHRlciIgPT4gIlJl
ZlB0cjxOb2RlRmlsdGVyPiIsCisgICAgIk9wdGlvbnNPYmplY3QiID0+ICJPcHRpb25zT2JqZWN0
IiwKICAgICAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiA9PiAiUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4iLAogICAgICJJREJLZXkiID0+ICJSZWZQdHI8SURCS2V5PiIsCiAgICAgImJvb2xl
YW4iID0+ICJib29sIiwKQEAgLTI4ODQsNiArMjg5MywxNyBAQCBzdWIgSXNBcnJheVR5cGUKICAg
ICByZXR1cm4gJHR5cGUgPX4gbS9cW1xdJC87CiB9CiAKK3N1YiBUeXBlQ2FuRmFpbENvbnZlcnNp
b24KK3sKKyAgICBteSAkc2lnbmF0dXJlID0gc2hpZnQ7CisKKyAgICBteSAkdHlwZSA9ICRjb2Rl
R2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKKworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJJREJLZXkiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUiOworICAgIHJldHVybiAwOworfQorCiBzdWIgSlNWYWx1ZVRvTmF0aXZl
CiB7CiAgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OwpAQCAtMjkyMiw2ICsyOTQyLDExIEBAIHN1
YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgcmV0dXJuICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
OjpjcmVhdGUoU2NyaXB0VmFsdWUoZXhlYy0+Z2xvYmFsRGF0YSgpLCAiIC4gJHZhbHVlIC4iKSki
OwogICAgIH0KIAorICAgIGlmICgkdHlwZSBlcSAiT3B0aW9uc09iamVjdCIgb3IgJHR5cGUgZXEg
ImFueSIpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siT3B0aW9uc09iamVjdC5oIn0gPSAxOwor
ICAgICAgICByZXR1cm4gIk9wdGlvbnNPYmplY3QoZXhlYywgJHZhbHVlKSI7CisgICAgfQorCiAg
ICAgaWYgKCR0eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiIG9yICR0eXBlIGVxICJhbnki
KSB7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIs
ICRjb25kaXRpb25hbCk7CiAgICAgICAgIHJldHVybiAiU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoZXhlYywgJHZhbHVlKSI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkN1
cnNvcldpdGhWYWx1ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJDdXJzb3JXaXRoVmFsdWUuaWRsCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDggQEAKIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCi0gICAgICAgIENv
bmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9E
QVRBQkFTRSwKKyAgICAgICAgR2VuZXJhdGVUb0pTCiAgICAgXSBJREJDdXJzb3JXaXRoVmFsdWUg
OiBJREJDdXJzb3IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHZhbHVlOwog
ICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2
LDcgQEAKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtOTMsOCArOTQsOSBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKIH07CiAKLUlEQkRhdGFi
YXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyKQotICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3Jl
KQorSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdT
dG9yZSogYmFja2luZ1N0b3JlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBjb29yZGluYXRv
ciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlk
ZW50aWZpZXIpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAs
IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKICAgICAsIG1faWQoSW52YWxpZElkKQogICAg
ICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX3ZlcnNpb24oIiIpCkBAIC0yMzAsNyArMjMyLDcgQEAg
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKAogCiAgICAgUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsK
ICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMuZ2V0KCksIElE
QlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpjcmVhdGUobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBvYmplY3RTdG9yZU5hbWVz
LmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRoaXMpOwogICAgIGlmICgh
dHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnNldFZlcnNpb25JbnRlcm5hbCwgZGF0YWJhc2UsIHZlcnNpb24sIGNhbGxi
YWNrcywgdHJhbnNhY3Rpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
cmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbiwg
ZGF0YWJhc2UsIG1fdmVyc2lvbikpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246Ok5PVF9BTExPV0VEX0VSUjsKQEAgLTMxMSw3ICszMTMsNyBAQCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjCiAgICAgfQogCiAgICAgLy8gRklYTUU6IFJldHVybiBu
b3QgYWxsb3dlZCBlcnIgaWYgY2xvc2UgaGFzIGJlZW4gY2FsbGVkLgotICAgIHJldHVybiBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUob2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgdGhp
cyk7CisgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMpOwogfQogCiB2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4gY2FsbGJhY2tzKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRh
YmFzZUJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSwxMiArNDEsMTMgQEAgY2xhc3MgSURCRGF0YWJhc2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2Vu
ZEltcGw7CiBjbGFzcyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOwogY2xhc3MgSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNz
IElEQkRhdGFiYXNlQmFja2VuZEltcGwgOiBwdWJsaWMgSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNl
LCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBjb29yZGluYXRvciwgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKiBmYWN0b3J5LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gY3JlYXRlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3Jl
KiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZh
Y3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVy
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKG5hbWUsIGRhdGFiYXNlLCBjb29yZGluYXRvciwgZmFjdG9yeSwgdW5pcXVlSWRlbnRpZmll
cikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkRhdGFiYXNlQmFja2VuZEltcGwo
Y29udGV4dCwgbmFtZSwgZGF0YWJhc2UsIGNvb3JkaW5hdG9yLCBmYWN0b3J5LCB1bmlxdWVJZGVu
dGlmaWVyKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklEQkRhdGFiYXNlQmFja2VuZEltcGwoKTsK
IApAQCAtNzYsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVk
KFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAKIHByaXZhdGU6
Ci0gICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tp
bmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJREJGYWN0b3J5
QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOworICAgIElEQkRh
dGFiYXNlQmFja2VuZEltcGwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
bmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ciosIElEQkZhY3RvcnlCYWNrZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmll
cik7CiAKICAgICB2b2lkIG9wZW5JbnRlcm5hbCgpOwogICAgIHZvaWQgbG9hZE9iamVjdFN0b3Jl
cygpOwpAQCAtOTEsOCArOTIsOSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIGFkZE9iamVj
dFN0b3JlVG9NYXAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4pOwog
ICAgIHN0YXRpYyB2b2lkIHJlc2V0VmVyc2lvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsK
IAorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
ICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKLSAgICBpbnQ2NCBt
X2lkOworICAgIGludDY0X3QgbV9pZDsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBt
X3ZlcnNpb247CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAkocmV2
aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIklEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgor
I2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9y
aWdpbi5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJMb2Fk
ZXJQcm94eS5oIgpAQCAtOTQsMTIgKzk1LDEyIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
RmFjdG9yeTo6b3BlbigKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBGcmFtZSogZnJh
bWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKICAgICAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVl
c3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDAp
OwotICAgICAgICBtX2JhY2tlbmQtPm9wZW4obmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+
c2VjdXJpdHlPcmlnaW4oKSwgZnJhbWUsIFN0cmluZygpKTsKKyAgICAgICAgbV9iYWNrZW5kLT5v
cGVuKGNvbnRleHQsIG5hbWUsIHJlcXVlc3QuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2lu
KCksIGZyYW1lLCBTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybiByZXF1ZXN0OwogICAgIH0KICNp
ZiBFTkFCTEUoV09SS0VSUykKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJl
cXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgMCk7Ci0gICAgbV9i
YWNrZW5kLT5vcGVuRnJvbVdvcmtlcihuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1
cml0eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCksIFN0cmlu
ZygpKTsKKyAgICBtX2JhY2tlbmQtPm9wZW5Gcm9tV29ya2VyKGNvbnRleHQsIG5hbWUsIHJlcXVl
c3QuZ2V0KCksIGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIHN0YXRpY19jYXN0PFdvcmtlckNv
bnRleHQqPihjb250ZXh0KSwgU3RyaW5nKCkpOwogICAgIHJldHVybiByZXF1ZXN0OwogI2Vsc2UK
ICAgICByZXR1cm4gMDsKQEAgLTEyNCw3ICsxMjUsNyBAQCBQYXNzUmVmUHRyPElEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0PiBJREJGCiAKICAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJB
bnk6OmNyZWF0ZU51bGwoKSwgIiIpOwogICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3Mg
PSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKLSAgICBtX2JhY2tl
bmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQ
YXRoKCkpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UoY29udGV4dCwgbmFtZSwgcmVx
dWVzdCwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3VtZW50LT5mcmFtZSgpLCBncm91
cFNldHRpbmdzLT5pbmRleGVkREJEYXRhYmFzZVBhdGgoKSk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIK
KyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CkBAIC05OCwxNyArOTksMTcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
OmdldERhdGFiYXNlTgogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGRhdGFiYXNlTmFtZXMucmVs
ZWFzZSgpKTsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5
KQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewotICAgIG9wZW5JbnRlcm5hbChuYW1lLCBjYWxsYmFj
a3MsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKKyAgICBvcGVuSW50ZXJuYWwoY29u
dGV4dCwgbmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CiB9
CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcihjb25zdCBTdHJp
bmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiBzZWN1cml0eU9yaWdpbiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURp
cmVjdG9yeSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxi
YWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdp
biwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKLSAgICBv
cGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9y
eSk7CisgICAgb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlP
cmlnaW4sIGRhdGFEaXJlY3RvcnkpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwg
RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCit2b2lkIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXJlY3RvcnkpCiB7CiAgICAgY29uc3QgU3RyaW5nIHVuaXF1ZUlkZW50aWZp
ZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdpbi5nZXQoKSk7
CiAKQEAgLTEyNyw3ICsxMjgsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRl
RGF0YWJhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3Jl
YXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdl
dCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRl
KGNvbnRleHQsIG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKICAgICBtX2RhdGFiYXNlQmFja2Vu
ZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKICAgICBk
YXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CiB9CkBAIC0xNTQsNyAr
MTU1LDcgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYQogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3Rv
cnkpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBj
YWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCiB7CiAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBzZWN1cml0eU9yaWdpbiA9IHBycFNlY3VyaXR5T3JpZ2luOwogICAgIGNvbnN0IFN0cmluZyB1
bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlP
cmlnaW4uZ2V0KCkpOwpAQCAtMTc0LDcgKzE3NSw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsOjpvcGVuSW50ZXJuYWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOworICAgIFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjcmVhdGUoY29udGV4dCwgbmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOwogICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+KGRhdGFi
YXNlQmFja2VuZC5nZXQoKSkucmVsZWFzZSgpKTsKICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5z
ZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAkocmV2aXNp
b24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBET01TdHJpbmdMaXN0
OwogY2xhc3MgSURCQmFja2luZ1N0b3JlOwogY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsK
IGNsYXNzIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogCiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEltcGwgOiBwdWJsaWMgSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgpAQCAtNTcsMTQgKzU4LDE0IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKTsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
Q2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29y
a2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIG9wZW5G
cm9tV29ya2VyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIElE
QkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0Kiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgp
OwogICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuQmFja2luZ1N0b3JlKFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotICAgIHZvaWQg
b3BlbkludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdm9pZCBvcGVu
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
Q2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIGNvbnN0IFN0cmluZyYgZGF0
YURpcik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKj4gSURCRGF0YWJhc2VCYWNrZW5kTWFwOwogICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcCBt
X2RhdGFiYXNlQmFja2VuZE1hcDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIElEQkRhdGFiYXNl
OwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBXb3JrZXJDb250ZXh0OworY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIApAQCAt
NTUsOSArNTYsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1l
cyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIG9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgb3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJp
bmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
Q2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBXb3JrZXJDb250ZXh0KiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAx
MDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNrZW5kSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE1ICszMiw0NyBAQAogCiAjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCiAKLXZvaWQgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlz
RnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiYsIDA+IHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0
b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSURCS2V5UGF0aEJhY2tl
bmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgMD4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8
UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBmb3IgU2VyaWFsaXplZFNjcmlw
dFZhbHVlLgorICAgIFZlY3RvcjxTdHJpbmc+IGlkYktleVBhdGg7CisgICAgSURCS2V5UGF0aFBh
cnNlRXJyb3IgcGFyc2VFcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwgaWRiS2V5
UGF0aCwgcGFyc2VFcnJvcik7CisgICAgaWYgKHBhcnNlRXJyb3IgIT0gSURCS2V5UGF0aFBhcnNl
RXJyb3JOb25lKQorICAgICAgICByZXR1cm47CisKKyNpZiBVU0UoSlNDKQorICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2Jh
bE9iamVjdC0+Z2xvYmFsRXhlYygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVz
LnNpemUoKTsgaSsrKQorICAgICAgICBrZXlzLmFwcGVuZChXZWJDb3JlOjpjcmVhdGVJREJLZXlG
cm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZXNbaV0sIGlkYktleVBhdGgp
KTsKKyNlbmRpZgogfQogCi1QYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gSURCS2V5
UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoKQorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kIG9uY2UgSlNDIHN1
cHBvcnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS4KKyAgICBWZWN0b3I8
U3RyaW5nPiBpZGJLZXlQYXRoOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIHBhcnNlRXJyb3I7
CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgsIGlkYktleVBhdGgsIHBhcnNlRXJyb3IpOwor
ICAgIGlmIChwYXJzZUVycm9yICE9IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyNpZiBVU0UoSlNDKQorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGNvbnRleHQsIG1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhl
YygpOworICAgIHJldHVybiBXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVl
KGV4ZWMsIGtleSwgdmFsdWUsIGlkYktleVBhdGgpOworI2Vsc2UKICAgICByZXR1cm4gMDsKKyNl
bmRpZgogfQogCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJh
Y2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQ
YXRoQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMz
LDEzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQktleTsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CiAKIGNsYXNz
IElEQktleVBhdGhCYWNrZW5kSW1wbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgY3JlYXRl
SURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIDA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cyk7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVl
KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBj
b25zdCBTdHJpbmcmIGtleVBhdGgpOworICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9t
U2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgMD4mIHZhbHVlcywgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9T
ZXJpYWxpemVkVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5
PiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBjb25zdCBTdHJpbmcmIGtleVBh
dGgpOwogfTsKIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuY3BwCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiTGV2ZWxEQlNsaWNlLmgiCiAjaW5jbHVkZSAiTGV2ZWxE
QlRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsMjEgKzEwMSwyMSBAQCB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVyCiAgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh3aXJlRGF0YSkp
OwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGZldGNoS2V5RnJvbUtleVBhdGgoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQorc3RhdGlj
IFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCkKIHsKICAgICBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
PiB2YWx1ZXM7CiAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CiAgICAgVmVjdG9yPFJlZlB0cjxJ
REJLZXk+ID4ga2V5czsKLSAgICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNG
cm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgodmFsdWVzLCBrZXlQYXRoLCBrZXlzKTsKKyAg
ICBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVl
c0FuZEtleVBhdGgoY29udGV4dCwgdmFsdWVzLCBrZXlQYXRoLCBrZXlzKTsKICAgICBpZiAoa2V5
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIEFTU0VSVChrZXlzLnNpemUoKSA9
PSAxKTsKICAgICByZXR1cm4ga2V5c1swXS5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0S2V5SW50b0tleVBhdGgoUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgpCitzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGluamVjdEtleUludG9LZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQogewotICAgIHJldHVybiBJREJLZXlQ
YXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoa2V5LCB2YWx1
ZSwga2V5UGF0aCk7CisgICAgcmV0dXJuIElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURC
S2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShjb250ZXh0LCBrZXksIHZhbHVlLCBrZXlQYXRoKTsKIH0K
IAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0KFBhc3MKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURf
RVJSOwogfQogCi1QYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
c2VsZWN0S2V5Rm9yUHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlLCBJ
REJLZXkqIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mIHZhbHVlKQorUGFzc1JlZlB0cjxJREJLZXk+IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNlbGVjdEtleUZvclB1dChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwg
SURCS2V5KiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiB2YWx1ZSkKIHsKICAgICBpZiAocHV0TW9kZSA9
PSBDdXJzb3JVcGRhdGUpCiAgICAgICAgIEFTU0VSVChrZXkpOwpAQCAtMTc3LDE0ICsxNzcsMTQg
QEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZAogICAgICAgICBpZiAo
IWhhc0tleVBhdGgpCiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0U3RvcmUtPmdlbkF1dG9JbmNy
ZW1lbnRLZXkoKTsKIAotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hL
ZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CisgICAg
ICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKGNvbnRl
eHQsIHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKICAgICAgICAgaWYgKGtl
eVBhdGhLZXkpIHsKICAgICAgICAgICAgIG9iamVjdFN0b3JlLT5yZXNldEF1dG9JbmNyZW1lbnRL
ZXlDYWNoZSgpOwogICAgICAgICAgICAgcmV0dXJuIGtleVBhdGhLZXk7CiAgICAgICAgIH0KIAog
ICAgICAgICBSZWZQdHI8SURCS2V5PiBhdXRvSW5jS2V5ID0gb2JqZWN0U3RvcmUtPmdlbkF1dG9J
bmNyZW1lbnRLZXkoKTsKLSAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWVBZnRlckluamVjdGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGF1dG9JbmNLZXksIHZhbHVl
LCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWVBZnRlckluamVjdGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGNvbnRl
eHQsIGF1dG9JbmNLZXksIHZhbHVlLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKICAgICAgICAg
aWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UiwgIlRoZSBnZW5lcmF0ZWQga2V5IGNvdWxkIG5vdCBiZSBpbnNlcnRlZCBpbnRvIHRoZSBvYmpl
Y3QgdXNpbmcgdGhlIGtleVBhdGguIikpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTQs
NyArMTk0LDcgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZAogICAg
IH0KIAogICAgIGlmIChoYXNLZXlQYXRoKSB7Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBh
dGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9r
ZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJv
bUtleVBhdGgoY29udGV4dCwgdmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwog
CiAgICAgICAgIGlmICgha2V5UGF0aEtleSkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlIsICJUaGUga2V5IGNvdWxkIG5vdCBiZSBmZXRjaGVkIGZyb20gdGhlIGtleVBhdGguIikpOwpA
QCAtMjE3LDEwICsyMTcsMTAgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFj
a2VuZAogICAgIHJldHVybiBrZXk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBw
dXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJh
bnNhY3Rpb24pCiB7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBw
cnBWYWx1ZTsKLSAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBzZWxlY3RLZXlGb3JQdXQob2JqZWN0
U3RvcmUuZ2V0KCksIHBycEtleS5nZXQoKSwgcHV0TW9kZSwgY2FsbGJhY2tzLmdldCgpLCB2YWx1
ZSk7CisgICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2VsZWN0S2V5Rm9yUHV0KGNvbnRleHQsIG9i
amVjdFN0b3JlLmdldCgpLCBwcnBLZXkuZ2V0KCksIHB1dE1vZGUsIGNhbGxiYWNrcy5nZXQoKSwg
dmFsdWUpOwogICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm47CiAKQEAgLTIzMyw3ICsyMzMs
NyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVyCiAgICAgZm9yIChJ
bmRleE1hcDo6aXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0
ICE9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgY29uc3Qg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+JiBpbmRleCA9IGl0LT5zZWNvbmQ7CiAKLSAgICAg
ICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdl
dCgpLCBpbmRleC0+a2V5UGF0aCgpKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkg
PSBmZXRjaEtleUZyb21LZXlQYXRoKGNvbnRleHQsIHZhbHVlLmdldCgpLCBpbmRleC0+a2V5UGF0
aCgpKTsKICAgICAgICAgaWYgKCFpbmRleEtleSkgewogICAgICAgICAgICAgaW5kZXhLZXlzLmFw
cGVuZChpbmRleEtleS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0zODAs
OCArMzgwLDkgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludAogbmFt
ZXNwYWNlIHsKIGNsYXNzIFBvcHVsYXRlSW5kZXhDYWxsYmFjayA6IHB1YmxpYyBJREJCYWNraW5n
U3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sgewogcHVibGljOgotICAgIFBvcHVsYXRl
SW5kZXhDYWxsYmFjayhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW1wbD4gaW5kZXgpCi0gICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAg
IFBvcHVsYXRlSW5kZXhDYWxsYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJ
REJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCisg
ICAgICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9i
YWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFz
ZUlkKQogICAgICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQogICAgICAgICAs
IG1faW5kZXgoaW5kZXgpCkBAIC0zOTEsNyArMzkyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBjYWxsYmFjayhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllciogcmVjb3JkSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IG9iamVjdFZhbHVlID0gU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSk7Ci0gICAgICAgIFJlZlB0cjxJ
REJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChvYmplY3RWYWx1ZS5nZXQoKSwg
bV9pbmRleC0+a2V5UGF0aCgpKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBm
ZXRjaEtleUZyb21LZXlQYXRoKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgb2JqZWN0VmFsdWUu
Z2V0KCksIG1faW5kZXgtPmtleVBhdGgoKSk7CiAKICAgICAgICAgaWYgKCFpbmRleEtleSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDExLDYgKzQxMiw3IEBAIHB1YmxpYzoKICAgICB9
CiAKIHByaXZhdGU6CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogICAgIElEQkJhY2tpbmdTdG9yZSYgbV9iYWNraW5nU3RvcmU7CiAgICAgaW50
NjRfdCBtX2RhdGFiYXNlSWQ7CiAgICAgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7CkBAIC00MTgs
OSArNDIwLDkgQEAgcHJpdmF0ZToKIH07CiB9CiAKLWJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW1wbD4gaW5kZXgpCitib29sIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnBvcHVs
YXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCQmFja2luZ1N0b3Jl
JiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQogewotICAgIFBvcHVsYXRl
SW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0
b3JlSWQsIGluZGV4KTsKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgY2FsbGJhY2soY29udGV4
dCwgYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleCk7CiAgICAg
aWYgKCFiYWNraW5nU3RvcmUuZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9i
amVjdFN0b3JlSWQsIGNhbGxiYWNrKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVy
biB0cnVlOwpAQCAtNDU5LDcgKzQ2MSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50
ZXJmYWNlPiBJREIKICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCi12b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKK3ZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7CiAgICAgaW50
NjRfdCBpZDsKICAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5k
ZXgob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5u
YW1lKCksIGluZGV4LT5rZXlQYXRoKCksIGluZGV4LT51bmlxdWUoKSwgaW5kZXgtPm11bHRpRW50
cnkoKSwgaWQpKSB7CkBAIC00NjksNyArNDcxLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbgogCiAgICAgaW5kZXgtPnNldElkKGlkKTsKIAotICAgIGlmICghcG9w
dWxhdGVJbmRleCgqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZS0+bV9k
YXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9pZCwgaW5kZXgpKSB7CisgICAgaWYgKCFwb3B1bGF0
ZUluZGV4KGNvbnRleHQsICpvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3Jl
LT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5tX2lkLCBpbmRleCkpIHsKICAgICAgICAgdHJh
bnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAkocmV2
aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwg
dm9pZCBjb3VudChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAK
LSAgICBzdGF0aWMgYm9vbCBwb3B1bGF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZSYsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+KTsKKyAgICBzdGF0aWMgYm9vbCBwb3B1bGF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBJREJCYWNraW5nU3RvcmUmLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPik7CiAKIHByaXZh
dGU6CiAgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpOwpAQCAtODcsNyArODcsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgbG9hZEluZGV4ZXMoKTsKICAgICBQYXNzUmVmUHRyPElEQktleT4gZ2Vu
QXV0b0luY3JlbWVudEtleSgpOwogICAgIHZvaWQgcmVzZXRBdXRvSW5jcmVtZW50S2V5Q2FjaGUo
KSB7IG1fYXV0b0luY3JlbWVudE51bWJlciA9IC0xOyB9Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCS2V5PiBzZWxlY3RLZXlGb3JQdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCosIElEQktl
eSosIFB1dE1vZGUsIElEQkNhbGxiYWNrcyosIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBzZWxlY3RLZXlGb3JQdXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBJREJLZXkqLCBQ
dXRNb2RlLCBJREJDYWxsYmFja3MqLCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYpOwog
CiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAgICAgc3RhdGljIHZvaWQgcHV0SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJ
REJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAJKHJldmlzaW9uIDEw
Mzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEzICszNiwxNCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5z
aWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCitQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBET01TdHJpbmdMaXN0
KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZElt
cGwqIGRhdGFiYXNlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbChvYmplY3RTdG9yZXMsIG1vZGUsIGRhdGFiYXNlKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKGNvbnRleHQsIG9iamVjdFN0b3Jl
cywgbW9kZSwgZGF0YWJhc2UpKTsKIH0KIAotSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2ln
bmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQotICAgIDog
bV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykKK0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKKyAgICA6IG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dChjb250ZXh0KQorICAgICwgbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykK
ICAgICAsIG1fbW9kZShtb2RlKQogICAgICwgbV9zdGF0ZShVbnVzZWQpCiAgICAgLCBtX2RhdGFi
YXNlKGRhdGFiYXNlKQpAQCAtMjE3LDcgKzIxOCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbDo6dGFza1RpbWUKICAgICAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6
OlRhc2s+IHRhc2socXVldWUuZmlyc3QoKS5yZWxlYXNlKCkpOwogICAgICAgICBxdWV1ZS5yZW1v
dmVGaXJzdCgpOwogICAgICAgICBtX3BlbmRpbmdFdmVudHMrKzsKLSAgICAgICAgdGFzay0+cGVy
Zm9ybVRhc2soMCk7CisgICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAkocmV2aXNpb24gMTAzODg5KQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKIAog
Y2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVu
c2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQg
bW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOwogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwoKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpOwpAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBydW4oKTsKIAog
cHJpdmF0ZToKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmluZ0xpc3QqIG9i
amVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCop
OworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbCopOwogCiAgICAgZW51bSBTdGF0ZSB7CiAgICAgICAgIFVudXNlZCwg
Ly8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KQEAgLTk0LDYgKzk0LDggQEAgcHJpdmF0ZToK
ICAgICBpbnQgbV9wZW5kaW5nRXZlbnRzOwogCiAgICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5k
SW1wbCo+IG1fb3BlbkN1cnNvcnM7CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5o
CShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgog
CiAgICAgLy8gRXZlbnRUYXJnZXQKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgaW50
ZXJmYWNlTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Qq
IHRvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QoKSB7IHJldHVybiB0aGlzOyB9CiAKICAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGJsb2NrZWQpOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAkocmV2aXNp
b24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAgbW9kdWxlIHN0b3JhZ2Ug
ewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RSwKKyAgICAgICAgR2VuZXJhdGVUb0pTLAogICAgICAgICBFdmVudFRhcmdldAogICAgIF0gSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QgOiBJREJSZXF1ZXN0IHsKICAgICAgICAgYXR0cmlidXRlIEV2
ZW50TGlzdGVuZXIgb25ibG9ja2VkOwo=
</data>
<flag name="commit-queue"
          id="121187"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120859</attachid>
            <date>2012-01-01 20:39:15 -0800</date>
            <delta_ts>2012-01-01 22:30:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>indexeddb20120102.patch</filename>
            <type>text/plain</type>
            <size>67924</size>
            <attacher name="Donggwan Kim">donggwan.kim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBACisyMDEyLTAxLTAxICBEb25nLUd3
YW4gS2ltICA8ZG9uZ2d3YW4ua2ltQHNhbXN1bmcuY29tPgorCisgICAgICAgIEltcGxlbWVudCBK
U0MgZmVhdHVyZXMgcmVxdWlyZWQgZm9yIEluZGV4ZWREQgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxMTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFVzZUpTQy5jbWFrZToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXROdGhWYWx1ZU9uS2V5
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXpl
ZFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvT3B0aW9uc09iamVj
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6T3B0aW9uc09i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAo
V2ViQ29yZTo6T3B0aW9uc09iamVjdDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNP
YmplY3Q6OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpP
cHRpb25zT2JqZWN0OjpnZXRLZXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL09wdGlvbnNPYmpl
Y3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnRvV2lyZVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6
CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChUeXBlQ2FuRmFp
bENvbnZlcnNpb24pOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFs
KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRo
QmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJ
bnRvU2VyaWFsaXplZFZhbHVlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVBhdGhCYWNrZW5k
SW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6Cisg
ICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZldGNoS2V5RnJvbUtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6aW5qZWN0
S2V5SW50b0tleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2VsZWN0S2V5Rm9yUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnB1dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdDo6dG9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6CisKIDIwMTItMDEtMDEgIEFuZHJlYXMg
S2xpbmcgIDxhd2Vzb21la2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlIENvbGxlY3Rp
b25DYWNoZSBpbnRvIEhUTUxDb2xsZWN0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xMzUxLDIyICsxMzUxLDM0IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBz
dG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAogICAgIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNw
cAogICAgIHN0b3JhZ2UvSURCQW55LmNwcAotICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCi0g
ICAgc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAogICAgIHN0b3JhZ2UvSURCQ3Vy
c29yLmNwcAogICAgIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisgICAgc3RvcmFn
ZS9JREJDdXJzb3JXaXRoVmFsdWUuY3BwCisgICAgc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKKyAg
ICBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisgICAgc3RvcmFnZS9JREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGwuY3BwCiAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5j
cHAKICAgICBzdG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKKyAgICBzdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCisgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAKKyAg
ICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKICAgICBzdG9yYWdlL0lEQkluZGV4
LmNwcAogICAgIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKICAgICBzdG9yYWdlL0lE
QktleS5jcHAKKyAgICBzdG9yYWdlL0lEQktleVBhdGguY3BwCisgICAgc3RvcmFnZS9JREJLZXlQ
YXRoQmFja2VuZEltcGwuY3BwCiAgICAgc3RvcmFnZS9JREJLZXlSYW5nZS5jcHAKLSAgICBzdG9y
YWdlL0lEQlJlcXVlc3QuY3BwCisgICAgc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNw
cAorICAgIHN0b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAKICAgICBzdG9yYWdlL0lEQk9iamVj
dFN0b3JlLmNwcAogICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKLSAg
ICBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwCi0gICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5jcHAKLSAgICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKyAgICBz
dG9yYWdlL0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCisgICAgc3RvcmFnZS9JREJS
ZXF1ZXN0LmNwcAorICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCisgICAgc3RvcmFnZS9J
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAKKyAgICBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKKyAg
ICBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAogICAgIHN0b3JhZ2UvTG9jYWxT
dG9yYWdlVGFzay5jcHAKICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKICAgICBz
dG9yYWdlL09yaWdpblF1b3RhTWFuYWdlci5jcHAKQEAgLTE0OTYsNiArMTUwOCw3IEBAIElGIChF
TkFCTEVfSU5ERVhFRF9EQVRBQkFTRSkKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lETF9GSUxF
UwogICAgICAgICBzdG9yYWdlL0lEQkFueS5pZGwKICAgICAgICAgc3RvcmFnZS9JREJDdXJzb3Iu
aWRsCisgICAgICAgIHN0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAogICAgICAgICBzdG9y
YWdlL0lEQkRhdGFiYXNlRXJyb3IuaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNl
cHRpb24uaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCkBAIC0xNTA2LDYgKzE1
MTksOCBAQCBJRiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAgICAgIHN0b3JhZ2UvSURC
T2JqZWN0U3RvcmUuaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCUmVxdWVzdC5pZGwKICAgICAgICAg
c3RvcmFnZS9JREJUcmFuc2FjdGlvbi5pZGwKKyAgICAgICAgc3RvcmFnZS9JREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaWRsCisgICAgICAgIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRs
CiAgICAgKQogRU5ESUYgKCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQkocmV2aXNpb24gMTAzODg5
KQorKysgU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjks
NiArMTI5LDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMv
SlNYUGF0aFJlc3VsdEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JD
dXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKKyAgICBi
aW5kaW5ncy9qcy9PcHRpb25zT2JqZWN0LmNwcAogICAgIGJpbmRpbmdzL2pzL1BhZ2VTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKICAgICBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCiAgICAg
YmluZGluZ3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9u
IDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwyMSArMzAsNzYgQEAKICNpbmNsdWRlICJJREJC
aW5kaW5nVXRpbGl0aWVzLmgiCiAKICNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmcuaCIKKyNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorCit1c2luZyBu
YW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SURCS2V5
PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZSgpOwotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICBpZiAodmFsdWUuaXNOdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHZhbHVlLnRvTnVtYmVy
KGV4ZWMpKTsKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlKHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZGF0ZXMuCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0
cmluZyh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAodmFs
dWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlRGF0ZSh2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkpOwogICAgIHJldHVybiAwOwog
fQogCitKU1ZhbHVlIGdldE50aFZhbHVlT25LZXlQYXRoKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywg
c2l6ZV90IGluZGV4KQoreworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlOworICAgIEpTT2JqZWN0
KiBvYmplY3QgPSByb290VmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgUHJvcGVydHlTbG90IHNs
b3Qob2JqZWN0KTsKKyAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7CisgICAgICAgIElkZW50
aWZpZXIgcHJvcGVydHlOYW1lID0gSWRlbnRpZmllcihleGVjLCBrZXlQYXRoRWxlbWVudHNbaV0u
aW1wbCgpKTsKKyAgICAgICAgaWYgKCFvYmplY3QtPmdldE93blByb3BlcnR5U2xvdChvYmplY3Qs
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgICAgICBjdXJyZW50VmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsKK30KKworUGFzc1Jl
ZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFs
dWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoKQoreworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUtPmRlc2VyaWFs
aXplKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNWYWx1ZSBqc0tl
eSA9IGdldE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFsdWUsIGtleVBhdGgsIGtleVBhdGgu
c2l6ZSgpKTsKKyAgICBpZiAoanNLZXkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIGpzS2V5KTsKK30KKwor
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxp
emVkVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBr
ZXlQYXRoKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KCFrZXlQYXRoLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZS0+ZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KTsKKyAgICBKU1ZhbHVlIHBhcmVudCA9IGdldE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFs
dWUsIGtleVBhdGgsIGtleVBhdGguc2l6ZSgpIC0gMSk7CisgICAgaWYgKHBhcmVudC5pc1VuZGVm
aW5lZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghcGFyZW50LmlzT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IHBhcmVudC50b09i
amVjdChleGVjKTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElk
ZW50aWZpZXIoZXhlYywga2V5UGF0aC5sYXN0KCkuaW1wbCgpKSwgcGFyZW50KTsKKworICAgIHJl
dHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBqc1ZhbHVlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5oCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiU2NyaXB0VmFsdWUu
aCIgCisjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw2ICszNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIElEQktleTsKIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21W
YWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CitQYXNzUmVmUHRyPElEQktleT4g
Y3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoSlNDOjpFeGVjU3RhdGUq
LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sICBjb25zdCBWZWN0b3I8U3RyaW5n
LCAwPiYpOworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUlu
dG9TZXJpYWxpemVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4sIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgVmVjdG9yPFN0cmluZywgMD4m
KTsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlD
dXN0b20uY3BwCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkFueUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxNCBAQAog
CiAjaW5jbHVkZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAi
SURCQ3Vyc29yV2l0aFZhbHVlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJJREJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSURCSW5kZXguaCIKICNpbmNsdWRlICJJREJLZXku
aCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIkpTSURCQ3Vyc29yLmgi
CisjaW5jbHVkZSAiSlNJREJDdXJzb3JXaXRoVmFsdWUuaCIKICNpbmNsdWRlICJKU0lEQkRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiSlNJREJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSlNJREJJbmRleC5o
IgpAQCAtNjMsNiArNjUsOCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICBjYXNlIElEQkFueTo6SURCQ3Vyc29y
VHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlk
YkN1cnNvcigpKTsKKyAgICBjYXNlIElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYkN1cnNvcldp
dGhWYWx1ZSgpKTsKICAgICBjYXNlIElEQkFueTo6SURCRGF0YWJhc2VUeXBlOgogICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRiRGF0YWJhc2UoKSk7CiAg
ICAgY2FzZSBJREJBbnk6OklEQkZhY3RvcnlUeXBlOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTAzODg5KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw4IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmEKICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGtleS0+bnVtYmVyKCkpOwogICAgIGNhc2UgSURC
S2V5OjpTdHJpbmdUeXBlOgogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywga2V5LT5zdHJp
bmcoKSk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICBjYXNlIElEQktleTo6
RGF0ZVR5cGU6CisgICAgICAgIHJldHVybiBqc0RhdGVPck51bGwoZXhlYywga2V5LT5kYXRlKCkp
OwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYXJyYXlzLgogICAgIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9PcHRpb25zT2JqZWN0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKKworI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNNZXNz
YWdlUG9ydEN1c3RvbS5oIgorI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgorI2luY2x1ZGUgIkpTVHJh
Y2tDdXN0b20uaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJKU1RleHRU
cmFjay5oIgorI2luY2x1ZGUgIlRyYWNrQmFzZS5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworT3B0aW9uc09iamVjdDo6T3B0aW9uc09i
amVjdCgpCisgICAgOiBtX2V4ZWMoMCkKK3sKK30KKworT3B0aW9uc09iamVjdDo6T3B0aW9uc09i
amVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNWYWx1ZSYgb3B0aW9ucykKKyAgICA6
IG1fZXhlYyhleGVjKQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCit7Cit9CisKK09wdGlvbnNP
YmplY3Q6On5PcHRpb25zT2JqZWN0KCkKK3sKK30KKworT3B0aW9uc09iamVjdCYgT3B0aW9uc09i
amVjdDo6b3BlcmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmIG9wdGlvbnNPYmplY3QpCit7Cisg
ICAgbV9leGVjID0gb3B0aW9uc09iamVjdC5tX2V4ZWM7CisgICAgbV9vcHRpb25zID0gb3B0aW9u
c09iamVjdC5tX29wdGlvbnM7CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIE9wdGlvbnNP
YmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0Cit7CisgICAg
SlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0ganNWYWx1ZS50b0Jvb2xlYW4obV9leGVjKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3Ry
aW5nJiBrZXksIGludDMyX3QmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsK
KyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB2YWx1ZSA9IGpzVmFsdWUudG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiB2
YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5
LCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVl
LnRvTnVtYmVyKG1fZXhlYyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09i
amVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAg
IEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTdHJpbmcmIHN0cmluZyh1c3RyaW5nVG9TdHJp
bmcoanNWYWx1ZS50b1N0cmluZyhtX2V4ZWMpKSk7CisgICAgdmFsdWUgPSBzdHJpbmc7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYg
a2V5LCBTY3JpcHRWYWx1ZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOwor
ICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHZhbHVlID0gU2NyaXB0VmFsdWUobV9leGVjLT5nbG9iYWxEYXRhKCksIGpzVmFsdWUpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJp
bmcmIGtleSwgdW5zaWduZWQgc2hvcnQmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNW
YWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB2YWx1ZSA9IGpzVmFsdWUudG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgdW5z
aWduZWQmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdl
dEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9
IGpzVmFsdWUudG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9w
dGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgdW5zaWduZWQgbG9uZyBsb25nJiB2
YWx1ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5
LCBqc1ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVl
LnRvTnVtYmVyKG1fZXhlYyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09i
amVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8RE9NV2luZG93PiYgdmFsdWUpIGNv
bnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gdG9ET01XaW5kb3coanNW
YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNv
bnN0IFN0cmluZyYga2V5LCBSZWZQdHI8U3RvcmFnZT4mIHZhbHVlKSBjb25zdAoreworICAgIEpT
VmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IHRvU3RvcmFnZShqc1ZhbHVlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXks
IE1lc3NhZ2VQb3J0QXJyYXkmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsK
KyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmaWxsTWVzc2FnZVBvcnRBcnJheShtX2V4ZWMsIGpzVmFsdWUsIHZhbHVlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2Jvb2wgT3B0aW9uc09i
amVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8VHJhY2tCYXNlPiYgdmFsdWUpIGNv
bnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gdG9UcmFjayhqc1ZhbHVl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIE9wdGlvbnNPYmplY3Q6Omdl
dFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1
ZSkgY29uc3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBq
c1ZhbHVlKSB8fCBqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHZh
bHVlID0gU3RyaW5nKCk7CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5n
KHVzdHJpbmdUb1N0cmluZyhqc1ZhbHVlLnRvU3RyaW5nKG1fZXhlYykpKTsKKyAgICAgICAgdmFs
dWUgPSBzdHJpbmc7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9u
c09iamVjdDo6Z2V0S2V5KGNvbnN0IFN0cmluZyYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkgY29uc3QK
K3sKKyAgICBpZiAoIW1fZXhlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1f
b3B0aW9ucy5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBKU09iamVjdCogb3B0aW9ucyA9IG1fb3B0aW9ucy50b09iamVjdChtX2V4ZWMpOworICAgIGlm
ICghb3B0aW9ucykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gb3B0aW9ucy0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIGtleS5pbXBsKCkpKTsK
KyAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVj
dXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9PcHRpb25z
T2JqZWN0LmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L09wdGlvbnNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNTAgQEAKICNpZm5k
ZWYgT3B0aW9uc09iamVjdF9oCiAjZGVmaW5lIE9wdGlvbnNPYmplY3RfaAogCi0vLyBGSVhNRTog
SW1wbGVtZW50LgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNW
YWx1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNz
IFN0b3JhZ2U7CitjbGFzcyBUcmFja0Jhc2U7CisKK2NsYXNzIE9wdGlvbnNPYmplY3QgeworcHVi
bGljOgorICAgIE9wdGlvbnNPYmplY3QoKTsKKyAgICBPcHRpb25zT2JqZWN0KEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpKU1ZhbHVlJiBvcHRpb25zKTsKKworICAgIE9wdGlvbnNPYmplY3Qm
IG9wZXJhdG9yPShjb25zdCBPcHRpb25zT2JqZWN0Jik7CisKKyAgICBib29sIGdldChjb25zdCBT
dHJpbmcmLCBib29sJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgaW50MzJf
dCYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIGRvdWJsZSYpIGNvbnN0Owor
ICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFN0cmluZyYpIGNvbnN0OworICAgIGJvb2wgZ2V0
KGNvbnN0IFN0cmluZyYsIFNjcmlwdFZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3Qg
U3RyaW5nJiwgdW5zaWduZWQgc2hvcnQmKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBTdHJp
bmcmLCB1bnNpZ25lZCYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkIGxvbmcgbG9uZyYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0
cjxET01XaW5kb3c+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRy
PFN0b3JhZ2U+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBv
cnRBcnJheSYpIGNvbnN0OworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBib29sIGdldChj
b25zdCBTdHJpbmcmLCBSZWZQdHI8VHJhY2tCYXNlPiYpIGNvbnN0OworI2VuZGlmCisKKyAgICBi
b29sIGdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBj
b25zdDsKKworICAgIH5PcHRpb25zT2JqZWN0KCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBnZXRL
ZXkoY29uc3QgU3RyaW5nJiBrZXksIEpTQzo6SlNWYWx1ZSYpIGNvbnN0OworCisgICAgSlNDOjpF
eGVjU3RhdGUqIG1fZXhlYzsKKyAgICBKU0M6OkpTVmFsdWUgbV9vcHRpb25zOworfTsKKworfSAv
LyBXZWJDb3JlCiAKICNlbmRpZiAvLyBPcHRpb25zT2JqZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2
aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBlbnVtIFNlcmlh
bGl6YXRpb25UYWcgewogICAgIFJlZ0V4cFRhZyA9IDE4LAogICAgIE9iamVjdFJlZmVyZW5jZVRh
ZyA9IDE5LAogICAgIE1lc3NhZ2VQb3J0UmVmZXJlbmNlVGFnID0gMjAsCisgICAgTnVtYmVyVGFn
ID0gMjEsCisgICAgUGFkZGluZ1RhZyA9IDIyLAogICAgIEVycm9yVGFnID0gMjU1CiB9OwogCkBA
IC0yNzEsNyArMjczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICB3cml0ZUxpdHRs
ZUVuZGlhbjx1aW50OF90PihvdXQsIFN0cmluZ1RhZyk7CiAgICAgICAgIHdyaXRlTGl0dGxlRW5k
aWFuKG91dCwgcy5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiB3cml0ZUxpdHRsZUVuZGlhbihv
dXQsIHMuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOworICAgICAgICBib29sIHJl
dCA9IHdyaXRlTGl0dGxlRW5kaWFuKG91dCwgcy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgcy5sZW5n
dGgoKSk7CisKKyAgICAgICAgaWYgKG91dC5zaXplKCkgJSAyKQorICAgICAgICAgICAgd3JpdGVM
aXR0bGVFbmRpYW48dWludDhfdD4ob3V0LCBQYWRkaW5nVGFnKTsKKworICAgICAgICByZXR1cm4g
cmV0OwogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVuZGVmaW5lZChWZWN0b3I8
dWludDhfdD4mIG91dCkKQEAgLTI4Niw2ICsyOTMsMTggQEAgcHVibGljOgogICAgICAgICB3cml0
ZUxpdHRsZUVuZGlhbjx1aW50OF90PihvdXQsIHZhbHVlID8gVHJ1ZVRhZyA6IEZhbHNlVGFnKTsK
ICAgICB9CiAKKyAgICBzdGF0aWMgdm9pZCBzZXJpYWxpemVOdW1iZXIoZG91YmxlIHZhbHVlLCBW
ZWN0b3I8dWludDhfdD4mIG91dCkKKyAgICB7CisgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKG91
dCwgQ3VycmVudFZlcnNpb24pOworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbjx1aW50OF90Pihv
dXQsIE51bWJlclRhZyk7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIGRvdWJsZSBkOwor
ICAgICAgICAgICAgaW50NjRfdCBpOworICAgICAgICB9IHU7CisgICAgICAgIHUuZCA9IHZhbHVl
OworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbihvdXQsIHUuaSk7CisgICAgfQorCiBwcml2YXRl
OgogICAgIENsb25lU2VyaWFsaXplcihFeGVjU3RhdGUqIGV4ZWMsIE1lc3NhZ2VQb3J0QXJyYXkq
IG1lc3NhZ2VQb3J0cywgVmVjdG9yPHVpbnQ4X3Q+JiBvdXQpCiAgICAgICAgIDogQ2xvbmVCYXNl
KGV4ZWMpCkBAIC03OTYsMTEgKzgxNSwyNSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9u
ZVNlcmlhbGl6ZXI6CiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm4gVW5zcGVjaWZp
ZWRFcnJvcjsKIAorICAgIGlmIChtX2J1ZmZlci5zaXplKCkgJSAyKQorICAgICAgICB3cml0ZShQ
YWRkaW5nVGFnKTsKKwogICAgIHJldHVybiBTdWNjZXNzZnVsbHlDb21wbGV0ZWQ7CiB9CiAKIGNs
YXNzIENsb25lRGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMg
U3RyaW5nIHRvV2lyZVN0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICB7
CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJ1ZmZlci5iZWdpbigpOworICAgICAgICBj
b25zdCB1aW50OF90KiBlbmQgPSBidWZmZXIuZW5kKCk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90
IGxlbmd0aCA9IGJ1ZmZlci5zaXplKCkgLyBzaXplb2YoVUNoYXIpOworICAgICAgICBVU3RyaW5n
IHN0cjsKKyAgICAgICAgaWYgKCFyZWFkU3RyaW5nKHB0ciwgZW5kLCBzdHIsIGxlbmd0aCkpCisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoc3RyLmlt
cGwoKSk7CisgICAgfQorCiAgICAgc3RhdGljIFN0cmluZyBkZXNlcmlhbGl6ZVN0cmluZyhjb25z
dCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKICAgICB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3Qq
IHB0ciA9IGJ1ZmZlci5iZWdpbigpOwpAQCAtMTQxNiw2ICsxNDQ5LDE0IEBAIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY29uc3Qg
U3RyaW5nJiBzdHJpbmcpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBpZiAo
IXdyaXRlTGl0dGxlRW5kaWFuKGJ1ZmZlciwgc3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCBz
dHJpbmcubGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKK30KKwogUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQ29udGV4
dFJlZiBvcmlnaW5Db250ZXh0LCBKU1ZhbHVlUmVmIGFwaVZhbHVlLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdl
UG9ydEFycmF5KiBtZXNzYWdlUG9ydHMsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKQEAgLTE0
NDQsNiArMTQ4NSwxMSBAQCBTdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1N0cmluZygp
CiAgICAgcmV0dXJuIENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyhtX2RhdGEp
OwogfQogCitTdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJpbmcoKQorewor
ICAgIHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6dG9XaXJlU3RyaW5nKG1fZGF0YSk7Cit9CisK
IEpTVmFsdWUgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgU2Vy
aWFsaXphdGlvbkVycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCiB7CkBAIC0xNDk0LDYgKzE1NDAs
MTMgQEAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbAogICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKGJ1ZmZlcikpOwogfQogCitQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1i
ZXJWYWx1ZShkb3VibGUgdmFsdWUpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAg
ICBDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZU51bWJlcih2YWx1ZSwgYnVmZmVyKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKK30KKwog
dm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om1heWJlVGhyb3dFeGNlcHRpb25JZlNlcmlhbGl6
YXRpb25GYWlsZWQoRXhlY1N0YXRlKiBleGVjLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBjb2Rl
KQogewogICAgIGlmIChjb2RlID09IFN1Y2Nlc3NmdWxseUNvbXBsZXRlZCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCShy
ZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIE1lc3NhZ2VQb3J0OwogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1l
c3NhZ2VQb3J0PiwgMT4gTWVzc2FnZVBvcnRBcnJheTsKLSAKKwogZW51bSBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZSB7CiAgICAgU3VjY2Vzc2Z1bGx5Q29tcGxldGVkLAogICAgIFN0YWNrT3ZlcmZs
b3dFcnJvciwKQEAgLTQ5LDE4ICs0OSwxOSBAQCBlbnVtIFNlcmlhbGl6YXRpb25SZXR1cm5Db2Rl
IHsKICAgICBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yLAogICAgIFVuc3BlY2lmaWVkRXJyb3IKIH07
Ci0gICAgCisKIGVudW0gU2VyaWFsaXphdGlvbkVycm9yTW9kZSB7IE5vblRocm93aW5nLCBUaHJv
d2luZyB9OwogCiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4geworY2xhc3Mg
U2VyaWFsaXplZFNjcmlwdFZhbHVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBN
ZXNzYWdlUG9ydEFycmF5KiwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgTWVzc2FnZVBvcnRBcnJheSogPSAwLCBTZXJpYWxpemF0
aW9uRXJyb3JNb2RlID0gVGhyb3dpbmcpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgTWVzc2FnZVBv
cnRBcnJheSosICBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmUoY29uc3QgU3RyaW5nJik7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBhZG9wdChWZWN0
b3I8dWludDhfdD4mIGJ1ZmZlcikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2VyaWFsaXplZFNjcmlwdFZhbHVlKGJ1ZmZlcikpOwpAQCAtNzAsMTAgKzcxLDEyIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBudWxsVmFsdWUoKTsKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHVuZGVmaW5lZFZhbHVlKCk7
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBib29sZWFuVmFs
dWUoYm9vbCB2YWx1ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBudW1iZXJWYWx1ZShkb3VibGUgdmFsdWUpOwogCi0gICAgU3RyaW5nIHRvU3RyaW5nKCk7
Ci0gICAgCi0gICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIE1lc3NhZ2VQb3J0QXJyYXkqLCBTZXJpYWxpemF0aW9uRXJyb3JN
b2RlID0gVGhyb3dpbmcpOworICAgIFN0cmluZyB0b1N0cmluZygpOyAvLyBSZXR1cm4gc3RyaW5n
IHZhbHVlIG9mIFN0cmluZ1RhZyBmcm9tIFdpcmVGb3JtYXQKKyAgICBTdHJpbmcgdG9XaXJlU3Ry
aW5nKCk7IC8vIFJldHVybiBXaXJlRm9ybWF0IGFzIHN0cmluZyB2YWx1ZQorCisgICAgSlNDOjpK
U1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IE1lc3NhZ2VQb3J0QXJyYXkqID0gMCwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5n
KTsKICAgICBKU1ZhbHVlUmVmIGRlc2VyaWFsaXplKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uLCBNZXNzYWdlUG9ydEFycmF5Kik7CiAgICAgSlNWYWx1ZVJlZiBkZXNlcmlhbGl6
ZShKU0NvbnRleHRSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKQEAgLTg0LDcgKzg3LDcg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBtYXliZVRocm93RXhjZXB0aW9u
SWZTZXJpYWxpemF0aW9uRmFpbGVkKEpTQzo6RXhlY1N0YXRlKiwgU2VyaWFsaXphdGlvblJldHVy
bkNvZGUpOwogICAgIHN0YXRpYyBib29sIHNlcmlhbGl6YXRpb25EaWRDb21wbGV0ZVN1Y2Nlc3Nm
dWxseShTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSk7Ci0gICAgCisKICAgICBTZXJpYWxpemVkU2Ny
aXB0VmFsdWUoVmVjdG9yPHVuc2lnbmVkIGNoYXI+Jik7CiAgICAgVmVjdG9yPHVuc2lnbmVkIGNo
YXI+IG1fZGF0YTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTIxMjksMTEgKzIxMjksMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlz
ID0gdG8ke2NsYXNzTmFtZX0oZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVj
KSk7XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNh
c3RlZFRoaXMpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxz
aWYgKCEkZnVuY3Rpb24tPmlzU3RhdGljKSB7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIG15ICRraW5kID0gJGZ1bmN0aW9uLT5pc1N0YXRpYyA/ICJDb25zdHJ1Y3RvciIg
OiAiIjsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRo
aXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCYke2NsYXNzTmFt
ZX06OnNfaW5mbykpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmJHtjbGFzc05hbWV9JHtraW5kfTo6c19pbmZvKSlc
biIpOwogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDwkY2xhc3NO
YW1lKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0ke2tpbmR9KiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8JHtjbGFzc05hbWV9JHtraW5kfSo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpO1xuIik7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJiR7Y2xhc3NOYW1lfTo6c19pbmZvKTtc
biIpIHVubGVzcyAoJGZ1bmN0aW9uLT5pc1N0YXRpYyk7CkBAIC0yMTkwLDM0ICsyMTkxLDM0IEBA
IHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiI2VuZGlmXG5cbiIpIGlmICRjb25kaXRpb25hbDsKICAgICAgICAgfQorICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmICgkbmVlZHNNYXJrQ2hpbGRyZW4gJiYgISRkYXRhTm9kZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9KSB7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAie1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAk
e2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4i
KTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7
XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVCh0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpO1xu
Iik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpO1xuIik7Ci0gICAgICAgICAgICBpZiAoJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifSkgewotICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPmltcGwoKS0+dmlzaXRKU0V2ZW50
TGlzdGVuZXJzKHZpc2l0b3IpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
JG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAoQHsk
ZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRhdHRyaWJ1
dGUgPSAkXzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+bV8iIC4g
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIilcbiIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tXyIgLiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKTtcbiIpOwotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgaWYgKCRuZWVkc01hcmtDaGlsZHJlbiAmJiAhJGRhdGFOb2Rl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pIHsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAie1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NO
YW1lfSogdGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsICZzX2luZm8pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7XG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTtcbiIpOworICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZl
bnRUYXJnZXQifSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09i
amVjdC0+aW1wbCgpLT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7XG4iKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoJG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSB7CisgICAgICAgICAg
ICBmb3JlYWNoIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICBt
eSAkYXR0cmlidXRlID0gJF87CisgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7CisgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5tXyIg
LiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKVxuIik7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV8iIC4gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIik7XG4iKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
In1cblxuIik7CiAgICAgICAgIH0KLSAgICAgICAgIyBDYWNoZWQgYXR0cmlidXRlcyBhcmUgaW5k
ZWVkIGFsbG93ZWQgd2hlbiB0aGVyZSBpcyBhIGN1c3RvbSBtYXJrL3Zpc2l0Q2hpbGRyZW4gZnVu
Y3Rpb24uCi0gICAgICAgICMgVGhlIGN1c3RvbSBmdW5jdGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBh
Y2NvdW50IGZvciB0aGUgY2FjaGVkIGF0dHJpYnV0ZS4KLSAgICAgICAgIyBVbmNvbW1lbnQgdGhl
IGJlbG93IGxpbmUgdG8gdGVtcG9yYXJpbHkgZW5mb3JjZSBnZW5lcmF0ZWQgbWFyayBmdW5jdGlv
bnMgd2hlbiBjYWNoZWQgYXR0cmlidXRlcyBhcmUgcHJlc2VudC4KLSAgICAgICAgIyBkaWUgIkNh
bid0IGdlbmVyYXRlIGJpbmRpbmcgZm9yIGNsYXNzIHdpdGggY2FjaGVkIGF0dHJpYnV0ZSBhbmQg
Y3VzdG9tIG1hcmsuIiBpZiAoKCRudW1DYWNoZWRBdHRyaWJ1dGVzID4gMCkgYW5kICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSkpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQorICAgICMgQ2FjaGVkIGF0dHJp
YnV0ZXMgYXJlIGluZGVlZCBhbGxvd2VkIHdoZW4gdGhlcmUgaXMgYSBjdXN0b20gbWFyay92aXNp
dENoaWxkcmVuIGZ1bmN0aW9uLgorICAgICMgVGhlIGN1c3RvbSBmdW5jdGlvbiBtdXN0IG1ha2Ug
c3VyZSB0byBhY2NvdW50IGZvciB0aGUgY2FjaGVkIGF0dHJpYnV0ZS4KKyAgICAjIFVuY29tbWVu
dCB0aGUgYmVsb3cgbGluZSB0byB0ZW1wb3JhcmlseSBlbmZvcmNlIGdlbmVyYXRlZCBtYXJrIGZ1
bmN0aW9ucyB3aGVuIGNhY2hlZCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LgorICAgICMgZGllICJD
YW4ndCBnZW5lcmF0ZSBiaW5kaW5nIGZvciBjbGFzcyB3aXRoIGNhY2hlZCBhdHRyaWJ1dGUgYW5k
IGN1c3RvbSBtYXJrLiIgaWYgKCgkbnVtQ2FjaGVkQXR0cmlidXRlcyA+IDApIGFuZCAoJGRhdGFO
b2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pKTsKIAogICAg
IGlmICgkbnVtQ29uc3RhbnRzID4gMCkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8v
IENvbnN0YW50IGdldHRlcnNcblxuIik7CkBAIC0yNTQyLDkgKzI1NDMsMTYgQEAgc3ViIEdlbmVy
YXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAi
ICAgIH1cbiIpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0
eXBlIGNvbnZlcnNpb24gc3VjY2VlZGVkLgotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOwotICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpO1xuIik7CisgICAgICAgICAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0
ZXIpKSB7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEkbmFt
ZSkge1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIH1cbiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAjIENoZWNr
IGlmIHRoZSB0eXBlIGNvbnZlcnNpb24gc3VjY2VlZGVkLgorICAgICAgICAgICAgICAgIHB1c2go
QCRvdXRwdXRBcnJheSwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAg
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5k
IG5vdCAkaW1wbENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIGlmICghJG5hbWUpIHtcbiIpOwpAQCAtMjgwNCw2ICsyODEyLDcg
QEAgbXkgJW5hdGl2ZVR5cGUgPSAoCiAgICAgIkRPTVN0cmluZ1tdIiA9PiAiRE9NU3RyaW5nTGlz
dCoiLAogICAgICJET01PYmplY3QiID0+ICJTY3JpcHRWYWx1ZSIsCiAgICAgIk5vZGVGaWx0ZXIi
ID0+ICJSZWZQdHI8Tm9kZUZpbHRlcj4iLAorICAgICJPcHRpb25zT2JqZWN0IiA9PiAiT3B0aW9u
c09iamVjdCIsCiAgICAgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgPT4gIlJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IiwKICAgICAiSURCS2V5IiA9PiAiUmVmUHRyPElEQktleT4iLAogICAg
ICJib29sZWFuIiA9PiAiYm9vbCIsCkBAIC0yODg0LDYgKzI4OTMsMTcgQEAgc3ViIElzQXJyYXlU
eXBlCiAgICAgcmV0dXJuICR0eXBlID1+IG0vXFtcXSQvOwogfQogCitzdWIgVHlwZUNhbkZhaWxD
b252ZXJzaW9uCit7CisgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworCisgICAgbXkgJHR5cGUg
PSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICBy
ZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCS2V5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
U2VyaWFsaXplZFNjcmlwdFZhbHVlIjsKKyAgICByZXR1cm4gMDsKK30KKwogc3ViIEpTVmFsdWVU
b05hdGl2ZQogewogICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKQEAgLTI5MjIsNiArMjk0Miwx
MSBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiTWVkaWFRdWVyeUxpc3RM
aXN0ZW5lcjo6Y3JlYXRlKFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgIiAuICR2YWx1
ZSAuIikpIjsKICAgICB9CiAKKyAgICBpZiAoJHR5cGUgZXEgIk9wdGlvbnNPYmplY3QiIG9yICR0
eXBlIGVxICJhbnkiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ik9wdGlvbnNPYmplY3QuaCJ9
ID0gMTsKKyAgICAgICAgcmV0dXJuICJPcHRpb25zT2JqZWN0KGV4ZWMsICR2YWx1ZSkiOworICAg
IH0KKwogICAgIGlmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBl
cSAiYW55IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKGV4ZWMsICR2YWx1ZSkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw4IEBACiBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwotICAg
ICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UsCisgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gSURCQ3Vyc29yV2l0
aFZhbHVlIDogSURCQ3Vyc29yIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2
YWx1ZTsKICAgICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJh
Y2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2lu
Y2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTkzLDggKzk0LDkgQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CiB9OwogCi1J
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IqIGNvb3JkaW5hdG9yLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNv
bnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tp
bmdTdG9yZSkKK0lEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJC
YWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29v
cmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1
bmlxdWVJZGVudGlmaWVyKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQp
CisgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAgICAgLCBtX2lkKEludmFsaWRJ
ZCkKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV92ZXJzaW9uKCIiKQpAQCAtMjMwLDcgKzIz
Miw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbigKIAogICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3Jl
YXRlKCk7CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhp
czsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
biA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9yZU5hbWVzLmdl
dCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRoaXMpOworICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbDo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgb2JqZWN0U3Rv
cmVOYW1lcy5nZXQoKSwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCB0aGlzKTsKICAg
ICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwsIGRhdGFiYXNlLCB2ZXJzaW9u
LCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZl
cnNpb24sIGRhdGFiYXNlLCBtX3ZlcnNpb24pKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CkBAIC0zMTEsNyArMzEzLDcgQEAgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhYwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBS
ZXR1cm4gbm90IGFsbG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KLSAgICByZXR1
cm4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1v
ZGUsIHRoaXMpOworICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LCBvYmplY3RTdG9yZU5hbWVzLCBtb2RlLCB0aGlzKTsK
IH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsMTIgKzQxLDEzIEBAIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOwogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIGNsYXNzIElE
QlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owog
CiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsIDogcHVibGljIElEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBk
YXRhYmFzZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tp
bmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIGNvb3JkaW5hdG9y
LCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRl
bnRpZmllcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbChuYW1lLCBkYXRhYmFzZSwgY29vcmRpbmF0b3IsIGZhY3RvcnksIHVuaXF1ZUlk
ZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKGNvbnRleHQsIG5hbWUsIGRhdGFiYXNlLCBjb29yZGluYXRvciwgZmFjdG9yeSwgdW5p
cXVlSWRlbnRpZmllcikpOwogICAgIH0KICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKCk7CiAKQEAgLTc2LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNhY3Rpb25G
aW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogCiBw
cml2YXRlOgotICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKyAg
ICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IqLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlk
ZW50aWZpZXIpOwogCiAgICAgdm9pZCBvcGVuSW50ZXJuYWwoKTsKICAgICB2b2lkIGxvYWRPYmpl
Y3RTdG9yZXMoKTsKQEAgLTkxLDggKzkyLDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBh
ZGRPYmplY3RTdG9yZVRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw+KTsKICAgICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgdmVy
c2lvbik7CiAKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAg
aW50NjQgbV9pZDsKKyAgICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBT
dHJpbmcgbV92ZXJzaW9uOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5j
cHAJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3Jv
dXAuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29y
a2VyTG9hZGVyUHJveHkuaCIKQEAgLTk0LDEyICs5NSwxMiBAQCBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQkZhY3Rvcnk6Om9wZW4oCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCAwKTsKLSAgICAgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUsIHJlcXVlc3QuZ2V0KCksIGNv
bnRleHQtPnNlY3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJpbmcoKSk7CisgICAgICAgIG1fYmFj
a2VuZC0+b3Blbihjb250ZXh0LCBuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0
eU9yaWdpbigpLCBmcmFtZSwgU3RyaW5nKCkpOwogICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAg
ICB9CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3Qg
PSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwot
ICAgIG1fYmFja2VuZC0+b3BlbkZyb21Xb3JrZXIobmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4
dC0+c2VjdXJpdHlPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQp
LCBTdHJpbmcoKSk7CisgICAgbV9iYWNrZW5kLT5vcGVuRnJvbVdvcmtlcihjb250ZXh0LCBuYW1l
LCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxX
b3JrZXJDb250ZXh0Kj4oY29udGV4dCksIFN0cmluZygpKTsKICAgICByZXR1cm4gcmVxdWVzdDsK
ICNlbHNlCiAgICAgcmV0dXJuIDA7CkBAIC0xMjQsNyArMTI1LDcgQEAgUGFzc1JlZlB0cjxJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRgogCiAgICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0PiByZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVu
dCwgSURCQW55OjpjcmVhdGVOdWxsKCksICIiKTsKICAgICBHcm91cFNldHRpbmdzKiBncm91cFNl
dHRpbmdzID0gZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAg
bV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRh
dGFiYXNlUGF0aCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNvbnRleHQsIG5h
bWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUo
KSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOwogICAgIHJldHVybiBy
ZXF1ZXN0OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklE
QkxldmVsREJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNl
Y3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgpAQCAtOTgsMTcgKzk5LDE3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tl
bmRJbXBsOjpnZXREYXRhYmFzZU4KICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhkYXRhYmFzZU5h
bWVzLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURp
cmVjdG9yeSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKLSAgICBvcGVuSW50ZXJuYWwobmFtZSwg
Y2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgb3BlbkludGVy
bmFsKGNvbnRleHQsIG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rv
cnkpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZyb21Xb3JrZXIoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXJlY3RvcnkpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZyb21Xb3Jr
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJ
REJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCiB7
Ci0gICAgb3BlbkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXJlY3RvcnkpOworICAgIG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCBjYWxsYmFja3MsIHNl
Y3VyaXR5T3JpZ2luLCBkYXRhRGlyZWN0b3J5KTsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQordm9pZCBJREJGYWN0
b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewogICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJ
ZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4u
Z2V0KCkpOwogCkBAIC0xMjcsNyArMTI4LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
OmRlbGV0ZURhdGFiYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkRh
dGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGlu
YXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OmNyZWF0ZShjb250ZXh0LCBuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25D
b29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CiAgICAgbV9kYXRhYmFz
ZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7
CiAgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwogfQpAQCAt
MTU0LDcgKzE1NSw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmEK
ICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5JbnRl
cm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyZWN0b3J5KQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxi
YWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9y
aWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewogICAgIFJlZlB0cjxTZWN1cml0
eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKICAgICBjb25zdCBT
dHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNl
Y3VyaXR5T3JpZ2luLmdldCgpKTsKQEAgLTE3NCw3ICsxNzUsNyBAQCB2b2lkIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6b3BlbkludGVybmFsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y3JlYXRlKGNvbnRleHQsIG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKICAg
ICBjYWxsYmFja3MtPm9uU3VjY2VzcyhSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
PihkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpLnJlbGVhc2UoKSk7CiAgICAgbV9kYXRhYmFzZUJhY2tl
bmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJ
KHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRE9NU3Ry
aW5nTGlzdDsKIGNsYXNzIElEQkJhY2tpbmdTdG9yZTsKIGNsYXNzIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw7CiBjbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOworY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsIDogcHVibGljIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKQEAgLTU3LDE0ICs1OCwxNCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNv
bnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5
T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9p
ZCBvcGVuRnJvbVdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURh
dGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2Vu
ZEltcGwoKTsKICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9y
ZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLSAg
ICB2b2lkIG9wZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZv
aWQgb3BlbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRhYmFzZUJhY2tl
bmRNYXAgbV9kYXRhYmFzZUJhY2tlbmRNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDM4ODkp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBJREJE
YXRhYmFzZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgV29ya2VyQ29udGV4dDsKK2Ns
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7
CiAKQEAgLTU1LDkgKzU2LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFi
YXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIAotICAgIHZpcnR1YWwg
dm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJh
Y2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtl
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFj
a3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAkocmV2
aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2Vu
ZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsNDcgQEAKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCi12b2lkIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRl
SURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mLCAwPiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cykKKyNpbmNsdWRlICJJREJCaW5kaW5n
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5o
IgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIElEQktleVBh
dGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0
aChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIDA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
VmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kIG9uY2UgSlNDIHN1cHBvcnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS4KKyAgICBWZWN0b3I8U3RyaW5nPiBpZGJLZXlQYXRoOworICAgIElEQktl
eVBhdGhQYXJzZUVycm9yIHBhcnNlRXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgs
IGlkYktleVBhdGgsIHBhcnNlRXJyb3IpOworICAgIGlmIChwYXJzZUVycm9yICE9IElEQktleVBh
dGhQYXJzZUVycm9yTm9uZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEpTQykKKyAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250
ZXh0LCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHZhbHVlcy5zaXplKCk7IGkrKykKKyAgICAgICAga2V5cy5hcHBlbmQoV2ViQ29yZTo6Y3JlYXRl
SURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWVzW2ldLCBpZGJL
ZXlQYXRoKSk7CisjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVk
VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbmNl
IEpTQyBzdXBwb3J0cyBXaXJlRm9ybWF0IGZvciBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCisgICAg
VmVjdG9yPFN0cmluZz4gaWRiS2V5UGF0aDsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBwYXJz
ZUVycm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLCBpZGJLZXlQYXRoLCBwYXJzZUVy
cm9yKTsKKyAgICBpZiAocGFyc2VFcnJvciAhPSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpCisg
ICAgICAgIHJldHVybiAwOworCisjaWYgVVNFKEpTQykKKyAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtYWluVGhyZWFkTm9y
bWFsV29ybGQoKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6
ZWRWYWx1ZShleGVjLCBrZXksIHZhbHVlLCBpZGJLZXlQYXRoKTsKKyNlbHNlCiAgICAgcmV0dXJu
IDA7CisjZW5kaWYKIH0KIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktl
eVBhdGhCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCS2V5UGF0aEJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDEyICszMywxMyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJLZXk7CitjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwog
CiBjbGFzcyBJREJLZXlQYXRoQmFja2VuZEltcGwgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lk
IGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9y
PFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVzLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mIGtleXMpOwotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6
ZWRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVJREJL
ZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIDA+JiB2YWx1ZXMs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cyk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RJREJL
ZXlJbnRvU2VyaWFsaXplZFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgogI2luY2x1ZGUg
IkxldmVsREJUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDIxICsxMDEs
MjEgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcgogICAgIGNhbGxi
YWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2ly
ZURhdGEpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQ
YXRoKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkK
K3N0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gZmV0Y2hLZXlGcm9tS2V5UGF0aChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlLCBjb25z
dCBTdHJpbmcmIGtleVBhdGgpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+ID4gdmFsdWVzOwogICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOwogICAgIFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiA+IGtleXM7Ci0gICAgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJ
REJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0aCwga2V5
cyk7CisgICAgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6
ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnRleHQsIHZhbHVlcywga2V5UGF0aCwga2V5cyk7CiAgICAg
aWYgKGtleXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQoa2V5cy5z
aXplKCkgPT0gMSk7CiAgICAgcmV0dXJuIGtleXNbMF0ucmVsZWFzZSgpOwogfQogCi1zdGF0aWMg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdEtleUludG9LZXlQYXRoKFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQorc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBpbmplY3RLZXlJbnRvS2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKLSAgICByZXR1cm4g
SURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGtl
eSwgdmFsdWUsIGtleVBhdGgpOworICAgIHJldHVybiBJREJLZXlQYXRoQmFja2VuZEltcGw6Omlu
amVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoY29udGV4dCwga2V5LCB2YWx1ZSwga2V5UGF0
aCk7CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnB1dChQYXNzCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9B
TExPV0VEX0VSUjsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnNlbGVjdEtleUZvclB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RT
dG9yZSwgSURCS2V5KiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFj
a3MsIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiB2YWx1ZSkKK1Bhc3NSZWZQdHI8SURC
S2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZWxlY3RLZXlGb3JQdXQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0
U3RvcmUsIElEQktleSoga2V5LCBQdXRNb2RlIHB1dE1vZGUsIElEQkNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYgdmFsdWUpCiB7CiAgICAgaWYgKHB1
dE1vZGUgPT0gQ3Vyc29yVXBkYXRlKQogICAgICAgICBBU1NFUlQoa2V5KTsKQEAgLTE3NywxNCAr
MTc3LDE0IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmQKICAgICAg
ICAgaWYgKCFoYXNLZXlQYXRoKQogICAgICAgICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLT5nZW5B
dXRvSW5jcmVtZW50S2V5KCk7CiAKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9
IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgp
OworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0
aChjb250ZXh0LCB2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAg
IGlmIChrZXlQYXRoS2V5KSB7CiAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5j
cmVtZW50S2V5Q2FjaGUoKTsKICAgICAgICAgICAgIHJldHVybiBrZXlQYXRoS2V5OwogICAgICAg
ICB9CiAKICAgICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3JlLT5n
ZW5BdXRvSW5jcmVtZW50S2V5KCk7Ci0gICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChhdXRvSW5jS2V5
LCB2YWx1ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0
aChjb250ZXh0LCBhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAg
ICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikgewogICAgICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
REFUQV9FUlIsICJUaGUgZ2VuZXJhdGVkIGtleSBjb3VsZCBub3QgYmUgaW5zZXJ0ZWQgaW50byB0
aGUgb2JqZWN0IHVzaW5nIHRoZSBrZXlQYXRoLiIpKTsKICAgICAgICAgICAgIHJldHVybiAwOwpA
QCAtMTk0LDcgKzE5NCw3IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tl
bmQKICAgICB9CiAKICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAgICAgICBSZWZQdHI8SURCS2V5
PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgb2JqZWN0U3Rv
cmUtPm1fa2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRj
aEtleUZyb21LZXlQYXRoKGNvbnRleHQsIHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQ
YXRoKTsKIAogICAgICAgICBpZiAoIWtleVBhdGhLZXkpIHsKICAgICAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkRBVEFfRVJSLCAiVGhlIGtleSBjb3VsZCBub3QgYmUgZmV0Y2hlZCBmcm9tIHRoZSBrZXlQYXRo
LiIpKTsKQEAgLTIxNywxMCArMjE3LDEwIEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RT
dG9yZUJhY2tlbmQKICAgICByZXR1cm4ga2V5OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1
dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQordm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVj
dFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NS
ZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uKQogewogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlID0gcHJwVmFsdWU7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2VsZWN0S2V5Rm9yUHV0
KG9iamVjdFN0b3JlLmdldCgpLCBwcnBLZXkuZ2V0KCksIHB1dE1vZGUsIGNhbGxiYWNrcy5nZXQo
KSwgdmFsdWUpOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHNlbGVjdEtleUZvclB1dChjb250
ZXh0LCBvYmplY3RTdG9yZS5nZXQoKSwgcHJwS2V5LmdldCgpLCBwdXRNb2RlLCBjYWxsYmFja3Mu
Z2V0KCksIHZhbHVlKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzMs
NyArMjMzLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcgogICAg
IGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAg
IGNvbnN0IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOwog
Ci0gICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2
YWx1ZS5nZXQoKSwgaW5kZXgtPmtleVBhdGgoKSk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGlu
ZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChjb250ZXh0LCB2YWx1ZS5nZXQoKSwgaW5kZXgt
PmtleVBhdGgoKSk7CiAgICAgICAgIGlmICghaW5kZXhLZXkpIHsKICAgICAgICAgICAgIGluZGV4
S2V5cy5hcHBlbmQoaW5kZXhLZXkucmVsZWFzZSgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMzgwLDggKzM4MCw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJ
bnQKIG5hbWVzcGFjZSB7CiBjbGFzcyBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJsaWMgSURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBQ
b3B1bGF0ZUluZGV4Q2FsbGJhY2soSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEltcGw+IGluZGV4KQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9y
ZSkKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4KQorICAgICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICAg
ICAsIG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKICAgICAgICAgLCBtX2RhdGFiYXNlSWQo
ZGF0YWJhc2VJZCkKICAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQpAQCAtMzkxLDcgKzM5Miw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgY2FsbGJhY2soY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgewogICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOwotICAgICAgICBS
ZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUu
Z2V0KCksIG1faW5kZXgtPmtleVBhdGgoKSk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4
S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG9iamVj
dFZhbHVlLmdldCgpLCBtX2luZGV4LT5rZXlQYXRoKCkpOwogCiAgICAgICAgIGlmICghaW5kZXhL
ZXkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxMSw2ICs0MTIsNyBAQCBwdWJsaWM6
CiAgICAgfQogCiBwcml2YXRlOgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dDsKICAgICBJREJCYWNraW5nU3RvcmUmIG1fYmFja2luZ1N0b3JlOwog
ICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOwogICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwpA
QCAtNDE4LDkgKzQyMCw5IEBAIHByaXZhdGU6CiB9OwogfQogCi1ib29sIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUs
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElE
QkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
Ojpwb3B1bGF0ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQkJhY2tp
bmdTdG9yZSYgYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKIHsKLSAgICBQ
b3B1bGF0ZUluZGV4Q2FsbGJhY2sgY2FsbGJhY2soYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBpbmRleCk7CisgICAgUG9wdWxhdGVJbmRleENhbGxiYWNrIGNhbGxiYWNr
KGNvbnRleHQsIGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXgp
OwogICAgIGlmICghYmFja2luZ1N0b3JlLmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChkYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZUlkLCBjYWxsYmFjaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTQ1OSw3ICs0NjEsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gSURCCiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFz
c1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewog
ICAgIGludDY0X3QgaWQ7CiAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmNy
ZWF0ZUluZGV4KG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBp
bmRleC0+bmFtZSgpLCBpbmRleC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5t
dWx0aUVudHJ5KCksIGlkKSkgewpAQCAtNDY5LDcgKzQ3MSw3IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW4KIAogICAgIGluZGV4LT5zZXRJZChpZCk7CiAKLSAgICBp
ZiAoIXBvcHVsYXRlSW5kZXgoKm9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3Rv
cmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPm1faWQsIGluZGV4KSkgeworICAgIGlmICgh
cG9wdWxhdGVJbmRleChjb250ZXh0LCAqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLCBvYmpl
Y3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9pZCwgaW5kZXgpKSB7CiAgICAg
ICAgIHRyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBy
YW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
aXJ0dWFsIHZvaWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOwogCi0gICAgc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbXBsPik7CisgICAgc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRleChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgSURCQmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwog
CiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3Jl
KiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KTsKQEAgLTg3LDcgKzg3LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7CiAgICAgUGFzc1JlZlB0cjxJREJL
ZXk+IGdlbkF1dG9JbmNyZW1lbnRLZXkoKTsKICAgICB2b2lkIHJlc2V0QXV0b0luY3JlbWVudEtl
eUNhY2hlKCkgeyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQktleT4gc2VsZWN0S2V5Rm9yUHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwq
LCBJREJLZXkqLCBQdXRNb2RlLCBJREJDYWxsYmFja3MqLCBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gc2VsZWN0S2V5Rm9yUHV0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgSURC
S2V5KiwgUHV0TW9kZSwgSURCQ2FsbGJhY2tzKiwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4mKTsKIAogICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHN0YXRpYyB2b2lkIHB1
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCShyZXZp
c2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9y
ZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNl
KQorUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRE9NU3Ry
aW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKiBkYXRhYmFzZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwob2JqZWN0U3RvcmVzLCBtb2RlLCBkYXRhYmFzZSkpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb250ZXh0LCBvYmpl
Y3RTdG9yZXMsIG1vZGUsIGRhdGFiYXNlKSk7CiB9CiAKLUlEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVz
LCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkK
LSAgICA6IG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZXMpCitJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQg
bW9kZSwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCisgICAgOiBtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RT
dG9yZXMpCiAgICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fc3RhdGUoVW51c2VkKQogICAgICwg
bV9kYXRhYmFzZShkYXRhYmFzZSkKQEAgLTIxNyw3ICsyMTgsNyBAQCB2b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lCiAgICAgICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25D
b250ZXh0OjpUYXNrPiB0YXNrKHF1ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsKICAgICAgICAgcXVl
dWUucmVtb3ZlRmlyc3QoKTsKICAgICAgICAgbV9wZW5kaW5nRXZlbnRzKys7Ci0gICAgICAgIHRh
c2stPnBlcmZvcm1UYXNrKDApOworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzayhtX3NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwMzg4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZElt
cGw7CiAKIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgOiBwdWJsaWMgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVk
IHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKICAgICB2aXJ0dWFsIH5JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsKCk7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcnVu
KCk7CiAKIHByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdM
aXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGwqKTsKKyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUs
IElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKIAogICAgIGVudW0gU3RhdGUgewogICAgICAgICBV
bnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCkBAIC03NSw2ICs3NSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+Kik7CiAgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CiAKKyAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IG1fb2JqZWN0U3RvcmVOYW1lczsKICAgICB1bnNpZ25lZCBzaG9ydCBt
X21vZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0LmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
NyBAQCBwdWJsaWM6CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdCogdG9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCgpIHsgcmV0dXJuIHRoaXM7
IH0KIAogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmxvY2tlZCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3QuaWRsCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQCBt
b2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1J
TkRFWEVEX0RBVEFCQVNFLAorICAgICAgICBHZW5lcmF0ZVRvSlMsCiAgICAgICAgIEV2ZW50VGFy
Z2V0CiAgICAgXSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3QgewogICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7Cg==
</data>
<flag name="commit-queue"
          id="121196"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120864</attachid>
            <date>2012-01-01 22:30:53 -0800</date>
            <delta_ts>2012-04-19 15:25:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>indexeddb20120102.patch</filename>
            <type>text/plain</type>
            <size>69569</size>
            <attacher name="Donggwan Kim">donggwan.kim</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBACisyMDEyLTAxLTAxICBEb25nLUd3
YW4gS2ltICA8ZG9uZ2d3YW4ua2ltQHNhbXN1bmcuY29tPgorCisgICAgICAgIEltcGxlbWVudCBK
U0MgZmVhdHVyZXMgcmVxdWlyZWQgZm9yIEluZGV4ZWREQgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxMTAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFVzZUpTQy5jbWFrZToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXROdGhWYWx1ZU9uS2V5
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVl
QW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXpl
ZFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvT3B0aW9uc09iamVj
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6T3B0aW9uc09iamVjdDo6T3B0aW9uc09i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0Ojp+T3B0aW9uc09iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpPcHRpb25zT2JqZWN0OjpvcGVyYXRvcj0pOgorICAgICAgICAo
V2ViQ29yZTo6T3B0aW9uc09iamVjdDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wdGlvbnNP
YmplY3Q6OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpP
cHRpb25zT2JqZWN0OjpnZXRLZXkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL09wdGlvbnNPYmpl
Y3QuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemVOdW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnRvV2lyZVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVtYmVyVmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6
CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChUeXBlQ2FuRmFp
bENvbnZlcnNpb24pOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKToKKyAgICAgICAgKiBzdG9y
YWdlL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZElt
cGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpjcmVhdGUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuRnJvbVdvcmtlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkludGVybmFs
KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRo
QmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJ
bnRvU2VyaWFsaXplZFZhbHVlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQktleVBhdGhCYWNrZW5k
SW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6Cisg
ICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZldGNoS2V5RnJvbUtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6aW5qZWN0
S2V5SW50b0tleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2VsZWN0S2V5Rm9yUHV0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnB1dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnBvcHVsYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdDo6dG9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGw6CisgICAgICAgICogc3RvcmFnZS9jaHJv
bWl1bS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCS2V5
UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURC
S2V5SW50b1NlcmlhbGl6ZWRWYWx1ZSk6CisKIDIwMTItMDEtMDEgIEFuZHJlYXMgS2xpbmcgIDxh
d2Vzb21la2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlIENvbGxlY3Rpb25DYWNoZSBp
bnRvIEhUTUxDb2xsZWN0aW9uLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDEw
Mzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xMzUxLDIyICsxMzUxLDM0IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBzdG9yYWdlL0Rh
dGFiYXNlVGhyZWFkLmNwcAogICAgIHN0b3JhZ2UvRGF0YWJhc2VUcmFja2VyLmNwcAogICAgIHN0
b3JhZ2UvSURCQW55LmNwcAotICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCi0gICAgc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAogICAgIHN0b3JhZ2UvSURCQ3Vyc29yLmNwcAog
ICAgIHN0b3JhZ2UvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisgICAgc3RvcmFnZS9JREJDdXJz
b3JXaXRoVmFsdWUuY3BwCisgICAgc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKKyAgICBzdG9yYWdl
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisgICAgc3RvcmFnZS9JREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuY3BwCiAgICAgc3RvcmFnZS9JREJEYXRhYmFzZUV4Y2VwdGlvbi5jcHAKICAgICBz
dG9yYWdlL0lEQkV2ZW50RGlzcGF0Y2hlci5jcHAKKyAgICBzdG9yYWdlL0lEQkZhY3RvcnkuY3Bw
CisgICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAKKyAgICBzdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKICAgICBzdG9yYWdlL0lEQkluZGV4LmNwcAogICAg
IHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKICAgICBzdG9yYWdlL0lEQktleS5jcHAK
KyAgICBzdG9yYWdlL0lEQktleVBhdGguY3BwCisgICAgc3RvcmFnZS9JREJLZXlQYXRoQmFja2Vu
ZEltcGwuY3BwCiAgICAgc3RvcmFnZS9JREJLZXlSYW5nZS5jcHAKLSAgICBzdG9yYWdlL0lEQlJl
cXVlc3QuY3BwCisgICAgc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorICAgIHN0
b3JhZ2UvSURCTGV2ZWxEQkNvZGluZy5jcHAKICAgICBzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNw
cAogICAgIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKLSAgICBzdG9yYWdl
L0lEQkZhY3RvcnkuY3BwCi0gICAgc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5j
cHAKLSAgICBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKKyAgICBzdG9yYWdlL0lE
QlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwCisgICAgc3RvcmFnZS9JREJSZXF1ZXN0LmNw
cAorICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwCisgICAgc3RvcmFnZS9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsLmNwcAorICAgIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAKKyAgICBzdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAKKyAgICBzdG9yYWdl
L0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmNwcAogICAgIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFz
ay5jcHAKICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5jcHAKICAgICBzdG9yYWdlL09y
aWdpblF1b3RhTWFuYWdlci5jcHAKQEAgLTE0OTYsNiArMTUwOCw3IEBAIElGIChFTkFCTEVfSU5E
RVhFRF9EQVRBQkFTRSkKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX0lETF9GSUxFUwogICAgICAg
ICBzdG9yYWdlL0lEQkFueS5pZGwKICAgICAgICAgc3RvcmFnZS9JREJDdXJzb3IuaWRsCisgICAg
ICAgIHN0b3JhZ2UvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAogICAgICAgICBzdG9yYWdlL0lEQkRh
dGFiYXNlRXJyb3IuaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRs
CiAgICAgICAgIHN0b3JhZ2UvSURCRGF0YWJhc2UuaWRsCkBAIC0xNTA2LDYgKzE1MTksOCBAQCBJ
RiAoRU5BQkxFX0lOREVYRURfREFUQUJBU0UpCiAgICAgICAgIHN0b3JhZ2UvSURCT2JqZWN0U3Rv
cmUuaWRsCiAgICAgICAgIHN0b3JhZ2UvSURCUmVxdWVzdC5pZGwKICAgICAgICAgc3RvcmFnZS9J
REJUcmFuc2FjdGlvbi5pZGwKKyAgICAgICAgc3RvcmFnZS9JREJWZXJzaW9uQ2hhbmdlRXZlbnQu
aWRsCisgICAgICAgIHN0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCiAgICAgKQog
RU5ESUYgKCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1VzZUpTQy5jbWFrZQkocmV2aXNpb24gMTAzODg5KQorKysgU291
cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNiArMTI5LDcg
QEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNYUGF0aFJl
c3VsdEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3Bw
CiAgICAgYmluZGluZ3MvanMvSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAKKyAgICBiaW5kaW5ncy9q
cy9PcHRpb25zT2JqZWN0LmNwcAogICAgIGJpbmRpbmdzL2pzL1BhZ2VTY3JpcHREZWJ1Z1NlcnZl
ci5jcHAKICAgICBiaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCiAgICAgYmluZGluZ3Mv
anMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDEwMzg4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwyMSArMzAsNzYgQEAKICNpbmNsdWRlICJJREJCaW5kaW5nVXRp
bGl0aWVzLmgiCiAKICNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJ
REJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
IHsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZSgpOwotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiBJREJLZXk6OmNy
ZWF0ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAg
ICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsK
ICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRl
KHVzdHJpbmdUb1N0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKSkpOwotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZGF0ZXMuCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0cmluZyh1c3Ry
aW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKKyAgICBpZiAodmFsdWUuaW5oZXJp
dHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRl
RGF0ZSh2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkpOwogICAgIHJldHVybiAwOwogfQogCitKU1Zh
bHVlIGdldE50aFZhbHVlT25LZXlQYXRoKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJv
b3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgc2l6ZV90IGlu
ZGV4KQoreworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlOworICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSByb290VmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgUHJvcGVydHlTbG90IHNsb3Qob2JqZWN0
KTsKKyAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7CisgICAgICAgIElkZW50aWZpZXIgcHJv
cGVydHlOYW1lID0gSWRlbnRpZmllcihleGVjLCBrZXlQYXRoRWxlbWVudHNbaV0uaW1wbCgpKTsK
KyAgICAgICAgaWYgKCFvYmplY3QtPmdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKwor
ICAgICAgICBjdXJyZW50VmFsdWUgPSBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7
CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsKK30KKworUGFzc1JlZlB0cjxJREJL
ZXk+IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoKQoreworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMs
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgSlNWYWx1ZSBqc0tleSA9IGdldE50
aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFsdWUsIGtleVBhdGgsIGtleVBhdGguc2l6ZSgpKTsK
KyAgICBpZiAoanNLZXkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIGpzS2V5KTsKK30KKworUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUo
RXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoKQor
eworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFrZXlQYXRo
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZS0+ZGVzZXJpYWxpemUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKKyAgICBK
U1ZhbHVlIHBhcmVudCA9IGdldE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFsdWUsIGtleVBh
dGgsIGtleVBhdGguc2l6ZSgpIC0gMSk7CisgICAgaWYgKHBhcmVudC5pc1VuZGVmaW5lZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghcGFyZW50LmlzT2JqZWN0KCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IHBhcmVudC50b09iamVjdChleGVj
KTsKKyAgICBvYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIElkZW50aWZpZXIo
ZXhlYywga2V5UGF0aC5sYXN0KCkuaW1wbCgpKSwgcGFyZW50KTsKKworICAgIHJldHVybiBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBqc1ZhbHVlKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5o
CShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCi0jaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIgCisjaW5j
bHVkZSAiU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zNiw2ICszNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IElEQktleTsKIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURC
S2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sICBjb25zdCBWZWN0b3I8U3RyaW5nLCAwPiYpOwor
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxp
emVkVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgVmVjdG9yPFN0cmluZywgMD4mKTsKIAogfQog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3Bw
CShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFu
eUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywxNCBAQAogCiAjaW5jbHVk
ZSAiSURCQW55LmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSURCQ3Vyc29y
V2l0aFZhbHVlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJGYWN0
b3J5LmgiCiAjaW5jbHVkZSAiSURCSW5kZXguaCIKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNs
dWRlICJJREJPYmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIkpTSURCQ3Vyc29yLmgiCisjaW5jbHVk
ZSAiSlNJREJDdXJzb3JXaXRoVmFsdWUuaCIKICNpbmNsdWRlICJKU0lEQkRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAiSlNJREJGYWN0b3J5LmgiCiAjaW5jbHVkZSAiSlNJREJJbmRleC5oIgpAQCAtNjMs
NiArNjUsOCBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAg
ICAgIHJldHVybiBqc051bGwoKTsKICAgICBjYXNlIElEQkFueTo6SURCQ3Vyc29yVHlwZToKICAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYkN1cnNvcigp
KTsKKyAgICBjYXNlIElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYkN1cnNvcldpdGhWYWx1ZSgp
KTsKICAgICBjYXNlIElEQkFueTo6SURCRGF0YWJhc2VUeXBlOgogICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRiRGF0YWJhc2UoKSk7CiAgICAgY2FzZSBJ
REJBbnk6OklEQkZhY3RvcnlUeXBlOgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJLZXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCS2V5Q3VzdG9tLmNwcAkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3
ICs0Nyw4IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICAg
ICAgcmV0dXJuIGpzTnVtYmVyKGtleS0+bnVtYmVyKCkpOwogICAgIGNhc2UgSURCS2V5OjpTdHJp
bmdUeXBlOgogICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywga2V5LT5zdHJpbmcoKSk7Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICBjYXNlIElEQktleTo6RGF0ZVR5cGU6
CisgICAgICAgIHJldHVybiBqc0RhdGVPck51bGwoZXhlYywga2V5LT5kYXRlKCkpOwogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgYXJyYXlzLgogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvT3B0aW9uc09iamVjdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9PcHRpb25zT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk9wdGlvbnNPYmplY3QuaCIKKworI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNNZXNzYWdlUG9ydEN1
c3RvbS5oIgorI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgorI2luY2x1ZGUgIkpTVHJhY2tDdXN0b20u
aCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRlICJKU1RleHRUcmFjay5oIgor
I2luY2x1ZGUgIlRyYWNrQmFzZS5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworT3B0aW9uc09iamVjdDo6T3B0aW9uc09iamVjdCgpCisg
ICAgOiBtX2V4ZWMoMCkKK3sKK30KKworT3B0aW9uc09iamVjdDo6T3B0aW9uc09iamVjdChKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNWYWx1ZSYgb3B0aW9ucykKKyAgICA6IG1fZXhlYyhl
eGVjKQorICAgICwgbV9vcHRpb25zKG9wdGlvbnMpCit7Cit9CisKK09wdGlvbnNPYmplY3Q6On5P
cHRpb25zT2JqZWN0KCkKK3sKK30KKworT3B0aW9uc09iamVjdCYgT3B0aW9uc09iamVjdDo6b3Bl
cmF0b3I9KGNvbnN0IE9wdGlvbnNPYmplY3QmIG9wdGlvbnNPYmplY3QpCit7CisgICAgbV9leGVj
ID0gb3B0aW9uc09iamVjdC5tX2V4ZWM7CisgICAgbV9vcHRpb25zID0gb3B0aW9uc09iamVjdC5t
X29wdGlvbnM7CisgICAgcmV0dXJuICp0aGlzOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6Omdl
dChjb25zdCBTdHJpbmcmIGtleSwgYm9vbCYgdmFsdWUpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBq
c1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHZhbHVlID0ganNWYWx1ZS50b0Jvb2xlYW4obV9leGVjKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXks
IGludDMyX3QmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAo
IWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1
ZSA9IGpzVmFsdWUudG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgZG91YmxlJiB2YWx1ZSkgY29u
c3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBqc1ZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVlLnRvTnVtYmVy
KG1fZXhlYyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0
KGNvbnN0IFN0cmluZyYga2V5LCBTdHJpbmcmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUg
anNWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBjb25zdCBTdHJpbmcmIHN0cmluZyh1c3RyaW5nVG9TdHJpbmcoanNWYWx1
ZS50b1N0cmluZyhtX2V4ZWMpKSk7CisgICAgdmFsdWUgPSBzdHJpbmc7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYga2V5LCBTY3Jp
cHRWYWx1ZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICgh
Z2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVl
ID0gU2NyaXB0VmFsdWUobV9leGVjLT5nbG9iYWxEYXRhKCksIGpzVmFsdWUpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwg
dW5zaWduZWQgc2hvcnQmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsKKyAg
ICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICB2YWx1ZSA9IGpzVmFsdWUudG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE9wdGlvbnNPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgdW5zaWduZWQmIHZh
bHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXks
IGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2YWx1ZSA9IGpzVmFsdWUu
dG9JbnQzMihtX2V4ZWMpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlvbnNPYmpl
Y3Q6OmdldChjb25zdCBTdHJpbmcmIGtleSwgdW5zaWduZWQgbG9uZyBsb25nJiB2YWx1ZSkgY29u
c3QKK3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBqc1ZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmFsdWUgPSBqc1ZhbHVlLnRvTnVtYmVy
KG1fZXhlYyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0
KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8RE9NV2luZG93PiYgdmFsdWUpIGNvbnN0Cit7Cisg
ICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gdG9ET01XaW5kb3coanNWYWx1ZSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0KGNvbnN0IFN0cmlu
ZyYga2V5LCBSZWZQdHI8U3RvcmFnZT4mIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNW
YWx1ZTsKKyAgICBpZiAoIWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB2YWx1ZSA9IHRvU3RvcmFnZShqc1ZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBPcHRpb25zT2JqZWN0OjpnZXQoY29uc3QgU3RyaW5nJiBrZXksIE1lc3NhZ2VQ
b3J0QXJyYXkmIHZhbHVlKSBjb25zdAoreworICAgIEpTVmFsdWUganNWYWx1ZTsKKyAgICBpZiAo
IWdldEtleShrZXksIGpzVmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmaWxs
TWVzc2FnZVBvcnRBcnJheShtX2V4ZWMsIGpzVmFsdWUsIHZhbHVlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2Jvb2wgT3B0aW9uc09iamVjdDo6Z2V0
KGNvbnN0IFN0cmluZyYga2V5LCBSZWZQdHI8VHJhY2tCYXNlPiYgdmFsdWUpIGNvbnN0Cit7Cisg
ICAgSlNWYWx1ZSBqc1ZhbHVlOworICAgIGlmICghZ2V0S2V5KGtleSwganNWYWx1ZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHZhbHVlID0gdG9UcmFjayhqc1ZhbHVlKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCitib29sIE9wdGlvbnNPYmplY3Q6OmdldFdpdGhVbmRl
ZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmIGtleSwgU3RyaW5nJiB2YWx1ZSkgY29uc3QK
K3sKKyAgICBKU1ZhbHVlIGpzVmFsdWU7CisgICAgaWYgKCFnZXRLZXkoa2V5LCBqc1ZhbHVlKSB8
fCBqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHZhbHVlID0gU3Ry
aW5nKCk7CisgICAgZWxzZSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKHVzdHJpbmdU
b1N0cmluZyhqc1ZhbHVlLnRvU3RyaW5nKG1fZXhlYykpKTsKKyAgICAgICAgdmFsdWUgPSBzdHJp
bmc7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW9uc09iamVjdDo6
Z2V0S2V5KGNvbnN0IFN0cmluZyYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fZXhlYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fb3B0aW9ucy5p
c1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU09iamVj
dCogb3B0aW9ucyA9IG1fb3B0aW9ucy50b09iamVjdChtX2V4ZWMpOworICAgIGlmICghb3B0aW9u
cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gb3B0aW9u
cy0+Z2V0KG1fZXhlYywgSWRlbnRpZmllcihtX2V4ZWMsIGtleS5pbXBsKCkpKTsKKyAgICBpZiAo
bV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGpzVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgdmFsdWUgPSBqc1ZhbHVlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL09wdGlvbnNPYmplY3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAg
ICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9PcHRpb25zT2JqZWN0LmgJ
KHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL09wdGlvbnNP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNTAgQEAKICNpZm5kZWYgT3B0aW9u
c09iamVjdF9oCiAjZGVmaW5lIE9wdGlvbnNPYmplY3RfaAogCi0vLyBGSVhNRTogSW1wbGVtZW50
LgorI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNWYWx1ZS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIFN0b3JhZ2U7
CitjbGFzcyBUcmFja0Jhc2U7CisKK2NsYXNzIE9wdGlvbnNPYmplY3QgeworcHVibGljOgorICAg
IE9wdGlvbnNPYmplY3QoKTsKKyAgICBPcHRpb25zT2JqZWN0KEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpKU1ZhbHVlJiBvcHRpb25zKTsKKworICAgIE9wdGlvbnNPYmplY3QmIG9wZXJhdG9y
PShjb25zdCBPcHRpb25zT2JqZWN0Jik7CisKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCBi
b29sJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgaW50MzJfdCYpIGNvbnN0
OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIGRvdWJsZSYpIGNvbnN0OworICAgIGJvb2wg
Z2V0KGNvbnN0IFN0cmluZyYsIFN0cmluZyYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0
cmluZyYsIFNjcmlwdFZhbHVlJikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwg
dW5zaWduZWQgc2hvcnQmKSBjb25zdDsKKyAgICBib29sIGdldChjb25zdCBTdHJpbmcmLCB1bnNp
Z25lZCYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGxvbmcg
bG9uZyYpIGNvbnN0OworICAgIGJvb2wgZ2V0KGNvbnN0IFN0cmluZyYsIFJlZlB0cjxET01XaW5k
b3c+JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgUmVmUHRyPFN0b3JhZ2U+
JikgY29uc3Q7CisgICAgYm9vbCBnZXQoY29uc3QgU3RyaW5nJiwgTWVzc2FnZVBvcnRBcnJheSYp
IGNvbnN0OworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBib29sIGdldChjb25zdCBTdHJp
bmcmLCBSZWZQdHI8VHJhY2tCYXNlPiYpIGNvbnN0OworI2VuZGlmCisKKyAgICBib29sIGdldFdp
dGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmLCBTdHJpbmcmKSBjb25zdDsKKwor
ICAgIH5PcHRpb25zT2JqZWN0KCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBnZXRLZXkoY29uc3Qg
U3RyaW5nJiBrZXksIEpTQzo6SlNWYWx1ZSYpIGNvbnN0OworCisgICAgSlNDOjpFeGVjU3RhdGUq
IG1fZXhlYzsKKyAgICBKU0M6OkpTVmFsdWUgbV9vcHRpb25zOworfTsKKworfSAvLyBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBPcHRpb25zT2JqZWN0X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMTAz
ODg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsOCBAQCBlbnVtIFNlcmlhbGl6YXRpb25U
YWcgewogICAgIFJlZ0V4cFRhZyA9IDE4LAogICAgIE9iamVjdFJlZmVyZW5jZVRhZyA9IDE5LAog
ICAgIE1lc3NhZ2VQb3J0UmVmZXJlbmNlVGFnID0gMjAsCisgICAgTnVtYmVyVGFnID0gMjEsCisg
ICAgUGFkZGluZ1RhZyA9IDIyLAogICAgIEVycm9yVGFnID0gMjU1CiB9OwogCkBAIC0yNzEsNyAr
MjczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbjx1
aW50OF90PihvdXQsIFN0cmluZ1RhZyk7CiAgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKG91dCwg
cy5sZW5ndGgoKSk7Ci0gICAgICAgIHJldHVybiB3cml0ZUxpdHRsZUVuZGlhbihvdXQsIHMuaW1w
bCgpLT5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOworICAgICAgICBib29sIHJldCA9IHdyaXRl
TGl0dGxlRW5kaWFuKG91dCwgcy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSk7CisK
KyAgICAgICAgaWYgKG91dC5zaXplKCkgJSAyKQorICAgICAgICAgICAgd3JpdGVMaXR0bGVFbmRp
YW48dWludDhfdD4ob3V0LCBQYWRkaW5nVGFnKTsKKworICAgICAgICByZXR1cm4gcmV0OwogICAg
IH0KIAogICAgIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVuZGVmaW5lZChWZWN0b3I8dWludDhfdD4m
IG91dCkKQEAgLTI4Niw2ICsyOTMsMTggQEAgcHVibGljOgogICAgICAgICB3cml0ZUxpdHRsZUVu
ZGlhbjx1aW50OF90PihvdXQsIHZhbHVlID8gVHJ1ZVRhZyA6IEZhbHNlVGFnKTsKICAgICB9CiAK
KyAgICBzdGF0aWMgdm9pZCBzZXJpYWxpemVOdW1iZXIoZG91YmxlIHZhbHVlLCBWZWN0b3I8dWlu
dDhfdD4mIG91dCkKKyAgICB7CisgICAgICAgIHdyaXRlTGl0dGxlRW5kaWFuKG91dCwgQ3VycmVu
dFZlcnNpb24pOworICAgICAgICB3cml0ZUxpdHRsZUVuZGlhbjx1aW50OF90PihvdXQsIE51bWJl
clRhZyk7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIGRvdWJsZSBkOworICAgICAgICAg
ICAgaW50NjRfdCBpOworICAgICAgICB9IHU7CisgICAgICAgIHUuZCA9IHZhbHVlOworICAgICAg
ICB3cml0ZUxpdHRsZUVuZGlhbihvdXQsIHUuaSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIENs
b25lU2VyaWFsaXplcihFeGVjU3RhdGUqIGV4ZWMsIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQ
b3J0cywgVmVjdG9yPHVpbnQ4X3Q+JiBvdXQpCiAgICAgICAgIDogQ2xvbmVCYXNlKGV4ZWMpCkBA
IC03OTYsMTEgKzgxNSwyNSBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6
ZXI6CiAgICAgaWYgKG1fZmFpbGVkKQogICAgICAgICByZXR1cm4gVW5zcGVjaWZpZWRFcnJvcjsK
IAorICAgIGlmIChtX2J1ZmZlci5zaXplKCkgJSAyKQorICAgICAgICB3cml0ZShQYWRkaW5nVGFn
KTsKKwogICAgIHJldHVybiBTdWNjZXNzZnVsbHlDb21wbGV0ZWQ7CiB9CiAKIGNsYXNzIENsb25l
RGVzZXJpYWxpemVyIDogQ2xvbmVCYXNlIHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgU3RyaW5nIHRv
V2lyZVN0cmluZyhjb25zdCBWZWN0b3I8dWludDhfdD4mIGJ1ZmZlcikKKyAgICB7CisgICAgICAg
IGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJ1ZmZlci5iZWdpbigpOworICAgICAgICBjb25zdCB1aW50
OF90KiBlbmQgPSBidWZmZXIuZW5kKCk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IGxlbmd0aCA9
IGJ1ZmZlci5zaXplKCkgLyBzaXplb2YoVUNoYXIpOworICAgICAgICBVU3RyaW5nIHN0cjsKKyAg
ICAgICAgaWYgKCFyZWFkU3RyaW5nKHB0ciwgZW5kLCBzdHIsIGxlbmd0aCkpCisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBTdHJpbmcoc3RyLmltcGwoKSk7Cisg
ICAgfQorCiAgICAgc3RhdGljIFN0cmluZyBkZXNlcmlhbGl6ZVN0cmluZyhjb25zdCBWZWN0b3I8
dWludDhfdD4mIGJ1ZmZlcikKICAgICB7CiAgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHB0ciA9IGJ1
ZmZlci5iZWdpbigpOwpAQCAtMTQxNiw2ICsxNDQ5LDE0IEBAIFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBTZXJpYWwKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZShidWZmZXIpKTsKIH0KIAorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUoY29uc3QgU3RyaW5nJiBz
dHJpbmcpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBpZiAoIXdyaXRlTGl0
dGxlRW5kaWFuKGJ1ZmZlciwgc3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCBzdHJpbmcubGVu
Z3RoKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKK30KKwogUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpTQ29udGV4dFJlZiBvcmln
aW5Db250ZXh0LCBKU1ZhbHVlUmVmIGFwaVZhbHVlLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlUG9ydEFycmF5
KiBtZXNzYWdlUG9ydHMsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKQEAgLTE0NDQsNiArMTQ4
NSwxMSBAQCBTdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1N0cmluZygpCiAgICAgcmV0
dXJuIENsb25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZVN0cmluZyhtX2RhdGEpOwogfQogCitT
dHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJpbmcoKQoreworICAgIHJldHVy
biBDbG9uZURlc2VyaWFsaXplcjo6dG9XaXJlU3RyaW5nKG1fZGF0YSk7Cit9CisKIEpTVmFsdWUg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE1lc3NhZ2VQb3J0QXJyYXkqIG1lc3NhZ2VQb3J0cywgU2VyaWFsaXphdGlv
bkVycm9yTW9kZSB0aHJvd0V4Y2VwdGlvbnMpCiB7CkBAIC0xNDk0LDYgKzE1NDAsMTMgQEAgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbAogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgU2VyaWFsaXplZFNjcmlwdFZhbHVlKGJ1ZmZlcikpOwogfQogCitQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudW1iZXJWYWx1ZShk
b3VibGUgdmFsdWUpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBDbG9uZVNl
cmlhbGl6ZXI6OnNlcmlhbGl6ZU51bWJlcih2YWx1ZSwgYnVmZmVyKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZShidWZmZXIpKTsKK30KKwogdm9pZCBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6Om1heWJlVGhyb3dFeGNlcHRpb25JZlNlcmlhbGl6YXRpb25GYWls
ZWQoRXhlY1N0YXRlKiBleGVjLCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBjb2RlKQogewogICAg
IGlmIChjb2RlID09IFN1Y2Nlc3NmdWxseUNvbXBsZXRlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCShyZXZpc2lvbiAx
MDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIE1lc3NhZ2VQb3J0OwogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPE1lc3NhZ2VQb3J0
PiwgMT4gTWVzc2FnZVBvcnRBcnJheTsKLSAKKwogZW51bSBTZXJpYWxpemF0aW9uUmV0dXJuQ29k
ZSB7CiAgICAgU3VjY2Vzc2Z1bGx5Q29tcGxldGVkLAogICAgIFN0YWNrT3ZlcmZsb3dFcnJvciwK
QEAgLTQ5LDE4ICs0OSwxOSBAQCBlbnVtIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIHsKICAgICBF
eGlzdGluZ0V4Y2VwdGlvbkVycm9yLAogICAgIFVuc3BlY2lmaWVkRXJyb3IKIH07Ci0gICAgCisK
IGVudW0gU2VyaWFsaXphdGlvbkVycm9yTW9kZSB7IE5vblRocm93aW5nLCBUaHJvd2luZyB9Owog
CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKLWNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4geworY2xhc3MgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gY3JlYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBNZXNzYWdlUG9y
dEFycmF5KiwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNWYWx1ZSwgTWVzc2FnZVBvcnRBcnJheSogPSAwLCBTZXJpYWxpemF0aW9uRXJyb3JN
b2RlID0gVGhyb3dpbmcpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gY3JlYXRlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgTWVzc2FnZVBvcnRBcnJheSos
ICBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKTsKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmUoY29uc3QgU3RyaW5nJik7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBhZG9wdChWZWN0b3I8dWludDhf
dD4mIGJ1ZmZlcikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKGJ1ZmZlcikpOwpAQCAtNzAsMTAgKzcxLDEyIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgU2VyaWFsaXplZFNjcmlwdFZhbHVlKiBudWxsVmFsdWUoKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHVuZGVmaW5lZFZhbHVlKCk7CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBib29sZWFuVmFsdWUoYm9vbCB2
YWx1ZSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBudW1i
ZXJWYWx1ZShkb3VibGUgdmFsdWUpOwogCi0gICAgU3RyaW5nIHRvU3RyaW5nKCk7Ci0gICAgCi0g
ICAgSlNDOjpKU1ZhbHVlIGRlc2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIE1lc3NhZ2VQb3J0QXJyYXkqLCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlID0gVGhy
b3dpbmcpOworICAgIFN0cmluZyB0b1N0cmluZygpOyAvLyBSZXR1cm4gc3RyaW5nIHZhbHVlIG9m
IFN0cmluZ1RhZyBmcm9tIFdpcmVGb3JtYXQKKyAgICBTdHJpbmcgdG9XaXJlU3RyaW5nKCk7IC8v
IFJldHVybiBXaXJlRm9ybWF0IGFzIHN0cmluZyB2YWx1ZQorCisgICAgSlNDOjpKU1ZhbHVlIGRl
c2VyaWFsaXplKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIE1lc3NhZ2VQ
b3J0QXJyYXkqID0gMCwgU2VyaWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKICAgICBK
U1ZhbHVlUmVmIGRlc2VyaWFsaXplKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
LCBNZXNzYWdlUG9ydEFycmF5Kik7CiAgICAgSlNWYWx1ZVJlZiBkZXNlcmlhbGl6ZShKU0NvbnRl
eHRSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbik7CiAKQEAgLTg0LDcgKzg3LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBtYXliZVRocm93RXhjZXB0aW9uSWZTZXJpYWxp
emF0aW9uRmFpbGVkKEpTQzo6RXhlY1N0YXRlKiwgU2VyaWFsaXphdGlvblJldHVybkNvZGUpOwog
ICAgIHN0YXRpYyBib29sIHNlcmlhbGl6YXRpb25EaWRDb21wbGV0ZVN1Y2Nlc3NmdWxseShTZXJp
YWxpemF0aW9uUmV0dXJuQ29kZSk7Ci0gICAgCisKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUo
VmVjdG9yPHVuc2lnbmVkIGNoYXI+Jik7CiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fZGF0
YTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTIxMjks
MTEgKzIxMjksMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAkY2xhc3NOYW1lKiBjYXN0ZWRUaGlzID0gdG8ke2Ns
YXNzTmFtZX0oZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLnRvVGhpc09iamVjdChleGVjKSk7XG4iKTsK
ICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIWNhc3RlZFRoaXMp
XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7XG4iKTsKLSAgICAgICAgICAgIH0gZWxzaWYgKCEkZnVu
Y3Rpb24tPmlzU3RhdGljKSB7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IG15ICRraW5kID0gJGZ1bmN0aW9uLT5pc1N0YXRpYyA/ICJDb25zdHJ1Y3RvciIgOiAiIjsKICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCYke2NsYXNzTmFtZX06OnNfaW5m
bykpXG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIXRo
aXNWYWx1ZS5pbmhlcml0cygmJHtjbGFzc05hbWV9JHtraW5kfTo6c19pbmZvKSlcbiIpOwogICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcihleGVjKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICRjbGFzc05hbWUqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDwkY2xhc3NOYW1lKj4oYXNP
YmplY3QodGhpc1ZhbHVlKSk7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAke2NsYXNzTmFtZX0ke2tpbmR9KiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8JHtj
bGFzc05hbWV9JHtraW5kfSo+KGFzT2JqZWN0KHRoaXNWYWx1ZSkpO1xuIik7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgJiR7Y2xhc3NOYW1lfTo6c19pbmZvKTtcbiIpIHVubGVz
cyAoJGZ1bmN0aW9uLT5pc1N0YXRpYyk7CkBAIC0yMTkwLDM0ICsyMTkxLDM0IEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2Vu
ZGlmXG5cbiIpIGlmICRjb25kaXRpb25hbDsKICAgICAgICAgfQorICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGlmICgkbmVlZHNNYXJrQ2hpbGRyZW4gJiYgISRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbU1hcmtGdW5jdGlvbiJ9KSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFt
ZX0qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8JHtjbGFzc05hbWV9Kj4oY2VsbCk7XG4iKTsKLSAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgJnNfaW5mbyk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpO1xuIik7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpO1xuIik7Ci0gICAgICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIHRoaXNPYmplY3QtPmltcGwoKS0+dmlzaXRKU0V2ZW50TGlzdGVuZXJz
KHZpc2l0b3IpO1xuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJG51bUNhY2hl
ZEF0dHJpYnV0ZXMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgZm9yZWFjaCAoQHskZGF0YU5vZGUt
PmF0dHJpYnV0ZXN9KSB7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRhdHRyaWJ1dGUgPSAkXzsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAodGhpc09iamVjdC0+bV8iIC4gJGF0dHJpYnV0
ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIilcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tXyIg
LiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKTtcbiIpOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgaWYgKCRuZWVkc01hcmtDaGlsZHJlbiAmJiAhJGRhdGFOb2RlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pIHsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ2b2lkICR7Y2xhc3NOYW1lfTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSogdGhp
c09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
ICZzX2luZm8pO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIENPTVBJTEVf
QVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICIgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygp
Lm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTtcbiIpOwor
ICAgICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZlbnRUYXJnZXQi
fSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgdGhpc09iamVjdC0+aW1w
bCgpLT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlzaXRvcik7XG4iKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoJG51bUNhY2hlZEF0dHJpYnV0ZXMgPiAwKSB7CisgICAgICAgICAgICBmb3JlYWNo
IChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKKyAgICAgICAgICAgICAgICBteSAkYXR0cmli
dXRlID0gJF87CisgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNhY2hlZEF0dHJpYnV0ZSJ9KSB7CisgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICh0aGlzT2JqZWN0LT5tXyIgLiAkYXR0cmli
dXRlLT5zaWduYXR1cmUtPm5hbWUgLiAiKVxuIik7CisgICAgICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV8iIC4g
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5uYW1lIC4gIik7XG4iKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7
CiAgICAgICAgIH0KLSAgICAgICAgIyBDYWNoZWQgYXR0cmlidXRlcyBhcmUgaW5kZWVkIGFsbG93
ZWQgd2hlbiB0aGVyZSBpcyBhIGN1c3RvbSBtYXJrL3Zpc2l0Q2hpbGRyZW4gZnVuY3Rpb24uCi0g
ICAgICAgICMgVGhlIGN1c3RvbSBmdW5jdGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBhY2NvdW50IGZv
ciB0aGUgY2FjaGVkIGF0dHJpYnV0ZS4KLSAgICAgICAgIyBVbmNvbW1lbnQgdGhlIGJlbG93IGxp
bmUgdG8gdGVtcG9yYXJpbHkgZW5mb3JjZSBnZW5lcmF0ZWQgbWFyayBmdW5jdGlvbnMgd2hlbiBj
YWNoZWQgYXR0cmlidXRlcyBhcmUgcHJlc2VudC4KLSAgICAgICAgIyBkaWUgIkNhbid0IGdlbmVy
YXRlIGJpbmRpbmcgZm9yIGNsYXNzIHdpdGggY2FjaGVkIGF0dHJpYnV0ZSBhbmQgY3VzdG9tIG1h
cmsuIiBpZiAoKCRudW1DYWNoZWRBdHRyaWJ1dGVzID4gMCkgYW5kICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDdXN0b21NYXJrRnVuY3Rpb24ifSkpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIn1cblxuIik7CiAgICAgfQorICAgICMgQ2FjaGVkIGF0dHJpYnV0ZXMgYXJl
IGluZGVlZCBhbGxvd2VkIHdoZW4gdGhlcmUgaXMgYSBjdXN0b20gbWFyay92aXNpdENoaWxkcmVu
IGZ1bmN0aW9uLgorICAgICMgVGhlIGN1c3RvbSBmdW5jdGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBh
Y2NvdW50IGZvciB0aGUgY2FjaGVkIGF0dHJpYnV0ZS4KKyAgICAjIFVuY29tbWVudCB0aGUgYmVs
b3cgbGluZSB0byB0ZW1wb3JhcmlseSBlbmZvcmNlIGdlbmVyYXRlZCBtYXJrIGZ1bmN0aW9ucyB3
aGVuIGNhY2hlZCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LgorICAgICMgZGllICJDYW4ndCBnZW5l
cmF0ZSBiaW5kaW5nIGZvciBjbGFzcyB3aXRoIGNhY2hlZCBhdHRyaWJ1dGUgYW5kIGN1c3RvbSBt
YXJrLiIgaWYgKCgkbnVtQ2FjaGVkQXR0cmlidXRlcyA+IDApIGFuZCAoJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tTWFya0Z1bmN0aW9uIn0pKTsKIAogICAgIGlmICgkbnVt
Q29uc3RhbnRzID4gMCkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIi8vIENvbnN0YW50
IGdldHRlcnNcblxuIik7CkBAIC0yNTQyLDkgKzI1NDMsMTYgQEAgc3ViIEdlbmVyYXRlUGFyYW1l
dGVyc0NoZWNrCiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIH1cbiIp
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0eXBlIGNvbnZl
cnNpb24gc3VjY2VlZGVkLgotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSlcbiIpOwotICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7
CisgICAgICAgICAgICBpZiAoVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0ZXIpKSB7Cisg
ICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCEkbmFtZSkge1xuIik7
CisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTtcbiIpOworICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSB0
eXBlIGNvbnZlcnNpb24gc3VjY2VlZGVkLgorICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpXG4iKTsKKyAgICAgICAgICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRjb2Rl
R2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXJnVHlwZSkgYW5kIG5vdCAkaW1w
bENsYXNzTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIGlmICghJG5hbWUpIHtcbiIpOwpAQCAtMjgwNCw2ICsyODEyLDcgQEAgbXkgJW5h
dGl2ZVR5cGUgPSAoCiAgICAgIkRPTVN0cmluZ1tdIiA9PiAiRE9NU3RyaW5nTGlzdCoiLAogICAg
ICJET01PYmplY3QiID0+ICJTY3JpcHRWYWx1ZSIsCiAgICAgIk5vZGVGaWx0ZXIiID0+ICJSZWZQ
dHI8Tm9kZUZpbHRlcj4iLAorICAgICJPcHRpb25zT2JqZWN0IiA9PiAiT3B0aW9uc09iamVjdCIs
CiAgICAgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgPT4gIlJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IiwKICAgICAiSURCS2V5IiA9PiAiUmVmUHRyPElEQktleT4iLAogICAgICJib29sZWFu
IiA9PiAiYm9vbCIsCkBAIC0yODg0LDYgKzI4OTMsMTcgQEAgc3ViIElzQXJyYXlUeXBlCiAgICAg
cmV0dXJuICR0eXBlID1+IG0vXFtcXSQvOwogfQogCitzdWIgVHlwZUNhbkZhaWxDb252ZXJzaW9u
Cit7CisgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OworCisgICAgbXkgJHR5cGUgPSAkY29kZUdl
bmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiSURCS2V5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIjsKKyAgICByZXR1cm4gMDsKK30KKwogc3ViIEpTVmFsdWVUb05hdGl2ZQog
ewogICAgIG15ICRzaWduYXR1cmUgPSBzaGlmdDsKQEAgLTI5MjIsNiArMjk0MiwxMSBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6
Y3JlYXRlKFNjcmlwdFZhbHVlKGV4ZWMtPmdsb2JhbERhdGEoKSwgIiAuICR2YWx1ZSAuIikpIjsK
ICAgICB9CiAKKyAgICBpZiAoJHR5cGUgZXEgIk9wdGlvbnNPYmplY3QiIG9yICR0eXBlIGVxICJh
bnkiKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7Ik9wdGlvbnNPYmplY3QuaCJ9ID0gMTsKKyAg
ICAgICAgcmV0dXJuICJPcHRpb25zT2JqZWN0KGV4ZWMsICR2YWx1ZSkiOworICAgIH0KKwogICAg
IGlmICgkdHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiBvciAkdHlwZSBlcSAiYW55Iikg
ewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiLCAk
Y29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3Jl
YXRlKGV4ZWMsICR2YWx1ZSkiOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJDdXJz
b3JXaXRoVmFsdWUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
Q3Vyc29yV2l0aFZhbHVlLmlkbAkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw4IEBACiBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25k
aXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UsCisgICAgICAgIEdlbmVyYXRlVG9KUwogICAgIF0gSURCQ3Vyc29yV2l0aFZhbHVlIDog
SURCQ3Vyc29yIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2YWx1ZTsKICAg
ICB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTkzLDggKzk0LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IG1fZGF0YWJhc2VDYWxsYmFja3M7CiB9OwogCi1JREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
IGNvb3JkaW5hdG9yLCBJREJGYWN0b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmlu
ZyYgdW5pcXVlSWRlbnRpZmllcikKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkK
K0lEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
cmUqIGJhY2tpbmdTdG9yZSwgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3Is
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVu
dGlmaWVyKQorICAgIDogbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KGNvbnRleHQpCisgICAgLCBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiAgICAgLCBtX2lkKEludmFsaWRJZCkKICAgICAs
IG1fbmFtZShuYW1lKQogICAgICwgbV92ZXJzaW9uKCIiKQpAQCAtMjMwLDcgKzIzMiw3IEBAIHZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbigKIAogICAgIFJlZlB0cjxET01T
dHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAg
ICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9yZU5hbWVzLmdldCgpLCBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIHRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbDo6Y3JlYXRlKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgb2JqZWN0U3RvcmVOYW1lcy5n
ZXQoKSwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFLCB0aGlzKTsKICAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwsIGRhdGFiYXNlLCB2ZXJzaW9uLCBjYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24sIGRh
dGFiYXNlLCBtX3ZlcnNpb24pKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpOT1RfQUxMT1dFRF9FUlI7CkBAIC0zMTEsNyArMzEzLDcgQEAgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhYwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90
IGFsbG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KLSAgICByZXR1cm4gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlTmFtZXMsIG1vZGUsIHRoaXMp
OworICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUobV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBvYmplY3RTdG9yZU5hbWVzLCBtb2RlLCB0aGlzKTsKIH0KIAogdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IGNhbGxiYWNrcykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5oCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
MTIgKzQxLDEzIEBAIGNsYXNzIElEQkRhdGFiYXNlOwogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJ
bXBsOwogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDsKIGNsYXNzIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsIDogcHVibGljIElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFj
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQmFja2luZ1N0b3JlKiBkYXRhYmFzZSwg
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogY29vcmRpbmF0b3IsIElEQkZhY3RvcnlCYWNrZW5k
SW1wbCogZmFjdG9yeSwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSog
ZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIGNvb3JkaW5hdG9yLCBJREJGYWN0
b3J5QmFja2VuZEltcGwqIGZhY3RvcnksIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bChuYW1lLCBkYXRhYmFzZSwgY29vcmRpbmF0b3IsIGZhY3RvcnksIHVuaXF1ZUlkZW50aWZpZXIp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNv
bnRleHQsIG5hbWUsIGRhdGFiYXNlLCBjb29yZGluYXRvciwgZmFjdG9yeSwgdW5pcXVlSWRlbnRp
ZmllcikpOwogICAgIH0KICAgICB2aXJ0dWFsIH5JREJEYXRhYmFzZUJhY2tlbmRJbXBsKCk7CiAK
QEAgLTc2LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQ
YXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwogCiBwcml2YXRlOgot
ICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5n
U3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
LCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIp
OwogCiAgICAgdm9pZCBvcGVuSW50ZXJuYWwoKTsKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMo
KTsKQEAgLTkxLDggKzkyLDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBhZGRPYmplY3RT
dG9yZVRvTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+KTsKICAg
ICBzdGF0aWMgdm9pZCByZXNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4sIGNvbnN0IFN0cmluZyYgdmVyc2lvbik7CiAK
KyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAg
ICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgaW50NjQgbV9p
ZDsKKyAgICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV92
ZXJzaW9uOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHJldmlz
aW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyTG9hZGVy
UHJveHkuaCIKQEAgLTk0LDEyICs5NSwxMiBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkZh
Y3Rvcnk6Om9wZW4oCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CiAgICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0
ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCAwKTsK
LSAgICAgICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUsIHJlcXVlc3QuZ2V0KCksIGNvbnRleHQtPnNl
Y3VyaXR5T3JpZ2luKCksIGZyYW1lLCBTdHJpbmcoKSk7CisgICAgICAgIG1fYmFja2VuZC0+b3Bl
bihjb250ZXh0LCBuYW1lLCByZXF1ZXN0LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigp
LCBmcmFtZSwgU3RyaW5nKCkpOwogICAgICAgICByZXR1cm4gcmVxdWVzdDsKICAgICB9CiAjaWYg
RU5BQkxFKFdPUktFUlMpCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIDApOwotICAgIG1fYmFj
a2VuZC0+b3BlbkZyb21Xb3JrZXIobmFtZSwgcmVxdWVzdC5nZXQoKSwgY29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKSwgc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpLCBTdHJpbmco
KSk7CisgICAgbV9iYWNrZW5kLT5vcGVuRnJvbVdvcmtlcihjb250ZXh0LCBuYW1lLCByZXF1ZXN0
LmdldCgpLCBjb250ZXh0LT5zZWN1cml0eU9yaWdpbigpLCBzdGF0aWNfY2FzdDxXb3JrZXJDb250
ZXh0Kj4oY29udGV4dCksIFN0cmluZygpKTsKICAgICByZXR1cm4gcmVxdWVzdDsKICNlbHNlCiAg
ICAgcmV0dXJuIDA7CkBAIC0xMjQsNyArMTI1LDcgQEAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdD4gSURCRgogCiAgICAgUmVmUHRyPElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OmNyZWF0ZShkb2N1bWVudCwgSURCQW55
OjpjcmVhdGVOdWxsKCksICIiKTsKICAgICBHcm91cFNldHRpbmdzKiBncm91cFNldHRpbmdzID0g
ZG9jdW1lbnQtPnBhZ2UoKS0+Z3JvdXAoKS5ncm91cFNldHRpbmdzKCk7Ci0gICAgbV9iYWNrZW5k
LT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4o
KSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0
aCgpKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNvbnRleHQsIG5hbWUsIHJlcXVl
c3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBT
ZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOwogICAgIHJldHVybiByZXF1ZXN0Owog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2Vu
ZEltcGwuY3BwCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
ICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQkxldmVsREJC
YWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCisj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQ
YXJhbS5oPgpAQCAtOTgsMTcgKzk5LDE3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpn
ZXREYXRhYmFzZU4KICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhkYXRhYmFzZU5hbWVzLnJlbGVh
c2UoKSk7CiB9CiAKLXZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcmVjdG9yeSkK
K3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcmVjdG9yeSkKIHsKLSAgICBvcGVuSW50ZXJuYWwobmFtZSwgY2FsbGJhY2tz
LCBzZWN1cml0eU9yaWdpbiwgZGF0YURpcmVjdG9yeSk7CisgICAgb3BlbkludGVybmFsKGNvbnRl
eHQsIG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3RvcnkpOwogfQog
Ci12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZyb21Xb3JrZXIoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4gc2VjdXJpdHlPcmlnaW4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJl
Y3RvcnkpCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3BlbkZyb21Xb3JrZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4s
IFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXJlY3RvcnkpCiB7Ci0gICAgb3Bl
bkludGVybmFsKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXJlY3Rvcnkp
OworICAgIG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3Jp
Z2luLCBkYXRhRGlyZWN0b3J5KTsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQordm9pZCBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyZWN0b3J5KQogewogICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVy
ID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwog
CkBAIC0xMjcsNyArMTI4LDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURh
dGFiYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFj
a2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0
ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQo
KSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShj
b250ZXh0LCBuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
ci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CiAgICAgbV9kYXRhYmFzZUJhY2tlbmRN
YXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CiAgICAgZGF0
YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwogfQpAQCAtMTU0LDcgKzE1
NSw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmEKICAgICByZXR1
cm4gMDsKIH0KIAotdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChjb25z
dCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5
KQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5JbnRlcm5hbChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyogY2Fs
bGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyZWN0b3J5KQogewogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4g
c2VjdXJpdHlPcmlnaW4gPSBwcnBTZWN1cml0eU9yaWdpbjsKICAgICBjb25zdCBTdHJpbmcgdW5p
cXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3Jp
Z2luLmdldCgpKTsKQEAgLTE3NCw3ICsxNzUsNyBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6b3BlbkludGVybmFsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBSZWZQdHI8SURCRGF0
YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y3JlYXRlKGNvbnRleHQsIG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKICAgICBjYWxsYmFj
a3MtPm9uU3VjY2VzcyhSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPihkYXRhYmFz
ZUJhY2tlbmQuZ2V0KCkpLnJlbGVhc2UoKSk7CiAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0
KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgJKHJldmlzaW9u
IDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRE9NU3RyaW5nTGlzdDsK
IGNsYXNzIElEQkJhY2tpbmdTdG9yZTsKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiBj
bGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKIAogY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbXBsIDogcHVibGljIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKQEAgLTU3LDE0ICs1OCwxNCBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpcik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNh
bGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtl
ckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGly
KTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwg
RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJv
bVdvcmtlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJD
YWxsYmFja3MqLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsK
ICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9yZShQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKLSAgICB2b2lkIG9w
ZW5JbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNhbGxiYWNrcyosIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZvaWQgb3Blbklu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNh
bGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCo+IElEQkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXAgbV9k
YXRhYmFzZUJhY2tlbmRNYXA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCShyZXZpc2lvbiAxMDM4ODkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBJREJEYXRhYmFzZTsK
IGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgV29ya2VyQ29udGV4dDsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKQEAgLTU1
LDkgKzU2LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJh
bWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBvcGVu
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIG9wZW5Gcm9tV29ya2VyKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCQ2FsbGJhY2tzKiwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIFdvcmtlckNvbnRleHQqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIElEQkNh
bGxiYWNrcyosIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRnJvbVdvcmtlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBJREJDYWxsYmFja3MqLCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgV29ya2VyQ29udGV4dCosIGNvbnN0IFN0cmluZyYgZGF0
YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4s
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURp
cikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAkocmV2aXNpb24gMTAz
ODg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNSArMzIsNDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCi12b2lkIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zy
b21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4mLCAwPiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9y
PFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cykKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVz
LmgiCisjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgorI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIElEQktleVBhdGhCYWNrZW5k
SW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4sIDA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJl
ZlB0cjxJREJLZXk+LCAwPiYga2V5cykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kIG9uY2UgSlNDIHN1cHBvcnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS4KKyAgICBWZWN0b3I8U3RyaW5nPiBpZGJLZXlQYXRoOworICAgIElEQktleVBhdGhQYXJz
ZUVycm9yIHBhcnNlRXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgsIGlkYktleVBh
dGgsIHBhcnNlRXJyb3IpOworICAgIGlmIChwYXJzZUVycm9yICE9IElEQktleVBhdGhQYXJzZUVy
cm9yTm9uZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgVVNFKEpTQykKKyAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtYWlu
VGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhbHVlcy5z
aXplKCk7IGkrKykKKyAgICAgICAga2V5cy5hcHBlbmQoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJv
bVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWVzW2ldLCBpZGJLZXlQYXRoKSk7
CisjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IElEQktleVBh
dGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCkKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJ
REJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFz
c1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbmNlIEpTQyBzdXBw
b3J0cyBXaXJlRm9ybWF0IGZvciBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCisgICAgVmVjdG9yPFN0
cmluZz4gaWRiS2V5UGF0aDsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBwYXJzZUVycm9yOwor
ICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLCBpZGJLZXlQYXRoLCBwYXJzZUVycm9yKTsKKyAg
ICBpZiAocGFyc2VFcnJvciAhPSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpCisgICAgICAgIHJl
dHVybiAwOworCisjaWYgVVNFKEpTQykKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChjb250ZXh0LCBtYWluVGhyZWFkTm9ybWFsV29ybGQo
KSk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMo
KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShl
eGVjLCBrZXksIHZhbHVlLCBpZGJLZXlQYXRoKTsKKyNlbHNlCiAgICAgcmV0dXJuIDA7CisjZW5k
aWYKIH0KIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCiAjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQktleVBhdGhCYWNr
ZW5kSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCS2V5UGF0
aEJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywx
MyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJREJLZXk7CitjbGFzcyBTY3JpcHRF
eGVjdXRpb25Db250ZXh0OwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwogCiBjbGFzcyBJ
REJLZXlQYXRoQmFja2VuZEltcGwgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlE
QktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mIGtleXMpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQ
YXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoKTsKKyAgICBzdGF0aWMgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNl
cmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIDA+JiB2YWx1ZXMsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cyk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBpbmplY3RJREJLZXlJbnRvU2Vy
aWFsaXplZFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4s
IFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgU3RyaW5nJiBrZXlQYXRo
KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmNwcAkocmV2aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NiArNDAsNyBAQAogI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgogI2luY2x1ZGUgIkxldmVsREJU
cmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAko
cmV2aXNpb24gMTAzODg5KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDIxICsxMDEsMjEgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcgogICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUod2lyZURhdGEpKTsK
IH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBmZXRjaEtleUZyb21LZXlQYXRoKFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3N0YXRpYyBQ
YXNzUmVmUHRyPElEQktleT4gZmV0Y2hLZXlGcm9tS2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBTZXJpYWxpemVkU2NyaXB0VmFsdWUqIHZhbHVlLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4g
dmFsdWVzOwogICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOwogICAgIFZlY3RvcjxSZWZQdHI8SURC
S2V5PiA+IGtleXM7Ci0gICAgSURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJv
bVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0aCwga2V5cyk7CisgICAg
SURCS2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNB
bmRLZXlQYXRoKGNvbnRleHQsIHZhbHVlcywga2V5UGF0aCwga2V5cyk7CiAgICAgaWYgKGtleXMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBBU1NFUlQoa2V5cy5zaXplKCkgPT0g
MSk7CiAgICAgcmV0dXJuIGtleXNbMF0ucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdEtleUludG9LZXlQYXRoKFBhc3NSZWZQdHI8
SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoKQorc3RhdGljIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBpbmplY3RLZXlJbnRvS2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsKLSAgICByZXR1cm4gSURCS2V5UGF0
aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGtleSwgdmFsdWUs
IGtleVBhdGgpOworICAgIHJldHVybiBJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktl
eUludG9TZXJpYWxpemVkVmFsdWUoY29udGV4dCwga2V5LCB2YWx1ZSwga2V5UGF0aCk7CiB9CiAK
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9k
ZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBl
YykKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1
dChQYXNzCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VEX0VS
UjsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNl
bGVjdEtleUZvclB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZSwgSURC
S2V5KiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+JiB2YWx1ZSkKK1Bhc3NSZWZQdHI8SURCS2V5PiBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZWxlY3RLZXlGb3JQdXQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmUsIElE
QktleSoga2V5LCBQdXRNb2RlIHB1dE1vZGUsIElEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYgdmFsdWUpCiB7CiAgICAgaWYgKHB1dE1vZGUgPT0g
Q3Vyc29yVXBkYXRlKQogICAgICAgICBBU1NFUlQoa2V5KTsKQEAgLTE3NywxNCArMTc3LDE0IEBA
IFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmQKICAgICAgICAgaWYgKCFo
YXNLZXlQYXRoKQogICAgICAgICAgICAgcmV0dXJuIG9iamVjdFN0b3JlLT5nZW5BdXRvSW5jcmVt
ZW50S2V5KCk7CiAKLSAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5
RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOworICAgICAg
ICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aChjb250ZXh0
LCB2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAgIGlmIChrZXlQ
YXRoS2V5KSB7CiAgICAgICAgICAgICBvYmplY3RTdG9yZS0+cmVzZXRBdXRvSW5jcmVtZW50S2V5
Q2FjaGUoKTsKICAgICAgICAgICAgIHJldHVybiBrZXlQYXRoS2V5OwogICAgICAgICB9CiAKICAg
ICAgICAgUmVmUHRyPElEQktleT4gYXV0b0luY0tleSA9IG9iamVjdFN0b3JlLT5nZW5BdXRvSW5j
cmVtZW50S2V5KCk7Ci0gICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
QWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChhdXRvSW5jS2V5LCB2YWx1ZSwg
b2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RLZXlJbnRvS2V5UGF0aChjb250ZXh0
LCBhdXRvSW5jS2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7CiAgICAgICAgIGlm
ICghdmFsdWVBZnRlckluamVjdGlvbikgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlIs
ICJUaGUgZ2VuZXJhdGVkIGtleSBjb3VsZCBub3QgYmUgaW5zZXJ0ZWQgaW50byB0aGUgb2JqZWN0
IHVzaW5nIHRoZSBrZXlQYXRoLiIpKTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTk0LDcg
KzE5NCw3IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tlbmQKICAgICB9
CiAKICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRo
S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5
UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21L
ZXlQYXRoKGNvbnRleHQsIHZhbHVlLmdldCgpLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKIAog
ICAgICAgICBpZiAoIWtleVBhdGhLZXkpIHsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJS
LCAiVGhlIGtleSBjb3VsZCBub3QgYmUgZmV0Y2hlZCBmcm9tIHRoZSBrZXlQYXRoLiIpKTsKQEAg
LTIxNywxMCArMjE3LDEwIEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJPYmplY3RTdG9yZUJhY2tl
bmQKICAgICByZXR1cm4ga2V5OwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQordm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5z
YWN0aW9uKQogewogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJw
VmFsdWU7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gc2VsZWN0S2V5Rm9yUHV0KG9iamVjdFN0
b3JlLmdldCgpLCBwcnBLZXkuZ2V0KCksIHB1dE1vZGUsIGNhbGxiYWNrcy5nZXQoKSwgdmFsdWUp
OworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHNlbGVjdEtleUZvclB1dChjb250ZXh0LCBvYmpl
Y3RTdG9yZS5nZXQoKSwgcHJwS2V5LmdldCgpLCBwdXRNb2RlLCBjYWxsYmFja3MuZ2V0KCksIHZh
bHVlKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzMsNyArMjMzLDcg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcgogICAgIGZvciAoSW5k
ZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAh
PSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiYgaW5kZXggPSBpdC0+c2Vjb25kOwogCi0gICAgICAg
IFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQo
KSwgaW5kZXgtPmtleVBhdGgoKSk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0g
ZmV0Y2hLZXlGcm9tS2V5UGF0aChjb250ZXh0LCB2YWx1ZS5nZXQoKSwgaW5kZXgtPmtleVBhdGgo
KSk7CiAgICAgICAgIGlmICghaW5kZXhLZXkpIHsKICAgICAgICAgICAgIGluZGV4S2V5cy5hcHBl
bmQoaW5kZXhLZXkucmVsZWFzZSgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzgwLDgg
KzM4MCw5IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnQKIG5hbWVz
cGFjZSB7CiBjbGFzcyBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgOiBwdWJsaWMgSURCQmFja2luZ1N0
b3JlOjpPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrIHsKIHB1YmxpYzoKLSAgICBQb3B1bGF0ZUlu
ZGV4Q2FsbGJhY2soSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElt
cGw+IGluZGV4KQotICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICBQ
b3B1bGF0ZUluZGV4Q2FsbGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURC
QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4KQorICAg
ICAgICA6IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fYmFj
a2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKICAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJ
ZCkKICAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBt
X2luZGV4KGluZGV4KQpAQCAtMzkxLDcgKzM5Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgY2FsbGJhY2soY29uc3QgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIqIHJlY29yZElkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewogICAg
ICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOwotICAgICAgICBSZWZQdHI8SURC
S2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0KCksIG1f
aW5kZXgtPmtleVBhdGgoKSk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gZmV0
Y2hLZXlGcm9tS2V5UGF0aChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIG9iamVjdFZhbHVlLmdl
dCgpLCBtX2luZGV4LT5rZXlQYXRoKCkpOwogCiAgICAgICAgIGlmICghaW5kZXhLZXkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQxMSw2ICs0MTIsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiBwcml2YXRlOgorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKICAgICBJREJCYWNraW5nU3RvcmUmIG1fYmFja2luZ1N0b3JlOwogICAgIGludDY0
X3QgbV9kYXRhYmFzZUlkOwogICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwpAQCAtNDE4LDkg
KzQyMCw5IEBAIHByaXZhdGU6CiB9OwogfQogCi1ib29sIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnBvcHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4KQorYm9vbCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwb3B1bGF0
ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQkJhY2tpbmdTdG9yZSYg
YmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKIHsKLSAgICBQb3B1bGF0ZUlu
ZGV4Q2FsbGJhY2sgY2FsbGJhY2soYmFja2luZ1N0b3JlLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9y
ZUlkLCBpbmRleCk7CisgICAgUG9wdWxhdGVJbmRleENhbGxiYWNrIGNhbGxiYWNrKGNvbnRleHQs
IGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXgpOwogICAgIGlm
ICghYmFja2luZ1N0b3JlLmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBjYWxsYmFjaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTQ1OSw3ICs0NjEsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4gSURCCiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCit2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0
X3QgaWQ7CiAgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4
KG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+bmFt
ZSgpLCBpbmRleC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGluZGV4LT5tdWx0aUVudHJ5
KCksIGlkKSkgewpAQCAtNDY5LDcgKzQ3MSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Y3JlYXRlSW4KIAogICAgIGluZGV4LT5zZXRJZChpZCk7CiAKLSAgICBpZiAoIXBvcHVs
YXRlSW5kZXgoKm9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmUtPm1fZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmUtPm1faWQsIGluZGV4KSkgeworICAgIGlmICghcG9wdWxhdGVJ
bmRleChjb250ZXh0LCAqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLCBvYmplY3RTdG9yZS0+
bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+bV9pZCwgaW5kZXgpKSB7CiAgICAgICAgIHRyYW5z
YWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgJKHJldmlz
aW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5z
aWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgY291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCi0g
ICAgc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tl
bmRJbXBsPik7CisgICAgc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRleChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgSURCQmFja2luZ1N0b3JlJiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4pOwogCiBwcml2YXRl
OgogICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KTsKQEAgLTg3LDcgKzg3LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGxvYWRJbmRleGVzKCk7CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGdlbkF1
dG9JbmNyZW1lbnRLZXkoKTsKICAgICB2b2lkIHJlc2V0QXV0b0luY3JlbWVudEtleUNhY2hlKCkg
eyBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSAtMTsgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QktleT4gc2VsZWN0S2V5Rm9yUHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBJREJLZXkq
LCBQdXRNb2RlLCBJREJDYWxsYmFja3MqLCBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiYp
OworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gc2VsZWN0S2V5Rm9yUHV0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgSURCS2V5KiwgUHV0
TW9kZSwgSURCQ2FsbGJhY2tzKiwgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4mKTsKIAog
ICAgIHN0YXRpYyB2b2lkIGdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogICAgIHN0YXRpYyB2b2lkIHB1dEludGVybmFs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURC
S2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4pOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCShyZXZpc2lvbiAxMDM4
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMyArMzYsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGw6OmNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2ln
bmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQorUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRE9NU3RyaW5nTGlzdCog
b2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
KiBkYXRhYmFzZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwob2JqZWN0U3RvcmVzLCBtb2RlLCBkYXRhYmFzZSkpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChjb250ZXh0LCBvYmplY3RTdG9yZXMs
IG1vZGUsIGRhdGFiYXNlKSk7CiB9CiAKLUlEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKLSAgICA6IG1f
b2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZXMpCitJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCisgICAgOiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoY29udGV4dCkKKyAgICAsIG1fb2JqZWN0U3RvcmVOYW1lcyhvYmplY3RTdG9yZXMpCiAg
ICAgLCBtX21vZGUobW9kZSkKICAgICAsIG1fc3RhdGUoVW51c2VkKQogICAgICwgbV9kYXRhYmFz
ZShkYXRhYmFzZSkKQEAgLTIxNyw3ICsyMTgsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OnRhc2tUaW1lCiAgICAgICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiB0YXNrKHF1ZXVlLmZpcnN0KCkucmVsZWFzZSgpKTsKICAgICAgICAgcXVldWUucmVtb3Zl
Rmlyc3QoKTsKICAgICAgICAgbV9wZW5kaW5nRXZlbnRzKys7Ci0gICAgICAgIHRhc2stPnBlcmZv
cm1UYXNrKDApOworICAgICAgICB0YXNrLT5wZXJmb3JtVGFzayhtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7CiAKIGNs
YXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwgOiBwdWJsaWMgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsPiBjcmVhdGUoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNp
Z25lZCBzaG9ydCBtb2RlLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsKCk7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmKTsKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcnVuKCk7CiAKIHBy
aXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmpl
Y3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsK
KyAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBE
T01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIElEQkRhdGFi
YXNlQmFja2VuZEltcGwqKTsKIAogICAgIGVudW0gU3RhdGUgewogICAgICAgICBVbnVzZWQsIC8v
IENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCkBAIC03NSw2ICs3NSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+Kik7CiAgICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7CiAKKyAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+IG1fb2JqZWN0U3RvcmVOYW1lczsKICAgICB1bnNpZ25lZCBzaG9ydCBtX21vZGU7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0LmgJKHJldmlzaW9uIDEwMzg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBwdWJs
aWM6CiAKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBpbnRlcmZhY2VOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBJREJWZXJzaW9uQ2hhbmdlUmVx
dWVzdCogdG9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCgpIHsgcmV0dXJuIHRoaXM7IH0KIAogICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoYmxvY2tlZCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCShy
ZXZpc2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQCBtb2R1bGUgc3Rv
cmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RB
VEFCQVNFLAorICAgICAgICBHZW5lcmF0ZVRvSlMsCiAgICAgICAgIEV2ZW50VGFyZ2V0CiAgICAg
XSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3QgewogICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L2Nocm9taXVtL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCShyZXZp
c2lvbiAxMDM4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQktleVBh
dGhCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxNyBAQAogCiAj
aW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdXBwb3J0LmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSURCS2V5UGF0aEJhY2tlbmRJ
bXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgMD4mIHZhbHVlcywgIGNvbnN0IFN0
cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYga2V5cykKK3ZvaWQgSURC
S2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRL
ZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4sIDA+JiB2YWx1ZXMsICBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZl
Y3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mIGtleXMpCiB7CiAgICAgUGxhdGZvcm1TdXBwb3J0Ojpj
cmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0
aCwga2V5cyk7CiB9CiAKLVBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJLZXlQ
YXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgpCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
SURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKIHsK
ICAgICByZXR1cm4gUGxhdGZvcm1TdXBwb3J0OjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZh
bHVlKGtleSwgdmFsdWUsIGtleVBhdGgpOwogfQo=
</data>
<flag name="review"
          id="121201"
          type_id="1"
          status="-"
          setter="jsbell"
    />
    <flag name="commit-queue"
          id="121202"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161701</attachid>
            <date>2012-08-31 08:01:34 -0700</date>
            <delta_ts>2012-08-31 09:07:40 -0700</delta_ts>
            <desc>Implement IndexedDB for JSC</desc>
            <filename>jsc-indexeddb.patch</filename>
            <type>text/plain</type>
            <size>37737</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MzY5ODJjLi4zMTE3OGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjgg
QEAKKzIwMTItMDgtMzEgIE1pY2hhZWwgUHJ1ZXR0ICA8bWljaGFlbEA2OGsub3JnPgorCisgICAg
ICAgIEltcGxlbWVudCBJbmRleGVkIERhdGFiYXNlIGZvciBKU0MuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTExMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZWRkYi8q
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkFueS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnBvc3RTdWNjZXNzSGFu
ZGxlckNhbGxiYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRo
VmFsdWUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbDoK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGw6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQktleS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aEJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3Jl
YXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFs
dWUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGw6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVO
ZWVkZWRFdmVudC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5pZGw6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHA6CisgICAgICAgIChKU0F1eGlsaWFyeUNvbnRleHQpOgorICAgICAgICAoSlNBdXhpbGlh
cnlDb250ZXh0OjpzaGFyZWQpOgorICAgICAgICAoSlNBdXhpbGlhcnlDb250ZXh0OjpleGVjKToK
KyAgICAgICAgKEpTQXV4aWxpYXJ5Q29udGV4dDo6SlNBdXhpbGlhcnlDb250ZXh0KToKKyAgICAg
ICAgKEpTQXV4aWxpYXJ5Q29udGV4dDo6fkpTQXV4aWxpYXJ5Q29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXROdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjplbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJ
REJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmlkYktleVRvSlNW
YWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRGljdGlvbmFyeS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojp0
cnlHZXRQcm9wZXJ0eUFuZFJlc3VsdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJDdXJz
b3JXaXRoVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSURCS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJp
bmcpOgorICAgICAgICAqIGRvbS9ET01TdHJpbmdMaXN0LmlkbDoKKwogMjAxMi0wOC0zMSAgTWls
aWFuIFdvbGZmICA8bWlsaWFuLndvbGZmQGtkYWIuY29tPgogCiAgICAgICAgIFtRdF0gUU5YIGJ1
aWxkIGZhaWxzIGR1ZSB0byBtaXNzaW5nIE9wZW5HTCBFUyBkZWZpbmVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCA4MGM2MzZmLi41YWJjMjUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTQ2NywxMiArNDY3LDE2IEBAIHdlYmNvcmVfYnVpbHRfc291cmNlcyAr
PSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQktleVJhbmdlLmggXAogCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNJREJPYmplY3RTdG9yZS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNJREJPYmplY3RTdG9yZS5oIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURC
T3BlbkRCUmVxdWVzdC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJPcGVuREJS
ZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJSZXF1ZXN0LmNwcCBcCiAJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlJlcXVlc3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0lEQlRyYW5zYWN0aW9uLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmggXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJVcGdyYWRlTmVlZGVk
RXZlbnQuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVXBncmFkZU5lZWRlZEV2
ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW1hZ2VEYXRhLmNwcCBcCkBAIC0xMjAz
LDYgKzEyMDcsNyBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9p
bmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgXAogCSQoV2ViQ29yZSkvTW9k
dWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZS5pZGwgXAogCSQoV2Vi
Q29yZSkvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5pZGwgXApAQCAtMjE5NCw2ICsy
MTk5LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01XcmFwcGVyV29ybGQuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250
cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmgg
XAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggXAogCVNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIFwKQEAgLTIy
OTEsNyArMjI5Nyw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
QW55Q3VzdG9tLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JX
aXRoVmFsdWVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktl
eUN1c3RvbS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVx
dWVzdEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ltYWdlQ29uc3RydWN0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lt
YWdlQ29uc3RydWN0b3IuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJBbnkuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QW55LmlkbAppbmRleCBkZDUxYzRkLi41Y2NhYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwKQEAgLTI3LDcgKzI3LDggQEAgbW9kdWxlIHN0b3JhZ2Ug
ewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RSwKLSAgICAgICAgQ3VzdG9tVG9KU09iamVjdAorICAgICAgICBDdXN0b21Ub0pTT2JqZWN0LAor
ICAgICAgICBKU05vU3RhdGljVGFibGVzCiAgICAgXSBJREJBbnkgewogICAgICAgICAvLyBUaGlz
IHNwYWNlIGlzIGludGVudGlvbmFsbHkgbGVmdCBibGFuay4KICAgICB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggZDczZDE0Ni4uMzZm
NjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
aWRsCkBAIC0yNyw2ICsyNyw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBb
CiAgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIEpTTm9TdGF0
aWNUYWJsZXMKICAgICBdIElEQkN1cnNvciB7CiAgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5
IHJlbW92ZSBsZWdhY3kgZW51bSBjb25zdGFudHMsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODUzMTUKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkVY
VCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaAppbmRleCAyYjc2ZGQ0Li5jM2Q1OTEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5j
dGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHByZWZldGNo
UmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcyk7Ci0gICAgdmly
dHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHt9
CiAKICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3It
PmtleSgpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAppbmRleCA1MTJlYTQw
Li5hZDFkMDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDdXJzb3JXaXRoVmFsdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKQEAgLTI2LDggKzI2LDkgQEAKIG1vZHVsZSBzdG9y
YWdlIHsKIAogICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAgICAgSlNO
b1N0YXRpY1RhYmxlcwogICAgIF0gSURCQ3Vyc29yV2l0aFZhbHVlIDogSURCQ3Vyc29yIHsKLSAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtWOEN1c3RvbUdldHRlcl0gSURCQW55IHZhbHVlOwor
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW1Y4Q3VzdG9tR2V0dGVyLCBKU0N1c3RvbUdldHRl
ciwgQ2FjaGVkQXR0cmlidXRlXSBJREJBbnkgdmFsdWU7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAppbmRleCBkMjUzZTRk
Li5mYzEwMGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
RGF0YWJhc2UuaWRsCkBAIC0yOSw3ICsyOSw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBpbnRl
cmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgICAgICBB
Y3RpdmVET01PYmplY3QsCi0gICAgICAgIEV2ZW50VGFyZ2V0CisgICAgICAgIEV2ZW50VGFyZ2V0
LAorICAgICAgICBKU05vU3RhdGljVGFibGVzCiAgICAgXSBJREJEYXRhYmFzZSB7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIElEQkFueSB2ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCmluZGV4IDY3ZDgxMWMuLjcx
MDhlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlRXhjZXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwKQEAgLTI3LDcgKzI3LDggQEAgbW9kdWxlIHN0b3Jh
Z2UgewogCiAgICAgZXhjZXB0aW9uIFsKICAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRB
QkFTRSwKLSAgICAgICAgRG9Ob3RDaGVja0NvbnN0YW50cworICAgICAgICBEb05vdENoZWNrQ29u
c3RhbnRzLAorICAgICAgICBKU05vU3RhdGljVGFibGVzCiAgICAgXSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbiB7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0ICAgY29k
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3Rv
cnkuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwK
aW5kZXggYmY3MWEyZC4uMDBjMWVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRmFjdG9yeS5pZGwKQEAgLTI2LDcgKzI2LDggQEAKIG1vZHVsZSBzdG9yYWdl
IHsKIAogICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAgICAgSlNOb1N0
YXRpY1RhYmxlcwogICAgIF0gSURCRmFjdG9yeSB7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBJbXBsZW1lbnRlZEFzPWdldERhdGFiYXNlTmFtZXNdIElEQlJlcXVl
c3Qgd2Via2l0R2V0RGF0YWJhc2VOYW1lcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleC5pZGwKaW5kZXggNzc4OTIzNi4uOTk5YTU4ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbApAQCAtMjYsNyArMjYs
OCBAQAogbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0
aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFC
QVNFLAorICAgICAgICBKU05vU3RhdGljVGFibGVzCiAgICAgXSBJREJJbmRleCB7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKaW5kZXggMTQ2NGQ5Zi4uYzA3MWVmMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsCkBAIC0yNyw3ICsyNyw4IEBA
IG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UsCi0gICAgICAgIEN1c3RvbVRvSlNPYmplY3QKKyAgICAgICAgQ3Vz
dG9tVG9KU09iamVjdCwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwogICAgIF0gSURCS2V5IHsK
ICAgICAgICAgLy8gVGhpcyBzcGFjZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsuCiAgICAg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBh
dGhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXlQYXRoQmFja2VuZEltcGwuY3BwCmluZGV4IDY0YTFmYmMuLjU5MTk3NTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNrZW5kSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aEJhY2tl
bmRJbXBsLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNo
YWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSURC
S2V5UGF0aEJhY2tlbmRJbXBsLmgiCiAKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgi
CiAKQEAgLTM4LDE1ICs0MCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSURC
S2V5UGF0aEJhY2tlbmRJbXBsOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRL
ZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgMD4mLCBj
b25zdCBJREJLZXlQYXRoJiwgVmVjdG9yPFJlZlB0cjxJREJLZXk+LCAwPiYpCit2b2lkIElEQktl
eVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5
UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIDA+JiB2YWx1
ZXMsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4m
IGtleXMpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBvbmNlIEpTQyBz
dXBwb3J0cyBXaXJlRm9ybWF0IGZvciBTZXJpYWxpemVkU2NyaXB0VmFsdWUuCisgICAgZm9yICh1
bnNpZ25lZCBpPTA7IGk8dmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGtleXMuYXBwZW5k
KFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVl
c1tpXSwga2V5UGF0aCkpOworICAgIH0KIH0KIAotUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IElEQktleVBhdGhCYWNrZW5kSW1wbDo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRW
YWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiwgY29uc3QgSURCS2V5UGF0aCYpCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
SURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2
YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kIG9uY2UgSlNDIHN1cHBvcnRzIFdpcmVGb3JtYXQgZm9yIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS4KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+KCk7CisgICAgcmV0dXJuIFdlYkNvcmU6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFs
dWUoa2V5LCB2YWx1ZSwga2V5UGF0aCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbAppbmRleCAxNjFjYjljLi4zMGMxMWU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRs
CkBAIC0yNiw3ICsyNiw4IEBACiBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwot
ICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKICAgICBdIElEQktl
eVJhbmdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBsb3dlcjsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSB1cHBlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAppbmRleCA5OWQ4Njg0Li5h
MjhlZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuaWRsCkBAIC0yNiw3ICsyNiw4IEBACiBtb2R1bGUgc3RvcmFnZSB7CiAKICAg
ICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAg
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIEpTTm9TdGF0aWNUYWJs
ZXMKICAgICBdIElEQk9iamVjdFN0b3JlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtU
cmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBuYW1lOwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW0ltcGxlbWVudGVkQXM9a2V5UGF0aEFueV0gSURCQW55IGtleVBh
dGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVu
REJSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5E
QlJlcXVlc3QuaWRsCmluZGV4IDFlNDZhNTIuLjk1Yjc4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCkBAIC0yOCw3
ICsyOCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25k
aXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgICAgICBBY3RpdmVET01PYmplY3QsCi0gICAg
ICAgIEV2ZW50VGFyZ2V0CisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICAgICBKU05vU3RhdGlj
VGFibGVzCiAgICAgXSBJREJPcGVuREJSZXF1ZXN0IDogSURCUmVxdWVzdCB7CiAgICAgICAgIGF0
dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmxvY2tlZDsKICAgICAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb251cGdyYWRlbmVlZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAppbmRleCAxZTQ5NDE1Li40ZDNmMjcxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbApAQCAtMzIsNyAr
MzIsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0
aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKICAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAg
ICBFdmVudFRhcmdldAorICAgICAgICBFdmVudFRhcmdldCwKKyAgICAgICAgSlNOb1N0YXRpY1Rh
YmxlcwogICAgIF0gSURCUmVxdWVzdCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJB
bnkgcmVzdWx0CiAgICAgICAgICAgICBnZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlv
bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5pZGwKaW5kZXggYjVjMjA3ZC4uMDdlMzYxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbApAQCAtMjksNyArMjksOCBA
QCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKICAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBFdmVu
dFRhcmdldAorICAgICAgICBFdmVudFRhcmdldCwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwog
ICAgIF0gSURCVHJhbnNhY3Rpb24gewogICAgICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSByZW1v
dmUgbGVnYWN5IGVudW0gY29uc3RhbnRzLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg1MzE1CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05M
WSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJV
cGdyYWRlTmVlZGVkRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbAppbmRleCAzMjk5OTU0Li5hY2UxYTE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZl
bnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVO
ZWVkZWRFdmVudC5pZGwKQEAgLTI3LDcgKzI3LDggQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAg
aW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICAg
ICAgSW50ZXJmYWNlTmFtZT1JREJWZXJzaW9uQ2hhbmdlRXZlbnQKKyAgICAgICAgSW50ZXJmYWNl
TmFtZT1JREJWZXJzaW9uQ2hhbmdlRXZlbnQsCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKICAg
ICBdIElEQlVwZ3JhZGVOZWVkZWRFdmVudCA6IEV2ZW50IHsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uOwogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIG5ld1ZlcnNpb247CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50Lmlk
bAppbmRleCBjNmE0MTcxLi4yYWEzMjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKQEAgLTI2LDcg
KzI2LDggQEAKIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCi0gICAgICAgIENv
bmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9E
QVRBQkFTRSwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwogICAgIF0gSURCVmVyc2lvbkNoYW5n
ZUV2ZW50IDogRXZlbnQgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZl
cnNpb247CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAppbmRleCAyYWEyMzhhLi42NzI3
NjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCkBAIC0yOCw3ICsyOCw4IEBAIG1vZHVsZSBz
dG9yYWdlIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RB
VEFCQVNFLAogICAgICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgICAgIEV2ZW50VGFyZ2V0Cisg
ICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICAgICBKU05vU3RhdGljVGFibGVzCiAgICAgXSBJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3QgewogICAgICAgICBhdHRyaWJ1dGUgRXZl
bnRMaXN0ZW5lciBvbmJsb2NrZWQ7CiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggYjU1ZTc2Yi4uNWExNGZkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQ
cnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjksMjEgKzMwLDI0NiBAQAogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKIAog
I2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNpbmNsdWRlICJK
U0lEQktleS5oIgorCisjaW5jbHVkZSA8QVBJU2hpbXMuaD4KKyNpbmNsdWRlIDxBUElDYXN0Lmg+
CisjaW5jbHVkZSA8RGF0ZUluc3RhbmNlLmg+CisjaW5jbHVkZSA8SlNDb250ZXh0UmVmLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIEpTQXV4aWxpYXJ5
Q29udGV4dAoreworcHVibGljOgorICAgIHN0YXRpYyBKU0F1eGlsaWFyeUNvbnRleHQmIHNoYXJl
ZCgpCisgICAgeworICAgICAgICBzdGF0aWMgSlNBdXhpbGlhcnlDb250ZXh0JiBzX2NvbnRleHQg
PSAqbmV3IEpTQXV4aWxpYXJ5Q29udGV4dCgpOworICAgICAgICByZXR1cm4gc19jb250ZXh0Owor
ICAgIH0KKworICAgIEV4ZWNTdGF0ZSogZXhlYygpIHsgcmV0dXJuIHRvSlMobV9jb250ZXh0KTsg
fQorCitwcml2YXRlOgorICAgIEpTR2xvYmFsQ29udGV4dFJlZiBtX2NvbnRleHQ7CisKKyAgICBK
U0F1eGlsaWFyeUNvbnRleHQoKQorICAgIHsKKyAgICAgICAgbV9jb250ZXh0ID0gSlNHbG9iYWxD
b250ZXh0Q3JlYXRlKDApOworICAgIH0KKworICAgIH5KU0F1eGlsaWFyeUNvbnRleHQoKQorICAg
IHsKKyAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShtX2NvbnRleHQpOworICAgICAgICBt
X2NvbnRleHQgPSAwOworICAgIH0KK307CisKK30KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Q
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heGltdW1EZXB0
aCA9IDIwMDA7CisKK3N0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZh
bHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPEpTQXJyYXkqPiYgc3Rh
Y2spCiB7Ci0gICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gSURCS2V5Ojpj
cmVhdGVJbnZhbGlkKCk7Ci0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSAmJiAhaXNuYW4odmFsdWUudG9OdW1iZXIoZXhlYykpKQogICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIodmFsdWUudG9OdW1iZXIoZXhlYykpOwogICAgIGlmICh2
YWx1ZS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcodmFs
dWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50
IGRhdGVzLgorICAgIGlmICh2YWx1ZS5pbmhlcml0cygmRGF0ZUluc3RhbmNlOjpzX2luZm8pICYm
ICFpc25hbih2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkpKQorICAgICAgICByZXR1cm4gSURCS2V5
OjpjcmVhdGVEYXRlKHZhbHVlVG9EYXRlKGV4ZWMsIHZhbHVlKSk7CisgICAgaWYgKHZhbHVlLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsK
KyAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpIHx8IG9iamVjdC0+aW5oZXJpdHMoJkpTQXJy
YXk6OnNfaW5mbykpIHsKKyAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheShvYmpl
Y3QpOworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gYXJyYXktPmxlbmd0aCgpOworCisg
ICAgICAgICAgICBpZiAoc3RhY2suY29udGFpbnMoYXJyYXkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICAgICAgaWYgKHN0YWNrLnNpemUoKSA+PSBtYXhpbXVtRGVwdGgpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBzdGFjay5hcHBlbmQoYXJyYXkp
OworCisgICAgICAgICAgICBJREJLZXk6OktleUFycmF5IHN1YmtleXM7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGk9MDsgaTxsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFs
dWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleChpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SURC
S2V5PiBzdWJrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgaXRlbSwgc3RhY2spOwor
ICAgICAgICAgICAgICAgIGlmICghc3Via2V5KQorICAgICAgICAgICAgICAgICAgICBzdWJrZXlz
LmFwcGVuZChJREJLZXk6OmNyZWF0ZUludmFsaWQoKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzdWJrZXlzLmFwcGVuZChzdWJrZXkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICByZXR1cm4g
SURCS2V5OjpjcmVhdGVBcnJheShzdWJrZXlzKTsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1
cm4gMDsKIH0KIAorUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVmVjdG9yPEpTQXJyYXkqPiBzdGFj
azsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywg
dmFsdWUsIHN0YWNrKTsKKyAgICBpZiAoa2V5KQorICAgICAgICByZXR1cm4ga2V5OworICAgIHJl
dHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKK30KKworc3RhdGljIEpTVmFsdWUgZ2V0TnRo
VmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwKKyAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOworICAgIEFTU0VSVChpbmRleCA8
PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGk9MDsgaTxpbmRl
eDsgaSsrKSB7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUuaXNTdHJpbmcoKSAmJiBrZXlQYXRo
RWxlbWVudHNbaV0gPT0gImxlbmd0aCIpCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoY3Vy
cmVudFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT5sZW5ndGgoKSk7CisgICAgICAgIGlmICghY3VycmVu
dFZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGtleVBhdGhF
bGVtZW50c1tpXS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY3VycmVudFZhbHVlID0gYXNPYmpl
Y3QoY3VycmVudFZhbHVlKS0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOworICAgIH0KKyAgICByZXR1
cm4gY3VycmVudFZhbHVlOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlE
QktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsK
KyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7Cisg
ICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICBFeGVj
U3RhdGUqIGV4ZWMgPSBKU0F1eGlsaWFyeUNvbnRleHQ6OnNoYXJlZCgpLmV4ZWMoKTsKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgp
OworCisgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKKworICAgIEpTVmFsdWUganNW
YWx1ZSA9IHZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIGpzVmFs
dWUgPSBnZXROdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBqc1ZhbHVlLCBrZXlQYXRoRWxlbWVudHMs
CisgICAgICAgIGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGlmIChqc1ZhbHVlLmlzVW5k
ZWZpbmVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9t
VmFsdWUoZXhlYywganNWYWx1ZSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJL
ZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gcHJwVmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURC
X1RSQUNFKCJjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCIpOworICAg
IEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7CisKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOworCisgICAgaWYgKGtleVBhdGgudHlwZSgpID09IElE
QktleVBhdGg6OkFycmF5VHlwZSkgeworICAgICAgICBJREJLZXk6OktleUFycmF5IHJlc3VsdDsK
KyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJheSgpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGk9MDsgaTxhcnJheS5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1
ZUFuZEtleVBhdGgodmFsdWUsIGFycmF5W2ldKTsKKyAgICAgICAgICAgIGlmICgha2V5KQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7Cisg
ICAgfQorCisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5
cGUpOworICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0
aCh2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogZW5zdXJl
TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogcm9vdE9iamVjdCwK
KyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICBKU09iamVjdCogY3VycmVudE9iamVjdCA9IHJvb3RPYmplY3Q7CisgICAgZm9y
ICh1bnNpZ25lZCBpPTA7IGk8aW5kZXg7IGkrKykgeworICAgICAgICBjb25zdCBTdHJpbmcmIGtl
eVBhdGhFbGVtZW50ID0ga2V5UGF0aEVsZW1lbnRzW2ldOworICAgICAgICBJZGVudGlmaWVyIGlk
ZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwga2V5UGF0aEVsZW1lbnQpOworICAgICAgICBK
U1ZhbHVlIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRPYmplY3QtPmdldChleGVjLCBpZGVudGlmaWVy
KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpIHx8ICFjdXJyZW50VmFsdWUuaXNP
YmplY3QoKSkgeworICAgICAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRPYmplY3QtPnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50
aWZpZXIsCisgICAgICAgICAgICAgICAgSlNWYWx1ZShvYmplY3QpKTsKKyAgICAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjdXJyZW50T2JqZWN0ID0gb2JqZWN0OworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgY3VycmVudE9iamVjdCA9IGN1cnJlbnRWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBjdXJyZW50T2JqZWN0OworfQorCitQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RSQUNFKCJpbmpl
Y3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlIik7CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBl
KCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0
aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNl
S2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBB
U1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIGlmIChrZXlQ
YXRoRWxlbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEV4ZWNTdGF0
ZSogZXhlYyA9IEpTQXV4aWxpYXJ5Q29udGV4dDo6c2hhcmVkKCkuZXhlYygpOworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCk7CisK
KyAgICBBUElFbnRyeVNoaW0gZW50cnlTaGltKGV4ZWMpOworCisgICAgSlNWYWx1ZSBqc1ZhbHVl
ID0gdmFsdWUtPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgaWYgKCFqc1Zh
bHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIEpTT2JqZWN0KiBwYXJlbnQg
PSBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBhc09iamVjdChqc1ZhbHVlKSwga2V5UGF0
aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7CisgICAgaWYgKCFwYXJlbnQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwga2V5UGF0aEVsZW1lbnRzLmxhc3QoKSk7CisgICAgcGFyZW50LT5wdXRE
aXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUsCisgICAgICAgIGlkYktleVRv
SlNWYWx1ZShleGVjLCBnbG9iYWxPYmplY3QsIGtleS5nZXQoKSkpOworCisgICAgcmV0dXJuIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGV4ZWMsIGpzVmFsdWUpOworfQorCitKU1ZhbHVl
IGlkYktleVRvSlNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIElEQktleSoga2V5KQoreworICAgIGlmICgha2V5KQorICAgICAgICByZXR1cm4ganNO
dWxsKCk7CisKKyAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CisgICAgY2FzZSBJREJLZXk6OkFy
cmF5VHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgSURCS2V5OjpLZXlBcnJheSYg
aW5BcnJheSA9IGtleS0+YXJyYXkoKTsKKyAgICAgICAgICAgIHNpemVfdCBzaXplID0gaW5BcnJh
eS5zaXplKCk7CisgICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5
QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LCBzaXplKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgSURCS2V5KiBhcnJheUtl
eSA9IGluQXJyYXkuYXQoaSkuZ2V0KCk7CisgICAgICAgICAgICAgICAgb3V0QXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGksIGlkYktleVRvSlNWYWx1ZShleGVjLCBnbG9iYWxPYmplY3QsIGFy
cmF5S2V5KSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUob3V0QXJyYXkpOworICAgICAgICB9CisgICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6Cisg
ICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBrZXktPnN0cmluZygpKTsKKyAgICBjYXNlIElE
QktleTo6RGF0ZVR5cGU6CisgICAgICAgIHJldHVybiBqc0RhdGVPck51bGwoZXhlYywga2V5LT5k
YXRlKCkpOworICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgorICAgICAgICByZXR1cm4ganNO
dW1iZXIoa2V5LT5udW1iZXIoKSk7CisgICAgY2FzZSBJREJLZXk6Ok1pblR5cGU6CisgICAgY2Fz
ZSBJREJLZXk6OkludmFsaWRUeXBlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCmluZGV4IDhlMGM5YzUu
LjlhM2U4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmgKQEAgLTI5LDcgKzI5LDkgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAj
aW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIgCisKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw2ICszOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIElEQktleTsKIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CitQYXNzUmVmUHRyPElEQktleT4gY3Jl
YXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+LCBjb25zdCBJREJLZXlQYXRoJik7CitQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShQYXNzUmVmUHRy
PElEQktleT4sIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgY29uc3QgSURCS2V5
UGF0aCYpOworSlNDOjpKU1ZhbHVlIGlkYktleVRvSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBJREJLZXkqKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAppbmRleCBkNGUyMjY0Li43MzA0ZWQyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKQEAgLTUzLDEyICs1Mywx
NiBAQCBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpTRGljdGlvbmFyeTo6dHJ5R2V0
UHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydAogICAgIGlmICghbV9pbml0aWFsaXplck9iamVj
dC5nZXQoKS0+Z2V0UHJvcGVydHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwgc2xvdCkpCiAgICAg
ICAgIHJldHVybiBOb1Byb3BlcnR5Rm91bmQ7CiAKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBtX2V4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CisgICAg
fQogCiAgICAgZmluYWxSZXN1bHQgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmllcik7
Ci0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKG1fZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgbV9leGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAgIH0KIAogICAgIHJldHVybiBQcm9wZXJ0eUZvdW5k
OwogfQpAQCAtMTA2LDggKzExMCwxMCBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgU3RyaW5nJiByZXN1bHQpCiAKIHZvaWQg
SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KQogewotICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKGV4ZWMs
IHZhbHVlLCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnku
aAppbmRleCBmZWJlOTI0Li42MzMwZGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RpY3Rpb25hcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RpY3Rpb25hcnkuaApAQCAtMTQ1LDggKzE0NSwxMCBAQCBKU0RpY3Rpb25hcnk6OkdldFByb3Bl
cnR5UmVzdWx0IEpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHlBbmRSZXN1bHQoY29uc3QgY2hh
cgogICAgICAgICBSZXN1bHQgcmVzdWx0OwogICAgICAgICBjb252ZXJ0VmFsdWUobV9leGVjLCB2
YWx1ZSwgcmVzdWx0KTsKIAotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIG1fZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247Cisg
ICAgICAgIH0KIAogICAgICAgICBzZXR0ZXIoY29udGV4dCwgcmVzdWx0KTsKICAgICAgICAgYnJl
YWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldp
dGhWYWx1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNv
cldpdGhWYWx1ZUN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YWNmN2FlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0lEQkN1
cnNvcldpdGhWYWx1ZS5oIgorCisjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNJREJBbnkuaCIKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTSURCQ3Vyc29y
V2l0aFZhbHVlOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgSURCQ3Vyc29y
KiBjdXJzb3IgPSBpbXBsKCk7CisgICAgaWYgKCFjdXJzb3ItPnZhbHVlSXNEaXJ0eSgpKSB7Cisg
ICAgICAgIGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gbV92YWx1ZS5nZXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBjYWNoZWRWYWx1ZTsKKyAgICB9CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGN1cnNvci0+dmFsdWUoKS5nZXQoKSk7CisgICAgY29u
c3RfY2FzdDxKU0lEQkN1cnNvcldpdGhWYWx1ZSo+KHRoaXMpLT5tX3ZhbHVlLnNldChleGVjLT5n
bG9iYWxEYXRhKCksIHRoaXMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCmluZGV4IDRh
ZmE1NTAuLmNmZTIwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCS2V5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktl
eUN1c3RvbS5jcHAKQEAgLTM5LDM2ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNW
YWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSURCS2V5KiBrZXkpCiB7Ci0gICAgaWYgKCFrZXkpCi0gICAgICAgIHJldHVybiBqc051bGwo
KTsKLQotICAgIHN3aXRjaCAoa2V5LT50eXBlKCkpIHsKLSAgICBjYXNlIElEQktleTo6QXJyYXlU
eXBlOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBJREJLZXk6OktleUFycmF5JiBpbkFy
cmF5ID0ga2V5LT5hcnJheSgpOwotICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBpbkFycmF5LnNp
emUoKTsKLSAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJh
eShleGVjLCBnbG9iYWxPYmplY3QsIHNpemUpOwotICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBJREJLZXkqIGFycmF5S2V5
ID0gaW5BcnJheS5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgICAgICBvdXRBcnJheS0+aW5pdGlh
bGl6ZUluZGV4KGdsb2JhbERhdGEsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBhcnJheUtl
eSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUob3V0QXJyYXkp
OwotICAgICAgICB9Ci0gICAgY2FzZSBJREJLZXk6OlN0cmluZ1R5cGU6Ci0gICAgICAgIHJldHVy
biBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBrZXktPnN0cmluZygpKTsKLSAgICBjYXNlIElEQktl
eTo6RGF0ZVR5cGU6Ci0gICAgICAgIHJldHVybiBqc0RhdGVPck51bGwoZXhlYywga2V5LT5kYXRl
KCkpOwotICAgIGNhc2UgSURCS2V5OjpOdW1iZXJUeXBlOgotICAgICAgICByZXR1cm4ganNOdW1i
ZXIoa2V5LT5udW1iZXIoKSk7Ci0gICAgY2FzZSBJREJLZXk6Ok1pblR5cGU6Ci0gICAgY2FzZSBJ
REJLZXk6OkludmFsaWRUeXBlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGlkYktleVRvSlNWYWx1
ZShleGVjLCBnbG9iYWxPYmplY3QsIGtleSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVz
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9wZW5EQlJlcXVl
c3RDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzgyMGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9wZW5E
QlJlcXVlc3RDdXN0b20uY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisjaW5jbHVkZSAiSlNJREJPcGVuREJSZXF1ZXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgSlNJREJPcGVuREJSZXF1ZXN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
SlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0lEQk9wZW5EQlJlcXVlc3QqIGpz
UmVxdWVzdCA9IGpzQ2FzdDxKU0lEQk9wZW5EQlJlcXVlc3QqPihjZWxsKTsKKyAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKGpzUmVxdWVzdCwgJnNfaW5mbyk7CisgICAgQ09NUElMRV9BU1NF
UlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNp
dENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQoanNSZXF1ZXN0LT5zdHJ1
Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4oanNSZXF1ZXN0LCB2aXNpdG9yKTsKKyAgICBzdGF0aWNfY2FzdDxJREJP
cGVuREJSZXF1ZXN0Kj4oanNSZXF1ZXN0LT5pbXBsKCkpLT52aXNpdEpTRXZlbnRMaXN0ZW5lcnMo
dmlzaXRvcik7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwCmlu
ZGV4IGY1NTlmNDEuLmRlZTUyZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiwgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNo
YWVsQDY4ay5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKQEAg
LTI0LDE3ICsyNSwyNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJK
U0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKyNpbmNsdWRlICJKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgiCiAKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCit1c2luZyBuYW1lc3BhY2UgSlNDOworCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXZvaWQgSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJikKK3ZvaWQgSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIEpTSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QqIGpzUmVxdWVzdCA9IGpzQ2FzdDxKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Kj4o
Y2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhqc1JlcXVlc3QsICZzX2luZm8p
OworICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNT
RVJUKGpzUmVxdWVzdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbigpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGpzUmVxdWVzdCwgdmlzaXRvcik7Cisg
ICAgc3RhdGljX2Nhc3Q8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QqPihqc1JlcXVlc3QtPmltcGwo
KSktPnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXgg
ZjI5YTEzYS4uZjAwZDMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xODY0LDYgKzE4NjQsMTEgQEAgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRl
KEpTQzo6RXhlY1N0YXRlKgogCiBTdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVT
dHJpbmcoKSBjb25zdAogeworICAgIGlmIChtX2RhdGEuc2l6ZSgpICYgMSkgeworICAgICAgICBW
ZWN0b3I8dW5zaWduZWQgY2hhcj4gZGF0YShtX2RhdGEpOworICAgICAgICBkYXRhLmFwcGVuZCgw
KTsKKyAgICAgICAgcmV0dXJuIENsb25lRGVzZXJpYWxpemVyOjp0b1dpcmVTdHJpbmcoZGF0YSk7
CisgICAgfQogICAgIHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6dG9XaXJlU3RyaW5nKG1fZGF0
YSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmlkbAppbmRleCA1YmVmODg3Li40
MGQyNjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaWRsCkBAIC0yNyw3ICsyNyw4
IEBAIG1vZHVsZSBjb3JlIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIEluZGV4ZWRHZXR0
ZXIsCi0gICAgICAgIEpTQ3VzdG9tVG9OYXRpdmVPYmplY3QKKyAgICAgICAgSlNDdXN0b21Ub05h
dGl2ZU9iamVjdCwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwogICAgIF0gRE9NU3RyaW5nTGlz
dCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKICAg
ICAgICAgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3RyaW5nIGl0ZW0oaW4g
W0lzSW5kZXgsT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBsb25nIGluZGV4
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161713</attachid>
            <date>2012-08-31 09:07:40 -0700</date>
            <delta_ts>2012-10-19 01:33:12 -0700</delta_ts>
            <desc>Implement IndexedDB for JSC</desc>
            <filename>jsc-indexeddb.patch</filename>
            <type>text/plain</type>
            <size>37885</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0MzY5ODJjLi4zMTE3OGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjgg
QEAKKzIwMTItMDgtMzEgIE1pY2hhZWwgUHJ1ZXR0ICA8bWljaGFlbEA2OGsub3JnPgorCisgICAg
ICAgIEltcGxlbWVudCBJbmRleGVkIERhdGFiYXNlIGZvciBKU0MuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTExMAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiBzdG9yYWdlL2luZGV4ZWRkYi8q
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkFueS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5o
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnBvc3RTdWNjZXNzSGFu
ZGxlckNhbGxiYWNrKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRo
VmFsdWUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbDoK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGw6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQktleS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UGF0aEJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3Jl
YXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJLZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFs
dWUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGw6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVO
ZWVkZWRFdmVudC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5pZGw6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5jcHA6CisgICAgICAgIChKU0F1eGlsaWFyeUNvbnRleHQpOgorICAgICAgICAoSlNBdXhpbGlh
cnlDb250ZXh0OjpzaGFyZWQpOgorICAgICAgICAoSlNBdXhpbGlhcnlDb250ZXh0OjpleGVjKToK
KyAgICAgICAgKEpTQXV4aWxpYXJ5Q29udGV4dDo6SlNBdXhpbGlhcnlDb250ZXh0KToKKyAgICAg
ICAgKEpTQXV4aWxpYXJ5Q29udGV4dDo6fkpTQXV4aWxpYXJ5Q29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZXROdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJD
b3JlOjplbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJ
REJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmlkYktleVRvSlNW
YWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHkpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRGljdGlvbmFyeS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojp0
cnlHZXRQcm9wZXJ0eUFuZFJlc3VsdCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJDdXJz
b3JXaXRoVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTSURCS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJp
bmcpOgorICAgICAgICAqIGRvbS9ET01TdHJpbmdMaXN0LmlkbDoKKwogMjAxMi0wOC0zMSAgTWls
aWFuIFdvbGZmICA8bWlsaWFuLndvbGZmQGtkYWIuY29tPgogCiAgICAgICAgIFtRdF0gUU5YIGJ1
aWxkIGZhaWxzIGR1ZSB0byBtaXNzaW5nIE9wZW5HTCBFUyBkZWZpbmVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCA4MGM2MzZmLi41YWJjMjUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTQ2NywxMiArNDY3LDE2IEBAIHdlYmNvcmVfYnVpbHRfc291cmNlcyAr
PSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQktleVJhbmdlLmggXAogCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNJREJPYmplY3RTdG9yZS5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNJREJPYmplY3RTdG9yZS5oIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURC
T3BlbkRCUmVxdWVzdC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJPcGVuREJS
ZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJSZXF1ZXN0LmNwcCBcCiAJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlJlcXVlc3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9KU0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0lEQlRyYW5zYWN0aW9uLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJzaW9u
Q2hhbmdlRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVmVyc2lvbkNo
YW5nZUV2ZW50LmggXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJVcGdyYWRlTmVlZGVk
RXZlbnQuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVXBncmFkZU5lZWRlZEV2
ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW1hZ2VEYXRhLmNwcCBcCkBAIC0xMjAz
LDYgKzEyMDcsNyBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdlYkNvcmUpL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgXAorCSQoV2ViQ29yZSkvTW9kdWxlcy9p
bmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgXAogCSQoV2ViQ29yZSkvTW9k
dWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFzZS5pZGwgXAogCSQoV2Vi
Q29yZSkvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5pZGwgXApAQCAtMjE5NCw2ICsy
MTk5LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9ET01XcmFwcGVyV29ybGQuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250
cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmgg
XAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggXAogCVNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0b20uY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hlbHBlci5oIFwKQEAgLTIy
OTEsNyArMjI5Nyw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
QW55Q3VzdG9tLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JX
aXRoVmFsdWVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktl
eUN1c3RvbS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVx
dWVzdEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0ltYWdlQ29uc3RydWN0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lt
YWdlQ29uc3RydWN0b3IuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJBbnkuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
QW55LmlkbAppbmRleCBkZDUxYzRkLi41Y2NhYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwKQEAgLTI3LDcgKzI3LDggQEAgbW9kdWxlIHN0b3JhZ2Ug
ewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFT
RSwKLSAgICAgICAgQ3VzdG9tVG9KU09iamVjdAorICAgICAgICBDdXN0b21Ub0pTT2JqZWN0LAor
ICAgICAgICBKU05vU3RhdGljVGFibGVzCiAgICAgXSBJREJBbnkgewogICAgICAgICAvLyBUaGlz
IHNwYWNlIGlzIGludGVudGlvbmFsbHkgbGVmdCBibGFuay4KICAgICB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggZDczZDE0Ni4uMzZm
NjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
aWRsCkBAIC0yNyw2ICsyNyw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBb
CiAgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIEpTTm9TdGF0
aWNUYWJsZXMKICAgICBdIElEQkN1cnNvciB7CiAgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5
IHJlbW92ZSBsZWdhY3kgZW51bSBjb25zdGFudHMsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODUzMTUKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTkVY
VCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaAppbmRleCAyYjc2ZGQ0Li5lYjE2YWMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5j
dGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHByZWZldGNo
UmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcyk7Ci0gICAgdmly
dHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsg
fQogCiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29y
LT5rZXkoKTsgfQogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKaW5kZXggNTEyZWE0
MC4uYWQxZDAzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yV2l0aFZhbHVlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCkBAIC0yNiw4ICsyNiw5IEBACiBtb2R1bGUgc3Rv
cmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RB
VEFCQVNFCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIEpT
Tm9TdGF0aWNUYWJsZXMKICAgICBdIElEQkN1cnNvcldpdGhWYWx1ZSA6IElEQkN1cnNvciB7Ci0g
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbVjhDdXN0b21HZXR0ZXJdIElEQkFueSB2YWx1ZTsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtWOEN1c3RvbUdldHRlciwgSlNDdXN0b21HZXR0
ZXIsIENhY2hlZEF0dHJpYnV0ZV0gSURCQW55IHZhbHVlOwogICAgIH07CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKaW5kZXggZDI1M2U0
ZC4uZmMxMDBlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlLmlkbApAQCAtMjksNyArMjksOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgaW50
ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKICAgICAgICAg
QWN0aXZlRE9NT2JqZWN0LAotICAgICAgICBFdmVudFRhcmdldAorICAgICAgICBFdmVudFRhcmdl
dCwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwogICAgIF0gSURCRGF0YWJhc2UgewogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBJREJBbnkgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAppbmRleCA2N2Q4MTFjLi43
MTA4ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZUV4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCkBAIC0yNyw3ICsyNyw4IEBAIG1vZHVsZSBzdG9y
YWdlIHsKIAogICAgIGV4Y2VwdGlvbiBbCiAgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UsCi0gICAgICAgIERvTm90Q2hlY2tDb25zdGFudHMKKyAgICAgICAgRG9Ob3RDaGVja0Nv
bnN0YW50cywKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwogICAgIF0gSURCRGF0YWJhc2VFeGNl
cHRpb24gewogCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCAgIGNv
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0
b3J5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRs
CmluZGV4IGJmNzFhMmQuLjAwYzFlYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsCkBAIC0yNiw3ICsyNiw4IEBACiBtb2R1bGUgc3RvcmFn
ZSB7CiAKICAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFC
QVNFCisgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgICAgIEpTTm9T
dGF0aWNUYWJsZXMKICAgICBdIElEQkZhY3RvcnkgewogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1nZXREYXRhYmFzZU5hbWVzXSBJREJSZXF1
ZXN0IHdlYmtpdEdldERhdGFiYXNlTmFtZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCSW5kZXguaWRsCmluZGV4IDc3ODkyMzYuLjk5OWE1OGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwKQEAgLTI2LDcgKzI2
LDggQEAKIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRp
dGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRB
QkFTRSwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwogICAgIF0gSURCSW5kZXggewogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBJREJPYmplY3RTdG9yZSBvYmplY3RTdG9yZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsCmluZGV4IDE0NjRkOWYuLmMwNzFlZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbApAQCAtMjcsNyArMjcsOCBA
QCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25h
bD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBDdXN0b21Ub0pTT2JqZWN0CisgICAgICAgIEN1
c3RvbVRvSlNPYmplY3QsCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKICAgICBdIElEQktleSB7
CiAgICAgICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJsYW5rLgogICAg
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQ
YXRoQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
S2V5UGF0aEJhY2tlbmRJbXBsLmNwcAppbmRleCA2NGExZmJjLi5lYWU4Y2RhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlQYXRoQmFja2VuZEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVBhdGhCYWNr
ZW5kSW1wbC5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWlj
aGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjYsNiArMjcsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklE
QktleVBhdGhCYWNrZW5kSW1wbC5oIgogCisjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5o
IgogI2luY2x1ZGUgIklEQktleS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogCkBAIC0zOCwxNSArNDAsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIElE
QktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5k
S2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIDA+Jiwg
Y29uc3QgSURCS2V5UGF0aCYsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiwgMD4mKQordm9pZCBJREJL
ZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtl
eVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFs
dWVzLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+
JiBrZXlzKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qgb25jZSBKU0Mg
c3VwcG9ydHMgV2lyZUZvcm1hdCBmb3IgU2VyaWFsaXplZFNjcmlwdFZhbHVlLgorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIGtleXMuYXBw
ZW5kKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKHZh
bHVlc1tpXSwga2V5UGF0aCkpOwogfQogCi1QYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gSURCS2V5UGF0aEJhY2tlbmRJbXBsOjppbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVl
KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBj
b25zdCBJREJLZXlQYXRoJikKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBJREJL
ZXlQYXRoQmFja2VuZEltcGw6OmluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
LCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBtZXRob2Qgb25jZSBKU0Mgc3VwcG9ydHMgV2lyZUZvcm1hdCBmb3IgU2VyaWFsaXplZFNj
cmlwdFZhbHVlLgotICAgIHJldHVybiBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4o
KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6aW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShr
ZXksIHZhbHVlLCBrZXlQYXRoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCmluZGV4IDE2MWNiOWMuLjMwYzExZTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwKQEAg
LTI2LDcgKzI2LDggQEAKIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCi0gICAg
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICAgICAgQ29uZGl0aW9uYWw9SU5E
RVhFRF9EQVRBQkFTRSwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwogICAgIF0gSURCS2V5UmFu
Z2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IGxvd2VyOwogICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IHVwcGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4IDk5ZDg2ODQuLmEyOGVk
MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVj
dFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5pZGwKQEAgLTI2LDcgKzI2LDggQEAKIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGlu
dGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICAgICAg
Q29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwog
ICAgIF0gSURCT2JqZWN0U3RvcmUgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW1RyZWF0
UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3RyaW5nIG5hbWU7CiAgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBbSW1wbGVtZW50ZWRBcz1rZXlQYXRoQW55XSBJREJBbnkga2V5UGF0aDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJl
cXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVx
dWVzdC5pZGwKaW5kZXggMWU0NmE1Mi4uOTViNzg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKQEAgLTI4LDcgKzI4
LDggQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlv
bmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAgICAg
RXZlbnRUYXJnZXQKKyAgICAgICAgRXZlbnRUYXJnZXQsCisgICAgICAgIEpTTm9TdGF0aWNUYWJs
ZXMKICAgICBdIElEQk9wZW5EQlJlcXVlc3QgOiBJREJSZXF1ZXN0IHsKICAgICAgICAgYXR0cmli
dXRlIEV2ZW50TGlzdGVuZXIgb25ibG9ja2VkOwogICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbnVwZ3JhZGVuZWVkZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaWRsCmluZGV4IDFlNDk0MTUuLjRkM2YyNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCkBAIC0zMiw3ICszMiw4
IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25h
bD1JTkRFWEVEX0RBVEFCQVNFLAogICAgICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgICAgIEV2
ZW50VGFyZ2V0CisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICAgICBKU05vU3RhdGljVGFibGVz
CiAgICAgXSBJREJSZXF1ZXN0IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBy
ZXN1bHQKICAgICAgICAgICAgIGdldHRlciByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmlkbAppbmRleCBiNWMyMDdkLi4wN2UzNjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsCkBAIC0yOSw3ICsyOSw4IEBAIG1v
ZHVsZSBzdG9yYWdlIHsKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRF
WEVEX0RBVEFCQVNFLAogICAgICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgICAgIEV2ZW50VGFy
Z2V0CisgICAgICAgIEV2ZW50VGFyZ2V0LAorICAgICAgICBKU05vU3RhdGljVGFibGVzCiAgICAg
XSBJREJUcmFuc2FjdGlvbiB7CiAgICAgICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHJlbW92ZSBs
ZWdhY3kgZW51bSBjb25zdGFudHMsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODUzMTUKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUkVBRF9PTkxZID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3Jh
ZGVOZWVkZWRFdmVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJV
cGdyYWRlTmVlZGVkRXZlbnQuaWRsCmluZGV4IDMyOTk5NTQuLmFjZTFhMTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRl
ZEV2ZW50LmlkbApAQCAtMjcsNyArMjcsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRl
cmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgICAgICBJ
bnRlcmZhY2VOYW1lPUlEQlZlcnNpb25DaGFuZ2VFdmVudAorICAgICAgICBJbnRlcmZhY2VOYW1l
PUlEQlZlcnNpb25DaGFuZ2VFdmVudCwKKyAgICAgICAgSlNOb1N0YXRpY1RhYmxlcwogICAgIF0g
SURCVXBncmFkZU5lZWRlZEV2ZW50IDogRXZlbnQgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsb25nIG9sZFZlcnNpb247CiAgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsCmlu
ZGV4IGM2YTQxNzEuLjJhYTMyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbApAQCAtMjYsNyArMjYs
OCBAQAogbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0
aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFC
QVNFLAorICAgICAgICBKU05vU3RhdGljVGFibGVzCiAgICAgXSBJREJWZXJzaW9uQ2hhbmdlRXZl
bnQgOiBFdmVudCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lv
bjsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCmluZGV4IDJhYTIzOGEuLjY3Mjc2MWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKQEAgLTI4LDcgKzI4LDggQEAgbW9kdWxlIHN0b3Jh
Z2UgewogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UsCiAgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICAgICAgRXZlbnRUYXJnZXQKKyAgICAg
ICAgRXZlbnRUYXJnZXQsCisgICAgICAgIEpTTm9TdGF0aWNUYWJsZXMKICAgICBdIElEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0IDogSURCUmVxdWVzdCB7CiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudExp
c3RlbmVyIG9uYmxvY2tlZDsKICAgICB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCBiNTVlNzZiLi4zOTlhZjRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0
dCA8bWljaGFlbEA2OGsub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OSwyMSArMzAsMjQ0IEBACiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogCiAjaW5j
bHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIkpTSURC
S2V5LmgiCisKKyNpbmNsdWRlIDxBUElDYXN0Lmg+CisjaW5jbHVkZSA8QVBJU2hpbXMuaD4KKyNp
bmNsdWRlIDxEYXRlSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxKU0NvbnRleHRSZWYuaD4KKwordXNp
bmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgSlNBdXhpbGlhcnlDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgSlNBdXhpbGlhcnlDb250ZXh0JiBzaGFyZWQoKQor
ICAgIHsKKyAgICAgICAgc3RhdGljIEpTQXV4aWxpYXJ5Q29udGV4dCYgc19jb250ZXh0ID0gKm5l
dyBKU0F1eGlsaWFyeUNvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIHNfY29udGV4dDsKKyAgICB9
CisKKyAgICBFeGVjU3RhdGUqIGV4ZWMoKSB7IHJldHVybiB0b0pTKG1fY29udGV4dCk7IH0KKwor
cHJpdmF0ZToKKyAgICBKU0dsb2JhbENvbnRleHRSZWYgbV9jb250ZXh0OworCisgICAgSlNBdXhp
bGlhcnlDb250ZXh0KCkKKyAgICB7CisgICAgICAgIG1fY29udGV4dCA9IEpTR2xvYmFsQ29udGV4
dENyZWF0ZSgwKTsKKyAgICB9CisKKyAgICB+SlNBdXhpbGlhcnlDb250ZXh0KCkKKyAgICB7Cisg
ICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UobV9jb250ZXh0KTsKKyAgICAgICAgbV9jb250
ZXh0ID0gMDsKKyAgICB9Cit9OworCit9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1Jl
ZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlIHZhbHVlKQorc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtRGVwdGggPSAy
MDAwOworCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxKU0FycmF5Kj4mIHN0YWNrKQog
ewotICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRl
SW52YWxpZCgpOwotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkgJiYgIWlzbmFuKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKSkKICAgICAgICAgcmV0dXJuIElE
QktleTo6Y3JlYXRlTnVtYmVyKHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsKICAgICBpZiAodmFsdWUu
aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKHZhbHVlLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBkYXRl
cy4KKyAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19pbmZvKSAmJiAhaXNu
YW4odmFsdWVUb0RhdGUoZXhlYywgdmFsdWUpKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3Jl
YXRlRGF0ZSh2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkpOworICAgIGlmICh2YWx1ZS5pc09iamVj
dCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAg
ICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSB8fCBvYmplY3QtPmluaGVyaXRzKCZKU0FycmF5Ojpz
X2luZm8pKSB7CisgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IGFzQXJyYXkob2JqZWN0KTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5LT5sZW5ndGgoKTsKKworICAgICAg
ICAgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGFycmF5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgICAgIGlmIChzdGFjay5zaXplKCkgPj0gbWF4aW11bURlcHRoKQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc3RhY2suYXBwZW5kKGFycmF5KTsKKwor
ICAgICAgICAgICAgSURCS2V5OjpLZXlBcnJheSBzdWJrZXlzOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSBpdGVtID0gYXJyYXktPmdldEluZGV4KGkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxJREJL
ZXk+IHN1YmtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCBpdGVtLCBzdGFjayk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzdWJrZXkpCisgICAgICAgICAgICAgICAgICAgIHN1YmtleXMu
YXBwZW5kKElEQktleTo6Y3JlYXRlSW52YWxpZCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHN1YmtleXMuYXBwZW5kKHN1YmtleSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZUFycmF5KHN1YmtleXMpOworICAgICAgICB9CisgICAgfQogICAgIHJldHVy
biAwOwogfQogCitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8SlNBcnJheSo+IHN0YWNr
OworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCB2
YWx1ZSwgc3RhY2spOworICAgIGlmIChrZXkpCisgICAgICAgIHJldHVybiBrZXk7CisgICAgcmV0
dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOworfQorCitzdGF0aWMgSlNWYWx1ZSBnZXROdGhW
YWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcm9vdFZhbHVlLAorICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHVuc2lnbmVkIGluZGV4KQorewor
ICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJvb3RWYWx1ZSk7CisgICAgQVNTRVJUKGluZGV4IDw9
IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
bmRleDsgaSsrKSB7CisgICAgICAgIGlmIChjdXJyZW50VmFsdWUuaXNTdHJpbmcoKSAmJiBrZXlQ
YXRoRWxlbWVudHNbaV0gPT0gImxlbmd0aCIpCisgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIo
Y3VycmVudFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT5sZW5ndGgoKSk7CisgICAgICAgIGlmICghY3Vy
cmVudFZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGtleVBh
dGhFbGVtZW50c1tpXS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY3VycmVudFZhbHVlID0gYXNP
YmplY3QoY3VycmVudFZhbHVlKS0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOworICAgIH0KKyAgICBy
ZXR1cm4gY3VycmVudFZhbHVlOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0
ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJv
cjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7
CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICBF
eGVjU3RhdGUqIGV4ZWMgPSBKU0F1eGlsaWFyeUNvbnRleHQ6OnNoYXJlZCgpLmV4ZWMoKTsKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpOworCisgICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKKworICAgIEpTVmFsdWUg
anNWYWx1ZSA9IHZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIGpz
VmFsdWUgPSBnZXROdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBqc1ZhbHVlLCBrZXlQYXRoRWxlbWVu
dHMsCisgICAgICAgIGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGlmIChqc1ZhbHVlLmlz
VW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGVJREJLZXlG
cm9tVmFsdWUoZXhlYywganNWYWx1ZSk7Cit9CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJ
REJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gcHJwVmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAg
SURCX1RSQUNFKCJjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0aCIpOwor
ICAgIEFTU0VSVCgha2V5UGF0aC5pc051bGwoKSk7CisKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOworCisgICAgaWYgKGtleVBhdGgudHlwZSgpID09
IElEQktleVBhdGg6OkFycmF5VHlwZSkgeworICAgICAgICBJREJLZXk6OktleUFycmF5IHJlc3Vs
dDsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5ID0ga2V5UGF0aC5hcnJheSgp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXkuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxp
emVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBhcnJheVtpXSk7CisgICAgICAgICAgICBpZiAoIWtl
eSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
a2V5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShyZXN1
bHQpOworICAgIH0KKworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpT
dHJpbmdUeXBlKTsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFu
ZEtleVBhdGgodmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOworfQorCitzdGF0aWMgSlNPYmplY3Qq
IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHJvb3RP
YmplY3QsCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgdW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3QgPSByb290T2JqZWN0Owor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNbaV07CisgICAgICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBrZXlQYXRoRWxlbWVudCk7
CisgICAgICAgIEpTVmFsdWUgY3VycmVudFZhbHVlID0gY3VycmVudE9iamVjdC0+Z2V0KGV4ZWMs
IGlkZW50aWZpZXIpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkgfHwgIWN1cnJl
bnRWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigp
OworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4
ZWMpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERh
dGEoKSwgaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBKU1ZhbHVlKG9iamVjdCkpOworICAg
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGN1cnJlbnRPYmplY3QgPSBvYmplY3Q7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgY3VycmVudE9iamVjdCA9IGN1cnJlbnRWYWx1ZS50b09iamVjdChleGVj
KTsKKyAgICB9CisKKyAgICByZXR1cm4gY3VycmVudE9iamVjdDsKK30KKworUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiaW5qZWN0
SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZSIpOworCisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgp
ID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhF
bGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtl
eVBhdGgoa2V5UGF0aC5zdHJpbmcoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNT
RVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICBpZiAoa2V5UGF0
aEVsZW1lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFeGVjU3RhdGUq
IGV4ZWMgPSBKU0F1eGlsaWFyeUNvbnRleHQ6OnNoYXJlZCgpLmV4ZWMoKTsKKyAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpOworCisg
ICAgQVBJRW50cnlTaGltIGVudHJ5U2hpbShleGVjKTsKKworICAgIEpTVmFsdWUganNWYWx1ZSA9
IHZhbHVlLT5kZXNlcmlhbGl6ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIGlmICghanNWYWx1
ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBKU09iamVjdCogcGFyZW50ID0g
ZW5zdXJlTnRoVmFsdWVPbktleVBhdGgoZXhlYywgYXNPYmplY3QoanNWYWx1ZSksIGtleVBhdGhF
bGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOworICAgIGlmICghcGFyZW50KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIElkZW50aWZpZXIgcHJvcGVydHlOYW1lKCZleGVjLT5n
bG9iYWxEYXRhKCksIGtleVBhdGhFbGVtZW50cy5sYXN0KCkpOworICAgIHBhcmVudC0+cHV0RGly
ZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLAorICAgICAgICBpZGJLZXlUb0pT
VmFsdWUoZXhlYywgZ2xvYmFsT2JqZWN0LCBrZXkuZ2V0KCkpKTsKKworICAgIHJldHVybiBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShleGVjLCBqc1ZhbHVlKTsKK30KKworSlNWYWx1ZSBp
ZGJLZXlUb0pTVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBJREJLZXkqIGtleSkKK3sKKyAgICBpZiAoIWtleSkKKyAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOworCisgICAgc3dpdGNoIChrZXktPnR5cGUoKSkgeworICAgIGNhc2UgSURCS2V5OjpBcnJh
eVR5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IElEQktleTo6S2V5QXJyYXkmIGlu
QXJyYXkgPSBrZXktPmFycmF5KCk7CisgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IGluQXJyYXku
c2l6ZSgpOworICAgICAgICAgICAgSlNBcnJheSogb3V0QXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgc2l6ZSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAgICAgICAgIElEQktleSogYXJyYXlLZXkg
PSBpbkFycmF5LmF0KGkpLmdldCgpOworICAgICAgICAgICAgICAgIG91dEFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCBpLCBpZGJLZXlUb0pTVmFsdWUoZXhlYywgZ2xvYmFsT2JqZWN0LCBhcnJh
eUtleSksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KG91dEFycmF5KTsKKyAgICAgICAgfQorICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgorICAg
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywga2V5LT5zdHJpbmcoKSk7CisgICAgY2FzZSBJREJL
ZXk6OkRhdGVUeXBlOgorICAgICAgICByZXR1cm4ganNEYXRlT3JOdWxsKGV4ZWMsIGtleS0+ZGF0
ZSgpKTsKKyAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKKyAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKGtleS0+bnVtYmVyKCkpOworICAgIGNhc2UgSURCS2V5OjpNaW5UeXBlOgorICAgIGNhc2Ug
SURCS2V5OjpJbnZhbGlkVHlwZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCA4ZTBjOWM1Li45
YTNlODFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5oCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiSURCS2V5UGF0aC5oIgogI2lu
Y2x1ZGUgIlNjcmlwdFZhbHVlLmgiIAorCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsNiArMzksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBJREJLZXk7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0
ZUlEQktleUZyb21TZXJpYWxpemVkVmFsdWVBbmRLZXlQYXRoKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgY29uc3QgSURCS2V5UGF0aCYpOworUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoUGFzc1JlZlB0cjxJ
REJLZXk+LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIGNvbnN0IElEQktleVBh
dGgmKTsKK0pTQzo6SlNWYWx1ZSBpZGJLZXlUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSURCS2V5Kik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKaW5kZXggZDRlMjI2NC4uNzMwNGVkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCkBAIC01MywxMiArNTMsMTYg
QEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFBy
b3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnQKICAgICBpZiAoIW1faW5pdGlhbGl6ZXJPYmplY3Qu
Z2V0KCktPmdldFByb3BlcnR5U2xvdChtX2V4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQogICAgICAg
ICByZXR1cm4gTm9Qcm9wZXJ0eUZvdW5kOwogCi0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgbV9leGVjLT5j
bGVhckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAgIH0K
IAogICAgIGZpbmFsUmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIGlkZW50aWZpZXIpOwot
ICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSB7CisgICAgICAgIG1fZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvblRocm93bjsKKyAgICB9CiAKICAgICByZXR1cm4gUHJvcGVydHlGb3VuZDsK
IH0KQEAgLTEwNiw4ICsxMTAsMTAgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQogCiB2b2lkIEpT
RGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwg
VmVjdG9yPFN0cmluZz4mIHJlc3VsdCkKIHsKLSAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZShleGVjLCB2
YWx1ZSwgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RGljdGlvbmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgK
aW5kZXggZmViZTkyNC4uNjMzMGRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNEaWN0aW9uYXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
aWN0aW9uYXJ5LmgKQEAgLTE0NSw4ICsxNDUsMTAgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0
eVJlc3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5QW5kUmVzdWx0KGNvbnN0IGNoYXIK
ICAgICAgICAgUmVzdWx0IHJlc3VsdDsKICAgICAgICAgY29udmVydFZhbHVlKG1fZXhlYywgdmFs
dWUsIHJlc3VsdCk7CiAKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBtX2V4ZWMtPmNs
ZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAg
ICAgICB9CiAKICAgICAgICAgc2V0dGVyKGNvbnRleHQsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRo
VmFsdWVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JX
aXRoVmFsdWVDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdk
ZjkyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
QkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkpTSURCQ3Vyc29yV2l0aFZhbHVlLmgiCisKKyNpbmNs
dWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0lEQkFueS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0pTVmFsdWUgSlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlKEV4ZWNTdGF0
ZSogZXhlYykgY29uc3QKK3sKKyAgICBJREJDdXJzb3IqIGN1cnNvciA9IGltcGwoKTsKKyAgICBp
ZiAoIWN1cnNvci0+dmFsdWVJc0RpcnR5KCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgY2FjaGVk
VmFsdWUgPSBtX3ZhbHVlLmdldCgpKQorICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFZhbHVlOwor
ICAgIH0KKworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
Y3Vyc29yLT52YWx1ZSgpLmdldCgpKTsKKyAgICBjb25zdF9jYXN0PEpTSURCQ3Vyc29yV2l0aFZh
bHVlKj4odGhpcyktPm1fdmFsdWUuc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgcmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
S2V5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9t
LmNwcAppbmRleCA0YWZhNTUwLi5jZmUyMDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJLZXlDdXN0b20uY3BwCkBAIC0zOSwzNiArMzksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIElEQktleSoga2V5KQogewotICAgIGlmICgha2V5KQotICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0KLSAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7Ci0gICAgY2FzZSBJ
REJLZXk6OkFycmF5VHlwZToKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgSURCS2V5OjpL
ZXlBcnJheSYgaW5BcnJheSA9IGtleS0+YXJyYXkoKTsKLSAgICAgICAgICAgIHNpemVfdCBzaXpl
ID0gaW5BcnJheS5zaXplKCk7Ci0gICAgICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0
cnVjdEVtcHR5QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LCBzaXplKTsKLSAgICAgICAgICAgIEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9IGV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgSURC
S2V5KiBhcnJheUtleSA9IGluQXJyYXkuYXQoaSkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgb3V0
QXJyYXktPmluaXRpYWxpemVJbmRleChnbG9iYWxEYXRhLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgYXJyYXlLZXkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlKG91dEFycmF5KTsKLSAgICAgICAgfQotICAgIGNhc2UgSURCS2V5OjpTdHJpbmdUeXBlOgot
ICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywga2V5LT5zdHJpbmcoKSk7Ci0g
ICAgY2FzZSBJREJLZXk6OkRhdGVUeXBlOgotICAgICAgICByZXR1cm4ganNEYXRlT3JOdWxsKGV4
ZWMsIGtleS0+ZGF0ZSgpKTsKLSAgICBjYXNlIElEQktleTo6TnVtYmVyVHlwZToKLSAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKGtleS0+bnVtYmVyKCkpOwotICAgIGNhc2UgSURCS2V5OjpNaW5UeXBl
OgotICAgIGNhc2UgSURCS2V5OjpJbnZhbGlkVHlwZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBp
ZGJLZXlUb0pTVmFsdWUoZXhlYywgZ2xvYmFsT2JqZWN0LCBrZXkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
Qk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJPcGVuREJSZXF1ZXN0Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42OGM1N2RlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJPcGVuREJSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSlNJREJPcGVuREJSZXF1ZXN0LmgiCisKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSlNJREJPcGVuREJSZXF1ZXN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0lEQk9w
ZW5EQlJlcXVlc3QqIGpzUmVxdWVzdCA9IGpzQ2FzdDxKU0lEQk9wZW5EQlJlcXVlc3QqPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGpzUmVxdWVzdCwgJnNfaW5mbyk7Cisg
ICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVu
LCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQo
anNSZXF1ZXN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVu
KCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oanNSZXF1ZXN0LCB2aXNpdG9yKTsKKyAgICBz
dGF0aWNfY2FzdDxJREJPcGVuREJSZXF1ZXN0Kj4oanNSZXF1ZXN0LT5pbXBsKCkpLT52aXNpdEpT
RXZlbnRMaXN0ZW5lcnModmlzaXRvcik7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCBmNTU5ZjQxLi5j
YzM4ZTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CkBAIC0yNCwxOSArMjUsMjcg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRl
ICJKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgiCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCit1c2luZyBuYW1lc3BhY2UgSlNDOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6
OlNsb3RWaXNpdG9yJikKK3ZvaWQgSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgorICAgIEpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QqIGpz
UmVxdWVzdCA9IGpzQ2FzdDxKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Kj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhqc1JlcXVlc3QsICZzX2luZm8pOworICAgIENPTVBJ
TEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKGpzUmVxdWVz
dC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKGpzUmVxdWVzdCwgdmlzaXRvcik7CisgICAgc3RhdGljX2Nh
c3Q8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3QqPihqc1JlcXVlc3QtPmltcGwoKSktPnZpc2l0SlNF
dmVudExpc3RlbmVycyh2aXNpdG9yKTsKIH0KIAogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGYyOWExM2EuLmYwMGQzMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcApAQCAtMTg2NCw2ICsxODY0LDExIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSoKIAogU3Ry
aW5nIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKCkgY29uc3QKIHsKKyAgICBp
ZiAobV9kYXRhLnNpemUoKSAmIDEpIHsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGRh
dGEobV9kYXRhKTsKKyAgICAgICAgZGF0YS5hcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBDbG9u
ZURlc2VyaWFsaXplcjo6dG9XaXJlU3RyaW5nKGRhdGEpOworICAgIH0KICAgICByZXR1cm4gQ2xv
bmVEZXNlcmlhbGl6ZXI6OnRvV2lyZVN0cmluZyhtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RE9NU3RyaW5nTGlzdC5pZGwKaW5kZXggNWJlZjg4Ny4uNDBkMjY3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9ET01TdHJpbmdMaXN0LmlkbApAQCAtMjcsNyArMjcsOCBAQCBtb2R1bGUgY29yZSB7CiAKICAg
ICBpbnRlcmZhY2UgWwogICAgICAgICBJbmRleGVkR2V0dGVyLAotICAgICAgICBKU0N1c3RvbVRv
TmF0aXZlT2JqZWN0CisgICAgICAgIEpTQ3VzdG9tVG9OYXRpdmVPYmplY3QsCisgICAgICAgIEpT
Tm9TdGF0aWNUYWJsZXMKICAgICBdIERPTVN0cmluZ0xpc3QgewogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAgICAgICAgIFtUcmVhdFJldHVybmVkTnVs
bFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBpdGVtKGluIFtJc0luZGV4LE9wdGlvbmFsPURlZmF1
bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBpbmRleCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169575</attachid>
            <date>2012-10-19 01:33:12 -0700</date>
            <delta_ts>2012-10-19 01:59:10 -0700</delta_ts>
            <desc>Implement IndexedDB for JSC</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>52414</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVGh1LCAxOCBPY3Qg
MjAxMiAxNDoxNjoyNiAtMDcwMApTdWJqZWN0OiBJbXBsZW1lbnQgSW5kZXhlZCBEYXRhYmFzZSBm
b3IgSlNDLgoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgODkgKysrKysrKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSAgICAgICAgICAgICAgICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5pZGwgICAgICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcCAgICAgfCAgICA4ICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgICAgIHwgICAgMSArCiAuLi4vTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaCAgICAgICB8ICAgIDIgKy0KIC4uLi9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsICAgICAgIHwgICAgNSArLQog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsICAgfCAgICAz
ICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsICAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRs
ICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aWRsICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXkuaWRsICAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmlkbCAgIHwgICAgMyArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwICAgfCAgIDIyICstCiAuLi4vV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgICB8ICAgIDMgKy0KIC4uLi9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsIHwgICAgMyArLQogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgICAgfCAgICA2ICstCiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbCAgICB8ICAgIDMgKy0KIC4u
Li9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCAgIHwgICAgMyAr
LQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgICAgfCAg
ICAzICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCAg
ICB8ICAgIDMgKy0KIC4uLi9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5pZGwgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAgfCAgMjc3ICsrKysrKysrKysrKysrKysrKystCiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggICB8ICAgIDggKwogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcCAgICAgICAgfCAgIDEyICstCiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaCAgICAgICAgICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCAgICAgIHwgICAxMCAr
LQogLi4uL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcCAgICAgfCAg
IDU3ICsrKysKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCAg
ICAgIHwgICAgMyArLQogLi4uL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5j
cHAgICAgICAgfCAgIDUyICsrKysKIC4uLi9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3Vz
dG9tLmNwcCAgICAgICAgIHwgICAxNyArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcCAgfCAgICA1ICsKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIHwgICAxNSArLQogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oICAgfCAgICA3ICstCiBTb3VyY2UvV2ViQ29yZS9k
b20vRE9NU3RyaW5nTGlzdC5pZGwgICAgICAgICAgICAgICB8ICAgIDMgKy0KIDM2IGZpbGVzIGNo
YW5nZWQsIDU5MyBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3Rv
bS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
Qk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDZjMDRjZDguLjBkMTk1ZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MiBAQAorMjAxMi0xMC0xOCAgTWljaGFlbCBQcnVldHQg
IDxtaWNoYWVsQDY4ay5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IEluZGV4ZWQgRGF0YWJhc2Ug
Zm9yIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1MTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiLyoKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbDoKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDoKKyAgICAgICAgKElE
QkN1cnNvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbDoKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnBvc3RTdWNjZXNzSGFuZGxlckNhbGxi
YWNrKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRs
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXguaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5p
ZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT3BlbkRCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlVw
Z3JhZGVOZWVkZWRFdmVudC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5pZGw6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHA6CisgICAgICAgIChJREJKU0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCSlNDb250ZXh0OjpJREJKU0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSlNDb250
ZXh0OjpnbG9iYWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCSlNDb250ZXh0OjpleGVj
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
TnRoVmFsdWVPbktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVOdGhWYWx1ZU9u
S2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXpl
SURCVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFy
eTo6dHJ5R2V0UHJvcGVydHlBbmRSZXN1bHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURC
QW55Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQk9wZW5EQlJlcXVl
c3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6dG9XaXJlU3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRp
bGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1
ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURCVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVl
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5pZGw6CisKIDIwMTItMTAt
MTggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBzaG9y
dE1vbnRoTGFiZWxzIGFuZCBzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyB0byBMb2NhbGl6ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGVhMmIyMmUuLjNkMTFkYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDY3LDEyICs0NjcsMTYgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCS2V5UmFuZ2Uu
aCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQk9iamVjdFN0b3JlLmNwcCBcCiAJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQk9iamVjdFN0b3JlLmggXAorCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJREJPcGVuREJSZXF1ZXN0LmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0lEQk9wZW5EQlJlcXVlc3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlJl
cXVlc3QuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCUmVxdWVzdC5oIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rpb24uY3BwIFwKIAlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rpb24uaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lE
QlVwZ3JhZGVOZWVkZWRFdmVudC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJV
cGdyYWRlTmVlZGVkRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEu
Y3BwIFwKQEAgLTEyMjYsNiArMTIzMCw3IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2Vi
Q29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIFwKIAkkKFdlYkNvcmUp
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgXAogCSQoV2ViQ29y
ZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCBcCisJJChXZWJD
b3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsIFwKIAkkKFdl
YkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCBcCiAJ
JChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNl
LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmlkbCBc
CkBAIC0yMjQ5LDYgKzIyNTQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9H
Q0NvbnRyb2xsZXIuaCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3Rv
bS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVs
cGVyLmggXApAQCAtMjM0Nyw3ICsyMzUzLDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uaCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJPcGVuREJSZXF1ZXN0Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJBbnkuaWRsCmluZGV4IDU5NjE4YWQuLjAxNDFiMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbApAQCAtMjUsNyArMjUsOCBAQAog
CiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICBDdXN0b21Ub0pTT2Jq
ZWN0CisgICAgQ3VzdG9tVG9KU09iamVjdCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVy
ZmFjZSBJREJBbnkgewogICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJs
YW5rLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwCmluZGV4IDk5MGUzYTQuLjBhYWU0NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgU2NyaXB0CiAgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3Jl
LT5tZXRhZGF0YSgpLmtleVBhdGg7CiAgICAgY29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFr
ZXlQYXRoLmlzTnVsbCgpOwogICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQ
dHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5
UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkg
PSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnRleHQsIHZhbHVlLCBr
ZXlQYXRoKTsKICAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8ICFrZXlQYXRoS2V5LT5pc0VxdWFs
KG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjU5LDcg
KzI1OSw3IEBAIHZvaWQgSURCQ3Vyc29yOjpjbG9zZSgpCiAgICAgfQogfQogCi12b2lkIElEQkN1
cnNvcjo6c2V0VmFsdWVSZWFkeShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSwgU2NyaXB0VmFsdWUmIHZhbHVlKQordm9pZCBJREJDdXJzb3I6OnNl
dFZhbHVlUmVhZHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFNjcmlwdFZhbHVlJiB2
YWx1ZSkKIHsKICAgICBtX2N1cnJlbnRLZXkgPSBrZXk7CiAgICAgbV9jdXJyZW50UHJpbWFyeUtl
eSA9IHByaW1hcnlLZXk7CkBAIC0yNjksMTAgKzI2OSwxMCBAQCB2b2lkIElEQkN1cnNvcjo6c2V0
VmFsdWVSZWFkeShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeQogICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhID0gb2Jq
ZWN0U3RvcmUtPm1ldGFkYXRhKCk7CiAgICAgICAgIGlmIChtZXRhZGF0YS5hdXRvSW5jcmVtZW50
ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7CiAjaWZuZGVmIE5ERUJVRwotICAgICAg
ICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0
VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBtZXRhZGF0YS5rZXlQYXRoKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5k
S2V5UGF0aChjb250ZXh0LCB2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7CiAgICAgICAgICAgICBB
U1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5pc0VxdWFsKG1fY3VycmVudFByaW1h
cnlLZXkuZ2V0KCkpKTsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBpbmplY3RlZCA9IGluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShtX2N1cnJlbnRQcmltYXJ5S2V5LCB2YWx1ZSwgbWV0YWRh
dGEua2V5UGF0aCk7CisgICAgICAgICAgICBib29sIGluamVjdGVkID0gaW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlKGNvbnRleHQsIG1fY3VycmVudFByaW1hcnlLZXksIHZhbHVlLCBtZXRhZGF0
YS5rZXlQYXRoKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBubyB3YXkgdG8gcmVw
b3J0IGVycm9ycyBoZXJlLiBNb3ZlIHRoaXMgaW50byBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9u
IHNvIHRoYXQgd2UgY2FuIGFib3J0IHRoZSB0cmFuc2FjdGlvbiB0aGVyZS4gU2VlOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNzgKICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoaW5qZWN0ZWQsIGluamVjdGVkKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCA1NTg5YzIyLi43MDRlNTBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtODIs
NyArODIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNr
KCk7CiAgICAgdm9pZCBjbG9zZSgpOwotICAgIHZvaWQgc2V0VmFsdWVSZWFkeShQYXNzUmVmUHRy
PElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBTY3JpcHRWYWx1ZSYpOwor
ICAgIHZvaWQgc2V0VmFsdWVSZWFkeShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgU2NyaXB0VmFsdWUmKTsK
IAogICAgIC8vIFRoZSBzcGVjIHJlcXVpcmVzIHRoYXQgdGhlIHNjcmlwdCBvYmplY3QgdGhhdCB3
cmFwcyB0aGUgdmFsdWUKICAgICAvLyBiZSB1bmNoYW5nZWQgdW50aWwgdGhlIHZhbHVlIGNoYW5n
ZXMgYXMgYSByZXN1bHQgb2YgdGhlIGN1cnNvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggYjUxNGZlOS4uZDdmNWFmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCkBAIC0yNSw2ICsy
NSw3IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9T
dGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElEQkN1cnNvciB7CiAgICAgLy8gRklYTUU6IEV2ZW50
dWFsbHkgcmVtb3ZlIGxlZ2FjeSBlbnVtIGNvbnN0YW50cywgc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTMxNQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5F
WFQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmgKaW5kZXggMWY3NGMzMy4uYjhiNzdlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmly
dHVhbCB2b2lkIHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRj
aFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOwotICAgIHZp
cnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKSB7
IH0KIAogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnNv
ci0+a2V5KCk7IH0KICAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCmluZGV4IDk4Y2M2
NWIuLjBjNWE3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbApAQCAtMjQsNyArMjQsOCBAQAogICovCiAKIFsK
LSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0aW9uYWw9SU5ERVhF
RF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJDdXJzb3JX
aXRoVmFsdWUgOiBJREJDdXJzb3IgewotICAgIFtWOEN1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0
cmlidXRlIElEQkFueSB2YWx1ZTsKKyAgICBbVjhDdXN0b21HZXR0ZXIsIEpTQ3VzdG9tR2V0dGVy
LCBDYWNoZWRBdHRyaWJ1dGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgdmFsdWU7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCmlu
ZGV4IDkxZWYxZDguLmFmMmVmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKQEAgLTI3LDcgKzI3LDggQEAKIFsKICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFdmVudFRh
cmdldAorICAgIEV2ZW50VGFyZ2V0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNl
IElEQkRhdGFiYXNlIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCmlu
ZGV4IGJiMjE1YmQuLmE3NWJhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwKQEAgLTI1LDcgKzI1LDgg
QEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgRG9Ob3RDaGVj
a0NvbnN0YW50cworICAgIERvTm90Q2hlY2tDb25zdGFudHMsCisgICAgSlNOb1N0YXRpY1RhYmxl
cwogXSBleGNlcHRpb24gSURCRGF0YWJhc2VFeGNlcHRpb24gewogCiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0ICAgY29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKaW5kZXggYTI0Y2QyYi4uNTc5YTZlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKQEAgLTI0
LDcgKzI0LDggQEAKICAqLwogCiBbCi0gICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQor
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwog
XSBpbnRlcmZhY2UgSURCRmFjdG9yeSB7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIEltcGxlbWVudGVkQXM9Z2V0RGF0YWJhc2VOYW1lc10gSURCUmVxdWVzdCB3ZWJraXRH
ZXREYXRhYmFzZU5hbWVzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4LmlkbAppbmRleCBlZmZhOWNmNC4uYzAwZTNmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbApAQCAtMjQsNyArMjQsOCBAQAogICov
CiAKIFsKLSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJJ
bmRleCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBJREJPYmplY3RTdG9yZSBvYmplY3RTdG9yZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsCmluZGV4IDNiOTZmYzEuLjI5ZjI3MWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbApAQCAtMjUsNyAr
MjUsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICBDdXN0
b21Ub0pTT2JqZWN0CisgICAgQ3VzdG9tVG9KU09iamVjdCwKKyAgICBKU05vU3RhdGljVGFibGVz
CiBdIGludGVyZmFjZSBJREJLZXkgewogICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxs
eSBsZWZ0IGJsYW5rLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmlkbAppbmRleCA4MjA2MjhhLi40MjQwMDNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCkBAIC0yNCw3ICsyNCw4
IEBACiAgKi8KIAogWwotICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBDb25k
aXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJm
YWNlIElEQktleVJhbmdlIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IGxvd2VyOwog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkgdXBwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggMmVhY2IzMS4u
NWJlMDFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcApAQCAtMTAxLDEyICsxMDEsMTMgQEAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3MKICAgICByZXR1cm4gZ2V0KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwog
fQogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNjcmlwdFZhbHVlJiBvYmplY3RWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyogaW5kZXhLZXlz
KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEsCisgICAgY29uc3QgU2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLAorICAgIElEQk9iamVjdFN0
b3JlOjpJbmRleEtleXMqIGluZGV4S2V5cykKIHsKICAgICBBU1NFUlQoaW5kZXhLZXlzKTsKLSAg
ICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgob2JqZWN0VmFsdWUsIGluZGV4TWV0YWRhdGEua2V5UGF0aCk7CisgICAgUmVmUHRy
PElEQktleT4gaW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KGNvbnRleHQsIG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOwogCiAgICAgaWYg
KCFpbmRleEtleSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDkgKzE1Niw4IEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFNjcmlwdFN0
YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFsdWUuc2VyaWFsaXplKHN0YXRlKTsK
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplSURCVmFsdWUoY29udGV4dCwg
dmFsdWUpOworICAgIGlmICghc2VyaWFsaXplZFZhbHVlKSB7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQpAQCAtMTgxLDcgKzE4MSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICBpZiAodXNlc0luTGluZUtleXMpIHsKLSAgICAgICAgUmVm
UHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5
ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb250ZXh0LCB2YWx1ZSwg
a2V5UGF0aCk7CiAgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlk
KCkpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwog
ICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTEsNyArMTkxLDcgQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW8KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIGlmICho
YXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIGlmICghY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHZhbHVlLCBrZXlQYXRoKSkgeworICAgICAgICAgICAg
aWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29udGV4dCwgdmFsdWUsIGtleVBh
dGgpKSB7CiAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CkBAIC0yMDgsNyAr
MjA4LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0b3I8SW5kZXhLZXlzPiBp
bmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRh
ZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwotICAg
ICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT52YWx1ZSwgdmFsdWUsICZrZXlzKTsK
KyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShjb250ZXh0LCBpdC0+dmFsdWUsIHZh
bHVlLCAma2V5cyk7CiAgICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgICAg
ICBpbmRleEtleXMuYXBwZW5kKGtleXMpOwogICAgIH0KQEAgLTMzMiw3ICszMzIsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgU2NyaXB0VmFsdWUgdmFsdWUgPSB2YWx1ZUFueS0+c2NyaXB0VmFs
dWUoKTsKIAogICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyBpbmRleEtleXM7
Ci0gICAgICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKG1faW5kZXhNZXRhZGF0YSwg
dmFsdWUsICZpbmRleEtleXMpOworICAgICAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1
ZShjb250ZXh0LCBtX2luZGV4TWV0YWRhdGEsIHZhbHVlLCAmaW5kZXhLZXlzKTsKIAogICAgICAg
ICAgICAgVmVjdG9yPElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+IGluZGV4S2V5c0xpc3Q7
CiAgICAgICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtleXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4
IDEzMjA0MzQuLjZiZDRjMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTI0LDcgKzI0LDggQEAKICAqLwogCiBbCi0g
ICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIENvbmRpdGlvbmFsPUlOREVYRURf
REFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURCT2JqZWN0U3Rv
cmUgewogICAgIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICBbSW1wbGVtZW50ZWRBcz1rZXlQYXRoQW55XSByZWFk
b25seSBhdHRyaWJ1dGUgSURCQW55IGtleVBhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCmluZGV4IGJiZGU5YmMuLmYw
MGU4ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9w
ZW5EQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuaWRsCkBAIC0yNiw3ICsyNiw4IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgRXZlbnRUYXJnZXQK
KyAgICBFdmVudFRhcmdldCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJP
cGVuREJSZXF1ZXN0IDogSURCUmVxdWVzdCB7CiAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25ibG9ja2VkOwogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udXBncmFkZW5lZWRlZDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5k
ZXggM2Y2ZjljZC4uMmVmMGZhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTM2OSwxMCArMzY5LDEwIEBAIHZvaWQgSURCUmVxdWVz
dDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBTZXJpYWxp
emVkU2NyaXB0CiAKICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtl
eTsKICNpZm5kZWYgTkRFQlVHCi0gICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICBS
ZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB2YWx1ZSwga2V5UGF0aCk7CiAgICAg
QVNTRVJUKCFleHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChwcmltYXJ5S2V5Lmdl
dCgpKSk7CiAjZW5kaWYKLSAgICBib29sIGluamVjdGVkID0gaW5qZWN0SURCS2V5SW50b1Njcmlw
dFZhbHVlKHByaW1hcnlLZXksIHZhbHVlLCBrZXlQYXRoKTsKKyAgICBib29sIGluamVjdGVkID0g
aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcHJp
bWFyeUtleSwgdmFsdWUsIGtleVBhdGgpOwogICAgIEFTU0VSVF9VTlVTRUQoaW5qZWN0ZWQsIGlu
amVjdGVkKTsKICAgICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7CiB9CkBAIC00NzIsNyArNDcy
LDcgQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQp
IHsKICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBnZXRSZXN1bHRDdXJzb3IoKTsKICAgICAgICAg
aWYgKGN1cnNvclRvTm90aWZ5KQotICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnNldFZhbHVl
UmVhZHkobV9jdXJzb3JLZXkucmVsZWFzZSgpLCBtX2N1cnNvclByaW1hcnlLZXkucmVsZWFzZSgp
LCBtX2N1cnNvclZhbHVlKTsKKyAgICAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5zZXRWYWx1ZVJl
YWR5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV9jdXJzb3JLZXkucmVsZWFzZSgpLCBtX2N1
cnNvclByaW1hcnlLZXkucmVsZWFzZSgpLCBtX2N1cnNvclZhbHVlKTsKICAgICB9CiAKICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCmluZGV4
IDRlOGZmMDkuLjBiMTY5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaWRsCkBAIC0zMCw3ICszMCw4IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgRXZlbnRUYXJnZXQK
KyAgICBFdmVudFRhcmdldCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJS
ZXF1ZXN0IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHJlc3VsdAogICAgICAgICBn
ZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKaW5kZXggNzJmYWE4ZC4u
OGVjNGIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmlkbApAQCAtMjcsNyArMjcsOCBAQAogWwogICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgIEV2ZW50VGFyZ2V0Cisg
ICAgRXZlbnRUYXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURCVHJh
bnNhY3Rpb24gewogICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHJlbW92ZSBsZWdhY3kgZW51bSBj
b25zdGFudHMsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUz
MTUKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBSRUFEX09OTFkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVu
dC5pZGwKaW5kZXggMDgxMGRkMi4uOGYyMjU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsCkBAIC0y
NSw3ICsyNSw4IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAg
IEludGVyZmFjZU5hbWU9SURCVmVyc2lvbkNoYW5nZUV2ZW50CisgICAgSW50ZXJmYWNlTmFtZT1J
REJWZXJzaW9uQ2hhbmdlRXZlbnQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2Ug
SURCVXBncmFkZU5lZWRlZEV2ZW50IDogRXZlbnQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxvbmcgb2xkVmVyc2lvbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsb25nIG5ld1ZlcnNpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAppbmRleCBmOTJl
ZjUzLi44ZDIxMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKQEAgLTI0LDcgKzI0LDggQEAKICAq
LwogCiBbCi0gICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURC
VmVyc2lvbkNoYW5nZUV2ZW50IDogRXZlbnQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgdmVyc2lvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKaW5kZXggNDk3YjU3Yi4u
OWI2ZTFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbApAQCAtMjYsNyArMjYsOCBAQAogWwog
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAot
ICAgIEV2ZW50VGFyZ2V0CisgICAgRXZlbnRUYXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwog
XSBpbnRlcmZhY2UgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QgOiBJREJSZXF1ZXN0IHsKICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCBiNTVlNzZiLi5m
N2I0NTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBN
aWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCwyMiArMjksMjg4IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVk
ZSAiSlNJREJLZXkuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKKyNp
bmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktl
eUZyb21WYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorY2xh
c3MgSURCSlNDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBJREJKU0NvbnRleHQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBtX2xvY2soY29udGV4dC0+Z2xvYmFsRGF0
YSgpKQorICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc2NyaXB0U3Rh
dGUoMCkKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2Nv
bnRleHQpOworICAgICAgICAgICAgbV9zY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZFNjcmlwdFN0YXRl
KGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShXT1JLRVJTKQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKKyAgICAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxXb3JrZXJDb250ZXh0Kj4obV9jb250ZXh0KTsKKyAgICAgICAgICAgIG1fc2NyaXB0U3Rh
dGUgPSBzY3JpcHRTdGF0ZUZyb21Xb3JrZXJDb250ZXh0KHdvcmtlckNvbnRleHQpOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgp
IHsgcmV0dXJuIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fc2NyaXB0U3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7IH0KKyAgICBFeGVjU3RhdGUqIGV4ZWNTdGF0ZSgpIHsgcmV0dXJu
IG1fc2NyaXB0U3RhdGU7IH0KKworcHJpdmF0ZToKKyAgICBKU0xvY2tIb2xkZXIgbV9sb2NrOwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKKyAgICBTY3JpcHRTdGF0ZSog
bV9zY3JpcHRTdGF0ZTsKK307CisKK3N0YXRpYyBib29sIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBKU1ZhbHVlJiByZXN1
bHQpCiB7Ci0gICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gSURCS2V5Ojpj
cmVhdGVJbnZhbGlkKCk7Ci0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICBpZiAob2JqZWN0
LmlzU3RyaW5nKCkgJiYga2V5UGF0aEVsZW1lbnQgPT0gImxlbmd0aCIpIHsKKyAgICAgICAgcmVz
dWx0ID0ganNOdW1iZXIob2JqZWN0LnRvU3RyaW5nKGV4ZWMpLT5sZW5ndGgoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoIW9iamVjdC5pc09iamVjdCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxE
YXRhKCksIGtleVBhdGhFbGVtZW50LnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICghYXNPYmplY3Qo
b2JqZWN0KS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXN1bHQgPSBhc09iamVjdChvYmplY3QpLT5nZXQoZXhlYywgaWRlbnRpZmll
cik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNhblNldChKU1ZhbHVlIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCkKK3sKKyAgICByZXR1cm4gb2JqZWN0
LmlzT2JqZWN0KCk7Cit9CisKK3N0YXRpYyBib29sIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUmIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSBqc1ZhbHVl
KQoreworICAgIGlmICghY2FuU2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCksIGtleVBhdGhFbGVtZW50LnV0ZjgoKS5kYXRhKCkpOworICAgIGFzT2JqZWN0KG9iamVjdCkt
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGpzVmFsdWUpOworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heGltdW1EZXB0aCA9IDIw
MDA7CisKK3N0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPEpTQXJyYXkqPiYgc3RhY2spCit7
CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkgJiYgIWlzbmFuKHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKTsKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIElEQktleTo6
Y3JlYXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0
YW5jZTo6c19pbmZvKSAmJiAhaXNuYW4odmFsdWVUb0RhdGUoZXhlYywgdmFsdWUpKSkKKyAgICAg
ICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZSh2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkpOwor
ICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdCh2YWx1ZSk7CisgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSB8fCBvYmplY3Qt
PmluaGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKSB7CisgICAgICAgICAgICBKU0FycmF5KiBhcnJh
eSA9IGFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5
LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGFycmF5KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChzdGFjay5zaXplKCkgPj0g
bWF4aW11bURlcHRoKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc3Rh
Y2suYXBwZW5kKGFycmF5KTsKKworICAgICAgICAgICAgSURCS2V5OjpLZXlBcnJheSBzdWJrZXlz
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdldEluZGV4KGV4ZWMsIGkpOwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IHN1YmtleSA9IGNyZWF0ZUlEQktleUZyb21W
YWx1ZShleGVjLCBpdGVtLCBzdGFjayk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWJrZXkpCisg
ICAgICAgICAgICAgICAgICAgIHN1YmtleXMuYXBwZW5kKElEQktleTo6Y3JlYXRlSW52YWxpZCgp
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN1YmtleXMuYXBw
ZW5kKHN1YmtleSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHN1YmtleXMpOwor
ICAgICAgICB9CisgICAgfQogICAgIHJldHVybiAwOwogfQogCitQYXNzUmVmUHRyPElEQktleT4g
Y3JlYXRlSURCS2V5RnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBWZWN0b3I8SlNBcnJheSo+IHN0YWNrOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNy
ZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCB2YWx1ZSwgc3RhY2spOworICAgIGlmIChrZXkpCisg
ICAgICAgIHJldHVybiBrZXk7CisgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwor
fQorCitzdGF0aWMgSlNWYWx1ZSBnZXROdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgcm9vdFZhbHVlLAorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxl
bWVudHMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJvb3RW
YWx1ZSk7CisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7CisgICAgICAgIGlmIChjdXJy
ZW50VmFsdWUuaXNTdHJpbmcoKSAmJiBrZXlQYXRoRWxlbWVudHNbaV0gPT0gImxlbmd0aCIpCisg
ICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoY3VycmVudFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT5s
ZW5ndGgoKSk7CisgICAgICAgIGlmICghY3VycmVudFZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgSlNWYWx1ZSBwYXJlbnRWYWx1ZShj
dXJyZW50VmFsdWUpOworICAgICAgICBpZiAoIWdldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0
aEVsZW1lbnRzW2ldLCBjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorICAgIHJldHVybiBjdXJyZW50VmFsdWU7Cit9CisKK3N0YXRpYyBQYXNz
UmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQ
YXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwga2V5UGF0
aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVy
cm9yTm9uZSk7CisKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZS5qc1ZhbHVlKCk7CisgICAg
anNWYWx1ZSA9IGdldE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFsdWUsIGtleVBhdGhFbGVt
ZW50cywKKyAgICAgICAga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgaWYgKGpzVmFsdWUu
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktl
eUZyb21WYWx1ZShleGVjLCBqc1ZhbHVlKTsKK30KKworc3RhdGljIEpTVmFsdWUgZW5zdXJlTnRo
VmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwKKyAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOworCisgICAgQVNTRVJUKGluZGV4
IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbmRleDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVl
KTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50
c1tpXTsKKyAgICAgICAgaWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50
LCBjdXJyZW50VmFsdWUpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgICAgICAgICBpZiAoIXNldChleGVjLCBwYXJlbnRW
YWx1ZSwga2V5UGF0aEVsZW1lbnQsIEpTVmFsdWUob2JqZWN0KSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBKU1ZhbHVl
KG9iamVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY3VycmVudFZhbHVlOwor
fQorCitzdGF0aWMgYm9vbCBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1l
bnRzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBpZiAoIXJvb3RWYWx1ZS5pc09iamVjdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFs
dWUpOworCisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUg
cGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRo
RWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFnZXQoZXhlYywgcGFy
ZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIGNhblNldChwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0VmFs
dWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgi
aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBl
KCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0
aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNl
S2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBB
U1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIGlmIChrZXlQ
YXRoRWxlbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZS5qc1ZhbHVlKCk7CisgICAgaWYgKCFqc1ZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIElEQkpTQ29udGV4dCBpZGJDb250ZXh0
KGNvbnRleHQpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGlkYkNvbnRleHQuZXhlY1N0YXRlKCk7
CisKKyAgICBKU1ZhbHVlIHBhcmVudCA9IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGFz
T2JqZWN0KGpzVmFsdWUpLAorICAgICAgICBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50
cy5zaXplKCkgLSAxKTsKKyAgICBpZiAocGFyZW50LmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghc2V0KGV4ZWMsIHBhcmVudCwga2V5UGF0aEVsZW1lbnRz
Lmxhc3QoKSwKKyAgICAgICAgdG9KUyhleGVjLCBpZGJDb250ZXh0Lmdsb2JhbE9iamVjdCgpLCBr
ZXkuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQ
YXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNjcmlwdFZhbHVlJiB2
YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgiKTsKKyAgICBBU1NFUlQoIWtleVBhdGgu
aXNOdWxsKCkpOworCisgICAgSURCSlNDb250ZXh0IGlkYkNvbnRleHQoY29udGV4dCk7CisgICAg
RXhlY1N0YXRlKiBleGVjID0gaWRiQ29udGV4dC5leGVjU3RhdGUoKTsKKworICAgIGlmIChrZXlQ
YXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpBcnJheVR5cGUpIHsKKyAgICAgICAgSURCS2V5OjpL
ZXlBcnJheSByZXN1bHQ7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcnJheSA9IGtl
eVBhdGguYXJyYXkoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LnNp
emUoKTsgaSsrKSB7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBhcnJheVtpXSk7CisgICAg
ICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCS2V5Ojpj
cmVhdGVBcnJheShyZXN1bHQpOworICAgIH0KKworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9
PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7Cit9CisK
K2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImNhbkluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZSIpOworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJp
bmdUeXBlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CisgICAgSURCS2V5
UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGguc3RyaW5n
KCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQ
YXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYgKCFrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJREJKU0NvbnRleHQgaWRiQ29udGV4dChjb250
ZXh0KTsKKyAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoaWRiQ29udGV4dC5l
eGVjU3RhdGUoKSwKKyAgICAgICAgc2NyaXB0VmFsdWUuanNWYWx1ZSgpLCBrZXlQYXRoRWxlbWVu
dHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsKK30KKworU2NyaXB0VmFsdWUgZGVzZXJp
YWxpemVJREJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUpCit7CisgICAgSURCSlNDb250ZXh0IGlk
YkNvbnRleHQoY29udGV4dCk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplZFZhbHVlID0gcHJwVmFsdWU7CisgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSkKKyAgICAg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShpZGJDb250ZXh0LmV4ZWNTdGF0ZSgp
LAorICAgICAgICAgICAgc2VyaWFsaXplZFZhbHVlLmdldCgpLCBOb25UaHJvd2luZyk7CisgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKCpjb250ZXh0LT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKTsKK30K
KworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZUlEQlZhbHVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSkK
K3sKKyAgICBJREJKU0NvbnRleHQgaWRiQ29udGV4dChjb250ZXh0KTsKKyAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShpZGJDb250ZXh0LmV4ZWNTdGF0ZSgpLCBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCkp
OworICAgIGlmIChpZGJDb250ZXh0LmV4ZWNTdGF0ZSgpLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5oCmluZGV4IDhlMGM5YzUuLjVmYTM3NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTI5LDcgKzI5LDkgQEAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIgCisKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICs0MCwxMiBAQCBj
bGFzcyBJREJLZXk7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwogCitib29sIGluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBT
Y3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK2Jvb2wgY2FuSW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3Jp
cHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURC
VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPik7CitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplSURC
VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNjcmlwdFZhbHVlJik7CisKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGljdGlvbmFyeS5jcHAKaW5kZXggZjQ3NmQ3Mi4uNWUzZTk2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCkBAIC01OCwxMiArNTgsMTYgQEAg
SlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFByb3Bl
cnR5KGNvbnN0IGNoYXIqIHByb3BlcnQKICAgICBpZiAoIW1faW5pdGlhbGl6ZXJPYmplY3QuZ2V0
KCktPmdldFByb3BlcnR5U2xvdChtX2V4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQogICAgICAgICBy
ZXR1cm4gTm9Qcm9wZXJ0eUZvdW5kOwogCi0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgbV9leGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAgIH0KIAog
ICAgIGZpbmFsUmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIGlkZW50aWZpZXIpOwotICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CisgICAgICAgIG1fZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvblRocm93bjsKKyAgICB9CiAKICAgICByZXR1cm4gUHJvcGVydHlGb3VuZDsKIH0K
QEAgLTExMSw4ICsxMTUsMTAgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQogCiB2b2lkIEpTRGlj
dGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVj
dG9yPFN0cmluZz4mIHJlc3VsdCkKIHsKLSAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZShleGVjLCB2YWx1
ZSwgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGlj
dGlvbmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKaW5k
ZXggM2M5ODczZS4uMDkwMGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEaWN0aW9uYXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0
aW9uYXJ5LmgKQEAgLTE1MCw4ICsxNTAsMTAgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJl
c3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5QW5kUmVzdWx0KGNvbnN0IGNoYXIKICAg
ICAgICAgUmVzdWx0IHJlc3VsdDsKICAgICAgICAgY29udmVydFZhbHVlKG1fZXhlYywgdmFsdWUs
IHJlc3VsdCk7CiAKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBtX2V4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAgICAg
ICB9CiAKICAgICAgICAgc2V0dGVyKGNvbnRleHQsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCmluZGV4IDc3
MTEzYzcuLmUwZmZmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCQW55Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFu
eUN1c3RvbS5jcHAKQEAgLTY0LDggKzY0LDYgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCQW55KiBpZGJBbnkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGNhc2UgSURCQW55OjpOdWxsVHlwZToKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIGNhc2UgSURCQW55OjpTdHJpbmdUeXBlOgotICAg
ICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaWRiQW55LT5zdHJpbmcoKSk7CiAg
ICAgY2FzZSBJREJBbnk6OkRPTVN0cmluZ0xpc3RUeXBlOgogICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+ZG9tU3RyaW5nTGlzdCgpKTsKICAgICBjYXNlIElE
QkFueTo6SURCQ3Vyc29yVHlwZToKQEAgLTg0LDggKzgyLDEyIEBAIEpTVmFsdWUgdG9KUyhFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElEQkFueSogaWRi
QW55KQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRi
T2JqZWN0U3RvcmUoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQlRyYW5zYWN0aW9uVHlwZToKICAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYlRyYW5zYWN0
aW9uKCkpOwotICAgIGNhc2UgSURCQW55OjpTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlOgotICAg
ICAgICByZXR1cm4gaWRiQW55LT5zZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUo
ZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICBjYXNlIElEQkFueTo6U2NyaXB0VmFsdWVUeXBlOgor
ICAgICAgICByZXR1cm4gaWRiQW55LT5zY3JpcHRWYWx1ZSgpLmpzVmFsdWUoKTsKKyAgICBjYXNl
IElEQkFueTo6U3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4
ZWMsIGlkYkFueS0+c3RyaW5nKCkpOworICAgIGNhc2UgSURCQW55OjpJbnRlZ2VyVHlwZToKKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGlkYkFueS0+aW50ZWdlcigpKTsKICAgICB9CiAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43ZGY5MjJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCkBAIC0wLDAgKzEs
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxA
NjhrLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJKU0lEQkN1cnNvcldp
dGhWYWx1ZS5oIgorCisjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNJREJBbnkuaCIKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZh
bHVlOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgSURCQ3Vyc29yKiBjdXJz
b3IgPSBpbXBsKCk7CisgICAgaWYgKCFjdXJzb3ItPnZhbHVlSXNEaXJ0eSgpKSB7CisgICAgICAg
IGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gbV92YWx1ZS5nZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjYWNoZWRWYWx1ZTsKKyAgICB9CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGN1cnNvci0+dmFsdWUoKS5nZXQoKSk7CisgICAgY29uc3RfY2Fz
dDxKU0lEQkN1cnNvcldpdGhWYWx1ZSo+KHRoaXMpLT5tX3ZhbHVlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQktleUN1c3RvbS5jcHAKaW5kZXggODVhYTVkYi4uZTQ4NWJkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcApAQCAtNDgsMTAgKzQ4
LDkgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSURCS2V5KiBrZXkpCiAgICAgICAgICAgICBjb25zdCBJREJLZXk6OktleUFy
cmF5JiBpbkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBp
bkFycmF5LnNpemUoKTsKICAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIHNpemUpOwotICAgICAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBJREJLZXkq
IGFycmF5S2V5ID0gaW5BcnJheS5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgICAgICBvdXRBcnJh
eS0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBhcnJheUtleSkpOworICAgICAgICAgICAgICAgIG91dEFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJyYXlLZXkpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKG91dEFycmF5KTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPcGVuREJSZXF1ZXN0Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1
c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjNTdkZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVx
dWVzdEN1c3RvbS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIkpTSURCT3BlbkRCUmVxdWVzdC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIEpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNJREJPcGVuREJSZXF1ZXN0KiBqc1Jl
cXVlc3QgPSBqc0Nhc3Q8SlNJREJPcGVuREJSZXF1ZXN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhqc1JlcXVlc3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNTRVJU
KFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKGpzUmVxdWVzdC0+c3RydWN0
dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGpzUmVxdWVzdCwgdmlzaXRvcik7CisgICAgc3RhdGljX2Nhc3Q8SURCT3Bl
bkRCUmVxdWVzdCo+KGpzUmVxdWVzdC0+aW1wbCgpKS0+dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZp
c2l0b3IpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKaW5kZXggZjU1OWY0MS4uY2MzOGU2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMjQsMTkgKzI1LDI3IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpCit2
b2lkIEpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICBKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KiBqc1JlcXVlc3QgPSBqc0Nhc3Q8
SlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoanNSZXF1ZXN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1
cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5X
aXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVChqc1JlcXVlc3QtPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihqc1JlcXVlc3QsIHZpc2l0b3IpOworICAgIHN0YXRpY19jYXN0PElEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0Kj4oanNSZXF1ZXN0LT5pbXBsKCkpLT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlz
aXRvcik7CiB9CiAKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAppbmRleCA1MjA4MTRlLi4yMzU3OGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE4NDIsNiAr
MTg0MiwxMSBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqCiAKIFN0cmluZyBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OnRvV2lyZVN0cmluZygpIGNvbnN0CiB7CisgICAgaWYgKG1fZGF0YS5zaXplKCkg
JiAxKSB7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBkYXRhKG1fZGF0YSk7CisgICAg
ICAgIGRhdGEuYXBwZW5kKDApOworICAgICAgICByZXR1cm4gQ2xvbmVEZXNlcmlhbGl6ZXI6OnRv
V2lyZVN0cmluZyhkYXRhKTsKKyAgICB9CiAgICAgcmV0dXJuIENsb25lRGVzZXJpYWxpemVyOjp0
b1dpcmVTdHJpbmcobV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCA4M2FlOWIyLi4xNTM4YzNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cApAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb25zdCBTY3JpcHRWYWx1CiAgICAgcmV0dXJu
IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2OEtleSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBj
cmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNjcmlwdFZhbHVlJiB2
YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7
CiAgICAgSURCX1RSQUNFKCJjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoIik7
CiAgICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKQEAgLTIyMCw3ICsyMjAsMTYgQEAgU2Ny
aXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRDb250ZXh0LCBQYXNzUmVmUHQKICAgICByZXR1cm4gU2NyaXB0VmFsdWUodjg6Ok51bGwoKSk7
CiB9CiAKLWJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK1Bh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVJREJWYWx1ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIFNjcmlw
dFN0YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7CisgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFsdWUuc2VyaWFsaXplKHN0YXRl
KTsKKyAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKTsKK30KKworYm9vbCBpbmplY3RJREJL
ZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkK
IHsKICAgICBJREJfVFJBQ0UoImluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogCkBAIC0y
NDcsNyArMjU2LDcgQEAgYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb24KICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0VmFs
dWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorYm9vbCBjYW5Jbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNj
cmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAg
ICBJREJfVFJBQ0UoImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogICAgIEFTU0VS
VChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCBhNDgyZGM5
Li5jZWFhMjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5k
aW5nVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGlu
Z1V0aWxpdGllcy5oCkBAIC00MCwxMCArNDAsMTEgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZh
bHVlOwogCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4OjpIYW5k
bGU8djg6OlZhbHVlPik7CiAKLWJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFBhc3NS
ZWZQdHI8SURCS2V5PiwgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Ci1QYXNzUmVm
UHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb25zdCBT
Y3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKLWJvb2wgY2FuSW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworYm9v
bCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCS2V5PiwgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitQYXNz
UmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRo
Jik7Citib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CiBTY3JpcHRW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBT
Y3JpcHRWYWx1ZSYpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01T
dHJpbmdMaXN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmlkbAppbmRl
eCBkMGViMzYyLi5hYTY0M2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3Ry
aW5nTGlzdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaWRsCkBA
IC0yNSw3ICsyNSw4IEBACiAKIFsKICAgICBJbmRleGVkR2V0dGVyLAotICAgIEpTQ3VzdG9tVG9O
YXRpdmVPYmplY3QKKyAgICBKU0N1c3RvbVRvTmF0aXZlT2JqZWN0LAorICAgIEpTTm9TdGF0aWNU
YWJsZXMKIF0gaW50ZXJmYWNlIERPTVN0cmluZ0xpc3QgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKICAgICBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1O
dWxsXSBET01TdHJpbmcgaXRlbShpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNp
Z25lZCBsb25nIGluZGV4KTsKLS0gCjEuNy45LjUKCg==
</data>
<flag name="commit-queue"
          id="182927"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169577</attachid>
            <date>2012-10-19 01:59:10 -0700</date>
            <delta_ts>2012-10-19 02:11:31 -0700</delta_ts>
            <desc>Implement IndexedDB for JSC</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>52402</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVGh1LCAxOCBPY3Qg
MjAxMiAxNDoxNjoyNiAtMDcwMApTdWJqZWN0OiBJbXBsZW1lbnQgSW5kZXhlZCBEYXRhYmFzZSBm
b3IgSlNDLgoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgODkgKysrKysrKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSAgICAgICAgICAgICAgICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5pZGwgICAgICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcCAgICAgfCAgICA4ICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgICAgIHwgICAgMSArCiAuLi4vTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaCAgICAgICB8ICAgIDIgKy0KIC4uLi9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsICAgICAgIHwgICAgNSArLQog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsICAgfCAgICAz
ICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsICAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRs
ICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aWRsICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXkuaWRsICAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmlkbCAgIHwgICAgMyArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwICAgfCAgIDIyICstCiAuLi4vV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgICB8ICAgIDMgKy0KIC4uLi9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsIHwgICAgMyArLQogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgICAgfCAgICA2ICstCiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbCAgICB8ICAgIDMgKy0KIC4u
Li9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCAgIHwgICAgMyAr
LQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgICAgfCAg
ICAzICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCAg
ICB8ICAgIDMgKy0KIC4uLi9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5pZGwgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAgfCAgMjc3ICsrKysrKysrKysrKysrKysrKystCiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggICB8ICAgIDggKwogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcCAgICAgICAgfCAgIDEyICstCiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaCAgICAgICAgICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCAgICAgIHwgICAxMCAr
LQogLi4uL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcCAgICAgfCAg
IDU3ICsrKysKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCAg
ICAgIHwgICAgMyArLQogLi4uL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5j
cHAgICAgICAgfCAgIDUyICsrKysKIC4uLi9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3Vz
dG9tLmNwcCAgICAgICAgIHwgICAxNyArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcCAgfCAgICA1ICsKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIHwgICAxNSArLQogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oICAgfCAgICA3ICstCiBTb3VyY2UvV2ViQ29yZS9k
b20vRE9NU3RyaW5nTGlzdC5pZGwgICAgICAgICAgICAgICB8ICAgIDMgKy0KIDM2IGZpbGVzIGNo
YW5nZWQsIDU5MyBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3Rv
bS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lE
Qk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDZjMDRjZDguLjBkMTk1ZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MiBAQAorMjAxMi0xMC0xOCAgTWljaGFlbCBQcnVldHQg
IDxtaWNoYWVsQDY4ay5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IEluZGV4ZWQgRGF0YWJhc2Ug
Zm9yIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ1MTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiLyoKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbDoKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vy
c29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaDoKKyAgICAgICAgKElE
QkN1cnNvcik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbDoKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnBvc3RTdWNjZXNzSGFuZGxlckNhbGxi
YWNrKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRs
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGw6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXguaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5p
ZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OnB1dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCT3BlbkRCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvblN1Y2Nlc3MpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlVw
Z3JhZGVOZWVkZWRFdmVudC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5pZGw6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHA6CisgICAgICAgIChJREJKU0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCSlNDb250ZXh0OjpJREJKU0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSlNDb250
ZXh0OjpnbG9iYWxPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCSlNDb250ZXh0OjpleGVj
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2FuU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnNldCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
TnRoVmFsdWVPbktleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVOdGhWYWx1ZU9u
S2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aCk6
CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRlc2VyaWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXpl
SURCVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKToKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFy
eTo6dHJ5R2V0UHJvcGVydHlBbmRSZXN1bHQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURC
QW55Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SlNJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0
b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQk9wZW5EQlJlcXVl
c3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6dG9XaXJlU3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRp
bGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1
ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6c2VyaWFsaXplSURCVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVl
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vRE9NU3RyaW5nTGlzdC5pZGw6CisKIDIwMTItMTAt
MTggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBzaG9y
dE1vbnRoTGFiZWxzIGFuZCBzaG9ydFN0YW5kQWxvbmVNb250aExhYmVscyB0byBMb2NhbGl6ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGVhMmIyMmUuLjNkMTFkYmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDY3LDEyICs0NjcsMTYgQEAgd2ViY29yZV9i
dWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCS2V5UmFuZ2Uu
aCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQk9iamVjdFN0b3JlLmNwcCBcCiAJRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQk9iamVjdFN0b3JlLmggXAorCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSlNJREJPcGVuREJSZXF1ZXN0LmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0lEQk9wZW5EQlJlcXVlc3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlJl
cXVlc3QuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCUmVxdWVzdC5oIFwKIAlE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rpb24uY3BwIFwKIAlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTSURCVHJhbnNhY3Rpb24uaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lE
QlVwZ3JhZGVOZWVkZWRFdmVudC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJV
cGdyYWRlTmVlZGVkRXZlbnQuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJbWFnZURhdGEu
Y3BwIFwKQEAgLTEyMjYsNiArMTIzMCw3IEBAIGRvbV9iaW5kaW5nX2lkbHMgKz0gXAogCSQoV2Vi
Q29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIFwKIAkkKFdlYkNvcmUp
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgXAogCSQoV2ViQ29y
ZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCBcCisJJChXZWJD
b3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsIFwKIAkkKFdl
YkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCBcCiAJ
JChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9Xb3JrZXJDb250ZXh0SW5kZXhlZERhdGFiYXNl
LmlkbCBcCiAJJChXZWJDb3JlKS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmlkbCBc
CkBAIC0yMjQ5LDYgKzIyNTQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9H
Q0NvbnRyb2xsZXIuaCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuaCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlckN1c3Rv
bS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJWaWV3SGVs
cGVyLmggXApAQCAtMjM0Nyw3ICsyMzUzLDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uaCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNJREJPcGVuREJSZXF1ZXN0Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSW1hZ2VDb25zdHJ1Y3Rvci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJBbnkuaWRsCmluZGV4IDU5NjE4YWQuLjAxNDFiMDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbApAQCAtMjUsNyArMjUsOCBAQAog
CiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICBDdXN0b21Ub0pTT2Jq
ZWN0CisgICAgQ3VzdG9tVG9KU09iamVjdCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVy
ZmFjZSBJREJBbnkgewogICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxseSBsZWZ0IGJs
YW5rLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3Iu
Y3BwCmluZGV4IDk5MGUzYTQuLjBhYWU0NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgU2NyaXB0CiAgICAgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3Jl
LT5tZXRhZGF0YSgpLmtleVBhdGg7CiAgICAgY29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFr
ZXlQYXRoLmlzTnVsbCgpOwogICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQ
dHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5
UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkg
PSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnRleHQsIHZhbHVlLCBr
ZXlQYXRoKTsKICAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8ICFrZXlQYXRoS2V5LT5pc0VxdWFs
KG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjU5LDcg
KzI1OSw3IEBAIHZvaWQgSURCQ3Vyc29yOjpjbG9zZSgpCiAgICAgfQogfQogCi12b2lkIElEQkN1
cnNvcjo6c2V0VmFsdWVSZWFkeShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElE
QktleT4gcHJpbWFyeUtleSwgU2NyaXB0VmFsdWUmIHZhbHVlKQordm9pZCBJREJDdXJzb3I6OnNl
dFZhbHVlUmVhZHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFNjcmlwdFZhbHVlJiB2
YWx1ZSkKIHsKICAgICBtX2N1cnJlbnRLZXkgPSBrZXk7CiAgICAgbV9jdXJyZW50UHJpbWFyeUtl
eSA9IHByaW1hcnlLZXk7CkBAIC0yNjksMTAgKzI2OSwxMCBAQCB2b2lkIElEQkN1cnNvcjo6c2V0
VmFsdWVSZWFkeShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJp
bWFyeQogICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhID0gb2Jq
ZWN0U3RvcmUtPm1ldGFkYXRhKCk7CiAgICAgICAgIGlmIChtZXRhZGF0YS5hdXRvSW5jcmVtZW50
ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7CiAjaWZuZGVmIE5ERUJVRwotICAgICAg
ICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0
VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBtZXRhZGF0YS5rZXlQYXRoKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5k
S2V5UGF0aChjb250ZXh0LCB2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7CiAgICAgICAgICAgICBB
U1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5pc0VxdWFsKG1fY3VycmVudFByaW1h
cnlLZXkuZ2V0KCkpKTsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBpbmplY3RlZCA9IGluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShtX2N1cnJlbnRQcmltYXJ5S2V5LCB2YWx1ZSwgbWV0YWRh
dGEua2V5UGF0aCk7CisgICAgICAgICAgICBib29sIGluamVjdGVkID0gaW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlKGNvbnRleHQsIG1fY3VycmVudFByaW1hcnlLZXksIHZhbHVlLCBtZXRhZGF0
YS5rZXlQYXRoKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBpcyBubyB3YXkgdG8gcmVw
b3J0IGVycm9ycyBoZXJlLiBNb3ZlIHRoaXMgaW50byBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9u
IHNvIHRoYXQgd2UgY2FuIGFib3J0IHRoZSB0cmFuc2FjdGlvbiB0aGVyZS4gU2VlOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTIyNzgKICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoaW5qZWN0ZWQsIGluamVjdGVkKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAppbmRleCA1NTg5YzIyLi43MDRlNTBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaApAQCAtODIs
NyArODIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNr
KCk7CiAgICAgdm9pZCBjbG9zZSgpOwotICAgIHZvaWQgc2V0VmFsdWVSZWFkeShQYXNzUmVmUHRy
PElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBTY3JpcHRWYWx1ZSYpOwor
ICAgIHZvaWQgc2V0VmFsdWVSZWFkeShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgU2NyaXB0VmFsdWUmKTsK
IAogICAgIC8vIFRoZSBzcGVjIHJlcXVpcmVzIHRoYXQgdGhlIHNjcmlwdCBvYmplY3QgdGhhdCB3
cmFwcyB0aGUgdmFsdWUKICAgICAvLyBiZSB1bmNoYW5nZWQgdW50aWwgdGhlIHZhbHVlIGNoYW5n
ZXMgYXMgYSByZXN1bHQgb2YgdGhlIGN1cnNvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKaW5kZXggYjUxNGZlOS4uZDdmNWFmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCkBAIC0yNSw2ICsy
NSw3IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9T
dGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElEQkN1cnNvciB7CiAgICAgLy8gRklYTUU6IEV2ZW50
dWFsbHkgcmVtb3ZlIGxlZ2FjeSBlbnVtIGNvbnN0YW50cywgc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTMxNQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5F
WFQgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmgKaW5kZXggMWY3NGMzMy4uYjhiNzdlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oCkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmly
dHVhbCB2b2lkIHByZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRj
aFJlc2V0KGludCB1c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOwotICAgIHZp
cnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKSB7
IH0KIAogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnNv
ci0+a2V5KCk7IH0KICAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0IHsg
cmV0dXJuIG1fY3Vyc29yLT5wcmltYXJ5S2V5KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCmluZGV4IDk4Y2M2
NWIuLjBjNWE3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbApAQCAtMjQsNyArMjQsOCBAQAogICovCiAKIFsK
LSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0aW9uYWw9SU5ERVhF
RF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJDdXJzb3JX
aXRoVmFsdWUgOiBJREJDdXJzb3IgewotICAgIFtWOEN1c3RvbUdldHRlcl0gcmVhZG9ubHkgYXR0
cmlidXRlIElEQkFueSB2YWx1ZTsKKyAgICBbVjhDdXN0b21HZXR0ZXIsIEpTQ3VzdG9tR2V0dGVy
LCBDYWNoZWRBdHRyaWJ1dGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgdmFsdWU7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCmlu
ZGV4IDkxZWYxZDguLmFmMmVmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKQEAgLTI3LDcgKzI3LDggQEAKIFsKICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFdmVudFRh
cmdldAorICAgIEV2ZW50VGFyZ2V0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNl
IElEQkRhdGFiYXNlIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCmlu
ZGV4IGJiMjE1YmQuLmE3NWJhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwKQEAgLTI1LDcgKzI1LDgg
QEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgRG9Ob3RDaGVj
a0NvbnN0YW50cworICAgIERvTm90Q2hlY2tDb25zdGFudHMsCisgICAgSlNOb1N0YXRpY1RhYmxl
cwogXSBleGNlcHRpb24gSURCRGF0YWJhc2VFeGNlcHRpb24gewogCiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0ICAgY29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKaW5kZXggYTI0Y2QyYi4uNTc5YTZlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKQEAgLTI0
LDcgKzI0LDggQEAKICAqLwogCiBbCi0gICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQor
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwog
XSBpbnRlcmZhY2UgSURCRmFjdG9yeSB7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIEltcGxlbWVudGVkQXM9Z2V0RGF0YWJhc2VOYW1lc10gSURCUmVxdWVzdCB3ZWJraXRH
ZXREYXRhYmFzZU5hbWVzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4LmlkbAppbmRleCBlZmZhOWNmNC4uYzAwZTNmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbApAQCAtMjQsNyArMjQsOCBAQAogICov
CiAKIFsKLSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJJ
bmRleCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBJREJPYmplY3RTdG9yZSBvYmplY3RTdG9yZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsCmluZGV4IDNiOTZmYzEuLjI5ZjI3MWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbApAQCAtMjUsNyAr
MjUsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICBDdXN0
b21Ub0pTT2JqZWN0CisgICAgQ3VzdG9tVG9KU09iamVjdCwKKyAgICBKU05vU3RhdGljVGFibGVz
CiBdIGludGVyZmFjZSBJREJLZXkgewogICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxs
eSBsZWZ0IGJsYW5rLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmlkbAppbmRleCA4MjA2MjhhLi40MjQwMDNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCkBAIC0yNCw3ICsyNCw4
IEBACiAgKi8KIAogWwotICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBDb25k
aXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJm
YWNlIElEQktleVJhbmdlIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IGxvd2VyOwog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkgdXBwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggMmVhY2IzMS4u
NWJlMDFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcApAQCAtMTAxLDEyICsxMDEsMTMgQEAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3MKICAgICByZXR1cm4gZ2V0KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwog
fQogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNjcmlwdFZhbHVlJiBvYmplY3RWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyogaW5kZXhLZXlz
KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEsCisgICAgY29uc3QgU2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLAorICAgIElEQk9iamVjdFN0
b3JlOjpJbmRleEtleXMqIGluZGV4S2V5cykKIHsKICAgICBBU1NFUlQoaW5kZXhLZXlzKTsKLSAg
ICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgob2JqZWN0VmFsdWUsIGluZGV4TWV0YWRhdGEua2V5UGF0aCk7CisgICAgUmVmUHRy
PElEQktleT4gaW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KGNvbnRleHQsIG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOwogCiAgICAgaWYg
KCFpbmRleEtleSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDkgKzE1Niw4IEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFNjcmlwdFN0
YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFsdWUuc2VyaWFsaXplKHN0YXRlKTsK
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplSURCVmFsdWUoY29udGV4dCwg
dmFsdWUpOworICAgIGlmICghc2VyaWFsaXplZFZhbHVlKSB7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQpAQCAtMTgxLDcgKzE4MSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICBpZiAodXNlc0luTGluZUtleXMpIHsKLSAgICAgICAgUmVm
UHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5
ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb250ZXh0LCB2YWx1ZSwg
a2V5UGF0aCk7CiAgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlk
KCkpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwog
ICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTEsNyArMTkxLDcgQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW8KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIGlmICho
YXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIGlmICghY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHZhbHVlLCBrZXlQYXRoKSkgeworICAgICAgICAgICAg
aWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29udGV4dCwgdmFsdWUsIGtleVBh
dGgpKSB7CiAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CkBAIC0yMDgsNyAr
MjA4LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0b3I8SW5kZXhLZXlzPiBp
bmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRh
ZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwotICAg
ICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT52YWx1ZSwgdmFsdWUsICZrZXlzKTsK
KyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShjb250ZXh0LCBpdC0+dmFsdWUsIHZh
bHVlLCAma2V5cyk7CiAgICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT5rZXkpOwogICAgICAg
ICBpbmRleEtleXMuYXBwZW5kKGtleXMpOwogICAgIH0KQEAgLTMzMiw3ICszMzIsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgU2NyaXB0VmFsdWUgdmFsdWUgPSB2YWx1ZUFueS0+c2NyaXB0VmFs
dWUoKTsKIAogICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyBpbmRleEtleXM7
Ci0gICAgICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKG1faW5kZXhNZXRhZGF0YSwg
dmFsdWUsICZpbmRleEtleXMpOworICAgICAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1
ZShjb250ZXh0LCBtX2luZGV4TWV0YWRhdGEsIHZhbHVlLCAmaW5kZXhLZXlzKTsKIAogICAgICAg
ICAgICAgVmVjdG9yPElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+IGluZGV4S2V5c0xpc3Q7
CiAgICAgICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtleXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCmluZGV4
IDEzMjA0MzQuLjZiZDRjMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKQEAgLTI0LDcgKzI0LDggQEAKICAqLwogCiBbCi0g
ICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIENvbmRpdGlvbmFsPUlOREVYRURf
REFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURCT2JqZWN0U3Rv
cmUgewogICAgIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICBbSW1wbGVtZW50ZWRBcz1rZXlQYXRoQW55XSByZWFk
b25seSBhdHRyaWJ1dGUgSURCQW55IGtleVBhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsCmluZGV4IGJiZGU5YmMuLmYw
MGU4ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9w
ZW5EQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuaWRsCkBAIC0yNiw3ICsyNiw4IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgRXZlbnRUYXJnZXQK
KyAgICBFdmVudFRhcmdldCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJP
cGVuREJSZXF1ZXN0IDogSURCUmVxdWVzdCB7CiAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25ibG9ja2VkOwogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9udXBncmFkZW5lZWRlZDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKaW5k
ZXggM2Y2ZjljZC4uMmVmMGZhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTM2OSwxMCArMzY5LDEwIEBAIHZvaWQgSURCUmVxdWVz
dDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBTZXJpYWxp
emVkU2NyaXB0CiAKICAgICBSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtl
eTsKICNpZm5kZWYgTkRFQlVHCi0gICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICBS
ZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB2YWx1ZSwga2V5UGF0aCk7CiAgICAg
QVNTRVJUKCFleHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChwcmltYXJ5S2V5Lmdl
dCgpKSk7CiAjZW5kaWYKLSAgICBib29sIGluamVjdGVkID0gaW5qZWN0SURCS2V5SW50b1Njcmlw
dFZhbHVlKHByaW1hcnlLZXksIHZhbHVlLCBrZXlQYXRoKTsKKyAgICBib29sIGluamVjdGVkID0g
aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgcHJp
bWFyeUtleSwgdmFsdWUsIGtleVBhdGgpOwogICAgIEFTU0VSVF9VTlVTRUQoaW5qZWN0ZWQsIGlu
amVjdGVkKTsKICAgICBvblN1Y2Nlc3NJbnRlcm5hbCh2YWx1ZSk7CiB9CkBAIC00NzIsNyArNDcy
LDcgQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQogICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQp
IHsKICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBnZXRSZXN1bHRDdXJzb3IoKTsKICAgICAgICAg
aWYgKGN1cnNvclRvTm90aWZ5KQotICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnNldFZhbHVl
UmVhZHkobV9jdXJzb3JLZXkucmVsZWFzZSgpLCBtX2N1cnNvclByaW1hcnlLZXkucmVsZWFzZSgp
LCBtX2N1cnNvclZhbHVlKTsKKyAgICAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5zZXRWYWx1ZVJl
YWR5KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgbV9jdXJzb3JLZXkucmVsZWFzZSgpLCBtX2N1
cnNvclByaW1hcnlLZXkucmVsZWFzZSgpLCBtX2N1cnNvclZhbHVlKTsKICAgICB9CiAKICAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFkZW5lZWRlZEV2ZW50KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsCmluZGV4
IDRlOGZmMDkuLjBiMTY5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlJlcXVlc3QuaWRsCkBAIC0zMCw3ICszMCw4IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgRXZlbnRUYXJnZXQK
KyAgICBFdmVudFRhcmdldCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJS
ZXF1ZXN0IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHJlc3VsdAogICAgICAgICBn
ZXR0ZXIgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKaW5kZXggNzJmYWE4ZC4u
OGVjNGIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmlkbApAQCAtMjcsNyArMjcsOCBAQAogWwogICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgIEV2ZW50VGFyZ2V0Cisg
ICAgRXZlbnRUYXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURCVHJh
bnNhY3Rpb24gewogICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5IHJlbW92ZSBsZWdhY3kgZW51bSBj
b25zdGFudHMsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUz
MTUKICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBSRUFEX09OTFkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVu
dC5pZGwKaW5kZXggMDgxMGRkMi4uOGYyMjU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsCkBAIC0y
NSw3ICsyNSw4IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAg
IEludGVyZmFjZU5hbWU9SURCVmVyc2lvbkNoYW5nZUV2ZW50CisgICAgSW50ZXJmYWNlTmFtZT1J
REJWZXJzaW9uQ2hhbmdlRXZlbnQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2Ug
SURCVXBncmFkZU5lZWRlZEV2ZW50IDogRXZlbnQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxvbmcgb2xkVmVyc2lvbjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5z
aWduZWQgbG9uZyBsb25nIG5ld1ZlcnNpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAppbmRleCBmOTJl
ZjUzLi44ZDIxMzIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKQEAgLTI0LDcgKzI0LDggQEAKICAq
LwogCiBbCi0gICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURC
VmVyc2lvbkNoYW5nZUV2ZW50IDogRXZlbnQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgdmVyc2lvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKaW5kZXggNDk3YjU3Yi4u
OWI2ZTFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbApAQCAtMjYsNyArMjYsOCBAQAogWwog
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAot
ICAgIEV2ZW50VGFyZ2V0CisgICAgRXZlbnRUYXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwog
XSBpbnRlcmZhY2UgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QgOiBJREJSZXF1ZXN0IHsKICAgICBh
dHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmJsb2NrZWQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCBiNTVlNzZiLi5m
N2I0NTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBN
aWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCwyMiArMjksMjg4IEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJJREJLZXkuaCIKKyNpbmNsdWRlICJJREJUcmFjaW5nLmgiCisjaW5jbHVk
ZSAiSlNJREJLZXkuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKKyNp
bmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorCisjaWYgRU5BQkxFKFdPUktFUlMpCisj
aW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktl
eUZyb21WYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQorY2xh
c3MgSURCSlNDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBJREJKU0NvbnRleHQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKKyAgICAgICAgOiBtX2xvY2soY29udGV4dC0+Z2xvYmFsRGF0
YSgpKQorICAgICAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1fc2NyaXB0U3Rh
dGUoMCkKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAg
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2Nv
bnRleHQpOworICAgICAgICAgICAgbV9zY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZFNjcmlwdFN0YXRl
KGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICAgICAgfQorI2lmIEVOQUJMRShXT1JLRVJTKQorICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKKyAgICAgICAgICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxXb3JrZXJDb250ZXh0Kj4obV9jb250ZXh0KTsKKyAgICAgICAgICAgIG1fc2NyaXB0U3Rh
dGUgPSBzY3JpcHRTdGF0ZUZyb21Xb3JrZXJDb250ZXh0KHdvcmtlckNvbnRleHQpOworICAgICAg
ICB9CisjZW5kaWYKKyAgICB9CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgp
IHsgcmV0dXJuIGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KG1fc2NyaXB0U3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7IH0KKyAgICBFeGVjU3RhdGUqIGV4ZWNTdGF0ZSgpIHsgcmV0dXJu
IG1fc2NyaXB0U3RhdGU7IH0KKworcHJpdmF0ZToKKyAgICBKU0xvY2tIb2xkZXIgbV9sb2NrOwor
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKKyAgICBTY3JpcHRTdGF0ZSog
bV9zY3JpcHRTdGF0ZTsKK307CisKK3N0YXRpYyBib29sIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBKU1ZhbHVlJiByZXN1
bHQpCiB7Ci0gICAgaWYgKHZhbHVlLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gSURCS2V5Ojpj
cmVhdGVJbnZhbGlkKCk7Ci0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICBpZiAob2JqZWN0
LmlzU3RyaW5nKCkgJiYga2V5UGF0aEVsZW1lbnQgPT0gImxlbmd0aCIpIHsKKyAgICAgICAgcmVz
dWx0ID0ganNOdW1iZXIob2JqZWN0LnRvU3RyaW5nKGV4ZWMpLT5sZW5ndGgoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoIW9iamVjdC5pc09iamVjdCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxE
YXRhKCksIGtleVBhdGhFbGVtZW50LnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICghYXNPYmplY3Qo
b2JqZWN0KS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnRpZmllcikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXN1bHQgPSBhc09iamVjdChvYmplY3QpLT5nZXQoZXhlYywgaWRlbnRpZmll
cik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNhblNldChKU1ZhbHVlIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCkKK3sKKyAgICByZXR1cm4gb2JqZWN0
LmlzT2JqZWN0KCk7Cit9CisKK3N0YXRpYyBib29sIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUmIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSBqc1ZhbHVl
KQoreworICAgIGlmICghY2FuU2V0KG9iamVjdCwga2V5UGF0aEVsZW1lbnQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRh
KCksIGtleVBhdGhFbGVtZW50LnV0ZjgoKS5kYXRhKCkpOworICAgIGFzT2JqZWN0KG9iamVjdCkt
PnB1dERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZpZXIsIGpzVmFsdWUpOworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heGltdW1EZXB0aCA9IDIw
MDA7CisKK3N0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPEpTQXJyYXkqPiYgc3RhY2spCit7
CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkgJiYgIWlzbmFuKHZhbHVlLnRvTnVtYmVyKGV4ZWMp
KSkKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKHZhbHVlLnRvTnVtYmVyKGV4
ZWMpKTsKICAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIElEQktleTo6
Y3JlYXRlU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSk7Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudCBkYXRlcy4KKyAgICBpZiAodmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0
YW5jZTo6c19pbmZvKSAmJiAhaXNuYW4odmFsdWVUb0RhdGUoZXhlYywgdmFsdWUpKSkKKyAgICAg
ICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0ZSh2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkpOwor
ICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdCh2YWx1ZSk7CisgICAgICAgIGlmIChpc0pTQXJyYXkob2JqZWN0KSB8fCBvYmplY3Qt
PmluaGVyaXRzKCZKU0FycmF5OjpzX2luZm8pKSB7CisgICAgICAgICAgICBKU0FycmF5KiBhcnJh
eSA9IGFzQXJyYXkob2JqZWN0KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGFycmF5
LT5sZW5ndGgoKTsKKworICAgICAgICAgICAgaWYgKHN0YWNrLmNvbnRhaW5zKGFycmF5KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChzdGFjay5zaXplKCkgPj0g
bWF4aW11bURlcHRoKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc3Rh
Y2suYXBwZW5kKGFycmF5KTsKKworICAgICAgICAgICAgSURCS2V5OjpLZXlBcnJheSBzdWJrZXlz
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0gYXJyYXktPmdldEluZGV4KGV4ZWMsIGkpOwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IHN1YmtleSA9IGNyZWF0ZUlEQktleUZyb21W
YWx1ZShleGVjLCBpdGVtLCBzdGFjayk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWJrZXkpCisg
ICAgICAgICAgICAgICAgICAgIHN1YmtleXMuYXBwZW5kKElEQktleTo6Y3JlYXRlSW52YWxpZCgp
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN1YmtleXMuYXBw
ZW5kKHN1YmtleSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YWNrLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KHN1YmtleXMpOwor
ICAgICAgICB9CisgICAgfQogICAgIHJldHVybiAwOwogfQogCitQYXNzUmVmUHRyPElEQktleT4g
Y3JlYXRlSURCS2V5RnJvbVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBWZWN0b3I8SlNBcnJheSo+IHN0YWNrOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNy
ZWF0ZUlEQktleUZyb21WYWx1ZShleGVjLCB2YWx1ZSwgc3RhY2spOworICAgIGlmIChrZXkpCisg
ICAgICAgIHJldHVybiBrZXk7CisgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwor
fQorCitzdGF0aWMgSlNWYWx1ZSBnZXROdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgcm9vdFZhbHVlLAorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxl
bWVudHMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJvb3RW
YWx1ZSk7CisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7CisgICAgICAgIGlmIChjdXJy
ZW50VmFsdWUuaXNTdHJpbmcoKSAmJiBrZXlQYXRoRWxlbWVudHNbaV0gPT0gImxlbmd0aCIpCisg
ICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoY3VycmVudFZhbHVlLnRvU3RyaW5nKGV4ZWMpLT5s
ZW5ndGgoKSk7CisgICAgICAgIGlmICghY3VycmVudFZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgSlNWYWx1ZSBwYXJlbnRWYWx1ZShj
dXJyZW50VmFsdWUpOworICAgICAgICBpZiAoIWdldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0
aEVsZW1lbnRzW2ldLCBjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorICAgIHJldHVybiBjdXJyZW50VmFsdWU7Cit9CisKK3N0YXRpYyBQYXNz
UmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQ
YXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aCwga2V5UGF0
aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVy
cm9yTm9uZSk7CisKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZS5qc1ZhbHVlKCk7CisgICAg
anNWYWx1ZSA9IGdldE50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGpzVmFsdWUsIGtleVBhdGhFbGVt
ZW50cywKKyAgICAgICAga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgaWYgKGpzVmFsdWUu
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktl
eUZyb21WYWx1ZShleGVjLCBqc1ZhbHVlKTsKK30KKworc3RhdGljIEpTVmFsdWUgZW5zdXJlTnRo
VmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwKKyAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOworCisgICAgQVNTRVJUKGluZGV4
IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbmRleDsgaSsrKSB7CisgICAgICAgIEpTVmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVl
KTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50
c1tpXTsKKyAgICAgICAgaWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50
LCBjdXJyZW50VmFsdWUpKSB7CisgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgICAgICAgICBpZiAoIXNldChleGVjLCBwYXJlbnRW
YWx1ZSwga2V5UGF0aEVsZW1lbnQsIEpTVmFsdWUob2JqZWN0KSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBKU1ZhbHVl
KG9iamVjdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY3VycmVudFZhbHVlOwor
fQorCitzdGF0aWMgYm9vbCBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgcm9vdFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1l
bnRzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBpZiAoIXJvb3RWYWx1ZS5pc09iamVjdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFs
dWUpOworCisgICAgQVNTRVJUKGluZGV4IDw9IGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleDsgKytpKSB7CisgICAgICAgIEpTVmFsdWUg
cGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRo
RWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tpXTsKKyAgICAgICAgaWYgKCFnZXQoZXhlYywgcGFy
ZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIGNhblNldChwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0VmFs
dWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgi
aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBl
KCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0
aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNl
S2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBB
U1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIGlmIChrZXlQ
YXRoRWxlbWVudHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZS5qc1ZhbHVlKCk7CisgICAgaWYgKCFqc1ZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIElEQkpTQ29udGV4dCBpZGJDb250ZXh0
KGNvbnRleHQpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGlkYkNvbnRleHQuZXhlY1N0YXRlKCk7
CisKKyAgICBKU1ZhbHVlIHBhcmVudCA9IGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKGV4ZWMsIGFz
T2JqZWN0KGpzVmFsdWUpLAorICAgICAgICBrZXlQYXRoRWxlbWVudHMsIGtleVBhdGhFbGVtZW50
cy5zaXplKCkgLSAxKTsKKyAgICBpZiAocGFyZW50LmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghc2V0KGV4ZWMsIHBhcmVudCwga2V5UGF0aEVsZW1lbnRz
Lmxhc3QoKSwKKyAgICAgICAgdG9KUyhleGVjLCBpZGJDb250ZXh0Lmdsb2JhbE9iamVjdCgpLCBr
ZXkuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQ
YXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNjcmlwdFZhbHVlJiB2
YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgiKTsKKyAgICBBU1NFUlQoIWtleVBhdGgu
aXNOdWxsKCkpOworCisgICAgSURCSlNDb250ZXh0IGlkYkNvbnRleHQoY29udGV4dCk7CisgICAg
RXhlY1N0YXRlKiBleGVjID0gaWRiQ29udGV4dC5leGVjU3RhdGUoKTsKKworICAgIGlmIChrZXlQ
YXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpBcnJheVR5cGUpIHsKKyAgICAgICAgSURCS2V5OjpL
ZXlBcnJheSByZXN1bHQ7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhcnJheSA9IGtl
eVBhdGguYXJyYXkoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LnNp
emUoKTsgaSsrKSB7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBhcnJheVtpXSk7CisgICAg
ICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoa2V5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSURCS2V5Ojpj
cmVhdGVBcnJheShyZXN1bHQpOworICAgIH0KKworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9
PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwga2V5UGF0aC5zdHJpbmcoKSk7Cit9CisK
K2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImNhbkluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZSIpOworICAgIEFTU0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJp
bmdUeXBlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CisgICAgSURCS2V5
UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGguc3RyaW5n
KCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQ
YXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYgKCFrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJREJKU0NvbnRleHQgaWRiQ29udGV4dChjb250
ZXh0KTsKKyAgICByZXR1cm4gY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoaWRiQ29udGV4dC5l
eGVjU3RhdGUoKSwKKyAgICAgICAgc2NyaXB0VmFsdWUuanNWYWx1ZSgpLCBrZXlQYXRoRWxlbWVu
dHMsIGtleVBhdGhFbGVtZW50cy5zaXplKCkgLSAxKTsKK30KKworU2NyaXB0VmFsdWUgZGVzZXJp
YWxpemVJREJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUpCit7CisgICAgSURCSlNDb250ZXh0IGlk
YkNvbnRleHQoY29udGV4dCk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplZFZhbHVlID0gcHJwVmFsdWU7CisgICAgaWYgKHNlcmlhbGl6ZWRWYWx1ZSkKKyAgICAg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZShpZGJDb250ZXh0LmV4ZWNTdGF0ZSgp
LAorICAgICAgICAgICAgc2VyaWFsaXplZFZhbHVlLmdldCgpLCBOb25UaHJvd2luZyk7CisgICAg
cmV0dXJuIFNjcmlwdFZhbHVlKCpjb250ZXh0LT5nbG9iYWxEYXRhKCksIGpzTnVsbCgpKTsKK30K
KworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZUlEQlZhbHVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSkK
K3sKKyAgICBJREJKU0NvbnRleHQgaWRiQ29udGV4dChjb250ZXh0KTsKKyAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShpZGJDb250ZXh0LmV4ZWNTdGF0ZSgpLCBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCkp
OworICAgIGlmIChpZGJDb250ZXh0LmV4ZWNTdGF0ZSgpLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5oCmluZGV4IDhlMGM5YzUuLjVmYTM3NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKQEAgLTI5LDcgKzI5LDkgQEAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2luY2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiU2NyaXB0VmFsdWUuaCIgCisKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw2ICs0MCwxMiBAQCBj
bGFzcyBJREJLZXk7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwogCitib29sIGluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBT
Y3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK2Jvb2wgY2FuSW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3Jp
cHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURC
VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPik7CitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplSURC
VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNjcmlwdFZhbHVlJik7CisKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRGljdGlvbmFyeS5jcHAKaW5kZXggZjQ3NmQ3Mi4uNWUzZTk2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCkBAIC01OCwxMiArNTgsMTYgQEAg
SlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJlc3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFByb3Bl
cnR5KGNvbnN0IGNoYXIqIHByb3BlcnQKICAgICBpZiAoIW1faW5pdGlhbGl6ZXJPYmplY3QuZ2V0
KCktPmdldFByb3BlcnR5U2xvdChtX2V4ZWMsIGlkZW50aWZpZXIsIHNsb3QpKQogICAgICAgICBy
ZXR1cm4gTm9Qcm9wZXJ0eUZvdW5kOwogCi0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgbV9leGVjLT5jbGVh
ckV4Y2VwdGlvbigpOwogICAgICAgICByZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAgIH0KIAog
ICAgIGZpbmFsUmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShtX2V4ZWMsIGlkZW50aWZpZXIpOwotICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CisgICAgICAgIG1fZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvblRocm93bjsKKyAgICB9CiAKICAgICByZXR1cm4gUHJvcGVydHlGb3VuZDsKIH0K
QEAgLTExMSw4ICsxMTUsMTAgQEAgdm9pZCBKU0RpY3Rpb25hcnk6OmNvbnZlcnRWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFN0cmluZyYgcmVzdWx0KQogCiB2b2lkIEpTRGlj
dGlvbmFyeTo6Y29udmVydFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgVmVj
dG9yPFN0cmluZz4mIHJlc3VsdCkKIHsKLSAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKKyAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IDA7CiAgICAgSlNPYmplY3QqIG9iamVjdCA9IHRvSlNTZXF1ZW5jZShleGVjLCB2YWx1
ZSwgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGlj
dGlvbmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKaW5k
ZXggM2M5ODczZS4uMDkwMGNiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEaWN0aW9uYXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0
aW9uYXJ5LmgKQEAgLTE1MCw4ICsxNTAsMTAgQEAgSlNEaWN0aW9uYXJ5OjpHZXRQcm9wZXJ0eVJl
c3VsdCBKU0RpY3Rpb25hcnk6OnRyeUdldFByb3BlcnR5QW5kUmVzdWx0KGNvbnN0IGNoYXIKICAg
ICAgICAgUmVzdWx0IHJlc3VsdDsKICAgICAgICAgY29udmVydFZhbHVlKG1fZXhlYywgdmFsdWUs
IHJlc3VsdCk7CiAKLSAgICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IGlmIChtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICBtX2V4ZWMtPmNsZWFy
RXhjZXB0aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAgICAg
ICB9CiAKICAgICAgICAgc2V0dGVyKGNvbnRleHQsIHJlc3VsdCk7CiAgICAgICAgIGJyZWFrOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCmluZGV4IDc3
MTEzYzcuLmUwZmZmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCQW55Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFu
eUN1c3RvbS5jcHAKQEAgLTY0LDggKzY0LDYgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCQW55KiBpZGJBbnkpCiAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIGNhc2UgSURCQW55OjpOdWxsVHlwZToKICAg
ICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIGNhc2UgSURCQW55OjpTdHJpbmdUeXBlOgotICAg
ICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaWRiQW55LT5zdHJpbmcoKSk7CiAg
ICAgY2FzZSBJREJBbnk6OkRPTVN0cmluZ0xpc3RUeXBlOgogICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+ZG9tU3RyaW5nTGlzdCgpKTsKICAgICBjYXNlIElE
QkFueTo6SURCQ3Vyc29yVHlwZToKQEAgLTg0LDggKzgyLDEyIEBAIEpTVmFsdWUgdG9KUyhFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElEQkFueSogaWRi
QW55KQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRi
T2JqZWN0U3RvcmUoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQlRyYW5zYWN0aW9uVHlwZToKICAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYlRyYW5zYWN0
aW9uKCkpOwotICAgIGNhc2UgSURCQW55OjpTZXJpYWxpemVkU2NyaXB0VmFsdWVUeXBlOgotICAg
ICAgICByZXR1cm4gaWRiQW55LT5zZXJpYWxpemVkU2NyaXB0VmFsdWUoKS0+ZGVzZXJpYWxpemUo
ZXhlYywgZ2xvYmFsT2JqZWN0KTsKKyAgICBjYXNlIElEQkFueTo6U2NyaXB0VmFsdWVUeXBlOgor
ICAgICAgICByZXR1cm4gaWRiQW55LT5zY3JpcHRWYWx1ZSgpLmpzVmFsdWUoKTsKKyAgICBjYXNl
IElEQkFueTo6U3RyaW5nVHlwZToKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4
ZWMsIGlkYkFueS0+c3RyaW5nKCkpOworICAgIGNhc2UgSURCQW55OjpJbnRlZ2VyVHlwZToKKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGlkYkFueS0+aW50ZWdlcigpKTsKICAgICB9CiAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43ZGY5MjJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCkBAIC0wLDAgKzEs
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxA
NjhrLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJKU0lEQkN1cnNvcldp
dGhWYWx1ZS5oIgorCisjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNJREJBbnkuaCIKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTSURCQ3Vyc29yV2l0aFZh
bHVlOjp2YWx1ZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgSURCQ3Vyc29yKiBjdXJz
b3IgPSBpbXBsKCk7CisgICAgaWYgKCFjdXJzb3ItPnZhbHVlSXNEaXJ0eSgpKSB7CisgICAgICAg
IGlmIChKU1ZhbHVlIGNhY2hlZFZhbHVlID0gbV92YWx1ZS5nZXQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjYWNoZWRWYWx1ZTsKKyAgICB9CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGN1cnNvci0+dmFsdWUoKS5nZXQoKSk7CisgICAgY29uc3RfY2Fz
dDxKU0lEQkN1cnNvcldpdGhWYWx1ZSo+KHRoaXMpLT5tX3ZhbHVlLnNldChleGVjLT5nbG9iYWxE
YXRhKCksIHRoaXMsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQktleUN1c3RvbS5jcHAKaW5kZXggODVhYTVkYi4uZTQ4NWJkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcApAQCAtNDgsMTAgKzQ4
LDkgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSURCS2V5KiBrZXkpCiAgICAgICAgICAgICBjb25zdCBJREJLZXk6OktleUFy
cmF5JiBpbkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBp
bkFycmF5LnNpemUoKTsKICAgICAgICAgICAgIEpTQXJyYXkqIG91dEFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIHNpemUpOwotICAgICAgICAgICAgSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBJREJLZXkq
IGFycmF5S2V5ID0gaW5BcnJheS5hdChpKS5nZXQoKTsKLSAgICAgICAgICAgICAgICBvdXRBcnJh
eS0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBhcnJheUtleSkpOworICAgICAgICAgICAgICAgIG91dEFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJyYXlLZXkpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKG91dEFycmF5KTsKICAgICAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPcGVuREJSZXF1ZXN0Q3Vz
dG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1
c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhjNTdkZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVx
dWVzdEN1c3RvbS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KworI2luY2x1ZGUgIkpTSURCT3BlbkRCUmVxdWVzdC5oIgorCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIEpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIEpT
Qzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNJREJPcGVuREJSZXF1ZXN0KiBqc1Jl
cXVlc3QgPSBqc0Nhc3Q8SlNJREJPcGVuREJSZXF1ZXN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyhqc1JlcXVlc3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNTRVJU
KFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRD
aGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKGpzUmVxdWVzdC0+c3RydWN0
dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGpzUmVxdWVzdCwgdmlzaXRvcik7CisgICAgc3RhdGljX2Nhc3Q8SURCT3Bl
bkRCUmVxdWVzdCo+KGpzUmVxdWVzdC0+aW1wbCgpKS0+dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZp
c2l0b3IpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKaW5kZXggZjU1OWY0MS4uY2MzOGU2OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMjQsMTkgKzI1LDI3IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdC5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEpTSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpCit2
b2lkIEpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KKyAgICBKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KiBqc1JlcXVlc3QgPSBqc0Nhc3Q8
SlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFMoanNSZXF1ZXN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1
cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5X
aXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVChqc1JlcXVlc3QtPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbihqc1JlcXVlc3QsIHZpc2l0b3IpOworICAgIHN0YXRpY19jYXN0PElEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0Kj4oanNSZXF1ZXN0LT5pbXBsKCkpLT52aXNpdEpTRXZlbnRMaXN0ZW5lcnModmlz
aXRvcik7CiB9CiAKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAppbmRleCA1MjA4MTRlLi4yMzU3OGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTE4NDIsNiAr
MTg0MiwxMSBAQCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUoSlNDOjpFeGVjU3RhdGUqCiAKIFN0cmluZyBTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OnRvV2lyZVN0cmluZygpIGNvbnN0CiB7CisgICAgaWYgKG1fZGF0YS5zaXplKCkg
JiAxKSB7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBkYXRhKG1fZGF0YSk7CisgICAg
ICAgIGRhdGEuYXBwZW5kKDApOworICAgICAgICByZXR1cm4gQ2xvbmVEZXNlcmlhbGl6ZXI6OnRv
V2lyZVN0cmluZyhkYXRhKTsKKyAgICB9CiAgICAgcmV0dXJuIENsb25lRGVzZXJpYWxpemVyOjp0
b1dpcmVTdHJpbmcobV9kYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAppbmRleCA4M2FlOWIyLi45MDFkYjFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNw
cApAQCAtMTg3LDcgKzE4Nyw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURC
S2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb25zdCBTY3JpcHRWYWx1CiAgICAgcmV0dXJu
IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2OEtleSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBj
cmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNjcmlwdFZhbHVlJiB2
YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7
CiAgICAgSURCX1RSQUNFKCJjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoIik7
CiAgICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKQEAgLTIyMCw3ICsyMjAsMTYgQEAgU2Ny
aXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRDb250ZXh0LCBQYXNzUmVmUHQKICAgICByZXR1cm4gU2NyaXB0VmFsdWUodjg6Ok51bGwoKSk7
CiB9CiAKLWJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK1Bh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVJREJWYWx1ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmIHZhbHVlKQoreworICAgIFNjcmlwdFN0YXRl
KiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFsdWUuc2VyaWFsaXplKHN0YXRlKTsKKyAg
ICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKTsKK30KKworYm9vbCBpbmplY3RJREJLZXlJbnRv
U2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAg
ICBJREJfVFJBQ0UoImluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogCkBAIC0yNDcsNyAr
MjU2LDcgQEAgYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb24KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmIHNj
cmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorYm9vbCBjYW5JbmplY3RJREJL
ZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNjcmlwdFZh
bHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBJREJf
VFJBQ0UoImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogICAgIEFTU0VSVChrZXlQ
YXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCBhNDgyZGM5Li41MDA5
YTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRp
bGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxp
dGllcy5oCkBAIC00MCwxMCArNDAsMTEgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwog
CiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4OjpIYW5kbGU8djg6
OlZhbHVlPik7CiAKLWJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFBhc3NSZWZQdHI8
SURCS2V5PiwgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Ci1QYXNzUmVmUHRyPElE
QktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb25zdCBTY3JpcHRW
YWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKLWJvb2wgY2FuSW5qZWN0SURCS2V5SW50b1Njcmlw
dFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworYm9vbCBpbmpl
Y3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8SURCS2V5PiwgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitQYXNzUmVmUHRy
PElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Citi
b29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CiBTY3JpcHRWYWx1ZSBk
ZXNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYp
OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0Lmlk
bCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmlkbAppbmRleCBkMGViMzYyLi5h
YTY0M2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaWRsCkBAIC0yNSw3ICsyNSw4
IEBACiAKIFsKICAgICBJbmRleGVkR2V0dGVyLAotICAgIEpTQ3VzdG9tVG9OYXRpdmVPYmplY3QK
KyAgICBKU0N1c3RvbVRvTmF0aXZlT2JqZWN0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50
ZXJmYWNlIERPTVN0cmluZ0xpc3QgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBs
b25nIGxlbmd0aDsKICAgICBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSBET01TdHJp
bmcgaXRlbShpbiBbT3B0aW9uYWw9RGVmYXVsdElzVW5kZWZpbmVkXSB1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKLS0gCjEuNy45LjUKCg==
</data>
<flag name="commit-queue"
          id="182934"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169581</attachid>
            <date>2012-10-19 02:11:31 -0700</date>
            <delta_ts>2012-10-21 15:13:15 -0700</delta_ts>
            <desc>Implement IndexedDB for JSC</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>53564</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVGh1LCAxOCBPY3Qg
MjAxMiAxNDoxNjoyNiAtMDcwMApTdWJqZWN0OiBJbXBsZW1lbnQgSW5kZXhlZCBEYXRhYmFzZSBm
b3IgSlNDLgoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgODkgKysrKysrKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSAgICAgICAgICAgICAgICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkFueS5pZGwgICAgICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcCAgICAgfCAgICA4ICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCAgICAgICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgICAgIHwgICAgMSArCiAuLi4vTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaCAgICAgICB8ICAgIDIgKy0KIC4uLi9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsICAgICAgIHwgICAgNSArLQog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsICAgfCAgICAz
ICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsICAgICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRs
ICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXgu
aWRsICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJL
ZXkuaWRsICAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmlkbCAgIHwgICAgMyArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwICAgfCAgIDIyICstCiAuLi4vV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgICB8ICAgIDMgKy0KIC4uLi9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsIHwgICAgMyArLQogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgICAgfCAgICA2ICstCiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbCAgICB8ICAgIDMgKy0KIC4u
Li9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCAgIHwgICAgMyAr
LQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgICAgfCAg
ICAzICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCAg
ICB8ICAgIDMgKy0KIC4uLi9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5pZGwgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAgfCAgMjc3ICsrKysrKysrKysrKysrKysrKystCiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmggICB8ICAgIDggKwogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcCAgICAgICAgfCAgIDEyICstCiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaCAgICAgICAgICB8ICAgIDQgKy0KIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCAgICAgIHwgICAxMCAr
LQogLi4uL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcCAgICAgfCAg
IDU3ICsrKysKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCAg
ICAgIHwgICAgMyArLQogLi4uL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5j
cHAgICAgICAgfCAgIDUyICsrKysKIC4uLi9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3Vz
dG9tLmNwcCAgICAgICAgIHwgICAxNyArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcCAgfCAgICA1ICsKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIHwgICAxNSArLQogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oICAgfCAgICA3ICstCiBTb3VyY2UvV2ViQ29yZS9k
b20vRE9NU3RyaW5nTGlzdC5pZGwgICAgICAgICAgICAgICB8ICAgIDMgKy0KIC4uLi9jaHJvbWl1
bS90ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAgICAgIHwgICAgNCArLQogMzcgZmls
ZXMgY2hhbmdlZCwgNTk1IGluc2VydGlvbnMoKyksIDY0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVl
Q3VzdG9tLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmMwNGNkOC4uMGQx
OTVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkyIEBACisyMDEyLTEwLTE4ICBNaWNoYWVsIFBy
dWV0dCAgPG1pY2hhZWxANjhrLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgSW5kZXhlZCBEYXRh
YmFzZSBmb3IgSlNDLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDUxMTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUZXN0czogc3RvcmFnZS9pbmRleGVkZGIvKgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3I6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNldFZhbHVl
UmVhZHkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAg
ICAoSURCQ3Vyc29yKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRs
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6cG9zdFN1Y2Nlc3NIYW5kbGVy
Q2FsbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1
ZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbDoKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJJbmRleC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
S2V5LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw6Cisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Z2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
SURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9J
REJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKElEQkpTQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJKU0NvbnRleHQ6OklEQkpTQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJK
U0NvbnRleHQ6Omdsb2JhbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJKU0NvbnRleHQ6
OmV4ZWNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6
CisgICAgICAgIChXZWJDb3JlOjpjYW5TZXQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpnZXROdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlG
cm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZU50aFZh
bHVlT25LZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkluamVjdE50aFZhbHVlT25LZXlQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJp
YWxpemVJREJWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGll
cy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHkp
OgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUpOgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oOgorICAgICAgICAoV2ViQ29yZTo6SlNEaWN0
aW9uYXJ5Ojp0cnlHZXRQcm9wZXJ0eUFuZFJlc3VsdCk6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNJREJBbnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUpOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTSURCT3BlbkRC
UmVxdWVzdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlOjp0b1dpcmVTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJREJWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0
VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9ET01TdHJpbmdMaXN0LmlkbDoKKwogMjAx
Mi0xMC0xOCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRk
IHNob3J0TW9udGhMYWJlbHMgYW5kIHNob3J0U3RhbmRBbG9uZU1vbnRoTGFiZWxzIHRvIExvY2Fs
aXplcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZWEyYjIyZS4uM2QxMWRiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NjcsMTIgKzQ2NywxNiBAQCB3ZWJj
b3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJLZXlS
YW5nZS5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCT2JqZWN0U3RvcmUuY3BwIFwK
IAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURCT2JqZWN0U3RvcmUuaCBcCisJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0lEQk9wZW5EQlJlcXVlc3QuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTSURCT3BlbkRCUmVxdWVzdC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
SURCUmVxdWVzdC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJSZXF1ZXN0Lmgg
XAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJUcmFuc2FjdGlvbi5jcHAgXAogCURlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJUcmFuc2FjdGlvbi5oIFwKIAlEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9KU0lEQlZlcnNpb25DaGFuZ2VFdmVudC5oIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTSURCVXBncmFkZU5lZWRlZEV2ZW50LmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9K
U0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QuaCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ltYWdl
RGF0YS5jcHAgXApAQCAtMTIyNiw2ICsxMjMwLDcgQEAgZG9tX2JpbmRpbmdfaWRscyArPSBcCiAJ
JChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwgXAogCSQoV2Vi
Q29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbCBcCiAJJChX
ZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsIFwKKwkk
KFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgXAog
CSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRs
IFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckNvbnRleHRJbmRleGVkRGF0
YWJhc2UuaWRsIFwKIAkkKFdlYkNvcmUpL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2Uu
aWRsIFwKQEAgLTIyNDksNiArMjI1NCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0dDQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0dDQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGlu
Z1V0aWxpdGllcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVy
Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNBcnJheUJ1ZmZlclZp
ZXdIZWxwZXIuaCBcCkBAIC0yMzQ3LDcgKzIzNTMsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwKaW5kZXggNTk2MThhZC4uMDE0MWIwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsCkBAIC0yNSw3ICsyNSw4
IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgIEN1c3RvbVRv
SlNPYmplY3QKKyAgICBDdXN0b21Ub0pTT2JqZWN0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0g
aW50ZXJmYWNlIElEQkFueSB7CiAgICAgLy8gVGhpcyBzcGFjZSBpcyBpbnRlbnRpb25hbGx5IGxl
ZnQgYmxhbmsuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvci5jcHAKaW5kZXggOTkwZTNhNC4uMGFhZTQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCkBAIC0xNDYsNyArMTQ2LDcgQEAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBTY3JpcHQKICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0gb2JqZWN0
U3RvcmUtPm1ldGFkYXRhKCkua2V5UGF0aDsKICAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlz
ID0gIWtleVBhdGguaXNOdWxsKCk7CiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAg
IFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVB
bmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0
aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29udGV4dCwgdmFs
dWUsIGtleVBhdGgpOwogICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlz
RXF1YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpIHsKICAgICAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0y
NTksNyArMjU5LDcgQEAgdm9pZCBJREJDdXJzb3I6OmNsb3NlKCkKICAgICB9CiB9CiAKLXZvaWQg
SURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5KFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQ
dHI8SURCS2V5PiBwcmltYXJ5S2V5LCBTY3JpcHRWYWx1ZSYgdmFsdWUpCit2b2lkIElEQkN1cnNv
cjo6c2V0VmFsdWVSZWFkeShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgU2NyaXB0VmFs
dWUmIHZhbHVlKQogewogICAgIG1fY3VycmVudEtleSA9IGtleTsKICAgICBtX2N1cnJlbnRQcmlt
YXJ5S2V5ID0gcHJpbWFyeUtleTsKQEAgLTI2OSwxMCArMjY5LDEwIEBAIHZvaWQgSURCQ3Vyc29y
OjpzZXRWYWx1ZVJlYWR5KFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5
PiBwcmltYXJ5CiAgICAgICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbWV0YWRhdGEg
PSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKTsKICAgICAgICAgaWYgKG1ldGFkYXRhLmF1dG9JbmNy
ZW1lbnQgJiYgIW1ldGFkYXRhLmtleVBhdGguaXNOdWxsKCkpIHsKICNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21T
Y3JpcHRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOworICAgICAgICAg
ICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKGNvbnRleHQsIHZhbHVlLCBtZXRhZGF0YS5rZXlQYXRoKTsKICAgICAgICAg
ICAgIEFTU0VSVCghZXhwZWN0ZWRLZXkgfHwgZXhwZWN0ZWRLZXktPmlzRXF1YWwobV9jdXJyZW50
UHJpbWFyeUtleS5nZXQoKSkpOwogI2VuZGlmCi0gICAgICAgICAgICBib29sIGluamVjdGVkID0g
aW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKG1fY3VycmVudFByaW1hcnlLZXksIHZhbHVlLCBt
ZXRhZGF0YS5rZXlQYXRoKTsKKyAgICAgICAgICAgIGJvb2wgaW5qZWN0ZWQgPSBpbmplY3RJREJL
ZXlJbnRvU2NyaXB0VmFsdWUoY29udGV4dCwgbV9jdXJyZW50UHJpbWFyeUtleSwgdmFsdWUsIG1l
dGFkYXRhLmtleVBhdGgpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIHdheSB0
byByZXBvcnQgZXJyb3JzIGhlcmUuIE1vdmUgdGhpcyBpbnRvIG9uU3VjY2Vzc1dpdGhDb250aW51
YXRpb24gc28gdGhhdCB3ZSBjYW4gYWJvcnQgdGhlIHRyYW5zYWN0aW9uIHRoZXJlLiBTZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI3OAogICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChpbmplY3RlZCwgaW5qZWN0ZWQpOwogICAgICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCmluZGV4IDU1ODljMjIuLjcwNGU1
MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCkBA
IC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2Fs
bGJhY2soKTsKICAgICB2b2lkIGNsb3NlKCk7Ci0gICAgdm9pZCBzZXRWYWx1ZVJlYWR5KFBhc3NS
ZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFNjcmlwdFZhbHVl
Jik7CisgICAgdm9pZCBzZXRWYWx1ZVJlYWR5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBTY3JpcHRWYWx1
ZSYpOwogCiAgICAgLy8gVGhlIHNwZWMgcmVxdWlyZXMgdGhhdCB0aGUgc2NyaXB0IG9iamVjdCB0
aGF0IHdyYXBzIHRoZSB2YWx1ZQogICAgIC8vIGJlIHVuY2hhbmdlZCB1bnRpbCB0aGUgdmFsdWUg
Y2hhbmdlcyBhcyBhIHJlc3VsdCBvZiB0aGUgY3Vyc29yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAppbmRleCBiNTE0ZmU5Li5kN2Y1YWY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKQEAgLTI1
LDYgKzI1LDcgQEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAg
SlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURCQ3Vyc29yIHsKICAgICAvLyBGSVhNRTog
RXZlbnR1YWxseSByZW1vdmUgbGVnYWN5IGVudW0gY29uc3RhbnRzLCBzZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzE1CiAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgTkVYVCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAppbmRleCAxZjc0YzMzLi5iOGI3N2VjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmgKQEAgLTYzLDcgKzYzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcHJlZmV0Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHBy
ZWZldGNoUmVzZXQoaW50IHVzZWRQcmVmZXRjaGVzLCBpbnQgdW51c2VkUHJlZmV0Y2hlcyk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCkgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFj
aygpIHsgfQogCiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3Vyc29yLT5rZXkoKTsgfQogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgY29u
c3QgeyByZXR1cm4gbV9jdXJzb3ItPnByaW1hcnlLZXkoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKaW5kZXgg
OThjYzY1Yi4uMGM1YTc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCkBAIC0yNCw3ICsyNCw4IEBACiAgKi8K
IAogWwotICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBDb25kaXRpb25hbD1J
TkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElEQkN1
cnNvcldpdGhWYWx1ZSA6IElEQkN1cnNvciB7Ci0gICAgW1Y4Q3VzdG9tR2V0dGVyXSByZWFkb25s
eSBhdHRyaWJ1dGUgSURCQW55IHZhbHVlOworICAgIFtWOEN1c3RvbUdldHRlciwgSlNDdXN0b21H
ZXR0ZXIsIENhY2hlZEF0dHJpYnV0ZV0gcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2YWx1ZTsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5p
ZGwKaW5kZXggOTFlZjFkOC4uYWYyZWYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbApAQCAtMjcsNyArMjcsOCBAQAogWwogICAgIENv
bmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgIEV2
ZW50VGFyZ2V0CisgICAgRXZlbnRUYXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRl
cmZhY2UgSURCRGF0YWJhc2UgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFt
ZTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHZlcnNpb247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5p
ZGwKaW5kZXggYmIyMTViZC4uYTc1YmFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbApAQCAtMjUsNyAr
MjUsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICBEb05v
dENoZWNrQ29uc3RhbnRzCisgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKKyAgICBKU05vU3RhdGlj
VGFibGVzCiBdIGV4Y2VwdGlvbiBJREJEYXRhYmFzZUV4Y2VwdGlvbiB7CiAKICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgICBjb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbAppbmRleCBhMjRjZDJiLi41NzlhNmUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbApA
QCAtMjQsNyArMjQsOCBAQAogICovCiAKIFsKLSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFC
QVNFCisgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFi
bGVzCiBdIGludGVyZmFjZSBJREJGYWN0b3J5IHsKICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgSW1wbGVtZW50ZWRBcz1nZXREYXRhYmFzZU5hbWVzXSBJREJSZXF1ZXN0IHdl
YmtpdEdldERhdGFiYXNlTmFtZXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCSW5kZXguaWRsCmluZGV4IGVmZmE5Y2Y0Li5jMDBlM2YwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCkBAIC0yNCw3ICsyNCw4IEBA
CiAgKi8KIAogWwotICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNl
IElEQkluZGV4IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIElEQk9iamVjdFN0b3JlIG9iamVjdFN0b3JlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKaW5kZXggM2I5NmZjMS4uMjlmMjcx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsCkBAIC0y
NSw3ICsyNSw4IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAg
IEN1c3RvbVRvSlNPYmplY3QKKyAgICBDdXN0b21Ub0pTT2JqZWN0LAorICAgIEpTTm9TdGF0aWNU
YWJsZXMKIF0gaW50ZXJmYWNlIElEQktleSB7CiAgICAgLy8gVGhpcyBzcGFjZSBpcyBpbnRlbnRp
b25hbGx5IGxlZnQgYmxhbmsuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCS2V5UmFuZ2UuaWRsCmluZGV4IDgyMDYyOGEuLjQyNDAwM2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwKQEAgLTI0LDcg
KzI0LDggQEAKICAqLwogCiBbCi0gICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAg
IENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBp
bnRlcmZhY2UgSURCS2V5UmFuZ2UgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkgbG93
ZXI7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSB1cHBlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCAyZWFj
YjMxLi41YmUwMWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0xMDEsMTIgKzEwMSwxMyBAQCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzcwogICAgIHJldHVybiBnZXQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBl
Yyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzKiBpbmRl
eEtleXMpCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsCisgICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSwKKyAgICBjb25zdCBTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUsCisgICAgSURCT2Jq
ZWN0U3RvcmU6OkluZGV4S2V5cyogaW5kZXhLZXlzKQogewogICAgIEFTU0VSVChpbmRleEtleXMp
OwotICAgIFJlZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZh
bHVlQW5kS2V5UGF0aChvYmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKKyAgICBS
ZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgoY29udGV4dCwgb2JqZWN0VmFsdWUsIGluZGV4TWV0YWRhdGEua2V5UGF0aCk7CiAKICAg
ICBpZiAoIWluZGV4S2V5KQogICAgICAgICByZXR1cm47CkBAIC0xNTUsOSArMTU2LDggQEAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgU2Ny
aXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKLSAgICBSZWZQdHI8U2Vy
aWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZS5zZXJpYWxpemUoc3Rh
dGUpOwotICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSBzZXJpYWxpemVJREJWYWx1ZShjb250
ZXh0LCB2YWx1ZSk7CisgICAgaWYgKCFzZXJpYWxpemVkVmFsdWUpIHsKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CkBAIC0xODEsNyArMTgxLDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewotICAgICAg
ICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVl
QW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVBh
dGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnRleHQsIHZh
bHVlLCBrZXlQYXRoKTsKICAgICAgICAgaWYgKGtleVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlz
VmFsaWQoKSkgewogICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlI7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTE5MSw3ICsxOTEsNyBAQCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlOjpQdXRNbwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgewotICAgICAgICAgICAgaWYgKCFj
YW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUodmFsdWUsIGtleVBhdGgpKSB7CisgICAgICAg
ICAgICBpZiAoIWNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShjb250ZXh0LCB2YWx1ZSwg
a2V5UGF0aCkpIHsKICAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KQEAgLTIw
OCw3ICsyMDgsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQo
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgIFZlY3RvcjxJbmRleEtl
eXM+IGluZGV4S2V5czsKICAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBt
X21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgSW5kZXhLZXlzIGtleXM7
Ci0gICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtl
eXMpOworICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGNvbnRleHQsIGl0LT52YWx1
ZSwgdmFsdWUsICZrZXlzKTsKICAgICAgICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPmtleSk7CiAg
ICAgICAgIGluZGV4S2V5cy5hcHBlbmQoa2V5cyk7CiAgICAgfQpAQCAtMzMyLDcgKzMzMiw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBTY3JpcHRWYWx1ZSB2YWx1ZSA9IHZhbHVlQW55LT5zY3Jp
cHRWYWx1ZSgpOwogCiAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGluZGV4
S2V5czsKLSAgICAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1ldGFk
YXRhLCB2YWx1ZSwgJmluZGV4S2V5cyk7CisgICAgICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0Zv
clZhbHVlKGNvbnRleHQsIG1faW5kZXhNZXRhZGF0YSwgdmFsdWUsICZpbmRleEtleXMpOwogCiAg
ICAgICAgICAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cywgMT4gaW5kZXhLZXlz
TGlzdDsKICAgICAgICAgICAgIGluZGV4S2V5c0xpc3QuYXBwZW5kKGluZGV4S2V5cyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwK
aW5kZXggMTMyMDQzNC4uNmJkNGMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbApAQCAtMjQsNyArMjQsOCBAQAogICovCiAK
IFsKLSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0aW9uYWw9SU5E
RVhFRF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJPYmpl
Y3RTdG9yZSB7CiAgICAgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gcmVhZG9ubHkg
YXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIFtJbXBsZW1lbnRlZEFzPWtleVBhdGhBbnld
IHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkga2V5UGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKaW5kZXggYmJkZTli
Yy4uZjAwZThlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT3BlbkRCUmVxdWVzdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwKQEAgLTI2LDcgKzI2LDggQEAKIFsKICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFdmVudFRh
cmdldAorICAgIEV2ZW50VGFyZ2V0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNl
IElEQk9wZW5EQlJlcXVlc3QgOiBJREJSZXF1ZXN0IHsKICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0
ZW5lciBvbmJsb2NrZWQ7CiAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb251cGdyYWRlbmVl
ZGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNw
cAppbmRleCAzZjZmOWNkLi4yZWYwZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMzY5LDEwICszNjksMTAgQEAgdm9pZCBJREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFNl
cmlhbGl6ZWRTY3JpcHQKIAogICAgIFJlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkgPSBwcnBQcmlt
YXJ5S2V5OwogI2lmbmRlZiBOREVCVUcKLSAgICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9
IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOwor
ICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZh
bHVlQW5kS2V5UGF0aChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHZhbHVlLCBrZXlQYXRoKTsK
ICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4cGVjdGVkS2V5LT5pc0VxdWFsKHByaW1hcnlL
ZXkuZ2V0KCkpKTsKICNlbmRpZgotICAgIGJvb2wgaW5qZWN0ZWQgPSBpbmplY3RJREJLZXlJbnRv
U2NyaXB0VmFsdWUocHJpbWFyeUtleSwgdmFsdWUsIGtleVBhdGgpOworICAgIGJvb2wgaW5qZWN0
ZWQgPSBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCBwcmltYXJ5S2V5LCB2YWx1ZSwga2V5UGF0aCk7CiAgICAgQVNTRVJUX1VOVVNFRChpbmplY3Rl
ZCwgaW5qZWN0ZWQpOwogICAgIG9uU3VjY2Vzc0ludGVybmFsKHZhbHVlKTsKIH0KQEAgLTQ3Miw3
ICs0NzIsNyBAQCBib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVu
dD4gZXZlbnQpCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NF
dmVudCkgewogICAgICAgICBjdXJzb3JUb05vdGlmeSA9IGdldFJlc3VsdEN1cnNvcigpOwogICAg
ICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCi0gICAgICAgICAgICBjdXJzb3JUb05vdGlmeS0+c2V0
VmFsdWVSZWFkeShtX2N1cnNvcktleS5yZWxlYXNlKCksIG1fY3Vyc29yUHJpbWFyeUtleS5yZWxl
YXNlKCksIG1fY3Vyc29yVmFsdWUpOworICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnNldFZh
bHVlUmVhZHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX2N1cnNvcktleS5yZWxlYXNlKCks
IG1fY3Vyc29yUHJpbWFyeUtleS5yZWxlYXNlKCksIG1fY3Vyc29yVmFsdWUpOwogICAgIH0KIAog
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVl
c3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwK
aW5kZXggNGU4ZmYwOS4uMGIxNjlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCUmVxdWVzdC5pZGwKQEAgLTMwLDcgKzMwLDggQEAKIFsKICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFdmVudFRh
cmdldAorICAgIEV2ZW50VGFyZ2V0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNl
IElEQlJlcXVlc3QgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgcmVzdWx0CiAgICAg
ICAgIGdldHRlciByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAppbmRleCA3MmZh
YThkLi44ZWM0YjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaWRsCkBAIC0yNyw3ICsyNyw4IEBACiBbCiAgICAgQ29uZGl0aW9u
YWw9SU5ERVhFRF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgRXZlbnRUYXJn
ZXQKKyAgICBFdmVudFRhcmdldCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJ
REJUcmFuc2FjdGlvbiB7CiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgcmVtb3ZlIGxlZ2FjeSBl
bnVtIGNvbnN0YW50cywgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NTMxNQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFJFQURfT05MWSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZl
bnQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRl
ZEV2ZW50LmlkbAppbmRleCAwODEwZGQyLi44ZjIyNTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwK
QEAgLTI1LDcgKzI1LDggQEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0Us
Ci0gICAgSW50ZXJmYWNlTmFtZT1JREJWZXJzaW9uQ2hhbmdlRXZlbnQKKyAgICBJbnRlcmZhY2VO
YW1lPUlEQlZlcnNpb25DaGFuZ2VFdmVudCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVy
ZmFjZSBJREJVcGdyYWRlTmVlZGVkRXZlbnQgOiBFdmVudCB7CiAgICAgcmVhZG9ubHkgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsCmluZGV4
IGY5MmVmNTMuLjhkMjEzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbApAQCAtMjQsNyArMjQsOCBA
QAogICovCiAKIFsKLSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0
aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFj
ZSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQgOiBFdmVudCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IERPTVN0cmluZyB2ZXJzaW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAppbmRleCA0OTdi
NTdiLi45YjZlMWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCkBAIC0yNiw3ICsyNiw4IEBA
CiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmpl
Y3QsCi0gICAgRXZlbnRUYXJnZXQKKyAgICBFdmVudFRhcmdldCwKKyAgICBKU05vU3RhdGljVGFi
bGVzCiBdIGludGVyZmFjZSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCA6IElEQlJlcXVlc3Qgewog
ICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmxvY2tlZDsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IGI1NWU3
NmIuLmY3YjQ1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJp
bmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI4LDIyICsyOSwyODggQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKKyNp
bmNsdWRlICJKU0lEQktleS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KworI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CisKKyNpZiBFTkFCTEUoV09SS0VS
UykKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPElEQktleT4gY3JlYXRl
SURCS2V5RnJvbVZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUp
CitjbGFzcyBJREJKU0NvbnRleHQgeworcHVibGljOgorICAgIElEQkpTQ29udGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgICAgICA6IG1fbG9jayhjb250ZXh0LT5nbG9i
YWxEYXRhKCkpCisgICAgICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbV9zY3Jp
cHRTdGF0ZSgwKQorICAgIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7
CisgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+
KG1fY29udGV4dCk7CisgICAgICAgICAgICBtX3NjcmlwdFN0YXRlID0gbWFpbldvcmxkU2NyaXB0
U3RhdGUoZG9jdW1lbnQtPmZyYW1lKCkpOworICAgICAgICB9CisjaWYgRU5BQkxFKFdPUktFUlMp
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1fY29udGV4dC0+aXNXb3JrZXJD
b250ZXh0KCkpOworICAgICAgICAgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IHN0
YXRpY19jYXN0PFdvcmtlckNvbnRleHQqPihtX2NvbnRleHQpOworICAgICAgICAgICAgbV9zY3Jp
cHRTdGF0ZSA9IHNjcmlwdFN0YXRlRnJvbVdvcmtlckNvbnRleHQod29ya2VyQ29udGV4dCk7Cisg
ICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KCkgeyByZXR1cm4ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obV9zY3JpcHRTdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsgfQorICAgIEV4ZWNTdGF0ZSogZXhlY1N0YXRlKCkgeyBy
ZXR1cm4gbV9zY3JpcHRTdGF0ZTsgfQorCitwcml2YXRlOgorICAgIEpTTG9ja0hvbGRlciBtX2xv
Y2s7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OworICAgIFNjcmlwdFN0
YXRlKiBtX3NjcmlwdFN0YXRlOworfTsKKworc3RhdGljIGJvb2wgZ2V0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsIEpTVmFsdWUm
IHJlc3VsdCkKIHsKLSAgICBpZiAodmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZUludmFsaWQoKTsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgIGlmIChv
YmplY3QuaXNTdHJpbmcoKSAmJiBrZXlQYXRoRWxlbWVudCA9PSAibGVuZ3RoIikgeworICAgICAg
ICByZXN1bHQgPSBqc051bWJlcihvYmplY3QudG9TdHJpbmcoZXhlYyktPmxlbmd0aCgpKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmICghb2JqZWN0LmlzT2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJmV4ZWMtPmds
b2JhbERhdGEoKSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKCFhc09i
amVjdChvYmplY3QpLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IGFzT2JqZWN0KG9iamVjdCktPmdldChleGVjLCBpZGVu
dGlmaWVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY2FuU2V0KEpTVmFs
dWUgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50KQoreworICAgIHJldHVybiBv
YmplY3QuaXNPYmplY3QoKTsKK30KKworc3RhdGljIGJvb2wgc2V0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSYgb2JqZWN0LCBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50LCBKU1ZhbHVlIGpz
VmFsdWUpCit7CisgICAgaWYgKCFjYW5TZXQob2JqZWN0LCBrZXlQYXRoRWxlbWVudCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIoJmV4ZWMtPmdsb2Jh
bERhdGEoKSwga2V5UGF0aEVsZW1lbnQudXRmOCgpLmRhdGEoKSk7CisgICAgYXNPYmplY3Qob2Jq
ZWN0KS0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgaWRlbnRpZmllciwganNWYWx1ZSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bURlcHRo
ID0gMjAwMDsKKworc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFs
dWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8SlNBcnJheSo+JiBzdGFj
aykKK3sKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSAmJiAhaXNuYW4odmFsdWUudG9OdW1iZXIo
ZXhlYykpKQogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIodmFsdWUudG9OdW1i
ZXIoZXhlYykpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gSURC
S2V5OjpjcmVhdGVTdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGRhdGVzLgorICAgIGlmICh2YWx1ZS5pbmhlcml0cygmRGF0
ZUluc3RhbmNlOjpzX2luZm8pICYmICFpc25hbih2YWx1ZVRvRGF0ZShleGVjLCB2YWx1ZSkpKQor
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKHZhbHVlVG9EYXRlKGV4ZWMsIHZhbHVl
KSk7CisgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICAgICAgaWYgKGlzSlNBcnJheShvYmplY3QpIHx8IG9i
amVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpIHsKKyAgICAgICAgICAgIEpTQXJyYXkq
IGFycmF5ID0gYXNBcnJheShvYmplY3QpOworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
YXJyYXktPmxlbmd0aCgpOworCisgICAgICAgICAgICBpZiAoc3RhY2suY29udGFpbnMoYXJyYXkp
KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKHN0YWNrLnNpemUo
KSA+PSBtYXhpbXVtRGVwdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICBzdGFjay5hcHBlbmQoYXJyYXkpOworCisgICAgICAgICAgICBJREJLZXk6OktleUFycmF5IHN1
YmtleXM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBhcnJheS0+Z2V0SW5kZXgoZXhlYywg
aSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPElEQktleT4gc3Via2V5ID0gY3JlYXRlSURCS2V5
RnJvbVZhbHVlKGV4ZWMsIGl0ZW0sIHN0YWNrKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Ymtl
eSkKKyAgICAgICAgICAgICAgICAgICAgc3Via2V5cy5hcHBlbmQoSURCS2V5OjpjcmVhdGVJbnZh
bGlkKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3Via2V5
cy5hcHBlbmQoc3Via2V5KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhY2sucmVt
b3ZlTGFzdCgpOworICAgICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkoc3Via2V5
cyk7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKK1Bhc3NSZWZQdHI8SURC
S2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIFZlY3RvcjxKU0FycmF5Kj4gc3RhY2s7CisgICAgUmVmUHRyPElEQktleT4ga2V5
ID0gY3JlYXRlSURCS2V5RnJvbVZhbHVlKGV4ZWMsIHZhbHVlLCBzdGFjayk7CisgICAgaWYgKGtl
eSkKKyAgICAgICAgcmV0dXJuIGtleTsKKyAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJbnZhbGlk
KCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIGdldE50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSByb290VmFsdWUsCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBh
dGhFbGVtZW50cywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUo
cm9vdFZhbHVlKTsKKyAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKyAgICAgICAgaWYg
KGN1cnJlbnRWYWx1ZS5pc1N0cmluZygpICYmIGtleVBhdGhFbGVtZW50c1tpXSA9PSAibGVuZ3Ro
IikKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihjdXJyZW50VmFsdWUudG9TdHJpbmcoZXhl
YyktPmxlbmd0aCgpKTsKKyAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUuaXNPYmplY3QoKSkKKyAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICBKU1ZhbHVlIHBhcmVudFZh
bHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGlmICghZ2V0KGV4ZWMsIHBhcmVudFZhbHVlLCBr
ZXlQYXRoRWxlbWVudHNbaV0sIGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsKK30KKworc3RhdGlj
IFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgpCit7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElE
QktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLCBr
ZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBh
cnNlRXJyb3JOb25lKTsKKworICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlLmpzVmFsdWUoKTsK
KyAgICBqc1ZhbHVlID0gZ2V0TnRoVmFsdWVPbktleVBhdGgoZXhlYywganNWYWx1ZSwga2V5UGF0
aEVsZW1lbnRzLAorICAgICAgICBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBpZiAoanNW
YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY3JlYXRl
SURCS2V5RnJvbVZhbHVlKGV4ZWMsIGpzVmFsdWUpOworfQorCitzdGF0aWMgSlNWYWx1ZSBlbnN1
cmVOdGhWYWx1ZU9uS2V5UGF0aChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgcm9vdFZhbHVlLAor
ICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRoRWxlbWVudHMsIHVuc2lnbmVkIGluZGV4
KQoreworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJvb3RWYWx1ZSk7CisKKyAgICBBU1NFUlQo
aW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGluZGV4OyBpKyspIHsKKyAgICAgICAgSlNWYWx1ZSBwYXJlbnRWYWx1ZShjdXJyZW50
VmFsdWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtleVBhdGhFbGVtZW50ID0ga2V5UGF0aEVs
ZW1lbnRzW2ldOworICAgICAgICBpZiAoIWdldChleGVjLCBwYXJlbnRWYWx1ZSwga2V5UGF0aEVs
ZW1lbnQsIGN1cnJlbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICAgICAgICAgIGlmICghc2V0KGV4ZWMsIHBh
cmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZShvYmplY3QpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IEpT
VmFsdWUob2JqZWN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjdXJyZW50VmFs
dWU7Cit9CisKK3N0YXRpYyBib29sIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSByb290VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBrZXlQYXRo
RWxlbWVudHMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGlmICghcm9vdFZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTVmFsdWUgY3VycmVudFZhbHVlKHJv
b3RWYWx1ZSk7CisKKyAgICBBU1NFUlQoaW5kZXggPD0ga2V5UGF0aEVsZW1lbnRzLnNpemUoKSk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGV4OyArK2kpIHsKKyAgICAgICAgSlNW
YWx1ZSBwYXJlbnRWYWx1ZShjdXJyZW50VmFsdWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIGtl
eVBhdGhFbGVtZW50ID0ga2V5UGF0aEVsZW1lbnRzW2ldOworICAgICAgICBpZiAoIWdldChleGVj
LCBwYXJlbnRWYWx1ZSwga2V5UGF0aEVsZW1lbnQsIGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gY2FuU2V0KHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBTY3Jp
cHRWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RS
QUNFKCJpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKKworICAgIEFTU0VSVChrZXlQYXRo
LnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBr
ZXlQYXRoRWxlbWVudHM7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURC
UGFyc2VLZXlQYXRoKGtleVBhdGguc3RyaW5nKCksIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOwor
ICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgaWYg
KGtleVBhdGhFbGVtZW50cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlLmpzVmFsdWUoKTsKKyAgICBpZiAoIWpzVmFsdWUuaXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSURCSlNDb250ZXh0IGlkYkNv
bnRleHQoY29udGV4dCk7CisgICAgRXhlY1N0YXRlKiBleGVjID0gaWRiQ29udGV4dC5leGVjU3Rh
dGUoKTsKKworICAgIEpTVmFsdWUgcGFyZW50ID0gZW5zdXJlTnRoVmFsdWVPbktleVBhdGgoZXhl
YywgYXNPYmplY3QoanNWYWx1ZSksCisgICAgICAgIGtleVBhdGhFbGVtZW50cywga2V5UGF0aEVs
ZW1lbnRzLnNpemUoKSAtIDEpOworICAgIGlmIChwYXJlbnQuaXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFzZXQoZXhlYywgcGFyZW50LCBrZXlQYXRoRWxl
bWVudHMubGFzdCgpLAorICAgICAgICB0b0pTKGV4ZWMsIGlkYkNvbnRleHQuZ2xvYmFsT2JqZWN0
KCksIGtleS5nZXQoKSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU2NyaXB0VmFs
dWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgi
Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCIpOworICAgIEFTU0VSVCgha2V5
UGF0aC5pc051bGwoKSk7CisKKyAgICBJREJKU0NvbnRleHQgaWRiQ29udGV4dChjb250ZXh0KTsK
KyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBpZGJDb250ZXh0LmV4ZWNTdGF0ZSgpOworCisgICAgaWYg
KGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OkFycmF5VHlwZSkgeworICAgICAgICBJREJL
ZXk6OktleUFycmF5IHJlc3VsdDsKKyAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFycmF5
ID0ga2V5UGF0aC5hcnJheSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJy
YXkuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IGNyZWF0
ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGFycmF5W2ldKTsK
KyAgICAgICAgICAgIGlmICgha2V5KQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChrZXkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZUFycmF5KHJlc3VsdCk7CisgICAgfQorCisgICAgQVNTRVJUKGtleVBhdGgudHlw
ZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIHJldHVybiBjcmVhdGVJREJLZXlG
cm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGV4ZWMsIHZhbHVlLCBrZXlQYXRoLnN0cmluZygpKTsK
K30KKworYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoKQoreworICAgIElEQl9UUkFDRSgiY2FuSW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlIik7CisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6
OlN0cmluZ1R5cGUpOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJ
REJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aC5z
dHJpbmcoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElE
QktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICBpZiAoIWtleVBhdGhFbGVtZW50cy5zaXpl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIElEQkpTQ29udGV4dCBpZGJDb250ZXh0
KGNvbnRleHQpOworICAgIHJldHVybiBjYW5JbmplY3ROdGhWYWx1ZU9uS2V5UGF0aChpZGJDb250
ZXh0LmV4ZWNTdGF0ZSgpLAorICAgICAgICBzY3JpcHRWYWx1ZS5qc1ZhbHVlKCksIGtleVBhdGhF
bGVtZW50cywga2V5UGF0aEVsZW1lbnRzLnNpemUoKSAtIDEpOworfQorCitTY3JpcHRWYWx1ZSBk
ZXNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSkKK3sKKyAgICBJREJKU0NvbnRl
eHQgaWRiQ29udGV4dChjb250ZXh0KTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzZXJpYWxpemVkVmFsdWUgPSBwcnBWYWx1ZTsKKyAgICBpZiAoc2VyaWFsaXplZFZhbHVlKQor
ICAgICAgICByZXR1cm4gU2NyaXB0VmFsdWU6OmRlc2VyaWFsaXplKGlkYkNvbnRleHQuZXhlY1N0
YXRlKCksCisgICAgICAgICAgICBzZXJpYWxpemVkVmFsdWUuZ2V0KCksIE5vblRocm93aW5nKTsK
KyAgICByZXR1cm4gU2NyaXB0VmFsdWUoKmNvbnRleHQtPmdsb2JhbERhdGEoKSwganNOdWxsKCkp
OworfQorCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplSURCVmFs
dWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHNjcmlwdFZh
bHVlKQoreworICAgIElEQkpTQ29udGV4dCBpZGJDb250ZXh0KGNvbnRleHQpOworICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTo6Y3JlYXRlKGlkYkNvbnRleHQuZXhlY1N0YXRlKCksIHNjcmlwdFZhbHVlLmpzVmFs
dWUoKSk7CisgICAgaWYgKGlkYkNvbnRleHQuZXhlY1N0YXRlKCktPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5k
aW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmgKaW5kZXggOGUwYzljNS4uNWZhMzc2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtMjksNyArMjksOSBAQAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2lu
Y2x1ZGUgIklEQktleVBhdGguaCIKICNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIiAKKwogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDYgKzQwLDEy
IEBAIGNsYXNzIElEQktleTsKIAogUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21W
YWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CiAKK2Jvb2wgaW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktl
eT4sIFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworUGFzc1JlZlB0cjxJREJLZXk+
IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworYm9vbCBjYW5J
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworU2NyaXB0VmFsdWUgZGVzZXJpYWxp
emVJREJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+KTsKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxp
emVJREJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmKTsKKwogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAppbmRleCBmNDc2ZDcyLi41ZTNlOTZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKQEAgLTU4LDEyICs1OCwx
NiBAQCBKU0RpY3Rpb25hcnk6OkdldFByb3BlcnR5UmVzdWx0IEpTRGljdGlvbmFyeTo6dHJ5R2V0
UHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydAogICAgIGlmICghbV9pbml0aWFsaXplck9iamVj
dC5nZXQoKS0+Z2V0UHJvcGVydHlTbG90KG1fZXhlYywgaWRlbnRpZmllciwgc2xvdCkpCiAgICAg
ICAgIHJldHVybiBOb1Byb3BlcnR5Rm91bmQ7CiAKLSAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBtX2V4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247CisgICAg
fQogCiAgICAgZmluYWxSZXN1bHQgPSBzbG90LmdldFZhbHVlKG1fZXhlYywgaWRlbnRpZmllcik7
Ci0gICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKG1fZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgbV9leGVjLT5jbGVhckV4Y2VwdGlvbigpOwogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uVGhyb3duOworICAgIH0KIAogICAgIHJldHVybiBQcm9wZXJ0eUZvdW5k
OwogfQpAQCAtMTExLDggKzExNSwxMCBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgU3RyaW5nJiByZXN1bHQpCiAKIHZvaWQg
SlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KQogewotICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwogICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gMDsKICAgICBKU09iamVjdCogb2JqZWN0ID0gdG9KU1NlcXVlbmNlKGV4ZWMs
IHZhbHVlLCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEaWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnku
aAppbmRleCAzYzk4NzNlLi4wOTAwY2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RpY3Rpb25hcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RpY3Rpb25hcnkuaApAQCAtMTUwLDggKzE1MCwxMCBAQCBKU0RpY3Rpb25hcnk6OkdldFByb3Bl
cnR5UmVzdWx0IEpTRGljdGlvbmFyeTo6dHJ5R2V0UHJvcGVydHlBbmRSZXN1bHQoY29uc3QgY2hh
cgogICAgICAgICBSZXN1bHQgcmVzdWx0OwogICAgICAgICBjb252ZXJ0VmFsdWUobV9leGVjLCB2
YWx1ZSwgcmVzdWx0KTsKIAotICAgICAgICBpZiAobV9leGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgaWYgKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgICAgIG1fZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb25UaHJvd247Cisg
ICAgICAgIH0KIAogICAgICAgICBzZXR0ZXIoY29udGV4dCwgcmVzdWx0KTsKICAgICAgICAgYnJl
YWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAKaW5k
ZXggNzcxMTNjNy4uZTBmZmZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJBbnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCQW55Q3VzdG9tLmNwcApAQCAtNjQsOCArNjQsNiBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJREJBbnkqIGlkYkFueSkK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgY2FzZSBJREJBbnk6Ok51bGxUeXBl
OgogICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgY2FzZSBJREJBbnk6OlN0cmluZ1R5cGU6
Ci0gICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpZGJBbnktPnN0cmluZygp
KTsKICAgICBjYXNlIElEQkFueTo6RE9NU3RyaW5nTGlzdFR5cGU6CiAgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5kb21TdHJpbmdMaXN0KCkpOwogICAgIGNh
c2UgSURCQW55OjpJREJDdXJzb3JUeXBlOgpAQCAtODQsOCArODIsMTIgQEAgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCQW55
KiBpZGJBbnkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55
LT5pZGJPYmplY3RTdG9yZSgpKTsKICAgICBjYXNlIElEQkFueTo6SURCVHJhbnNhY3Rpb25UeXBl
OgogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlkYkFueS0+aWRiVHJh
bnNhY3Rpb24oKSk7Ci0gICAgY2FzZSBJREJBbnk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZVR5cGU6
Ci0gICAgICAgIHJldHVybiBpZGJBbnktPnNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSgpLT5kZXNlcmlh
bGl6ZShleGVjLCBnbG9iYWxPYmplY3QpOworICAgIGNhc2UgSURCQW55OjpTY3JpcHRWYWx1ZVR5
cGU6CisgICAgICAgIHJldHVybiBpZGJBbnktPnNjcmlwdFZhbHVlKCkuanNWYWx1ZSgpOworICAg
IGNhc2UgSURCQW55OjpTdHJpbmdUeXBlOgorICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoZXhlYywgaWRiQW55LT5zdHJpbmcoKSk7CisgICAgY2FzZSBJREJBbnk6OkludGVnZXJUeXBl
OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaWRiQW55LT5pbnRlZ2VyKCkpOwogICAgIH0KIAog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjkyMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhWYWx1ZUN1c3RvbS5jcHAKQEAgLTAs
MCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWlj
aGFlbEA2OGsub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkpTSURCQ3Vy
c29yV2l0aFZhbHVlLmgiCisKKyNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0lEQkFueS5oIgorCit1c2luZyBuYW1l
c3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNJREJDdXJzb3JX
aXRoVmFsdWU6OnZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBJREJDdXJzb3Iq
IGN1cnNvciA9IGltcGwoKTsKKyAgICBpZiAoIWN1cnNvci0+dmFsdWVJc0RpcnR5KCkpIHsKKyAg
ICAgICAgaWYgKEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBtX3ZhbHVlLmdldCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGNhY2hlZFZhbHVlOworICAgIH0KKworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QoKSwgY3Vyc29yLT52YWx1ZSgpLmdldCgpKTsKKyAgICBjb25z
dF9jYXN0PEpTSURCQ3Vyc29yV2l0aFZhbHVlKj4odGhpcyktPm1fdmFsdWUuc2V0KGV4ZWMtPmds
b2JhbERhdGEoKSwgdGhpcywgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAppbmRleCA4NWFhNWRiLi5lNDg1YmQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwCkBAIC00OCwx
MCArNDgsOSBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBJREJLZXkqIGtleSkKICAgICAgICAgICAgIGNvbnN0IElEQktleTo6
S2V5QXJyYXkmIGluQXJyYXkgPSBrZXktPmFycmF5KCk7CiAgICAgICAgICAgICBzaXplX3Qgc2l6
ZSA9IGluQXJyYXkuc2l6ZSgpOwogICAgICAgICAgICAgSlNBcnJheSogb3V0QXJyYXkgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgc2l6ZSk7Ci0gICAgICAgICAgICBK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICAgICAgICAgIElE
QktleSogYXJyYXlLZXkgPSBpbkFycmF5LmF0KGkpLmdldCgpOwotICAgICAgICAgICAgICAgIG91
dEFycmF5LT5pbml0aWFsaXplSW5kZXgoZ2xvYmFsRGF0YSwgaSwgdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIGFycmF5S2V5KSk7CisgICAgICAgICAgICAgICAgb3V0QXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBhcnJheUtleSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUob3V0QXJyYXkpOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9wZW5EQlJlcXVl
c3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPcGVuREJSZXF1
ZXN0Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGM1N2Rl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPcGVu
REJSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjaW5jbHVkZSAiSlNJREJPcGVuREJSZXF1ZXN0LmgiCisKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgSlNJREJPcGVuREJSZXF1ZXN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBKU0lEQk9wZW5EQlJlcXVlc3Qq
IGpzUmVxdWVzdCA9IGpzQ2FzdDxKU0lEQk9wZW5EQlJlcXVlc3QqPihjZWxsKTsKKyAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKGpzUmVxdWVzdCwgJnNfaW5mbyk7CisgICAgQ09NUElMRV9B
U1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNWaXNpdENoaWxkcmVuLCBPdmVycmlkZXNW
aXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsKKyAgICBBU1NFUlQoanNSZXF1ZXN0LT5z
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOworICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4oanNSZXF1ZXN0LCB2aXNpdG9yKTsKKyAgICBzdGF0aWNfY2FzdDxJ
REJPcGVuREJSZXF1ZXN0Kj4oanNSZXF1ZXN0LT5pbXBsKCkpLT52aXNpdEpTRXZlbnRMaXN0ZW5l
cnModmlzaXRvcik7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCBmNTU5ZjQxLi5jYzM4ZTY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIsIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CkBAIC0yNCwxOSArMjUsMjcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5o
IgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJKU0lEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0LmgiCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
JikKK3ZvaWQgSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzLgorICAgIEpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QqIGpzUmVxdWVzdCA9IGpz
Q2FzdDxKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyhqc1JlcXVlc3QsICZzX2luZm8pOworICAgIENPTVBJTEVfQVNTRVJUKFN0
cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiwgT3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJUKGpzUmVxdWVzdC0+c3RydWN0dXJl
KCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKyAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKGpzUmVxdWVzdCwgdmlzaXRvcik7CisgICAgc3RhdGljX2Nhc3Q8SURCVmVyc2lv
bkNoYW5nZVJlcXVlc3QqPihqc1JlcXVlc3QtPmltcGwoKSktPnZpc2l0SlNFdmVudExpc3RlbmVy
cyh2aXNpdG9yKTsKIH0KIAogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCmluZGV4IDUyMDgxNGUuLjIzNTc4ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMTg0
Miw2ICsxODQyLDExIEBAIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBTZXJpYWxp
emVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0M6OkV4ZWNTdGF0ZSoKIAogU3RyaW5nIFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKCkgY29uc3QKIHsKKyAgICBpZiAobV9kYXRhLnNp
emUoKSAmIDEpIHsKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGRhdGEobV9kYXRhKTsK
KyAgICAgICAgZGF0YS5hcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBDbG9uZURlc2VyaWFsaXpl
cjo6dG9XaXJlU3RyaW5nKGRhdGEpOworICAgIH0KICAgICByZXR1cm4gQ2xvbmVEZXNlcmlhbGl6
ZXI6OnRvV2lyZVN0cmluZyhtX2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCmluZGV4IDgzYWU5YjIuLjkwMWRiMWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwCkBAIC0xODcsNyArMTg3LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNjcmlwdFZhbHUKICAgICBy
ZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4S2V5KTsKIH0KIAotUGFzc1JlZlB0cjxJREJL
ZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29uc3QgU2NyaXB0VmFs
dWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorUGFzc1JlZlB0cjxJREJLZXk+
IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0
aCkKIHsKICAgICBJREJfVFJBQ0UoImNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgiKTsKICAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxsKCkpOwpAQCAtMjIwLDcgKzIyMCwxNiBA
QCBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdENvbnRleHQsIFBhc3NSZWZQdAogICAgIHJldHVybiBTY3JpcHRWYWx1ZSh2ODo6TnVs
bCgpKTsKIH0KIAotYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRo
KQorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZUlEQlZhbHVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYgdmFsdWUpCit7CisgICAgU2NyaXB0
U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKKyAgICBSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUgPSB2YWx1ZS5zZXJpYWxpemUoc3RhdGUp
OworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBzZXJpYWxpemVkVmFsdWUucmVsZWFzZSgpOworfQorCitib29sIGluamVjdElEQktl
eUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJL
ZXk+IGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQog
ewogICAgIElEQl9UUkFDRSgiaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAKQEAgLTI0
Nyw3ICsyNTYsNyBAQCBib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbgogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShjb25zdCBTY3JpcHRWYWx1
ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCitib29sIGNhbkluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU2Ny
aXB0VmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAg
IElEQl9UUkFDRSgiY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlIik7CiAgICAgQVNTRVJU
KGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oCmluZGV4IGE0ODJkYzku
LjUwMDlhNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRp
bmdVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5n
VXRpbGl0aWVzLmgKQEAgLTQwLDEwICs0MCwxMSBAQCBjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFs
dWU7CiAKIFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KTsKIAotYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoUGFzc1Jl
ZlB0cjxJREJLZXk+LCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKLVBhc3NSZWZQ
dHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGNvbnN0IFNj
cmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwotYm9vbCBjYW5JbmplY3RJREJLZXlJbnRv
U2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Citib29s
IGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJLZXk+LCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK1Bhc3NS
ZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgm
KTsKK2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKIFNjcmlwdFZh
bHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNjcmlwdFZh
bHVlJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xp
c3QuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaWRsCmluZGV4IGQwZWIz
NjIuLmFhNjQzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5pZGwKQEAgLTI1LDcg
KzI1LDggQEAKIAogWwogICAgIEluZGV4ZWRHZXR0ZXIsCi0gICAgSlNDdXN0b21Ub05hdGl2ZU9i
amVjdAorICAgIEpTQ3VzdG9tVG9OYXRpdmVPYmplY3QsCisgICAgSlNOb1N0YXRpY1RhYmxlcwog
XSBpbnRlcmZhY2UgRE9NU3RyaW5nTGlzdCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2ln
bmVkIGxvbmcgbGVuZ3RoOwogICAgIFtUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIERP
TVN0cmluZyBpdGVtKGluIFtPcHRpb25hbD1EZWZhdWx0SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxv
bmcgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJC
aW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lE
QkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcAppbmRleCA0NjcxMGU3Li45NWY1ZGE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRp
ZXNUZXN0LmNwcApAQCAtNDQsNyArNDQsNyBAQCBQYXNzUmVmUHRyPElEQktleT4gY2hlY2tLZXlG
cm9tVmFsdWVBbmRLZXlQYXRoSW50ZXJuYWwoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLAogICAg
IElEQktleVBhdGggaWRiS2V5UGF0aChrZXlQYXRoKTsKICAgICBFWFBFQ1RfVFJVRShpZGJLZXlQ
YXRoLmlzVmFsaWQoKSk7CiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21TY3JpcHRW
YWx1ZUFuZEtleVBhdGgodmFsdWUsIGlkYktleVBhdGgpOworICAgIHJldHVybiBjcmVhdGVJREJL
ZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKDAsIHZhbHVlLCBpZGJLZXlQYXRoKTsKIH0KIAog
dm9pZCBjaGVja0tleVBhdGhOdWxsVmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25z
dCBTdHJpbmcmIGtleVBhdGgpCkBAIC01Nyw3ICs1Nyw3IEBAIGJvb2wgaW5qZWN0S2V5KFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoCiB7CiAgICAgSURCS2V5UGF0aCBpZGJLZXlQYXRoKGtleVBhdGgpOwogICAgIEVYUEVDVF9U
UlVFKGlkYktleVBhdGguaXNWYWxpZCgpKTsKLSAgICByZXR1cm4gaW5qZWN0SURCS2V5SW50b1Nj
cmlwdFZhbHVlKGtleSwgdmFsdWUsIGlkYktleVBhdGgpOworICAgIHJldHVybiBpbmplY3RJREJL
ZXlJbnRvU2NyaXB0VmFsdWUoMCwga2V5LCB2YWx1ZSwgaWRiS2V5UGF0aCk7CiB9CiAKIHZvaWQg
Y2hlY2tJbmplY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgU2NyaXB0VmFsdWUmIHZh
bHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgpCi0tIAoxLjcuOS41Cgo=
</data>
<flag name="commit-queue"
          id="182938"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169813</attachid>
            <date>2012-10-21 15:13:15 -0700</date>
            <delta_ts>2012-11-08 16:51:16 -0800</delta_ts>
            <desc>Implement IndexedDB for JSC</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>51373</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogU3VuLCAyMSBPY3Qg
MjAxMiAxMzo1NjowNiAtMDcwMApTdWJqZWN0OiBJbXBsZW1lbnQgSW5kZXhlZERCIGZvciBKU0Mu
CgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICA4NCArKysrKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAg
ICAgICAgICAgIHwgICAgOCArCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJB
bnkuaWRsICAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvci5jcHAgICAgIHwgICAgOCArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmggICAgICAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsICAgICB8ICAgIDEgKwogLi4uL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmggICAgICAgfCAgICAyICstCiAuLi4vTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCAgICAgICB8ICAgIDUgKy0KIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbCAgIHwgICAgMyArLQogLi4u
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCAgICAgfCAgICAzICst
CiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbCAgICB8ICAg
IDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbCAgICAg
IHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbCAg
ICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlS
YW5nZS5pZGwgICB8ICAgIDMgKy0KIC4uLi9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmNwcCAgIHwgICAyMiArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuaWRsICAgfCAgICAzICstCiAuLi4vV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbCB8ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwICAgIHwgICAgNiArLQogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgICAgfCAgICAzICstCiAuLi4vV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwgICB8ICAgIDMgKy0KIC4uLi9N
b2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsICAgIHwgICAgMyArLQog
Li4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgICAgfCAgICAz
ICstCiAuLi4vTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsICB8
ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMu
Y3BwIHwgIDI3NyArKysrKysrKysrKysrKysrKysrLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSURCQmluZGluZ1V0aWxpdGllcy5oICAgfCAgICA4ICsKIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCAgICAgIHwgICAxMCArLQogLi4uL2JpbmRpbmdzL2pz
L0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcCAgICAgfCAgIDU3ICsrKysKIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCAgICAgIHwgICAgMyArLQogLi4u
L2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAgICAgICAgfCAgIDUyICsr
KysKIC4uLi9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcCAgICAgICAgIHwg
ICAxNyArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cCAgfCAgICA1ICsKIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRp
ZXMuY3BwIHwgICAxNSArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0
aWxpdGllcy5oICAgfCAgICA3ICstCiBTb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5p
ZGwgICAgICAgICAgICAgICB8ICAgIDMgKy0KIC4uLi9jaHJvbWl1bS90ZXN0cy9JREJCaW5kaW5n
VXRpbGl0aWVzVGVzdC5jcHAgICAgIHwgICAgNCArLQogMzUgZmlsZXMgY2hhbmdlZCwgNTc4IGlu
c2VydGlvbnMoKyksIDYwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQ3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVz
dEN1c3RvbS5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODNmMzM1ZS4uMjYyMWYyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDg3IEBACisyMDEyLTEwLTIxICBNaWNoYWVsIFBydWV0dCAgPG1pY2hhZWxANjhr
Lm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgSW5kZXhlZCBEYXRhYmFzZSBmb3IgSlNDLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxMTAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogc3RvcmFn
ZS9pbmRleGVkZGIvKgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNldFZhbHVlUmVhZHkpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oOgorICAgICAgICAoSURCQ3Vyc29yKToKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2spOgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGw6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJGYWN0b3J5LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVJ
bmRleEtleXNGb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1
ZXN0LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2
ZW50LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZl
bnQuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1
ZXN0LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoK
KyAgICAgICAgKElEQkpTQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJKU0NvbnRleHQ6
OklEQkpTQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJKU0NvbnRleHQ6Omdsb2JhbE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJKU0NvbnRleHQ6OmV4ZWNTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmdldCk6CisgICAgICAgIChXZWJDb3Jl
OjpjYW5TZXQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXROdGhWYWx1ZU9uS2V5
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRL
ZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZU50aFZhbHVlT25LZXlQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OmluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpj
YW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzZXJp
YWxpemVJREJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJREJWYWx1ZSk6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNJREJDdXJzb3JXaXRo
VmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpK
U0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURC
S2V5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogYmluZGluZ3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJpbmcpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCk6CisgICAgICAg
IChXZWJDb3JlOjpzZXJpYWxpemVJREJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IGRvbS9ET01TdHJpbmdMaXN0LmlkbDoKKwogMjAxMi0xMC0wOCAgUm9iZXJ0IEhvZ2FuICA8cm9i
ZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgSW4gc29tZSBmbG9hdCBzaXR1YXRpb25zLCB0aGUg
b3JpZ2luYWwgbGF5b3V0IGlzIHdyb25nIGFuZCBvbmx5IGNvcnJlY3RzIGl0c2VsZiBvbiByZXBh
aW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjYTkzYzM1Li5iYmNhNjVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ2NywxMiArNDY3LDE2IEBAIHdlYmNv
cmVfYnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQktleVJh
bmdlLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJPYmplY3RTdG9yZS5jcHAgXAog
CURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJPYmplY3RTdG9yZS5oIFwKKwlEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTSURCT3BlbkRCUmVxdWVzdC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNJREJPcGVuREJSZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJ
REJSZXF1ZXN0LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlJlcXVlc3QuaCBc
CiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAJRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlRyYW5zYWN0aW9uLmggXAogCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0pTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SlNJREJVcGdyYWRlTmVlZGVkRXZlbnQuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pT
SURCVXBncmFkZU5lZWRlZEV2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW1hZ2VE
YXRhLmNwcCBcCkBAIC0xMjI2LDYgKzEyMzAsNyBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkk
KFdlYkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBcCiAJJChXZWJD
b3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsIFwKIAkkKFdl
YkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgXAorCSQo
V2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbCBcCiAJ
JChXZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwg
XAogCSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRh
YmFzZS5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5p
ZGwgXApAQCAtMjI0OSw2ICsyMjU0LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaCBcCiAJU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvR0NDb250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJD
dXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmll
d0hlbHBlci5oIFwKQEAgLTIzNDcsNyArMjM1Myw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCBcCisJU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJDdXJzb3JXaXRoVmFsdWVDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0ltYWdlQ29uc3RydWN0b3IuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQW55LmlkbAppbmRleCA1OTYxOGFkLi4wMTQxYjAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwKQEAgLTI1LDcgKzI1LDgg
QEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgQ3VzdG9tVG9K
U09iamVjdAorICAgIEN1c3RvbVRvSlNPYmplY3QsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBp
bnRlcmZhY2UgSURCQW55IHsKICAgICAvLyBUaGlzIHNwYWNlIGlzIGludGVudGlvbmFsbHkgbGVm
dCBibGFuay4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmNwcAppbmRleCA5OTBlM2E0Li4wYWFlNDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFNjcmlwdAogICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGggPSBvYmplY3RT
dG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOwogICAgIGNvbnN0IGJvb2wgdXNlc0luTGluZUtleXMg
PSAha2V5UGF0aC5pc051bGwoKTsKICAgICBpZiAodXNlc0luTGluZUtleXMpIHsKLSAgICAgICAg
UmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRo
S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb250ZXh0LCB2YWx1
ZSwga2V5UGF0aCk7CiAgICAgICAgIGlmICgha2V5UGF0aEtleSB8fCAha2V5UGF0aEtleS0+aXNF
cXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5LmdldCgpKSkgewogICAgICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTI1
OSw3ICsyNTksNyBAQCB2b2lkIElEQkN1cnNvcjo6Y2xvc2UoKQogICAgIH0KIH0KIAotdm9pZCBJ
REJDdXJzb3I6OnNldFZhbHVlUmVhZHkoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSkKK3ZvaWQgSURCQ3Vyc29y
OjpzZXRWYWx1ZVJlYWR5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBTY3JpcHRWYWx1
ZSYgdmFsdWUpCiB7CiAgICAgbV9jdXJyZW50S2V5ID0ga2V5OwogICAgIG1fY3VycmVudFByaW1h
cnlLZXkgPSBwcmltYXJ5S2V5OwpAQCAtMjY5LDEwICsyNjksMTAgQEAgdm9pZCBJREJDdXJzb3I6
OnNldFZhbHVlUmVhZHkoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+
IHByaW1hcnkKICAgICAgICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtZXRhZGF0YSA9
IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpOwogICAgICAgICBpZiAobWV0YWRhdGEuYXV0b0luY3Jl
bWVudCAmJiAhbWV0YWRhdGEua2V5UGF0aC5pc051bGwoKSkgewogI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNj
cmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7CisgICAgICAgICAg
ICBSZWZQdHI8SURCS2V5PiBleHBlY3RlZEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1
ZUFuZEtleVBhdGgoY29udGV4dCwgdmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOwogICAgICAgICAg
ICAgQVNTRVJUKCFleHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQ
cmltYXJ5S2V5LmdldCgpKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGJvb2wgaW5qZWN0ZWQgPSBp
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUobV9jdXJyZW50UHJpbWFyeUtleSwgdmFsdWUsIG1l
dGFkYXRhLmtleVBhdGgpOworICAgICAgICAgICAgYm9vbCBpbmplY3RlZCA9IGluamVjdElEQktl
eUludG9TY3JpcHRWYWx1ZShjb250ZXh0LCBtX2N1cnJlbnRQcmltYXJ5S2V5LCB2YWx1ZSwgbWV0
YWRhdGEua2V5UGF0aCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gd2F5IHRv
IHJlcG9ydCBlcnJvcnMgaGVyZS4gTW92ZSB0aGlzIGludG8gb25TdWNjZXNzV2l0aENvbnRpbnVh
dGlvbiBzbyB0aGF0IHdlIGNhbiBhYm9ydCB0aGUgdHJhbnNhY3Rpb24gdGhlcmUuIFNlZTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyMjc4CiAgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGluamVjdGVkLCBpbmplY3RlZCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKaW5kZXggNTU4OWMyMi4uNzA0ZTUw
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKQEAg
LTgyLDcgKzgyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBwb3N0U3VjY2Vzc0hhbmRsZXJDYWxs
YmFjaygpOwogICAgIHZvaWQgY2xvc2UoKTsKLSAgICB2b2lkIHNldFZhbHVlUmVhZHkoUGFzc1Jl
ZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgU2NyaXB0VmFsdWUm
KTsKKyAgICB2b2lkIHNldFZhbHVlUmVhZHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFNjcmlwdFZhbHVl
Jik7CiAKICAgICAvLyBUaGUgc3BlYyByZXF1aXJlcyB0aGF0IHRoZSBzY3JpcHQgb2JqZWN0IHRo
YXQgd3JhcHMgdGhlIHZhbHVlCiAgICAgLy8gYmUgdW5jaGFuZ2VkIHVudGlsIHRoZSB2YWx1ZSBj
aGFuZ2VzIGFzIGEgcmVzdWx0IG9mIHRoZSBjdXJzb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCmluZGV4IGI1MTRmZTkuLmQ3ZjVhZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbApAQCAtMjUs
NiArMjUsNyBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBK
U05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJDdXJzb3IgewogICAgIC8vIEZJWE1FOiBF
dmVudHVhbGx5IHJlbW92ZSBsZWdhY3kgZW51bSBjb25zdGFudHMsIHNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUzMTUKICAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBORVhUID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvckJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCmluZGV4IDFmNzRjMzMuLmI4Yjc3ZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaApAQCAtNjMsNyArNjMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IHZpcnR1YWwgdm9pZCBwcmVmZXRjaENvbnRpbnVlKGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHJl
ZmV0Y2hSZXNldChpbnQgdXNlZFByZWZldGNoZXMsIGludCB1bnVzZWRQcmVmZXRjaGVzKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNr
KCkgeyB9CiAKICAgICBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgY29uc3QgeyByZXR1cm4gbV9j
dXJzb3ItPmtleSgpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSBjb25z
dCB7IHJldHVybiBtX2N1cnNvci0+cHJpbWFyeUtleSgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbAppbmRleCA5
OGNjNjViLi4wYzVhNzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwKQEAgLTI0LDcgKzI0LDggQEAKICAqLwog
CiBbCi0gICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIENvbmRpdGlvbmFsPUlO
REVYRURfREFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURCQ3Vy
c29yV2l0aFZhbHVlIDogSURCQ3Vyc29yIHsKLSAgICBbVjhDdXN0b21HZXR0ZXJdIHJlYWRvbmx5
IGF0dHJpYnV0ZSBJREJBbnkgdmFsdWU7CisgICAgW1Y4Q3VzdG9tR2V0dGVyLCBKU0N1c3RvbUdl
dHRlciwgQ2FjaGVkQXR0cmlidXRlXSByZWFkb25seSBhdHRyaWJ1dGUgSURCQW55IHZhbHVlOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlk
bAppbmRleCA5MWVmMWQ4Li5hZjJlZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCkBAIC0yNyw3ICsyNyw4IEBACiBbCiAgICAgQ29u
ZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgRXZl
bnRUYXJnZXQKKyAgICBFdmVudFRhcmdldCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVy
ZmFjZSBJREJEYXRhYmFzZSB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1l
OwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJBbnkgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlk
bAppbmRleCBiYjIxNWJkLi5hNzViYWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCkBAIC0yNSw3ICsy
NSw4IEBACiAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgIERvTm90
Q2hlY2tDb25zdGFudHMKKyAgICBEb05vdENoZWNrQ29uc3RhbnRzLAorICAgIEpTTm9TdGF0aWNU
YWJsZXMKIF0gZXhjZXB0aW9uIElEQkRhdGFiYXNlRXhjZXB0aW9uIHsKIAogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCAgIGNvZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsCmluZGV4IGEyNGNkMmIuLjU3OWE2ZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsCkBA
IC0yNCw3ICsyNCw4IEBACiAgKi8KIAogWwotICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJB
U0UKKyAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJs
ZXMKIF0gaW50ZXJmYWNlIElEQkZhY3RvcnkgewogICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBJbXBsZW1lbnRlZEFzPWdldERhdGFiYXNlTmFtZXNdIElEQlJlcXVlc3Qgd2Vi
a2l0R2V0RGF0YWJhc2VOYW1lcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJJbmRleC5pZGwKaW5kZXggZWZmYTljZjQuLmMwMGUzZjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5pZGwKQEAgLTI0LDcgKzI0LDggQEAK
ICAqLwogCiBbCi0gICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQorICAgIENvbmRpdGlv
bmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2Ug
SURCSW5kZXggewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgSURCT2JqZWN0U3RvcmUgb2JqZWN0U3RvcmU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbAppbmRleCAzYjk2ZmMxLi4yOWYyNzFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKQEAgLTI1
LDcgKzI1LDggQEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAg
Q3VzdG9tVG9KU09iamVjdAorICAgIEN1c3RvbVRvSlNPYmplY3QsCisgICAgSlNOb1N0YXRpY1Rh
YmxlcwogXSBpbnRlcmZhY2UgSURCS2V5IHsKICAgICAvLyBUaGlzIHNwYWNlIGlzIGludGVudGlv
bmFsbHkgbGVmdCBibGFuay4KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJLZXlSYW5nZS5pZGwKaW5kZXggODIwNjI4YS4uNDI0MDAzZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbApAQCAtMjQsNyAr
MjQsOCBAQAogICovCiAKIFsKLSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAg
Q29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGlu
dGVyZmFjZSBJREJLZXlSYW5nZSB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQktleSBsb3dl
cjsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IHVwcGVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4IGUzZWMx
NWIuLmY1NTY0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTEwMSwxMiArMTAxLDEzIEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzCiAgICAgcmV0dXJuIGdldChjb250ZXh0LCBrZXlSYW5nZS5yZWxlYXNlKCksIGVj
KTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTY3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMqIGluZGV4
S2V5cykKK3N0YXRpYyB2b2lkIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKKyAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1l
dGFkYXRhLAorICAgIGNvbnN0IFNjcmlwdFZhbHVlJiBvYmplY3RWYWx1ZSwKKyAgICBJREJPYmpl
Y3RTdG9yZTo6SW5kZXhLZXlzKiBpbmRleEtleXMpCiB7CiAgICAgQVNTRVJUKGluZGV4S2V5cyk7
Ci0gICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOworICAgIFJl
ZlB0cjxJREJLZXk+IGluZGV4S2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5
UGF0aChjb250ZXh0LCBvYmplY3RWYWx1ZSwgaW5kZXhNZXRhZGF0YS5rZXlQYXRoKTsKIAogICAg
IGlmICghaW5kZXhLZXkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSw5ICsxNTYsOCBAQCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBTY3Jp
cHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0ZTo6Y3VycmVudCgpOwotICAgIFJlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IHZhbHVlLnNlcmlhbGl6ZShzdGF0
ZSk7Ci0gICAgaWYgKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkgeworICAgIFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IHNlcmlhbGl6ZUlEQlZhbHVlKGNvbnRl
eHQsIHZhbHVlKTsKKyAgICBpZiAoIXNlcmlhbGl6ZWRWYWx1ZSkgewogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KQEAgLTE4MSw3ICsxODEsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAg
IFJlZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVB
bmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0
aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29udGV4dCwgdmFs
dWUsIGtleVBhdGgpOwogICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5UGF0aEtleS0+aXNW
YWxpZCgpKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VS
UjsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTkxLDcgKzE5MSw3IEBAIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OlB1dE1vCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBp
ZiAoaGFzS2V5R2VuZXJhdG9yICYmICFrZXlQYXRoS2V5KSB7Ci0gICAgICAgICAgICBpZiAoIWNh
bkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSh2YWx1ZSwga2V5UGF0aCkpIHsKKyAgICAgICAg
ICAgIGlmICghY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKGNvbnRleHQsIHZhbHVlLCBr
ZXlQYXRoKSkgewogICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRB
VEFfRVJSOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQpAQCAtMjA4
LDcgKzIwOCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgVmVjdG9yPEluZGV4S2V5
cz4gaW5kZXhLZXlzOwogICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1f
bWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgewogICAgICAgICBJbmRleEtleXMga2V5czsK
LSAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShpdC0+dmFsdWUsIHZhbHVlLCAma2V5
cyk7CisgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUoY29udGV4dCwgaXQtPnZhbHVl
LCB2YWx1ZSwgJmtleXMpOwogICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChpdC0+a2V5KTsKICAg
ICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9CkBAIC0zMzIsNyArMzMyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIFNjcmlwdFZhbHVlIHZhbHVlID0gdmFsdWVBbnktPnNjcmlw
dFZhbHVlKCk7CiAKICAgICAgICAgICAgIElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMgaW5kZXhL
ZXlzOwotICAgICAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShtX2luZGV4TWV0YWRh
dGEsIHZhbHVlLCAmaW5kZXhLZXlzKTsKKyAgICAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9y
VmFsdWUoY29udGV4dCwgbV9pbmRleE1ldGFkYXRhLCB2YWx1ZSwgJmluZGV4S2V5cyk7CiAKICAg
ICAgICAgICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzLCAxPiBpbmRleEtleXNM
aXN0OwogICAgICAgICAgICAgaW5kZXhLZXlzTGlzdC5hcHBlbmQoaW5kZXhLZXlzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbApp
bmRleCAxMzIwNDM0Li42YmQ0YzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCkBAIC0yNCw3ICsyNCw4IEBACiAgKi8KIAog
WwotICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBDb25kaXRpb25hbD1JTkRF
WEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElEQk9iamVj
dFN0b3JlIHsKICAgICBbVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAgICAgW0ltcGxlbWVudGVkQXM9a2V5UGF0aEFueV0g
cmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSBrZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbAppbmRleCBiYmRlOWJj
Li5mMDBlOGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPcGVuREJSZXF1ZXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPcGVuREJSZXF1ZXN0LmlkbApAQCAtMjYsNyArMjYsOCBAQAogWwogICAgIENvbmRpdGlv
bmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgIEV2ZW50VGFy
Z2V0CisgICAgRXZlbnRUYXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2Ug
SURCT3BlbkRCUmVxdWVzdCA6IElEQlJlcXVlc3QgewogICAgIGF0dHJpYnV0ZSBFdmVudExpc3Rl
bmVyIG9uYmxvY2tlZDsKICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnVwZ3JhZGVuZWVk
ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3Bw
CmluZGV4IDBiNTAyZDcuLjhiZmNkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC0zNzAsMTAgKzM3MCwxMCBAQCB2b2lkIElEQlJl
cXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwU2Vy
aWFsaXplZFNjcmlwdAogCiAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1h
cnlLZXk7CiAjaWZuZGVmIE5ERUJVRwotICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0g
Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7Cisg
ICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdmFsdWUsIGtleVBhdGgpOwog
ICAgIEFTU0VSVCghZXhwZWN0ZWRLZXkgfHwgZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtl
eS5nZXQoKSkpOwogI2VuZGlmCi0gICAgYm9vbCBpbmplY3RlZCA9IGluamVjdElEQktleUludG9T
Y3JpcHRWYWx1ZShwcmltYXJ5S2V5LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgYm9vbCBpbmplY3Rl
ZCA9IGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCks
IHByaW1hcnlLZXksIHZhbHVlLCBrZXlQYXRoKTsKICAgICBBU1NFUlRfVU5VU0VEKGluamVjdGVk
LCBpbmplY3RlZCk7CiAgICAgb25TdWNjZXNzSW50ZXJuYWwodmFsdWUpOwogfQpAQCAtNDczLDcg
KzQ3Myw3IEBAIGJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKICAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2
ZW50KSB7CiAgICAgICAgIGN1cnNvclRvTm90aWZ5ID0gZ2V0UmVzdWx0Q3Vyc29yKCk7CiAgICAg
ICAgIGlmIChjdXJzb3JUb05vdGlmeSkKLSAgICAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5zZXRW
YWx1ZVJlYWR5KG1fY3Vyc29yS2V5LnJlbGVhc2UoKSwgbV9jdXJzb3JQcmltYXJ5S2V5LnJlbGVh
c2UoKSwgbV9jdXJzb3JWYWx1ZSk7CisgICAgICAgICAgICBjdXJzb3JUb05vdGlmeS0+c2V0VmFs
dWVSZWFkeShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG1fY3Vyc29yS2V5LnJlbGVhc2UoKSwg
bV9jdXJzb3JQcmltYXJ5S2V5LnJlbGVhc2UoKSwgbV9jdXJzb3JWYWx1ZSk7CiAgICAgfQogCiAg
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVz
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbApp
bmRleCA0ZThmZjA5Li4wYjE2OWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbApAQCAtMzAsNyArMzAsOCBAQAogWwogICAgIENvbmRpdGlv
bmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgIEV2ZW50VGFy
Z2V0CisgICAgRXZlbnRUYXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2Ug
SURCUmVxdWVzdCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSByZXN1bHQKICAgICAg
ICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsCmluZGV4IDcyZmFh
OGQuLjhlYzRiMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5pZGwKQEAgLTI3LDcgKzI3LDggQEAKIFsKICAgICBDb25kaXRpb25h
bD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFdmVudFRhcmdl
dAorICAgIEV2ZW50VGFyZ2V0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElE
QlRyYW5zYWN0aW9uIHsKICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSByZW1vdmUgbGVnYWN5IGVu
dW0gY29uc3RhbnRzLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg1MzE1CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgUkVBRF9PTkxZID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVu
dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVk
RXZlbnQuaWRsCmluZGV4IDA4MTBkZDIuLjhmMjI1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbApA
QCAtMjUsNyArMjUsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwK
LSAgICBJbnRlcmZhY2VOYW1lPUlEQlZlcnNpb25DaGFuZ2VFdmVudAorICAgIEludGVyZmFjZU5h
bWU9SURCVmVyc2lvbkNoYW5nZUV2ZW50LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJm
YWNlIElEQlVwZ3JhZGVOZWVkZWRFdmVudCA6IEV2ZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgdW5zaWduZWQgbG9uZyBsb25nIG9sZFZlcnNpb247CiAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdWZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKaW5kZXgg
ZjkyZWY1My4uOGQyMTMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsCkBAIC0yNCw3ICsyNCw4IEBA
CiAgKi8KIAogWwotICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNl
IElEQlZlcnNpb25DaGFuZ2VFdmVudCA6IEV2ZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHZlcnNpb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaWRsCmluZGV4IDQ5N2I1
N2IuLjliNmUxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwKQEAgLTI2LDcgKzI2LDggQEAK
IFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVj
dCwKLSAgICBFdmVudFRhcmdldAorICAgIEV2ZW50VGFyZ2V0LAorICAgIEpTTm9TdGF0aWNUYWJs
ZXMKIF0gaW50ZXJmYWNlIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IDogSURCUmVxdWVzdCB7CiAg
ICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25ibG9ja2VkOwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggYjU1ZTc2
Yi4uZjdiNDUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjgsMjIgKzI5LDI4OCBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKIAorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2lu
Y2x1ZGUgIkpTSURCS2V5LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgor
CisjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KKworI2lmIEVOQUJMRShXT1JLRVJT
KQorI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJ
REJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K2NsYXNzIElEQkpTQ29udGV4dCB7CitwdWJsaWM6CisgICAgSURCSlNDb250ZXh0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgICAgIDogbV9sb2NrKGNvbnRleHQtPmdsb2Jh
bERhdGEoKSkKKyAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtX3Njcmlw
dFN0YXRlKDApCisgICAgeworICAgICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsK
KyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4o
bV9jb250ZXh0KTsKKyAgICAgICAgICAgIG1fc2NyaXB0U3RhdGUgPSBtYWluV29ybGRTY3JpcHRT
dGF0ZShkb2N1bWVudC0+ZnJhbWUoKSk7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoV09SS0VSUykK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9jb250ZXh0LT5pc1dvcmtlckNv
bnRleHQoKSk7CisgICAgICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1fY29udGV4dCk7CisgICAgICAgICAgICBtX3Njcmlw
dFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tV29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KTsKKyAg
ICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QoKSB7IHJldHVybiBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihtX3NjcmlwdFN0YXRlLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpOyB9CisgICAgRXhlY1N0YXRlKiBleGVjU3RhdGUoKSB7IHJl
dHVybiBtX3NjcmlwdFN0YXRlOyB9CisKK3ByaXZhdGU6CisgICAgSlNMb2NrSG9sZGVyIG1fbG9j
azsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgU2NyaXB0U3Rh
dGUqIG1fc2NyaXB0U3RhdGU7Cit9OworCitzdGF0aWMgYm9vbCBnZXQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIG9iamVjdCwgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSYg
cmVzdWx0KQogewotICAgIGlmICh2YWx1ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlSW52YWxpZCgpOwotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgaWYgKG9i
amVjdC5pc1N0cmluZygpICYmIGtleVBhdGhFbGVtZW50ID09ICJsZW5ndGgiKSB7CisgICAgICAg
IHJlc3VsdCA9IGpzTnVtYmVyKG9iamVjdC50b1N0cmluZyhleGVjKS0+bGVuZ3RoKCkpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFvYmplY3QuaXNPYmplY3QoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIElkZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+Z2xv
YmFsRGF0YSgpLCBrZXlQYXRoRWxlbWVudC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIWFzT2Jq
ZWN0KG9iamVjdCktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50aWZpZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gYXNPYmplY3Qob2JqZWN0KS0+Z2V0KGV4ZWMsIGlkZW50
aWZpZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBjYW5TZXQoSlNWYWx1
ZSBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQpCit7CisgICAgcmV0dXJuIG9i
amVjdC5pc09iamVjdCgpOworfQorCitzdGF0aWMgYm9vbCBzZXQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlJiBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQsIEpTVmFsdWUganNW
YWx1ZSkKK3sKKyAgICBpZiAoIWNhblNldChvYmplY3QsIGtleVBhdGhFbGVtZW50KSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIElkZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+Z2xvYmFs
RGF0YSgpLCBrZXlQYXRoRWxlbWVudC51dGY4KCkuZGF0YSgpKTsKKyAgICBhc09iamVjdChvYmpl
Y3QpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLCBpZGVudGlmaWVyLCBqc1ZhbHVlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtRGVwdGgg
PSAyMDAwOworCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIFZlY3RvcjxKU0FycmF5Kj4mIHN0YWNr
KQoreworICAgIGlmICh2YWx1ZS5pc051bWJlcigpICYmICFpc25hbih2YWx1ZS50b051bWJlcihl
eGVjKSkpCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcih2YWx1ZS50b051bWJl
cihleGVjKSk7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZVN0cmluZyh2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZXMuCisgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZEYXRl
SW5zdGFuY2U6OnNfaW5mbykgJiYgIWlzbmFuKHZhbHVlVG9EYXRlKGV4ZWMsIHZhbHVlKSkpCisg
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUodmFsdWVUb0RhdGUoZXhlYywgdmFsdWUp
KTsKKyAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gYXNPYmplY3QodmFsdWUpOworICAgICAgICBpZiAoaXNKU0FycmF5KG9iamVjdCkgfHwgb2Jq
ZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkgeworICAgICAgICAgICAgSlNBcnJheSog
YXJyYXkgPSBhc0FycmF5KG9iamVjdCk7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBh
cnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAgICAgIGlmIChzdGFjay5jb250YWlucyhhcnJheSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpZiAoc3RhY2suc2l6ZSgp
ID49IG1heGltdW1EZXB0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
IHN0YWNrLmFwcGVuZChhcnJheSk7CisKKyAgICAgICAgICAgIElEQktleTo6S2V5QXJyYXkgc3Vi
a2V5czsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
eworICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGFycmF5LT5nZXRJbmRleChleGVjLCBp
KTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBzdWJrZXkgPSBjcmVhdGVJREJLZXlG
cm9tVmFsdWUoZXhlYywgaXRlbSwgc3RhY2spOworICAgICAgICAgICAgICAgIGlmICghc3Via2V5
KQorICAgICAgICAgICAgICAgICAgICBzdWJrZXlzLmFwcGVuZChJREJLZXk6OmNyZWF0ZUludmFs
aWQoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdWJrZXlz
LmFwcGVuZChzdWJrZXkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShzdWJrZXlz
KTsKKyAgICAgICAgfQorICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAorUGFzc1JlZlB0cjxJREJL
ZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgVmVjdG9yPEpTQXJyYXkqPiBzdGFjazsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkg
PSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgdmFsdWUsIHN0YWNrKTsKKyAgICBpZiAoa2V5
KQorICAgICAgICByZXR1cm4ga2V5OworICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQo
KTsKK30KKworc3RhdGljIEpTVmFsdWUgZ2V0TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0
aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShy
b290VmFsdWUpOworICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgeworICAgICAgICBpZiAo
Y3VycmVudFZhbHVlLmlzU3RyaW5nKCkgJiYga2V5UGF0aEVsZW1lbnRzW2ldID09ICJsZW5ndGgi
KQorICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGN1cnJlbnRWYWx1ZS50b1N0cmluZyhleGVj
KS0+bGVuZ3RoKCkpOworICAgICAgICBpZiAoIWN1cnJlbnRWYWx1ZS5pc09iamVjdCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIEpTVmFsdWUgcGFyZW50VmFs
dWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUsIGtl
eVBhdGhFbGVtZW50c1tpXSwgY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gY3VycmVudFZhbHVlOworfQorCitzdGF0aWMg
UGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoRWxlbWVudHM7CisgICAgSURC
S2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7CisgICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgsIGtl
eVBhdGhFbGVtZW50cywgZXJyb3IpOworICAgIEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFy
c2VFcnJvck5vbmUpOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUuanNWYWx1ZSgpOwor
ICAgIGpzVmFsdWUgPSBnZXROdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBqc1ZhbHVlLCBrZXlQYXRo
RWxlbWVudHMsCisgICAgICAgIGtleVBhdGhFbGVtZW50cy5zaXplKCkpOworICAgIGlmIChqc1Zh
bHVlLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGVJ
REJLZXlGcm9tVmFsdWUoZXhlYywganNWYWx1ZSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIGVuc3Vy
ZU50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSByb290VmFsdWUsCisg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgdW5zaWduZWQgaW5kZXgp
Cit7CisgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKworICAgIEFTU0VSVChp
bmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW5kZXg7IGkrKykgeworICAgICAgICBKU1ZhbHVlIHBhcmVudFZhbHVlKGN1cnJlbnRW
YWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxl
bWVudHNbaV07CisgICAgICAgIGlmICghZ2V0KGV4ZWMsIHBhcmVudFZhbHVlLCBrZXlQYXRoRWxl
bWVudCwgY3VycmVudFZhbHVlKSkgeworICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNv
bnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgICAgICAgICAgaWYgKCFzZXQoZXhlYywgcGFy
ZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBKU1ZhbHVlKG9iamVjdCkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAgY3VycmVudFZhbHVlID0gSlNW
YWx1ZShvYmplY3QpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRWYWx1
ZTsKK30KKworc3RhdGljIGJvb2wgY2FuSW5qZWN0TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhF
bGVtZW50cywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKCFyb290VmFsdWUuaXNPYmplY3Qo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUocm9v
dFZhbHVlKTsKKworICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZXg7ICsraSkgeworICAgICAgICBKU1Zh
bHVlIHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5
UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNbaV07CisgICAgICAgIGlmICghZ2V0KGV4ZWMs
IHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiBjYW5TZXQocGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50KTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFNjcmlw
dFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJB
Q0UoImluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOworCisgICAgQVNTRVJUKGtleVBhdGgu
dHlwZSgpID09IElEQktleVBhdGg6OlN0cmluZ1R5cGUpOworICAgIFZlY3RvcjxTdHJpbmc+IGtl
eVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQYXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQ
YXJzZUtleVBhdGgoa2V5UGF0aC5zdHJpbmcoKSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7Cisg
ICAgQVNTRVJUKGVycm9yID09IElEQktleVBhdGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICBpZiAo
a2V5UGF0aEVsZW1lbnRzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
SlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUuanNWYWx1ZSgpOworICAgIGlmICghanNWYWx1ZS5pc09i
amVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJREJKU0NvbnRleHQgaWRiQ29u
dGV4dChjb250ZXh0KTsKKyAgICBFeGVjU3RhdGUqIGV4ZWMgPSBpZGJDb250ZXh0LmV4ZWNTdGF0
ZSgpOworCisgICAgSlNWYWx1ZSBwYXJlbnQgPSBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aChleGVj
LCBhc09iamVjdChqc1ZhbHVlKSwKKyAgICAgICAga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxl
bWVudHMuc2l6ZSgpIC0gMSk7CisgICAgaWYgKHBhcmVudC5pc1VuZGVmaW5lZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXNldChleGVjLCBwYXJlbnQsIGtleVBhdGhFbGVt
ZW50cy5sYXN0KCksCisgICAgICAgIHRvSlMoZXhlYywgaWRiQ29udGV4dC5nbG9iYWxPYmplY3Qo
KSwga2V5LmdldCgpKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5k
S2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTY3JpcHRWYWx1
ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RSQUNFKCJj
cmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoIik7CisgICAgQVNTRVJUKCFrZXlQ
YXRoLmlzTnVsbCgpKTsKKworICAgIElEQkpTQ29udGV4dCBpZGJDb250ZXh0KGNvbnRleHQpOwor
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGlkYkNvbnRleHQuZXhlY1N0YXRlKCk7CisKKyAgICBpZiAo
a2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6QXJyYXlUeXBlKSB7CisgICAgICAgIElEQktl
eTo6S2V5QXJyYXkgcmVzdWx0OworICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkg
PSBrZXlQYXRoLmFycmF5KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJh
eS5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5ID0gY3JlYXRl
SURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChleGVjLCB2YWx1ZSwgYXJyYXlbaV0pOwor
ICAgICAgICAgICAgaWYgKCFrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKGtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElEQktl
eTo6Y3JlYXRlQXJyYXkocmVzdWx0KTsKKyAgICB9CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBl
KCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZy
b21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgdmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOwor
fQorCitib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgpCit7CisgICAgSURCX1RSQUNFKCJjYW5JbmplY3RJREJLZXlJbnRv
U2NyaXB0VmFsdWUiKTsKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6
U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElE
QktleVBhdGhQYXJzZUVycm9yIGVycm9yOworICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLnN0
cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVycm9yKTsKKyAgICBBU1NFUlQoZXJyb3IgPT0gSURC
S2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKworICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSURCSlNDb250ZXh0IGlkYkNvbnRleHQo
Y29udGV4dCk7CisgICAgcmV0dXJuIGNhbkluamVjdE50aFZhbHVlT25LZXlQYXRoKGlkYkNvbnRl
eHQuZXhlY1N0YXRlKCksCisgICAgICAgIHNjcmlwdFZhbHVlLmpzVmFsdWUoKSwga2V5UGF0aEVs
ZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7Cit9CisKK1NjcmlwdFZhbHVlIGRl
c2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlKQoreworICAgIElEQkpTQ29udGV4
dCBpZGJDb250ZXh0KGNvbnRleHQpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHNlcmlhbGl6ZWRWYWx1ZSA9IHBycFZhbHVlOworICAgIGlmIChzZXJpYWxpemVkVmFsdWUpCisg
ICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoaWRiQ29udGV4dC5leGVjU3Rh
dGUoKSwKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRWYWx1ZS5nZXQoKSwgTm9uVGhyb3dpbmcpOwor
ICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqY29udGV4dC0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSk7
Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVJREJWYWx1
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFs
dWUpCit7CisgICAgSURCSlNDb250ZXh0IGlkYkNvbnRleHQoY29udGV4dCk7CisgICAgUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUoaWRiQ29udGV4dC5leGVjU3RhdGUoKSwgc2NyaXB0VmFsdWUuanNWYWx1
ZSgpKTsKKyAgICBpZiAoaWRiQ29udGV4dC5leGVjU3RhdGUoKS0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWUucmVsZWFzZSgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRp
bmdVdGlsaXRpZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGls
aXRpZXMuaAppbmRleCA4ZTBjOWM1Li41ZmEzNzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCkBAIC0yOSw3ICsyOSw5IEBACiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5j
bHVkZSAiSURCS2V5UGF0aC5oIgogI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiIAorCiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNiArNDAsMTIg
QEAgY2xhc3MgSURCS2V5OwogCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZh
bHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKIAorYm9vbCBpbmplY3RJREJLZXlJ
bnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5
PiwgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitQYXNzUmVmUHRyPElEQktleT4g
Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Citib29sIGNhbklu
amVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6
ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4pOworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1ZSYpOworCiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcAppbmRleCA3NzExM2M3Li5lMGZmZmViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCkBAIC02NCw4
ICs2NCw2IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIElEQkFueSogaWRiQW55KQogICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICBjYXNlIElEQkFueTo6TnVsbFR5cGU6CiAgICAgICAgIHJldHVybiBqc051bGwo
KTsKLSAgICBjYXNlIElEQkFueTo6U3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIGlkYkFueS0+c3RyaW5nKCkpOwogICAgIGNhc2UgSURCQW55OjpET01T
dHJpbmdMaXN0VHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
ZGJBbnktPmRvbVN0cmluZ0xpc3QoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkN1cnNvclR5cGU6
CkBAIC04NCw4ICs4MiwxMiBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBJREJBbnkqIGlkYkFueSkKICAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYk9iamVjdFN0b3JlKCkpOwogICAg
IGNhc2UgSURCQW55OjpJREJUcmFuc2FjdGlvblR5cGU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaWRiQW55LT5pZGJUcmFuc2FjdGlvbigpKTsKLSAgICBjYXNlIElE
QkFueTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlVHlwZToKLSAgICAgICAgcmV0dXJuIGlkYkFueS0+
c2VyaWFsaXplZFNjcmlwdFZhbHVlKCktPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCk7
CisgICAgY2FzZSBJREJBbnk6OlNjcmlwdFZhbHVlVHlwZToKKyAgICAgICAgcmV0dXJuIGlkYkFu
eS0+c2NyaXB0VmFsdWUoKS5qc1ZhbHVlKCk7CisgICAgY2FzZSBJREJBbnk6OlN0cmluZ1R5cGU6
CisgICAgICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpZGJBbnktPnN0cmluZygp
KTsKKyAgICBjYXNlIElEQkFueTo6SW50ZWdlclR5cGU6CisgICAgICAgIHJldHVybiBqc051bWJl
cihpZGJBbnktPmludGVnZXIoKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldpdGhW
YWx1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkN1cnNvcldp
dGhWYWx1ZUN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Rm
OTIyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURC
Q3Vyc29yV2l0aFZhbHVlQ3VzdG9tLmNwcApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorCisjaW5jbHVkZSAiSlNJREJDdXJzb3JXaXRoVmFsdWUuaCIKKworI2luY2x1
ZGUgIklEQkN1cnNvcldpdGhWYWx1ZS5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIkpTSURCQW55LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSlNWYWx1ZSBKU0lEQkN1cnNvcldpdGhWYWx1ZTo6dmFsdWUoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAoreworICAgIElEQkN1cnNvciogY3Vyc29yID0gaW1wbCgpOworICAgIGlm
ICghY3Vyc29yLT52YWx1ZUlzRGlydHkoKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjYWNoZWRW
YWx1ZSA9IG1fdmFsdWUuZ2V0KCkpCisgICAgICAgICAgICByZXR1cm4gY2FjaGVkVmFsdWU7Cisg
ICAgfQorCisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBj
dXJzb3ItPnZhbHVlKCkuZ2V0KCkpOworICAgIGNvbnN0X2Nhc3Q8SlNJREJDdXJzb3JXaXRoVmFs
dWUqPih0aGlzKS0+bV92YWx1ZS5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzLCByZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJL
ZXlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlDdXN0b20u
Y3BwCmluZGV4IDg1YWE1ZGIuLmU0ODViZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQktleUN1c3RvbS5jcHAKQEAgLTQ4LDEwICs0OCw5IEBAIEpTVmFsdWUgdG9KUyhF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIElEQktleSog
a2V5KQogICAgICAgICAgICAgY29uc3QgSURCS2V5OjpLZXlBcnJheSYgaW5BcnJheSA9IGtleS0+
YXJyYXkoKTsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gaW5BcnJheS5zaXplKCk7CiAgICAg
ICAgICAgICBKU0FycmF5KiBvdXRBcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgZ2xv
YmFsT2JqZWN0LCBzaXplKTsKLSAgICAgICAgICAgIEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSA9
IGV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CiAgICAgICAgICAgICAgICAgSURCS2V5KiBhcnJheUtleSA9IGluQXJyYXku
YXQoaSkuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgb3V0QXJyYXktPmluaXRpYWxpemVJbmRleChn
bG9iYWxEYXRhLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJyYXlLZXkpKTsKKyAgICAg
ICAgICAgICAgICBvdXRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGFycmF5S2V5KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZShvdXRBcnJheSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YzU3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwCkBAIC0w
LDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1p
Y2hhZWxANjhrLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNpbmNsdWRlICJKU0lEQk9w
ZW5EQlJlcXVlc3QuaCIKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBKU0lEQk9wZW5EQlJl
cXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNp
dG9yKQoreworICAgIEpTSURCT3BlbkRCUmVxdWVzdCoganNSZXF1ZXN0ID0ganNDYXN0PEpTSURC
T3BlbkRCUmVxdWVzdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoanNS
ZXF1ZXN0LCAmc19pbmZvKTsKKyAgICBDT01QSUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGlu
Z0ZsYWcpOworICAgIEFTU0VSVChqc1JlcXVlc3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihqc1JlcXVl
c3QsIHZpc2l0b3IpOworICAgIHN0YXRpY19jYXN0PElEQk9wZW5EQlJlcXVlc3QqPihqc1JlcXVl
c3QtPmltcGwoKSktPnZpc2l0SlNFdmVudExpc3RlbmVycyh2aXNpdG9yKTsKK30KKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20u
Y3BwCmluZGV4IGY1NTlmNDEuLmNjMzhlNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3Bw
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiwgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIE1pY2hhZWwgUHJ1ZXR0
IDxtaWNoYWVsQDY4ay5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKQEAgLTI0LDE5ICsyNSwyNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKIAorI2luY2x1ZGUgIkpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKKwogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdm9pZCBKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Ojp2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKQordm9pZCBKU0lEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgSlNJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdCoganNSZXF1ZXN0ID0ganNDYXN0PEpTSURCVmVyc2lvbkNoYW5nZVJl
cXVlc3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGpzUmVxdWVzdCwg
JnNfaW5mbyk7CisgICAgQ09NUElMRV9BU1NFUlQoU3RydWN0dXJlRmxhZ3MgJiBPdmVycmlkZXNW
aXNpdENoaWxkcmVuLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuV2l0aG91dFNldHRpbmdGbGFnKTsK
KyAgICBBU1NFUlQoanNSZXF1ZXN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNW
aXNpdENoaWxkcmVuKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oanNSZXF1ZXN0LCB2aXNp
dG9yKTsKKyAgICBzdGF0aWNfY2FzdDxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCo+KGpzUmVxdWVz
dC0+aW1wbCgpKS0+dmlzaXRKU0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOwogfQogCiB9CiAKLSNl
bmRpZgorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNTIw
ODE0ZS4uMjM1NzhmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0xODQyLDYgKzE4NDIsMTEgQEAgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKEpT
Qzo6RXhlY1N0YXRlKgogCiBTdHJpbmcgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp0b1dpcmVTdHJp
bmcoKSBjb25zdAogeworICAgIGlmIChtX2RhdGEuc2l6ZSgpICYgMSkgeworICAgICAgICBWZWN0
b3I8dW5zaWduZWQgY2hhcj4gZGF0YShtX2RhdGEpOworICAgICAgICBkYXRhLmFwcGVuZCgwKTsK
KyAgICAgICAgcmV0dXJuIENsb25lRGVzZXJpYWxpemVyOjp0b1dpcmVTdHJpbmcoZGF0YSk7Cisg
ICAgfQogICAgIHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6dG9XaXJlU3RyaW5nKG1fZGF0YSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxp
dGllcy5jcHAKaW5kZXggNmE4MzExZi4uOGYwMjE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTE5MCw3ICsxOTAsNyBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdQogICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tVmFs
dWUodjhLZXkpOwogfQogCi1QYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlw
dFZhbHVlQW5kS2V5UGF0aChjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBh
dGgmIGtleVBhdGgpCitQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZh
bHVlQW5kS2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUm
IHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAgIElEQl9UUkFDRSgiY3Jl
YXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCIpOwogICAgIEFTU0VSVCgha2V5UGF0
aC5pc051bGwoKSk7CkBAIC0yMjMsNyArMjIzLDE2IEBAIFNjcmlwdFZhbHVlIGRlc2VyaWFsaXpl
SURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCwgUGFzc1JlZlB0
CiAgICAgcmV0dXJuIFNjcmlwdFZhbHVlKHY4OjpOdWxsKCkpOwogfQogCi1ib29sIGluamVjdElE
QktleUludG9TY3JpcHRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4ga2V5LCBTY3JpcHRWYWx1ZSYg
dmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCitQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFNj
cmlwdFZhbHVlJiB2YWx1ZSkKK3sKKyAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBTY3JpcHRTdGF0
ZTo6Y3VycmVudCgpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6
ZWRWYWx1ZSA9IHZhbHVlLnNlcmlhbGl6ZShzdGF0ZSk7CisgICAgaWYgKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHNlcmlhbGl6ZWRWYWx1ZS5y
ZWxlYXNlKCk7Cit9CisKK2Jvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBTY3JpcHRWYWx1ZSYgdmFs
dWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CiAgICAgSURCX1RSQUNFKCJpbmplY3RJ
REJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKIApAQCAtMjUwLDcgKzI1OSw3IEBAIGJvb2wgaW5qZWN0
SURCS2V5SW50b1NjcmlwdFZhbHVlKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFNjcmlwdFZhbHVl
JiB2YWx1ZSwgY29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCkKK2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUsIGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGgpCiB7CiAgICAgSURCX1RSQUNFKCJjYW5JbmplY3RJREJL
ZXlJbnRvU2NyaXB0VmFsdWUiKTsKICAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5
UGF0aDo6U3RyaW5nVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9JREJCaW5kaW5nVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJC
aW5kaW5nVXRpbGl0aWVzLmgKaW5kZXggYTQ4MmRjOS4uNTAwOWE2ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtNDAsMTAgKzQw
LDExIEBAIGNsYXNzIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTsKIAogUGFzc1JlZlB0cjxJREJLZXk+
IGNyZWF0ZUlEQktleUZyb21WYWx1ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCi1ib29sIGlu
amVjdElEQktleUludG9TY3JpcHRWYWx1ZShQYXNzUmVmUHRyPElEQktleT4sIFNjcmlwdFZhbHVl
JiwgY29uc3QgSURCS2V5UGF0aCYpOwotUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZy
b21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQ
YXRoJik7Ci1ib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShjb25zdCBTY3JpcHRW
YWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKK2Jvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZh
bHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4sIFNjcmlwdFZh
bHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOworYm9vbCBjYW5JbmplY3RJREJLZXlJ
bnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNjcmlwdFZhbHVl
JiwgY29uc3QgSURCS2V5UGF0aCYpOwogU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVJREJWYWx1ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
KTsKK1Bhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVJREJWYWx1ZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgU2NyaXB0VmFsdWUmKTsKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRE9NU3RyaW5nTGlzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRE9NU3RyaW5nTGlzdC5pZGwKaW5kZXggZDBlYjM2Mi4uYWE2NDNlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9ET01TdHJpbmdMaXN0LmlkbApAQCAtMjUsNyArMjUsOCBAQAogCiBbCiAgICAgSW5kZXhl
ZEdldHRlciwKLSAgICBKU0N1c3RvbVRvTmF0aXZlT2JqZWN0CisgICAgSlNDdXN0b21Ub05hdGl2
ZU9iamVjdCwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBET01TdHJpbmdMaXN0
IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAgICAgW1Ry
ZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3RyaW5nIGl0ZW0oaW4gW09wdGlvbmFs
PURlZmF1bHRJc1VuZGVmaW5lZF0gdW5zaWduZWQgbG9uZyBpbmRleCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3Bw
CmluZGV4IDQ2NzEwZTcuLjk1ZjVkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwCkBAIC00NCw3ICs0NCw3
IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBjaGVja0tleUZyb21WYWx1ZUFuZEtleVBhdGhJbnRlcm5h
bChjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsCiAgICAgSURCS2V5UGF0aCBpZGJLZXlQYXRoKGtl
eVBhdGgpOwogICAgIEVYUEVDVF9UUlVFKGlkYktleVBhdGguaXNWYWxpZCgpKTsKICAgICAKLSAg
ICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwgaWRi
S2V5UGF0aCk7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBh
dGgoMCwgdmFsdWUsIGlkYktleVBhdGgpOwogfQogCiB2b2lkIGNoZWNrS2V5UGF0aE51bGxWYWx1
ZShjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKQEAgLTU3
LDcgKzU3LDcgQEAgYm9vbCBpbmplY3RLZXkoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0
VmFsdWUmIHZhbHVlLCBjb25zdCBTdHJpbmcmIGtleVBhdGgKIHsKICAgICBJREJLZXlQYXRoIGlk
YktleVBhdGgoa2V5UGF0aCk7CiAgICAgRVhQRUNUX1RSVUUoaWRiS2V5UGF0aC5pc1ZhbGlkKCkp
OwotICAgIHJldHVybiBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoa2V5LCB2YWx1ZSwgaWRi
S2V5UGF0aCk7CisgICAgcmV0dXJuIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSgwLCBrZXks
IHZhbHVlLCBpZGJLZXlQYXRoKTsKIH0KIAogdm9pZCBjaGVja0luamVjdGlvbihQYXNzUmVmUHRy
PElEQktleT4gcHJwS2V5LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCkKLS0gCjEuNy45LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173148</attachid>
            <date>2012-11-08 16:51:16 -0800</date>
            <delta_ts>2012-12-05 06:59:40 -0800</delta_ts>
            <desc>Implement IndexedDB for JSC</desc>
            <filename>idb-jsc.patch</filename>
            <type>text/plain</type>
            <size>51054</size>
            <attacher name="Michael Pruett">michael</attacher>
            
              <data encoding="base64">RnJvbTogTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KRGF0ZTogVGh1LCA4IE5vdiAy
MDEyIDE1OjUwOjM0IC0wODAwClN1YmplY3Q6IEltcGxlbWVudCBJbmRleGVkREIgZm9yIEpTQy4K
Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDg2ICsrKysrKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAg
ICAgICAgICAgfCAgICA3ICsKIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFu
eS5pZGwgICAgICAgIHwgICAgMyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcCAgICAgfCAgICA2ICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJDdXJzb3IuaWRsICAgICB8ICAgIDEgKwogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvckJhY2tlbmRJbXBsLmggICAgICAgfCAgICAyICstCiAuLi4vTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmlkbCAgICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCAgIHwgICAgMiArLQogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsICAgfCAgICAzICstCiAuLi4v
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsICAgICB8ICAgIDMgKy0K
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsICAgIHwgICAg
MyArLQogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsICAgICAg
fCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsICAg
ICAgICB8ICAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJh
bmdlLmlkbCAgIHwgICAgMyArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwICAgfCAgIDIyICstCiAuLi4vV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZS5pZGwgICB8ICAgIDMgKy0KIC4uLi9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAgICAgICAgIHwgICAgMiArLQogLi4uL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwgfCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaWRsICAgIHwgICAgMyArLQogLi4uL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaWRsICAgfCAgICAzICstCiAu
Li4vTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbCAgICB8ICAgIDMg
Ky0KIC4uLi9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsICAgIHwg
ICAgMyArLQogLi4uL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmlk
bCAgfCAgICAzICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcCB8ICAyODQgKysrKysrKysrKysrKysrKysrKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaCAgIHwgICAgOSArCiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAgICAgICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9tLmNwcCAgICAgIHwgICAgMyArLQogLi4uL2Jp
bmRpbmdzL2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAgICAgICAgfCAgIDUyICsrKysK
IC4uLi9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcCAgICAgICAgIHwgICAx
NyArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaCAgICAgICAgICAg
fCAgICA1ICsKIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAgIHwgICAgNSArCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcCB8ICAgMTUgKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdV
dGlsaXRpZXMuaCAgIHwgICAgNyArLQogU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3Qu
aWRsICAgICAgICAgICAgICAgfCAgICAzICstCiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogLi4uL2Nocm9taXVtL3Rlc3RzL0lEQkJp
bmRpbmdVdGlsaXRpZXNUZXN0LmNwcCAgICAgfCAgICA0ICstCiAzNyBmaWxlcyBjaGFuZ2VkLCA1
NDQgaW5zZXJ0aW9ucygrKSwgNTggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJPcGVuREJSZXF1ZXN0Q3VzdG9tLmNwcAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCAxYWRkOWI4Li4yMDgzZDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAK
KzIwMTItMTEtMDggIE1pY2hhZWwgUHJ1ZXR0ICA8bWljaGFlbEA2OGsub3JnPgorCisgICAgICAg
IEltcGxlbWVudCBJbmRleGVkREIgZm9yIEpTQy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiLyoKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
QW55LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yOjpzZXRWYWx1ZVJlYWR5KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJD
dXJzb3IuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kSW1wbDo6cG9zdFN1Y2Nl
c3NIYW5kbGVyQ2FsbGJhY2spOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
cldpdGhWYWx1ZS5pZGw6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGw6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQkluZGV4LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRs
OgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQktleVJhbmdlLmlkbDoKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlOjpwdXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9wZW5EQlJlcXVlc3QuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGw6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlRXZlbnQuaWRsOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0LmlkbDoKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKElEQkpTQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJKU0NvbnRleHQ6OklEQkpTQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJKU0NvbnRleHQ6Omdsb2JhbE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJK
U0NvbnRleHQ6OmV4ZWNTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpjYW5TZXQpOgorICAgICAgICAoV2ViQ29yZTo6
c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUlEQktleUZyb21WYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpnZXROdGhWYWx1ZU9uS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmVu
c3VyZU50aFZhbHVlT25LZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbkluamVjdE50aFZh
bHVlT25LZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OmluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6ZGVzZXJpYWxpemVJREJWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpzZXJpYWxpemVJREJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjppZGJLZXlUb1Njcmlw
dFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0lE
QktleUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpKU0lEQk9wZW5EQlJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdFZhbHVlOjpjbGVhcik6CisgICAgICAgIChTY3JpcHRWYWx1ZSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
c2VyaWFsaXplSURCVmFsdWUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjppbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJCaW5k
aW5nVXRpbGl0aWVzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vRE9NU3Ry
aW5nTGlzdC5pZGw6CisKIDIwMTItMTEtMDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzM4OTIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA4ZTQ4OTlhLi44NGZmNzEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ2NSwxMiArNDY1LDE2IEBAIHdlYmNvcmVf
YnVpbHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQktleVJhbmdl
LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJPYmplY3RTdG9yZS5jcHAgXAogCURl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJPYmplY3RTdG9yZS5oIFwKKwlEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTSURCT3BlbkRCUmVxdWVzdC5jcHAgXAorCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNJREJPcGVuREJSZXF1ZXN0LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJS
ZXF1ZXN0LmNwcCBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlJlcXVlc3QuaCBcCiAJ
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0lEQlRyYW5zYWN0aW9uLmNwcCBcCiAJRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9KU0lEQlRyYW5zYWN0aW9uLmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3Jl
L0pTSURCVmVyc2lvbkNoYW5nZUV2ZW50LmggXAorCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJ
REJVcGdyYWRlTmVlZGVkRXZlbnQuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSURC
VXBncmFkZU5lZWRlZEV2ZW50LmggXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5jcHAgXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdC5oIFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSW1hZ2VEYXRh
LmNwcCBcCkBAIC0xMjIyLDYgKzEyMjYsNyBAQCBkb21fYmluZGluZ19pZGxzICs9IFwKIAkkKFdl
YkNvcmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbCBcCiAJJChXZWJDb3Jl
KS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsIFwKIAkkKFdlYkNv
cmUpL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VFdmVudC5pZGwgXAorCSQoV2Vi
Q29yZSkvTW9kdWxlcy9pbmRleGVkZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbCBcCiAJJChX
ZWJDb3JlKS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5pZGwgXAog
CSQoV2ViQ29yZSkvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyQ29udGV4dEluZGV4ZWREYXRhYmFz
ZS5pZGwgXAogCSQoV2ViQ29yZSkvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5pZGwg
XApAQCAtMjI0Myw2ICsyMjQ4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuaCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
R0NDb250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRp
bGl0aWVzLmggXAogCVNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQXJyYXlCdWZmZXJDdXN0
b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0FycmF5QnVmZmVyVmlld0hl
bHBlci5oIFwKQEAgLTIzNDIsNiArMjM0OCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmggXAogCVNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNJREJLZXlDdXN0b20uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0lEQk9wZW5EQlJlcXVlc3RDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Q3VzdG9tLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNJbWFnZUNvbnN0cnVjdG9yLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkFueS5pZGwKaW5kZXggNTk2MThhZC4uMDE0MWIwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuaWRsCkBAIC0yNSw3ICsyNSw4IEBA
CiAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAotICAgIEN1c3RvbVRvSlNP
YmplY3QKKyAgICBDdXN0b21Ub0pTT2JqZWN0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50
ZXJmYWNlIElEQkFueSB7CiAgICAgLy8gVGhpcyBzcGFjZSBpcyBpbnRlbnRpb25hbGx5IGxlZnQg
YmxhbmsuCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5jcHAKaW5kZXggYTY5ZDRjMy4uZjY4MDQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBTY3JpcHQKICAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0gb2JqZWN0U3Rv
cmUtPm1ldGFkYXRhKCkua2V5UGF0aDsKICAgICBjb25zdCBib29sIHVzZXNJbkxpbmVLZXlzID0g
IWtleVBhdGguaXNOdWxsKCk7CiAgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7Ci0gICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRL
ZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtl
eSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoY29udGV4dCwgdmFsdWUs
IGtleVBhdGgpOwogICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlzRXF1
YWwobV9jdXJyZW50UHJpbWFyeUtleS5nZXQoKSkpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNzAs
MTAgKzI3MCwxMCBAQCB2b2lkIElEQkN1cnNvcjo6c2V0VmFsdWVSZWFkeShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleQogICAgICAgICBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7CiAg
ICAgICAgIGlmIChtZXRhZGF0YS5hdXRvSW5jcmVtZW50ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlz
TnVsbCgpKSB7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhw
ZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBt
ZXRhZGF0YS5rZXlQYXRoKTsKKyAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5
ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb250ZXh0LCB2YWx1ZSwg
bWV0YWRhdGEua2V5UGF0aCk7CiAgICAgICAgICAgICBBU1NFUlQoIWV4cGVjdGVkS2V5IHx8IGV4
cGVjdGVkS2V5LT5pc0VxdWFsKG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkpKTsKICNlbmRpZgot
ICAgICAgICAgICAgYm9vbCBpbmplY3RlZCA9IGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSht
X2N1cnJlbnRQcmltYXJ5S2V5LCB2YWx1ZSwgbWV0YWRhdGEua2V5UGF0aCk7CisgICAgICAgICAg
ICBib29sIGluamVjdGVkID0gaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKGNvbnRleHQsIG1f
Y3VycmVudFByaW1hcnlLZXksIHZhbHVlLCBtZXRhZGF0YS5rZXlQYXRoKTsKICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGVyZSBpcyBubyB3YXkgdG8gcmVwb3J0IGVycm9ycyBoZXJlLiBNb3ZlIHRo
aXMgaW50byBvblN1Y2Nlc3NXaXRoQ29udGludWF0aW9uIHNvIHRoYXQgd2UgY2FuIGFib3J0IHRo
ZSB0cmFuc2FjdGlvbiB0aGVyZS4gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTIyNzgKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5qZWN0ZWQsIGluamVj
dGVkKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5pZGwKaW5kZXggNDc1NzA5My4uNDZkYzc4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaWRsCkBAIC0yNSw2ICsyNSw3IEBACiAKIFsK
ICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJsZXMK
IF0gaW50ZXJmYWNlIElEQkN1cnNvciB7CiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgcmVtb3Zl
IGxlZ2FjeSBlbnVtIGNvbnN0YW50cywgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04NTMxNQogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IE5FWFQgPSAwOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tl
bmRJbXBsLmgKaW5kZXggMWY3NGMzMy4uYjhiNzdlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5oCkBAIC02Myw3
ICs2Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHBy
ZWZldGNoQ29udGludWUoaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwcmVmZXRjaFJlc2V0KGludCB1
c2VkUHJlZmV0Y2hlcywgaW50IHVudXNlZFByZWZldGNoZXMpOwotICAgIHZpcnR1YWwgdm9pZCBw
b3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKSB7IH0KIAogICAgIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvci0+a2V5KCk7IH0K
ICAgICBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
c29yLT5wcmltYXJ5S2V5KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaWRsCmluZGV4IDAxNzUwZGMuLjdlZTkyZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldp
dGhWYWx1ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yV2l0aFZhbHVlLmlkbApAQCAtMjQsNyArMjQsOCBAQAogICovCiAKIFsKLSAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwK
KyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJDdXJzb3JXaXRoVmFsdWUgOiBJ
REJDdXJzb3IgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBhbnkgdmFsdWU7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IGZj
Y2I0NTYuLjYxODVjMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIElEQkRhdGFiYXNlOjpk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50NjQgb2JqZWN0U3RvcmVJZCA9IG1fbWV0
YWRhdGEuZmluZE9iamVjdFN0b3JlKG5hbWUpOworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9
IG1fbWV0YWRhdGEuZmluZE9iamVjdFN0b3JlKG5hbWUpOwogICAgIGlmIChvYmplY3RTdG9yZUlk
ID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaWRsCmlu
ZGV4IDkxZWYxZDguLmFmMmVmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJEYXRhYmFzZS5pZGwKQEAgLTI3LDcgKzI3LDggQEAKIFsKICAgICBDb25kaXRp
b25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFdmVudFRh
cmdldAorICAgIEV2ZW50VGFyZ2V0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNl
IElEQkRhdGFiYXNlIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CiAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIElEQkFueSB2ZXJzaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VFeGNlcHRpb24uaWRsCmlu
ZGV4IGJiMjE1YmQuLmE3NWJhZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUV4Y2VwdGlvbi5pZGwKQEAgLTI1LDcgKzI1LDgg
QEAKIAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCi0gICAgRG9Ob3RDaGVj
a0NvbnN0YW50cworICAgIERvTm90Q2hlY2tDb25zdGFudHMsCisgICAgSlNOb1N0YXRpY1RhYmxl
cwogXSBleGNlcHRpb24gSURCRGF0YWJhc2VFeGNlcHRpb24gewogCiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIHVuc2lnbmVkIHNob3J0ICAgY29kZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKaW5kZXggYTI0Y2QyYi4uNTc5YTZlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5pZGwKQEAgLTI0
LDcgKzI0LDggQEAKICAqLwogCiBbCi0gICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRQor
ICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCisgICAgSlNOb1N0YXRpY1RhYmxlcwog
XSBpbnRlcmZhY2UgSURCRmFjdG9yeSB7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIEltcGxlbWVudGVkQXM9Z2V0RGF0YWJhc2VOYW1lc10gSURCUmVxdWVzdCB3ZWJraXRH
ZXREYXRhYmFzZU5hbWVzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkluZGV4LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkluZGV4LmlkbAppbmRleCBlZmZhOWNmNC4uYzAwZTNmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaWRsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmlkbApAQCAtMjQsNyArMjQsOCBAQAogICov
CiAKIFsKLSAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0aW9uYWw9
SU5ERVhFRF9EQVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJJ
bmRleCB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBuYW1lOwogICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBJREJPYmplY3RTdG9yZSBvYmplY3RTdG9yZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXkuaWRsCmluZGV4IDNiOTZmYzEuLjI5ZjI3MWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQktleS5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5LmlkbApAQCAtMjUsNyAr
MjUsOCBAQAogCiBbCiAgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICBDdXN0
b21Ub0pTT2JqZWN0CisgICAgQ3VzdG9tVG9KU09iamVjdCwKKyAgICBKU05vU3RhdGljVGFibGVz
CiBdIGludGVyZmFjZSBJREJLZXkgewogICAgIC8vIFRoaXMgc3BhY2UgaXMgaW50ZW50aW9uYWxs
eSBsZWZ0IGJsYW5rLgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQktleVJhbmdlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQktleVJhbmdlLmlkbAppbmRleCA4MjA2MjhhLi40MjQwMDNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJLZXlSYW5nZS5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCS2V5UmFuZ2UuaWRsCkBAIC0yNCw3ICsyNCw4
IEBACiAgKi8KIAogWwotICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UKKyAgICBDb25k
aXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJm
YWNlIElEQktleVJhbmdlIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgSURCS2V5IGxvd2VyOwog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBJREJLZXkgdXBwZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggZDlkMmVjMi4u
OGUzNTE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcApAQCAtMTAxLDEyICsxMDEsMTMgQEAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3MKICAgICByZXR1cm4gZ2V0KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwog
fQogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGNvbnN0IElEQkluZGV4
TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFNjcmlwdFZhbHVlJiBvYmplY3RWYWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cyogaW5kZXhLZXlz
KQorc3RhdGljIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LAorICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRh
dGEsCisgICAgY29uc3QgU2NyaXB0VmFsdWUmIG9iamVjdFZhbHVlLAorICAgIElEQk9iamVjdFN0
b3JlOjpJbmRleEtleXMqIGluZGV4S2V5cykKIHsKICAgICBBU1NFUlQoaW5kZXhLZXlzKTsKLSAg
ICBSZWZQdHI8SURCS2V5PiBpbmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgob2JqZWN0VmFsdWUsIGluZGV4TWV0YWRhdGEua2V5UGF0aCk7CisgICAgUmVmUHRy
PElEQktleT4gaW5kZXhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KGNvbnRleHQsIG9iamVjdFZhbHVlLCBpbmRleE1ldGFkYXRhLmtleVBhdGgpOwogCiAgICAgaWYg
KCFpbmRleEtleSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDkgKzE1Niw4IEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFNjcmlwdFN0
YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7Ci0gICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gdmFsdWUuc2VyaWFsaXplKHN0YXRlKTsK
LSAgICBpZiAoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gc2VyaWFsaXplZFZhbHVlID0gc2VyaWFsaXplSURCVmFsdWUoY29udGV4dCwg
dmFsdWUpOworICAgIGlmICghc2VyaWFsaXplZFZhbHVlKSB7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQpAQCAtMTgxLDcgKzE4MSw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KICAgICBpZiAodXNlc0luTGluZUtleXMpIHsKLSAgICAgICAgUmVm
UHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5
ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb250ZXh0LCB2YWx1ZSwg
a2V5UGF0aCk7CiAgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlk
KCkpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwog
ICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xOTEsNyArMTkxLDcgQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6UHV0TW8KICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIGlmICho
YXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgIGlmICghY2FuSW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKHZhbHVlLCBrZXlQYXRoKSkgeworICAgICAgICAgICAg
aWYgKCFjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29udGV4dCwgdmFsdWUsIGtleVBh
dGgpKSB7CiAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9F
UlI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CkBAIC0yMDgsNyAr
MjA4LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICBWZWN0b3I8SW5kZXhLZXlzPiBp
bmRleEtleXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRh
ZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwotICAg
ICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT52YWx1ZSwgdmFsdWUsICZrZXlzKTsK
KyAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShjb250ZXh0LCBpdC0+dmFsdWUsIHZh
bHVlLCAma2V5cyk7CiAgICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKGl0LT52YWx1ZS5uYW1lKTsK
ICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9CkBAIC0zMjksNyArMzI5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIFNjcmlwdFZhbHVlIHZhbHVlID0gY3Vyc29yLT52YWx1
ZSgpOwogCiAgICAgICAgICAgICBJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzIGluZGV4S2V5czsK
LSAgICAgICAgICAgIGdlbmVyYXRlSW5kZXhLZXlzRm9yVmFsdWUobV9pbmRleE1ldGFkYXRhLCB2
YWx1ZSwgJmluZGV4S2V5cyk7CisgICAgICAgICAgICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVl
KGNvbnRleHQsIG1faW5kZXhNZXRhZGF0YSwgdmFsdWUsICZpbmRleEtleXMpOwogCiAgICAgICAg
ICAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cywgMT4gaW5kZXhLZXlzTGlzdDsK
ICAgICAgICAgICAgIGluZGV4S2V5c0xpc3QuYXBwZW5kKGluZGV4S2V5cyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5pZGwKaW5kZXgg
MTMyMDQzNC4uNmJkNGMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmlkbApAQCAtMjQsNyArMjQsOCBAQAogICovCiAKIFsKLSAg
ICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFCisgICAgQ29uZGl0aW9uYWw9SU5ERVhFRF9E
QVRBQkFTRSwKKyAgICBKU05vU3RhdGljVGFibGVzCiBdIGludGVyZmFjZSBJREJPYmplY3RTdG9y
ZSB7CiAgICAgW1RyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gcmVhZG9ubHkgYXR0cmli
dXRlIERPTVN0cmluZyBuYW1lOwogICAgIFtJbXBsZW1lbnRlZEFzPWtleVBhdGhBbnldIHJlYWRv
bmx5IGF0dHJpYnV0ZSBJREJBbnkga2V5UGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAK
aW5kZXggNDY0MGMxMy4uZGFjNDk5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAg
LTMwNCw3ICszMDQsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4
ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAogICAgIHRyYW5zYWN0aW9u
LT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBhc3NPd25QdHI8
VmVjdG9yPGludDY0PiA+IHBvcEluZGV4SWRzLCBQYXNzT3duUHRyPFZlY3RvcjxJbmRleEtleXM+
ID4gcG9wSW5kZXhLZXlzKQordm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gcHJwVHJhbnNhY3Rpb24sIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+
ID4gcG9wSW5kZXhJZHMsIFBhc3NPd25QdHI8VmVjdG9yPEluZGV4S2V5cz4gPiBwb3BJbmRleEtl
eXMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRl
cm5hbCIpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
biA9IHBycFRyYW5zYWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT3BlbkRCUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmlkbAppbmRleCBiYmRlOWJjLi5mMDBlOGU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1
ZXN0LmlkbApAQCAtMjYsNyArMjYsOCBAQAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFU
QUJBU0UsCiAgICAgQWN0aXZlRE9NT2JqZWN0LAotICAgIEV2ZW50VGFyZ2V0CisgICAgRXZlbnRU
YXJnZXQsCisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURCT3BlbkRCUmVxdWVz
dCA6IElEQlJlcXVlc3QgewogICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9uYmxvY2tlZDsK
ICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbnVwZ3JhZGVuZWVkZWQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDcwNDZhMjQu
LjdmOTE2MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuY3BwCkBAIC00MDAsMTAgKzQwMCwxMCBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwU2VyaWFsaXplZFNjcmlwdAog
CiAgICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IHBycFByaW1hcnlLZXk7CiAjaWZuZGVm
IE5ERUJVRwotICAgIFJlZlB0cjxJREJLZXk+IGV4cGVjdGVkS2V5ID0gY3JlYXRlSURCS2V5RnJv
bVNjcmlwdFZhbHVlQW5kS2V5UGF0aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgUmVmUHRyPElEQktl
eT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdmFsdWUsIGtleVBhdGgpOwogICAgIEFTU0VSVCghZXhw
ZWN0ZWRLZXkgfHwgZXhwZWN0ZWRLZXktPmlzRXF1YWwocHJpbWFyeUtleS5nZXQoKSkpOwogI2Vu
ZGlmCi0gICAgYm9vbCBpbmplY3RlZCA9IGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShwcmlt
YXJ5S2V5LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgYm9vbCBpbmplY3RlZCA9IGluamVjdElEQktl
eUludG9TY3JpcHRWYWx1ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHByaW1hcnlLZXksIHZh
bHVlLCBrZXlQYXRoKTsKICAgICBBU1NFUlRfVU5VU0VEKGluamVjdGVkLCBpbmplY3RlZCk7CiAg
ICAgb25TdWNjZXNzSW50ZXJuYWwodmFsdWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAppbmRleCA0ZThmZjA5Li4wYjE2OWRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmlkbApAQCAt
MzAsNyArMzAsOCBAQAogWwogICAgIENvbmRpdGlvbmFsPUlOREVYRURfREFUQUJBU0UsCiAgICAg
QWN0aXZlRE9NT2JqZWN0LAotICAgIEV2ZW50VGFyZ2V0CisgICAgRXZlbnRUYXJnZXQsCisgICAg
SlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgSURCUmVxdWVzdCB7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIElEQkFueSByZXN1bHQKICAgICAgICAgZ2V0dGVyIHJhaXNlcyAoSURCRGF0YWJh
c2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb24uaWRsCmluZGV4IDcyZmFhOGQuLjhlYzRiMzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5pZGwKQEAgLTI3
LDcgKzI3LDggQEAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAogICAgIEFj
dGl2ZURPTU9iamVjdCwKLSAgICBFdmVudFRhcmdldAorICAgIEV2ZW50VGFyZ2V0LAorICAgIEpT
Tm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElEQlRyYW5zYWN0aW9uIHsKICAgICAvLyBGSVhN
RTogRXZlbnR1YWxseSByZW1vdmUgbGVnYWN5IGVudW0gY29uc3RhbnRzLCBzZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MzE1CiAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgUkVBRF9PTkxZID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlVwZ3JhZGVOZWVkZWRFdmVudC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJVcGdyYWRlTmVlZGVkRXZlbnQuaWRsCmluZGV4IDA4MTBkZDIuLjhm
MjI1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlVw
Z3JhZGVOZWVkZWRFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVXBncmFkZU5lZWRlZEV2ZW50LmlkbApAQCAtMjUsNyArMjUsOCBAQAogCiBbCiAgICAg
Q29uZGl0aW9uYWw9SU5ERVhFRF9EQVRBQkFTRSwKLSAgICBJbnRlcmZhY2VOYW1lPUlEQlZlcnNp
b25DaGFuZ2VFdmVudAorICAgIEludGVyZmFjZU5hbWU9SURCVmVyc2lvbkNoYW5nZUV2ZW50LAor
ICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElEQlVwZ3JhZGVOZWVkZWRFdmVudCA6
IEV2ZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsb25nIG9sZFZl
cnNpb247CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdWZXJz
aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVy
c2lvbkNoYW5nZUV2ZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlZlcnNpb25DaGFuZ2VFdmVudC5pZGwKaW5kZXggZjkyZWY1My4uOGQyMTMyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hh
bmdlRXZlbnQuaWRsCkBAIC0yNCw3ICsyNCw4IEBACiAgKi8KIAogWwotICAgIENvbmRpdGlvbmFs
PUlOREVYRURfREFUQUJBU0UKKyAgICBDb25kaXRpb25hbD1JTkRFWEVEX0RBVEFCQVNFLAorICAg
IEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElEQlZlcnNpb25DaGFuZ2VFdmVudCA6IEV2
ZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNpb247CiB9OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3QuaWRsCmluZGV4IDQ5N2I1N2IuLjliNmUxZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdC5pZGwKQEAgLTI2LDcgKzI2LDggQEAKIFsKICAgICBDb25kaXRpb25hbD1JTkRFWEVE
X0RBVEFCQVNFLAogICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFdmVudFRhcmdldAorICAgIEV2
ZW50VGFyZ2V0LAorICAgIEpTTm9TdGF0aWNUYWJsZXMKIF0gaW50ZXJmYWNlIElEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0IDogSURCUmVxdWVzdCB7CiAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIg
b25ibG9ja2VkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lE
QkJpbmRpbmdVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmlu
ZGluZ1V0aWxpdGllcy5jcHAKaW5kZXggYjU1ZTc2Yi4uZWI2NmNlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5jcHAKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxA
NjhrLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMjIgKzI5LDI5
NSBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogI2luY2x1ZGUgIklEQkJpbmRpbmdV
dGlsaXRpZXMuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiSURCS2V5Lmgi
CisjaW5jbHVkZSAiSURCVHJhY2luZy5oIgorI2luY2x1ZGUgIkpTSURCS2V5LmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCisjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5z
dGFuY2UuaD4KKworI2lmIEVOQUJMRShXT1JLRVJTKQorI2luY2x1ZGUgIldvcmtlckNvbnRleHQu
aCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK2NsYXNzIElEQkpTQ29udGV4dCB7CitwdWJs
aWM6CisgICAgSURCSlNDb250ZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisg
ICAgICAgIDogbV9sb2NrKGNvbnRleHQtPmdsb2JhbERhdGEoKSkKKyAgICAgICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKKyAgICAgICAgLCBtX3NjcmlwdFN0YXRlKDApCisgICAgeworICAgICAgICBp
ZiAobV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsKKyAgICAgICAgICAgIG1f
c2NyaXB0U3RhdGUgPSBtYWluV29ybGRTY3JpcHRTdGF0ZShkb2N1bWVudC0+ZnJhbWUoKSk7Cisg
ICAgICAgIH0KKyNpZiBFTkFCTEUoV09SS0VSUykKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQobV9jb250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAgICAgICAgICBXb3Jr
ZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KG1f
Y29udGV4dCk7CisgICAgICAgICAgICBtX3NjcmlwdFN0YXRlID0gc2NyaXB0U3RhdGVGcm9tV29y
a2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSB7IHJldHVybiBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihtX3NjcmlwdFN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOyB9Cisg
ICAgRXhlY1N0YXRlKiBleGVjU3RhdGUoKSB7IHJldHVybiBtX3NjcmlwdFN0YXRlOyB9CisKK3By
aXZhdGU6CisgICAgSlNMb2NrSG9sZGVyIG1fbG9jazsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBtX2NvbnRleHQ7CisgICAgU2NyaXB0U3RhdGUqIG1fc2NyaXB0U3RhdGU7Cit9OworCitz
dGF0aWMgYm9vbCBnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZSYgcmVzdWx0KQogewotICAgIGlmICh2YWx1ZS5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52YWxpZCgpOwotICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCisgICAgaWYgKG9iamVjdC5pc1N0cmluZygpICYmIGtleVBhdGhF
bGVtZW50ID09ICJsZW5ndGgiKSB7CisgICAgICAgIHJlc3VsdCA9IGpzTnVtYmVyKG9iamVjdC50
b1N0cmluZyhleGVjKS0+bGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgaWYgKCFvYmplY3QuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBrZXlQYXRoRWxlbWVudC51
dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIWFzT2JqZWN0KG9iamVjdCktPmhhc1Byb3BlcnR5KGV4
ZWMsIGlkZW50aWZpZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gYXNP
YmplY3Qob2JqZWN0KS0+Z2V0KGV4ZWMsIGlkZW50aWZpZXIpOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCBjYW5TZXQoSlNWYWx1ZSBvYmplY3QsIGNvbnN0IFN0cmluZyYga2V5
UGF0aEVsZW1lbnQpCit7CisgICAgcmV0dXJuIG9iamVjdC5pc09iamVjdCgpOworfQorCitzdGF0
aWMgYm9vbCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aEVsZW1lbnQsIEpTVmFsdWUganNWYWx1ZSkKK3sKKyAgICBpZiAoIWNhblNldChv
YmplY3QsIGtleVBhdGhFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIElkZW50
aWZpZXIgaWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBrZXlQYXRoRWxlbWVudC51dGY4
KCkuZGF0YSgpKTsKKyAgICBhc09iamVjdChvYmplY3QpLT5wdXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLCBpZGVudGlmaWVyLCBqc1ZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3Rh
dGljIGNvbnN0IHNpemVfdCBtYXhpbXVtRGVwdGggPSAyMDAwOworCitzdGF0aWMgUGFzc1JlZlB0
cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIFZlY3RvcjxKU0FycmF5Kj4mIHN0YWNrKQoreworICAgIGlmICh2YWx1ZS5pc051bWJl
cigpICYmICFpc25hbih2YWx1ZS50b051bWJlcihleGVjKSkpCiAgICAgICAgIHJldHVybiBJREJL
ZXk6OmNyZWF0ZU51bWJlcih2YWx1ZS50b051bWJlcihleGVjKSk7CiAgICAgaWYgKHZhbHVlLmlz
U3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZVN0cmluZyh2YWx1ZS50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykpOwotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZGF0ZXMu
CisgICAgaWYgKHZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6OnNfaW5mbykgJiYgIWlzbmFu
KHZhbHVlVG9EYXRlKGV4ZWMsIHZhbHVlKSkpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0
ZURhdGUodmFsdWVUb0RhdGUoZXhlYywgdmFsdWUpKTsKKyAgICBpZiAodmFsdWUuaXNPYmplY3Qo
KSkgeworICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOworICAgICAg
ICBpZiAoaXNKU0FycmF5KG9iamVjdCkgfHwgb2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19p
bmZvKSkgeworICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KG9iamVjdCk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBhcnJheS0+bGVuZ3RoKCk7CisKKyAgICAgICAg
ICAgIGlmIChzdGFjay5jb250YWlucyhhcnJheSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICBpZiAoc3RhY2suc2l6ZSgpID49IG1heGltdW1EZXB0aCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHN0YWNrLmFwcGVuZChhcnJheSk7CisKKyAg
ICAgICAgICAgIElEQktleTo6S2V5QXJyYXkgc3Via2V5czsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIEpTVmFsdWUg
aXRlbSA9IGFycmF5LT5nZXRJbmRleChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
SURCS2V5PiBzdWJrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywgaXRlbSwgc3RhY2sp
OworICAgICAgICAgICAgICAgIGlmICghc3Via2V5KQorICAgICAgICAgICAgICAgICAgICBzdWJr
ZXlzLmFwcGVuZChJREJLZXk6OmNyZWF0ZUludmFsaWQoKSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzdWJrZXlzLmFwcGVuZChzdWJrZXkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzdGFjay5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGVBcnJheShzdWJrZXlzKTsKKyAgICAgICAgfQorICAgIH0KICAgICBy
ZXR1cm4gMDsKIH0KIAorUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVmVjdG9yPEpTQXJyYXkqPiBz
dGFjazsKKyAgICBSZWZQdHI8SURCS2V5PiBrZXkgPSBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhl
YywgdmFsdWUsIHN0YWNrKTsKKyAgICBpZiAoa2V5KQorICAgICAgICByZXR1cm4ga2V5OworICAg
IHJldHVybiBJREJLZXk6OmNyZWF0ZUludmFsaWQoKTsKK30KKworc3RhdGljIEpTVmFsdWUgZ2V0
TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwKKyAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYga2V5UGF0aEVsZW1lbnRzLCB1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICBKU1ZhbHVlIGN1cnJlbnRWYWx1ZShyb290VmFsdWUpOworICAgIEFTU0VSVChpbmRl
eCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaW5kZXg7IGkrKykgeworICAgICAgICBpZiAoY3VycmVudFZhbHVlLmlzU3RyaW5nKCkgJiYg
a2V5UGF0aEVsZW1lbnRzW2ldID09ICJsZW5ndGgiKQorICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKGN1cnJlbnRWYWx1ZS50b1N0cmluZyhleGVjKS0+bGVuZ3RoKCkpOworICAgICAgICBpZiAo
IWN1cnJlbnRWYWx1ZS5pc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgICAgIEpTVmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKKyAgICAgICAg
aWYgKCFnZXQoZXhlYywgcGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50c1tpXSwgY3VycmVudFZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1
cm4gY3VycmVudFZhbHVlOworfQorCitzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlE
QktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY3Jp
cHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCkKK3sKKyAgICBWZWN0b3I8U3Ry
aW5nPiBrZXlQYXRoRWxlbWVudHM7CisgICAgSURCS2V5UGF0aFBhcnNlRXJyb3IgZXJyb3I7Cisg
ICAgSURCUGFyc2VLZXlQYXRoKGtleVBhdGgsIGtleVBhdGhFbGVtZW50cywgZXJyb3IpOworICAg
IEFTU0VSVChlcnJvciA9PSBJREJLZXlQYXRoUGFyc2VFcnJvck5vbmUpOworCisgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gdmFsdWUuanNWYWx1ZSgpOworICAgIGpzVmFsdWUgPSBnZXROdGhWYWx1ZU9u
S2V5UGF0aChleGVjLCBqc1ZhbHVlLCBrZXlQYXRoRWxlbWVudHMsCisgICAgICAgIGtleVBhdGhF
bGVtZW50cy5zaXplKCkpOworICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoZXhlYywganNWYWx1
ZSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSByb290VmFsdWUsCisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGtl
eVBhdGhFbGVtZW50cywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgSlNWYWx1ZSBjdXJyZW50VmFs
dWUocm9vdFZhbHVlKTsKKworICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6
ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykgeworICAgICAg
ICBKU1ZhbHVlIHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVudHNbaV07CisgICAgICAgIGlmICghZ2V0
KGV4ZWMsIHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgY3VycmVudFZhbHVlKSkgeworICAg
ICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwor
ICAgICAgICAgICAgaWYgKCFzZXQoZXhlYywgcGFyZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBK
U1ZhbHVlKG9iamVjdCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgICAgICAgICAgY3VycmVudFZhbHVlID0gSlNWYWx1ZShvYmplY3QpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsKK30KKworc3RhdGljIGJvb2wgY2FuSW5q
ZWN0TnRoVmFsdWVPbktleVBhdGgoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHJvb3RWYWx1ZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGtleVBhdGhFbGVtZW50cywgdW5zaWduZWQgaW5kZXgpCit7
CisgICAgaWYgKCFyb290VmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUocm9vdFZhbHVlKTsKKworICAgIEFTU0VSVChpbmRl
eCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgaW5kZXg7ICsraSkgeworICAgICAgICBKU1ZhbHVlIHBhcmVudFZhbHVlKGN1cnJlbnRWYWx1
ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYga2V5UGF0aEVsZW1lbnQgPSBrZXlQYXRoRWxlbWVu
dHNbaV07CisgICAgICAgIGlmICghZ2V0KGV4ZWMsIHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVu
dCwgY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBjYW5TZXQocGFyZW50VmFsdWUs
IGtleVBhdGhFbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgaW5q
ZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCkKK3sKKyAgICBJREJfVFJBQ0UoImluamVjdElEQktleUludG9TY3JpcHRW
YWx1ZSIpOworCisgICAgQVNTRVJUKGtleVBhdGgudHlwZSgpID09IElEQktleVBhdGg6OlN0cmlu
Z1R5cGUpOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhFbGVtZW50czsKKyAgICBJREJLZXlQ
YXRoUGFyc2VFcnJvciBlcnJvcjsKKyAgICBJREJQYXJzZUtleVBhdGgoa2V5UGF0aC5zdHJpbmco
KSwga2V5UGF0aEVsZW1lbnRzLCBlcnJvcik7CisgICAgQVNTRVJUKGVycm9yID09IElEQktleVBh
dGhQYXJzZUVycm9yTm9uZSk7CisKKyAgICBpZiAoa2V5UGF0aEVsZW1lbnRzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWUuanNW
YWx1ZSgpOworICAgIGlmICghanNWYWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBJREJKU0NvbnRleHQgaWRiQ29udGV4dChjb250ZXh0KTsKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMgPSBpZGJDb250ZXh0LmV4ZWNTdGF0ZSgpOworCisgICAgSlNWYWx1ZSBwYXJlbnQg
PSBlbnN1cmVOdGhWYWx1ZU9uS2V5UGF0aChleGVjLCBhc09iamVjdChqc1ZhbHVlKSwKKyAgICAg
ICAga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpIC0gMSk7CisgICAgaWYg
KHBhcmVudC5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IXNldChleGVjLCBwYXJlbnQsIGtleVBhdGhFbGVtZW50cy5sYXN0KCksCisgICAgICAgIHRvSlMo
ZXhlYywgaWRiQ29udGV4dC5nbG9iYWxPYmplY3QoKSwga2V5LmdldCgpKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPElEQktleT4g
Y3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgpCit7CisgICAgSURCX1RSQUNFKCJjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVB
bmRLZXlQYXRoIik7CisgICAgQVNTRVJUKCFrZXlQYXRoLmlzTnVsbCgpKTsKKworICAgIElEQkpT
Q29udGV4dCBpZGJDb250ZXh0KGNvbnRleHQpOworICAgIEV4ZWNTdGF0ZSogZXhlYyA9IGlkYkNv
bnRleHQuZXhlY1N0YXRlKCk7CisKKyAgICBpZiAoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0
aDo6QXJyYXlUeXBlKSB7CisgICAgICAgIElEQktleTo6S2V5QXJyYXkgcmVzdWx0OworICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYXJyYXkgPSBrZXlQYXRoLmFycmF5KCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS5zaXplKCk7IGkrKykgeworICAgICAgICAg
ICAgUmVmUHRyPElEQktleT4ga2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5
UGF0aChleGVjLCB2YWx1ZSwgYXJyYXlbaV0pOworICAgICAgICAgICAgaWYgKCFrZXkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGtleSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlQXJyYXkocmVzdWx0KTsKKyAg
ICB9CisKKyAgICBBU1NFUlQoa2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlw
ZSk7CisgICAgcmV0dXJuIGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhl
YywgdmFsdWUsIGtleVBhdGguc3RyaW5nKCkpOworfQorCitib29sIGNhbkluamVjdElEQktleUlu
dG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTY3Jp
cHRWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgpCit7CisgICAg
SURCX1RSQUNFKCJjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUiKTsKKyAgICBBU1NFUlQo
a2V5UGF0aC50eXBlKCkgPT0gSURCS2V5UGF0aDo6U3RyaW5nVHlwZSk7CisgICAgVmVjdG9yPFN0
cmluZz4ga2V5UGF0aEVsZW1lbnRzOworICAgIElEQktleVBhdGhQYXJzZUVycm9yIGVycm9yOwor
ICAgIElEQlBhcnNlS2V5UGF0aChrZXlQYXRoLnN0cmluZygpLCBrZXlQYXRoRWxlbWVudHMsIGVy
cm9yKTsKKyAgICBBU1NFUlQoZXJyb3IgPT0gSURCS2V5UGF0aFBhcnNlRXJyb3JOb25lKTsKKwor
ICAgIGlmICgha2V5UGF0aEVsZW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSURCSlNDb250ZXh0IGlkYkNvbnRleHQoY29udGV4dCk7CisgICAgcmV0dXJuIGNhbklu
amVjdE50aFZhbHVlT25LZXlQYXRoKGlkYkNvbnRleHQuZXhlY1N0YXRlKCksCisgICAgICAgIHNj
cmlwdFZhbHVlLmpzVmFsdWUoKSwga2V5UGF0aEVsZW1lbnRzLCBrZXlQYXRoRWxlbWVudHMuc2l6
ZSgpIC0gMSk7Cit9CisKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHBycFZhbHVlKQoreworICAgIElEQkpTQ29udGV4dCBpZGJDb250ZXh0KGNvbnRleHQpOworICAg
IFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZSA9IHBycFZhbHVl
OworICAgIGlmIChzZXJpYWxpemVkVmFsdWUpCisgICAgICAgIHJldHVybiBTY3JpcHRWYWx1ZTo6
ZGVzZXJpYWxpemUoaWRiQ29udGV4dC5leGVjU3RhdGUoKSwKKyAgICAgICAgICAgIHNlcmlhbGl6
ZWRWYWx1ZS5nZXQoKSwgTm9uVGhyb3dpbmcpOworICAgIHJldHVybiBTY3JpcHRWYWx1ZSgqY29u
dGV4dC0+Z2xvYmFsRGF0YSgpLCBqc051bGwoKSk7Cit9CisKK1Bhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVJREJWYWx1ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUpCit7CisgICAgSURCSlNDb250ZXh0IGlk
YkNvbnRleHQoY29udGV4dCk7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2Vy
aWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoaWRiQ29udGV4dC5l
eGVjU3RhdGUoKSwgc2NyaXB0VmFsdWUuanNWYWx1ZSgpKTsKKyAgICBpZiAoaWRiQ29udGV4dC5l
eGVjU3RhdGUoKS0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBzZXJpYWxpemVkVmFsdWUucmVsZWFzZSgpOworfQorCitTY3JpcHRWYWx1ZSBpZGJLZXlUb1Nj
cmlwdFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXkpCit7CisgICAgSURCSlNDb250ZXh0IGlkYkNvbnRleHQoc2NyaXB0Q29u
dGV4dCk7CisgICAgcmV0dXJuIFNjcmlwdFZhbHVlKCpzY3JpcHRDb250ZXh0LT5nbG9iYWxEYXRh
KCksCisgICAgICAgIHRvSlMoaWRiQ29udGV4dC5leGVjU3RhdGUoKSwgaWRiQ29udGV4dC5nbG9i
YWxPYmplY3QoKSwga2V5LmdldCgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCmluZGV4IDhlMGM5YzUuLmY5YTBhOWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRp
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVz
LmgKQEAgLTI5LDcgKzI5LDkgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2lu
Y2x1ZGUgIkRpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAi
U2NyaXB0VmFsdWUuaCIgCisKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zOCw2ICs0MCwxMyBAQCBjbGFzcyBJREJLZXk7CiAKIFBhc3NSZWZQdHI8
SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUpOwogCitib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBh
dGgmKTsKK1Bhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRL
ZXlQYXRoKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0
IElEQktleVBhdGgmKTsKK2Jvb2wgY2FuSW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgm
KTsKK1NjcmlwdFZhbHVlIGRlc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPik7CitQYXNzUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplSURCVmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFNjcmlwdFZhbHVlJik7CitTY3JpcHRWYWx1ZSBpZGJLZXlUb1NjcmlwdFZhbHVlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleT4pOworCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSURCQW55Q3VzdG9tLmNwcAppbmRleCA3NzExM2M3Li5lMGZmZmViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQkFueUN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCkBAIC02NCw4ICs2NCw2IEBA
IEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIElEQkFueSogaWRiQW55KQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICBjYXNlIElEQkFueTo6TnVsbFR5cGU6CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICBj
YXNlIElEQkFueTo6U3RyaW5nVHlwZToKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hl
KGV4ZWMsIGlkYkFueS0+c3RyaW5nKCkpOwogICAgIGNhc2UgSURCQW55OjpET01TdHJpbmdMaXN0
VHlwZToKICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmRv
bVN0cmluZ0xpc3QoKSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkN1cnNvclR5cGU6CkBAIC04NCw4
ICs4MiwxMiBAQCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBJREJBbnkqIGlkYkFueSkKICAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpZGJBbnktPmlkYk9iamVjdFN0b3JlKCkpOwogICAgIGNhc2UgSURC
QW55OjpJREJUcmFuc2FjdGlvblR5cGU6CiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgaWRiQW55LT5pZGJUcmFuc2FjdGlvbigpKTsKLSAgICBjYXNlIElEQkFueTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlVHlwZToKLSAgICAgICAgcmV0dXJuIGlkYkFueS0+c2VyaWFsaXpl
ZFNjcmlwdFZhbHVlKCktPmRlc2VyaWFsaXplKGV4ZWMsIGdsb2JhbE9iamVjdCk7CisgICAgY2Fz
ZSBJREJBbnk6OlNjcmlwdFZhbHVlVHlwZToKKyAgICAgICAgcmV0dXJuIGlkYkFueS0+c2NyaXB0
VmFsdWUoKS5qc1ZhbHVlKCk7CisgICAgY2FzZSBJREJBbnk6OlN0cmluZ1R5cGU6CisgICAgICAg
IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpZGJBbnktPnN0cmluZygpKTsKKyAgICBj
YXNlIElEQkFueTo6SW50ZWdlclR5cGU6CisgICAgICAgIHJldHVybiBqc051bWJlcihpZGJBbnkt
PmludGVnZXIoKSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0lEQktleUN1c3RvbS5jcHAKaW5kZXggYTY0MDYzZC4u
NWUwNzg5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJLZXlD
dXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSURCS2V5Q3VzdG9t
LmNwcApAQCAtNTEsMTAgKzUxLDkgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSURCS2V5KiBrZXkpCiAgICAgICAgICAgICBj
b25zdCBJREJLZXk6OktleUFycmF5JiBpbkFycmF5ID0ga2V5LT5hcnJheSgpOwogICAgICAgICAg
ICAgc2l6ZV90IHNpemUgPSBpbkFycmF5LnNpemUoKTsKICAgICAgICAgICAgIEpTQXJyYXkqIG91
dEFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIHNpemUpOwot
ICAgICAgICAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgp
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBJREJLZXkqIGFycmF5S2V5ID0gaW5BcnJheS5hdChpKS5nZXQoKTsKLSAgICAg
ICAgICAgICAgICBvdXRBcnJheS0+aW5pdGlhbGl6ZUluZGV4KGdsb2JhbERhdGEsIGksIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBhcnJheUtleSkpOworICAgICAgICAgICAgICAgIG91dEFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJyYXlL
ZXkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKG91dEFycmF5
KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJ
REJPcGVuREJSZXF1ZXN0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNjhjNTdkZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSURCT3BlbkRCUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKKworI2luY2x1ZGUgIkpTSURCT3BlbkRCUmVxdWVzdC5oIgorCisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEpTSURCT3BlbkRCUmVxdWVzdDo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSlNJREJP
cGVuREJSZXF1ZXN0KiBqc1JlcXVlc3QgPSBqc0Nhc3Q8SlNJREJPcGVuREJSZXF1ZXN0Kj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhqc1JlcXVlc3QsICZzX2luZm8pOwor
ICAgIENPTVBJTEVfQVNTRVJUKFN0cnVjdHVyZUZsYWdzICYgT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbldpdGhvdXRTZXR0aW5nRmxhZyk7CisgICAgQVNTRVJU
KGpzUmVxdWVzdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJl
bigpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGpzUmVxdWVzdCwgdmlzaXRvcik7CisgICAg
c3RhdGljX2Nhc3Q8SURCT3BlbkRCUmVxdWVzdCo+KGpzUmVxdWVzdC0+aW1wbCgpKS0+dmlzaXRK
U0V2ZW50TGlzdGVuZXJzKHZpc2l0b3IpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKaW5kZXggZjU1OWY0MS4u
Y2MzOGU2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNJREJWZXJz
aW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdEN1c3RvbS5jcHAKQEAgLTEsNSArMSw2IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEyLCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgpAQCAtMjQsMTkgKzI1LDI3
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTSURCVmVyc2lvbkNo
YW5nZVJlcXVlc3QuaCIKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVk
ZSAiSlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgSlND
OjpTbG90VmlzaXRvciYpCit2b2lkIEpTSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICBKU0lEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0KiBq
c1JlcXVlc3QgPSBqc0Nhc3Q8SlNJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCo+KGNlbGwpOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoanNSZXF1ZXN0LCAmc19pbmZvKTsKKyAgICBDT01Q
SUxFX0FTU0VSVChTdHJ1Y3R1cmVGbGFncyAmIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4sIE92ZXJy
aWRlc1Zpc2l0Q2hpbGRyZW5XaXRob3V0U2V0dGluZ0ZsYWcpOworICAgIEFTU0VSVChqc1JlcXVl
c3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Cisg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihqc1JlcXVlc3QsIHZpc2l0b3IpOworICAgIHN0YXRpY19j
YXN0PElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Kj4oanNSZXF1ZXN0LT5pbXBsKCkpLT52aXNpdEpT
RXZlbnRMaXN0ZW5lcnModmlzaXRvcik7CiB9CiAKIH0KIAotI2VuZGlmCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFs
dWUuaAppbmRleCAyNDZjYWUwLi5lNjYxNDhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFZhbHVlLmgKQEAgLTYwLDYgKzYwLDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzRnVu
Y3Rpb24oKSBjb25zdDsKICAgICBib29sIGhhc05vVmFsdWUoKSBjb25zdCB7IHJldHVybiAhbV92
YWx1ZTsgfQogCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3ZhbHVlLmNsZWFy
KCk7CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNjcmlwdFZhbHVlJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOyB9CiAKICAgICBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gc2VyaWFsaXplKFNjcmlwdFN0YXRlKiwgU2Vy
aWFsaXphdGlvbkVycm9yTW9kZSA9IFRocm93aW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDUyMDgxNGUuLjIz
NTc4ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcApAQCAtMTg0Miw2ICsxODQyLDExIEBAIFBhc3NSZWZQdHI8U2VyaWFs
aXplZFNjcmlwdFZhbHVlPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShKU0M6OkV4ZWNT
dGF0ZSoKIAogU3RyaW5nIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dG9XaXJlU3RyaW5nKCkgY29u
c3QKIHsKKyAgICBpZiAobV9kYXRhLnNpemUoKSAmIDEpIHsKKyAgICAgICAgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+IGRhdGEobV9kYXRhKTsKKyAgICAgICAgZGF0YS5hcHBlbmQoMCk7CisgICAgICAg
IHJldHVybiBDbG9uZURlc2VyaWFsaXplcjo6dG9XaXJlU3RyaW5nKGRhdGEpOworICAgIH0KICAg
ICByZXR1cm4gQ2xvbmVEZXNlcmlhbGl6ZXI6OnRvV2lyZVN0cmluZyhtX2RhdGEpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJCaW5kaW5nVXRpbGl0aWVz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3Bw
CmluZGV4IDAxZTdlMzcuLjY0Yzk1NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC0xODksNyArMTg5LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCS2V5PiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRo
KGNvbnN0IFNjcmlwdFZhbHUKICAgICByZXR1cm4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4S2V5
KTsKIH0KIAotUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFu
ZEtleVBhdGgoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQ
YXRoKQorUGFzc1JlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtl
eVBhdGgoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwg
Y29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsKICAgICBJREJfVFJBQ0UoImNyZWF0ZUlEQktl
eUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgiKTsKICAgICBBU1NFUlQoIWtleVBhdGguaXNOdWxs
KCkpOwpAQCAtMjIzLDcgKzIyMywxNiBAQCBTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQsIFBhc3NSZWZQdAogICAgIHJl
dHVybiBTY3JpcHRWYWx1ZSh2ODo6TnVsbCgpKTsKIH0KIAotYm9vbCBpbmplY3RJREJLZXlJbnRv
U2NyaXB0VmFsdWUoUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY3JpcHRWYWx1
ZSYgdmFsdWUpCit7CisgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJl
bnQoKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkVmFsdWUg
PSB2YWx1ZS5zZXJpYWxpemUoc3RhdGUpOworICAgIGlmIChzdGF0ZS0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzZXJpYWxpemVkVmFsdWUucmVsZWFzZSgp
OworfQorCitib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoKQogewogICAgIElEQl9UUkFDRSgiaW5qZWN0SURCS2V5SW50
b1NjcmlwdFZhbHVlIik7CiAgICAgQVNTRVJUKHY4OjpDb250ZXh0OjpJbkNvbnRleHQoKSk7CkBA
IC0yNDksNyArMjU4LDcgQEAgYm9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgU2NyaXB0VmFsdWUmIHZhbHVlLCBjb24KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBjYW5JbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoY29uc3QgU2NyaXB0
VmFsdWUmIHNjcmlwdFZhbHVlLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQorYm9vbCBjYW5J
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0
IFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkKIHsK
ICAgICBJREJfVFJBQ0UoImNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZSIpOwogICAgIEFT
U0VSVChrZXlQYXRoLnR5cGUoKSA9PSBJREJLZXlQYXRoOjpTdHJpbmdUeXBlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lEQkJpbmRpbmdVdGlsaXRpZXMuaAppbmRleCBmNzY2
MDU2Li5iYmJkMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJC
aW5kaW5nVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvSURCQmlu
ZGluZ1V0aWxpdGllcy5oCkBAIC00MCwxMCArNDAsMTEgQEAgY2xhc3MgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOwogCiBQYXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVZhbHVlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPik7CiAKLWJvb2wgaW5qZWN0SURCS2V5SW50b1NjcmlwdFZhbHVlKFBh
c3NSZWZQdHI8SURCS2V5PiwgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7Ci1QYXNz
UmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChjb25z
dCBTY3JpcHRWYWx1ZSYsIGNvbnN0IElEQktleVBhdGgmKTsKLWJvb2wgY2FuSW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiwgY29uc3QgSURCS2V5UGF0aCYpOwor
Ym9vbCBpbmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCS2V5PiwgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CitQ
YXNzUmVmUHRyPElEQktleT4gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQ
YXRoJik7Citib29sIGNhbkluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgY29uc3QgU2NyaXB0VmFsdWUmLCBjb25zdCBJREJLZXlQYXRoJik7CiBTY3Jp
cHRWYWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOworUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlcmlhbGl6ZUlEQlZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBTY3Jp
cHRWYWx1ZSYpOwogU2NyaXB0VmFsdWUgaWRiS2V5VG9TY3JpcHRWYWx1ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+KTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RPTVN0cmluZ0xpc3QuaWRsIGIvU291cmNlL1dlYkNvcmUvZG9tL0RPTVN0
cmluZ0xpc3QuaWRsCmluZGV4IGQwZWIzNjIuLmFhNjQzZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9ET01TdHJpbmdMaXN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRE9N
U3RyaW5nTGlzdC5pZGwKQEAgLTI1LDcgKzI1LDggQEAKIAogWwogICAgIEluZGV4ZWRHZXR0ZXIs
Ci0gICAgSlNDdXN0b21Ub05hdGl2ZU9iamVjdAorICAgIEpTQ3VzdG9tVG9OYXRpdmVPYmplY3Qs
CisgICAgSlNOb1N0YXRpY1RhYmxlcwogXSBpbnRlcmZhY2UgRE9NU3RyaW5nTGlzdCB7CiAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwogICAgIFtUcmVhdFJldHVy
bmVkTnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBpdGVtKGluIFtPcHRpb25hbD1EZWZhdWx0
SXNVbmRlZmluZWRdIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA4YjA1M2E0Li4xZTgyY2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDEyLTExLTA3ICBNaWNoYWVsIFBydWV0dCAgPG1pY2hhZWxANjhrLm9y
Zz4KKworICAgICAgICBJbXBsZW1lbnQgSW5kZXhlZERCIGZvciBKU0MuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTExMAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvSURCQmluZGluZ1V0aWxp
dGllc1Rlc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpjaGVja0tleUZyb21WYWx1ZUFuZEtleVBh
dGhJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OmluamVjdEtleSk6CisKIDIwMTItMTEtMDgg
IEtlaXNoaSBIYXR0b3JpICA8a2Vpc2hpQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIHByb3Bl
cnRpZXMgZm9yIHdlZWsvbW9udGggcGlja2VyIGluIERhdGVUaW1lQ2hvb3NlckltcGw6OndyaXRl
RG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQmlu
ZGluZ1V0aWxpdGllc1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJC
aW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAKaW5kZXggYTJhNGY0NC4uMTJiZjAwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVzVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVz
VGVzdC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgUGFzc1JlZlB0cjxJREJLZXk+IGNoZWNrS2V5RnJv
bVZhbHVlQW5kS2V5UGF0aEludGVybmFsKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwKICAgICBJ
REJLZXlQYXRoIGlkYktleVBhdGgoa2V5UGF0aCk7CiAgICAgRVhQRUNUX1RSVUUoaWRiS2V5UGF0
aC5pc1ZhbGlkKCkpOwogICAgIAotICAgIHJldHVybiBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFs
dWVBbmRLZXlQYXRoKHZhbHVlLCBpZGJLZXlQYXRoKTsKKyAgICByZXR1cm4gY3JlYXRlSURCS2V5
RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aCgwLCB2YWx1ZSwgaWRiS2V5UGF0aCk7CiB9CiAKIHZv
aWQgY2hlY2tLZXlQYXRoTnVsbFZhbHVlKGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoKQpAQCAtNjYsNyArNjYsNyBAQCBib29sIGluamVjdEtleShQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aAogewogICAgIElEQktleVBhdGggaWRiS2V5UGF0aChrZXlQYXRoKTsKICAgICBFWFBFQ1RfVFJV
RShpZGJLZXlQYXRoLmlzVmFsaWQoKSk7Ci0gICAgcmV0dXJuIGluamVjdElEQktleUludG9TY3Jp
cHRWYWx1ZShrZXksIHZhbHVlLCBpZGJLZXlQYXRoKTsKKyAgICByZXR1cm4gaW5qZWN0SURCS2V5
SW50b1NjcmlwdFZhbHVlKDAsIGtleSwgdmFsdWUsIGlkYktleVBhdGgpOwogfQogCiB2b2lkIGNo
ZWNrSW5qZWN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFNjcmlwdFZhbHVlJiB2YWx1
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKQotLSAKMS43LjkuNQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>