<?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>164898</bug_id>
          
          <creation_ts>2016-11-17 16:43:23 -0800</creation_ts>
          <short_desc>Crash in com.apple.JavaScriptCore: WTF::ThreadSpecific&lt;WTF::WTFThreadData, + 142</short_desc>
          <delta_ts>2018-08-04 12:22:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>188331</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryan Haddad">ryanhaddad</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1252532</commentid>
    <comment_count>0</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-11-17 16:43:23 -0800</bug_when>
    <thetext>Encountered with LayoutTest inspector/debugger/stepping/stepping-try-catch-finally.html

https://build.webkit.org/results/Apple%20Sierra%20Release%20WK2%20(Tests)/r208861%20(1521)/results.html

https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=inspector%2Fdebugger%2Fstepping%2Fstepping-try-catch-finally.html

Thread 12 Crashed:: WTF::AutomaticThread
0   com.apple.JavaScriptCore      	0x00000001082d7ffe WTF::ThreadSpecific&lt;WTF::WTFThreadData, (WTF::CanBeGCThread)0&gt;::operator WTF::WTFThreadData*() + 142 (ThreadSpecific.h:150)
1   com.apple.JavaScriptCore      	0x0000000108b2a631 WTF::AtomicStringImpl::remove(WTF::AtomicStringImpl*) + 97 (WTFThreadData.h:64)
2   com.apple.JavaScriptCore      	0x0000000108b4fe93 WTF::StringImpl::~StringImpl() + 35 (StringImpl.h:486)
3   com.apple.JavaScriptCore      	0x0000000108b4fefe WTF::StringImpl::destroy(WTF::StringImpl*) + 14 (StringImpl.cpp:138)
4   com.apple.JavaScriptCore      	0x000000010825f945 JSC::TemplateRegistryKey::~TemplateRegistryKey() + 181 (Vector.h:59)
5   com.apple.JavaScriptCore      	0x0000000108a533e0 void WTF::HashTable&lt;JSC::TemplateRegistryKey, WTF::KeyValuePair&lt;JSC::TemplateRegistryKey, JSC::Weak&lt;JSC::JSArray&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;JSC::TemplateRegistryKey, JSC::Weak&lt;JSC::JSArray&gt; &gt; &gt;, JSC::TemplateRegistryKey::Hasher, WTF::HashMap&lt;JSC::TemplateRegistryKey, JSC::Weak&lt;JSC::JSArray&gt;, JSC::TemplateRegistryKey::Hasher, WTF::HashTraits&lt;JSC::TemplateRegistryKey&gt;, WTF::HashTraits&lt;JSC::Weak&lt;JSC::JSArray&gt; &gt; &gt;::KeyValuePairTraits, WTF::HashTraits&lt;JSC::TemplateRegistryKey&gt; &gt;::removeIf&lt;JSC::WeakGCMap&lt;JSC::TemplateRegistryKey, JSC::JSArray, JSC::TemplateRegistryKey::Hasher, WTF::HashTraits&lt;JSC::TemplateRegistryKey&gt; &gt;::pruneStaleEntries()::&apos;lambda&apos;(WTF::KeyValuePair&lt;JSC::TemplateRegistryKey, JSC::Weak&lt;JSC::JSArray&gt; &gt;&amp;)&gt;(JSC::WeakGCMap&lt;JSC::TemplateRegistryKey, JSC::JSArray, JSC::TemplateRegistryKey::Hasher, WTF::HashTraits&lt;JSC::TemplateRegistryKey&gt; &gt;::pruneStaleEntries()::&apos;lambda&apos;(WTF::KeyValuePair&lt;JSC::TemplateRegistryKey, JSC::Weak&lt;JSC::JSArray&gt; &gt;&amp;) const&amp;) + 160 (Vector.h:559)
6   com.apple.JavaScriptCore      	0x0000000108a53335 std::__1::__function::__func&lt;JSC::WeakGCMap&lt;JSC::TemplateRegistryKey, JSC::JSArray, JSC::TemplateRegistryKey::Hasher, WTF::HashTraits&lt;JSC::TemplateRegistryKey&gt; &gt;::WeakGCMap(JSC::VM&amp;)::&apos;lambda&apos;(), std::__1::allocator&lt;JSC::WeakGCMap&lt;JSC::TemplateRegistryKey, JSC::JSArray, JSC::TemplateRegistryKey::Hasher, WTF::HashTraits&lt;JSC::TemplateRegistryKey&gt; &gt;::WeakGCMap(JSC::VM&amp;)::&apos;lambda&apos;()&gt;, void ()&gt;::operator()() + 21 (functional:1437)
7   com.apple.JavaScriptCore      	0x0000000108626291 JSC::Heap::collectInThread() + 593 (HashTable.h:181)
8   com.apple.JavaScriptCore      	0x000000010862852d JSC::Heap::Thread::work() + 13 (Heap.cpp:257)
9   com.apple.JavaScriptCore      	0x0000000108b5d19f std::__1::__function::__func&lt;WTF::AutomaticThread::start(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0, std::__1::allocator&lt;WTF::AutomaticThread::start(WTF::Locker&lt;WTF::LockBase&gt; const&amp;)::$_0&gt;, void ()&gt;::operator()() + 415 (AutomaticThread.cpp:195)
10  com.apple.JavaScriptCore      	0x0000000108b629c2 WTF::threadEntryPoint(void*) + 178 (functional:1766)
11  com.apple.JavaScriptCore      	0x0000000108b62d9f WTF::wtfThreadEntryPoint(void*) + 15 (memory:2723)
12  libsystem_pthread.dylib       	0x00007fffc327aabb _pthread_body + 180
13  libsystem_pthread.dylib       	0x00007fffc327aa07 _pthread_start + 286
14  libsystem_pthread.dylib       	0x00007fffc327a231 thread_start + 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252541</commentid>
    <comment_count>1</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-11-17 17:15:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/29168671&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252919</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-11-18 15:59:18 -0800</bug_when>
    <thetext>Is this a regression?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252930</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-18 16:08:13 -0800</bug_when>
    <thetext>I guess TemplateRegistry&apos;s WeakGCMap&apos;s visiting causes some ref()/deref() of StringImpl. It should not be done in the other thread. But now, collecting is done in its thread. Right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252932</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-18 16:12:02 -0800</bug_when>
    <thetext>Solution should be simple. I&apos;ll work on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1252977</commentid>
    <comment_count>5</comment_count>
      <attachid>295231</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-18 17:26:26 -0800</bug_when>
    <thetext>Created attachment 295231
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253063</commentid>
    <comment_count>6</comment_count>
      <attachid>295259</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-19 01:21:14 -0800</bug_when>
    <thetext>Created attachment 295259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253064</commentid>
    <comment_count>7</comment_count>
      <attachid>295260</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-19 01:28:04 -0800</bug_when>
    <thetext>Created attachment 295260
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253067</commentid>
    <comment_count>8</comment_count>
      <attachid>295261</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-19 02:40:40 -0800</bug_when>
    <thetext>Created attachment 295261
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253151</commentid>
    <comment_count>9</comment_count>
      <attachid>295261</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-11-20 11:03:04 -0800</bug_when>
    <thetext>Comment on attachment 295261
Patch

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

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3005
&gt; -    JSTemplateRegistryKey*&amp; templateRegistryKeyInMap = m_templateRegistryKeyMap.add(templateRegistryKey, nullptr).iterator-&gt;value;
&gt; +    JSTemplateRegistryKey*&amp; templateRegistryKeyInMap = m_templateRegistryKeyMap.add(templateRegistryKey.copyRef(), nullptr).iterator-&gt;value;
&gt;      if (!templateRegistryKeyInMap) {
&gt; -        templateRegistryKeyInMap = JSTemplateRegistryKey::create(*vm(), templateRegistryKey);
&gt; +        templateRegistryKeyInMap = JSTemplateRegistryKey::create(*vm(), WTFMove(templateRegistryKey));
&gt;          addConstantValue(templateRegistryKeyInMap);
&gt;      }
&gt;      return templateRegistryKeyInMap;

This can be written using HashMap::ensure instead. I think that idiom would be a little cleaner than this, but not entirely sure.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:888
&gt; +        JSTemplateRegistryKey* addTemplateRegistryKeyConstant(Ref&lt;TemplateRegistryKey&gt;);

It’s not so common to use Ref as the type of a function argument. More common are const Ref&amp; or Ref&amp;&amp;, depending on whether the caller is passing ownership or not.

If we keep the return value of createKey returning a Ref, then I think the type we want here is Ref&amp;&amp;. If we change createKey to return a const Ref&amp;, then I think we want to take const Ref&amp;.

&gt; Source/JavaScriptCore/runtime/TemplateRegistry.h:31
&gt; +#include &lt;wtf/Ref.h&gt;

I don’t understand why this include is needed. I don’t see any use of Ref in this header.

&gt; Source/JavaScriptCore/runtime/TemplateRegistry.h:42
&gt; +    JSArray* getTemplateObject(ExecState*, JSTemplateRegistryKey*);

If this code was in WebCore, I would suggest changing the argument type to JSTemplateRegistryKey&amp;, but I am not sure if that style is welcomed in this directory.

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKey.h:69
&gt; +        for (const String&amp; string : rawStrings)
&gt; +            hash += WTF::StringHash::hash(string);

This is not changing, but: Adding hashes together is not typically a great way to make a hash for a set of strings. Hashing the hashes of the strings together is one good way. Another good way is to hash all the characters of all the strings.

I also think this would be better if the function body was outside the class definition.

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.cpp:47
&gt; +    static unsigned hash(TemplateRegistryKey* generator)
&gt; +    {
&gt; +        return generator-&gt;hash();
&gt; +    }
&gt; +
&gt; +    static inline bool equal(TemplateRegistryKey* key, TemplateRegistryKey* generator)
&gt; +    {
&gt; +        return *key == *generator;
&gt; +    }
&gt; +
&gt; +    static void translate(TemplateRegistryKey*&amp; location, TemplateRegistryKey* generator, unsigned)
&gt; +    {
&gt; +        location = generator;
&gt; +    }

These would probably look better as one-liners.

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.cpp:58
&gt; +    Ref&lt;TemplateRegistryKey&gt; key = TemplateRegistryKey::create(rawStrings, cookedStrings);

auto would be better

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:31
&gt; +#include &lt;wtf/Ref.h&gt;

Header needs only Forward.h, not this.

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:33
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Header needs only Forward.h, not this.

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:40
&gt; +    typedef Vector&lt;String, 4&gt; StringVector;

This should be using rather than typedef.

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:44
&gt; +    Ref&lt;TemplateRegistryKey&gt; createKey(const StringVector&amp; rawStrings, const StringVector&amp; cookedStrings);

The return value for this can be const Ref&lt;TemplateRegistryKey&gt;&amp; since it always returns a key in the HashSet. And that reduces reference count churn a little bit, so I suggest we do it.

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:46
&gt; +    void unregister(TemplateRegistryKey*);

This should take a reference rather than a pointer.

&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:52
&gt; +    struct KeyHash {
&gt; +        static unsigned hash(const TemplateRegistryKey* key) { return key-&gt;hash(); }
&gt; +        static bool equal(const TemplateRegistryKey* a, const TemplateRegistryKey* b) { return *a == *b; }
&gt; +        static const bool safeToCompareToEmptyOrDeleted = false;
&gt; +    };

This can be private.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253243</commentid>
    <comment_count>10</comment_count>
      <attachid>295261</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-21 08:59:44 -0800</bug_when>
    <thetext>Comment on attachment 295261
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:3005
&gt;&gt;      return templateRegistryKeyInMap;
&gt; 
&gt; This can be written using HashMap::ensure instead. I think that idiom would be a little cleaner than this, but not entirely sure.

Sounds nice. I&apos;ll change this with HashMap::ensure. Nice.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:888
&gt;&gt; +        JSTemplateRegistryKey* addTemplateRegistryKeyConstant(Ref&lt;TemplateRegistryKey&gt;);
&gt; 
&gt; It’s not so common to use Ref as the type of a function argument. More common are const Ref&amp; or Ref&amp;&amp;, depending on whether the caller is passing ownership or not.
&gt; 
&gt; If we keep the return value of createKey returning a Ref, then I think the type we want here is Ref&amp;&amp;. If we change createKey to return a const Ref&amp;, then I think we want to take const Ref&amp;.

Sounds nice. I changed it to `const Ref&amp;` since now the createKey returns `const Ref&amp;`.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistry.h:31
&gt;&gt; +#include &lt;wtf/Ref.h&gt;
&gt; 
&gt; I don’t understand why this include is needed. I don’t see any use of Ref in this header.

Oops. I used it in the previous version of this patch. Dropped.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistry.h:42
&gt;&gt; +    JSArray* getTemplateObject(ExecState*, JSTemplateRegistryKey*);
&gt; 
&gt; If this code was in WebCore, I would suggest changing the argument type to JSTemplateRegistryKey&amp;, but I am not sure if that style is welcomed in this directory.

Personally I like this since `JSTemplateRegistryKey` is JS managed object and basically these objects are referenced in the pointer form in JSC.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKey.h:69
&gt;&gt; +            hash += WTF::StringHash::hash(string);
&gt; 
&gt; This is not changing, but: Adding hashes together is not typically a great way to make a hash for a set of strings. Hashing the hashes of the strings together is one good way. Another good way is to hash all the characters of all the strings.
&gt; 
&gt; I also think this would be better if the function body was outside the class definition.

Yeah. I&apos;ve changed it to calculating the hash of all the characters.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.cpp:47
&gt;&gt; +    }
&gt; 
&gt; These would probably look better as one-liners.

Changed.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.cpp:58
&gt;&gt; +    Ref&lt;TemplateRegistryKey&gt; key = TemplateRegistryKey::create(rawStrings, cookedStrings);
&gt; 
&gt; auto would be better

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:31
&gt;&gt; +#include &lt;wtf/Ref.h&gt;
&gt; 
&gt; Header needs only Forward.h, not this.

Nice. Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:33
&gt;&gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Header needs only Forward.h, not this.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:40
&gt;&gt; +    typedef Vector&lt;String, 4&gt; StringVector;
&gt; 
&gt; This should be using rather than typedef.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:44
&gt;&gt; +    Ref&lt;TemplateRegistryKey&gt; createKey(const StringVector&amp; rawStrings, const StringVector&amp; cookedStrings);
&gt; 
&gt; The return value for this can be const Ref&lt;TemplateRegistryKey&gt;&amp; since it always returns a key in the HashSet. And that reduces reference count churn a little bit, so I suggest we do it.

Sounds nice. Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:46
&gt;&gt; +    void unregister(TemplateRegistryKey*);
&gt; 
&gt; This should take a reference rather than a pointer.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:52
&gt;&gt; +    };
&gt; 
&gt; This can be private.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253304</commentid>
    <comment_count>11</comment_count>
      <attachid>295261</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-21 15:45:01 -0800</bug_when>
    <thetext>Comment on attachment 295261
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/runtime/TemplateRegistryKeyTable.h:44
&gt;&gt;&gt; +    Ref&lt;TemplateRegistryKey&gt; createKey(const StringVector&amp; rawStrings, const StringVector&amp; cookedStrings);
&gt;&gt; 
&gt;&gt; The return value for this can be const Ref&lt;TemplateRegistryKey&gt;&amp; since it always returns a key in the HashSet. And that reduces reference count churn a little bit, so I suggest we do it.
&gt; 
&gt; Sounds nice. Fixed.

We do not store it as Ref&lt;&gt; in the hash set. We just store it as TemplateRegistryKey* in the hash table because this table should not retain these keys.
So, we will use Ref&lt;TemplateRegistryKey&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253306</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-21 15:54:58 -0800</bug_when>
    <thetext>Committed r208953: &lt;http://trac.webkit.org/changeset/208953&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253333</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-21 20:35:05 -0800</bug_when>
    <thetext>Looks like this patch (r208953) is causing an assertion failure in JSTests/stress/tagged-templates-syntax.js.  The test runs fine with r208952 and fails in r208954, and r208954 is not JSC related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253334</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-21 21:14:05 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Looks like this patch (r208953) is causing an assertion failure in
&gt; JSTests/stress/tagged-templates-syntax.js.  The test runs fine with r208952
&gt; and fails in r208954, and r208954 is not JSC related.

oops, looking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253335</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-21 21:15:32 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; Looks like this patch (r208953) is causing an assertion failure in
&gt; &gt; JSTests/stress/tagged-templates-syntax.js.  The test runs fine with r208952
&gt; &gt; and fails in r208954, and r208954 is not JSC related.
&gt; 
&gt; oops, looking

I think I found the issue: Hasher::addCharacters() needs to check for legnth 0 and do nothing.  Currently, it doesn&apos;t.  I&apos;m writing a test now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253341</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-21 22:19:31 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Looks like this patch (r208953) is causing an assertion failure in
&gt; JSTests/stress/tagged-templates-syntax.js.  The test runs fine with r208952
&gt; and fails in r208954, and r208954 is not JSC related.

I&apos;ll fix this in https://bugs.webkit.org/show_bug.cgi?id=165024.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253344</commentid>
    <comment_count>17</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-11-21 22:28:26 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #13)
&gt; &gt; Looks like this patch (r208953) is causing an assertion failure in
&gt; &gt; JSTests/stress/tagged-templates-syntax.js.  The test runs fine with r208952
&gt; &gt; and fails in r208954, and r208954 is not JSC related.
&gt; 
&gt; I&apos;ll fix this in https://bugs.webkit.org/show_bug.cgi?id=165024.

Oops, I&apos;ve just returned in front of my keyboard.
r=me. Thanks, and sorry for troubling you.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295231</attachid>
            <date>2016-11-18 17:26:26 -0800</date>
            <delta_ts>2016-11-19 01:21:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164898-20161118172618.patch</filename>
            <type>text/plain</type>
            <size>9253</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
YWM1YmY1OTQwMWEyNmNkMjhiZTcxMDIyNGQ4MWU2N2M4YmZjYzQ0Li5lMzg0ZDcxNTFmYzYyNWU5
ZWE2ZTNjZTBkMzkxMmU0OTdlN2ZhMWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNyBAQAorMjAxNi0xMS0xOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDcmFzaCBpbiBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmU6IFdURjo6
VGhyZWFkU3BlY2lmaWM8V1RGOjpXVEZUaHJlYWREYXRhLCArIDE0MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBidWlsdGlucy9CdWlsdGluTmFtZXMu
aDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6
Z2V0VGVtcGxhdGVPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5j
cHA6CisgICAgICAgIChKU0M6OlRlbXBsYXRlUmVnaXN0cnlLZXlUcmFuc2xhdG9yOjpoYXNoKToK
KyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3RyeUtleVRyYW5zbGF0b3I6OmVxdWFsKToKKyAg
ICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3RyeUtleVRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6Cisg
ICAgICAgIChKU0M6OlRlbXBsYXRlUmVnaXN0cnk6OmNyZWF0ZUtleSk6CisgICAgICAgIChKU0M6
OlRlbXBsYXRlUmVnaXN0cnk6OnVucmVnaXN0ZXIpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJl
Z2lzdHJ5OjpnZXRUZW1wbGF0ZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9UZW1wbGF0ZVJl
Z2lzdHJ5Lmg6CisgICAgICAgICogcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5Lmg6CisgICAg
ICAgIChKU0M6OlRlbXBsYXRlUmVnaXN0cnlLZXk6OmNhbGN1bGF0ZUhhc2gpOgorICAgICAgICAo
SlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpUZW1wbGF0
ZVJlZ2lzdHJ5S2V5Ojp+VGVtcGxhdGVSZWdpc3RyeUtleSk6CisgICAgICAgIChKU0M6OlRlbXBs
YXRlUmVnaXN0cnlLZXk6OlRlbXBsYXRlUmVnaXN0cnlLZXkpOgorCiAyMDE2LTExLTE4ICBKZXJl
bXkgSm9uZXMgIDxqZXJlbXlqQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcnVudGltZSBmbGFn
IHRvIGVuYWJsZSBwb2ludGVyIGxvY2suIEVuYWJsZSBwb2ludGVyIGxvY2sgZmVhdHVyZSBmb3Ig
bWFjLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5O
YW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmlu
ZGV4IGQ3NDEyZDc5YjRiNmQ3OWQwNDc1MTk3ZWIwZWI2MjU0MGFkMjgxZmIuLmZkNzhhMDUzODEw
YWY5YWY0Njk5NTYwZTAzOGExNWVkZDYwYjdmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTgxLDYgKzgxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgbWFjcm8oQnVpbHRpbkxvZykgXAogICAgIG1hY3JvKGhvbWVPYmplY3QpIFwKICAg
ICBtYWNybyhnZXRUZW1wbGF0ZU9iamVjdCkgXAorICAgIG1hY3JvKHRlbXBsYXRlUmVnaXN0cnlL
ZXkpIFwKICAgICBtYWNybyhlbnF1ZXVlSm9iKSBcCiAgICAgbWFjcm8oaGFuZGxlcikgXAogICAg
IG1hY3JvKHByb21pc2VTdGF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGFlMjZjODY0NjMzNGQ0ZjI5MzQ5ZjViN2EzYWM0
ZDMyNTk0Y2E4YWMuLmZkYmMxMzg0MDc3ZjhhNjhlYzAyZWVlOTI0ZTUxOTVmZDk1MTU1Y2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
QEAgLTI5MCw3ICsyOTAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBn
ZXRUZW1wbGF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFs
dWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQodGhpc1ZhbHVlLmluaGVyaXRzKEpT
VGVtcGxhdGVSZWdpc3RyeUtleTo6aW5mbygpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVnaXN0cnkoKS5nZXRUZW1w
bGF0ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Kj4odGhpc1ZhbHVl
KS0+dGVtcGxhdGVSZWdpc3RyeUtleSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVnaXN0cnkoKS5nZXRUZW1wbGF0
ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Kj4odGhpc1ZhbHVlKSkp
OwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBs
YXRlUmVnaXN0cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVS
ZWdpc3RyeS5jcHAKaW5kZXggZmRiYWEyYjhhNjAwNjlmMjY4MjBhZTkwZTRkNTA5YjRkMDFmYjU5
Yi4uZmFhMjg2NjI1MDFmYTg4MDdmMGI4N2E1NTNlZDYxNDU5YjBmNmE5NSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKQEAgLTMw
LDYgKzMwLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRlbXBs
YXRlUmVnaXN0cnlLZXkuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMzksOSArNDAsNDIgQEAgVGVtcGxhdGVSZWdpc3RyeTo6VGVtcGxhdGVS
ZWdpc3RyeShWTSYgdm0pCiB7CiB9CiAKLUpTQXJyYXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRl
bXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYg
dGVtcGxhdGVLZXkpCitzdHJ1Y3QgVGVtcGxhdGVSZWdpc3RyeUtleVRyYW5zbGF0b3IgeworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKFRlbXBsYXRlUmVnaXN0cnlLZXkmIGdlbmVyYXRvcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuaGFzaDsKKyAgICB9CisKKyAgICBzdGF0aWMg
aW5saW5lIGJvb2wgZXF1YWwoVGVtcGxhdGVSZWdpc3RyeUtleSoga2V5LCBUZW1wbGF0ZVJlZ2lz
dHJ5S2V5JiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICByZXR1cm4gKmtleSA9PSBnZW5lcmF0
b3I7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFRlbXBsYXRlUmVnaXN0cnlL
ZXkqJiBsb2NhdGlvbiwgVGVtcGxhdGVSZWdpc3RyeUtleSYgZ2VuZXJhdG9yLCB1bnNpZ25lZCkK
KyAgICB7CisgICAgICAgIGxvY2F0aW9uID0gJmdlbmVyYXRvcjsKKyAgICB9Cit9OworCitSZWY8
VGVtcGxhdGVSZWdpc3RyeUtleT4gVGVtcGxhdGVSZWdpc3RyeTo6Y3JlYXRlS2V5KGNvbnN0IFRl
bXBsYXRlUmVnaXN0cnlLZXk6OlN0cmluZ1ZlY3RvciYgcmF3U3RyaW5ncywgY29uc3QgVGVtcGxh
dGVSZWdpc3RyeUtleTo6U3RyaW5nVmVjdG9yJiBjb29rZWRTdHJpbmdzKQoreworICAgIFJlZjxU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5PiBrZXkgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjcmVhdGUocmF3
U3RyaW5ncywgY29va2VkU3RyaW5ncyk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2F0b21pY1Rh
YmxlLmFkZDxUZW1wbGF0ZVJlZ2lzdHJ5S2V5VHJhbnNsYXRvcj4oa2V5LmdldCgpKTsKKyAgICBp
ZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICgqYWRkUmVzdWx0Lml0ZXJhdG9yKS0+
bV9yZWdpc3RyeSA9IHRoaXM7CisKKyAgICByZXR1cm4gKiphZGRSZXN1bHQuaXRlcmF0b3I7Cit9
CisKK3ZvaWQgVGVtcGxhdGVSZWdpc3RyeTo6dW5yZWdpc3RlcihUZW1wbGF0ZVJlZ2lzdHJ5S2V5
KiBrZXkpCiB7Ci0gICAgSlNBcnJheSogY2FjaGVkID0gbV90ZW1wbGF0ZU1hcC5nZXQodGVtcGxh
dGVLZXkpOworICAgIG1fYXRvbWljVGFibGUucmVtb3ZlKGtleSk7Cit9CisKK0pTQXJyYXkqIFRl
bXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNUZW1w
bGF0ZVJlZ2lzdHJ5S2V5KiB0ZW1wbGF0ZUtleU9iamVjdCkKK3sKKyAgICBhdXRvJiB0ZW1wbGF0
ZUtleSA9IHRlbXBsYXRlS2V5T2JqZWN0LT50ZW1wbGF0ZVJlZ2lzdHJ5S2V5KCk7CisgICAgSlNB
cnJheSogY2FjaGVkID0gbV90ZW1wbGF0ZU1hcC5nZXQoJnRlbXBsYXRlS2V5KTsKICAgICBpZiAo
Y2FjaGVkKQogICAgICAgICByZXR1cm4gY2FjaGVkOwogCkBAIC02MywxMCArOTcsMTQgQEAgSlNB
cnJheSogVGVtcGxhdGVSZWdpc3RyeTo6Z2V0VGVtcGxhdGVPYmplY3QoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBUZW1wbGF0ZVJlZ2kKIAogICAgIHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3Qodm0s
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5yYXcsIHJhd09iamVjdCwgUmVhZE9ubHkgfCBEb250RW51
bSB8IERvbnREZWxldGUpOwogCisgICAgLy8gVGVtcGxhdGUgSlNBcnJheSBob2xkIHRoZSByZWZl
cmVuY2UgdG8gSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5IHRvIG1ha2UgVGVtcGxhdGVSZWdpc3RyeUtl
eSBwb2ludGVyIGxpdmUgdW50aWwgdGhpcyBKU0FycmF5IGlzIGNvbGxlY3RlZC4KKyAgICAvLyBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5IHBvaW50ZXIgaXMgdXNlZCBmb3IgVGVtcGxhdGVSZWdpc3RyeSdz
IGtleS4KKyAgICB0ZW1wbGF0ZU9iamVjdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS50ZW1wbGF0ZVJlZ2lzdHJ5S2V5KCksIHRlbXBsYXRlS2V5T2JqZWN0
LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CisKICAgICBvYmplY3RDb25zdHJ1
Y3RvckZyZWV6ZShleGVjLCB0ZW1wbGF0ZU9iamVjdCk7CiAgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CiAKLSAgICBtX3RlbXBsYXRlTWFwLnNldCh0ZW1wbGF0ZUtleSwgdGVtcGxhdGVP
YmplY3QpOworICAgIG1fdGVtcGxhdGVNYXAuc2V0KCZ0ZW1wbGF0ZUtleSwgdGVtcGxhdGVPYmpl
Y3QpOwogCiAgICAgcmV0dXJuIHRlbXBsYXRlT2JqZWN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5oCmluZGV4IDY5M2M1ZWY5MWJjZGFl
NjA4MDJkMWEyZWQyNThjZGRjZmEwYTVlMGEuLjg0YmQ3MDU5MGY5Mjg1YTgyN2NhOTZiMmM4NTE2
Yjg3ZDk0MDkyYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBsYXRlUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1w
bGF0ZVJlZ2lzdHJ5LmgKQEAgLTI2LDIwICsyNiwyOSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleS5oIgogI2luY2x1
ZGUgIldlYWtHQ01hcC5oIgogI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5OworCiBjbGFz
cyBUZW1wbGF0ZVJlZ2lzdHJ5IHsKIHB1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxTdHJpbmcs
IDQ+IFN0cmluZ1ZlY3RvcjsKKwogICAgIFRlbXBsYXRlUmVnaXN0cnkoVk0mKTsKIAotICAgIEpT
QXJyYXkqIGdldFRlbXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSosIGNvbnN0IFRlbXBsYXRlUmVnaXN0
cnlLZXkmKTsKKyAgICBSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4gY3JlYXRlS2V5KGNvbnN0IFN0
cmluZ1ZlY3RvciYgcmF3U3RyaW5ncywgY29uc3QgU3RyaW5nVmVjdG9yJiBjb29rZWRTdHJpbmdz
KTsKKworICAgIEpTQXJyYXkqIGdldFRlbXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSosIEpTVGVtcGxh
dGVSZWdpc3RyeUtleSopOworCisgICAgdm9pZCB1bnJlZ2lzdGVyKFRlbXBsYXRlUmVnaXN0cnlL
ZXkqKTsKIAogcHJpdmF0ZToKLSAgICBXZWFrR0NNYXA8VGVtcGxhdGVSZWdpc3RyeUtleSwgSlNB
cnJheT4gbV90ZW1wbGF0ZU1hcDsKKyAgICBIYXNoU2V0PFRlbXBsYXRlUmVnaXN0cnlLZXkqPiBt
X2F0b21pY1RhYmxlOworICAgIFdlYWtHQ01hcDxUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiwgSlNBcnJh
eT4gbV90ZW1wbGF0ZU1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5oCmluZGV4IDQy
MWMzMDFkNjlmZjViZTI5ZGM0NjU3YTYyYmQxNzdiODFlYzYzODAuLjkzMzc0ZjNiMGIzYWEwMjVh
ZDBmZTk3OGIzOGE2MmU0MWM2MzFkNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8bGlt
aXRzPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CkBAIC0zMiwxMSArMzMsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFRl
bXBsYXRlUmVnaXN0cnlLZXkgeworY2xhc3MgVGVtcGxhdGVSZWdpc3RyeUtleSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFRlbXBsYXRlUmVnaXN0cnlLZXk+IHsKIHB1YmxpYzoKKyAgICBmcmllbmQgY2xh
c3MgVGVtcGxhdGVSZWdpc3RyeTsKICAgICB0eXBlZGVmIFZlY3RvcjxTdHJpbmcsIDQ+IFN0cmlu
Z1ZlY3RvcjsKIAotICAgIFRlbXBsYXRlUmVnaXN0cnlLZXkoY29uc3QgU3RyaW5nVmVjdG9yJiBy
YXdTdHJpbmdzLCBjb25zdCBTdHJpbmdWZWN0b3ImIGNvb2tlZFN0cmluZ3MpOwogICAgIGVudW0g
RGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CiAgICAgVGVtcGxhdGVSZWdpc3RyeUtl
eShEZWxldGVkVmFsdWVUYWcpOwogICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUg
fTsKQEAgLTYwLDcgKzYxLDI2IEBAIGNsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXkgewogICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNl
OwogICAgIH07CiAKKyAgICBzdGF0aWMgdW5zaWduZWQgY2FsY3VsYXRlSGFzaChjb25zdCBTdHJp
bmdWZWN0b3ImIHJhd1N0cmluZ3MpCisgICAgeworICAgICAgICB1bnNpZ25lZCBoYXNoID0gMDsK
KyAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIHN0cmluZyA6IHJhd1N0cmluZ3MpCisgICAgICAg
ICAgICBoYXNoICs9IFdURjo6U3RyaW5nSGFzaDo6aGFzaChzdHJpbmcpOworICAgICAgICByZXR1
cm4gaGFzaDsKKyAgICB9CisKIHByaXZhdGU6CisgICAgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+
IGNyZWF0ZShjb25zdCBTdHJpbmdWZWN0b3ImIHJhd1N0cmluZ3MsIGNvbnN0IFN0cmluZ1ZlY3Rv
ciYgY29va2VkU3RyaW5ncykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRl
bXBsYXRlUmVnaXN0cnlLZXkocmF3U3RyaW5ncywgY29va2VkU3RyaW5ncykpOworICAgIH0KKwor
ICAgIFRlbXBsYXRlUmVnaXN0cnlLZXkoY29uc3QgU3RyaW5nVmVjdG9yJiByYXdTdHJpbmdzLCBj
b25zdCBTdHJpbmdWZWN0b3ImIGNvb2tlZFN0cmluZ3MpOworICAgIH5UZW1wbGF0ZVJlZ2lzdHJ5
S2V5KCkKKyAgICB7CisgICAgfQorCisgICAgVGVtcGxhdGVSZWdpc3RyeSogbV9yZWdpc3RyeSB7
IG51bGxwdHIgfTsKICAgICBTdHJpbmdWZWN0b3IgbV9yYXdTdHJpbmdzOwogICAgIFN0cmluZ1Zl
Y3RvciBtX2Nvb2tlZFN0cmluZ3M7CiAgICAgdW5zaWduZWQgbV9oYXNoIHsgMCB9OwpAQCAtNjks
MTAgKzg5LDggQEAgY2xhc3MgVGVtcGxhdGVSZWdpc3RyeUtleSB7CiBpbmxpbmUgVGVtcGxhdGVS
ZWdpc3RyeUtleTo6VGVtcGxhdGVSZWdpc3RyeUtleShjb25zdCBTdHJpbmdWZWN0b3ImIHJhd1N0
cmluZ3MsIGNvbnN0IFN0cmluZ1ZlY3RvciYgY29va2VkU3RyaW5ncykKICAgICA6IG1fcmF3U3Ry
aW5ncyhyYXdTdHJpbmdzKQogICAgICwgbV9jb29rZWRTdHJpbmdzKGNvb2tlZFN0cmluZ3MpCisg
ICAgLCBtX2hhc2goY2FsY3VsYXRlSGFzaChyYXdTdHJpbmdzKSkKIHsKLSAgICBtX2hhc2ggPSAw
OwotICAgIGZvciAoY29uc3QgU3RyaW5nJiBzdHJpbmcgOiByYXdTdHJpbmdzKQotICAgICAgICBt
X2hhc2ggKz0gV1RGOjpTdHJpbmdIYXNoOjpoYXNoKHN0cmluZyk7CiB9CiAKIGlubGluZSBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5OjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5KERlbGV0ZWRWYWx1ZVRhZykKQEAg
LTg1LDYgKzEwMywxMiBAQCBpbmxpbmUgVGVtcGxhdGVSZWdpc3RyeUtleTo6VGVtcGxhdGVSZWdp
c3RyeUtleShFbXB0eVZhbHVlVGFnKQogewogfQogCitpbmxpbmUgVGVtcGxhdGVSZWdpc3RyeUtl
eTo6flRlbXBsYXRlUmVnaXN0cnlLZXkoKQoreworICAgIGlmIChtX3JlZ2lzdHJ5KQorICAgICAg
ICBtX3JlZ2lzdHJ5LT51bnJlZ2lzdGVyKHRoaXMpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogbmFtZXNwYWNlIFdURiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295259</attachid>
            <date>2016-11-19 01:21:14 -0800</date>
            <delta_ts>2016-11-19 01:27:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164898-20161119182105.patch</filename>
            <type>text/plain</type>
            <size>28298</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MzczNDc0YjMwMThmNmI2M2MxNjIxOWMxYzdlMWRmNTBjZWFiOWUxLi40MzlhOThlMzU1ZmY4NTli
OWE5ZjNhYTczMDU0ZDk0YTA4YTg5MmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxNi0xMS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDcmFzaCBpbiBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmU6IFdURjo6
VGhyZWFkU3BlY2lmaWM8V1RGOjpXVEZUaHJlYWREYXRhLCArIDE0MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNhbGxzaXRlIG9iamVjdCAoSlNB
cnJheSkgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWwgaXMgbWFuYWdlZCBieSBXZWFrR0NNYXAg
c2luY2UKKyAgICAgICAgc2FtZSB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbCBuZWVkIHRvIHJldHVy
biBhbiBpZGVudGljYWwgb2JqZWN0LgorICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIHVz
ZWQgVGVtcGxhdGVSZWdpc3RyeUtleSBhcyB0aGUga2V5IG9mIHRoZSBXZWFrR0NNYXAuIFdlYWtH
Q01hcAorICAgICAgICBjYW4gcHJ1bmUgaXRzIGVudHJpZXMgaW4gdGhlIGNvbGxlY3RvciB0aHJl
YWQuIEF0IHRoYXQgdGltZSwgdGhpcyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5CisgICAgICAgIGlzIGRl
YWxsb2NhdGVkLiBTaW5jZSBpdCBpbmNsdWRlcyBTdHJpbmcgKGFuZCB0aGVuLCBTdHJpbmdJbXBs
KSwgd2UgYWNjaWRlbnRhbGx5IGNhbGwKKyAgICAgICAgcmVmKCksIGRlcmVmKCkgYW5kIFN0cmlu
Z0ltcGw6OmRlc3Ryb3koKSBpbiB0aGUgZGlmZmVyZW50IHRocmVhZCBmcm9tIHRoZSBtYWluIHRo
cmVhZAorICAgICAgICB3aGlsZSB0aGlzIFRlbXBsYXRlUmVnaXN0cnlLZXkgaXMgYWxsb2NhdGVk
IGluIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICBJbnN0ZWFkLCB3ZSB1c2UgVGVtcGxhdGVS
ZWdpc3RyeUtleSogYXMgdGhlIGtleSBvZiBXZWFrR0NNYXAuIFRoZW4sIHRvIGtlZXAgaXRzIGxp
dmVuZXNzCisgICAgICAgIHdoaWxlIHRoZSBlbnRyeSBvZiB0aGUgV2Vha0dDTWFwIGlzIGFsaXZl
LCB0aGUgY2FsbHNpdGUgb2JqZWN0IGhhcyB0aGUgcmVmZXJlbmNlIHRvCisgICAgICAgIHRoZSBK
U1RlbXBsYXRlUmVnaXN0cnlLZXkuIEFuZCBpdCBob2xkcyBSZWY8VGVtcGxhdGVSZWdpc3RyeUtl
eT4uCisKKyAgICAgICAgQW5kIG5vdyB3ZSBuZWVkIHRvIGxvb2t1cCBXZWFrR0NNYXAgd2l0aCBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5Ki4gVG8gZG8gc28sIHdlIGNyZWF0ZQorICAgICAgICBpbnRlcm5p
bmcgc3lzdGVtIGZvciBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LiBJdCBpcyBzaW1pbGFyIHRvIEF0b21p
Y1N0cmluZ1RhYmxlIGFuZAorICAgICAgICBTeW1ib2xSZWdpc3RyeS4gVGVtcGxhdGVSZWdpc3Ry
eUtleSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGlzIHRhYmxlLiBUaGlzIHRhYmxlIGF0b21pemUgdGhl
CisgICAgICAgIFRlbXBsYXRlUmVnaXN0cnlLZXkuIFNvIHdlIGNhbiB1c2UgdGhlIHBvaW50ZXIg
Y29tcGFyaXNvbiBiZXR3ZWVuIFRlbXBsYXRlUmVnaXN0cnlLZXkuCisgICAgICAgIEl0IGFsbG93
cyB1cyB0byBsb29rdXAgdGhlIGVudHJ5IGZyb20gV2Vha0dDTWFwIGJ5IFRlbXBsYXRlUmVnaXN0
cnlLZXkqLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFRlbXBsYXRlUmVnaXN0
cnlLZXlDb25zdGFudCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0
VGVtcGxhdGVPYmplY3QpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpnZXRUZW1wbGF0ZU9iamVjdCk6CisgICAgICAgICogcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0
cnlLZXkuY3BwOgorICAgICAgICAoSlNDOjpKU1RlbXBsYXRlUmVnaXN0cnlLZXk6OkpTVGVtcGxh
dGVSZWdpc3RyeUtleSk6CisgICAgICAgIChKU0M6OkpTVGVtcGxhdGVSZWdpc3RyeUtleTo6Y3Jl
YXRlKToKKyAgICAgICAgKiBydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5oOgorICAgICAg
ICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHA6CisgICAgICAgIChKU0M6OlRlbXBsYXRl
UmVnaXN0cnk6OmdldFRlbXBsYXRlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1RlbXBsYXRl
UmVnaXN0cnkuaDoKKyAgICAgICAgKiBydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5
LmguCisgICAgICAgIChKU0M6OlRlbXBsYXRlUmVnaXN0cnlLZXk6On5UZW1wbGF0ZVJlZ2lzdHJ5
S2V5KToKKyAgICAgICAgKiBydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuaDoKKyAgICAgICAg
KEpTQzo6VGVtcGxhdGVSZWdpc3RyeUtleTo6Y2FsY3VsYXRlSGFzaCk6CisgICAgICAgIChKU0M6
OlRlbXBsYXRlUmVnaXN0cnlLZXk6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBsYXRlUmVn
aXN0cnlLZXk6OlRlbXBsYXRlUmVnaXN0cnlLZXkpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxh
dGVSZWdpc3RyeUtleVRhYmxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlRlbXBsYXRlUmVn
aXN0cnlLZXlUcmFuc2xhdG9yOjpoYXNoKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3Ry
eUtleVRyYW5zbGF0b3I6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3RyeUtl
eVRyYW5zbGF0b3I6OnRyYW5zbGF0ZSk6CisgICAgICAgIChKU0M6OlRlbXBsYXRlUmVnaXN0cnlL
ZXlUYWJsZTo6flRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZSk6CisgICAgICAgIChKU0M6OlRlbXBs
YXRlUmVnaXN0cnlLZXlUYWJsZTo6Y3JlYXRlS2V5KToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVS
ZWdpc3RyeUtleVRhYmxlOjp1bnJlZ2lzdGVyKToKKyAgICAgICAgKiBydW50aW1lL1RlbXBsYXRl
UmVnaXN0cnlLZXlUYWJsZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuaC4KKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlOjpLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlOjpLZXlIYXNoOjplcXVhbCk6CisgICAgICAgICogcnVudGltZS9WTS5oOgor
ICAgICAgICAoSlNDOjpWTTo6dGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlKToKKwogMjAxNi0xMS0x
OCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IG1pc3Npbmcg
ZXhjZXB0aW9uIGNoZWNrcyBpbiBERkdPcGVyYXRpb25zLmNwcC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBlZmVlZjJlYWNlYjg5NmYyMTFkYzY4MGYxYTA0MTY3ZGFlYWU5
YTQyLi4wYmMyZTczOGJiYmY4ODkwMWM2Y2RjZGIyZWY1YmFlZTVhNmZiNDIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC04NjYsNiArODY2LDggQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1N5bWJvbFByb3RvdHlwZS5jcHAKICAgICBydW50
aW1lL1N5bWJvbFRhYmxlLmNwcAogICAgIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKKyAg
ICBydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCisgICAgcnVudGltZS9UZW1wbGF0ZVJl
Z2lzdHJ5S2V5VGFibGUuY3BwCiAgICAgcnVudGltZS9UZXN0UnVubmVyVXRpbHMuY3BwCiAgICAg
cnVudGltZS9UaHJvd1Njb3BlLmNwcAogICAgIHJ1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXgg
ZDc0MTJkNzliNGI2ZDc5ZDA0NzUxOTdlYjBlYjYyNTQwYWQyODFmYi4uZmQ3OGEwNTM4MTBhZjlh
ZjQ2OTk1NjBlMDM4YTE1ZWRkNjBiN2Y0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluTmFtZXMuaApAQCAtODEsNiArODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBtYWNybyhCdWlsdGluTG9nKSBcCiAgICAgbWFjcm8oaG9tZU9iamVjdCkgXAogICAgIG1h
Y3JvKGdldFRlbXBsYXRlT2JqZWN0KSBcCisgICAgbWFjcm8odGVtcGxhdGVSZWdpc3RyeUtleSkg
XAogICAgIG1hY3JvKGVucXVldWVKb2IpIFwKICAgICBtYWNybyhoYW5kbGVyKSBcCiAgICAgbWFj
cm8ocHJvbWlzZVN0YXRlKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDdmMGUzMTM3NTVmMjRkOWNl
ZmZkMGM3OWE2MzVkYTY3NTU4MDk2ZWEuLmEzM2YzNzgxNzg3YTBmYzBmZTk2OWIwM2U2MDFhMzBj
YTA1OTRmMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0yOTk1LDExICsyOTk1LDExIEBAIEpTU3Ry
aW5nKiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKICAgICByZXR1cm4gc3RyaW5nSW5NYXA7CiB9CiAKLUpTVGVtcGxhdGVS
ZWdpc3RyeUtleSogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFRlbXBsYXRlUmVnaXN0cnlLZXlDb25z
dGFudChjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5JiB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KQorSlNU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5KiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVGVtcGxhdGVSZWdpc3Ry
eUtleUNvbnN0YW50KFJlZjxUZW1wbGF0ZVJlZ2lzdHJ5S2V5PiB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5
KQogewotICAgIEpTVGVtcGxhdGVSZWdpc3RyeUtleSomIHRlbXBsYXRlUmVnaXN0cnlLZXlJbk1h
cCA9IG1fdGVtcGxhdGVSZWdpc3RyeUtleU1hcC5hZGQodGVtcGxhdGVSZWdpc3RyeUtleSwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIEpTVGVtcGxhdGVSZWdpc3RyeUtleSomIHRlbXBs
YXRlUmVnaXN0cnlLZXlJbk1hcCA9IG1fdGVtcGxhdGVSZWdpc3RyeUtleU1hcC5hZGQodGVtcGxh
dGVSZWdpc3RyeUtleS5jb3B5UmVmKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBp
ZiAoIXRlbXBsYXRlUmVnaXN0cnlLZXlJbk1hcCkgewotICAgICAgICB0ZW1wbGF0ZVJlZ2lzdHJ5
S2V5SW5NYXAgPSBKU1RlbXBsYXRlUmVnaXN0cnlLZXk6OmNyZWF0ZSgqdm0oKSwgdGVtcGxhdGVS
ZWdpc3RyeUtleSk7CisgICAgICAgIHRlbXBsYXRlUmVnaXN0cnlLZXlJbk1hcCA9IEpTVGVtcGxh
dGVSZWdpc3RyeUtleTo6Y3JlYXRlKCp2bSgpLCBXVEZNb3ZlKHRlbXBsYXRlUmVnaXN0cnlLZXkp
KTsKICAgICAgICAgYWRkQ29uc3RhbnRWYWx1ZSh0ZW1wbGF0ZVJlZ2lzdHJ5S2V5SW5NYXApOwog
ICAgIH0KICAgICByZXR1cm4gdGVtcGxhdGVSZWdpc3RyeUtleUluTWFwOwpAQCAtNDM5OCw3ICs0
Mzk4LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRUZW1wbGF0ZU9i
amVjdChSZWdpc3RlcklEKiBkc3QsIFRhZ2dlZFRlbXAKICAgICB9CiAKICAgICBDYWxsQXJndW1l
bnRzIGFyZ3VtZW50cygqdGhpcywgbnVsbHB0cik7Ci0gICAgZW1pdExvYWQoYXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBKU1ZhbHVlKGFkZFRlbXBsYXRlUmVnaXN0cnlLZXlDb25zdGFudChUZW1w
bGF0ZVJlZ2lzdHJ5S2V5KHJhd1N0cmluZ3MsIGNvb2tlZFN0cmluZ3MpKSkpOworICAgIGVtaXRM
b2FkKGFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgSlNWYWx1ZShhZGRUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Q29uc3RhbnQobV92bS0+dGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlKCkuY3JlYXRlS2V5KHJh
d1N0cmluZ3MsIGNvb2tlZFN0cmluZ3MpKSkpOwogICAgIHJldHVybiBlbWl0Q2FsbChkc3QsIGdl
dFRlbXBsYXRlT2JqZWN0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3VtZW50cywgdGFn
Z2VkVGVtcGxhdGUtPmRpdm90KCksIHRhZ2dlZFRlbXBsYXRlLT5kaXZvdFN0YXJ0KCksIHRhZ2dl
ZFRlbXBsYXRlLT5kaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgKaW5kZXggZWFjZTRhNjk3MzUyYjQxYmRjNDI0ZTFhNjlkYjcyMWNlNTQ0MTFhYi4uOTMyMDRk
OGYzYWQ1MWM1MzI1Mzc1ZjhhMjI1MDUyOTEyZjIxMDI5NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtODAx
LDcgKzgwMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxk
b3VibGUsIEpTVmFsdWU+IE51bWJlck1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFVuaXF1
ZWRTdHJpbmdJbXBsKiwgSlNTdHJpbmcqLCBJZGVudGlmaWVyUmVwSGFzaD4gSWRlbnRpZmllclN0
cmluZ01hcDsKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFRlbXBsYXRlUmVnaXN0cnlLZXksIEpT
VGVtcGxhdGVSZWdpc3RyeUtleSo+IFRlbXBsYXRlUmVnaXN0cnlLZXlNYXA7CisgICAgICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4sIEpTVGVtcGxhdGVSZWdpc3Ry
eUtleSo+IFRlbXBsYXRlUmVnaXN0cnlLZXlNYXA7CiAgICAgICAgIAogICAgICAgICAvLyBIZWxw
ZXIgZm9yIGVtaXRDYWxsKCkgYW5kIGVtaXRDb25zdHJ1Y3QoKS4gVGhpcyB3b3JrcyBiZWNhdXNl
IHRoZSBzZXQgb2YKICAgICAgICAgLy8gZXhwZWN0ZWQgZnVuY3Rpb25zIGhhdmUgaWRlbnRpY2Fs
IGJlaGF2aW9yIGZvciBib3RoIGNhbGwgYW5kIGNvbnN0cnVjdApAQCAtODg1LDcgKzg4NSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICBKU1N0cmluZyogYWRkU3Ry
aW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYpOwotICAgICAgICBKU1RlbXBsYXRlUmVnaXN0
cnlLZXkqIGFkZFRlbXBsYXRlUmVnaXN0cnlLZXlDb25zdGFudChjb25zdCBUZW1wbGF0ZVJlZ2lz
dHJ5S2V5Jik7CisgICAgICAgIEpTVGVtcGxhdGVSZWdpc3RyeUtleSogYWRkVGVtcGxhdGVSZWdp
c3RyeUtleUNvbnN0YW50KFJlZjxUZW1wbGF0ZVJlZ2lzdHJ5S2V5Pik7CiAKICAgICAgICAgVmVj
dG9yPFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgaW5zdHJ1
Y3Rpb25zKCkgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGFlMjZjODY0NjMzNGQ0
ZjI5MzQ5ZjViN2EzYWM0ZDMyNTk0Y2E4YWMuLmZkYmMxMzg0MDc3ZjhhNjhlYzAyZWVlOTI0ZTUx
OTVmZDk1MTU1Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKQEAgLTI5MCw3ICsyOTAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnZXRUZW1wbGF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQodGhpc1Zh
bHVlLmluaGVyaXRzKEpTVGVtcGxhdGVSZWdpc3RyeUtleTo6aW5mbygpKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVn
aXN0cnkoKS5nZXRUZW1wbGF0ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Kj4odGhpc1ZhbHVlKS0+dGVtcGxhdGVSZWdpc3RyeUtleSgpKSk7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVnaXN0
cnkoKS5nZXRUZW1wbGF0ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5
Kj4odGhpc1ZhbHVlKSkpOwogfQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCmluZGV4IDNiOTc5N2NmYjU4MTdi
YWFiNzQ1NGE1OGY3ZTZiZDJmN2VkNjhkNjcuLjJmOThhYjFjYzE3NjU5MTNkN2FhZTNmNTBmY2Uw
NTNmNWU1Nzk1YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcApAQCAtMzUsMTUgKzM1LDE1IEBAIG5hbWVzcGFj
ZSBKU0MgewogY29uc3QgQ2xhc3NJbmZvIEpTVGVtcGxhdGVSZWdpc3RyeUtleTo6c19pbmZvID0g
eyAiVGVtcGxhdGVSZWdpc3RyeUtleSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5KSB9OwogCiAKLUpTVGVtcGxhdGVSZWdp
c3RyeUtleTo6SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5KFZNJiB2bSwgY29uc3QgVGVtcGxhdGVSZWdp
c3RyeUtleSYgdGVtcGxhdGVSZWdpc3RyeUtleSkKK0pTVGVtcGxhdGVSZWdpc3RyeUtleTo6SlNU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5KFZNJiB2bSwgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+JiYgdGVt
cGxhdGVSZWdpc3RyeUtleSkKICAgICA6IEJhc2Uodm0sIHZtLnRlbXBsYXRlUmVnaXN0cnlLZXlT
dHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX3RlbXBsYXRlUmVnaXN0cnlLZXkodGVtcGxhdGVSZWdp
c3RyeUtleSkKKyAgICAsIG1fdGVtcGxhdGVSZWdpc3RyeUtleShXVEZNb3ZlKHRlbXBsYXRlUmVn
aXN0cnlLZXkpKQogewogfQogCi1KU1RlbXBsYXRlUmVnaXN0cnlLZXkqIEpTVGVtcGxhdGVSZWdp
c3RyeUtleTo6Y3JlYXRlKFZNJiB2bSwgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYgdGVtcGxh
dGVSZWdpc3RyeUtleSkKK0pTVGVtcGxhdGVSZWdpc3RyeUtleSogSlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5OjpjcmVhdGUoVk0mIHZtLCBSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4mJiB0ZW1wbGF0ZVJl
Z2lzdHJ5S2V5KQogewotICAgIEpTVGVtcGxhdGVSZWdpc3RyeUtleSogcmVzdWx0ID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Pih2bS5oZWFwKSkgSlNU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5KHZtLCB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KTsKKyAgICBKU1RlbXBs
YXRlUmVnaXN0cnlLZXkqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTVGVt
cGxhdGVSZWdpc3RyeUtleT4odm0uaGVhcCkpIEpTVGVtcGxhdGVSZWdpc3RyeUtleSh2bSwgV1RG
TW92ZSh0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KSk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgKaW5kZXggZWQ2ZmU3ODEyODEyNGZh
N2YzYjg1NDY4ODZlYmNmMWQ2OWVkNTdjNi4uYTg0MzY1MWM0OTYyMmFjYTM5MmQzNzFjNzkxMjU3
Zjk0Y2U5ZmEyZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgSlNUZW1wbGF0
ZVJlZ2lzdHJ5S2V5IGZpbmFsIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMg
SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiBjcmVhdGUoVk0mLCBjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5Jik7CisgICAgc3RhdGljIEpTVGVtcGxhdGVSZWdpc3RyeUtleSogY3JlYXRlKFZNJiwgUmVm
PFRlbXBsYXRlUmVnaXN0cnlLZXk+JiYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewpAQCAtNDQsMTUgKzQ0LDE1IEBAIGNsYXNzIEpTVGVtcGxhdGVSZWdp
c3RyeUtleSBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAKICAgICBERUNM
QVJFX0lORk87CiAKLSAgICBjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5JiB0ZW1wbGF0ZVJlZ2lz
dHJ5S2V5KCkgY29uc3QgeyByZXR1cm4gbV90ZW1wbGF0ZVJlZ2lzdHJ5S2V5OyB9CisgICAgY29u
c3QgVGVtcGxhdGVSZWdpc3RyeUtleSYgdGVtcGxhdGVSZWdpc3RyeUtleSgpIGNvbnN0IHsgcmV0
dXJuIG1fdGVtcGxhdGVSZWdpc3RyeUtleS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogcHJpdmF0ZToKLSAgICBKU1RlbXBsYXRlUmVn
aXN0cnlLZXkoVk0mLCBjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Jik7CisgICAgSlNUZW1wbGF0
ZVJlZ2lzdHJ5S2V5KFZNJiwgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+JiYpOwogCi0gICAgVGVt
cGxhdGVSZWdpc3RyeUtleSBtX3RlbXBsYXRlUmVnaXN0cnlLZXk7CisgICAgUmVmPFRlbXBsYXRl
UmVnaXN0cnlLZXk+IG1fdGVtcGxhdGVSZWdpc3RyeUtleTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVS
ZWdpc3RyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lz
dHJ5LmNwcAppbmRleCBmZGJhYTJiOGE2MDA2OWYyNjgyMGFlOTBlNGQ1MDliNGQwMWZiNTliLi4z
N2NlNDM3NjhiOGFjMGMxNzkzN2UwMjQxOTFmOGNjODU2N2RjZjJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcApAQCAtMjcsOSAr
MjcsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5
LmgiCiAKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0
cnlLZXkuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRlbXBs
YXRlUmVnaXN0cnlLZXkuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMzksOSArNDIsMTAgQEAgVGVtcGxhdGVSZWdpc3RyeTo6VGVtcGxhdGVS
ZWdpc3RyeShWTSYgdm0pCiB7CiB9CiAKLUpTQXJyYXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRl
bXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYg
dGVtcGxhdGVLZXkpCitKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVGVtcGxhdGVSZWdpc3RyeUtleSogdGVtcGxhdGVLZXlPYmpl
Y3QpCiB7Ci0gICAgSlNBcnJheSogY2FjaGVkID0gbV90ZW1wbGF0ZU1hcC5nZXQodGVtcGxhdGVL
ZXkpOworICAgIGF1dG8mIHRlbXBsYXRlS2V5ID0gdGVtcGxhdGVLZXlPYmplY3QtPnRlbXBsYXRl
UmVnaXN0cnlLZXkoKTsKKyAgICBKU0FycmF5KiBjYWNoZWQgPSBtX3RlbXBsYXRlTWFwLmdldCgm
dGVtcGxhdGVLZXkpOwogICAgIGlmIChjYWNoZWQpCiAgICAgICAgIHJldHVybiBjYWNoZWQ7CiAK
QEAgLTYzLDEwICs2NywxNCBAQCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0
ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFRlbXBsYXRlUmVnaQogCiAgICAgdGVtcGxh
dGVPYmplY3QtPnB1dERpcmVjdCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnJhdywgcmF3T2Jq
ZWN0LCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAKKyAgICAvLyBUZW1wbGF0
ZSBKU0FycmF5IGhvbGQgdGhlIHJlZmVyZW5jZSB0byBKU1RlbXBsYXRlUmVnaXN0cnlLZXkgdG8g
bWFrZSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5IHBvaW50ZXIgbGl2ZSB1bnRpbCB0aGlzIEpTQXJyYXkg
aXMgY29sbGVjdGVkLgorICAgIC8vIFRlbXBsYXRlUmVnaXN0cnlLZXkgcG9pbnRlciBpcyB1c2Vk
IGZvciBUZW1wbGF0ZVJlZ2lzdHJ5J3Mga2V5LgorICAgIHRlbXBsYXRlT2JqZWN0LT5wdXREaXJl
Y3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnRlbXBsYXRlUmVnaXN0cnlL
ZXlQcml2YXRlTmFtZSgpLCB0ZW1wbGF0ZUtleU9iamVjdCwgUmVhZE9ubHkgfCBEb250RW51bSB8
IERvbnREZWxldGUpOworCiAgICAgb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgdGVtcGxh
dGVPYmplY3QpOwogICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCi0gICAgbV90ZW1w
bGF0ZU1hcC5zZXQodGVtcGxhdGVLZXksIHRlbXBsYXRlT2JqZWN0KTsKKyAgICBtX3RlbXBsYXRl
TWFwLnNldCgmdGVtcGxhdGVLZXksIHRlbXBsYXRlT2JqZWN0KTsKIAogICAgIHJldHVybiB0ZW1w
bGF0ZU9iamVjdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1RlbXBsYXRlUmVnaXN0cnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBs
YXRlUmVnaXN0cnkuaAppbmRleCA2OTNjNWVmOTFiY2RhZTYwODAyZDFhMmVkMjU4Y2RkY2ZhMGE1
ZTBhLi41MWYzZWI5YjJjNTYzOWQzNjA4MmY4YzE1Y2Q3YTM4NTEzNGE5NTg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5oCkBAIC0yNiwy
MCArMjYsMjMgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1
ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXkuaCIKICNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNpbmNs
dWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y2xhc3MgSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5OworY2xhc3MgVGVtcGxhdGVSZWdpc3RyeUtleTsK
KwogY2xhc3MgVGVtcGxhdGVSZWdpc3RyeSB7CiBwdWJsaWM6CiAgICAgVGVtcGxhdGVSZWdpc3Ry
eShWTSYpOwogCi0gICAgSlNBcnJheSogZ2V0VGVtcGxhdGVPYmplY3QoRXhlY1N0YXRlKiwgY29u
c3QgVGVtcGxhdGVSZWdpc3RyeUtleSYpOworICAgIEpTQXJyYXkqIGdldFRlbXBsYXRlT2JqZWN0
KEV4ZWNTdGF0ZSosIEpTVGVtcGxhdGVSZWdpc3RyeUtleSopOwogCiBwcml2YXRlOgotICAgIFdl
YWtHQ01hcDxUZW1wbGF0ZVJlZ2lzdHJ5S2V5LCBKU0FycmF5PiBtX3RlbXBsYXRlTWFwOworICAg
IFdlYWtHQ01hcDxjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiwgSlNBcnJheT4gbV90ZW1wbGF0
ZU1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjQ4
NGUzNWU4N2Y0YjJlZTIwZmY0OGQwOWY3NzFjNDFiZDNlMDliCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKQEAg
LTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleS5oIgorCisjaW5jbHVkZSAiVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitUZW1wbGF0ZVJlZ2lzdHJ5S2V5
Ojp+VGVtcGxhdGVSZWdpc3RyeUtleSgpCit7CisgICAgaWYgKG1fdGFibGUpCisgICAgICAgIG1f
dGFibGUtPnVucmVnaXN0ZXIodGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5oCmlu
ZGV4IDQyMWMzMDFkNjlmZjViZTI5ZGM0NjU3YTYyYmQxNzdiODFlYzYzODAuLjU2ZjgyNTQxZmI2
NzM5NmQ4OGM4NWJiODliMTg2MzZkOWI3ZWM4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgKQEAgLTMyLDExICszMiwxMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgVGVtcGxhdGVSZWdpc3RyeUtleSB7CitjbGFz
cyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGU7CisKK2NsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXkg
OiBwdWJsaWMgUmVmQ291bnRlZDxUZW1wbGF0ZVJlZ2lzdHJ5S2V5PiB7CiBwdWJsaWM6CisgICAg
ZnJpZW5kIGNsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZTsKICAgICB0eXBlZGVmIFZlY3Rv
cjxTdHJpbmcsIDQ+IFN0cmluZ1ZlY3RvcjsKIAotICAgIFRlbXBsYXRlUmVnaXN0cnlLZXkoY29u
c3QgU3RyaW5nVmVjdG9yJiByYXdTdHJpbmdzLCBjb25zdCBTdHJpbmdWZWN0b3ImIGNvb2tlZFN0
cmluZ3MpOwogICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CiAgICAg
VGVtcGxhdGVSZWdpc3RyeUtleShEZWxldGVkVmFsdWVUYWcpOwogICAgIGVudW0gRW1wdHlWYWx1
ZVRhZyB7IEVtcHR5VmFsdWUgfTsKQEAgLTYwLDcgKzYyLDI1IEBAIGNsYXNzIFRlbXBsYXRlUmVn
aXN0cnlLZXkgewogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IGZhbHNlOwogICAgIH07CiAKKyAgICBzdGF0aWMgdW5zaWduZWQgY2FsY3Vs
YXRlSGFzaChjb25zdCBTdHJpbmdWZWN0b3ImIHJhd1N0cmluZ3MpCisgICAgeworICAgICAgICB1
bnNpZ25lZCBoYXNoID0gMDsKKyAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIHN0cmluZyA6IHJh
d1N0cmluZ3MpCisgICAgICAgICAgICBoYXNoICs9IFdURjo6U3RyaW5nSGFzaDo6aGFzaChzdHJp
bmcpOworICAgICAgICByZXR1cm4gaGFzaDsKKyAgICB9CisKKyAgICB+VGVtcGxhdGVSZWdpc3Ry
eUtleSgpOworCiBwcml2YXRlOgorICAgIHN0YXRpYyBSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4g
Y3JlYXRlKGNvbnN0IFN0cmluZ1ZlY3RvciYgcmF3U3RyaW5ncywgY29uc3QgU3RyaW5nVmVjdG9y
JiBjb29rZWRTdHJpbmdzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGVt
cGxhdGVSZWdpc3RyeUtleShyYXdTdHJpbmdzLCBjb29rZWRTdHJpbmdzKSk7CisgICAgfQorCisg
ICAgVGVtcGxhdGVSZWdpc3RyeUtleShjb25zdCBTdHJpbmdWZWN0b3ImIHJhd1N0cmluZ3MsIGNv
bnN0IFN0cmluZ1ZlY3RvciYgY29va2VkU3RyaW5ncyk7CisKKyAgICBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5VGFibGUqIG1fdGFibGUgeyBudWxscHRyIH07CiAgICAgU3RyaW5nVmVjdG9yIG1fcmF3U3Ry
aW5nczsKICAgICBTdHJpbmdWZWN0b3IgbV9jb29rZWRTdHJpbmdzOwogICAgIHVuc2lnbmVkIG1f
aGFzaCB7IDAgfTsKQEAgLTY5LDEwICs4OSw4IEBAIGNsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXkg
ewogaW5saW5lIFRlbXBsYXRlUmVnaXN0cnlLZXk6OlRlbXBsYXRlUmVnaXN0cnlLZXkoY29uc3Qg
U3RyaW5nVmVjdG9yJiByYXdTdHJpbmdzLCBjb25zdCBTdHJpbmdWZWN0b3ImIGNvb2tlZFN0cmlu
Z3MpCiAgICAgOiBtX3Jhd1N0cmluZ3MocmF3U3RyaW5ncykKICAgICAsIG1fY29va2VkU3RyaW5n
cyhjb29rZWRTdHJpbmdzKQorICAgICwgbV9oYXNoKGNhbGN1bGF0ZUhhc2gocmF3U3RyaW5ncykp
CiB7Ci0gICAgbV9oYXNoID0gMDsKLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgc3RyaW5nIDogcmF3
U3RyaW5ncykKLSAgICAgICAgbV9oYXNoICs9IFdURjo6U3RyaW5nSGFzaDo6aGFzaChzdHJpbmcp
OwogfQogCiBpbmxpbmUgVGVtcGxhdGVSZWdpc3RyeUtleTo6VGVtcGxhdGVSZWdpc3RyeUtleShE
ZWxldGVkVmFsdWVUYWcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWQ2MGU5MTYx
NTc5MzVkMzczYmNjMjZlNzQyMmYwMzllYWI3ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcApAQCAt
MCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCIKKworI2luY2x1ZGUgIlRlbXBsYXRl
UmVnaXN0cnlLZXkuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBUZW1wbGF0ZVJlZ2lz
dHJ5S2V5VHJhbnNsYXRvciB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVGVtcGxhdGVSZWdp
c3RyeUtleSogZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci0+aGFz
aCgpOworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChUZW1wbGF0ZVJlZ2lz
dHJ5S2V5KiBrZXksIFRlbXBsYXRlUmVnaXN0cnlLZXkqIGdlbmVyYXRvcikKKyAgICB7CisgICAg
ICAgIHJldHVybiAqa2V5ID09ICpnZW5lcmF0b3I7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
dHJhbnNsYXRlKFRlbXBsYXRlUmVnaXN0cnlLZXkqJiBsb2NhdGlvbiwgVGVtcGxhdGVSZWdpc3Ry
eUtleSogZ2VuZXJhdG9yLCB1bnNpZ25lZCkKKyAgICB7CisgICAgICAgIGxvY2F0aW9uID0gZ2Vu
ZXJhdG9yOworICAgIH0KK307CisKK1RlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZTo6flRlbXBsYXRl
UmVnaXN0cnlLZXlUYWJsZSgpCit7CisgICAgZm9yIChhdXRvJiBrZXkgOiBtX2F0b21pY1RhYmxl
KQorICAgICAgICBrZXktPm1fdGFibGUgPSBudWxscHRyOworfQorCitSZWY8VGVtcGxhdGVSZWdp
c3RyeUtleT4gVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlOjpjcmVhdGVLZXkoY29uc3QgVGVtcGxh
dGVSZWdpc3RyeUtleTo6U3RyaW5nVmVjdG9yJiByYXdTdHJpbmdzLCBjb25zdCBUZW1wbGF0ZVJl
Z2lzdHJ5S2V5OjpTdHJpbmdWZWN0b3ImIGNvb2tlZFN0cmluZ3MpCit7CisgICAgUmVmPFRlbXBs
YXRlUmVnaXN0cnlLZXk+IGtleSA9IFRlbXBsYXRlUmVnaXN0cnlLZXk6OmNyZWF0ZShyYXdTdHJp
bmdzLCBjb29rZWRTdHJpbmdzKTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYXRvbWljVGFibGUu
YWRkPFRlbXBsYXRlUmVnaXN0cnlLZXlUcmFuc2xhdG9yPihrZXkucHRyKCkpOworICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgKCphZGRSZXN1bHQuaXRlcmF0b3IpLT5tX3Rh
YmxlID0gdGhpczsKKworICAgIHJldHVybiAqKmFkZFJlc3VsdC5pdGVyYXRvcjsKK30KKwordm9p
ZCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGU6OnVucmVnaXN0ZXIoVGVtcGxhdGVSZWdpc3RyeUtl
eSoga2V5KQoreworICAgIEFTU0VSVChrZXktPm1fdGFibGUgPT0gdGhpcyk7CisgICAgYXV0byBp
dGVyYXRvciA9IG1fYXRvbWljVGFibGUuZmluZChrZXkpOworICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoaXRlcmF0b3IgIT0gbV9hdG9taWNUYWJsZS5lbmQoKSwgIlRoZSBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5IGJlaW5nIHJlbW92ZWQgaXMgcmVnaXN0ZXJlZCBpbiB0aGUgb3RoZXIgVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLiIpOworICAgIG1fYXRvbWljVGFibGUucmVtb3ZlKGl0ZXJhdG9yKTsKKwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdlNjUz
ZDBjNjY5ZDhiZDFlNmM5MzBmZDAzMGYwZTNlZmM2YTE3MQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVzdWtlIFN1enVraSA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUpOworcHVibGljOgorICAg
IHR5cGVkZWYgVmVjdG9yPFN0cmluZywgND4gU3RyaW5nVmVjdG9yOworCisgICAgVGVtcGxhdGVS
ZWdpc3RyeUtleVRhYmxlKCkgPSBkZWZhdWx0OworCisgICAgUmVmPFRlbXBsYXRlUmVnaXN0cnlL
ZXk+IGNyZWF0ZUtleShjb25zdCBTdHJpbmdWZWN0b3ImIHJhd1N0cmluZ3MsIGNvbnN0IFN0cmlu
Z1ZlY3RvciYgY29va2VkU3RyaW5ncyk7CisKKyAgICB2b2lkIHVucmVnaXN0ZXIoVGVtcGxhdGVS
ZWdpc3RyeUtleSopOworCisgICAgc3RydWN0IEtleUhhc2ggeworICAgICAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiBrZXkpIHsgcmV0dXJuIGtleS0+
aGFzaCgpOyB9CisgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRlbXBsYXRlUmVnaXN0
cnlLZXkqIGEsIGNvbnN0IFRlbXBsYXRlUmVnaXN0cnlLZXkqIGIpIHsgcmV0dXJuICphID09ICpi
OyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gZmFsc2U7CisgICAgfTsKKworICAgIH5UZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUoKTsK
KworcHJpdmF0ZToKKyAgICBIYXNoU2V0PFRlbXBsYXRlUmVnaXN0cnlLZXkqLCBLZXlIYXNoPiBt
X2F0b21pY1RhYmxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaAppbmRleCBkNWM5N2JlYTJhMTMyMDcyNzllZDM5MTllNjEzMDQzMWUxODI0OTI1
Li5jNmQyNjg0N2UyNTQ1ZWE1NzA1MzkxZjU3OTBlODQ2YzI1OTA5ZmY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmlu
Z3MuaCIKICNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5j
bHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0
b3JzLmgiCiAjaW5jbHVkZSAiVk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKQEAgLTM0OSw2ICszNTAsNyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxWTT4gewogCiAgICAgQXRvbWljU3RyaW5nVGFibGUqIG1fYXRvbWljU3RyaW5nVGFibGU7
CiAgICAgV1RGOjpTeW1ib2xSZWdpc3RyeSBtX3N5bWJvbFJlZ2lzdHJ5OworICAgIFRlbXBsYXRl
UmVnaXN0cnlLZXlUYWJsZSBtX3RlbXBsYXRlUmVnaXN0cnlLZXl0YWJsZTsKICAgICBDb21tb25J
ZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsKICAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciogZW1wdHlMaXN0OyAvLyBMaXN0cyBhcmUgc3VwcG9zZWQgdG8gYmUgYWxsb2NhdGVkIG9uIHRo
ZSBzdGFjayB0byBoYXZlIHRoZWlyIGVsZW1lbnRzIHByb3Blcmx5IG1hcmtlZCwgd2hpY2ggaXMg
bm90IHRoZSBjYXNlIGhlcmUgLSBidXQgdGhpcyBsaXN0IGhhcyBub3RoaW5nIHRvIG1hcmsuCiAg
ICAgU21hbGxTdHJpbmdzIHNtYWxsU3RyaW5nczsKQEAgLTM2Miw2ICszNjQsOCBAQCBjbGFzcyBW
TSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4gewogICAgIEF0b21pY1N0cmluZ1Rh
YmxlKiBhdG9taWNTdHJpbmdUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXRvbWljU3RyaW5nVGFi
bGU7IH0KICAgICBXVEY6OlN5bWJvbFJlZ2lzdHJ5JiBzeW1ib2xSZWdpc3RyeSgpIHsgcmV0dXJu
IG1fc3ltYm9sUmVnaXN0cnk7IH0KIAorICAgIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZSYgdGVt
cGxhdGVSZWdpc3RyeUtleVRhYmxlKCkgeyByZXR1cm4gbV90ZW1wbGF0ZVJlZ2lzdHJ5S2V5dGFi
bGU7IH0KKwogICAgIFdlYWtHQ01hcDxTeW1ib2xJbXBsKiwgU3ltYm9sLCBQdHJIYXNoPFN5bWJv
bEltcGwqPj4gc3ltYm9sSW1wbFRvU3ltYm9sTWFwOwogCiAgICAgZW51bSBjbGFzcyBEZWxldGVQ
cm9wZXJ0eU1vZGUgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0No
YW5nZUxvZwppbmRleCBhMTE5ZWRlZmU0MzExNTRjZmYzYmE0MTIwZDg0NGI4NjhiM2QxYTg3Li5m
NTQ5NTBiNTdlYTg4ZjBmNjEyZjM0ZmIyYWU2ZWE0MjdhZGZhYWUyIDEwMDY0NAotLS0gYS9KU1Rl
c3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisy
MDE2LTExLTE5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAg
ICAgIENyYXNoIGluIGNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZTogV1RGOjpUaHJlYWRTcGVjaWZp
YzxXVEY6OldURlRocmVhZERhdGEsICsgMTQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQ4OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy90YWdnZWQtdGVtcGxhdGUtcmVnaXN0cnkta2V5
LWNvbGxlY3QuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAodGFnKToK
KyAgICAgICAgKGkuZXZhbCk6CisgICAgICAgICogc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdp
c3RyeS1rZXkuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAodGFnKToK
KyAgICAgICAgKGEpOgorICAgICAgICAoYik6CisKIDIwMTYtMTEtMTggIFl1c3VrZSBTdXp1a2kg
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjA4ODY3KTog
SlNDIHRlc3QgZmFpbHVyZTogQ2hha3JhQ29yZS55YW1sL0NoYWtyYUNvcmUvdGVzdC9zdHJpY3Qv
MDUuYXJndW1lbnRzX3NtLmpzLmRlZmF1bHQKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3Rh
Z2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1rZXktY29sbGVjdC5qcyBiL0pTVGVzdHMvc3RyZXNzL3Rh
Z2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1rZXktY29sbGVjdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMWNkOTEw
ODE5ZGQzNzcwNzhkNzVmZTA1NGZlNWUyNjhlNWZkOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvdGFnZ2VkLXRlbXBsYXRlLXJlZ2lzdHJ5LWtleS1jb2xsZWN0LmpzCkBAIC0w
LDAgKzEsMTYgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBp
ZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFs
dWU6ICcgKyBhY3R1YWwpOworfQorCisKK2Z1bmN0aW9uIHRhZyhzaXRlKQoreworICAgIHJldHVy
biBzaXRlOworfQorCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkKKyAgICAg
ICAgZXZhbChgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhZ1xgJHtpfVxgOyB9KSgpYCk7Cit9Citn
YygpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvdGFnZ2VkLXRlbXBsYXRlLXJlZ2lzdHJ5
LWtleS5qcyBiL0pTVGVzdHMvc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1rZXkuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWViODc3NTcxOWRkZDJmZWI5NTI1MDhiYmIyNWZhNjRkZjgyNDg2MAotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1r
ZXkuanMKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3Rl
ZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHRhZyhzaXRlKQorewor
ICAgIHJldHVybiBzaXRlOworfQorCit7CisgICAgZnVuY3Rpb24gYSgpIHsKKyAgICAgICAgcmV0
dXJuIHRhZ2BIZWxsb2A7CisgICAgfQorCisgICAgZnVuY3Rpb24gYigpIHsKKyAgICAgICAgcmV0
dXJuIHRhZ2BIZWxsb2A7CisgICAgfQorCisgICAgc2hvdWxkQmUoYSgpID09PSBiKCksIHRydWUp
OworICAgIGdjKCk7CisgICAgdmFyIHRhZ0EgPSBhKCk7CisgICAgZ2MoKTsKKyAgICBzaG91bGRC
ZSh0YWdBID09PSBiKCksIHRydWUpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295260</attachid>
            <date>2016-11-19 01:28:04 -0800</date>
            <delta_ts>2016-11-19 02:40:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164898-20161119182755.patch</filename>
            <type>text/plain</type>
            <size>32571</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZjMyMTk1ZTc1YzUwZDkyZjdkNWYxYzJmZjQ2M2Q0NzMxNGMxMjU2Li43MjM2ZTgzZmU2ZGM4YTYx
YjRiMzljMTAyNDdjYzViOGI2MWQ1YWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNi0xMS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDcmFzaCBpbiBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmU6IFdURjo6
VGhyZWFkU3BlY2lmaWM8V1RGOjpXVEZUaHJlYWREYXRhLCArIDE0MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNhbGxzaXRlIG9iamVjdCAoSlNB
cnJheSkgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWwgaXMgbWFuYWdlZCBieSBXZWFrR0NNYXAg
c2luY2UKKyAgICAgICAgc2FtZSB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbCBuZWVkIHRvIHJldHVy
biBhbiBpZGVudGljYWwgb2JqZWN0LgorICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIHVz
ZWQgVGVtcGxhdGVSZWdpc3RyeUtleSBhcyB0aGUga2V5IG9mIHRoZSBXZWFrR0NNYXAuIFdlYWtH
Q01hcAorICAgICAgICBjYW4gcHJ1bmUgaXRzIGVudHJpZXMgaW4gdGhlIGNvbGxlY3RvciB0aHJl
YWQuIEF0IHRoYXQgdGltZSwgdGhpcyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5CisgICAgICAgIGlzIGRl
YWxsb2NhdGVkLiBTaW5jZSBpdCBpbmNsdWRlcyBTdHJpbmcgKGFuZCB0aGVuLCBTdHJpbmdJbXBs
KSwgd2UgYWNjaWRlbnRhbGx5IGNhbGwKKyAgICAgICAgcmVmKCksIGRlcmVmKCkgYW5kIFN0cmlu
Z0ltcGw6OmRlc3Ryb3koKSBpbiB0aGUgZGlmZmVyZW50IHRocmVhZCBmcm9tIHRoZSBtYWluIHRo
cmVhZAorICAgICAgICB3aGlsZSB0aGlzIFRlbXBsYXRlUmVnaXN0cnlLZXkgaXMgYWxsb2NhdGVk
IGluIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICBJbnN0ZWFkLCB3ZSB1c2UgVGVtcGxhdGVS
ZWdpc3RyeUtleSogYXMgdGhlIGtleSBvZiBXZWFrR0NNYXAuIFRoZW4sIHRvIGtlZXAgaXRzIGxp
dmVuZXNzCisgICAgICAgIHdoaWxlIHRoZSBlbnRyeSBvZiB0aGUgV2Vha0dDTWFwIGlzIGFsaXZl
LCB0aGUgY2FsbHNpdGUgb2JqZWN0IGhhcyB0aGUgcmVmZXJlbmNlIHRvCisgICAgICAgIHRoZSBK
U1RlbXBsYXRlUmVnaXN0cnlLZXkuIEFuZCBpdCBob2xkcyBSZWY8VGVtcGxhdGVSZWdpc3RyeUtl
eT4uCisKKyAgICAgICAgQW5kIG5vdyB3ZSBuZWVkIHRvIGxvb2t1cCBXZWFrR0NNYXAgd2l0aCBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5Ki4gVG8gZG8gc28sIHdlIGNyZWF0ZQorICAgICAgICBpbnRlcm5p
bmcgc3lzdGVtIGZvciBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LiBJdCBpcyBzaW1pbGFyIHRvIEF0b21p
Y1N0cmluZ1RhYmxlIGFuZAorICAgICAgICBTeW1ib2xSZWdpc3RyeS4gVGVtcGxhdGVSZWdpc3Ry
eUtleSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGlzIHRhYmxlLiBUaGlzIHRhYmxlIGF0b21pemUgdGhl
CisgICAgICAgIFRlbXBsYXRlUmVnaXN0cnlLZXkuIFNvIHdlIGNhbiB1c2UgdGhlIHBvaW50ZXIg
Y29tcGFyaXNvbiBiZXR3ZWVuIFRlbXBsYXRlUmVnaXN0cnlLZXkuCisgICAgICAgIEl0IGFsbG93
cyB1cyB0byBsb29rdXAgdGhlIGVudHJ5IGZyb20gV2Vha0dDTWFwIGJ5IFRlbXBsYXRlUmVnaXN0
cnlLZXkqLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBidWlsdGlucy9CdWls
dGluTmFtZXMuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkVGVtcGxhdGVSZWdpc3RyeUtl
eUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRUZW1w
bGF0ZU9iamVjdCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Omdl
dFRlbXBsYXRlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtl
eS5jcHA6CisgICAgICAgIChKU0M6OkpTVGVtcGxhdGVSZWdpc3RyeUtleTo6SlNUZW1wbGF0ZVJl
Z2lzdHJ5S2V5KToKKyAgICAgICAgKEpTQzo6SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Lmg6CisgICAgICAgICog
cnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdp
c3RyeTo6Z2V0VGVtcGxhdGVPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdp
c3RyeS5oOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuaC4K
KyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3RyeUtleTo6flRlbXBsYXRlUmVnaXN0cnlLZXkp
OgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5oOgorICAgICAgICAoSlND
OjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjYWxjdWxhdGVIYXNoKToKKyAgICAgICAgKEpTQzo6VGVt
cGxhdGVSZWdpc3RyeUtleTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3Ry
eUtleTo6VGVtcGxhdGVSZWdpc3RyeUtleSk6CisgICAgICAgICogcnVudGltZS9UZW1wbGF0ZVJl
Z2lzdHJ5S2V5VGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3Ry
eUtleVRyYW5zbGF0b3I6Omhhc2gpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5
VHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5VHJh
bnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3RyeUtleVRh
YmxlOjp+VGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVS
ZWdpc3RyeUtleVRhYmxlOjpjcmVhdGVLZXkpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lz
dHJ5S2V5VGFibGU6OnVucmVnaXN0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVGVtcGxhdGVSZWdpc3RyeUtleS5oLgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5
S2V5VGFibGU6OktleUhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5
S2V5VGFibGU6OktleUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAg
ICAgIChKU0M6OlZNOjp0ZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUpOgorCiAyMDE2LTExLTE5ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggbWlzc2luZyBleGNl
cHRpb24gY2hlY2tzIGluIEpTQyBpbnNwZWN0b3IgZmlsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggZWZlZWYyZWFjZWI4OTZmMjExZGM2ODBmMWEwNDE2N2RhZWFlOWE0
Mi4uMGJjMmU3MzhiYmJmODg5MDFjNmNkY2RiMmVmNWJhZWU1YTZmYjQyMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtODY2LDYgKzg2Niw4IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCiAgICAgcnVudGlt
ZS9TeW1ib2xUYWJsZS5jcHAKICAgICBydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCisgICAg
cnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAorICAgIHJ1bnRpbWUvVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLmNwcAogICAgIHJ1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAogICAgIHJ1
bnRpbWUvVGhyb3dTY29wZS5jcHAKICAgICBydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MzA4YzdkNTRiODBmYTlkM2M0MzBhNjM3
ZjI2ZWNmMjY5ZmQyMTA1Li40NGIyN2I3NWEyYWE5ODNjNmNiOGZhY2M0NDc0YWE2MTYzNjg4YmMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMyOSw2ICsyMzI5LDkgQEAKIAkJ
RkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyog
V2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjA0MDUwMUFB
RTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovOyB9OwogCQlGRUZENkZD
NjFENUU3OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyog
SlNTdHJpbmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMUE4ODI2QjE2NTNDNENEMUE2NDI5ODNCIC8qIFRlbXBsYXRlUmVnaXN0cnlL
ZXlUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNw
cCAqLzsgfTsKKwkJNzgyNzREOEU0QzRENEZDRDlBMURDNkU2IC8qIFRlbXBsYXRlUmVnaXN0cnlL
ZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkRC
NEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwICovOyB9Owor
CQk5NUQ0MjYxQUY0Qzg0Q0UyQUNCQUM5ODEgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZDMkYzN0FC
NzY0ODNBOTk2NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggKi87IH07CiAvKiBF
bmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVBy
b3h5IHNlY3Rpb24gKi8KQEAgLTQ4MTksNiArNDgyMiw5IEBACiAJCUZFRjA0MDUwMUFBRTY2MkQw
MEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0LmNwcDsgcGF0aCA9IEFQSS90ZXN0cy9D
b21wYXJlQW5kU3dhcFRlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRUYw
NDA1MjFBQUVDNEVEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvbXBhcmVBbmRTd2FwVGVzdC5oOyBwYXRoID0gQVBJL3Rl
c3RzL0NvbXBhcmVBbmRTd2FwVGVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
RUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk4QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3Ry
eUtleVRhYmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRlbXBs
YXRlUmVnaXN0cnlLZXlUYWJsZS5jcHA7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCREI0QjVFMDk5Q0Q0QzFCQjNDMUNG
MDUgLyogVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0
cnlLZXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwOEZDMkYzN0FCNzY0ODNB
OTk2NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oOyBwYXRoID0gVGVtcGxh
dGVSZWdpc3RyeUtleVRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAvKiBFbmQg
UEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTY2MzcsNiArNjY0Myw5IEBACiAJCQkJMTQ3MzQxRDkxREMw
MzAwMTAwQUEyOUJBIC8qIFdlYkFzc2VtYmx5RXhlY3V0YWJsZS5oICovLAogCQkJCUE3RENCNzc5
MTJFM0Q5MDUwMDkxMTk0MCAvKiBXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlDMkI2RDc1MjE4QTMz
NzkzMDA0QTkzMDEgLyogV3JpdGVCYXJyaWVySW5saW5lcy5oICovLAorCQkJCThCNDdGMjM0MzY2
QzRCNzJBQzg1MkE3RSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwICovLAorCQkJCUJE
QjRCNUUwOTlDRDRDMUJCM0MxQ0YwNSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCAqLywKKwkJ
CQkwOEZDMkYzN0FCNzY0ODNBOTk2NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IHJ1bnRpbWU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtODk3MSw2ICs4OTgwLDcgQEAKIAkJCQlBNzlEM0VEOUM1MDY0REQwQTg0NjZBM0EgLyog
TW9kdWxlU2NvcGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlEOTcyMjc1MkRDNTQ0NTlCOTEy
NUI1MzkgLyogSlNNb2R1bGVMb2FkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ3M0RBNEE0NzY0
QzQ1RkU4NzFCMDQ4NSAvKiBEZWZpbmVQcm9wZXJ0eUF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTk1RDQyNjFBRjRDODRDRTJBQ0JBQzk4MSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFi
bGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTAzNjMsNiArMTAzNzMsOCBAQAogCQkJCTg2NzA0QjQy
MTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjJCQkQ5OTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTEzRkVDRTA2RDNCNDQ1RkNCNkM5MzQ2MSAvKiBKU01vZHVsZUxvYWRl
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQTg4MjZCMTY1M0M0Q0QxQTY0Mjk4M0IgLyogVGVt
cGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc4Mjc0RDhFNEM0
RDRGQ0Q5QTFEQzZFNiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGQ3
NDEyZDc5YjRiNmQ3OWQwNDc1MTk3ZWIwZWI2MjU0MGFkMjgxZmIuLmZkNzhhMDUzODEwYWY5YWY0
Njk5NTYwZTAzOGExNWVkZDYwYjdmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVp
bHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTgxLDYgKzgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgbWFjcm8oQnVpbHRpbkxvZykgXAogICAgIG1hY3JvKGhvbWVPYmplY3QpIFwKICAgICBtYWNy
byhnZXRUZW1wbGF0ZU9iamVjdCkgXAorICAgIG1hY3JvKHRlbXBsYXRlUmVnaXN0cnlLZXkpIFwK
ICAgICBtYWNybyhlbnF1ZXVlSm9iKSBcCiAgICAgbWFjcm8oaGFuZGxlcikgXAogICAgIG1hY3Jv
KHByb21pc2VTdGF0ZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3ZjBlMzEzNzU1ZjI0ZDljZWZm
ZDBjNzlhNjM1ZGE2NzU1ODA5NmVhLi5hMzNmMzc4MTc4N2EwZmMwZmU5NjliMDNlNjAxYTMwY2Ew
NTk0ZjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMjk5NSwxMSArMjk5NSwxMSBAQCBKU1N0cmlu
ZyogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFN0cmluZ0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIpCiAgICAgcmV0dXJuIHN0cmluZ0luTWFwOwogfQogCi1KU1RlbXBsYXRlUmVn
aXN0cnlLZXkqIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRUZW1wbGF0ZVJlZ2lzdHJ5S2V5Q29uc3Rh
bnQoY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYgdGVtcGxhdGVSZWdpc3RyeUtleSkKK0pTVGVt
cGxhdGVSZWdpc3RyeUtleSogQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFRlbXBsYXRlUmVnaXN0cnlL
ZXlDb25zdGFudChSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4gdGVtcGxhdGVSZWdpc3RyeUtleSkK
IHsKLSAgICBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqJiB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5SW5NYXAg
PSBtX3RlbXBsYXRlUmVnaXN0cnlLZXlNYXAuYWRkKHRlbXBsYXRlUmVnaXN0cnlLZXksIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqJiB0ZW1wbGF0
ZVJlZ2lzdHJ5S2V5SW5NYXAgPSBtX3RlbXBsYXRlUmVnaXN0cnlLZXlNYXAuYWRkKHRlbXBsYXRl
UmVnaXN0cnlLZXkuY29weVJlZigpLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgaWYg
KCF0ZW1wbGF0ZVJlZ2lzdHJ5S2V5SW5NYXApIHsKLSAgICAgICAgdGVtcGxhdGVSZWdpc3RyeUtl
eUluTWFwID0gSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjcmVhdGUoKnZtKCksIHRlbXBsYXRlUmVn
aXN0cnlLZXkpOworICAgICAgICB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5SW5NYXAgPSBKU1RlbXBsYXRl
UmVnaXN0cnlLZXk6OmNyZWF0ZSgqdm0oKSwgV1RGTW92ZSh0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KSk7
CiAgICAgICAgIGFkZENvbnN0YW50VmFsdWUodGVtcGxhdGVSZWdpc3RyeUtleUluTWFwKTsKICAg
ICB9CiAgICAgcmV0dXJuIHRlbXBsYXRlUmVnaXN0cnlLZXlJbk1hcDsKQEAgLTQzOTgsNyArNDM5
OCw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0VGVtcGxhdGVPYmpl
Y3QoUmVnaXN0ZXJJRCogZHN0LCBUYWdnZWRUZW1wCiAgICAgfQogCiAgICAgQ2FsbEFyZ3VtZW50
cyBhcmd1bWVudHMoKnRoaXMsIG51bGxwdHIpOwotICAgIGVtaXRMb2FkKGFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgSlNWYWx1ZShhZGRUZW1wbGF0ZVJlZ2lzdHJ5S2V5Q29uc3RhbnQoVGVtcGxh
dGVSZWdpc3RyeUtleShyYXdTdHJpbmdzLCBjb29rZWRTdHJpbmdzKSkpKTsKKyAgICBlbWl0TG9h
ZChhcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIEpTVmFsdWUoYWRkVGVtcGxhdGVSZWdpc3RyeUtl
eUNvbnN0YW50KG1fdm0tPnRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZSgpLmNyZWF0ZUtleShyYXdT
dHJpbmdzLCBjb29rZWRTdHJpbmdzKSkpKTsKICAgICByZXR1cm4gZW1pdENhbGwoZHN0LCBnZXRU
ZW1wbGF0ZU9iamVjdC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmd1bWVudHMsIHRhZ2dl
ZFRlbXBsYXRlLT5kaXZvdCgpLCB0YWdnZWRUZW1wbGF0ZS0+ZGl2b3RTdGFydCgpLCB0YWdnZWRU
ZW1wbGF0ZS0+ZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Ok5vKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CmluZGV4IGVhY2U0YTY5NzM1MmI0MWJkYzQyNGUxYTY5ZGI3MjFjZTU0NDExYWIuLjkzMjA0ZDhm
M2FkNTFjNTMyNTM3NWY4YTIyNTA1MjkxMmYyMTAyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTgwMSw3
ICs4MDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8ZG91
YmxlLCBKU1ZhbHVlPiBOdW1iZXJNYXA7CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxVbmlxdWVk
U3RyaW5nSW1wbCosIEpTU3RyaW5nKiwgSWRlbnRpZmllclJlcEhhc2g+IElkZW50aWZpZXJTdHJp
bmdNYXA7Ci0gICAgICAgIHR5cGVkZWYgSGFzaE1hcDxUZW1wbGF0ZVJlZ2lzdHJ5S2V5LCBKU1Rl
bXBsYXRlUmVnaXN0cnlLZXkqPiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5TWFwOworICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+LCBKU1RlbXBsYXRlUmVnaXN0cnlL
ZXkqPiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5TWFwOwogICAgICAgICAKICAgICAgICAgLy8gSGVscGVy
IGZvciBlbWl0Q2FsbCgpIGFuZCBlbWl0Q29uc3RydWN0KCkuIFRoaXMgd29ya3MgYmVjYXVzZSB0
aGUgc2V0IG9mCiAgICAgICAgIC8vIGV4cGVjdGVkIGZ1bmN0aW9ucyBoYXZlIGlkZW50aWNhbCBi
ZWhhdmlvciBmb3IgYm90aCBjYWxsIGFuZCBjb25zdHJ1Y3QKQEAgLTg4NSw3ICs4ODUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgSlNTdHJpbmcqIGFkZFN0cmlu
Z0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImKTsKLSAgICAgICAgSlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5KiBhZGRUZW1wbGF0ZVJlZ2lzdHJ5S2V5Q29uc3RhbnQoY29uc3QgVGVtcGxhdGVSZWdpc3Ry
eUtleSYpOworICAgICAgICBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqIGFkZFRlbXBsYXRlUmVnaXN0
cnlLZXlDb25zdGFudChSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4pOwogCiAgICAgICAgIFZlY3Rv
cjxVbmxpbmtlZEluc3RydWN0aW9uLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGluc3RydWN0
aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCBhZTI2Yzg2NDYzMzRkNGYy
OTM0OWY1YjdhM2FjNGQzMjU5NGNhOGFjLi5mZGJjMTM4NDA3N2Y4YTY4ZWMwMmVlZTkyNGU1MTk1
ZmQ5NTE1NWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCkBAIC0yOTAsNyArMjkwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZ2V0VGVtcGxhdGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpT
VmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+dGhpc1ZhbHVlKCk7CiAgICAgQVNTRVJUKHRoaXNWYWx1
ZS5pbmhlcml0cyhKU1RlbXBsYXRlUmVnaXN0cnlLZXk6OmluZm8oKSkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT50ZW1wbGF0ZVJlZ2lz
dHJ5KCkuZ2V0VGVtcGxhdGVPYmplY3QoZXhlYywganNDYXN0PEpTVGVtcGxhdGVSZWdpc3RyeUtl
eSo+KHRoaXNWYWx1ZSktPnRlbXBsYXRlUmVnaXN0cnlLZXkoKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT50ZW1wbGF0ZVJlZ2lzdHJ5
KCkuZ2V0VGVtcGxhdGVPYmplY3QoZXhlYywganNDYXN0PEpTVGVtcGxhdGVSZWdpc3RyeUtleSo+
KHRoaXNWYWx1ZSkpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAppbmRleCAzYjk3OTdjZmI1ODE3YmFh
Yjc0NTRhNThmN2U2YmQyZjdlZDY4ZDY3Li4yZjk4YWIxY2MxNzY1OTEzZDdhYWUzZjUwZmNlMDUz
ZjVlNTc5NWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Rl
bXBsYXRlUmVnaXN0cnlLZXkuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKQEAgLTM1LDE1ICszNSwxNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNvbnN0IENsYXNzSW5mbyBKU1RlbXBsYXRlUmVnaXN0cnlLZXk6OnNfaW5mbyA9IHsg
IlRlbXBsYXRlUmVnaXN0cnlLZXkiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTVGVtcGxhdGVSZWdpc3RyeUtleSkgfTsKIAogCi1KU1RlbXBsYXRlUmVnaXN0
cnlLZXk6OkpTVGVtcGxhdGVSZWdpc3RyeUtleShWTSYgdm0sIGNvbnN0IFRlbXBsYXRlUmVnaXN0
cnlLZXkmIHRlbXBsYXRlUmVnaXN0cnlLZXkpCitKU1RlbXBsYXRlUmVnaXN0cnlLZXk6OkpTVGVt
cGxhdGVSZWdpc3RyeUtleShWTSYgdm0sIFJlZjxUZW1wbGF0ZVJlZ2lzdHJ5S2V5PiYmIHRlbXBs
YXRlUmVnaXN0cnlLZXkpCiAgICAgOiBCYXNlKHZtLCB2bS50ZW1wbGF0ZVJlZ2lzdHJ5S2V5U3Ry
dWN0dXJlLmdldCgpKQotICAgICwgbV90ZW1wbGF0ZVJlZ2lzdHJ5S2V5KHRlbXBsYXRlUmVnaXN0
cnlLZXkpCisgICAgLCBtX3RlbXBsYXRlUmVnaXN0cnlLZXkoV1RGTW92ZSh0ZW1wbGF0ZVJlZ2lz
dHJ5S2V5KSkKIHsKIH0KIAotSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiBKU1RlbXBsYXRlUmVnaXN0
cnlLZXk6OmNyZWF0ZShWTSYgdm0sIGNvbnN0IFRlbXBsYXRlUmVnaXN0cnlLZXkmIHRlbXBsYXRl
UmVnaXN0cnlLZXkpCitKU1RlbXBsYXRlUmVnaXN0cnlLZXkqIEpTVGVtcGxhdGVSZWdpc3RyeUtl
eTo6Y3JlYXRlKFZNJiB2bSwgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+JiYgdGVtcGxhdGVSZWdp
c3RyeUtleSkKIHsKLSAgICBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqIHJlc3VsdCA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTVGVtcGxhdGVSZWdpc3RyeUtleT4odm0uaGVhcCkpIEpTVGVt
cGxhdGVSZWdpc3RyeUtleSh2bSwgdGVtcGxhdGVSZWdpc3RyeUtleSk7CisgICAgSlNUZW1wbGF0
ZVJlZ2lzdHJ5S2V5KiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1RlbXBs
YXRlUmVnaXN0cnlLZXk+KHZtLmhlYXApKSBKU1RlbXBsYXRlUmVnaXN0cnlLZXkodm0sIFdURk1v
dmUodGVtcGxhdGVSZWdpc3RyeUtleSkpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtleS5oCmluZGV4IGVkNmZlNzgxMjgxMjRmYTdm
M2I4NTQ2ODg2ZWJjZjFkNjllZDU3YzYuLmE4NDM2NTFjNDk2MjJhY2EzOTJkMzcxYzc5MTI1N2Y5
NGNlOWZhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVt
cGxhdGVSZWdpc3RyeUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VGVtcGxhdGVSZWdpc3RyeUtleS5oCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIEpTVGVtcGxhdGVS
ZWdpc3RyeUtleSBmaW5hbCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCi0gICAgc3RhdGljIEpT
VGVtcGxhdGVSZWdpc3RyeUtleSogY3JlYXRlKFZNJiwgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtl
eSYpOworICAgIHN0YXRpYyBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqIGNyZWF0ZShWTSYsIFJlZjxU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5PiYmKTsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQogICAgIHsKQEAgLTQ0LDE1ICs0NCwxNSBAQCBjbGFzcyBKU1RlbXBsYXRlUmVnaXN0
cnlLZXkgZmluYWwgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgewogCiAgICAgREVDTEFS
RV9JTkZPOwogCi0gICAgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYgdGVtcGxhdGVSZWdpc3Ry
eUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcGxhdGVSZWdpc3RyeUtleTsgfQorICAgIGNvbnN0
IFRlbXBsYXRlUmVnaXN0cnlLZXkmIHRlbXBsYXRlUmVnaXN0cnlLZXkoKSBjb25zdCB7IHJldHVy
biBtX3RlbXBsYXRlUmVnaXN0cnlLZXkuZ2V0KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKIHByaXZhdGU6Ci0gICAgSlNUZW1wbGF0ZVJlZ2lz
dHJ5S2V5KFZNJiwgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYpOworICAgIEpTVGVtcGxhdGVS
ZWdpc3RyeUtleShWTSYsIFJlZjxUZW1wbGF0ZVJlZ2lzdHJ5S2V5PiYmKTsKIAotICAgIFRlbXBs
YXRlUmVnaXN0cnlLZXkgbV90ZW1wbGF0ZVJlZ2lzdHJ5S2V5OworICAgIFJlZjxUZW1wbGF0ZVJl
Z2lzdHJ5S2V5PiBtX3RlbXBsYXRlUmVnaXN0cnlLZXk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVn
aXN0cnkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3Ry
eS5jcHAKaW5kZXggZmRiYWEyYjhhNjAwNjlmMjY4MjBhZTkwZTRkNTA5YjRkMDFmYjU5Yi4uMzdj
ZTQzNzY4YjhhYzBjMTc5MzdlMDI0MTkxZjhjYzg1NjdkY2YyZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAKQEAgLTI3LDkgKzI3
LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeS5o
IgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJUZW1wbGF0
ZVJlZ2lzdHJ5S2V5LmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKQEAgLTM5LDkgKzQyLDEwIEBAIFRlbXBsYXRlUmVnaXN0cnk6OlRlbXBsYXRlUmVn
aXN0cnkoVk0mIHZtKQogewogfQogCi1KU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1w
bGF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFRlbXBsYXRlUmVnaXN0cnlLZXkmIHRl
bXBsYXRlS2V5KQorSlNBcnJheSogVGVtcGxhdGVSZWdpc3RyeTo6Z2V0VGVtcGxhdGVPYmplY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqIHRlbXBsYXRlS2V5T2JqZWN0
KQogewotICAgIEpTQXJyYXkqIGNhY2hlZCA9IG1fdGVtcGxhdGVNYXAuZ2V0KHRlbXBsYXRlS2V5
KTsKKyAgICBhdXRvJiB0ZW1wbGF0ZUtleSA9IHRlbXBsYXRlS2V5T2JqZWN0LT50ZW1wbGF0ZVJl
Z2lzdHJ5S2V5KCk7CisgICAgSlNBcnJheSogY2FjaGVkID0gbV90ZW1wbGF0ZU1hcC5nZXQoJnRl
bXBsYXRlS2V5KTsKICAgICBpZiAoY2FjaGVkKQogICAgICAgICByZXR1cm4gY2FjaGVkOwogCkBA
IC02MywxMCArNjcsMTQgQEAgSlNBcnJheSogVGVtcGxhdGVSZWdpc3RyeTo6Z2V0VGVtcGxhdGVP
YmplY3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBUZW1wbGF0ZVJlZ2kKIAogICAgIHRlbXBsYXRl
T2JqZWN0LT5wdXREaXJlY3Qodm0sIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5yYXcsIHJhd09iamVj
dCwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogCisgICAgLy8gVGVtcGxhdGUg
SlNBcnJheSBob2xkIHRoZSByZWZlcmVuY2UgdG8gSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5IHRvIG1h
a2UgVGVtcGxhdGVSZWdpc3RyeUtleSBwb2ludGVyIGxpdmUgdW50aWwgdGhpcyBKU0FycmF5IGlz
IGNvbGxlY3RlZC4KKyAgICAvLyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5IHBvaW50ZXIgaXMgdXNlZCBm
b3IgVGVtcGxhdGVSZWdpc3RyeSdzIGtleS4KKyAgICB0ZW1wbGF0ZU9iamVjdC0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS50ZW1wbGF0ZVJlZ2lzdHJ5S2V5
UHJpdmF0ZU5hbWUoKSwgdGVtcGxhdGVLZXlPYmplY3QsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBE
b250RGVsZXRlKTsKKwogICAgIG9iamVjdENvbnN0cnVjdG9yRnJlZXplKGV4ZWMsIHRlbXBsYXRl
T2JqZWN0KTsKICAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAotICAgIG1fdGVtcGxh
dGVNYXAuc2V0KHRlbXBsYXRlS2V5LCB0ZW1wbGF0ZU9iamVjdCk7CisgICAgbV90ZW1wbGF0ZU1h
cC5zZXQoJnRlbXBsYXRlS2V5LCB0ZW1wbGF0ZU9iamVjdCk7CiAKICAgICByZXR1cm4gdGVtcGxh
dGVPYmplY3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wbGF0ZVJlZ2lzdHJ5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0
ZVJlZ2lzdHJ5LmgKaW5kZXggNjkzYzVlZjkxYmNkYWU2MDgwMmQxYTJlZDI1OGNkZGNmYTBhNWUw
YS4uNTFmM2ViOWIyYzU2MzlkMzYwODJmOGMxNWNkN2EzODUxMzRhOTU4NSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuaApAQCAtMjYsMjAg
KzI2LDIzIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRl
ICJUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwLmgiCiAjaW5jbHVk
ZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIEpTVGVtcGxhdGVSZWdpc3RyeUtleTsKK2NsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXk7CisK
IGNsYXNzIFRlbXBsYXRlUmVnaXN0cnkgewogcHVibGljOgogICAgIFRlbXBsYXRlUmVnaXN0cnko
Vk0mKTsKIAotICAgIEpTQXJyYXkqIGdldFRlbXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSosIGNvbnN0
IFRlbXBsYXRlUmVnaXN0cnlLZXkmKTsKKyAgICBKU0FycmF5KiBnZXRUZW1wbGF0ZU9iamVjdChF
eGVjU3RhdGUqLCBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqKTsKIAogcHJpdmF0ZToKLSAgICBXZWFr
R0NNYXA8VGVtcGxhdGVSZWdpc3RyeUtleSwgSlNBcnJheT4gbV90ZW1wbGF0ZU1hcDsKKyAgICBX
ZWFrR0NNYXA8Y29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSosIEpTQXJyYXk+IG1fdGVtcGxhdGVN
YXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzI0ODRl
MzVlODdmNGIyZWUyMGZmNDhkMDlmNzcxYzQxYmQzZTA5YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuY3BwCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVzdWtlIFN1enVraSA8dXRh
dGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXkuaCIKKworI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0
cnlLZXlUYWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworVGVtcGxhdGVSZWdpc3RyeUtleTo6
flRlbXBsYXRlUmVnaXN0cnlLZXkoKQoreworICAgIGlmIChtX3RhYmxlKQorICAgICAgICBtX3Rh
YmxlLT51bnJlZ2lzdGVyKHRoaXMpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXkuaAppbmRl
eCA0MjFjMzAxZDY5ZmY1YmUyOWRjNDY1N2E2MmJkMTc3YjgxZWM2MzgwLi41NmY4MjU0MWZiNjcz
OTZkODhjODViYjg5YjE4NjM2ZDliN2VjOGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5oCkBAIC0zMiwxMSArMzIsMTMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXkgeworY2xhc3Mg
VGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlOworCitjbGFzcyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5IDog
cHVibGljIFJlZkNvdW50ZWQ8VGVtcGxhdGVSZWdpc3RyeUtleT4gewogcHVibGljOgorICAgIGZy
aWVuZCBjbGFzcyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGU7CiAgICAgdHlwZWRlZiBWZWN0b3I8
U3RyaW5nLCA0PiBTdHJpbmdWZWN0b3I7CiAKLSAgICBUZW1wbGF0ZVJlZ2lzdHJ5S2V5KGNvbnN0
IFN0cmluZ1ZlY3RvciYgcmF3U3RyaW5ncywgY29uc3QgU3RyaW5nVmVjdG9yJiBjb29rZWRTdHJp
bmdzKTsKICAgICBlbnVtIERlbGV0ZWRWYWx1ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OwogICAgIFRl
bXBsYXRlUmVnaXN0cnlLZXkoRGVsZXRlZFZhbHVlVGFnKTsKICAgICBlbnVtIEVtcHR5VmFsdWVU
YWcgeyBFbXB0eVZhbHVlIH07CkBAIC02MCw3ICs2MiwyNSBAQCBjbGFzcyBUZW1wbGF0ZVJlZ2lz
dHJ5S2V5IHsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlP
ckRlbGV0ZWQgPSBmYWxzZTsKICAgICB9OwogCisgICAgc3RhdGljIHVuc2lnbmVkIGNhbGN1bGF0
ZUhhc2goY29uc3QgU3RyaW5nVmVjdG9yJiByYXdTdHJpbmdzKQorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgaGFzaCA9IDA7CisgICAgICAgIGZvciAoY29uc3QgU3RyaW5nJiBzdHJpbmcgOiByYXdT
dHJpbmdzKQorICAgICAgICAgICAgaGFzaCArPSBXVEY6OlN0cmluZ0hhc2g6Omhhc2goc3RyaW5n
KTsKKyAgICAgICAgcmV0dXJuIGhhc2g7CisgICAgfQorCisgICAgflRlbXBsYXRlUmVnaXN0cnlL
ZXkoKTsKKwogcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+IGNy
ZWF0ZShjb25zdCBTdHJpbmdWZWN0b3ImIHJhd1N0cmluZ3MsIGNvbnN0IFN0cmluZ1ZlY3RvciYg
Y29va2VkU3RyaW5ncykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRlbXBs
YXRlUmVnaXN0cnlLZXkocmF3U3RyaW5ncywgY29va2VkU3RyaW5ncykpOworICAgIH0KKworICAg
IFRlbXBsYXRlUmVnaXN0cnlLZXkoY29uc3QgU3RyaW5nVmVjdG9yJiByYXdTdHJpbmdzLCBjb25z
dCBTdHJpbmdWZWN0b3ImIGNvb2tlZFN0cmluZ3MpOworCisgICAgVGVtcGxhdGVSZWdpc3RyeUtl
eVRhYmxlKiBtX3RhYmxlIHsgbnVsbHB0ciB9OwogICAgIFN0cmluZ1ZlY3RvciBtX3Jhd1N0cmlu
Z3M7CiAgICAgU3RyaW5nVmVjdG9yIG1fY29va2VkU3RyaW5nczsKICAgICB1bnNpZ25lZCBtX2hh
c2ggeyAwIH07CkBAIC02OSwxMCArODksOCBAQCBjbGFzcyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5IHsK
IGlubGluZSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5KGNvbnN0IFN0
cmluZ1ZlY3RvciYgcmF3U3RyaW5ncywgY29uc3QgU3RyaW5nVmVjdG9yJiBjb29rZWRTdHJpbmdz
KQogICAgIDogbV9yYXdTdHJpbmdzKHJhd1N0cmluZ3MpCiAgICAgLCBtX2Nvb2tlZFN0cmluZ3Mo
Y29va2VkU3RyaW5ncykKKyAgICAsIG1faGFzaChjYWxjdWxhdGVIYXNoKHJhd1N0cmluZ3MpKQog
ewotICAgIG1faGFzaCA9IDA7Ci0gICAgZm9yIChjb25zdCBTdHJpbmcmIHN0cmluZyA6IHJhd1N0
cmluZ3MpCi0gICAgICAgIG1faGFzaCArPSBXVEY6OlN0cmluZ0hhc2g6Omhhc2goc3RyaW5nKTsK
IH0KIAogaW5saW5lIFRlbXBsYXRlUmVnaXN0cnlLZXk6OlRlbXBsYXRlUmVnaXN0cnlLZXkoRGVs
ZXRlZFZhbHVlVGFnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDlkNjBlOTE2MTU3
OTM1ZDM3M2JjYzI2ZTc0MjJmMDM5ZWFiN2RiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgiCisKKyNpbmNsdWRlICJUZW1wbGF0ZVJl
Z2lzdHJ5S2V5LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgVGVtcGxhdGVSZWdpc3Ry
eUtleVRyYW5zbGF0b3IgeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKFRlbXBsYXRlUmVnaXN0
cnlLZXkqIGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3ItPmhhc2go
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5lIGJvb2wgZXF1YWwoVGVtcGxhdGVSZWdpc3Ry
eUtleSoga2V5LCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiBnZW5lcmF0b3IpCisgICAgeworICAgICAg
ICByZXR1cm4gKmtleSA9PSAqZ2VuZXJhdG9yOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHRy
YW5zbGF0ZShUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiYgbG9jYXRpb24sIFRlbXBsYXRlUmVnaXN0cnlL
ZXkqIGdlbmVyYXRvciwgdW5zaWduZWQpCisgICAgeworICAgICAgICBsb2NhdGlvbiA9IGdlbmVy
YXRvcjsKKyAgICB9Cit9OworCitUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGU6On5UZW1wbGF0ZVJl
Z2lzdHJ5S2V5VGFibGUoKQoreworICAgIGZvciAoYXV0byYga2V5IDogbV9hdG9taWNUYWJsZSkK
KyAgICAgICAga2V5LT5tX3RhYmxlID0gbnVsbHB0cjsKK30KKworUmVmPFRlbXBsYXRlUmVnaXN0
cnlLZXk+IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZTo6Y3JlYXRlS2V5KGNvbnN0IFRlbXBsYXRl
UmVnaXN0cnlLZXk6OlN0cmluZ1ZlY3RvciYgcmF3U3RyaW5ncywgY29uc3QgVGVtcGxhdGVSZWdp
c3RyeUtleTo6U3RyaW5nVmVjdG9yJiBjb29rZWRTdHJpbmdzKQoreworICAgIFJlZjxUZW1wbGF0
ZVJlZ2lzdHJ5S2V5PiBrZXkgPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjcmVhdGUocmF3U3RyaW5n
cywgY29va2VkU3RyaW5ncyk7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX2F0b21pY1RhYmxlLmFk
ZDxUZW1wbGF0ZVJlZ2lzdHJ5S2V5VHJhbnNsYXRvcj4oa2V5LnB0cigpKTsKKyAgICBpZiAoYWRk
UmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICgqYWRkUmVzdWx0Lml0ZXJhdG9yKS0+bV90YWJs
ZSA9IHRoaXM7CisKKyAgICByZXR1cm4gKiphZGRSZXN1bHQuaXRlcmF0b3I7Cit9CisKK3ZvaWQg
VGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlOjp1bnJlZ2lzdGVyKFRlbXBsYXRlUmVnaXN0cnlLZXkq
IGtleSkKK3sKKyAgICBBU1NFUlQoa2V5LT5tX3RhYmxlID09IHRoaXMpOworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX2F0b21pY1RhYmxlLmZpbmQoa2V5KTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KGl0ZXJhdG9yICE9IG1fYXRvbWljVGFibGUuZW5kKCksICJUaGUgVGVtcGxhdGVSZWdpc3RyeUtl
eSBiZWluZyByZW1vdmVkIGlzIHJlZ2lzdGVyZWQgaW4gdGhlIG90aGVyIFRlbXBsYXRlUmVnaXN0
cnlLZXlUYWJsZS4iKTsKKyAgICBtX2F0b21pY1RhYmxlLnJlbW92ZShpdGVyYXRvcik7CisKK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3ZTY1M2Qw
YzY2OWQ4YmQxZTZjOTMwZmQwMzBmMGUzZWZjNmExNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaApAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiVGVtcGxhdGVSZWdpc3RyeUtleS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlKTsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIFZlY3RvcjxTdHJpbmcsIDQ+IFN0cmluZ1ZlY3RvcjsKKworICAgIFRlbXBsYXRlUmVn
aXN0cnlLZXlUYWJsZSgpID0gZGVmYXVsdDsKKworICAgIFJlZjxUZW1wbGF0ZVJlZ2lzdHJ5S2V5
PiBjcmVhdGVLZXkoY29uc3QgU3RyaW5nVmVjdG9yJiByYXdTdHJpbmdzLCBjb25zdCBTdHJpbmdW
ZWN0b3ImIGNvb2tlZFN0cmluZ3MpOworCisgICAgdm9pZCB1bnJlZ2lzdGVyKFRlbXBsYXRlUmVn
aXN0cnlLZXkqKTsKKworICAgIHN0cnVjdCBLZXlIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSoga2V5KSB7IHJldHVybiBrZXktPmhh
c2goKTsgfQorICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5KiBhLCBjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiBiKSB7IHJldHVybiAqYSA9PSAqYjsg
fQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IGZhbHNlOworICAgIH07CisKKyAgICB+VGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlKCk7CisK
K3ByaXZhdGU6CisgICAgSGFzaFNldDxUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiwgS2V5SGFzaD4gbV9h
dG9taWNUYWJsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKaW5kZXggZDVjOTdiZWEyYTEzMjA3Mjc5ZWQzOTE5ZTYxMzA0MzFlMTgyNDkyNS4u
YzZkMjY4NDdlMjU0NWVhNTcwNTM5MWY1NzkwZTg0NmMyNTkwOWZmNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiU21hbGxTdHJpbmdz
LmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgIlN0cm9uZy5oIgorI2luY2x1
ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9y
cy5oIgogI2luY2x1ZGUgIlZNRW50cnlSZWNvcmQuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CkBAIC0zNDksNiArMzUwLDcgQEAgY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8Vk0+IHsKIAogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBtX2F0b21pY1N0cmluZ1RhYmxlOwog
ICAgIFdURjo6U3ltYm9sUmVnaXN0cnkgbV9zeW1ib2xSZWdpc3RyeTsKKyAgICBUZW1wbGF0ZVJl
Z2lzdHJ5S2V5VGFibGUgbV90ZW1wbGF0ZVJlZ2lzdHJ5S2V5dGFibGU7CiAgICAgQ29tbW9uSWRl
bnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CiAgICAgY29uc3QgTWFya2VkQXJndW1lbnRCdWZmZXIq
IGVtcHR5TGlzdDsgLy8gTGlzdHMgYXJlIHN1cHBvc2VkIHRvIGJlIGFsbG9jYXRlZCBvbiB0aGUg
c3RhY2sgdG8gaGF2ZSB0aGVpciBlbGVtZW50cyBwcm9wZXJseSBtYXJrZWQsIHdoaWNoIGlzIG5v
dCB0aGUgY2FzZSBoZXJlIC0gYnV0IHRoaXMgbGlzdCBoYXMgbm90aGluZyB0byBtYXJrLgogICAg
IFNtYWxsU3RyaW5ncyBzbWFsbFN0cmluZ3M7CkBAIC0zNjIsNiArMzY0LDggQEAgY2xhc3MgVk0g
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+IHsKICAgICBBdG9taWNTdHJpbmdUYWJs
ZSogYXRvbWljU3RyaW5nVGFibGUoKSBjb25zdCB7IHJldHVybiBtX2F0b21pY1N0cmluZ1RhYmxl
OyB9CiAgICAgV1RGOjpTeW1ib2xSZWdpc3RyeSYgc3ltYm9sUmVnaXN0cnkoKSB7IHJldHVybiBt
X3N5bWJvbFJlZ2lzdHJ5OyB9CiAKKyAgICBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUmIHRlbXBs
YXRlUmVnaXN0cnlLZXlUYWJsZSgpIHsgcmV0dXJuIG1fdGVtcGxhdGVSZWdpc3RyeUtleXRhYmxl
OyB9CisKICAgICBXZWFrR0NNYXA8U3ltYm9sSW1wbCosIFN5bWJvbCwgUHRySGFzaDxTeW1ib2xJ
bXBsKj4+IHN5bWJvbEltcGxUb1N5bWJvbE1hcDsKIAogICAgIGVudW0gY2xhc3MgRGVsZXRlUHJv
cGVydHlNb2RlIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggYTExOWVkZWZlNDMxMTU0Y2ZmM2JhNDEyMGQ4NDRiODY4YjNkMWE4Ny4uZjU0
OTUwYjU3ZWE4OGYwZjYxMmYzNGZiMmFlNmVhNDI3YWRmYWFlMiAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAx
Ni0xMS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAg
ICBDcmFzaCBpbiBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmU6IFdURjo6VGhyZWFkU3BlY2lmaWM8
V1RGOjpXVEZUaHJlYWREYXRhLCArIDE0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvdGFnZ2VkLXRlbXBsYXRlLXJlZ2lzdHJ5LWtleS1j
b2xsZWN0LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRhZyk6Cisg
ICAgICAgIChpLmV2YWwpOgorICAgICAgICAqIHN0cmVzcy90YWdnZWQtdGVtcGxhdGUtcmVnaXN0
cnkta2V5LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRhZyk6Cisg
ICAgICAgIChhKToKKyAgICAgICAgKGIpOgorCiAyMDE2LTExLTE4ICBZdXN1a2UgU3V6dWtpICA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIwODg2Nyk6IEpT
QyB0ZXN0IGZhaWx1cmU6IENoYWtyYUNvcmUueWFtbC9DaGFrcmFDb3JlL3Rlc3Qvc3RyaWN0LzA1
LmFyZ3VtZW50c19zbS5qcy5kZWZhdWx0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy90YWdn
ZWQtdGVtcGxhdGUtcmVnaXN0cnkta2V5LWNvbGxlY3QuanMgYi9KU1Rlc3RzL3N0cmVzcy90YWdn
ZWQtdGVtcGxhdGUtcmVnaXN0cnkta2V5LWNvbGxlY3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFjZDkxMDgx
OWRkMzc3MDc4ZDc1ZmUwNTRmZTVlMjY4ZTVmZDkzNQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVz
dHMvc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1rZXktY29sbGVjdC5qcwpAQCAtMCww
ICsxLDE2IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYg
KGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVl
OiAnICsgYWN0dWFsKTsKK30KKworCitmdW5jdGlvbiB0YWcoc2l0ZSkKK3sKKyAgICByZXR1cm4g
c2l0ZTsKK30KKworeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpCisgICAgICAg
IGV2YWwoYChmdW5jdGlvbiAoKSB7IHJldHVybiB0YWdcYCR7aX1cYDsgfSkoKWApOworfQorZ2Mo
KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1r
ZXkuanMgYi9KU1Rlc3RzL3N0cmVzcy90YWdnZWQtdGVtcGxhdGUtcmVnaXN0cnkta2V5LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFlYjg3NzU3MTlkZGQyZmViOTUyNTA4YmJiMjVmYTY0ZGY4MjQ4NjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy90YWdnZWQtdGVtcGxhdGUtcmVnaXN0cnkta2V5
LmpzCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQp
IHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiB0YWcoc2l0ZSkKK3sKKyAg
ICByZXR1cm4gc2l0ZTsKK30KKworeworICAgIGZ1bmN0aW9uIGEoKSB7CisgICAgICAgIHJldHVy
biB0YWdgSGVsbG9gOworICAgIH0KKworICAgIGZ1bmN0aW9uIGIoKSB7CisgICAgICAgIHJldHVy
biB0YWdgSGVsbG9gOworICAgIH0KKworICAgIHNob3VsZEJlKGEoKSA9PT0gYigpLCB0cnVlKTsK
KyAgICBnYygpOworICAgIHZhciB0YWdBID0gYSgpOworICAgIGdjKCk7CisgICAgc2hvdWxkQmUo
dGFnQSA9PT0gYigpLCB0cnVlKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295261</attachid>
            <date>2016-11-19 02:40:40 -0800</date>
            <delta_ts>2016-11-20 11:03:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164898-20161119194032.patch</filename>
            <type>text/plain</type>
            <size>32612</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZjMyMTk1ZTc1YzUwZDkyZjdkNWYxYzJmZjQ2M2Q0NzMxNGMxMjU2Li43MjM2ZTgzZmU2ZGM4YTYx
YjRiMzljMTAyNDdjYzViOGI2MWQ1YWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MyBAQAorMjAxNi0xMS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBDcmFzaCBpbiBjb20uYXBwbGUuSmF2YVNjcmlwdENvcmU6IFdURjo6
VGhyZWFkU3BlY2lmaWM8V1RGOjpXVEZUaHJlYWREYXRhLCArIDE0MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0ODk4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNhbGxzaXRlIG9iamVjdCAoSlNB
cnJheSkgb2YgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWwgaXMgbWFuYWdlZCBieSBXZWFrR0NNYXAg
c2luY2UKKyAgICAgICAgc2FtZSB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbCBuZWVkIHRvIHJldHVy
biBhbiBpZGVudGljYWwgb2JqZWN0LgorICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIHVz
ZWQgVGVtcGxhdGVSZWdpc3RyeUtleSBhcyB0aGUga2V5IG9mIHRoZSBXZWFrR0NNYXAuIFdlYWtH
Q01hcAorICAgICAgICBjYW4gcHJ1bmUgaXRzIGVudHJpZXMgaW4gdGhlIGNvbGxlY3RvciB0aHJl
YWQuIEF0IHRoYXQgdGltZSwgdGhpcyBUZW1wbGF0ZVJlZ2lzdHJ5S2V5CisgICAgICAgIGlzIGRl
YWxsb2NhdGVkLiBTaW5jZSBpdCBpbmNsdWRlcyBTdHJpbmcgKGFuZCB0aGVuLCBTdHJpbmdJbXBs
KSwgd2UgYWNjaWRlbnRhbGx5IGNhbGwKKyAgICAgICAgcmVmKCksIGRlcmVmKCkgYW5kIFN0cmlu
Z0ltcGw6OmRlc3Ryb3koKSBpbiB0aGUgZGlmZmVyZW50IHRocmVhZCBmcm9tIHRoZSBtYWluIHRo
cmVhZAorICAgICAgICB3aGlsZSB0aGlzIFRlbXBsYXRlUmVnaXN0cnlLZXkgaXMgYWxsb2NhdGVk
IGluIHRoZSBtYWluIHRocmVhZC4KKworICAgICAgICBJbnN0ZWFkLCB3ZSB1c2UgVGVtcGxhdGVS
ZWdpc3RyeUtleSogYXMgdGhlIGtleSBvZiBXZWFrR0NNYXAuIFRoZW4sIHRvIGtlZXAgaXRzIGxp
dmVuZXNzCisgICAgICAgIHdoaWxlIHRoZSBlbnRyeSBvZiB0aGUgV2Vha0dDTWFwIGlzIGFsaXZl
LCB0aGUgY2FsbHNpdGUgb2JqZWN0IGhhcyB0aGUgcmVmZXJlbmNlIHRvCisgICAgICAgIHRoZSBK
U1RlbXBsYXRlUmVnaXN0cnlLZXkuIEFuZCBpdCBob2xkcyBSZWY8VGVtcGxhdGVSZWdpc3RyeUtl
eT4uCisKKyAgICAgICAgQW5kIG5vdyB3ZSBuZWVkIHRvIGxvb2t1cCBXZWFrR0NNYXAgd2l0aCBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5Ki4gVG8gZG8gc28sIHdlIGNyZWF0ZQorICAgICAgICBpbnRlcm5p
bmcgc3lzdGVtIGZvciBUZW1wbGF0ZVJlZ2lzdHJ5S2V5LiBJdCBpcyBzaW1pbGFyIHRvIEF0b21p
Y1N0cmluZ1RhYmxlIGFuZAorICAgICAgICBTeW1ib2xSZWdpc3RyeS4gVGVtcGxhdGVSZWdpc3Ry
eUtleSBpcyBhbGxvY2F0ZWQgZnJvbSB0aGlzIHRhYmxlLiBUaGlzIHRhYmxlIGF0b21pemUgdGhl
CisgICAgICAgIFRlbXBsYXRlUmVnaXN0cnlLZXkuIFNvIHdlIGNhbiB1c2UgdGhlIHBvaW50ZXIg
Y29tcGFyaXNvbiBiZXR3ZWVuIFRlbXBsYXRlUmVnaXN0cnlLZXkuCisgICAgICAgIEl0IGFsbG93
cyB1cyB0byBsb29rdXAgdGhlIGVudHJ5IGZyb20gV2Vha0dDTWFwIGJ5IFRlbXBsYXRlUmVnaXN0
cnlLZXkqLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBidWlsdGlucy9CdWls
dGluTmFtZXMuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkVGVtcGxhdGVSZWdpc3RyeUtl
eUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRUZW1w
bGF0ZU9iamVjdCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6Omdl
dFRlbXBsYXRlT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtl
eS5jcHA6CisgICAgICAgIChKU0M6OkpTVGVtcGxhdGVSZWdpc3RyeUtleTo6SlNUZW1wbGF0ZVJl
Z2lzdHJ5S2V5KToKKyAgICAgICAgKEpTQzo6SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjcmVhdGUp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Lmg6CisgICAgICAgICog
cnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdp
c3RyeTo6Z2V0VGVtcGxhdGVPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdp
c3RyeS5oOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5jcHA6IENvcGll
ZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuaC4K
KyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3RyeUtleTo6flRlbXBsYXRlUmVnaXN0cnlLZXkp
OgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5oOgorICAgICAgICAoSlND
OjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjYWxjdWxhdGVIYXNoKToKKyAgICAgICAgKEpTQzo6VGVt
cGxhdGVSZWdpc3RyeUtleTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3Ry
eUtleTo6VGVtcGxhdGVSZWdpc3RyeUtleSk6CisgICAgICAgICogcnVudGltZS9UZW1wbGF0ZVJl
Z2lzdHJ5S2V5VGFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3Ry
eUtleVRyYW5zbGF0b3I6Omhhc2gpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5
VHJhbnNsYXRvcjo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5S2V5VHJh
bnNsYXRvcjo6dHJhbnNsYXRlKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVSZWdpc3RyeUtleVRh
YmxlOjp+VGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlKToKKyAgICAgICAgKEpTQzo6VGVtcGxhdGVS
ZWdpc3RyeUtleVRhYmxlOjpjcmVhdGVLZXkpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lz
dHJ5S2V5VGFibGU6OnVucmVnaXN0ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVGVtcGxhdGVSZWdpc3RyeUtleS5oLgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5
S2V5VGFibGU6OktleUhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpUZW1wbGF0ZVJlZ2lzdHJ5
S2V5VGFibGU6OktleUhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAg
ICAgIChKU0M6OlZNOjp0ZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUpOgorCiAyMDE2LTExLTE5ICBN
YXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggbWlzc2luZyBleGNl
cHRpb24gY2hlY2tzIGluIEpTQyBpbnNwZWN0b3IgZmlsZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQKaW5kZXggZWZlZWYyZWFjZWI4OTZmMjExZGM2ODBmMWEwNDE2N2RhZWFlOWE0
Mi4uMGJjMmU3MzhiYmJmODg5MDFjNmNkY2RiMmVmNWJhZWU1YTZmYjQyMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtODY2LDYgKzg2Niw4IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9TeW1ib2xQcm90b3R5cGUuY3BwCiAgICAgcnVudGlt
ZS9TeW1ib2xUYWJsZS5jcHAKICAgICBydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuY3BwCisgICAg
cnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcAorICAgIHJ1bnRpbWUvVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLmNwcAogICAgIHJ1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmNwcAogICAgIHJ1
bnRpbWUvVGhyb3dTY29wZS5jcHAKICAgICBydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hlLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4MzA4YzdkNTRiODBmYTlkM2M0MzBhNjM3
ZjI2ZWNmMjY5ZmQyMTA1Li4yZDJlMGY4MzJjOTJmMTgzODIyYWRkMmVjNzIzZTVkYTFmOTkwMDA4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjMyOSw2ICsyMzI5LDkgQEAKIAkJ
RkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUQ5NEYyQzE3MUUzRTIzMDBCRTc3QTQgLyog
V2F0Y2hkb2cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlGRUYwNDA1MTFBQUU2NjJEMDBCRDI4QjAgLyogQ29tcGFyZUFuZFN3YXBUZXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFRjA0MDUwMUFB
RTY2MkQwMEJEMjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuY3BwICovOyB9OwogCQlGRUZENkZD
NjFENUU3OTkyMDA4RjJGMEIgLyogSlNTdHJpbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRUZENkZDNTFENUU3OTcwMDA4RjJGMEIgLyog
SlNTdHJpbmdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMUE4ODI2QjE2NTNDNENEMUE2NDI5ODNCIC8qIFRlbXBsYXRlUmVnaXN0cnlL
ZXlUYWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA4QjQ3RjIzNDM2NkM0QjcyQUM4NTJBN0UgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNw
cCAqLzsgfTsKKwkJNzgyNzREOEU0QzRENEZDRDlBMURDNkU2IC8qIFRlbXBsYXRlUmVnaXN0cnlL
ZXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkRC
NEI1RTA5OUNENEMxQkIzQzFDRjA1IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwICovOyB9Owor
CQk5NUQ0MjYxQUY0Qzg0Q0UyQUNCQUM5ODEgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEZDMkYzN0FC
NzY0ODNBOTk2NjY4OEYgLyogVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIC8qIEVuZCBQQlhCdWlsZEZpbGUg
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwpA
QCAtNDgxOSw2ICs0ODIyLDkgQEAKIAkJRkVGMDQwNTAxQUFFNjYyRDAwQkQyOEIwIC8qIENvbXBh
cmVBbmRTd2FwVGVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBD
b21wYXJlQW5kU3dhcFRlc3QuY3BwOyBwYXRoID0gQVBJL3Rlc3RzL0NvbXBhcmVBbmRTd2FwVGVz
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRjA0MDUyMUFBRUM0RUQwMEJE
MjhCMCAvKiBDb21wYXJlQW5kU3dhcFRlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQ29tcGFyZUFuZFN3YXBUZXN0Lmg7IHBhdGggPSBBUEkvdGVzdHMvQ29tcGFyZUFuZFN3
YXBUZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFRkQ2RkM1MUQ1RTc5NzAw
MDhGMkYwQiAvKiBKU1N0cmluZ0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNTdHJpbmdJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThC
NDdGMjM0MzY2QzRCNzJBQzg1MkE3RSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGVtcGxhdGVSZWdpc3RyeUtleVRh
YmxlLmNwcDsgcGF0aCA9IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJEQjRCNUUwOTlDRDRDMUJCM0MxQ0YwNSAvKiBUZW1wbGF0ZVJl
Z2lzdHJ5S2V5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRlbXBs
YXRlUmVnaXN0cnlLZXkuY3BwOyBwYXRoID0gVGVtcGxhdGVSZWdpc3RyeUtleS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4RkMyRjM3QUI3NjQ4M0E5OTY2Njg4RiAvKiBUZW1w
bGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
VGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmg7IHBhdGggPSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNl
IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwpAQCAtNjYzNyw2ICs2NjQzLDkgQEAKIAkJCQkxNDczNDFEOTFEQzAzMDAxMDBBQTI5QkEgLyog
V2ViQXNzZW1ibHlFeGVjdXRhYmxlLmggKi8sCiAJCQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQw
IC8qIFdyaXRlQmFycmllci5oICovLAogCQkJCUMyQjZENzUyMThBMzM3OTMwMDRBOTMwMSAvKiBX
cml0ZUJhcnJpZXJJbmxpbmVzLmggKi8sCisJCQkJOEI0N0YyMzQzNjZDNEI3MkFDODUyQTdFIC8q
IFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5jcHAgKi8sCisJCQkJQkRCNEI1RTA5OUNENEMxQkIz
QzFDRjA1IC8qIFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwICovLAorCQkJCTA4RkMyRjM3QUI3NjQ4
M0E5OTY2Njg4RiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUuaCAqLywKIAkJCSk7CiAJCQlw
YXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC04OTcxLDYgKzg5
ODAsNyBAQAogCQkJCUE3OUQzRUQ5QzUwNjRERDBBODQ2NkEzQSAvKiBNb2R1bGVTY29wZURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUQ5NzIyNzUyREM1NDQ1OUI5MTI1QjUzOSAvKiBKU01vZHVs
ZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDczREE0QTQ3NjRDNDVGRTg3MUIwNDg1IC8q
IERlZmluZVByb3BlcnR5QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTVENDI2MUFG
NEM4NENFMkFDQkFDOTgxIC8qIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0xMDM2Myw2ICsxMDM3Myw4IEBACiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdC
IC8qIFlhcnJTeW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJCRDk5MUM1
RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTNGRUNFMDZEM0I0NDVGQ0I2QzkzNDYxIC8qIEpTTW9kdWxlTG9hZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTFBODgyNkIxNjUzQzRDRDFBNjQyOTgzQiAvKiBUZW1wbGF0ZVJlZ2lzdHJ5S2V5
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzgyNzREOEU0QzRENEZDRDlBMURDNkU2IC8q
IFRlbXBsYXRlUmVnaXN0cnlLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggZDc0MTJkNzliNGI2ZDc5ZDA0
NzUxOTdlYjBlYjYyNTQwYWQyODFmYi4uZmQ3OGEwNTM4MTBhZjlhZjQ2OTk1NjBlMDM4YTE1ZWRk
NjBiN2Y0MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFt
ZXMuaApAQCAtODEsNiArODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhCdWlsdGlu
TG9nKSBcCiAgICAgbWFjcm8oaG9tZU9iamVjdCkgXAogICAgIG1hY3JvKGdldFRlbXBsYXRlT2Jq
ZWN0KSBcCisgICAgbWFjcm8odGVtcGxhdGVSZWdpc3RyeUtleSkgXAogICAgIG1hY3JvKGVucXVl
dWVKb2IpIFwKICAgICBtYWNybyhoYW5kbGVyKSBcCiAgICAgbWFjcm8ocHJvbWlzZVN0YXRlKSBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCmluZGV4IDdmMGUzMTM3NTVmMjRkOWNlZmZkMGM3OWE2MzVkYTY3NTU4
MDk2ZWEuLmEzM2YzNzgxNzg3YTBmYzBmZTk2OWIwM2U2MDFhMzBjYTA1OTRmMTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCkBAIC0yOTk1LDExICsyOTk1LDExIEBAIEpTU3RyaW5nKiBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkU3RyaW5nQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKICAg
ICByZXR1cm4gc3RyaW5nSW5NYXA7CiB9CiAKLUpTVGVtcGxhdGVSZWdpc3RyeUtleSogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmFkZFRlbXBsYXRlUmVnaXN0cnlLZXlDb25zdGFudChjb25zdCBUZW1wbGF0
ZVJlZ2lzdHJ5S2V5JiB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KQorSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5
KiBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVGVtcGxhdGVSZWdpc3RyeUtleUNvbnN0YW50KFJlZjxU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5PiB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KQogewotICAgIEpTVGVtcGxh
dGVSZWdpc3RyeUtleSomIHRlbXBsYXRlUmVnaXN0cnlLZXlJbk1hcCA9IG1fdGVtcGxhdGVSZWdp
c3RyeUtleU1hcC5hZGQodGVtcGxhdGVSZWdpc3RyeUtleSwgbnVsbHB0cikuaXRlcmF0b3ItPnZh
bHVlOworICAgIEpTVGVtcGxhdGVSZWdpc3RyeUtleSomIHRlbXBsYXRlUmVnaXN0cnlLZXlJbk1h
cCA9IG1fdGVtcGxhdGVSZWdpc3RyeUtleU1hcC5hZGQodGVtcGxhdGVSZWdpc3RyeUtleS5jb3B5
UmVmKCksIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBpZiAoIXRlbXBsYXRlUmVnaXN0
cnlLZXlJbk1hcCkgewotICAgICAgICB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5SW5NYXAgPSBKU1RlbXBs
YXRlUmVnaXN0cnlLZXk6OmNyZWF0ZSgqdm0oKSwgdGVtcGxhdGVSZWdpc3RyeUtleSk7CisgICAg
ICAgIHRlbXBsYXRlUmVnaXN0cnlLZXlJbk1hcCA9IEpTVGVtcGxhdGVSZWdpc3RyeUtleTo6Y3Jl
YXRlKCp2bSgpLCBXVEZNb3ZlKHRlbXBsYXRlUmVnaXN0cnlLZXkpKTsKICAgICAgICAgYWRkQ29u
c3RhbnRWYWx1ZSh0ZW1wbGF0ZVJlZ2lzdHJ5S2V5SW5NYXApOwogICAgIH0KICAgICByZXR1cm4g
dGVtcGxhdGVSZWdpc3RyeUtleUluTWFwOwpAQCAtNDM5OCw3ICs0Mzk4LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRUZW1wbGF0ZU9iamVjdChSZWdpc3RlcklEKiBk
c3QsIFRhZ2dlZFRlbXAKICAgICB9CiAKICAgICBDYWxsQXJndW1lbnRzIGFyZ3VtZW50cygqdGhp
cywgbnVsbHB0cik7Ci0gICAgZW1pdExvYWQoYXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBKU1Zh
bHVlKGFkZFRlbXBsYXRlUmVnaXN0cnlLZXlDb25zdGFudChUZW1wbGF0ZVJlZ2lzdHJ5S2V5KHJh
d1N0cmluZ3MsIGNvb2tlZFN0cmluZ3MpKSkpOworICAgIGVtaXRMb2FkKGFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgSlNWYWx1ZShhZGRUZW1wbGF0ZVJlZ2lzdHJ5S2V5Q29uc3RhbnQobV92bS0+
dGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlKCkuY3JlYXRlS2V5KHJhd1N0cmluZ3MsIGNvb2tlZFN0
cmluZ3MpKSkpOwogICAgIHJldHVybiBlbWl0Q2FsbChkc3QsIGdldFRlbXBsYXRlT2JqZWN0Lmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3VtZW50cywgdGFnZ2VkVGVtcGxhdGUtPmRpdm90
KCksIHRhZ2dlZFRlbXBsYXRlLT5kaXZvdFN0YXJ0KCksIHRhZ2dlZFRlbXBsYXRlLT5kaXZvdEVu
ZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6Tm8pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggZWFjZTRhNjk3
MzUyYjQxYmRjNDI0ZTFhNjlkYjcyMWNlNTQ0MTFhYi4uOTMyMDRkOGYzYWQ1MWM1MzI1Mzc1Zjhh
MjI1MDUyOTEyZjIxMDI5NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtODAxLDcgKzgwMSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxkb3VibGUsIEpTVmFsdWU+IE51
bWJlck1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFVuaXF1ZWRTdHJpbmdJbXBsKiwgSlNT
dHJpbmcqLCBJZGVudGlmaWVyUmVwSGFzaD4gSWRlbnRpZmllclN0cmluZ01hcDsKLSAgICAgICAg
dHlwZWRlZiBIYXNoTWFwPFRlbXBsYXRlUmVnaXN0cnlLZXksIEpTVGVtcGxhdGVSZWdpc3RyeUtl
eSo+IFRlbXBsYXRlUmVnaXN0cnlLZXlNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxSZWY8
VGVtcGxhdGVSZWdpc3RyeUtleT4sIEpTVGVtcGxhdGVSZWdpc3RyeUtleSo+IFRlbXBsYXRlUmVn
aXN0cnlLZXlNYXA7CiAgICAgICAgIAogICAgICAgICAvLyBIZWxwZXIgZm9yIGVtaXRDYWxsKCkg
YW5kIGVtaXRDb25zdHJ1Y3QoKS4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBzZXQgb2YKICAgICAg
ICAgLy8gZXhwZWN0ZWQgZnVuY3Rpb25zIGhhdmUgaWRlbnRpY2FsIGJlaGF2aW9yIGZvciBib3Ro
IGNhbGwgYW5kIGNvbnN0cnVjdApAQCAtODg1LDcgKzg4NSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgcHVibGljOgogICAgICAgICBKU1N0cmluZyogYWRkU3RyaW5nQ29uc3RhbnQoY29uc3Qg
SWRlbnRpZmllciYpOwotICAgICAgICBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqIGFkZFRlbXBsYXRl
UmVnaXN0cnlLZXlDb25zdGFudChjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Jik7CisgICAgICAg
IEpTVGVtcGxhdGVSZWdpc3RyeUtleSogYWRkVGVtcGxhdGVSZWdpc3RyeUtleUNvbnN0YW50KFJl
ZjxUZW1wbGF0ZVJlZ2lzdHJ5S2V5Pik7CiAKICAgICAgICAgVmVjdG9yPFVubGlua2VkSW5zdHJ1
Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgaW5zdHJ1Y3Rpb25zKCkgeyByZXR1cm4g
bV9pbnN0cnVjdGlvbnM7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGFlMjZjODY0NjMzNGQ0ZjI5MzQ5ZjViN2EzYWM0ZDMy
NTk0Y2E4YWMuLmZkYmMxMzg0MDc3ZjhhNjhlYzAyZWVlOTI0ZTUxOTVmZDk1MTU1Y2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAg
LTI5MCw3ICsyOTAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnZXRU
ZW1wbGF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT50aGlzVmFsdWUoKTsKICAgICBBU1NFUlQodGhpc1ZhbHVlLmluaGVyaXRzKEpTVGVt
cGxhdGVSZWdpc3RyeUtleTo6aW5mbygpKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVnaXN0cnkoKS5nZXRUZW1wbGF0
ZU9iamVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Kj4odGhpc1ZhbHVlKS0+
dGVtcGxhdGVSZWdpc3RyeUtleSgpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnRlbXBsYXRlUmVnaXN0cnkoKS5nZXRUZW1wbGF0ZU9i
amVjdChleGVjLCBqc0Nhc3Q8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Kj4odGhpc1ZhbHVlKSkpOwog
fQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxh
dGVSZWdpc3RyeUtleS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1RlbXBs
YXRlUmVnaXN0cnlLZXkuY3BwCmluZGV4IDNiOTc5N2NmYjU4MTdiYWFiNzQ1NGE1OGY3ZTZiZDJm
N2VkNjhkNjcuLjJmOThhYjFjYzE3NjU5MTNkN2FhZTNmNTBmY2UwNTNmNWU1Nzk1YzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVtcGxhdGVSZWdpc3RyeUtl
eS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lz
dHJ5S2V5LmNwcApAQCAtMzUsMTUgKzM1LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogY29uc3QgQ2xh
c3NJbmZvIEpTVGVtcGxhdGVSZWdpc3RyeUtleTo6c19pbmZvID0geyAiVGVtcGxhdGVSZWdpc3Ry
eUtleSIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZW1w
bGF0ZVJlZ2lzdHJ5S2V5KSB9OwogCiAKLUpTVGVtcGxhdGVSZWdpc3RyeUtleTo6SlNUZW1wbGF0
ZVJlZ2lzdHJ5S2V5KFZNJiB2bSwgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYgdGVtcGxhdGVS
ZWdpc3RyeUtleSkKK0pTVGVtcGxhdGVSZWdpc3RyeUtleTo6SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5
KFZNJiB2bSwgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+JiYgdGVtcGxhdGVSZWdpc3RyeUtleSkK
ICAgICA6IEJhc2Uodm0sIHZtLnRlbXBsYXRlUmVnaXN0cnlLZXlTdHJ1Y3R1cmUuZ2V0KCkpCi0g
ICAgLCBtX3RlbXBsYXRlUmVnaXN0cnlLZXkodGVtcGxhdGVSZWdpc3RyeUtleSkKKyAgICAsIG1f
dGVtcGxhdGVSZWdpc3RyeUtleShXVEZNb3ZlKHRlbXBsYXRlUmVnaXN0cnlLZXkpKQogewogfQog
Ci1KU1RlbXBsYXRlUmVnaXN0cnlLZXkqIEpTVGVtcGxhdGVSZWdpc3RyeUtleTo6Y3JlYXRlKFZN
JiB2bSwgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYgdGVtcGxhdGVSZWdpc3RyeUtleSkKK0pT
VGVtcGxhdGVSZWdpc3RyeUtleSogSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpjcmVhdGUoVk0mIHZt
LCBSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4mJiB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KQogewotICAg
IEpTVGVtcGxhdGVSZWdpc3RyeUtleSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5Pih2bS5oZWFwKSkgSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5
KHZtLCB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KTsKKyAgICBKU1RlbXBsYXRlUmVnaXN0cnlLZXkqIHJl
c3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTVGVtcGxhdGVSZWdpc3RyeUtleT4o
dm0uaGVhcCkpIEpTVGVtcGxhdGVSZWdpc3RyeUtleSh2bSwgV1RGTW92ZSh0ZW1wbGF0ZVJlZ2lz
dHJ5S2V5KSk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVGVt
cGxhdGVSZWdpc3RyeUtleS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1w
bGF0ZVJlZ2lzdHJ5S2V5LmgKaW5kZXggZWQ2ZmU3ODEyODEyNGZhN2YzYjg1NDY4ODZlYmNmMWQ2
OWVkNTdjNi4uYTg0MzY1MWM0OTYyMmFjYTM5MmQzNzFjNzkxMjU3Zjk0Y2U5ZmEyZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmgKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5IGZpbmFs
IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
RGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKLSAgICBzdGF0aWMgSlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5KiBjcmVhdGUoVk0mLCBjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Jik7CisgICAgc3RhdGlj
IEpTVGVtcGxhdGVSZWdpc3RyeUtleSogY3JlYXRlKFZNJiwgUmVmPFRlbXBsYXRlUmVnaXN0cnlL
ZXk+JiYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewpA
QCAtNDQsMTUgKzQ0LDE1IEBAIGNsYXNzIEpTVGVtcGxhdGVSZWdpc3RyeUtleSBmaW5hbCA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CiAKICAgICBERUNMQVJFX0lORk87CiAKLSAgICBj
b25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5JiB0ZW1wbGF0ZVJlZ2lzdHJ5S2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV90ZW1wbGF0ZVJlZ2lzdHJ5S2V5OyB9CisgICAgY29uc3QgVGVtcGxhdGVSZWdpc3Ry
eUtleSYgdGVtcGxhdGVSZWdpc3RyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcGxhdGVSZWdp
c3RyeUtleS5nZXQoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKIAogcHJpdmF0ZToKLSAgICBKU1RlbXBsYXRlUmVnaXN0cnlLZXkoVk0mLCBjb25z
dCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5Jik7CisgICAgSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5KFZNJiwg
UmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+JiYpOwogCi0gICAgVGVtcGxhdGVSZWdpc3RyeUtleSBt
X3RlbXBsYXRlUmVnaXN0cnlLZXk7CisgICAgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+IG1fdGVt
cGxhdGVSZWdpc3RyeUtleTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAppbmRleCBmZGJh
YTJiOGE2MDA2OWYyNjgyMGFlOTBlNGQ1MDliNGQwMWZiNTliLi4zN2NlNDM3NjhiOGFjMGMxNzkz
N2UwMjQxOTFmOGNjODU2N2RjZjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmNwcApAQCAtMjcsOSArMjcsMTIgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJC
dWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKICNpbmNsdWRl
ICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXkuaCIK
ICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzks
OSArNDIsMTAgQEAgVGVtcGxhdGVSZWdpc3RyeTo6VGVtcGxhdGVSZWdpc3RyeShWTSYgdm0pCiB7
CiB9CiAKLUpTQXJyYXkqIFRlbXBsYXRlUmVnaXN0cnk6OmdldFRlbXBsYXRlT2JqZWN0KEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleSYgdGVtcGxhdGVLZXkpCitKU0Fy
cmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMs
IEpTVGVtcGxhdGVSZWdpc3RyeUtleSogdGVtcGxhdGVLZXlPYmplY3QpCiB7Ci0gICAgSlNBcnJh
eSogY2FjaGVkID0gbV90ZW1wbGF0ZU1hcC5nZXQodGVtcGxhdGVLZXkpOworICAgIGF1dG8mIHRl
bXBsYXRlS2V5ID0gdGVtcGxhdGVLZXlPYmplY3QtPnRlbXBsYXRlUmVnaXN0cnlLZXkoKTsKKyAg
ICBKU0FycmF5KiBjYWNoZWQgPSBtX3RlbXBsYXRlTWFwLmdldCgmdGVtcGxhdGVLZXkpOwogICAg
IGlmIChjYWNoZWQpCiAgICAgICAgIHJldHVybiBjYWNoZWQ7CiAKQEAgLTYzLDEwICs2NywxNCBA
QCBKU0FycmF5KiBUZW1wbGF0ZVJlZ2lzdHJ5OjpnZXRUZW1wbGF0ZU9iamVjdChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFRlbXBsYXRlUmVnaQogCiAgICAgdGVtcGxhdGVPYmplY3QtPnB1dERpcmVj
dCh2bSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnJhdywgcmF3T2JqZWN0LCBSZWFkT25seSB8IERv
bnRFbnVtIHwgRG9udERlbGV0ZSk7CiAKKyAgICAvLyBUZW1wbGF0ZSBKU0FycmF5IGhvbGQgdGhl
IHJlZmVyZW5jZSB0byBKU1RlbXBsYXRlUmVnaXN0cnlLZXkgdG8gbWFrZSBUZW1wbGF0ZVJlZ2lz
dHJ5S2V5IHBvaW50ZXIgbGl2ZSB1bnRpbCB0aGlzIEpTQXJyYXkgaXMgY29sbGVjdGVkLgorICAg
IC8vIFRlbXBsYXRlUmVnaXN0cnlLZXkgcG9pbnRlciBpcyB1c2VkIGZvciBUZW1wbGF0ZVJlZ2lz
dHJ5J3Mga2V5LgorICAgIHRlbXBsYXRlT2JqZWN0LT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnRlbXBsYXRlUmVnaXN0cnlLZXlQcml2YXRlTmFtZSgpLCB0
ZW1wbGF0ZUtleU9iamVjdCwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworCiAg
ICAgb2JqZWN0Q29uc3RydWN0b3JGcmVlemUoZXhlYywgdGVtcGxhdGVPYmplY3QpOwogICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCi0gICAgbV90ZW1wbGF0ZU1hcC5zZXQodGVtcGxh
dGVLZXksIHRlbXBsYXRlT2JqZWN0KTsKKyAgICBtX3RlbXBsYXRlTWFwLnNldCgmdGVtcGxhdGVL
ZXksIHRlbXBsYXRlT2JqZWN0KTsKIAogICAgIHJldHVybiB0ZW1wbGF0ZU9iamVjdDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnku
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnkuaAppbmRl
eCA2OTNjNWVmOTFiY2RhZTYwODAyZDFhMmVkMjU4Y2RkY2ZhMGE1ZTBhLi41MWYzZWI5YjJjNTYz
OWQzNjA4MmY4YzE1Y2Q3YTM4NTEzNGE5NTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeS5oCkBAIC0yNiwyMCArMjYsMjMgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0
cnlLZXkuaCIKICNpbmNsdWRlICJXZWFrR0NNYXAuaCIKICNpbmNsdWRlIDxsaW1pdHM+CisjaW5j
bHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNUZW1wbGF0ZVJl
Z2lzdHJ5S2V5OworY2xhc3MgVGVtcGxhdGVSZWdpc3RyeUtleTsKKwogY2xhc3MgVGVtcGxhdGVS
ZWdpc3RyeSB7CiBwdWJsaWM6CiAgICAgVGVtcGxhdGVSZWdpc3RyeShWTSYpOwogCi0gICAgSlNB
cnJheSogZ2V0VGVtcGxhdGVPYmplY3QoRXhlY1N0YXRlKiwgY29uc3QgVGVtcGxhdGVSZWdpc3Ry
eUtleSYpOworICAgIEpTQXJyYXkqIGdldFRlbXBsYXRlT2JqZWN0KEV4ZWNTdGF0ZSosIEpTVGVt
cGxhdGVSZWdpc3RyeUtleSopOwogCiBwcml2YXRlOgotICAgIFdlYWtHQ01hcDxUZW1wbGF0ZVJl
Z2lzdHJ5S2V5LCBKU0FycmF5PiBtX3RlbXBsYXRlTWFwOworICAgIFdlYWtHQ01hcDxjb25zdCBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5KiwgSlNBcnJheT4gbV90ZW1wbGF0ZU1hcDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VGVtcGxhdGVSZWdpc3RyeUtleS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMjQ4NGUzNWU4N2Y0YjJlZTIwZmY0
OGQwOWY3NzFjNDFiZDNlMDliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5jcHAKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVtcGxhdGVS
ZWdpc3RyeUtleS5oIgorCisjaW5jbHVkZSAiVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitUZW1wbGF0ZVJlZ2lzdHJ5S2V5Ojp+VGVtcGxhdGVSZWdpc3Ry
eUtleSgpCit7CisgICAgaWYgKG1fdGFibGUpCisgICAgICAgIG1fdGFibGUtPnVucmVnaXN0ZXIo
dGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleS5oCmluZGV4IDQyMWMzMDFkNjlmZjVi
ZTI5ZGM0NjU3YTYyYmQxNzdiODFlYzYzODAuLjU2ZjgyNTQxZmI2NzM5NmQ4OGM4NWJiODliMTg2
MzZkOWI3ZWM4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rl
bXBsYXRlUmVnaXN0cnlLZXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
ZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgKQEAgLTMyLDExICszMiwxMyBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgVGVtcGxhdGVSZWdpc3RyeUtleSB7CitjbGFzcyBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5VGFibGU7CisKK2NsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXkgOiBwdWJsaWMgUmVmQ291bnRl
ZDxUZW1wbGF0ZVJlZ2lzdHJ5S2V5PiB7CiBwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFRlbXBs
YXRlUmVnaXN0cnlLZXlUYWJsZTsKICAgICB0eXBlZGVmIFZlY3RvcjxTdHJpbmcsIDQ+IFN0cmlu
Z1ZlY3RvcjsKIAotICAgIFRlbXBsYXRlUmVnaXN0cnlLZXkoY29uc3QgU3RyaW5nVmVjdG9yJiBy
YXdTdHJpbmdzLCBjb25zdCBTdHJpbmdWZWN0b3ImIGNvb2tlZFN0cmluZ3MpOwogICAgIGVudW0g
RGVsZXRlZFZhbHVlVGFnIHsgRGVsZXRlZFZhbHVlIH07CiAgICAgVGVtcGxhdGVSZWdpc3RyeUtl
eShEZWxldGVkVmFsdWVUYWcpOwogICAgIGVudW0gRW1wdHlWYWx1ZVRhZyB7IEVtcHR5VmFsdWUg
fTsKQEAgLTYwLDcgKzYyLDI1IEBAIGNsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXkgewogICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNl
OwogICAgIH07CiAKKyAgICBzdGF0aWMgdW5zaWduZWQgY2FsY3VsYXRlSGFzaChjb25zdCBTdHJp
bmdWZWN0b3ImIHJhd1N0cmluZ3MpCisgICAgeworICAgICAgICB1bnNpZ25lZCBoYXNoID0gMDsK
KyAgICAgICAgZm9yIChjb25zdCBTdHJpbmcmIHN0cmluZyA6IHJhd1N0cmluZ3MpCisgICAgICAg
ICAgICBoYXNoICs9IFdURjo6U3RyaW5nSGFzaDo6aGFzaChzdHJpbmcpOworICAgICAgICByZXR1
cm4gaGFzaDsKKyAgICB9CisKKyAgICB+VGVtcGxhdGVSZWdpc3RyeUtleSgpOworCiBwcml2YXRl
OgorICAgIHN0YXRpYyBSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4gY3JlYXRlKGNvbnN0IFN0cmlu
Z1ZlY3RvciYgcmF3U3RyaW5ncywgY29uc3QgU3RyaW5nVmVjdG9yJiBjb29rZWRTdHJpbmdzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGVtcGxhdGVSZWdpc3RyeUtleShy
YXdTdHJpbmdzLCBjb29rZWRTdHJpbmdzKSk7CisgICAgfQorCisgICAgVGVtcGxhdGVSZWdpc3Ry
eUtleShjb25zdCBTdHJpbmdWZWN0b3ImIHJhd1N0cmluZ3MsIGNvbnN0IFN0cmluZ1ZlY3RvciYg
Y29va2VkU3RyaW5ncyk7CisKKyAgICBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUqIG1fdGFibGUg
eyBudWxscHRyIH07CiAgICAgU3RyaW5nVmVjdG9yIG1fcmF3U3RyaW5nczsKICAgICBTdHJpbmdW
ZWN0b3IgbV9jb29rZWRTdHJpbmdzOwogICAgIHVuc2lnbmVkIG1faGFzaCB7IDAgfTsKQEAgLTY5
LDEwICs4OSw4IEBAIGNsYXNzIFRlbXBsYXRlUmVnaXN0cnlLZXkgewogaW5saW5lIFRlbXBsYXRl
UmVnaXN0cnlLZXk6OlRlbXBsYXRlUmVnaXN0cnlLZXkoY29uc3QgU3RyaW5nVmVjdG9yJiByYXdT
dHJpbmdzLCBjb25zdCBTdHJpbmdWZWN0b3ImIGNvb2tlZFN0cmluZ3MpCiAgICAgOiBtX3Jhd1N0
cmluZ3MocmF3U3RyaW5ncykKICAgICAsIG1fY29va2VkU3RyaW5ncyhjb29rZWRTdHJpbmdzKQor
ICAgICwgbV9oYXNoKGNhbGN1bGF0ZUhhc2gocmF3U3RyaW5ncykpCiB7Ci0gICAgbV9oYXNoID0g
MDsKLSAgICBmb3IgKGNvbnN0IFN0cmluZyYgc3RyaW5nIDogcmF3U3RyaW5ncykKLSAgICAgICAg
bV9oYXNoICs9IFdURjo6U3RyaW5nSGFzaDo6aGFzaChzdHJpbmcpOwogfQogCiBpbmxpbmUgVGVt
cGxhdGVSZWdpc3RyeUtleTo6VGVtcGxhdGVSZWdpc3RyeUtleShEZWxldGVkVmFsdWVUYWcpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UZW1wbGF0ZVJlZ2lzdHJ5
S2V5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOWQ2MGU5MTYxNTc5MzVkMzczYmNjMjZlNzQy
MmYwMzllYWI3ZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLmNwcApAQCAtMCwwICsxLDc1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZW1wbGF0ZVJl
Z2lzdHJ5S2V5VGFibGUuaCIKKworI2luY2x1ZGUgIlRlbXBsYXRlUmVnaXN0cnlLZXkuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5VHJhbnNsYXRvciB7
CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goVGVtcGxhdGVSZWdpc3RyeUtleSogZ2VuZXJhdG9y
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci0+aGFzaCgpOworICAgIH0KKworICAg
IHN0YXRpYyBpbmxpbmUgYm9vbCBlcXVhbChUZW1wbGF0ZVJlZ2lzdHJ5S2V5KiBrZXksIFRlbXBs
YXRlUmVnaXN0cnlLZXkqIGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIHJldHVybiAqa2V5ID09
ICpnZW5lcmF0b3I7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdHJhbnNsYXRlKFRlbXBsYXRl
UmVnaXN0cnlLZXkqJiBsb2NhdGlvbiwgVGVtcGxhdGVSZWdpc3RyeUtleSogZ2VuZXJhdG9yLCB1
bnNpZ25lZCkKKyAgICB7CisgICAgICAgIGxvY2F0aW9uID0gZ2VuZXJhdG9yOworICAgIH0KK307
CisKK1RlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZTo6flRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZSgp
Cit7CisgICAgZm9yIChhdXRvJiBrZXkgOiBtX2F0b21pY1RhYmxlKQorICAgICAgICBrZXktPm1f
dGFibGUgPSBudWxscHRyOworfQorCitSZWY8VGVtcGxhdGVSZWdpc3RyeUtleT4gVGVtcGxhdGVS
ZWdpc3RyeUtleVRhYmxlOjpjcmVhdGVLZXkoY29uc3QgVGVtcGxhdGVSZWdpc3RyeUtleTo6U3Ry
aW5nVmVjdG9yJiByYXdTdHJpbmdzLCBjb25zdCBUZW1wbGF0ZVJlZ2lzdHJ5S2V5OjpTdHJpbmdW
ZWN0b3ImIGNvb2tlZFN0cmluZ3MpCit7CisgICAgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+IGtl
eSA9IFRlbXBsYXRlUmVnaXN0cnlLZXk6OmNyZWF0ZShyYXdTdHJpbmdzLCBjb29rZWRTdHJpbmdz
KTsKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fYXRvbWljVGFibGUuYWRkPFRlbXBsYXRlUmVnaXN0
cnlLZXlUcmFuc2xhdG9yPihrZXkucHRyKCkpOworICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgKCphZGRSZXN1bHQuaXRlcmF0b3IpLT5tX3RhYmxlID0gdGhpczsKKworICAg
IHJldHVybiAqKmFkZFJlc3VsdC5pdGVyYXRvcjsKK30KKwordm9pZCBUZW1wbGF0ZVJlZ2lzdHJ5
S2V5VGFibGU6OnVucmVnaXN0ZXIoVGVtcGxhdGVSZWdpc3RyeUtleSoga2V5KQoreworICAgIEFT
U0VSVChrZXktPm1fdGFibGUgPT0gdGhpcyk7CisgICAgYXV0byBpdGVyYXRvciA9IG1fYXRvbWlj
VGFibGUuZmluZChrZXkpOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9h
dG9taWNUYWJsZS5lbmQoKSwgIlRoZSBUZW1wbGF0ZVJlZ2lzdHJ5S2V5IGJlaW5nIHJlbW92ZWQg
aXMgcmVnaXN0ZXJlZCBpbiB0aGUgb3RoZXIgVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlLiIpOwor
ICAgIG1fYXRvbWljVGFibGUucmVtb3ZlKGl0ZXJhdG9yKTsKKworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1RlbXBsYXRl
UmVnaXN0cnlLZXlUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVtcGxh
dGVSZWdpc3RyeUtleVRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTdlNjUzZDBjNjY5ZDhiZDFlNmM5MzBm
ZDAzMGYwZTNlZmM2YTE3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1RlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJUZW1wbGF0ZVJlZ2lz
dHJ5S2V5LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUpOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFN0
cmluZywgND4gU3RyaW5nVmVjdG9yOworCisgICAgVGVtcGxhdGVSZWdpc3RyeUtleVRhYmxlKCkg
PSBkZWZhdWx0OworCisgICAgUmVmPFRlbXBsYXRlUmVnaXN0cnlLZXk+IGNyZWF0ZUtleShjb25z
dCBTdHJpbmdWZWN0b3ImIHJhd1N0cmluZ3MsIGNvbnN0IFN0cmluZ1ZlY3RvciYgY29va2VkU3Ry
aW5ncyk7CisKKyAgICB2b2lkIHVucmVnaXN0ZXIoVGVtcGxhdGVSZWdpc3RyeUtleSopOworCisg
ICAgc3RydWN0IEtleUhhc2ggeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBU
ZW1wbGF0ZVJlZ2lzdHJ5S2V5KiBrZXkpIHsgcmV0dXJuIGtleS0+aGFzaCgpOyB9CisgICAgICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRlbXBsYXRlUmVnaXN0cnlLZXkqIGEsIGNvbnN0IFRl
bXBsYXRlUmVnaXN0cnlLZXkqIGIpIHsgcmV0dXJuICphID09ICpiOyB9CisgICAgICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CisgICAg
fTsKKworICAgIH5UZW1wbGF0ZVJlZ2lzdHJ5S2V5VGFibGUoKTsKKworcHJpdmF0ZToKKyAgICBI
YXNoU2V0PFRlbXBsYXRlUmVnaXN0cnlLZXkqLCBLZXlIYXNoPiBtX2F0b21pY1RhYmxlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCBk
NWM5N2JlYTJhMTMyMDcyNzllZDM5MTllNjEzMDQzMWUxODI0OTI1Li5jNmQyNjg0N2UyNTQ1ZWE1
NzA1MzkxZjU3OTBlODQ2YzI1OTA5ZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
QEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJTbWFsbFN0cmluZ3MuaCIKICNpbmNsdWRlICJT
b3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiU3Ryb25nLmgiCisjaW5jbHVkZSAiVGVtcGxhdGVSZWdp
c3RyeUtleVRhYmxlLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAi
Vk1FbnRyeVJlY29yZC5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKQEAgLTM0OSw2ICszNTAs
NyBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4gewogCiAgICAg
QXRvbWljU3RyaW5nVGFibGUqIG1fYXRvbWljU3RyaW5nVGFibGU7CiAgICAgV1RGOjpTeW1ib2xS
ZWdpc3RyeSBtX3N5bWJvbFJlZ2lzdHJ5OworICAgIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZSBt
X3RlbXBsYXRlUmVnaXN0cnlLZXl0YWJsZTsKICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVy
dHlOYW1lczsKICAgICBjb25zdCBNYXJrZWRBcmd1bWVudEJ1ZmZlciogZW1wdHlMaXN0OyAvLyBM
aXN0cyBhcmUgc3VwcG9zZWQgdG8gYmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayB0byBoYXZlIHRo
ZWlyIGVsZW1lbnRzIHByb3Blcmx5IG1hcmtlZCwgd2hpY2ggaXMgbm90IHRoZSBjYXNlIGhlcmUg
LSBidXQgdGhpcyBsaXN0IGhhcyBub3RoaW5nIHRvIG1hcmsuCiAgICAgU21hbGxTdHJpbmdzIHNt
YWxsU3RyaW5nczsKQEAgLTM2Miw2ICszNjQsOCBAQCBjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxWTT4gewogICAgIEF0b21pY1N0cmluZ1RhYmxlKiBhdG9taWNTdHJpbmdU
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXRvbWljU3RyaW5nVGFibGU7IH0KICAgICBXVEY6OlN5
bWJvbFJlZ2lzdHJ5JiBzeW1ib2xSZWdpc3RyeSgpIHsgcmV0dXJuIG1fc3ltYm9sUmVnaXN0cnk7
IH0KIAorICAgIFRlbXBsYXRlUmVnaXN0cnlLZXlUYWJsZSYgdGVtcGxhdGVSZWdpc3RyeUtleVRh
YmxlKCkgeyByZXR1cm4gbV90ZW1wbGF0ZVJlZ2lzdHJ5S2V5dGFibGU7IH0KKwogICAgIFdlYWtH
Q01hcDxTeW1ib2xJbXBsKiwgU3ltYm9sLCBQdHJIYXNoPFN5bWJvbEltcGwqPj4gc3ltYm9sSW1w
bFRvU3ltYm9sTWFwOwogCiAgICAgZW51bSBjbGFzcyBEZWxldGVQcm9wZXJ0eU1vZGUgewpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBhMTE5
ZWRlZmU0MzExNTRjZmYzYmE0MTIwZDg0NGI4NjhiM2QxYTg3Li5mNTQ5NTBiNTdlYTg4ZjBmNjEy
ZjM0ZmIyYWU2ZWE0MjdhZGZhYWUyIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE2LTExLTE5ICBZdXN1a2Ug
U3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENyYXNoIGluIGNvbS5h
cHBsZS5KYXZhU2NyaXB0Q29yZTogV1RGOjpUaHJlYWRTcGVjaWZpYzxXVEY6OldURlRocmVhZERh
dGEsICsgMTQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQ4OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHN0cmVzcy90YWdnZWQtdGVtcGxhdGUtcmVnaXN0cnkta2V5LWNvbGxlY3QuanM6IEFkZGVk
LgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAodGFnKToKKyAgICAgICAgKGkuZXZhbCk6
CisgICAgICAgICogc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1rZXkuanM6IEFkZGVk
LgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAodGFnKToKKyAgICAgICAgKGEpOgorICAg
ICAgICAoYik6CisKIDIwMTYtMTEtMTggIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjA4ODY3KTogSlNDIHRlc3QgZmFpbHVyZTog
Q2hha3JhQ29yZS55YW1sL0NoYWtyYUNvcmUvdGVzdC9zdHJpY3QvMDUuYXJndW1lbnRzX3NtLmpz
LmRlZmF1bHQKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdp
c3RyeS1rZXktY29sbGVjdC5qcyBiL0pTVGVzdHMvc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdp
c3RyeS1rZXktY29sbGVjdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMWNkOTEwODE5ZGQzNzcwNzhkNzVmZTA1
NGZlNWUyNjhlNWZkOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvdGFnZ2Vk
LXRlbXBsYXRlLXJlZ2lzdHJ5LWtleS1jb2xsZWN0LmpzCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0
aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBl
Y3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOwor
fQorCisKK2Z1bmN0aW9uIHRhZyhzaXRlKQoreworICAgIHJldHVybiBzaXRlOworfQorCit7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTQ7ICsraSkKKyAgICAgICAgZXZhbChgKGZ1bmN0aW9u
ICgpIHsgcmV0dXJuIHRhZ1xgJHtpfVxgOyB9KSgpYCk7Cit9CitnYygpOwpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9zdHJlc3MvdGFnZ2VkLXRlbXBsYXRlLXJlZ2lzdHJ5LWtleS5qcyBiL0pTVGVzdHMv
c3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1rZXkuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWViODc3
NTcxOWRkZDJmZWI5NTI1MDhiYmIyNWZhNjRkZjgyNDg2MAotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvc3RyZXNzL3RhZ2dlZC10ZW1wbGF0ZS1yZWdpc3RyeS1rZXkuanMKQEAgLTAsMCArMSwy
NSBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1
YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyAr
IGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHRhZyhzaXRlKQoreworICAgIHJldHVybiBzaXRlOwor
fQorCit7CisgICAgZnVuY3Rpb24gYSgpIHsKKyAgICAgICAgcmV0dXJuIHRhZ2BIZWxsb2A7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gYigpIHsKKyAgICAgICAgcmV0dXJuIHRhZ2BIZWxsb2A7Cisg
ICAgfQorCisgICAgc2hvdWxkQmUoYSgpID09PSBiKCksIHRydWUpOworICAgIGdjKCk7CisgICAg
dmFyIHRhZ0EgPSBhKCk7CisgICAgZ2MoKTsKKyAgICBzaG91bGRCZSh0YWdBID09PSBiKCksIHRy
dWUpOworfQo=
</data>
<flag name="review"
          id="317881"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>