<?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>14997</bug_id>
          
          <creation_ts>2007-08-16 20:03:50 -0700</creation_ts>
          <short_desc>Support for server-sent DOM events</short_desc>
          <delta_ts>2009-08-15 14:25:46 -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>WebCore Misc.</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#server-sent-events</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>14994</dependson>
    
    <dependson>14995</dependson>
    
    <dependson>14996</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Henry Mason">hmason</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>abarth</cc>
    
    <cc>adam.bergkvist</cc>
    
    <cc>andersca</cc>
    
    <cc>annevk</cc>
    
    <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>beidson</cc>
    
    <cc>dev+webkit</cc>
    
    <cc>emacemac7</cc>
    
    <cc>gregory.houston</cc>
    
    <cc>michaeln</cc>
    
    <cc>mike</cc>
    
    <cc>sam</cc>
    
    <cc>sekundes</cc>
    
    <cc>webmaster</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2129</commentid>
    <comment_count>0</comment_count>
    <who name="Henry Mason">hmason</who>
    <bug_when>2007-08-16 20:03:50 -0700</bug_when>
    <thetext>As currently specified in HTML 5&apos;s section 6.2, WebKit should support the mechanism for &quot;Server-sent DOM events&quot;. This includes:

* A parser for the &quot;application/x-dom-event-stream&quot; stream format
* A mechanism for creating and dispatching Events after parsing is completed
* Possibly a set of test cases for this functionality?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2117</commentid>
    <comment_count>1</comment_count>
      <attachid>16003</attachid>
    <who name="Henry Mason">hmason</who>
    <bug_when>2007-08-16 21:34:46 -0700</bug_when>
    <thetext>Created attachment 16003
Patch which implements server-sent DOM events

My proposed implementation for this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2109</commentid>
    <comment_count>2</comment_count>
    <who name="Matt Lilek">dev+webkit</who>
    <bug_when>2007-08-16 21:38:03 -0700</bug_when>
    <thetext>Is this something that should go on feature-branch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2064</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-08-17 23:13:07 -0700</bug_when>
    <thetext>First of all, awesome patch! I am only going to comment on one part of the patch for now.

Regarding the changes to:

    WebCore/bindings/scripts/CodeGeneratorJS.pm
    WebCore/bindings/js/JSDocumentCustom.h - (new file)
    WebCore/bindings/js/JSDocumentCustom.cpp

    +Document* toDocument(KJS::JSValue* val)

A custom implementation of this function is not necessary.  You can add the [GenerateNativeConverter] extended attribute to Document.idl for the same code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2059</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-08-17 23:52:01 -0700</bug_when>
    <thetext>Some other bindings related issues.

In WebCore/html/HTMLEventSourceElement.idl

+module html {
+    interface [GenerateConstructor] HTMLEventSourceElement : HTMLElement {
+        attribute DOMString src;
+    };
+}

Please put spaces before and after the interface.  Also, if you are going to use the [GenerateConstructor] extended attribute (and therefore generate a JS constructor) please also add the constructor to DOMWindow.idl.  The same goes for the [GenerateConstructor] in WebCore/dom/MessageEvent.idl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2050</commentid>
    <comment_count>5</comment_count>
      <attachid>16003</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-18 01:04:34 -0700</bug_when>
    <thetext>Comment on attachment 16003
Patch which implements server-sent DOM events

It&apos;s exciting to see an implementation of this part of HTML5!

Thanks for adding the new files to all 3 build systems!

Your patch has a mixture of LGPL and BSD licenses for the new files. Would you be willing to make them all BSD?

-				EnablePREfast=&quot;$(EnablePREfast)&quot;

Please remove this change from your patch in the 3 places it occurs.

+static HashSet&lt;String&gt; *NonBubblingEventTypes()
+static HashSet&lt;String&gt; *NonCancelableEventTypes()

These functions should return a const HashSet&lt;String&gt;&amp;. Their names should have a lowercase first letter. Any *s in this patch should be next to the type name, not the variable name.

+DOMEventStreamLoader::DOMEventStreamLoader(EventTargetNode *target, KURL&amp; url)

The second parameter should be a const KURL&amp;.

+void DOMEventStreamLoader::open()
+{
+    if (!m_isOpen) {

Please reverse the condition of this if and make it an early return. This avoids needless indentation.

+        RefPtr&lt;SubresourceLoader&gt; loader = SubresourceLoader::create(m_target-&gt;ownerDocument()-&gt;frame(), this, request, true, true);
+        m_loader = loader.release();

There&apos;s no need for the local loader variable. You can assign straight into m_loader.

+void DOMEventStreamLoader::close()
+{
+    if (m_isOpen) {

Please make this an early return.

+void DOMEventStreamLoader::handleEvent(Event* event, bool isWindowEvent)

Please remove the unused parameter name (release builds will break otherwise). You also don&apos;t need braces around the body of the if.

+RefPtr&lt;EventTargetNode&gt; DOMEventStreamLoader::getNodeFromFieldValue(String&amp; fieldValue)

The return type should be a PassRefPtr (see &lt;http://webkit.org/coding/RefPtr.html&gt; for an explanation of the uses of RefPtr vs. PassRefPtr). The parameter should be a const String&amp;.

+    if (fieldValue.isEmpty())
+        return 0;
+    else if (fieldValue[0] == &apos;#&apos;)
+        return m_target-&gt;ownerDocument()-&gt;getElementById(fieldValue.substring(1, fieldValue.length()-1));
+    else if (fieldValue == &quot;Document&quot;)
+        return m_target-&gt;ownerDocument();
+    else
+        return 0;

You can remove all instances of the else keyword from these lines, since they all follow return statements. You also don&apos;t need to pass a second argument to String::substring (the default argument will do the same thing for you).

+Event* DOMEventStreamLoader::createEventFromFields(HashMap&lt;String, String&gt;&amp; fields)

The return type should be a PassRefPtr&lt;Event&gt;. The parameter should be a const HashMap&lt;String, String&gt;&amp;.

+    String eventType = fields.contains(&quot;Event&quot;) ? fields.get(&quot;Event&quot;) : &quot;message&quot;;

+    bool bubbles, cancelable;

Please declare these on separate lines (preferably right above the if-else where each is initialized).

+    Event *event;
+    PassRefPtr&lt;WebCore::Event&gt; eventRefPtr;

There&apos;s no need for two variables here. You should just use a single RefPtr&lt;Event&gt; event. (If event is not a RefPtr, you will crash!)

+        else if (eventType == messageEvent)
+            event = new MessageEvent;

There&apos;s no need for this branch (the else below will accomplish the same thing).

+    String data = fields.contains(&quot;data&quot;) ? fields.get(&quot;data&quot;) : &quot;&quot;;
+    int detail = fields.contains(&quot;detail&quot;) ? fields.get(&quot;detail&quot;).toInt() : 0;
+    bool ctrlKey = fields.contains(&quot;ctrlKey&quot;) ? (fields.get(&quot;ctrlKey&quot;) != &quot;false&quot;) : false;

You should make helper functions like getStringFieldValue, getIntFieldValue, getBooleanFieldValue instead of repeating these ternary operators over and over.

+    EventTargetNode* relatedTarget;
+    if (fields.contains(&quot;relatedTarget&quot;)) {
+        String relatedTargetStr = fields.get(&quot;relatedTarget&quot;);
+        RefPtr&lt;EventTargetNode&gt; relatedTargetRef = getNodeFromFieldValue(relatedTargetStr);
+        relatedTarget = relatedTargetRef ? relatedTargetRef.get() : 0;
+    } else 
+        relatedTarget = 0;

relatedTarget should be a RefPtr. Once you change that you won&apos;t need the relatedTargetRef local variable. You also don&apos;t need the relatedTargetStr local variable. If you initialize relatedTarget to 0 you won&apos;t need the else at all. These comments also apply to the relatedNode block below it.

+    // TODO: These fields should be used in cross-domain messaging when it is implemented

Should be a FIXME (we don&apos;t use TODO generally).

+    Document* source(0);

We would normally use = 0 instead of the constructor syntax here.

+        (static_cast&lt;UIEvent*&gt;(event))-&gt;initUIEvent(eventType, bubbles, cancelable, view, detail);

Don&apos;t need the parentheses around the static_cast.

+        (static_cast&lt;SVGZoomEvent*&gt;(event))-&gt;setNewScale(newScale);
+        (static_cast&lt;SVGZoomEvent*&gt;(event))-&gt;setPreviousScale(previousScale);

I think a local variable is preferable to casting twice.

+void DOMEventStreamLoader::willSendRequest(SubresourceLoader* loader, ResourceRequest&amp; request, const ResourceResponse&amp; redirectResponse)

Please remove the unused request parameter name.

+    if (loader != m_loader) return;

Put the return on the next line. (This happens elsewhere as well)

+        /* FIXME:
+           There is a rare unhandled case here. If we get the first byte of a CRLF (&quot;\r\n&quot;)
+           new line in one data chunk, when we get the second chunk with an &apos;\n&apos; byte at the
+           start, we will wrongly parse an empty event. 
+        */

Please use C++ style comments.

+        int newLinePos, nextParseStartPos;

+        } else {
+            // No newline chars, need more data!
+            break;
+        }

I think it would be good to do:

if (lfPos &lt; 0 &amp;&amp; crPos &lt; 0)
   break;

right after the calls to find(). Then this else won&apos;t be needed.

+            RefPtr&lt;EventTargetNode&gt; eventTarget;
+            
+            if (fields.contains(&quot;Target&quot;)) {
+                String target = fields.get(&quot;Target&quot;);
+                RefPtr&lt;EventTargetNode&gt; otherTarget = getNodeFromFieldValue(target);
+                eventTarget = otherTarget ? otherTarget : m_target;
+            } else
+                eventTarget = m_target;

Would be clearer/simpler as:

RefPtr&lt;EventTargetNode&gt; eventTarget = 0;
           
if (fields.contains(&quot;Target&quot;))
    eventTarget = getNodeFromFieldValue(fields.get(&quot;Target&quot;));

if (!eventTarget)
    eventTarget = m_target;

+            Event* event = createEventFromFields(fields);

event needs to be a RefPtr.

+            // Dispatch completed (or not), clear the fields and start parsing the next event

I don&apos;t think this comment adds any information the code doesn&apos;t already say.

+        } else if ((m_unparsedData[parseStartPos] != &apos;;&apos;) &amp;&amp; (m_unparsedData[parseStartPos] != &apos;:&apos;)) {

You can reverse this and turn it into an early continue.

+            String fieldName, fieldContent;

Please declare these on separate lines.

+                fields.set(fieldName, (fields.get(fieldName) + String(&quot;\n&quot;) + fieldContent));

It seems a shame to keep appending all these strings as we go along. There must be a more efficient way to do this.

+    m_reloadTimer.startOneShot(12.0);

The 12.0 constant should go in a static const double at the top of the file.

+#include &quot;EventListener.h&quot;
+#include &quot;EventTargetNode.h&quot;
+#include &quot;KURL.h&quot;
+#include &quot;SubresourceLoaderClient.h&quot;
+#include &quot;TextResourceDecoder.h&quot;
+#include &quot;Timer.h&quot;
+
+#ifndef DOMEventStreamLoader_h
+#define DOMEventStreamLoader_h

The header guards should go above the #includes. You don&apos;t need to #include  EventTargetNode.h, you can just forward declare EventTargetNode.

+    class DOMEventStreamLoader : public EventListener, private SubresourceLoaderClient {

&quot;private&quot; is not needed.

+        DOMEventStreamLoader(EventTargetNode *target, KURL&amp; url);

Please remove the parameter names as they don&apos;t add any information beyond the types.

+        void setTarget(PassRefPtr&lt;EventTargetNode&gt; target) { m_target = target; }

The parameter type should be an EventTargetNode*.

+        KURL *URL() { return &amp;m_url; }

This should be:

const KURL&amp; url() { return m_url; }

+} // namespace

Please name the namespace here.

+void EventTargetNode::addEventSource(String&amp; src)
+{    
+    
+    if (m_eventSources.contains(src)) {

You&apos;ve got an extra newline above the if. The parameter should be a const String&amp; (ditto for removeEventSource).

+    if (m_eventSources.contains(src)) {

Please reverse this and make it an early return.

 #include &quot;EventTarget.h&quot;
+#include &quot;RemoteEventTarget.h&quot;
 #include &quot;Node.h&quot;
+#include &quot;DOMEventStreamLoader.h&quot;

Please keep the #includes lexically sorted. You should also be able to forward-declare DOMEventStreamLoader instead of #including the header.

+ * This file is part of the DOM implementation for KDE.

Please remove this line from any new files.

+ * Copyright (C) 2001 Peter Kelly (pmk@post.com)
+ * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
+ * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
+ * Copyright (C) 2007 Henry Mason (hmason@mac.com)
+ * Copyright (C) 2003, 2005, 2006 Apple Computer, Inc.

I don&apos;t think all these old copyrights apply to your new MessageEvent.cpp file.

+    protected:
+        
+
+    private:    

The protected: is not needed since there&apos;s nothing in it.

+        virtual void addEventSource(String&amp; src);
+        virtual void removeEventSource(String&amp; src);

Perhaps these should be pure virtual functions?

+    DOMEventStreamLoader *m_loader;

Please make this an OwnPtr&lt;DOMEventStreamLoader&gt;.

+    m_loader = new DOMEventStreamLoader((EventTargetNode*)this, kurl);

Use static_cast instead of a C-style case.

+
+#include &quot;EventTargetNode.h&quot;
+

I don&apos;t see why this is needed in HTTPParsers.h.

Index: LayoutTests/http/tests/domeventsource/event-source.html

It would be great to add tests of invalid values for the various fields defined in HTML5.

Index: LayoutTests/http/tests/domeventsource/remote-event-target-expected.txt

This should go inside a &quot;resources&quot; directory. Then run-webkit-tests will know that it&apos;s not a test itself and won&apos;t generate results for it.

\ No newline at end of file

Please add a newline.

r- so that the style can be cleaned up and the RefPtr problems can be addressed. I&apos;m sure other people will have more comments on this patch as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1880</commentid>
    <comment_count>6</comment_count>
      <attachid>16038</attachid>
    <who name="Henry Mason">hmason</who>
    <bug_when>2007-08-20 12:58:20 -0700</bug_when>
    <thetext>Created attachment 16038
Updated Patch

This patch addresses most of the issues brought up so far, along with some others:

- More sane use of RefPtr stuff
- Now supports adding an event source directly to a Document without crashing
- EventTargetNode now only stores a pointer to its internal URL-&gt;Stream Loader hash map, thus making nodes which don&apos;t need event sources require much less memory
- Refactored the field parsing code
- Proper handling of split CR+LF packets
- Switched to BSD license for all new code

Is there a fast way to concat strings? The + operator is what&apos;s used in KJS&apos;s array join() method...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747</commentid>
    <comment_count>7</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2007-09-09 13:26:01 -0700</bug_when>
    <thetext>http://tc.labs.opera.com/html/event-source/ and http://tc.labs.opera.com/html/parsing/event-source/ have tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57415</commentid>
    <comment_count>8</comment_count>
      <attachid>16038</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-09-30 00:00:57 -0700</bug_when>
    <thetext>Comment on attachment 16038
Updated Patch

Sorry it&apos;s taken so long for me to get back to this patch. This is looking a lot nicer!

A couple more stylistic comments:

+static HashSet&lt;String&gt;&amp; nonBubblingEventTypes()
+static HashSet&lt;String&gt;&amp; nonCancelableEventTypes()

The return types should be const.

+DOMEventStreamLoader::DOMEventStreamLoader(EventTargetNode *target, const KURL&amp; url)

The * should be next to EventTargetNode, not target.

+PassRefPtr&lt;EventTargetNode&gt; DOMEventStreamLoader::getNodeFromFieldValue(const String&amp; fieldValue)

I was wrong before in saying that this should return a PassRefPtr. Since we&apos;re not transferring ownership, the correct return type is EventTargetNode* (as you had it originally).

+        /* Not supported in WebCore yet....
+        else if (eventType == DOMElementNamedChangedEvent || eventType == DOMAttributeNameChangeEvent)
+            event = new MutationNameEvent; */

We don&apos;t like to have commented-out code checked in to our tree. I think it would be more appropriate to have a FIXME comment here linking to a bug about supporting these event types.

+    return event;

(at the end of createEventFromFields) To be slightly more efficient, you can do:

return event.releaseRef();

+    if (loader != m_loader) return;
+    if (len &lt; 1) return;

Please put the return on its own line, here and elsewhere.

+        const KURL&amp; URL() { return m_url; }

In my previous comment I forgot to say that this should be a const method.

+    private:
+    
+        String getStringFieldValue(const HashMap&lt;String, String&gt;&amp;, const String&amp;, const String&amp; defaultValue = &quot;&quot;);
+        int getIntFieldValue(const HashMap&lt;String, String&gt;&amp;, const String&amp;, const int defaultValue = 0);
+        unsigned getUnsignedFieldValue(const HashMap&lt;String, String&gt;&amp;, const String&amp;, const unsigned defaultValue = 0);
+        unsigned short getUnsignedShortFieldValue(const HashMap&lt;String, String&gt;&amp;, const String&amp;, const unsigned short defaultValue = 0);
+        bool getBoolFieldValue(const HashMap&lt;String, String&gt;&amp;, const String&amp;, const bool defaultValue = false);
+        float getFloatFieldValue(const HashMap&lt;String, String&gt;&amp;, const String&amp;, const float defaultValue = 0.0);
+        EventTargetNode* getEventTargetNodeFieldValue(const HashMap&lt;String, String&gt;&amp;, const String&amp;, EventTargetNode* defaultValue = 0);
+        
+        PassRefPtr&lt;EventTargetNode&gt; getNodeFromFieldValue(const String&amp; fieldValue);
+        PassRefPtr&lt;Event&gt; createEventFromFields(const HashMap&lt;String, String&gt;&amp; fields);

I think these can all be static helper functions in the .cpp file, rather than being private instance methods.

+    HashMap&lt;String, EventSourceEntry&gt;* m_eventSources;

You could put this in an OwnPtr if you want so that you can avoid having to remember to delete it.

+#include &lt;wtf/Forward.h&gt;

(in RemoteEventTarget.h) I don&apos;t think this include is necessary.

I don&apos;t think this is quite ready to go in yet, but we&apos;re making nice progress!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57416</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-09-30 00:02:20 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Is there a fast way to concat strings? The + operator is what&apos;s used in KJS&apos;s
&gt; array join() method...

One method we sometimes use is to create a Vector&lt;UChar&gt; and do all of the appending work on that. Then, once we&apos;re done appending, we create a String from Vector&lt;UChar&gt;::data().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57417</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-09-30 00:09:41 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; +    return event;
&gt; 
&gt; (at the end of createEventFromFields) To be slightly more efficient, you can
&gt; do:
&gt; 
&gt; return event.releaseRef();

Sorry, that should have been:

return event.release();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57418</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-09-30 00:14:00 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Then, once we&apos;re done appending, we create a String from Vector&lt;UChar&gt;::data().

What I really meant was that we pass the Vector into String::adopt().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112343</commentid>
    <comment_count>12</comment_count>
    <who name="sideshowbarker">mike</who>
    <bug_when>2009-03-04 20:21:51 -0800</bug_when>
    <thetext>URL should be updated to http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#server-sent-events

Note that descript ion for this issue is stale in that MIME type is now text/event-stream -
http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#parsing-an-event-stream</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119024</commentid>
    <comment_count>13</comment_count>
      <attachid>29828</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2009-04-27 14:20:31 -0700</bug_when>
    <thetext>Created attachment 29828
patch

Here&apos;s an implementation that is up to date with the current spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120097</commentid>
    <comment_count>14</comment_count>
      <attachid>30050</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2009-05-06 08:38:03 -0700</bug_when>
    <thetext>Created attachment 30050
proposed patch

Updated patch since the previous one no longer applies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120241</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-05-07 00:21:38 -0700</bug_when>
    <thetext>Is there is a consensus about server-sent DOM events between browser vendors and other parties? I remember it raised concerns about potentially breaking NATs by using more connections per client machine on average, but I do not know how serious this concern is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120264</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2009-05-07 04:42:29 -0700</bug_when>
    <thetext>(In reply to comment #15)

I&apos;m aware of these concerns. This initial implementation is meant to promote further discussions in the WHATWG, W3C, and IETF.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120272</commentid>
    <comment_count>17</comment_count>
    <who name="sideshowbarker">mike</who>
    <bug_when>2009-05-07 06:07:01 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; This initial implementation is meant to promote
&gt; further discussions in the WHATWG, W3C, and IETF.

Adam, (if you don&apos;t know this already) as far as promoting it for further discussion in the W3C, the place to do that would probably best be the public-webapps@w3.org mailing list. http://lists.w3.org/Archives/Public/public-webapps/

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122660</commentid>
    <comment_count>18</comment_count>
      <attachid>30050</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 07:32:00 -0700</bug_when>
    <thetext>Comment on attachment 30050
proposed patch

We need to add test cases for this.  They can also be disabled/skipped by default of course.  The http tests should make this possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122661</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-22 07:34:42 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 30050 [review])
&gt; We need to add test cases for this.  They can also be disabled/skipped by
&gt; default of course.  The http tests should make this possible.

Sorry, my comment may not apply.  It was mostly drive-by.  Reading more of the history this appears to be more of a speculative, framework implementation.  It will still of course need testing, but maybe you already have that planned...  Still could you some explanation about testing in the ChangeLogs.  In fact, the ChangeLog in general needs some lovin... like a link to the spec and this bug at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122942</commentid>
    <comment_count>20</comment_count>
      <attachid>30050</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-24 04:35:24 -0700</bug_when>
    <thetext>Comment on attachment 30050
proposed patch

Thanks for the patch! It will be good to finally have this feature. A few things need to be addressed first:

1) I think it would be ok to enable this by default for testing, unless there is some critical problem with it.

2) It would be nice if constructors (real ones like this, not fake ones like Element) could be autogenerated. I guess that is not a new issue with your patch, so you don&apos;t have to fix this right away, just noticing.

3) might be good to file a follow-up bug on this: // FIXME: should support cross-origin requests

4) EventSource::parseEventStream looks a little large for a single function. Is there a way to break it up into smaller functions for understandability?

5) A couple of times the code removes UChars from the beginning of the m_receiveBuf vector:  m_receiveBuf.remove(0, removeLen);

Removing from the start of a Vector is very inefficient. It copies almost all the contents of the vector every time. I would consider using a different data structure here. One possibility is to keep each incoming chunk of text as a separate Vector or String, and just track where you are in the current segment, and drop it once the whole thing has been processed. Another possibility is to use a Deque, which allows for relatively efficient prepend or remove from start.

6) This patch needs regression tests. I think it would be good to add http tests including both normal Window versions and Worker versions. Tests should ideally cover both normal event delivery, and handling of malformed EventSource streams, with particular attention to edge cases.

The tests are the most critical piece of feedback here. We definitely need regression tests to cover this new feature.

r- for test cases and other feedback. Please resubmit once these issues have been addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123559</commentid>
    <comment_count>21</comment_count>
      <attachid>30778</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2009-05-29 10:16:44 -0700</bug_when>
    <thetext>Created attachment 30778
updated patch

(In reply to comment #20)

Thanks for your feedback.

&gt; 1) I think it would be ok to enable this by default for testing, unless there
&gt; is some critical problem with it.
Done. Note that I have only updated the GTK build system since it is the platform I am testing on.

&gt; 2) It would be nice if constructors (real ones like this, not fake ones like
&gt; Element) could be autogenerated. I guess that is not a new issue with your
&gt; patch, so you don&apos;t have to fix this right away, just noticing.
I am not sure how to automatically generate constructors that take arguments. This could perhaps be fixed later.

&gt; 3) might be good to file a follow-up bug on this: // FIXME: should support
&gt; cross-origin requests
Sure, will do that as soon as this patch is landed.

&gt; 4) EventSource::parseEventStream looks a little large for a single function. Is
&gt; there a way to break it up into smaller functions for understandability?
Line parsing in EventSource::parseEventStream has been extracted to a separate function (EventSource::parseEventStreamLine).

&gt; 5) A couple of times the code removes UChars from the beginning of the
&gt; m_receiveBuf vector:  m_receiveBuf.remove(0, removeLen);
&gt; 
&gt; Removing from the start of a Vector is very inefficient. It copies almost all
&gt; the contents of the vector every time. I would consider using a different data
&gt; structure here. One possibility is to keep each incoming chunk of text as a
&gt; separate Vector or String, and just track where you are in the current segment,
&gt; and drop it once the whole thing has been processed. Another possibility is to
&gt; use a Deque, which allows for relatively efficient prepend or remove from
&gt; start.
Removing from the beginning of the Vector is now reduced to being done when all lines in one chunk has been parsed.

&gt; 6) This patch needs regression tests. I think it would be good to add http
&gt; tests including both normal Window versions and Worker versions. Tests should
&gt; ideally cover both normal event delivery, and handling of malformed EventSource
&gt; streams, with particular attention to edge cases.
Added various tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123658</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-05-29 18:08:53 -0700</bug_when>
    <thetext>This is a nice feature :) Some drive-by-comments.

About the implementation, I was under the impression that the intent was to be able to reuse the same http connection to a given event source for multiple pages. With the goal being fewer distinct hanging GETs lingering around. It looks like this patch makes a distinct request for each instance of an EventSource in all cases. Is that right? If so, maybe a FIXME (and maybe not turn it on by default quite yet?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123794</commentid>
    <comment_count>23</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-06-01 00:32:33 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; This is a nice feature :) Some drive-by-comments.
&gt; 
&gt; About the implementation, I was under the impression that the intent was to be
&gt; able to reuse the same http connection to a given event source for multiple
&gt; pages. With the goal being fewer distinct hanging GETs lingering around. It
&gt; looks like this patch makes a distinct request for each instance of an
&gt; EventSource in all cases. Is that right? If so, maybe a FIXME (and maybe not
&gt; turn it on by default quite yet?)
&gt; 

I don&apos;t see anything like that in the spec: &lt;http://www.w3.org/TR/eventsource/&gt;. The event-stream format has no support for multiplexing or suggestion that it&apos;s possible, as far as I can tell.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123868</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-06-01 12:19:45 -0700</bug_when>
    <thetext>You&apos;re right. I&apos;m not sure why I was under that impression? Although, now I have a greater appreciation of the concerns alluded to earlier about exceeding connection limits :)

I very much like that this feature formalizes support for the commonly performed &apos;hanging get&apos;, and alleviates some of the webapp busy work involved to do so.

&gt; This initial implementation is meant to promote
&gt; further discussions in the WHATWG, W3C, and IETF.

Maybe when that discussion continues, ways to reduce the cost of long lived connections in some use cases can be a part of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125299</commentid>
    <comment_count>25</comment_count>
      <attachid>31160</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2009-06-11 05:45:58 -0700</bug_when>
    <thetext>Created attachment 31160
updated patch

Updated patch to reflect recent changes to ThreadableLoader.

Also replaced remove() with clear() when removing all elements from the m_receiveBuf vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132130</commentid>
    <comment_count>26</comment_count>
      <attachid>31160</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-07-15 21:28:07 -0700</bug_when>
    <thetext>Comment on attachment 31160
updated patch


&gt; +static JSObject* constructEventSource(ExecState* exec, JSObject* constructor, const ArgList&amp; args)
&gt; +{
&gt; +    if (args.size() == 0)
&gt; +        return throwError(exec, SyntaxError, &quot;Not enough arguments&quot;);

Out approach is ussually to just all the the toString conversion go to work on the undefined value instead of checking the number of args here. Is this called out for specifically in the spec?

One thing we should definitely look into doing is writing a fuzzer for this new parser.  Otherwise, this looks great, thanks for keeping it up to date and hanging in there for this ridiculous long time. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134452</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 01:26:04 -0700</bug_when>
    <thetext>Will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134453</commentid>
    <comment_count>28</comment_count>
      <attachid>31160</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-24 01:28:44 -0700</bug_when>
    <thetext>Comment on attachment 31160
updated patch

I tried to land this, but the patch did not apply cleanly to a top-of-tree checkout:

1 out of 3 hunks FAILED -- saving rejects to file configure.ac.rej

I haven&apos;t looked whether the merge is trivial.  Can you post an updated patch that applies cleanly?  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134548</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-24 07:35:34 -0700</bug_when>
    <thetext>I think EventSource code should call nonCacheRequestInFlight(), similarly to how XMLHttpRequest does it. If it does not, other connections may stall indefinitely with some network back-ends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134674</commentid>
    <comment_count>30</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-07-24 15:35:32 -0700</bug_when>
    <thetext>+        void disconnect();

I believe this doesn&apos;t match the current spec - disconnect has been renamed to close. I do not know if there were more spec changes in the meanwhile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137314</commentid>
    <comment_count>31</comment_count>
      <attachid>34139</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2009-08-05 09:17:17 -0700</bug_when>
    <thetext>Created attachment 34139
updated patch

Updated patch to reflect recent changes in the spec as well as in WebKit.

Fixes:
* Renamed disconnect to close according to spec changes (and updated tests)
* Added connection limit counting fix (nonCacheRequestInFlight/Complete)
* Updated calls to set/unsetPendingActivity according to new garbage collection rules in the spec
* Added EventSource to the Qt build system

Since r45558 events are delayed until 512 bytes have been received with the Soup backend due to content sniffing always being enabled (see https://bugs.webkit.org/show_bug.cgi?id=27981).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138124</commentid>
    <comment_count>32</comment_count>
      <attachid>34139</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-07 13:50:27 -0700</bug_when>
    <thetext>Comment on attachment 34139
updated patch

&gt; Index: ChangeLog
&gt; ===================================================================
&gt; --- ChangeLog	(revision 46804)
&gt; +++ ChangeLog	(working copy)
&gt; @@ -1,3 +1,12 @@
&gt; +2009-08-05  Adam Bergkvist  &lt;adam.bergkvist@ericsson.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [GTK] Added EventSource to the build (default on).
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=14997
&gt; +
&gt; +        * configure.ac:
&gt; +
&gt;  2009-08-05  Jan Michael Alonzo  &lt;jmalonzo@webkit.org&gt;
&gt;  
&gt;          Reviewed by Xan Lopez.
&gt; Index: configure.ac
&gt; ===================================================================
&gt; --- configure.ac	(revision 46804)
&gt; +++ configure.ac	(working copy)
&gt; @@ -348,6 +348,14 @@ AC_ARG_ENABLE(database,
&gt;                [],[enable_database=&quot;yes&quot;])
&gt;  AC_MSG_RESULT([$enable_database])
&gt;  
&gt; +# check whether to build with server-sent events support
&gt; +AC_MSG_CHECKING([whether to enable HTML5 server-sent events support])
&gt; +AC_ARG_ENABLE(eventsource,
&gt; +              AC_HELP_STRING([--enable-eventsource],
&gt; +                             [enable HTML5 server-sent events support [default=yes]]),
&gt; +              [],[enable_eventsource=&quot;yes&quot;])
&gt; +AC_MSG_RESULT([$enable_eventsource])
&gt; +
&gt;  # check whether to build with icon database support
&gt;  AC_MSG_CHECKING([whether to enable icon database support])
&gt;  AC_ARG_ENABLE(icon_database,
&gt; @@ -702,6 +710,7 @@ AM_CONDITIONAL([ENABLE_JAVASCRIPT_DEBUGG
&gt;  AM_CONDITIONAL([ENABLE_OFFLINE_WEB_APPLICATIONS],[test &quot;$enable_offline_web_applications&quot; = &quot;yes&quot;])
&gt;  AM_CONDITIONAL([ENABLE_DOM_STORAGE],[test &quot;$enable_dom_storage&quot; = &quot;yes&quot;])
&gt;  AM_CONDITIONAL([ENABLE_DATABASE],[test &quot;$enable_database&quot; = &quot;yes&quot;])
&gt; +AM_CONDITIONAL([ENABLE_EVENTSOURCE],[test &quot;$enable_eventsource&quot; = &quot;yes&quot;])
&gt;  AM_CONDITIONAL([ENABLE_ICONDATABASE],[test &quot;$enable_icon_database&quot; = &quot;yes&quot;])
&gt;  AM_CONDITIONAL([ENABLE_XPATH],[test &quot;$enable_xpath&quot; = &quot;yes&quot;])
&gt;  AM_CONDITIONAL([ENABLE_XSLT],[test &quot;$enable_xslt&quot; = &quot;yes&quot;])
&gt; @@ -758,6 +767,7 @@ Features:
&gt;   HTML5 client-side session and persistent storage support : $enable_dom_storage
&gt;   HTML5 client-side database storage support               : $enable_database
&gt;   HTML5 ruby support                                       : $enable_ruby
&gt; + HTML5 server-sent events support                         : $enable_eventsource
&gt;   HTML5 video element support                              : $enable_video
&gt;   Icon database support                                    : $enable_icon_database
&gt;   SharedWorkers support                                    : $enable_shared_workers
&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 46804)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,87 @@
&gt; +2009-08-05  Adam Bergkvist  &lt;adam.bergkvist@ericsson.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Added implementation of the EventSource object that enables
&gt; +        server-sent events from HTML5.
&gt; +        http://dev.w3.org/html5/eventsource/
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=14997
&gt; +
&gt; +        Tests: fast/eventsource/eventsource-attribute-listeners.html
&gt; +               fast/eventsource/eventsource-constructor.html
&gt; +               http/tests/eventsource/eventsource-bad-mime-type.html
&gt; +               http/tests/eventsource/eventsource-parse-event-stream.html
&gt; +               http/tests/eventsource/eventsource-reconnect.html
&gt; +               http/tests/eventsource/eventsource-status-code-states.html
&gt; +               http/tests/eventsource/workers/eventsource-simple.html
&gt; +
&gt; +        * GNUmakefile.am:
&gt; +        * WebCore.pro:
&gt; +        * bindings/js/JSDOMWindowCustom.cpp:
&gt; +        (WebCore::JSDOMWindow::eventSource):
&gt; +        * bindings/js/JSEventSourceConstructor.cpp: Added.
&gt; +        (WebCore::):
&gt; +        (WebCore::JSEventSourceConstructor::JSEventSourceConstructor):
&gt; +        (WebCore::JSEventSourceConstructor::scriptExecutionContext):
&gt; +        (WebCore::constructEventSource):
&gt; +        (WebCore::JSEventSourceConstructor::getConstructData):
&gt; +        (WebCore::JSEventSourceConstructor::mark):
&gt; +        * bindings/js/JSEventSourceConstructor.h: Added.
&gt; +        (WebCore::JSEventSourceConstructor::classInfo):
&gt; +        * bindings/js/JSEventSourceCustom.cpp: Added.
&gt; +        (WebCore::JSEventSource::mark):
&gt; +        (WebCore::JSEventSource::addEventListener):
&gt; +        (WebCore::JSEventSource::removeEventListener):
&gt; +        * bindings/js/JSEventTarget.cpp:
&gt; +        (WebCore::toJS):
&gt; +        (WebCore::toEventTarget):
&gt; +        * bindings/js/JSWorkerContextCustom.cpp:
&gt; +        (WebCore::JSWorkerContext::eventSource):
&gt; +        * dom/EventNames.h:
&gt; +        * dom/EventTarget.cpp:
&gt; +        (WebCore::EventTarget::toEventSource):
&gt; +        * dom/EventTarget.h:
&gt; +        * page/DOMWindow.idl:
&gt; +        * page/EventSource.cpp: Added.
&gt; +        (WebCore::EventSource::EventSource):
&gt; +        (WebCore::EventSource::~EventSource):
&gt; +        (WebCore::EventSource::connect):
&gt; +        (WebCore::EventSource::endRequest):
&gt; +        (WebCore::EventSource::scheduleReconnect):
&gt; +        (WebCore::EventSource::reconnectTimerFired):
&gt; +        (WebCore::EventSource::url):
&gt; +        (WebCore::EventSource::readyState):
&gt; +        (WebCore::EventSource::close):
&gt; +        (WebCore::EventSource::scriptExecutionContext):
&gt; +        (WebCore::EventSource::addEventListener):
&gt; +        (WebCore::EventSource::removeEventListener):
&gt; +        (WebCore::EventSource::dispatchEvent):
&gt; +        (WebCore::EventSource::didReceiveResponse):
&gt; +        (WebCore::EventSource::didReceiveData):
&gt; +        (WebCore::EventSource::didFinishLoading):
&gt; +        (WebCore::EventSource::didFail):
&gt; +        (WebCore::EventSource::didFailRedirectCheck):
&gt; +        (WebCore::EventSource::parseEventStream):
&gt; +        (WebCore::EventSource::parseEventStreamLine):
&gt; +        (WebCore::EventSource::dispatchGenericEvent):
&gt; +        (WebCore::EventSource::dispatchMessageEvent):
&gt; +        (WebCore::EventSource::stop):
&gt; +        * page/EventSource.h: Added.
&gt; +        (WebCore::EventSource::create):
&gt; +        (WebCore::EventSource::):
&gt; +        (WebCore::EventSource::setOnopen):
&gt; +        (WebCore::EventSource::onopen):
&gt; +        (WebCore::EventSource::setOnmessage):
&gt; +        (WebCore::EventSource::onmessage):
&gt; +        (WebCore::EventSource::setOnerror):
&gt; +        (WebCore::EventSource::onerror):
&gt; +        (WebCore::EventSource::toEventSource):
&gt; +        (WebCore::EventSource::eventListeners):
&gt; +        (WebCore::EventSource::refEventTarget):
&gt; +        (WebCore::EventSource::derefEventTarget):
&gt; +        * page/EventSource.idl: Added.
&gt; +        * workers/WorkerContext.idl:
&gt; +
&gt;  2009-08-05  Andras Becsi  &lt;becsi.andras@stud.u-szeged.hu&gt;
&gt;  
&gt;          Reviewed by Simon Hausmann.
&gt; Index: WebCore/GNUmakefile.am
&gt; ===================================================================
&gt; --- WebCore/GNUmakefile.am	(revision 46804)
&gt; +++ WebCore/GNUmakefile.am	(working copy)
&gt; @@ -237,6 +237,7 @@ IDL_BINDINGS += \
&gt;  	WebCore/page/Coordinates.idl \
&gt;  	WebCore/page/DOMSelection.idl \
&gt;  	WebCore/page/DOMWindow.idl \
&gt; +	WebCore/page/EventSource.idl \
&gt;  	WebCore/page/Geolocation.idl \
&gt;  	WebCore/page/Geoposition.idl \
&gt;  	WebCore/page/History.idl \
&gt; @@ -339,6 +340,9 @@ webcore_sources += \
&gt;  	WebCore/bindings/js/JSEventCustom.cpp \
&gt;  	WebCore/bindings/js/JSEventListener.cpp \
&gt;  	WebCore/bindings/js/JSEventListener.h \
&gt; +	WebCore/bindings/js/JSEventSourceConstructor.cpp \
&gt; +	WebCore/bindings/js/JSEventSourceConstructor.h \
&gt; +	WebCore/bindings/js/JSEventSourceCustom.cpp \
&gt;  	WebCore/bindings/js/JSEventTarget.cpp \
&gt;  	WebCore/bindings/js/JSEventTarget.h \
&gt;  	WebCore/bindings/js/JSGeolocationCustom.cpp \
&gt; @@ -1263,6 +1267,8 @@ webcore_sources += \
&gt;  	WebCore/page/EditorClient.h \
&gt;  	WebCore/page/EventHandler.cpp \
&gt;  	WebCore/page/EventHandler.h \
&gt; +	WebCore/page/EventSource.cpp \
&gt; +	WebCore/page/EventSource.h \
&gt;  	WebCore/page/FocusController.cpp \
&gt;  	WebCore/page/FocusController.h \
&gt;  	WebCore/page/FocusDirection.h \
&gt; @@ -2114,6 +2120,20 @@ webcore_cppflags += -DENABLE_DATABASE=0
&gt;  endif # END ENABLE_DATABASE
&gt;  
&gt;  # ----
&gt; +# HTML5 server-sent events
&gt; +# ----
&gt; +if !ENABLE_EVENTSOURCE
&gt; +global_cppflags += -DENABLE_EVENTSOURCE=0
&gt; +endif
&gt; +
&gt; +if ENABLE_EVENTSOURCE
&gt; +FEATURE_DEFINES_JAVASCRIPT += ENABLE_EVENTSOURCE=1
&gt; +
&gt; +webcore_cppflags += \
&gt; +	-DENABLE_EVENTSOURCE=1
&gt; +endif # ENABLE_EVENTSOURCE
&gt; +
&gt; +# ----
&gt;  # HTML5 client-side session and persistent storage
&gt;  # ----
&gt;  if ENABLE_DOM_STORAGE
&gt; Index: WebCore/WebCore.pro
&gt; ===================================================================
&gt; --- WebCore/WebCore.pro	(revision 46804)
&gt; +++ WebCore/WebCore.pro	(working copy)
&gt; @@ -106,6 +106,7 @@ contains(DEFINES, ENABLE_SINGLE_THREADED
&gt;  
&gt;  !contains(DEFINES, ENABLE_JAVASCRIPT_DEBUGGER=.): DEFINES += ENABLE_JAVASCRIPT_DEBUGGER=1
&gt;  !contains(DEFINES, ENABLE_DATABASE=.): DEFINES += ENABLE_DATABASE=1
&gt; +!contains(DEFINES, ENABLE_EVENTSOURCE=.): DEFINES += ENABLE_EVENTSOURCE=1
&gt;  !contains(DEFINES, ENABLE_OFFLINE_WEB_APPLICATIONS=.): DEFINES += ENABLE_OFFLINE_WEB_APPLICATIONS=1
&gt;  !contains(DEFINES, ENABLE_DOM_STORAGE=.): DEFINES += ENABLE_DOM_STORAGE=1
&gt;  !contains(DEFINES, ENABLE_ICONDATABASE=.): DEFINES += ENABLE_ICONDATABASE=1
&gt; @@ -425,6 +426,7 @@ IDL_BINDINGS += \
&gt;      page/Coordinates.idl \
&gt;      page/DOMSelection.idl \
&gt;      page/DOMWindow.idl \
&gt; +    page/EventSource.idl \
&gt;      page/Geolocation.idl \
&gt;      page/Geoposition.idl \
&gt;      page/History.idl \
&gt; @@ -486,6 +488,8 @@ SOURCES += \
&gt;      bindings/js/JSDOMWindowShell.cpp \
&gt;      bindings/js/JSElementCustom.cpp \
&gt;      bindings/js/JSEventCustom.cpp \
&gt; +    bindings/js/JSEventSourceConstructor.cpp \
&gt; +    bindings/js/JSEventSourceCustom.cpp \
&gt;      bindings/js/JSEventTarget.cpp \
&gt;      bindings/js/JSGeolocationCustom.cpp \
&gt;      bindings/js/JSHTMLAllCollection.cpp \
&gt; @@ -916,6 +920,7 @@ SOURCES += \
&gt;      page/NavigatorBase.cpp \
&gt;      page/DragController.cpp \
&gt;      page/EventHandler.cpp \
&gt; +    page/EventSource.cpp \
&gt;      page/FocusController.cpp \
&gt;      page/Frame.cpp \
&gt;      page/FrameTree.cpp \
&gt; @@ -1162,6 +1167,7 @@ HEADERS += \
&gt;      bindings/js/JSDOMWindowCustom.h \
&gt;      bindings/js/JSDOMWindowShell.h \
&gt;      bindings/js/JSEventListener.h \
&gt; +    bindings/js/JSEventSourceConstructor.h \
&gt;      bindings/js/JSEventTarget.h \
&gt;      bindings/js/JSHistoryCustom.h \
&gt;      bindings/js/JSHTMLAllCollection.h \
&gt; @@ -1586,6 +1592,7 @@ HEADERS += \
&gt;      page/DOMWindow.h \
&gt;      page/DragController.h \
&gt;      page/EventHandler.h \
&gt; +    page/EventSource.h \
&gt;      page/FocusController.h \
&gt;      page/Frame.h \
&gt;      page/FrameTree.h \
&gt; @@ -2264,6 +2271,10 @@ contains(DEFINES, ENABLE_DATAGRID=1) {
&gt;      FEATURE_DEFINES_JAVASCRIPT += ENABLE_DATAGRID=1
&gt;  }
&gt;  
&gt; +contains(DEFINES, ENABLE_EVENTSOURCE=1) {
&gt; +    FEATURE_DEFINES_JAVASCRIPT += ENABLE_EVENTSOURCE=1
&gt; +}
&gt; +
&gt;  contains(DEFINES, ENABLE_SQLITE=1) {
&gt;      !system-sqlite:exists( $${SQLITE3SRCDIR}/sqlite3.c ) {
&gt;              # Build sqlite3 into WebCore from source
&gt; Index: WebCore/bindings/js/JSDOMWindowCustom.cpp
&gt; ===================================================================
&gt; --- WebCore/bindings/js/JSDOMWindowCustom.cpp	(revision 46804)
&gt; +++ WebCore/bindings/js/JSDOMWindowCustom.cpp	(working copy)
&gt; @@ -38,6 +38,7 @@
&gt;  #include &quot;JSDOMWindowShell.h&quot;
&gt;  #include &quot;JSEvent.h&quot;
&gt;  #include &quot;JSEventListener.h&quot;
&gt; +#include &quot;JSEventSourceConstructor.h&quot;
&gt;  #include &quot;JSHTMLCollection.h&quot;
&gt;  #include &quot;JSHistory.h&quot;
&gt;  #include &quot;JSImageConstructor.h&quot;
&gt; @@ -424,6 +425,13 @@ JSValue JSDOMWindow::event(ExecState* ex
&gt;      return toJS(exec, event);
&gt;  }
&gt;  
&gt; +#if ENABLE(EVENTSOURCE)
&gt; +JSValue JSDOMWindow::eventSource(ExecState* exec) const
&gt; +{
&gt; +    return getDOMConstructor&lt;JSEventSourceConstructor&gt;(exec, this);
&gt; +}
&gt; +#endif
&gt; +
&gt;  JSValue JSDOMWindow::image(ExecState* exec) const
&gt;  {
&gt;      return getDOMConstructor&lt;JSImageConstructor&gt;(exec, this);
&gt; Index: WebCore/bindings/js/JSEventSourceConstructor.cpp
&gt; ===================================================================
&gt; --- WebCore/bindings/js/JSEventSourceConstructor.cpp	(revision 0)
&gt; +++ WebCore/bindings/js/JSEventSourceConstructor.cpp	(revision 0)
&gt; @@ -0,0 +1,99 @@
&gt; +/*
&gt; + * Copyright (C) 2009 Ericsson AB
&gt; + * All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1. Redistributions of source code must retain the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer.
&gt; + * 2. Redistributions in binary form must reproduce the above copyright
&gt; + *    notice, this list of conditions and the following disclaimer
&gt; + *    in the documentation and/or other materials provided with the
&gt; + *    distribution.
&gt; + * 3. Neither the name of Ericsson nor the names of its contributors
&gt; + *    may be used to endorse or promote products derived from this
&gt; + *    software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&gt; + * &quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
&gt; + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
&gt; + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
&gt; + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
&gt; + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
&gt; + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
&gt; + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
&gt; + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */
&gt; +
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#if ENABLE(EVENTSOURCE)
&gt; +
&gt; +#include &quot;JSEventSourceConstructor.h&quot;
&gt; +
&gt; +#include &quot;EventSource.h&quot;
&gt; +#include &quot;ExceptionCode.h&quot;
&gt; +#include &quot;JSEventSource.h&quot;
&gt; +#include &quot;ScriptExecutionContext.h&quot;
&gt; +
&gt; +using namespace JSC;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +ASSERT_CLASS_FITS_IN_CELL(JSEventSourceConstructor);
&gt; +
&gt; +const ClassInfo JSEventSourceConstructor::s_info = { &quot;EventSourceContructor&quot;, 0, 0, 0 };
&gt; +
&gt; +JSEventSourceConstructor::JSEventSourceConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
&gt; +    : DOMObject(JSEventSourceConstructor::createStructure(exec-&gt;lexicalGlobalObject()-&gt;objectPrototype()))

This should inherit from DOMConstructorObject

&gt; +    , m_globalObject(globalObject)
&gt; +{
&gt; +    putDirect(exec-&gt;propertyNames().prototype, JSEventSourcePrototype::self(exec, exec-&gt;lexicalGlobalObject()), None);

This should use the passed in global object instead of the lexical global object.

&gt; +    putDirect(exec-&gt;propertyNames().length, jsNumber(exec, 1), ReadOnly|DontDelete|DontEnum);
&gt; +}
&gt; +
&gt; +ScriptExecutionContext* JSEventSourceConstructor::scriptExecutionContext() const
&gt; +{
&gt; +    return m_globalObject-&gt;scriptExecutionContext();
&gt; +}
&gt; +
&gt; +static JSObject* constructEventSource(ExecState* exec, JSObject* constructor, const ArgList&amp; args)
&gt; +{
&gt; +    if (args.size() == 0)
&gt; +        return throwError(exec, SyntaxError, &quot;Not enough arguments&quot;);
&gt; +
&gt; +    UString url = args.at(0).toString(exec);
&gt; +    if (exec-&gt;hadException())
&gt; +        return 0;
&gt; +
&gt; +    ScriptExecutionContext* context = static_cast&lt;JSEventSourceConstructor*&gt;(constructor)-&gt;scriptExecutionContext();
&gt; +    if (!context)
&gt; +        return throwError(exec, ReferenceError, &quot;EventSource constructor associated document is unavailable&quot;);
&gt; +
&gt; +    ExceptionCode ec = 0;
&gt; +    RefPtr&lt;EventSource&gt; eventSource = EventSource::create(url, context, ec);
&gt; +    setDOMException(exec, ec);
&gt; +
&gt; +    return asObject(toJS(exec, eventSource.release()));
&gt; +}
&gt; +
&gt; +ConstructType JSEventSourceConstructor::getConstructData(ConstructData&amp; constructData)
&gt; +{
&gt; +    constructData.native.function = constructEventSource;
&gt; +    return ConstructTypeHost;
&gt; +}
&gt; +
&gt; +void JSEventSourceConstructor::mark()
&gt; +{
&gt; +    DOMObject::mark();
&gt; +    if (!m_globalObject-&gt;marked())
&gt; +        m_globalObject-&gt;mark();
&gt; +}

This method will not be necessary if you inherit from DOMConstructorObject.


&gt; +#if ENABLE(EVENTSOURCE)
&gt; +    if (EventSource* eventSource = target-&gt;toEventSource())
&gt; +        return getCachedDOMObjectWrapper(exec-&gt;globalData(), eventSource);

This should use toJS(exec, globalObject, eventSource);


In addition, the new files need to be added to all the project files (xcode, vcproj, etc.) and DerivedSources.make needs to be updated.

r-</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139342</commentid>
    <comment_count>33</comment_count>
      <attachid>34665</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2009-08-12 09:07:03 -0700</bug_when>
    <thetext>Created attachment 34665
updated patch

Thank you for the quick review and sorry for not noticing the recent addition of the DOMConstructorObject class.
Here is an updated patch that also adds EventSource to the mac and win builds (untested).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139600</commentid>
    <comment_count>34</comment_count>
      <attachid>34665</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 15:29:41 -0700</bug_when>
    <thetext>Comment on attachment 34665
updated patch

Testing 11056 test cases.
fast/dom/prototype-inheritance-2.html -&gt; failed
fast/dom/prototype-inheritance.html -&gt; failed
fast/dom/Window/window-properties.html -&gt; failed

This needs more tests updated.  Either the patch needs to be updated, or someone needs to do that when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139798</commentid>
    <comment_count>35</comment_count>
      <attachid>34732</attachid>
    <who name="Adam Bergkvist">adam.bergkvist</who>
    <bug_when>2009-08-13 04:49:08 -0700</bug_when>
    <thetext>Created attachment 34732
updated patch

Updated expected results of the affected tests.

Index: LayoutTests/fast/dom/prototype-inheritance-2-expected.txt
===================================================================
--- LayoutTests/fast/dom/prototype-inheritance-2-expected.txt	(revision 47105)
+++ LayoutTests/fast/dom/prototype-inheritance-2-expected.txt	(working copy)
@@ -77,6 +77,7 @@ PASS DataGridColumnListConstructor from 
 PASS DataGridColumnListPrototype from inner.document.activeElement.childNodes.14.columns.__proto__
 PASS DocumentPrototype from inner.document.__proto__.__proto__
 PASS ElementPrototype from inner.document.activeElement.lastElementChild.__proto__.__proto__
+PASS EventSourceContructor from inner.EventSource
 FAIL Function from inner.document.location.pathname.constructor
 PASS HTMLAnchorElement from inner.document.activeElement.firstElementChild
 PASS HTMLAnchorElementConstructor from inner.document.activeElement.firstElementChild.constructor
Index: LayoutTests/fast/dom/prototype-inheritance-expected.txt
===================================================================
--- LayoutTests/fast/dom/prototype-inheritance-expected.txt	(revision 47105)
+++ LayoutTests/fast/dom/prototype-inheritance-expected.txt	(working copy)
@@ -77,6 +77,8 @@ PASS inner.Event.isInner is true
 PASS inner.Event.constructor.isInner is true
 PASS inner.EventException.isInner is true
 PASS inner.EventException.constructor.isInner is true
+PASS inner.EventSource.isInner is true
+PASS inner.EventSource.constructor.isInner is true
 PASS inner.File.isInner is true
 PASS inner.File.constructor.isInner is true
 PASS inner.FileList.isInner is true
Index: LayoutTests/fast/dom/Window/window-properties-expected.txt
===================================================================
--- LayoutTests/fast/dom/Window/window-properties-expected.txt	(revision 47105)
+++ LayoutTests/fast/dom/Window/window-properties-expected.txt	(working copy)
@@ -857,6 +857,15 @@ window.EventException [object EventExcep
 window.EventException.UNSPECIFIED_EVENT_TYPE_ERR [number]
 window.EventException.prototype [object EventExceptionPrototype]
 window.EventException.prototype.UNSPECIFIED_EVENT_TYPE_ERR [number]
+window.EventSource [object EventSourceContructor]
+window.EventSource.prototype [object EventSourcePrototype]
+window.EventSource.prototype.CLOSED [number]
+window.EventSource.prototype.CONNECTING [number]
+window.EventSource.prototype.OPEN [number]
+window.EventSource.prototype.addEventListener [function]
+window.EventSource.prototype.close [function]
+window.EventSource.prototype.dispatchEvent [function]
+window.EventSource.prototype.removeEventListener [function]
 window.File [object FileConstructor]
 window.File.prototype [object FilePrototype]
 window.FileList [object FileListConstructor]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139895</commentid>
    <comment_count>36</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-13 10:02:53 -0700</bug_when>
    <thetext>I will land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140480</commentid>
    <comment_count>37</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-15 14:05:05 -0700</bug_when>
    <thetext>Fix landed in r47323.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>140483</commentid>
    <comment_count>38</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-08-15 14:25:46 -0700</bug_when>
    <thetext>Landed missing GTK piece in r47324.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16003</attachid>
            <date>2007-08-16 21:34:46 -0700</date>
            <delta_ts>2007-08-20 12:58:20 -0700</delta_ts>
            <desc>Patch which implements server-sent DOM events</desc>
            <filename>server-side-events.patch</filename>
            <type>text/plain</type>
            <size>103445</size>
            <attacher name="Henry Mason">hmason</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTExNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDA3LTA4LTE2ICBIZW5yeSBNYXNvbiAgPGhtYXNvbkBtYWMuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTQKKyAgICAgICAg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTUKKyAgICAgICAgaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTYKKyAgICAgICAgaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTcKKyAgICAgICAgQWRkZWQgc3Vw
cG9ydCBmb3IgSFRNTDUncyBzZXJ2ZXIgc2lkZSBldmVudCBzeXN0ZW0uCisgICAgICAgIAorICAg
ICAgICBUaGUgZXZlbnQtc291cmNlIEhUTUwgZWxlbWVudCBoYXMgYmVlbiBhZGRlZC4KKyAgICAg
ICAgCisgICAgICAgIFRoZSBSZW1vdmVFdmVudFRhcmdldCBpbnRlcmZhY2UgaGFzIGJlZW4gYWRk
ZWQgYW5kIEV2ZW50VGFyZ2V0Tm9kZQorICAgICAgICBub3cgaW1wbGVtZW50cyBpdC4KKyAgICAg
ICAgCisgICAgICAgIFRoZSBNZXNzYWdlRXZlbnQgaW50ZXJmYWNlIGlzIG5vdyBpbXBsZW1lbnRl
ZCBhbmQgdGhlIEV2ZW50IGNsYXNzCisgICAgICAgIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGFjY2Vw
dCBpdC4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYkNvcmVT
b3VyY2VzLmJrbDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnRvRG9jdW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0
Tm9kZVByb3RvdHlwZUZ1bmN0aW9uOjpjYWxsQXNGdW5jdGlvbik6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNFdmVudFRhcmdldE5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRUYXJn
ZXROb2RlOjopOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
OgorICAgICAgICAqIGRvbS9ET01FdmVudFN0cmVhbUxvYWRlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Tm9uQnViYmxpbmdFdmVudFR5cGVzKTogQWRkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6Tm9uQ2FuY2VsYWJsZUV2ZW50VHlwZXMpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpET01FdmVudFN0cmVhbUxvYWRlcjo6RE9NRXZlbnRTdHJlYW1Mb2FkZXIpOiBBZGRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRlcjo6fkRPTUV2ZW50U3RyZWFtTG9h
ZGVyKTogQWRkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6Om9w
ZW4pOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRlcjo6Y2xv
c2UpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRlcjo6aGFu
ZGxlRXZlbnQpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRl
cjo6R2V0Tm9kZUZyb21GaWVsZFZhbHVlKTogQWRkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9N
RXZlbnRTdHJlYW1Mb2FkZXI6OkNyZWF0ZUV2ZW50RnJvbUZpZWxkcyk6IEFkZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRPTUV2ZW50U3RyZWFtTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOiBBZGRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRlcjo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKTogQWRkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6
OmRpZFJlY2VpdmVEYXRhKTogQWRkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJl
YW1Mb2FkZXI6OmRpZEZhaWwpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0
cmVhbUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6IEFkZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRPTUV2ZW50U3RyZWFtTG9hZGVyOjpyZWxvYWRUaW1lckZpcmVkKTogQWRkZGVkLgorICAgICAg
ICAqIGRvbS9ET01FdmVudFN0cmVhbUxvYWRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkRPTUV2ZW50U3RyZWFtTG9hZGVyOjp0YXJnZXQpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpET01FdmVudFN0cmVhbUxvYWRlcjo6c2V0VGFyZ2V0KTogQWRkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6OlVSTCk6IEFkZGRlZC4KKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KToK
KyAgICAgICAgKiBkb20vRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnQ6OmlzTWVz
c2FnZUV2ZW50KTogQWRkZGVkLgorICAgICAgICAqIGRvbS9FdmVudC5oOgorICAgICAgICAqIGRv
bS9FdmVudE5hbWVzLmg6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OmFkZEV2ZW50U291cmNlKTogQWRkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpyZW1vdmVFdmVudFNvdXJjZSk6IEFk
ZGRlZC4KKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXROb2RlLmg6CisgICAgICAgICogZG9tL01l
c3NhZ2VFdmVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50OjpN
ZXNzYWdlRXZlbnQpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6On5N
ZXNzYWdlRXZlbnQpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6Omlu
aXRNZXNzYWdlRXZlbnQpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6
OmluaXRNZXNzYWdlRXZlbnROUyk6IEFkZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VF
dmVudDo6aXNNZXNzYWdlRXZlbnQpOiBBZGRkZWQuCisgICAgICAgICogZG9tL01lc3NhZ2VFdmVu
dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6c2V0RGF0YSk6IEFk
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6ZGF0YSk6IEFkZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6ZG9tYWluKTogQWRkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6TWVzc2FnZUV2ZW50Ojp1cmkpOiBBZGRkZWQuCisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlRXZlbnQ6OnNvdXJjZSk6IEFkZGRlZC4KKyAgICAgICAgKiBkb20vTWVzc2FnZUV2ZW50
LmlkbDogQWRkZWQuCisgICAgICAgICogZG9tL1JlbW90ZUV2ZW50VGFyZ2V0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW1vdGVFdmVudFRhcmdldDo6flJlbW90ZUV2ZW50VGFyZ2V0
KTogQWRkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVtb3RlRXZlbnRUYXJnZXQ6OmFkZEV2ZW50
U291cmNlKTogQWRkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVtb3RlRXZlbnRUYXJnZXQ6OnJl
bW92ZUV2ZW50U291cmNlKTogQWRkZGVkLgorICAgICAgICAqIGRvbS9SZW1vdGVFdmVudFRhcmdl
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBkb20vUmVtb3RlRXZlbnRUYXJnZXQuaWRsOiBBZGRlZC4K
KyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlubGlu
ZVRhZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6YmxvY2tUYWdMaXN0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpldmVudF9zb3Vy
Y2VDb25zdHJ1Y3Rvcik6IEFkZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZ1bmN0aW9u
TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVs
ZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTEV2ZW50U291cmNlRWxlbWVudDo6SFRNTEV2ZW50U291
cmNlRWxlbWVudCk6IEFkZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFdmVudFNvdXJjZUVs
ZW1lbnQ6On5IVE1MRXZlbnRTb3VyY2VFbGVtZW50KTogQWRkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEV2ZW50U291cmNlRWxlbWVudDo6c3JjKTogQWRkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEV2ZW50U291cmNlRWxlbWVudDo6c2V0U3JjKTogQWRkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEV2ZW50U291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBBZGRk
ZWQuCisgICAgICAgICogaHRtbC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50Lmg6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVudC5pZGw6IEFkZGVkLgorICAgICAgICAq
IGh0bWwvSFRNTFRhZ05hbWVzLmluOgorICAgICAgICAqIHBsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGlzZVN1cHBvcnRlZE5vbkltYWdlTWlt
ZVR5cGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmg6CisKIDIw
MDctMDgtMTYgIEp1c3RpbiBHYXJjaWEgIDxqdXN0aW4uZ2FyY2lhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBIYXJyaXNvbi4KSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9u
IDI1MTE1KQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC04OSw2ICs4OSw3IEBAIGFsbCA6IFwKICAgICBET01IVE1MRG9jdW1lbnQuaCBcCiAgICAgRE9N
SFRNTEVsZW1lbnQuaCBcCiAgICAgRE9NSFRNTEVtYmVkRWxlbWVudC5oIFwKKyAgICBET01IVE1M
RXZlbnRTb3VyY2VFbGVtZW50LmggXAogICAgIERPTUhUTUxGaWVsZFNldEVsZW1lbnQuaCBcCiAg
ICAgRE9NSFRNTEZvbnRFbGVtZW50LmggXAogICAgIERPTUhUTUxGb3JtRWxlbWVudC5oIFwKQEAg
LTEzNCw2ICsxMzUsNyBAQCBhbGwgOiBcCiAgICAgRE9NSFRNTFVMaXN0RWxlbWVudC5oIFwKICAg
ICBET01LZXlib2FyZEV2ZW50LmggXAogICAgIERPTU1lZGlhTGlzdC5oIFwKKyAgICBET01NZXNz
YWdlRXZlbnQuaCBcCiAgICAgRE9NTW91c2VFdmVudC5oIFwKICAgICBET01NdXRhdGlvbkV2ZW50
LmggXAogICAgIERPTU5hbWVkTm9kZU1hcC5oIFwKQEAgLTE0Nyw2ICsxNDksNyBAQCBhbGwgOiBc
CiAgICAgRE9NUkdCQ29sb3IuaCBcCiAgICAgRE9NUmFuZ2UuaCBcCiAgICAgRE9NUmVjdC5oIFwK
KyAgICBET01SZW1vdGVFdmVudFRhcmdldC5oIFwKICAgICBET01TVkdBRWxlbWVudC5oIFwKICAg
ICBET01TVkdBbmdsZS5oIFwKICAgICBET01TVkdBbmltYXRlQ29sb3JFbGVtZW50LmggXApAQCAt
MzUwLDYgKzM1Myw3IEBAIGFsbCA6IFwKICAgICBKU0hUTUxEb2N1bWVudC5oIFwKICAgICBKU0hU
TUxFbGVtZW50LmggXAogICAgIEpTSFRNTEVtYmVkRWxlbWVudC5oIFwKKyAgICBKU0hUTUxFdmVu
dFNvdXJjZUVsZW1lbnQuaCBcCiAgICAgSlNIVE1MRmllbGRTZXRFbGVtZW50LmggXAogICAgIEpT
SFRNTEZvbnRFbGVtZW50LmggXAogICAgIEpTSFRNTEZvcm1FbGVtZW50LmggXApAQCAtMzk3LDYg
KzQwMSw3IEBAIGFsbCA6IFwKICAgICBKU0hpc3RvcnkuaCBcCiAgICAgSlNLZXlib2FyZEV2ZW50
LmggXAogICAgIEpTTWVkaWFMaXN0LmggXAorICAgIEpTTWVzc2FnZUV2ZW50LmggXAogICAgIEpT
TW91c2VFdmVudC5oIFwKICAgICBKU011dGF0aW9uRXZlbnQuaCBcCiAgICAgSlNOYW1lZE5vZGVN
YXAuaCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS5wcm8JKHJldmlzaW9uIDI1MTE1KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29y
a2luZyBjb3B5KQpAQCAtMjQzLDYgKzI0Myw3IEBAIElETF9CSU5ESU5HUyArPSBcCiAgICAgaHRt
bC9IVE1MRG9jdW1lbnQuaWRsIFwKICAgICBodG1sL0hUTUxFbGVtZW50LmlkbCBcCiAgICAgaHRt
bC9IVE1MRW1iZWRFbGVtZW50LmlkbCBcCisgICAgaHRtbC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50
LmlkbCBcCiAgICAgaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmlkbCBcCiAgICAgaHRtbC9IVE1M
Rm9udEVsZW1lbnQuaWRsIFwKICAgICBodG1sL0hUTUxGb3JtRWxlbWVudC5pZGwgXApAQCAtMzE1
LDYgKzMxNiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRD
dXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50V3JhcHBlckZhY3Rvcnku
Y3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0hUTUxFbWJlZEVsZW1lbnRDdXN0b20uY3BwIFwKKyAg
ICBiaW5kaW5ncy9qcy9KU0hUTUxFdmVudFNvdXJjZUVsZW1lbnQuY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9KU0hUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTSFRN
TEZyYW1lRWxlbWVudEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTEZyYW1lU2V0
RWxlbWVudEN1c3RvbS5jcHAgXApAQCAtNDA1LDYgKzQwNyw3IEBAIFNPVVJDRVMgKz0gXAogICAg
IGRvbS9FdmVudFRhcmdldE5vZGUuY3BwIFwKICAgICBkb20vS2V5Ym9hcmRFdmVudC5jcHAgXAog
ICAgIGRvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwIFwKKyAgICBkb20vTWVzc2FnZUV2ZW50LmNwcCBc
CiAgICAgZG9tL01vdXNlRXZlbnQuY3BwIFwKICAgICBkb20vTW91c2VSZWxhdGVkRXZlbnQuY3Bw
IFwKICAgICBkb20vTXV0YXRpb25FdmVudC5jcHAgXApAQCAtNTA3LDYgKzUxMCw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIGh0bWwvSFRNTEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxFbGVtZW50
RmFjdG9yeS5jcHAgXAogICAgIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgXAorICAgIGh0bWwv
SFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVu
dC5jcHAgXAogICAgIGh0bWwvSFRNTEZvbnRFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MRm9y
bUNvbGxlY3Rpb24uY3BwIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAyNTExNSkKKysr
IFdlYkNvcmUvV2ViQ29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3
IEBACiAgICAgICAgIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRGl2RWxlbWVudC5jcHAK
ICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxEb2N1bWVudC5jcHAKICAgICAg
ICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxFbGVtZW50LmNwcAorICAgICAgICBEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHAKICAgICAgICAg
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCiAgICAgICAg
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRm9udEVsZW1lbnQuY3BwCiAgICAgICAgIERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC01NTAsNiArNTUx
LDcgQEAKICAgICAgICAgZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAKICAgICAgICAgZG9tL0tleWJv
YXJkRXZlbnQuY3BwCiAgICAgICAgIGRvbS9NYXBwZWRBdHRyaWJ1dGUuY3BwCisgICAgICAgIGRv
bS9NZXNzYWdlRXZlbnQuY3BwCiAgICAgICAgIGRvbS9Nb3VzZUV2ZW50LmNwcAogICAgICAgICBk
b20vTW91c2VSZWxhdGVkRXZlbnQuY3BwCiAgICAgICAgIGRvbS9NdXRhdGlvbkV2ZW50LmNwcApA
QCAtNjY3LDYgKzY2OSw3IEBACiAgICAgICAgIGh0bWwvSFRNTEVsZW1lbnQuY3BwCiAgICAgICAg
IGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAogICAgICAgICBodG1sL0hUTUxFbWJlZEVsZW1l
bnQuY3BwCisgICAgICAgIGh0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHAKICAgICAgICAg
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAogICAgICAgICBodG1sL0hUTUxGb250RWxlbWVu
dC5jcHAKICAgICAgICAgaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCkluZGV4OiBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDI1MTE1KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NiBAQAogCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiCiAJCQkJRGlzYWJsZVNwZWNpZmlj
V2FybmluZ3M9IjQwOTk7NDEwMDs0MTI3OzQxMzg7NDE4OTs0MjQ0OzQ1MTA7NDUxMjs0NjEwOzQ3
MDY7NDgwMDs0OTk2OzQzNTU7NDI5MTs0MDY4OzYwMTE7NjAzMTs2MjExOzYyNDY7NjI1NTs2Mzg3
IgogCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iV2ViQ29yZVByZWZpeC5oIgotCQkJCUVuYWJsZVBS
RWZhc3Q9IiQoRW5hYmxlUFJFZmFzdCkiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01h
bmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAgLTEzMSw3ICsxMzAsNiBAQAogCQkJCURlYnVn
SW5mb3JtYXRpb25Gb3JtYXQ9IjMiCiAJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQwOTk7
NDEwMDs0MTI3OzQxMzg7NDE4OTs0MjQ0OzQ1MTA7NDUxMjs0NjEwOzQ3MDY7NDgwMDs0OTk2OzQz
NTU7NDI5MTs0MDY4OzYwMTE7NjAzMTs2MjExOzYyNDY7NjI1NTs2Mzg3IgogCQkJCUZvcmNlZElu
Y2x1ZGVGaWxlcz0iV2ViQ29yZVByZWZpeC5oIgotCQkJCUVuYWJsZVBSRWZhc3Q9IiQoRW5hYmxl
UFJFZmFzdCkiCiAJCQkvPgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNv
bXBpbGVyVG9vbCIKQEAgLTIwNiw3ICsyMDQsNiBAQAogCQkJCURlYnVnSW5mb3JtYXRpb25Gb3Jt
YXQ9IjQiCiAJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQwOTk7NDEwMDs0MTI3OzQxMzg7
NDE4OTs0MjQ0OzQ1MTA7NDUxMjs0NjEwOzQ3MDY7NDgwMDs0OTk2OzQzNTU7NDI5MTs0MDY4OzYw
MTE7NjAzMTs2MjExOzYyNDY7NjI1NTs2Mzg3IgogCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iV2Vi
Q29yZVByZWZpeC5oIgotCQkJCUVuYWJsZVBSRWZhc3Q9IiQoRW5hYmxlUFJFZmFzdCkiCiAJCQkv
PgogCQkJPFRvb2wKIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKQEAg
LTExMjAsNiArMTExNywyMiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRT
b3VyY2VzXEpTTWVzc2FnZUV2ZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQor
CQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxE
ZXJpdmVkU291cmNlc1xKU01lc3NhZ2VFdmVudC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXEpTTWVzc2FnZUV2ZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFBy
b2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU01lc3NhZ2VFdmVudC5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2Jq
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTTW91c2VFdmVudC5jcHAiCiAJCQkJPgog
CQkJPC9GaWxlPgpAQCAtMjY3NywyMiArMjY5MCwyMiBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
bG9hZGVyXEZyYW1lTG9hZGVyVHlwZXMuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+Ci0gICAgICAgICAg
ICA8RmlsZQorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxGVFBEaXJlY3Rv
cnlEb2N1bWVudC5jcHAiCiAJCQkJPgotICAgICAgICAgICAgPC9GaWxlPgotICAgICAgICAgICAg
PEZpbGUKKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJc
RlRQRGlyZWN0b3J5RG9jdW1lbnQuaCIKIAkJCQk+Ci0gICAgICAgICAgICA8L0ZpbGU+Ci0gICAg
ICAgICAgICA8RmlsZQorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGxvYWRlclxGVFBEaXJlY3RvcnlQYXJzZXIuY3BwIgogCQkJCT4KLSAgICAgICAgICAgIDwvRmls
ZT4KLSAgICAgICAgICAgIDxGaWxlCisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cbG9hZGVyXEZUUERpcmVjdG9yeVBhcnNlci5oIgogCQkJCT4KLSAgICAgICAgICAg
IDwvRmlsZT4KKwkJCTwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2Fk
ZXJcSW1hZ2VEb2N1bWVudC5jcHAiCiAJCQkJPgpAQCAtMzUyOCwxMSArMzU0MSwxMSBAQAogCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxLZXlFdmVudFdpbi5jcHAiCiAJCQkJCT4K
IAkJCQk8L0ZpbGU+Ci0gICAgICAgIDxGaWxlCisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVx3aW5cTGFuZ3VhZ2UuY3BwIgogCQkJCQk+Ci0gICAgICAgIDwvRmlsZT4K
LSAgICAgICAgPEZpbGUKKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVx3aW5cTUlNRVR5cGVSZWdpc3RyeVdpbi5jcHAiCiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CkBAIC0zNTY4LDExICszNTgxLDExIEBACiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cd2luXFNlYXJjaFBvcHVwTWVudVdpbi5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+Ci0g
ICAgICAgICAgICAgICAgPEZpbGUKKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBs
YXRmb3JtXHdpblxTaGFyZWRCdWZmZXJXaW4uY3BwIgogCQkJCQk+Ci0gICAgICAgICAgICAgICAg
PC9GaWxlPgotICAgICAgICAgICAgICAgIDxGaWxlCisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cd2luXFNoYXJlZFRpbWVyV2luLmNwcCIKIAkJ
CQkJPgogCQkJCTwvRmlsZT4KQEAgLTU2NzIsNiArNTY4NSwxNCBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cRE9NRXZlbnRTdHJlYW1Mb2Fk
ZXIuY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIu
Llxkb21cRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXERPTUltcGxlbWVudGF0aW9uLmNwcCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CkBAIC01NzcyLDYgKzU3OTMsMjIgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE1lc3NhZ2VFdmVudC5oIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTWVzc2FnZUV2
ZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZG9tXE1lc3NhZ2VFdmVudC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNZXNzYWdlRXZlbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE1vdXNlRXZlbnQuY3BwIgogCQkJ
CT4KIAkJCTwvRmlsZT4KQEAgLTU5MzIsNiArNTk2OSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cUmVtb3RlRXZlbnRUYXJnZXQuY3Bw
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21c
UmVtb3RlRXZlbnRUYXJnZXQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5cZG9tXFN0eWxlZEVsZW1lbnQuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4K
QEAgLTY2NDgsNiArNjY5MywxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuY3BwIgorCQkJCT4K
KwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXEhUTUxFdmVu
dFNvdXJjZUVsZW1lbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5caHRtbFxIVE1MRmllbGRTZXRFbGVtZW50LmNwcCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjUxMTUpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNDc5LDYgKzQ3OSwyMSBAQAogCQk2NURGMzIzRTA5RDFERTY1
MDAwQkUzMjUgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1REYzMjM4MDlEMURFNjUwMDBCRTMyNSAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oICovOyB9OwogCQk2NURGMzI2MTA5RDFFMTk5
MDAwQkUzMjUgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MUFGMDlEMTRFRTYwMDBFNjFENyAv
KiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICovOyB9OwogCQk2NUZFQTg2OTA5ODMzQURF
MDBCRUQ0QUIgLyogUGFnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NUZFQTg2ODA5ODMzQURFMDBCRUQ0QUIgLyogUGFnZS5jcHAgKi87IH07CisJ
CTc1OEMyOEIxMEM2M0I3MTMwMEE5NUZEOCAvKiBSZW1vdGVFdmVudFRhcmdldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NThDMjhBRTBDNjNCNzEz
MDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJnZXQuY3BwICovOyB9OworCQk3NThDMjhCMjBDNjNC
NzEzMDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1OEMyOEFGMEM2M0I3MTMwMEE5NUZEOCAvKiBSZW1v
dGVFdmVudFRhcmdldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTc1OEMyOEIzMEM2M0I3MTMwMEE5NUZEOCAvKiBSZW1vdGVFdmVudFRhcmdldC5p
ZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1OEMy
OEIwMEM2M0I3MTMwMEE5NUZEOCAvKiBSZW1vdGVFdmVudFRhcmdldC5pZGwgKi87IH07CisJCTc1
QzIyOTJFMEM1RjlBQkEwMDIxNjZGOCAvKiBNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5MkIwQzVGOUFCQTAwMjE2NkY4
IC8qIE1lc3NhZ2VFdmVudC5jcHAgKi87IH07CisJCTc1QzIyOTJGMEM1RjlBQkEwMDIxNjZGOCAv
KiBNZXNzYWdlRXZlbnQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NUMyMjkyQzBDNUY5QUJBMDAyMTY2RjggLyogTWVzc2FnZUV2ZW50LmlkbCAq
LzsgfTsKKwkJNzVDMjI5MzAwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5MkQwQzVGOUFC
QTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5oICovOyB9OworCQk3NUMyMjk2NzBDNUZBMDNDMDAy
MTY2RjggLyogSlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc1QzIyOTY1MEM1RkEwM0MwMDIxNjZGOCAvKiBKU01lc3NhZ2VFdmVu
dC5oICovOyB9OworCQk3NUMyMjk2ODBDNUZBMDNDMDAyMTY2RjggLyogSlNNZXNzYWdlRXZlbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5
NjYwQzVGQTAzQzAwMjE2NkY4IC8qIEpTTWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKKwkJNzVDMjI5
ODkwQzVGQTA3NjAwMjE2NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5ODcwQzVGQTA3NjAwMjE2NkY4IC8q
IERPTU1lc3NhZ2VFdmVudC5oICovOyB9OworCQk3NUMyMjk4QTBDNUZBMDc2MDAyMTY2RjggLyog
RE9NTWVzc2FnZUV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzVDMjI5ODgwQzVGQTA3NjAwMjE2NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5tbSAq
LzsgfTsKKwkJNzVDMjI5QjUwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVD
MjI5QjIwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuY3BwICovOyB9
OworCQk3NUMyMjlCNjBDNUZCNkJBMDAyMTY2RjggLyogSFRNTEV2ZW50U291cmNlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5QjMw
QzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuaCAqLzsgfTsKKwkJNzVD
MjI5QjcwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuaWRsIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUMyMjlCNDBDNUZC
NkJBMDAyMTY2RjggLyogSFRNTEV2ZW50U291cmNlRWxlbWVudC5pZGwgKi87IH07CisJCTc1QzIy
OUUxMEM2MkE3MzcwMDIxNjZGOCAvKiBET01FdmVudFN0cmVhbUxvYWRlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUMyMjlERjBDNjJBNzM3MDAy
MTY2RjggLyogRE9NRXZlbnRTdHJlYW1Mb2FkZXIuY3BwICovOyB9OworCQk3NUMyMjlFMjBDNjJB
NzM3MDAyMTY2RjggLyogRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QzIyOUUwMEM2MkE3MzcwMDIxNjZGOCAvKiBE
T01FdmVudFN0cmVhbUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdFNkZFRUQ4MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0
RGVidWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdFNkZFRUQ2MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RTZGRUVEOTA4
OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0U2RkVFRDcwODk4NTgyMzAwQzQ0QzNG
IC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSAqLzsgfTsKIAkJODExNjg5NUYwOUYyQTRBMDAw
NzcyQ0EwIC8qIFNWR1RSZWZFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgxMTY4OTVEMDlGMkE0QTAwMDc3MkNBMCAvKiBTVkdUUmVmRWxl
bWVudC5jcHAgKi87IH07CkBAIC0xNDk2LDcgKzE1MTEsNyBAQAogCQk5MzVDNDc3MTA5QUM0RDcz
MDBBNkFBQjQgLyogUGxhdGZvcm1Nb3VzZUV2ZW50TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1QzQ3NkYwOUFDNEQ3MzAwQTZBQUI0IC8qIFBs
YXRmb3JtTW91c2VFdmVudE1hYy5tbSAqLzsgfTsKIAkJOTM1QzQ3NzMwOUFDNEQ3NzAwQTZBQUI0
IC8qIFdoZWVsRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzVDNDc3MjA5QUM0RDc3MDBBNkFBQjQgLyogV2hlZWxFdmVudE1hYy5tbSAq
LzsgfTsKIAkJOTM1QzQ3NzUwOUFDNEQ4RTAwQTZBQUI0IC8qIEdhcFJlY3RzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVDNDc3NDA5QUM0RDhEMDBB
NkFBQjQgLyogR2FwUmVjdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk5MzVGQkM0NTA5QkEwMEI5MDBFMjMwQjEgLyogRXZlbnRMaXN0ZW5lci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1RkJDNDQw
OUJBMDBCOTAwRTIzMEIxIC8qIEV2ZW50TGlzdGVuZXIuaCAqLzsgfTsKKwkJOTM1RkJDNDUwOUJB
MDBCOTAwRTIzMEIxIC8qIEV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUZCQzQ0MDlCQTAwQjkwMEUyMzBCMSAvKiBFdmVudExp
c3RlbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTM1RkJDRjIwOUJBMTQzQjAwRTIzMEIxIC8qIEV4Y2VwdGlvbkNvZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUZCQ0YxMDlCQTE0M0IwMEUy
MzBCMSAvKiBFeGNlcHRpb25Db2RlLmggKi87IH07CiAJCTkzNkI0MjRFMDlBNDM2Q0QwMEJBQTgy
MCAvKiBTVkdDU1NQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThDMEY2RjYwODk3MDFGMTAwQkE1MTE0IC8qIFNWR0NTU1BhcnNlci5jcHAg
Ki87IH07CiAJCTkzNzI1NjEwMEE2MTU2NDIwMEIwNTNCOSAvKiBsaWJzcWxpdGUzLmR5bGliIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM3MjU2MEYw
QTYxNTY0MjAwQjA1M0I5IC8qIGxpYnNxbGl0ZTMuZHlsaWIgKi87IH07CkBAIC0zNzU1LDYgKzM3
NzAsMjEgQEAKIAkJNjVGNTM4MjQwOUIyQjU3NTAwRjNEQzRBIC8qIG1hYy1lbmNvZGluZ3MudHh0
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAibWFjLWVuY29kaW5ncy50eHQiOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk2NUY4MDY5NzA1NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNl
cHRpb25zLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gQmxvY2tFeGNlcHRpb25zLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFC
IC8qIFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NThDMjhBRTBDNjNCNzEzMDBBOTVG
RDggLyogUmVtb3RlRXZlbnRUYXJnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbW90ZUV2ZW50VGFyZ2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzU4QzI4QUYwQzYzQjcxMzAwQTk1RkQ4IC8qIFJlbW90ZUV2ZW50VGFyZ2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVFdmVudFRhcmdldC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NThDMjhCMDBDNjNCNzEzMDBBOTVGRDggLyogUmVt
b3RlRXZlbnRUYXJnZXQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVFdmVudFRh
cmdldC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc1QzIyOTJCMEM1RjlBQkEw
MDIxNjZGOCAvKiBNZXNzYWdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1lc3NhZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTc1QzIyOTJDMEM1RjlBQkEwMDIxNjZGOCAvKiBNZXNzYWdlRXZlbnQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBNZXNzYWdlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3NUMyMjkyRDBDNUY5QUJBMDAyMTY2RjggLyogTWVzc2FnZUV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXNzYWdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzVDMjI5NjUwQzVGQTAzQzAwMjE2NkY4IC8qIEpTTWVzc2FnZUV2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lc3NhZ2VFdmVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NUMyMjk2NjBDNUZBMDNDMDAyMTY2RjggLyog
SlNNZXNzYWdlRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTTWVzc2FnZUV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzVDMjI5
ODcwQzVGQTA3NjAwMjE2NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRE9NTWVzc2FnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTc1QzIyOTg4MEM1RkEwNzYwMDIxNjZGOCAvKiBET01NZXNzYWdlRXZlbnQubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NTWVzc2FnZUV2ZW50
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NUMyMjlCMjBDNUZCNkJBMDAyMTY2
RjggLyogSFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTc1QzIyOUIzMEM1RkI2QkEwMDIxNjZGOCAvKiBIVE1MRXZlbnRTb3Vy
Y2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRXZlbnRT
b3VyY2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc1QzIyOUI0MEM1
RkI2QkEwMDIxNjZGOCAvKiBIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gSFRNTEV2ZW50U291cmNlRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTc1QzIyOURGMEM2MkE3MzcwMDIxNjZGOCAvKiBET01FdmVudFN0cmVhbUxv
YWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NRXZlbnRT
dHJlYW1Mb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NUMyMjlFMDBD
NjJBNzM3MDAyMTY2RjggLyogRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTUV2ZW50U3RyZWFtTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdFNkZFRUQ2MDg5ODU4MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0
RGVidWdnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTdFNkZFRUQ3MDg5ODU4MjMwMEM0NEMzRiAv
KiBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTgx
MTY4OTVEMDlGMkE0QTAwMDc3MkNBMCAvKiBTVkdUUmVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVFJlZkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjc0OSw2ICs2Nzc5LDggQEAKIAkJCQlBODY2MjlDRDA5REEy
QjQ3MDA5NjMzQTUgLyogSlNLZXlib2FyZEV2ZW50LmggKi8sCiAJCQkJQkMzQzM5QjQwQzBEM0Q4
RDAwNUY0RDdBIC8qIEpTTWVkaWFMaXN0LmNwcCAqLywKIAkJCQlCQzNDMzlCNTBDMEQzRDhEMDA1
RjREN0EgLyogSlNNZWRpYUxpc3QuaCAqLywKKwkJCQk3NUMyMjk2NjBDNUZBMDNDMDAyMTY2Rjgg
LyogSlNNZXNzYWdlRXZlbnQuY3BwICovLAorCQkJCTc1QzIyOTY1MEM1RkEwM0MwMDIxNjZGOCAv
KiBKU01lc3NhZ2VFdmVudC5oICovLAogCQkJCUE4NjYyOUNDMDlEQTJCNDcwMDk2MzNBNSAvKiBK
U01vdXNlRXZlbnQuY3BwICovLAogCQkJCUE4NjYyOUNCMDlEQTJCNDcwMDk2MzNBNSAvKiBKU01v
dXNlRXZlbnQuaCAqLywKIAkJCQk2NURGMzFFNzA5RDFDQzYwMDAwQkUzMjUgLyogSlNNdXRhdGlv
bkV2ZW50LmNwcCAqLywKQEAgLTc4MTgsNiArNzg1MCw4IEBACiAJCQkJODVERjM0M0YwQUFGQzBF
RDAwRTU5QUUzIC8qIERPTUtleWJvYXJkRXZlbnRQcml2YXRlLmggKi8sCiAJCQkJODVGRjMxNTgw
QUFGQkZDQjAwMzc0RjM4IC8qIERPTUtleWJvYXJkRXZlbnQuaCAqLywKIAkJCQk4NUZGMzE1OTBB
QUZCRkNCMDAzNzRGMzggLyogRE9NS2V5Ym9hcmRFdmVudC5tbSAqLywKKwkJCQk3NUMyMjk4NzBD
NUZBMDc2MDAyMTY2RjggLyogRE9NTWVzc2FnZUV2ZW50LmggKi8sCisJCQkJNzVDMjI5ODgwQzVG
QTA3NjAwMjE2NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5tbSAqLywKIAkJCQk4NTdFMEIyQjBBQjA0
M0ZDMDAzNkU0NDcgLyogRE9NTW91c2VFdmVudFByaXZhdGUuaCAqLywKIAkJCQk4NTdFMEIyMzBB
QjA0MzQ2MDAzNkU0NDcgLyogRE9NTW91c2VFdmVudC5oICovLAogCQkJCTg1N0UwQjI0MEFCMDQz
NDYwMDM2RTQ0NyAvKiBET01Nb3VzZUV2ZW50Lm1tICovLApAQCAtODQ1Myw2ICs4NDg3LDkgQEAK
IAkJCQlBODcxRDQ1NTBBMTI3Q0JDMDBCMTJBNjggLyogSFRNTEVtYmVkRWxlbWVudC5jcHAgKi8s
CiAJCQkJQTg3MUQ0NTIwQTEyN0NCQzAwQjEyQTY4IC8qIEhUTUxFbWJlZEVsZW1lbnQuaCAqLywK
IAkJCQk4NTkxMjg3OTBBQjIyMkVDMDAyMDIyNjUgLyogSFRNTEVtYmVkRWxlbWVudC5pZGwgKi8s
CisJCQkJNzVDMjI5QjIwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQu
Y3BwICovLAorCQkJCTc1QzIyOUIzMEM1RkI2QkEwMDIxNjZGOCAvKiBIVE1MRXZlbnRTb3VyY2VF
bGVtZW50LmggKi8sCisJCQkJNzVDMjI5QjQwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNv
dXJjZUVsZW1lbnQuaWRsICovLAogCQkJCUE4MTM2OUI5MDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1M
RmllbGRTZXRFbGVtZW50LmNwcCAqLywKIAkJCQlBODEzNjlCODA5NzM3NEY1MDBENzQ0NjMgLyog
SFRNTEZpZWxkU2V0RWxlbWVudC5oICovLAogCQkJCTFBRTJBOUY0MEExQ0RBNTcwMEI0MkIyNSAv
KiBIVE1MRmllbGRTZXRFbGVtZW50LmlkbCAqLywKQEAgLTEwMDU2LDYgKzEwMDkzLDggQEAKIAkJ
CQlBODE4NUYzNjA5NzY1NzY1MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uY3BwICovLAog
CQkJCUE4MTg1RjMzMDk3NjU3NjUwMDU4MjZEOSAvKiBET01JbXBsZW1lbnRhdGlvbi5oICovLAog
CQkJCTkzRUVDMUU5MDlDMjg3NzcwMEM1MTVEMSAvKiBET01JbXBsZW1lbnRhdGlvbi5pZGwgKi8s
CisJCQkJNzVDMjI5REYwQzYyQTczNzAwMjE2NkY4IC8qIERPTUV2ZW50U3RyZWFtTG9hZGVyLmNw
cCAqLywKKwkJCQk3NUMyMjlFMDBDNjJBNzM3MDAyMTY2RjggLyogRE9NRXZlbnRTdHJlYW1Mb2Fk
ZXIuaCAqLywKIAkJCQk2NTUwQjY5OTA5OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3Bw
ICovLAogCQkJCTY1NTBCNjlBMDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5oICovLAog
CQkJCUE4QzRBN0Y2MDlENTYzMjcwMDAzQUM4RCAvKiBFbGVtZW50LmNwcCAqLywKQEAgLTEwMDg2
LDYgKzEwMTI1LDkgQEAKIAkJCQlBOEM0QTdGNDA5RDU2MzI3MDAwM0FDOEQgLyogTWFwcGVkQXR0
cmlidXRlLmNwcCAqLywKIAkJCQlBOEM0QTdGMzA5RDU2MzI3MDAwM0FDOEQgLyogTWFwcGVkQXR0
cmlidXRlLmggKi8sCiAJCQkJQThDNEE4NEIwOUQ1NjQ5RDAwMDNBQzhEIC8qIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5LmggKi8sCisJCQkJNzVDMjI5MkIwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VF
dmVudC5jcHAgKi8sCisJCQkJNzVDMjI5MkMwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVu
dC5pZGwgKi8sCisJCQkJNzVDMjI5MkQwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5o
ICovLAogCQkJCTg1MDMxQjJGMEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZUV2ZW50LmNwcCAqLywK
IAkJCQk4NTAzMUIzMDBBNDRFRkM3MDBGOTkyRTAgLyogTW91c2VFdmVudC5oICovLAogCQkJCTE0
MUI5NEU1MDlFQzQyMjMwMDBFOTQxMyAvKiBNb3VzZUV2ZW50LmlkbCAqLywKQEAgLTEwMTM4LDYg
KzEwMTgwLDkgQEAKIAkJCQlEMjNDQTU0ODBBQjBFOTgzMDA1MTA4QTUgLyogUmFuZ2VFeGNlcHRp
b24uaWRsICovLAogCQkJCTg1MDMxQjM1MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lci5jcHAgKi8sCiAJCQkJODUwMzFCMzYwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyLmggKi8sCisJCQkJNzU4QzI4QUUwQzYzQjcxMzAwQTk1RkQ4IC8q
IFJlbW90ZUV2ZW50VGFyZ2V0LmNwcCAqLywKKwkJCQk3NThDMjhBRjBDNjNCNzEzMDBBOTVGRDgg
LyogUmVtb3RlRXZlbnRUYXJnZXQuaCAqLywKKwkJCQk3NThDMjhCMDBDNjNCNzEzMDBBOTVGRDgg
LyogUmVtb3RlRXZlbnRUYXJnZXQuaWRsICovLAogCQkJCUE4QzRBN0VDMDlENTYzMjcwMDAzQUM4
RCAvKiBTdHlsZWRFbGVtZW50LmNwcCAqLywKIAkJCQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQg
LyogU3R5bGVkRWxlbWVudC5oICovLAogCQkJCUFBNEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBT
dHlsZUVsZW1lbnQuY3BwICovLApAQCAtMTE3MTEsNiArMTE3NTYsMTIgQEAKIAkJCQlCNDAyRkQw
QjBDNEM5QzM5MDAyMTBBQTYgLyogQmlkaVJlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjMxQ0JGOTJCNjU0NzMwQkEwNTM1RTggLyogQmlkaUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MzJFODQ3MEM1MTQ5MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTc1QzIyOTMwMEM1RjlBQkEwMDIxNjZGOCAvKiBNZXNzYWdlRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTc1QzIyOTY3MEM1RkEwM0MwMDIxNjZGOCAvKiBKU01lc3NhZ2VFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzVDMjI5ODkwQzVGQTA3NjAwMjE2NkY4IC8qIERPTU1l
c3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzVDMjI5QjYwQzVGQjZCQTAwMjE2NkY4
IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTc1QzIyOUUy
MEM2MkE3MzcwMDIxNjZGOCAvKiBET01FdmVudFN0cmVhbUxvYWRlci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzU4QzI4QjIwQzYzQjcxMzAwQTk1RkQ4IC8qIFJlbW90ZUV2ZW50VGFyZ2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTRCM0Y3MzBDNzIyMDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CkBAIC0xMTgyMyw2ICsxMTg3NCw5IEBACiAJCQkJMDY2OTNGN0IwQkZCQzkxNzAw
MjE2MDcyIC8qIGluc3BlY3RvciBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0EwQzA1MUZE
RTAwMTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFBQjFB
RTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8s
CisJCQkJNzVDMjI5MkYwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5pZGwgaW4gUmVz
b3VyY2VzICovLAorCQkJCTc1QzIyOUI3MEM1RkI2QkEwMDIxNjZGOCAvKiBIVE1MRXZlbnRTb3Vy
Y2VFbGVtZW50LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNzU4QzI4QjMwQzYzQjcxMzAwQTk1
RkQ4IC8qIFJlbW90ZUV2ZW50VGFyZ2V0LmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMzE2Nyw2
ICsxMzIyMSwxMiBAQAogCQkJCUJDNzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJl
Z2lzdHJ5TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRjk3MUUyN0ZENzBGNDM4MkJDNjZENzky
IC8qIEJpZGlDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MzJFODQ5MEM1MTQ5M0Yw
MEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzVDMjI5MkUw
QzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3
NUMyMjk2ODBDNUZBMDNDMDAyMTY2RjggLyogSlNNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNzVDMjI5OEEwQzVGQTA3NjAwMjE2NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5tbSBp
biBTb3VyY2VzICovLAorCQkJCTc1QzIyOUI1MEM1RkI2QkEwMDIxNjZGOCAvKiBIVE1MRXZlbnRT
b3VyY2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc1QzIyOUUxMEM2MkE3MzcwMDIx
NjZGOCAvKiBET01FdmVudFN0cmVhbUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3NThD
MjhCMTBDNjNCNzEzMDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkMyRUQ1NTUwQzZCOUJEMzAwOTIwQkZGIC8qIEpTRWxlbWVudEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzJFRDY1MDBDNkJDNDhDMDA5MjBCRkYgLyogSlNIVE1MSUZy
YW1lRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzJFRDZCQzBDNkJEMkYw
MDA5MjBCRkYgLyogSlNBdHRyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNTExNSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDQgKzc3LDEyIEBAIEpTVmFsdWUqIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBEb2N1bWVudCoK
ICAgICByZXR1cm4gcmV0OwogfQogCisKK0RvY3VtZW50KiB0b0RvY3VtZW50KEtKUzo6SlNWYWx1
ZSogdmFsKQoreworICAgIGlmICghdmFsIHx8ICF2YWwtPmlzT2JqZWN0KCZKU0RvY3VtZW50Ojpp
bmZvKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50
Kj4oc3RhdGljX2Nhc3Q8SlNEb2N1bWVudCo+KHZhbCktPmltcGwoKSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTRG9jdW1l
bnRDdXN0b21faAorI2RlZmluZSBKU0RvY3VtZW50Q3VzdG9tX2gKKworI2luY2x1ZGUgIkpTRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJKU05vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisg
ICAgRG9jdW1lbnQqIHRvRG9jdW1lbnQoS0pTOjpKU1ZhbHVlKik7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEpTRG9jdW1lbnRDdXN0b21faApJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwCShyZXZpc2lvbiAyNTExNSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUg
IkpTS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkpTTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVk
ZSAiSlNNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiSlNNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVk
ZSAiSlNPdmVyZmxvd0V2ZW50LmgiCkBAIC0zOSw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNVSUV2
ZW50LmgiCiAjaW5jbHVkZSAiSlNXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
ICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgpA
QCAtODEsNiArODMsOCBAQCBLSlM6OkpTVmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMs
CiAgICAgICAgIHJldCA9IG5ldyBKU011dGF0aW9uRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8TXV0
YXRpb25FdmVudCo+KGV2ZW50KSk7CiAgICAgZWxzZSBpZiAoZXZlbnQtPmlzT3ZlcmZsb3dFdmVu
dCgpKQogICAgICAgICByZXQgPSBuZXcgSlNPdmVyZmxvd0V2ZW50KGV4ZWMsIHN0YXRpY19jYXN0
PE92ZXJmbG93RXZlbnQqPihldmVudCkpOworICAgIGVsc2UgaWYgKGV2ZW50LT5pc01lc3NhZ2VF
dmVudCgpKQorICAgICAgICByZXQgPSBuZXcgSlNNZXNzYWdlRXZlbnQoZXhlYywgc3RhdGljX2Nh
c3Q8TWVzc2FnZUV2ZW50Kj4oZXZlbnQpKTsKICAgICBlbHNlCiAgICAgICAgIHJldCA9IG5ldyBK
U0V2ZW50KGV4ZWMsIGV2ZW50KTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9uIDI1MTE1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Myw2ICszNDMsOSBAQCB2
b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpwdXNoRXZlbnRIYW5kbGVyCiBhZGRFdmVudExpc3RlbmVy
ICAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6QWRkRXZlbnRMaXN0ZW5lciAgIERv
bnREZWxldGV8RnVuY3Rpb24gMwogcmVtb3ZlRXZlbnRMaXN0ZW5lciAgICAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldE5vZGU6OlJlbW92ZUV2ZW50TGlzdGVuZXIgICAgRG9udERlbGV0ZXxGdW5jdGlv
biAzCiBkaXNwYXRjaEV2ZW50ICAgICAgICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6
RGlzcGF0Y2hFdmVudCAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisjIGZyb20gdGhlIFJlbW90ZUV2
ZW50VGFyZ2V0IGludGVyZmFjZQorYWRkRXZlbnRTb3VyY2UgICAgICAgICAgV2ViQ29yZTo6SlNF
dmVudFRhcmdldE5vZGU6OkFkZEV2ZW50U291cmNlICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEK
K3JlbW92ZUV2ZW50U291cmNlICAgICAgIFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpSZW1v
dmVFdmVudFNvdXJjZSAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCiBAZW5kCiAqLwogCkBAIC0z
NzEsNiArMzc0LDE2IEBAIEpTVmFsdWUqIEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlRnVuY3QK
ICAgICAgICAgfQogICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXROb2RlOjpEaXNwYXRjaEV2ZW50
OgogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihub2RlLT5kaXNwYXRjaEV2ZW50KHRvRXZl
bnQoYXJnc1swXSksIGV4Y2VwdGlvbikpOworICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXROb2Rl
OjpBZGRFdmVudFNvdXJjZTogeworICAgICAgICAgICAgU3RyaW5nIGFyZzBzdHIoYXJnc1swXS0+
dG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgbm9kZS0+YWRkRXZlbnRTb3VyY2UoYXJnMHN0
cik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAg
ICBjYXNlIEpTRXZlbnRUYXJnZXROb2RlOjpSZW1vdmVFdmVudFNvdXJjZTogeworICAgICAgICAg
ICAgU3RyaW5nIGFyZzBzdHIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAg
bm9kZS0+cmVtb3ZlRXZlbnRTb3VyY2UoYXJnMHN0cik7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUuaAkocmV2aXNpb24g
MjUxMTUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDcgKzUzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAg
ICAgT25CZWZvcmVDdXQsIE9uQ3V0LCBPbkJlZm9yZUNvcHksIE9uQ29weSwgT25CZWZvcmVQYXN0
ZSwgT25QYXN0ZSwgT25TZWxlY3RTdGFydCwKICAgICAgICAgICAgIE9uRm9jdXMsIE9uSW5wdXQs
IE9uS2V5RG93biwgT25LZXlQcmVzcywgT25LZXlVcCwgT25Mb2FkLCBPbk1vdXNlRG93biwKICAg
ICAgICAgICAgIE9uTW91c2VNb3ZlLCBPbk1vdXNlT3V0LCBPbk1vdXNlT3ZlciwgT25Nb3VzZVVw
LCBPbk1vdXNlV2hlZWwsIE9uUmVzZXQsCi0gICAgICAgICAgICBPblJlc2l6ZSwgT25TY3JvbGws
IE9uU2VhcmNoLCBPblNlbGVjdCwgT25TdWJtaXQsIE9uVW5sb2FkCisgICAgICAgICAgICBPblJl
c2l6ZSwgT25TY3JvbGwsIE9uU2VhcmNoLCBPblNlbGVjdCwgT25TdWJtaXQsIE9uVW5sb2FkLAor
ICAgICAgICAgICAgQWRkRXZlbnRTb3VyY2UsIFJlbW92ZUV2ZW50U291cmNlCiAgICAgICAgIH07
CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCShyZXZpc2lvbiAyNTExNSkKKysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTEzMTEsNiArMTMxMSw3IEBAIHN1YiBU
eXBlQ2FuRmFpbENvbnZlcnNpb24KICAgICAgICAgICAgICAgICAkdHlwZSBlcSAiRE9NU3RyaW5n
IiBvcgogICAgICAgICAgICAgICAgICR0eXBlIGVxICJOb2RlIiBvcgogICAgICAgICAgICAgICAg
ICR0eXBlIGVxICJFbGVtZW50IiBvcgorICAgICAgICAgICAgICAgICR0eXBlIGVxICJEb2N1bWVu
dCIgb3IKICAgICAgICAgICAgICAgICAkdHlwZSBlcSAiRG9jdW1lbnRUeXBlIiBvcgogICAgICAg
ICAgICAgICAgICR0eXBlIGVxICJFdmVudCIgb3IKICAgICAgICAgICAgICAgICAkdHlwZSBlcSAi
RXZlbnRMaXN0ZW5lciIgb3IKQEAgLTEzODUsNiArMTM4NiwxMSBAQCBzdWIgSlNWYWx1ZVRvTmF0
aXZlCiAgICAgaWYgKCR0eXBlIGVxICJTVkdQb2ludCIpIHsKICAgICAgICAgJGltcGxJbmNsdWRl
c3siRmxvYXRQb2ludC5oIn0gPSAxOwogICAgIH0KKyAgICAKKyAgICBpZiAoJHR5cGUgZXEgIkRv
Y3VtZW50IikgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RvY3VtZW50Q3VzdG9tLmgifSA9
IDE7CisgICAgICAgIHJldHVybiAidG9Eb2N1bWVudCgkdmFsdWUpIjsKKyAgICB9CiAKICAgICAj
IERlZmF1bHQsIGFzc3VtZSBhdXRvZ2VuZXJhdGVkIHR5cGUgY29udmVyc2lvbiByb3V0aW5lcwog
ICAgICRpbXBsSW5jbHVkZXN7IkpTJHR5cGUuaCJ9ID0gMTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RP
TUV2ZW50U3RyZWFtTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01FdmVu
dFN0cmVhbUxvYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9ET01FdmVudFN0
cmVhbUxvYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhlbnJ5IE1hc29uIChobWFzb25AbWFjLmNvbSkKKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaCIKKyNpbmNsdWRlICJF
dmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50
LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2lu
Y2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCisjaW5jbHVk
ZSAiT3ZlcmZsb3dFdmVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1
ZGUgIlVJRXZlbnQuaCIKKyNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUg
IlRleHRFdmVudC5oIgorI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKKworI2lmIEVOQUJMRShTVkcp
CisjaW5jbHVkZSAiU1ZHWm9vbUV2ZW50LmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFt
ZXM7CisKK3N0YXRpYyBIYXNoU2V0PFN0cmluZz4gKk5vbkJ1YmJsaW5nRXZlbnRUeXBlcygpCit7
CisgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBuYW1lczsKKyAgICBzdGF0aWMgYm9vbCBpbnRp
YWxpemVkID0gZmFsc2U7CisgICAgCisgICAgaWYgKCFpbnRpYWxpemVkKSB7CisgICAgICAgIG5h
bWVzLmFkZChmb2N1c0V2ZW50KTsKKyAgICAgICAgbmFtZXMuYWRkKGJsdXJFdmVudCk7CisgICAg
ICAgIG5hbWVzLmFkZChET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudEV2ZW50KTsKKyAgICAgICAg
bmFtZXMuYWRkKERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50KTsKKyAgICAgICAgbmFt
ZXMuYWRkKGxvYWRFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZCh1bmxvYWRFdmVudCk7CisgICAg
ICAgIGludGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gJm5hbWVzOwor
fQorCitzdGF0aWMgSGFzaFNldDxTdHJpbmc+ICpOb25DYW5jZWxhYmxlRXZlbnRUeXBlcygpCit7
CisgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBuYW1lczsKKyAgICBzdGF0aWMgYm9vbCBpbnRp
YWxpemVkID0gZmFsc2U7CisgICAgCisgICAgaWYgKCFpbnRpYWxpemVkKSB7CisgICAgICAgIG5h
bWVzLmFkZChET01Gb2N1c0luRXZlbnQpOworICAgICAgICBuYW1lcy5hZGQoRE9NRm9jdXNPdXRF
dmVudCk7CisgICAgICAgIG5hbWVzLmFkZChmb2N1c0V2ZW50KTsKKyAgICAgICAgbmFtZXMuYWRk
KGJsdXJFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZChET01TdWJ0cmVlTW9kaWZpZWRFdmVudCk7
CisgICAgICAgIG5hbWVzLmFkZChET01Ob2RlUmVtb3ZlZEV2ZW50KTsKKyAgICAgICAgbmFtZXMu
YWRkKERPTU5vZGVJbnNlcnRlZEV2ZW50KTsKKyAgICAgICAgbmFtZXMuYWRkKERPTU5vZGVSZW1v
dmVkRnJvbURvY3VtZW50RXZlbnQpOworICAgICAgICBuYW1lcy5hZGQoRE9NTm9kZUluc2VydGVk
SW50b0RvY3VtZW50RXZlbnQpOworICAgICAgICBuYW1lcy5hZGQoRE9NQXR0ck1vZGlmaWVkRXZl
bnQpOworICAgICAgICBuYW1lcy5hZGQoRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZlbnQpOwor
Ly8gRklYTUU6IEFkZCB0aGVzZSAyIHRvIEV2ZW50TmFtZXMKKy8vICAgICAgICBuYW1lcy5hZGQo
RE9NRWxlbWVudE5hbWVDaGFuZ2VkRXZlbnQpOworLy8gICAgICAgIG5hbWVzLmFkZChET01BdHRy
aWJ1dGVOYW1lQ2hhbmdlZEV2ZW50KTsKKyAgICAgICAgbmFtZXMuYWRkKGxvYWRFdmVudCk7Cisg
ICAgICAgIG5hbWVzLmFkZCh1bmxvYWRFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZChhYm9ydEV2
ZW50KTsKKyAgICAgICAgbmFtZXMuYWRkKGVycm9yRXZlbnQpOworICAgICAgICBuYW1lcy5hZGQo
c2VsZWN0RXZlbnQpOworICAgICAgICBuYW1lcy5hZGQoY2hhbmdlRXZlbnQpOworICAgICAgICBu
YW1lcy5hZGQocmVzaXplRXZlbnQpOworICAgICAgICBuYW1lcy5hZGQoc2Nyb2xsRXZlbnQpOwor
ICAgICAgICBpbnRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICZuYW1l
czsKK30KKworRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OkRPTUV2ZW50U3RyZWFtTG9hZGVyKEV2ZW50
VGFyZ2V0Tm9kZSAqdGFyZ2V0LCBLVVJMJiB1cmwpCisgICAgOiBtX3RhcmdldCh0YXJnZXQpCisg
ICAgLCBtX2xvYWRlcigwKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9kZWNvZGVyKCJ0ZXh0
L3BsYWluIiwgIlVURi04IikKKyAgICAsIG1faXNPcGVuKGZhbHNlKQorICAgICwgbV9yZWxvYWRU
aW1lcih0aGlzLCAmRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OnJlbG9hZFRpbWVyRmlyZWQpCit7Cit9
CisKK0RPTUV2ZW50U3RyZWFtTG9hZGVyOjp+RE9NRXZlbnRTdHJlYW1Mb2FkZXIoKQoreworfQor
Cit2b2lkIERPTUV2ZW50U3RyZWFtTG9hZGVyOjpvcGVuKCkKK3sKKyAgICBpZiAoIW1faXNPcGVu
KSB7CisgICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsKTsKKyAgICAgICAgcmVx
dWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVy
RmllbGQoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKTsKKyAgICAgICAgcmVxdWVzdC5zZXRI
VFRQQWNjZXB0KCJhcHBsaWNhdGlvbi94LWRvbS1ldmVudC1zdHJlYW0iKTsKKyAgICAgICAgCisg
ICAgICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gU3VicmVzb3VyY2VMb2Fk
ZXI6OmNyZWF0ZShtX3RhcmdldC0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpLCB0aGlzLCByZXF1
ZXN0LCB0cnVlLCB0cnVlKTsKKyAgICAgICAgbV9sb2FkZXIgPSBsb2FkZXIucmVsZWFzZSgpOwor
ICAgICAgICBtX2lzT3BlbiA9IHRydWU7CisgICAgfQorfQorCit2b2lkIERPTUV2ZW50U3RyZWFt
TG9hZGVyOjpjbG9zZSgpCit7CisgICAgaWYgKG1faXNPcGVuKSB7CisgICAgICAgIGlmIChtX2xv
YWRlcikKKyAgICAgICAgICAgIG1fbG9hZGVyID0gMDsKKyAgICAgICAgbV9pc09wZW4gPSBmYWxz
ZTsKKyAgICB9Cit9CisKK3ZvaWQgRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmhhbmRsZUV2ZW50KEV2
ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQoreworICAgIGlmIChldmVudC0+dHlwZSgp
ID09IGxvYWRFdmVudCkgeworICAgICAgICAvLyBXZSBnZXQgdGhpcyBldmVudCB3aGVuIHRoZSBk
b2N1bWVudCBoYXMgYmVlbiBsb2FkZWQsIHNvIG5vdworICAgICAgICAvLyBpdCdzIG9rYXkgdG8g
b3BlbiB0aGUgY29ubmVjdGlvbiB0byB0aGUgZXZlbnQgc291cmNlCisgICAgICAgIG9wZW4oKTsK
KyAgICB9Cit9CisKK1JlZlB0cjxFdmVudFRhcmdldE5vZGU+IERPTUV2ZW50U3RyZWFtTG9hZGVy
OjpnZXROb2RlRnJvbUZpZWxkVmFsdWUoU3RyaW5nJiBmaWVsZFZhbHVlKQoreworICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBwcm9wZXJseSBtaW1pYyBET00gRXZlbnQgU3RyZWFtJ3MgbWV0aG9k
IG9mIHNwZWNpZml5IG5vZGVzCisgICAgLy8gcmVsYXRpdmUgdG8gdGhlIGV2ZW50IHN0cmVhbSdz
IHRhcmdldAorICAgIGlmIChmaWVsZFZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgZWxzZSBpZiAoZmllbGRWYWx1ZVswXSA9PSAnIycpCisgICAgICAgIHJldHVybiBtX3Rh
cmdldC0+b3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChmaWVsZFZhbHVlLnN1YnN0cmlu
ZygxLCBmaWVsZFZhbHVlLmxlbmd0aCgpLTEpKTsKKyAgICBlbHNlIGlmIChmaWVsZFZhbHVlID09
ICJEb2N1bWVudCIpCisgICAgICAgIHJldHVybiBtX3RhcmdldC0+b3duZXJEb2N1bWVudCgpOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK0V2ZW50KiBET01FdmVudFN0cmVhbUxv
YWRlcjo6Y3JlYXRlRXZlbnRGcm9tRmllbGRzKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmaWVs
ZHMpCit7CisgICAgLy8gSW1wbGVtZW50cyBIVE1MNSBzZWN0aW9uIDYuMi40IC0gIkludGVycHJl
dGluZyBhbiBldmVudCBzdHJlYW0iCisgICAgU3RyaW5nIGV2ZW50VHlwZSA9IGZpZWxkcy5jb250
YWlucygiRXZlbnQiKSA/IGZpZWxkcy5nZXQoIkV2ZW50IikgOiAibWVzc2FnZSI7CisgICAgU3Ry
aW5nIGV2ZW50TlMgPSBmaWVsZHMuY29udGFpbnMoIk5hbWVzcGFjZSIpID8gZmllbGRzLmdldCgi
TmFtZXNwYWNlIikgOiAiIjsKKyAgICBib29sIGJ1YmJsZXMsIGNhbmNlbGFibGU7CisgICAgCisg
ICAgaWYgKGZpZWxkcy5jb250YWlucygiQnViYmxlcyIpKQorICAgICAgICBidWJibGVzID0gZmll
bGRzLmdldCgiQnViYmxlcyIpICE9ICJObyI7CisgICAgZWxzZSAKKyAgICAgICAgYnViYmxlcyA9
ICEoZXZlbnROUy5pc0VtcHR5KCkgJiYgTm9uQnViYmxpbmdFdmVudFR5cGVzKCktPmNvbnRhaW5z
KGV2ZW50VHlwZSkpOworICAgIAorICAgIGlmIChmaWVsZHMuY29udGFpbnMoIkNhbmNlbGFibGUi
KSkKKyAgICAgICAgY2FuY2VsYWJsZSA9IGZpZWxkcy5nZXQoIkNhbmNlbGFibGUiKSAhPSAiTm8i
OworICAgIGVsc2UKKyAgICAgICAgY2FuY2VsYWJsZSA9ICEoZXZlbnROUy5pc0VtcHR5KCkgJiYg
Tm9uQ2FuY2VsYWJsZUV2ZW50VHlwZXMoKS0+Y29udGFpbnMoZXZlbnRUeXBlKSk7CisgICAgCisg
ICAgRXZlbnQgKmV2ZW50OworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6RXZlbnQ+IGV2ZW50UmVm
UHRyOworICAgIAorICAgIGlmIChmaWVsZHMuY29udGFpbnMoIkNsYXNzIikpIHsKKyAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIAorICAgICAgICBldmVudFJlZlB0ciA9IG1f
dGFyZ2V0LT5vd25lckRvY3VtZW50KCktPmNyZWF0ZUV2ZW50KGZpZWxkcy5nZXQoIkNsYXNzIiks
IGVjKTsKKyAgICAgICAgCisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIGV2ZW50ID0gTlVM
TDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXZlbnQgPSBldmVudFJlZlB0ci5nZXQoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZXZlbnRUeXBlID09IERPTUZvY3VzSW5FdmVudCB8
fCBldmVudFR5cGUgPT0gRE9NRm9jdXNPdXRFdmVudCB8fCBldmVudFR5cGUgPT0gRE9NQWN0aXZh
dGVFdmVudCB8fCBldmVudFR5cGUgPT0gZm9jdXNFdmVudCB8fCBldmVudFR5cGUgPT0gYmx1ckV2
ZW50IHx8IGV2ZW50VHlwZSA9PSByZXNpemVFdmVudCB8fCBldmVudFR5cGUgPT0gc2Nyb2xsRXZl
bnQpCisgICAgICAgICAgICBldmVudCA9IG5ldyBVSUV2ZW50OworICAgICAgICBlbHNlIGlmIChl
dmVudFR5cGUgPT0gdGV4dElucHV0RXZlbnQpCisgICAgICAgICAgICBldmVudCA9IG5ldyBUZXh0
RXZlbnQ7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBjbGlja0V2ZW50IHx8IGV2ZW50
VHlwZSA9PSBtb3VzZWRvd25FdmVudCB8fCBldmVudFR5cGUgPT0gbW91c2V1cEV2ZW50IHx8IGV2
ZW50VHlwZSA9PSBtb3VzZW92ZXJFdmVudCB8fCBldmVudFR5cGUgPT0gbW91c2Vtb3ZlRXZlbnQg
fHwgZXZlbnRUeXBlID09IG1vdXNlb3V0RXZlbnQpCisgICAgICAgICAgICBldmVudCA9IG5ldyBN
b3VzZUV2ZW50OworICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0ga2V5ZG93bkV2ZW50IHx8
IGV2ZW50VHlwZSA9PSBrZXl1cEV2ZW50KQorICAgICAgICAgICAgZXZlbnQgPSBuZXcgS2V5Ym9h
cmRFdmVudDsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IERPTVN1YnRyZWVNb2RpZmll
ZEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBET01Ob2RlSW5zZXJ0ZWRFdmVudCB8fCBldmVudFR5cGUg
PT0gRE9NTm9kZVJlbW92ZWRFdmVudCB8fCBldmVudFR5cGUgPT0gRE9NTm9kZVJlbW92ZWRGcm9t
RG9jdW1lbnRFdmVudCB8fCBldmVudFR5cGUgPT0gRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50
RXZlbnQgfHwgZXZlbnRUeXBlID09IERPTUF0dHJNb2RpZmllZEV2ZW50IHx8IGV2ZW50VHlwZSA9
PSBET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCkKKyAgICAgICAgICAgIGV2ZW50ID0gbmV3
IE11dGF0aW9uRXZlbnQ7CisgICAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgaW4gV2ViQ29yZSB5ZXQu
Li4uCisgICAgICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBET01FbGVtZW50TmFtZWRDaGFuZ2Vk
RXZlbnQgfHwgZXZlbnRUeXBlID09IERPTUF0dHJpYnV0ZU5hbWVDaGFuZ2VFdmVudCkKKyAgICAg
ICAgICAgIGV2ZW50ID0gbmV3IE11dGF0aW9uTmFtZUV2ZW50OyAqLworICAgICAgICBlbHNlIGlm
IChldmVudFR5cGUgPT0gbG9hZEV2ZW50IHx8IGV2ZW50VHlwZSA9PSB1bmxvYWRFdmVudCB8fCBl
dmVudFR5cGUgPT0gYWJvcnRFdmVudCB8fCBldmVudFR5cGUgPT0gZXJyb3JFdmVudCB8fCBldmVu
dFR5cGUgPT0gc2VsZWN0RXZlbnQgfHwgZXZlbnRUeXBlID09IGNoYW5nZUV2ZW50IHx8IGV2ZW50
VHlwZSA9PSBzdWJtaXRFdmVudCB8fCBldmVudFR5cGUgPT0gcmVzZXRFdmVudCkKKyAgICAgICAg
ICAgIGV2ZW50ID0gbmV3IEV2ZW50OworICAgICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gbWVz
c2FnZUV2ZW50KQorICAgICAgICAgICAgZXZlbnQgPSBuZXcgTWVzc2FnZUV2ZW50OworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBldmVudCA9IG5ldyBNZXNzYWdlRXZlbnQ7CisgICAgfQorICAg
IAorICAgIEFic3RyYWN0VmlldyogdmlldyA9IG1fdGFyZ2V0LT5vd25lckRvY3VtZW50KCktPmRl
ZmF1bHRWaWV3KCk7CisgICAgCisgICAgU3RyaW5nIGRhdGEgPSBmaWVsZHMuY29udGFpbnMoImRh
dGEiKSA/IGZpZWxkcy5nZXQoImRhdGEiKSA6ICIiOworICAgIFN0cmluZyBrZXlJZGVudGlmaWVy
ID0gZmllbGRzLmNvbnRhaW5zKCJrZXlJZGVudGlmaWVyIikgPyBmaWVsZHMuZ2V0KCJrZXlJZGVu
dGlmaWVyIikgOiAiIjsKKyAgICBTdHJpbmcgcHJldlZhbHVlID0gZmllbGRzLmNvbnRhaW5zKCJw
cmV2VmFsdWUiKSA/IGZpZWxkcy5nZXQoInByZXZWYWx1ZSIpIDogIiI7CisgICAgU3RyaW5nIG5l
d1ZhbHVlID0gZmllbGRzLmNvbnRhaW5zKCJuZXdWYWx1ZSIpID8gZmllbGRzLmdldCgibmV3VmFs
dWUiKSA6ICIiOworICAgIFN0cmluZyBhdHRyTmFtZSA9IGZpZWxkcy5jb250YWlucygiYXR0ck5h
bWUiKSA/IGZpZWxkcy5nZXQoImF0dHJOYW1lIikgOiAiIjsKKyAgICAKKyAgICBpbnQgZGV0YWls
ID0gZmllbGRzLmNvbnRhaW5zKCJkZXRhaWwiKSA/IGZpZWxkcy5nZXQoImRldGFpbCIpLnRvSW50
KCkgOiAwOworICAgIGludCB3aGVlbERlbHRhWCA9IGZpZWxkcy5jb250YWlucygid2hlZWxEZWx0
YVgiKSA/IGZpZWxkcy5nZXQoIndoZWVsRGVsdGFYIikudG9JbnQoKSA6IDA7CisgICAgaW50IHdo
ZWVsRGVsdGFZID0gZmllbGRzLmNvbnRhaW5zKCJ3aGVlbERlbHRhWSIpID8gZmllbGRzLmdldCgi
d2hlZWxEZWx0YVkiKS50b0ludCgpIDogMDsKKyAgICBpbnQgc2NyZWVuWCA9IGZpZWxkcy5jb250
YWlucygic2NyZWVuWCIpID8gZmllbGRzLmdldCgic2NyZWVuWCIpLnRvSW50KCkgOiAwOworICAg
IGludCBzY3JlZW5ZID0gZmllbGRzLmNvbnRhaW5zKCJzY3JlZW5ZIikgPyBmaWVsZHMuZ2V0KCJz
Y3JlZW5ZIikudG9JbnQoKSA6IDA7CisgICAgaW50IGNsaWVudFggPSBmaWVsZHMuY29udGFpbnMo
ImNsaWVudFgiKSA/IGZpZWxkcy5nZXQoImNsaWVudFkiKS50b0ludCgpIDogMDsKKyAgICBpbnQg
Y2xpZW50WSA9IGZpZWxkcy5jb250YWlucygiY2xpZW50WSIpID8gZmllbGRzLmdldCgiY2xpZW50
WSIpLnRvSW50KCkgOiAwOworICAgIGludCBwYWdlWCA9IGZpZWxkcy5jb250YWlucygicGFnZVgi
KSA/IGZpZWxkcy5nZXQoInBhZ2VZIikudG9JbnQoKSA6IDA7CisgICAgaW50IHBhZ2VZID0gZmll
bGRzLmNvbnRhaW5zKCJwYWdlWSIpID8gZmllbGRzLmdldCgicGFnZVkiKS50b0ludCgpIDogMDsK
KyAgICAKKyAgICAvLyBGSVhNRTogU3BlYyBpcyB1bmNsZWFyIGhlcmUgb24gaG93IHRvIGV2YWx1
YXRlIGJvb2xlYW4gYXR0cmlidXRlcy4uLgorICAgIGJvb2wgY3RybEtleSA9IGZpZWxkcy5jb250
YWlucygiY3RybEtleSIpID8gKGZpZWxkcy5nZXQoImN0cmxLZXkiKSAhPSAiZmFsc2UiKSA6IGZh
bHNlOworICAgIGJvb2wgYWx0S2V5ID0gZmllbGRzLmNvbnRhaW5zKCJhbHRLZXkiKSA/IChmaWVs
ZHMuZ2V0KCJhbHRLZXkiKSAhPSAiZmFsc2UiKSA6IGZhbHNlOworICAgIGJvb2wgc2hpZnRLZXkg
PSBmaWVsZHMuY29udGFpbnMoInNoaWZ0S2V5IikgPyAoZmllbGRzLmdldCgic2hpZnRLZXkiKSAh
PSAiZmFsc2UiKSA6IGZhbHNlOworICAgIGJvb2wgbWV0YUtleSA9IGZpZWxkcy5jb250YWlucygi
bWV0YUtleSIpID8gKGZpZWxkcy5nZXQoIm1ldGFLZXkiKSAhPSAiZmFsc2UiKSA6IGZhbHNlOwor
ICAgIC8vIEZJWE1FOiBIYW5kbGUgIm1vZGlmaWVyTGlzdCIgYXMgRE9NMyBzcGVjIGhhcyBpbiBj
b25zdHJ1Y3Rvcj8KKyAgICBib29sIGhvcml6b250YWxPdmVyZmxvdyA9IGZpZWxkcy5jb250YWlu
cygiaG9yaXpvbnRhbE92ZXJmbG93IikgPyAoZmllbGRzLmdldCgiaG9yaXpvbnRhbE92ZXJmbG93
IikgIT0gImZhbHNlIikgOiBmYWxzZTsKKyAgICBib29sIHZlcnRpY2FsT3ZlcmZsb3cgPSBmaWVs
ZHMuY29udGFpbnMoInZlcnRpY2FsT3ZlcmZsb3ciKSA/IChmaWVsZHMuZ2V0KCJ2ZXJ0aWNhbE92
ZXJmbG93IikgIT0gImZhbHNlIikgOiBmYWxzZTsKKyAgICAKKyAgICAvLyBOb3QgaW4gdGhlIERP
TTMgc3BlYywgc29tZSBraW5kIG9mIFdlYktpdCBleHRlbnNpb24/CisgICAgYm9vbCBhbHRHcmFw
aEtleSA9IGZpZWxkcy5jb250YWlucygiYWx0R3JhcGhLZXkiKSA/IChmaWVsZHMuZ2V0KCJhbHRH
cmFwaEtleSIpICE9ICJmYWxzZSIpIDogZmFsc2U7CisgICAgCisgICAgdW5zaWduZWQgc2hvcnQg
YnV0dG9uID0gKHVuc2lnbmVkIHNob3J0KShmaWVsZHMuY29udGFpbnMoImJ1dHRvbiIpID8gZmll
bGRzLmdldCgiYnV0dG9uIikudG9JbnQoKSA6IDApOworICAgIHVuc2lnbmVkIGtleUxvY2F0aW9u
ID0gKHVuc2lnbmVkKShmaWVsZHMuY29udGFpbnMoImtleUxvY2F0aW9uIikgPyBmaWVsZHMuZ2V0
KCJrZXlMb2NhdGlvbiIpLnRvSW50KCkgOiAwKTsKKyAgICB1bnNpZ25lZCBzaG9ydCBvcmllbnQg
PSAodW5zaWduZWQgc2hvcnQpKGZpZWxkcy5jb250YWlucygib3JpZW50IikgPyBmaWVsZHMuZ2V0
KCJvcmllbnQiKS50b0ludCgpIDogMCk7CisgICAgdW5zaWduZWQgc2hvcnQgYXR0ckNoYW5nZSA9
ICh1bnNpZ25lZCBzaG9ydCkoZmllbGRzLmNvbnRhaW5zKCJhdHRyQ2hhbmdlIikgPyBmaWVsZHMu
Z2V0KCJhdHRyQ2hhbmdlIikudG9JbnQoKSA6IDApOworICAgIAorI2lmIEVOQUJMRShTVkcpCisg
ICAgZmxvYXQgbmV3U2NhbGUgPSBmaWVsZHMuY29udGFpbnMoIm5ld1NjYWxlIikgPyBmaWVsZHMu
Z2V0KCJuZXdTY2FsZSIpLnRvRmxvYXQoKSA6IDAuMDsKKyAgICBmbG9hdCBwcmV2aW91c1NjYWxl
ID0gZmllbGRzLmNvbnRhaW5zKCJwcmV2aW91c1NjYWxlIikgPyBmaWVsZHMuZ2V0KCJwcmV2aW91
c1NjYWxlIikudG9GbG9hdCgpIDogMC4wOworI2VuZGlmCisgICAgCisgICAgLy8gRklYTUU6IFNw
ZWMgaXMgdW5jbGVhciwgY3VycmVudGx5IGhhbmRsaW5nIHRoaXMgYSBsYSAiVGFyZ2V0IiBmaWVs
ZAorICAgIEV2ZW50VGFyZ2V0Tm9kZSogcmVsYXRlZFRhcmdldDsKKyAgICBpZiAoZmllbGRzLmNv
bnRhaW5zKCJyZWxhdGVkVGFyZ2V0IikpIHsKKyAgICAgICAgU3RyaW5nIHJlbGF0ZWRUYXJnZXRT
dHIgPSBmaWVsZHMuZ2V0KCJyZWxhdGVkVGFyZ2V0Iik7CisgICAgICAgIFJlZlB0cjxFdmVudFRh
cmdldE5vZGU+IHJlbGF0ZWRUYXJnZXRSZWYgPSBnZXROb2RlRnJvbUZpZWxkVmFsdWUocmVsYXRl
ZFRhcmdldFN0cik7CisgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSByZWxhdGVkVGFyZ2V0UmVmID8g
cmVsYXRlZFRhcmdldFJlZi5nZXQoKSA6IDA7CisgICAgfSBlbHNlIAorICAgICAgICByZWxhdGVk
VGFyZ2V0ID0gMDsKKyAgICAKKyAgICBOb2RlKiByZWxhdGVkTm9kZTsKKyAgICBpZiAoZmllbGRz
LmNvbnRhaW5zKCJyZWxhdGVkTm9kZSIpKSB7CisgICAgICAgIFN0cmluZyByZWxhdGVkVGFyZ2V0
U3RyID0gZmllbGRzLmdldCgicmVsYXRlZE5vZGUiKTsKKyAgICAgICAgUmVmUHRyPEV2ZW50VGFy
Z2V0Tm9kZT4gcmVsYXRlZFRhcmdldFJlZiA9IGdldE5vZGVGcm9tRmllbGRWYWx1ZShyZWxhdGVk
VGFyZ2V0U3RyKTsKKyAgICAgICAgcmVsYXRlZE5vZGUgPSByZWxhdGVkVGFyZ2V0UmVmID8gcmVs
YXRlZFRhcmdldFJlZi5nZXQoKSA6IDA7CisgICAgfSBlbHNlIAorICAgICAgICByZWxhdGVkTm9k
ZSA9IDA7CisgICAgCisgICAgLy8gVE9ETzogVGhlc2UgZmllbGRzIHNob3VsZCBiZSB1c2VkIGlu
IGNyb3NzLWRvbWFpbiBtZXNzYWdpbmcgd2hlbiBpdCBpcyBpbXBsZW1lbnRlZAorICAgIFN0cmlu
ZyBkb21haW4oIiIpOworICAgIFN0cmluZyB1cmkoIiIpOworICAgIERvY3VtZW50KiBzb3VyY2Uo
MCk7CisgICAgCisgICAgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkKKyAgICAgICAgKHN0YXRpY19j
YXN0PFVJRXZlbnQqPihldmVudCkpLT5pbml0VUlFdmVudChldmVudFR5cGUsIGJ1YmJsZXMsIGNh
bmNlbGFibGUsIHZpZXcsIGRldGFpbCk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzVGV4dEV2ZW50
KCkpCisgICAgICAgIChzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldmVudCkpLT5pbml0VGV4dEV2
ZW50KGV2ZW50VHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgdmlldywgZGF0YSk7CisgICAgZWxz
ZSBpZiAoZXZlbnQtPmlzTW91c2VFdmVudCgpKQorICAgICAgICAoc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2ZW50KSktPmluaXRNb3VzZUV2ZW50KGV2ZW50VHlwZSwgYnViYmxlcywgY2FuY2Vs
YWJsZSwgdmlldywgZGV0YWlsLCBzY3JlZW5YLCBzY3JlZW5ZLCBjbGllbnRYLCBjbGllbnRZLCBj
dHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sIHJlbGF0ZWRUYXJnZXQp
OworICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgKHN0YXRp
Y19jYXN0PEtleWJvYXJkRXZlbnQqPihldmVudCkpLT5pbml0S2V5Ym9hcmRFdmVudChldmVudFR5
cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUsIHZpZXcsIGtleUlkZW50aWZpZXIsIGtleUxvY2F0aW9u
LCBjdHJsS2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBhbHRHcmFwaEtleSk7CisgICAg
ZWxzZSBpZiAoZXZlbnQtPmlzV2hlZWxFdmVudCgpKQorICAgICAgICAoc3RhdGljX2Nhc3Q8V2hl
ZWxFdmVudCo+KGV2ZW50KSktPmluaXRXaGVlbEV2ZW50KHdoZWVsRGVsdGFYLCB3aGVlbERlbHRh
WSwgdmlldywgc2NyZWVuWCwgc2NyZWVuWSwgcGFnZVgsIHBhZ2VZLCBjdHJsS2V5LCBhbHRLZXks
IHNoaWZ0S2V5LCBtZXRhS2V5KTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNPdmVyZmxvd0V2ZW50
KCkpCisgICAgICAgIChzdGF0aWNfY2FzdDxPdmVyZmxvd0V2ZW50Kj4oZXZlbnQpKS0+aW5pdE92
ZXJmbG93RXZlbnQob3JpZW50LCBob3Jpem9udGFsT3ZlcmZsb3csIHZlcnRpY2FsT3ZlcmZsb3cp
OworICAgIGVsc2UgaWYgKGV2ZW50LT5pc01lc3NhZ2VFdmVudCgpKQorICAgICAgICAoc3RhdGlj
X2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oZXZlbnQpKS0+aW5pdE1lc3NhZ2VFdmVudChldmVudFR5cGUs
IGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRhdGEsIGRvbWFpbiwgdXJpLCBzb3VyY2UpOworICAgIGVs
c2UgaWYgKGV2ZW50LT5pc011dGF0aW9uRXZlbnQoKSkKKyAgICAgICAgKHN0YXRpY19jYXN0PE11
dGF0aW9uRXZlbnQqPihldmVudCkpLT5pbml0TXV0YXRpb25FdmVudChldmVudFR5cGUsIGJ1YmJs
ZXMsIGNhbmNlbGFibGUsIHJlbGF0ZWROb2RlLCBwcmV2VmFsdWUsIG5ld1ZhbHVlLCBhdHRyTmFt
ZSwgYXR0ckNoYW5nZSk7CisjaWYgRU5BQkxFKFNWRykKKyAgICBlbHNlIGlmIChldmVudC0+aXNT
Vkdab29tRXZlbnQoKSkgeworICAgICAgICAoc3RhdGljX2Nhc3Q8U1ZHWm9vbUV2ZW50Kj4oZXZl
bnQpKS0+c2V0TmV3U2NhbGUobmV3U2NhbGUpOworICAgICAgICAoc3RhdGljX2Nhc3Q8U1ZHWm9v
bUV2ZW50Kj4oZXZlbnQpKS0+c2V0UHJldmlvdXNTY2FsZShwcmV2aW91c1NjYWxlKTsKKyAgICB9
CisjZW5kaWYKKyAgICBlbHNlIC8vIGFzc3VtZSBpdCdzIGp1c3QgYSBub3JtYWwgRXZlbnQKKyAg
ICAgICAgZXZlbnQtPmluaXRFdmVudChldmVudFR5cGUsIGJ1YmJsZXMsIGNhbmNlbGFibGUpOwor
ICAgIAorICAgIHJldHVybiBldmVudDsKK30KKwordm9pZCBET01FdmVudFN0cmVhbUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0KFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIsIFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sK
KyAgICBpZiAobG9hZGVyICE9IG1fbG9hZGVyKSByZXR1cm47CisgICAgCisgICAgaW50IHN0YXR1
cyA9IHJlZGlyZWN0UmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKKyAgICBpZiAoc3RhdHVzID09
IDMwMSkKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHBlcm1lbmFudCByZWRpcmVjdCwgc28gd2UgY2hh
bmdlIHRoZSBVUkwgdG8gcmVxdWVzdCBuZXh0IHRpbWUKKyAgICAgICAgbV91cmwgPSByZWRpcmVj
dFJlc3BvbnNlLnVybCgpOworfQorCit2b2lkIERPTUV2ZW50U3RyZWFtTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2UoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UpCit7CisgICAgaWYgKGxvYWRlciAhPSBtX2xvYWRlcikgcmV0dXJuOwor
ICAgIAorICAgIGludCBzdGF0dXMgPSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOyAgICAKKyAg
ICBpZiAoKChzdGF0dXMgPj0gMjAwKSAmJiAoc3RhdHVzIDw9IDIwNikpIAorICAgICAgICB8fCAo
KHN0YXR1cyA+PSAzMDApICYmIChzdGF0dXMgPD0gMzA3KSAmJiAoc3RhdHVzICE9IDMwNikpIAor
ICAgICAgICB8fCAoc3RhdHVzID09IDQwMSkgCisgICAgICAgIHx8IChzdGF0dXMgPT0gNDA3KSkg
eworICAgICAgICBpZiAoKHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSAhPSAiVVRGLTgiKSAm
JiAoIXJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKS5pc0VtcHR5KCkpKSB7CisgICAgICAgICAg
ICBMT0coTG9hZGluZywgIkRPTUV2ZW50U3RyZWFtTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2Ug
LSBnb3QgaW52YWxpZCB0ZXh0IGVuY29kaW5nIFwiJXNcIlxuIiwgcmVzcG9uc2UudGV4dEVuY29k
aW5nTmFtZSgpLmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpKTsKKyAgICAgICAgICAgIGNsb3Nl
KCk7CisgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UubWltZVR5cGUoKSAhPSAiYXBwbGljYXRp
b24veC1kb20tZXZlbnQtc3RyZWFtIikgeworICAgICAgICAgICAgTE9HKExvYWRpbmcsICJET01F
dmVudFN0cmVhbUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlIC0gZ290IGludmFsaWQgbWltZSB0
eXBlIFwiJXNcIlxuIiwgcmVzcG9uc2UubWltZVR5cGUoKS5kZXByZWNhdGVkU3RyaW5nKCkuYXNj
aWkoKSk7CisgICAgICAgICAgICBjbG9zZSgpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgTE9HKExvYWRpbmcsICJET01FdmVudFN0cmVhbUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlIC0gZ290IGludmFsaWQgSFRUUCBzdGF0dXMgY29kZSAlZFxuIiwgc3RhdHVzKTsKKyAgICAg
ICAgLy8gTmVlZCB0byBnaXZlIHVwLi4uCisgICAgICAgIGNsb3NlKCk7CisgICAgfQorfQorCit2
b2lkIERPTUV2ZW50U3RyZWFtTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRl
ciogbG9hZGVyLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKQoreyAgICAKKyAgICBpZiAobG9h
ZGVyICE9IG1fbG9hZGVyKSByZXR1cm47CisgICAgCisgICAgaW50IHBhcnNlU3RhcnRQb3MgPSAw
OworICAgIAorICAgIG1fdW5wYXJzZWREYXRhICs9IG1fZGVjb2Rlci5kZWNvZGUoZGF0YSwgbGVu
KTsKKyAgICAKKyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBmaWVsZHM7CisgICAgCisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgCisgICAgICAgIC8qIEZJWE1FOgorICAgICAgICAgICBUaGVy
ZSBpcyBhIHJhcmUgdW5oYW5kbGVkIGNhc2UgaGVyZS4gSWYgd2UgZ2V0IHRoZSBmaXJzdCBieXRl
IG9mIGEgQ1JMRiAoIlxyXG4iKQorICAgICAgICAgICBuZXcgbGluZSBpbiBvbmUgZGF0YSBjaHVu
aywgd2hlbiB3ZSBnZXQgdGhlIHNlY29uZCBjaHVuayB3aXRoIGFuICdcbicgYnl0ZSBhdCB0aGUK
KyAgICAgICAgICAgc3RhcnQsIHdlIHdpbGwgd3JvbmdseSBwYXJzZSBhbiBlbXB0eSBldmVudC4g
CisgICAgICAgICovCisgICAgICAgIAorICAgICAgICBpbnQgY3JQb3MgPSBtX3VucGFyc2VkRGF0
YS5maW5kKCdccicsIHBhcnNlU3RhcnRQb3MpOworICAgICAgICBpbnQgbGZQb3MgPSBtX3VucGFy
c2VkRGF0YS5maW5kKCdcbicsIHBhcnNlU3RhcnRQb3MpOworICAgICAgICBpbnQgbmV3TGluZVBv
cywgbmV4dFBhcnNlU3RhcnRQb3M7CisgICAgICAgIAorICAgICAgICBpZiAoY3JQb3MgPj0gMCkg
eworICAgICAgICAgICAgaWYgKGxmUG9zID49IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoY3JQ
b3MgPCBsZlBvcykgeworICAgICAgICAgICAgICAgICAgICAvLyBCb3RoLCBidXQgQ1IgY29tZXMg
Zmlyc3QKKyAgICAgICAgICAgICAgICAgICAgbmV3TGluZVBvcyA9IGNyUG9zOworICAgICAgICAg
ICAgICAgICAgICBuZXh0UGFyc2VTdGFydFBvcyA9IG5ld0xpbmVQb3MgKyAxOworICAgICAgICAg
ICAgICAgICAgICBpZiAobGZQb3MgPT0gKGNyUG9zICsgMSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vICBDUkxGIGNvbWJvIG5ld2xpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIG5l
eHRQYXJzZVN0YXJ0UG9zICs9IDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBCb3RoLCBidXQgTEYgY29tZXMg
Zmlyc3QKKyAgICAgICAgICAgICAgICAgICAgbmV3TGluZVBvcyA9IGxmUG9zOworICAgICAgICAg
ICAgICAgICAgICBuZXh0UGFyc2VTdGFydFBvcyA9IG5ld0xpbmVQb3MgKyAxOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gbm8gTEYs
IG9ubHkgQ1IgaXMgdmFsaWQKKyAgICAgICAgICAgICAgICBuZXdMaW5lUG9zID0gY3JQb3M7Cisg
ICAgICAgICAgICAgICAgbmV4dFBhcnNlU3RhcnRQb3MgPSBuZXdMaW5lUG9zICsgMTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChsZlBvcyA+PSAwKSB7CisgICAgICAgICAgICAv
LyBubyBDUiwgb25seSBMRiBpcyB2YWxpZAorICAgICAgICAgICAgbmV3TGluZVBvcyA9IGxmUG9z
OworICAgICAgICAgICAgbmV4dFBhcnNlU3RhcnRQb3MgPSBuZXdMaW5lUG9zICsgMTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vIG5ld2xpbmUgY2hhcnMsIG5lZWQgbW9yZSBk
YXRhIQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChuZXdMaW5lUG9zID09IHBhcnNlU3RhcnRQb3MpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcg
bGVmdCB0byBwYXJzZSBmb3IgdGhpcyBldmVudCwgY3JlYXRlIGl0IGZyb20gdGhlIGZpZWxkcyBh
bmQgdGhlbiBkaXNwYXRjaCBpdC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgUmVmUHRyPEV2
ZW50VGFyZ2V0Tm9kZT4gZXZlbnRUYXJnZXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChmaWVsZHMuY29udGFpbnMoIlRhcmdldCIpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRh
cmdldCA9IGZpZWxkcy5nZXQoIlRhcmdldCIpOworICAgICAgICAgICAgICAgIFJlZlB0cjxFdmVu
dFRhcmdldE5vZGU+IG90aGVyVGFyZ2V0ID0gZ2V0Tm9kZUZyb21GaWVsZFZhbHVlKHRhcmdldCk7
CisgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQgPSBvdGhlclRhcmdldCA/IG90aGVyVGFyZ2V0
IDogbV90YXJnZXQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBldmVudFRh
cmdldCA9IG1fdGFyZ2V0OworICAgICAgICAgICAgCisgICAgICAgICAgICBFdmVudCogZXZlbnQg
PSBjcmVhdGVFdmVudEZyb21GaWVsZHMoZmllbGRzKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICBldmVudFRhcmdldC0+ZGlzcGF0
Y2hFdmVudChldmVudCwgZWMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEaXNwYXRj
aCBjb21wbGV0ZWQgKG9yIG5vdCksIGNsZWFyIHRoZSBmaWVsZHMgYW5kIHN0YXJ0IHBhcnNpbmcg
dGhlIG5leHQgZXZlbnQKKyAgICAgICAgICAgIGZpZWxkcy5jbGVhcigpOworICAgICAgICAgICAg
CisgICAgICAgIH0gZWxzZSBpZiAoKG1fdW5wYXJzZWREYXRhW3BhcnNlU3RhcnRQb3NdICE9ICc7
JykgJiYgKG1fdW5wYXJzZWREYXRhW3BhcnNlU3RhcnRQb3NdICE9ICc6JykpIHsKKyAgICAgICAg
ICAgIC8vIFdlIGhhdmUgYSBmaWVsZAorICAgICAgICAgICAgU3RyaW5nIGZpZWxkTmFtZSwgZmll
bGRDb250ZW50OworICAgICAgICAgICAgaW50IGNvbG9uUG9zID0gbV91bnBhcnNlZERhdGEuZmlu
ZCgnOicsIHBhcnNlU3RhcnRQb3MpOworICAgICAgICAgICAgaWYgKChjb2xvblBvcyA8IDApIHx8
IChjb2xvblBvcyA+IG5ld0xpbmVQb3MpKQorICAgICAgICAgICAgICAgIGZpZWxkTmFtZSA9IG1f
dW5wYXJzZWREYXRhLnN1YnN0cmluZyhwYXJzZVN0YXJ0UG9zLCBuZXdMaW5lUG9zIC0gcGFyc2VT
dGFydFBvcyk7CisgICAgICAgICAgICBlbHNlIHsgICAgCisgICAgICAgICAgICAgICAgZmllbGRO
YW1lID0gbV91bnBhcnNlZERhdGEuc3Vic3RyaW5nKHBhcnNlU3RhcnRQb3MsIGNvbG9uUG9zIC0g
cGFyc2VTdGFydFBvcyk7CisgICAgICAgICAgICAgICAgaW50IGNvbnRlbnRTdGFydFBvcyA9IGNv
bG9uUG9zICsgMTsKKyAgICAgICAgICAgICAgICBpZiAobV91bnBhcnNlZERhdGFbY29udGVudFN0
YXJ0UG9zXSA9PSAnICcpCisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRTdGFydFBvcyArPSAx
OworICAgICAgICAgICAgICAgIGZpZWxkQ29udGVudCA9IG1fdW5wYXJzZWREYXRhLnN1YnN0cmlu
Zyhjb250ZW50U3RhcnRQb3MsIG5ld0xpbmVQb3MgLSBjb250ZW50U3RhcnRQb3MpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZmllbGRzLmNvbnRhaW5zKGZp
ZWxkTmFtZSkpCisgICAgICAgICAgICAgICAgZmllbGRzLnNldChmaWVsZE5hbWUsIChmaWVsZHMu
Z2V0KGZpZWxkTmFtZSkgKyBTdHJpbmcoIlxuIikgKyBmaWVsZENvbnRlbnQpKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmaWVsZHMuc2V0KGZpZWxkTmFtZSwgZmllbGRDb250
ZW50KTsKKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwYXJzZVN0
YXJ0UG9zID0gbmV4dFBhcnNlU3RhcnRQb3M7CisgICAgfQorICAgIAorICAgIG1fdW5wYXJzZWRE
YXRhID0gbV91bnBhcnNlZERhdGEuc3Vic3RyaW5nKHBhcnNlU3RhcnRQb3MsIG1fdW5wYXJzZWRE
YXRhLmxlbmd0aCgpIC0gcGFyc2VTdGFydFBvcyk7CisgICAgCit9CisKK3ZvaWQgRE9NRXZlbnRT
dHJlYW1Mb2FkZXI6OmRpZEZhaWwoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVz
b3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgaWYgKGxvYWRlciAhPSBtX2xvYWRlcikgcmV0dXJu
OworICAgIGNsb3NlKCk7Cit9CisKK3ZvaWQgRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmRpZEZpbmlz
aExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBpZiAobG9hZGVyICE9
IG1fbG9hZGVyKSByZXR1cm47CisgICAgLy8gQ2xvc2UgYW5kIHJlb3BlbiB0aGUgY29ubmVjdGlv
biBhZnRlciBhIGJyaWVmIGRlbGF5CisgICAgY2xvc2UoKTsKKyAgICBtX3JlbG9hZFRpbWVyLnN0
YXJ0T25lU2hvdCgxMi4wKTsKK30KKwordm9pZCBET01FdmVudFN0cmVhbUxvYWRlcjo6cmVsb2Fk
VGltZXJGaXJlZChUaW1lcjxET01FdmVudFN0cmVhbUxvYWRlcj4qKQoreworICAgIG9wZW4oKTsK
K30KKworfSAvLyBuYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvZG9tL0RPTUV2ZW50U3RyZWFtTG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL0RPTUV2ZW50U3RyZWFtTG9hZGVyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSGVucnkg
TWFzb24gKGhtYXNvbkBtYWMuY29tKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorICoKKyAqLworIAorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJFdmVudFRhcmdldE5vZGUuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU3Vi
cmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKworI2lmbmRlZiBET01FdmVudFN0cmVhbUxvYWRlcl9oCisj
ZGVmaW5lIERPTUV2ZW50U3RyZWFtTG9hZGVyX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
ICAKKyAgICBjbGFzcyBET01FdmVudFN0cmVhbUxvYWRlciA6IHB1YmxpYyBFdmVudExpc3RlbmVy
LCBwcml2YXRlIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IERPTUV2ZW50U3RyZWFtTG9hZGVyKEV2ZW50VGFyZ2V0Tm9kZSAqdGFyZ2V0LCBLVVJMJiB1cmwp
OworICAgICAgICB+RE9NRXZlbnRTdHJlYW1Mb2FkZXIoKTsKKyAgICAKKyAgICAgICAgRXZlbnRU
YXJnZXROb2RlKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5nZXQoKTsgfQorICAg
ICAgICB2b2lkIHNldFRhcmdldChQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gdGFyZ2V0KSB7
IG1fdGFyZ2V0ID0gdGFyZ2V0OyB9CisgICAgCisgICAgICAgIEtVUkwgKlVSTCgpIHsgcmV0dXJu
ICZtX3VybDsgfQorICAgIAorICAgICAgICB2b2lkIG9wZW4oKTsKKyAgICAgICAgdm9pZCBjbG9z
ZSgpOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50Kiwg
Ym9vbCBpc1dpbmRvd0V2ZW50KTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAKKyAgICAg
ICAgUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gZ2V0Tm9kZUZyb21GaWVsZFZhbHVlKFN0cmluZyYg
ZmllbGRWYWx1ZSk7CisgICAgICAgIEV2ZW50KiBjcmVhdGVFdmVudEZyb21GaWVsZHMoSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gJmZpZWxkcyk7CisgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCB3
aWxsU2VuZFJlcXVlc3QoU3VicmVzb3VyY2VMb2FkZXIqLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEo
U3VicmVzb3VyY2VMb2FkZXIqLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRGYWlsKFN1YnJlc291cmNlTG9hZGVyKiwgY29uc3QgUmVzb3VyY2VF
cnJvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyhTdWJyZXNvdXJj
ZUxvYWRlciopOworICAgICAgICAKKyAgICAgICAgdm9pZCByZWxvYWRUaW1lckZpcmVkKFRpbWVy
PERPTUV2ZW50U3RyZWFtTG9hZGVyPiopOworICAgIAorICAgICAgICBSZWZQdHI8RXZlbnRUYXJn
ZXROb2RlPiBtX3RhcmdldDsKKyAgICAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9hZGVyPiBtX2xv
YWRlcjsKKyAgICAgICAgS1VSTCBtX3VybDsKKyAgICAKKyAgICAgICAgVGV4dFJlc291cmNlRGVj
b2RlciBtX2RlY29kZXI7CisgICAgICAgIFN0cmluZyBtX3VucGFyc2VkRGF0YTsKKyAgICAKKyAg
ICAgICAgYm9vbCBtX2lzT3BlbjsKKyAgICAgICAgCisgICAgICAgIFRpbWVyPERPTUV2ZW50U3Ry
ZWFtTG9hZGVyPiBtX3JlbG9hZFRpbWVyOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlCisKKyNl
bmRpZiAgLy8gRE9NRXZlbnRTdHJlYW1Mb2FkZXJfaAorCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAyNTExNSkKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjksNiArNjksNyBAQAogI2luY2x1ZGUgIkpTRWRpdG9yLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRF
dmVudC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIK
ICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cy5oIgogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIKQEAgLTIzMzMsNiArMjMzNCw4
IEBAIFBhc3NSZWZQdHI8RXZlbnQ+IERvY3VtZW50OjpjcmVhdGVFdmVudCgKICAgICAgICAgcmV0
dXJuIG5ldyBLZXlib2FyZEV2ZW50OwogICAgIGlmIChldmVudFR5cGUgPT0gIkhUTUxFdmVudHMi
IHx8IGV2ZW50VHlwZSA9PSAiRXZlbnQiIHx8IGV2ZW50VHlwZSA9PSAiRXZlbnRzIikKICAgICAg
ICAgcmV0dXJuIG5ldyBFdmVudDsKKyAgICBpZiAoZXZlbnRUeXBlID09ICJNZXNzYWdlRXZlbnQi
KQorICAgICAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudDsKICAgICBpZiAoZXZlbnRUeXBlID09
ICJUZXh0RXZlbnQiKQogICAgICAgICByZXR1cm4gbmV3IFRleHRFdmVudDsKICAgICBpZiAoZXZl
bnRUeXBlID09ICJPdmVyZmxvd0V2ZW50IikKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudC5jcHAJKHJldmlzaW9uIDI1MTE1KQorKysg
V2ViQ29yZS9kb20vRXZlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDExIEBA
IGJvb2wgRXZlbnQ6OmlzQ2xpcGJvYXJkRXZlbnQoKSBjb25zdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorYm9vbCBFdmVudDo6aXNNZXNzYWdlRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBm
YWxzZTsKK30KKwogYm9vbCBFdmVudDo6aXNXaGVlbEV2ZW50KCkgY29uc3QKIHsKICAgICByZXR1
cm4gZmFsc2U7CkBAIC0xMjcsNyArMTMyLDYgQEAgYm9vbCBFdmVudDo6aXNTVkdab29tRXZlbnQo
KSBjb25zdAogfQogI2VuZGlmCiAKLQogYm9vbCBFdmVudDo6c3RvcmVzUmVzdWx0QXNTdHJpbmco
KSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnQuaAkocmV2aXNpb24gMjUxMTUpCisrKyBX
ZWJDb3JlL2RvbS9FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNXaGVlbEV2ZW50KCkgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0JlZm9yZVRleHRJbnNlcnRlZEV2ZW50KCkgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc092ZXJmbG93RXZlbnQoKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCBib29sIGlzTWVzc2FnZUV2ZW50KCkgY29uc3Q7CiAjaWYgRU5BQkxFKFNWRykK
ICAgICAgICAgdmlydHVhbCBib29sIGlzU1ZHWm9vbUV2ZW50KCkgY29uc3Q7CiAjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9F
dmVudE5hbWVzLmgJKHJldmlzaW9uIDI1MTE1KQorKysgV2ViQ29yZS9kb20vRXZlbnROYW1lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsgbmFt
ZXNwYWNlIEV2ZW50TmFtZXMKICAgICBtYWNybyh1bmxvYWQpIFwKICAgICBtYWNybyh6b29tKSBc
CiAgICAgXAorICAgIG1hY3JvKG1lc3NhZ2UpXAorICAgIFwKICAgICBtYWNybyhET01BY3RpdmF0
ZSkgXAogICAgIG1hY3JvKERPTUF0dHJNb2RpZmllZCkgXAogICAgIG1hY3JvKERPTUNoYXJhY3Rl
ckRhdGFNb2RpZmllZCkgXApJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiAy
NTExNSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYwNSw2ICs2MDUsMzYgQEAgdm9pZCBFdmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVudEhh
bmRsZQogICAgIH0KIH0KIAordm9pZCBFdmVudFRhcmdldE5vZGU6OmFkZEV2ZW50U291cmNlKFN0
cmluZyYgc3JjKQoreyAgICAKKyAgICAKKyAgICBpZiAobV9ldmVudFNvdXJjZXMuY29udGFpbnMo
c3JjKSkgeworICAgICAgICBpbnQgY291bnQgPSBtX2V2ZW50U291cmNlcy5nZXQoc3JjKTsKKyAg
ICAgICAgbV9ldmVudFNvdXJjZXMuc2V0KHNyYywgKGNvdW50ICsgMSkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLnNldChzcmMsIDEpOworICAgICAgICBLVVJMIGt1cmwo
S1VSTChkb2N1bWVudCgpLT5iYXNlVVJMKCkpLCBzcmMuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAg
ICAgICAgUmVmUHRyPERPTUV2ZW50U3RyZWFtTG9hZGVyPiBsb2FkZXIgPSBuZXcgRE9NRXZlbnRT
dHJlYW1Mb2FkZXIodGhpcywga3VybCk7CisgICAgICAgIG1fZXZlbnRMb2FkZXJzLnNldChzcmMs
IGxvYWRlcik7CisgICAgICAgIGxvYWRlci0+b3BlbigpOworICAgIH0KK30KKwordm9pZCBFdmVu
dFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50U291cmNlKFN0cmluZyYgc3JjKQoreworICAgIGlmICht
X2V2ZW50U291cmNlcy5jb250YWlucyhzcmMpKSB7CisgICAgICAgIGludCBjb3VudCA9IG1fZXZl
bnRTb3VyY2VzLmdldChzcmMpOworICAgICAgICBpZiAoY291bnQgPiAxKSAKKyAgICAgICAgICAg
IG1fZXZlbnRTb3VyY2VzLnNldChzcmMsIChjb3VudCAtIDEpKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtX2V2ZW50U291cmNlcy5yZW1vdmUoc3JjKTsKKyAgICAgICAgICAgIFJlZlB0
cjxET01FdmVudFN0cmVhbUxvYWRlcj4gbG9hZGVyID0gbV9ldmVudExvYWRlcnMuZ2V0KHNyYyk7
CisgICAgICAgICAgICBsb2FkZXItPmNsb3NlKCk7CisgICAgICAgICAgICBtX2V2ZW50TG9hZGVy
cy5yZW1vdmUoc3JjKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogI2lmbmRlZiBOREVCVUcKIAog
dm9pZCBFdmVudFRhcmdldE5vZGU6OmR1bXAoVGV4dFN0cmVhbSogc3RyZWFtLCBEZXByZWNhdGVk
U3RyaW5nIGluZCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAyNTEx
NSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSwxMyArMjUsMTUgQEAKICNkZWZpbmUgRXZlbnRUYXJnZXROb2RlX2gKIAogI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiUmVtb3RlRXZlbnRUYXJnZXQuaCIKICNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSAiRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgRGVwcmVjYXRlZFZhbHVlTGlz
dDsKIAotY2xhc3MgRXZlbnRUYXJnZXROb2RlIDogcHVibGljIE5vZGUsIHB1YmxpYyBFdmVudFRh
cmdldCB7CitjbGFzcyBFdmVudFRhcmdldE5vZGUgOiBwdWJsaWMgTm9kZSwgcHVibGljIEV2ZW50
VGFyZ2V0LCBwdWJsaWMgUmVtb3RlRXZlbnRUYXJnZXQgewogcHVibGljOgogICAgIEV2ZW50VGFy
Z2V0Tm9kZShEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkV2ZW50VGFyZ2V0Tm9kZSgpOwpAQCAt
NDQsNiArNDYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFz
c1JlZlB0cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmLCBib29sIHRlbXBFdmVudCA9IGZhbHNlKTsK
ICAgICB2b2lkIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
YWRkRXZlbnRTb3VyY2UoU3RyaW5nJiBzcmMpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVu
dFNvdXJjZShTdHJpbmcmIHNyYyk7CisKICAgICB2b2lkIHNldEhUTUxFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+KTsK
ICAgICB2b2lkIHJlbW92ZUhUTUxFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlKTsKICAgICBib29sIGRpc3BhdGNoSFRNTEV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlKTsKQEAgLTEwNiw2ICsx
MTEsMTAgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRU
YXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7
IGRlcmVmKCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdHJpbmcsIGludD4gbV9l
dmVudFNvdXJjZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxET01FdmVudFN0cmVhbUxv
YWRlcj4gPiBtX2V2ZW50TG9hZGVyczsKIH07CiAKIGlubGluZSBFdmVudFRhcmdldE5vZGUqIEV2
ZW50VGFyZ2V0Tm9kZUNhc3QoTm9kZSogbikgCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlRXZl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkxIEBACisvKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMSBUb2JpYXMgQW50b24gKGFudG9u
QHN0dWQuZmJpLmZoLWRhcm1zdGFkdC5kZSkKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwg
V2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5y
eSBNYXNvbiAoaG1hc29uQG1hYy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJNZXNz
YWdlRXZlbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitNZXNzYWdlRXZlbnQ6Ok1lc3Nh
Z2VFdmVudCgpCit7Cit9CisKK01lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBib29sIGNhbkJ1YmJsZUFyZywgYm9vbCBjYW5jZWxhYmxlQXJn
LCBjb25zdCBBdG9taWNTdHJpbmcmIGRhdGEsIGNvbnN0IEF0b21pY1N0cmluZyYgZG9tYWluLCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEV2ZW50KGV2ZW50
VHlwZSwgY2FuQnViYmxlQXJnLCBjYW5jZWxhYmxlQXJnKQorICAgICwgbV9kYXRhKGRhdGEpCisg
ICAgLCBtX2RvbWFpbihkb21haW4pCisgICAgLCBtX3VyaSh1cmkpCisgICAgLCBtX3NvdXJjZShk
b2MpCit7Cit9CisKK01lc3NhZ2VFdmVudDo6TWVzc2FnZUV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5C
dWJibGVBcmcsIGJvb2wgY2FuY2VsYWJsZUFyZywgY29uc3QgQXRvbWljU3RyaW5nJiBkYXRhLCBj
b25zdCBBdG9taWNTdHJpbmcmIGRvbWFpbiwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmksIERvY3Vt
ZW50KiBkb2MpCisgICAgOiBFdmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJs
ZUFyZykKKyAgICAsIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSkKKyAgICAsIG1fZGF0YShk
YXRhKQorICAgICwgbV9kb21haW4oZG9tYWluKQorICAgICwgbV91cmkodXJpKQorICAgICwgbV9z
b3VyY2UoZG9jKQoreworfQorCitNZXNzYWdlRXZlbnQ6On5NZXNzYWdlRXZlbnQoKQoreworfQor
Cit2b2lkIE1lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZGF0YSwgY29uc3QgQXRvbWljU3RyaW5nJiBkb21haW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
dXJpLCBEb2N1bWVudCogZG9jKQoreworICAgIGlmIChkaXNwYXRjaGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgaW5pdEV2ZW50KHR5cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJs
ZSk7CisgICAgCisgICAgbV9kYXRhID0gZGF0YTsKKyAgICBtX2RvbWFpbiA9IGRvbWFpbjsKKyAg
ICBtX3VyaSA9IHVyaTsKKyAgICBtX3NvdXJjZSA9IGRvYzsKK30KKwordm9pZCBNZXNzYWdlRXZl
bnQ6OmluaXRNZXNzYWdlRXZlbnROUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxl
LCBjb25zdCBBdG9taWNTdHJpbmcmIGRhdGEsIGNvbnN0IEF0b21pY1N0cmluZyYgZG9tYWluLCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSwgRG9jdW1lbnQqIGRvYykKK3sKKyAgICBpZiAoZGlzcGF0
Y2hlZCgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGluaXRFdmVudCh0eXBlLCBj
YW5CdWJibGUsIGNhbmNlbGFibGUpOworICAgIAorICAgIG1fZGF0YSA9IGRhdGE7CisgICAgbV9k
b21haW4gPSBkb21haW47CisgICAgbV91cmkgPSB1cmk7CisgICAgbV9zb3VyY2UgPSBkb2M7Cisg
ICAgbV9uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7Cit9CisKK2Jvb2wgTWVzc2FnZUV2ZW50
Ojppc01lc3NhZ2VFdmVudCgpIGNvbnN0IAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvZG9tL01lc3NhZ2VFdmVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQor
ICogQ29weXJpZ2h0IChDKSAyMDAxIFRvYmlhcyBBbnRvbiAoYW50b25Ac3R1ZC5mYmkuZmgtZGFy
bXN0YWR0LmRlKQorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWlu
aWdAZ21haWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA3IEhlbnJ5IE1hc29uIChobWFzb25A
bWFjLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgTWVzc2FnZUV2ZW50X2gKKyNk
ZWZpbmUgTWVzc2FnZUV2ZW50X2gKKworI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1
ZGUgIkRvY1B0ci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgTWVzc2FnZUV2ZW50IDogcHVibGlj
IEV2ZW50IHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgTWVzc2FnZUV2ZW50KCk7CisgICAgICAg
IE1lc3NhZ2VFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBi
b29sIGNhbmNlbGFibGUsIGNvbnN0IEF0b21pY1N0cmluZyYgZGF0YSwgY29uc3QgQXRvbWljU3Ry
aW5nJiBkb21haW4sIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpLCBEb2N1bWVudCogZG9jKTsKKyAg
ICAgICAgTWVzc2FnZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBBdG9taWNTdHJpbmcmIHR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIGNv
bnN0IEF0b21pY1N0cmluZyYgZGF0YSwgY29uc3QgQXRvbWljU3RyaW5nJiBkb21haW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgdXJpLCBEb2N1bWVudCogZG9jKTsKKyAgICAgICAgdmlydHVhbCB+TWVz
c2FnZUV2ZW50KCk7CisKKyAgICAgICAgdm9pZCBpbml0TWVzc2FnZUV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgQXRv
bWljU3RyaW5nJiBkYXRhLCBjb25zdCBBdG9taWNTdHJpbmcmIGRvbWFpbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiB1cmksIERvY3VtZW50KiBkb2MpOworICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0
TWVzc2FnZUV2ZW50TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBkYXRhLCBjb25zdCBBdG9taWNTdHJpbmcmIGRvbWFpbiwgY29uc3QgQXRv
bWljU3RyaW5nJiB1cmksIERvY3VtZW50KiBkb2MpOworICAgICAgICAKKyAgICAgICAgdm9pZCBz
ZXREYXRhKGNvbnN0IEF0b21pY1N0cmluZyYgZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9CisgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQor
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9k
b21haW47IH0KKyAgICAgICAgCisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKCkgY29u
c3QgeyByZXR1cm4gbV91cmk7IH0KKyAgICAgICAgCisgICAgICAgIERvY3VtZW50KiBzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5nZXQoKTsgfQorICAgICAgICAKKyAgICAgICAgdmly
dHVhbCBib29sIGlzTWVzc2FnZUV2ZW50KCkgY29uc3Q7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAg
ICAgIAorCisgICAgcHJpdmF0ZTogICAgCisgICAgICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFj
ZVVSSTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fZGF0YTsKKyAgICAgICAgQXRvbWljU3RyaW5n
IG1fZG9tYWluOworICAgICAgICBBdG9taWNTdHJpbmcgbV91cmk7CisgICAgICAgIAorICAgICAg
ICBEb2NQdHI8RG9jdW1lbnQ+IG1fc291cmNlOworICAgICAgICAKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBNZXNzYWdlRXZlbnRfaApJbmRleDogV2ViQ29y
ZS9kb20vTWVzc2FnZUV2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9NZXNzYWdl
RXZlbnQuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBI
ZW5yeSBNYXNvbiA8aG1hc29uQG1hYy5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKi8KKworbW9kdWxlIGV2ZW50cyB7CisKKyAgICBpbnRlcmZhY2Ug
W0dlbmVyYXRlQ29uc3RydWN0b3JdIE1lc3NhZ2VFdmVudCA6IEV2ZW50IHsKKworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRhdGE7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgZG9tYWluOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHVyaTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50IHNvdXJjZTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChpbiBET01TdHJpbmcgdHlwZUFy
ZywgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywgaW4g
RE9NU3RyaW5nIGRhdGFBcmcsIGluIERPTVN0cmluZyBkb21haW5BcmcsIGluIERPTVN0cmluZyB1
cmlBcmcsIGluIERvY3VtZW50IGRvY3VtZW50QXJnKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQg
aW5pdE1lc3NhZ2VFdmVudE5TKGluIERPTVN0cmluZyBuYW1lc3BhY2VVUkksIGluIERPTVN0cmlu
ZyB0eXBlQXJnLCBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgaW4gYm9vbGVhbiBjYW5jZWxhYmxl
QXJnLCBpbiBET01TdHJpbmcgZGF0YUFyZywgaW4gRE9NU3RyaW5nIGRvbWFpbkFyZywgaW4gRE9N
U3RyaW5nIHVyaUFyZywgaW4gRG9jdW1lbnQgZG9jdW1lbnRBcmcpOworCisgICAgfTsKKworfQpJ
bmRleDogV2ViQ29yZS9kb20vUmVtb3RlRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1JlbW90ZUV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
ZG9tL1JlbW90ZUV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5yeSBNYXNvbiAoaG1hc29uQG1hYy5jb20pCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJSZW1vdGVFdmVudFRh
cmdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlbW90ZUV2ZW50VGFyZ2V0Ojp+UmVt
b3RlRXZlbnRUYXJnZXQoKQoreworfQorCit2b2lkIFJlbW90ZUV2ZW50VGFyZ2V0OjphZGRFdmVu
dFNvdXJjZShTdHJpbmcmIHNyYykKK3sKK30KKwordm9pZCBSZW1vdGVFdmVudFRhcmdldDo6cmVt
b3ZlRXZlbnRTb3VyY2UoU3RyaW5nJiBzcmMpCit7Cit9CisKK30gLy8gZW5kIG5hbWVzcGFjZQpJ
bmRleDogV2ViQ29yZS9kb20vUmVtb3RlRXZlbnRUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9SZW1vdGVFdmVudFRhcmdldC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20v
UmVtb3RlRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBIZW5yeSBNYXNvbiA8aG1hc29uQG1hYy5jb20+CisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAq
LworCisjaWZuZGVmIFJlbW90ZUV2ZW50VGFyZ2V0X2gKKyNkZWZpbmUgUmVtb3RlRXZlbnRUYXJn
ZXRfaAorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgUmVtb3RlRXZlbnRUYXJnZXQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudFNv
dXJjZShTdHJpbmcmIHNyYyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudFNvdXJj
ZShTdHJpbmcmIHNyYyk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgflJlbW90
ZUV2ZW50VGFyZ2V0KCk7CisKKyAgICB9OworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL2RvbS9SZW1vdGVFdmVudFRhcmdldC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vUmVtb3RlRXZlbnRUYXJnZXQuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20v
UmVtb3RlRXZlbnRUYXJnZXQuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhlbnJ5IE1hc29uIDxobWFzb25AbWFjLmNvbT4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1bGUgZXZl
bnRzIHsKKworICAgIGludGVyZmFjZSBSZW1vdGVFdmVudFRhcmdldCB7CisgICAgICAgIHZvaWQg
YWRkRXZlbnRTb3VyY2UoaW4gRE9NU3RyaW5nIHNyYyk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZl
bnRTb3VyY2UoaW4gRE9NU3RyaW5nIHNyYyk7CisgICAgfTsKKworfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAyNTExNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc5OCw2ICs3OTgsNyBAQCBIYXNoU2V0PEF0b21pY1N0cmluZ0lt
cGwqPiogaW5saW5lVGFnTGlzCiAgICAgICAgIHRhZ0xpc3QuYWRkKGRlbFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCkpOwogICAgICAgICB0YWdMaXN0LmFkZChub2JyVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7CiAgICAgICAgIHRhZ0xpc3QuYWRkKHdiclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAg
ICAgICB0YWdMaXN0LmFkZChldmVudF9zb3VyY2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKICAg
ICB9CiAgICAgcmV0dXJuICZ0YWdMaXN0OwogfQpAQCAtODQwLDYgKzg0MSw3IEBAIEhhc2hTZXQ8
QXRvbWljU3RyaW5nSW1wbCo+KiBibG9ja1RhZ0xpc3QKICAgICAgICAgdGFnTGlzdC5hZGQodGFi
bGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICAgICAgdGFnTGlzdC5hZGQodWxUYWcubG9j
YWxOYW1lKCkuaW1wbCgpKTsKICAgICAgICAgdGFnTGlzdC5hZGQoeG1wVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7CisgICAgICAgIHRhZ0xpc3QuYWRkKGV2ZW50X3NvdXJjZVRhZy5sb2NhbE5hbWUo
KS5pbXBsKCkpOwogICAgIH0KICAgICByZXR1cm4gJnRhZ0xpc3Q7CiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gMjUxMTUpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEVsZW1lbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxEaXJlY3RvcnlFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxFdmVudFNv
dXJjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MRnJhbWVTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgpA
QCAtMzE1LDYgKzMxNiwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZW1iZWRD
b25zCiAgICAgcmV0dXJuIG5ldyBIVE1MRW1iZWRFbGVtZW50KGRvYyk7CiB9CiAKK3N0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50PiBldmVudF9zb3VyY2VDb25zdHJ1Y3Rvcihjb25zdCBBdG9t
aWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQoreworICAg
IHJldHVybiBuZXcgSFRNTEV2ZW50U291cmNlRWxlbWVudChkb2MpOworfQorCiBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gb2JqZWN0Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5n
JiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
CiB7CiAgICAgUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBvYmplY3QgPSBuZXcgSFRNTE9iamVj
dEVsZW1lbnQoZG9jKTsKQEAgLTQwOCw2ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVGdW5j
dGlvbk1hcCgpCiAgICAgYWRkVGFnKGRpdlRhZywgZGl2Q29uc3RydWN0b3IpOwogICAgIGFkZFRh
ZyhkbFRhZywgZGxDb25zdHJ1Y3Rvcik7CiAgICAgYWRkVGFnKGVtYmVkVGFnLCBlbWJlZENvbnN0
cnVjdG9yKTsKKyAgICBhZGRUYWcoZXZlbnRfc291cmNlVGFnLCBldmVudF9zb3VyY2VDb25zdHJ1
Y3Rvcik7CiAgICAgYWRkVGFnKGZpZWxkc2V0VGFnLCBmaWVsZHNldENvbnN0cnVjdG9yKTsKICAg
ICBhZGRUYWcoZm9udFRhZywgZm9udENvbnN0cnVjdG9yKTsKICAgICBhZGRUYWcoZm9ybVRhZywg
Zm9ybUNvbnN0cnVjdG9yKTsKQEAgLTQ3Myw3ICs0ODAsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBIVE1MRWxlbWVudEZhY3RvCiAgICAgQ29uc3RydWN0b3JGdW5jIGZ1bmMgPSBnRnVuY3Rp
b25NYXAtPmdldCh0YWdOYW1lLmltcGwoKSk7CiAgICAgaWYgKGZ1bmMpCiAgICAgICAgIHJldHVy
biBmdW5jKHRhZ05hbWUsIGRvYywgZm9ybSwgY3JlYXRlZEJ5UGFyc2VyKTsKLSAKKwogICAgIC8v
IGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NCiAgICAg
cmV0dXJuIG5ldyBIVE1MRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdOYW1lLCB4
aHRtbE5hbWVzcGFjZVVSSSksIGRvYyk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEV2ZW50
U291cmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFdmVudFNv
dXJjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0hUTUxFdmVudFNv
dXJjZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2IEBACisvKioKKyAqIENv
cHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSGVucnkgTWFzb24gPGhtYXNvbkBtYWMuY29tPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRPTUV2ZW50U3RyZWFtTG9hZGVyLmgiCisj
aW5jbHVkZSAiSFRNTEV2ZW50U291cmNlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIktVUkwuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitIVE1MRXZlbnRTb3Vy
Y2VFbGVtZW50OjpIVE1MRXZlbnRTb3VyY2VFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBI
VE1MRWxlbWVudChldmVudF9zb3VyY2VUYWcsIGRvYykKKyAgICAsIG1fbG9hZGVyKDApCit7Cit9
CisKK0hUTUxFdmVudFNvdXJjZUVsZW1lbnQ6OkhUTUxFdmVudFNvdXJjZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvYykKKyAgICAsIG1fbG9hZGVyKDApCit7Cit9CisKK0hUTUxFdmVudFNvdXJj
ZUVsZW1lbnQ6On5IVE1MRXZlbnRTb3VyY2VFbGVtZW50KCkKK3sKKyAgICBpZiAobV9sb2FkZXIp
CisgICAgICAgIGRlbGV0ZSBtX2xvYWRlcjsKK30KKworCitTdHJpbmcgSFRNTEV2ZW50U291cmNl
RWxlbWVudDo6c3JjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNyY0F0dHIp
OworfQorCit2b2lkIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Cit9CisKK3ZvaWQg
SFRNTEV2ZW50U291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQoreyAgICAKKyAg
ICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICAKKyAgICBLVVJMIGt1
cmwoS1VSTChkb2N1bWVudCgpLT5iYXNlVVJMKCkpLCBnZXRBdHRyaWJ1dGUoc3JjQXR0cikuZGVw
cmVjYXRlZFN0cmluZygpKTsKKyAgICAKKyAgICBtX2xvYWRlciA9IG5ldyBET01FdmVudFN0cmVh
bUxvYWRlcigoRXZlbnRUYXJnZXROb2RlKil0aGlzLCBrdXJsKTsKKyAgICAKKyAgICBtX2xvYWRl
ci0+b3BlbigpOworfQorCit9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEV2ZW50U291cmNlRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVudC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSGVucnkgTWFzb24gPGht
YXNvbkBtYWMuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICoKKyAqLworCisjaWZuZGVmIEhUTUxFdmVudFNvdXJjZUVsZW1lbnRfaAorI2RlZmluZSBI
VE1MRXZlbnRTb3VyY2VFbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5j
bHVkZSAiRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBIVE1MRXZlbnRTb3VyY2VFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1Ymxp
YzoKKyAgICBIVE1MRXZlbnRTb3VyY2VFbGVtZW50KERvY3VtZW50Kik7CisgICAgSFRNTEV2ZW50
U291cmNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+SFRN
TEV2ZW50U291cmNlRWxlbWVudCgpOworICAgIAorICAgIFN0cmluZyBzcmMoKSBjb25zdDsKKyAg
ICB2b2lkIHNldFNyYyhjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKworcHJvdGVjdGVkOgorICAgIFN0cmluZyBtX3NyYzsKKyAg
ICBET01FdmVudFN0cmVhbUxvYWRlciAqbV9sb2FkZXI7Cit9OworCit9IC8vbmFtZXNwYWNlCisK
KyNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxFdmVudFNvdXJjZUVsZW1lbnQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50LmlkbAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50LmlkbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgPHNh
bS53ZWluaWdAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhlbnJ5IE1hc29uIDxo
bWFzb25AbWFjLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVj
dG9yXSBIVE1MRXZlbnRTb3VyY2VFbGVtZW50IDogSFRNTEVsZW1lbnQgeworICAgICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHNyYzsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxU
YWdOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCShy
ZXZpc2lvbiAyNTExNSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAgZGwKIGR0CiBlbQogZW1iZWQKK2V2ZW50X3NvdXJjZQog
ZmllbGRzZXQKIGZvbnQKIGZvcm0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcAkocmV2aXNpb24gMjUxMTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDcgQEAgc3RhdGljIHZvaWQgaW5p
dGlhbGlzZVN1cHBvcnRlZE5vbkltYWdlTQogICAgICAgImFwcGxpY2F0aW9uL3hodG1sK3htbCIs
CiAgICAgICAiYXBwbGljYXRpb24vcnNzK3htbCIsCiAgICAgICAiYXBwbGljYXRpb24vYXRvbSt4
bWwiLAorICAgICAgImFwcGxpY2F0aW9uL3gtZG9tLWV2ZW50LXN0cmVhbSIsCiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgICAgImFwcGxpY2F0aW9uL3gtd2ViYXJjaGl2ZSIsCiAjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCShyZXZpc2lvbiAyNTExNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQUGFyc2Vycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw5IEBACiAjaWZuZGVmIEhUVFBQYXJzZXJzX2gKICNkZWZpbmUgSFRUUFBhcnNl
cnNfaAogCisKKyNpbmNsdWRlICJFdmVudFRhcmdldE5vZGUuaCIKKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgY2xhc3MgU3RyaW5nOwpAQCAtMzYsNyArMzksOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgYm9vbCBwYXJzZUhUVFBSZWZyZXNoKGNvbnN0IFN0cmluZyYgcmVmcmVzaCwg
Ym9vbCBmcm9tSHR0cEVxdWl2TWV0YSwgZG91YmxlJiBkZWxheSwgU3RyaW5nJiB1cmwpOwogICAg
IFN0cmluZyBmaWxlbmFtZUZyb21IVFRQQ29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFN0cmluZyYp
OyAKICAgICBTdHJpbmcgZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShjb25zdCBTdHJpbmcm
KTsKLSAgICBTdHJpbmcgZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYp
OyAKKyAgICBTdHJpbmcgZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYp
OworCiB9CiAKICNlbmRpZgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUxMTUpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAwNy0wOC0xNiAg
SGVucnkgTWFzb24gIDxobWFzb25AbWFjLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZGVkIG5ldyBwcm9wZXJ0aWVzIHRvIHRl
c3QgY2FzZXMuCisgICAgICAgIAorICAgICAgICBBbHNvIG5vdyB0ZXN0cyBldmVudC1zb3VyY2Ug
YW5kIFJlbW90ZUV2ZW50SW50ZXJmYWNlLgorICAgICAgICAKKyAgICAgICAgaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTYKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTYKKworICAgICAgICAqIGh0dHAvdGVzdHMvZG9t
ZXZlbnRzb3VyY2U6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZG9tZXZlbnRzb3VyY2Uv
c2FtcGxlLWRvbS1ldmVudC1zb3VyY2UucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2RvbWV2ZW50c291cmNlL3JlbW90ZS1ldmVudC10YXJnZXQuaHRtbDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9ldmVudC1zb3VyY2UuaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZW1vdGUtZXZlbnQtdGFyZ2V0LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9l
dmVudC1zb3VyY2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9XaW5k
b3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OiAKKwogMjAwNy0wOC0xNiAgSnVzdGlu
IEdhcmNpYSAgPGp1c3Rpbi5nYXJjaWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEhhcnJpc29uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9w
ZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9X
aW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAyNTExNSkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2LDYgKzE2LDcgQEAgd2luZG93LkF0dHIucHJvdG90eXBl
Lk5PVEFUSU9OX05PREUgW251bQogd2luZG93LkF0dHIucHJvdG90eXBlLlBST0NFU1NJTkdfSU5T
VFJVQ1RJT05fTk9ERSBbbnVtYmVyXQogd2luZG93LkF0dHIucHJvdG90eXBlLlRFWFRfTk9ERSBb
bnVtYmVyXQogd2luZG93LkF0dHIucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9u
XQord2luZG93LkF0dHIucHJvdG90eXBlLmFkZEV2ZW50U291cmNlIFtmdW5jdGlvbl0KIHdpbmRv
dy5BdHRyLnByb3RvdHlwZS5hcHBlbmRDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuQXR0ci5wcm90
b3R5cGUuY2xvbmVOb2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5BdHRyLnByb3RvdHlwZS5kaXNwYXRj
aEV2ZW50IFtmdW5jdGlvbl0KQEAgLTMxLDYgKzMyLDcgQEAgd2luZG93LkF0dHIucHJvdG90eXBl
Lmxvb2t1cFByZWZpeCBbZnVuYwogd2luZG93LkF0dHIucHJvdG90eXBlLm5vcm1hbGl6ZSBbZnVu
Y3Rpb25dCiB3aW5kb3cuQXR0ci5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgW2Z1bmN0aW9uXQogd2lu
ZG93LkF0dHIucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9uXQord2luZG93
LkF0dHIucHJvdG90eXBlLnJlbW92ZUV2ZW50U291cmNlIFtmdW5jdGlvbl0KIHdpbmRvdy5BdHRy
LnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgW2Z1bmN0aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbiBb
b2JqZWN0IENEQVRBU2VjdGlvbkNvbnN0cnVjdG9yXQogd2luZG93LkNEQVRBU2VjdGlvbi5wcm90
b3R5cGUgW29iamVjdCBDREFUQVNlY3Rpb25Qcm90b3R5cGVdCkBAIC00Nyw2ICs0OSw3IEBAIHdp
bmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLk5PVEFUSU9OX04KIHdpbmRvdy5DREFUQVNlY3Rp
b24ucHJvdG90eXBlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSBbbnVtYmVyXQogd2luZG93
LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUuVEVYVF9OT0RFIFtudW1iZXJdCiB3aW5kb3cuQ0RBVEFT
ZWN0aW9uLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyIFtmdW5jdGlvbl0KK3dpbmRvdy5DREFU
QVNlY3Rpb24ucHJvdG90eXBlLmFkZEV2ZW50U291cmNlIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFU
QVNlY3Rpb24ucHJvdG90eXBlLmFwcGVuZENoaWxkIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNl
Y3Rpb24ucHJvdG90eXBlLmFwcGVuZERhdGEgW2Z1bmN0aW9uXQogd2luZG93LkNEQVRBU2VjdGlv
bi5wcm90b3R5cGUuY2xvbmVOb2RlIFtmdW5jdGlvbl0KQEAgLTY1LDYgKzY4LDcgQEAgd2luZG93
LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUubG9va3VwUHJlZgogd2luZG93LkNEQVRBU2VjdGlvbi5w
cm90b3R5cGUubm9ybWFsaXplIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90
eXBlLnJlbW92ZUNoaWxkIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBl
LnJlbW92ZUV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9uXQord2luZG93LkNEQVRBU2VjdGlvbi5wcm90
b3R5cGUucmVtb3ZlRXZlbnRTb3VyY2UgW2Z1bmN0aW9uXQogd2luZG93LkNEQVRBU2VjdGlvbi5w
cm90b3R5cGUucmVwbGFjZUNoaWxkIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJv
dG90eXBlLnJlcGxhY2VEYXRhIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90
eXBlLnNwbGl0VGV4dCBbZnVuY3Rpb25dCkBAIC0yNDEsNiArMjQ1LDcgQEAgd2luZG93LkNoYXJh
Y3RlckRhdGEucHJvdG90eXBlLk5PVEFUSU9OXwogd2luZG93LkNoYXJhY3RlckRhdGEucHJvdG90
eXBlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSBbbnVtYmVyXQogd2luZG93LkNoYXJhY3Rl
ckRhdGEucHJvdG90eXBlLlRFWFRfTk9ERSBbbnVtYmVyXQogd2luZG93LkNoYXJhY3RlckRhdGEu
cHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9uXQord2luZG93LkNoYXJhY3RlckRh
dGEucHJvdG90eXBlLmFkZEV2ZW50U291cmNlIFtmdW5jdGlvbl0KIHdpbmRvdy5DaGFyYWN0ZXJE
YXRhLnByb3RvdHlwZS5hcHBlbmRDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuQ2hhcmFjdGVyRGF0
YS5wcm90b3R5cGUuYXBwZW5kRGF0YSBbZnVuY3Rpb25dCiB3aW5kb3cuQ2hhcmFjdGVyRGF0YS5w
cm90b3R5cGUuY2xvbmVOb2RlIFtmdW5jdGlvbl0KQEAgLTI1OSw2ICsyNjQsNyBAQCB3aW5kb3cu
Q2hhcmFjdGVyRGF0YS5wcm90b3R5cGUubG9va3VwUHJlCiB3aW5kb3cuQ2hhcmFjdGVyRGF0YS5w
cm90b3R5cGUubm9ybWFsaXplIFtmdW5jdGlvbl0KIHdpbmRvdy5DaGFyYWN0ZXJEYXRhLnByb3Rv
dHlwZS5yZW1vdmVDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuQ2hhcmFjdGVyRGF0YS5wcm90b3R5
cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciBbZnVuY3Rpb25dCit3aW5kb3cuQ2hhcmFjdGVyRGF0YS5w
cm90b3R5cGUucmVtb3ZlRXZlbnRTb3VyY2UgW2Z1bmN0aW9uXQogd2luZG93LkNoYXJhY3RlckRh
dGEucHJvdG90eXBlLnJlcGxhY2VDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuQ2hhcmFjdGVyRGF0
YS5wcm90b3R5cGUucmVwbGFjZURhdGEgW2Z1bmN0aW9uXQogd2luZG93LkNoYXJhY3RlckRhdGEu
cHJvdG90eXBlLnN1YnN0cmluZ0RhdGEgW2Z1bmN0aW9uXQpAQCAtMjkyLDYgKzI5OCw3IEBAIHdp
bmRvdy5Eb2N1bWVudC5wcm90b3R5cGUuTk9UQVRJT05fTk9ERSAKIHdpbmRvdy5Eb2N1bWVudC5w
cm90b3R5cGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFIFtudW1iZXJdCiB3aW5kb3cuRG9j
dW1lbnQucHJvdG90eXBlLlRFWFRfTk9ERSBbbnVtYmVyXQogd2luZG93LkRvY3VtZW50LnByb3Rv
dHlwZS5hZGRFdmVudExpc3RlbmVyIFtmdW5jdGlvbl0KK3dpbmRvdy5Eb2N1bWVudC5wcm90b3R5
cGUuYWRkRXZlbnRTb3VyY2UgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5h
ZG9wdE5vZGUgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5hcHBlbmRDaGls
ZCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLmNsb25lTm9kZSBbZnVuY3Rp
b25dCkBAIC0zMzcsNiArMzQ0LDcgQEAgd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeUNv
bW1hbmRTdQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5xdWVyeUNvbW1hbmRWYWx1ZSBbZnVu
Y3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkIFtmdW5jdGlvbl0K
IHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciBbZnVuY3Rpb25d
Cit3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50U291cmNlIFtmdW5jdGlvbl0K
IHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUucmVwbGFjZUNoaWxkIFtmdW5jdGlvbl0KIHdpbmRv
dy5Eb2N1bWVudEZyYWdtZW50IFtvYmplY3QgRG9jdW1lbnRGcmFnbWVudENvbnN0cnVjdG9yXQog
d2luZG93LkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlIFtvYmplY3QgRG9jdW1lbnRGcmFnbWVu
dFByb3RvdHlwZV0KQEAgLTM1Myw2ICszNjEsNyBAQCB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5w
cm90b3R5cGUuTk9UQVRJCiB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuUFJPQ0VT
U0lOR19JTlNUUlVDVElPTl9OT0RFIFtudW1iZXJdCiB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5w
cm90b3R5cGUuVEVYVF9OT0RFIFtudW1iZXJdCiB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90
b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciBbZnVuY3Rpb25dCit3aW5kb3cuRG9jdW1lbnRGcmFnbWVu
dC5wcm90b3R5cGUuYWRkRXZlbnRTb3VyY2UgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50RnJh
Z21lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudEZy
YWdtZW50LnByb3RvdHlwZS5jbG9uZU5vZGUgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50RnJh
Z21lbnQucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgW2Z1bmN0aW9uXQpAQCAtMzY4LDYgKzM3Nyw3
IEBAIHdpbmRvdy5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5sb29rdXAKIHdpbmRvdy5Eb2N1
bWVudEZyYWdtZW50LnByb3RvdHlwZS5ub3JtYWxpemUgW2Z1bmN0aW9uXQogd2luZG93LkRvY3Vt
ZW50RnJhZ21lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1
bWVudEZyYWdtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyIFtmdW5jdGlvbl0KK3dp
bmRvdy5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudFNvdXJjZSBbZnVuY3Rp
b25dCiB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucmVwbGFjZUNoaWxkIFtmdW5j
dGlvbl0KIHdpbmRvdy5Eb2N1bWVudFR5cGUgW29iamVjdCBEb2N1bWVudFR5cGVDb25zdHJ1Y3Rv
cl0KIHdpbmRvdy5Eb2N1bWVudFR5cGUucHJvdG90eXBlIFtvYmplY3QgRG9jdW1lbnRUeXBlUHJv
dG90eXBlXQpAQCAtNDEyLDYgKzQyMiw3IEBAIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5OT1RB
VElPTl9OT0RFIFsKIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5QUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREUgW251bWJlcl0KIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5URVhUX05PREUgW251
bWJlcl0KIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyIFtmdW5jdGlv
bl0KK3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudFNvdXJjZSBbZnVuY3Rpb25dCiB3
aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgW2Z1bmN0aW9uXQogd2luZG93LkVs
ZW1lbnQucHJvdG90eXBlLmJsdXIgW2Z1bmN0aW9uXQogd2luZG93LkVsZW1lbnQucHJvdG90eXBl
LmNsb25lTm9kZSBbZnVuY3Rpb25dCkBAIC00NDIsNiArNDUzLDcgQEAgd2luZG93LkVsZW1lbnQu
cHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZQogd2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlbW92
ZUF0dHJpYnV0ZU5vZGUgW2Z1bmN0aW9uXQogd2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlbW92
ZUNoaWxkIFtmdW5jdGlvbl0KIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExp
c3RlbmVyIFtmdW5jdGlvbl0KK3dpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudFNv
dXJjZSBbZnVuY3Rpb25dCiB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVwbGFjZUNoaWxkIFtm
dW5jdGlvbl0KIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxCeUxpbmVzIFtmdW5jdGlv
bl0KIHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5zY3JvbGxCeVBhZ2VzIFtmdW5jdGlvbl0KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZG9tZXZlbnRzb3VyY2UvZXZlbnQtc291cmNlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50
c291cmNlL2V2ZW50LXNvdXJjZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL2V2ZW50LXNvdXJjZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKK1Rlc3RzIGZvciBidWcgMTQ5OTUgLSBTdXBw
b3J0IGZvciBldmVudC1zb3VyY2UgZWxlbWVudC4KKworRE9NRm9jdXNJbjogUGFzc2VkCitET01G
b2N1c091dDogUGFzc2VkCitET01BY3RpdmF0ZTogUGFzc2VkCitmb2N1czogUGFzc2VkCitibHVy
OiBQYXNzZWQKK3Jlc2l6ZTogUGFzc2VkCitzY3JvbGw6IFBhc3NlZAordGV4dElucHV0OiBQYXNz
ZWQKK2NsaWNrOiBQYXNzZWQKK0RPTUFjdGl2YXRlOiBQYXNzZWQKK21vdXNlZG93bjogUGFzc2Vk
Cittb3VzZXVwOiBQYXNzZWQKK21vdXNlb3ZlcjogUGFzc2VkCittb3VzZW1vdmU6IFBhc3NlZAor
bW91c2VvdXQ6IFBhc3NlZAora2V5ZG93bjogUGFzc2VkCitrZXl1cDogUGFzc2VkCitET01TdWJ0
cmVlTW9kaWZpZWQ6IFBhc3NlZAorRE9NTm9kZUluc2VydGVkOiBQYXNzZWQKK0RPTU5vZGVSZW1v
dmVkOiBQYXNzZWQKK0RPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50OiBQYXNzZWQKK0RPTU5vZGVJ
bnNlcnRlZEludG9Eb2N1bWVudDogUGFzc2VkCitET01BdHRyTW9kaWZpZWQ6IFBhc3NlZAorRE9N
Q2hhcmFjdGVyRGF0YU1vZGlmaWVkOiBQYXNzZWQKK2xvYWQ6IFBhc3NlZAordW5sb2FkOiBQYXNz
ZWQKK2Fib3J0OiBQYXNzZWQKK2Vycm9yOiBQYXNzZWQKK3NlbGVjdDogUGFzc2VkCitjaGFuZ2U6
IFBhc3NlZAorc3VibWl0OiBQYXNzZWQKK3Jlc2V0OiBQYXNzZWQKK21lc3NhZ2U6IFBhc3NlZAor
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL2V2ZW50LXNvdXJj
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZG9tZXZlbnRzb3Vy
Y2UvZXZlbnQtc291cmNlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2RvbWV2ZW50c291cmNlL2V2ZW50LXNvdXJjZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDgyIEBACis8aHRtbD4KKzxib2R5PgorPHA+VGVzdHMgZm9yIDxhIGhyZWY9Imh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk1Ij4gYnVnIDE0OTk1PC9hPiAtIAor
U3VwcG9ydCBmb3IgZXZlbnQtc291cmNlIGVsZW1lbnQuPC9wPgorPHNjcmlwdD4KKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9
CisKK3ZhciBjb25zb2xlX21lc3NhZ2VzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsK
K2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29uc29sZV9tZXNzYWdlcyk7CisKK3ZhciByZWFk
eVRvU3RhcnRMb2dnaW5nID0gZmFsc2U7CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAg
IGlmIChyZWFkeVRvU3RhcnRMb2dnaW5nKSB7CisgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgibGkiKTsKKyAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7CisgICAgICAgIGNvbnNvbGVfbWVzc2FnZXMuYXBwZW5k
Q2hpbGQoaXRlbSk7CisgICAgfQorfQorCit2YXIgaW50ZXJmYWNlTmFtZXMgPSB7CisgICAgJ1VJ
RXZlbnQnOiBbJ0RPTUZvY3VzSW4nLCAnRE9NRm9jdXNPdXQnLCAnRE9NQWN0aXZhdGUnLCAnZm9j
dXMnLCAnYmx1cicsICdyZXNpemUnLCAnc2Nyb2xsJ10sCisgICAgJ1RleHRFdmVudCc6IFsndGV4
dElucHV0J10sCisgICAgJ01vdXNlRXZlbnQnOiBbJ2NsaWNrJywgJ21vdXNlZG93bicsICdtb3Vz
ZXVwJywgJ21vdXNlb3ZlcicsICdtb3VzZW1vdmUnLCAnbW91c2VvdXQnXSwKKyAgICAnS2V5Ym9h
cmRFdmVudCc6IFsna2V5ZG93bicsICdrZXl1cCddLAorICAgICdNdXRhdGlvbkV2ZW50JzogWydE
T01TdWJ0cmVlTW9kaWZpZWQnLCAnRE9NTm9kZUluc2VydGVkJywgJ0RPTU5vZGVSZW1vdmVkJywg
J0RPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50JywgJ0RPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVu
dCcsICdET01BdHRyTW9kaWZpZWQnLCAnRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkJ10sCisgICAg
J0V2ZW50JzogWydsb2FkJywgJ3VubG9hZCcsICdhYm9ydCcsICdlcnJvcicsICdzZWxlY3QnLCAn
Y2hhbmdlJywgJ3N1Ym1pdCcsICdyZXNldCddLAorICAgICdNZXNzYWdlRXZlbnQnOiBbJ21lc3Nh
Z2UnXQorfTsKKworZnVuY3Rpb24gY3JlYXRlSGFuZGxlcihldmVudE5hbWUsIGludGVyZmFjZU5h
bWUpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgIHZhciBwYXNzZWQg
PSB0cnVlOworICAgICAgICB2YXIgZXJyID0gIiI7CisKKyAgICAgICAgaWYgKGV2ZW50LnR5cGUg
IT0gZXZlbnROYW1lKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGVyciArPSAiR290IGludmFsaWQgZXZlbnQgdHlwZTogXCIiICsgZXZlbnQudHlwZSArICJcIi4g
IjsKKyAgICAgICAgfSAKKworICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j
YWxsKGV2ZW50KSAhPSAiW29iamVjdCAiICsgaW50ZXJmYWNlTmFtZSArICJdIikgeworICAgICAg
ICAgICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBlcnIgKz0gIk5vdCBhICIgKyBpbnRl
cmZhY2VOYW1lICsgIiwgaXMgaW5zdGVhZCBhICIgKyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n
LmNhbGwoZXZlbnQpICsgIi4gIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwYXNzZWQpCisg
ICAgICAgICAgICBlcnIgPSAiUGFzc2VkIjsKKworICAgICAgICBsb2coZXZlbnROYW1lICsgIjog
IiArIGVycik7CisgICAgfTsKK30KKwordmFyIGxpc3RlbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZXZlbnQtc291cmNlIik7CisKK2xpc3RlbmVyLnNldEF0dHJpYnV0ZSgiaWQiLCAibGlz
dGVuZXIiKTsKKworZm9yICh2YXIgaW50ZXJmYWNlTmFtZSBpbiBpbnRlcmZhY2VOYW1lcykgewor
ICAgIHZhciBldmVudE5hbWVMaXN0ID0gaW50ZXJmYWNlTmFtZXNbaW50ZXJmYWNlTmFtZV07Cisg
ICAgZm9yICh2YXIgaT0wOyBpIDwgZXZlbnROYW1lTGlzdC5sZW5ndGg7IGkrKykgeworICAgICAg
ICB2YXIgZXZlbnROYW1lID0gZXZlbnROYW1lTGlzdFtpXTsKKyAgICAgICAgbGlzdGVuZXIuYWRk
RXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNyZWF0ZUhhbmRsZXIoZXZlbnROYW1lLCBpbnRlcmZh
Y2VOYW1lKSwgZmFsc2UpOworICAgIH07Cit9OworCitsaXN0ZW5lci5zZXRBdHRyaWJ1dGUoInNy
YyIsICJzYW1wbGUtZG9tLWV2ZW50LXNvdXJjZS5waHAiKTsKKworZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChsaXN0ZW5lcik7CisKK3JlYWR5VG9TdGFydExvZ2dpbmcgPSB0cnVlOworCisvLyBn
aXZlIGl0IGEgc2Vjb25kIHRvIHdhaXQgZm9yIHRoZSBldmVudHMuLi5ub3QgcGVyZmVjdCBidXQg
d2UgbmVlZCB0byBwaWNrIHNvbWUgdGltZQorLy8gdG8gZ2l2ZSB1cCB3aGVuIGV2ZW50cyBkb24n
dCBhcnJpdmUuCitzZXRUaW1lb3V0KCJsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
IiwgMTAwMCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZW1vdGUtZXZlbnQtdGFyZ2V0LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNl
L3JlbW90ZS1ldmVudC10YXJnZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZW1vdGUtZXZlbnQtdGFyZ2V0LWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorVGVzdHMgZm9yIGJ1ZyAxNDk5
NiAtIFN1cHBvcnQgZm9yIFJlbW90ZUV2ZW50VGFyZ2V0IGludGVyZmFjZS4KKworRE9NRm9jdXNJ
bjogUGFzc2VkCitET01Gb2N1c091dDogUGFzc2VkCitET01BY3RpdmF0ZTogUGFzc2VkCitmb2N1
czogUGFzc2VkCitibHVyOiBQYXNzZWQKK3Jlc2l6ZTogUGFzc2VkCitzY3JvbGw6IFBhc3NlZAor
dGV4dElucHV0OiBQYXNzZWQKK2NsaWNrOiBQYXNzZWQKK0RPTUFjdGl2YXRlOiBQYXNzZWQKK21v
dXNlZG93bjogUGFzc2VkCittb3VzZXVwOiBQYXNzZWQKK21vdXNlb3ZlcjogUGFzc2VkCittb3Vz
ZW1vdmU6IFBhc3NlZAorbW91c2VvdXQ6IFBhc3NlZAora2V5ZG93bjogUGFzc2VkCitrZXl1cDog
UGFzc2VkCitET01TdWJ0cmVlTW9kaWZpZWQ6IFBhc3NlZAorRE9NTm9kZUluc2VydGVkOiBQYXNz
ZWQKK0RPTU5vZGVSZW1vdmVkOiBQYXNzZWQKK0RPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50OiBQ
YXNzZWQKK0RPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudDogUGFzc2VkCitET01BdHRyTW9kaWZp
ZWQ6IFBhc3NlZAorRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkOiBQYXNzZWQKK2xvYWQ6IFBhc3Nl
ZAordW5sb2FkOiBQYXNzZWQKK2Fib3J0OiBQYXNzZWQKK2Vycm9yOiBQYXNzZWQKK3NlbGVjdDog
UGFzc2VkCitjaGFuZ2U6IFBhc3NlZAorc3VibWl0OiBQYXNzZWQKK3Jlc2V0OiBQYXNzZWQKK21l
c3NhZ2U6IFBhc3NlZApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJj
ZS9yZW1vdGUtZXZlbnQtdGFyZ2V0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZW1vdGUtZXZlbnQtdGFyZ2V0Lmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL3JlbW90ZS1ldmVu
dC10YXJnZXQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorPGh0bWw+Cis8Ym9k
eT4KKzxwPlRlc3RzIGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDk5NiI+IGJ1ZyAxNDk5NjwvYT4gLSAKK1N1cHBvcnQgZm9yIFJlbW90ZUV2ZW50
VGFyZ2V0IGludGVyZmFjZS48L3A+CisKKzxkaXYgaWQ9Imxpc3RlbmVyIj4gPC9kaXY+Cis8c2Ny
aXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKK30KKwordmFyIGNvbnNvbGVfbWVzc2FnZXMgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJ1bCIpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb25zb2xlX21lc3NhZ2Vz
KTsKKwordmFyIHJlYWR5VG9TdGFydExvZ2dpbmcgPSBmYWxzZTsKKworZnVuY3Rpb24gbG9nKG1l
c3NhZ2UpCit7CisgICAgaWYgKHJlYWR5VG9TdGFydExvZ2dpbmcpIHsKKyAgICAgICAgdmFyIGl0
ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgICAgICBpdGVtLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgY29uc29sZV9t
ZXNzYWdlcy5hcHBlbmRDaGlsZChpdGVtKTsKKyAgICB9Cit9CisKK3ZhciBpbnRlcmZhY2VOYW1l
cyA9IHsKKyAgICAnVUlFdmVudCc6IFsnRE9NRm9jdXNJbicsICdET01Gb2N1c091dCcsICdET01B
Y3RpdmF0ZScsICdmb2N1cycsICdibHVyJywgJ3Jlc2l6ZScsICdzY3JvbGwnXSwKKyAgICAnVGV4
dEV2ZW50JzogWyd0ZXh0SW5wdXQnXSwKKyAgICAnTW91c2VFdmVudCc6IFsnY2xpY2snLCAnbW91
c2Vkb3duJywgJ21vdXNldXAnLCAnbW91c2VvdmVyJywgJ21vdXNlbW92ZScsICdtb3VzZW91dCdd
LAorICAgICdLZXlib2FyZEV2ZW50JzogWydrZXlkb3duJywgJ2tleXVwJ10sCisgICAgJ011dGF0
aW9uRXZlbnQnOiBbJ0RPTVN1YnRyZWVNb2RpZmllZCcsICdET01Ob2RlSW5zZXJ0ZWQnLCAnRE9N
Tm9kZVJlbW92ZWQnLCAnRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQnLCAnRE9NTm9kZUluc2Vy
dGVkSW50b0RvY3VtZW50JywgJ0RPTUF0dHJNb2RpZmllZCcsICdET01DaGFyYWN0ZXJEYXRhTW9k
aWZpZWQnXSwKKyAgICAnRXZlbnQnOiBbJ2xvYWQnLCAndW5sb2FkJywgJ2Fib3J0JywgJ2Vycm9y
JywgJ3NlbGVjdCcsICdjaGFuZ2UnLCAnc3VibWl0JywgJ3Jlc2V0J10sCisgICAgJ01lc3NhZ2VF
dmVudCc6IFsnbWVzc2FnZSddCit9OworCitmdW5jdGlvbiBjcmVhdGVIYW5kbGVyKGV2ZW50TmFt
ZSwgaW50ZXJmYWNlTmFtZSkgeworICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAg
ICAgdmFyIHBhc3NlZCA9IHRydWU7CisgICAgICAgIHZhciBlcnIgPSAiIjsKKworICAgICAgICBp
ZiAoZXZlbnQudHlwZSAhPSBldmVudE5hbWUpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNl
OworICAgICAgICAgICAgZXJyICs9ICJHb3QgaW52YWxpZCBldmVudCB0eXBlOiBcIiIgKyBldmVu
dC50eXBlICsgIlwiLiAiOworICAgICAgICB9IAorCisgICAgICAgIGlmIChPYmplY3QucHJvdG90
eXBlLnRvU3RyaW5nLmNhbGwoZXZlbnQpICE9ICJbb2JqZWN0ICIgKyBpbnRlcmZhY2VOYW1lICsg
Il0iKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGVyciArPSAi
Tm90IGEgIiArIGludGVyZmFjZU5hbWUgKyAiLCBpcyBpbnN0ZWFkIGEgIiArIE9iamVjdC5wcm90
b3R5cGUudG9TdHJpbmcuY2FsbChldmVudCkgKyAiLiAiOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHBhc3NlZCkKKyAgICAgICAgICAgIGVyciA9ICJQYXNzZWQiOworCisgICAgICAgIGxvZyhl
dmVudE5hbWUgKyAiOiAiICsgZXJyKTsKKyAgICB9OworfQorICAgIAordmFyIGxpc3RlbmVyID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpc3RlbmVyIik7CisKK2ZvciAodmFyIGludGVyZmFj
ZU5hbWUgaW4gaW50ZXJmYWNlTmFtZXMpIHsKKyAgICB2YXIgZXZlbnROYW1lTGlzdCA9IGludGVy
ZmFjZU5hbWVzW2ludGVyZmFjZU5hbWVdOworICAgIGZvciAodmFyIGk9MDsgaSA8IGV2ZW50TmFt
ZUxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGV2ZW50TmFtZSA9IGV2ZW50TmFtZUxp
c3RbaV07CisgICAgICAgIGxpc3RlbmVyLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjcmVh
dGVIYW5kbGVyKGV2ZW50TmFtZSwgaW50ZXJmYWNlTmFtZSksIGZhbHNlKTsKKyAgICB9OworfTsK
KworcmVhZHlUb1N0YXJ0TG9nZ2luZyA9IHRydWU7CisKK2xpc3RlbmVyLmFkZEV2ZW50U291cmNl
KCJzYW1wbGUtZG9tLWV2ZW50LXNvdXJjZS5waHAiKTsKKworLy8gZ2l2ZSBpdCBhIHNlY29uZCB0
byB3YWl0IGZvciB0aGUgZXZlbnRzLi4ubm90IHBlcmZlY3QgYnV0IHdlIG5lZWQgdG8gcGljayBz
b21lIHRpbWUKKy8vIHRvIGdpdmUgdXAgd2hlbiBldmVudHMgZG9uJ3QgYXJyaXZlLgorc2V0VGlt
ZW91dCgibGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOyIsIDEwMDApOworCis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZG9t
ZXZlbnRzb3VyY2Uvc2FtcGxlLWRvbS1ldmVudC1zb3VyY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZG9tZXZlbnRzb3VyY2Uvc2FtcGxlLWRvbS1l
dmVudC1zb3VyY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9kb21ldmVudHNvdXJjZS9zYW1wbGUtZG9tLWV2ZW50LXNvdXJjZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAw
eDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKKyAgICAgIFJlbmRl
clRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDc4M3gxNjIKKyAgICAgICAgdGV4dCBydW4gYXQg
KDAsMCkgd2lkdGggMjI3OiAiRXZlbnQ6IERPTUZvY3VzSW4gQnViYmxlczogWWVzICIKKyAgICAg
ICAgdGV4dCBydW4gYXQgKDIyNywwKSB3aWR0aCAyMzg6ICJFdmVudDogRE9NRm9jdXNPdXQgQnVi
YmxlczogWWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDQ2NSwwKSB3aWR0aCAyMjk6ICJFdmVu
dDogRE9NQWN0aXZhdGUgQnViYmxlczogWWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDY5NCww
KSB3aWR0aCA3OTogIkV2ZW50OiBmb2N1cyIKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMTgpIHdp
ZHRoIDg5OiAiQnViYmxlczogWWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDg5LDE4KSB3aWR0
aCAxNjM6ICJFdmVudDogYmx1ciBCdWJibGVzOiBZZXMgIgorICAgICAgICB0ZXh0IHJ1biBhdCAo
MjUyLDE4KSB3aWR0aCAxNzQ6ICJFdmVudDogcmVzaXplIEJ1YmJsZXM6IFllcyAiCisgICAgICAg
IHRleHQgcnVuIGF0ICg0MjYsMTgpIHdpZHRoIDE3MjogIkV2ZW50OiBzY3JvbGwgQnViYmxlczog
WWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDU5OCwxOCkgd2lkdGggMTYxOiAiRXZlbnQ6IHRl
eHRJbnB1dCBCdWJibGVzOiIKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMzYpIHdpZHRoIDI5OiAi
WWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDI5LDM2KSB3aWR0aCAxNjg6ICJFdmVudDogY2xp
Y2sgQnViYmxlczogWWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDE5NywzNikgd2lkdGggMjE1
OiAiRXZlbnQ6IG1vdXNlZG93biBCdWJibGVzOiBZZXMgIgorICAgICAgICB0ZXh0IHJ1biBhdCAo
NDEyLDM2KSB3aWR0aCAxOTU6ICJFdmVudDogbW91c2V1cCBCdWJibGVzOiBZZXMgIgorICAgICAg
ICB0ZXh0IHJ1biBhdCAoNjA3LDM2KSB3aWR0aCAxNzQ6ICJFdmVudDogbW91c2VvdmVyIEJ1YmJs
ZXM6IgorICAgICAgICB0ZXh0IHJ1biBhdCAoMCw1NCkgd2lkdGggMjk6ICJZZXMgIgorICAgICAg
ICB0ZXh0IHJ1biBhdCAoMjksNTQpIHdpZHRoIDIxNDogIkV2ZW50OiBtb3VzZW1vdmUgQnViYmxl
czogWWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDI0Myw1NCkgd2lkdGggMTk5OiAiRXZlbnQ6
IG1vdXNlb3V0IEJ1YmJsZXM6IFllcyAiCisgICAgICAgIHRleHQgcnVuIGF0ICg0NDIsNTQpIHdp
ZHRoIDE5NzogIkV2ZW50OiBrZXlkb3duIEJ1YmJsZXM6IFllcyAiCisgICAgICAgIHRleHQgcnVu
IGF0ICg2MzksNTQpIHdpZHRoIDE0NDogIkV2ZW50OiBrZXl1cCBCdWJibGVzOiIKKyAgICAgICAg
dGV4dCBydW4gYXQgKDAsNzIpIHdpZHRoIDI5OiAiWWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQg
KDI5LDcyKSB3aWR0aCAyODI6ICJFdmVudDogRE9NU3VidHJlZU1vZGlmaWVkIEJ1YmJsZXM6IFll
cyAiCisgICAgICAgIHRleHQgcnVuIGF0ICgzMTEsNzIpIHdpZHRoIDI2MTogIkV2ZW50OiBET01O
b2RlSW5zZXJ0ZWQgQnViYmxlczogWWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDU3Miw3Mikg
d2lkdGggMTc5OiAiRXZlbnQ6IERPTU5vZGVSZW1vdmVkIgorICAgICAgICB0ZXh0IHJ1biBhdCAo
MCw5MCkgd2lkdGggODk6ICJCdWJibGVzOiBZZXMgIgorICAgICAgICB0ZXh0IHJ1biBhdCAoODks
OTApIHdpZHRoIDM3MjogIkV2ZW50OiBET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCBCdWJibGVz
OiBZZXMgIgorICAgICAgICB0ZXh0IHJ1biBhdCAoNDYxLDkwKSB3aWR0aCAzMTk6ICJFdmVudDog
RE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50IEJ1YmJsZXM6IgorICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwxMDgpIHdpZHRoIDI5OiAiWWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDI5LDEwOCkg
d2lkdGggMjU5OiAiRXZlbnQ6IERPTUF0dHJNb2RpZmllZCBCdWJibGVzOiBZZXMgIgorICAgICAg
ICB0ZXh0IHJ1biBhdCAoMjg4LDEwOCkgd2lkdGggMzI1OiAiRXZlbnQ6IERPTUNoYXJhY3RlckRh
dGFNb2RpZmllZCBCdWJibGVzOiBZZXMgIgorICAgICAgICB0ZXh0IHJ1biBhdCAoNjEzLDEwOCkg
d2lkdGggMTYxOiAiRXZlbnQ6IGxvYWQgQnViYmxlczogWWVzIgorICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwxMjYpIHdpZHRoIDE4MTogIkV2ZW50OiB1bmxvYWQgQnViYmxlczogWWVzICIKKyAgICAg
ICAgdGV4dCBydW4gYXQgKDE4MSwxMjYpIHdpZHRoIDE3MDogIkV2ZW50OiBhYm9ydCBCdWJibGVz
OiBZZXMgIgorICAgICAgICB0ZXh0IHJ1biBhdCAoMzUxLDEyNikgd2lkdGggMTY4OiAiRXZlbnQ6
IGVycm9yIEJ1YmJsZXM6IFllcyAiCisgICAgICAgIHRleHQgcnVuIGF0ICg1MTksMTI2KSB3aWR0
aCAxNzM6ICJFdmVudDogc2VsZWN0IEJ1YmJsZXM6IFllcyAiCisgICAgICAgIHRleHQgcnVuIGF0
ICg2OTIsMTI2KSB3aWR0aCA5MDogIkV2ZW50OiBjaGFuZ2UiCisgICAgICAgIHRleHQgcnVuIGF0
ICgwLDE0NCkgd2lkdGggODk6ICJCdWJibGVzOiBZZXMgIgorICAgICAgICB0ZXh0IHJ1biBhdCAo
ODksMTQ0KSB3aWR0aCAxODA6ICJFdmVudDogc3VibWl0IEJ1YmJsZXM6IFllcyAiCisgICAgICAg
IHRleHQgcnVuIGF0ICgyNjksMTQ0KSB3aWR0aCAxNjc6ICJFdmVudDogcmVzZXQgQnViYmxlczog
WWVzICIKKyAgICAgICAgdGV4dCBydW4gYXQgKDQzNiwxNDQpIHdpZHRoIDE4NzogIkV2ZW50OiBt
ZXNzYWdlIEJ1YmJsZXM6IFllcyIKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZG9tZXZl
bnRzb3VyY2Uvc2FtcGxlLWRvbS1ldmVudC1zb3VyY2UucGhwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZG9tZXZlbnRzb3VyY2Uvc2FtcGxlLWRvbS1ldmVudC1zb3VyY2Uu
cGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJj
ZS9zYW1wbGUtZG9tLWV2ZW50LXNvdXJjZS5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMg
QEAKKzw/cGhwCitoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1kb20tZXZlbnQt
c3RyZWFtIik7CisKKworZnVuY3Rpb24gc2VuZEV2ZW50VHlwZSgkZXZlbnRUeXBlKQoreworICAg
IGVjaG8gIkV2ZW50OiAiOworICAgIGVjaG8gJGV2ZW50VHlwZTsKKyAgICBlY2hvICJcbiI7Cisg
ICAgZWNobyAiQnViYmxlczogWWVzXG4iOworICAgIGVjaG8gIlxuIjsKKyAgICBmbHVzaCgpOwor
fQorCisKKyRpbnRlcmZhY2VOYW1lcyA9IGFycmF5KCk7CisgICAKKyRpbnRlcmZhY2VOYW1lc1sn
VUlFdmVudCddID0gYXJyYXkoJ0RPTUZvY3VzSW4nLCAnRE9NRm9jdXNPdXQnLCAnRE9NQWN0aXZh
dGUnLCAnZm9jdXMnLCAnYmx1cicsICdyZXNpemUnLCAnc2Nyb2xsJyk7CiskaW50ZXJmYWNlTmFt
ZXNbJ1RleHRFdmVudCddID0gYXJyYXkoJ3RleHRJbnB1dCcpOworJGludGVyZmFjZU5hbWVzWydN
b3VzZUV2ZW50J10gPSBhcnJheSgnY2xpY2snLCAnbW91c2Vkb3duJywgJ21vdXNldXAnLCAnbW91
c2VvdmVyJywgJ21vdXNlbW92ZScsICdtb3VzZW91dCcpOworJGludGVyZmFjZU5hbWVzWydLZXli
b2FyZEV2ZW50J10gPSBhcnJheSgna2V5ZG93bicsICdrZXl1cCcpOworJGludGVyZmFjZU5hbWVz
WydNdXRhdGlvbkV2ZW50J10gPSBhcnJheSgnRE9NU3VidHJlZU1vZGlmaWVkJywgJ0RPTU5vZGVJ
bnNlcnRlZCcsICdET01Ob2RlUmVtb3ZlZCcsICdET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCcs
ICdET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQnLCAnRE9NQXR0ck1vZGlmaWVkJywgJ0RPTUNo
YXJhY3RlckRhdGFNb2RpZmllZCcpOworJGludGVyZmFjZU5hbWVzWydFdmVudCddID0gYXJyYXko
J2xvYWQnLCAndW5sb2FkJywgJ2Fib3J0JywgJ2Vycm9yJywgJ3NlbGVjdCcsICdjaGFuZ2UnLCAn
c3VibWl0JywgJ3Jlc2V0Jyk7CiskaW50ZXJmYWNlTmFtZXNbJ01lc3NhZ2VFdmVudCddID0gYXJy
YXkoJ21lc3NhZ2UnKTsKKworZm9yZWFjaCAoJGludGVyZmFjZU5hbWVzIGFzICRpbnRlcmZhY2VO
YW1lID0+ICRldmVudFR5cGVzKSB7CisgICAgZm9yZWFjaCAoJGV2ZW50VHlwZXMgYXMgJGluZGV4
ID0+ICRldmVudFR5cGUpIHsKKyAgICAgICAgc2VuZEV2ZW50VHlwZSgkZXZlbnRUeXBlKTsKKyAg
ICB9Cit9CisKKyAgICAKKz8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="6713"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16038</attachid>
            <date>2007-08-20 12:58:20 -0700</date>
            <delta_ts>2007-09-30 00:00:57 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>server-side-events-20070819.patch</filename>
            <type>text/plain</type>
            <size>104929</size>
            <attacher name="Henry Mason">hmason</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTEzNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTExIEBACisyMDA3LTA4LTE5ICBIZW5yeSBNYXNvbiAgPGhtYXNvbkBtYWMuY29t
PgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk0
CisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk1Cisg
ICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk2CisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk3CisgICAgICAg
IEFkZGVkIHN1cHBvcnQgZm9yIEhUTUw1J3Mgc2VydmVyIHNpZGUgZXZlbnQgc3lzdGVtLgorCisg
ICAgICAgIFRoZSBldmVudC1zb3VyY2UgSFRNTCBlbGVtZW50IGhhcyBiZWVuIGFkZGVkLgorCisg
ICAgICAgIFRoZSBSZW1vdmVFdmVudFRhcmdldCBpbnRlcmZhY2UgaGFzIGJlZW4gYWRkZWQgYW5k
IEV2ZW50VGFyZ2V0Tm9kZQorICAgICAgICBub3cgaW1wbGVtZW50cyBpdC4KKworICAgICAgICBU
aGUgTWVzc2FnZUV2ZW50IGludGVyZmFjZSBpcyBub3cgaW1wbGVtZW50ZWQgYW5kIHRoZSBFdmVu
dCBjbGFzcworICAgICAgICBoYXMgYmVlbiBtb2RpZmllZCB0byBhY2NlcHQgaXQuCisKKyAgICAg
ICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOiBBZGRlZCBSZW1vdGVFdmVudFRhcmdldCwgTWVzc2Fn
ZUV2ZW50LCBhbmQgZXZlbnQtc291cmNlIHN1cHBvcnQKKyAgICAgICAgKiBXZWJDb3JlLnBybzoK
KyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViQ29yZVNvdXJjZXMu
YmtsOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldE5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGVQcm90b3R5cGVGdW5jdGlv
bjo6Y2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRO
b2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBkb20vRE9N
RXZlbnRTdHJlYW1Mb2FkZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om5vbkJ1YmJs
aW5nRXZlbnRUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpub25DYW5jZWxhYmxlRXZlbnRUeXBl
cyk6CisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRlcjo6RE9NRXZlbnRTdHJl
YW1Mb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6On5ET01F
dmVudFN0cmVhbUxvYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRl
cjo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRlcjo6Y2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmhhbmRsZUV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkRPTUV2ZW50U3RyZWFtTG9hZGVyOjpnZXROb2RlRnJvbUZpZWxk
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmdldFN0cmlu
Z0ZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6Omdl
dEludEZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6
OmdldFVuc2lnbmVkRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVh
bUxvYWRlcjo6Z2V0VW5zaWduZWRTaG9ydEZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
RE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmdldEJvb2xGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUV2ZW50U3RyZWFtTG9hZGVyOjpnZXRGbG9hdEZpZWxkVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmdldEV2ZW50VGFyZ2V0Tm9kZUZpZWxkVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmNyZWF0ZUV2ZW50
RnJvbUZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRlcjo6dXJs
TWF0Y2hlc0RvY3VtZW50RG9tYWluKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTUV2ZW50U3RyZWFt
TG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJl
YW1Mb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpET01FdmVu
dFN0cmVhbUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZl
bnRTdHJlYW1Mb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJl
YW1Mb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRT
dHJlYW1Mb2FkZXI6OnJlbG9hZFRpbWVyRmlyZWQpOgorICAgICAgICAqIGRvbS9ET01FdmVudFN0
cmVhbUxvYWRlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRPTUV2ZW50U3RyZWFtTG9h
ZGVyOjp0YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRXZlbnRTdHJlYW1Mb2FkZXI6OnNl
dFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpET01FdmVudFN0cmVhbUxvYWRlcjo6VVJMKToK
KyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6
OmNyZWF0ZUV2ZW50KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaWRsOgorICAgICAgICAqIGRv
bS9FdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudDo6aXNNZXNzYWdlRXZlbnQpOiBN
ZXNzYWdlRXZlbnQgc3VwcG9ydAorICAgICAgICAqIGRvbS9FdmVudC5oOgorICAgICAgICAqIGRv
bS9FdmVudE5hbWVzLmg6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFRhcmdldE5vZGU6On5FdmVudFRhcmdldE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjphZGRFdmVudFNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50U291cmNlKToKKyAgICAgICAgKiBkb20v
RXZlbnRUYXJnZXROb2RlLmg6CisgICAgICAgICogZG9tL01lc3NhZ2VFdmVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50OjpNZXNzYWdlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50Ojp+TWVzc2FnZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lc3NhZ2VFdmVudDo6aW5pdE1lc3NhZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnROUyk6CisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlRXZlbnQ6OmlzTWVzc2FnZUV2ZW50KToKKyAgICAgICAgKiBkb20vTWVzc2FnZUV2ZW50Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVzc2FnZUV2ZW50OjpzZXREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lc3NhZ2VFdmVudDo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpNZXNz
YWdlRXZlbnQ6OmRvbWFpbik6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6OnVyaSk6
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlRXZlbnQ6OnNvdXJjZSk6CisgICAgICAgICogZG9t
L01lc3NhZ2VFdmVudC5pZGw6IEFkZGVkLgorICAgICAgICAqIGRvbS9SZW1vdGVFdmVudFRhcmdl
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVtb3RlRXZlbnRUYXJnZXQ6OmFkZEV2
ZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbW90ZUV2ZW50VGFyZ2V0OjpyZW1vdmVF
dmVudFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW1vdGVFdmVudFRhcmdldDo6flJlbW90
ZUV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiBkb20vUmVtb3RlRXZlbnRUYXJnZXQuaDogQWRkZWQu
CisgICAgICAgICogZG9tL1JlbW90ZUV2ZW50VGFyZ2V0LmlkbDogQWRkZWQuCisgICAgICAgICog
aHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbmxpbmVUYWdMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmJsb2NrVGFnTGlzdCk6CisgICAgICAgICogaHRtbC9IVE1MRWxl
bWVudEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXZlbnRfc291cmNlQ29uc3RydWN0
b3IpOiBBZGRlZCBldmVudC1zb3VyY2UgbWFraW5nCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVG
dW5jdGlvbk1hcCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0
ZUhUTUxFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxFdmVudFNvdXJjZUVsZW1lbnQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFdmVudFNvdXJjZUVsZW1lbnQ6OkhUTUxF
dmVudFNvdXJjZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEV2ZW50U291cmNlRWxl
bWVudDo6fkhUTUxFdmVudFNvdXJjZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEV2
ZW50U291cmNlRWxlbWVudDo6c3JjKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFdmVudFNvdXJj
ZUVsZW1lbnQ6OnNldFNyYyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRXZlbnRTb3VyY2VFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRXZlbnRTb3Vy
Y2VFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVu
dC5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvSFRNTFRhZ05hbWVzLmluOgorICAgICAgICAq
IHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpc2VTdXBwb3J0ZWROb25JbWFnZU1pbWVU
eXBlcyk6CisKIDIwMDctMDgtMTcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEh5YXR0LgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNp
b24gMjUxMzYpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDYgKzg5LDcgQEAgYWxsIDogXAogICAgIERPTUhUTUxEb2N1bWVudC5oIFwKICAgICBE
T01IVE1MRWxlbWVudC5oIFwKICAgICBET01IVE1MRW1iZWRFbGVtZW50LmggXAorICAgIERPTUhU
TUxFdmVudFNvdXJjZUVsZW1lbnQuaCBcCiAgICAgRE9NSFRNTEZpZWxkU2V0RWxlbWVudC5oIFwK
ICAgICBET01IVE1MRm9udEVsZW1lbnQuaCBcCiAgICAgRE9NSFRNTEZvcm1FbGVtZW50LmggXApA
QCAtMTM0LDYgKzEzNSw3IEBAIGFsbCA6IFwKICAgICBET01IVE1MVUxpc3RFbGVtZW50LmggXAog
ICAgIERPTUtleWJvYXJkRXZlbnQuaCBcCiAgICAgRE9NTWVkaWFMaXN0LmggXAorICAgIERPTU1l
c3NhZ2VFdmVudC5oIFwKICAgICBET01Nb3VzZUV2ZW50LmggXAogICAgIERPTU11dGF0aW9uRXZl
bnQuaCBcCiAgICAgRE9NTmFtZWROb2RlTWFwLmggXApAQCAtMTQ3LDYgKzE0OSw3IEBAIGFsbCA6
IFwKICAgICBET01SR0JDb2xvci5oIFwKICAgICBET01SYW5nZS5oIFwKICAgICBET01SZWN0Lmgg
XAorICAgIERPTVJlbW90ZUV2ZW50VGFyZ2V0LmggXAogICAgIERPTVNWR0FFbGVtZW50LmggXAog
ICAgIERPTVNWR0FuZ2xlLmggXAogICAgIERPTVNWR0FuaW1hdGVDb2xvckVsZW1lbnQuaCBcCkBA
IC0zNTAsNiArMzUzLDcgQEAgYWxsIDogXAogICAgIEpTSFRNTERvY3VtZW50LmggXAogICAgIEpT
SFRNTEVsZW1lbnQuaCBcCiAgICAgSlNIVE1MRW1iZWRFbGVtZW50LmggXAorICAgIEpTSFRNTEV2
ZW50U291cmNlRWxlbWVudC5oIFwKICAgICBKU0hUTUxGaWVsZFNldEVsZW1lbnQuaCBcCiAgICAg
SlNIVE1MRm9udEVsZW1lbnQuaCBcCiAgICAgSlNIVE1MRm9ybUVsZW1lbnQuaCBcCkBAIC0zOTcs
NiArNDAxLDcgQEAgYWxsIDogXAogICAgIEpTSGlzdG9yeS5oIFwKICAgICBKU0tleWJvYXJkRXZl
bnQuaCBcCiAgICAgSlNNZWRpYUxpc3QuaCBcCisgICAgSlNNZXNzYWdlRXZlbnQuaCBcCiAgICAg
SlNNb3VzZUV2ZW50LmggXAogICAgIEpTTXV0YXRpb25FdmVudC5oIFwKICAgICBKU05hbWVkTm9k
ZU1hcC5oIFwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMjUxMzYpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDMsNiArMjQzLDcgQEAgSURMX0JJTkRJTkdTICs9IFwKICAgICBo
dG1sL0hUTUxEb2N1bWVudC5pZGwgXAogICAgIGh0bWwvSFRNTEVsZW1lbnQuaWRsIFwKICAgICBo
dG1sL0hUTUxFbWJlZEVsZW1lbnQuaWRsIFwKKyAgICBodG1sL0hUTUxFdmVudFNvdXJjZUVsZW1l
bnQuaWRsIFwKICAgICBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaWRsIFwKICAgICBodG1sL0hU
TUxGb250RWxlbWVudC5pZGwgXAogICAgIGh0bWwvSFRNTEZvcm1FbGVtZW50LmlkbCBcCkBAIC0z
MTUsNiArMzE2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYmluZGluZ3MvanMvSlNIVE1MRWxlbWVu
dEN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRXcmFwcGVyRmFjdG9y
eS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTEVtYmVkRWxlbWVudEN1c3RvbS5jcHAgXAor
ICAgIGJpbmRpbmdzL2pzL0pTSFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHAgXAogICAgIGJpbmRp
bmdzL2pzL0pTSFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNI
VE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNIVE1MRnJhbWVT
ZXRFbGVtZW50Q3VzdG9tLmNwcCBcCkBAIC00MDUsNiArNDA3LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAgXAogICAgIGRvbS9LZXlib2FyZEV2ZW50LmNwcCBc
CiAgICAgZG9tL01hcHBlZEF0dHJpYnV0ZS5jcHAgXAorICAgIGRvbS9NZXNzYWdlRXZlbnQuY3Bw
IFwKICAgICBkb20vTW91c2VFdmVudC5jcHAgXAogICAgIGRvbS9Nb3VzZVJlbGF0ZWRFdmVudC5j
cHAgXAogICAgIGRvbS9NdXRhdGlvbkV2ZW50LmNwcCBcCkBAIC01MDcsNiArNTEwLDcgQEAgU09V
UkNFUyArPSBcCiAgICAgaHRtbC9IVE1MRWxlbWVudC5jcHAgXAogICAgIGh0bWwvSFRNTEVsZW1l
bnRGYWN0b3J5LmNwcCBcCiAgICAgaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcCBcCisgICAgaHRt
bC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MRmllbGRTZXRFbGVt
ZW50LmNwcCBcCiAgICAgaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwIFwKICAgICBodG1sL0hUTUxG
b3JtQ29sbGVjdGlvbi5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlzaW9uIDI1MTM2KQor
KysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0
LDcgQEAKICAgICAgICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxEaXZFbGVtZW50LmNw
cAogICAgICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTERvY3VtZW50LmNwcAogICAg
ICAgICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEVsZW1lbnQuY3BwCisgICAgICAgIERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmNwcAogICAgICAg
ICBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKICAgICAg
ICAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxGb250RWxlbWVudC5jcHAKICAgICAgICAg
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTU1MCw2ICs1
NTEsNyBAQAogICAgICAgICBkb20vRXZlbnRUYXJnZXROb2RlLmNwcAogICAgICAgICBkb20vS2V5
Ym9hcmRFdmVudC5jcHAKICAgICAgICAgZG9tL01hcHBlZEF0dHJpYnV0ZS5jcHAKKyAgICAgICAg
ZG9tL01lc3NhZ2VFdmVudC5jcHAKICAgICAgICAgZG9tL01vdXNlRXZlbnQuY3BwCiAgICAgICAg
IGRvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKICAgICAgICAgZG9tL011dGF0aW9uRXZlbnQuY3Bw
CkBAIC02NjcsNiArNjY5LDcgQEAKICAgICAgICAgaHRtbC9IVE1MRWxlbWVudC5jcHAKICAgICAg
ICAgaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCiAgICAgICAgIGh0bWwvSFRNTEVtYmVkRWxl
bWVudC5jcHAKKyAgICAgICAgaHRtbC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50LmNwcAogICAgICAg
ICBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCiAgICAgICAgIGh0bWwvSFRNTEZvbnRFbGVt
ZW50LmNwcAogICAgICAgICBodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMjUxMzYpCisrKyBXZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw2IEBACiAJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIKIAkJCQlEaXNhYmxlU3BlY2lm
aWNXYXJuaW5ncz0iNDA5OTs0MTAwOzQxMjc7NDEzODs0MTg5OzQyNDQ7NDUxMDs0NTEyOzQ2MTA7
NDcwNjs0ODAwOzQ5OTY7NDM1NTs0MjkxOzQwNjg7NjAxMTs2MDMxOzYyMTE7NjI0Njs2MjU1OzYz
ODciCiAJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJXZWJDb3JlUHJlZml4LmgiCi0JCQkJRW5hYmxl
UFJFZmFzdD0iJChFbmFibGVQUkVmYXN0KSIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZD
TWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpAQCAtMTMxLDcgKzEzMCw2IEBACiAJCQkJRGVi
dWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKIAkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA5
OTs0MTAwOzQxMjc7NDEzODs0MTg5OzQyNDQ7NDUxMDs0NTEyOzQ2MTA7NDcwNjs0ODAwOzQ5OTY7
NDM1NTs0MjkxOzQwNjg7NjAxMTs2MDMxOzYyMTE7NjI0Njs2MjU1OzYzODciCiAJCQkJRm9yY2Vk
SW5jbHVkZUZpbGVzPSJXZWJDb3JlUHJlZml4LmgiCi0JCQkJRW5hYmxlUFJFZmFzdD0iJChFbmFi
bGVQUkVmYXN0KSIKIAkJCS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNl
Q29tcGlsZXJUb29sIgpAQCAtMjA2LDcgKzIwNCw2IEBACiAJCQkJRGVidWdJbmZvcm1hdGlvbkZv
cm1hdD0iNCIKIAkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA5OTs0MTAwOzQxMjc7NDEz
ODs0MTg5OzQyNDQ7NDUxMDs0NTEyOzQ2MTA7NDcwNjs0ODAwOzQ5OTY7NDM1NTs0MjkxOzQwNjg7
NjAxMTs2MDMxOzYyMTE7NjI0Njs2MjU1OzYzODciCiAJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSJX
ZWJDb3JlUHJlZml4LmgiCi0JCQkJRW5hYmxlUFJFZmFzdD0iJChFbmFibGVQUkVmYXN0KSIKIAkJ
CS8+CiAJCQk8VG9vbAogCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgpA
QCAtNzY0LDYgKzc2MSwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRT
b3VyY2VzXEpTSFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9q
ZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0
RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNIVE1MRmllbGRTZXRFbGVt
ZW50LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0xMTIwLDYgKzExMjUsMjIgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXRE
aXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU01lc3NhZ2VFdmVudC5jcHAi
CisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0
T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNNZXNzYWdlRXZl
bnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJChX
ZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU01lc3Nh
Z2VFdmVudC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBh
dGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNc
SlNNZXNzYWdlRXZlbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291
cmNlc1xKU01vdXNlRXZlbnQuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTI2NzcsMjIgKzI2
OTgsMjIgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxGcmFtZUxvYWRlclR5cGVzLmgi
CiAJCQkJPgogCQkJPC9GaWxlPgotICAgICAgICAgICAgPEZpbGUKKwkJCTxGaWxlCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlxsb2FkZXJcRlRQRGlyZWN0b3J5RG9jdW1lbnQuY3BwIgogCQkJCT4KLSAg
ICAgICAgICAgIDwvRmlsZT4KLSAgICAgICAgICAgIDxGaWxlCisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXEZUUERpcmVjdG9yeURvY3VtZW50LmgiCiAJ
CQkJPgotICAgICAgICAgICAgPC9GaWxlPgotICAgICAgICAgICAgPEZpbGUKKwkJCTwvRmlsZT4K
KwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxsb2FkZXJcRlRQRGlyZWN0b3J5UGFyc2Vy
LmNwcCIKIAkJCQk+Ci0gICAgICAgICAgICA8L0ZpbGU+Ci0gICAgICAgICAgICA8RmlsZQorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGxvYWRlclxGVFBEaXJlY3Rv
cnlQYXJzZXIuaCIKIAkJCQk+Ci0gICAgICAgICAgICA8L0ZpbGU+CisJCQk8L0ZpbGU+CiAJCQk8
RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXEltYWdlRG9jdW1lbnQuY3BwIgogCQkJ
CT4KQEAgLTM1MjgsMTEgKzM1NDksMTEgQEAKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVx3aW5cS2V5RXZlbnRXaW4uY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgotICAgICAgICA8Rmls
ZQorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cd2luXExhbmd1YWdl
LmNwcCIKIAkJCQkJPgotICAgICAgICA8L0ZpbGU+Ci0gICAgICAgIDxGaWxlCisJCQkJPC9GaWxl
PgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cd2luXE1JTUVUeXBl
UmVnaXN0cnlXaW4uY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtMzU2OCwxMSArMzU4OSwx
MSBAQAogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXHdpblxTZWFyY2hQb3B1cE1lbnVX
aW4uY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgotICAgICAgICAgICAgICAgIDxGaWxlCisJCQkJ
PEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVx3aW5cU2hhcmVkQnVmZmVyV2lu
LmNwcCIKIAkJCQkJPgotICAgICAgICAgICAgICAgIDwvRmlsZT4KLSAgICAgICAgICAgICAgICA8
RmlsZQorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXHdpblxTaGFyZWRUaW1lcldpbi5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC01Njcy
LDYgKzU2OTMsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZG9tXERPTUV2ZW50U3RyZWFtTG9hZGVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+
CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXERPTUV2ZW50U3RyZWFtTG9hZGVy
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRv
bVxET01JbXBsZW1lbnRhdGlvbi5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNTc3Miw2ICs1
ODAxLDIyIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGRvbVxNZXNzYWdlRXZlbnQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZG9tXE1lc3NhZ2VFdmVudC5jcHAiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxNZXNzYWdlRXZlbnQuY3BwIgor
CQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTWVz
c2FnZUV2ZW50LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGRvbVxNb3VzZUV2ZW50LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC01OTMyLDYg
KzU5NzcsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cZG9tXFJlbW90ZUV2ZW50VGFyZ2V0LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFJlbW90ZUV2ZW50VGFyZ2V0LmgiCisJCQkJ
PgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxTdHlsZWRF
bGVtZW50LmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC02NjQ4LDYgKzY3MDEsMTQgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1M
RXZlbnRTb3VyY2VFbGVtZW50LmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJ
CVJlbGF0aXZlUGF0aD0iLi5caHRtbFxIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcSFRNTEZpZWxk
U2V0RWxlbWVudC5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpJbmRleDogV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1MTM2KQorKysgV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ3OSw2
ICs0NzksMjMgQEAKIAkJNjVERjMyM0UwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NURGMzIzODA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCAqLzsgfTsKIAkJNjVERjMyNjEwOUQxRTE5OTAwMEJFMzI1IC8qIFVzZXJBZ2VudFN0eWxl
U2hlZXRzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NTY1ODFBRjA5RDE0RUU2MDAwRTYxRDcgLyogVXNlckFnZW50U3R5bGVTaGVldHNEYXRh
LmNwcCAqLzsgfTsKIAkJNjVGRUE4NjkwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGRUE4NjgwOTgzM0FE
RTAwQkVENEFCIC8qIFBhZ2UuY3BwICovOyB9OworCQk3NThDMjhCMTBDNjNCNzEzMDBBOTVGRDgg
LyogUmVtb3RlRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzU4QzI4QUUwQzYzQjcxMzAwQTk1RkQ4IC8qIFJlbW90ZUV2ZW50VGFy
Z2V0LmNwcCAqLzsgfTsKKwkJNzU4QzI4QjIwQzYzQjcxMzAwQTk1RkQ4IC8qIFJlbW90ZUV2ZW50
VGFyZ2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NThDMjhBRjBDNjNCNzEzMDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJnZXQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3NThDMjhCMzBDNjNCNzEz
MDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJnZXQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NThDMjhCMDBDNjNCNzEzMDBBOTVGRDggLyogUmVt
b3RlRXZlbnRUYXJnZXQuaWRsICovOyB9OworCQk3NThENkY5MjBDNzhGQzIxMDAxOTEyQ0QgLyog
SlNIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3NThENkY5MDBDNzhGQzIxMDAxOTEyQ0QgLyogSlNIVE1MRXZlbnRT
b3VyY2VFbGVtZW50LmggKi87IH07CisJCTc1OEQ2RjkzMEM3OEZDMjEwMDE5MTJDRCAvKiBKU0hU
TUxFdmVudFNvdXJjZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzU4RDZGOTEwQzc4RkMyMTAwMTkxMkNEIC8qIEpTSFRNTEV2ZW50U291
cmNlRWxlbWVudC5jcHAgKi87IH07CisJCTc1QzIyOTJFMEM1RjlBQkEwMDIxNjZGOCAvKiBNZXNz
YWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzVDMjI5MkIwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5jcHAgKi87IH07CisJ
CTc1QzIyOTJGMEM1RjlBQkEwMDIxNjZGOCAvKiBNZXNzYWdlRXZlbnQuaWRsIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUMyMjkyQzBDNUY5QUJBMDAy
MTY2RjggLyogTWVzc2FnZUV2ZW50LmlkbCAqLzsgfTsKKwkJNzVDMjI5MzAwQzVGOUFCQTAwMjE2
NkY4IC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzVDMjI5MkQwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5oICov
OyB9OworCQk3NUMyMjk2NzBDNUZBMDNDMDAyMTY2RjggLyogSlNNZXNzYWdlRXZlbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QzIyOTY1MEM1RkEw
M0MwMDIxNjZGOCAvKiBKU01lc3NhZ2VFdmVudC5oICovOyB9OworCQk3NUMyMjk2ODBDNUZBMDND
MDAyMTY2RjggLyogSlNNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5NjYwQzVGQTAzQzAwMjE2NkY4IC8qIEpTTWVzc2Fn
ZUV2ZW50LmNwcCAqLzsgfTsKKwkJNzVDMjI5ODkwQzVGQTA3NjAwMjE2NkY4IC8qIERPTU1lc3Nh
Z2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzVDMjI5ODcwQzVGQTA3NjAwMjE2NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5oICovOyB9OworCQk3
NUMyMjk4QTBDNUZBMDc2MDAyMTY2RjggLyogRE9NTWVzc2FnZUV2ZW50Lm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5ODgwQzVGQTA3NjAwMjE2
NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5tbSAqLzsgfTsKKwkJNzVDMjI5QjUwQzVGQjZCQTAwMjE2
NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5QjIwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxF
dmVudFNvdXJjZUVsZW1lbnQuY3BwICovOyB9OworCQk3NUMyMjlCNjBDNUZCNkJBMDAyMTY2Rjgg
LyogSFRNTEV2ZW50U291cmNlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzVDMjI5QjMwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNv
dXJjZUVsZW1lbnQuaCAqLzsgfTsKKwkJNzVDMjI5QjcwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxF
dmVudFNvdXJjZUVsZW1lbnQuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NUMyMjlCNDBDNUZCNkJBMDAyMTY2RjggLyogSFRNTEV2ZW50U291cmNl
RWxlbWVudC5pZGwgKi87IH07CisJCTc1QzIyOUUxMEM2MkE3MzcwMDIxNjZGOCAvKiBET01FdmVu
dFN0cmVhbUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NUMyMjlERjBDNjJBNzM3MDAyMTY2RjggLyogRE9NRXZlbnRTdHJlYW1Mb2FkZXIu
Y3BwICovOyB9OworCQk3NUMyMjlFMjBDNjJBNzM3MDAyMTY2RjggLyogRE9NRXZlbnRTdHJlYW1M
b2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1
QzIyOUUwMEM2MkE3MzcwMDIxNjZGOCAvKiBET01FdmVudFN0cmVhbUxvYWRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdFNkZFRUQ4MDg5ODU4
MjMwMEM0NEMzRiAvKiBXZWJDb3JlU2NyaXB0RGVidWdnZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNkZFRUQ2MDg5ODU4MjMwMEM0NEMzRiAvKiBX
ZWJDb3JlU2NyaXB0RGVidWdnZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3RTZGRUVEOTA4OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlw
dERlYnVnZ2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gN0U2RkVFRDcwODk4NTgyMzAwQzQ0QzNGIC8qIFdlYkNvcmVTY3JpcHREZWJ1Z2dlci5tbSAq
LzsgfTsKIAkJODExNjg5NUYwOUYyQTRBMDAwNzcyQ0EwIC8qIFNWR1RSZWZFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxMTY4OTVEMDlG
MkE0QTAwMDc3MkNBMCAvKiBTVkdUUmVmRWxlbWVudC5jcHAgKi87IH07CkBAIC0xNDk2LDcgKzE1
MTMsNyBAQAogCQk5MzVDNDc3MTA5QUM0RDczMDBBNkFBQjQgLyogUGxhdGZvcm1Nb3VzZUV2ZW50
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM1
QzQ3NkYwOUFDNEQ3MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91c2VFdmVudE1hYy5tbSAqLzsgfTsK
IAkJOTM1QzQ3NzMwOUFDNEQ3NzAwQTZBQUI0IC8qIFdoZWVsRXZlbnRNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzVDNDc3MjA5QUM0RDc3MDBB
NkFBQjQgLyogV2hlZWxFdmVudE1hYy5tbSAqLzsgfTsKIAkJOTM1QzQ3NzUwOUFDNEQ4RTAwQTZB
QUI0IC8qIEdhcFJlY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5MzVDNDc3NDA5QUM0RDhEMDBBNkFBQjQgLyogR2FwUmVjdHMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5MzVGQkM0NTA5QkEwMEI5
MDBFMjMwQjEgLyogRXZlbnRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM1RkJDNDQwOUJBMDBCOTAwRTIzMEIxIC8qIEV2ZW50TGlzdGVu
ZXIuaCAqLzsgfTsKKwkJOTM1RkJDNDUwOUJBMDBCOTAwRTIzMEIxIC8qIEV2ZW50TGlzdGVuZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUZCQzQ0
MDlCQTAwQjkwMEUyMzBCMSAvKiBFdmVudExpc3RlbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM1RkJDRjIwOUJBMTQzQjAwRTIzMEIxIC8q
IEV4Y2VwdGlvbkNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzNUZCQ0YxMDlCQTE0M0IwMEUyMzBCMSAvKiBFeGNlcHRpb25Db2RlLmggKi87IH07
CiAJCTkzNkI0MjRFMDlBNDM2Q0QwMEJBQTgyMCAvKiBTVkdDU1NQYXJzZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEY2RjYwODk3MDFGMTAw
QkE1MTE0IC8qIFNWR0NTU1BhcnNlci5jcHAgKi87IH07CiAJCTkzNzI1NjEwMEE2MTU2NDIwMEIw
NTNCOSAvKiBsaWJzcWxpdGUzLmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM3MjU2MEYwQTYxNTY0MjAwQjA1M0I5IC8qIGxpYnNxbGl0ZTMu
ZHlsaWIgKi87IH07CkBAIC0zNzU1LDYgKzM3NzIsMjMgQEAKIAkJNjVGNTM4MjQwOUIyQjU3NTAw
RjNEQzRBIC8qIG1hYy1lbmNvZGluZ3MudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSAibWFj
LWVuY29kaW5ncy50eHQiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUY4MDY5NzA1
NEQ5Rjg2MDA4QkY3NzYgLyogQmxvY2tFeGNlcHRpb25zLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQmxvY2tFeGNlcHRpb25zLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsK
IAkJNjVGRUE4NjgwOTgzM0FERTAwQkVENEFCIC8qIFBhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3NThDMjhBRTBDNjNCNzEzMDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJnZXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUV2ZW50VGFyZ2V0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzU4QzI4QUYwQzYzQjcxMzAwQTk1RkQ4
IC8qIFJlbW90ZUV2ZW50VGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW1vdGVFdmVudFRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NThD
MjhCMDBDNjNCNzEzMDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJnZXQuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBSZW1vdGVFdmVudFRhcmdldC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTc1OEQ2RjkwMEM3OEZDMjEwMDE5MTJDRCAvKiBKU0hUTUxFdmVudFNvdXJjZUVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTEV2ZW50U291
cmNlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NThENkY5MTBDNzhG
QzIxMDAxOTEyQ0QgLyogSlNIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxFdmVudFNvdXJjZUVsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NUMyMjkyQjBDNUY5QUJBMDAyMTY2RjggLyog
TWVzc2FnZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
ZXNzYWdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NUMyMjkyQzBD
NUY5QUJBMDAyMTY2RjggLyogTWVzc2FnZUV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gTWVzc2FnZUV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzVDMjI5
MkQwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVzc2FnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTc1QzIyOTY1MEM1RkEwM0MwMDIxNjZGOCAvKiBKU01lc3NhZ2VFdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNZXNzYWdlRXZlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzVDMjI5NjYwQzVGQTAzQzAwMjE2NkY4IC8qIEpTTWVzc2FnZUV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lc3NhZ2VF
dmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc1QzIyOTg3MEM1RkEwNzYw
MDIxNjZGOCAvKiBET01NZXNzYWdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERPTU1lc3NhZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
NUMyMjk4ODBDNUZBMDc2MDAyMTY2RjggLyogRE9NTWVzc2FnZUV2ZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTU1lc3NhZ2VFdmVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzVDMjI5QjIwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxF
dmVudFNvdXJjZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3NUMyMjlCMzBDNUZCNkJBMDAyMTY2RjggLyogSFRNTEV2ZW50U291cmNlRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEV2ZW50U291cmNlRWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3NUMyMjlCNDBDNUZCNkJBMDAyMTY2
RjggLyogSFRNTEV2ZW50U291cmNlRWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3NUMyMjlERjBDNjJBNzM3MDAyMTY2RjggLyogRE9NRXZlbnRTdHJlYW1Mb2FkZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUV2ZW50U3RyZWFtTG9hZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzVDMjI5RTAwQzYyQTczNzAwMjE2
NkY4IC8qIERPTUV2ZW50U3RyZWFtTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBET01FdmVudFN0cmVhbUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3RTZGRUVENjA4OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNjcmlwdERlYnVnZ2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29y
ZVNjcmlwdERlYnVnZ2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OwogCQk3RTZGRUVENzA4OTg1ODIzMDBDNDRDM0YgLyogV2ViQ29yZVNj
cmlwdERlYnVnZ2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlU2NyaXB0RGVidWdnZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk4MTE2ODk1RDA5RjJB
NEEwMDA3NzJDQTAgLyogU1ZHVFJlZkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNWR1RSZWZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTY2NTksNiArNjY5Myw4IEBACiAJCQkJMUE0OTRCRjkwQTEyMkY0NDAwRkRBRkMx
IC8qIEpTSFRNTEVsZW1lbnQuaCAqLywKIAkJCQlCQzZENDRFQTBDMDdGMkVEMDA3MkQyQzkgLyog
SlNIVE1MRW1iZWRFbGVtZW50LmNwcCAqLywKIAkJCQlCQzZENDRFQjBDMDdGMkVEMDA3MkQyQzkg
LyogSlNIVE1MRW1iZWRFbGVtZW50LmggKi8sCisJCQkJNzU4RDZGOTEwQzc4RkMyMTAwMTkxMkNE
IC8qIEpTSFRNTEV2ZW50U291cmNlRWxlbWVudC5jcHAgKi8sCisJCQkJNzU4RDZGOTAwQzc4RkMy
MTAwMTkxMkNEIC8qIEpTSFRNTEV2ZW50U291cmNlRWxlbWVudC5oICovLAogCQkJCTFBRTJBQTEy
MEExQ0RBQjMwMEI0MkIyNSAvKiBKU0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwICovLAogCQkJCTFB
RTJBQTEzMEExQ0RBQjMwMEI0MkIyNSAvKiBKU0hUTUxGaWVsZFNldEVsZW1lbnQuaCAqLywKIAkJ
CQkxQUUyQUExNDBBMUNEQUIzMDBCNDJCMjUgLyogSlNIVE1MRm9udEVsZW1lbnQuY3BwICovLApA
QCAtNjc0OSw2ICs2Nzg1LDggQEAKIAkJCQlBODY2MjlDRDA5REEyQjQ3MDA5NjMzQTUgLyogSlNL
ZXlib2FyZEV2ZW50LmggKi8sCiAJCQkJQkMzQzM5QjQwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVk
aWFMaXN0LmNwcCAqLywKIAkJCQlCQzNDMzlCNTBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxp
c3QuaCAqLywKKwkJCQk3NUMyMjk2NjBDNUZBMDNDMDAyMTY2RjggLyogSlNNZXNzYWdlRXZlbnQu
Y3BwICovLAorCQkJCTc1QzIyOTY1MEM1RkEwM0MwMDIxNjZGOCAvKiBKU01lc3NhZ2VFdmVudC5o
ICovLAogCQkJCUE4NjYyOUNDMDlEQTJCNDcwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuY3BwICov
LAogCQkJCUE4NjYyOUNCMDlEQTJCNDcwMDk2MzNBNSAvKiBKU01vdXNlRXZlbnQuaCAqLywKIAkJ
CQk2NURGMzFFNzA5RDFDQzYwMDAwQkUzMjUgLyogSlNNdXRhdGlvbkV2ZW50LmNwcCAqLywKQEAg
LTc4MTgsNiArNzg1Niw4IEBACiAJCQkJODVERjM0M0YwQUFGQzBFRDAwRTU5QUUzIC8qIERPTUtl
eWJvYXJkRXZlbnRQcml2YXRlLmggKi8sCiAJCQkJODVGRjMxNTgwQUFGQkZDQjAwMzc0RjM4IC8q
IERPTUtleWJvYXJkRXZlbnQuaCAqLywKIAkJCQk4NUZGMzE1OTBBQUZCRkNCMDAzNzRGMzggLyog
RE9NS2V5Ym9hcmRFdmVudC5tbSAqLywKKwkJCQk3NUMyMjk4NzBDNUZBMDc2MDAyMTY2RjggLyog
RE9NTWVzc2FnZUV2ZW50LmggKi8sCisJCQkJNzVDMjI5ODgwQzVGQTA3NjAwMjE2NkY4IC8qIERP
TU1lc3NhZ2VFdmVudC5tbSAqLywKIAkJCQk4NTdFMEIyQjBBQjA0M0ZDMDAzNkU0NDcgLyogRE9N
TW91c2VFdmVudFByaXZhdGUuaCAqLywKIAkJCQk4NTdFMEIyMzBBQjA0MzQ2MDAzNkU0NDcgLyog
RE9NTW91c2VFdmVudC5oICovLAogCQkJCTg1N0UwQjI0MEFCMDQzNDYwMDM2RTQ0NyAvKiBET01N
b3VzZUV2ZW50Lm1tICovLApAQCAtODQ1Myw2ICs4NDkzLDkgQEAKIAkJCQlBODcxRDQ1NTBBMTI3
Q0JDMDBCMTJBNjggLyogSFRNTEVtYmVkRWxlbWVudC5jcHAgKi8sCiAJCQkJQTg3MUQ0NTIwQTEy
N0NCQzAwQjEyQTY4IC8qIEhUTUxFbWJlZEVsZW1lbnQuaCAqLywKIAkJCQk4NTkxMjg3OTBBQjIy
MkVDMDAyMDIyNjUgLyogSFRNTEVtYmVkRWxlbWVudC5pZGwgKi8sCisJCQkJNzVDMjI5QjIwQzVG
QjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuY3BwICovLAorCQkJCTc1QzIy
OUIzMEM1RkI2QkEwMDIxNjZGOCAvKiBIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmggKi8sCisJCQkJ
NzVDMjI5QjQwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuaWRsICov
LAogCQkJCUE4MTM2OUI5MDk3Mzc0RjUwMEQ3NDQ2MyAvKiBIVE1MRmllbGRTZXRFbGVtZW50LmNw
cCAqLywKIAkJCQlBODEzNjlCODA5NzM3NEY1MDBENzQ0NjMgLyogSFRNTEZpZWxkU2V0RWxlbWVu
dC5oICovLAogCQkJCTFBRTJBOUY0MEExQ0RBNTcwMEI0MkIyNSAvKiBIVE1MRmllbGRTZXRFbGVt
ZW50LmlkbCAqLywKQEAgLTEwMDU2LDYgKzEwMDk5LDggQEAKIAkJCQlBODE4NUYzNjA5NzY1NzY1
MDA1ODI2RDkgLyogRE9NSW1wbGVtZW50YXRpb24uY3BwICovLAogCQkJCUE4MTg1RjMzMDk3NjU3
NjUwMDU4MjZEOSAvKiBET01JbXBsZW1lbnRhdGlvbi5oICovLAogCQkJCTkzRUVDMUU5MDlDMjg3
NzcwMEM1MTVEMSAvKiBET01JbXBsZW1lbnRhdGlvbi5pZGwgKi8sCisJCQkJNzVDMjI5REYwQzYy
QTczNzAwMjE2NkY4IC8qIERPTUV2ZW50U3RyZWFtTG9hZGVyLmNwcCAqLywKKwkJCQk3NUMyMjlF
MDBDNjJBNzM3MDAyMTY2RjggLyogRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaCAqLywKIAkJCQk2NTUw
QjY5OTA5OURGMDI3MDA5MEQ3ODEgLyogRWRpdGluZ1RleHQuY3BwICovLAogCQkJCTY1NTBCNjlB
MDk5REYwMjcwMDkwRDc4MSAvKiBFZGl0aW5nVGV4dC5oICovLAogCQkJCUE4QzRBN0Y2MDlENTYz
MjcwMDAzQUM4RCAvKiBFbGVtZW50LmNwcCAqLywKQEAgLTEwMDg2LDYgKzEwMTMxLDkgQEAKIAkJ
CQlBOEM0QTdGNDA5RDU2MzI3MDAwM0FDOEQgLyogTWFwcGVkQXR0cmlidXRlLmNwcCAqLywKIAkJ
CQlBOEM0QTdGMzA5RDU2MzI3MDAwM0FDOEQgLyogTWFwcGVkQXR0cmlidXRlLmggKi8sCiAJCQkJ
QThDNEE4NEIwOUQ1NjQ5RDAwMDNBQzhEIC8qIE1hcHBlZEF0dHJpYnV0ZUVudHJ5LmggKi8sCisJ
CQkJNzVDMjI5MkIwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5jcHAgKi8sCisJCQkJ
NzVDMjI5MkMwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5pZGwgKi8sCisJCQkJNzVD
MjI5MkQwQzVGOUFCQTAwMjE2NkY4IC8qIE1lc3NhZ2VFdmVudC5oICovLAogCQkJCTg1MDMxQjJG
MEE0NEVGQzcwMEY5OTJFMCAvKiBNb3VzZUV2ZW50LmNwcCAqLywKIAkJCQk4NTAzMUIzMDBBNDRF
RkM3MDBGOTkyRTAgLyogTW91c2VFdmVudC5oICovLAogCQkJCTE0MUI5NEU1MDlFQzQyMjMwMDBF
OTQxMyAvKiBNb3VzZUV2ZW50LmlkbCAqLywKQEAgLTEwMTM4LDYgKzEwMTg2LDkgQEAKIAkJCQlE
MjNDQTU0ODBBQjBFOTgzMDA1MTA4QTUgLyogUmFuZ2VFeGNlcHRpb24uaWRsICovLAogCQkJCTg1
MDMxQjM1MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5jcHAgKi8s
CiAJCQkJODUwMzFCMzYwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
LmggKi8sCisJCQkJNzU4QzI4QUUwQzYzQjcxMzAwQTk1RkQ4IC8qIFJlbW90ZUV2ZW50VGFyZ2V0
LmNwcCAqLywKKwkJCQk3NThDMjhBRjBDNjNCNzEzMDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJn
ZXQuaCAqLywKKwkJCQk3NThDMjhCMDBDNjNCNzEzMDBBOTVGRDggLyogUmVtb3RlRXZlbnRUYXJn
ZXQuaWRsICovLAogCQkJCUE4QzRBN0VDMDlENTYzMjcwMDAzQUM4RCAvKiBTdHlsZWRFbGVtZW50
LmNwcCAqLywKIAkJCQlBOEM0QTdFQjA5RDU2MzI3MDAwM0FDOEQgLyogU3R5bGVkRWxlbWVudC5o
ICovLAogCQkJCUFBNEMzQTc0MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICov
LApAQCAtMTE3MTEsNyArMTE3NjIsMTQgQEAKIAkJCQlCNDAyRkQwQjBDNEM5QzM5MDAyMTBBQTYg
LyogQmlkaVJlc29sdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMxQ0JGOTJCNjU0NzMwQkEw
NTM1RTggLyogQmlkaUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MzJFODQ3MEM1MTQ5
MzgwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTc1QzIyOTMw
MEM1RjlBQkEwMDIxNjZGOCAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTc1
QzIyOTY3MEM1RkEwM0MwMDIxNjZGOCAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzVDMjI5ODkwQzVGQTA3NjAwMjE2NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzVDMjI5QjYwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJj
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTc1QzIyOUUyMEM2MkE3MzcwMDIxNjZGOCAv
KiBET01FdmVudFN0cmVhbUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzU4QzI4QjIwQzYz
QjcxMzAwQTk1RkQ4IC8qIFJlbW90ZUV2ZW50VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTRCM0Y3MzBDNzIyMDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzU4RDZGOTIwQzc4RkMyMTAwMTkxMkNEIC8qIEpTSFRNTEV2ZW50U291cmNlRWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0xMTc1MCw3ICsxMTgwOCw2IEBACiAJCTA4NjdENjkwRkU4NDAy
OEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFByb2plY3Q7
CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZDIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87Ci0J
CQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwogCQkJaGFzU2Nhbm5lZEZvckVu
Y29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTExODI0
LDYgKzExODgxLDkgQEAKIAkJCQkwNjY5M0Y3QjBCRkJDOTE3MDAyMTYwNzIgLyogaW5zcGVjdG9y
IGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUlu
Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRG
IC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKKwkJCQk3NUMyMjkyRjBDNUY5
QUJBMDAyMTY2RjggLyogTWVzc2FnZUV2ZW50LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNzVD
MjI5QjcwQzVGQjZCQTAwMjE2NkY4IC8qIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQuaWRsIGluIFJl
c291cmNlcyAqLywKKwkJCQk3NThDMjhCMzBDNjNCNzEzMDBBOTVGRDggLyogUmVtb3RlRXZlbnRU
YXJnZXQuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTEzMTY4LDExICsxMzIyOCwxOCBAQAogCQkJ
CUJDNzcyQzVFMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJRjk3MUUyN0ZENzBGNDM4MkJDNjZENzkyIC8qIEJpZGlDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MzJFODQ5MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRy
b2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzVDMjI5MkUwQzVGOUFCQTAwMjE2NkY4IC8q
IE1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3NUMyMjk2ODBDNUZBMDNDMDAy
MTY2RjggLyogSlNNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzVDMjI5OEEw
QzVGQTA3NjAwMjE2NkY4IC8qIERPTU1lc3NhZ2VFdmVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTc1QzIyOUI1MEM1RkI2QkEwMDIxNjZGOCAvKiBIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTc1QzIyOUUxMEM2MkE3MzcwMDIxNjZGOCAvKiBET01FdmVudFN0
cmVhbUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3NThDMjhCMTBDNjNCNzEzMDBBOTVG
RDggLyogUmVtb3RlRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMyRUQ1NTUw
QzZCOUJEMzAwOTIwQkZGIC8qIEpTRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzJFRDY1MDBDNkJDNDhDMDA5MjBCRkYgLyogSlNIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzJFRDZCQzBDNkJEMkYwMDA5MjBCRkYgLyogSlNBdHRy
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMkVEN0E1MEM2QzBGMzYwMDkyMEJGRiAv
KiBKU0hUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE0QjNG
NzYwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0ZW1NYWMubW0gaW4gU291cmNlcyAqLywKKwkJ
CQk3NThENkY5MzBDNzhGQzIxMDAxOTEyQ0QgLyogSlNIVE1MRXZlbnRTb3VyY2VFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiAyNTEzNikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDbGlwYm9hcmQu
aCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkpTS2V5Ym9hcmRFdmVudC5oIgorI2lu
Y2x1ZGUgIkpTTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiSlNNb3VzZUV2ZW50LmgiCiAjaW5j
bHVkZSAiSlNNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiSlNPdmVyZmxvd0V2ZW50LmgiCkBA
IC0zOSw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSlNVSUV2ZW50LmgiCiAjaW5jbHVkZSAiSlNXaGVl
bEV2ZW50LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1lc3NhZ2VF
dmVudC5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50
LmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgpAQCAtODEsNiArODMsOCBAQCBLSlM6OkpT
VmFsdWUqIHRvSlMoS0pTOjpFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIHJldCA9IG5ldyBKU011
dGF0aW9uRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8TXV0YXRpb25FdmVudCo+KGV2ZW50KSk7CiAg
ICAgZWxzZSBpZiAoZXZlbnQtPmlzT3ZlcmZsb3dFdmVudCgpKQogICAgICAgICByZXQgPSBuZXcg
SlNPdmVyZmxvd0V2ZW50KGV4ZWMsIHN0YXRpY19jYXN0PE92ZXJmbG93RXZlbnQqPihldmVudCkp
OworICAgIGVsc2UgaWYgKGV2ZW50LT5pc01lc3NhZ2VFdmVudCgpKQorICAgICAgICByZXQgPSBu
ZXcgSlNNZXNzYWdlRXZlbnQoZXhlYywgc3RhdGljX2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oZXZlbnQp
KTsKICAgICBlbHNlCiAgICAgICAgIHJldCA9IG5ldyBKU0V2ZW50KGV4ZWMsIGV2ZW50KTsKIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHJldmlzaW9u
IDI1MTM2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0Myw2ICszNDMsOSBAQCB2b2lkIEpTRXZlbnRUYXJnZXROb2RlOjpw
dXNoRXZlbnRIYW5kbGVyCiBhZGRFdmVudExpc3RlbmVyICAgICAgICBXZWJDb3JlOjpKU0V2ZW50
VGFyZ2V0Tm9kZTo6QWRkRXZlbnRMaXN0ZW5lciAgIERvbnREZWxldGV8RnVuY3Rpb24gMwogcmVt
b3ZlRXZlbnRMaXN0ZW5lciAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OlJlbW92ZUV2
ZW50TGlzdGVuZXIgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAzCiBkaXNwYXRjaEV2ZW50ICAgICAg
ICAgICBXZWJDb3JlOjpKU0V2ZW50VGFyZ2V0Tm9kZTo6RGlzcGF0Y2hFdmVudCAgRG9udERlbGV0
ZXxGdW5jdGlvbiAxCisjIGZyb20gdGhlIFJlbW90ZUV2ZW50VGFyZ2V0IGludGVyZmFjZQorYWRk
RXZlbnRTb3VyY2UgICAgICAgICAgV2ViQ29yZTo6SlNFdmVudFRhcmdldE5vZGU6OkFkZEV2ZW50
U291cmNlICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKK3JlbW92ZUV2ZW50U291cmNlICAgICAg
IFdlYkNvcmU6OkpTRXZlbnRUYXJnZXROb2RlOjpSZW1vdmVFdmVudFNvdXJjZSAgICAgRG9udERl
bGV0ZXxGdW5jdGlvbiAxCiBAZW5kCiAqLwogCkBAIC0zNzEsNiArMzc0LDE2IEBAIEpTVmFsdWUq
IEpTRXZlbnRUYXJnZXROb2RlUHJvdG90eXBlRnVuY3QKICAgICAgICAgfQogICAgICAgICBjYXNl
IEpTRXZlbnRUYXJnZXROb2RlOjpEaXNwYXRjaEV2ZW50OgogICAgICAgICAgICAgcmV0dXJuIGpz
Qm9vbGVhbihub2RlLT5kaXNwYXRjaEV2ZW50KHRvRXZlbnQoYXJnc1swXSksIGV4Y2VwdGlvbikp
OworICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXROb2RlOjpBZGRFdmVudFNvdXJjZTogeworICAg
ICAgICAgICAgU3RyaW5nIGFyZzBzdHIoYXJnc1swXS0+dG9TdHJpbmcoZXhlYykpOworICAgICAg
ICAgICAgbm9kZS0+YWRkRXZlbnRTb3VyY2UoYXJnMHN0cik7CisgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEpTRXZlbnRUYXJnZXROb2Rl
OjpSZW1vdmVFdmVudFNvdXJjZTogeworICAgICAgICAgICAgU3RyaW5nIGFyZzBzdHIoYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYykpOworICAgICAgICAgICAgbm9kZS0+cmVtb3ZlRXZlbnRTb3VyY2Uo
YXJnMHN0cik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldE5vZGUuaAkocmV2aXNpb24gMjUxMzYpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgT25CZWZvcmVDdXQsIE9uQ3V0LCBP
bkJlZm9yZUNvcHksIE9uQ29weSwgT25CZWZvcmVQYXN0ZSwgT25QYXN0ZSwgT25TZWxlY3RTdGFy
dCwKICAgICAgICAgICAgIE9uRm9jdXMsIE9uSW5wdXQsIE9uS2V5RG93biwgT25LZXlQcmVzcywg
T25LZXlVcCwgT25Mb2FkLCBPbk1vdXNlRG93biwKICAgICAgICAgICAgIE9uTW91c2VNb3ZlLCBP
bk1vdXNlT3V0LCBPbk1vdXNlT3ZlciwgT25Nb3VzZVVwLCBPbk1vdXNlV2hlZWwsIE9uUmVzZXQs
Ci0gICAgICAgICAgICBPblJlc2l6ZSwgT25TY3JvbGwsIE9uU2VhcmNoLCBPblNlbGVjdCwgT25T
dWJtaXQsIE9uVW5sb2FkCisgICAgICAgICAgICBPblJlc2l6ZSwgT25TY3JvbGwsIE9uU2VhcmNo
LCBPblNlbGVjdCwgT25TdWJtaXQsIE9uVW5sb2FkLAorICAgICAgICAgICAgQWRkRXZlbnRTb3Vy
Y2UsIFJlbW92ZUV2ZW50U291cmNlCiAgICAgICAgIH07CiAgICAgfTsKIApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyNTEzNikK
KysrIFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcg
Y29weSkKQEAgLTEzMTEsNiArMTMxMSw3IEBAIHN1YiBUeXBlQ2FuRmFpbENvbnZlcnNpb24KICAg
ICAgICAgICAgICAgICAkdHlwZSBlcSAiRE9NU3RyaW5nIiBvcgogICAgICAgICAgICAgICAgICR0
eXBlIGVxICJOb2RlIiBvcgogICAgICAgICAgICAgICAgICR0eXBlIGVxICJFbGVtZW50IiBvcgor
ICAgICAgICAgICAgICAgICR0eXBlIGVxICJEb2N1bWVudCIgb3IKICAgICAgICAgICAgICAgICAk
dHlwZSBlcSAiRG9jdW1lbnRUeXBlIiBvcgogICAgICAgICAgICAgICAgICR0eXBlIGVxICJFdmVu
dCIgb3IKICAgICAgICAgICAgICAgICAkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIgb3IKSW5kZXg6
IFdlYkNvcmUvZG9tL0RPTUV2ZW50U3RyZWFtTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9ET01FdmVudFN0cmVhbUxvYWRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2RvbS9ET01FdmVudFN0cmVhbUxvYWRlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhlbnJ5IE1hc29uIChobWFzb25AbWFjLmNv
bSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRPTUV2ZW50
U3RyZWFtTG9hZGVyLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXROb2RlLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgorI2luY2x1
ZGUgIk92ZXJmbG93RXZlbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNs
dWRlICJTdWJyZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1
ZGUgIlVJRXZlbnQuaCIKKyNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCisKKyNpZiBFTkFCTEUoU1ZH
KQorI2luY2x1ZGUgIlNWR1pvb21FdmVudC5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5h
bWVzOworCitzdGF0aWMgY29uc3QgZG91YmxlIGNvbm5lY3Rpb25SZWxvYWREZWxheSA9IDEyLjA7
CisKK3N0YXRpYyBIYXNoU2V0PFN0cmluZz4mIG5vbkJ1YmJsaW5nRXZlbnRUeXBlcygpCit7Cisg
ICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBuYW1lczsKKyAgICBzdGF0aWMgYm9vbCBpbnRpYWxp
emVkID0gZmFsc2U7CisgICAgCisgICAgaWYgKCFpbnRpYWxpemVkKSB7CisgICAgICAgIG5hbWVz
LmFkZChmb2N1c0V2ZW50KTsKKyAgICAgICAgbmFtZXMuYWRkKGJsdXJFdmVudCk7CisgICAgICAg
IG5hbWVzLmFkZChET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudEV2ZW50KTsKKyAgICAgICAgbmFt
ZXMuYWRkKERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50KTsKKyAgICAgICAgbmFtZXMu
YWRkKGxvYWRFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZCh1bmxvYWRFdmVudCk7CisgICAgICAg
IGludGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZXM7Cit9CisK
K3N0YXRpYyBIYXNoU2V0PFN0cmluZz4mIG5vbkNhbmNlbGFibGVFdmVudFR5cGVzKCkKK3sKKyAg
ICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG5hbWVzOworICAgIHN0YXRpYyBib29sIGludGlhbGl6
ZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIWludGlhbGl6ZWQpIHsKKyAgICAgICAgbmFtZXMu
YWRkKERPTUZvY3VzSW5FdmVudCk7CisgICAgICAgIG5hbWVzLmFkZChET01Gb2N1c091dEV2ZW50
KTsKKyAgICAgICAgbmFtZXMuYWRkKGZvY3VzRXZlbnQpOworICAgICAgICBuYW1lcy5hZGQoYmx1
ckV2ZW50KTsKKyAgICAgICAgbmFtZXMuYWRkKERPTVN1YnRyZWVNb2RpZmllZEV2ZW50KTsKKyAg
ICAgICAgbmFtZXMuYWRkKERPTU5vZGVSZW1vdmVkRXZlbnQpOworICAgICAgICBuYW1lcy5hZGQo
RE9NTm9kZUluc2VydGVkRXZlbnQpOworICAgICAgICBuYW1lcy5hZGQoRE9NTm9kZVJlbW92ZWRG
cm9tRG9jdW1lbnRFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZChET01Ob2RlSW5zZXJ0ZWRJbnRv
RG9jdW1lbnRFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZChET01BdHRyTW9kaWZpZWRFdmVudCk7
CisgICAgICAgIG5hbWVzLmFkZChET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWRFdmVudCk7CisvLyBG
SVhNRTogQWRkIHRoZXNlIDIgdG8gRXZlbnROYW1lcworLy8gICAgICAgIG5hbWVzLmFkZChET01F
bGVtZW50TmFtZUNoYW5nZWRFdmVudCk7CisvLyAgICAgICAgbmFtZXMuYWRkKERPTUF0dHJpYnV0
ZU5hbWVDaGFuZ2VkRXZlbnQpOworICAgICAgICBuYW1lcy5hZGQobG9hZEV2ZW50KTsKKyAgICAg
ICAgbmFtZXMuYWRkKHVubG9hZEV2ZW50KTsKKyAgICAgICAgbmFtZXMuYWRkKGFib3J0RXZlbnQp
OworICAgICAgICBuYW1lcy5hZGQoZXJyb3JFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZChzZWxl
Y3RFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZChjaGFuZ2VFdmVudCk7CisgICAgICAgIG5hbWVz
LmFkZChyZXNpemVFdmVudCk7CisgICAgICAgIG5hbWVzLmFkZChzY3JvbGxFdmVudCk7CisgICAg
ICAgIGludGlhbGl6ZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbmFtZXM7Cit9
CisKK0RPTUV2ZW50U3RyZWFtTG9hZGVyOjpET01FdmVudFN0cmVhbUxvYWRlcihFdmVudFRhcmdl
dE5vZGUgKnRhcmdldCwgY29uc3QgS1VSTCYgdXJsKQorICAgIDogbV90YXJnZXQodGFyZ2V0KQor
ICAgICwgbV9sb2FkZXIoMCkKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVjb2RlcigidGV4
dC9wbGFpbiIsICJVVEYtOCIpCisgICAgLCBtX2lzT3BlbihmYWxzZSkKKyAgICAsIG1fbGFzdENo
YXJXYXNDUihmYWxzZSkKKyAgICAsIG1fcmVsb2FkVGltZXIodGhpcywgJkRPTUV2ZW50U3RyZWFt
TG9hZGVyOjpyZWxvYWRUaW1lckZpcmVkKQoreworfQorCitET01FdmVudFN0cmVhbUxvYWRlcjo6
fkRPTUV2ZW50U3RyZWFtTG9hZGVyKCkKK3sKK30KKwordm9pZCBET01FdmVudFN0cmVhbUxvYWRl
cjo6b3BlbigpCit7CisgICAgaWYgKG1faXNPcGVuKSAKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsKTsKKyAgICByZXF1ZXN0LnNldEhUVFBN
ZXRob2QoIkdFVCIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJDYWNoZS1Db250
cm9sIiwgIm5vLWNhY2hlIik7CisgICAgcmVxdWVzdC5zZXRIVFRQQWNjZXB0KCJhcHBsaWNhdGlv
bi94LWRvbS1ldmVudC1zdHJlYW0iKTsKKyAgICAKKyAgICBtX2xvYWRlciA9IFN1YnJlc291cmNl
TG9hZGVyOjpjcmVhdGUobV90YXJnZXQtPmRvY3VtZW50KCktPmZyYW1lKCksIHRoaXMsIHJlcXVl
c3QsIHRydWUsIHRydWUpOworICAgIG1faXNPcGVuID0gdHJ1ZTsKK30KKwordm9pZCBET01FdmVu
dFN0cmVhbUxvYWRlcjo6Y2xvc2UoKQoreworICAgIGlmICghbV9pc09wZW4pCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAobV9sb2FkZXIpCisgICAgICAgIG1fbG9hZGVyID0gMDsKKyAg
ICAKKyAgICBtX2lzT3BlbiA9IGZhbHNlOworfQorCit2b2lkIERPTUV2ZW50U3RyZWFtTG9hZGVy
OjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wpCit7CisgICAgaWYgKGV2ZW50LT50eXBl
KCkgPT0gbG9hZEV2ZW50KQorICAgICAgICAvLyBXZSBnZXQgdGhpcyBldmVudCB3aGVuIHRoZSBk
b2N1bWVudCBoYXMgYmVlbiBsb2FkZWQsIHNvIG5vdworICAgICAgICAvLyBpdCdzIG9rYXkgdG8g
b3BlbiB0aGUgY29ubmVjdGlvbiB0byB0aGUgZXZlbnQgc291cmNlCisgICAgICAgIG9wZW4oKTsK
K30KKworUGFzc1JlZlB0cjxFdmVudFRhcmdldE5vZGU+IERPTUV2ZW50U3RyZWFtTG9hZGVyOjpn
ZXROb2RlRnJvbUZpZWxkVmFsdWUoY29uc3QgU3RyaW5nJiBmaWVsZFZhbHVlKQoreworICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBwcm9wZXJseSBtaW1pYyBET00gRXZlbnQgU3RyZWFtJ3MgbWV0
aG9kIG9mIHNwZWNpZml5IG5vZGVzCisgICAgLy8gcmVsYXRpdmUgdG8gdGhlIGV2ZW50IHN0cmVh
bSdzIHRhcmdldAorICAgIGlmIChmaWVsZFZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKGZpZWxkVmFsdWVbMF0gPT0gJyMnKQorICAgICAgICByZXR1cm4gbV90YXJn
ZXQtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKGZpZWxkVmFsdWUuc3Vic3RyaW5nKDEpKTsK
KyAgICBpZiAoZmllbGRWYWx1ZSA9PSAiRG9jdW1lbnQiKQorICAgICAgICByZXR1cm4gbV90YXJn
ZXQtPmRvY3VtZW50KCk7CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBET01FdmVu
dFN0cmVhbUxvYWRlcjo6Z2V0U3RyaW5nRmllbGRWYWx1ZShjb25zdCBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiYgZmllbGRzLCBjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgU3RyaW5nJiBk
ZWZhdWx0VmFsdWUpCit7CisgICAgcmV0dXJuIGZpZWxkcy5jb250YWlucyhmaWVsZE5hbWUpID8g
ZmllbGRzLmdldChmaWVsZE5hbWUpIDogZGVmYXVsdFZhbHVlOworfQorCitpbnQgRE9NRXZlbnRT
dHJlYW1Mb2FkZXI6OmdldEludEZpZWxkVmFsdWUoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4mIGZpZWxkcywgY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIGNvbnN0IGludCBkZWZhdWx0VmFs
dWUpCit7CisgICAgcmV0dXJuIGZpZWxkcy5jb250YWlucyhmaWVsZE5hbWUpID8gZmllbGRzLmdl
dChmaWVsZE5hbWUpLnRvSW50KCkgOiBkZWZhdWx0VmFsdWU7Cit9CisKK3Vuc2lnbmVkIERPTUV2
ZW50U3RyZWFtTG9hZGVyOjpnZXRVbnNpZ25lZEZpZWxkVmFsdWUoY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIGZpZWxkcywgY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIGNvbnN0IHVuc2ln
bmVkIGRlZmF1bHRWYWx1ZSkKK3sKKyAgICByZXR1cm4gZmllbGRzLmNvbnRhaW5zKGZpZWxkTmFt
ZSkgPyAodW5zaWduZWQpKGZpZWxkcy5nZXQoZmllbGROYW1lKS50b0ludCgpKSA6IGRlZmF1bHRW
YWx1ZTsKK30KKwordW5zaWduZWQgc2hvcnQgRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmdldFVuc2ln
bmVkU2hvcnRGaWVsZFZhbHVlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmaWVsZHMs
IGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWZhdWx0VmFs
dWUpCit7CisgICAgcmV0dXJuIGZpZWxkcy5jb250YWlucyhmaWVsZE5hbWUpID8gKHVuc2lnbmVk
IHNob3J0KShmaWVsZHMuZ2V0KGZpZWxkTmFtZSkudG9JbnQoKSkgOiBkZWZhdWx0VmFsdWU7Cit9
CisKK2Jvb2wgRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmdldEJvb2xGaWVsZFZhbHVlKGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmaWVsZHMsIGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBj
b25zdCBib29sIGRlZmF1bHRWYWx1ZSkKK3sKKyAgICByZXR1cm4gZmllbGRzLmNvbnRhaW5zKGZp
ZWxkTmFtZSkgPyAoZmllbGRzLmdldChmaWVsZE5hbWUpICE9ICJmYWxzZSIpIDogZGVmYXVsdFZh
bHVlOworfQorCitmbG9hdCBET01FdmVudFN0cmVhbUxvYWRlcjo6Z2V0RmxvYXRGaWVsZFZhbHVl
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmaWVsZHMsIGNvbnN0IFN0cmluZyYgZmll
bGROYW1lLCBjb25zdCBmbG9hdCBkZWZhdWx0VmFsdWUpCit7CisgICAgcmV0dXJuIGZpZWxkcy5j
b250YWlucyhmaWVsZE5hbWUpID8gZmllbGRzLmdldChmaWVsZE5hbWUpLnRvRmxvYXQoKSA6IGRl
ZmF1bHRWYWx1ZTsKK30KKworRXZlbnRUYXJnZXROb2RlKiBET01FdmVudFN0cmVhbUxvYWRlcjo6
Z2V0RXZlbnRUYXJnZXROb2RlRmllbGRWYWx1ZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiYgZmllbGRzLCBjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgRXZlbnRUYXJnZXROb2RlKiBkZWZh
dWx0VmFsdWUpCit7ICAgIAorICAgIC8vIFNwZWMgaXMgdW5jbGVhciwgY3VycmVudGx5IGhhbmRs
aW5nIHRoaXMgYSBsYSAiVGFyZ2V0IiBmaWVsZAorICAgIGlmIChmaWVsZHMuY29udGFpbnMoZmll
bGROYW1lKSkgeworICAgICAgICBTdHJpbmcgcmVsYXRlZFRhcmdldFN0ciA9IGZpZWxkcy5nZXQo
ZmllbGROYW1lKTsKKyAgICAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0Tm9kZT4gcmVsYXRlZFRhcmdl
dFJlZiA9IGdldE5vZGVGcm9tRmllbGRWYWx1ZShyZWxhdGVkVGFyZ2V0U3RyKTsKKyAgICAgICAg
cmV0dXJuIHJlbGF0ZWRUYXJnZXRSZWYgPyByZWxhdGVkVGFyZ2V0UmVmLmdldCgpIDogZGVmYXVs
dFZhbHVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZGVmYXVsdFZhbHVlOworfQorCitQYXNz
UmVmUHRyPEV2ZW50PiBET01FdmVudFN0cmVhbUxvYWRlcjo6Y3JlYXRlRXZlbnRGcm9tRmllbGRz
KGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmaWVsZHMpCit7CisgICAgLy8gSW1wbGVt
ZW50cyBIVE1MNSBzZWN0aW9uIDYuMi40IC0gIkludGVycHJldGluZyBhbiBldmVudCBzdHJlYW0i
CisgICAgU3RyaW5nIGV2ZW50VHlwZSA9IGdldFN0cmluZ0ZpZWxkVmFsdWUoZmllbGRzLCAiRXZl
bnQiLCAibWVzc2FnZSIpOworICAgIFN0cmluZyBldmVudE5TID0gZ2V0U3RyaW5nRmllbGRWYWx1
ZShmaWVsZHMsICJOYW1lc3BhY2UiKTsKKyAgICAKKyAgICBib29sIGJ1YmJsZXM7CisgICAgaWYg
KGZpZWxkcy5jb250YWlucygiQnViYmxlcyIpKQorICAgICAgICBidWJibGVzID0gZmllbGRzLmdl
dCgiQnViYmxlcyIpICE9ICJObyI7CisgICAgZWxzZSAKKyAgICAgICAgYnViYmxlcyA9ICEoZXZl
bnROUy5pc0VtcHR5KCkgJiYgbm9uQnViYmxpbmdFdmVudFR5cGVzKCkuY29udGFpbnMoZXZlbnRU
eXBlKSk7CisgICAgCisgICAgYm9vbCBjYW5jZWxhYmxlOworICAgIGlmIChmaWVsZHMuY29udGFp
bnMoIkNhbmNlbGFibGUiKSkKKyAgICAgICAgY2FuY2VsYWJsZSA9IGZpZWxkcy5nZXQoIkNhbmNl
bGFibGUiKSAhPSAiTm8iOworICAgIGVsc2UKKyAgICAgICAgY2FuY2VsYWJsZSA9ICEoZXZlbnRO
Uy5pc0VtcHR5KCkgJiYgbm9uQ2FuY2VsYWJsZUV2ZW50VHlwZXMoKS5jb250YWlucyhldmVudFR5
cGUpKTsKKyAgICAKKyAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50OworICAgIAorICAgIGlmIChmaWVs
ZHMuY29udGFpbnMoIkNsYXNzIikpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgICAgIAorICAgICAgICBldmVudCA9IG1fdGFyZ2V0LT5kb2N1bWVudCgpLT5jcmVhdGVFdmVu
dChmaWVsZHMuZ2V0KCJDbGFzcyIpLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV2
ZW50VHlwZSA9PSBET01Gb2N1c0luRXZlbnQgfHwgZXZlbnRUeXBlID09IERPTUZvY3VzT3V0RXZl
bnQgfHwgZXZlbnRUeXBlID09IERPTUFjdGl2YXRlRXZlbnQgfHwgZXZlbnRUeXBlID09IGZvY3Vz
RXZlbnQgfHwgZXZlbnRUeXBlID09IGJsdXJFdmVudCB8fCBldmVudFR5cGUgPT0gcmVzaXplRXZl
bnQgfHwgZXZlbnRUeXBlID09IHNjcm9sbEV2ZW50KQorICAgICAgICAgICAgZXZlbnQgPSBuZXcg
VUlFdmVudDsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IHRleHRJbnB1dEV2ZW50KQor
ICAgICAgICAgICAgZXZlbnQgPSBuZXcgVGV4dEV2ZW50OworICAgICAgICBlbHNlIGlmIChldmVu
dFR5cGUgPT0gY2xpY2tFdmVudCB8fCBldmVudFR5cGUgPT0gbW91c2Vkb3duRXZlbnQgfHwgZXZl
bnRUeXBlID09IG1vdXNldXBFdmVudCB8fCBldmVudFR5cGUgPT0gbW91c2VvdmVyRXZlbnQgfHwg
ZXZlbnRUeXBlID09IG1vdXNlbW92ZUV2ZW50IHx8IGV2ZW50VHlwZSA9PSBtb3VzZW91dEV2ZW50
KQorICAgICAgICAgICAgZXZlbnQgPSBuZXcgTW91c2VFdmVudDsKKyAgICAgICAgZWxzZSBpZiAo
ZXZlbnRUeXBlID09IGtleWRvd25FdmVudCB8fCBldmVudFR5cGUgPT0ga2V5dXBFdmVudCkKKyAg
ICAgICAgICAgIGV2ZW50ID0gbmV3IEtleWJvYXJkRXZlbnQ7CisgICAgICAgIGVsc2UgaWYgKGV2
ZW50VHlwZSA9PSBET01TdWJ0cmVlTW9kaWZpZWRFdmVudCB8fCBldmVudFR5cGUgPT0gRE9NTm9k
ZUluc2VydGVkRXZlbnQgfHwgZXZlbnRUeXBlID09IERPTU5vZGVSZW1vdmVkRXZlbnQgfHwgZXZl
bnRUeXBlID09IERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50RXZlbnQgfHwgZXZlbnRUeXBlID09
IERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBET01BdHRy
TW9kaWZpZWRFdmVudCB8fCBldmVudFR5cGUgPT0gRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkRXZl
bnQpCisgICAgICAgICAgICBldmVudCA9IG5ldyBNdXRhdGlvbkV2ZW50OworICAgICAgICAvKiBO
b3Qgc3VwcG9ydGVkIGluIFdlYkNvcmUgeWV0Li4uLgorICAgICAgICBlbHNlIGlmIChldmVudFR5
cGUgPT0gRE9NRWxlbWVudE5hbWVkQ2hhbmdlZEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBET01BdHRy
aWJ1dGVOYW1lQ2hhbmdlRXZlbnQpCisgICAgICAgICAgICBldmVudCA9IG5ldyBNdXRhdGlvbk5h
bWVFdmVudDsgKi8KKyAgICAgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGxvYWRFdmVudCB8fCBl
dmVudFR5cGUgPT0gdW5sb2FkRXZlbnQgfHwgZXZlbnRUeXBlID09IGFib3J0RXZlbnQgfHwgZXZl
bnRUeXBlID09IGVycm9yRXZlbnQgfHwgZXZlbnRUeXBlID09IHNlbGVjdEV2ZW50IHx8IGV2ZW50
VHlwZSA9PSBjaGFuZ2VFdmVudCB8fCBldmVudFR5cGUgPT0gc3VibWl0RXZlbnQgfHwgZXZlbnRU
eXBlID09IHJlc2V0RXZlbnQpCisgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZXZlbnQgPSBuZXcgTWVzc2FnZUV2ZW50OworICAgIH0KKyAg
ICAKKyAgICBpZiAoIWV2ZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBBYnN0cmFj
dFZpZXcqIHZpZXcgPSBtX3RhcmdldC0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKKyAgICAK
KyAgICAvLyBGSVhNRTogVGhlc2UgZmllbGRzIHNob3VsZCBiZSB1c2VkIGluIGNyb3NzLWRvbWFp
biBtZXNzYWdpbmcgd2hlbiBpdCBpcyBpbXBsZW1lbnRlZAorICAgIFN0cmluZyBkb21haW4gPSAi
IjsKKyAgICBTdHJpbmcgdXJpID0gIiI7CisgICAgRG9jdW1lbnQqIHNvdXJjZSA9IDA7CisgICAg
CisgICAgaWYgKGV2ZW50LT5pc1VJRXZlbnQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8VUlFdmVu
dCo+KGV2ZW50LmdldCgpKS0+aW5pdFVJRXZlbnQoZXZlbnRUeXBlLCBidWJibGVzLCBjYW5jZWxh
YmxlLCB2aWV3LCBnZXRJbnRGaWVsZFZhbHVlKGZpZWxkcywgImRldGFpbCIpKTsKKyAgICBlbHNl
IGlmIChldmVudC0+aXNUZXh0RXZlbnQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dEV2ZW50
Kj4oZXZlbnQuZ2V0KCkpLT5pbml0VGV4dEV2ZW50KGV2ZW50VHlwZSwgYnViYmxlcywgY2FuY2Vs
YWJsZSwgdmlldywgZ2V0U3RyaW5nRmllbGRWYWx1ZShmaWVsZHMsICJkYXRhIikpOworICAgIGVs
c2UgaWYgKGV2ZW50LT5pc01vdXNlRXZlbnQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2ZW50LmdldCgpKS0+aW5pdE1vdXNlRXZlbnQoZXZlbnRUeXBlLCBidWJibGVzLCBj
YW5jZWxhYmxlLCB2aWV3LCBnZXRJbnRGaWVsZFZhbHVlKGZpZWxkcywgImRldGFpbCIpLCBnZXRJ
bnRGaWVsZFZhbHVlKGZpZWxkcywgInNjcmVlblgiKSwgZ2V0SW50RmllbGRWYWx1ZShmaWVsZHMs
ICJzY3JlZW5ZIiksIGdldEludEZpZWxkVmFsdWUoZmllbGRzLCAiY2xpZW50WCIpLCBnZXRJbnRG
aWVsZFZhbHVlKGZpZWxkcywgImNsaWVudFkiKSwgZ2V0Qm9vbEZpZWxkVmFsdWUoZmllbGRzLCAi
Y3RybEtleSIpLCBnZXRCb29sRmllbGRWYWx1ZShmaWVsZHMsICJhbHRLZXkiKSwgZ2V0Qm9vbEZp
ZWxkVmFsdWUoZmllbGRzLCAic2hpZnRLZXkiKSwgZ2V0Qm9vbEZpZWxkVmFsdWUoZmllbGRzLCAi
bWV0YUtleSIpLCBnZXRVbnNpZ25lZFNob3J0RmllbGRWYWx1ZShmaWVsZHMsICJidXR0b24iKSwg
Z2V0RXZlbnRUYXJnZXROb2RlRmllbGRWYWx1ZShmaWVsZHMsICJyZWxhdGVkVGFyZ2V0IikpOwor
ICAgIGVsc2UgaWYgKGV2ZW50LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgc3RhdGljX2Nh
c3Q8S2V5Ym9hcmRFdmVudCo+KGV2ZW50LmdldCgpKS0+aW5pdEtleWJvYXJkRXZlbnQoZXZlbnRU
eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCB2aWV3LCBnZXRTdHJpbmdGaWVsZFZhbHVlKGZpZWxk
cywgImtleUlkZW50aWZpZXIiKSwgZ2V0VW5zaWduZWRGaWVsZFZhbHVlKGZpZWxkcywgImtleUxv
Y2F0aW9uIiksIGdldEJvb2xGaWVsZFZhbHVlKGZpZWxkcywgImN0cmxLZXkiKSwgZ2V0Qm9vbEZp
ZWxkVmFsdWUoZmllbGRzLCAiYWx0S2V5IiksIGdldEJvb2xGaWVsZFZhbHVlKGZpZWxkcywgInNo
aWZ0S2V5IiksIGdldEJvb2xGaWVsZFZhbHVlKGZpZWxkcywgIm1ldGFLZXkiKSwgZ2V0Qm9vbEZp
ZWxkVmFsdWUoZmllbGRzLCAiYWx0R3JhcGhLZXkiKSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlz
V2hlZWxFdmVudCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxXaGVlbEV2ZW50Kj4oZXZlbnQuZ2V0
KCkpLT5pbml0V2hlZWxFdmVudChnZXRJbnRGaWVsZFZhbHVlKGZpZWxkcywgIndoZWVsRGVsdGFY
IiksIGdldEludEZpZWxkVmFsdWUoZmllbGRzLCAid2hlZWxEZWx0YVkiKSwgdmlldywgZ2V0SW50
RmllbGRWYWx1ZShmaWVsZHMsICJzY3JlZW5YIiksIGdldEludEZpZWxkVmFsdWUoZmllbGRzLCAi
c2NyZWVuWSIpLCBnZXRJbnRGaWVsZFZhbHVlKGZpZWxkcywgInBhZ2VYIiksIGdldEludEZpZWxk
VmFsdWUoZmllbGRzLCAicGFnZVkiKSwgZ2V0Qm9vbEZpZWxkVmFsdWUoZmllbGRzLCAiY3RybEtl
eSIpLCBnZXRCb29sRmllbGRWYWx1ZShmaWVsZHMsICJhbHRLZXkiKSwgZ2V0Qm9vbEZpZWxkVmFs
dWUoZmllbGRzLCAic2hpZnRLZXkiKSwgZ2V0Qm9vbEZpZWxkVmFsdWUoZmllbGRzLCAibWV0YUtl
eSIpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNPdmVyZmxvd0V2ZW50KCkpCisgICAgICAgIHN0
YXRpY19jYXN0PE92ZXJmbG93RXZlbnQqPihldmVudC5nZXQoKSktPmluaXRPdmVyZmxvd0V2ZW50
KGdldFVuc2lnbmVkU2hvcnRGaWVsZFZhbHVlKGZpZWxkcywgIm9yaWVudCIpLCBnZXRCb29sRmll
bGRWYWx1ZShmaWVsZHMsICJob3Jpem9udGFsT3ZlcmZsb3ciKSwgZ2V0Qm9vbEZpZWxkVmFsdWUo
ZmllbGRzLCAidmVydGljYWxPdmVyZmxvdyIpKTsKKyAgICBlbHNlIGlmIChldmVudC0+aXNNZXNz
YWdlRXZlbnQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8TWVzc2FnZUV2ZW50Kj4oZXZlbnQuZ2V0
KCkpLT5pbml0TWVzc2FnZUV2ZW50KGV2ZW50VHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSwgZ2V0
U3RyaW5nRmllbGRWYWx1ZShmaWVsZHMsICJkYXRhIiksIGRvbWFpbiwgdXJpLCBzb3VyY2UpOwor
ICAgIGVsc2UgaWYgKGV2ZW50LT5pc011dGF0aW9uRXZlbnQoKSkKKyAgICAgICAgc3RhdGljX2Nh
c3Q8TXV0YXRpb25FdmVudCo+KGV2ZW50LmdldCgpKS0+aW5pdE11dGF0aW9uRXZlbnQoZXZlbnRU
eXBlLCBidWJibGVzLCBjYW5jZWxhYmxlLCBnZXRFdmVudFRhcmdldE5vZGVGaWVsZFZhbHVlKGZp
ZWxkcywgInJlbGF0ZWROb2RlIiksIGdldFN0cmluZ0ZpZWxkVmFsdWUoZmllbGRzLCAicHJldlZh
bHVlIiksIGdldFN0cmluZ0ZpZWxkVmFsdWUoZmllbGRzLCAibmV3VmFsdWUiKSwgZ2V0U3RyaW5n
RmllbGRWYWx1ZShmaWVsZHMsICJhdHRyTmFtZSIpLCBnZXRVbnNpZ25lZFNob3J0RmllbGRWYWx1
ZShmaWVsZHMsICJhdHRyQ2hhbmdlIikpOworI2lmIEVOQUJMRShTVkcpCisgICAgZWxzZSBpZiAo
ZXZlbnQtPmlzU1ZHWm9vbUV2ZW50KCkpIHsKKyAgICAgICAgU1ZHWm9vbUV2ZW50KiBzdmdab29t
RXZlbnQgPSBzdGF0aWNfY2FzdDxTVkdab29tRXZlbnQqPihldmVudC5nZXQoKSk7CisgICAgICAg
IHN2Z1pvb21FdmVudC0+c2V0TmV3U2NhbGUoZ2V0RmxvYXRGaWVsZFZhbHVlKGZpZWxkcywgIm5l
d1NjYWxlIikpOworICAgICAgICBzdmdab29tRXZlbnQtPnNldFByZXZpb3VzU2NhbGUoZ2V0Rmxv
YXRGaWVsZFZhbHVlKGZpZWxkcywgInByZXZpb3VzU2NhbGUiKSk7CisgICAgfQorI2VuZGlmCisg
ICAgZWxzZSAvLyBhc3N1bWUgaXQncyBqdXN0IGEgbm9ybWFsIEV2ZW50CisgICAgICAgIGV2ZW50
LT5pbml0RXZlbnQoZXZlbnRUeXBlLCBidWJibGVzLCBjYW5jZWxhYmxlKTsKKyAgICAKKyAgICBy
ZXR1cm4gZXZlbnQ7Cit9CisKK2Jvb2wgRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OnVybE1hdGNoZXNE
b2N1bWVudERvbWFpbihjb25zdCBLVVJMJiB1cmwpIGNvbnN0Cit7CisgICAgLy8gYSBsb2NhbCBm
aWxlIGNhbiBsb2FkIGFueXRoaW5nCisgICAgaWYgKG1fdGFyZ2V0LT5kb2N1bWVudCgpLT5pc0Fs
bG93ZWRUb0xvYWRMb2NhbFJlc291cmNlcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IC8vIGJ1dCBhIHJlbW90ZSBkb2N1bWVudCBjYW4gb25seSBsb2FkIGZyb20gdGhlIHNhbWUgcG9y
dCBvbiB0aGUgc2VydmVyCisgICAgS1VSTCBkb2N1bWVudFVSTCA9IG1fdGFyZ2V0LT5kb2N1bWVu
dCgpLT5VUkwoKTsKKyAgICBpZiAoZG9jdW1lbnRVUkwucHJvdG9jb2woKS5sb3dlcigpID09IHVy
bC5wcm90b2NvbCgpLmxvd2VyKCkKKyAgICAgICAgICAgICYmIGRvY3VtZW50VVJMLmhvc3QoKS5s
b3dlcigpID09IHVybC5ob3N0KCkubG93ZXIoKQorICAgICAgICAgICAgJiYgZG9jdW1lbnRVUkwu
cG9ydCgpID09IHVybC5wb3J0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIERPTUV2ZW50U3RyZWFtTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3Qo
U3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQoreworICAgIGlmIChsb2FkZXIg
IT0gbV9sb2FkZXIpIHJldHVybjsKKyAgICAKKyAgICBpZiAoIXVybE1hdGNoZXNEb2N1bWVudERv
bWFpbihyZXF1ZXN0LnVybCgpKSkgeworICAgICAgICBjbG9zZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGludCBzdGF0dXMgPSByZWRpcmVjdFJlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCk7CisgICAgaWYgKHN0YXR1cyA9PSAzMDEpCisgICAgICAgIC8vIFdlIGhhdmUgYSBw
ZXJtZW5hbnQgcmVkaXJlY3QsIHNvIHdlIGNoYW5nZSB0aGUgVVJMIHRvIHJlcXVlc3QgbmV4dCB0
aW1lCisgICAgICAgIG1fdXJsID0gcmVkaXJlY3RSZXNwb25zZS51cmwoKTsKK30KKwordm9pZCBE
T01FdmVudFN0cmVhbUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFN1YnJlc291cmNlTG9hZGVy
KiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmIChs
b2FkZXIgIT0gbV9sb2FkZXIpIHJldHVybjsKKyAgICAKKyAgICBpbnQgc3RhdHVzID0gcmVzcG9u
c2UuaHR0cFN0YXR1c0NvZGUoKTsgICAgCisgICAgaWYgKCgoc3RhdHVzID49IDIwMCkgJiYgKHN0
YXR1cyA8PSAyMDYpKSAKKyAgICAgICAgfHwgKChzdGF0dXMgPj0gMzAwKSAmJiAoc3RhdHVzIDw9
IDMwNykgJiYgKHN0YXR1cyAhPSAzMDYpKSAKKyAgICAgICAgfHwgKHN0YXR1cyA9PSA0MDEpIAor
ICAgICAgICB8fCAoc3RhdHVzID09IDQwNykpIHsKKyAgICAgICAgaWYgKChyZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCkgIT0gIlVURi04IikgJiYgKCFyZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1l
KCkuaXNFbXB0eSgpKSkgeworICAgICAgICAgICAgTE9HKExvYWRpbmcsICJET01FdmVudFN0cmVh
bUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlIC0gZ290IGludmFsaWQgdGV4dCBlbmNvZGluZyBc
IiVzXCJcbiIsIHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKS5kZXByZWNhdGVkU3RyaW5nKCku
YXNjaWkoKSk7CisgICAgICAgICAgICBjbG9zZSgpOworICAgICAgICB9IGVsc2UgaWYgKHJlc3Bv
bnNlLm1pbWVUeXBlKCkgIT0gImFwcGxpY2F0aW9uL3gtZG9tLWV2ZW50LXN0cmVhbSIpIHsKKyAg
ICAgICAgICAgIExPRyhMb2FkaW5nLCAiRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZSAtIGdvdCBpbnZhbGlkIG1pbWUgdHlwZSBcIiVzXCJcbiIsIHJlc3BvbnNlLm1pbWVU
eXBlKCkuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCkpOworICAgICAgICAgICAgY2xvc2UoKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIExPRyhMb2FkaW5nLCAiRE9NRXZlbnRT
dHJlYW1Mb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSAtIGdvdCBpbnZhbGlkIEhUVFAgc3RhdHVz
IGNvZGUgJWRcbiIsIHN0YXR1cyk7CisgICAgICAgIC8vIE5lZWQgdG8gZ2l2ZSB1cC4uLgorICAg
ICAgICBjbG9zZSgpOworICAgIH0KK30KKwordm9pZCBET01FdmVudFN0cmVhbUxvYWRlcjo6ZGlk
UmVjZWl2ZURhdGEoU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbikKK3sgICAgCisgICAgaWYgKGxvYWRlciAhPSBtX2xvYWRlcikgcmV0dXJuOworICAg
IGlmIChsZW4gPCAxKSByZXR1cm47CisgICAgCisgICAgaW50IHBhcnNlU3RhcnRQb3MgPSAwOwor
ICAgIAorICAgIC8vIERlYWwgd2l0aCB0aGUgc3RyYW5nZSBjYXNlIHdoZXJlIHdlIGdldCBDUiBh
dCB0aGUgZW5kIG9mCisgICAgLy8gb25lIHBhY2tldCBhbmQgTEYgYXQgdGhlIHN0YXJ0IG9mIGFu
b3RoZXIuLi5pZ25vcmUgdGhhdCBMRgorICAgIGlmICgobV9sYXN0Q2hhcldhc0NSKSAmJiAoZGF0
YVswXSA9PSAnXG4nKSkgeworICAgICAgICBkYXRhICs9IDE7CisgICAgICAgIGxlbiAtPSAxOwor
ICAgIH0KKyAgICAKKyAgICBtX3VucGFyc2VkRGF0YSArPSBtX2RlY29kZXIuZGVjb2RlKGRhdGEs
IGxlbik7CisgICAgCisgICAgbV9sYXN0Q2hhcldhc0NSID0gKG1fdW5wYXJzZWREYXRhW21fdW5w
YXJzZWREYXRhLmxlbmd0aCgpIC0gMV0gPT0gJ1xyJyk7CisgICAgCisgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gZmllbGRzOworICAgIAorICAgIHdoaWxlICgxKSB7CisgICAgICAgIGludCBj
clBvcyA9IG1fdW5wYXJzZWREYXRhLmZpbmQoJ1xyJywgcGFyc2VTdGFydFBvcyk7CisgICAgICAg
IGludCBsZlBvcyA9IG1fdW5wYXJzZWREYXRhLmZpbmQoJ1xuJywgcGFyc2VTdGFydFBvcyk7Cisg
ICAgICAgIAorICAgICAgICBpZiAobGZQb3MgPCAwICYmIGNyUG9zIDwgMCkKKyAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIAorICAgICAgICBpbnQgbmV3TGluZVBvczsKKyAgICAgICAgaW50IG5l
eHRQYXJzZVN0YXJ0UG9zOworICAgICAgICAKKyAgICAgICAgaWYgKGNyUG9zID49IDApIHsKKyAg
ICAgICAgICAgIGlmIChsZlBvcyA+PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGNyUG9zIDwg
bGZQb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQm90aCwgYnV0IENSIGNvbWVzIGZpcnN0
CisgICAgICAgICAgICAgICAgICAgIG5ld0xpbmVQb3MgPSBjclBvczsKKyAgICAgICAgICAgICAg
ICAgICAgbmV4dFBhcnNlU3RhcnRQb3MgPSBuZXdMaW5lUG9zICsgMTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGxmUG9zID09IChjclBvcyArIDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyAgQ1JMRiBjb21ibyBuZXdsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UGFy
c2VTdGFydFBvcyArPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQm90aCwgYnV0IExGIGNvbWVzIGZpcnN0
CisgICAgICAgICAgICAgICAgICAgIG5ld0xpbmVQb3MgPSBsZlBvczsKKyAgICAgICAgICAgICAg
ICAgICAgbmV4dFBhcnNlU3RhcnRQb3MgPSBuZXdMaW5lUG9zICsgMTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIG5vIExGLCBvbmx5
IENSIGlzIHZhbGlkCisgICAgICAgICAgICAgICAgbmV3TGluZVBvcyA9IGNyUG9zOworICAgICAg
ICAgICAgICAgIG5leHRQYXJzZVN0YXJ0UG9zID0gbmV3TGluZVBvcyArIDE7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAobGZQb3MgPj0gMCkgeworICAgICAgICAgICAgLy8gbm8g
Q1IsIG9ubHkgTEYgaXMgdmFsaWQKKyAgICAgICAgICAgIG5ld0xpbmVQb3MgPSBsZlBvczsKKyAg
ICAgICAgICAgIG5leHRQYXJzZVN0YXJ0UG9zID0gbmV3TGluZVBvcyArIDE7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChuZXdMaW5lUG9zID09IHBhcnNlU3RhcnRQb3MpIHsKKyAg
ICAgICAgICAgIC8vIE5vdGhpbmcgbGVmdCB0byBwYXJzZSBmb3IgdGhpcyBldmVudCwgY3JlYXRl
IGl0IGZyb20gdGhlIGZpZWxkcyBhbmQgdGhlbiBkaXNwYXRjaCBpdC4KKyAgICAgICAgICAgIFJl
ZlB0cjxFdmVudFRhcmdldE5vZGU+IGV2ZW50VGFyZ2V0OworCisgICAgICAgICAgICBpZiAoZmll
bGRzLmNvbnRhaW5zKCJUYXJnZXQiKSkKKyAgICAgICAgICAgICAgICBldmVudFRhcmdldCA9IGdl
dE5vZGVGcm9tRmllbGRWYWx1ZShmaWVsZHMuZ2V0KCJUYXJnZXQiKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQgPSAwOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIWV2ZW50VGFyZ2V0KQorICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0ID0g
bV90YXJnZXQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZlB0cjxFdmVudD4gZXZlbnQg
PSBjcmVhdGVFdmVudEZyb21GaWVsZHMoZmllbGRzKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICBldmVudFRhcmdldC0+ZGlzcGF0
Y2hFdmVudChldmVudCwgZWMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmaWVsZHMuY2xl
YXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcGFyc2VTdGFydFBvcyA9IG5leHRQYXJz
ZVN0YXJ0UG9zOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gCisgICAgICAgIAor
ICAgICAgICBpZiAoKG1fdW5wYXJzZWREYXRhW3BhcnNlU3RhcnRQb3NdID09ICc7JykgfHwgKG1f
dW5wYXJzZWREYXRhW3BhcnNlU3RhcnRQb3NdID09ICc6JykpIAorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGZpZWxkTmFtZTsKKyAgICAgICAgU3Ry
aW5nIGZpZWxkQ29udGVudDsKKyAgICAgICAgaW50IGNvbG9uUG9zID0gbV91bnBhcnNlZERhdGEu
ZmluZCgnOicsIHBhcnNlU3RhcnRQb3MpOworICAgICAgICBpZiAoKGNvbG9uUG9zIDwgMCkgfHwg
KGNvbG9uUG9zID4gbmV3TGluZVBvcykpCisgICAgICAgICAgICBmaWVsZE5hbWUgPSBtX3VucGFy
c2VkRGF0YS5zdWJzdHJpbmcocGFyc2VTdGFydFBvcywgbmV3TGluZVBvcyAtIHBhcnNlU3RhcnRQ
b3MpOworICAgICAgICBlbHNlIHsgICAgCisgICAgICAgICAgICBmaWVsZE5hbWUgPSBtX3VucGFy
c2VkRGF0YS5zdWJzdHJpbmcocGFyc2VTdGFydFBvcywgY29sb25Qb3MgLSBwYXJzZVN0YXJ0UG9z
KTsKKyAgICAgICAgICAgIGludCBjb250ZW50U3RhcnRQb3MgPSBjb2xvblBvcyArIDE7CisgICAg
ICAgICAgICBpZiAobV91bnBhcnNlZERhdGFbY29udGVudFN0YXJ0UG9zXSA9PSAnICcpCisgICAg
ICAgICAgICAgICAgY29udGVudFN0YXJ0UG9zICs9IDE7CisgICAgICAgICAgICBmaWVsZENvbnRl
bnQgPSBtX3VucGFyc2VkRGF0YS5zdWJzdHJpbmcoY29udGVudFN0YXJ0UG9zLCBuZXdMaW5lUG9z
IC0gY29udGVudFN0YXJ0UG9zKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaWVsZHMuY29u
dGFpbnMoZmllbGROYW1lKSkKKyAgICAgICAgICAgIGZpZWxkcy5zZXQoZmllbGROYW1lLCAoZmll
bGRzLmdldChmaWVsZE5hbWUpICsgU3RyaW5nKCJcbiIpICsgZmllbGRDb250ZW50KSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGZpZWxkcy5zZXQoZmllbGROYW1lLCBmaWVsZENvbnRlbnQp
OworCisgICAgICAgIAorICAgICAgICBwYXJzZVN0YXJ0UG9zID0gbmV4dFBhcnNlU3RhcnRQb3M7
CisgICAgfQorICAgIAorICAgIG1fdW5wYXJzZWREYXRhID0gbV91bnBhcnNlZERhdGEuc3Vic3Ry
aW5nKHBhcnNlU3RhcnRQb3MsIG1fdW5wYXJzZWREYXRhLmxlbmd0aCgpIC0gcGFyc2VTdGFydFBv
cyk7CisgICAgCit9CisKK3ZvaWQgRE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmRpZEZhaWwoU3VicmVz
b3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
aWYgKGxvYWRlciAhPSBtX2xvYWRlcikgcmV0dXJuOworICAgIGNsb3NlKCk7Cit9CisKK3ZvaWQg
RE9NRXZlbnRTdHJlYW1Mb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoU3VicmVzb3VyY2VMb2FkZXIq
IGxvYWRlcikKK3sKKyAgICBpZiAobG9hZGVyICE9IG1fbG9hZGVyKSByZXR1cm47CisgICAgLy8g
Q2xvc2UgYW5kIHJlb3BlbiB0aGUgY29ubmVjdGlvbiBhZnRlciBhIGJyaWVmIGRlbGF5CisgICAg
Y2xvc2UoKTsKKyAgICBtX3JlbG9hZFRpbWVyLnN0YXJ0T25lU2hvdChjb25uZWN0aW9uUmVsb2Fk
RGVsYXkpOworfQorCit2b2lkIERPTUV2ZW50U3RyZWFtTG9hZGVyOjpyZWxvYWRUaW1lckZpcmVk
KFRpbWVyPERPTUV2ZW50U3RyZWFtTG9hZGVyPiopCit7CisgICAgb3BlbigpOworfQorCit9IC8v
IG5hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9kb20vRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9ET01FdmVudFN0cmVhbUxvYWRlci5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9kb20vRE9NRXZlbnRTdHJlYW1Mb2FkZXIuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5yeSBNYXNvbiAoaG1h
c29uQG1hYy5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICoKKyAqLworIAorI2lmbmRlZiBET01FdmVudFN0cmVhbUxvYWRlcl9o
CisjZGVmaW5lIERPTUV2ZW50U3RyZWFtTG9hZGVyX2gKKworI2luY2x1ZGUgIkV2ZW50TGlzdGVu
ZXIuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU3VicmVzb3VyY2VMb2FkZXJDbGll
bnQuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVGltZXIu
aCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgRXZlbnRUYXJnZXRO
b2RlOworICAgIAorICAgIGNsYXNzIERPTUV2ZW50U3RyZWFtTG9hZGVyIDogcHVibGljIEV2ZW50
TGlzdGVuZXIsIFN1YnJlc291cmNlTG9hZGVyQ2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IERPTUV2ZW50U3RyZWFtTG9hZGVyKEV2ZW50VGFyZ2V0Tm9kZSosIGNvbnN0IEtVUkwmKTsKKyAg
ICAgICAgfkRPTUV2ZW50U3RyZWFtTG9hZGVyKCk7CisgICAgCisgICAgICAgIEV2ZW50VGFyZ2V0
Tm9kZSogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuZ2V0KCk7IH0KKyAgICAgICAg
dm9pZCBzZXRUYXJnZXQoRXZlbnRUYXJnZXROb2RlKiB0YXJnZXQpIHsgbV90YXJnZXQgPSB0YXJn
ZXQ7IH0KKyAgICAKKyAgICAgICAgY29uc3QgS1VSTCYgVVJMKCkgeyByZXR1cm4gbV91cmw7IH0K
KyAgICAKKyAgICAgICAgdm9pZCBvcGVuKCk7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICAg
ICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCosIGJvb2wpOworICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgIAorICAgICAgICBTdHJpbmcgZ2V0U3RyaW5nRmllbGRW
YWx1ZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYgZGVmYXVsdFZhbHVlID0gIiIpOworICAgICAgICBpbnQgZ2V0SW50RmllbGRWYWx1
ZShjb25zdCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IGlu
dCBkZWZhdWx0VmFsdWUgPSAwKTsKKyAgICAgICAgdW5zaWduZWQgZ2V0VW5zaWduZWRGaWVsZFZh
bHVlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgY29uc3Qg
dW5zaWduZWQgZGVmYXVsdFZhbHVlID0gMCk7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IGdldFVu
c2lnbmVkU2hvcnRGaWVsZFZhbHVlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVmYXVsdFZhbHVlID0gMCk7CisgICAg
ICAgIGJvb2wgZ2V0Qm9vbEZpZWxkVmFsdWUoY29uc3QgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4m
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sIGRlZmF1bHRWYWx1ZSA9IGZhbHNlKTsKKyAgICAg
ICAgZmxvYXQgZ2V0RmxvYXRGaWVsZFZhbHVlKGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgZmxvYXQgZGVmYXVsdFZhbHVlID0gMC4wKTsKKyAgICAg
ICAgRXZlbnRUYXJnZXROb2RlKiBnZXRFdmVudFRhcmdldE5vZGVGaWVsZFZhbHVlKGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwgRXZlbnRUYXJnZXROb2RlKiBk
ZWZhdWx0VmFsdWUgPSAwKTsKKyAgICAgICAgCisgICAgICAgIFBhc3NSZWZQdHI8RXZlbnRUYXJn
ZXROb2RlPiBnZXROb2RlRnJvbUZpZWxkVmFsdWUoY29uc3QgU3RyaW5nJiBmaWVsZFZhbHVlKTsK
KyAgICAgICAgUGFzc1JlZlB0cjxFdmVudD4gY3JlYXRlRXZlbnRGcm9tRmllbGRzKGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBmaWVsZHMpOworICAgIAorICAgICAgICBib29sIHVybE1h
dGNoZXNEb2N1bWVudERvbWFpbihjb25zdCBLVVJMJiB1cmwpIGNvbnN0OworICAgICAgICAKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kUmVxdWVzdChTdWJyZXNvdXJjZUxvYWRlciosIFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoU3VicmVz
b3VyY2VMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlRGF0YShTdWJyZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqIGRhdGEs
IGludCBzaXplKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU3VicmVzb3VyY2VMb2Fk
ZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5p
c2hMb2FkaW5nKFN1YnJlc291cmNlTG9hZGVyKik7CisgICAgICAgIAorICAgICAgICB2b2lkIHJl
bG9hZFRpbWVyRmlyZWQoVGltZXI8RE9NRXZlbnRTdHJlYW1Mb2FkZXI+Kik7CisgICAgCisgICAg
ICAgIFJlZlB0cjxFdmVudFRhcmdldE5vZGU+IG1fdGFyZ2V0OworICAgICAgICBSZWZQdHI8U3Vi
cmVzb3VyY2VMb2FkZXI+IG1fbG9hZGVyOworICAgICAgICBLVVJMIG1fdXJsOworICAgIAorICAg
ICAgICBUZXh0UmVzb3VyY2VEZWNvZGVyIG1fZGVjb2RlcjsKKyAgICAgICAgU3RyaW5nIG1fdW5w
YXJzZWREYXRhOworICAgIAorICAgICAgICBib29sIG1faXNPcGVuOworICAgICAgICBib29sIG1f
bGFzdENoYXJXYXNDUjsKKyAgICAgICAgCisgICAgICAgIFRpbWVyPERPTUV2ZW50U3RyZWFtTG9h
ZGVyPiBtX3JlbG9hZFRpbWVyOworICAgIH07CisKK30gLy8gV2ViQ29yZSBuYW1lc3BhY2UKKwor
I2VuZGlmICAvLyBET01FdmVudFN0cmVhbUxvYWRlcl9oCisKSW5kZXg6IFdlYkNvcmUvZG9tL0Rv
Y3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlz
aW9uIDI1MTM2KQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw2ICs2OSw3IEBACiAjaW5jbHVkZSAiSlNFZGl0b3IuaCIKICNpbmNsdWRlICJLZXlib2Fy
ZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5o
IgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgpAQCAtMjMzMyw2ICsyMzM0
LDggQEAgUGFzc1JlZlB0cjxFdmVudD4gRG9jdW1lbnQ6OmNyZWF0ZUV2ZW50KAogICAgICAgICBy
ZXR1cm4gbmV3IEtleWJvYXJkRXZlbnQ7CiAgICAgaWYgKGV2ZW50VHlwZSA9PSAiSFRNTEV2ZW50
cyIgfHwgZXZlbnRUeXBlID09ICJFdmVudCIgfHwgZXZlbnRUeXBlID09ICJFdmVudHMiKQogICAg
ICAgICByZXR1cm4gbmV3IEV2ZW50OworICAgIGlmIChldmVudFR5cGUgPT0gIk1lc3NhZ2VFdmVu
dCIpCisgICAgICAgIHJldHVybiBuZXcgTWVzc2FnZUV2ZW50OwogICAgIGlmIChldmVudFR5cGUg
PT0gIlRleHRFdmVudCIpCiAgICAgICAgIHJldHVybiBuZXcgVGV4dEV2ZW50OwogICAgIGlmIChl
dmVudFR5cGUgPT0gIk92ZXJmbG93RXZlbnQiKQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmlkbAkocmV2aXNpb24gMjUx
MzYpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcg
KzIwLDcgQEAKIAogbW9kdWxlIGNvcmUgewogCi0gICAgaW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0
cnVjdG9yLCBHZW5lcmF0ZVRvSlMsIEN1c3RvbU1hcmtGdW5jdGlvbl0gRG9jdW1lbnQgOiBFdmVu
dFRhcmdldE5vZGUgeworICAgIGludGVyZmFjZSBbR2VuZXJhdGVDb25zdHJ1Y3RvciwgR2VuZXJh
dGVOYXRpdmVDb252ZXJ0ZXIsIEdlbmVyYXRlVG9KUywgQ3VzdG9tTWFya0Z1bmN0aW9uXSBEb2N1
bWVudCA6IEV2ZW50VGFyZ2V0Tm9kZSB7CiAKICAgICAgICAgLy8gRE9NIExldmVsIDEgQ29yZQog
CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RXZlbnQuY3BwCShyZXZpc2lvbiAyNTEzNikKKysrIFdlYkNvcmUvZG9tL0V2ZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxMSBAQCBib29sIEV2ZW50Ojppc0NsaXBib2FyZEV2
ZW50KCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgRXZlbnQ6OmlzTWVzc2Fn
ZUV2ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgRXZlbnQ6Omlz
V2hlZWxFdmVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI3LDcgKzEzMiw2
IEBAIGJvb2wgRXZlbnQ6OmlzU1ZHWm9vbUV2ZW50KCkgY29uc3QKIH0KICNlbmRpZgogCi0KIGJv
b2wgRXZlbnQ6OnN0b3Jlc1Jlc3VsdEFzU3RyaW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0V2ZW50LmgJKHJldmlzaW9uIDI1MTM2KQorKysgV2ViQ29yZS9kb20vRXZlbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5LDYgKzEwOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCBib29sIGlzV2hlZWxFdmVudCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNPdmVyZmxvd0V2ZW50KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc01lc3NhZ2VF
dmVudCgpIGNvbnN0OwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NW
R1pvb21FdmVudCgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudE5hbWVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCShyZXZpc2lvbiAyNTEz
NikKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiAr
NzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7IG5hbWVzcGFjZSBFdmVudE5hbWVzCiAgICAgbWFj
cm8odW5sb2FkKSBcCiAgICAgbWFjcm8oem9vbSkgXAogICAgIFwKKyAgICBtYWNybyhtZXNzYWdl
KVwKKyAgICBcCiAgICAgbWFjcm8oRE9NQWN0aXZhdGUpIFwKICAgICBtYWNybyhET01BdHRyTW9k
aWZpZWQpIFwKICAgICBtYWNybyhET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQpIFwKSW5kZXg6IFdl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXROb2RlLmNwcAkocmV2aXNpb24gMjUxMzYpCisrKyBXZWJDb3JlL2RvbS9FdmVu
dFRhcmdldE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNs
dWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkRPTUV2ZW50U3RyZWFtTG9hZGVyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCkBAIC02MCw2ICs2MSw3
IEBAIHN0YXRpYyBpbnQgZ0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4gPSAwOwogRXZlbnRUYXJnZXRO
b2RlOjpFdmVudFRhcmdldE5vZGUoRG9jdW1lbnQgKmRvYykKICAgICA6IE5vZGUoZG9jKQogICAg
ICwgbV9yZWdkTGlzdGVuZXJzKDApCisgICAgLCBtX2V2ZW50U291cmNlcygwKQogewogfQogCkBA
IC02OCw2ICs3MCw3IEBAIEV2ZW50VGFyZ2V0Tm9kZTo6fkV2ZW50VGFyZ2V0Tm9kZSgpCiAgICAg
aWYgKG1fcmVnZExpc3RlbmVycyAmJiAhbV9yZWdkTGlzdGVuZXJzLT5pc0VtcHR5KCkgJiYgIWlu
RG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckRpc2Nvbm5lY3RlZE5v
ZGVXaXRoRXZlbnRMaXN0ZW5lcnModGhpcyk7CiAgICAgZGVsZXRlIG1fcmVnZExpc3RlbmVyczsK
KyAgICBkZWxldGUgbV9ldmVudFNvdXJjZXM7CiB9CiAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpp
bnNlcnRlZEludG9Eb2N1bWVudCgpCkBAIC02MDUsNiArNjA4LDM4IEBAIHZvaWQgRXZlbnRUYXJn
ZXROb2RlOjpkZWZhdWx0RXZlbnRIYW5kbGUKICAgICB9CiB9CiAKK3ZvaWQgRXZlbnRUYXJnZXRO
b2RlOjphZGRFdmVudFNvdXJjZShjb25zdCBTdHJpbmcmIHNyYykKK3sKKyAgICBpZiAoIW1fZXZl
bnRTb3VyY2VzKQorICAgICAgICBtX2V2ZW50U291cmNlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywg
RXZlbnRTb3VyY2VFbnRyeT47CisgICAgICAgIAorICAgIGlmIChtX2V2ZW50U291cmNlcy0+Y29u
dGFpbnMoc3JjKSkgeworICAgICAgICBtX2V2ZW50U291cmNlcy0+Z2V0KHNyYykucmVxdWVzdENv
dW50ICs9IDE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgS1VSTCBrdXJsKEtV
UkwoZG9jdW1lbnQoKS0+YmFzZVVSTCgpKSwgc3JjLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAg
RXZlbnRTb3VyY2VFbnRyeSBlbnRyeTsKKyAgICBlbnRyeS5yZXF1ZXN0Q291bnQgPSAxOworICAg
IGVudHJ5LmxvYWRlciA9IG5ldyBET01FdmVudFN0cmVhbUxvYWRlcih0aGlzLCBrdXJsKTsKKyAg
ICBtX2V2ZW50U291cmNlcy0+c2V0KHNyYywgZW50cnkpOworICAgIGVudHJ5LmxvYWRlci0+b3Bl
bigpOworfQorCit2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6cmVtb3ZlRXZlbnRTb3VyY2UoY29uc3Qg
U3RyaW5nJiBzcmMpCit7CisgICAgaWYgKCFtX2V2ZW50U291cmNlcy0+Y29udGFpbnMoc3JjKSkg
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgaWYgKG1fZXZlbnRTb3VyY2VzLT5nZXQo
c3JjKS5yZXF1ZXN0Q291bnQgPiAxKSB7CisgICAgICAgIG1fZXZlbnRTb3VyY2VzLT5nZXQoc3Jj
KS5yZXF1ZXN0Q291bnQgLT0gMTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBt
X2V2ZW50U291cmNlcy0+Z2V0KHNyYykubG9hZGVyLT5jbG9zZSgpOworICAgIG1fZXZlbnRTb3Vy
Y2VzLT5yZW1vdmUoc3JjKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIAogdm9pZCBFdmVudFRhcmdl
dE5vZGU6OmR1bXAoVGV4dFN0cmVhbSogc3RyZWFtLCBEZXByZWNhdGVkU3RyaW5nIGluZCkgY29u
c3QKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAyNTEzNikKKysrIFdlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMyArMjUsMjIgQEAK
ICNkZWZpbmUgRXZlbnRUYXJnZXROb2RlX2gKIAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisj
aW5jbHVkZSAiUmVtb3RlRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAj
aW5jbHVkZSAiTm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBEZXByZWNhdGVkVmFsdWVMaXN0OwogCi1jbGFzcyBFdmVudFRhcmdldE5v
ZGUgOiBwdWJsaWMgTm9kZSwgcHVibGljIEV2ZW50VGFyZ2V0IHsKK2NsYXNzIERPTUV2ZW50U3Ry
ZWFtTG9hZGVyOworCitzdHJ1Y3QgRXZlbnRTb3VyY2VFbnRyeSB7CisgICAgaW50IHJlcXVlc3RD
b3VudDsKKyAgICBSZWZQdHI8RE9NRXZlbnRTdHJlYW1Mb2FkZXI+IGxvYWRlcjsKK307CisKK2Ns
YXNzIEV2ZW50VGFyZ2V0Tm9kZSA6IHB1YmxpYyBOb2RlLCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1
YmxpYyBSZW1vdGVFdmVudFRhcmdldCB7CiBwdWJsaWM6CiAgICAgRXZlbnRUYXJnZXROb2RlKERv
Y3VtZW50Kik7CiAgICAgdmlydHVhbCB+RXZlbnRUYXJnZXROb2RlKCk7CkBAIC00NCw2ICs1Myw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2
ZW50PiwgRXhjZXB0aW9uQ29kZSYsIGJvb2wgdGVtcEV2ZW50ID0gZmFsc2UpOwogICAgIHZvaWQg
cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudFNv
dXJjZShjb25zdCBTdHJpbmcmIHNyYyk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50U291
cmNlKGNvbnN0IFN0cmluZyYgc3JjKTsKKwogICAgIHZvaWQgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4p
OwogICAgIHZvaWQgcmVtb3ZlSFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUpOwogICAgIGJvb2wgZGlzcGF0Y2hIVE1MRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUpOwpAQCAtMTA2LDYg
KzExOCw5IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50
VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkg
eyBkZXJlZigpOyB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSGFzaE1hcDxTdHJpbmcsIEV2ZW50
U291cmNlRW50cnk+KiBtX2V2ZW50U291cmNlczsKIH07CiAKIGlubGluZSBFdmVudFRhcmdldE5v
ZGUqIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoTm9kZSogbikgCkluZGV4OiBXZWJDb3JlL2RvbS9NZXNz
YWdlRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhlbnJ5IE1hc29u
IChobWFzb25AbWFjLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSwgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiTWVzc2FnZUV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTWVzc2FnZUV2
ZW50OjpNZXNzYWdlRXZlbnQoKQoreworfQorCitNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBjYW5CdWJibGVBcmcsIGJvb2wgY2Fu
Y2VsYWJsZUFyZywgY29uc3QgQXRvbWljU3RyaW5nJiBkYXRhLCBjb25zdCBBdG9taWNTdHJpbmcm
IGRvbWFpbiwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmksIERvY3VtZW50KiBkb2MpCisgICAgOiBF
dmVudChldmVudFR5cGUsIGNhbkJ1YmJsZUFyZywgY2FuY2VsYWJsZUFyZykKKyAgICAsIG1fZGF0
YShkYXRhKQorICAgICwgbV9kb21haW4oZG9tYWluKQorICAgICwgbV91cmkodXJpKQorICAgICwg
bV9zb3VyY2UoZG9jKQoreworfQorCitNZXNzYWdlRXZlbnQ6Ok1lc3NhZ2VFdmVudChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IGJvb2wgY2FuQnViYmxlQXJnLCBib29sIGNhbmNlbGFibGVBcmcsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZGF0YSwgY29uc3QgQXRvbWljU3RyaW5nJiBkb21haW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
dXJpLCBEb2N1bWVudCogZG9jKQorICAgIDogRXZlbnQoZXZlbnRUeXBlLCBjYW5CdWJibGVBcmcs
IGNhbmNlbGFibGVBcmcpCisgICAgLCBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpCisgICAg
LCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZG9tYWluKGRvbWFpbikKKyAgICAsIG1fdXJpKHVyaSkK
KyAgICAsIG1fc291cmNlKGRvYykKK3sKK30KKworTWVzc2FnZUV2ZW50Ojp+TWVzc2FnZUV2ZW50
KCkKK3sKK30KKwordm9pZCBNZXNzYWdlRXZlbnQ6OmluaXRNZXNzYWdlRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxlLCBjb25zdCBB
dG9taWNTdHJpbmcmIGRhdGEsIGNvbnN0IEF0b21pY1N0cmluZyYgZG9tYWluLCBjb25zdCBBdG9t
aWNTdHJpbmcmIHVyaSwgRG9jdW1lbnQqIGRvYykKK3sKKyAgICBpZiAoZGlzcGF0Y2hlZCgpKQor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGluaXRFdmVudCh0eXBlLCBjYW5CdWJibGUs
IGNhbmNlbGFibGUpOworICAgIAorICAgIG1fZGF0YSA9IGRhdGE7CisgICAgbV9kb21haW4gPSBk
b21haW47CisgICAgbV91cmkgPSB1cmk7CisgICAgbV9zb3VyY2UgPSBkb2M7Cit9CisKK3ZvaWQg
TWVzc2FnZUV2ZW50Ojppbml0TWVzc2FnZUV2ZW50TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
c3BhY2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wg
Y2FuY2VsYWJsZSwgY29uc3QgQXRvbWljU3RyaW5nJiBkYXRhLCBjb25zdCBBdG9taWNTdHJpbmcm
IGRvbWFpbiwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmksIERvY3VtZW50KiBkb2MpCit7CisgICAg
aWYgKGRpc3BhdGNoZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpbml0RXZl
bnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlKTsKKyAgICAKKyAgICBtX2RhdGEgPSBkYXRh
OworICAgIG1fZG9tYWluID0gZG9tYWluOworICAgIG1fdXJpID0gdXJpOworICAgIG1fc291cmNl
ID0gZG9jOworICAgIG1fbmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJOworfQorCitib29sIE1l
c3NhZ2VFdmVudDo6aXNNZXNzYWdlRXZlbnQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vTWVzc2FnZUV2
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5yeSBNYXNvbiAoaG1hc29uQG1h
Yy5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqCisgKi8KKworI2lmbmRlZiBNZXNzYWdl
RXZlbnRfaAorI2RlZmluZSBNZXNzYWdlRXZlbnRfaAorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCisjaW5jbHVkZSAiRG9jUHRyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBNZXNzYWdlRXZl
bnQgOiBwdWJsaWMgRXZlbnQgeworICAgIHB1YmxpYzoKKworICAgICAgICBNZXNzYWdlRXZlbnQo
KTsKKyAgICAgICAgTWVzc2FnZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBj
YW5CdWJibGUsIGJvb2wgY2FuY2VsYWJsZSwgY29uc3QgQXRvbWljU3RyaW5nJiBkYXRhLCBjb25z
dCBBdG9taWNTdHJpbmcmIGRvbWFpbiwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmksIERvY3VtZW50
KiBkb2MpOworICAgICAgICBNZXNzYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgYm9vbCBjYW5CdWJibGUsIGJvb2wgY2Fu
Y2VsYWJsZSwgY29uc3QgQXRvbWljU3RyaW5nJiBkYXRhLCBjb25zdCBBdG9taWNTdHJpbmcmIGRv
bWFpbiwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmksIERvY3VtZW50KiBkb2MpOworICAgICAgICB2
aXJ0dWFsIH5NZXNzYWdlRXZlbnQoKTsKKworICAgICAgICB2b2lkIGluaXRNZXNzYWdlRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxhYmxl
LCBjb25zdCBBdG9taWNTdHJpbmcmIGRhdGEsIGNvbnN0IEF0b21pY1N0cmluZyYgZG9tYWluLCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSwgRG9jdW1lbnQqIGRvYyk7CisgICAgICAgIAorICAgICAg
ICB2b2lkIGluaXRNZXNzYWdlRXZlbnROUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29sIGNhbkJ1YmJsZSwgYm9vbCBjYW5jZWxh
YmxlLCBjb25zdCBBdG9taWNTdHJpbmcmIGRhdGEsIGNvbnN0IEF0b21pY1N0cmluZyYgZG9tYWlu
LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSwgRG9jdW1lbnQqIGRvYyk7CisgICAgICAgIAorICAg
ICAgICB2b2lkIHNldERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiBkYXRhKSB7IG1fZGF0YSA9IGRh
dGE7IH0KKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhOyB9CisKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkb21haW4oKSBjb25zdCB7
IHJldHVybiBtX2RvbWFpbjsgfQorICAgICAgICAKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB1cmkoKSBjb25zdCB7IHJldHVybiBtX3VyaTsgfQorICAgICAgICAKKyAgICAgICAgRG9jdW1l
bnQqIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmdldCgpOyB9CisgICAgICAgIAor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNNZXNzYWdlRXZlbnQoKSBjb25zdDsKKworICAgIHByaXZh
dGU6ICAgIAorICAgICAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2VVUkk7CisgICAgICAgIEF0
b21pY1N0cmluZyBtX2RhdGE7CisgICAgICAgIEF0b21pY1N0cmluZyBtX2RvbWFpbjsKKyAgICAg
ICAgQXRvbWljU3RyaW5nIG1fdXJpOworICAgICAgICAKKyAgICAgICAgRG9jUHRyPERvY3VtZW50
PiBtX3NvdXJjZTsKKyAgICAgICAgCisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gTWVzc2FnZUV2ZW50X2gKSW5kZXg6IFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVu
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTWVzc2FnZUV2ZW50LmlkbAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvZG9tL01lc3NhZ2VFdmVudC5pZGwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSGVucnkgTWFzb24gPGhtYXNv
bkBtYWMuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqCisgKi8KKworbW9kdWxlIGV2ZW50cyB7CisKKyAgICBpbnRlcmZhY2Ug
W0dlbmVyYXRlQ29uc3RydWN0b3JdIE1lc3NhZ2VFdmVudCA6IEV2ZW50IHsKKworICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGRhdGE7CisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgZG9tYWluOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3Ry
aW5nIHVyaTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERvY3VtZW50IHNvdXJjZTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgaW5pdE1lc3NhZ2VFdmVudChpbiBET01TdHJpbmcgdHlwZUFy
ZywgaW4gYm9vbGVhbiBjYW5CdWJibGVBcmcsIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywgaW4g
RE9NU3RyaW5nIGRhdGFBcmcsIGluIERPTVN0cmluZyBkb21haW5BcmcsIGluIERPTVN0cmluZyB1
cmlBcmcsIGluIERvY3VtZW50IGRvY3VtZW50QXJnKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQg
aW5pdE1lc3NhZ2VFdmVudE5TKGluIERPTVN0cmluZyBuYW1lc3BhY2VVUkksIGluIERPTVN0cmlu
ZyB0eXBlQXJnLCBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywgaW4gYm9vbGVhbiBjYW5jZWxhYmxl
QXJnLCBpbiBET01TdHJpbmcgZGF0YUFyZywgaW4gRE9NU3RyaW5nIGRvbWFpbkFyZywgaW4gRE9N
U3RyaW5nIHVyaUFyZywgaW4gRG9jdW1lbnQgZG9jdW1lbnRBcmcpOworCisgICAgfTsKKworfQpJ
bmRleDogV2ViQ29yZS9kb20vUmVtb3RlRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL1JlbW90ZUV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
ZG9tL1JlbW90ZUV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5yeSBNYXNvbiAoaG1hc29uQG1hYy5jb20pCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlRXZlbnRUYXJn
ZXQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFJlbW90ZUV2ZW50VGFyZ2V0Ojph
ZGRFdmVudFNvdXJjZShjb25zdCBTdHJpbmcmIHNyYykKK3sKK30KKwordm9pZCBSZW1vdGVFdmVu
dFRhcmdldDo6cmVtb3ZlRXZlbnRTb3VyY2UoY29uc3QgU3RyaW5nJiBzcmMpCit7Cit9CisKK1Jl
bW90ZUV2ZW50VGFyZ2V0Ojp+UmVtb3RlRXZlbnRUYXJnZXQoKQoreworfQorCit9IC8vIGVuZCBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vUmVtb3RlRXZlbnRUYXJnZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9SZW1vdGVFdmVudFRhcmdldC5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9kb20vUmVtb3RlRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5yeSBNYXNvbiA8aG1hc29u
QG1hYy5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICoKKyAqLworCisjaWZuZGVmIFJlbW90ZUV2ZW50VGFyZ2V0X2gKKyNkZWZp
bmUgUmVtb3RlRXZlbnRUYXJnZXRfaAorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIFN0cmluZzsKKyAgICAKKyAgICBjbGFz
cyBSZW1vdGVFdmVudFRhcmdldCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRkRXZlbnRTb3VyY2UoY29uc3QgU3RyaW5nJiBzcmMpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlRXZlbnRTb3VyY2UoY29uc3QgU3RyaW5nJiBzcmMpOworCisgICAgcHJvdGVjdGVkOgor
ICAgICAgICB2aXJ0dWFsIH5SZW1vdGVFdmVudFRhcmdldCgpOworCisgICAgfTsKK30gLy8gbmFt
ZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9kb20vUmVtb3RlRXZlbnRUYXJnZXQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1JlbW90ZUV2ZW50VGFyZ2V0LmlkbAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvZG9tL1JlbW90ZUV2ZW50VGFyZ2V0LmlkbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5yeSBNYXNvbiA8
aG1hc29uQG1hYy5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICoKKyAqLworCittb2R1bGUgZXZlbnRzIHsKKworICAgIGludGVy
ZmFjZSBbT2JqQ1Byb3RvY29sXSBSZW1vdGVFdmVudFRhcmdldCB7CisgICAgICAgIHZvaWQgYWRk
RXZlbnRTb3VyY2UoaW4gRE9NU3RyaW5nIHNyYyk7CisgICAgICAgIHZvaWQgcmVtb3ZlRXZlbnRT
b3VyY2UoaW4gRE9NU3RyaW5nIHNyYyk7CisgICAgfTsKKworfQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyNTEzNikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5OCw2ICs3OTgsNyBAQCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiogaW5saW5lVGFnTGlzCiAgICAgICAgIHRhZ0xpc3QuYWRkKGRlbFRhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOwogICAgICAgICB0YWdMaXN0LmFkZChub2JyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7
CiAgICAgICAgIHRhZ0xpc3QuYWRkKHdiclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgICAg
ICB0YWdMaXN0LmFkZChldmVudF9zb3VyY2VUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICB9
CiAgICAgcmV0dXJuICZ0YWdMaXN0OwogfQpAQCAtODQwLDYgKzg0MSw3IEBAIEhhc2hTZXQ8QXRv
bWljU3RyaW5nSW1wbCo+KiBibG9ja1RhZ0xpc3QKICAgICAgICAgdGFnTGlzdC5hZGQodGFibGVU
YWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKICAgICAgICAgdGFnTGlzdC5hZGQodWxUYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKICAgICAgICAgdGFnTGlzdC5hZGQoeG1wVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7CisgICAgICAgIHRhZ0xpc3QuYWRkKGV2ZW50X3NvdXJjZVRhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOwogICAgIH0KICAgICByZXR1cm4gJnRhZ0xpc3Q7CiB9CkluZGV4OiBXZWJDb3JlL2h0
bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gMjUxMzYpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnRGYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxEaXJlY3RvcnlFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTEVtYmVkRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxFdmVudFNvdXJj
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
RnJhbWVTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVudC5oIgpAQCAt
MzE1LDYgKzMxNiwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZW1iZWRDb25z
CiAgICAgcmV0dXJuIG5ldyBIVE1MRW1iZWRFbGVtZW50KGRvYyk7CiB9CiAKK3N0YXRpYyBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBldmVudF9zb3VyY2VDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNT
dHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQoreworICAgIHJl
dHVybiBuZXcgSFRNTEV2ZW50U291cmNlRWxlbWVudChkb2MpOworfQorCiBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gb2JqZWN0Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiwg
RG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7
CiAgICAgUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBvYmplY3QgPSBuZXcgSFRNTE9iamVjdEVs
ZW1lbnQoZG9jKTsKQEAgLTQwOCw2ICs0MTQsNyBAQCBzdGF0aWMgdm9pZCBjcmVhdGVGdW5jdGlv
bk1hcCgpCiAgICAgYWRkVGFnKGRpdlRhZywgZGl2Q29uc3RydWN0b3IpOwogICAgIGFkZFRhZyhk
bFRhZywgZGxDb25zdHJ1Y3Rvcik7CiAgICAgYWRkVGFnKGVtYmVkVGFnLCBlbWJlZENvbnN0cnVj
dG9yKTsKKyAgICBhZGRUYWcoZXZlbnRfc291cmNlVGFnLCBldmVudF9zb3VyY2VDb25zdHJ1Y3Rv
cik7CiAgICAgYWRkVGFnKGZpZWxkc2V0VGFnLCBmaWVsZHNldENvbnN0cnVjdG9yKTsKICAgICBh
ZGRUYWcoZm9udFRhZywgZm9udENvbnN0cnVjdG9yKTsKICAgICBhZGRUYWcoZm9ybVRhZywgZm9y
bUNvbnN0cnVjdG9yKTsKQEAgLTQ3Myw3ICs0ODAsNyBAQCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiBIVE1MRWxlbWVudEZhY3RvCiAgICAgQ29uc3RydWN0b3JGdW5jIGZ1bmMgPSBnRnVuY3Rpb25N
YXAtPmdldCh0YWdOYW1lLmltcGwoKSk7CiAgICAgaWYgKGZ1bmMpCiAgICAgICAgIHJldHVybiBm
dW5jKHRhZ05hbWUsIGRvYywgZm9ybSwgY3JlYXRlZEJ5UGFyc2VyKTsKLSAKKwogICAgIC8vIGVs
ZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NCiAgICAgcmV0
dXJuIG5ldyBIVE1MRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdOYW1lLCB4aHRt
bE5hbWVzcGFjZVVSSSksIGRvYyk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEV2ZW50U291
cmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxFdmVudFNvdXJj
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9odG1sL0hUTUxFdmVudFNvdXJj
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisvKioKKyAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSGVucnkgTWFzb24gPGhtYXNvbkBtYWMuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRPTUV2ZW50U3RyZWFtTG9hZGVyLmgiCisjaW5j
bHVkZSAiSFRNTEV2ZW50U291cmNlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitIVE1MRXZlbnRTb3VyY2VF
bGVtZW50OjpIVE1MRXZlbnRTb3VyY2VFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1M
RWxlbWVudChldmVudF9zb3VyY2VUYWcsIGRvYykKKyAgICAsIG1fbG9hZGVyKDApCit7Cit9CisK
K0hUTUxFdmVudFNvdXJjZUVsZW1lbnQ6OkhUTUxFdmVudFNvdXJjZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50KHRh
Z05hbWUsIGRvYykKKyAgICAsIG1fbG9hZGVyKDApCit7Cit9CisKK0hUTUxFdmVudFNvdXJjZUVs
ZW1lbnQ6On5IVE1MRXZlbnRTb3VyY2VFbGVtZW50KCkKK3sKK30KKworCitTdHJpbmcgSFRNTEV2
ZW50U291cmNlRWxlbWVudDo6c3JjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KHNyY0F0dHIpOworfQorCit2b2lkIEhUTUxFdmVudFNvdXJjZUVsZW1lbnQ6OnNldFNyYyhjb25z
dCBTdHJpbmcmIHZhbHVlKQoreworICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCB2YWx1ZSk7Cit9
CisKK3ZvaWQgSFRNTEV2ZW50U291cmNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQor
eyAgICAKKyAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKKyAgICAKKyAg
ICBLVVJMIGt1cmwoS1VSTChkb2N1bWVudCgpLT5iYXNlVVJMKCkpLCBnZXRBdHRyaWJ1dGUoc3Jj
QXR0cikuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAKKyAgICBtX2xvYWRlciA9IG5ldyBET01F
dmVudFN0cmVhbUxvYWRlcih0aGlzLCBrdXJsKTsKKyAgICAKKyAgICBtX2xvYWRlci0+b3Blbigp
OworfQorCit9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50LmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDUxIEBACisvKgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1
dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSGVucnkgTWFzb24gPGhtYXNvbkBtYWMu
Y29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIEhUTUxFdmVudFNvdXJjZUVsZW1lbnRfaAorI2RlZmluZSBIVE1MRXZlbnRT
b3VyY2VFbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiRE9N
RXZlbnRTdHJlYW1Mb2FkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIVE1M
RXZlbnRTb3VyY2VFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBI
VE1MRXZlbnRTb3VyY2VFbGVtZW50KERvY3VtZW50Kik7CisgICAgSFRNTEV2ZW50U291cmNlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+SFRNTEV2ZW50U291
cmNlRWxlbWVudCgpOworICAgIAorICAgIFN0cmluZyBzcmMoKSBjb25zdDsKKyAgICB2b2lkIHNl
dFNyYyhjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKKworcHJvdGVjdGVkOgorICAgIFN0cmluZyBtX3NyYzsKKyAgICBSZWZQdHI8
RE9NRXZlbnRTdHJlYW1Mb2FkZXI+IG1fbG9hZGVyOworfTsKKworfSAvL25hbWVzcGFjZQorCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRXZlbnRTb3VyY2VFbGVtZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVudC5pZGwJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL2h0bWwvSFRNTEV2ZW50U291cmNlRWxlbWVudC5pZGwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
Q29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIDxzYW0u
d2VpbmlnQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIZW5yeSBNYXNvbiA8aG1h
c29uQG1hYy5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKi8KKworbW9kdWxlIGh0bWwgeworCisgICAgaW50ZXJmYWNlIFtHZW5lcmF0ZUNvbnN0cnVj
dG9yXSBIVE1MRXZlbnRTb3VyY2VFbGVtZW50IDogSFRNTEVsZW1lbnQgeworICAgICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nIHNyYzsKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TFRhZ05hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4J
KHJldmlzaW9uIDI1MTM2KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQCBkbAogZHQKIGVtCiBlbWJlZAorZXZlbnRfc291cmNl
CiBmaWVsZHNldAogZm9udAogZm9ybQpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDI1MTM2
KQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2
ICsxODAsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIEhUTUxEaXJlY3Rv
cnlFbGVtZW50Q29uc3RydWN0b3IgSFRNTERpcmVjdG9yeUVsZW1lbnQ7CiAgICAgICAgIGF0dHJp
YnV0ZSBIVE1MRGl2RWxlbWVudENvbnN0cnVjdG9yIEhUTUxEaXZFbGVtZW50OwogICAgICAgICBh
dHRyaWJ1dGUgSFRNTEVtYmVkRWxlbWVudENvbnN0cnVjdG9yIEhUTUxFbWJlZEVsZW1lbnQ7Cisg
ICAgICAgIGF0dHJpYnV0ZSBIVE1MRXZlbnRTb3VyY2VFbGVtZW50Q29uc3RydWN0b3IgSFRNTEV2
ZW50U291cmNlRWxlbWVudDsKICAgICAgICAgYXR0cmlidXRlIEhUTUxGaWVsZFNldEVsZW1lbnRD
b25zdHJ1Y3RvciBIVE1MRmllbGRTZXRFbGVtZW50OwogICAgICAgICBhdHRyaWJ1dGUgSFRNTEZv
bnRFbGVtZW50Q29uc3RydWN0b3IgSFRNTEZvbnRFbGVtZW50OwogICAgICAgICBhdHRyaWJ1dGUg
SFRNTEZvcm1FbGVtZW50Q29uc3RydWN0b3IgSFRNTEZvcm1FbGVtZW50OwpAQCAtMjI1LDYgKzIy
Niw3IEBAIG1vZHVsZSB3aW5kb3cgewogCiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudENvbnN0cnVj
dG9yIEV2ZW50OwogICAgICAgICBhdHRyaWJ1dGUgTXV0YXRpb25FdmVudENvbnN0cnVjdG9yIE11
dGF0aW9uRXZlbnQ7CisgICAgICAgIGF0dHJpYnV0ZSBNZXNzYWdlRXZlbnRDb25zdHJ1Y3RvciBN
ZXNzYWdlRXZlbnQ7CiAKICAgICAgICAgYXR0cmlidXRlIE5vZGVGaWx0ZXJDb25zdHJ1Y3RvciBO
b2RlRmlsdGVyOwogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VDb25zdHJ1Y3RvciBSYW5nZTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMjUxMzYpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTksNiArMTE5LDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGlzZVN1cHBvcnRlZE5vbkltYWdl
TQogICAgICAgImFwcGxpY2F0aW9uL3hodG1sK3htbCIsCiAgICAgICAiYXBwbGljYXRpb24vcnNz
K3htbCIsCiAgICAgICAiYXBwbGljYXRpb24vYXRvbSt4bWwiLAorICAgICAgImFwcGxpY2F0aW9u
L3gtZG9tLWV2ZW50LXN0cmVhbSIsCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgImFwcGxpY2F0
aW9uL3gtd2ViYXJjaGl2ZSIsCiAjZW5kaWYKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTM2KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIw
MDctMDgtMTkgIEhlbnJ5IE1hc29uICA8aG1hc29uQG1hYy5jb20+CisKKyAgICAgICAgQWRkZWQg
bmV3IHByb3BlcnRpZXMgdG8gdGVzdCBjYXNlcy4KKworICAgICAgICBBbHNvIG5vdyB0ZXN0cyBl
dmVudC1zb3VyY2UgYW5kIFJlbW90ZUV2ZW50SW50ZXJmYWNlLgorCisgICAgICAgIGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk2CisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk2CisgICAgICAgIAorICAgICAgICAqIGZh
c3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQ6IEFkZGVkIFJlbW90
ZUV2ZW50VGFyZ2V0IG1ldGhvZHMKKyAgICAgICAgKiBodHRwL3Rlc3RzL2RvbWV2ZW50c291cmNl
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL2V2ZW50LXNvdXJj
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZG9tZXZlbnRzb3Vy
Y2UvZXZlbnQtc291cmNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZG9tZXZl
bnRzb3VyY2UvcmVtb3RlLWV2ZW50LXRhcmdldC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGh0dHAvdGVzdHMvZG9tZXZlbnRzb3VyY2UvcmVtb3RlLWV2ZW50LXRhcmdldC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL3Jlc291cmNlczogQWRk
ZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZXNvdXJjZXMvc2FtcGxl
LWRvbS1ldmVudC1zb3VyY2UucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2RvbWV2
ZW50c291cmNlL3Jlc291cmNlcy9zYW1wbGUtZG9tLWV2ZW50cy1oZWxwZXIuanM6IEFkZGVkLgor
CiAyMDA3LTA4LTE3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBIeWF0dC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93
aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MjUxMzYpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNiw2ICsxNiw3IEBAIHdpbmRvdy5BdHRy
LnByb3RvdHlwZS5OT1RBVElPTl9OT0RFIFtudW0KIHdpbmRvdy5BdHRyLnByb3RvdHlwZS5QUk9D
RVNTSU5HX0lOU1RSVUNUSU9OX05PREUgW251bWJlcl0KIHdpbmRvdy5BdHRyLnByb3RvdHlwZS5U
RVhUX05PREUgW251bWJlcl0KIHdpbmRvdy5BdHRyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVy
IFtmdW5jdGlvbl0KK3dpbmRvdy5BdHRyLnByb3RvdHlwZS5hZGRFdmVudFNvdXJjZSBbZnVuY3Rp
b25dCiB3aW5kb3cuQXR0ci5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgW2Z1bmN0aW9uXQogd2luZG93
LkF0dHIucHJvdG90eXBlLmNsb25lTm9kZSBbZnVuY3Rpb25dCiB3aW5kb3cuQXR0ci5wcm90b3R5
cGUuZGlzcGF0Y2hFdmVudCBbZnVuY3Rpb25dCkBAIC0zMSw2ICszMiw3IEBAIHdpbmRvdy5BdHRy
LnByb3RvdHlwZS5sb29rdXBQcmVmaXggW2Z1bmMKIHdpbmRvdy5BdHRyLnByb3RvdHlwZS5ub3Jt
YWxpemUgW2Z1bmN0aW9uXQogd2luZG93LkF0dHIucHJvdG90eXBlLnJlbW92ZUNoaWxkIFtmdW5j
dGlvbl0KIHdpbmRvdy5BdHRyLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyIFtmdW5jdGlv
bl0KK3dpbmRvdy5BdHRyLnByb3RvdHlwZS5yZW1vdmVFdmVudFNvdXJjZSBbZnVuY3Rpb25dCiB3
aW5kb3cuQXR0ci5wcm90b3R5cGUucmVwbGFjZUNoaWxkIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFU
QVNlY3Rpb24gW29iamVjdCBDREFUQVNlY3Rpb25Db25zdHJ1Y3Rvcl0KIHdpbmRvdy5DREFUQVNl
Y3Rpb24ucHJvdG90eXBlIFtvYmplY3QgQ0RBVEFTZWN0aW9uUHJvdG90eXBlXQpAQCAtNDcsNiAr
NDksNyBAQCB3aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5OT1RBVElPTl9OCiB3aW5kb3cu
Q0RBVEFTZWN0aW9uLnByb3RvdHlwZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgW251bWJl
cl0KIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLlRFWFRfTk9ERSBbbnVtYmVyXQogd2lu
ZG93LkNEQVRBU2VjdGlvbi5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciBbZnVuY3Rpb25dCit3
aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5hZGRFdmVudFNvdXJjZSBbZnVuY3Rpb25dCiB3
aW5kb3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5hcHBlbmRDaGlsZCBbZnVuY3Rpb25dCiB3aW5k
b3cuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZS5hcHBlbmREYXRhIFtmdW5jdGlvbl0KIHdpbmRvdy5D
REFUQVNlY3Rpb24ucHJvdG90eXBlLmNsb25lTm9kZSBbZnVuY3Rpb25dCkBAIC02NSw2ICs2OCw3
IEBAIHdpbmRvdy5DREFUQVNlY3Rpb24ucHJvdG90eXBlLmxvb2t1cFByZWYKIHdpbmRvdy5DREFU
QVNlY3Rpb24ucHJvdG90eXBlLm5vcm1hbGl6ZSBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0
aW9uLnByb3RvdHlwZS5yZW1vdmVDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0aW9u
LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyIFtmdW5jdGlvbl0KK3dpbmRvdy5DREFUQVNl
Y3Rpb24ucHJvdG90eXBlLnJlbW92ZUV2ZW50U291cmNlIFtmdW5jdGlvbl0KIHdpbmRvdy5DREFU
QVNlY3Rpb24ucHJvdG90eXBlLnJlcGxhY2VDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFT
ZWN0aW9uLnByb3RvdHlwZS5yZXBsYWNlRGF0YSBbZnVuY3Rpb25dCiB3aW5kb3cuQ0RBVEFTZWN0
aW9uLnByb3RvdHlwZS5zcGxpdFRleHQgW2Z1bmN0aW9uXQpAQCAtMjQxLDYgKzI0NSw3IEBAIHdp
bmRvdy5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5OT1RBVElPTl8KIHdpbmRvdy5DaGFyYWN0ZXJE
YXRhLnByb3RvdHlwZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUgW251bWJlcl0KIHdpbmRv
dy5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5URVhUX05PREUgW251bWJlcl0KIHdpbmRvdy5DaGFy
YWN0ZXJEYXRhLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyIFtmdW5jdGlvbl0KK3dpbmRvdy5D
aGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5hZGRFdmVudFNvdXJjZSBbZnVuY3Rpb25dCiB3aW5kb3cu
Q2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgW2Z1bmN0aW9uXQogd2luZG93LkNo
YXJhY3RlckRhdGEucHJvdG90eXBlLmFwcGVuZERhdGEgW2Z1bmN0aW9uXQogd2luZG93LkNoYXJh
Y3RlckRhdGEucHJvdG90eXBlLmNsb25lTm9kZSBbZnVuY3Rpb25dCkBAIC0yNTksNiArMjY0LDcg
QEAgd2luZG93LkNoYXJhY3RlckRhdGEucHJvdG90eXBlLmxvb2t1cFByZQogd2luZG93LkNoYXJh
Y3RlckRhdGEucHJvdG90eXBlLm5vcm1hbGl6ZSBbZnVuY3Rpb25dCiB3aW5kb3cuQ2hhcmFjdGVy
RGF0YS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgW2Z1bmN0aW9uXQogd2luZG93LkNoYXJhY3RlckRh
dGEucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9uXQord2luZG93LkNoYXJh
Y3RlckRhdGEucHJvdG90eXBlLnJlbW92ZUV2ZW50U291cmNlIFtmdW5jdGlvbl0KIHdpbmRvdy5D
aGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgW2Z1bmN0aW9uXQogd2luZG93LkNo
YXJhY3RlckRhdGEucHJvdG90eXBlLnJlcGxhY2VEYXRhIFtmdW5jdGlvbl0KIHdpbmRvdy5DaGFy
YWN0ZXJEYXRhLnByb3RvdHlwZS5zdWJzdHJpbmdEYXRhIFtmdW5jdGlvbl0KQEAgLTI5Miw2ICsy
OTgsNyBAQCB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLk5PVEFUSU9OX05PREUgCiB3aW5kb3cu
RG9jdW1lbnQucHJvdG90eXBlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSBbbnVtYmVyXQog
d2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5URVhUX05PREUgW251bWJlcl0KIHdpbmRvdy5Eb2N1
bWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciBbZnVuY3Rpb25dCit3aW5kb3cuRG9jdW1l
bnQucHJvdG90eXBlLmFkZEV2ZW50U291cmNlIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5w
cm90b3R5cGUuYWRvcHROb2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUu
YXBwZW5kQ2hpbGQgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5jbG9uZU5v
ZGUgW2Z1bmN0aW9uXQpAQCAtMzM3LDYgKzM0NCw3IEBAIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5
cGUucXVlcnlDb21tYW5kU3UKIHdpbmRvdy5Eb2N1bWVudC5wcm90b3R5cGUucXVlcnlDb21tYW5k
VmFsdWUgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZCBb
ZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIg
W2Z1bmN0aW9uXQord2luZG93LkRvY3VtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudFNvdXJjZSBb
ZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnQucHJvdG90eXBlLnJlcGxhY2VDaGlsZCBbZnVuY3Rp
b25dCiB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudCBbb2JqZWN0IERvY3VtZW50RnJhZ21lbnRDb25z
dHJ1Y3Rvcl0KIHdpbmRvdy5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZSBbb2JqZWN0IERvY3Vt
ZW50RnJhZ21lbnRQcm90b3R5cGVdCkBAIC0zNTMsNiArMzYxLDcgQEAgd2luZG93LkRvY3VtZW50
RnJhZ21lbnQucHJvdG90eXBlLk5PVEFUSQogd2luZG93LkRvY3VtZW50RnJhZ21lbnQucHJvdG90
eXBlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSBbbnVtYmVyXQogd2luZG93LkRvY3VtZW50
RnJhZ21lbnQucHJvdG90eXBlLlRFWFRfTk9ERSBbbnVtYmVyXQogd2luZG93LkRvY3VtZW50RnJh
Z21lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9uXQord2luZG93LkRvY3Vt
ZW50RnJhZ21lbnQucHJvdG90eXBlLmFkZEV2ZW50U291cmNlIFtmdW5jdGlvbl0KIHdpbmRvdy5E
b2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5hcHBlbmRDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cu
RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUuY2xvbmVOb2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5E
b2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50IFtmdW5jdGlvbl0KQEAgLTM2
OCw2ICszNzcsNyBAQCB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUubG9va3VwCiB3
aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUubm9ybWFsaXplIFtmdW5jdGlvbl0KIHdp
bmRvdy5Eb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZCBbZnVuY3Rpb25dCiB3
aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciBbZnVu
Y3Rpb25dCit3aW5kb3cuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRTb3Vy
Y2UgW2Z1bmN0aW9uXQogd2luZG93LkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnJlcGxhY2VD
aGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuRG9jdW1lbnRUeXBlIFtvYmplY3QgRG9jdW1lbnRUeXBl
Q29uc3RydWN0b3JdCiB3aW5kb3cuRG9jdW1lbnRUeXBlLnByb3RvdHlwZSBbb2JqZWN0IERvY3Vt
ZW50VHlwZVByb3RvdHlwZV0KQEAgLTQxMiw2ICs0MjIsNyBAQCB3aW5kb3cuRWxlbWVudC5wcm90
b3R5cGUuTk9UQVRJT05fTk9ERSBbCiB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuUFJPQ0VTU0lO
R19JTlNUUlVDVElPTl9OT0RFIFtudW1iZXJdCiB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuVEVY
VF9OT0RFIFtudW1iZXJdCiB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5l
ciBbZnVuY3Rpb25dCit3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRTb3VyY2UgW2Z1
bmN0aW9uXQogd2luZG93LkVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkIFtmdW5jdGlvbl0K
IHdpbmRvdy5FbGVtZW50LnByb3RvdHlwZS5ibHVyIFtmdW5jdGlvbl0KIHdpbmRvdy5FbGVtZW50
LnByb3RvdHlwZS5jbG9uZU5vZGUgW2Z1bmN0aW9uXQpAQCAtNDQyLDYgKzQ1Myw3IEBAIHdpbmRv
dy5FbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUKIHdpbmRvdy5FbGVtZW50LnByb3Rv
dHlwZS5yZW1vdmVBdHRyaWJ1dGVOb2RlIFtmdW5jdGlvbl0KIHdpbmRvdy5FbGVtZW50LnByb3Rv
dHlwZS5yZW1vdmVDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVt
b3ZlRXZlbnRMaXN0ZW5lciBbZnVuY3Rpb25dCit3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUucmVt
b3ZlRXZlbnRTb3VyY2UgW2Z1bmN0aW9uXQogd2luZG93LkVsZW1lbnQucHJvdG90eXBlLnJlcGxh
Y2VDaGlsZCBbZnVuY3Rpb25dCiB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsQnlMaW5l
cyBbZnVuY3Rpb25dCiB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsQnlQYWdlcyBbZnVu
Y3Rpb25dCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL2V2ZW50
LXNvdXJjZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9kb21ldmVudHNvdXJjZS9ldmVudC1zb3VyY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9ldmVudC1zb3VyY2UtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0IEBACitUZXN0cyBmb3IgYnVnIDE0
OTk1IC0gU3VwcG9ydCBmb3IgZXZlbnQtc291cmNlIGVsZW1lbnQuCisKK0RPTUZvY3VzSW46IFBh
c3NlZAorRE9NRm9jdXNPdXQ6IFBhc3NlZAorZm9jdXM6IFBhc3NlZAorYmx1cjogUGFzc2VkCity
ZXNpemU6IFBhc3NlZAorc2Nyb2xsOiBQYXNzZWQKK3RleHRJbnB1dDogUGFzc2VkCitjbGljazog
UGFzc2VkCittb3VzZWRvd246IFBhc3NlZAorbW91c2V1cDogUGFzc2VkCittb3VzZW92ZXI6IFBh
c3NlZAorbW91c2Vtb3ZlOiBQYXNzZWQKK21vdXNlb3V0OiBQYXNzZWQKK2tleWRvd246IFBhc3Nl
ZAora2V5dXA6IFBhc3NlZAorRE9NU3VidHJlZU1vZGlmaWVkOiBQYXNzZWQKK0RPTU5vZGVJbnNl
cnRlZDogUGFzc2VkCitET01Ob2RlUmVtb3ZlZDogUGFzc2VkCitET01Ob2RlUmVtb3ZlZEZyb21E
b2N1bWVudDogUGFzc2VkCitET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQ6IFBhc3NlZAorRE9N
QXR0ck1vZGlmaWVkOiBQYXNzZWQKK0RPTUNoYXJhY3RlckRhdGFNb2RpZmllZDogUGFzc2VkCits
b2FkOiBQYXNzZWQKK3VubG9hZDogUGFzc2VkCithYm9ydDogUGFzc2VkCitlcnJvcjogUGFzc2Vk
CitzZWxlY3Q6IFBhc3NlZAorY2hhbmdlOiBQYXNzZWQKK3N1Ym1pdDogUGFzc2VkCityZXNldDog
UGFzc2VkCittZXNzYWdlOiBQYXNzZWQKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9k
b21ldmVudHNvdXJjZS9ldmVudC1zb3VyY2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL2V2ZW50LXNvdXJjZS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9ldmVudC1zb3VyY2Uu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorPGh0bWw+Cis8Ym9keT4KKzxwPlRl
c3RzIGZvciA8YSBocmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDk5NSI+IGJ1ZyAxNDk5NTwvYT4gLSAKK1N1cHBvcnQgZm9yIGV2ZW50LXNvdXJjZSBlbGVtZW50
LjwvcD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2FtcGxlLWRvbS1ldmVudHMtaGVscGVyLmpz
IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisK
K3ZhciBjb25zb2xlX21lc3NhZ2VzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsKK2Rv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29uc29sZV9tZXNzYWdlcyk7CisKK3ZhciByZWFkeVRv
U3RhcnRMb2dnaW5nID0gZmFsc2U7CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGlm
IChyZWFkeVRvU3RhcnRMb2dnaW5nKSB7CisgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgibGkiKTsKKyAgICAgICAgaXRlbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShtZXNzYWdlKSk7CisgICAgICAgIGNvbnNvbGVfbWVzc2FnZXMuYXBwZW5kQ2hp
bGQoaXRlbSk7CisgICAgfQorfQorCit2YXIgbGlzdGVuZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJldmVudC1zb3VyY2UiKTsKKworbGlzdGVuZXIuc2V0QXR0cmlidXRlKCJpZCIsICJsaXN0
ZW5lciIpOworCitmb3IgKHZhciBpbnRlcmZhY2VOYW1lIGluIGludGVyZmFjZU5hbWVzKSB7Cisg
ICAgdmFyIGV2ZW50TmFtZUxpc3QgPSBpbnRlcmZhY2VOYW1lc1tpbnRlcmZhY2VOYW1lXTsKKyAg
ICBmb3IgKHZhciBpPTA7IGkgPCBldmVudE5hbWVMaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAg
IHZhciBldmVudE5hbWUgPSBldmVudE5hbWVMaXN0W2ldOworICAgICAgICBsaXN0ZW5lci5hZGRF
dmVudExpc3RlbmVyKGV2ZW50TmFtZSwgY3JlYXRlSGFuZGxlcihldmVudE5hbWUsIGludGVyZmFj
ZU5hbWUpLCBmYWxzZSk7CisgICAgfTsKK307CisKK2xpc3RlbmVyLnNldEF0dHJpYnV0ZSgic3Jj
IiwgInJlc291cmNlcy9zYW1wbGUtZG9tLWV2ZW50LXNvdXJjZS5waHAiKTsKKworZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChsaXN0ZW5lcik7CisKK3JlYWR5VG9TdGFydExvZ2dpbmcgPSB0cnVl
OworCisvLyBnaXZlIGl0IGEgc2Vjb25kIHRvIHdhaXQgZm9yIHRoZSBldmVudHMuLi5ub3QgcGVy
ZmVjdCBidXQgd2UgbmVlZCB0byBwaWNrIHNvbWUgdGltZQorLy8gdG8gZ2l2ZSB1cCB3aGVuIGV2
ZW50cyBkb24ndCBhcnJpdmUuCitzZXRUaW1lb3V0KCJsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7IiwgMTAwMCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZW1vdGUtZXZlbnQtdGFyZ2V0
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2RvbWV2
ZW50c291cmNlL3JlbW90ZS1ldmVudC10YXJnZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZW1vdGUtZXZlbnQtdGFy
Z2V0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMyBAQAorVGVzdHMgZm9y
IGJ1ZyAxNDk5NiAtIFN1cHBvcnQgZm9yIFJlbW90ZUV2ZW50VGFyZ2V0IGludGVyZmFjZS4KKwor
RE9NRm9jdXNJbjogUGFzc2VkCitET01Gb2N1c091dDogUGFzc2VkCitmb2N1czogUGFzc2VkCiti
bHVyOiBQYXNzZWQKK3Jlc2l6ZTogUGFzc2VkCitzY3JvbGw6IFBhc3NlZAordGV4dElucHV0OiBQ
YXNzZWQKK2NsaWNrOiBQYXNzZWQKK21vdXNlZG93bjogUGFzc2VkCittb3VzZXVwOiBQYXNzZWQK
K21vdXNlb3ZlcjogUGFzc2VkCittb3VzZW1vdmU6IFBhc3NlZAorbW91c2VvdXQ6IFBhc3NlZAor
a2V5ZG93bjogUGFzc2VkCitrZXl1cDogUGFzc2VkCitET01TdWJ0cmVlTW9kaWZpZWQ6IFBhc3Nl
ZAorRE9NTm9kZUluc2VydGVkOiBQYXNzZWQKK0RPTU5vZGVSZW1vdmVkOiBQYXNzZWQKK0RPTU5v
ZGVSZW1vdmVkRnJvbURvY3VtZW50OiBQYXNzZWQKK0RPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVu
dDogUGFzc2VkCitET01BdHRyTW9kaWZpZWQ6IFBhc3NlZAorRE9NQ2hhcmFjdGVyRGF0YU1vZGlm
aWVkOiBQYXNzZWQKK2xvYWQ6IFBhc3NlZAordW5sb2FkOiBQYXNzZWQKK2Fib3J0OiBQYXNzZWQK
K2Vycm9yOiBQYXNzZWQKK3NlbGVjdDogUGFzc2VkCitjaGFuZ2U6IFBhc3NlZAorc3VibWl0OiBQ
YXNzZWQKK3Jlc2V0OiBQYXNzZWQKK21lc3NhZ2U6IFBhc3NlZApJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZW1vdGUtZXZlbnQtdGFyZ2V0Lmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9kb21ldmVudHNvdXJjZS9yZW1vdGUtZXZl
bnQtdGFyZ2V0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Rv
bWV2ZW50c291cmNlL3JlbW90ZS1ldmVudC10YXJnZXQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0OCBAQAorPGh0bWw+Cis8Ym9keT4KKzxwPlRlc3RzIGZvciA8YSBocmVmPSJodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5NiI+IGJ1ZyAxNDk5NjwvYT4gLSAK
K1N1cHBvcnQgZm9yIFJlbW90ZUV2ZW50VGFyZ2V0IGludGVyZmFjZS48L3A+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3NhbXBsZS1kb20tZXZlbnRzLWhlbHBlci5qcyIgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij48L3NjcmlwdD4KKzxkaXYgaWQ9Imxpc3RlbmVyIj4gPC9kaXY+Cis8c2NyaXB0Pgor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKK30KKwordmFyIGNvbnNvbGVfbWVzc2FnZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJ1bCIpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb25zb2xlX21lc3NhZ2VzKTsKKwor
dmFyIHJlYWR5VG9TdGFydExvZ2dpbmcgPSBmYWxzZTsKKworZnVuY3Rpb24gbG9nKG1lc3NhZ2Up
Cit7CisgICAgaWYgKHJlYWR5VG9TdGFydExvZ2dpbmcpIHsKKyAgICAgICAgdmFyIGl0ZW0gPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICAgICAgY29uc29sZV9tZXNzYWdl
cy5hcHBlbmRDaGlsZChpdGVtKTsKKyAgICB9Cit9CisgICAgCit2YXIgbGlzdGVuZXIgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibGlzdGVuZXIiKTsKKworZm9yICh2YXIgaW50ZXJmYWNlTmFt
ZSBpbiBpbnRlcmZhY2VOYW1lcykgeworICAgIHZhciBldmVudE5hbWVMaXN0ID0gaW50ZXJmYWNl
TmFtZXNbaW50ZXJmYWNlTmFtZV07CisgICAgZm9yICh2YXIgaT0wOyBpIDwgZXZlbnROYW1lTGlz
dC5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgZXZlbnROYW1lID0gZXZlbnROYW1lTGlzdFtp
XTsKKyAgICAgICAgbGlzdGVuZXIuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGNyZWF0ZUhh
bmRsZXIoZXZlbnROYW1lLCBpbnRlcmZhY2VOYW1lKSwgZmFsc2UpOworICAgIH07Cit9OworCity
ZWFkeVRvU3RhcnRMb2dnaW5nID0gdHJ1ZTsKKworbGlzdGVuZXIuYWRkRXZlbnRTb3VyY2UoInJl
c291cmNlcy9zYW1wbGUtZG9tLWV2ZW50LXNvdXJjZS5waHAiKTsKKworLy8gZ2l2ZSBpdCBhIHNl
Y29uZCB0byB3YWl0IGZvciB0aGUgZXZlbnRzLi4ubm90IHBlcmZlY3QgYnV0IHdlIG5lZWQgdG8g
cGljayBzb21lIHRpbWUKKy8vIHRvIGdpdmUgdXAgd2hlbiBldmVudHMgZG9uJ3QgYXJyaXZlLgor
c2V0VGltZW91dCgibGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOyIsIDEwMDApOwor
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVz
dHMvZG9tZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3NhbXBsZS1kb20tZXZlbnQtc291cmNlLnBocAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL3Jlc291
cmNlcy9zYW1wbGUtZG9tLWV2ZW50LXNvdXJjZS5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNlL3Jlc291cmNlcy9zYW1wbGUtZG9tLWV2ZW50
LXNvdXJjZS5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzUgQEAKKzw/cGhwCitoZWFkZXIo
IkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1kb20tZXZlbnQtc3RyZWFtIik7CisKKworZnVu
Y3Rpb24gc2VuZEV2ZW50VHlwZSgkZXZlbnRUeXBlKQoreworICAgIGVjaG8gIkV2ZW50OiAiOwor
ICAgIGVjaG8gJGV2ZW50VHlwZTsKKyAgICBlY2hvICJcbiI7CisgICAgZWNobyAiQ2FuY2VsYWJs
ZTogTm9cbiI7CisgICAgZWNobyAiQnViYmxlczogTm9cbiI7CisgICAgZWNobyAiaW52YWxpZEF0
dHJOYW1lOiBub3QgdmFsaWRcbiI7CisgICAgZWNobyAiXG4iOworICAgIGZsdXNoKCk7Cit9CisK
KworJGludGVyZmFjZU5hbWVzID0gYXJyYXkoKTsKKyAgIAorJGludGVyZmFjZU5hbWVzWydVSUV2
ZW50J10gPSBhcnJheSgnRE9NRm9jdXNJbicsICdET01Gb2N1c091dCcsICdmb2N1cycsICdibHVy
JywgJ3Jlc2l6ZScsICdzY3JvbGwnKTsKKyRpbnRlcmZhY2VOYW1lc1snVGV4dEV2ZW50J10gPSBh
cnJheSgndGV4dElucHV0Jyk7CiskaW50ZXJmYWNlTmFtZXNbJ01vdXNlRXZlbnQnXSA9IGFycmF5
KCdjbGljaycsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdtb3VzZW92ZXInLCAnbW91c2Vtb3Zl
JywgJ21vdXNlb3V0Jyk7CiskaW50ZXJmYWNlTmFtZXNbJ0tleWJvYXJkRXZlbnQnXSA9IGFycmF5
KCdrZXlkb3duJywgJ2tleXVwJyk7CiskaW50ZXJmYWNlTmFtZXNbJ011dGF0aW9uRXZlbnQnXSA9
IGFycmF5KCdET01TdWJ0cmVlTW9kaWZpZWQnLCAnRE9NTm9kZUluc2VydGVkJywgJ0RPTU5vZGVS
ZW1vdmVkJywgJ0RPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50JywgJ0RPTU5vZGVJbnNlcnRlZElu
dG9Eb2N1bWVudCcsICdET01BdHRyTW9kaWZpZWQnLCAnRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVk
Jyk7CiskaW50ZXJmYWNlTmFtZXNbJ0V2ZW50J10gPSBhcnJheSgnbG9hZCcsICd1bmxvYWQnLCAn
YWJvcnQnLCAnZXJyb3InLCAnc2VsZWN0JywgJ2NoYW5nZScsICdzdWJtaXQnLCAncmVzZXQnKTsK
KyRpbnRlcmZhY2VOYW1lc1snTWVzc2FnZUV2ZW50J10gPSBhcnJheSgnbWVzc2FnZScpOworCitm
b3JlYWNoICgkaW50ZXJmYWNlTmFtZXMgYXMgJGludGVyZmFjZU5hbWUgPT4gJGV2ZW50VHlwZXMp
IHsKKyAgICBmb3JlYWNoICgkZXZlbnRUeXBlcyBhcyAkaW5kZXggPT4gJGV2ZW50VHlwZSkgewor
ICAgICAgICBzZW5kRXZlbnRUeXBlKCRldmVudFR5cGUpOworICAgIH0KK30KKworICAgIAorPz4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZG9tZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3Nh
bXBsZS1kb20tZXZlbnRzLWhlbHBlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2RvbWV2ZW50c291cmNlL3Jlc291cmNlcy9zYW1wbGUtZG9tLWV2ZW50cy1oZWxwZXIu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2RvbWV2ZW50c291cmNl
L3Jlc291cmNlcy9zYW1wbGUtZG9tLWV2ZW50cy1oZWxwZXIuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNDcgQEAKKwordmFyIGludGVyZmFjZU5hbWVzID0geworICAgICdVSUV2ZW50JzogWydE
T01Gb2N1c0luJywgJ0RPTUZvY3VzT3V0JywgJ2ZvY3VzJywgJ2JsdXInLCAncmVzaXplJywgJ3Nj
cm9sbCddLAorICAgICdUZXh0RXZlbnQnOiBbJ3RleHRJbnB1dCddLAorICAgICdNb3VzZUV2ZW50
JzogWydjbGljaycsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdtb3VzZW92ZXInLCAnbW91c2Vt
b3ZlJywgJ21vdXNlb3V0J10sCisgICAgJ0tleWJvYXJkRXZlbnQnOiBbJ2tleWRvd24nLCAna2V5
dXAnXSwKKyAgICAnTXV0YXRpb25FdmVudCc6IFsnRE9NU3VidHJlZU1vZGlmaWVkJywgJ0RPTU5v
ZGVJbnNlcnRlZCcsICdET01Ob2RlUmVtb3ZlZCcsICdET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVu
dCcsICdET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQnLCAnRE9NQXR0ck1vZGlmaWVkJywgJ0RP
TUNoYXJhY3RlckRhdGFNb2RpZmllZCddLAorICAgICdFdmVudCc6IFsnbG9hZCcsICd1bmxvYWQn
LCAnYWJvcnQnLCAnZXJyb3InLCAnc2VsZWN0JywgJ2NoYW5nZScsICdzdWJtaXQnLCAncmVzZXQn
XSwKKyAgICAnTWVzc2FnZUV2ZW50JzogWydtZXNzYWdlJ10KK307CisKK2Z1bmN0aW9uIGNyZWF0
ZUhhbmRsZXIoZXZlbnROYW1lLCBpbnRlcmZhY2VOYW1lKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9u
IChldmVudCkgeworICAgICAgICB2YXIgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgdmFyIGVyciA9
ICIiOworCisgICAgICAgIGlmIChldmVudC50eXBlICE9IGV2ZW50TmFtZSkgeworICAgICAgICAg
ICAgcGFzc2VkID0gZmFsc2U7CisgICAgICAgICAgICBlcnIgKz0gIkdvdCBpbnZhbGlkIGV2ZW50
IHR5cGU6IFwiIiArIGV2ZW50LnR5cGUgKyAiXCIuICI7CisgICAgICAgIH0gCisKKyAgICAgICAg
aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldmVudCkgIT0gIltvYmplY3QgIiAr
IGludGVyZmFjZU5hbWUgKyAiXSIpIHsKKyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAg
ICAgICAgICAgZXJyICs9ICJOb3QgYSAiICsgaW50ZXJmYWNlTmFtZSArICIsIGlzIGluc3RlYWQg
YSAiICsgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV2ZW50KSArICIuICI7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChldmVudFsnaW52YWxpZEF0dHJOYW1lJ10pIHsK
KyAgICAgICAgICAgIHBhc3NlZCA9IGZhbHNlOworICAgICAgICAgICAgZXJyICs9ICJXcm9uZ2x5
IGFsbG93ZWQgaW52YWxpZCBhdHRyaWJ1dGUgdG8gYmUgYXR0YWNoZWQgdG8gZXZlbnQuICI7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChldmVudC5idWJibGVzKSB7CisgICAgICAg
ICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGVyciArPSAiRXZlbnQgYnViYmxpbmcg
d3JvbmdseSBlbmFibGVkLiAiCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChldmVu
dC5jYW5jZWxhYmxlKSB7CisgICAgICAgICAgICBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IGVyciArPSAiRXZlbnQgY2FuY2VsYWJpbGl0eSB3cm9uZ2x5IGVuYWJsZWQuICI7CisgICAgICAg
IH0KKworICAgICAgICBpZiAocGFzc2VkKQorICAgICAgICAgICAgZXJyID0gIlBhc3NlZCI7CisK
KyAgICAgICAgbG9nKGV2ZW50TmFtZSArICI6ICIgKyBlcnIpOworICAgIH07Cit9Cg==
</data>
<flag name="review"
          id="6730"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29828</attachid>
            <date>2009-04-27 14:20:31 -0700</date>
            <delta_ts>2009-05-06 08:38:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>eventsource.patch</filename>
            <type>text/plain</type>
            <size>43252</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQyOTAz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDktMDQt
MjcgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZGVkIEV2
ZW50U291cmNlIHRvIHRoZSBidWlsZC4KKworICAgICAgICAqIGNvbmZpZ3VyZS5hYzoKKwogMjAw
OS0wNC0yNSAgSmFuIE1pY2hhZWwgQWxvbnpvICA8am1hbG9uem9Ad2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBjb25maWd1cmUuYWMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY29uZmlndXJlLmFjCShyZXZpc2lvbiA0Mjg4NSkKKysrIGNvbmZpZ3VyZS5hYwkod29y
a2luZyBjb3B5KQpAQCAtMzIwLDYgKzMyMCwxNCBAQCBBQ19BUkdfRU5BQkxFKGRhdGFiYXNlLAog
ICAgICAgICAgICAgICBbXSxbZW5hYmxlX2RhdGFiYXNlPSJ5ZXMiXSkKIEFDX01TR19SRVNVTFQo
WyRlbmFibGVfZGF0YWJhc2VdKQogCisjIGNoZWNrIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBzZXJ2
ZXItc2VudCBldmVudHMgc3VwcG9ydAorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJs
ZSBIVE1MNSBzZXJ2ZXItc2VudCBldmVudHMgc3VwcG9ydF0pCitBQ19BUkdfRU5BQkxFKGV2ZW50
c291cmNlLAorICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZXZlbnRzb3Vy
Y2VdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIEhUTUw1IHNlcnZlci1z
ZW50IGV2ZW50cyBzdXBwb3J0IFtkZWZhdWx0PW5vXV0pLAorICAgICAgICAgICAgICBbXSxbZW5h
YmxlX2V2ZW50c291cmNlPSJubyJdKQorQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9ldmVudHNvdXJj
ZV0pCisKICMgY2hlY2sgd2hldGhlciB0byBidWlsZCB3aXRoIGljb24gZGF0YWJhc2Ugc3VwcG9y
dAogQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBpY29uIGRhdGFiYXNlIHN1cHBv
cnRdKQogQUNfQVJHX0VOQUJMRShpY29uX2RhdGFiYXNlLApAQCAtNjM3LDYgKzY0NSw3IEBAIEFN
X0NPTkRJVElPTkFMKFtFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcKIEFNX0NPTkRJVElPTkFMKFtF
TkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TXSxbdGVzdCAiJGVuYWJsZV9vZmZsaW5lX3dl
Yl9hcHBsaWNhdGlvbnMiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9ET01fU1RP
UkFHRV0sW3Rlc3QgIiRlbmFibGVfZG9tX3N0b3JhZ2UiID0gInllcyJdKQogQU1fQ09ORElUSU9O
QUwoW0VOQUJMRV9EQVRBQkFTRV0sW3Rlc3QgIiRlbmFibGVfZGF0YWJhc2UiID0gInllcyJdKQor
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV9FVkVOVFNPVVJDRV0sW3Rlc3QgIiRlbmFibGVfZXZlbnRz
b3VyY2UiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9JQ09OREFUQUJBU0VdLFt0
ZXN0ICIkZW5hYmxlX2ljb25fZGF0YWJhc2UiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VO
QUJMRV9YUEFUSF0sW3Rlc3QgIiRlbmFibGVfeHBhdGgiID0gInllcyJdKQogQU1fQ09ORElUSU9O
QUwoW0VOQUJMRV9YU0xUXSxbdGVzdCAiJGVuYWJsZV94c2x0IiA9ICJ5ZXMiXSkKQEAgLTY4Nyw2
ICs2OTYsNyBAQCBGZWF0dXJlczoKICBIVE1MNSBjaGFubmVsIG1lc3NhZ2luZyBzdXBwb3J0ICAg
ICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfY2hhbm5lbF9tZXNzYWdpbmcKICBIVE1M
NSBjbGllbnQtc2lkZSBzZXNzaW9uIGFuZCBwZXJzaXN0ZW50IHN0b3JhZ2Ugc3VwcG9ydCA6ICRl
bmFibGVfZG9tX3N0b3JhZ2UKICBIVE1MNSBjbGllbnQtc2lkZSBkYXRhYmFzZSBzdG9yYWdlIHN1
cHBvcnQgICAgICAgICAgICAgICA6ICRlbmFibGVfZGF0YWJhc2UKKyBIVE1MNSBzZXJ2ZXItc2Vu
dCBldmVudHMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZXZlbnRz
b3VyY2UKICBIVE1MNSB2aWRlbyBlbGVtZW50IHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6ICRlbmFibGVfdmlkZW8KICBJY29uIGRhdGFiYXNlIHN1cHBvcnQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfaWNvbl9kYXRhYmFzZQogIFNWRyBz
dXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVu
YWJsZV9zdmcKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiA0MjkwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMDktMDQtMjcgIEFkYW0gQmVyZ2t2aXN0ICA8YWRh
bS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFdmVudFNvdXJj
ZSBvYmplY3QuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRv
dzo6ZXZlbnRTb3VyY2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25z
dHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNv
cmU6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RFdmVudFNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjptYXJrKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmNsYXNzSW5mbyk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZTo6bWFyayk6CisgICAgICAgIChXZWJDb3Jl
OjpKU0V2ZW50U291cmNlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RXZlbnRTb3VyY2U6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0V2ZW50VGFyZ2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpldmVu
dFNvdXJjZSk6CisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKiBkb20vRXZl
bnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnRvRXZlbnRTb3Vy
Y2UpOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIHBhZ2UvRE9NV2lu
ZG93LmlkbDoKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRTb3VyY2U6On5FdmVudFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJj
ZTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c2NoZWR1bGVSZWNv
bm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnJlY29ubmVjdFRpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnVybCk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFNvdXJjZTo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNv
dXJjZTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6YWRkRXZl
bnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlzcGF0Y2hFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFNvdXJjZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6
ZGlkRmFpbFJlZGlyZWN0Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnBh
cnNlRXZlbnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRpc3BhdGNo
R2VuZXJpY0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaE1l
c3NhZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c3RvcCk6CisgICAg
ICAgICogcGFnZS9FdmVudFNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
U291cmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6Oik6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c2V0T25vcGVuKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50U291cmNlOjpvbm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNl
dE9ubWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6b25tZXNzYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpzZXRPbmVycm9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50U291cmNlOjpvbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291
cmNlOjp0b0V2ZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpldmVu
dExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cmVmRXZlbnRUYXJn
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRlcmVmRXZlbnRUYXJnZXQpOgor
ICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJz
L1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDA5LTA0LTI3ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiA0Mjg4NSkKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTIxOCw2ICsyMTgsNyBAQCBJRExfQklORElOR1MgKz0gXAogCVdlYkNvcmUvcGFnZS9Db29yZGlu
YXRlcy5pZGwgXAogCVdlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsIFwKIAlXZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmlkbCBcCisJV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlkbCBcCiAJV2Vi
Q29yZS9wYWdlL0dlb2xvY2F0aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmlk
bCBcCiAJV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsIFwKQEAgLTI4Miw2ICsyODMsOSBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAg
XAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBcCiAJV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50U291cmNlQ29uc3RydWN0b3IuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRT
b3VyY2VDb25zdHJ1Y3Rvci5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VD
dXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0QmFzZS5oIFwKQEAgLTExOTMsNiArMTE5Nyw4IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIFwKIAlXZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIFwKKwlXZWJD
b3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwIFwKKwlXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaCBc
CiAJV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9wYWdlL0ZvY3VzRGlyZWN0aW9uLmggXApAQCAtMjAw
NCw2ICsyMDEwLDE2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiBlbmRpZiAjIEVORCBFTkFCTEVf
REFUQUJBU0UKIAogIyAtLS0tCisjIEhUTUw1IHNlcnZlci1zZW50IGV2ZW50cworIyAtLS0tCitp
ZiBFTkFCTEVfRVZFTlRTT1VSQ0UKK0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJM
RV9FVkVOVFNPVVJDRT0xCisKK3dlYmNvcmVfY3BwZmxhZ3MgKz0gXAorCS1ERU5BQkxFX0VWRU5U
U09VUkNFPTEKK2VuZGlmICMgRU5BQkxFX0VWRU5UU09VUkNFCisKKyMgLS0tLQogIyBIVE1MNSBj
bGllbnQtc2lkZSBzZXNzaW9uIGFuZCBwZXJzaXN0ZW50IHN0b3JhZ2UKICMgLS0tLQogaWYgRU5B
QkxFX0RPTV9TVE9SQUdFCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNDI4ODUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
IkpTRE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiSlNIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSlNJbWFnZUNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiSlNMb2NhdGlvbi5oIgpAQCAtMjE3LDYgKzIxOCwxMyBAQCBKU1ZhbHVlUHRyIEpT
RE9NV2luZG93OjpldmVudChFeGVjU3RhdGUqCiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZXZlbnQp
OwogfQogCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorSlNWYWx1ZVB0ciBKU0RPTVdpbmRvdzo6
ZXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBnZXRET01D
b25zdHJ1Y3RvcjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworfQorI2Vu
ZGlmCisKIEpTVmFsdWVQdHIgSlNET01XaW5kb3c6OmltYWdlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNJbWFnZUNvbnN0cnVjdG9yPihl
eGVjLCB0aGlzKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3Vy
Y2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAg
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJp
Y3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAg
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQor
CisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50U291cmNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNFdmVudFNv
dXJjZS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0FTU0VSVF9DTEFTU19GSVRTX0lOX0NFTEwoSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKTsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRXZl
bnRTb3VyY2VDb250cnVjdG9yIiwgMCwgMCwgMCB9OworCitKU0V2ZW50U291cmNlQ29uc3RydWN0
b3I6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01PYmplY3QoSlNFdmVudFNvdXJjZUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5vYmpl
Y3RQcm90b3R5cGUoKSkpCisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QpCit7Cisg
ICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTRXZlbnRTb3Vy
Y2VQcm90b3R5cGU6OnNlbGYoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSwgTm9u
ZSk7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
cjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cit9CisKK3N0YXRpYyBKU09iamVjdCog
Y29uc3RydWN0RXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0
b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBh
cmd1bWVudHMiKTsKKworICAgIFVTdHJpbmcgdXJsID0gYXJncy5hdChleGVjLCAwKS50b1N0cmlu
ZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPEV2ZW50U291cmNlPiBl
dmVudFNvdXJjZSA9IEV2ZW50U291cmNlOjpjcmVhdGUodXJsLCBzdGF0aWNfY2FzdDxKU0V2ZW50
U291cmNlQ29uc3RydWN0b3IqPihjb25zdHJ1Y3RvciktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisKKyAgICByZXR1cm4gYXNP
YmplY3QodG9KUyhleGVjLCBldmVudFNvdXJjZS5yZWxlYXNlKCkpKTsKK30KKworQ29uc3RydWN0
VHlwZSBKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNvbnN0cnVjdEV2ZW50U291cmNlOworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsK
K30KKwordm9pZCBKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6Om1hcmsoKQoreworICAgIERPTU9i
amVjdDo6bWFyaygpOworICAgIGlmICghbV9nbG9iYWxPYmplY3QtPm1hcmtlZCgpKQorICAgICAg
ICBtX2dsb2JhbE9iamVjdC0+bWFyaygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0UpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNzc29uIEFCCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yX2gK
KyNkZWZpbmUgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yX2gKKworI2lmIEVOQUJMRShFVkVOVFNP
VVJDRSkKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygp
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0
Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyAgICAgICAgdmlydHVhbCBjb25z
dCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQor
CisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKKyAgICB9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0UpCisK
KyNlbmRpZiAvLyBKU0V2ZW50U291cmNlQ29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRVZF
TlRTT1VSQ0UpCisKKyNpbmNsdWRlICJKU0V2ZW50U291cmNlLmgiCisKKyNpbmNsdWRlICJBdG9t
aWNTdHJpbmcuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0V2ZW50LmgiCisjaW5jbHVk
ZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEpTRXZlbnRTb3Vy
Y2U6Om1hcmsoKQoreworICAgIERPTU9iamVjdDo6bWFyaygpOworCisgICAgbWFya0lmTm90TnVs
bChtX2ltcGwtPm9ub3BlbigpKTsKKyAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25tZXNzYWdl
KCkpOworICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbmVycm9yKCkpOworCisgICAgdHlwZWRl
ZiBFdmVudFNvdXJjZTo6RXZlbnRMaXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAg
dHlwZWRlZiBFdmVudFNvdXJjZTo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7CisgICAg
RXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVudExpc3RlbmVy
cygpOworICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVu
dExpc3RlbmVycy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21h
cEl0ZXIpIHsKKyAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9
IG1hcEl0ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQo
KTsgKyt2ZWNJdGVyKQorICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24oKTsK
KyAgICB9Cit9CisKK0pTVmFsdWVQdHIgSlNFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcihF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICBSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9
IGdsb2JhbE9iamVjdC0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGFyZ3MuYXQoZXhlYywg
MSkpOworICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KGV4ZWMsIDApLnRvU3RyaW5nKGV4
ZWMpLCBsaXN0ZW5lci5yZWxlYXNlKCksIGFyZ3MuYXQoZXhlYywgMikudG9Cb29sZWFuKGV4ZWMp
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZVB0ciBKU0V2ZW50U291
cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK3sKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUds
b2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEpTRXZlbnRM
aXN0ZW5lciogbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRKU0V2ZW50TGlzdGVuZXIoYXJn
cy5hdChleGVjLCAxKSk7CisgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoZXhlYywg
MCkudG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLCBhcmdzLmF0KGV4ZWMsIDIpLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gNDI4ODUpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxMSBA
QAogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RV
cGxvYWQuaCIKIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKyNpbmNsdWRlICJFdmVudFNvdXJj
ZS5oIgorI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2UuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE9G
RkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgi
CiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlLmgiCkBAIC02NSw2ICs3MCwxMSBAQCBK
U1ZhbHVlUHRyIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBFdmVudFRhCiAgICAgaWYgKCF0YXJnZXQp
CiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0Up
CisgICAgaWYgKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHRhcmdldC0+dG9FdmVudFNvdXJj
ZSgpKQorICAgICAgICByZXR1cm4gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihleGVjLT5nbG9i
YWxEYXRhKCksIGV2ZW50U291cmNlKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAgICAv
LyBTVkdFbGVtZW50SW5zdGFuY2Ugc3VwcG9ydHMgYm90aCB0b1NWR0VsZW1lbnRJbnN0YW5jZSBh
bmQgdG9Ob2RlIHNpbmNlIHNvIG11Y2ggbW91c2UgaGFuZGxpbmcgY29kZSBkZXBlbmRzIG9uIHRv
Tm9kZSByZXR1cm5pbmcgYSB2YWxpZCBub2RlLgogICAgIGlmIChTVkdFbGVtZW50SW5zdGFuY2Uq
IGluc3RhbmNlID0gdGFyZ2V0LT50b1NWR0VsZW1lbnRJbnN0YW5jZSgpKQpAQCAtMTE5LDYgKzEy
OSwxMCBAQCBFdmVudFRhcmdldCogdG9FdmVudFRhcmdldChKU0M6OkpTVmFsdWVQCiAgICAgaWYg
KHZhbHVlLmlzT2JqZWN0KCZKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwo
KTsKIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKyAgICBDT05WRVJUX1RPX0VWRU5UX1RBUkdF
VChFdmVudFNvdXJjZSkKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUykKICAgICBDT05WRVJUX1RPX0VWRU5UX1RBUkdFVChET01BcHBsaWNhdGlvbkNhY2hlKQog
I2VuZGlmCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0
b20uY3BwCShyZXZpc2lvbiA0Mjg4NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTAgQEAKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aD4KIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKyNpbmNsdWRlICJKU0V2ZW50U291cmNlQ29u
c3RydWN0b3IuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC03NSw2ICs3OSwxMyBAQCB2b2lkIEpTV29ya2VyQ29udGV4dDo6c2V0U2Vs
ZihFeGVjU3RhdGUqCiAgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgInNlbGYiKSwgdmFs
dWUpOwogfQogCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorSlNWYWx1ZVB0ciBKU1dvcmtlckNv
bnRleHQ6OmV2ZW50U291cmNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsK
K30KKyNlbmRpZgorCiBKU1ZhbHVlUHRyIEpTV29ya2VyQ29udGV4dDo6eG1sSHR0cFJlcXVlc3Qo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxK
U1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwpJbmRleDogV2ViQ29yZS9k
b20vRXZlbnROYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAko
cmV2aXNpb24gNDI4ODUpCisrKyBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcxLDYgKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKG9ic29s
ZXRlKSBcCiAgICAgbWFjcm8ob2ZmbGluZSkgXAogICAgIG1hY3JvKG9ubGluZSkgXAorICAgIG1h
Y3JvKG9wZW4pIFwKICAgICBtYWNybyhvdmVyZmxvd2NoYW5nZWQpIFwKICAgICBtYWNybyhwYXN0
ZSkgXAogICAgIG1hY3JvKHJlYWR5c3RhdGVjaGFuZ2UpIFwKSW5kZXg6IFdlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJ
KHJldmlzaW9uIDQyODg1KQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQCBFdmVudFRhcmdldDo6fkV2ZW50VGFyZ2V0KCkKIHsK
IH0KIAorRXZlbnRTb3VyY2UqIEV2ZW50VGFyZ2V0Ojp0b0V2ZW50U291cmNlKCkKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKwogTm9kZSogRXZlbnRUYXJnZXQ6OnRvTm9kZSgpCiB7CiAgICAgcmV0dXJu
IDA7CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDQyODg1KQorKysgV2ViQ29yZS9kb20vRXZl
bnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgRE9NV2luZG93OwogICAgIGNsYXNzIEV2ZW50OwogICAgIGNsYXNz
IEV2ZW50TGlzdGVuZXI7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CiAgICAgY2xhc3MgTWVzc2Fn
ZVBvcnQ7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7CkBA
IC01NCw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEV2ZW50VGFy
Z2V0IHsKICAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgRXZlbnRTb3VyY2UqIHRvRXZlbnRT
b3VyY2UoKTsKICAgICAgICAgdmlydHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpOwog
ICAgICAgICB2aXJ0dWFsIE5vZGUqIHRvTm9kZSgpOwogICAgICAgICB2aXJ0dWFsIERPTVdpbmRv
dyogdG9ET01XaW5kb3coKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiA0Mjg4NSkKKysr
IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zOTAsNiArMzkw
LDEwIEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VDb25zdHJ1Y3Rv
ciBSYW5nZTsKICAgICAgICAgYXR0cmlidXRlIFJhbmdlRXhjZXB0aW9uQ29uc3RydWN0b3IgUmFu
Z2VFeGNlcHRpb247CiAKKyNpZiBFTkFCTEVfRVZFTlRTT1VSQ0UKKyAgICAgICAgYXR0cmlidXRl
IFtKU0NDdXN0b21HZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRTb3VyY2U7IC8v
IFVzYWJsZSB3aXRoIG5ldyB0aGUgb3BlcmF0b3IKKyNlbmRpZgorCiAgICAgICAgIC8vIE1vemls
bGEgaGFzIGEgc2VwYXJhdGUgWE1MRG9jdW1lbnQgb2JqZWN0IGZvciBYTUwgZG9jdW1lbnRzLiAK
ICAgICAgICAgLy8gV2UganVzdCB1c2UgRG9jdW1lbnQgZm9yIHRoaXMuCiAgICAgICAgIGF0dHJp
YnV0ZSBEb2N1bWVudENvbnN0cnVjdG9yIFhNTERvY3VtZW50OwpJbmRleDogV2ViQ29yZS9wYWdl
L0V2ZW50U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2Uu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nz
b24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKEVWRU5UU09VUkNFKQorCisjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKKworI2lu
Y2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIk1lc3Nh
Z2VFdmVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIK
KyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y29uc3QgdW5zaWduZWQgbG9uZyBsb25nIEV2ZW50U291cmNlOjpEZWZhdWx0UmVjb25uZWN0RGVs
YXkgPSAzMDAwOworCitFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmws
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAg
IDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX3N0YXRlKENPTk5FQ1RJ
TkcpCisgICAgLCBtX3JlY29ubmVjdFRpbWVyKHRoaXMsICZFdmVudFNvdXJjZTo6cmVjb25uZWN0
VGltZXJGaXJlZCkKKyAgICAsIG1fZmFpbFNpbGVudGx5KGZhbHNlKQorICAgICwgbV9yZWNvbm5l
Y3REZWxheShEZWZhdWx0UmVjb25uZWN0RGVsYXkpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkg
fHwgIShtX3VybCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCkpLmlzVmFsaWQoKSkgeworICAg
ICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklY
TUU6IHNob3VsZCBzdXBwb3J0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cworICAgIGlmICghc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1fdXJsKSkg
eworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fb3JpZ2luID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigp
LT50b1N0cmluZygpOworICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZSgidGV4dC9wbGFpbiIsICJVVEYtOCIpOworCisgICAgY29ubmVjdCgpOworfQorCitFdmVudFNv
dXJjZTo6fkV2ZW50U291cmNlKCkKK3sKK30KKwordm9pZCBFdmVudFNvdXJjZTo6Y29ubmVjdCgp
Cit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV91cmwpOworICAgIHJlcXVlc3Quc2V0
SFRUUE1ldGhvZCgiR0VUIik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2Vw
dCIsICJ0ZXh0L2V2ZW50LXN0cmVhbSIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxk
KCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIik7CisgICAgaWYgKCFtX2xhc3RFdmVudElkLmlz
RW1wdHkoKSkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkxhc3QtRXZlbnQt
SUQiLCBtX2xhc3RFdmVudElkKTsKKyAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNy
ZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIHJlcXVlc3QsIFNlbmRMb2FkQ2Fs
bGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7CisgICAg
c2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpzY2hlZHVs
ZVJlY29ubmVjdCgpCit7CisgICAgbV9zdGF0ZSA9IENPTk5FQ1RJTkc7CisgICAgbV9yZWNvbm5l
Y3RUaW1lci5zdGFydE9uZVNob3QobV9yZWNvbm5lY3REZWxheSAvIDEwMDApOworfQorCit2b2lk
IEV2ZW50U291cmNlOjpyZWNvbm5lY3RUaW1lckZpcmVkKFRpbWVyPEV2ZW50U291cmNlPiopCit7
CisgICAgY29ubmVjdCgpOworfQorCitTdHJpbmcgRXZlbnRTb3VyY2U6OnVybCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fdXJsLnN0cmluZygpOworfQorCitFdmVudFNvdXJjZTo6U3RhdGUgRXZl
bnRTb3VyY2U6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlOworfQor
Cit2b2lkIEV2ZW50U291cmNlOjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBD
TE9TRUQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3JlY29ubmVjdFRpbWVyLmlzQWN0
aXZlKCkpCisgICAgICAgIG1fcmVjb25uZWN0VGltZXIuc3RvcCgpOworCisgICAgbV9zdGF0ZSA9
IENMT1NFRDsKKyAgICBtX2ZhaWxTaWxlbnRseSA9IHRydWU7CisgICAgbV9sb2FkZXItPmNhbmNl
bCgpOworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBFdmVudFNvdXJjZTo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjphZGRFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCit7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAo
aXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9y
IGxpc3RlbmVyczsKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKKyAg
ICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxp
c3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3Rl
bmVySXRlcikgeworICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5l
cikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaXN0ZW5l
cnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChl
dmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgfQorfQorCit2b2lkIEV2ZW50U291cmNlOjpyZW1v
dmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyKiBldmVudExpc3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVy
YXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0
ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGlz
dGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAgICBmb3IgKExpc3RlbmVy
VmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsg
bGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAg
ICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikgeworICAgICAgICAgICAgbGlz
dGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5lcnMuYmVnaW4oKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRXZlbnRTb3VyY2U6OmRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmICghZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIEV2ZW50TGlzdGVuZXIqIGF0dHJpYnV0ZUxpc3Rl
bmVyID0gbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkpLmdldCgpOworICAg
IGlmIChhdHRyaWJ1dGVMaXN0ZW5lcikgeworICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMp
OworICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgYXR0cmli
dXRlTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSk7CisgICAgfQorCisg
ICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2
ZW50LT50eXBlKCkpOworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxp
c3RlbmVySXRlciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3Rl
bmVyc0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJn
ZXQodGhpcyk7CisgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAg
ICBsaXN0ZW5lckl0ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOwor
ICAgIH0KKworICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKK30KKwordm9p
ZCBFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIGludCBzdGF0dXNDb2RlID0gcmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKTsKKyAgICBpZiAoc3RhdHVzQ29kZSA9PSAyMDAgJiYgcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKCJDb250ZW50LVR5cGUiKSA9PSAidGV4dC9ldmVudC1zdHJlYW0iKSB7CisgICAgICAgIG1f
c3RhdGUgPSBPUEVOOworICAgICAgICBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCku
b3BlbkV2ZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCB8
fCBzdGF0dXNDb2RlID4gMjk5KQorICAgICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICAg
ICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAgIH0KK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlk
UmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBhcHBlbmQo
bV9yZWNlaXZlQnVmLCBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgpKTsKKyAgICBwYXJz
ZUV2ZW50U3RyZWFtKCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpZEZpbmlzaExvYWRpbmco
dW5zaWduZWQgbG9uZykKK3sKKyAgICBpZiAobV9yZWNlaXZlQnVmLnNpemUoKSA+IDAgfHwgbV9k
YXRhLnNpemUoKSA+IDApIHsKKyAgICAgICAgYXBwZW5kKG1fcmVjZWl2ZUJ1ZiwgIlxuXG4iKTsK
KyAgICAgICAgcGFyc2VFdmVudFN0cmVhbSgpOworICAgIH0KKyAgICBtX3N0YXRlID0gQ09OTkVD
VElORzsKKyAgICBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7
CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisKKyAgICBpZiAobV9zdGF0ZSAhPSBD
TE9TRUQpCisgICAgICAgIHNjaGVkdWxlUmVjb25uZWN0KCk7Cit9CisKK3ZvaWQgRXZlbnRTb3Vy
Y2U6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgaWYgKCFtX2Zh
aWxTaWxlbnRseSkKKyAgICAgICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnROYW1lcygpLmVy
cm9yRXZlbnQpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworCisgICAgaW50IGNh
bmNlbGVkID0gZXJyb3IuaXNDYW5jZWxsYXRpb24oKTsKKyAgICBpZiAoKChtX3N0YXRlID09IENP
Tk5FQ1RJTkcpICYmIGNhbmNlbGVkKSB8fCAoKG1fc3RhdGUgPT0gT1BFTikgJiYgIWNhbmNlbGVk
KSkKKyAgICAgICAgc2NoZWR1bGVSZWNvbm5lY3QoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6
ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQoreworICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgbV9s
b2FkZXItPmNhbmNlbCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpwYXJzZUV2ZW50U3RyZWFt
KCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCBsaW5lRW5kID0gLTE7CisgICAgICAg
IGludCBmaWVsZEVuZCA9IC0xOworICAgICAgICBpbnQgY2FycmlnZVJldHVybiA9IDA7CisgICAg
ICAgIHVuc2lnbmVkIGludCBidWZTaXplID0gbV9yZWNlaXZlQnVmLnNpemUoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGxpbmVFbmQgPCAwICYmIGkgPCBidWZTaXplOyBpKysp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9yZWNlaXZlQnVmW2ldKSB7CisgICAgICAgICAgICBj
YXNlICc6JzoKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRFbmQgPCAwKQorICAgICAgICAgICAg
ICAgICAgICBmaWVsZEVuZCA9IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICdcbic6CisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIG1fcmVjZWl2ZUJ1Zltp
IC0gMV0gPT0gJ1xyJykgeworICAgICAgICAgICAgICAgICAgICBjYXJyaWdlUmV0dXJuKys7Cisg
ICAgICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbGluZUVuZCA9IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobGluZUVuZCA8IDApCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBpZiAoIWxpbmVFbmQpIHsKKyAgICAgICAgICAgIGlmICghbV9kYXRhLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBkaXNwYXRjaE1lc3NhZ2VFdmVudCgpOworICAgICAgICAg
ICAgaWYgKCFtX2V2ZW50TmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9ldmVudE5h
bWUgPSAiIjsKKyAgICAgICAgfSBlbHNlIGlmIChmaWVsZEVuZCkgeworICAgICAgICAgICAgYm9v
bCBub1ZhbHVlID0gZmllbGRFbmQgPCAwOworCisgICAgICAgICAgICBTdHJpbmcgZmllbGQobV9y
ZWNlaXZlQnVmLmRhdGEoKSwgbm9WYWx1ZSA/IGxpbmVFbmQgOiBmaWVsZEVuZCk7CisgICAgICAg
ICAgICBpbnQgcmVtb3ZlTGVuOworICAgICAgICAgICAgaWYgKG5vVmFsdWUpCisgICAgICAgICAg
ICAgICAgcmVtb3ZlTGVuID0gbGluZUVuZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fcmVjZWl2
ZUJ1ZltmaWVsZEVuZCArIDFdICE9ICcgJykKKyAgICAgICAgICAgICAgICByZW1vdmVMZW4gPSBm
aWVsZEVuZCArIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVtb3ZlTGVu
ID0gZmllbGRFbmQgKyAyOworICAgICAgICAgICAgbV9yZWNlaXZlQnVmLnJlbW92ZSgwLCByZW1v
dmVMZW4pOworICAgICAgICAgICAgbGluZUVuZCAtPSByZW1vdmVMZW47CisKKyAgICAgICAgICAg
IGlmIChmaWVsZCA9PSAiZGF0YSIpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kYXRhLnNpemUo
KSA+IDApCisgICAgICAgICAgICAgICAgICAgIG1fZGF0YS5hcHBlbmQoJ1xuJyk7CisgICAgICAg
ICAgICAgICAgaWYgKCFub1ZhbHVlKQorICAgICAgICAgICAgICAgICAgICBtX2RhdGEuYXBwZW5k
KG1fcmVjZWl2ZUJ1Zi5kYXRhKCksIGxpbmVFbmQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChm
aWVsZCA9PSAiZXZlbnQiKQorICAgICAgICAgICAgICAgIG1fZXZlbnROYW1lID0gKCFub1ZhbHVl
ICYmIGxpbmVFbmQpID8gU3RyaW5nKG1fcmVjZWl2ZUJ1Zi5kYXRhKCksIGxpbmVFbmQpIDogIiI7
CisgICAgICAgICAgICBlbHNlIGlmIChmaWVsZCA9PSAiaWQiKQorICAgICAgICAgICAgICAgIG1f
bGFzdEV2ZW50SWQgPSAhbm9WYWx1ZSA/IFN0cmluZyhtX3JlY2VpdmVCdWYuZGF0YSgpLCBsaW5l
RW5kKSA6ICIiOworICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQgPT0gInJldHJ5IikgeworICAg
ICAgICAgICAgICAgIGlmIChub1ZhbHVlKQorICAgICAgICAgICAgICAgICAgICBtX3JlY29ubmVj
dERlbGF5ID0gRGVmYXVsdFJlY29ubmVjdERlbGF5OworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUobV9yZWNlaXZlQnVmLmRhdGEoKSwgbGlu
ZUVuZCk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgb2s7CisgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGxvbmcgbG9uZyByZXRyeSA9IHZhbHVlLnRvVUludDY0KCZvayk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVjb25uZWN0
RGVsYXkgPSByZXRyeTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgbV9yZWNlaXZlQnVmLnJlbW92ZSgwLCBsaW5lRW5kICsgY2FycmlnZVJldHVy
biArIDEpOworICAgfQorfQorCit2b2lkIEV2ZW50U291cmNlOjpkaXNwYXRjaEdlbmVyaWNFdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpCit7CisgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBF
dmVudDo6Y3JlYXRlKHR5cGUsIGZhbHNlLCBmYWxzZSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7CisgICAgQVNTRVJUKCFl
Yyk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpc3BhdGNoTWVzc2FnZUV2ZW50KCkKK3sKKyAg
ICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOworICAg
IFN0cmluZyBldmVudE5hbWUgPSBtX2V2ZW50TmFtZS5pc0VtcHR5KCkgPyBldmVudE5hbWVzKCku
bWVzc2FnZUV2ZW50LnN0cmluZygpIDogbV9ldmVudE5hbWU7CisgICAgZXZ0LT5pbml0TWVzc2Fn
ZUV2ZW50KGV2ZW50TmFtZSwgZmFsc2UsIGZhbHNlLCBTdHJpbmc6OmFkb3B0KG1fZGF0YSksIG1f
b3JpZ2luLCBtX2xhc3RFdmVudElkLCAwLCAwKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsK
K30KKwordm9pZCBFdmVudFNvdXJjZTo6c3RvcCgpCit7CisgICAgZGlzY29ubmVjdCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0Up
CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvRXZlbnRTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudFNv
dXJjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV2
ZW50U291cmNlX2gKKyNkZWZpbmUgRXZlbnRTb3VyY2VfaAorCisjaWYgRU5BQkxFKEVWRU5UU09V
UkNFKQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQXRvbWljU3Ry
aW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNp
bmNsdWRlICJUaW1lci5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIFJlc291cmNlUmVz
cG9uc2U7CisgICAgY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKKyAgICBjbGFzcyBUaHJlYWRh
YmxlTG9hZGVyOworCisgICAgY2xhc3MgRXZlbnRTb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxF
dmVudFNvdXJjZT4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHJpdmF0ZSBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEV2ZW50U291cmNlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgRXZlbnRTb3VyY2UodXJsLCBjb250ZXh0LCBlYykpOyB9CisgICAgICAg
IHZpcnR1YWwgfkV2ZW50U291cmNlKCk7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGxvbmcgbG9uZyBEZWZhdWx0UmVjb25uZWN0RGVsYXk7CisKKyAgICAgICAgU3RyaW5nIHVybCgp
IGNvbnN0OworCisgICAgICAgIGVudW0gU3RhdGUgeworICAgICAgICAgICAgQ09OTkVDVElORyA9
IDAsCisgICAgICAgICAgICBPUEVOID0gMSwKKyAgICAgICAgICAgIENMT1NFRCA9IDIsCisgICAg
ICAgIH07CisKKyAgICAgICAgU3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgICAgIHZv
aWQgc2V0T25vcGVuKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBt
X2F0dHJpYnV0ZUxpc3RlbmVycy5hZGQoZXZlbnROYW1lcygpLm9wZW5FdmVudCwgZXZlbnRMaXN0
ZW5lcik7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25vcGVuKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZXMoKS5vcGVuRXZlbnQpLmdldCgpOyB9
CisKKyAgICAgICAgdm9pZCBzZXRPbm1lc3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlTGlzdGVuZXJzLmFkZChldmVudE5hbWVzKCkubWVz
c2FnZUV2ZW50LCBldmVudExpc3RlbmVyKTsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1l
c3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZUxpc3RlbmVycy5nZXQoZXZlbnROYW1l
cygpLm1lc3NhZ2VFdmVudCkuZ2V0KCk7IH0KKworICAgICAgICB2b2lkIHNldE9uZXJyb3IoUGFz
c1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlTGlzdGVu
ZXJzLmFkZChldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgZXZlbnRMaXN0ZW5lcik7IH0KKyAgICAg
ICAgRXZlbnRMaXN0ZW5lciogb25lcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlTGlz
dGVuZXJzLmdldChldmVudE5hbWVzKCkuZXJyb3JFdmVudCkuZ2V0KCk7IH0KKworICAgICAgICB2
b2lkIGRpc2Nvbm5lY3QoKTsKKworICAgICAgICB1c2luZyBSZWZDb3VudGVkPEV2ZW50U291cmNl
Pjo6cmVmOworICAgICAgICB1c2luZyBSZWZDb3VudGVkPEV2ZW50U291cmNlPjo6ZGVyZWY7CisK
KyAgICAgICAgdmlydHVhbCBFdmVudFNvdXJjZSogdG9FdmVudFNvdXJjZSgpIHsgcmV0dXJuIHRo
aXM7IH0KKyAgICAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkgY29uc3Q7CisKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2
ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxB
dG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsKKworICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50
VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0
dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYp
OworICAgICAgICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBt
X2V2ZW50TGlzdGVuZXJzOyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAg
IHByaXZhdGU6CisgICAgICAgIEV2ZW50U291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYyk7CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFs
IHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
OworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2ln
bmVkIGxvbmcpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygp
OworCisgICAgICAgIHZvaWQgY29ubmVjdCgpOworICAgICAgICB2b2lkIHNjaGVkdWxlUmVjb25u
ZWN0KCk7CisgICAgICAgIHZvaWQgcmVjb25uZWN0VGltZXJGaXJlZChUaW1lcjxFdmVudFNvdXJj
ZT4qKTsKKyAgICAgICAgdm9pZCBwYXJzZUV2ZW50U3RyZWFtKCk7CisgICAgICAgIHZvaWQgZGlz
cGF0Y2hHZW5lcmljRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKKyAgICAgICAgdm9p
ZCBkaXNwYXRjaE1lc3NhZ2VFdmVudCgpOworCisgICAgICAgIEtVUkwgbV91cmw7CisgICAgICAg
IFN0YXRlIG1fc3RhdGU7CisKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxF
dmVudExpc3RlbmVyPiA+IG1fYXR0cmlidXRlTGlzdGVuZXJzOworICAgICAgICBFdmVudExpc3Rl
bmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOworCisgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VE
ZWNvZGVyPiBtX2RlY29kZXI7CisgICAgICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xv
YWRlcjsKKyAgICAgICAgVGltZXI8RXZlbnRTb3VyY2U+IG1fcmVjb25uZWN0VGltZXI7CisgICAg
ICAgIFZlY3RvcjxVQ2hhcj4gbV9yZWNlaXZlQnVmOworICAgICAgICBib29sIG1fZmFpbFNpbGVu
dGx5OworCisgICAgICAgIFN0cmluZyBtX2V2ZW50TmFtZTsKKyAgICAgICAgVmVjdG9yPFVDaGFy
PiBtX2RhdGE7CisgICAgICAgIFN0cmluZyBtX2xhc3RFdmVudElkOworICAgICAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgbV9yZWNvbm5lY3REZWxheTsKKyAgICAgICAgU3RyaW5nIG1fb3JpZ2luOwor
ICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVO
VFNPVVJDRSkKKworI2VuZGlmIC8vIEV2ZW50U291cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlk
bAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24g
QUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRl
cmZhY2UgW0N1c3RvbU1hcmtGdW5jdGlvbiwgQ29uZGl0aW9uYWw9RVZFTlRTT1VSQ0VdIEV2ZW50
U291cmNlIHsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIFVSTDsKKwor
ICAgICAgICAvLyByZWFkeSBzdGF0ZQorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05O
RUNUSU5HID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgT1BFTiA9IDE7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENMT1NFRCA9IDI7CisgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBsb25nIHJlYWR5U3RhdGU7CisKKyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAg
ICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVu
dExpc3RlbmVyIG9ubWVzc2FnZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25l
cnJvcjsKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0KCk7CisKKyAgICAgICAgLy8gRXZlbnRUYXJn
ZXQgaW50ZXJmYWNlCisgICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBE
T01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
RXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCByZW1v
dmVFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7
CisgICAgICAgIGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAg
ICByYWlzZXMoRXZlbnRFeGNlcHRpb24pOworCisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDQyODg1KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtl
ckNvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw5IEBAIG1vZHVsZSB0aHJl
YWRzIHsKICAgICAgICAgYXR0cmlidXRlIE1lc3NhZ2VFdmVudENvbnN0cnVjdG9yIE1lc3NhZ2VF
dmVudDsKICAgICAgICAgYXR0cmlidXRlIFdvcmtlckxvY2F0aW9uQ29uc3RydWN0b3IgV29ya2Vy
TG9jYXRpb247CiAKKyNpZiBFTkFCTEVfRVZFTlRTT1VSQ0UKKyAgICAgICAgYXR0cmlidXRlIFtK
U0NDdXN0b21HZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRTb3VyY2U7CisjZW5k
aWYKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIFhNTEh0dHBSZXF1ZXN0Q29u
c3RydWN0b3IgWE1MSHR0cFJlcXVlc3Q7CiAKICAgICAgICAgLy8gVGltZXJzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30050</attachid>
            <date>2009-05-06 08:38:03 -0700</date>
            <delta_ts>2009-05-29 10:16:44 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>eventsource_r43308.patch</filename>
            <type>text/plain</type>
            <size>43264</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQzMzA4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDktMDUt
MDYgIEFkYW0gQmVyZ2t2aXN0IDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRkZWQgRXZl
bnRTb3VyY2UgdG8gdGhlIGJ1aWxkIChjb25kaXRpb25hbCkuCisKKyAgICAgICAgKiBjb25maWd1
cmUuYWM6CisKIDIwMDktMDUtMDYgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52ZXN0Ym9A
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRleDog
Y29uZmlndXJlLmFjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZpZ3VyZS5hYwkocmV2aXNpb24gNDMzMDgp
CisrKyBjb25maWd1cmUuYWMJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw2ICszMjgsMTQgQEAgQUNf
QVJHX0VOQUJMRShkYXRhYmFzZSwKICAgICAgICAgICAgICAgW10sW2VuYWJsZV9kYXRhYmFzZT0i
eWVzIl0pCiBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2RhdGFiYXNlXSkKIAorIyBjaGVjayB3aGV0
aGVyIHRvIGJ1aWxkIHdpdGggc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnQKK0FDX01TR19DSEVD
S0lORyhbd2hldGhlciB0byBlbmFibGUgSFRNTDUgc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnRd
KQorQUNfQVJHX0VOQUJMRShldmVudHNvdXJjZSwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJ
TkcoWy0tZW5hYmxlLWV2ZW50c291cmNlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
W2VuYWJsZSBIVE1MNSBzZXJ2ZXItc2VudCBldmVudHMgc3VwcG9ydCBbZGVmYXVsdD1ub11dKSwK
KyAgICAgICAgICAgICAgW10sW2VuYWJsZV9ldmVudHNvdXJjZT0ibm8iXSkKK0FDX01TR19SRVNV
TFQoWyRlbmFibGVfZXZlbnRzb3VyY2VdKQorCiAjIGNoZWNrIHdoZXRoZXIgdG8gYnVpbGQgd2l0
aCBpY29uIGRhdGFiYXNlIHN1cHBvcnQKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFi
bGUgaWNvbiBkYXRhYmFzZSBzdXBwb3J0XSkKIEFDX0FSR19FTkFCTEUoaWNvbl9kYXRhYmFzZSwK
QEAgLTY0Niw2ICs2NTQsNyBAQCBBTV9DT05ESVRJT05BTChbRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OU10sW3Rl
c3QgIiRlbmFibGVfb2ZmbGluZV93ZWJfYXBwbGljYXRpb25zIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJ
VElPTkFMKFtFTkFCTEVfRE9NX1NUT1JBR0VdLFt0ZXN0ICIkZW5hYmxlX2RvbV9zdG9yYWdlIiA9
ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfREFUQUJBU0VdLFt0ZXN0ICIkZW5hYmxl
X2RhdGFiYXNlIiA9ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfRVZFTlRTT1VSQ0Vd
LFt0ZXN0ICIkZW5hYmxlX2V2ZW50c291cmNlIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtF
TkFCTEVfSUNPTkRBVEFCQVNFXSxbdGVzdCAiJGVuYWJsZV9pY29uX2RhdGFiYXNlIiA9ICJ5ZXMi
XSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfWFBBVEhdLFt0ZXN0ICIkZW5hYmxlX3hwYXRoIiA9
ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfWFNMVF0sW3Rlc3QgIiRlbmFibGVfeHNs
dCIgPSAieWVzIl0pCkBAIC02OTcsNiArNzA2LDcgQEAgRmVhdHVyZXM6CiAgSFRNTDUgY2hhbm5l
bCBtZXNzYWdpbmcgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2No
YW5uZWxfbWVzc2FnaW5nCiAgSFRNTDUgY2xpZW50LXNpZGUgc2Vzc2lvbiBhbmQgcGVyc2lzdGVu
dCBzdG9yYWdlIHN1cHBvcnQgOiAkZW5hYmxlX2RvbV9zdG9yYWdlCiAgSFRNTDUgY2xpZW50LXNp
ZGUgZGF0YWJhc2Ugc3RvcmFnZSBzdXBwb3J0ICAgICAgICAgICAgICAgOiAkZW5hYmxlX2RhdGFi
YXNlCisgSFRNTDUgc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnQgICAgICAgICAgICAgICAgICAg
ICAgICAgOiAkZW5hYmxlX2V2ZW50c291cmNlCiAgSFRNTDUgdmlkZW8gZWxlbWVudCBzdXBwb3J0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX3ZpZGVvCiAgSWNvbiBkYXRh
YmFzZSBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxl
X2ljb25fZGF0YWJhc2UKICBTVkcgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICRlbmFibGVfc3ZnCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDMzMDgpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDA5LTA1LTA2
ICBBZGFtIEJlcmdrdmlzdCA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGltcGxlbWVudGF0
aW9uIG9mIHRoZSBFdmVudFNvdXJjZSBvYmplY3QuCisgICAgICAgIERpc2FibGVkIGJ5IGRlZmF1
bHQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZXZl
bnRTb3VyY2UpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
RXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RFdmVudFNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjptYXJrKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmNsYXNzSW5mbyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZTo6bWFyayk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2
ZW50U291cmNlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRT
b3VyY2U6OnJlbW92ZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b0V2ZW50VGFyZ2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpldmVudFNvdXJj
ZSk6CisgICAgICAgICogZG9tL0V2ZW50TmFtZXMuaDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJn
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRUYXJnZXQ6OnRvRXZlbnRTb3VyY2UpOgor
ICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5oOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93Lmlk
bDoKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRT
b3VyY2U6On5FdmVudFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6Y29u
bmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c2NoZWR1bGVSZWNvbm5lY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnJlY29ubmVjdFRpbWVyRmlyZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFNvdXJjZTo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6
ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlzcGF0Y2hFdmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFNvdXJjZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkRmFp
bFJlZGlyZWN0Q2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnBhcnNlRXZl
bnRTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRpc3BhdGNoR2VuZXJp
Y0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaE1lc3NhZ2VF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c3RvcCk6CisgICAgICAgICog
cGFnZS9FdmVudFNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNl
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6Oik6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFNvdXJjZTo6c2V0T25vcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
U291cmNlOjpvbm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNldE9ubWVz
c2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6b25tZXNzYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpzZXRPbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50U291cmNlOjpvbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjp0
b0V2ZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpldmVudExpc3Rl
bmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cmVmRXZlbnRUYXJnZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAg
ICAqIHBhZ2UvRXZlbnRTb3VyY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtl
ckNvbnRleHQuaWRsOgorCiAyMDA5LTA1LTA2ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJl
dmlzaW9uIDQzMzA4KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpA
QCAtMjE4LDYgKzIxOCw3IEBAIElETF9CSU5ESU5HUyArPSBcCiAJV2ViQ29yZS9wYWdlL0Nvb3Jk
aW5hdGVzLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwgXAogCVdlYkNvcmUv
cGFnZS9ET01XaW5kb3cuaWRsIFwKKwlXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsIFwKIAlX
ZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaWRsIFwKIAlXZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24u
aWRsIFwKIAlXZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwgXApAQCAtMjgyLDYgKzI4Myw5IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNw
cCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFNvdXJjZUNvbnN0cnVjdG9yLmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJj
ZUN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAgXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXRCYXNlLmggXApAQCAtMTE5Nyw2ICsxMjAxLDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggXAogCVdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggXAorCVdl
YkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgXAorCVdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5o
IFwKIAlXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5oIFwKIAlXZWJDb3JlL3BhZ2UvRm9jdXNEaXJlY3Rpb24uaCBcCkBAIC0y
MDIyLDYgKzIwMjgsMTYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIGVuZGlmICMgRU5EIEVOQUJM
RV9EQVRBQkFTRQogCiAjIC0tLS0KKyMgSFRNTDUgc2VydmVyLXNlbnQgZXZlbnRzCisjIC0tLS0K
K2lmIEVOQUJMRV9FVkVOVFNPVVJDRQorRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5B
QkxFX0VWRU5UU09VUkNFPTEKKword2ViY29yZV9jcHBmbGFncyArPSBcCisJLURFTkFCTEVfRVZF
TlRTT1VSQ0U9MQorZW5kaWYgIyBFTkFCTEVfRVZFTlRTT1VSQ0UKKworIyAtLS0tCiAjIEhUTUw1
IGNsaWVudC1zaWRlIHNlc3Npb24gYW5kIHBlcnNpc3RlbnQgc3RvcmFnZQogIyAtLS0tCiBpZiBF
TkFCTEVfRE9NX1NUT1JBR0UKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCShyZXZpc2lvbiA0MzMwOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiSlNET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIkpTRXZlbnQuaCIKICNpbmNsdWRlICJK
U0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU0hpc3RvcnkuaCIKICNpbmNsdWRlICJKU0ltYWdlQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU0xvY2F0aW9uLmgiCkBAIC0yMTgsNiArMjE5LDEzIEBAIEpTVmFsdWUgSlNE
T01XaW5kb3c6OmV2ZW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1cm4gdG9KUyhleGVjLCBldmVu
dCk7CiB9CiAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCitKU1ZhbHVlIEpTRE9NV2luZG93Ojpl
dmVudFNvdXJjZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7Cit9CisjZW5k
aWYKKwogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6aW1hZ2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAog
ewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdlQ29uc3RydWN0b3I+KGV4ZWMs
IHRoaXMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFNvdXJjZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3Nv
biBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNp
bmNsdWRlICJKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkV2ZW50U291
cmNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkpTRXZlbnRTb3Vy
Y2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVNTRVJUX0NMQVNTX0ZJVFNfSU5f
Q0VMTChKU0V2ZW50U291cmNlQ29uc3RydWN0b3IpOworCitjb25zdCBDbGFzc0luZm8gSlNFdmVu
dFNvdXJjZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJFdmVudFNvdXJjZUNvbnRydWN0b3IiLCAw
LCAwLCAwIH07CisKK0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6SlNFdmVudFNvdXJjZUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
KyAgICA6IERPTU9iamVjdChKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFByb3RvdHlwZSgpKSkKKyAgICAs
IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNFdmVudFNvdXJjZVByb3RvdHlwZTo6c2VsZihleGVj
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBOb25lKTsKK30KKworU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9nbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RFdmVudFNvdXJjZShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOworCisgICAgVVN0
cmluZyB1cmwgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKj4oY29u
c3RydWN0b3IpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVuY2VFcnJvciwgIkV2ZW50U291
cmNlIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKTsKKwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxFdmVudFNvdXJjZT4gZXZlbnRT
b3VyY2UgPSBFdmVudFNvdXJjZTo6Y3JlYXRlKHVybCwgY29udGV4dCwgZWMpOworICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisKKyAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBl
dmVudFNvdXJjZS5yZWxlYXNlKCkpKTsKK30KKworQ29uc3RydWN0VHlwZSBKU0V2ZW50U291cmNl
Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdEV2ZW50
U291cmNlOworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKK30KKwordm9pZCBKU0V2ZW50
U291cmNlQ29uc3RydWN0b3I6Om1hcmsoKQoreworICAgIERPTU9iamVjdDo6bWFyaygpOworICAg
IGlmICghbV9nbG9iYWxPYmplY3QtPm1hcmtlZCgpKQorICAgICAgICBtX2dsb2JhbE9iamVjdC0+
bWFyaygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
RVZFTlRTT1VSQ0UpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25z
dHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJj
ZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRTb3VyY2VDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29u
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNFdmVudFNv
dXJjZUNvbnN0cnVjdG9yX2gKKworI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKworI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBKU0V2
ZW50U291cmNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0Kik7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbzsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6
OkNvbnN0cnVjdERhdGEmKTsKKyAgICAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyog
Y2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorCisgICAgICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNlbmRpZiAvLyBKU0V2ZW50
U291cmNlQ29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291
cmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRT
b3VyY2VDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50U291cmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNpbmNs
dWRlICJKU0V2ZW50U291cmNlLmgiCisKKyNpbmNsdWRlICJFdmVudFNvdXJjZS5oIgorI2luY2x1
ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBKU0V2
ZW50U291cmNlOjptYXJrKCkKK3sKKyAgICBET01PYmplY3Q6Om1hcmsoKTsKKworICAgIG1hcmtJ
Zk5vdE51bGwobV9pbXBsLT5vbm9wZW4oKSk7CisgICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9u
bWVzc2FnZSgpKTsKKyAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25lcnJvcigpKTsKKworICAg
IHR5cGVkZWYgRXZlbnRTb3VyY2U6OkV2ZW50TGlzdGVuZXJzTWFwIEV2ZW50TGlzdGVuZXJzTWFw
OworICAgIHR5cGVkZWYgRXZlbnRTb3VyY2U6Okxpc3RlbmVyVmVjdG9yIExpc3RlbmVyVmVjdG9y
OworICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVycyA9IG1faW1wbC0+ZXZlbnRM
aXN0ZW5lcnMoKTsKKyAgICBmb3IgKEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBtYXBJdGVy
ID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFwSXRlciAhPSBldmVudExpc3RlbmVycy5lbmQo
KTsgKyttYXBJdGVyKSB7CisgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIHZl
Y0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4oKTsgdmVjSXRlciAhPSBtYXBJdGVyLT5zZWNv
bmQuZW5kKCk7ICsrdmVjSXRlcikKKyAgICAgICAgICAgICgqdmVjSXRlciktPm1hcmtKU0Z1bmN0
aW9uKCk7CisgICAgfQorfQorCitKU1ZhbHVlIEpTRXZlbnRTb3VyY2U6OmFkZEV2ZW50TGlzdGVu
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUmVmUHRyPEpTRXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRPckNyZWF0ZUpTRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDEp
KTsKKyAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0cmluZyhleGVjKSwgbGlz
dGVuZXIucmVsZWFzZSgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgSlNFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRM
aXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBKU0V2ZW50TGlzdGVuZXIqIGxpc3RlbmVy
ID0gZ2xvYmFsT2JqZWN0LT5maW5kSlNFdmVudExpc3RlbmVyKGFyZ3MuYXQoMSkpOworICAgIGlm
ICghbGlzdGVuZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGltcGwoKS0+
cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lciwg
YXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VS
Q0UpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDQz
MzA4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksMTEgQEAKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCiAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0Up
CisjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKKyNpbmNsdWRlICJKU0V2ZW50U291cmNlLmgiCisj
ZW5kaWYKKwogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAjaW5jbHVkZSAi
RE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkpTRE9NQXBwbGljYXRpb25DYWNoZS5o
IgpAQCAtNjUsNiArNzAsMTEgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgRXZlbnRU
YXJnZQogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAgCisj
aWYgRU5BQkxFKEVWRU5UU09VUkNFKQorICAgIGlmIChFdmVudFNvdXJjZSogZXZlbnRTb3VyY2Ug
PSB0YXJnZXQtPnRvRXZlbnRTb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIGdldENhY2hlZERPTU9i
amVjdFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBldmVudFNvdXJjZSk7CisjZW5kaWYKKwog
I2lmIEVOQUJMRShTVkcpCiAgICAgLy8gU1ZHRWxlbWVudEluc3RhbmNlIHN1cHBvcnRzIGJvdGgg
dG9TVkdFbGVtZW50SW5zdGFuY2UgYW5kIHRvTm9kZSBzaW5jZSBzbyBtdWNoIG1vdXNlIGhhbmRs
aW5nIGNvZGUgZGVwZW5kcyBvbiB0b05vZGUgcmV0dXJuaW5nIGEgdmFsaWQgbm9kZS4KICAgICBp
ZiAoU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IHRhcmdldC0+dG9TVkdFbGVtZW50SW5z
dGFuY2UoKSkKQEAgLTExOSw2ICsxMjksMTAgQEAgRXZlbnRUYXJnZXQqIHRvRXZlbnRUYXJnZXQo
SlNDOjpKU1ZhbHVlIAogICAgIGlmICh2YWx1ZS5pc09iamVjdCgmSlNET01XaW5kb3dTaGVsbDo6
c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTRE9NV2luZG93U2hlbGwqPihh
c09iamVjdCh2YWx1ZSkpLT5pbXBsKCk7CiAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisgICAg
Q09OVkVSVF9UT19FVkVOVF9UQVJHRVQoRXZlbnRTb3VyY2UpCisjZW5kaWYKKwogI2lmIEVOQUJM
RShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgQ09OVkVSVF9UT19FVkVOVF9UQVJHRVQo
RE9NQXBwbGljYXRpb25DYWNoZSkKICNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDMzMDgpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDEwIEBACiAjaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSA8
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKyNp
bmNsdWRlICJKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1l
c3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03NCw2ICs3OCwxMyBAQCBib29s
IEpTV29ya2VyQ29udGV4dDo6Y3VzdG9tR2V0T3duUHJvcGVyCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OmV2
ZW50U291cmNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKK30KKyNlbmRp
ZgorCiBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6eG1sSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAogewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwpJbmRleDogV2ViQ29yZS9kb20vRXZlbnROYW1l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkocmV2aXNpb24gNDMz
MDgpCisrKyBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYg
KzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3JvKG9ic29sZXRlKSBcCiAgICAg
bWFjcm8ob2ZmbGluZSkgXAogICAgIG1hY3JvKG9ubGluZSkgXAorICAgIG1hY3JvKG9wZW4pIFwK
ICAgICBtYWNybyhvdmVyZmxvd2NoYW5nZWQpIFwKICAgICBtYWNybyhwYXN0ZSkgXAogICAgIG1h
Y3JvKHJlYWR5c3RhdGVjaGFuZ2UpIFwKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHJldmlzaW9uIDQz
MzA4KQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw2ICs0NCwxMSBAQCBFdmVudFRhcmdldDo6fkV2ZW50VGFyZ2V0KCkKIHsKIH0KIAorRXZlbnRT
b3VyY2UqIEV2ZW50VGFyZ2V0Ojp0b0V2ZW50U291cmNlKCkKK3sKKyAgICByZXR1cm4gMDsKK30K
KwogTm9kZSogRXZlbnRUYXJnZXQ6OnRvTm9kZSgpCiB7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBX
ZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0LmgJKHJldmlzaW9uIDQzMzA4KQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgRE9NV2luZG93OwogICAgIGNsYXNzIEV2ZW50OwogICAgIGNsYXNzIEV2ZW50TGlzdGVu
ZXI7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CiAgICAgY2xhc3MgTWVzc2FnZVBvcnQ7CiAgICAg
Y2xhc3MgTm9kZTsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7CkBAIC01NCw2ICs1NSw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEV2ZW50VGFyZ2V0IHsKICAgICBw
dWJsaWM6CisgICAgICAgIHZpcnR1YWwgRXZlbnRTb3VyY2UqIHRvRXZlbnRTb3VyY2UoKTsKICAg
ICAgICAgdmlydHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9ydCgpOwogICAgICAgICB2aXJ0
dWFsIE5vZGUqIHRvTm9kZSgpOwogICAgICAgICB2aXJ0dWFsIERPTVdpbmRvdyogdG9ET01XaW5k
b3coKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiA0MzMwOCkKKysrIFdlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsNiArMzg2LDEwIEBAIG1vZHVs
ZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VDb25zdHJ1Y3RvciBSYW5nZTsKICAg
ICAgICAgYXR0cmlidXRlIFJhbmdlRXhjZXB0aW9uQ29uc3RydWN0b3IgUmFuZ2VFeGNlcHRpb247
CiAKKyNpZiBFTkFCTEVfRVZFTlRTT1VSQ0UKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21H
ZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRTb3VyY2U7IC8vIFVzYWJsZSB3aXRo
IG5ldyB0aGUgb3BlcmF0b3IKKyNlbmRpZgorCiAgICAgICAgIC8vIE1vemlsbGEgaGFzIGEgc2Vw
YXJhdGUgWE1MRG9jdW1lbnQgb2JqZWN0IGZvciBYTUwgZG9jdW1lbnRzLiAKICAgICAgICAgLy8g
V2UganVzdCB1c2UgRG9jdW1lbnQgZm9yIHRoaXMuCiAgICAgICAgIGF0dHJpYnV0ZSBEb2N1bWVu
dENvbnN0cnVjdG9yIFhNTERvY3VtZW50OwpJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50U291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24gQUIKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAg
ICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEVW
RU5UU09VUkNFKQorCisjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKKworI2luY2x1ZGUgIkRPTVdp
bmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgor
I2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJU
aHJlYWRhYmxlTG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgdW5zaWdu
ZWQgbG9uZyBsb25nIEV2ZW50U291cmNlOjpEZWZhdWx0UmVjb25uZWN0RGVsYXkgPSAzMDAwOwor
CitFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIDogQWN0aXZlRE9N
T2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX3N0YXRlKENPTk5FQ1RJTkcpCisgICAgLCBt
X3JlY29ubmVjdFRpbWVyKHRoaXMsICZFdmVudFNvdXJjZTo6cmVjb25uZWN0VGltZXJGaXJlZCkK
KyAgICAsIG1fZmFpbFNpbGVudGx5KGZhbHNlKQorICAgICwgbV9yZWNvbm5lY3REZWxheShEZWZh
dWx0UmVjb25uZWN0RGVsYXkpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIShtX3VybCA9
IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCkpLmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IHNob3VsZCBz
dXBwb3J0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1fdXJsKSkgeworICAgICAgICBl
YyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fb3JpZ2lu
ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygp
OworICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFp
biIsICJVVEYtOCIpOworCisgICAgY29ubmVjdCgpOworfQorCitFdmVudFNvdXJjZTo6fkV2ZW50
U291cmNlKCkKK3sKK30KKwordm9pZCBFdmVudFNvdXJjZTo6Y29ubmVjdCgpCit7CisgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QobV91cmwpOworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgi
R0VUIik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2VwdCIsICJ0ZXh0L2V2
ZW50LXN0cmVhbSIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJDYWNoZS1Db250
cm9sIiwgIm5vLWNhY2hlIik7CisgICAgaWYgKCFtX2xhc3RFdmVudElkLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkxhc3QtRXZlbnQtSUQiLCBtX2xhc3RF
dmVudElkKTsKKyAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCksIHRoaXMsIHJlcXVlc3QsIFNlbmRMb2FkQ2FsbGJhY2tzLCBEb05v
dFNuaWZmQ29udGVudCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7CisgICAgc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpzY2hlZHVsZVJlY29ubmVjdCgp
Cit7CisgICAgbV9zdGF0ZSA9IENPTk5FQ1RJTkc7CisgICAgbV9yZWNvbm5lY3RUaW1lci5zdGFy
dE9uZVNob3QobV9yZWNvbm5lY3REZWxheSAvIDEwMDApOworfQorCit2b2lkIEV2ZW50U291cmNl
OjpyZWNvbm5lY3RUaW1lckZpcmVkKFRpbWVyPEV2ZW50U291cmNlPiopCit7CisgICAgY29ubmVj
dCgpOworfQorCitTdHJpbmcgRXZlbnRTb3VyY2U6OnVybCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdXJsLnN0cmluZygpOworfQorCitFdmVudFNvdXJjZTo6U3RhdGUgRXZlbnRTb3VyY2U6OnJl
YWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlOworfQorCit2b2lkIEV2ZW50
U291cmNlOjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBDTE9TRUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3JlY29ubmVjdFRpbWVyLmlzQWN0aXZlKCkpCisgICAg
ICAgIG1fcmVjb25uZWN0VGltZXIuc3RvcCgpOworCisgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAg
ICBtX2ZhaWxTaWxlbnRseSA9IHRydWU7CisgICAgbV9sb2FkZXItPmNhbmNlbCgpOworfQorCitT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBFdmVudFNvdXJjZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjphZGRFdmVudExpc3RlbmVyKGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50
TGlzdGVuZXIsIGJvb2wpCit7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAgICBpZiAoaXRlciA9PSBtX2V2
ZW50TGlzdGVuZXJzLmVuZCgpKSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yIGxpc3RlbmVyczsK
KyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVyKTsKKyAgICAgICAgbV9ldmVu
dExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGZv
ciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5iZWdp
bigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikgewor
ICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2
ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxp
c3RlbmVycyk7CisgICAgfQorfQorCit2b2lkIEV2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiBldmVudExp
c3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0g
bV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0ZXIgPT0gbV9ldmVu
dExpc3RlbmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGlzdGVuZXJWZWN0b3Im
IGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25z
dF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVy
ICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgaWYgKCpsaXN0
ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikgeworICAgICAgICAgICAgbGlzdGVuZXJzLnJlbW92
ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5lcnMuYmVnaW4oKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRXZlbnRTb3VyY2U6OmRpc3BhdGNoRXZlbnQo
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICgh
ZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZWMgPSBFdmVudEV4
Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIEV2ZW50TGlzdGVuZXIqIGF0dHJpYnV0ZUxpc3RlbmVyID0gbV9hdHRy
aWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkpLmdldCgpOworICAgIGlmIChhdHRyaWJ1
dGVMaXN0ZW5lcikgeworICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgICAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgYXR0cmlidXRlTGlzdGVuZXIt
PmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSk7CisgICAgfQorCisgICAgTGlzdGVuZXJW
ZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkp
OworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9
IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVyc0NvcHkuZW5k
KCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7Cisg
ICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAgICBsaXN0ZW5lckl0
ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKworICAg
IHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKK30KKwordm9pZCBFdmVudFNvdXJj
ZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQor
eworICAgIGludCBzdGF0dXNDb2RlID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKKyAgICBp
ZiAoc3RhdHVzQ29kZSA9PSAyMDAgJiYgcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKCJDb250ZW50
LVR5cGUiKSA9PSAidGV4dC9ldmVudC1zdHJlYW0iKSB7CisgICAgICAgIG1fc3RhdGUgPSBPUEVO
OworICAgICAgICBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCkub3BlbkV2ZW50KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCB8fCBzdGF0dXNDb2Rl
ID4gMjk5KQorICAgICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICAgICAgbV9sb2FkZXIt
PmNhbmNlbCgpOworICAgIH0KK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZURhdGEo
Y29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBhcHBlbmQobV9yZWNlaXZlQnVm
LCBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgpKTsKKyAgICBwYXJzZUV2ZW50U3RyZWFt
KCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZykKK3sKKyAgICBpZiAobV9yZWNlaXZlQnVmLnNpemUoKSA+IDAgfHwgbV9kYXRhLnNpemUoKSA+
IDApIHsKKyAgICAgICAgYXBwZW5kKG1fcmVjZWl2ZUJ1ZiwgIlxuXG4iKTsKKyAgICAgICAgcGFy
c2VFdmVudFN0cmVhbSgpOworICAgIH0KKyAgICBtX3N0YXRlID0gQ09OTkVDVElORzsKKyAgICBk
aXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CisgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7CisKKyAgICBpZiAobV9zdGF0ZSAhPSBDTE9TRUQpCisgICAg
ICAgIHNjaGVkdWxlUmVjb25uZWN0KCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpZEZhaWwo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgaWYgKCFtX2ZhaWxTaWxlbnRseSkK
KyAgICAgICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwor
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworCisgICAgaW50IGNhbmNlbGVkID0gZXJy
b3IuaXNDYW5jZWxsYXRpb24oKTsKKyAgICBpZiAoKChtX3N0YXRlID09IENPTk5FQ1RJTkcpICYm
IGNhbmNlbGVkKSB8fCAoKG1fc3RhdGUgPT0gT1BFTikgJiYgIWNhbmNlbGVkKSkKKyAgICAgICAg
c2NoZWR1bGVSZWNvbm5lY3QoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbFJlZGly
ZWN0Q2hlY2soKQoreworICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgbV9sb2FkZXItPmNhbmNl
bCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpwYXJzZUV2ZW50U3RyZWFtKCkKK3sKKyAgICBm
b3IgKDs7KSB7CisgICAgICAgIGludCBsaW5lRW5kID0gLTE7CisgICAgICAgIGludCBmaWVsZEVu
ZCA9IC0xOworICAgICAgICBpbnQgY2FycmlnZVJldHVybiA9IDA7CisgICAgICAgIHVuc2lnbmVk
IGludCBidWZTaXplID0gbV9yZWNlaXZlQnVmLnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGxpbmVFbmQgPCAwICYmIGkgPCBidWZTaXplOyBpKyspIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9yZWNlaXZlQnVmW2ldKSB7CisgICAgICAgICAgICBjYXNlICc6JzoKKyAg
ICAgICAgICAgICAgICBpZiAoZmllbGRFbmQgPCAwKQorICAgICAgICAgICAgICAgICAgICBmaWVs
ZEVuZCA9IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdcbic6
CisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIG1fcmVjZWl2ZUJ1ZltpIC0gMV0gPT0gJ1xy
JykgeworICAgICAgICAgICAgICAgICAgICBjYXJyaWdlUmV0dXJuKys7CisgICAgICAgICAgICAg
ICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZUVuZCA9
IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobGluZUVuZCA8IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp
ZiAoIWxpbmVFbmQpIHsKKyAgICAgICAgICAgIGlmICghbV9kYXRhLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICBkaXNwYXRjaE1lc3NhZ2VFdmVudCgpOworICAgICAgICAgICAgaWYgKCFtX2V2
ZW50TmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV9ldmVudE5hbWUgPSAiIjsKKyAg
ICAgICAgfSBlbHNlIGlmIChmaWVsZEVuZCkgeworICAgICAgICAgICAgYm9vbCBub1ZhbHVlID0g
ZmllbGRFbmQgPCAwOworCisgICAgICAgICAgICBTdHJpbmcgZmllbGQobV9yZWNlaXZlQnVmLmRh
dGEoKSwgbm9WYWx1ZSA/IGxpbmVFbmQgOiBmaWVsZEVuZCk7CisgICAgICAgICAgICBpbnQgcmVt
b3ZlTGVuOworICAgICAgICAgICAgaWYgKG5vVmFsdWUpCisgICAgICAgICAgICAgICAgcmVtb3Zl
TGVuID0gbGluZUVuZDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fcmVjZWl2ZUJ1ZltmaWVsZEVu
ZCArIDFdICE9ICcgJykKKyAgICAgICAgICAgICAgICByZW1vdmVMZW4gPSBmaWVsZEVuZCArIDE7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVtb3ZlTGVuID0gZmllbGRFbmQg
KyAyOworICAgICAgICAgICAgbV9yZWNlaXZlQnVmLnJlbW92ZSgwLCByZW1vdmVMZW4pOworICAg
ICAgICAgICAgbGluZUVuZCAtPSByZW1vdmVMZW47CisKKyAgICAgICAgICAgIGlmIChmaWVsZCA9
PSAiZGF0YSIpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kYXRhLnNpemUoKSA+IDApCisgICAg
ICAgICAgICAgICAgICAgIG1fZGF0YS5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICAgICAgaWYg
KCFub1ZhbHVlKQorICAgICAgICAgICAgICAgICAgICBtX2RhdGEuYXBwZW5kKG1fcmVjZWl2ZUJ1
Zi5kYXRhKCksIGxpbmVFbmQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZCA9PSAiZXZl
bnQiKQorICAgICAgICAgICAgICAgIG1fZXZlbnROYW1lID0gKCFub1ZhbHVlICYmIGxpbmVFbmQp
ID8gU3RyaW5nKG1fcmVjZWl2ZUJ1Zi5kYXRhKCksIGxpbmVFbmQpIDogIiI7CisgICAgICAgICAg
ICBlbHNlIGlmIChmaWVsZCA9PSAiaWQiKQorICAgICAgICAgICAgICAgIG1fbGFzdEV2ZW50SWQg
PSAhbm9WYWx1ZSA/IFN0cmluZyhtX3JlY2VpdmVCdWYuZGF0YSgpLCBsaW5lRW5kKSA6ICIiOwor
ICAgICAgICAgICAgZWxzZSBpZiAoZmllbGQgPT0gInJldHJ5IikgeworICAgICAgICAgICAgICAg
IGlmIChub1ZhbHVlKQorICAgICAgICAgICAgICAgICAgICBtX3JlY29ubmVjdERlbGF5ID0gRGVm
YXVsdFJlY29ubmVjdERlbGF5OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgdmFsdWUobV9yZWNlaXZlQnVmLmRhdGEoKSwgbGluZUVuZCk7CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgb2s7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyByZXRyeSA9IHZhbHVlLnRvVUludDY0KCZvayk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChvaykKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVjb25uZWN0RGVsYXkgPSByZXRy
eTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
bV9yZWNlaXZlQnVmLnJlbW92ZSgwLCBsaW5lRW5kICsgY2FycmlnZVJldHVybiArIDEpOworICAg
fQorfQorCit2b2lkIEV2ZW50U291cmNlOjpkaXNwYXRjaEdlbmVyaWNFdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIHR5cGUpCit7CisgICAgUmVmUHRyPEV2ZW50PiBldnQgPSBFdmVudDo6Y3JlYXRl
KHR5cGUsIGZhbHNlLCBmYWxzZSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZGlz
cGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7Cit9CisKK3Zv
aWQgRXZlbnRTb3VyY2U6OmRpc3BhdGNoTWVzc2FnZUV2ZW50KCkKK3sKKyAgICBSZWZQdHI8TWVz
c2FnZUV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOworICAgIFN0cmluZyBldmVu
dE5hbWUgPSBtX2V2ZW50TmFtZS5pc0VtcHR5KCkgPyBldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50
LnN0cmluZygpIDogbV9ldmVudE5hbWU7CisgICAgZXZ0LT5pbml0TWVzc2FnZUV2ZW50KGV2ZW50
TmFtZSwgZmFsc2UsIGZhbHNlLCBTdHJpbmc6OmFkb3B0KG1fZGF0YSksIG1fb3JpZ2luLCBtX2xh
c3RFdmVudElkLCAwLCAwKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBkaXNwYXRj
aEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKwordm9pZCBF
dmVudFNvdXJjZTo6c3RvcCgpCit7CisgICAgZGlzY29ubmVjdCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0UpCkluZGV4OiBXZWJD
b3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRT
b3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmlj
c3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV2ZW50U291cmNlX2gK
KyNkZWZpbmUgRXZlbnRTb3VyY2VfaAorCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorCisjaW5j
bHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nSGFzaC5oIgor
I2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5j
bHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiVGhyZWFk
YWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICBjbGFzcyBUZXh0UmVzb3VyY2VEZWNv
ZGVyOworICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CisKKyAgICBjbGFzcyBFdmVudFNvdXJj
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50U291cmNlPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBw
cml2YXRlIFRocmVhZGFibGVMb2FkZXJDbGllbnQsIHB1YmxpYyBBY3RpdmVET01PYmplY3Qgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRTb3VyY2U+IGNyZWF0
ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmVudFNvdXJjZSh1cmwsIGNv
bnRleHQsIGVjKSk7IH0KKyAgICAgICAgdmlydHVhbCB+RXZlbnRTb3VyY2UoKTsKKworICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIERlZmF1bHRSZWNvbm5lY3REZWxheTsK
KworICAgICAgICBTdHJpbmcgdXJsKCkgY29uc3Q7CisKKyAgICAgICAgZW51bSBTdGF0ZSB7Cisg
ICAgICAgICAgICBDT05ORUNUSU5HID0gMCwKKyAgICAgICAgICAgIE9QRU4gPSAxLAorICAgICAg
ICAgICAgQ0xPU0VEID0gMiwKKyAgICAgICAgfTsKKworICAgICAgICBTdGF0ZSByZWFkeVN0YXRl
KCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRPbm9wZW4oUGFzc1JlZlB0cjxFdmVudExpc3Rl
bmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlTGlzdGVuZXJzLnNldChldmVudE5hbWVz
KCkub3BlbkV2ZW50LCBldmVudExpc3RlbmVyKTsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBv
bm9wZW4oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZUxpc3RlbmVycy5nZXQoZXZlbnROYW1l
cygpLm9wZW5FdmVudCkuZ2V0KCk7IH0KKworICAgICAgICB2b2lkIHNldE9ubWVzc2FnZShQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9hdHRyaWJ1dGVMaXN0ZW5l
cnMuc2V0KGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGV2ZW50TGlzdGVuZXIpOyB9CisgICAg
ICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRl
TGlzdGVuZXJzLmdldChldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50KS5nZXQoKTsgfQorCisgICAg
ICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVu
ZXIpIHsgbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBl
dmVudExpc3RlbmVyKTsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbmVycm9yKCkgY29uc3Qg
eyByZXR1cm4gbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50
KS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgZGlzY29ubmVjdCgpOworCisgICAgICAgIHVzaW5n
IFJlZkNvdW50ZWQ8RXZlbnRTb3VyY2U+OjpyZWY7CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8
RXZlbnRTb3VyY2U+OjpkZXJlZjsKKworICAgICAgICB2aXJ0dWFsIEV2ZW50U291cmNlKiB0b0V2
ZW50U291cmNlKCkgeyByZXR1cm4gdGhpczsgfQorICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKworICAgICAgICB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKKyAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50
TGlzdGVuZXJzTWFwOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNv
bnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBi
b29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNl
Q2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVu
dExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7IH0KKworICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgRXZlbnRTb3VyY2UoY29u
c3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJl
ZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigp
OyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
RGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CisKKyAgICAgICAgdm9pZCBjb25uZWN0KCk7CisgICAg
ICAgIHZvaWQgc2NoZWR1bGVSZWNvbm5lY3QoKTsKKyAgICAgICAgdm9pZCByZWNvbm5lY3RUaW1l
ckZpcmVkKFRpbWVyPEV2ZW50U291cmNlPiopOworICAgICAgICB2b2lkIHBhcnNlRXZlbnRTdHJl
YW0oKTsKKyAgICAgICAgdm9pZCBkaXNwYXRjaEdlbmVyaWNFdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUpOworICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUV2ZW50KCk7CisKKyAgICAg
ICAgS1VSTCBtX3VybDsKKyAgICAgICAgU3RhdGUgbV9zdGF0ZTsKKworICAgICAgICBIYXNoTWFw
PEF0b21pY1N0cmluZywgUmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gbV9hdHRyaWJ1dGVMaXN0ZW5l
cnM7CisgICAgICAgIEV2ZW50TGlzdGVuZXJzTWFwIG1fZXZlbnRMaXN0ZW5lcnM7CisKKyAgICAg
ICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKKyAgICAgICAgUmVmUHRy
PFRocmVhZGFibGVMb2FkZXI+IG1fbG9hZGVyOworICAgICAgICBUaW1lcjxFdmVudFNvdXJjZT4g
bV9yZWNvbm5lY3RUaW1lcjsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBtX3JlY2VpdmVCdWY7Cisg
ICAgICAgIGJvb2wgbV9mYWlsU2lsZW50bHk7CisKKyAgICAgICAgU3RyaW5nIG1fZXZlbnROYW1l
OworICAgICAgICBWZWN0b3I8VUNoYXI+IG1fZGF0YTsKKyAgICAgICAgU3RyaW5nIG1fbGFzdEV2
ZW50SWQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX3JlY29ubmVjdERlbGF5OworICAg
ICAgICBTdHJpbmcgbV9vcmlnaW47CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEVWRU5UU09VUkNFKQorCisjZW5kaWYgLy8gRXZlbnRTb3VyY2Vf
aApJbmRleDogV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wYWdlL0V2
ZW50U291cmNlLmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1
bGUgd2luZG93IHsKKworICAgIGludGVyZmFjZSBbQ3VzdG9tTWFya0Z1bmN0aW9uLCBDb25kaXRp
b25hbD1FVkVOVFNPVVJDRV0gRXZlbnRTb3VyY2UgeworCisgICAgICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBET01TdHJpbmcgVVJMOworCisgICAgICAgIC8vIHJlYWR5IHN0YXRlCisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IENPTk5FQ1RJTkcgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBPUEVOID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU0VEID0g
MjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGxvbmcgcmVhZHlTdGF0ZTsKKworICAgICAg
ICAvLyBuZXR3b3JraW5nCisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ub3BlbjsK
KyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25tZXNzYWdlOworICAgICAgICBhdHRy
aWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVycm9yOworICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsK
KworICAgICAgICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgW0N1c3RvbV0gdm9p
ZCBhZGRFdmVudExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3Rl
bmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGlu
IEV2ZW50IGV2dCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisKKyAgICB9
OworfQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNpb24gNDMzMDgpCisr
KyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDYgKzgwLDkgQEAgbW9kdWxlIHRocmVhZHMgewogICAgICAgICBhdHRyaWJ1dGUgTWVzc2FnZUV2
ZW50Q29uc3RydWN0b3IgTWVzc2FnZUV2ZW50OwogICAgICAgICBhdHRyaWJ1dGUgV29ya2VyTG9j
YXRpb25Db25zdHJ1Y3RvciBXb3JrZXJMb2NhdGlvbjsKIAorI2lmIEVOQUJMRV9FVkVOVFNPVVJD
RQorICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VDb25zdHJ1
Y3RvciBFdmVudFNvdXJjZTsKKyNlbmRpZgogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdl
dHRlcl0gWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsKICAgICB9Owog
Cg==
</data>
<flag name="review"
          id="15084"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30778</attachid>
            <date>2009-05-29 10:16:44 -0700</date>
            <delta_ts>2009-06-11 05:45:58 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>eventsource_r44256.patch</filename>
            <type>text/plain</type>
            <size>69150</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0MjY0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDktMDUt
MjkgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZGVkIEV2
ZW50U291cmNlIHRvIHRoZSBidWlsZCAoZGVmYXVsdCBvbikuCisKKyAgICAgICAgKiBjb25maWd1
cmUuYWM6CisKIDIwMDktMDUtMjkgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFuIEFsb256by4KSW5kZXg6IGNvbmZpZ3VyZS5h
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDQ0MjU2KQorKysgY29uZmln
dXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNiArMzI5LDE0IEBAIEFDX0FSR19FTkFCTEUo
ZGF0YWJhc2UsCiAgICAgICAgICAgICAgIFtdLFtlbmFibGVfZGF0YWJhc2U9InllcyJdKQogQUNf
TVNHX1JFU1VMVChbJGVuYWJsZV9kYXRhYmFzZV0pCiAKKyMgY2hlY2sgd2hldGhlciB0byBidWls
ZCB3aXRoIHNlcnZlci1zZW50IGV2ZW50cyBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRo
ZXIgdG8gZW5hYmxlIEhUTUw1IHNlcnZlci1zZW50IGV2ZW50cyBzdXBwb3J0XSkKK0FDX0FSR19F
TkFCTEUoZXZlbnRzb3VyY2UsCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJs
ZS1ldmVudHNvdXJjZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgSFRN
TDUgc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnQgW2RlZmF1bHQ9eWVzXV0pLAorICAgICAgICAg
ICAgICBbXSxbZW5hYmxlX2V2ZW50c291cmNlPSJ5ZXMiXSkKK0FDX01TR19SRVNVTFQoWyRlbmFi
bGVfZXZlbnRzb3VyY2VdKQorCiAjIGNoZWNrIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBpY29uIGRh
dGFiYXNlIHN1cHBvcnQKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgaWNvbiBk
YXRhYmFzZSBzdXBwb3J0XSkKIEFDX0FSR19FTkFCTEUoaWNvbl9kYXRhYmFzZSwKQEAgLTY1OSw2
ICs2NjcsNyBAQCBBTV9DT05ESVRJT05BTChbRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHCiBBTV9D
T05ESVRJT05BTChbRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OU10sW3Rlc3QgIiRlbmFi
bGVfb2ZmbGluZV93ZWJfYXBwbGljYXRpb25zIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtF
TkFCTEVfRE9NX1NUT1JBR0VdLFt0ZXN0ICIkZW5hYmxlX2RvbV9zdG9yYWdlIiA9ICJ5ZXMiXSkK
IEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfREFUQUJBU0VdLFt0ZXN0ICIkZW5hYmxlX2RhdGFiYXNl
IiA9ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfRVZFTlRTT1VSQ0VdLFt0ZXN0ICIk
ZW5hYmxlX2V2ZW50c291cmNlIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfSUNP
TkRBVEFCQVNFXSxbdGVzdCAiJGVuYWJsZV9pY29uX2RhdGFiYXNlIiA9ICJ5ZXMiXSkKIEFNX0NP
TkRJVElPTkFMKFtFTkFCTEVfWFBBVEhdLFt0ZXN0ICIkZW5hYmxlX3hwYXRoIiA9ICJ5ZXMiXSkK
IEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfWFNMVF0sW3Rlc3QgIiRlbmFibGVfeHNsdCIgPSAieWVz
Il0pCkBAIC03MTEsNiArNzIwLDcgQEAgRmVhdHVyZXM6CiAgSFRNTDUgY2hhbm5lbCBtZXNzYWdp
bmcgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2NoYW5uZWxfbWVz
c2FnaW5nCiAgSFRNTDUgY2xpZW50LXNpZGUgc2Vzc2lvbiBhbmQgcGVyc2lzdGVudCBzdG9yYWdl
IHN1cHBvcnQgOiAkZW5hYmxlX2RvbV9zdG9yYWdlCiAgSFRNTDUgY2xpZW50LXNpZGUgZGF0YWJh
c2Ugc3RvcmFnZSBzdXBwb3J0ICAgICAgICAgICAgICAgOiAkZW5hYmxlX2RhdGFiYXNlCisgSFRN
TDUgc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgOiAk
ZW5hYmxlX2V2ZW50c291cmNlCiAgSFRNTDUgdmlkZW8gZWxlbWVudCBzdXBwb3J0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX3ZpZGVvCiAgSWNvbiBkYXRhYmFzZSBzdXBw
b3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX2ljb25fZGF0
YWJhc2UKICBTVkcgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6ICRlbmFibGVfc3ZnCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDQyNjQpCisrKyBXZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBACisyMDA5LTA1LTI5ICBBZGFtIEJl
cmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0
aGUgRXZlbnRTb3VyY2Ugb2JqZWN0IHRoYXQgZW5hYmxlcworICAgICAgICBzZXJ2ZXItc2VudCBl
dmVudHMgZnJvbSBIVE1MNS4KKyAgICAgICAgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvZXZlbnRz
b3VyY2UvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDk5NworCisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJp
YnV0ZS1saXN0ZW5lcnMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHNvdXJjZS9ldmVu
dHNvdXJjZS1jb25zdHJ1Y3Rvci5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2V2ZW50
c291cmNlL2V2ZW50c291cmNlLWJhZC1taW1lLXR5cGUuaHRtbAorICAgICAgICAgICAgICAgaHR0
cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0uaHRtbAor
ICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5l
Y3QuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJj
ZS1zdGF0dXMtY29kZS1zdGF0ZXMuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9ldmVu
dHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS5odG1sCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6ZXZlbnRTb3VyY2UpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
cjo6SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRT
b3VyY2VDb25zdHJ1Y3Rvcjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpjb25zdHJ1Y3RFdmVudFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291
cmNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SlNF
dmVudFNvdXJjZUNvbnN0cnVjdG9yOjptYXJrKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2
ZW50U291cmNlQ29uc3RydWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50
U291cmNlQ29uc3RydWN0b3I6OmNsYXNzSW5mbyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNF
dmVudFNvdXJjZUN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNv
dXJjZTo6bWFyayk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlOjphZGRFdmVudExp
c3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2U6OnJlbW92ZUV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgIChXZWJDb3JlOjp0b0V2ZW50VGFyZ2V0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpldmVudFNvdXJjZSk6CisgICAgICAgICogZG9tL0V2
ZW50TmFtZXMuaDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRUYXJnZXQ6OnRvRXZlbnRTb3VyY2UpOgorICAgICAgICAqIGRvbS9FdmVudFRh
cmdldC5oOgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBwYWdlL0V2
ZW50U291cmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6RXZl
bnRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6On5FdmVudFNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6Y29ubmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFNvdXJjZTo6c2NoZWR1bGVSZWNvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRTb3VyY2U6OnJlY29ubmVjdFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRTb3VyY2U6OnVybCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cmVhZHlTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlzY29ubmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFNvdXJjZTo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNv
dXJjZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNl
OjpkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkRmFpbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2spOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnBhcnNlRXZlbnRTdHJlYW0pOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRTb3VyY2U6OnBhcnNlRXZlbnRTdHJlYW1MaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaEdlbmVyaWNFdmVudCk6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFNvdXJjZTo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRTb3VyY2U6OnN0b3ApOgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50U291cmNlOjopOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNl
dE9ub3Blbik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6b25vcGVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpzZXRPbm1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRTb3VyY2U6Om9ubWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJj
ZTo6c2V0T25lcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6b25lcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6dG9FdmVudFNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpFdmVudFNvdXJjZTo6ZXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRTb3VyY2U6OnJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
U291cmNlOjpkZXJlZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiBwYWdlL0V2ZW50U291cmNlLmlk
bDogQWRkZWQuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAwOS0w
NS0yOSAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z25zQGdub21lLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBKYW4gQWxvbnpvLgpJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiA0NDI1NikKKysrIFdl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsNyBAQCBJ
RExfQklORElOR1MgKz0gXAogCVdlYkNvcmUvcGFnZS9Db29yZGluYXRlcy5pZGwgXAogCVdlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uaWRsIFwKIAlXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBc
CisJV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0dlb2xvY2F0
aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0dlb3Bvc2l0aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdl
L0hpc3RvcnkuaWRsIFwKQEAgLTMyNCw2ICszMjUsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudEN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0
b3IuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5o
IFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwIFwKIAlXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXQuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0QmFz
ZS5oIFwKQEAgLTEyMjAsNiArMTIyNCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oIFwKIAlXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBc
CiAJV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIFwKKwlXZWJDb3JlL3BhZ2UvRXZlbnRTb3Vy
Y2UuY3BwIFwKKwlXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaCBcCiAJV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaCBcCiAJ
V2ViQ29yZS9wYWdlL0ZvY3VzRGlyZWN0aW9uLmggXApAQCAtMjA0MCw2ICsyMDQ2LDIwIEBAIHdl
YmNvcmVfY3BwZmxhZ3MgKz0gLURFTkFCTEVfREFUQUJBU0U9MAogZW5kaWYgIyBFTkQgRU5BQkxF
X0RBVEFCQVNFCiAKICMgLS0tLQorIyBIVE1MNSBzZXJ2ZXItc2VudCBldmVudHMKKyMgLS0tLQor
aWYgIUVOQUJMRV9FVkVOVFNPVVJDRQorZ2xvYmFsX2NwcGZsYWdzICs9IC1ERU5BQkxFX0VWRU5U
U09VUkNFPTAKK2VuZGlmCisKK2lmIEVOQUJMRV9FVkVOVFNPVVJDRQorRkVBVFVSRV9ERUZJTkVT
X0pBVkFTQ1JJUFQgKz0gRU5BQkxFX0VWRU5UU09VUkNFPTEKKword2ViY29yZV9jcHBmbGFncyAr
PSBcCisJLURFTkFCTEVfRVZFTlRTT1VSQ0U9MQorZW5kaWYgIyBFTkFCTEVfRVZFTlRTT1VSQ0UK
KworIyAtLS0tCiAjIEhUTUw1IGNsaWVudC1zaWRlIHNlc3Npb24gYW5kIHBlcnNpc3RlbnQgc3Rv
cmFnZQogIyAtLS0tCiBpZiBFTkFCTEVfRE9NX1NUT1JBR0UKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA0NDI1NikKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIkpTRXZl
bnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU0V2ZW50U291
cmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0hpc3RvcnkuaCIKICNpbmNsdWRlICJKU0lt
YWdlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0xvY2F0aW9uLmgiCkBAIC0yMjQsNiArMjI1
LDEzIEBAIEpTVmFsdWUgSlNET01XaW5kb3c6OmV2ZW50KEV4ZWNTdGF0ZSogZXgKICAgICByZXR1
cm4gdG9KUyhleGVjLCBldmVudCk7CiB9CiAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCitKU1Zh
bHVlIEpTRE9NV2luZG93OjpldmVudFNvdXJjZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcj4oZXhl
YywgdGhpcyk7Cit9CisjZW5kaWYKKwogSlNWYWx1ZSBKU0RPTVdpbmRvdzo6aW1hZ2UoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0ltYWdl
Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50U291cmNlQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
RVZFTlRTT1VSQ0UpCisKKyNpbmNsdWRlICJKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCIKKwor
I2luY2x1ZGUgIkV2ZW50U291cmNlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2lu
Y2x1ZGUgIkpTRXZlbnRTb3VyY2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQVNT
RVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU0V2ZW50U291cmNlQ29uc3RydWN0b3IpOworCitjb25z
dCBDbGFzc0luZm8gSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJFdmVudFNv
dXJjZUNvbnRydWN0b3IiLCAwLCAwLCAwIH07CisKK0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6
SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTU9iamVjdChKU0V2ZW50U291cmNlQ29uc3RydWN0
b3I6OmNyZWF0ZVN0cnVjdHVyZShleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm9iamVjdFBy
b3RvdHlwZSgpKSkKKyAgICAsIG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdCkKK3sKKyAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNFdmVudFNvdXJjZVBy
b3RvdHlwZTo6c2VsZihleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCBOb25lKTsK
K30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9nbG9iYWxPYmpl
Y3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25z
dHJ1Y3RFdmVudFNvdXJjZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3Rvciwg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gMCkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3Vt
ZW50cyIpOworCisgICAgVVN0cmluZyB1cmwgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8SlNFdmVudFNvdXJj
ZUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBSZWZlcmVu
Y2VFcnJvciwgIkV2ZW50U291cmNlIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMg
dW5hdmFpbGFibGUiKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFJlZlB0cjxF
dmVudFNvdXJjZT4gZXZlbnRTb3VyY2UgPSBFdmVudFNvdXJjZTo6Y3JlYXRlKHVybCwgY29udGV4
dCwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisKKyAgICByZXR1cm4gYXNP
YmplY3QodG9KUyhleGVjLCBldmVudFNvdXJjZS5yZWxlYXNlKCkpKTsKK30KKworQ29uc3RydWN0
VHlwZSBKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoQ29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNvbnN0cnVjdEV2ZW50U291cmNlOworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsK
K30KKwordm9pZCBKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6Om1hcmsoKQoreworICAgIERPTU9i
amVjdDo6bWFyaygpOworICAgIGlmICghbV9nbG9iYWxPYmplY3QtPm1hcmtlZCgpKQorICAgICAg
ICBtX2dsb2JhbE9iamVjdC0+bWFyaygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0UpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNzc29uIEFCCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yX2gK
KyNkZWZpbmUgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yX2gKKworI2lmIEVOQUJMRShFVkVOVFNP
VVJDRSkKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NT2JqZWN0
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3RvcihKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyaygp
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0
Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKKyAgICAgICAgdmlydHVhbCBjb25z
dCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQor
CisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdDsKKyAgICB9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0UpCisK
KyNlbmRpZiAvLyBKU0V2ZW50U291cmNlQ29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRVZF
TlRTT1VSQ0UpCisKKyNpbmNsdWRlICJKU0V2ZW50U291cmNlLmgiCisKKyNpbmNsdWRlICJFdmVu
dFNvdXJjZS5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNF
dmVudExpc3RlbmVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBKU0V2ZW50U291cmNlOjptYXJrKCkKK3sKKyAgICBET01PYmplY3Q6Om1h
cmsoKTsKKworICAgIG1hcmtJZk5vdE51bGwobV9pbXBsLT5vbm9wZW4oKSk7CisgICAgbWFya0lm
Tm90TnVsbChtX2ltcGwtPm9ubWVzc2FnZSgpKTsKKyAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+
b25lcnJvcigpKTsKKworICAgIHR5cGVkZWYgRXZlbnRTb3VyY2U6OkV2ZW50TGlzdGVuZXJzTWFw
IEV2ZW50TGlzdGVuZXJzTWFwOworICAgIHR5cGVkZWYgRXZlbnRTb3VyY2U6Okxpc3RlbmVyVmVj
dG9yIExpc3RlbmVyVmVjdG9yOworICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVy
cyA9IG1faW1wbC0+ZXZlbnRMaXN0ZW5lcnMoKTsKKyAgICBmb3IgKEV2ZW50TGlzdGVuZXJzTWFw
OjppdGVyYXRvciBtYXBJdGVyID0gZXZlbnRMaXN0ZW5lcnMuYmVnaW4oKTsgbWFwSXRlciAhPSBl
dmVudExpc3RlbmVycy5lbmQoKTsgKyttYXBJdGVyKSB7CisgICAgICAgIGZvciAoTGlzdGVuZXJW
ZWN0b3I6Oml0ZXJhdG9yIHZlY0l0ZXIgPSBtYXBJdGVyLT5zZWNvbmQuYmVnaW4oKTsgdmVjSXRl
ciAhPSBtYXBJdGVyLT5zZWNvbmQuZW5kKCk7ICsrdmVjSXRlcikKKyAgICAgICAgICAgICgqdmVj
SXRlciktPm1hcmtKU0Z1bmN0aW9uKCk7CisgICAgfQorfQorCitKU1ZhbHVlIEpTRXZlbnRTb3Vy
Y2U6OmFkZEV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQoreworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pTRE9NR2xvYmFs
T2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBpZiAoIWdsb2Jh
bE9iamVjdCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgUmVmUHRyPEpTRXZl
bnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRPckNyZWF0ZUpTRXZlbnRM
aXN0ZW5lcihhcmdzLmF0KDEpKTsKKyAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBpbXBsKCktPmFkZEV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50
b1N0cmluZyhleGVjKSwgbGlzdGVuZXIucmVsZWFzZSgpLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihl
eGVjKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgSlNFdmVudFNv
dXJjZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCit7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01H
bG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICgh
Z2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBKU0V2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyID0gZ2xvYmFsT2JqZWN0LT5maW5kSlNFdmVudExpc3RlbmVyKGFy
Z3MuYXQoMSkpOworICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIGltcGwoKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpLCBsaXN0ZW5lciwgYXJncy5hdCgyKS50b0Jvb2xlYW4oZXhlYykpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoRVZFTlRTT1VSQ0UpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dC5jcHAJKHJldmlzaW9uIDQ0MjU2KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksMTEgQEAKICNpbmNsdWRlICJYTUxI
dHRwUmVxdWVzdC5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0VXBsb2FkLmgiCiAKKyNpZiBF
TkFCTEUoRVZFTlRTT1VSQ0UpCisjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKKyNpbmNsdWRlICJK
U0V2ZW50U291cmNlLmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNB
VElPTlMpCiAjaW5jbHVkZSAiRE9NQXBwbGljYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkpTRE9N
QXBwbGljYXRpb25DYWNoZS5oIgpAQCAtNjUsNiArNzAsMTEgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNT
dGF0ZSogZXhlYywgRXZlbnRUYXJnZQogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4g
anNOdWxsKCk7CiAgICAgCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorICAgIGlmIChFdmVudFNv
dXJjZSogZXZlbnRTb3VyY2UgPSB0YXJnZXQtPnRvRXZlbnRTb3VyY2UoKSkKKyAgICAgICAgcmV0
dXJuIGdldENhY2hlZERPTU9iamVjdFdyYXBwZXIoZXhlYy0+Z2xvYmFsRGF0YSgpLCBldmVudFNv
dXJjZSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gU1ZHRWxlbWVudEluc3Rh
bmNlIHN1cHBvcnRzIGJvdGggdG9TVkdFbGVtZW50SW5zdGFuY2UgYW5kIHRvTm9kZSBzaW5jZSBz
byBtdWNoIG1vdXNlIGhhbmRsaW5nIGNvZGUgZGVwZW5kcyBvbiB0b05vZGUgcmV0dXJuaW5nIGEg
dmFsaWQgbm9kZS4KICAgICBpZiAoU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IHRhcmdl
dC0+dG9TVkdFbGVtZW50SW5zdGFuY2UoKSkKQEAgLTExOSw2ICsxMjksMTAgQEAgRXZlbnRUYXJn
ZXQqIHRvRXZlbnRUYXJnZXQoSlNDOjpKU1ZhbHVlIAogICAgIGlmICh2YWx1ZS5pc09iamVjdCgm
SlNET01XaW5kb3dTaGVsbDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpT
RE9NV2luZG93U2hlbGwqPihhc09iamVjdCh2YWx1ZSkpLT5pbXBsKCk7CiAKKyNpZiBFTkFCTEUo
RVZFTlRTT1VSQ0UpCisgICAgQ09OVkVSVF9UT19FVkVOVF9UQVJHRVQoRXZlbnRTb3VyY2UpCisj
ZW5kaWYKKwogI2lmIEVOQUJMRShPRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpCiAgICAgQ09OVkVS
VF9UT19FVkVOVF9UQVJHRVQoRE9NQXBwbGljYXRpb25DYWNoZSkKICNlbmRpZgpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
NDQyNTYpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDEwIEBACiAjaW5jbHVkZSAiV29ya2VyTmF2aWdh
dG9yLmgiCiAjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KIAorI2lmIEVOQUJM
RShFVkVOVFNPVVJDRSkKKyNpbmNsdWRlICJKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCIKKyNl
bmRpZgorCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03
NCw2ICs3OCwxMyBAQCBib29sIEpTV29ya2VyQ29udGV4dDo6Y3VzdG9tR2V0T3duUHJvcGVyCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorSlNWYWx1ZSBK
U1dvcmtlckNvbnRleHQ6OmV2ZW50U291cmNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yPihleGVj
LCB0aGlzKTsKK30KKyNlbmRpZgorCiBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6eG1sSHR0cFJl
cXVlc3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBnZXRET01Db25zdHJ1
Y3RvcjxKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwpJbmRleDogV2Vi
Q29yZS9kb20vRXZlbnROYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50TmFt
ZXMuaAkocmV2aXNpb24gNDQyNTYpCisrKyBXZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIG1hY3Jv
KG9ic29sZXRlKSBcCiAgICAgbWFjcm8ob2ZmbGluZSkgXAogICAgIG1hY3JvKG9ubGluZSkgXAor
ICAgIG1hY3JvKG9wZW4pIFwKICAgICBtYWNybyhvdmVyZmxvd2NoYW5nZWQpIFwKICAgICBtYWNy
byhwYXN0ZSkgXAogICAgIG1hY3JvKHJlYWR5c3RhdGVjaGFuZ2UpIFwKSW5kZXg6IFdlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdl
dC5jcHAJKHJldmlzaW9uIDQ0MjU2KQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCwxMSBAQCBFdmVudFRhcmdldDo6fkV2ZW50VGFyZ2V0
KCkKIHsKIH0KIAorRXZlbnRTb3VyY2UqIEV2ZW50VGFyZ2V0Ojp0b0V2ZW50U291cmNlKCkKK3sK
KyAgICByZXR1cm4gMDsKK30KKwogTm9kZSogRXZlbnRUYXJnZXQ6OnRvTm9kZSgpCiB7CiAgICAg
cmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHJldmlzaW9uIDQ0MjU2KQorKysgV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRE9NV2luZG93OwogICAgIGNsYXNzIEV2ZW50OwogICAg
IGNsYXNzIEV2ZW50TGlzdGVuZXI7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CiAgICAgY2xhc3Mg
TWVzc2FnZVBvcnQ7CiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBTVkdFbGVtZW50SW5zdGFu
Y2U7CkBAIC01NCw2ICs1NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEV2
ZW50VGFyZ2V0IHsKICAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgRXZlbnRTb3VyY2UqIHRv
RXZlbnRTb3VyY2UoKTsKICAgICAgICAgdmlydHVhbCBNZXNzYWdlUG9ydCogdG9NZXNzYWdlUG9y
dCgpOwogICAgICAgICB2aXJ0dWFsIE5vZGUqIHRvTm9kZSgpOwogICAgICAgICB2aXJ0dWFsIERP
TVdpbmRvdyogdG9ET01XaW5kb3coKTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCShyZXZpc2lvbiA0NDI1
NikKKysrIFdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zODYs
NiArMzg2LDEwIEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VDb25z
dHJ1Y3RvciBSYW5nZTsKICAgICAgICAgYXR0cmlidXRlIFJhbmdlRXhjZXB0aW9uQ29uc3RydWN0
b3IgUmFuZ2VFeGNlcHRpb247CiAKKyNpZiBFTkFCTEVfRVZFTlRTT1VSQ0UKKyAgICAgICAgYXR0
cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRTb3Vy
Y2U7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyNlbmRpZgorCiAgICAgICAgIC8v
IE1vemlsbGEgaGFzIGEgc2VwYXJhdGUgWE1MRG9jdW1lbnQgb2JqZWN0IGZvciBYTUwgZG9jdW1l
bnRzLiAKICAgICAgICAgLy8gV2UganVzdCB1c2UgRG9jdW1lbnQgZm9yIHRoaXMuCiAgICAgICAg
IGF0dHJpYnV0ZSBEb2N1bWVudENvbnN0cnVjdG9yIFhNTERvY3VtZW50OwpJbmRleDogV2ViQ29y
ZS9wYWdlL0V2ZW50U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRXZlbnRT
b3VyY2UuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorCisjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIK
KworI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAi
RXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
Ik1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29k
ZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIEV2ZW50U291cmNlOjpEZWZhdWx0UmVjb25u
ZWN0RGVsYXkgPSAzMDAwOworCitFdmVudFNvdXJjZTo6RXZlbnRTb3VyY2UoY29uc3QgU3RyaW5n
JiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQsIHRoaXMpCisgICAgLCBtX3N0YXRlKENP
Tk5FQ1RJTkcpCisgICAgLCBtX3JlY29ubmVjdFRpbWVyKHRoaXMsICZFdmVudFNvdXJjZTo6cmVj
b25uZWN0VGltZXJGaXJlZCkKKyAgICAsIG1fZmFpbFNpbGVudGx5KGZhbHNlKQorICAgICwgbV9y
ZWNvbm5lY3REZWxheShEZWZhdWx0UmVjb25uZWN0RGVsYXkpCit7CisgICAgaWYgKHVybC5pc0Vt
cHR5KCkgfHwgIShtX3VybCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCkpLmlzVmFsaWQoKSkg
eworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
Ly8gRklYTUU6IHNob3VsZCBzdXBwb3J0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cworICAgIGlmICgh
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1f
dXJsKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fb3JpZ2luID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9y
aWdpbigpLT50b1N0cmluZygpOworICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6
OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJVVEYtOCIpOworCisgICAgY29ubmVjdCgpOworfQorCitF
dmVudFNvdXJjZTo6fkV2ZW50U291cmNlKCkKK3sKK30KKwordm9pZCBFdmVudFNvdXJjZTo6Y29u
bmVjdCgpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QobV91cmwpOworICAgIHJlcXVl
c3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQo
IkFjY2VwdCIsICJ0ZXh0L2V2ZW50LXN0cmVhbSIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIik7CisgICAgaWYgKCFtX2xhc3RFdmVu
dElkLmlzRW1wdHkoKSkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkxhc3Qt
RXZlbnQtSUQiLCBtX2xhc3RFdmVudElkKTsKKyAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2Fk
ZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMsIHJlcXVlc3QsIFNlbmRM
b2FkQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29udGVudCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscyk7
CisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpz
Y2hlZHVsZVJlY29ubmVjdCgpCit7CisgICAgbV9zdGF0ZSA9IENPTk5FQ1RJTkc7CisgICAgbV9y
ZWNvbm5lY3RUaW1lci5zdGFydE9uZVNob3QobV9yZWNvbm5lY3REZWxheSAvIDEwMDApOworfQor
Cit2b2lkIEV2ZW50U291cmNlOjpyZWNvbm5lY3RUaW1lckZpcmVkKFRpbWVyPEV2ZW50U291cmNl
PiopCit7CisgICAgY29ubmVjdCgpOworfQorCitTdHJpbmcgRXZlbnRTb3VyY2U6OnVybCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdXJsLnN0cmluZygpOworfQorCitFdmVudFNvdXJjZTo6U3Rh
dGUgRXZlbnRTb3VyY2U6OnJlYWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRl
OworfQorCit2b2lkIEV2ZW50U291cmNlOjpkaXNjb25uZWN0KCkKK3sKKyAgICBpZiAobV9zdGF0
ZSA9PSBDTE9TRUQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3JlY29ubmVjdFRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVjb25uZWN0VGltZXIuc3RvcCgpOworCisgICAgYm9v
bCBjYW5jZWwgPSBtX3N0YXRlID09IE9QRU47CisgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICBt
X2ZhaWxTaWxlbnRseSA9IHRydWU7CisKKyAgICBpZiAoY2FuY2VsKQorICAgICAgICBtX2xvYWRl
ci0+Y2FuY2VsKCk7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEV2ZW50U291cmNlOjpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWN0aXZlRE9NT2Jq
ZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmFk
ZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVy
c01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOwor
ICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpIHsKKyAgICAgICAgTGlzdGVu
ZXJWZWN0b3IgbGlzdGVuZXJzOworICAgICAgICBsaXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVu
ZXIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXIt
PnNlY29uZDsKKyAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgbGlzdGVuZXJJ
dGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7
ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVu
dExpc3RlbmVyKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5l
cnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICB9Cit9CisKK3ZvaWQgRXZlbnRTb3Vy
Y2U6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2
ZW50TGlzdGVuZXIqIGV2ZW50TGlzdGVuZXIsIGJvb2wpCit7CisgICAgRXZlbnRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAg
ICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOworICAgIGZvciAo
TGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVycy5i
ZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyArK2xpc3RlbmVySXRlcikg
eworICAgICAgICBpZiAoKmxpc3RlbmVySXRlciA9PSBldmVudExpc3RlbmVyKSB7CisgICAgICAg
ICAgICBsaXN0ZW5lcnMucmVtb3ZlKGxpc3RlbmVySXRlciAtIGxpc3RlbmVycy5iZWdpbigpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBFdmVudFNv
dXJjZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKCFldmVudCB8fCBldmVudC0+dHlwZSgpLmlzRW1wdHkoKSkgewor
ICAgICAgICBlYyA9IEV2ZW50RXhjZXB0aW9uOjpVTlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgRXZlbnRMaXN0ZW5lciogYXR0cmli
dXRlTGlzdGVuZXIgPSBtX2F0dHJpYnV0ZUxpc3RlbmVycy5nZXQoZXZlbnQtPnR5cGUoKSkuZ2V0
KCk7CisgICAgaWYgKGF0dHJpYnV0ZUxpc3RlbmVyKSB7CisgICAgICAgIGV2ZW50LT5zZXRUYXJn
ZXQodGhpcyk7CisgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOworICAgICAg
ICBhdHRyaWJ1dGVMaXN0ZW5lci0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKKyAg
ICB9CisKKyAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnNDb3B5ID0gbV9ldmVudExpc3RlbmVy
cy5nZXQoZXZlbnQtPnR5cGUoKSk7CisgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzQ29weS5iZWdpbigpOyBsaXN0ZW5lckl0ZXIg
IT0gbGlzdGVuZXJzQ29weS5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAgZXZlbnQt
PnNldFRhcmdldCh0aGlzKTsKKyAgICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7
CisgICAgICAgIGxpc3RlbmVySXRlci0+Z2V0KCktPmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBm
YWxzZSk7CisgICAgfQorCisgICAgcmV0dXJuICFldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwor
fQorCit2b2lkIEV2ZW50U291cmNlOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgaW50IHN0YXR1c0NvZGUgPSByZXNwb25zZS5odHRw
U3RhdHVzQ29kZSgpOworICAgIGlmIChzdGF0dXNDb2RlID09IDIwMCAmJiByZXNwb25zZS5odHRw
SGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIpID09ICJ0ZXh0L2V2ZW50LXN0cmVhbSIpIHsKKyAg
ICAgICAgbV9zdGF0ZSA9IE9QRU47CisgICAgICAgIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2ZW50
TmFtZXMoKS5vcGVuRXZlbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzdGF0dXNDb2Rl
IDw9IDIwMCB8fCBzdGF0dXNDb2RlID4gMjk5KQorICAgICAgICAgICAgbV9zdGF0ZSA9IENMT1NF
RDsKKyAgICAgICAgbV9sb2FkZXItPmNhbmNlbCgpOworICAgIH0KK30KKwordm9pZCBFdmVudFNv
dXJjZTo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAg
ICBhcHBlbmQobV9yZWNlaXZlQnVmLCBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgpKTsK
KyAgICBwYXJzZUV2ZW50U3RyZWFtKCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpZEZpbmlz
aExvYWRpbmcodW5zaWduZWQgbG9uZykKK3sKKyAgICBpZiAobV9yZWNlaXZlQnVmLnNpemUoKSA+
IDAgfHwgbV9kYXRhLnNpemUoKSA+IDApIHsKKyAgICAgICAgYXBwZW5kKG1fcmVjZWl2ZUJ1Ziwg
IlxuXG4iKTsKKyAgICAgICAgcGFyc2VFdmVudFN0cmVhbSgpOworICAgIH0KKyAgICBtX3N0YXRl
ID0gQ09OTkVDVElORzsKKyAgICBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCkuZXJy
b3JFdmVudCk7CisgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisKKyAgICBpZiAobV9z
dGF0ZSAhPSBDTE9TRUQpCisgICAgICAgIHNjaGVkdWxlUmVjb25uZWN0KCk7Cit9CisKK3ZvaWQg
RXZlbnRTb3VyY2U6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAg
aWYgKCFtX2ZhaWxTaWxlbnRseSkKKyAgICAgICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnRO
YW1lcygpLmVycm9yRXZlbnQpOworICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworCisg
ICAgaW50IGNhbmNlbGVkID0gZXJyb3IuaXNDYW5jZWxsYXRpb24oKTsKKyAgICBpZiAoKChtX3N0
YXRlID09IENPTk5FQ1RJTkcpICYmIGNhbmNlbGVkKSB8fCAoKG1fc3RhdGUgPT0gT1BFTikgJiYg
IWNhbmNlbGVkKSkKKyAgICAgICAgc2NoZWR1bGVSZWNvbm5lY3QoKTsKK30KKwordm9pZCBFdmVu
dFNvdXJjZTo6ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQoreworICAgIG1fc3RhdGUgPSBDTE9TRUQ7
CisgICAgbV9sb2FkZXItPmNhbmNlbCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpwYXJzZUV2
ZW50U3RyZWFtKCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYnVmUG9zID0gMDsKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIGludCBsaW5lTGVuZ3RoID0gLTE7CisgICAgICAgIGludCBmaWVsZExlbmd0
aCA9IC0xOworICAgICAgICBpbnQgY2FycmlhZ2VSZXR1cm4gPSAwOworICAgICAgICB1bnNpZ25l
ZCBpbnQgYnVmU2l6ZSA9IG1fcmVjZWl2ZUJ1Zi5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSBidWZQb3M7IGxpbmVMZW5ndGggPCAwICYmIGkgPCBidWZTaXplOyBpKyspIHsK
KyAgICAgICAgICAgIHN3aXRjaCAobV9yZWNlaXZlQnVmW2ldKSB7CisgICAgICAgICAgICBjYXNl
ICc6JzoKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRMZW5ndGggPCAwKQorICAgICAgICAgICAg
ICAgICAgICBmaWVsZExlbmd0aCA9IGkgLSBidWZQb3M7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgICAgICAgaWYgKGkgPiBidWZQb3Mg
JiYgbV9yZWNlaXZlQnVmW2kgLSAxXSA9PSAnXHInKSB7CisgICAgICAgICAgICAgICAgICAgIGNh
cnJpYWdlUmV0dXJuKys7CisgICAgICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgbGluZUxlbmd0aCA9IGkgLSBidWZQb3M7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlu
ZUxlbmd0aCA8IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBwYXJzZUV2ZW50U3Ry
ZWFtTGluZShidWZQb3MsIGZpZWxkTGVuZ3RoLCBsaW5lTGVuZ3RoKTsKKyAgICAgICAgYnVmUG9z
ICs9IGxpbmVMZW5ndGggKyBjYXJyaWFnZVJldHVybiArIDE7CisgICAgfQorICAgIGlmIChidWZQ
b3MpCisgICAgICAgIG1fcmVjZWl2ZUJ1Zi5yZW1vdmUoMCwgYnVmUG9zKTsKK30KKwordm9pZCBF
dmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbUxpbmUodW5zaWduZWQgaW50IGJ1ZlBvcywgaW50
IGZpZWxkTGVuZ3RoLCBpbnQgbGluZUxlbmd0aCkKK3sKKyAgICBpZiAoIWxpbmVMZW5ndGgpIHsK
KyAgICAgICAgaWYgKCFtX2RhdGEuaXNFbXB0eSgpKQorICAgICAgICAgICAgZGlzcGF0Y2hNZXNz
YWdlRXZlbnQoKTsKKyAgICAgICAgaWYgKCFtX2V2ZW50TmFtZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBtX2V2ZW50TmFtZSA9ICIiOworICAgIH0gZWxzZSBpZiAoZmllbGRMZW5ndGgpIHsKKyAg
ICAgICAgYm9vbCBub1ZhbHVlID0gZmllbGRMZW5ndGggPCAwOworCisgICAgICAgIFN0cmluZyBm
aWVsZCgmbV9yZWNlaXZlQnVmW2J1ZlBvc10sIG5vVmFsdWUgPyBsaW5lTGVuZ3RoIDogZmllbGRM
ZW5ndGgpOworICAgICAgICBpbnQgc3RlcDsKKyAgICAgICAgaWYgKG5vVmFsdWUpCisgICAgICAg
ICAgICBzdGVwID0gbGluZUxlbmd0aDsKKyAgICAgICAgZWxzZSBpZiAobV9yZWNlaXZlQnVmW2J1
ZlBvcyArIGZpZWxkTGVuZ3RoICsgMV0gIT0gJyAnKQorICAgICAgICAgICAgc3RlcCA9IGZpZWxk
TGVuZ3RoICsgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RlcCA9IGZpZWxkTGVuZ3Ro
ICsgMjsKKyAgICAgICAgYnVmUG9zICs9IHN0ZXA7CisgICAgICAgIGxpbmVMZW5ndGggLT0gc3Rl
cDsKKworICAgICAgICBpZiAoZmllbGQgPT0gImRhdGEiKSB7CisgICAgICAgICAgICBpZiAobV9k
YXRhLnNpemUoKSA+IDApCisgICAgICAgICAgICAgICAgbV9kYXRhLmFwcGVuZCgnXG4nKTsKKyAg
ICAgICAgICAgIGlmICghbm9WYWx1ZSkKKyAgICAgICAgICAgICAgICBtX2RhdGEuYXBwZW5kKCZt
X3JlY2VpdmVCdWZbYnVmUG9zXSwgbGluZUxlbmd0aCk7CisgICAgICAgIH0gZWxzZSBpZiAoZmll
bGQgPT0gImV2ZW50IikKKyAgICAgICAgICAgIG1fZXZlbnROYW1lID0gbGluZUxlbmd0aCA/IFN0
cmluZygmbV9yZWNlaXZlQnVmW2J1ZlBvc10sIGxpbmVMZW5ndGgpIDogIiI7CisgICAgICAgIGVs
c2UgaWYgKGZpZWxkID09ICJpZCIpCisgICAgICAgICAgICBtX2xhc3RFdmVudElkID0gbGluZUxl
bmd0aCA/IFN0cmluZygmbV9yZWNlaXZlQnVmW2J1ZlBvc10sIGxpbmVMZW5ndGgpIDogIiI7Cisg
ICAgICAgIGVsc2UgaWYgKGZpZWxkID09ICJyZXRyeSIpIHsKKyAgICAgICAgICAgIGlmIChub1Zh
bHVlKQorICAgICAgICAgICAgICAgIG1fcmVjb25uZWN0RGVsYXkgPSBEZWZhdWx0UmVjb25uZWN0
RGVsYXk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdmFsdWUo
Jm1fcmVjZWl2ZUJ1ZltidWZQb3NdLCBsaW5lTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBib29s
IG9rOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXRyeSA9IHZhbHVlLnRv
VUludDY0KCZvayk7CisgICAgICAgICAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgICAgICAg
ICBtX3JlY29ubmVjdERlbGF5ID0gcmV0cnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9IEV2ZW50OjpjcmVh
dGUodHlwZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBk
aXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKKyAgICBBU1NFUlQoIWVjKTsKK30KKwor
dm9pZCBFdmVudFNvdXJjZTo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQoKQoreworICAgIFJlZlB0cjxN
ZXNzYWdlRXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKCk7CisgICAgU3RyaW5nIGV2
ZW50TmFtZSA9IG1fZXZlbnROYW1lLmlzRW1wdHkoKSA/IGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZl
bnQuc3RyaW5nKCkgOiBtX2V2ZW50TmFtZTsKKyAgICBldnQtPmluaXRNZXNzYWdlRXZlbnQoZXZl
bnROYW1lLCBmYWxzZSwgZmFsc2UsIFN0cmluZzo6YWRvcHQobV9kYXRhKSwgbV9vcmlnaW4sIG1f
bGFzdEV2ZW50SWQsIDAsIDApOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRpc3Bh
dGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOworICAgIEFTU0VSVCghZWMpOworfQorCit2b2lk
IEV2ZW50U291cmNlOjpzdG9wKCkKK3sKKyAgICBkaXNjb25uZWN0KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKSW5kZXg6IFdl
YkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVu
dFNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVy
aWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRXZlbnRTb3VyY2Vf
aAorI2RlZmluZSBFdmVudFNvdXJjZV9oCisKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNp
bmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgi
CisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNp
bmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOworICAgIGNsYXNzIFRleHRSZXNvdXJjZURl
Y29kZXI7CisgICAgY2xhc3MgVGhyZWFkYWJsZUxvYWRlcjsKKworICAgIGNsYXNzIEV2ZW50U291
cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8RXZlbnRTb3VyY2U+LCBwdWJsaWMgRXZlbnRUYXJnZXQs
IHByaXZhdGUgVGhyZWFkYWJsZUxvYWRlckNsaWVudCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7
CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFdmVudFNvdXJjZT4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRvcHRSZWYobmV3IEV2ZW50U291cmNlKHVybCwg
Y29udGV4dCwgZWMpKTsgfQorICAgICAgICB2aXJ0dWFsIH5FdmVudFNvdXJjZSgpOworCisgICAg
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgRGVmYXVsdFJlY29ubmVjdERlbGF5
OworCisgICAgICAgIFN0cmluZyB1cmwoKSBjb25zdDsKKworICAgICAgICBlbnVtIFN0YXRlIHsK
KyAgICAgICAgICAgIENPTk5FQ1RJTkcgPSAwLAorICAgICAgICAgICAgT1BFTiA9IDEsCisgICAg
ICAgICAgICBDTE9TRUQgPSAyLAorICAgICAgICB9OworCisgICAgICAgIFN0YXRlIHJlYWR5U3Rh
dGUoKSBjb25zdDsKKworICAgICAgICB2b2lkIHNldE9ub3BlbihQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuc2V0KGV2ZW50TmFt
ZXMoKS5vcGVuRXZlbnQsIGV2ZW50TGlzdGVuZXIpOyB9CisgICAgICAgIEV2ZW50TGlzdGVuZXIq
IG9ub3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlTGlzdGVuZXJzLmdldChldmVudE5h
bWVzKCkub3BlbkV2ZW50KS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX2F0dHJpYnV0ZUxpc3Rl
bmVycy5zZXQoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7IH0KKyAg
ICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNzYWdlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQpLmdldCgpOyB9CisKKyAg
ICAgICAgdm9pZCBzZXRPbmVycm9yKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0
ZW5lcikgeyBtX2F0dHJpYnV0ZUxpc3RlbmVycy5zZXQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQs
IGV2ZW50TGlzdGVuZXIpOyB9CisgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9uZXJyb3IoKSBjb25z
dCB7IHJldHVybiBtX2F0dHJpYnV0ZUxpc3RlbmVycy5nZXQoZXZlbnROYW1lcygpLmVycm9yRXZl
bnQpLmdldCgpOyB9CisKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0KCk7CisKKyAgICAgICAgdXNp
bmcgUmVmQ291bnRlZDxFdmVudFNvdXJjZT46OnJlZjsKKyAgICAgICAgdXNpbmcgUmVmQ291bnRl
ZDxFdmVudFNvdXJjZT46OmRlcmVmOworCisgICAgICAgIHZpcnR1YWwgRXZlbnRTb3VyY2UqIHRv
RXZlbnRTb3VyY2UoKSB7IHJldHVybiB0aGlzOyB9CisgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworCisgICAgICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxFdmVudExpc3RlbmVyPiA+IExpc3RlbmVyVmVjdG9yOwor
ICAgICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBMaXN0ZW5lclZlY3Rvcj4gRXZl
bnRMaXN0ZW5lcnNNYXA7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4s
IGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVFdmVudExpc3Rl
bmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyKiwgYm9vbCB1
c2VDYXB0dXJlKTsKKyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0
cjxFdmVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2
ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQorCisgICAgICAgIHZp
cnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBFdmVudFNvdXJjZShj
b25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0
aW9uQ29kZSYgZWMpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsg
cmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVm
KCk7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbFJlZGlyZWN0Q2hlY2soKTsKKworICAgICAgICB2b2lkIGNvbm5lY3QoKTsKKyAg
ICAgICAgdm9pZCBzY2hlZHVsZVJlY29ubmVjdCgpOworICAgICAgICB2b2lkIHJlY29ubmVjdFRp
bWVyRmlyZWQoVGltZXI8RXZlbnRTb3VyY2U+Kik7CisgICAgICAgIHZvaWQgcGFyc2VFdmVudFN0
cmVhbSgpOworICAgICAgICB2b2lkIHBhcnNlRXZlbnRTdHJlYW1MaW5lKHVuc2lnbmVkIGludCBw
b3MsIGludCBmaWVsZExlbmd0aCwgaW50IGxpbmVMZW5ndGgpOworICAgICAgICB2b2lkIGRpc3Bh
dGNoR2VuZXJpY0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQg
ZGlzcGF0Y2hNZXNzYWdlRXZlbnQoKTsKKworICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBT
dGF0ZSBtX3N0YXRlOworCisgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RXZl
bnRMaXN0ZW5lcj4gPiBtX2F0dHJpYnV0ZUxpc3RlbmVyczsKKyAgICAgICAgRXZlbnRMaXN0ZW5l
cnNNYXAgbV9ldmVudExpc3RlbmVyczsKKworICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVj
b2Rlcj4gbV9kZWNvZGVyOworICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2Fk
ZXI7CisgICAgICAgIFRpbWVyPEV2ZW50U291cmNlPiBtX3JlY29ubmVjdFRpbWVyOworICAgICAg
ICBWZWN0b3I8VUNoYXI+IG1fcmVjZWl2ZUJ1ZjsKKyAgICAgICAgYm9vbCBtX2ZhaWxTaWxlbnRs
eTsKKworICAgICAgICBTdHJpbmcgbV9ldmVudE5hbWU7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4g
bV9kYXRhOworICAgICAgICBTdHJpbmcgbV9sYXN0RXZlbnRJZDsKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBsb25nIG1fcmVjb25uZWN0RGVsYXk7CisgICAgICAgIFN0cmluZyBtX29yaWdpbjsKKyAg
ICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRT
T1VSQ0UpCisKKyNlbmRpZiAvLyBFdmVudFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZl
bnRTb3VyY2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNzc29uIEFC
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9y
cworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5kb3cgeworCisgICAgaW50ZXJm
YWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9RVZFTlRTT1VSQ0UsCisgICAgICAgIEN1c3RvbU1h
cmtGdW5jdGlvbiwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKKyAgICBdIEV2ZW50U291cmNlIHsK
KworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIFVSTDsKKworICAgICAgICAv
LyByZWFkeSBzdGF0ZQorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDT05ORUNUSU5HID0g
MDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgT1BFTiA9IDE7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IENMT1NFRCA9IDI7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBs
b25nIHJlYWR5U3RhdGU7CisKKyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ubWVzc2FnZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAg
ICAgICAgdm9pZCBkaXNjb25uZWN0KCk7CisKKyAgICAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJm
YWNlCisgICAgICAgIFtDdXN0b21dIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRXZlbnRMaXN0
ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4g
Ym9vbGVhbiB1c2VDYXB0dXJlKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCByZW1vdmVFdmVudExp
c3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW4gRXZlbnRMaXN0ZW5lciBsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7CisgICAgICAg
IGJvb2xlYW4gZGlzcGF0Y2hFdmVudChpbiBFdmVudCBldnQpCisgICAgICAgICAgICByYWlzZXMo
RXZlbnRFeGNlcHRpb24pOworCisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5pZGwJKHJldmlzaW9uIDQ0MjU2KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw5IEBAIG1vZHVsZSB0aHJlYWRzIHsKICAg
ICAgICAgYXR0cmlidXRlIE1lc3NhZ2VFdmVudENvbnN0cnVjdG9yIE1lc3NhZ2VFdmVudDsKICAg
ICAgICAgYXR0cmlidXRlIFdvcmtlckxvY2F0aW9uQ29uc3RydWN0b3IgV29ya2VyTG9jYXRpb247
CiAKKyNpZiBFTkFCTEVfRVZFTlRTT1VSQ0UKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21H
ZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRTb3VyY2U7CisjZW5kaWYKICAgICAg
ICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3Ig
WE1MSHR0cFJlcXVlc3Q7CiAgICAgfTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDQyNjQpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAw
OS0wNS0yOSAgQWRhbSBCZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgZm9y
IEV2ZW50U291cmNlLiAKKworICAgICAgICAqIGZhc3QvZXZlbnRzb3VyY2U6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYXR0cmlidXRlLWxpc3RlbmVycy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3Vy
Y2UtYXR0cmlidXRlLWxpc3RlbmVycy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50
c291cmNlL2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLWJhZC1taW1lLXR5cGUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNl
LWJhZC1taW1lLXR5cGUuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0tZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXBhcnNlLWV2ZW50
LXN0cmVhbS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2
ZW50c291cmNlLXJlY29ubmVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0Lmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3Rh
dGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJj
ZS9ldmVudHNvdXJjZS1zdGF0dXMtY29kZS1zdGF0ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAv
dGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2JhZC1taW1lLXR5cGUuYXNpczogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvZXZlbnQtc3RyZWFtLnBo
cDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvcmVj
b25uZWN0LnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNv
dXJjZXMvc2ltcGxlLWV2ZW50LXN0cmVhbS5hc2lzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9zdGF0dXMtY29kZXMucGhwOiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnM6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9ldmVudHNvdXJjZS1zaW1wbGUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZl
bnRzb3VyY2Utc2ltcGxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRz
b3VyY2Uvd29ya2Vycy9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZl
bnRzb3VyY2Uvd29ya2Vycy9yZXNvdXJjZXMvc2ltcGxlLXdvcmtlci5qczogQWRkZWQuCisgICAg
ICAgIChlcy5vbm1lc3NhZ2UpOgorICAgICAgICAoZXMub25lcnJvcik6CisKIDIwMDktMDUtMjkg
IE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKFRlc3QgZml4KS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZl
bnRzb3VyY2UtYXR0cmlidXRlLWxpc3RlbmVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVu
ZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
b3VyY2UvZXZlbnRzb3VyY2UtYXR0cmlidXRlLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOCBAQAorVGVzdCBFdmVudFNvdXJjZSBhdHRyaWJ1dGUgbGlzdGVu
ZXIgZnVuY3Rpb25hbGl0eS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMg
Zm9sbG93ZWQgYnkgRE9ORS4KKworUEFTUzogYXR0cmlidXRlIGxpc3RlbmVycyBhcmUgaW5pdGlh
bGx5IG51bGwKK1BBU1M6IHNldHRpbmcgYW5kIGdldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdv
cmtzCitQQVNTOiByZXNldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtzCitQQVNTOiBkaXNw
YXRjaGluZyBldmVudCBvbiBhbiBFdmVudFNvdXJjZSB0cmlnZ2VycyBhdHRyaWJ1dGUgbGlzdGVu
ZXIKK0RPTkUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJj
ZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJp
YnV0ZS1saXN0ZW5lcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorPGh0bWw+
Cis8Ym9keT4KKzxwPlRlc3QgRXZlbnRTb3VyY2UgYXR0cmlidXRlIGxpc3RlbmVyIGZ1bmN0aW9u
YWxpdHkuIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5
IERPTkUuPC9wPgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBs
b2cobXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRN
TCArPSBtc2cgKyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgZXMgPSBuZXcgRXZlbnRTb3Vy
Y2UoImV2ZW50c291cmNlIik7CisKK2lmIChlcy5vbm9wZW4gPT0gbnVsbCAmJiBlcy5vbm1lc3Nh
Z2UgPT0gbnVsbCAmJiBlcy5vbmVycm9yID09IG51bGwpCisgICAgbG9nKCJQQVNTOiBhdHRyaWJ1
dGUgbGlzdGVuZXJzIGFyZSBpbml0aWFsbHkgbnVsbCIpOworZWxzZQorICAgIGxvZygiRkFJTDog
YXR0cmlidXRlIGxpc3RlbmVycyBhcmUgbm90IG51bGwgaW5pdGlhbGx5Iik7CisKK3ZhciBhID0g
ZnVuY3Rpb24gKCkge307Citlcy5vbm9wZW4gPSBhOworaWYgKGVzLm9ub3BlbiA9PSBhKQorICAg
IGxvZygiUEFTUzogc2V0dGluZyBhbmQgZ2V0dGluZyBhdHRyaWJ1dGUgbGlzdGVuZXIgd29ya3Mi
KTsKK2Vsc2UKKyAgICBsb2coIkZBSUw6IHNldHRpbmcvZ2V0dGluZyBhdHRyaWJ1dGUgbGlzdGVu
ZXIgZG9lcyBub3Qgd29yayIpOworCit2YXIgYiA9IGZ1bmN0aW9uICgpIHt9OworZXMub25vcGVu
ID0gYjsKK2lmIChlcy5vbm9wZW4gPT0gYikKKyAgICBsb2coIlBBU1M6IHJlc2V0dGluZyBhdHRy
aWJ1dGUgbGlzdGVuZXIgd29ya3MiKTsKK2Vsc2UKKyAgICBsb2coIkZBSUw6IHJlc2V0dGluZyBh
dHRyaWJ1dGUgZG9lcyBub3Qgd29yayIpOworCit2YXIgZmxhZyA9IGZhbHNlOworZXMub25tZXNz
YWdlID0gZnVuY3Rpb24gKGUpIHsgZmxhZyA9IChlLmRhdGEgPT0gImhlbGxvIik7IH07Cit2YXIg
ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1lc3NhZ2VFdmVudCIpOworZXZ0LmluaXRNZXNz
YWdlRXZlbnQoIm1lc3NhZ2UiLCBmYWxzZSwgZmFsc2UsICJoZWxsbyIsIG51bGwsIG51bGwsIG51
bGwsIG51bGwpOworZXMuZGlzcGF0Y2hFdmVudChldnQpOworaWYgKGZsYWcpIHsKKyAgICBsb2co
IlBBU1M6IGRpc3BhdGNoaW5nIGV2ZW50IG9uIGFuIEV2ZW50U291cmNlIHRyaWdnZXJzIGF0dHJp
YnV0ZSBsaXN0ZW5lciIpOworICAgIGxvZygiRE9ORSIpOworfQorZWxzZQorICAgIGxvZygiRkFJ
TDogZGlzcGF0Y2hpbmcgZXZlbnQgb24gYW4gRXZlbnRTb3VyY2UgZG9lcyBub3QgdHJpZ2dlciBh
dHRyaWJ1dGUgbGlzdGVuZXIiKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNv
dXJjZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWNv
bnN0cnVjdG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitUZXN0
IEV2ZW50U291cmNlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNl
cmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuCisKK1BBU1M6IG1pc3Npbmcg
YXJndW1lbnQgdG8gRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0
aW9uIChTeW50YXhFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMpCitQQVNTOiBwYXNzaW5nIGFu
IGVtcHR5IHN0cmluZyB0byB0aGUgRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4g
YW4gZXhjZXB0aW9uIChFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMikKK1BBU1M6
IHBhc3NpbmcgYW4gaW52YWxpZCBVUkwgdG8gdGhlIEV2ZW50U291cmNlIGNvbnN0cnVjdG9yIHJl
c3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAoRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTIpCitET05FCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3Vy
Y2UtY29uc3RydWN0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
c291cmNlL2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50
U291cmNlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNlcmllcyBv
ZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuPC9wPgorPGRpdiBpZD0icmVzdWx0Ij48
L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCArPSBtc2cgKyAiPGJyPiI7Cit9CisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
fQorCit0cnkgeworICAgIG5ldyBFdmVudFNvdXJjZSgpOworICAgIGxvZygiRkFJTDogbm8gZXhj
ZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGNvbnN0cnVjdCBhbiBFdmVudFNvdXJjZSB3aXRob3V0IGFy
Z3VtZW50Iik7Cit9CitjYXRjaCAoZXgpIHsKKyAgICBsb2coIlBBU1M6IG1pc3NpbmcgYXJndW1l
bnQgdG8gRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgi
ICsgZXggKyAiKSIpOworfQorCit0cnkgeworICAgIG5ldyBFdmVudFNvdXJjZSgiIik7CisgICAg
bG9nKCJGQUlMOiBubyBleGNlcHRpb24gd2hlbiBwYXNzaW5nIGFuIGVtcHR5IHN0cmluZyB0byB0
aGUgRXZlbnRTb3VyY2UgY29uc3RydWN0b3IiKTsKK30KK2NhdGNoIChleCkgeworICAgIGxvZygi
UEFTUzogcGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gdGhlIEV2ZW50U291cmNlIGNvbnN0cnVj
dG9yIHJlc3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAoIiArIGV4ICsgIikiKTsKK30KKwordHJ5IHsK
KyAgICBuZXcgRXZlbnRTb3VyY2UoImh0dHA6Ly93ZWJzZXJ2ZXI6ZWlnaHR5LyIpOworICAgIGxv
ZygiRkFJTDogbm8gZXhjZXB0aW9uIHdoZW4gcGFzc2luZyBhbiBpbnZhbGlkIFVSTCB0byB0aGUg
RXZlbnRTb3VyY2UgY29uc3RydWN0b3IiKTsKK30KK2NhdGNoIChleCkgeworICAgIGxvZygiUEFT
UzogcGFzc2luZyBhbiBpbnZhbGlkIFVSTCB0byB0aGUgRXZlbnRTb3VyY2UgY29uc3RydWN0b3Ig
cmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworICAgIGxvZygiRE9ORSIp
OworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLWJhZC1t
aW1lLXR5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291
cmNlLWJhZC1taW1lLXR5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKK1Rlc3QgRXZlbnRTb3VyY2Ugd2l0aCBhbiBldmVudC1zdHJlYW0gd2l0aCBpbmNvcnJlY3Qg
bWltZS10eXBlLgorCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRz
b3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9l
dmVudHNvdXJjZS1iYWQtbWltZS10eXBlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMg
QEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50U291cmNlIHdpdGggYW4gZXZlbnQtc3Ry
ZWFtIHdpdGggaW5jb3JyZWN0IG1pbWUtdHlwZS48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2
PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsKK30KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisK
K3ZhciBlcyA9IG5ldyBFdmVudFNvdXJjZSgicmVzb3VyY2VzL2JhZC1taW1lLXR5cGUuYXNpcyIp
OworCitlcy5vbm9wZW4gPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgbG9nKCJGQUlMOiBnb3QgdW5l
eHBlY3RlZCBvcGVuIGV2ZW50Iik7CisgICAgZW5kKCk7Cit9OworCitlcy5vbm1lc3NhZ2UgPSBm
dW5jdGlvbiAoZXZ0KSB7CisgICAgbG9nKCJGQUlMOiBnb3QgdW5leHBlY3RlZCBtZXNzYWdlIGV2
ZW50Iik7CisgICAgZW5kKCk7Cit9OworCitlcy5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAg
IGlmIChlcy5yZWFkeVN0YXRlID09IGVzLkNMT1NFRCkKKyAgICAgICAgbG9nKCJQQVNTIik7Cisg
ICAgZWxzZQorICAgICAgICBsb2coIkZBSUw6IGludmFsaWQgc3RhdGUiKTsKKyAgICBlbmQoKTsK
K307CisKK2Z1bmN0aW9uIGVuZCgpIHsKKyAgICBlcy5kaXNjb25uZWN0KCk7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQt
c3RyZWFtLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2V2ZW50c291cmNlL2V2ZW50c291cmNlLXBhcnNlLWV2ZW50LXN0cmVhbS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50
c291cmNlLXBhcnNlLWV2ZW50LXN0cmVhbS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTMgQEAKK1Rlc3QgRXZlbnRTb3VyY2UgdGV4dC9ldmVudC1zdHJlYW0gcGFyc2luZy4g
U2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS4K
KworUEFTUzogZ290IG9wZW4gZXZlbnQKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IHdpdGggZGF0YSAi
c2ltcGxlIgorUEFTUzogcmVjZWl2ZWQgZXZlbnQgd2l0aCBkYXRhIHNwYW5uaW5nIG11bHRpcGxl
IGxpbmVzCitQQVNTOiByZWNldmllZCBldmVudCBhbmQgbGFzdEV2ZW50SWQgaXMgIjEiCitQQVNT
OiByZWNlaXZlZCBldmVudCBhbmQgbGFzdEV2ZW50SWQgaXMgc3RpbGwgIjEiCitQQVNTOiByZWNl
aXZlZCBldmVudCBhbmQgbGFzdEV2ZW50SWQgaGFzIGJlZW4gY2xlYXJlZAorUEFTUzogZ290IG9w
ZW4gZXZlbnQgZnJvbSBzZXJ2ZXIKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCB0aGUgZXZlbnQg
bmFtZSBoYXMgYmVlbiByZXNldAorUEFTUzogcmVjZWl2ZWQgZXZlbnQgd2l0aCBkYXRhIHRoYXQg
Y29udGFpbnMgYSBjb2xvbiBhbmQgYSBjYXJyaWFnZSByZXR1cm4KK0RPTkUKKwpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVudC1z
dHJlYW0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291
cmNlL2V2ZW50c291cmNlLXBhcnNlLWV2ZW50LXN0cmVhbS5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVu
dC1zdHJlYW0uaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorPGh0bWw+Cis8Ym9k
eT4KKzxwPlRlc3QgRXZlbnRTb3VyY2UgdGV4dC9ldmVudC1zdHJlYW0gcGFyc2luZy4gU2hvdWxk
IHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS48L3A+Cis8
ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8
YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBjb3VudCA9IDA7Cit2YXIgZXMgPSBuZXcgRXZlbnRT
b3VyY2UoInJlc291cmNlcy9ldmVudC1zdHJlYW0ucGhwIik7CisKK2VzLm9ub3BlbiA9IGZ1bmN0
aW9uIChldnQpIHsKKyAgICBpZiAoIWV2dC5kYXRhKQorICAgICAgICBsb2coIlBBU1M6IGdvdCBv
cGVuIGV2ZW50Iik7CisgICAgZWxzZQorICAgICAgICBsb2coIlBBU1M6IGdvdCBvcGVuIGV2ZW50
IGZyb20gc2VydmVyIik7Cit9OworCitlcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7Cisg
ICAgc3dpdGNoKGNvdW50KyspIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgaWYgKGV2
dC5kYXRhID09ICJzaW1wbGUiKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUzogcmVjZWl2ZWQg
ZXZlbnQgd2l0aCBkYXRhIFwic2ltcGxlXCIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gInNwYW5uaW5nXG5tdWx0aXBs
ZVxuXG5saW5lc1xuIikKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IHJlY2VpdmVkIGV2ZW50
IHdpdGggZGF0YSBzcGFubmluZyBtdWx0aXBsZSBsaW5lcyIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PSAiaWQgaXMgMSIg
JiYgZXZ0Lmxhc3RFdmVudElkID09ICIxIikKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IHJl
Y2V2aWVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBpcyBcIjFcIiIpOworICAgICAgICAgICAgYnJl
YWsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgaWYgKGV2dC5kYXRhID09ICJpZCBpcyBz
dGlsbCAxIiAmJiBldnQubGFzdEV2ZW50SWQgPT0gIjEiKQorICAgICAgICAgICAgICAgIGxvZygi
UEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5kIGxhc3RFdmVudElkIGlzIHN0aWxsIFwiMVwiIik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgaWYgKGV2dC5k
YXRhID09ICJubyBpZCIgJiYgZXZ0Lmxhc3RFdmVudElkID09ICIiKQorICAgICAgICAgICAgICAg
IGxvZygiUEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5kIGxhc3RFdmVudElkIGhhcyBiZWVuIGNsZWFy
ZWQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICBp
ZiAoZXZ0LmRhdGEgPT0gImEgbWVzc2FnZSBldmVudCB3aXRoIHRoZSBuYW1lIFwibWVzc2FnZVwi
IikKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCB0aGUgZXZl
bnQgbmFtZSBoYXMgYmVlbiByZXNldCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgNjoKKyAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PSAiYSBsaW5lIGVuZGluZyB3aXRoIGNy
bGZcbmEgbGluZSB3aXRoIGEgOiAoY29sb24pXG5hIGxpbmUgd2l0aCBhIFxyIChjYXJyaWFnZSBy
ZXR1cm4pIikKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IHJlY2VpdmVkIGV2ZW50IHdpdGgg
ZGF0YSB0aGF0IGNvbnRhaW5zIGEgY29sb24gYW5kIGEgY2FycmlhZ2UgcmV0dXJuIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGxvZygiRkFJTDog
Z290IHVuZXhwZWN0ZWQgZXZlbnQiKTsKKyAgICAgICAgICAgIGVzLmRpc2Nvbm5lY3QoKTsKKyAg
ICB9Cit9OworCitlcy5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIGVzLmRpc2Nvbm5lY3Qo
KTsKKworICAgIGlmIChjb3VudCAhPSA3KQorICAgICAgICBsb2coIkZBSUw6IGdvdCB1bmV4cGVj
dGVkIGVycm9yIGV2ZW50Iik7CisgICAgZWxzZQorICAgICAgICBsb2coIkRPTkUiKTsKKworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKK307Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25u
ZWN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2
ZW50c291cmNlL2V2ZW50c291cmNlLXJlY29ubmVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXJlY29u
bmVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgRXZl
bnRTb3VyY2UgcmVjb25uZWN0IGFmdGVyIGVuZCBvZiBldmVudCBzdHJlYW0uIFNob3VsZCBwcmlu
dCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuCisKK1BBU1M6IHN0
YXRlIGlzIENPTk5FQ1RJTkcKK1BBU1M6IHN0YXRlIGlzIE9QRU4KK1BBU1M6IGdvdCBsYXN0RXZl
bnRJZCAiNzciCitQQVNTOiBzdGF0ZSBpcyBDT05ORUNUSU5HCitQQVNTOiBzdGF0ZSBpcyBPUEVO
CitQQVNTOiBMYXN0LUV2ZW50LUlEIGhlYWRlciB3YXMgY29ycmVjdAorUEFTUzogc3RhdGUgaXMg
Q0xPU0VECitET05FCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uv
ZXZlbnRzb3VyY2UtcmVjb25uZWN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVj
b25uZWN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKzxodG1sPgorPGJvZHk+
Cis8cD5UZXN0IEV2ZW50U291cmNlIHJlY29ubmVjdCBhZnRlciBlbmQgb2YgZXZlbnQgc3RyZWFt
LiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBET05F
LjwvcD4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1z
ZykgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0g
bXNnICsgIjxicj4iOworfQorCit2YXIgc3RhdGVOYW1lcyA9IFsiQ09OTkVDVElORyIsICJPUEVO
IiwgIkNMT1NFRCJdOworZm9yICh2YXIgaSBpbiBzdGF0ZU5hbWVzKQorICAgIGV2YWwoInZhciAi
ICsgc3RhdGVOYW1lc1tpXSArICIgPSAiICsgaSk7Cit2YXIgcmV0cnlUaW1lb3V0OworCitmdW5j
dGlvbiBjaGVja1JlYWR5U3RhdGUoZXMsIGRlc2lyZWRTdGF0ZSkgeworICAgIHZhciBjdXJyU3Rh
dGUgPSBlcy5yZWFkeVN0YXRlOworICAgIGlmIChjdXJyU3RhdGUgPT0gZGVzaXJlZFN0YXRlKQor
ICAgICAgICBsb2coIlBBU1M6IHN0YXRlIGlzICIgKyBzdGF0ZU5hbWVzW2Rlc2lyZWRTdGF0ZV0p
OworICAgIGVsc2UKKyAgICAgICAgbG9nKCJGQUlMOiBiYWQgc3RhdGUgKCIgKyBzdGF0ZU5hbWVz
W2N1cnJTdGF0ZV0gKyAiLCBzaG91bGQgYmUgIiArIHN0YXRlTmFtZXNbZGVzaXJlZFN0YXRlXSAr
ICIpIik7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgZXJyQ291bnQgPSAwOwordmFyIGVzID0gbmV3IEV2
ZW50U291cmNlKCJyZXNvdXJjZXMvcmVjb25uZWN0LnBocCIpOworCitjaGVja1JlYWR5U3RhdGUo
ZXMsIENPTk5FQ1RJTkcpOworCitlcy5vbm9wZW4gPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgY2hl
Y2tSZWFkeVN0YXRlKGVzLCBPUEVOKTsKK307CisKK2VzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChl
dnQpIHsKKyAgICBpZiAoIWVyckNvdW50KSB7CisgICAgICAgIGlmIChldnQubGFzdEV2ZW50SWQg
PT0gIjc3IikKKyAgICAgICAgICAgIGxvZygiUEFTUzogZ290IGxhc3RFdmVudElkIFwiNzdcIiIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIkZBSUw6IHVuZXhwZWN0ZWQgbGFzdEV2
ZW50SWQgXCIiICsgZXZ0Lmxhc3RFdmVudElkICsgIlwiIik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGV2dC5kYXRhID09ICI3NyIpCisgICAgICAgICAgICBsb2coIlBBU1M6IExhc3QtRXZl
bnQtSUQgaGVhZGVyIHdhcyBjb3JyZWN0Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxv
ZygiRkFJTDogTGFzdC1FdmVudC1JRCBoZWFkZXIgd2FzIGluY29ycmVjdC9taXNzaW5nIik7Cisg
ICAgfQorfTsKKworZXMub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICBlcnJDb3VudCsrOwor
ICAgIGlmIChlcnJDb3VudCA8IDIpIHsKKyAgICAgICAgY2hlY2tSZWFkeVN0YXRlKGVzLCBDT05O
RUNUSU5HKTsKKyAgICAgICAgcmV0cnlUaW1lb3V0ID0gc2V0VGltZW91dChlbmQsIDEwMDApOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNsZWFyVGltZW91dChyZXRyeVRpbWVvdXQpOwor
ICAgIHJldHJ5VGltZW91dCA9IG51bGw7CisgICAgZW5kKCk7Cit9OworCitmdW5jdGlvbiBlbmQo
KSB7CisgICAgZXMuZGlzY29ubmVjdCgpOworICAgIGlmIChyZXRyeVRpbWVvdXQpCisgICAgICAg
IGxvZygiRkFJTDogZGlkIG5vdCByZWNvbm5lY3QgaW4gdGltZSIpOworICAgIGVsc2UgeworICAg
ICAgICBjaGVja1JlYWR5U3RhdGUoZXMsIENMT1NFRCk7CisgICAgICAgIGxvZygiRE9ORSIpOwor
ICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNv
dXJjZS1zdGF0dXMtY29kZS1zdGF0ZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3Rh
dGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
ZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorVGVzdCBFdmVudFNvdXJjZSBzdGF0ZXMgZm9y
IGRpZmZlcmVudCBzdGF0dXMgY29kZXMuIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1l
c3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuCisKK1BBU1M6IHN0YXR1cyBjb2RlIDIwMCByZXN1bHRl
ZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VECitQ
QVNTOiBzdGF0dXMgY29kZSAyMDQgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcsIENPTk5F
Q1RJTkcsIENMT1NFRAorUEFTUzogc3RhdHVzIGNvZGUgMjA1IHJlc3VsdGVkIGluIHN0YXRlcyBD
T05ORUNUSU5HLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDIwMiByZXN1
bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgQ09OTkVDVElORywgQ0xPU0VECitQQVNTOiBzdGF0
dXMgY29kZSAzMDEgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENP
Tk5FQ1RJTkcsIENMT1NFRAorUEFTUzogc3RhdHVzIGNvZGUgMzAyIHJlc3VsdGVkIGluIHN0YXRl
cyBDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BBU1M6IHN0YXR1
cyBjb2RlIDMwMyByZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09O
TkVDVElORywgQ0xPU0VECitQQVNTOiBzdGF0dXMgY29kZSAzMDcgcmVzdWx0ZWQgaW4gc3RhdGVz
IENPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRAorUEFTUzogc3RhdHVz
IGNvZGUgNDA0IHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBDTE9TRUQsIENMT1NFRAor
RE9ORQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291
cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50
c291cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4
IEBACis8aHRtbD4KKzxib2R5PgorPHA+VGVzdCBFdmVudFNvdXJjZSBzdGF0ZXMgZm9yIGRpZmZl
cmVudCBzdGF0dXMgY29kZXMuIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2Vz
IGZvbGxvd2VkIGJ5IERPTkUuPC9wPgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+
CitmdW5jdGlvbiBsb2cobXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3Vs
dCIpLmlubmVySFRNTCArPSBtc2cgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIGFycmF5Q29tcGFy
ZShhMSwgYTIpIHsKKyAgICBpZiAoYTEubGVuZ3RoICE9IGEyLmxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspCisgICAg
ICAgIGlmIChhMVtpXSAhPSBhMltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordmFyIHN0YXRlTmFtZXMgPSBbIkNPTk5FQ1RJTkciLCAiT1BFTiIs
ICJDTE9TRUQiXTsKK2ZvciAodmFyIGkgaW4gc3RhdGVOYW1lcykKKyAgICBldmFsKCJ2YXIgIiAr
IHN0YXRlTmFtZXNbaV0gKyAiID0gIiArIGkpOworCit2YXIgdGVzdHMgPSBbeyJjb2RlIjogMjAw
LCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywg
Q0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjogMjA0LCAiZXhwZWN0ZWRTdGF0ZXMiOiBb
Q09OTkVDVElORywsLCBDT05ORUNUSU5HLCBDTE9TRURdfSwKKyAgICAgICAgICAgICB7ImNvZGUi
OiAyMDUsICJleHBlY3RlZFN0YXRlcyI6IFtDT05ORUNUSU5HLCwsIENPTk5FQ1RJTkcsIENMT1NF
RF19LAorICAgICAgICAgICAgIHsiY29kZSI6IDIwMiwgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5F
Q1RJTkcsLCwgQ09OTkVDVElORywgQ0xPU0VEXX0sIC8vIG90aGVyIDJ4eAorICAgICAgICAgICAg
IHsiY29kZSI6IDMwMSwgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsIE9QRU4sIE9QRU4s
IENPTk5FQ1RJTkcsIENMT1NFRF19LAorICAgICAgICAgICAgIHsiY29kZSI6IDMwMiwgImV4cGVj
dGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRF19
LAorICAgICAgICAgICAgIHsiY29kZSI6IDMwMywgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJ
TkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRF19LAorICAgICAgICAgICAgIHsiY29k
ZSI6IDMwNywgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5F
Q1RJTkcsIENMT1NFRF19LAorICAgICAgICAgICAgIHsiY29kZSI6IDQwNCwgImV4cGVjdGVkU3Rh
dGVzIjogW0NPTk5FQ1RJTkcsLCwgQ0xPU0VELCBDTE9TRURdfV07IC8vIGFueSBvdGhlcgordmFy
IGNvdW50ID0gMDsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAoY291bnQgPj0gdGVz
dHMubGVuZ3RoKSB7CisgICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHN0YXRlcyA9IFtd
OworICAgIHZhciBlcyA9IG5ldyBFdmVudFNvdXJjZSgicmVzb3VyY2VzL3N0YXR1cy1jb2Rlcy5w
aHA/c3RhdHVzLWNvZGU9IiArIHRlc3RzW2NvdW50XS5jb2RlKTsKKyAgICBzdGF0ZXNbMF0gPSBl
cy5yZWFkeVN0YXRlOworCisgICAgZXMub25vcGVuID0gZnVuY3Rpb24gKCkgeworICAgICAgICBz
dGF0ZXNbMV0gPSBlcy5yZWFkeVN0YXRlOworICAgIH07CisKKyAgICBlcy5vbm1lc3NhZ2UgPSBm
dW5jdGlvbiAoZXZ0KSB7CisgICAgICAgIHN0YXRlc1syXSA9IGVzLnJlYWR5U3RhdGU7CisgICAg
fTsKKworICAgIGVzLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHN0YXRlc1szXSA9
IGVzLnJlYWR5U3RhdGU7CisgICAgICAgIGVzLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgc3RhdGVz
WzRdID0gZXMucmVhZHlTdGF0ZTsKKworICAgICAgICB2YXIgcmVzdWx0ID0gYXJyYXlDb21wYXJl
KHN0YXRlcywgdGVzdHNbY291bnRdLmV4cGVjdGVkU3RhdGVzKSA/ICJQQVNTIiA6ICJGQUlMIjsK
KyAgICAgICAgcmVzdWx0ICs9ICI6IHN0YXR1cyBjb2RlICIgKyB0ZXN0c1tjb3VudF0uY29kZSAr
ICIgcmVzdWx0ZWQgaW4gc3RhdGVzICI7CisgICAgICAgIGZvciAodmFyIGkgaW4gc3RhdGVzKQor
ICAgICAgICAgICAgcmVzdWx0ICs9IChpICE9IDAgPyAiLCAiIDogIiIpICsgc3RhdGVOYW1lc1tz
dGF0ZXNbaV1dOworICAgICAgICBsb2cocmVzdWx0KTsKKworICAgICAgICBzZXRUaW1lb3V0KHJ1
blRlc3QsIDApOworICAgICAgICBjb3VudCsrOworICAgIH07Cit9CisKK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitydW5U
ZXN0KCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2JhZC1taW1lLXR5cGUuYXNpcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9iYWQt
bWltZS10eXBlLmFzaXMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2
ZW50c291cmNlL3Jlc291cmNlcy9iYWQtbWltZS10eXBlLmFzaXMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2JvZ3VzCisKK2RhdGE6IHNob3VsZCBub3Qg
dHJpZ2dlciBhbiBldmVudApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJj
ZS9yZXNvdXJjZXMvZXZlbnQtc3RyZWFtLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9ldmVudC1zdHJlYW0ucGhwCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvZXZl
bnQtc3RyZWFtLnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorPD9waHAKK2hlYWRl
cigiQ29udGVudC1UeXBlOiB0ZXh0L2V2ZW50LXN0cmVhbSIpOworPz4KKworOiBhIGNvbW1lbnQg
KGlnbm9yZWQpCit0aGlzIGxpbmUgd2lsbCBiZSBpZ25vcmVkIHNpbmNlIHRoZXJlIGlzIG5vIGZp
ZWxkIGFuZCB0aGUgbGluZSBpdHNlbGYgaXMgbm90IGEgZmllbGQKK2ZpZWxkOiBhbiB1bmtub3du
IGZpZWxkIHRoYXQgd2lsbCBiZSBpZ25vcmVkCis6YW5vdGhlciBjb21tbWVudAorCitkYXRhIDog
dGhpcyBsaW5lIHdpbGwgYmUgaWdub3JlZCBzaW5jZSB0aGVyZSBpcyBhIHNwYWNlIGFmdGVyIGRh
dGEKKworZGF0YQorZGF0YToKK2RhdGEKKzogbm8gZGlzcGF0Y2ggc2luY2UgZGF0YSBidWZmZXIg
aXMgZW1wdHkKKworZGF0YTogc2ltcGxlCisKK2RhdGE6IHNwYW5uaW5nCitkYXRhOm11bHRpcGxl
CitkYXRhCitkYXRhOiBsaW5lcworZGF0YQorCitpZDogMQorZGF0YTogaWQgaXMgMQorCitkYXRh
OiBpZCBpcyBzdGlsbCAxCisKK2lkCitkYXRhOiBubyBpZAorCitldmVudDogb3BlbgorZGF0YTog
YSBtZXNzYWdlIGV2ZW50IHdpdGggdGhlIG5hbWUgIm9wZW4iCisKK2RhdGE6IGEgbWVzc2FnZSBl
dmVudCB3aXRoIHRoZSBuYW1lICJtZXNzYWdlIgorCis8P3BocCBlY2hvICJkYXRhOiBhIGxpbmUg
ZW5kaW5nIHdpdGggY3JsZlxyXG4iOyA/PgorZGF0YTogYSBsaW5lIHdpdGggYSA6IChjb2xvbikK
Kzw/cGhwIGVjaG8gImRhdGE6IGEgbGluZSB3aXRoIGEgXHIgKGNhcnJpYWdlIHJldHVybilcbiI7
ID8+CisKK3JldHJ5OiAxMDAwMAorOiByZWNvbm5lY3Rpb24gdGltZSBzZXQgdG8gMTAgc2Vjb25k
cworCityZXRyeTogb25lIHRob3VzYW5kCis6IGlnbm9yZWQgaW52YWxpZCByZWNvbm5lY3Rpb24g
dGltZSB2YWx1ZQorCityZXRyeQorOiByZXNldCB0byB1YSBkZWZhdWx0CisKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3JlY29ubmVjdC5waHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMv
cmVjb25uZWN0LnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZl
bnRzb3VyY2UvcmVzb3VyY2VzL3JlY29ubmVjdC5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTIgQEAKKzw/cGhwCitoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9ldmVudC1zdHJlYW0iKTsK
KyRsYXN0RXZlbnRJZCA9ICRfU0VSVkVSWydIVFRQX0xBU1RfRVZFTlRfSUQnXTsKKworaWYgKCRs
YXN0RXZlbnRJZCkKKyAgICBlY2hvICJkYXRhOiAkbGFzdEV2ZW50SWRcblxuIjsKK2Vsc2Ugewor
ICAgIGVjaG8gImlkOiA3N1xuIjsKKyAgICBlY2hvICJyZXRyeTogMzAwXG4iOworICAgIGVjaG8g
ImRhdGE6IGhlbGxvXG5cbiI7Cit9Cis/PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9l
dmVudHNvdXJjZS9yZXNvdXJjZXMvc2ltcGxlLWV2ZW50LXN0cmVhbS5hc2lzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3NpbXBsZS1l
dmVudC1zdHJlYW0uYXNpcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
ZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzIEBACitDb250ZW50LVR5cGU6IHRleHQvZXZlbnQtc3RyZWFtCisKK2Rh
dGE6IGhlbGxvCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291
cmNlcy9zdGF0dXMtY29kZXMucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3N0YXR1cy1jb2Rlcy5waHAJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9zdGF0dXMtY29k
ZXMucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8P3BocAorJHN0YXR1c19jb2Rl
ID0gJF9HRVRbJ3N0YXR1cy1jb2RlJ107CitoZWFkZXIoIkhUVFAvMS4xICRzdGF0dXNfY29kZSBP
SyIpOworCitzd2l0Y2ggKCRzdGF0dXNfY29kZSkgeworY2FzZSAyMDA6CisgICAgaGVhZGVyKCJD
b250ZW50LVR5cGU6IHRleHQvZXZlbnQtc3RyZWFtIik7CisgICAgZWNobyAiZGF0YTogaGVsbG9c
blxuIjsKKyAgICBicmVhazsKK2Nhc2UgMzAxOgorY2FzZSAzMDI6CitjYXNlIDMwMzoKK2Nhc2Ug
MzA3OgorICAgICR1cmkgPSBydHJpbShkaXJuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKSwgJy9c
XCcpIC4gIi9zaW1wbGUtZXZlbnQtc3RyZWFtLmFzaXMiOworICAgIGhlYWRlcigiTG9jYXRpb246
IGh0dHA6Ly8iIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gJHVyaSk7CisgICAgYnJlYWs7Cit9
Cis/PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2
ZW50c291cmNlLXNpbXBsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNl
L3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0IEBACitUZXN0IEV2ZW50U291cmNlIGluIGEgd29ya2VyLgorCitQQVNTCisKSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9ldmVudHNvdXJj
ZS1zaW1wbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50
c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2lt
cGxlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1sPgorPGJvZHk+Cis8
cD5UZXN0IEV2ZW50U291cmNlIGluIGEgd29ya2VyLjwvcD4KKzxkaXYgaWQ9InJlc3VsdCI+PC9k
aXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOworfQorCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30K
KwordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy9zaW1wbGUtd29ya2VyLmpzIik7
CisKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgaWYgKGV2dC5kYXRh
ID09ICJoZWxsbyIpCisgICAgICAgIGxvZygiUEFTUyIpOworICAgIGVsc2UKKyAgICAgICAgbG9n
KCJGQUlMIik7CisgICAgZW5kKCk7Cit9CisKK3dvcmtlci5vbmVycm9yID0gZnVuY3Rpb24gKCkg
eworICAgIGxvZygiRkFJTCIpOworICAgIGVuZCgpOworfQorCitmdW5jdGlvbiBlbmQoKSB7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9yZXNvdXJj
ZXMvc2ltcGxlLXdvcmtlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZS13b3JrZXIuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3Vy
Y2VzL3NpbXBsZS13b3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK3ZhciBl
cyA9IG5ldyBFdmVudFNvdXJjZSgiLi4vLi4vcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJlYW0u
YXNpcyIpOworCitlcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgcG9zdE1lc3Nh
Z2UoZXZ0LmRhdGEpOworICAgIGVzLmRpc2Nvbm5lY3QoKTsKK30KKworZXMub25lcnJvciA9IGZ1
bmN0aW9uICgpIHsKKyAgICBwb3N0TWVzc2FnZSgiZXJyb3IiKTsKKyAgICBlcy5kaXNjb25uZWN0
KCk7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31160</attachid>
            <date>2009-06-11 05:45:58 -0700</date>
            <delta_ts>2009-08-05 09:17:17 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>eventsource_r44602.patch</filename>
            <type>text/plain</type>
            <size>69312</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ0NjAy
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDktMDYt
MTEgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZGVkIEV2
ZW50U291cmNlIHRvIHRoZSBidWlsZCAoZGVmYXVsdCBvbikuCisKKyAgICAgICAgKiBjb25maWd1
cmUuYWM6CisKIDIwMDktMDYtMTAgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGduc0Bnbm9tZS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpJbmRleDogY29uZmlndXJlLmFj
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGNvbmZpZ3VyZS5hYwkocmV2aXNpb24gNDQ2MDIpCisrKyBjb25maWd1
cmUuYWMJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw2ICszMzQsMTQgQEAgQUNfQVJHX0VOQUJMRShk
YXRhYmFzZSwKICAgICAgICAgICAgICAgW10sW2VuYWJsZV9kYXRhYmFzZT0ieWVzIl0pCiBBQ19N
U0dfUkVTVUxUKFskZW5hYmxlX2RhdGFiYXNlXSkKIAorIyBjaGVjayB3aGV0aGVyIHRvIGJ1aWxk
IHdpdGggc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnQKK0FDX01TR19DSEVDS0lORyhbd2hldGhl
ciB0byBlbmFibGUgSFRNTDUgc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnRdKQorQUNfQVJHX0VO
QUJMRShldmVudHNvdXJjZSwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxl
LWV2ZW50c291cmNlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBIVE1M
NSBzZXJ2ZXItc2VudCBldmVudHMgc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSksCisgICAgICAgICAg
ICAgIFtdLFtlbmFibGVfZXZlbnRzb3VyY2U9InllcyJdKQorQUNfTVNHX1JFU1VMVChbJGVuYWJs
ZV9ldmVudHNvdXJjZV0pCisKICMgY2hlY2sgd2hldGhlciB0byBidWlsZCB3aXRoIGljb24gZGF0
YWJhc2Ugc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBpY29uIGRh
dGFiYXNlIHN1cHBvcnRdKQogQUNfQVJHX0VOQUJMRShpY29uX2RhdGFiYXNlLApAQCAtNjY0LDYg
KzY3Miw3IEBAIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0cKIEFNX0NP
TkRJVElPTkFMKFtFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TXSxbdGVzdCAiJGVuYWJs
ZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlvbnMiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VO
QUJMRV9ET01fU1RPUkFHRV0sW3Rlc3QgIiRlbmFibGVfZG9tX3N0b3JhZ2UiID0gInllcyJdKQog
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV9EQVRBQkFTRV0sW3Rlc3QgIiRlbmFibGVfZGF0YWJhc2Ui
ID0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9FVkVOVFNPVVJDRV0sW3Rlc3QgIiRl
bmFibGVfZXZlbnRzb3VyY2UiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9JQ09O
REFUQUJBU0VdLFt0ZXN0ICIkZW5hYmxlX2ljb25fZGF0YWJhc2UiID0gInllcyJdKQogQU1fQ09O
RElUSU9OQUwoW0VOQUJMRV9YUEFUSF0sW3Rlc3QgIiRlbmFibGVfeHBhdGgiID0gInllcyJdKQog
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV9YU0xUXSxbdGVzdCAiJGVuYWJsZV94c2x0IiA9ICJ5ZXMi
XSkKQEAgLTcxNiw2ICs3MjUsNyBAQCBGZWF0dXJlczoKICBIVE1MNSBjaGFubmVsIG1lc3NhZ2lu
ZyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfY2hhbm5lbF9tZXNz
YWdpbmcKICBIVE1MNSBjbGllbnQtc2lkZSBzZXNzaW9uIGFuZCBwZXJzaXN0ZW50IHN0b3JhZ2Ug
c3VwcG9ydCA6ICRlbmFibGVfZG9tX3N0b3JhZ2UKICBIVE1MNSBjbGllbnQtc2lkZSBkYXRhYmFz
ZSBzdG9yYWdlIHN1cHBvcnQgICAgICAgICAgICAgICA6ICRlbmFibGVfZGF0YWJhc2UKKyBIVE1M
NSBzZXJ2ZXItc2VudCBldmVudHMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICA6ICRl
bmFibGVfZXZlbnRzb3VyY2UKICBIVE1MNSB2aWRlbyBlbGVtZW50IHN1cHBvcnQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfdmlkZW8KICBJY29uIGRhdGFiYXNlIHN1cHBv
cnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfaWNvbl9kYXRh
YmFzZQogIFNWRyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogJGVuYWJsZV9zdmcKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NDYwMikKKysrIFdlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODUgQEAKKzIwMDktMDYtMTEgIEFkYW0gQmVy
Z2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBFdmVudFNvdXJjZSBvYmplY3QgdGhhdCBlbmFibGVzCisgICAgICAgIHNlcnZlci1zZW50IGV2
ZW50cyBmcm9tIEhUTUw1LgorICAgICAgICBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9ldmVudHNv
dXJjZS8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
OTk3CisKKyAgICAgICAgVGVzdHM6IGZhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYXR0cmli
dXRlLWxpc3RlbmVycy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2V2ZW50c291cmNlL2V2ZW50
c291cmNlLWNvbnN0cnVjdG9yLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvZXZlbnRz
b3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS5odG1sCisgICAgICAgICAgICAgICBodHRw
L3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXBhcnNlLWV2ZW50LXN0cmVhbS5odG1sCisg
ICAgICAgICAgICAgICBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXJlY29ubmVj
dC5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNl
LXN0YXR1cy1jb2RlLXN0YXRlcy5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2V2ZW50
c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLmh0bWwKKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93OjpldmVudFNvdXJjZSk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9y
OjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNv
dXJjZUNvbnN0cnVjdG9yOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnN0cnVjdEV2ZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRTb3Vy
Y2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2
ZW50U291cmNlQ29uc3RydWN0b3I6Om1hcmspOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZl
bnRTb3VyY2VDb25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRT
b3VyY2VDb25zdHJ1Y3Rvcjo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2
ZW50U291cmNlQ3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291
cmNlOjptYXJrKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2U6OmFkZEV2ZW50TGlz
dGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6OnRvRXZlbnRUYXJnZXQpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6OmV2ZW50U291cmNlKToKKyAgICAgICAgKiBkb20vRXZl
bnROYW1lcy5oOgorICAgICAgICAqIGRvbS9FdmVudFRhcmdldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpFdmVudFRhcmdldDo6dG9FdmVudFNvdXJjZSk6CisgICAgICAgICogZG9tL0V2ZW50VGFy
Z2V0Lmg6CisgICAgICAgICogcGFnZS9ET01XaW5kb3cuaWRsOgorICAgICAgICAqIHBhZ2UvRXZl
bnRTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpFdmVu
dFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6fkV2ZW50U291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpjb25uZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50U291cmNlOjpzY2hlZHVsZVJlY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFNvdXJjZTo6cmVjb25uZWN0VGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dFNvdXJjZTo6dXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpyZWFkeVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaXNjb25uZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50U291cmNlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291
cmNlOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6
OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRGaW5p
c2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRGYWlsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbUxpbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRTb3VyY2U6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaE1lc3NhZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFNvdXJjZTo6c3RvcCk6CisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRTb3VyY2U6Oik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c2V0
T25vcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpvbm9wZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNldE9ubWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFNvdXJjZTo6b25tZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNl
OjpzZXRPbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpvbmVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjp0b0V2ZW50U291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjpldmVudExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudFNvdXJjZTo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRT
b3VyY2U6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuaWRs
OiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDA5LTA2
LTEwICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAsNiArMjMwLDcgQEAgSURM
X0JJTkRJTkdTICs9IFwKIAlXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaWRsIFwKIAlXZWJDb3Jl
L3BhZ2UvRE9NU2VsZWN0aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwgXAor
CVdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwgXAogCVdlYkNvcmUvcGFnZS9HZW9sb2NhdGlv
bi5pZGwgXAogCVdlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5pZGwgXAogCVdlYkNvcmUvcGFnZS9I
aXN0b3J5LmlkbCBcCkBAIC0zMjQsNiArMzI1LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExp
c3RlbmVyLmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9y
LmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCBc
CisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3Rv
bS5jcHAgXApAQCAtMTIyMSw2ICsxMjI1LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggXAogCVdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
IFwKIAlXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggXAorCVdlYkNvcmUvcGFnZS9FdmVudFNv
dXJjZS5jcHAgXAorCVdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oIFwKIAlXZWJDb3JlL3BhZ2Uv
Rm9jdXNDb250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oIFwK
IAlXZWJDb3JlL3BhZ2UvRm9jdXNEaXJlY3Rpb24uaCBcCkBAIC0yMDQyLDYgKzIwNDgsMjAgQEAg
d2ViY29yZV9jcHBmbGFncyArPSAtREVOQUJMRV9EQVRBQkFTRT0wCiBlbmRpZiAjIEVORCBFTkFC
TEVfREFUQUJBU0UKIAogIyAtLS0tCisjIEhUTUw1IHNlcnZlci1zZW50IGV2ZW50cworIyAtLS0t
CitpZiAhRU5BQkxFX0VWRU5UU09VUkNFCitnbG9iYWxfY3BwZmxhZ3MgKz0gLURFTkFCTEVfRVZF
TlRTT1VSQ0U9MAorZW5kaWYKKworaWYgRU5BQkxFX0VWRU5UU09VUkNFCitGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfRVZFTlRTT1VSQ0U9MQorCit3ZWJjb3JlX2NwcGZsYWdz
ICs9IFwKKwktREVOQUJMRV9FVkVOVFNPVVJDRT0xCitlbmRpZiAjIEVOQUJMRV9FVkVOVFNPVVJD
RQorCisjIC0tLS0KICMgSFRNTDUgY2xpZW50LXNpZGUgc2Vzc2lvbiBhbmQgcGVyc2lzdGVudCBz
dG9yYWdlCiAjIC0tLS0KIGlmIEVOQUJMRV9ET01fU1RPUkFHRQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDQ0NjAyKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDcgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd1NoZWxsLmgiCiAjaW5jbHVkZSAiSlNF
dmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkpTRXZlbnRT
b3VyY2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTSGlzdG9yeS5oIgogI2luY2x1ZGUgIkpT
SW1hZ2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTTG9jYXRpb24uaCIKQEAgLTIyNCw2ICsy
MjUsMTMgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQoRXhlY1N0YXRlKiBleAogICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGV2ZW50KTsKIH0KIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKK0pT
VmFsdWUgSlNET01XaW5kb3c6OmV2ZW50U291cmNlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sK
KyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yPihl
eGVjLCB0aGlzKTsKK30KKyNlbmRpZgorCiBKU1ZhbHVlIEpTRE9NV2luZG93OjppbWFnZShFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTSW1h
Z2VDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNzc29uIEFCCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShFVkVOVFNPVVJDRSkKKworI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oIgor
CisjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiSlNFdmVudFNvdXJjZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitB
U1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcik7CisKK2Nv
bnN0IENsYXNzSW5mbyBKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkV2ZW50
U291cmNlQ29udHJ1Y3RvciIsIDAsIDAsIDAgfTsKKworSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9y
OjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NT2JqZWN0KEpTRXZlbnRTb3VyY2VDb25zdHJ1
Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+b2JqZWN0
UHJvdG90eXBlKCkpKQorICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFsT2JqZWN0KQoreworICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU0V2ZW50U291cmNl
UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIE5vbmUp
OworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6
OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2dsb2JhbE9i
amVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCitzdGF0aWMgSlNPYmplY3QqIGNv
bnN0cnVjdEV2ZW50U291cmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9y
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSA9PSAwKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJn
dW1lbnRzIik7CisKKyAgICBVU3RyaW5nIHVybCA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxKU0V2ZW50U291
cmNlQ29uc3RydWN0b3IqPihjb25zdHJ1Y3RvciktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFJlZmVy
ZW5jZUVycm9yLCAiRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBkb2N1bWVudCBp
cyB1bmF2YWlsYWJsZSIpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRy
PEV2ZW50U291cmNlPiBldmVudFNvdXJjZSA9IEV2ZW50U291cmNlOjpjcmVhdGUodXJsLCBjb250
ZXh0LCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKworICAgIHJldHVybiBh
c09iamVjdCh0b0pTKGV4ZWMsIGV2ZW50U291cmNlLnJlbGVhc2UoKSkpOworfQorCitDb25zdHJ1
Y3RUeXBlIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShDb25zdHJ1
Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0
aW9uID0gY29uc3RydWN0RXZlbnRTb3VyY2U7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0
OworfQorCit2b2lkIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6bWFyaygpCit7CisgICAgRE9N
T2JqZWN0OjptYXJrKCk7CisgICAgaWYgKCFtX2dsb2JhbE9iamVjdC0+bWFya2VkKCkpCisgICAg
ICAgIG1fZ2xvYmFsT2JqZWN0LT5tYXJrKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24gQUIKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3Jf
aAorI2RlZmluZSBKU0V2ZW50U291cmNlQ29uc3RydWN0b3JfaAorCisjaWYgRU5BQkxFKEVWRU5U
U09VUkNFKQorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICAgIGNsYXNzIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01PYmpl
Y3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OworICAgICAgICBzdGF0aWMg
Y29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJr
KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgICAgICB2aXJ0dWFsIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9
CisKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OworICAgIH07CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkK
KworI2VuZGlmIC8vIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNzc29uIEFCCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShF
VkVOVFNPVVJDRSkKKworI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2UuaCIKKworI2luY2x1ZGUgIkV2
ZW50U291cmNlLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJK
U0V2ZW50TGlzdGVuZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEpTRXZlbnRTb3VyY2U6Om1hcmsoKQoreworICAgIERPTU9iamVjdDo6
bWFyaygpOworCisgICAgbWFya0lmTm90TnVsbChtX2ltcGwtPm9ub3BlbigpKTsKKyAgICBtYXJr
SWZOb3ROdWxsKG1faW1wbC0+b25tZXNzYWdlKCkpOworICAgIG1hcmtJZk5vdE51bGwobV9pbXBs
LT5vbmVycm9yKCkpOworCisgICAgdHlwZWRlZiBFdmVudFNvdXJjZTo6RXZlbnRMaXN0ZW5lcnNN
YXAgRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgdHlwZWRlZiBFdmVudFNvdXJjZTo6TGlzdGVuZXJW
ZWN0b3IgTGlzdGVuZXJWZWN0b3I7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVu
ZXJzID0gbV9pbXBsLT5ldmVudExpc3RlbmVycygpOworICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExpc3RlbmVycy5iZWdpbigpOyBtYXBJdGVyICE9
IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0ZXIpIHsKKyAgICAgICAgZm9yIChMaXN0ZW5l
clZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1hcEl0ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJ
dGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsgKyt2ZWNJdGVyKQorICAgICAgICAgICAgKCp2
ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24oKTsKKyAgICB9Cit9CisKK0pTVmFsdWUgSlNFdmVudFNv
dXJjZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCit7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9i
YWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZ2xv
YmFsT2JqZWN0KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSZWZQdHI8SlNF
dmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZE9yQ3JlYXRlSlNFdmVu
dExpc3RlbmVyKGFyZ3MuYXQoMSkpOworICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDAp
LnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lci5yZWxlYXNlKCksIGFyZ3MuYXQoMikudG9Cb29sZWFu
KGV4ZWMpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0V2ZW50
U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK3sKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RP
TUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYg
KCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEpTRXZl
bnRMaXN0ZW5lciogbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRKU0V2ZW50TGlzdGVuZXIo
YXJncy5hdCgxKSk7CisgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJp
bmcoZXhlYyksIGxpc3RlbmVyLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFy
Z2V0LmNwcAkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxMSBAQAogI2luY2x1ZGUgIlhN
TEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCIKIAorI2lm
IEVOQUJMRShFVkVOVFNPVVJDRSkKKyNpbmNsdWRlICJFdmVudFNvdXJjZS5oIgorI2luY2x1ZGUg
IkpTRXZlbnRTb3VyY2UuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJ
Q0FUSU9OUykKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiSlNE
T01BcHBsaWNhdGlvbkNhY2hlLmgiCkBAIC02NSw2ICs3MCwxMSBAQCBKU1ZhbHVlIHRvSlMoRXhl
Y1N0YXRlKiBleGVjLCBFdmVudFRhcmdlCiAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgIHJldHVy
biBqc051bGwoKTsKICAgICAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisgICAgaWYgKEV2ZW50
U291cmNlKiBldmVudFNvdXJjZSA9IHRhcmdldC0+dG9FdmVudFNvdXJjZSgpKQorICAgICAgICBy
ZXR1cm4gZ2V0Q2FjaGVkRE9NT2JqZWN0V3JhcHBlcihleGVjLT5nbG9iYWxEYXRhKCksIGV2ZW50
U291cmNlKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBTVkdFbGVtZW50SW5z
dGFuY2Ugc3VwcG9ydHMgYm90aCB0b1NWR0VsZW1lbnRJbnN0YW5jZSBhbmQgdG9Ob2RlIHNpbmNl
IHNvIG11Y2ggbW91c2UgaGFuZGxpbmcgY29kZSBkZXBlbmRzIG9uIHRvTm9kZSByZXR1cm5pbmcg
YSB2YWxpZCBub2RlLgogICAgIGlmIChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdGFy
Z2V0LT50b1NWR0VsZW1lbnRJbnN0YW5jZSgpKQpAQCAtMTE5LDYgKzEyOSwxMCBAQCBFdmVudFRh
cmdldCogdG9FdmVudFRhcmdldChKU0M6OkpTVmFsdWUgCiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0
KCZKU0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SlNET01XaW5kb3dTaGVsbCo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKTsKIAorI2lmIEVOQUJM
RShFVkVOVFNPVVJDRSkKKyAgICBDT05WRVJUX1RPX0VWRU5UX1RBUkdFVChFdmVudFNvdXJjZSkK
KyNlbmRpZgorCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICBDT05W
RVJUX1RPX0VWRU5UX1RBUkdFVChET01BcHBsaWNhdGlvbkNhY2hlKQogI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lv
biA0NDYwMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTAgQEAKICNpbmNsdWRlICJXb3JrZXJOYXZp
Z2F0b3IuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRlci5oPgogCisjaWYgRU5B
QkxFKEVWRU5UU09VUkNFKQorI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTc0LDYgKzc4LDEzIEBAIGJvb2wgSlNXb3JrZXJDb250ZXh0OjpjdXN0b21HZXRPd25Qcm9wZXIK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCitKU1ZhbHVl
IEpTV29ya2VyQ29udGV4dDo6ZXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorewor
ICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+KGV4
ZWMsIHRoaXMpOworfQorI2VuZGlmCisKIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0Ojp4bWxIdHRw
UmVxdWVzdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldERPTUNvbnN0
cnVjdG9yPEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7CkluZGV4OiBX
ZWJDb3JlL2RvbS9FdmVudE5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRO
YW1lcy5oCShyZXZpc2lvbiA0NDYwMikKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFj
cm8ob2Jzb2xldGUpIFwKICAgICBtYWNybyhvZmZsaW5lKSBcCiAgICAgbWFjcm8ob25saW5lKSBc
CisgICAgbWFjcm8ob3BlbikgXAogICAgIG1hY3JvKG92ZXJmbG93Y2hhbmdlZCkgXAogICAgIG1h
Y3JvKHBhc3RlKSBcCiAgICAgbWFjcm8ocmVhZHlzdGF0ZWNoYW5nZSkgXApJbmRleDogV2ViQ29y
ZS9kb20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFy
Z2V0LmNwcAkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBAIEV2ZW50VGFyZ2V0Ojp+RXZlbnRUYXJn
ZXQoKQogewogfQogCitFdmVudFNvdXJjZSogRXZlbnRUYXJnZXQ6OnRvRXZlbnRTb3VyY2UoKQor
eworICAgIHJldHVybiAwOworfQorCiBOb2RlKiBFdmVudFRhcmdldDo6dG9Ob2RlKCkKIHsKICAg
ICByZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBET01XaW5kb3c7CiAgICAgY2xhc3MgRXZlbnQ7CiAg
ICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBFdmVudFNvdXJjZTsKICAgICBjbGFz
cyBNZXNzYWdlUG9ydDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFNWR0VsZW1lbnRJbnN0
YW5jZTsKQEAgLTU0LDYgKzU1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3Mg
RXZlbnRUYXJnZXQgewogICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBFdmVudFNvdXJjZSog
dG9FdmVudFNvdXJjZSgpOwogICAgICAgICB2aXJ0dWFsIE1lc3NhZ2VQb3J0KiB0b01lc3NhZ2VQ
b3J0KCk7CiAgICAgICAgIHZpcnR1YWwgTm9kZSogdG9Ob2RlKCk7CiAgICAgICAgIHZpcnR1YWwg
RE9NV2luZG93KiB0b0RPTVdpbmRvdygpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDQ0
NjAyKQorKysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQz
NSw2ICs0MzUsMTAgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBSYW5nZUNv
bnN0cnVjdG9yIFJhbmdlOwogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VFeGNlcHRpb25Db25zdHJ1
Y3RvciBSYW5nZUV4Y2VwdGlvbjsKIAorI2lmIEVOQUJMRV9FVkVOVFNPVVJDRQorICAgICAgICBh
dHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VDb25zdHJ1Y3RvciBFdmVudFNv
dXJjZTsgLy8gVXNhYmxlIHdpdGggbmV3IHRoZSBvcGVyYXRvcgorI2VuZGlmCisKICAgICAgICAg
Ly8gTW96aWxsYSBoYXMgYSBzZXBhcmF0ZSBYTUxEb2N1bWVudCBvYmplY3QgZm9yIFhNTCBkb2N1
bWVudHMuIAogICAgICAgICAvLyBXZSBqdXN0IHVzZSBEb2N1bWVudCBmb3IgdGhpcy4KICAgICAg
ICAgYXR0cmlidXRlIERvY3VtZW50Q29uc3RydWN0b3IgWE1MRG9jdW1lbnQ7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVu
dFNvdXJjZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9u
LgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNpbmNsdWRlICJFdmVudFNvdXJjZS5o
IgorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJFdmVudEV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiTWVzc2FnZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVj
b2Rlci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgRXZlbnRTb3VyY2U6OkRlZmF1bHRSZWNv
bm5lY3REZWxheSA9IDMwMDA7CisKK0V2ZW50U291cmNlOjpFdmVudFNvdXJjZShjb25zdCBTdHJp
bmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCisgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhpcykKKyAgICAsIG1fc3RhdGUo
Q09OTkVDVElORykKKyAgICAsIG1fcmVjb25uZWN0VGltZXIodGhpcywgJkV2ZW50U291cmNlOjpy
ZWNvbm5lY3RUaW1lckZpcmVkKQorICAgICwgbV9mYWlsU2lsZW50bHkoZmFsc2UpCisgICAgLCBt
X3JlY29ubmVjdERlbGF5KERlZmF1bHRSZWNvbm5lY3REZWxheSkKK3sKKyAgICBpZiAodXJsLmlz
RW1wdHkoKSB8fCAhKG1fdXJsID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsKSkuaXNWYWxpZCgp
KSB7CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAvLyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzCisgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3Qo
bV91cmwpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9vcmlnaW4gPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5
T3JpZ2luKCktPnRvU3RyaW5nKCk7CisgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rl
cjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgIlVURi04Iik7CisKKyAgICBjb25uZWN0KCk7Cit9CisK
K0V2ZW50U291cmNlOjp+RXZlbnRTb3VyY2UoKQoreworfQorCit2b2lkIEV2ZW50U291cmNlOjpj
b25uZWN0KCkKK3sKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChtX3VybCk7CisgICAgcmVx
dWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKyAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVs
ZCgiQWNjZXB0IiwgInRleHQvZXZlbnQtc3RyZWFtIik7CisgICAgcmVxdWVzdC5zZXRIVFRQSGVh
ZGVyRmllbGQoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKTsKKyAgICBpZiAoIW1fbGFzdEV2
ZW50SWQuaXNFbXB0eSgpKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiTGFz
dC1FdmVudC1JRCIsIG1fbGFzdEV2ZW50SWQpOworICAgIG1fbG9hZGVyID0gVGhyZWFkYWJsZUxv
YWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhpcywgcmVxdWVzdCwgU2Vu
ZExvYWRDYWxsYmFja3MsIERvTm90U25pZmZDb250ZW50LCBBbGxvd1N0b3JlZENyZWRlbnRpYWxz
LCBSZXF1aXJlU2FtZVJlZGlyZWN0T3JpZ2luKTsKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHkodGhp
cyk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OnNjaGVkdWxlUmVjb25uZWN0KCkKK3sKKyAgICBt
X3N0YXRlID0gQ09OTkVDVElORzsKKyAgICBtX3JlY29ubmVjdFRpbWVyLnN0YXJ0T25lU2hvdCht
X3JlY29ubmVjdERlbGF5IC8gMTAwMCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OnJlY29ubmVj
dFRpbWVyRmlyZWQoVGltZXI8RXZlbnRTb3VyY2U+KikKK3sKKyAgICBjb25uZWN0KCk7Cit9CisK
K1N0cmluZyBFdmVudFNvdXJjZTo6dXJsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV91cmwuc3Ry
aW5nKCk7Cit9CisKK0V2ZW50U291cmNlOjpTdGF0ZSBFdmVudFNvdXJjZTo6cmVhZHlTdGF0ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3RhdGU7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRp
c2Nvbm5lY3QoKQoreworICAgIGlmIChtX3N0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fcmVjb25uZWN0VGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZWNv
bm5lY3RUaW1lci5zdG9wKCk7CisKKyAgICBib29sIGNhbmNlbCA9IG1fc3RhdGUgPT0gT1BFTjsK
KyAgICBtX3N0YXRlID0gQ0xPU0VEOworICAgIG1fZmFpbFNpbGVudGx5ID0gdHJ1ZTsKKworICAg
IGlmIChjYW5jZWwpCisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKK30KKworU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogRXZlbnRTb3VyY2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
LCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9ldmVu
dExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExpc3Rl
bmVycy5lbmQoKSkgeworICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7CisgICAgICAg
IGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7CisgICAgICAgIG1fZXZlbnRMaXN0ZW5l
cnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBMaXN0
ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKExpc3Rl
bmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsgbGlz
dGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAgICAg
ICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3Rl
bmVyKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMp
OworICAgIH0KK30KKwordm9pZCBFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5lciwg
Ym9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZlbnRM
aXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0ZW5l
cnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5l
cnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0
ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGlmICgqbGlzdGVuZXJJdGVy
ID09IGV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUobGlzdGVu
ZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorfQorCitib29sIEV2ZW50U291cmNlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWV2ZW50IHx8
IGV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gRXZlbnRFeGNlcHRpb246
OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBFdmVudExpc3RlbmVyKiBhdHRyaWJ1dGVMaXN0ZW5lciA9IG1fYXR0cmlidXRlTGlz
dGVuZXJzLmdldChldmVudC0+dHlwZSgpKS5nZXQoKTsKKyAgICBpZiAoYXR0cmlidXRlTGlzdGVu
ZXIpIHsKKyAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICAgICAgZXZlbnQtPnNl
dEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgICAgIGF0dHJpYnV0ZUxpc3RlbmVyLT5oYW5kbGVF
dmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKworICAgIExpc3RlbmVyVmVjdG9yIGxp
c3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsKKyAgICBm
b3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5l
cnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyArK2xp
c3RlbmVySXRlcikgeworICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgICAgICBl
dmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgbGlzdGVuZXJJdGVyLT5nZXQo
KS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1cm4g
IWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpZFJl
Y2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBp
bnQgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCk7CisgICAgaWYgKHN0YXR1
c0NvZGUgPT0gMjAwICYmIHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIikg
PT0gInRleHQvZXZlbnQtc3RyZWFtIikgeworICAgICAgICBtX3N0YXRlID0gT1BFTjsKKyAgICAg
ICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnROYW1lcygpLm9wZW5FdmVudCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKHN0YXR1c0NvZGUgPD0gMjAwIHx8IHN0YXR1c0NvZGUgPiAyOTkp
CisgICAgICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOworICAgICAgICBtX2xvYWRlci0+Y2FuY2Vs
KCk7CisgICAgfQorfQorCit2b2lkIEV2ZW50U291cmNlOjpkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGFwcGVuZChtX3JlY2VpdmVCdWYsIG1fZGVj
b2Rlci0+ZGVjb2RlKGRhdGEsIGxlbmd0aCkpOworICAgIHBhcnNlRXZlbnRTdHJlYW0oKTsKK30K
Kwordm9pZCBFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQorewor
ICAgIGlmIChtX3JlY2VpdmVCdWYuc2l6ZSgpID4gMCB8fCBtX2RhdGEuc2l6ZSgpID4gMCkgewor
ICAgICAgICBhcHBlbmQobV9yZWNlaXZlQnVmLCAiXG5cbiIpOworICAgICAgICBwYXJzZUV2ZW50
U3RyZWFtKCk7CisgICAgfQorICAgIG1fc3RhdGUgPSBDT05ORUNUSU5HOworICAgIGRpc3BhdGNo
R2VuZXJpY0V2ZW50KGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKKyAgICB1bnNldFBlbmRpbmdB
Y3Rpdml0eSh0aGlzKTsKKworICAgIGlmIChtX3N0YXRlICE9IENMT1NFRCkKKyAgICAgICAgc2No
ZWR1bGVSZWNvbm5lY3QoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbChjb25zdCBS
ZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAoIW1fZmFpbFNpbGVudGx5KQorICAgICAg
ICBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CisgICAgdW5z
ZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisKKyAgICBpbnQgY2FuY2VsZWQgPSBlcnJvci5pc0Nh
bmNlbGxhdGlvbigpOworICAgIGlmICgoKG1fc3RhdGUgPT0gQ09OTkVDVElORykgJiYgY2FuY2Vs
ZWQpIHx8ICgobV9zdGF0ZSA9PSBPUEVOKSAmJiAhY2FuY2VsZWQpKQorICAgICAgICBzY2hlZHVs
ZVJlY29ubmVjdCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpkaWRGYWlsUmVkaXJlY3RDaGVj
aygpCit7CisgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Cit9
CisKK3ZvaWQgRXZlbnRTb3VyY2U6OnBhcnNlRXZlbnRTdHJlYW0oKQoreworICAgIHVuc2lnbmVk
IGludCBidWZQb3MgPSAwOworICAgIHVuc2lnbmVkIGludCBidWZTaXplID0gbV9yZWNlaXZlQnVm
LnNpemUoKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCBsaW5lTGVuZ3RoID0gLTE7Cisg
ICAgICAgIGludCBmaWVsZExlbmd0aCA9IC0xOworICAgICAgICBpbnQgY2FycmlhZ2VSZXR1cm4g
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gYnVmUG9zOyBsaW5lTGVuZ3RoIDwg
MCAmJiBpIDwgYnVmU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fcmVjZWl2ZUJ1
ZltpXSkgeworICAgICAgICAgICAgY2FzZSAnOic6CisgICAgICAgICAgICAgICAgaWYgKGZpZWxk
TGVuZ3RoIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZmllbGRMZW5ndGggPSBpIC0gYnVmUG9z
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnXG4nOgorICAgICAg
ICAgICAgICAgIGlmIChpID4gYnVmUG9zICYmIG1fcmVjZWl2ZUJ1ZltpIC0gMV0gPT0gJ1xyJykg
eworICAgICAgICAgICAgICAgICAgICBjYXJyaWFnZVJldHVybisrOworICAgICAgICAgICAgICAg
ICAgICBpLS07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVMZW5ndGgg
PSBpIC0gYnVmUG9zOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGxpbmVMZW5ndGggPCAwKQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgcGFyc2VFdmVudFN0cmVhbUxpbmUoYnVmUG9zLCBmaWVsZExlbmd0aCwgbGlu
ZUxlbmd0aCk7CisgICAgICAgIGJ1ZlBvcyArPSBsaW5lTGVuZ3RoICsgY2FycmlhZ2VSZXR1cm4g
KyAxOworICAgIH0KKworICAgIGlmIChidWZQb3MgPT0gYnVmU2l6ZSkKKyAgICAgICAgbV9yZWNl
aXZlQnVmLmNsZWFyKCk7CisgICAgZWxzZSBpZiAoYnVmUG9zKQorICAgICAgICBtX3JlY2VpdmVC
dWYucmVtb3ZlKDAsIGJ1ZlBvcyk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OnBhcnNlRXZlbnRT
dHJlYW1MaW5lKHVuc2lnbmVkIGludCBidWZQb3MsIGludCBmaWVsZExlbmd0aCwgaW50IGxpbmVM
ZW5ndGgpCit7CisgICAgaWYgKCFsaW5lTGVuZ3RoKSB7CisgICAgICAgIGlmICghbV9kYXRhLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWVzc2FnZUV2ZW50KCk7CisgICAgICAgIGlm
ICghbV9ldmVudE5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9ldmVudE5hbWUgPSAiIjsK
KyAgICB9IGVsc2UgaWYgKGZpZWxkTGVuZ3RoKSB7CisgICAgICAgIGJvb2wgbm9WYWx1ZSA9IGZp
ZWxkTGVuZ3RoIDwgMDsKKworICAgICAgICBTdHJpbmcgZmllbGQoJm1fcmVjZWl2ZUJ1ZltidWZQ
b3NdLCBub1ZhbHVlID8gbGluZUxlbmd0aCA6IGZpZWxkTGVuZ3RoKTsKKyAgICAgICAgaW50IHN0
ZXA7CisgICAgICAgIGlmIChub1ZhbHVlKQorICAgICAgICAgICAgc3RlcCA9IGxpbmVMZW5ndGg7
CisgICAgICAgIGVsc2UgaWYgKG1fcmVjZWl2ZUJ1ZltidWZQb3MgKyBmaWVsZExlbmd0aCArIDFd
ICE9ICcgJykKKyAgICAgICAgICAgIHN0ZXAgPSBmaWVsZExlbmd0aCArIDE7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHN0ZXAgPSBmaWVsZExlbmd0aCArIDI7CisgICAgICAgIGJ1ZlBvcyAr
PSBzdGVwOworICAgICAgICBpbnQgdmFsdWVMZW5ndGggPSBsaW5lTGVuZ3RoIC0gc3RlcDsKKwor
ICAgICAgICBpZiAoZmllbGQgPT0gImRhdGEiKSB7CisgICAgICAgICAgICBpZiAobV9kYXRhLnNp
emUoKSA+IDApCisgICAgICAgICAgICAgICAgbV9kYXRhLmFwcGVuZCgnXG4nKTsKKyAgICAgICAg
ICAgIGlmICh2YWx1ZUxlbmd0aCkKKyAgICAgICAgICAgICAgICBtX2RhdGEuYXBwZW5kKCZtX3Jl
Y2VpdmVCdWZbYnVmUG9zXSwgdmFsdWVMZW5ndGgpOworICAgICAgICB9IGVsc2UgaWYgKGZpZWxk
ID09ICJldmVudCIpCisgICAgICAgICAgICBtX2V2ZW50TmFtZSA9IHZhbHVlTGVuZ3RoID8gU3Ry
aW5nKCZtX3JlY2VpdmVCdWZbYnVmUG9zXSwgdmFsdWVMZW5ndGgpIDogIiI7CisgICAgICAgIGVs
c2UgaWYgKGZpZWxkID09ICJpZCIpCisgICAgICAgICAgICBtX2xhc3RFdmVudElkID0gdmFsdWVM
ZW5ndGggPyBTdHJpbmcoJm1fcmVjZWl2ZUJ1ZltidWZQb3NdLCB2YWx1ZUxlbmd0aCkgOiAiIjsK
KyAgICAgICAgZWxzZSBpZiAoZmllbGQgPT0gInJldHJ5IikgeworICAgICAgICAgICAgaWYgKCF2
YWx1ZUxlbmd0aCkKKyAgICAgICAgICAgICAgICBtX3JlY29ubmVjdERlbGF5ID0gRGVmYXVsdFJl
Y29ubmVjdERlbGF5OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgU3RyaW5n
IHZhbHVlKCZtX3JlY2VpdmVCdWZbYnVmUG9zXSwgdmFsdWVMZW5ndGgpOworICAgICAgICAgICAg
ICAgIGJvb2wgb2s7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHJldHJ5ID0g
dmFsdWUudG9VSW50NjQoJm9rKTsKKyAgICAgICAgICAgICAgICBpZiAob2spCisgICAgICAgICAg
ICAgICAgICAgIG1fcmVjb25uZWN0RGVsYXkgPSByZXRyeTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQoreworICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZl
bnQ6OmNyZWF0ZSh0eXBlLCBmYWxzZSwgZmFsc2UpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOworICAgIEFTU0VSVCghZWMp
OworfQorCit2b2lkIEV2ZW50U291cmNlOjpkaXNwYXRjaE1lc3NhZ2VFdmVudCgpCit7CisgICAg
UmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZ0ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoKTsKKyAgICBT
dHJpbmcgZXZlbnROYW1lID0gbV9ldmVudE5hbWUuaXNFbXB0eSgpID8gZXZlbnROYW1lcygpLm1l
c3NhZ2VFdmVudC5zdHJpbmcoKSA6IG1fZXZlbnROYW1lOworICAgIGV2dC0+aW5pdE1lc3NhZ2VF
dmVudChldmVudE5hbWUsIGZhbHNlLCBmYWxzZSwgU3RyaW5nOjphZG9wdChtX2RhdGEpLCBtX29y
aWdpbiwgbV9sYXN0RXZlbnRJZCwgMCwgMCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgpLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7Cit9
CisKK3ZvaWQgRXZlbnRTb3VyY2U6OnN0b3AoKQoreworICAgIGRpc2Nvbm5lY3QoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVWRU5UU09VUkNFKQpJ
bmRleDogV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0V2ZW50U291cmNlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRTb3Vy
Y2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFdmVu
dFNvdXJjZV9oCisjZGVmaW5lIEV2ZW50U291cmNlX2gKKworI2lmIEVOQUJMRShFVkVOVFNPVVJD
RSkKKworI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmlu
Z0hhc2guaCIKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CisgICAgY2xhc3MgVGV4dFJl
c291cmNlRGVjb2RlcjsKKyAgICBjbGFzcyBUaHJlYWRhYmxlTG9hZGVyOworCisgICAgY2xhc3Mg
RXZlbnRTb3VyY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxFdmVudFNvdXJjZT4sIHB1YmxpYyBFdmVu
dFRhcmdldCwgcHJpdmF0ZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LCBwdWJsaWMgQWN0aXZlRE9N
T2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50U291
cmNlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRXZlbnRTb3Vy
Y2UodXJsLCBjb250ZXh0LCBlYykpOyB9CisgICAgICAgIHZpcnR1YWwgfkV2ZW50U291cmNlKCk7
CisKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBEZWZhdWx0UmVjb25u
ZWN0RGVsYXk7CisKKyAgICAgICAgU3RyaW5nIHVybCgpIGNvbnN0OworCisgICAgICAgIGVudW0g
U3RhdGUgeworICAgICAgICAgICAgQ09OTkVDVElORyA9IDAsCisgICAgICAgICAgICBPUEVOID0g
MSwKKyAgICAgICAgICAgIENMT1NFRCA9IDIsCisgICAgICAgIH07CisKKyAgICAgICAgU3RhdGUg
cmVhZHlTdGF0ZSgpIGNvbnN0OworCisgICAgICAgIHZvaWQgc2V0T25vcGVuKFBhc3NSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX2F0dHJpYnV0ZUxpc3RlbmVycy5zZXQo
ZXZlbnROYW1lcygpLm9wZW5FdmVudCwgZXZlbnRMaXN0ZW5lcik7IH0KKyAgICAgICAgRXZlbnRM
aXN0ZW5lciogb25vcGVuKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0
KGV2ZW50TmFtZXMoKS5vcGVuRXZlbnQpLmdldCgpOyB9CisKKyAgICAgICAgdm9pZCBzZXRPbm1l
c3NhZ2UoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmli
dXRlTGlzdGVuZXJzLnNldChldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50LCBldmVudExpc3RlbmVy
KTsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbm1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZUxpc3RlbmVycy5nZXQoZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudCkuZ2V0KCk7
IH0KKworICAgICAgICB2b2lkIHNldE9uZXJyb3IoUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBl
dmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlTGlzdGVuZXJzLnNldChldmVudE5hbWVzKCkuZXJy
b3JFdmVudCwgZXZlbnRMaXN0ZW5lcik7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25lcnJv
cigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlTGlzdGVuZXJzLmdldChldmVudE5hbWVzKCku
ZXJyb3JFdmVudCkuZ2V0KCk7IH0KKworICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKworICAg
ICAgICB1c2luZyBSZWZDb3VudGVkPEV2ZW50U291cmNlPjo6cmVmOworICAgICAgICB1c2luZyBS
ZWZDb3VudGVkPEV2ZW50U291cmNlPjo6ZGVyZWY7CisKKyAgICAgICAgdmlydHVhbCBFdmVudFNv
dXJjZSogdG9FdmVudFNvdXJjZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICAgICAgdmlydHVhbCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisK
KyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJW
ZWN0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVj
dG9yPiBFdmVudExpc3RlbmVyc01hcDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExp
c3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2
ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIq
LCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQ
YXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBFdmVudExpc3RlbmVy
c01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJzOyB9CisKKyAg
ICAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEV2ZW50
U291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBFeGNlcHRpb25Db2RlJiBlYyk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFy
Z2V0KCkgeyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgp
IHsgZGVyZWYoKTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOworCisgICAgICAgIHZvaWQgY29ubmVj
dCgpOworICAgICAgICB2b2lkIHNjaGVkdWxlUmVjb25uZWN0KCk7CisgICAgICAgIHZvaWQgcmVj
b25uZWN0VGltZXJGaXJlZChUaW1lcjxFdmVudFNvdXJjZT4qKTsKKyAgICAgICAgdm9pZCBwYXJz
ZUV2ZW50U3RyZWFtKCk7CisgICAgICAgIHZvaWQgcGFyc2VFdmVudFN0cmVhbUxpbmUodW5zaWdu
ZWQgaW50IHBvcywgaW50IGZpZWxkTGVuZ3RoLCBpbnQgbGluZUxlbmd0aCk7CisgICAgICAgIHZv
aWQgZGlzcGF0Y2hHZW5lcmljRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKKyAgICAg
ICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVudCgpOworCisgICAgICAgIEtVUkwgbV91cmw7Cisg
ICAgICAgIFN0YXRlIG1fc3RhdGU7CisKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiA+IG1fYXR0cmlidXRlTGlzdGVuZXJzOworICAgICAgICBFdmVu
dExpc3RlbmVyc01hcCBtX2V2ZW50TGlzdGVuZXJzOworCisgICAgICAgIFJlZlB0cjxUZXh0UmVz
b3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CisgICAgICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVy
PiBtX2xvYWRlcjsKKyAgICAgICAgVGltZXI8RXZlbnRTb3VyY2U+IG1fcmVjb25uZWN0VGltZXI7
CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gbV9yZWNlaXZlQnVmOworICAgICAgICBib29sIG1fZmFp
bFNpbGVudGx5OworCisgICAgICAgIFN0cmluZyBtX2V2ZW50TmFtZTsKKyAgICAgICAgVmVjdG9y
PFVDaGFyPiBtX2RhdGE7CisgICAgICAgIFN0cmluZyBtX2xhc3RFdmVudElkOworICAgICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbV9yZWNvbm5lY3REZWxheTsKKyAgICAgICAgU3RyaW5nIG1fb3Jp
Z2luOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShFVkVOVFNPVVJDRSkKKworI2VuZGlmIC8vIEV2ZW50U291cmNlX2gKSW5kZXg6IFdlYkNvcmUv
cGFnZS9FdmVudFNvdXJjZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50U291
cmNlLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJp
Y3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAg
ICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1FVkVOVFNPVVJDRSwKKyAgICAgICAg
Q3VzdG9tTWFya0Z1bmN0aW9uLAorICAgICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gRXZlbnRT
b3VyY2UgeworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgVVJMOworCisg
ICAgICAgIC8vIHJlYWR5IHN0YXRlCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTk5F
Q1RJTkcgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBPUEVOID0gMTsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU0VEID0gMjsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGxvbmcgcmVhZHlTdGF0ZTsKKworICAgICAgICAvLyBuZXR3b3JraW5nCisgICAgICAg
IGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ub3BlbjsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50
TGlzdGVuZXIgb25tZXNzYWdlOworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbmVy
cm9yOworICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKworICAgICAgICAvLyBFdmVudFRhcmdl
dCBpbnRlcmZhY2UKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVudExpc3RlbmVyKGluIERP
TVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBF
dmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlbW92
ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVhbiB1c2VDYXB0dXJlKTsK
KyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2dCkKKyAgICAgICAgICAg
IHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmlkbAkocmV2aXNpb24gNDQ2MDIpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDkgQEAgbW9kdWxlIHRocmVh
ZHMgewogICAgICAgICBhdHRyaWJ1dGUgTWVzc2FnZUV2ZW50Q29uc3RydWN0b3IgTWVzc2FnZUV2
ZW50OwogICAgICAgICBhdHRyaWJ1dGUgV29ya2VyTG9jYXRpb25Db25zdHJ1Y3RvciBXb3JrZXJM
b2NhdGlvbjsKIAorI2lmIEVOQUJMRV9FVkVOVFNPVVJDRQorICAgICAgICBhdHRyaWJ1dGUgW0pT
Q0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VDb25zdHJ1Y3RvciBFdmVudFNvdXJjZTsKKyNlbmRp
ZgogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gWE1MSHR0cFJlcXVlc3RDb25z
dHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsKICAgICB9OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NDYw
MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3
IEBACisyMDA5LTA2LTExICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29u
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0cyBmb3IgRXZlbnRTb3VyY2UuCisKKyAgICAgICAgKiBmYXN0L2V2ZW50c291cmNlOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0
ZW5lcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50c291cmNlL2V2
ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtY29uc3RydWN0b3IuaHRt
bDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZTogQWRkZWQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVu
dHNvdXJjZS1iYWQtbWltZS10eXBlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
ZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYXJz
ZS1ldmVudC1zdHJlYW0uaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXJlY29ubmVjdC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1j
b2RlLXN0YXRlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZl
bnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9iYWQtbWltZS10eXBlLmFzaXM6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2V2ZW50LXN0
cmVhbS5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3Vy
Y2VzL3JlY29ubmVjdC5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3Vy
Y2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpczogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvc3RhdHVzLWNvZGVzLnBocDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzOiBBZGRlZC4KKyAgICAg
ICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3Jr
ZXJzL2V2ZW50c291cmNlLXNpbXBsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZS13b3JrZXIuanM6IEFkZGVk
LgorICAgICAgICAoZXMub25tZXNzYWdlKToKKyAgICAgICAgKGVzLm9uZXJyb3IpOgorCiAyMDA5
LTA2LTEwICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQgYnVpbGQgZml4LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9l
dmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0
ZW5lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUZXN0IEV2ZW50U291cmNlIGF0dHJpYnV0ZSBsaXN0
ZW5lciBmdW5jdGlvbmFsaXR5LiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdl
cyBmb2xsb3dlZCBieSBET05FLgorCitQQVNTOiBhdHRyaWJ1dGUgbGlzdGVuZXJzIGFyZSBpbml0
aWFsbHkgbnVsbAorUEFTUzogc2V0dGluZyBhbmQgZ2V0dGluZyBhdHRyaWJ1dGUgbGlzdGVuZXIg
d29ya3MKK1BBU1M6IHJlc2V0dGluZyBhdHRyaWJ1dGUgbGlzdGVuZXIgd29ya3MKK1BBU1M6IGRp
c3BhdGNoaW5nIGV2ZW50IG9uIGFuIEV2ZW50U291cmNlIHRyaWdnZXJzIGF0dHJpYnV0ZSBsaXN0
ZW5lcgorRE9ORQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291
cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYXR0
cmlidXRlLWxpc3RlbmVycy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACis8aHRt
bD4KKzxib2R5PgorPHA+VGVzdCBFdmVudFNvdXJjZSBhdHRyaWJ1dGUgbGlzdGVuZXIgZnVuY3Rp
b25hbGl0eS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQg
YnkgRE9ORS48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9u
IGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJI
VE1MICs9IG1zZyArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBlcyA9IG5ldyBFdmVudFNv
dXJjZSgiZXZlbnRzb3VyY2UiKTsKKworaWYgKGVzLm9ub3BlbiA9PSBudWxsICYmIGVzLm9ubWVz
c2FnZSA9PSBudWxsICYmIGVzLm9uZXJyb3IgPT0gbnVsbCkKKyAgICBsb2coIlBBU1M6IGF0dHJp
YnV0ZSBsaXN0ZW5lcnMgYXJlIGluaXRpYWxseSBudWxsIik7CitlbHNlCisgICAgbG9nKCJGQUlM
OiBhdHRyaWJ1dGUgbGlzdGVuZXJzIGFyZSBub3QgbnVsbCBpbml0aWFsbHkiKTsKKwordmFyIGEg
PSBmdW5jdGlvbiAoKSB7fTsKK2VzLm9ub3BlbiA9IGE7CitpZiAoZXMub25vcGVuID09IGEpCisg
ICAgbG9nKCJQQVNTOiBzZXR0aW5nIGFuZCBnZXR0aW5nIGF0dHJpYnV0ZSBsaXN0ZW5lciB3b3Jr
cyIpOworZWxzZQorICAgIGxvZygiRkFJTDogc2V0dGluZy9nZXR0aW5nIGF0dHJpYnV0ZSBsaXN0
ZW5lciBkb2VzIG5vdCB3b3JrIik7CisKK3ZhciBiID0gZnVuY3Rpb24gKCkge307Citlcy5vbm9w
ZW4gPSBiOworaWYgKGVzLm9ub3BlbiA9PSBiKQorICAgIGxvZygiUEFTUzogcmVzZXR0aW5nIGF0
dHJpYnV0ZSBsaXN0ZW5lciB3b3JrcyIpOworZWxzZQorICAgIGxvZygiRkFJTDogcmVzZXR0aW5n
IGF0dHJpYnV0ZSBsaXN0ZW5lciBkb2VzIG5vdCB3b3JrIik7CisKK3ZhciBmbGFnID0gZmFsc2U7
Citlcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZSkgeyBmbGFnID0gKGUuZGF0YSA9PSAiaGVsbG8i
KTsgfTsKK3ZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiTWVzc2FnZUV2ZW50Iik7Citl
dnQuaW5pdE1lc3NhZ2VFdmVudCgibWVzc2FnZSIsIGZhbHNlLCBmYWxzZSwgImhlbGxvIiwgbnVs
bCwgbnVsbCwgbnVsbCwgbnVsbCk7Citlcy5kaXNwYXRjaEV2ZW50KGV2dCk7CitpZiAoZmxhZykg
eworICAgIGxvZygiUEFTUzogZGlzcGF0Y2hpbmcgZXZlbnQgb24gYW4gRXZlbnRTb3VyY2UgdHJp
Z2dlcnMgYXR0cmlidXRlIGxpc3RlbmVyIik7CisgICAgbG9nKCJET05FIik7Cit9CitlbHNlCisg
ICAgbG9nKCJGQUlMOiBkaXNwYXRjaGluZyBldmVudCBvbiBhbiBFdmVudFNvdXJjZSBkb2VzIG5v
dCB0cmlnZ2VyIGF0dHJpYnV0ZSBsaXN0ZW5lciIpOworCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291
cmNlL2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZl
bnRzb3VyY2UtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDcgQEAKK1Rlc3QgRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgZnVuY3Rpb25hbGl0eS4gU2hvdWxk
IHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS4KKworUEFT
UzogbWlzc2luZyBhcmd1bWVudCB0byBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciByZXN1bHRlZCBp
biBhbiBleGNlcHRpb24gKFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cykKK1BBU1M6
IHBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIHRoZSBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciBy
ZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9u
IDEyKQorUEFTUzogcGFzc2luZyBhbiBpbnZhbGlkIFVSTCB0byB0aGUgRXZlbnRTb3VyY2UgY29u
c3RydWN0b3IgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uIChFcnJvcjogU1lOVEFYX0VSUjogRE9N
IEV4Y2VwdGlvbiAxMikKK0RPTkUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJj
ZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtY29uc3RydWN0b3IuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtY29uc3RydWN0
b3IuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorPGh0bWw+Cis8Ym9keT4KKzxw
PlRlc3QgRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgZnVuY3Rpb25hbGl0eS4gU2hvdWxkIHByaW50
IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS48L3A+Cis8ZGl2IGlk
PSJyZXN1bHQiPjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsK
K30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7Cit9CisKK3RyeSB7CisgICAgbmV3IEV2ZW50U291cmNlKCk7CisgICAgbG9nKCJG
QUlMOiBubyBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gY29uc3RydWN0IGFuIEV2ZW50U291cmNl
IHdpdGhvdXQgYXJndW1lbnQiKTsKK30KK2NhdGNoIChleCkgeworICAgIGxvZygiUEFTUzogbWlz
c2luZyBhcmd1bWVudCB0byBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciByZXN1bHRlZCBpbiBhbiBl
eGNlcHRpb24gKCIgKyBleCArICIpIik7Cit9CisKK3RyeSB7CisgICAgbmV3IEV2ZW50U291cmNl
KCIiKTsKKyAgICBsb2coIkZBSUw6IG5vIGV4Y2VwdGlvbiB3aGVuIHBhc3NpbmcgYW4gZW1wdHkg
c3RyaW5nIHRvIHRoZSBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciIpOworfQorY2F0Y2ggKGV4KSB7
CisgICAgbG9nKCJQQVNTOiBwYXNzaW5nIGFuIGVtcHR5IHN0cmluZyB0byB0aGUgRXZlbnRTb3Vy
Y2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOwor
fQorCit0cnkgeworICAgIG5ldyBFdmVudFNvdXJjZSgiaHR0cDovL3dlYnNlcnZlcjplaWdodHkv
Iik7CisgICAgbG9nKCJGQUlMOiBubyBleGNlcHRpb24gd2hlbiBwYXNzaW5nIGFuIGludmFsaWQg
VVJMIHRvIHRoZSBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciIpOworfQorY2F0Y2ggKGV4KSB7Cisg
ICAgbG9nKCJQQVNTOiBwYXNzaW5nIGFuIGludmFsaWQgVVJMIHRvIHRoZSBFdmVudFNvdXJjZSBj
b25zdHJ1Y3RvciByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKCIgKyBleCArICIpIik7CisgICAg
bG9nKCJET05FIik7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworCis8L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRz
b3VyY2UtYmFkLW1pbWUtdHlwZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3Vy
Y2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNCBAQAorVGVzdCBFdmVudFNvdXJjZSB3aXRoIGFuIGV2ZW50LXN0cmVhbSB3aXRo
IGluY29ycmVjdCBtaW1lLXR5cGUuCisKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQt
bWltZS10eXBlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2
ZW50c291cmNlL2V2ZW50c291cmNlLWJhZC1taW1lLXR5cGUuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MyBAQAorPGh0bWw+Cis8Ym9keT4KKzxwPlRlc3QgRXZlbnRTb3VyY2Ugd2l0aCBh
biBldmVudC1zdHJlYW0gd2l0aCBpbmNvcnJlY3QgbWltZS10eXBlLjwvcD4KKzxkaXYgaWQ9InJl
c3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOworfQor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsKK30KKwordmFyIGVzID0gbmV3IEV2ZW50U291cmNlKCJyZXNvdXJjZXMvYmFkLW1pbWUt
dHlwZS5hc2lzIik7CisKK2VzLm9ub3BlbiA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICBsb2coIkZB
SUw6IGdvdCB1bmV4cGVjdGVkIG9wZW4gZXZlbnQiKTsKKyAgICBlbmQoKTsKK307CisKK2VzLm9u
bWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICBsb2coIkZBSUw6IGdvdCB1bmV4cGVjdGVk
IG1lc3NhZ2UgZXZlbnQiKTsKKyAgICBlbmQoKTsKK307CisKK2VzLm9uZXJyb3IgPSBmdW5jdGlv
biAoKSB7CisgICAgaWYgKGVzLnJlYWR5U3RhdGUgPT0gZXMuQ0xPU0VEKQorICAgICAgICBsb2co
IlBBU1MiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiRkFJTDogaW52YWxpZCBzdGF0ZSIpOwor
ICAgIGVuZCgpOworfTsKKworZnVuY3Rpb24gZW5kKCkgeworICAgIGVzLmRpc2Nvbm5lY3QoKTsK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1w
YXJzZS1ldmVudC1zdHJlYW0tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRz
b3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMyBAQAorVGVzdCBFdmVudFNvdXJjZSB0ZXh0L2V2ZW50LXN0cmVh
bSBwYXJzaW5nLiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dl
ZCBieSBET05FLgorCitQQVNTOiBnb3Qgb3BlbiBldmVudAorUEFTUzogcmVjZWl2ZWQgZXZlbnQg
d2l0aCBkYXRhICJzaW1wbGUiCitQQVNTOiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEgc3Bhbm5p
bmcgbXVsdGlwbGUgbGluZXMKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBp
cyAiMSIKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBpcyBzdGlsbCAiMSIK
K1BBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBoYXMgYmVlbiBjbGVhcmVkCitQ
QVNTOiBnb3Qgb3BlbiBldmVudCBmcm9tIHNlcnZlcgorUEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5k
IHRoZSBldmVudCBuYW1lIGhhcyBiZWVuIHJlc2V0CitQQVNTOiByZWNlaXZlZCBldmVudCB3aXRo
IGRhdGEgdGhhdCBjb250YWlucyBhIGNvbG9uIGFuZCBhIGNhcnJpYWdlIHJldHVybgorRE9ORQor
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXBh
cnNlLWV2ZW50LXN0cmVhbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNl
LXBhcnNlLWV2ZW50LXN0cmVhbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACis8
aHRtbD4KKzxib2R5PgorPHA+VGVzdCBFdmVudFNvdXJjZSB0ZXh0L2V2ZW50LXN0cmVhbSBwYXJz
aW5nLiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBE
T05FLjwvcD4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9n
KG1zZykgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwg
Kz0gbXNnICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGNvdW50ID0gMDsKK3ZhciBlcyA9
IG5ldyBFdmVudFNvdXJjZSgicmVzb3VyY2VzL2V2ZW50LXN0cmVhbS5waHAiKTsKKworZXMub25v
cGVuID0gZnVuY3Rpb24gKGV2dCkgeworICAgIGlmICghZXZ0LmRhdGEpCisgICAgICAgIGxvZygi
UEFTUzogZ290IG9wZW4gZXZlbnQiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiUEFTUzogZ290
IG9wZW4gZXZlbnQgZnJvbSBzZXJ2ZXIiKTsKK307CisKK2VzLm9ubWVzc2FnZSA9IGZ1bmN0aW9u
IChldnQpIHsKKyAgICBzd2l0Y2goY291bnQrKykgeworICAgICAgICBjYXNlIDA6CisgICAgICAg
ICAgICBpZiAoZXZ0LmRhdGEgPT0gInNpbXBsZSIpCisgICAgICAgICAgICAgICAgbG9nKCJQQVNT
OiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEgXCJzaW1wbGVcIiIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PSAic3Bhbm5p
bmdcbm11bHRpcGxlXG5cbmxpbmVzXG4iKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUzogcmVj
ZWl2ZWQgZXZlbnQgd2l0aCBkYXRhIHNwYW5uaW5nIG11bHRpcGxlIGxpbmVzIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKGV2dC5kYXRhID09
ICJpZCBpcyAxIiAmJiBldnQubGFzdEV2ZW50SWQgPT0gIjEiKQorICAgICAgICAgICAgICAgIGxv
ZygiUEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5kIGxhc3RFdmVudElkIGlzIFwiMVwiIik7CisgICAg
ICAgICAgICBicmVhaworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiAoZXZ0LmRhdGEg
PT0gImlkIGlzIHN0aWxsIDEiICYmIGV2dC5sYXN0RXZlbnRJZCA9PSAiMSIpCisgICAgICAgICAg
ICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCBhbmQgbGFzdEV2ZW50SWQgaXMgc3RpbGwg
XCIxXCIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAg
ICBpZiAoZXZ0LmRhdGEgPT0gIm5vIGlkIiAmJiBldnQubGFzdEV2ZW50SWQgPT0gIiIpCisgICAg
ICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCBhbmQgbGFzdEV2ZW50SWQgaGFz
IGJlZW4gY2xlYXJlZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToKKyAg
ICAgICAgICAgIGlmIChldnQuZGF0YSA9PSAiYSBtZXNzYWdlIGV2ZW50IHdpdGggdGhlIG5hbWUg
XCJtZXNzYWdlXCIiKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUzogcmVjZWl2ZWQgZXZlbnQg
YW5kIHRoZSBldmVudCBuYW1lIGhhcyBiZWVuIHJlc2V0Iik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgaWYgKGV2dC5kYXRhID09ICJhIGxpbmUgZW5k
aW5nIHdpdGggY3JsZlxuYSBsaW5lIHdpdGggYSA6IChjb2xvbilcbmEgbGluZSB3aXRoIGEgXHIg
KGNhcnJpYWdlIHJldHVybikiKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUzogcmVjZWl2ZWQg
ZXZlbnQgd2l0aCBkYXRhIHRoYXQgY29udGFpbnMgYSBjb2xvbiBhbmQgYSBjYXJyaWFnZSByZXR1
cm4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
bG9nKCJGQUlMOiBnb3QgdW5leHBlY3RlZCBldmVudCIpOworICAgICAgICAgICAgZXMuZGlzY29u
bmVjdCgpOworICAgIH0KK307CisKK2VzLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgZXMu
ZGlzY29ubmVjdCgpOworCisgICAgaWYgKGNvdW50ICE9IDcpCisgICAgICAgIGxvZygiRkFJTDog
Z290IHVuZXhwZWN0ZWQgZXJyb3IgZXZlbnQiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiRE9O
RSIpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNv
dXJjZS1yZWNvbm5lY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0LWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRz
b3VyY2UtcmVjb25uZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBA
QAorVGVzdCBFdmVudFNvdXJjZSByZWNvbm5lY3QgYWZ0ZXIgZW5kIG9mIGV2ZW50IHN0cmVhbS4g
U2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS4K
KworUEFTUzogc3RhdGUgaXMgQ09OTkVDVElORworUEFTUzogc3RhdGUgaXMgT1BFTgorUEFTUzog
Z290IGxhc3RFdmVudElkICI3NyIKK1BBU1M6IHN0YXRlIGlzIENPTk5FQ1RJTkcKK1BBU1M6IHN0
YXRlIGlzIE9QRU4KK1BBU1M6IExhc3QtRXZlbnQtSUQgaGVhZGVyIHdhcyBjb3JyZWN0CitQQVNT
OiBzdGF0ZSBpcyBDTE9TRUQKK0RPTkUKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9l
dmVudHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXJlY29ubmVjdC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVu
dHNvdXJjZS1yZWNvbm5lY3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorPGh0
bWw+Cis8Ym9keT4KKzxwPlRlc3QgRXZlbnRTb3VyY2UgcmVjb25uZWN0IGFmdGVyIGVuZCBvZiBl
dmVudCBzdHJlYW0uIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxv
d2VkIGJ5IERPTkUuPC9wPgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+CitmdW5j
dGlvbiBsb2cobXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlu
bmVySFRNTCArPSBtc2cgKyAiPGJyPiI7Cit9CisKK3ZhciBzdGF0ZU5hbWVzID0gWyJDT05ORUNU
SU5HIiwgIk9QRU4iLCAiQ0xPU0VEIl07Citmb3IgKHZhciBpIGluIHN0YXRlTmFtZXMpCisgICAg
ZXZhbCgidmFyICIgKyBzdGF0ZU5hbWVzW2ldICsgIiA9ICIgKyBpKTsKK3ZhciByZXRyeVRpbWVv
dXQ7CisKK2Z1bmN0aW9uIGNoZWNrUmVhZHlTdGF0ZShlcywgZGVzaXJlZFN0YXRlKSB7CisgICAg
dmFyIGN1cnJTdGF0ZSA9IGVzLnJlYWR5U3RhdGU7CisgICAgaWYgKGN1cnJTdGF0ZSA9PSBkZXNp
cmVkU3RhdGUpCisgICAgICAgIGxvZygiUEFTUzogc3RhdGUgaXMgIiArIHN0YXRlTmFtZXNbZGVz
aXJlZFN0YXRlXSk7CisgICAgZWxzZQorICAgICAgICBsb2coIkZBSUw6IGJhZCBzdGF0ZSAoIiAr
IHN0YXRlTmFtZXNbY3VyclN0YXRlXSArICIsIHNob3VsZCBiZSAiICsgc3RhdGVOYW1lc1tkZXNp
cmVkU3RhdGVdICsgIikiKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciBlcnJDb3VudCA9IDA7Cit2YXIg
ZXMgPSBuZXcgRXZlbnRTb3VyY2UoInJlc291cmNlcy9yZWNvbm5lY3QucGhwIik7CisKK2NoZWNr
UmVhZHlTdGF0ZShlcywgQ09OTkVDVElORyk7CisKK2VzLm9ub3BlbiA9IGZ1bmN0aW9uIChldnQp
IHsKKyAgICBjaGVja1JlYWR5U3RhdGUoZXMsIE9QRU4pOworfTsKKworZXMub25tZXNzYWdlID0g
ZnVuY3Rpb24gKGV2dCkgeworICAgIGlmICghZXJyQ291bnQpIHsKKyAgICAgICAgaWYgKGV2dC5s
YXN0RXZlbnRJZCA9PSAiNzciKQorICAgICAgICAgICAgbG9nKCJQQVNTOiBnb3QgbGFzdEV2ZW50
SWQgXCI3N1wiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiRkFJTDogdW5leHBl
Y3RlZCBsYXN0RXZlbnRJZCBcIiIgKyBldnQubGFzdEV2ZW50SWQgKyAiXCIiKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gIjc3IikKKyAgICAgICAgICAgIGxvZygiUEFT
UzogTGFzdC1FdmVudC1JRCBoZWFkZXIgd2FzIGNvcnJlY3QiKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbG9nKCJGQUlMOiBMYXN0LUV2ZW50LUlEIGhlYWRlciB3YXMgaW5jb3JyZWN0L21p
c3NpbmciKTsKKyAgICB9Cit9OworCitlcy5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIGVy
ckNvdW50Kys7CisgICAgaWYgKGVyckNvdW50IDwgMikgeworICAgICAgICBjaGVja1JlYWR5U3Rh
dGUoZXMsIENPTk5FQ1RJTkcpOworICAgICAgICByZXRyeVRpbWVvdXQgPSBzZXRUaW1lb3V0KGVu
ZCwgMTAwMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2xlYXJUaW1lb3V0KHJldHJ5
VGltZW91dCk7CisgICAgcmV0cnlUaW1lb3V0ID0gbnVsbDsKKyAgICBlbmQoKTsKK307CisKK2Z1
bmN0aW9uIGVuZCgpIHsKKyAgICBlcy5kaXNjb25uZWN0KCk7CisgICAgaWYgKHJldHJ5VGltZW91
dCkKKyAgICAgICAgbG9nKCJGQUlMOiBkaWQgbm90IHJlY29ubmVjdCBpbiB0aW1lIik7CisgICAg
ZWxzZSB7CisgICAgICAgIGNoZWNrUmVhZHlTdGF0ZShlcywgQ0xPU0VEKTsKKyAgICAgICAgbG9n
KCJET05FIik7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291
cmNlL2V2ZW50c291cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0
dXMtY29kZS1zdGF0ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0dXMtY29kZS1zdGF0ZXMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitUZXN0IEV2ZW50U291cmNl
IHN0YXRlcyBmb3IgZGlmZmVyZW50IHN0YXR1cyBjb2Rlcy4gU2hvdWxkIHByaW50IGEgc2VyaWVz
IG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS4KKworUEFTUzogc3RhdHVzIGNvZGUg
MjAwIHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBDT05ORUNUSU5H
LCBDTE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDIwNCByZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVD
VElORywgQ09OTkVDVElORywgQ0xPU0VECitQQVNTOiBzdGF0dXMgY29kZSAyMDUgcmVzdWx0ZWQg
aW4gc3RhdGVzIENPTk5FQ1RJTkcsIENPTk5FQ1RJTkcsIENMT1NFRAorUEFTUzogc3RhdHVzIGNv
ZGUgMjAyIHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBDT05ORUNUSU5HLCBDTE9TRUQK
K1BBU1M6IHN0YXR1cyBjb2RlIDMwMSByZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgT1BF
TiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VECitQQVNTOiBzdGF0dXMgY29kZSAzMDIgcmVzdWx0
ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRAor
UEFTUzogc3RhdHVzIGNvZGUgMzAzIHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBPUEVO
LCBPUEVOLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDMwNyByZXN1bHRl
ZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VECitQ
QVNTOiBzdGF0dXMgY29kZSA0MDQgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcsIENMT1NF
RCwgQ0xPU0VECitET05FCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3Vy
Y2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0dXMtY29kZS1z
dGF0ZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRz
b3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzggQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50U291cmNlIHN0YXRl
cyBmb3IgZGlmZmVyZW50IHN0YXR1cyBjb2Rlcy4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBB
U1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2
PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsKK30KKworZnVuY3Rpb24g
YXJyYXlDb21wYXJlKGExLCBhMikgeworICAgIGlmIChhMS5sZW5ndGggIT0gYTIubGVuZ3RoKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhMS5sZW5ndGg7
IGkrKykKKyAgICAgICAgaWYgKGExW2ldICE9IGEyW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2YXIgc3RhdGVOYW1lcyA9IFsiQ09OTkVDVElO
RyIsICJPUEVOIiwgIkNMT1NFRCJdOworZm9yICh2YXIgaSBpbiBzdGF0ZU5hbWVzKQorICAgIGV2
YWwoInZhciAiICsgc3RhdGVOYW1lc1tpXSArICIgPSAiICsgaSk7CisKK3ZhciB0ZXN0cyA9IFt7
ImNvZGUiOiAyMDAsICJleHBlY3RlZFN0YXRlcyI6IFtDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBD
T05ORUNUSU5HLCBDTE9TRURdfSwKKyAgICAgICAgICAgICB7ImNvZGUiOiAyMDQsICJleHBlY3Rl
ZFN0YXRlcyI6IFtDT05ORUNUSU5HLCwsIENPTk5FQ1RJTkcsIENMT1NFRF19LAorICAgICAgICAg
ICAgIHsiY29kZSI6IDIwNSwgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsLCwgQ09OTkVD
VElORywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjogMjAyLCAiZXhwZWN0ZWRTdGF0
ZXMiOiBbQ09OTkVDVElORywsLCBDT05ORUNUSU5HLCBDTE9TRURdfSwgLy8gb3RoZXIgMnh4Cisg
ICAgICAgICAgICAgeyJjb2RlIjogMzAxLCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywg
T1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjog
MzAyLCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElO
RywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjogMzAzLCAiZXhwZWN0ZWRTdGF0ZXMi
OiBbQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VEXX0sCisgICAgICAg
ICAgICAgeyJjb2RlIjogMzA3LCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywgT1BFTiwg
T1BFTiwgQ09OTkVDVElORywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjogNDA0LCAi
ZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywsLCBDTE9TRUQsIENMT1NFRF19XTsgLy8gYW55
IG90aGVyCit2YXIgY291bnQgPSAwOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmIChj
b3VudCA+PSB0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgbG9nKCJET05FIik7CisgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIg
c3RhdGVzID0gW107CisgICAgdmFyIGVzID0gbmV3IEV2ZW50U291cmNlKCJyZXNvdXJjZXMvc3Rh
dHVzLWNvZGVzLnBocD9zdGF0dXMtY29kZT0iICsgdGVzdHNbY291bnRdLmNvZGUpOworICAgIHN0
YXRlc1swXSA9IGVzLnJlYWR5U3RhdGU7CisKKyAgICBlcy5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7
CisgICAgICAgIHN0YXRlc1sxXSA9IGVzLnJlYWR5U3RhdGU7CisgICAgfTsKKworICAgIGVzLm9u
bWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgc3RhdGVzWzJdID0gZXMucmVhZHlT
dGF0ZTsKKyAgICB9OworCisgICAgZXMub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
c3RhdGVzWzNdID0gZXMucmVhZHlTdGF0ZTsKKyAgICAgICAgZXMuZGlzY29ubmVjdCgpOworICAg
ICAgICBzdGF0ZXNbNF0gPSBlcy5yZWFkeVN0YXRlOworCisgICAgICAgIHZhciByZXN1bHQgPSBh
cnJheUNvbXBhcmUoc3RhdGVzLCB0ZXN0c1tjb3VudF0uZXhwZWN0ZWRTdGF0ZXMpID8gIlBBU1Mi
IDogIkZBSUwiOworICAgICAgICByZXN1bHQgKz0gIjogc3RhdHVzIGNvZGUgIiArIHRlc3RzW2Nv
dW50XS5jb2RlICsgIiByZXN1bHRlZCBpbiBzdGF0ZXMgIjsKKyAgICAgICAgZm9yICh2YXIgaSBp
biBzdGF0ZXMpCisgICAgICAgICAgICByZXN1bHQgKz0gKGkgIT0gMCA/ICIsICIgOiAiIikgKyBz
dGF0ZU5hbWVzW3N0YXRlc1tpXV07CisgICAgICAgIGxvZyhyZXN1bHQpOworCisgICAgICAgIHNl
dFRpbWVvdXQocnVuVGVzdCwgMCk7CisgICAgICAgIGNvdW50Kys7CisgICAgfTsKK30KKworaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
Cit9CisKK3J1blRlc3QoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvYmFkLW1pbWUtdHlwZS5h
c2lzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVz
b3VyY2VzL2JhZC1taW1lLXR5cGUuYXNpcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2JhZC1taW1lLXR5cGUuYXNpcwkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzIEBACitDb250ZW50LVR5cGU6IHRleHQvYm9ndXMKKworZGF0YTog
c2hvdWxkIG5vdCB0cmlnZ2VyIGFuIGV2ZW50CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2V2ZW50c291cmNlL3Jlc291cmNlcy9ldmVudC1zdHJlYW0ucGhwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2V2ZW50LXN0cmVhbS5w
aHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jl
c291cmNlcy9ldmVudC1zdHJlYW0ucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACis8
P3BocAoraGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvZXZlbnQtc3RyZWFtIik7Cis/PgorCis6
IGEgY29tbWVudCAoaWdub3JlZCkKK3RoaXMgbGluZSB3aWxsIGJlIGlnbm9yZWQgc2luY2UgdGhl
cmUgaXMgbm8gZmllbGQgYW5kIHRoZSBsaW5lIGl0c2VsZiBpcyBub3QgYSBmaWVsZAorZmllbGQ6
IGFuIHVua25vd24gZmllbGQgdGhhdCB3aWxsIGJlIGlnbm9yZWQKKzphbm90aGVyIGNvbW1tZW50
CisKK2RhdGEgOiB0aGlzIGxpbmUgd2lsbCBiZSBpZ25vcmVkIHNpbmNlIHRoZXJlIGlzIGEgc3Bh
Y2UgYWZ0ZXIgZGF0YQorCitkYXRhCitkYXRhOgorZGF0YQorOiBubyBkaXNwYXRjaCBzaW5jZSBk
YXRhIGJ1ZmZlciBpcyBlbXB0eQorCitkYXRhOiBzaW1wbGUKKworZGF0YTogc3Bhbm5pbmcKK2Rh
dGE6bXVsdGlwbGUKK2RhdGEKK2RhdGE6IGxpbmVzCitkYXRhCisKK2lkOiAxCitkYXRhOiBpZCBp
cyAxCisKK2RhdGE6IGlkIGlzIHN0aWxsIDEKKworaWQKK2RhdGE6IG5vIGlkCisKK2V2ZW50OiBv
cGVuCitkYXRhOiBhIG1lc3NhZ2UgZXZlbnQgd2l0aCB0aGUgbmFtZSAib3BlbiIKKworPD9waHAg
Zmx1c2goKTsgZWNobyAiZGEiOyBmbHVzaCgpOyA/PgordGE6IGEgbWVzc2FnZSBldmVudCB3aXRo
IHRoZSBuYW1lICJtZXNzYWdlIgorCis8P3BocCBlY2hvICJkYXRhOiBhIGxpbmUgZW5kaW5nIHdp
dGggY3JsZlxyXG4iOyA/PgorZGF0YTogYSBsaW5lIHdpdGggYSA6IChjb2xvbikKKzw/cGhwIGVj
aG8gImRhdGE6IGEgbGluZSB3aXRoIGEgXHIgKGNhcnJpYWdlIHJldHVybilcbiI7ID8+CisKK3Jl
dHJ5OiAxMDAwMAorOiByZWNvbm5lY3Rpb24gdGltZSBzZXQgdG8gMTAgc2Vjb25kcworCityZXRy
eTogb25lIHRob3VzYW5kCis6IGlnbm9yZWQgaW52YWxpZCByZWNvbm5lY3Rpb24gdGltZSB2YWx1
ZQorCityZXRyeQorOiByZXNldCB0byB1YSBkZWZhdWx0CisKSW5kZXg6IExheW91dFRlc3RzL2h0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3JlY29ubmVjdC5waHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvcmVjb25uZWN0
LnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uv
cmVzb3VyY2VzL3JlY29ubmVjdC5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/
cGhwCitoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9ldmVudC1zdHJlYW0iKTsKKyRsYXN0RXZl
bnRJZCA9ICRfU0VSVkVSWydIVFRQX0xBU1RfRVZFTlRfSUQnXTsKKworaWYgKCRsYXN0RXZlbnRJ
ZCkKKyAgICBlY2hvICJkYXRhOiAkbGFzdEV2ZW50SWRcblxuIjsKK2Vsc2UgeworICAgIGVjaG8g
ImlkOiA3N1xuIjsKKyAgICBlY2hvICJyZXRyeTogMzAwXG4iOworICAgIGVjaG8gImRhdGE6IGhl
bGxvXG5cbiI7Cit9Cis/PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJj
ZS9yZXNvdXJjZXMvc2ltcGxlLWV2ZW50LXN0cmVhbS5hc2lzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJl
YW0uYXNpcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3Vy
Y2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzIEBACitDb250ZW50LVR5cGU6IHRleHQvZXZlbnQtc3RyZWFtCisKK2RhdGE6IGhlbGxv
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9zdGF0
dXMtY29kZXMucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRz
b3VyY2UvcmVzb3VyY2VzL3N0YXR1cy1jb2Rlcy5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9zdGF0dXMtY29kZXMucGhwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8P3BocAorJHN0YXR1c19jb2RlID0gJF9HRVRb
J3N0YXR1cy1jb2RlJ107CitoZWFkZXIoIkhUVFAvMS4xICRzdGF0dXNfY29kZSBPSyIpOworCitz
d2l0Y2ggKCRzdGF0dXNfY29kZSkgeworY2FzZSAyMDA6CisgICAgaGVhZGVyKCJDb250ZW50LVR5
cGU6IHRleHQvZXZlbnQtc3RyZWFtIik7CisgICAgZWNobyAiZGF0YTogaGVsbG9cblxuIjsKKyAg
ICBicmVhazsKK2Nhc2UgMzAxOgorY2FzZSAzMDI6CitjYXNlIDMwMzoKK2Nhc2UgMzA3OgorICAg
ICR1cmkgPSBydHJpbShkaXJuYW1lKCRfU0VSVkVSWydQSFBfU0VMRiddKSwgJy9cXCcpIC4gIi9z
aW1wbGUtZXZlbnQtc3RyZWFtLmFzaXMiOworICAgIGhlYWRlcigiTG9jYXRpb246IGh0dHA6Ly8i
IC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gJHVyaSk7CisgICAgYnJlYWs7Cit9Cis/PgpJbmRl
eDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNl
LXNpbXBsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMv
ZXZlbnRzb3VyY2Utc2ltcGxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
IEBACitUZXN0IEV2ZW50U291cmNlIGluIGEgd29ya2VyLgorCitQQVNTCisKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9ldmVudHNvdXJjZS1zaW1wbGUu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dv
cmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2
ZW50U291cmNlIGluIGEgd29ya2VyLjwvcD4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2Ny
aXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
ZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIHdv
cmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy9zaW1wbGUtd29ya2VyLmpzIik7CisKK3dvcmtl
ci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgaWYgKGV2dC5kYXRhID09ICJoZWxs
byIpCisgICAgICAgIGxvZygiUEFTUyIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJGQUlMIik7
CisgICAgZW5kKCk7Cit9CisKK3dvcmtlci5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIGxv
ZygiRkFJTCIpOworICAgIGVuZCgpOworfQorCitmdW5jdGlvbiBlbmQoKSB7CisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9yZXNvdXJjZXMvc2ltcGxl
LXdvcmtlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291
cmNlL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZS13b3JrZXIuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBs
ZS13b3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK3ZhciBlcyA9IG5ldyBF
dmVudFNvdXJjZSgiLi4vLi4vcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpcyIpOwor
Citlcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgcG9zdE1lc3NhZ2UoZXZ0LmRh
dGEpOworICAgIGVzLmRpc2Nvbm5lY3QoKTsKK30KKworZXMub25lcnJvciA9IGZ1bmN0aW9uICgp
IHsKKyAgICBwb3N0TWVzc2FnZSgiZXJyb3IiKTsKKyAgICBlcy5kaXNjb25uZWN0KCk7Cit9CisK
</data>
<flag name="review"
          id="15887"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34139</attachid>
            <date>2009-08-05 09:17:17 -0700</date>
            <delta_ts>2009-08-12 09:07:03 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>eventsource_r46804.patch</filename>
            <type>text/plain</type>
            <size>74376</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ2ODA0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgt
MDUgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZGVkIEV2
ZW50U291cmNlIHRvIHRoZSBidWlsZCAoZGVmYXVsdCBvbikuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5NworCisgICAgICAgICogY29uZmlndXJl
LmFjOgorCiAyMDA5LTA4LTA1ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KSW5kZXg6IGNvbmZpZ3VyZS5h
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlzaW9uIDQ2ODA0KQorKysgY29uZmln
dXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4LDE0IEBAIEFDX0FSR19FTkFCTEUo
ZGF0YWJhc2UsCiAgICAgICAgICAgICAgIFtdLFtlbmFibGVfZGF0YWJhc2U9InllcyJdKQogQUNf
TVNHX1JFU1VMVChbJGVuYWJsZV9kYXRhYmFzZV0pCiAKKyMgY2hlY2sgd2hldGhlciB0byBidWls
ZCB3aXRoIHNlcnZlci1zZW50IGV2ZW50cyBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRo
ZXIgdG8gZW5hYmxlIEhUTUw1IHNlcnZlci1zZW50IGV2ZW50cyBzdXBwb3J0XSkKK0FDX0FSR19F
TkFCTEUoZXZlbnRzb3VyY2UsCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJs
ZS1ldmVudHNvdXJjZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgSFRN
TDUgc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnQgW2RlZmF1bHQ9eWVzXV0pLAorICAgICAgICAg
ICAgICBbXSxbZW5hYmxlX2V2ZW50c291cmNlPSJ5ZXMiXSkKK0FDX01TR19SRVNVTFQoWyRlbmFi
bGVfZXZlbnRzb3VyY2VdKQorCiAjIGNoZWNrIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBpY29uIGRh
dGFiYXNlIHN1cHBvcnQKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgaWNvbiBk
YXRhYmFzZSBzdXBwb3J0XSkKIEFDX0FSR19FTkFCTEUoaWNvbl9kYXRhYmFzZSwKQEAgLTcwMiw2
ICs3MTAsNyBAQCBBTV9DT05ESVRJT05BTChbRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHCiBBTV9D
T05ESVRJT05BTChbRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OU10sW3Rlc3QgIiRlbmFi
bGVfb2ZmbGluZV93ZWJfYXBwbGljYXRpb25zIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtF
TkFCTEVfRE9NX1NUT1JBR0VdLFt0ZXN0ICIkZW5hYmxlX2RvbV9zdG9yYWdlIiA9ICJ5ZXMiXSkK
IEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfREFUQUJBU0VdLFt0ZXN0ICIkZW5hYmxlX2RhdGFiYXNl
IiA9ICJ5ZXMiXSkKK0FNX0NPTkRJVElPTkFMKFtFTkFCTEVfRVZFTlRTT1VSQ0VdLFt0ZXN0ICIk
ZW5hYmxlX2V2ZW50c291cmNlIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfSUNP
TkRBVEFCQVNFXSxbdGVzdCAiJGVuYWJsZV9pY29uX2RhdGFiYXNlIiA9ICJ5ZXMiXSkKIEFNX0NP
TkRJVElPTkFMKFtFTkFCTEVfWFBBVEhdLFt0ZXN0ICIkZW5hYmxlX3hwYXRoIiA9ICJ5ZXMiXSkK
IEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfWFNMVF0sW3Rlc3QgIiRlbmFibGVfeHNsdCIgPSAieWVz
Il0pCkBAIC03NTgsNiArNzY3LDcgQEAgRmVhdHVyZXM6CiAgSFRNTDUgY2xpZW50LXNpZGUgc2Vz
c2lvbiBhbmQgcGVyc2lzdGVudCBzdG9yYWdlIHN1cHBvcnQgOiAkZW5hYmxlX2RvbV9zdG9yYWdl
CiAgSFRNTDUgY2xpZW50LXNpZGUgZGF0YWJhc2Ugc3RvcmFnZSBzdXBwb3J0ICAgICAgICAgICAg
ICAgOiAkZW5hYmxlX2RhdGFiYXNlCiAgSFRNTDUgcnVieSBzdXBwb3J0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX3J1YnkKKyBIVE1MNSBzZXJ2ZXItc2Vu
dCBldmVudHMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZXZlbnRz
b3VyY2UKICBIVE1MNSB2aWRlbyBlbGVtZW50IHN1cHBvcnQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6ICRlbmFibGVfdmlkZW8KICBJY29uIGRhdGFiYXNlIHN1cHBvcnQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfaWNvbl9kYXRhYmFzZQogIFNoYXJl
ZFdvcmtlcnMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVu
YWJsZV9zaGFyZWRfd29ya2VycwpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2ODA0KQorKysgV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw4NyBAQAorMjAwOS0wOC0wNSAgQWRhbSBCZXJn
a3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgaW1wbGVtZW50YXRpb24gb2YgdGhl
IEV2ZW50U291cmNlIG9iamVjdCB0aGF0IGVuYWJsZXMKKyAgICAgICAgc2VydmVyLXNlbnQgZXZl
bnRzIGZyb20gSFRNTDUuCisgICAgICAgIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L2V2ZW50c291
cmNlLworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
OTcKKworICAgICAgICBUZXN0czogZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1
dGUtbGlzdGVuZXJzLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZXZlbnRzb3VyY2UvZXZlbnRz
b3VyY2UtY29uc3RydWN0b3IuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0
Lmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Ut
c3RhdHVzLWNvZGUtc3RhdGVzLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvZXZlbnRz
b3VyY2Uvd29ya2Vycy9ldmVudHNvdXJjZS1zaW1wbGUuaHRtbAorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmV2
ZW50U291cmNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0
b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpK
U0V2ZW50U291cmNlQ29uc3RydWN0b3I6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0RXZlbnRTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6bWFyayk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjpjbGFzc0luZm8pOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2U6Om1hcmspOgorICAgICAgICAoV2ViQ29yZTo6SlNF
dmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50
U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9FdmVudFRhcmdldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6ZXZlbnRTb3Vy
Y2UpOgorICAgICAgICAqIGRvbS9FdmVudE5hbWVzLmg6CisgICAgICAgICogZG9tL0V2ZW50VGFy
Z2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Ojp0b0V2ZW50U291cmNlKToK
KyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5p
ZGw6CisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
U291cmNlOjp+RXZlbnRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNv
bm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmVuZFJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNjaGVkdWxlUmVjb25uZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjpyZWNvbm5lY3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50U291cmNlOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6
OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNsb3NlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjphZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50U291cmNlOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRT
b3VyY2U6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpk
aWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRGYWls
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbUxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaE1lc3NhZ2VFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFNvdXJjZTo6c3RvcCk6CisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6Oik6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJj
ZTo6c2V0T25vcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpvbm9wZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNldE9ubWVzc2FnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFNvdXJjZTo6b25tZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
U291cmNlOjpzZXRPbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpvbmVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjp0b0V2ZW50U291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpldmVudExpc3RlbmVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudFNvdXJjZTo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRTb3VyY2U6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3Vy
Y2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAy
MDA5LTA4LTA1ICBBbmRyYXMgQmVjc2kgIDxiZWNzaS5hbmRyYXNAc3R1ZC51LXN6ZWdlZC5odT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNp
b24gNDY4MDQpCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzcsNiArMjM3LDcgQEAgSURMX0JJTkRJTkdTICs9IFwKIAlXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0
ZXMuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdl
L0RPTVdpbmRvdy5pZGwgXAorCVdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwgXAogCVdlYkNv
cmUvcGFnZS9HZW9sb2NhdGlvbi5pZGwgXAogCVdlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5pZGwg
XAogCVdlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbCBcCkBAIC0zMzksNiArMzQwLDkgQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgXAogCVdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFNvdXJjZUNvbnN0cnVjdG9yLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291
cmNlQ29uc3RydWN0b3IuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3Vz
dG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMv
SlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgXApAQCAtMTI2Myw2ICsxMjY3LDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggXAogCVdlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggXAorCVdl
YkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAgXAorCVdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5o
IFwKIAlXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL0Zv
Y3VzQ29udHJvbGxlci5oIFwKIAlXZWJDb3JlL3BhZ2UvRm9jdXNEaXJlY3Rpb24uaCBcCkBAIC0y
MTE0LDYgKzIxMjAsMjAgQEAgd2ViY29yZV9jcHBmbGFncyArPSAtREVOQUJMRV9EQVRBQkFTRT0w
CiBlbmRpZiAjIEVORCBFTkFCTEVfREFUQUJBU0UKIAogIyAtLS0tCisjIEhUTUw1IHNlcnZlci1z
ZW50IGV2ZW50cworIyAtLS0tCitpZiAhRU5BQkxFX0VWRU5UU09VUkNFCitnbG9iYWxfY3BwZmxh
Z3MgKz0gLURFTkFCTEVfRVZFTlRTT1VSQ0U9MAorZW5kaWYKKworaWYgRU5BQkxFX0VWRU5UU09V
UkNFCitGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfRVZFTlRTT1VSQ0U9MQor
Cit3ZWJjb3JlX2NwcGZsYWdzICs9IFwKKwktREVOQUJMRV9FVkVOVFNPVVJDRT0xCitlbmRpZiAj
IEVOQUJMRV9FVkVOVFNPVVJDRQorCisjIC0tLS0KICMgSFRNTDUgY2xpZW50LXNpZGUgc2Vzc2lv
biBhbmQgcGVyc2lzdGVudCBzdG9yYWdlCiAjIC0tLS0KIGlmIEVOQUJMRV9ET01fU1RPUkFHRQpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xFX1RI
UkVBREVECiAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0u
KTogREVGSU5FUyArPSBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xCiAhY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX0RBVEFCQVNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVRBQkFTRT0xCish
Y29udGFpbnMoREVGSU5FUywgRU5BQkxFX0VWRU5UU09VUkNFPS4pOiBERUZJTkVTICs9IEVOQUJM
RV9FVkVOVFNPVVJDRT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX09GRkxJTkVfV0VCX0FQ
UExJQ0FUSU9OUz0uKTogREVGSU5FUyArPSBFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05T
PTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NUT1JBR0U9Lik6IERFRklORVMgKz0g
RU5BQkxFX0RPTV9TVE9SQUdFPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSUNPTkRBVEFC
QVNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9JQ09OREFUQUJBU0U9MQpAQCAtNDI1LDYgKzQyNiw3
IEBAIElETF9CSU5ESU5HUyArPSBcCiAgICAgcGFnZS9Db29yZGluYXRlcy5pZGwgXAogICAgIHBh
Z2UvRE9NU2VsZWN0aW9uLmlkbCBcCiAgICAgcGFnZS9ET01XaW5kb3cuaWRsIFwKKyAgICBwYWdl
L0V2ZW50U291cmNlLmlkbCBcCiAgICAgcGFnZS9HZW9sb2NhdGlvbi5pZGwgXAogICAgIHBhZ2Uv
R2VvcG9zaXRpb24uaWRsIFwKICAgICBwYWdlL0hpc3RvcnkuaWRsIFwKQEAgLTQ4Niw2ICs0ODgs
OCBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcCBc
CiAgICAgYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMv
SlNFdmVudEN1c3RvbS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1
Y3Rvci5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwIFwKICAg
ICBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNHZW9s
b2NhdGlvbkN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb24u
Y3BwIFwKQEAgLTkxNiw2ICs5MjAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL05hdmlnYXRv
ckJhc2UuY3BwIFwKICAgICBwYWdlL0RyYWdDb250cm9sbGVyLmNwcCBcCiAgICAgcGFnZS9FdmVu
dEhhbmRsZXIuY3BwIFwKKyAgICBwYWdlL0V2ZW50U291cmNlLmNwcCBcCiAgICAgcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwIFwKICAgICBwYWdlL0ZyYW1lLmNwcCBcCiAgICAgcGFnZS9GcmFtZVRy
ZWUuY3BwIFwKQEAgLTExNjIsNiArMTE2Nyw3IEBAIEhFQURFUlMgKz0gXAogICAgIGJpbmRpbmdz
L2pzL0pTRE9NV2luZG93Q3VzdG9tLmggXAogICAgIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hl
bGwuaCBcCiAgICAgYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmggXAorICAgIGJpbmRpbmdz
L2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oIFwKICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50
VGFyZ2V0LmggXAogICAgIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5oIFwKICAgICBiaW5k
aW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uLmggXApAQCAtMTU4Niw2ICsxNTkyLDcgQEAgSEVB
REVSUyArPSBcCiAgICAgcGFnZS9ET01XaW5kb3cuaCBcCiAgICAgcGFnZS9EcmFnQ29udHJvbGxl
ci5oIFwKICAgICBwYWdlL0V2ZW50SGFuZGxlci5oIFwKKyAgICBwYWdlL0V2ZW50U291cmNlLmgg
XAogICAgIHBhZ2UvRm9jdXNDb250cm9sbGVyLmggXAogICAgIHBhZ2UvRnJhbWUuaCBcCiAgICAg
cGFnZS9GcmFtZVRyZWUuaCBcCkBAIC0yMjY0LDYgKzIyNzEsMTAgQEAgY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX0RBVEFHUklEPTEpIHsKICAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCAr
PSBFTkFCTEVfREFUQUdSSUQ9MQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRVZFTlRT
T1VSQ0U9MSkgeworICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9FVkVO
VFNPVVJDRT0xCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TUUxJVEU9MSkgewogICAg
ICFzeXN0ZW0tc3FsaXRlOmV4aXN0cyggJCR7U1FMSVRFM1NSQ0RJUn0vc3FsaXRlMy5jICkgewog
ICAgICAgICAgICAgIyBCdWlsZCBzcWxpdGUzIGludG8gV2ViQ29yZSBmcm9tIHNvdXJjZQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHJldmlzaW9uIDQ2
ODA0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJKU0RPTVdpbmRvd1NoZWxsLmgi
CiAjaW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgIkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlICJKU0hpc3RvcnkuaCIKICNpbmNsdWRlICJKU0ltYWdlQ29uc3Ry
dWN0b3IuaCIKQEAgLTQyNCw2ICs0MjUsMTMgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnQo
RXhlY1N0YXRlKiBleAogICAgIHJldHVybiB0b0pTKGV4ZWMsIGV2ZW50KTsKIH0KIAorI2lmIEVO
QUJMRShFVkVOVFNPVVJDRSkKK0pTVmFsdWUgSlNET01XaW5kb3c6OmV2ZW50U291cmNlKEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNFdmVu
dFNvdXJjZUNvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKK30KKyNlbmRpZgorCiBKU1ZhbHVlIEpT
RE9NV2luZG93OjppbWFnZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTSW1hZ2VDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7CkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0
b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKworI2luY2x1ZGUgIkpTRXZlbnRT
b3VyY2VDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVkZSAiRXZlbnRTb3VyY2UuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZS5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKEpTRXZlbnRTb3Vy
Y2VDb25zdHJ1Y3Rvcik7CisKK2NvbnN0IENsYXNzSW5mbyBKU0V2ZW50U291cmNlQ29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIkV2ZW50U291cmNlQ29udHJ1Y3RvciIsIDAsIDAsIDAgfTsKKworSlNF
dmVudFNvdXJjZUNvbnN0cnVjdG9yOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3IoRXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NT2JqZWN0
KEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+b2JqZWN0UHJvdG90eXBlKCkpKQorICAgICwgbV9nbG9iYWxPYmplY3Qo
Z2xvYmFsT2JqZWN0KQoreworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJv
dG90eXBlLCBKU0V2ZW50U291cmNlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSksIE5vbmUpOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51
bSk7Cit9CisKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
cjo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cit9CisKK3N0YXRpYyBKU09iamVjdCog
Y29uc3RydWN0RXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0
b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDApCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBh
cmd1bWVudHMiKTsKKworICAgIFVTdHJpbmcgdXJsID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PEpTRXZlbnRT
b3VyY2VDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgUmVm
ZXJlbmNlRXJyb3IsICJFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGRvY3VtZW50
IGlzIHVuYXZhaWxhYmxlIik7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBSZWZQ
dHI8RXZlbnRTb3VyY2U+IGV2ZW50U291cmNlID0gRXZlbnRTb3VyY2U6OmNyZWF0ZSh1cmwsIGNv
bnRleHQsIGVjKTsKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworCisgICAgcmV0dXJu
IGFzT2JqZWN0KHRvSlMoZXhlYywgZXZlbnRTb3VyY2UucmVsZWFzZSgpKSk7Cit9CisKK0NvbnN0
cnVjdFR5cGUgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0
cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24gPSBjb25zdHJ1Y3RFdmVudFNvdXJjZTsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhv
c3Q7Cit9CisKK3ZvaWQgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yOjptYXJrKCkKK3sKKyAgICBE
T01PYmplY3Q6Om1hcmsoKTsKKyAgICBpZiAoIW1fZ2xvYmFsT2JqZWN0LT5tYXJrZWQoKSkKKyAg
ICAgICAgbV9nbG9iYWxPYmplY3QtPm1hcmsoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEVWRU5UU09VUkNFKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
cl9oCisjZGVmaW5lIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcl9oCisKKyNpZiBFTkFCTEUoRVZF
TlRTT1VSQ0UpCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yIDogcHVibGljIERPTU9i
amVjdCB7CisgICAgcHVibGljOgorICAgICAgICBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgICAgICBTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisgICAgICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICAgICAgdmlydHVhbCB2b2lkIG1h
cmsoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7CisgICAgICAgIHZpcnR1YWwg
Y29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87
IH0KKworICAgICAgICBKU0RPTUdsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Q7CisgICAgfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVWRU5UU09VUkNF
KQorCisjZW5kaWYgLy8gSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24gQUIKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KEVWRU5UU09VUkNFKQorCisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZS5oIgorCisjaW5jbHVkZSAi
RXZlbnRTb3VyY2UuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IkpTRXZlbnRMaXN0ZW5lci5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgSlNFdmVudFNvdXJjZTo6bWFyaygpCit7CisgICAgRE9NT2JqZWN0
OjptYXJrKCk7CisKKyAgICBtYXJrSWZOb3ROdWxsKG1faW1wbC0+b25vcGVuKCkpOworICAgIG1h
cmtJZk5vdE51bGwobV9pbXBsLT5vbm1lc3NhZ2UoKSk7CisgICAgbWFya0lmTm90TnVsbChtX2lt
cGwtPm9uZXJyb3IoKSk7CisKKyAgICB0eXBlZGVmIEV2ZW50U291cmNlOjpFdmVudExpc3RlbmVy
c01hcCBFdmVudExpc3RlbmVyc01hcDsKKyAgICB0eXBlZGVmIEV2ZW50U291cmNlOjpMaXN0ZW5l
clZlY3RvciBMaXN0ZW5lclZlY3RvcjsKKyAgICBFdmVudExpc3RlbmVyc01hcCYgZXZlbnRMaXN0
ZW5lcnMgPSBtX2ltcGwtPmV2ZW50TGlzdGVuZXJzKCk7CisgICAgZm9yIChFdmVudExpc3RlbmVy
c01hcDo6aXRlcmF0b3IgbWFwSXRlciA9IGV2ZW50TGlzdGVuZXJzLmJlZ2luKCk7IG1hcEl0ZXIg
IT0gZXZlbnRMaXN0ZW5lcnMuZW5kKCk7ICsrbWFwSXRlcikgeworICAgICAgICBmb3IgKExpc3Rl
bmVyVmVjdG9yOjppdGVyYXRvciB2ZWNJdGVyID0gbWFwSXRlci0+c2Vjb25kLmJlZ2luKCk7IHZl
Y0l0ZXIgIT0gbWFwSXRlci0+c2Vjb25kLmVuZCgpOyArK3ZlY0l0ZXIpCisgICAgICAgICAgICAo
KnZlY0l0ZXIpLT5tYXJrSlNGdW5jdGlvbigpOworICAgIH0KK30KKworSlNWYWx1ZSBKU0V2ZW50
U291cmNlOjphZGRFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJncykKK3sKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUds
b2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCFn
bG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFJlZlB0cjxK
U0V2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2xvYmFsT2JqZWN0LT5maW5kT3JDcmVhdGVKU0V2
ZW50TGlzdGVuZXIoYXJncy5hdCgxKSk7CisgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgaW1wbCgpLT5hZGRFdmVudExpc3RlbmVyKGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLnJlbGVhc2UoKSwgYXJncy5hdCgyKS50b0Jvb2xl
YW4oZXhlYykpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIEpTRXZl
bnRTb3VyY2U6OnJlbW92ZUV2ZW50TGlzdGVuZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQoreworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0b0pT
RE9NR2xvYmFsT2JqZWN0KGltcGwoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBp
ZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSlNF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZEpTRXZlbnRMaXN0ZW5l
cihhcmdzLmF0KDEpKTsKKyAgICBpZiAoIWxpc3RlbmVyKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICBpbXBsKCktPnJlbW92ZUV2ZW50TGlzdGVuZXIoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSwgbGlzdGVuZXIsIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEVWRU5UU09VUkNFKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRU
YXJnZXQuY3BwCShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDExIEBACiAjaW5jbHVkZSAi
WE1MSHR0cFJlcXVlc3QuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIgogCisj
aWYgRU5BQkxFKEVWRU5UU09VUkNFKQorI2luY2x1ZGUgIkV2ZW50U291cmNlLmgiCisjaW5jbHVk
ZSAiSlNFdmVudFNvdXJjZS5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQ
TElDQVRJT05TKQogI2luY2x1ZGUgIkRPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJK
U0RPTUFwcGxpY2F0aW9uQ2FjaGUuaCIKQEAgLTcwLDYgKzc1LDExIEBAIEpTVmFsdWUgdG9KUyhF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwogICAgIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKyAgICBpZiAoRXZl
bnRTb3VyY2UqIGV2ZW50U291cmNlID0gdGFyZ2V0LT50b0V2ZW50U291cmNlKCkpCisgICAgICAg
IHJldHVybiBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXZl
bnRTb3VyY2UpOworI2VuZGlmCisKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFNWR0VsZW1lbnRJ
bnN0YW5jZSBzdXBwb3J0cyBib3RoIHRvU1ZHRWxlbWVudEluc3RhbmNlIGFuZCB0b05vZGUgc2lu
Y2Ugc28gbXVjaCBtb3VzZSBoYW5kbGluZyBjb2RlIGRlcGVuZHMgb24gdG9Ob2RlIHJldHVybmlu
ZyBhIHZhbGlkIG5vZGUuCiAgICAgaWYgKFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSB0
YXJnZXQtPnRvU1ZHRWxlbWVudEluc3RhbmNlKCkpCkBAIC0xMjcsNiArMTM3LDEwIEBAIEV2ZW50
VGFyZ2V0KiB0b0V2ZW50VGFyZ2V0KEpTQzo6SlNWYWx1ZSAKICAgICBpZiAodmFsdWUuaXNPYmpl
Y3QoJkpTRE9NV2luZG93U2hlbGw6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxKU0RPTVdpbmRvd1NoZWxsKj4oYXNPYmplY3QodmFsdWUpKS0+aW1wbCgpOwogCisjaWYgRU5B
QkxFKEVWRU5UU09VUkNFKQorICAgIENPTlZFUlRfVE9fRVZFTlRfVEFSR0VUKEV2ZW50U291cmNl
KQorI2VuZGlmCisKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAgIENP
TlZFUlRfVE9fRVZFTlRfVEFSR0VUKERPTUFwcGxpY2F0aW9uQ2FjaGUpCiAjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlz
aW9uIDQ2ODA0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIldvcmtlck5h
dmlnYXRvci5oIgogI2luY2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CiAKKyNpZiBF
TkFCTEUoRVZFTlRTT1VSQ0UpCisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgi
CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNzcsNiArODEsMTMgQEAgYm9vbCBKU1dvcmtlckNvbnRleHQ6OmdldE93blByb3BlcnR5U2xv
dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKK0pTVmFs
dWUgSlNXb3JrZXJDb250ZXh0OjpldmVudFNvdXJjZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcj4o
ZXhlYywgdGhpcyk7Cit9CisjZW5kaWYKKwogSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OnhtbEh0
dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKSW5kZXg6
IFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVu
dE5hbWVzLmgJKHJldmlzaW9uIDQ2ODA0KQorKysgV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBt
YWNybyhvYnNvbGV0ZSkgXAogICAgIG1hY3JvKG9mZmxpbmUpIFwKICAgICBtYWNybyhvbmxpbmUp
IFwKKyAgICBtYWNybyhvcGVuKSBcCiAgICAgbWFjcm8ob3ZlcmZsb3djaGFuZ2VkKSBcCiAgICAg
bWFjcm8ocGFzdGUpIFwKICAgICBtYWNybyhyZWFkeXN0YXRlY2hhbmdlKSBcCkluZGV4OiBXZWJD
b3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRU
YXJnZXQuY3BwCShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTEgQEAgRXZlbnRUYXJnZXQ6On5FdmVudFRh
cmdldCgpCiB7CiB9CiAKK0V2ZW50U291cmNlKiBFdmVudFRhcmdldDo6dG9FdmVudFNvdXJjZSgp
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKIE5vZGUqIEV2ZW50VGFyZ2V0Ojp0b05vZGUoKQogewog
ICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5oCShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYkNv
cmUvZG9tL0V2ZW50VGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERPTVdpbmRvdzsKICAgICBjbGFzcyBFdmVudDsK
ICAgICBjbGFzcyBFdmVudExpc3RlbmVyOworICAgIGNsYXNzIEV2ZW50U291cmNlOwogICAgIGNs
YXNzIE1lc3NhZ2VQb3J0OwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgU1ZHRWxlbWVudElu
c3RhbmNlOwpAQCAtNTYsNiArNTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBFdmVudFRhcmdldCB7CiAgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIEV2ZW50U291cmNl
KiB0b0V2ZW50U291cmNlKCk7CiAgICAgICAgIHZpcnR1YWwgTWVzc2FnZVBvcnQqIHRvTWVzc2Fn
ZVBvcnQoKTsKICAgICAgICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKTsKICAgICAgICAgdmlydHVh
bCBET01XaW5kb3cqIHRvRE9NV2luZG93KCk7CkluZGV4OiBXZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkocmV2aXNpb24g
NDY4MDQpCisrKyBXZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
NDM4LDYgKzQzOCwxMCBAQCBtb2R1bGUgd2luZG93IHsKICAgICAgICAgYXR0cmlidXRlIFJhbmdl
Q29uc3RydWN0b3IgUmFuZ2U7CiAgICAgICAgIGF0dHJpYnV0ZSBSYW5nZUV4Y2VwdGlvbkNvbnN0
cnVjdG9yIFJhbmdlRXhjZXB0aW9uOwogCisjaWYgRU5BQkxFX0VWRU5UU09VUkNFCisgICAgICAg
IGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBFdmVudFNvdXJjZUNvbnN0cnVjdG9yIEV2ZW50
U291cmNlOyAvLyBVc2FibGUgd2l0aCBuZXcgdGhlIG9wZXJhdG9yCisjZW5kaWYKKwogICAgICAg
ICAvLyBNb3ppbGxhIGhhcyBhIHNlcGFyYXRlIFhNTERvY3VtZW50IG9iamVjdCBmb3IgWE1MIGRv
Y3VtZW50cy4gCiAgICAgICAgIC8vIFdlIGp1c3QgdXNlIERvY3VtZW50IGZvciB0aGlzLgogICAg
ICAgICBhdHRyaWJ1dGUgRG9jdW1lbnRDb25zdHJ1Y3RvciBYTUxEb2N1bWVudDsKSW5kZXg6IFdl
YkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2
ZW50U291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKworI2luY2x1ZGUgIkV2ZW50U291cmNl
LmgiCisKKyNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgorI2luY2x1ZGUgIlJlc291
cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIEV2
ZW50U291cmNlOjpkZWZhdWx0UmVjb25uZWN0RGVsYXkgPSAzMDAwOworCitFdmVudFNvdXJjZTo6
RXZlbnRTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQorICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCisgICAgLCBtX3N0YXRlKENPTk5FQ1RJTkcpCisgICAgLCBtX3JlY29ubmVjdFRpbWVy
KHRoaXMsICZFdmVudFNvdXJjZTo6cmVjb25uZWN0VGltZXJGaXJlZCkKKyAgICAsIG1fZmFpbFNp
bGVudGx5KGZhbHNlKQorICAgICwgbV9yZXF1ZXN0SW5GbGlnaHQoZmFsc2UpCisgICAgLCBtX3Jl
Y29ubmVjdERlbGF5KGRlZmF1bHRSZWNvbm5lY3REZWxheSkKK3sKKyAgICBpZiAodXJsLmlzRW1w
dHkoKSB8fCAhKG1fdXJsID0gY29udGV4dC0+Y29tcGxldGVVUkwodXJsKSkuaXNWYWxpZCgpKSB7
CisgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAv
LyBGSVhNRTogc2hvdWxkIHN1cHBvcnQgY3Jvc3Mtb3JpZ2luIHJlcXVlc3RzCisgICAgaWYgKCFz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhblJlcXVlc3QobV91
cmwpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9vcmlnaW4gPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCk7CisgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6
Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgIlVURi04Iik7CisKKyAgICBzZXRQZW5kaW5nQWN0aXZpdHko
dGhpcyk7CisgICAgY29ubmVjdCgpOworfQorCitFdmVudFNvdXJjZTo6fkV2ZW50U291cmNlKCkK
K3sKK30KKwordm9pZCBFdmVudFNvdXJjZTo6Y29ubmVjdCgpCit7CisgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QobV91cmwpOworICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7Cisg
ICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkFjY2VwdCIsICJ0ZXh0L2V2ZW50LXN0cmVh
bSIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIiwgIm5v
LWNhY2hlIik7CisgICAgaWYgKCFtX2xhc3RFdmVudElkLmlzRW1wdHkoKSkKKyAgICAgICAgcmVx
dWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkxhc3QtRXZlbnQtSUQiLCBtX2xhc3RFdmVudElkKTsK
KyAgICBtX2xvYWRlciA9IFRocmVhZGFibGVMb2FkZXI6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIHRoaXMsIHJlcXVlc3QsIFNlbmRMb2FkQ2FsbGJhY2tzLCBEb05vdFNuaWZmQ29u
dGVudCwgQWxsb3dTdG9yZWRDcmVkZW50aWFscywgRGVueUNyb3NzT3JpZ2luUmVkaXJlY3QpOwor
ICAgIG1fcmVxdWVzdEluRmxpZ2h0ID0gdHJ1ZTsKKworICAgIGlmICghc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5pc1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCkt
Pm5vbkNhY2hlUmVxdWVzdEluRmxpZ2h0KG1fdXJsKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6
ZW5kUmVxdWVzdCgpCit7CisgICAgbV9yZXF1ZXN0SW5GbGlnaHQgPSBmYWxzZTsKKworICAgIGlm
ICghbV9mYWlsU2lsZW50bHkpCisgICAgICAgIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGV2ZW50TmFt
ZXMoKS5lcnJvckV2ZW50KTsKKworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5p
c1dvcmtlckNvbnRleHQoKSkKKyAgICAgICAgY2FjaGUoKS0+bG9hZGVyKCktPm5vbkNhY2hlUmVx
dWVzdENvbXBsZXRlKG1fdXJsKTsKKworICAgIGlmIChtX3N0YXRlICE9IENMT1NFRCkKKyAgICAg
ICAgc2NoZWR1bGVSZWNvbm5lY3QoKTsKKyAgICBlbHNlCisgICAgICAgIHVuc2V0UGVuZGluZ0Fj
dGl2aXR5KHRoaXMpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpzY2hlZHVsZVJlY29ubmVjdCgp
Cit7CisgICAgbV9zdGF0ZSA9IENPTk5FQ1RJTkc7CisgICAgbV9yZWNvbm5lY3RUaW1lci5zdGFy
dE9uZVNob3QobV9yZWNvbm5lY3REZWxheSAvIDEwMDApOworfQorCit2b2lkIEV2ZW50U291cmNl
OjpyZWNvbm5lY3RUaW1lckZpcmVkKFRpbWVyPEV2ZW50U291cmNlPiopCit7CisgICAgY29ubmVj
dCgpOworfQorCitTdHJpbmcgRXZlbnRTb3VyY2U6OnVybCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdXJsLnN0cmluZygpOworfQorCitFdmVudFNvdXJjZTo6U3RhdGUgRXZlbnRTb3VyY2U6OnJl
YWR5U3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0YXRlOworfQorCit2b2lkIEV2ZW50
U291cmNlOjpjbG9zZSgpCit7CisgICAgaWYgKG1fc3RhdGUgPT0gQ0xPU0VEKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAobV9yZWNvbm5lY3RUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IG1fcmVjb25uZWN0VGltZXIuc3RvcCgpOworICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0
aGlzKTsKKyAgICB9CisKKyAgICBtX3N0YXRlID0gQ0xPU0VEOworICAgIG1fZmFpbFNpbGVudGx5
ID0gdHJ1ZTsKKworICAgIGlmIChtX3JlcXVlc3RJbkZsaWdodCkKKyAgICAgICAgbV9sb2FkZXIt
PmNhbmNlbCgpOworfQorCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBFdmVudFNvdXJjZTo6c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFjdGl2ZURPTU9iamVj
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjphZGRF
dmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEV2
ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIsIGJvb2wpCit7CisgICAgRXZlbnRMaXN0ZW5lcnNN
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2V2ZW50TGlzdGVuZXJzLmZpbmQoZXZlbnRUeXBlKTsKKyAg
ICBpZiAoaXRlciA9PSBtX2V2ZW50TGlzdGVuZXJzLmVuZCgpKSB7CisgICAgICAgIExpc3RlbmVy
VmVjdG9yIGxpc3RlbmVyczsKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExpc3RlbmVy
KTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5z
ZWNvbmQ7CisgICAgICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6Oml0ZXJhdG9yIGxpc3RlbmVySXRl
ciA9IGxpc3RlbmVycy5iZWdpbigpOyBsaXN0ZW5lckl0ZXIgIT0gbGlzdGVuZXJzLmVuZCgpOyAr
K2xpc3RlbmVySXRlcikgeworICAgICAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRM
aXN0ZW5lcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBs
aXN0ZW5lcnMuYXBwZW5kKGV2ZW50TGlzdGVuZXIpOworICAgICAgICBtX2V2ZW50TGlzdGVuZXJz
LmFkZChldmVudFR5cGUsIGxpc3RlbmVycyk7CisgICAgfQorfQorCit2b2lkIEV2ZW50U291cmNl
OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFdmVu
dExpc3RlbmVyKiBldmVudExpc3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFw
OjppdGVyYXRvciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAg
aWYgKGl0ZXIgPT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTGlzdGVuZXJWZWN0b3ImIGxpc3RlbmVycyA9IGl0ZXItPnNlY29uZDsKKyAgICBmb3IgKExp
c3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVn
aW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsK
KyAgICAgICAgaWYgKCpsaXN0ZW5lckl0ZXIgPT0gZXZlbnRMaXN0ZW5lcikgeworICAgICAgICAg
ICAgbGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lckl0ZXIgLSBsaXN0ZW5lcnMuYmVnaW4oKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgRXZlbnRTb3Vy
Y2U6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmICghZXZlbnQgfHwgZXZlbnQtPnR5cGUoKS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZWMgPSBFdmVudEV4Y2VwdGlvbjo6VU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlI7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEV2ZW50TGlzdGVuZXIqIGF0dHJpYnV0
ZUxpc3RlbmVyID0gbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50LT50eXBlKCkpLmdldCgp
OworICAgIGlmIChhdHRyaWJ1dGVMaXN0ZW5lcikgeworICAgICAgICBldmVudC0+c2V0VGFyZ2V0
KHRoaXMpOworICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAg
YXR0cmlidXRlTGlzdGVuZXItPmhhbmRsZUV2ZW50KGV2ZW50LmdldCgpLCBmYWxzZSk7CisgICAg
fQorCisgICAgTGlzdGVuZXJWZWN0b3IgbGlzdGVuZXJzQ29weSA9IG1fZXZlbnRMaXN0ZW5lcnMu
Z2V0KGV2ZW50LT50eXBlKCkpOworICAgIGZvciAoTGlzdGVuZXJWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGxpc3RlbmVySXRlciA9IGxpc3RlbmVyc0NvcHkuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9
IGxpc3RlbmVyc0NvcHkuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGV2ZW50LT5z
ZXRUYXJnZXQodGhpcyk7CisgICAgICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KHRoaXMpOwor
ICAgICAgICBsaXN0ZW5lckl0ZXItPmdldCgpLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFs
c2UpOworICAgIH0KKworICAgIHJldHVybiAhZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKK30K
Kwordm9pZCBFdmVudFNvdXJjZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlc3BvbnNlKQoreworICAgIGludCBzdGF0dXNDb2RlID0gcmVzcG9uc2UuaHR0cFN0
YXR1c0NvZGUoKTsKKyAgICBpZiAoc3RhdHVzQ29kZSA9PSAyMDAgJiYgcmVzcG9uc2UuaHR0cEhl
YWRlckZpZWxkKCJDb250ZW50LVR5cGUiKSA9PSAidGV4dC9ldmVudC1zdHJlYW0iKSB7CisgICAg
ICAgIG1fc3RhdGUgPSBPUEVOOworICAgICAgICBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5h
bWVzKCkub3BlbkV2ZW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RhdHVzQ29kZSA8
PSAyMDAgfHwgc3RhdHVzQ29kZSA+IDI5OSkKKyAgICAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7
CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICB9Cit9CisKK3ZvaWQgRXZlbnRTb3Vy
Y2U6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAg
YXBwZW5kKG1fcmVjZWl2ZUJ1ZiwgbV9kZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuZ3RoKSk7Cisg
ICAgcGFyc2VFdmVudFN0cmVhbSgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcpCit7CisgICAgaWYgKG1fcmVjZWl2ZUJ1Zi5zaXplKCkgPiAw
IHx8IG1fZGF0YS5zaXplKCkgPiAwKSB7CisgICAgICAgIGFwcGVuZChtX3JlY2VpdmVCdWYsICJc
blxuIik7CisgICAgICAgIHBhcnNlRXZlbnRTdHJlYW0oKTsKKyAgICB9CisgICAgbV9zdGF0ZSA9
IENPTk5FQ1RJTkc7CisgICAgZW5kUmVxdWVzdCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGludCBjYW5jZWxlZCA9
IGVycm9yLmlzQ2FuY2VsbGF0aW9uKCk7CisgICAgaWYgKCgobV9zdGF0ZSA9PSBDT05ORUNUSU5H
KSAmJiAhY2FuY2VsZWQpIHx8ICgobV9zdGF0ZSA9PSBPUEVOKSAmJiBjYW5jZWxlZCkpCisgICAg
ICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgZW5kUmVxdWVzdCgpOworfQorCit2b2lkIEV2ZW50
U291cmNlOjpkaWRGYWlsUmVkaXJlY3RDaGVjaygpCit7CisgICAgbV9zdGF0ZSA9IENMT1NFRDsK
KyAgICBtX2xvYWRlci0+Y2FuY2VsKCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OnBhcnNlRXZl
bnRTdHJlYW0oKQoreworICAgIHVuc2lnbmVkIGludCBidWZQb3MgPSAwOworICAgIHVuc2lnbmVk
IGludCBidWZTaXplID0gbV9yZWNlaXZlQnVmLnNpemUoKTsKKyAgICBmb3IgKDs7KSB7CisgICAg
ICAgIGludCBsaW5lTGVuZ3RoID0gLTE7CisgICAgICAgIGludCBmaWVsZExlbmd0aCA9IC0xOwor
ICAgICAgICBpbnQgY2FycmlhZ2VSZXR1cm4gPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gYnVmUG9zOyBsaW5lTGVuZ3RoIDwgMCAmJiBpIDwgYnVmU2l6ZTsgaSsrKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fcmVjZWl2ZUJ1ZltpXSkgeworICAgICAgICAgICAgY2FzZSAnOic6
CisgICAgICAgICAgICAgICAgaWYgKGZpZWxkTGVuZ3RoIDwgMCkKKyAgICAgICAgICAgICAgICAg
ICAgZmllbGRMZW5ndGggPSBpIC0gYnVmUG9zOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgICAgICAgIGlmIChpID4gYnVmUG9zICYmIG1f
cmVjZWl2ZUJ1ZltpIC0gMV0gPT0gJ1xyJykgeworICAgICAgICAgICAgICAgICAgICBjYXJyaWFn
ZVJldHVybisrOworICAgICAgICAgICAgICAgICAgICBpLS07CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGxpbmVMZW5ndGggPSBpIC0gYnVmUG9zOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxpbmVMZW5n
dGggPCAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcGFyc2VFdmVudFN0cmVhbUxp
bmUoYnVmUG9zLCBmaWVsZExlbmd0aCwgbGluZUxlbmd0aCk7CisgICAgICAgIGJ1ZlBvcyArPSBs
aW5lTGVuZ3RoICsgY2FycmlhZ2VSZXR1cm4gKyAxOworICAgIH0KKworICAgIGlmIChidWZQb3Mg
PT0gYnVmU2l6ZSkKKyAgICAgICAgbV9yZWNlaXZlQnVmLmNsZWFyKCk7CisgICAgZWxzZSBpZiAo
YnVmUG9zKQorICAgICAgICBtX3JlY2VpdmVCdWYucmVtb3ZlKDAsIGJ1ZlBvcyk7Cit9CisKK3Zv
aWQgRXZlbnRTb3VyY2U6OnBhcnNlRXZlbnRTdHJlYW1MaW5lKHVuc2lnbmVkIGludCBidWZQb3Ms
IGludCBmaWVsZExlbmd0aCwgaW50IGxpbmVMZW5ndGgpCit7CisgICAgaWYgKCFsaW5lTGVuZ3Ro
KSB7CisgICAgICAgIGlmICghbV9kYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGRpc3BhdGNo
TWVzc2FnZUV2ZW50KCk7CisgICAgICAgIGlmICghbV9ldmVudE5hbWUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgbV9ldmVudE5hbWUgPSAiIjsKKyAgICB9IGVsc2UgaWYgKGZpZWxkTGVuZ3RoKSB7
CisgICAgICAgIGJvb2wgbm9WYWx1ZSA9IGZpZWxkTGVuZ3RoIDwgMDsKKworICAgICAgICBTdHJp
bmcgZmllbGQoJm1fcmVjZWl2ZUJ1ZltidWZQb3NdLCBub1ZhbHVlID8gbGluZUxlbmd0aCA6IGZp
ZWxkTGVuZ3RoKTsKKyAgICAgICAgaW50IHN0ZXA7CisgICAgICAgIGlmIChub1ZhbHVlKQorICAg
ICAgICAgICAgc3RlcCA9IGxpbmVMZW5ndGg7CisgICAgICAgIGVsc2UgaWYgKG1fcmVjZWl2ZUJ1
ZltidWZQb3MgKyBmaWVsZExlbmd0aCArIDFdICE9ICcgJykKKyAgICAgICAgICAgIHN0ZXAgPSBm
aWVsZExlbmd0aCArIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0ZXAgPSBmaWVsZExl
bmd0aCArIDI7CisgICAgICAgIGJ1ZlBvcyArPSBzdGVwOworICAgICAgICBpbnQgdmFsdWVMZW5n
dGggPSBsaW5lTGVuZ3RoIC0gc3RlcDsKKworICAgICAgICBpZiAoZmllbGQgPT0gImRhdGEiKSB7
CisgICAgICAgICAgICBpZiAobV9kYXRhLnNpemUoKSA+IDApCisgICAgICAgICAgICAgICAgbV9k
YXRhLmFwcGVuZCgnXG4nKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZUxlbmd0aCkKKyAgICAgICAg
ICAgICAgICBtX2RhdGEuYXBwZW5kKCZtX3JlY2VpdmVCdWZbYnVmUG9zXSwgdmFsdWVMZW5ndGgp
OworICAgICAgICB9IGVsc2UgaWYgKGZpZWxkID09ICJldmVudCIpCisgICAgICAgICAgICBtX2V2
ZW50TmFtZSA9IHZhbHVlTGVuZ3RoID8gU3RyaW5nKCZtX3JlY2VpdmVCdWZbYnVmUG9zXSwgdmFs
dWVMZW5ndGgpIDogIiI7CisgICAgICAgIGVsc2UgaWYgKGZpZWxkID09ICJpZCIpCisgICAgICAg
ICAgICBtX2xhc3RFdmVudElkID0gdmFsdWVMZW5ndGggPyBTdHJpbmcoJm1fcmVjZWl2ZUJ1Zlti
dWZQb3NdLCB2YWx1ZUxlbmd0aCkgOiAiIjsKKyAgICAgICAgZWxzZSBpZiAoZmllbGQgPT0gInJl
dHJ5IikgeworICAgICAgICAgICAgaWYgKCF2YWx1ZUxlbmd0aCkKKyAgICAgICAgICAgICAgICBt
X3JlY29ubmVjdERlbGF5ID0gZGVmYXVsdFJlY29ubmVjdERlbGF5OworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlKCZtX3JlY2VpdmVCdWZbYnVmUG9zXSwg
dmFsdWVMZW5ndGgpOworICAgICAgICAgICAgICAgIGJvb2wgb2s7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBsb25nIHJldHJ5ID0gdmFsdWUudG9VSW50NjQoJm9rKTsKKyAgICAgICAg
ICAgICAgICBpZiAob2spCisgICAgICAgICAgICAgICAgICAgIG1fcmVjb25uZWN0RGVsYXkgPSBy
ZXRyeTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBFdmVudFNv
dXJjZTo6ZGlzcGF0Y2hHZW5lcmljRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQorewor
ICAgIFJlZlB0cjxFdmVudD4gZXZ0ID0gRXZlbnQ6OmNyZWF0ZSh0eXBlLCBmYWxzZSwgZmFsc2Up
OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVh
c2UoKSwgZWMpOworICAgIEFTU0VSVCghZWMpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpkaXNw
YXRjaE1lc3NhZ2VFdmVudCgpCit7CisgICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZ0ID0gTWVz
c2FnZUV2ZW50OjpjcmVhdGUoKTsKKyAgICBTdHJpbmcgZXZlbnROYW1lID0gbV9ldmVudE5hbWUu
aXNFbXB0eSgpID8gZXZlbnROYW1lcygpLm1lc3NhZ2VFdmVudC5zdHJpbmcoKSA6IG1fZXZlbnRO
YW1lOworICAgIGV2dC0+aW5pdE1lc3NhZ2VFdmVudChldmVudE5hbWUsIGZhbHNlLCBmYWxzZSwg
U3RyaW5nOjphZG9wdChtX2RhdGEpLCBtX29yaWdpbiwgbV9sYXN0RXZlbnRJZCwgMCwgMCk7Cisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgZGlzcGF0Y2hFdmVudChldnQucmVsZWFzZSgp
LCBlYyk7CisgICAgQVNTRVJUKCFlYyk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OnN0b3AoKQor
eworICAgIGNsb3NlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShFVkVOVFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVy
aWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRXZlbnRTb3VyY2VfaAorI2RlZmluZSBFdmVudFNvdXJjZV9oCisK
KyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIK
KyNpbmNsdWRlICJBdG9taWNTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgiCisjaW5j
bHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBSZXNvdXJjZVJlc3Bv
bnNlOworICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CisgICAgY2xhc3MgVGhyZWFkYWJs
ZUxvYWRlcjsKKworICAgIGNsYXNzIEV2ZW50U291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8RXZl
bnRTb3VyY2U+LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHByaXZhdGUgVGhyZWFkYWJsZUxvYWRlckNs
aWVudCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxFdmVudFNvdXJjZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
YWRvcHRSZWYobmV3IEV2ZW50U291cmNlKHVybCwgY29udGV4dCwgZWMpKTsgfQorICAgICAgICB2
aXJ0dWFsIH5FdmVudFNvdXJjZSgpOworCisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBs
b25nIGxvbmcgZGVmYXVsdFJlY29ubmVjdERlbGF5OworCisgICAgICAgIFN0cmluZyB1cmwoKSBj
b25zdDsKKworICAgICAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgICAgIENPTk5FQ1RJTkcgPSAw
LAorICAgICAgICAgICAgT1BFTiA9IDEsCisgICAgICAgICAgICBDTE9TRUQgPSAyLAorICAgICAg
ICB9OworCisgICAgICAgIFN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKKworICAgICAgICB2b2lk
IHNldE9ub3BlbihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9h
dHRyaWJ1dGVMaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZXMoKS5vcGVuRXZlbnQsIGV2ZW50TGlzdGVu
ZXIpOyB9CisgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ub3BlbigpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlTGlzdGVuZXJzLmdldChldmVudE5hbWVzKCkub3BlbkV2ZW50KS5nZXQoKTsgfQor
CisgICAgICAgIHZvaWQgc2V0T25tZXNzYWdlKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lcikgeyBtX2F0dHJpYnV0ZUxpc3RlbmVycy5zZXQoZXZlbnROYW1lcygpLm1lc3Nh
Z2VFdmVudCwgZXZlbnRMaXN0ZW5lcik7IH0KKyAgICAgICAgRXZlbnRMaXN0ZW5lciogb25tZXNz
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZXMo
KS5tZXNzYWdlRXZlbnQpLmdldCgpOyB9CisKKyAgICAgICAgdm9pZCBzZXRPbmVycm9yKFBhc3NS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcikgeyBtX2F0dHJpYnV0ZUxpc3RlbmVy
cy5zZXQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIGV2ZW50TGlzdGVuZXIpOyB9CisgICAgICAg
IEV2ZW50TGlzdGVuZXIqIG9uZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZUxpc3Rl
bmVycy5nZXQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpLmdldCgpOyB9CisKKyAgICAgICAgdm9p
ZCBjbG9zZSgpOworCisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RXZlbnRTb3VyY2U+OjpyZWY7
CisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8RXZlbnRTb3VyY2U+OjpkZXJlZjsKKworICAgICAg
ICB2aXJ0dWFsIEV2ZW50U291cmNlKiB0b0V2ZW50U291cmNlKCkgeyByZXR1cm4gdGhpczsgfQor
ICAgICAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdDsKKworICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gPiBMaXN0ZW5lclZlY3RvcjsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0
cmluZywgTGlzdGVuZXJWZWN0b3I+IEV2ZW50TGlzdGVuZXJzTWFwOworCisgICAgICAgIHZpcnR1
YWwgdm9pZCBhZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+LCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lciosIGJvb2wgdXNlQ2FwdHVyZSk7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7CisgICAg
ICAgIEV2ZW50TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRM
aXN0ZW5lcnM7IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgRXZlbnRTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKworICAgICAgICB2aXJ0dWFs
IHZvaWQgcmVmRXZlbnRUYXJnZXQoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
ZXJlZkV2ZW50VGFyZ2V0KCkgeyBkZXJlZigpOyB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
Zyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVy
cm9yKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWxSZWRpcmVjdENoZWNrKCk7CisKKyAg
ICAgICAgdm9pZCBjb25uZWN0KCk7CisgICAgICAgIHZvaWQgZW5kUmVxdWVzdCgpOworICAgICAg
ICB2b2lkIHNjaGVkdWxlUmVjb25uZWN0KCk7CisgICAgICAgIHZvaWQgcmVjb25uZWN0VGltZXJG
aXJlZChUaW1lcjxFdmVudFNvdXJjZT4qKTsKKyAgICAgICAgdm9pZCBwYXJzZUV2ZW50U3RyZWFt
KCk7CisgICAgICAgIHZvaWQgcGFyc2VFdmVudFN0cmVhbUxpbmUodW5zaWduZWQgaW50IHBvcywg
aW50IGZpZWxkTGVuZ3RoLCBpbnQgbGluZUxlbmd0aCk7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hH
ZW5lcmljRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKKyAgICAgICAgdm9pZCBkaXNw
YXRjaE1lc3NhZ2VFdmVudCgpOworCisgICAgICAgIEtVUkwgbV91cmw7CisgICAgICAgIFN0YXRl
IG1fc3RhdGU7CisKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxFdmVudExp
c3RlbmVyPiA+IG1fYXR0cmlidXRlTGlzdGVuZXJzOworICAgICAgICBFdmVudExpc3RlbmVyc01h
cCBtX2V2ZW50TGlzdGVuZXJzOworCisgICAgICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBtX2RlY29kZXI7CisgICAgICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsK
KyAgICAgICAgVGltZXI8RXZlbnRTb3VyY2U+IG1fcmVjb25uZWN0VGltZXI7CisgICAgICAgIFZl
Y3RvcjxVQ2hhcj4gbV9yZWNlaXZlQnVmOworICAgICAgICBib29sIG1fZmFpbFNpbGVudGx5Owor
ICAgICAgICBib29sIG1fcmVxdWVzdEluRmxpZ2h0OworCisgICAgICAgIFN0cmluZyBtX2V2ZW50
TmFtZTsKKyAgICAgICAgVmVjdG9yPFVDaGFyPiBtX2RhdGE7CisgICAgICAgIFN0cmluZyBtX2xh
c3RFdmVudElkOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9yZWNvbm5lY3REZWxheTsK
KyAgICAgICAgU3RyaW5nIG1fb3JpZ2luOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKKworI2VuZGlmIC8vIEV2ZW50U291
cmNlX2gKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFn
ZS9FdmVudFNvdXJjZS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
ICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
bW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD1F
VkVOVFNPVVJDRSwKKyAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9uLAorICAgICAgICBOb1N0YXRp
Y1RhYmxlcworICAgIF0gRXZlbnRTb3VyY2UgeworCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBET01TdHJpbmcgVVJMOworCisgICAgICAgIC8vIHJlYWR5IHN0YXRlCisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IENPTk5FQ1RJTkcgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBPUEVOID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU0VEID0gMjsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHJlYWR5U3RhdGU7CisK
KyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBv
bm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVyIG9ubWVzc2FnZTsKKyAgICAg
ICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAgICAgICAgdm9pZCBjbG9zZSgp
OworCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQorICAgICAgICBbQ3VzdG9tXSB2
b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gdXNlQ2FwdHVyZSk7Cisg
ICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5lcihpbiBET01TdHJpbmcgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlz
dGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQo
aW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50RXhjZXB0aW9uKTsKKworICAg
IH07Cit9CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCShyZXZpc2lvbiA0NjgwNCkK
KysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNiArNzcsOSBAQCBtb2R1bGUgdGhyZWFkcyB7CiAjaWYgRU5BQkxFX0NIQU5ORUxfTUVTU0FH
SU5HCiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBNZXNzYWdlQ2hhbm5lbENv
bnN0cnVjdG9yIE1lc3NhZ2VDaGFubmVsOwogI2VuZGlmCisjaWYgRU5BQkxFX0VWRU5UU09VUkNF
CisgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBFdmVudFNvdXJjZUNvbnN0cnVj
dG9yIEV2ZW50U291cmNlOworI2VuZGlmCiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0
dGVyXSBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yIFhNTEh0dHBSZXF1ZXN0OwogICAgIH07CiAK
SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQ2ODA0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMDUgIEFkYW0gQmVyZ2t2aXN0ICA8
YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEV2ZW50U291cmNlIHRvIHRoZSBidWlsZCBzY3Jp
cHQgKGRlZmF1bHQgb24pLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ5OTcKKworICAgICAgICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OgorCiAyMDA5
LTA4LTA1ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KSW5kZXg6IFdlYktpdFRvb2xz
L1NjcmlwdHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMv
YnVpbGQtd2Via2l0CShyZXZpc2lvbiA0NjgwNCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvYnVp
bGQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG15ICRtaW5pbWFsID0g
MDsKIG15ICRtYWtlQXJnczsKIAogbXkgKCR0aHJlZURSZW5kZXJpbmdTdXBwb3J0LCAkY2hhbm5l
bE1lc3NhZ2luZ1N1cHBvcnQsICRkYXRhYmFzZVN1cHBvcnQsICRkYXRhZ3JpZFN1cHBvcnQsICRk
b21TdG9yYWdlU3VwcG9ydCwKLSAgICAkZmlsdGVyc1N1cHBvcnQsICRnZW9sb2NhdGlvblN1cHBv
cnQsICRnbm9tZUtleXJpbmdTdXBwb3J0LCAkaWNvbkRhdGFiYXNlU3VwcG9ydCwKKyAgICAkZXZl
bnRzb3VyY2VTdXBwb3J0LCAkZmlsdGVyc1N1cHBvcnQsICRnZW9sb2NhdGlvblN1cHBvcnQsICRn
bm9tZUtleXJpbmdTdXBwb3J0LCAkaWNvbkRhdGFiYXNlU3VwcG9ydCwKICAgICAkamF2YVNjcmlw
dERlYnVnZ2VyU3VwcG9ydCwgJG9mZmxpbmVXZWJBcHBsaWNhdGlvblN1cHBvcnQsICRydWJ5U3Vw
cG9ydCwgJHNoYXJlZFdvcmtlcnNTdXBwb3J0LCAKICAgICAkc3ZnU3VwcG9ydCwgJHN2Z0FuaW1h
dGlvblN1cHBvcnQsICRzdmdBc0ltYWdlU3VwcG9ydCwgJHN2Z0RPTU9iakNCaW5kaW5nc1N1cHBv
cnQsICRzdmdGb250c1N1cHBvcnQsCiAgICAgJHN2Z0ZvcmVpZ25PYmplY3RTdXBwb3J0LCAkc3Zn
VXNlU3VwcG9ydCwgJHZpZGVvU3VwcG9ydCwgJHdlYlNvY2tldHNTdXBwb3J0LCAkd21sU3VwcG9y
dCwgJHdvcmtlcnNTdXBwb3J0LApAQCAtNzEsNiArNzEsOSBAQCBteSBAZmVhdHVyZXMgPSAoCiAg
ICAgeyBvcHRpb24gPT4gImRvbS1zdG9yYWdlIiwgZGVzYyA9PiAiVG9nZ2xlIERPTSBTdG9yYWdl
IFN1cHBvcnQiLAogICAgICAgZGVmaW5lID0+ICJFTkFCTEVfRE9NX1NUT1JBR0UiLCBkZWZhdWx0
ID0+IDEsIHZhbHVlID0+IFwkZG9tU3RvcmFnZVN1cHBvcnQgfSwKIAorICAgIHsgb3B0aW9uID0+
ICJldmVudHNvdXJjZSIsIGRlc2MgPT4gIlRvZ2dsZSBzZXJ2ZXItc2VudCBldmVudHMgc3VwcG9y
dCIsCisgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9FVkVOVFNPVVJDRSIsIGRlZmF1bHQgPT4gMSwg
dmFsdWUgPT4gXCRldmVudHNvdXJjZVN1cHBvcnQgfSwKKwogICAgIHsgb3B0aW9uID0+ICJmaWx0
ZXJzIiwgZGVzYyA9PiAiVG9nZ2xlIEZpbHRlcnMgc3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4g
IkVOQUJMRV9GSUxURVJTIiwgZGVmYXVsdCA9PiAwLCB2YWx1ZSA9PiBcJGZpbHRlcnNTdXBwb3J0
IH0sCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2ODA0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDktMDgtMDUgIEFkYW0gQmVyZ2t2
aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciBFdmVudFNvdXJjZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk3CisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50c291cmNlOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50c291cmNl
L2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25z
dHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzb3VyY2Uv
ZXZlbnRzb3VyY2UtY29uc3RydWN0b3IuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9ldmVudHNvdXJjZTogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9l
dmVudHNvdXJjZS1iYWQtbWltZS10eXBlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2Ut
ZXZlbnQtc3RyZWFtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9l
dmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0uaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50
c291cmNlLXJlY29ubmVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50
c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNv
ZGUtc3RhdGVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2Uv
cmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291
cmNlcy9iYWQtbWltZS10eXBlLmFzaXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZl
bnRzb3VyY2UvcmVzb3VyY2VzL2V2ZW50LXN0cmVhbS5waHA6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3JlY29ubmVjdC5waHA6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJl
YW0uYXNpczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJj
ZXMvc3RhdHVzLWNvZGVzLnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS93b3JrZXJzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dv
cmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2Vz
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3Vy
Y2VzL3NpbXBsZS13b3JrZXIuanM6IEFkZGVkLgorICAgICAgICAoZXMub25tZXNzYWdlKToKKyAg
ICAgICAgKGVzLm9uZXJyb3IpOgorCiAyMDA5LTA4LTA0ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2Uv
ZXZlbnRzb3VyY2UtYXR0cmlidXRlLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1s
aXN0ZW5lcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKK1Rlc3Qg
RXZlbnRTb3VyY2UgYXR0cmlidXRlIGxpc3RlbmVyIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmlu
dCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuCisKK1BBU1M6IGF0
dHJpYnV0ZSBsaXN0ZW5lcnMgYXJlIGluaXRpYWxseSBudWxsCitQQVNTOiBzZXR0aW5nIGFuZCBn
ZXR0aW5nIGF0dHJpYnV0ZSBsaXN0ZW5lciB3b3JrcworUEFTUzogcmVzZXR0aW5nIGF0dHJpYnV0
ZSBsaXN0ZW5lciB3b3JrcworUEFTUzogZGlzcGF0Y2hpbmcgZXZlbnQgb24gYW4gRXZlbnRTb3Vy
Y2UgdHJpZ2dlcnMgYXR0cmlidXRlIGxpc3RlbmVyCitET05FCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYXR0cmlidXRlLWxpc3RlbmVycy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYXR0
cmlidXRlLWxpc3RlbmVycy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTMgQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50U291cmNl
IGF0dHJpYnV0ZSBsaXN0ZW5lciBmdW5jdGlvbmFsaXR5LiBTaG91bGQgcHJpbnQgYSBzZXJpZXMg
b2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBET05FLjwvcD4KKzxkaXYgaWQ9InJlc3VsdCI+
PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOworfQorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
K30KKwordmFyIGVzID0gbmV3IEV2ZW50U291cmNlKCJldmVudHNvdXJjZSIpOworCitpZiAoZXMu
b25vcGVuID09IG51bGwgJiYgZXMub25tZXNzYWdlID09IG51bGwgJiYgZXMub25lcnJvciA9PSBu
dWxsKQorICAgIGxvZygiUEFTUzogYXR0cmlidXRlIGxpc3RlbmVycyBhcmUgaW5pdGlhbGx5IG51
bGwiKTsKK2Vsc2UKKyAgICBsb2coIkZBSUw6IGF0dHJpYnV0ZSBsaXN0ZW5lcnMgYXJlIG5vdCBu
dWxsIGluaXRpYWxseSIpOworCit2YXIgYSA9IGZ1bmN0aW9uICgpIHt9OworZXMub25vcGVuID0g
YTsKK2lmIChlcy5vbm9wZW4gPT0gYSkKKyAgICBsb2coIlBBU1M6IHNldHRpbmcgYW5kIGdldHRp
bmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtzIik7CitlbHNlCisgICAgbG9nKCJGQUlMOiBzZXR0
aW5nL2dldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIGRvZXMgbm90IHdvcmsiKTsKKwordmFyIGIg
PSBmdW5jdGlvbiAoKSB7fTsKK2VzLm9ub3BlbiA9IGI7CitpZiAoZXMub25vcGVuID09IGIpCisg
ICAgbG9nKCJQQVNTOiByZXNldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtzIik7CitlbHNl
CisgICAgbG9nKCJGQUlMOiByZXNldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIGRvZXMgbm90IHdv
cmsiKTsKKwordmFyIGZsYWcgPSBmYWxzZTsKK2VzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7
IGZsYWcgPSAoZS5kYXRhID09ICJoZWxsbyIpOyB9OwordmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0
ZUV2ZW50KCJNZXNzYWdlRXZlbnQiKTsKK2V2dC5pbml0TWVzc2FnZUV2ZW50KCJtZXNzYWdlIiwg
ZmFsc2UsIGZhbHNlLCAiaGVsbG8iLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsKK2VzLmRpc3Bh
dGNoRXZlbnQoZXZ0KTsKK2lmIChmbGFnKSB7CisgICAgbG9nKCJQQVNTOiBkaXNwYXRjaGluZyBl
dmVudCBvbiBhbiBFdmVudFNvdXJjZSB0cmlnZ2VycyBhdHRyaWJ1dGUgbGlzdGVuZXIiKTsKKyAg
ICBsb2coIkRPTkUiKTsKK30KK2Vsc2UKKyAgICBsb2coIkZBSUw6IGRpc3BhdGNoaW5nIGV2ZW50
IG9uIGFuIEV2ZW50U291cmNlIGRvZXMgbm90IHRyaWdnZXIgYXR0cmlidXRlIGxpc3RlbmVyIik7
CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtY29uc3RydWN0b3ItZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZl
bnRzb3VyY2UtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorVGVzdCBFdmVudFNvdXJjZSBjb25zdHJ1
Y3RvciBmdW5jdGlvbmFsaXR5LiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdl
cyBmb2xsb3dlZCBieSBET05FLgorCitQQVNTOiBtaXNzaW5nIGFyZ3VtZW50IHRvIEV2ZW50U291
cmNlIGNvbnN0cnVjdG9yIHJlc3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAoU3ludGF4RXJyb3I6IE5v
dCBlbm91Z2ggYXJndW1lbnRzKQorUEFTUzogcGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gdGhl
IEV2ZW50U291cmNlIGNvbnN0cnVjdG9yIHJlc3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAoRXJyb3I6
IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24gMTIpCitQQVNTOiBwYXNzaW5nIGFuIGludmFsaWQg
VVJMIHRvIHRoZSBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciByZXN1bHRlZCBpbiBhbiBleGNlcHRp
b24gKEVycm9yOiBTWU5UQVhfRVJSOiBET00gRXhjZXB0aW9uIDEyKQorRE9ORQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1j
b25zdHJ1Y3Rvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNv
dXJjZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQ1IEBACis8aHRtbD4KKzxib2R5PgorPHA+VGVzdCBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciBm
dW5jdGlvbmFsaXR5LiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xs
b3dlZCBieSBET05FLjwvcD4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVu
Y3Rpb24gbG9nKG1zZykgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5p
bm5lckhUTUwgKz0gbXNnICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordHJ5IHsKKyAgICBuZXcg
RXZlbnRTb3VyY2UoKTsKKyAgICBsb2coIkZBSUw6IG5vIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0
byBjb25zdHJ1Y3QgYW4gRXZlbnRTb3VyY2Ugd2l0aG91dCBhcmd1bWVudCIpOworfQorY2F0Y2gg
KGV4KSB7CisgICAgbG9nKCJQQVNTOiBtaXNzaW5nIGFyZ3VtZW50IHRvIEV2ZW50U291cmNlIGNv
bnN0cnVjdG9yIHJlc3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAoIiArIGV4ICsgIikiKTsKK30KKwor
dHJ5IHsKKyAgICBuZXcgRXZlbnRTb3VyY2UoIiIpOworICAgIGxvZygiRkFJTDogbm8gZXhjZXB0
aW9uIHdoZW4gcGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gdGhlIEV2ZW50U291cmNlIGNvbnN0
cnVjdG9yIik7Cit9CitjYXRjaCAoZXgpIHsKKyAgICBsb2coIlBBU1M6IHBhc3NpbmcgYW4gZW1w
dHkgc3RyaW5nIHRvIHRoZSBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciByZXN1bHRlZCBpbiBhbiBl
eGNlcHRpb24gKCIgKyBleCArICIpIik7Cit9CisKK3RyeSB7CisgICAgbmV3IEV2ZW50U291cmNl
KCJodHRwOi8vd2Vic2VydmVyOmVpZ2h0eS8iKTsKKyAgICBsb2coIkZBSUw6IG5vIGV4Y2VwdGlv
biB3aGVuIHBhc3NpbmcgYW4gaW52YWxpZCBVUkwgdG8gdGhlIEV2ZW50U291cmNlIGNvbnN0cnVj
dG9yIik7Cit9CitjYXRjaCAoZXgpIHsKKyAgICBsb2coIlBBU1M6IHBhc3NpbmcgYW4gaW52YWxp
ZCBVUkwgdG8gdGhlIEV2ZW50U291cmNlIGNvbnN0cnVjdG9yIHJlc3VsdGVkIGluIGFuIGV4Y2Vw
dGlvbiAoIiArIGV4ICsgIikiKTsKKyAgICBsb2coIkRPTkUiKTsKK30KKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50
c291cmNlLWJhZC1taW1lLXR5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUZXN0IEV2ZW50U291cmNl
IHdpdGggYW4gZXZlbnQtc3RyZWFtIHdpdGggaW5jb3JyZWN0IG1pbWUtdHlwZS4KKworUEFTUwor
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLWJh
ZC1taW1lLXR5cGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2
ZW50c291cmNlL2V2ZW50c291cmNlLWJhZC1taW1lLXR5cGUuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUt
dHlwZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACis8aHRtbD4KKzxib2R5Pgor
PHA+VGVzdCBFdmVudFNvdXJjZSB3aXRoIGFuIGV2ZW50LXN0cmVhbSB3aXRoIGluY29ycmVjdCBt
aW1lLXR5cGUuPC9wPgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlv
biBsb2cobXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVy
SFRNTCArPSBtc2cgKyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgZXMgPSBuZXcgRXZlbnRT
b3VyY2UoInJlc291cmNlcy9iYWQtbWltZS10eXBlLmFzaXMiKTsKKworZXMub25vcGVuID0gZnVu
Y3Rpb24gKGV2dCkgeworICAgIGxvZygiRkFJTDogZ290IHVuZXhwZWN0ZWQgb3BlbiBldmVudCIp
OworICAgIGVuZCgpOworfTsKKworZXMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAg
IGxvZygiRkFJTDogZ290IHVuZXhwZWN0ZWQgbWVzc2FnZSBldmVudCIpOworICAgIGVuZCgpOwor
fTsKKworZXMub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICBpZiAoZXMucmVhZHlTdGF0ZSA9
PSBlcy5DTE9TRUQpCisgICAgICAgIGxvZygiUEFTUyIpOworICAgIGVsc2UKKyAgICAgICAgbG9n
KCJGQUlMOiBpbnZhbGlkIHN0YXRlIik7CisgICAgZW5kKCk7Cit9OworCitmdW5jdGlvbiBlbmQo
KSB7CisgICAgZXMuY2xvc2UoKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVu
dHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0tZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Ut
cGFyc2UtZXZlbnQtc3RyZWFtLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFt
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorVGVzdCBFdmVudFNv
dXJjZSB0ZXh0L2V2ZW50LXN0cmVhbSBwYXJzaW5nLiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2Yg
UEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBET05FLgorCitQQVNTOiBnb3Qgb3BlbiBldmVudAor
UEFTUzogcmVjZWl2ZWQgZXZlbnQgd2l0aCBkYXRhICJzaW1wbGUiCitQQVNTOiByZWNlaXZlZCBl
dmVudCB3aXRoIGRhdGEgc3Bhbm5pbmcgbXVsdGlwbGUgbGluZXMKK1BBU1M6IHJlY2VpdmVkIGV2
ZW50IGFuZCBsYXN0RXZlbnRJZCBpcyAiMSIKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0
RXZlbnRJZCBpcyBzdGlsbCAiMSIKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJ
ZCBoYXMgYmVlbiBjbGVhcmVkCitQQVNTOiBnb3Qgb3BlbiBldmVudCBmcm9tIHNlcnZlcgorUEFT
UzogcmVjZWl2ZWQgZXZlbnQgYW5kIHRoZSBldmVudCBuYW1lIGhhcyBiZWVuIHJlc2V0CitQQVNT
OiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEgdGhhdCBjb250YWlucyBhIGNvbG9uIGFuZCBhIGNh
cnJpYWdlIHJldHVybgorRE9ORQorCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50
c291cmNlL2V2ZW50c291cmNlLXBhcnNlLWV2ZW50LXN0cmVhbS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZl
bnQtc3RyZWFtLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2
ZW50c291cmNlL2V2ZW50c291cmNlLXBhcnNlLWV2ZW50LXN0cmVhbS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc0IEBACis8aHRtbD4KKzxib2R5PgorPHA+VGVzdCBFdmVudFNvdXJjZSB0
ZXh0L2V2ZW50LXN0cmVhbSBwYXJzaW5nLiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBt
ZXNzYWdlcyBmb2xsb3dlZCBieSBET05FLjwvcD4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8
c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOworfQorCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFy
IGNvdW50ID0gMDsKK3ZhciBlcyA9IG5ldyBFdmVudFNvdXJjZSgicmVzb3VyY2VzL2V2ZW50LXN0
cmVhbS5waHAiKTsKKworZXMub25vcGVuID0gZnVuY3Rpb24gKGV2dCkgeworICAgIGlmICghZXZ0
LmRhdGEpCisgICAgICAgIGxvZygiUEFTUzogZ290IG9wZW4gZXZlbnQiKTsKKyAgICBlbHNlCisg
ICAgICAgIGxvZygiUEFTUzogZ290IG9wZW4gZXZlbnQgZnJvbSBzZXJ2ZXIiKTsKK307CisKK2Vz
Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICBzd2l0Y2goY291bnQrKykgeworICAg
ICAgICBjYXNlIDA6CisgICAgICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gInNpbXBsZSIpCisgICAg
ICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEgXCJzaW1wbGVc
IiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlm
IChldnQuZGF0YSA9PSAic3Bhbm5pbmdcbm11bHRpcGxlXG5cbmxpbmVzXG4iKQorICAgICAgICAg
ICAgICAgIGxvZygiUEFTUzogcmVjZWl2ZWQgZXZlbnQgd2l0aCBkYXRhIHNwYW5uaW5nIG11bHRp
cGxlIGxpbmVzIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgaWYgKGV2dC5kYXRhID09ICJpZCBpcyAxIiAmJiBldnQubGFzdEV2ZW50SWQgPT0gIjEi
KQorICAgICAgICAgICAgICAgIGxvZygiUEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5kIGxhc3RFdmVu
dElkIGlzIFwiMVwiIik7CisgICAgICAgICAgICBicmVhaworICAgICAgICBjYXNlIDM6CisgICAg
ICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gImlkIGlzIHN0aWxsIDEiICYmIGV2dC5sYXN0RXZlbnRJ
ZCA9PSAiMSIpCisgICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCBhbmQg
bGFzdEV2ZW50SWQgaXMgc3RpbGwgXCIxXCIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gIm5vIGlkIiAmJiBldnQubGFz
dEV2ZW50SWQgPT0gIiIpCisgICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVu
dCBhbmQgbGFzdEV2ZW50SWQgaGFzIGJlZW4gY2xlYXJlZCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PSAiYSBtZXNzYWdl
IGV2ZW50IHdpdGggdGhlIG5hbWUgXCJtZXNzYWdlXCIiKQorICAgICAgICAgICAgICAgIGxvZygi
UEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5kIHRoZSBldmVudCBuYW1lIGhhcyBiZWVuIHJlc2V0Iik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgaWYgKGV2
dC5kYXRhID09ICJhIGxpbmUgZW5kaW5nIHdpdGggY3JsZlxuYSBsaW5lIHdpdGggYSA6IChjb2xv
bilcbmEgbGluZSB3aXRoIGEgXHIgKGNhcnJpYWdlIHJldHVybikiKQorICAgICAgICAgICAgICAg
IGxvZygiUEFTUzogcmVjZWl2ZWQgZXZlbnQgd2l0aCBkYXRhIHRoYXQgY29udGFpbnMgYSBjb2xv
biBhbmQgYSBjYXJyaWFnZSByZXR1cm4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgbG9nKCJGQUlMOiBnb3QgdW5leHBlY3RlZCBldmVudCIpOwor
ICAgICAgICAgICAgZXMuY2xvc2UoKTsKKyAgICB9Cit9OworCitlcy5vbmVycm9yID0gZnVuY3Rp
b24gKCkgeworICAgIGVzLmNsb3NlKCk7CisKKyAgICBpZiAoY291bnQgIT0gNykKKyAgICAgICAg
bG9nKCJGQUlMOiBnb3QgdW5leHBlY3RlZCBlcnJvciBldmVudCIpOworICAgIGVsc2UKKyAgICAg
ICAgbG9nKCJET05FIik7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9OworPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291
cmNlL2V2ZW50c291cmNlLXJlY29ubmVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExIEBACitUZXN0IEV2ZW50U291cmNlIHJlY29ubmVjdCBhZnRlciBlbmQgb2YgZXZl
bnQgc3RyZWFtLiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dl
ZCBieSBET05FLgorCitQQVNTOiBzdGF0ZSBpcyBDT05ORUNUSU5HCitQQVNTOiBzdGF0ZSBpcyBP
UEVOCitQQVNTOiBnb3QgbGFzdEV2ZW50SWQgIjc3IgorUEFTUzogc3RhdGUgaXMgQ09OTkVDVElO
RworUEFTUzogc3RhdGUgaXMgT1BFTgorUEFTUzogTGFzdC1FdmVudC1JRCBoZWFkZXIgd2FzIGNv
cnJlY3QKK1BBU1M6IHN0YXRlIGlzIENMT1NFRAorRE9ORQorCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXJlY29ubmVjdC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVj
b25uZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50
c291cmNlL2V2ZW50c291cmNlLXJlY29ubmVjdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc3IEBACis8aHRtbD4KKzxib2R5PgorPHA+VGVzdCBFdmVudFNvdXJjZSByZWNvbm5lY3QgYWZ0
ZXIgZW5kIG9mIGV2ZW50IHN0cmVhbS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVz
c2FnZXMgZm9sbG93ZWQgYnkgRE9ORS48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPHNj
cmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsKK30KKwordmFyIHN0YXRlTmFtZXMg
PSBbIkNPTk5FQ1RJTkciLCAiT1BFTiIsICJDTE9TRUQiXTsKK2ZvciAodmFyIGkgaW4gc3RhdGVO
YW1lcykKKyAgICBldmFsKCJ2YXIgIiArIHN0YXRlTmFtZXNbaV0gKyAiID0gIiArIGkpOwordmFy
IHJldHJ5VGltZW91dDsKKworZnVuY3Rpb24gY2hlY2tSZWFkeVN0YXRlKGVzLCBkZXNpcmVkU3Rh
dGUpIHsKKyAgICB2YXIgY3VyclN0YXRlID0gZXMucmVhZHlTdGF0ZTsKKyAgICBpZiAoY3VyclN0
YXRlID09IGRlc2lyZWRTdGF0ZSkKKyAgICAgICAgbG9nKCJQQVNTOiBzdGF0ZSBpcyAiICsgc3Rh
dGVOYW1lc1tkZXNpcmVkU3RhdGVdKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiRkFJTDogYmFk
IHN0YXRlICgiICsgc3RhdGVOYW1lc1tjdXJyU3RhdGVdICsgIiwgc2hvdWxkIGJlICIgKyBzdGF0
ZU5hbWVzW2Rlc2lyZWRTdGF0ZV0gKyAiKSIpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGVyckNvdW50
ID0gMDsKK3ZhciBlcyA9IG5ldyBFdmVudFNvdXJjZSgicmVzb3VyY2VzL3JlY29ubmVjdC5waHAi
KTsKKworY2hlY2tSZWFkeVN0YXRlKGVzLCBDT05ORUNUSU5HKTsKKworZXMub25vcGVuID0gZnVu
Y3Rpb24gKGV2dCkgeworICAgIGNoZWNrUmVhZHlTdGF0ZShlcywgT1BFTik7Cit9OworCitlcy5v
bm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgaWYgKCFlcnJDb3VudCkgeworICAgICAg
ICBpZiAoZXZ0Lmxhc3RFdmVudElkID09ICI3NyIpCisgICAgICAgICAgICBsb2coIlBBU1M6IGdv
dCBsYXN0RXZlbnRJZCBcIjc3XCIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nKCJG
QUlMOiB1bmV4cGVjdGVkIGxhc3RFdmVudElkIFwiIiArIGV2dC5sYXN0RXZlbnRJZCArICJcIiIp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChldnQuZGF0YSA9PSAiNzciKQorICAgICAgICAg
ICAgbG9nKCJQQVNTOiBMYXN0LUV2ZW50LUlEIGhlYWRlciB3YXMgY29ycmVjdCIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBsb2coIkZBSUw6IExhc3QtRXZlbnQtSUQgaGVhZGVyIHdhcyBp
bmNvcnJlY3QvbWlzc2luZyIpOworICAgIH0KK307CisKK2VzLm9uZXJyb3IgPSBmdW5jdGlvbiAo
KSB7CisgICAgZXJyQ291bnQrKzsKKyAgICBpZiAoZXJyQ291bnQgPCAyKSB7CisgICAgICAgIGNo
ZWNrUmVhZHlTdGF0ZShlcywgQ09OTkVDVElORyk7CisgICAgICAgIHJldHJ5VGltZW91dCA9IHNl
dFRpbWVvdXQoZW5kLCAxMDAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhclRp
bWVvdXQocmV0cnlUaW1lb3V0KTsKKyAgICByZXRyeVRpbWVvdXQgPSBudWxsOworICAgIGVuZCgp
OworfTsKKworZnVuY3Rpb24gZW5kKCkgeworICAgIGVzLmNsb3NlKCk7CisgICAgaWYgKHJldHJ5
VGltZW91dCkKKyAgICAgICAgbG9nKCJGQUlMOiBkaWQgbm90IHJlY29ubmVjdCBpbiB0aW1lIik7
CisgICAgZWxzZSB7CisgICAgICAgIGNoZWNrUmVhZHlTdGF0ZShlcywgQ0xPU0VEKTsKKyAgICAg
ICAgbG9nKCJET05FIik7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2
ZW50c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJj
ZS1zdGF0dXMtY29kZS1zdGF0ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0dXMtY29kZS1zdGF0
ZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitUZXN0IEV2ZW50
U291cmNlIHN0YXRlcyBmb3IgZGlmZmVyZW50IHN0YXR1cyBjb2Rlcy4gU2hvdWxkIHByaW50IGEg
c2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS4KKworUEFTUzogc3RhdHVz
IGNvZGUgMjAwIHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBDT05O
RUNUSU5HLCBDTE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDIwNCByZXN1bHRlZCBpbiBzdGF0ZXMg
Q09OTkVDVElORywgQ09OTkVDVElORywgQ0xPU0VECitQQVNTOiBzdGF0dXMgY29kZSAyMDUgcmVz
dWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcsIENPTk5FQ1RJTkcsIENMT1NFRAorUEFTUzogc3Rh
dHVzIGNvZGUgMjAyIHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBDT05ORUNUSU5HLCBD
TE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDMwMSByZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElO
RywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VECitQQVNTOiBzdGF0dXMgY29kZSAzMDIg
cmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENM
T1NFRAorUEFTUzogc3RhdHVzIGNvZGUgMzAzIHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5H
LCBPUEVOLCBPUEVOLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDMwNyBy
ZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xP
U0VECitQQVNTOiBzdGF0dXMgY29kZSA0MDQgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcs
IENMT1NFRCwgQ0xPU0VECitET05FCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZl
bnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0dXMt
Y29kZS1zdGF0ZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
ZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNzggQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50U291cmNl
IHN0YXRlcyBmb3IgZGlmZmVyZW50IHN0YXR1cyBjb2Rlcy4gU2hvdWxkIHByaW50IGEgc2VyaWVz
IG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS48L3A+Cis8ZGl2IGlkPSJyZXN1bHQi
PjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsKK30KKworZnVu
Y3Rpb24gYXJyYXlDb21wYXJlKGExLCBhMikgeworICAgIGlmIChhMS5sZW5ndGggIT0gYTIubGVu
Z3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhMS5s
ZW5ndGg7IGkrKykKKyAgICAgICAgaWYgKGExW2ldICE9IGEyW2ldKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit2YXIgc3RhdGVOYW1lcyA9IFsiQ09O
TkVDVElORyIsICJPUEVOIiwgIkNMT1NFRCJdOworZm9yICh2YXIgaSBpbiBzdGF0ZU5hbWVzKQor
ICAgIGV2YWwoInZhciAiICsgc3RhdGVOYW1lc1tpXSArICIgPSAiICsgaSk7CisKK3ZhciB0ZXN0
cyA9IFt7ImNvZGUiOiAyMDAsICJleHBlY3RlZFN0YXRlcyI6IFtDT05ORUNUSU5HLCBPUEVOLCBP
UEVOLCBDT05ORUNUSU5HLCBDTE9TRURdfSwKKyAgICAgICAgICAgICB7ImNvZGUiOiAyMDQsICJl
eHBlY3RlZFN0YXRlcyI6IFtDT05ORUNUSU5HLCwsIENPTk5FQ1RJTkcsIENMT1NFRF19LAorICAg
ICAgICAgICAgIHsiY29kZSI6IDIwNSwgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsLCwg
Q09OTkVDVElORywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjogMjAyLCAiZXhwZWN0
ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywsLCBDT05ORUNUSU5HLCBDTE9TRURdfSwgLy8gb3RoZXIg
Mnh4CisgICAgICAgICAgICAgeyJjb2RlIjogMzAxLCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVD
VElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJj
b2RlIjogMzAyLCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09O
TkVDVElORywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjogMzAzLCAiZXhwZWN0ZWRT
dGF0ZXMiOiBbQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VEXX0sCisg
ICAgICAgICAgICAgeyJjb2RlIjogMzA3LCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywg
T1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjog
NDA0LCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywsLCBDTE9TRUQsIENMT1NFRF19XTsg
Ly8gYW55IG90aGVyCit2YXIgY291bnQgPSAwOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
IGlmIChjb3VudCA+PSB0ZXN0cy5sZW5ndGgpIHsKKyAgICAgICAgbG9nKCJET05FIik7CisgICAg
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2YXIgc3RhdGVzID0gW107CisgICAgdmFyIGVzID0gbmV3IEV2ZW50U291cmNlKCJyZXNvdXJj
ZXMvc3RhdHVzLWNvZGVzLnBocD9zdGF0dXMtY29kZT0iICsgdGVzdHNbY291bnRdLmNvZGUpOwor
ICAgIHN0YXRlc1swXSA9IGVzLnJlYWR5U3RhdGU7CisKKyAgICBlcy5vbm9wZW4gPSBmdW5jdGlv
biAoKSB7CisgICAgICAgIHN0YXRlc1sxXSA9IGVzLnJlYWR5U3RhdGU7CisgICAgfTsKKworICAg
IGVzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICAgICAgc3RhdGVzWzJdID0gZXMu
cmVhZHlTdGF0ZTsKKyAgICB9OworCisgICAgZXMub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgc3RhdGVzWzNdID0gZXMucmVhZHlTdGF0ZTsKKyAgICAgICAgZXMuY2xvc2UoKTsKKyAg
ICAgICAgc3RhdGVzWzRdID0gZXMucmVhZHlTdGF0ZTsKKworICAgICAgICB2YXIgcmVzdWx0ID0g
YXJyYXlDb21wYXJlKHN0YXRlcywgdGVzdHNbY291bnRdLmV4cGVjdGVkU3RhdGVzKSA/ICJQQVNT
IiA6ICJGQUlMIjsKKyAgICAgICAgcmVzdWx0ICs9ICI6IHN0YXR1cyBjb2RlICIgKyB0ZXN0c1tj
b3VudF0uY29kZSArICIgcmVzdWx0ZWQgaW4gc3RhdGVzICI7CisgICAgICAgIGZvciAodmFyIGkg
aW4gc3RhdGVzKQorICAgICAgICAgICAgcmVzdWx0ICs9IChpICE9IDAgPyAiLCAiIDogIiIpICsg
c3RhdGVOYW1lc1tzdGF0ZXNbaV1dOworICAgICAgICBsb2cocmVzdWx0KTsKKworICAgICAgICBz
ZXRUaW1lb3V0KHJ1blRlc3QsIDApOworICAgICAgICBjb3VudCsrOworICAgIH07Cit9CisKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworfQorCitydW5UZXN0KCk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2JhZC1taW1lLXR5cGUu
YXNpcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jl
c291cmNlcy9iYWQtbWltZS10eXBlLmFzaXMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9iYWQtbWltZS10eXBlLmFzaXMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2JvZ3VzCisKK2RhdGE6
IHNob3VsZCBub3QgdHJpZ2dlciBhbiBldmVudApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvZXZlbnQtc3RyZWFtLnBocAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9ldmVudC1zdHJlYW0u
cGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9y
ZXNvdXJjZXMvZXZlbnQtc3RyZWFtLnBocAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAor
PD9waHAKK2hlYWRlcigiQ29udGVudC1UeXBlOiB0ZXh0L2V2ZW50LXN0cmVhbSIpOworPz4KKwor
OiBhIGNvbW1lbnQgKGlnbm9yZWQpCit0aGlzIGxpbmUgd2lsbCBiZSBpZ25vcmVkIHNpbmNlIHRo
ZXJlIGlzIG5vIGZpZWxkIGFuZCB0aGUgbGluZSBpdHNlbGYgaXMgbm90IGEgZmllbGQKK2ZpZWxk
OiBhbiB1bmtub3duIGZpZWxkIHRoYXQgd2lsbCBiZSBpZ25vcmVkCis6YW5vdGhlciBjb21tbWVu
dAorCitkYXRhIDogdGhpcyBsaW5lIHdpbGwgYmUgaWdub3JlZCBzaW5jZSB0aGVyZSBpcyBhIHNw
YWNlIGFmdGVyIGRhdGEKKworZGF0YQorZGF0YToKK2RhdGEKKzogbm8gZGlzcGF0Y2ggc2luY2Ug
ZGF0YSBidWZmZXIgaXMgZW1wdHkKKworZGF0YTogc2ltcGxlCisKK2RhdGE6IHNwYW5uaW5nCitk
YXRhOm11bHRpcGxlCitkYXRhCitkYXRhOiBsaW5lcworZGF0YQorCitpZDogMQorZGF0YTogaWQg
aXMgMQorCitkYXRhOiBpZCBpcyBzdGlsbCAxCisKK2lkCitkYXRhOiBubyBpZAorCitldmVudDog
b3BlbgorZGF0YTogYSBtZXNzYWdlIGV2ZW50IHdpdGggdGhlIG5hbWUgIm9wZW4iCisKKzw/cGhw
IGZsdXNoKCk7IGVjaG8gImRhIjsgZmx1c2goKTsgPz4KK3RhOiBhIG1lc3NhZ2UgZXZlbnQgd2l0
aCB0aGUgbmFtZSAibWVzc2FnZSIKKworPD9waHAgZWNobyAiZGF0YTogYSBsaW5lIGVuZGluZyB3
aXRoIGNybGZcclxuIjsgPz4KK2RhdGE6IGEgbGluZSB3aXRoIGEgOiAoY29sb24pCis8P3BocCBl
Y2hvICJkYXRhOiBhIGxpbmUgd2l0aCBhIFxyIChjYXJyaWFnZSByZXR1cm4pXG4iOyA/PgorCity
ZXRyeTogMTAwMDAKKzogcmVjb25uZWN0aW9uIHRpbWUgc2V0IHRvIDEwIHNlY29uZHMKKworcmV0
cnk6IG9uZSB0aG91c2FuZAorOiBpZ25vcmVkIGludmFsaWQgcmVjb25uZWN0aW9uIHRpbWUgdmFs
dWUKKworcmV0cnkKKzogcmVzZXQgdG8gdWEgZGVmYXVsdAorCkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9yZWNvbm5lY3QucGhwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3JlY29ubmVj
dC5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNl
L3Jlc291cmNlcy9yZWNvbm5lY3QucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8
P3BocAoraGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvZXZlbnQtc3RyZWFtIik7CiskbGFzdEV2
ZW50SWQgPSAkX1NFUlZFUlsnSFRUUF9MQVNUX0VWRU5UX0lEJ107CisKK2lmICgkbGFzdEV2ZW50
SWQpCisgICAgZWNobyAiZGF0YTogJGxhc3RFdmVudElkXG5cbiI7CitlbHNlIHsKKyAgICBlY2hv
ICJpZDogNzdcbiI7CisgICAgZWNobyAicmV0cnk6IDMwMFxuIjsKKyAgICBlY2hvICJkYXRhOiBo
ZWxsb1xuXG4iOworfQorPz4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3Vy
Y2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9zaW1wbGUtZXZlbnQtc3Ry
ZWFtLmFzaXMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291
cmNlL3Jlc291cmNlcy9zaW1wbGUtZXZlbnQtc3RyZWFtLmFzaXMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2V2ZW50LXN0cmVhbQorCitkYXRhOiBoZWxs
bwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvc3Rh
dHVzLWNvZGVzLnBocAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50
c291cmNlL3Jlc291cmNlcy9zdGF0dXMtY29kZXMucGhwCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvc3RhdHVzLWNvZGVzLnBocAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorPD9waHAKKyRzdGF0dXNfY29kZSA9ICRfR0VU
WydzdGF0dXMtY29kZSddOworaGVhZGVyKCJIVFRQLzEuMSAkc3RhdHVzX2NvZGUgT0siKTsKKwor
c3dpdGNoICgkc3RhdHVzX2NvZGUpIHsKK2Nhc2UgMjAwOgorICAgIGhlYWRlcigiQ29udGVudC1U
eXBlOiB0ZXh0L2V2ZW50LXN0cmVhbSIpOworICAgIGVjaG8gImRhdGE6IGhlbGxvXG5cbiI7Cisg
ICAgYnJlYWs7CitjYXNlIDMwMToKK2Nhc2UgMzAyOgorY2FzZSAzMDM6CitjYXNlIDMwNzoKKyAg
ICAkdXJpID0gcnRyaW0oZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSksICcvXFwnKSAuICIv
c2ltcGxlLWV2ZW50LXN0cmVhbS5hc2lzIjsKKyAgICBoZWFkZXIoIkxvY2F0aW9uOiBodHRwOi8v
IiAuICRfU0VSVkVSWydIVFRQX0hPU1QnXSAuICR1cmkpOworICAgIGJyZWFrOworfQorPz4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9ldmVudHNvdXJj
ZS1zaW1wbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9ldmVudHNvdXJjZS1zaW1wbGUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJz
L2V2ZW50c291cmNlLXNpbXBsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NCBAQAorVGVzdCBFdmVudFNvdXJjZSBpbiBhIHdvcmtlci4KKworUEFTUworCkluZGV4OiBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93
b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8aHRtbD4KKzxib2R5PgorPHA+VGVzdCBF
dmVudFNvdXJjZSBpbiBhIHdvcmtlci48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPHNj
cmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3ZhciB3
b3JrZXIgPSBuZXcgV29ya2VyKCJyZXNvdXJjZXMvc2ltcGxlLXdvcmtlci5qcyIpOworCit3b3Jr
ZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIGlmIChldnQuZGF0YSA9PSAiaGVs
bG8iKQorICAgICAgICBsb2coIlBBU1MiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiRkFJTCIp
OworICAgIGVuZCgpOworfQorCit3b3JrZXIub25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICBs
b2coIkZBSUwiKTsKKyAgICBlbmQoKTsKK30KKworZnVuY3Rpb24gZW5kKCkgeworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBs
ZS13b3JrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS93b3JrZXJzL3Jlc291cmNlcy9zaW1wbGUtd29ya2VyLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL3Jlc291cmNlcy9zaW1w
bGUtd29ya2VyLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACit2YXIgZXMgPSBuZXcg
RXZlbnRTb3VyY2UoIi4uLy4uL3Jlc291cmNlcy9zaW1wbGUtZXZlbnQtc3RyZWFtLmFzaXMiKTsK
KworZXMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIHBvc3RNZXNzYWdlKGV2dC5k
YXRhKTsKKyAgICBlcy5jbG9zZSgpOworfQorCitlcy5vbmVycm9yID0gZnVuY3Rpb24gKCkgewor
ICAgIHBvc3RNZXNzYWdlKCJlcnJvciIpOworICAgIGVzLmNsb3NlKCk7Cit9CisK
</data>
<flag name="review"
          id="18302"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34665</attachid>
            <date>2009-08-12 09:07:03 -0700</date>
            <delta_ts>2009-08-12 15:29:41 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>eventsource_r47105.patch</filename>
            <type>text/plain</type>
            <size>89780</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MTA1KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgtMTIgIEFkYW0gQmVy
Z2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEVOQUJMRV9FVkVOVFNPVVJDRSBm
bGFnLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5
OTcKKworICAgICAgICAqIENvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOgor
CiAyMDA5LTA4LTEyICBCYWxhenMgS2VsZW1lbiAgPGtlbGVtZW4uYmFsYXpzLjNAc3R1ZC51LXN6
ZWdlZC5odT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDogSmF2
YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcJKHJldmlzaW9uIDQ3MTA1KQorKysgSmF2YVNjcmlwdENvcmUvQ29uZmlndXJhdGlvbnMv
RmVhdHVyZURlZmluZXMueGNjb25maWcJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
IEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsKIEVOQUJMRV9EQVRBR1JJRCA9IEVO
QUJMRV9EQVRBR1JJRDsKIEVOQUJMRV9ET01fU1RPUkFHRSA9IEVOQUJMRV9ET01fU1RPUkFHRTsK
K0VOQUJMRV9FVkVOVFNPVVJDRSA9IEVOQUJMRV9FVkVOVFNPVVJDRTsKIEVOQUJMRV9GSUxURVJT
ID0gOwogRU5BQkxFX0dFT0xPQ0FUSU9OID0gOwogRU5BQkxFX0lDT05EQVRBQkFTRSA9IEVOQUJM
RV9JQ09OREFUQUJBU0U7CkBAIC01OCw0ICs1OSw0IEBACiBFTkFCTEVfWFBBVEggPSBFTkFCTEVf
WFBBVEg7CiBFTkFCTEVfWFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAk
KEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJM
RV9EQVRBQkFTRSkgJChFTkFCTEVfREFUQUdSSUQpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVO
QUJMRV9GSUxURVJTKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNF
KSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAk
KEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkpICQoRU5BQkxF
X1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQo
RU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVO
QUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZH
X1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwp
ICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRV
UkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNT
QUdJTkcpICQoRU5BQkxFX0RBVEFCQVNFKSAkKEVOQUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfRE9N
X1NUT1JBR0UpICQoRU5BQkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJM
RV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBU
X0RFQlVHR0VSKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9B
UFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVO
QUJMRV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkg
JChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5B
QkxFX1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8p
ICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQo
RU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCShyZXZpc2lv
biA0NzEwNSkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Myw2ICs3Myw3IEBACiAjaW5jbHVkZSAiSlNFcnJvckV2ZW50LmNwcCIKICNpbmNsdWRlICJK
U0V2ZW50LmNwcCIKICNpbmNsdWRlICJKU0V2ZW50RXhjZXB0aW9uLmNwcCIKKyNpbmNsdWRlICJK
U0V2ZW50U291cmNlLmNwcCIKICNpbmNsdWRlICJKU0ZpbGUuY3BwIgogI2luY2x1ZGUgIkpTRmls
ZUxpc3QuY3BwIgogI2luY2x1ZGUgIkpTSGlzdG9yeS5jcHAiCkluZGV4OiBXZWJDb3JlL2RvbS9F
dmVudE5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCShyZXZp
c2lvbiA0NzEwNSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNzMsNiArNzMsNyBAQAogICAgIG1hY3JvKG9ic29sZXRlKSBcCiAgICAgbWFjcm8ob2ZmbGlu
ZSkgXAogICAgIG1hY3JvKG9ubGluZSkgXAorICAgIG1hY3JvKG9wZW4pIFwKICAgICBtYWNybyhv
dmVyZmxvd2NoYW5nZWQpIFwKICAgICBtYWNybyhwYXN0ZSkgXAogICAgIG1hY3JvKHJlYWR5c3Rh
dGVjaGFuZ2UpIFwKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gNDcxMDUpCisrKyBXZWJDb3Jl
L2RvbS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAgICAg
Y2xhc3MgRE9NV2luZG93OwogICAgIGNsYXNzIEV2ZW50OwogICAgIGNsYXNzIEV2ZW50TGlzdGVu
ZXI7CisgICAgY2xhc3MgRXZlbnRTb3VyY2U7CiAgICAgY2xhc3MgTWVzc2FnZVBvcnQ7CiAgICAg
Y2xhc3MgTm9kZTsKICAgICBjbGFzcyBOb3RpZmljYXRpb247CkBAIC01OCw2ICs1OSw3IEBACiAK
ICAgICBjbGFzcyBFdmVudFRhcmdldCB7CiAgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIEV2
ZW50U291cmNlKiB0b0V2ZW50U291cmNlKCk7CiAgICAgICAgIHZpcnR1YWwgTWVzc2FnZVBvcnQq
IHRvTWVzc2FnZVBvcnQoKTsKICAgICAgICAgdmlydHVhbCBOb2RlKiB0b05vZGUoKTsKICAgICAg
ICAgdmlydHVhbCBET01XaW5kb3cqIHRvRE9NV2luZG93KCk7CkluZGV4OiBXZWJDb3JlL2RvbS9F
dmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3Bw
CShyZXZpc2lvbiA0NzEwNSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsMTEgQEAKIHsKIH0KIAorRXZlbnRTb3VyY2UqIEV2ZW50VGFy
Z2V0Ojp0b0V2ZW50U291cmNlKCkKK3sKKyAgICByZXR1cm4gMDsKK30KKwogTm9kZSogRXZlbnRU
YXJnZXQ6OnRvTm9kZSgpCiB7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDQ3MTA1KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw3IEBA
CiAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0uKTogREVG
SU5FUyArPSBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xCiAhY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX0RBVEFCQVNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVRBQkFTRT0xCishY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX0VWRU5UU09VUkNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9FVkVO
VFNPVVJDRT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FU
SU9OUz0uKTogREVGSU5FUyArPSBFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TPTEKICFj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NUT1JBR0U9Lik6IERFRklORVMgKz0gRU5BQkxF
X0RPTV9TVE9SQUdFPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSUNPTkRBVEFCQVNFPS4p
OiBERUZJTkVTICs9IEVOQUJMRV9JQ09OREFUQUJBU0U9MQpAQCAtNDMxLDYgKzQzMiw3IEBACiAg
ICAgcGFnZS9Db29yZGluYXRlcy5pZGwgXAogICAgIHBhZ2UvRE9NU2VsZWN0aW9uLmlkbCBcCiAg
ICAgcGFnZS9ET01XaW5kb3cuaWRsIFwKKyAgICBwYWdlL0V2ZW50U291cmNlLmlkbCBcCiAgICAg
cGFnZS9HZW9sb2NhdGlvbi5pZGwgXAogICAgIHBhZ2UvR2VvcG9zaXRpb24uaWRsIFwKICAgICBw
YWdlL0hpc3RvcnkuaWRsIFwKQEAgLTY0Niw2ICs2NDgsOCBAQAogICAgIGJpbmRpbmdzL2pzL0pT
RE9NV2luZG93U2hlbGwuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3Bw
IFwKICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50Q3VzdG9tLmNwcCBcCisgICAgYmluZGluZ3MvanMv
SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCBcCisgICAgYmluZGluZ3MvanMvSlNFdmVudFNv
dXJjZUN1c3RvbS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwIFwKICAg
ICBiaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMv
SlNIVE1MQWxsQ29sbGVjdGlvbi5jcHAgXApAQCAtMTA3Nyw2ICsxMDgxLDcgQEAKICAgICBwYWdl
L05hdmlnYXRvckJhc2UuY3BwIFwKICAgICBwYWdlL0RyYWdDb250cm9sbGVyLmNwcCBcCiAgICAg
cGFnZS9FdmVudEhhbmRsZXIuY3BwIFwKKyAgICBwYWdlL0V2ZW50U291cmNlLmNwcCBcCiAgICAg
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwIFwKICAgICBwYWdlL0ZyYW1lLmNwcCBcCiAgICAgcGFn
ZS9GcmFtZVRyZWUuY3BwIFwKQEAgLTEzMjQsNiArMTMyOSw3IEBACiAgICAgYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uaCBcCiAgICAgYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5o
IFwKICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaCBcCisgICAgYmluZGluZ3MvanMv
SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmggXAogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJn
ZXQuaCBcCiAgICAgYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmggXAogICAgIGJpbmRpbmdz
L2pzL0pTSFRNTEFsbENvbGxlY3Rpb24uaCBcCkBAIC0xNzQ5LDYgKzE3NTUsNyBAQAogICAgIHBh
Z2UvRE9NV2luZG93LmggXAogICAgIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuaCBcCiAgICAgcGFnZS9F
dmVudEhhbmRsZXIuaCBcCisgICAgcGFnZS9FdmVudFNvdXJjZS5oIFwKICAgICBwYWdlL0ZvY3Vz
Q29udHJvbGxlci5oIFwKICAgICBwYWdlL0ZyYW1lLmggXAogICAgIHBhZ2UvRnJhbWVUcmVlLmgg
XApAQCAtMjQyNyw2ICsyNDM0LDEwIEBACiAgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQg
Kz0gRU5BQkxFX0RBVEFHUklEPTEKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX0VWRU5U
U09VUkNFPTEpIHsKKyAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfRVZF
TlRTT1VSQ0U9MQorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1FMSVRFPTEpIHsKICAg
ICAhc3lzdGVtLXNxbGl0ZTpleGlzdHMoICQke1NRTElURTNTUkNESVJ9L3NxbGl0ZTMuYyApIHsK
ICAgICAgICAgICAgICMgQnVpbGQgc3FsaXRlMyBpbnRvIFdlYkNvcmUgZnJvbSBzb3VyY2UKSW5k
ZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA0NzEwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsOTAgQEAKKzIwMDktMDgtMTIgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RA
ZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFdmVudFNvdXJjZSBvYmplY3QgdGhh
dCBlbmFibGVzCisgICAgICAgIHNlcnZlci1zZW50IGV2ZW50cyBmcm9tIEhUTUw1LgorICAgICAg
ICBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9ldmVudHNvdXJjZS8KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk3IAorCisgICAgICAgIFRlc3RzOiBm
YXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMuaHRtbAorICAg
ICAgICAgICAgICAgZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci5odG1s
CisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLWJhZC1t
aW1lLXR5cGUuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVu
dHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0uaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0
cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QuaHRtbAorICAgICAgICAgICAgICAg
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0dXMtY29kZS1zdGF0ZXMuaHRt
bAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291
cmNlLXNpbXBsZS5odG1sCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5l
cy54Y2NvbmZpZzoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5jcHA6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBX
ZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNET01X
aW5kb3c6OmV2ZW50U291cmNlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNl
Q29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChX
ZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RFdmVudFNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6Y2xhc3NJbmZvKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlOjptYXJrQ2hpbGRyZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6SlNFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3Jl
OjpKU0V2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9FdmVudFRhcmdldCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6
ZXZlbnRTb3VyY2UpOgorICAgICAgICAqIGRvbS9FdmVudE5hbWVzLmg6CisgICAgICAgICogZG9t
L0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Ojp0b0V2ZW50
U291cmNlKToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5pZGw6CisgICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50U291cmNlOjp+RXZlbnRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRT
b3VyY2U6OmNvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmVuZFJlcXVl
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNjaGVkdWxlUmVjb25uZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpyZWNvbm5lY3RUaW1lckZpcmVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRTb3VyY2U6OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjphZGRFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50U291cmNlOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRTb3VyY2U6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
U291cmNlOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNl
OjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRGYWlsUmVkaXJl
Y3RDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVh
bSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFyc2VFdmVudFN0cmVhbUxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRpc3BhdGNoR2VuZXJpY0V2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaE1lc3NhZ2VFdmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c3RvcCk6CisgICAgICAgICogcGFnZS9FdmVu
dFNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6Oik6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFNvdXJjZTo6c2V0T25vcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpv
bm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNldE9ubWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6b25tZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50U291cmNlOjpzZXRPbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291
cmNlOjpvbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjp0b0V2ZW50U291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpldmVudExpc3RlbmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRlcmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAqIHBhZ2Uv
RXZlbnRTb3VyY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQu
aWRsOgorCiAyMDA5LTA4LTEyICBBcml5YSBIaWRheWF0ICA8YXJpeWEuaGlkYXlhdEBub2tpYS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVyLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0NzEwNSkKKysrIFdlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NzksNiAr
Mjc3OSw1NCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2Vz
XEpTRXZlbnRTb3VyY2UuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJ
CQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJ
CQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJ
CS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0K
KwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVl
Ig0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0K
KwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0
aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiINCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
CisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMy
Ig0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0K
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9IiQo
V2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNFdmVu
dFNvdXJjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZl
UGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNl
c1xKU0ZpbGUuY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KQEAgLTE2ODEz
LDYgKzE2ODYxLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBhZ2VcRXZlbnRTb3VyY2UuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxFdmVudFNvdXJjZS5oIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxG
b2N1c0NvbnRyb2xsZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTI4Nzc1LDYgKzI4
ODMxLDE4IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwIg0KKwkJ
CQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJp
bmRpbmdzXGpzXEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oIg0KKwkJCQkJPg0KKwkJCQk8L0Zp
bGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRXZl
bnRTb3VyY2VDdXN0b20uY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQog
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRXZlbnRUYXJnZXQuY3BwIg0KIAkJ
CQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDQ3MTA1KQor
KysgV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw2ICs0
NDQsMTAgQEAKICAgICAgICAgYXR0cmlidXRlIFJhbmdlQ29uc3RydWN0b3IgUmFuZ2U7CiAgICAg
ICAgIGF0dHJpYnV0ZSBSYW5nZUV4Y2VwdGlvbkNvbnN0cnVjdG9yIFJhbmdlRXhjZXB0aW9uOwog
CisjaWYgRU5BQkxFX0VWRU5UU09VUkNFCisgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0
dGVyXSBFdmVudFNvdXJjZUNvbnN0cnVjdG9yIEV2ZW50U291cmNlOyAvLyBVc2FibGUgd2l0aCBu
ZXcgdGhlIG9wZXJhdG9yCisjZW5kaWYKKwogICAgICAgICAvLyBNb3ppbGxhIGhhcyBhIHNlcGFy
YXRlIFhNTERvY3VtZW50IG9iamVjdCBmb3IgWE1MIGRvY3VtZW50cy4gCiAgICAgICAgIC8vIFdl
IGp1c3QgdXNlIERvY3VtZW50IGZvciB0aGlzLgogICAgICAgICBhdHRyaWJ1dGUgRG9jdW1lbnRD
b25zdHJ1Y3RvciBYTUxEb2N1bWVudDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0V2ZW50U291cmNlLmlkbAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24gQUIKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworbW9kdWxlIHdpbmRvdyB7CisKKyAgICBpbnRlcmZhY2UgWworICAg
ICAgICBDb25kaXRpb25hbD1FVkVOVFNPVVJDRSwKKyAgICAgICAgQ3VzdG9tTWFya0Z1bmN0aW9u
LAorICAgICAgICBOb1N0YXRpY1RhYmxlcworICAgIF0gRXZlbnRTb3VyY2UgeworCisgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgVVJMOworCisgICAgICAgIC8vIHJlYWR5IHN0
YXRlCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENPTk5FQ1RJTkcgPSAwOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBPUEVOID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgQ0xPU0VEID0gMjsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNo
b3J0IHJlYWR5U3RhdGU7CisKKyAgICAgICAgLy8gbmV0d29ya2luZworICAgICAgICBhdHRyaWJ1
dGUgRXZlbnRMaXN0ZW5lciBvbm9wZW47CisgICAgICAgIGF0dHJpYnV0ZSBFdmVudExpc3RlbmVy
IG9ubWVzc2FnZTsKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25lcnJvcjsKKyAg
ICAgICAgdm9pZCBjbG9zZSgpOworCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0IGludGVyZmFjZQor
ICAgICAgICBbQ3VzdG9tXSB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEV2ZW50TGlzdGVuZXIg
bGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xl
YW4gdXNlQ2FwdHVyZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVtb3ZlRXZlbnRMaXN0ZW5l
cihpbiBET01TdHJpbmcgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluIEV2ZW50TGlzdGVuZXIgbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBib29s
ZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZ0KQorICAgICAgICAgICAgcmFpc2VzKEV2ZW50
RXhjZXB0aW9uKTsKKworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDM2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRVZF
TlRTT1VSQ0UpCisKKyNpbmNsdWRlICJFdmVudFNvdXJjZS5oIgorCisjaW5jbHVkZSAiQ2FjaGUu
aCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUg
IkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2luY2x1
ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNv
ZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBFdmVudFNvdXJjZTo6ZGVmYXVsdFJlY29u
bmVjdERlbGF5ID0gMzAwMDsKKworRXZlbnRTb3VyY2U6OkV2ZW50U291cmNlKGNvbnN0IFN0cmlu
ZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAgICwgbV9zdGF0ZShD
T05ORUNUSU5HKQorICAgICwgbV9yZWNvbm5lY3RUaW1lcih0aGlzLCAmRXZlbnRTb3VyY2U6OnJl
Y29ubmVjdFRpbWVyRmlyZWQpCisgICAgLCBtX2ZhaWxTaWxlbnRseShmYWxzZSkKKyAgICAsIG1f
cmVxdWVzdEluRmxpZ2h0KGZhbHNlKQorICAgICwgbV9yZWNvbm5lY3REZWxheShkZWZhdWx0UmVj
b25uZWN0RGVsYXkpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIShtX3VybCA9IGNvbnRl
eHQtPmNvbXBsZXRlVVJMKHVybCkpLmlzVmFsaWQoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IHNob3VsZCBzdXBwb3J0
IGNyb3NzLW9yaWdpbiByZXF1ZXN0cworICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1fdXJsKSkgeworICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fb3JpZ2luID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpOworICAg
IG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJV
VEYtOCIpOworCisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIGNvbm5lY3QoKTsK
K30KKworRXZlbnRTb3VyY2U6On5FdmVudFNvdXJjZSgpCit7Cit9CisKK3ZvaWQgRXZlbnRTb3Vy
Y2U6OmNvbm5lY3QoKQoreworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsKTsKKyAg
ICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRl
ckZpZWxkKCJBY2NlcHQiLCAidGV4dC9ldmVudC1zdHJlYW0iKTsKKyAgICByZXF1ZXN0LnNldEhU
VFBIZWFkZXJGaWVsZCgiQ2FjaGUtQ29udHJvbCIsICJuby1jYWNoZSIpOworICAgIGlmICghbV9s
YXN0RXZlbnRJZC5pc0VtcHR5KCkpCisgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxk
KCJMYXN0LUV2ZW50LUlEIiwgbV9sYXN0RXZlbnRJZCk7CisgICAgbV9sb2FkZXIgPSBUaHJlYWRh
YmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCByZXF1ZXN0
LCBTZW5kTG9hZENhbGxiYWNrcywgRG9Ob3RTbmlmZkNvbnRlbnQsIEFsbG93U3RvcmVkQ3JlZGVu
dGlhbHMsIERlbnlDcm9zc09yaWdpblJlZGlyZWN0KTsKKyAgICBtX3JlcXVlc3RJbkZsaWdodCA9
IHRydWU7CisKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJDb250
ZXh0KCkpCisgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5ub25DYWNoZVJlcXVlc3RJbkZsaWdo
dChtX3VybCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmVuZFJlcXVlc3QoKQoreworICAgIG1f
cmVxdWVzdEluRmxpZ2h0ID0gZmFsc2U7CisKKyAgICBpZiAoIW1fZmFpbFNpbGVudGx5KQorICAg
ICAgICBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CisKKyAg
ICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJDb250ZXh0KCkpCisgICAg
ICAgIGNhY2hlKCktPmxvYWRlcigpLT5ub25DYWNoZVJlcXVlc3RDb21wbGV0ZShtX3VybCk7CisK
KyAgICBpZiAobV9zdGF0ZSAhPSBDTE9TRUQpCisgICAgICAgIHNjaGVkdWxlUmVjb25uZWN0KCk7
CisgICAgZWxzZQorICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKK30KKwordm9p
ZCBFdmVudFNvdXJjZTo6c2NoZWR1bGVSZWNvbm5lY3QoKQoreworICAgIG1fc3RhdGUgPSBDT05O
RUNUSU5HOworICAgIG1fcmVjb25uZWN0VGltZXIuc3RhcnRPbmVTaG90KG1fcmVjb25uZWN0RGVs
YXkgLyAxMDAwKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6cmVjb25uZWN0VGltZXJGaXJlZChU
aW1lcjxFdmVudFNvdXJjZT4qKQoreworICAgIGNvbm5lY3QoKTsKK30KKworU3RyaW5nIEV2ZW50
U291cmNlOjp1cmwoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5zdHJpbmcoKTsKK30KKwor
RXZlbnRTb3VyY2U6OlN0YXRlIEV2ZW50U291cmNlOjpyZWFkeVN0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6Y2xvc2UoKQoreworICAg
IGlmIChtX3N0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcmVj
b25uZWN0VGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX3JlY29ubmVjdFRpbWVyLnN0b3Ao
KTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgfQorCisgICAgbV9z
dGF0ZSA9IENMT1NFRDsKKyAgICBtX2ZhaWxTaWxlbnRseSA9IHRydWU7CisKKyAgICBpZiAobV9y
ZXF1ZXN0SW5GbGlnaHQpCisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKK30KKworU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogRXZlbnRTb3VyY2U6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3Rl
bmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRvciBpdGVyID0gbV9l
dmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0ZXIgPT0gbV9ldmVudExp
c3RlbmVycy5lbmQoKSkgeworICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0ZW5lcnM7CisgICAg
ICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7CisgICAgICAgIG1fZXZlbnRMaXN0
ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBM
aXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKExp
c3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5lcnMuYmVnaW4oKTsg
bGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0ZXIpIHsKKyAgICAg
ICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbGlzdGVuZXJzLmFwcGVuZChldmVudExp
c3RlbmVyKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRUeXBlLCBsaXN0ZW5l
cnMpOworICAgIH0KK30KKwordm9pZCBFdmVudFNvdXJjZTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihj
b25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciogZXZlbnRMaXN0ZW5l
ciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3IgaXRlciA9IG1fZXZl
bnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChpdGVyID09IG1fZXZlbnRMaXN0
ZW5lcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIExpc3RlbmVyVmVjdG9yJiBsaXN0
ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6Y29uc3RfaXRl
cmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBs
aXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGlmICgqbGlzdGVuZXJJ
dGVyID09IGV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGxpc3RlbmVycy5yZW1vdmUobGlz
dGVuZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorfQorCitib29sIEV2ZW50U291cmNlOjpkaXNwYXRjaEV2ZW50KFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWV2ZW50
IHx8IGV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0gRXZlbnRFeGNlcHRp
b246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBFdmVudExpc3RlbmVyKiBhdHRyaWJ1dGVMaXN0ZW5lciA9IG1fYXR0cmlidXRl
TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKS5nZXQoKTsKKyAgICBpZiAoYXR0cmlidXRlTGlz
dGVuZXIpIHsKKyAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAgICAgICAgZXZlbnQt
PnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgICAgIGF0dHJpYnV0ZUxpc3RlbmVyLT5oYW5k
bGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKworICAgIExpc3RlbmVyVmVjdG9y
IGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKTsKKyAg
ICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0
ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnNDb3B5LmVuZCgpOyAr
K2xpc3RlbmVySXRlcikgeworICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOworICAgICAg
ICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgbGlzdGVuZXJJdGVyLT5n
ZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKKyAgICB9CisKKyAgICByZXR1
cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRp
ZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAg
ICBpbnQgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCk7CisgICAgaWYgKHN0
YXR1c0NvZGUgPT0gMjAwICYmIHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBl
IikgPT0gInRleHQvZXZlbnQtc3RyZWFtIikgeworICAgICAgICBtX3N0YXRlID0gT1BFTjsKKyAg
ICAgICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnROYW1lcygpLm9wZW5FdmVudCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXR1c0NvZGUgPD0gMjAwIHx8IHN0YXR1c0NvZGUgPiAy
OTkpCisgICAgICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOworICAgICAgICBtX2xvYWRlci0+Y2Fu
Y2VsKCk7CisgICAgfQorfQorCit2b2lkIEV2ZW50U291cmNlOjpkaWRSZWNlaXZlRGF0YShjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGFwcGVuZChtX3JlY2VpdmVCdWYsIG1f
ZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbmd0aCkpOworICAgIHBhcnNlRXZlbnRTdHJlYW0oKTsK
K30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQor
eworICAgIGlmIChtX3JlY2VpdmVCdWYuc2l6ZSgpID4gMCB8fCBtX2RhdGEuc2l6ZSgpID4gMCkg
eworICAgICAgICBhcHBlbmQobV9yZWNlaXZlQnVmLCAiXG5cbiIpOworICAgICAgICBwYXJzZUV2
ZW50U3RyZWFtKCk7CisgICAgfQorICAgIG1fc3RhdGUgPSBDT05ORUNUSU5HOworICAgIGVuZFJl
cXVlc3QoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJiBlcnJvcikKK3sKKyAgICBpbnQgY2FuY2VsZWQgPSBlcnJvci5pc0NhbmNlbGxhdGlvbigp
OworICAgIGlmICgoKG1fc3RhdGUgPT0gQ09OTkVDVElORykgJiYgIWNhbmNlbGVkKSB8fCAoKG1f
c3RhdGUgPT0gT1BFTikgJiYgY2FuY2VsZWQpKQorICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwor
ICAgIGVuZFJlcXVlc3QoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbFJlZGlyZWN0
Q2hlY2soKQoreworICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgbV9sb2FkZXItPmNhbmNlbCgp
OworfQorCit2b2lkIEV2ZW50U291cmNlOjpwYXJzZUV2ZW50U3RyZWFtKCkKK3sKKyAgICB1bnNp
Z25lZCBpbnQgYnVmUG9zID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYnVmU2l6ZSA9IG1fcmVjZWl2
ZUJ1Zi5zaXplKCk7CisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgbGluZUxlbmd0aCA9IC0x
OworICAgICAgICBpbnQgZmllbGRMZW5ndGggPSAtMTsKKyAgICAgICAgaW50IGNhcnJpYWdlUmV0
dXJuID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IGJ1ZlBvczsgbGluZUxlbmd0
aCA8IDAgJiYgaSA8IGJ1ZlNpemU7IGkrKykgeworICAgICAgICAgICAgc3dpdGNoIChtX3JlY2Vp
dmVCdWZbaV0pIHsKKyAgICAgICAgICAgIGNhc2UgJzonOgorICAgICAgICAgICAgICAgIGlmIChm
aWVsZExlbmd0aCA8IDApCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTGVuZ3RoID0gaSAtIGJ1
ZlBvczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1xuJzoKKyAg
ICAgICAgICAgICAgICBpZiAoaSA+IGJ1ZlBvcyAmJiBtX3JlY2VpdmVCdWZbaSAtIDFdID09ICdc
cicpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FycmlhZ2VSZXR1cm4rKzsKKyAgICAgICAgICAg
ICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lTGVu
Z3RoID0gaSAtIGJ1ZlBvczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5lTGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIHBhcnNlRXZlbnRTdHJlYW1MaW5lKGJ1ZlBvcywgZmllbGRMZW5ndGgs
IGxpbmVMZW5ndGgpOworICAgICAgICBidWZQb3MgKz0gbGluZUxlbmd0aCArIGNhcnJpYWdlUmV0
dXJuICsgMTsKKyAgICB9CisKKyAgICBpZiAoYnVmUG9zID09IGJ1ZlNpemUpCisgICAgICAgIG1f
cmVjZWl2ZUJ1Zi5jbGVhcigpOworICAgIGVsc2UgaWYgKGJ1ZlBvcykKKyAgICAgICAgbV9yZWNl
aXZlQnVmLnJlbW92ZSgwLCBidWZQb3MpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpwYXJzZUV2
ZW50U3RyZWFtTGluZSh1bnNpZ25lZCBpbnQgYnVmUG9zLCBpbnQgZmllbGRMZW5ndGgsIGludCBs
aW5lTGVuZ3RoKQoreworICAgIGlmICghbGluZUxlbmd0aCkgeworICAgICAgICBpZiAoIW1fZGF0
YS5pc0VtcHR5KCkpCisgICAgICAgICAgICBkaXNwYXRjaE1lc3NhZ2VFdmVudCgpOworICAgICAg
ICBpZiAoIW1fZXZlbnROYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZXZlbnROYW1lID0g
IiI7CisgICAgfSBlbHNlIGlmIChmaWVsZExlbmd0aCkgeworICAgICAgICBib29sIG5vVmFsdWUg
PSBmaWVsZExlbmd0aCA8IDA7CisKKyAgICAgICAgU3RyaW5nIGZpZWxkKCZtX3JlY2VpdmVCdWZb
YnVmUG9zXSwgbm9WYWx1ZSA/IGxpbmVMZW5ndGggOiBmaWVsZExlbmd0aCk7CisgICAgICAgIGlu
dCBzdGVwOworICAgICAgICBpZiAobm9WYWx1ZSkKKyAgICAgICAgICAgIHN0ZXAgPSBsaW5lTGVu
Z3RoOworICAgICAgICBlbHNlIGlmIChtX3JlY2VpdmVCdWZbYnVmUG9zICsgZmllbGRMZW5ndGgg
KyAxXSAhPSAnICcpCisgICAgICAgICAgICBzdGVwID0gZmllbGRMZW5ndGggKyAxOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzdGVwID0gZmllbGRMZW5ndGggKyAyOworICAgICAgICBidWZQ
b3MgKz0gc3RlcDsKKyAgICAgICAgaW50IHZhbHVlTGVuZ3RoID0gbGluZUxlbmd0aCAtIHN0ZXA7
CisKKyAgICAgICAgaWYgKGZpZWxkID09ICJkYXRhIikgeworICAgICAgICAgICAgaWYgKG1fZGF0
YS5zaXplKCkgPiAwKQorICAgICAgICAgICAgICAgIG1fZGF0YS5hcHBlbmQoJ1xuJyk7CisgICAg
ICAgICAgICBpZiAodmFsdWVMZW5ndGgpCisgICAgICAgICAgICAgICAgbV9kYXRhLmFwcGVuZCgm
bV9yZWNlaXZlQnVmW2J1ZlBvc10sIHZhbHVlTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIGlmIChm
aWVsZCA9PSAiZXZlbnQiKQorICAgICAgICAgICAgbV9ldmVudE5hbWUgPSB2YWx1ZUxlbmd0aCA/
IFN0cmluZygmbV9yZWNlaXZlQnVmW2J1ZlBvc10sIHZhbHVlTGVuZ3RoKSA6ICIiOworICAgICAg
ICBlbHNlIGlmIChmaWVsZCA9PSAiaWQiKQorICAgICAgICAgICAgbV9sYXN0RXZlbnRJZCA9IHZh
bHVlTGVuZ3RoID8gU3RyaW5nKCZtX3JlY2VpdmVCdWZbYnVmUG9zXSwgdmFsdWVMZW5ndGgpIDog
IiI7CisgICAgICAgIGVsc2UgaWYgKGZpZWxkID09ICJyZXRyeSIpIHsKKyAgICAgICAgICAgIGlm
ICghdmFsdWVMZW5ndGgpCisgICAgICAgICAgICAgICAgbV9yZWNvbm5lY3REZWxheSA9IGRlZmF1
bHRSZWNvbm5lY3REZWxheTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFN0
cmluZyB2YWx1ZSgmbV9yZWNlaXZlQnVmW2J1ZlBvc10sIHZhbHVlTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICBib29sIG9rOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyByZXRy
eSA9IHZhbHVlLnRvVUludDY0KCZvayk7CisgICAgICAgICAgICAgICAgaWYgKG9rKQorICAgICAg
ICAgICAgICAgICAgICBtX3JlY29ubmVjdERlbGF5ID0gcmV0cnk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpc3BhdGNoR2VuZXJpY0V2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkKK3sKKyAgICBSZWZQdHI8RXZlbnQ+IGV2dCA9
IEV2ZW50OjpjcmVhdGUodHlwZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsKKyAgICBBU1NFUlQo
IWVjKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlzcGF0Y2hNZXNzYWdlRXZlbnQoKQorewor
ICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKCk7Cisg
ICAgU3RyaW5nIGV2ZW50TmFtZSA9IG1fZXZlbnROYW1lLmlzRW1wdHkoKSA/IGV2ZW50TmFtZXMo
KS5tZXNzYWdlRXZlbnQuc3RyaW5nKCkgOiBtX2V2ZW50TmFtZTsKKyAgICBldnQtPmluaXRNZXNz
YWdlRXZlbnQoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UsIFN0cmluZzo6YWRvcHQobV9kYXRhKSwg
bV9vcmlnaW4sIG1fbGFzdEV2ZW50SWQsIDAsIDApOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOworICAgIEFTU0VSVCghZWMp
OworfQorCit2b2lkIEV2ZW50U291cmNlOjpzdG9wKCkKK3sKKyAgICBjbG9zZSgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0UpCklu
ZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvRXZlbnRTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJj
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0
aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEV2ZW50
U291cmNlX2gKKyNkZWZpbmUgRXZlbnRTb3VyY2VfaAorCisjaWYgRU5BQkxFKEVWRU5UU09VUkNF
KQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5n
SGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVk
ZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICBjbGFzcyBUZXh0UmVz
b3VyY2VEZWNvZGVyOworICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CisKKyAgICBjbGFzcyBF
dmVudFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50U291cmNlPiwgcHVibGljIEV2ZW50
VGFyZ2V0LCBwcml2YXRlIFRocmVhZGFibGVMb2FkZXJDbGllbnQsIHB1YmxpYyBBY3RpdmVET01P
YmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8RXZlbnRTb3Vy
Y2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmVudFNvdXJj
ZSh1cmwsIGNvbnRleHQsIGVjKSk7IH0KKyAgICAgICAgdmlydHVhbCB+RXZlbnRTb3VyY2UoKTsK
KworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRSZWNvbm5l
Y3REZWxheTsKKworICAgICAgICBTdHJpbmcgdXJsKCkgY29uc3Q7CisKKyAgICAgICAgZW51bSBT
dGF0ZSB7CisgICAgICAgICAgICBDT05ORUNUSU5HID0gMCwKKyAgICAgICAgICAgIE9QRU4gPSAx
LAorICAgICAgICAgICAgQ0xPU0VEID0gMiwKKyAgICAgICAgfTsKKworICAgICAgICBTdGF0ZSBy
ZWFkeVN0YXRlKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRPbm9wZW4oUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlTGlzdGVuZXJzLnNldChl
dmVudE5hbWVzKCkub3BlbkV2ZW50LCBldmVudExpc3RlbmVyKTsgfQorICAgICAgICBFdmVudExp
c3RlbmVyKiBvbm9wZW4oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZUxpc3RlbmVycy5nZXQo
ZXZlbnROYW1lcygpLm9wZW5FdmVudCkuZ2V0KCk7IH0KKworICAgICAgICB2b2lkIHNldE9ubWVz
c2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9hdHRyaWJ1
dGVMaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGV2ZW50TGlzdGVuZXIp
OyB9CisgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YXR0cmlidXRlTGlzdGVuZXJzLmdldChldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50KS5nZXQoKTsg
fQorCisgICAgICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2
ZW50TGlzdGVuZXIpIHsgbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZXMoKS5lcnJv
ckV2ZW50LCBldmVudExpc3RlbmVyKTsgfQorICAgICAgICBFdmVudExpc3RlbmVyKiBvbmVycm9y
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2ZW50TmFtZXMoKS5l
cnJvckV2ZW50KS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAgICB1
c2luZyBSZWZDb3VudGVkPEV2ZW50U291cmNlPjo6cmVmOworICAgICAgICB1c2luZyBSZWZDb3Vu
dGVkPEV2ZW50U291cmNlPjo6ZGVyZWY7CisKKyAgICAgICAgdmlydHVhbCBFdmVudFNvdXJjZSog
dG9FdmVudFNvdXJjZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICAgICAgdmlydHVhbCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CisKKyAgICAg
ICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlzdGVuZXJWZWN0b3I7
CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3RlbmVyVmVjdG9yPiBF
dmVudExpc3RlbmVyc01hcDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29s
IHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBFdmVudExpc3RlbmVyc01hcCYg
ZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJzOyB9CisKKyAgICAgICAg
dmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEV2ZW50U291cmNl
KGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYyk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkg
eyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIHsgZGVy
ZWYoKTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOworCisgICAgICAgIHZvaWQgY29ubmVjdCgpOwor
ICAgICAgICB2b2lkIGVuZFJlcXVlc3QoKTsKKyAgICAgICAgdm9pZCBzY2hlZHVsZVJlY29ubmVj
dCgpOworICAgICAgICB2b2lkIHJlY29ubmVjdFRpbWVyRmlyZWQoVGltZXI8RXZlbnRTb3VyY2U+
Kik7CisgICAgICAgIHZvaWQgcGFyc2VFdmVudFN0cmVhbSgpOworICAgICAgICB2b2lkIHBhcnNl
RXZlbnRTdHJlYW1MaW5lKHVuc2lnbmVkIGludCBwb3MsIGludCBmaWVsZExlbmd0aCwgaW50IGxp
bmVMZW5ndGgpOworICAgICAgICB2b2lkIGRpc3BhdGNoR2VuZXJpY0V2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnQoKTsKKwor
ICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBTdGF0ZSBtX3N0YXRlOworCisgICAgICAgIEhh
c2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBtX2F0dHJpYnV0ZUxp
c3RlbmVyczsKKyAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExpc3RlbmVyczsKKwor
ICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVyOworICAgICAgICBS
ZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIFRpbWVyPEV2ZW50U291
cmNlPiBtX3JlY29ubmVjdFRpbWVyOworICAgICAgICBWZWN0b3I8VUNoYXI+IG1fcmVjZWl2ZUJ1
ZjsKKyAgICAgICAgYm9vbCBtX2ZhaWxTaWxlbnRseTsKKyAgICAgICAgYm9vbCBtX3JlcXVlc3RJ
bkZsaWdodDsKKworICAgICAgICBTdHJpbmcgbV9ldmVudE5hbWU7CisgICAgICAgIFZlY3RvcjxV
Q2hhcj4gbV9kYXRhOworICAgICAgICBTdHJpbmcgbV9sYXN0RXZlbnRJZDsKKyAgICAgICAgdW5z
aWduZWQgbG9uZyBsb25nIG1fcmVjb25uZWN0RGVsYXk7CisgICAgICAgIFN0cmluZyBtX29yaWdp
bjsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
RVZFTlRTT1VSQ0UpCisKKyNlbmRpZiAvLyBFdmVudFNvdXJjZV9oCkluZGV4OiBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDQ3MTA1KQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
MjQyLDYgKzI0Miw3IEBACiAJV2ViQ29yZS9wYWdlL0Nvb3JkaW5hdGVzLmlkbCBcCiAJV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5pZGwgXAogCVdlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsIFwK
KwlXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsIFwKIAlXZWJDb3JlL3BhZ2UvR2VvbG9jYXRp
b24uaWRsIFwKIAlXZWJDb3JlL3BhZ2UvR2VvcG9zaXRpb24uaWRsIFwKIAlXZWJDb3JlL3BhZ2Uv
SGlzdG9yeS5pZGwgXApAQCAtMzQ1LDYgKzM0Niw5IEBACiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oIFwKKwlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAgXAorCVdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmggXAorCVdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldC5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oIFwKIAlX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwIFwKQEAgLTEyNzAsNiAr
MTI3NCw4IEBACiAJV2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIFwKIAlXZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oIFwKKwlXZWJD
b3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwIFwKKwlXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaCBc
CiAJV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9wYWdlL0ZvY3VzRGlyZWN0aW9uLmggXApAQCAtMjEy
Miw2ICsyMTI4LDIwIEBACiBlbmRpZiAjIEVORCBFTkFCTEVfREFUQUJBU0UKIAogIyAtLS0tCisj
IEhUTUw1IHNlcnZlci1zZW50IGV2ZW50cworIyAtLS0tCitpZiAhRU5BQkxFX0VWRU5UU09VUkNF
CitnbG9iYWxfY3BwZmxhZ3MgKz0gLURFTkFCTEVfRVZFTlRTT1VSQ0U9MAorZW5kaWYKKworaWYg
RU5BQkxFX0VWRU5UU09VUkNFCitGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVf
RVZFTlRTT1VSQ0U9MQorCit3ZWJjb3JlX2NwcGZsYWdzICs9IFwKKwktREVOQUJMRV9FVkVOVFNP
VVJDRT0xCitlbmRpZiAjIEVOQUJMRV9FVkVOVFNPVVJDRQorCisjIC0tLS0KICMgSFRNTDUgY2xp
ZW50LXNpZGUgc2Vzc2lvbiBhbmQgcGVyc2lzdGVudCBzdG9yYWdlCiAjIC0tLS0KIGlmIEVOQUJM
RV9ET01fU1RPUkFHRQpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNpb24g
NDcxMDUpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDYgKzgxLDkgQEAKICNpZiBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcKICAgICAg
ICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3Ig
TWVzc2FnZUNoYW5uZWw7CiAjZW5kaWYKKyNpZiBFTkFCTEVfRVZFTlRTT1VSQ0UKKyAgICAgICAg
YXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIEV2ZW50U291cmNlQ29uc3RydWN0b3IgRXZlbnRT
b3VyY2U7CisjZW5kaWYKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIFhNTEh0
dHBSZXF1ZXN0Q29uc3RydWN0b3IgWE1MSHR0cFJlcXVlc3Q7CiAgICAgfTsKIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBF
cmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpTRXZlbnRTb3Vy
Y2VDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcl9oCisKKyNp
ZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTRXZl
bnRTb3VyY2VDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
CisgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICBwcml2
YXRlOgorICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEVWRU5UU09VUkNFKQorCisj
ZW5kaWYgLy8gSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ3MTA1KQorKysg
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIldvcmtlck5hdmlnYXRvci5oIgogI2lu
Y2x1ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CiAKKyNpZiBFTkFCTEUoRVZFTlRTT1VS
Q0UpCisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCisjZW5kaWYKKwogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzcsNiArODEsMTMg
QEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCitKU1Zh
bHVlIEpTV29ya2VyQ29udGV4dDo6ZXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAor
eworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+
KGV4ZWMsIHRoaXMpOworfQorI2VuZGlmCisKIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0Ojp4bWxI
dHRwUmVxdWVzdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNz
c29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKworI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2UuaCIKKwor
I2luY2x1ZGUgIkV2ZW50U291cmNlLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIK
KyNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEpTRXZlbnRTb3VyY2U6Om1hcmtDaGlsZHJlbihN
YXJrU3RhY2smIG1hcmtTdGFjaykKK3sKKyAgICBET01PYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJr
U3RhY2spOworCisgICAgbWFya0lmTm90TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25vcGVuKCkp
OworICAgIG1hcmtJZk5vdE51bGwobWFya1N0YWNrLCBtX2ltcGwtPm9ubWVzc2FnZSgpKTsKKyAg
ICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFjaywgbV9pbXBsLT5vbmVycm9yKCkpOworCisgICAgdHlw
ZWRlZiBFdmVudFNvdXJjZTo6RXZlbnRMaXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7Cisg
ICAgdHlwZWRlZiBFdmVudFNvdXJjZTo6TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7Cisg
ICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVudExpc3Rl
bmVycygpOworICAgIGZvciAoRXZlbnRMaXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBl
dmVudExpc3RlbmVycy5iZWdpbigpOyBtYXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyAr
K21hcEl0ZXIpIHsKKyAgICAgICAgZm9yIChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRl
ciA9IG1hcEl0ZXItPnNlY29uZC5iZWdpbigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5l
bmQoKTsgKyt2ZWNJdGVyKQorICAgICAgICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24o
bWFya1N0YWNrKTsKKyAgICB9Cit9CisKK0pTVmFsdWUgSlNFdmVudFNvdXJjZTo6YWRkRXZlbnRM
aXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBs
aXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGFyZ3Mu
YXQoMSkpOworICAgIGlmICghbGlzdGVuZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIGltcGwoKS0+YWRkRXZlbnRMaXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMp
LCBsaXN0ZW5lci5yZWxlYXNlKCksIGFyZ3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBKU0V2ZW50U291cmNlOjpyZW1vdmVF
dmVudExpc3RlbmVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAg
ICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChp
bXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgaWYgKCFnbG9iYWxPYmplY3Qp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIEpTRXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBnbG9iYWxPYmplY3QtPmZpbmRKU0V2ZW50TGlzdGVuZXIoYXJncy5hdCgxKSk7Cisg
ICAgaWYgKCFsaXN0ZW5lcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgaW1w
bCgpLT5yZW1vdmVFdmVudExpc3RlbmVyKGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIGxpc3Rl
bmVyLCBhcmdzLmF0KDIpLnRvQm9vbGVhbihleGVjKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVO
VFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nz
b24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorCisj
aW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJFdmVudFNv
dXJjZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0V2ZW50U291
cmNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCit1c2luZyBuYW1l
c3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FTU0VSVF9DTEFTU19GSVRTX0lO
X0NFTEwoSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKTsKKworY29uc3QgQ2xhc3NJbmZvIEpTRXZl
bnRTb3VyY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRXZlbnRTb3VyY2VDb250cnVjdG9yIiwg
MCwgMCwgMCB9OworCitKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OkpTRXZlbnRTb3VyY2VDb25z
dHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmNy
ZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBK
U0V2ZW50U291cmNlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwor
ICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVj
LCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7Cit9CisKK3N0YXRpYyBKU09iamVj
dCogY29uc3RydWN0RXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3Ry
dWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdo
IGFyZ3VtZW50cyIpOworCisgICAgVVN0cmluZyB1cmwgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSAgc3RhdGljX2Nh
c3Q8SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOworICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBSZWZlcmVuY2VFcnJvciwgIkV2ZW50U291cmNlIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQg
ZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIFJlZlB0cjxFdmVudFNvdXJjZT4gZXZlbnRTb3VyY2UgPSBFdmVudFNvdXJjZTo6Y3JlYXRl
KHVybCwgY29udGV4dCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gYXNP
YmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgZXZlbnRTb3Vy
Y2UucmVsZWFzZSgpKSk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNFdmVudFNvdXJjZUNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7Cisg
ICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RFdmVudFNvdXJjZTsK
KyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCShyZXZpc2lvbiA0NzEwNSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSAiSlNET01XaW5kb3dTaGVsbC5oIgogI2luY2x1ZGUgIkpTRXZl
bnQuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU0V2ZW50U291
cmNlQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0hUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSlNJbWFnZUNvbnN0cnVjdG9yLmgiCkBAIC00MjUs
NiArNDI2LDEzIEBACiAgICAgcmV0dXJuIHRvSlMoZXhlYywgZXZlbnQpOwogfQogCisjaWYgRU5B
QkxFKEVWRU5UU09VUkNFKQorSlNWYWx1ZSBKU0RPTVdpbmRvdzo6ZXZlbnRTb3VyY2UoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0V2ZW50
U291cmNlQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworfQorI2VuZGlmCisKIEpTVmFsdWUgSlNE
T01XaW5kb3c6OmltYWdlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0
RE9NQ29uc3RydWN0b3I8SlNJbWFnZUNvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gNDcxMDUpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2
ICs0MywxMSBAQAogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiWE1MSHR0
cFJlcXVlc3RVcGxvYWQuaCIKIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKyNpbmNsdWRlICJF
dmVudFNvdXJjZS5oIgorI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2UuaCIKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICNpbmNsdWRlICJET01BcHBsaWNhdGlv
bkNhY2hlLmgiCiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlLmgiCkBAIC03NCw2ICs3
OSwxMSBAQAogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAgICAg
CisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorICAgIGlmIChFdmVudFNvdXJjZSogZXZlbnRTb3Vy
Y2UgPSB0YXJnZXQtPnRvRXZlbnRTb3VyY2UoKSkKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBldmVudFNvdXJjZSk7CisjZW5kaWYKKwogI2lmIEVOQUJMRShTVkcpCiAg
ICAgLy8gU1ZHRWxlbWVudEluc3RhbmNlIHN1cHBvcnRzIGJvdGggdG9TVkdFbGVtZW50SW5zdGFu
Y2UgYW5kIHRvTm9kZSBzaW5jZSBzbyBtdWNoIG1vdXNlIGhhbmRsaW5nIGNvZGUgZGVwZW5kcyBv
biB0b05vZGUgcmV0dXJuaW5nIGEgdmFsaWQgbm9kZS4KICAgICBpZiAoU1ZHRWxlbWVudEluc3Rh
bmNlKiBpbnN0YW5jZSA9IHRhcmdldC0+dG9TVkdFbGVtZW50SW5zdGFuY2UoKSkKQEAgLTEzOSw2
ICsxNDksMTAgQEAKICAgICBpZiAodmFsdWUuaXNPYmplY3QoJkpTRE9NV2luZG93U2hlbGw6OnNf
aW5mbykpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU0RPTVdpbmRvd1NoZWxsKj4oYXNP
YmplY3QodmFsdWUpKS0+aW1wbCgpOwogCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorICAgIENP
TlZFUlRfVE9fRVZFTlRfVEFSR0VUKEV2ZW50U291cmNlKQorI2VuZGlmCisKICNpZiBFTkFCTEUo
T0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogICAgIENPTlZFUlRfVE9fRVZFTlRfVEFSR0VUKERP
TUFwcGxpY2F0aW9uQ2FjaGUpCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9u
IDQ3MTA1KQorKysgV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNiArMTAwLDcgQEAKICAgICBFdmVudCBcCiAgICAgRXZlbnRFeGNlcHRpb24gXAogICAg
IEV2ZW50TGlzdGVuZXIgXAorICAgIEV2ZW50U291cmNlIFwKICAgICBFdmVudFRhcmdldCBcCiAg
ICAgRmlsZSBcCiAgICAgRmlsZUxpc3QgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ3MTA1KQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ0MDIsNiArNDQwMiwx
MyBAQAogCQlERDc2M0JCMjA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5keWxpYiBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERENzYzQkIxMDk5MkMy
QzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5bGliICovOyB9OwogCQlERDdDREYyNTBBMjNDRjk4MDAw
Njk5MjggLyogQ1NTVW5rbm93blJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0NFMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NVbmtub3duUnVs
ZS5oICovOyB9OwogCQlEREU2M0VENTBCN0Q0NUE4MDAyMjY5OTggLyogRE9NVGV4dEV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzNBMTQ3NTBC
N0QxQkFGMDBBNTNGRkQgLyogRE9NVGV4dEV2ZW50LmggKi87IH07CisJCUUwRkVGMzcyQjE3QzUz
RUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTBGRUYzNzFCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNl
LmggKi87IH07CisJCUUwRkVGMzcyQjI3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3MUIy
N0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuY3BwICovOyB9OworCQlFMEZFRjM3MkIzN0M1
M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTBGRUYzNzFCMzdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRT
b3VyY2UuaCAqLzsgfTsKKwkJRTBGRUYzNzJCNDdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3Vy
Y2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTBG
RUYzNzFCNDdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2UuY3BwICovOyB9OworCQlFMEZF
RjM3MkI1N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3MUI1N0M1M0VBQzFD
MUZCRUUgLyogSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgKi87IH07CisJCUUwRkVGMzcyQjY3QzUz
RUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUwRkVGMzcxQjY3QzUzRUFDMUMxRkJFRSAv
KiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJRTBGRUYzNzJCNzdDNTNFQUMx
QzFGQkVFIC8qIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3MUI3N0M1M0VBQzFDMUZCRUUgLyog
SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJRTEwNzQwMEQwRTc3QkRDMDAw
MzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwNzQwMEIwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2Fn
ZUNoYW5uZWwuY3BwICovOyB9OwogCQlFMTA3NDAwRTBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNz
YWdlQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTEwNzQwMEMwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuaCAqLzsgfTsK
IAkJRTEwNzQzMjQwRTc4MzU4MzAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTA3
NDMyMzBFNzgzNTgzMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcCAq
LzsgfTsKQEAgLTkzMjcsNiArOTMzNCwxNCBAQAogCQlEQjIzQzJDQTBBNTA4RDI5MDAyNDg5RUIg
LyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluZGVudE91dGRlbnRDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUREMDVGRTBCMEI4QkEzQzYwMDlBQ0RGRSAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZU9iakNFeHRyYXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQ3NjNCQjEwOTkyQzJDOTAwNzQwQjhFIC8qIGxpYnhtbDIu
ZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnhtbDIuZHlsaWI7IHBhdGggPSAvdXNy
L2xpYi9saWJ4bWwyLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQlFMEZF
RjM3MUIwN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IEV2ZW50U291cmNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTBG
RUYzNzFCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV2ZW50U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUwRkVGMzcxQjI3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUUwRkVGMzcxQjM3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291
cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXZlbnRTb3VyY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTBGRUYzNzFCNDdDNTNFQUMxQzFGQkVFIC8q
IEpTRXZlbnRTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNFdmVudFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUwRkVGMzcx
QjU3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRTb3VyY2VDdXN0b20uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFMEZFRjM3MUI2N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVu
dFNvdXJjZUNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlF
MEZFRjM3MUI3N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRTb3VyY2VDb25zdHJ1
Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDc0MDBCMEU3N0JEQzAw
MDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5uZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTA3NDAwQzBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lc3NhZ2VDaGFubmVsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDc0MzIzMEU3ODM1ODMwMDMzQUYyNCAvKiBKU01l
c3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNjA4LDYgKzEwNjIzLDkgQEAKIAkJCQkxQUYzMjY3NzBENzhCOTQ0
MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggKi8sCiAJCQkJOTNDMDlBODAwQjA2NEYwMDAwNUFC
RDREIC8qIEV2ZW50SGFuZGxlci5jcHAgKi8sCiAJCQkJOTNDMDlBNTIwQjA2NERCMzAwNUFCRDRE
IC8qIEV2ZW50SGFuZGxlci5oICovLAorCQkJCUUwRkVGMzcxQjI3QzUzRUFDMUMxRkJFRSAvKiBF
dmVudFNvdXJjZS5jcHAgKi8sCisJCQkJRTBGRUYzNzFCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50
U291cmNlLmggKi8sCisJCQkJRTBGRUYzNzFCMDdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNl
LmlkbCAqLywKIAkJCQkxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVy
LmNwcCAqLywKIAkJCQkxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVy
LmggKi8sCiAJCQkJMDYyMjg3ODMwQjREQjMyMjAwMEMzNERGIC8qIEZvY3VzRGlyZWN0aW9uLmgg
Ki8sCkBAIC0xMzY1OSw2ICsxMzY3Nyw4IEBACiAJCQkJQkNCRkI1M0IwRENEMjlDRjAwMTlCM0U1
IC8qIEpTRE9NV2luZG93U2hlbGwuaCAqLywKIAkJCQk5M0I3MEQ0RDA5RUIwQzdDMDA5RDg0Njgg
LyogSlNFdmVudExpc3RlbmVyLmNwcCAqLywKIAkJCQk5M0I3MEQ0RTA5RUIwQzdDMDA5RDg0Njgg
LyogSlNFdmVudExpc3RlbmVyLmggKi8sCisJCQkJRTBGRUYzNzFCNjdDNTNFQUMxQzFGQkVFIC8q
IEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oICovLAorCQkJCUUwRkVGMzcxQjc3QzUzRUFDMUMx
RkJFRSAvKiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUJDNjA5MDFFMEU5
MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0LmNwcCAqLywKIAkJCQlCQzYwOTAxRDBFOTFC
OEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldC5oICovLAogCQkJCTkzNTBFNzBDMEU4NzUwMEIw
MDE4OUZGRiAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCAqLywKQEAgLTEzODI0LDYgKzEzODQ0
LDcgQEAKIAkJCQk2NTJGQkJCQjBERTI3Q0I2MDAwMUQzODYgLyogSlNET01XaW5kb3dDdXN0b20u
aCAqLywKIAkJCQlCQzJFRDU1NDBDNkI5QkQzMDA5MjBCRkYgLyogSlNFbGVtZW50Q3VzdG9tLmNw
cCAqLywKIAkJCQlCQ0VGQUY0RDBDMzE3RTY5MDBGQTgxRjYgLyogSlNFdmVudEN1c3RvbS5jcHAg
Ki8sCisJCQkJRTBGRUYzNzFCNTdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2VDdXN0b20u
Y3BwICovLAogCQkJCUZFODBEN0E2MEU5QzFFRDIwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uQ3Vz
dG9tLmNwcCAqLywKIAkJCQlCQ0U3QjE5MjBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0b3J5Q3Vz
dG9tLmNwcCAqLywKIAkJCQlCQzRFREVGMzBDMDhGM0ZCMDA3RURENDkgLyogSlNIVE1MQXBwbGV0
RWxlbWVudEN1c3RvbS5jcHAgKi8sCkBAIC0xMzk1Nyw2ICsxMzk3OCw4IEBACiAJCQkJQkM1QTg2
QjQwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9NU2VsZWN0aW9uLmggKi8sCiAJCQkJMTQwM0JBMEIw
OUVCMThDNzAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmNwcCAqLywKIAkJCQkxNDAzQkEwRTA5RUIx
OEY4MDA3OTdDN0YgLyogSlNET01XaW5kb3cuaCAqLywKKwkJCQlFMEZFRjM3MUIzN0M1M0VBQzFD
MUZCRUUgLyogSlNFdmVudFNvdXJjZS5oICovLAorCQkJCUUwRkVGMzcxQjQ3QzUzRUFDMUMxRkJF
RSAvKiBKU0V2ZW50U291cmNlLmNwcCAqLywKIAkJCQlCQzk0RDE0QzBDMjc1QzY4MDA2QkM2MTcg
LyogSlNIaXN0b3J5LmNwcCAqLywKIAkJCQlCQzk0RDE0RDBDMjc1QzY4MDA2QkM2MTcgLyogSlNI
aXN0b3J5LmggKi8sCiAJCQkJQkNFMUM0MzkwRDk4MzBEMzAwM0IwMkYyIC8qIEpTTG9jYXRpb24u
Y3BwICovLApAQCAtMTU5MjIsNiArMTU5NDUsNyBAQAogCQkJCTkzNUZCQzQ1MDlCQTAwQjkwMEUy
MzBCMSAvKiBFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQ0ExOUUxNjBEQzI1
NUNBMDA2NUE5OTQgLyogRXZlbnRMb29wLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4ODVDNDA4
QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTBGRUYz
NzJCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTJFREI3QjBCMzA4QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDNjBEOEYzMEQyQTExRTAwMEI5OTE4RiAvKiBFeGNlcHRpb25CYXNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzVGQkNGMjA5QkExNDNCMDBFMjMwQjEgLyogRXhjZXB0aW9uQ29kZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0xNjIwNyw2ICsxNjIzMSw4IEBACiAJCQkJMTRFODM3OEUwOUY4NUQ0
RjAwQjg1QUU0IC8qIEpTRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjBEOUMwMEQyQTI2
OUEwMEI5OTE4RiAvKiBKU0V2ZW50RXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0I3
MEQ2QTA5RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFMEZFRjM3MkIzN0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTBGRUYzNzJCNjdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2VDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2MDkwMUYwRTkxQjhFQzAwMEM2OEI1IC8q
IEpTRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDBGMDE1MEUwQTE4OTUwMEZE
MDRFMyAvKiBKU0ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDBGMDE3MEUwQTE4OTUwMEZE
MDRFMyAvKiBKU0ZpbGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTE3OTgyLDYgKzE4MDA4LDcg
QEAKIAkJCQk5M0MwOUE3RjBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5kbGVyTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUNBMTlFMDUwREMyNTU5NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTg4NUMzMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVu
dE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUwRkVGMzcyQjI3QzUzRUFDMUMxRkJFRSAv
KiBFdmVudFNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTJFREJFQTBCMzA4RTBCMDAy
NzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2MEQ4RjIwRDJB
MTFFMDAwQjk5MThGIC8qIEV4Y2VwdGlvbkJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM4
MzFCNTcwRDA4N0Q2MDAwRTVDOTg0IC8qIEV4Y2VwdGlvbkNvZGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0xODI4OCw2ICsxODMxNSw5IEBACiAJCQkJQkNFRkFGNEUwQzMxN0U2OTAwRkE4MUY2IC8q
IEpTRXZlbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2MEQ5QkYwRDJBMjY5QTAw
Qjk5MThGIC8qIEpTRXZlbnRFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCNzBE
NjkwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRXZlbnRMaXN0ZW5lci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQlFMEZFRjM3MkI0N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlFMEZFRjM3MkI3N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUwRkVGMzcyQjU3QzUzRUFDMUMxRkJF
RSAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjA5MDIw
MEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDMDBGMDE0MEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkMwMEYwMTYwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZUxpc3QuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBXZWJDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmln
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNj
b25maWcJKHJldmlzaW9uIDQ3MTA1KQorKysgV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJl
RGVmaW5lcy54Y2NvbmZpZwkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogRU5BQkxF
X0RBVEFCQVNFID0gRU5BQkxFX0RBVEFCQVNFOwogRU5BQkxFX0RBVEFHUklEID0gRU5BQkxFX0RB
VEFHUklEOwogRU5BQkxFX0RPTV9TVE9SQUdFID0gRU5BQkxFX0RPTV9TVE9SQUdFOworRU5BQkxF
X0VWRU5UU09VUkNFID0gRU5BQkxFX0VWRU5UU09VUkNFOwogRU5BQkxFX0ZJTFRFUlMgPSA7CiBF
TkFCTEVfR0VPTE9DQVRJT04gPSA7CiBFTkFCTEVfSUNPTkRBVEFCQVNFID0gRU5BQkxFX0lDT05E
QVRBQkFTRTsKQEAgLTYwLDQgKzYxLDQgQEAKIEVOQUJMRV9YUEFUSCA9IEVOQUJMRV9YUEFUSDsK
IEVOQUJMRV9YU0xUID0gRU5BQkxFX1hTTFQ7CiAKLUZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxF
XzNEX0NBTlZBUykgJChFTkFCTEVfM0RfUkVOREVSSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NB
R0lORykgJChFTkFCTEVfREFUQUJBU0UpICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9ET01f
U1RPUkFHRSkgJChFTkFCTEVfRklMVEVSUykgJChFTkFCTEVfR0VPTE9DQVRJT04pICQoRU5BQkxF
X0lDT05EQVRBQkFTRSkgJChFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUikgJChFTkFCTEVfTk9U
SUZJQ0FUSU9OUykgJChFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKSAkKEVOQUJMRV9S
VUJZKSAkKEVOQUJMRV9TSEFSRURfV09SS0VSUykgJChFTkFCTEVfU1ZHKSAkKEVOQUJMRV9TVkdf
QU5JTUFUSU9OKSAkKEVOQUJMRV9TVkdfQVNfSU1BR0UpICQoRU5BQkxFX1NWR19ET01fT0JKQ19C
SU5ESU5HUykgJChFTkFCTEVfU1ZHX0ZPTlRTKSAkKEVOQUJMRV9TVkdfRk9SRUlHTl9PQkpFQ1Qp
ICQoRU5BQkxFX1NWR19VU0UpICQoRU5BQkxFX1ZJREVPKSAkKEVOQUJMRV9XRUJfU09DS0VUUykg
JChFTkFCTEVfV01MKSAkKEVOQUJMRV9XT1JLRVJTKSAkKEVOQUJMRV9YUEFUSCkgJChFTkFCTEVf
WFNMVCk7CitGRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9DQU5WQVMpICQoRU5BQkxFXzNE
X1JFTkRFUklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxFX0RBVEFCQVNF
KSAkKEVOQUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfRE9NX1NUT1JBR0UpICQoRU5BQkxFX0VWRU5U
U09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVf
SUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JV
QlkpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19B
TklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJ
TkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkg
JChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAk
KEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9Y
U0xUKTsKSW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9u
IDQ3MTA1KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MDktMDgtMTIgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFk
ZGVkIEV2ZW50U291cmNlIHRvIHRoZSBidWlsZCAoZGVmYXVsdCBvbikuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5NyAKKworICAgICAgICAqIGNv
bmZpZ3VyZS5hYzoKKwogMjAwOS0wOC0xMSAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoQnVpbGQgYnJlYWspLgpJbmRleDog
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVu
dC1zdHJlYW0tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZl
bnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMyBAQAorVGVzdCBFdmVudFNvdXJjZSB0ZXh0L2V2ZW50LXN0cmVhbSBwYXJzaW5n
LiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBET05F
LgorCitQQVNTOiBnb3Qgb3BlbiBldmVudAorUEFTUzogcmVjZWl2ZWQgZXZlbnQgd2l0aCBkYXRh
ICJzaW1wbGUiCitQQVNTOiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEgc3Bhbm5pbmcgbXVsdGlw
bGUgbGluZXMKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBpcyAiMSIKK1BB
U1M6IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBpcyBzdGlsbCAiMSIKK1BBU1M6IHJl
Y2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBoYXMgYmVlbiBjbGVhcmVkCitQQVNTOiBnb3Qg
b3BlbiBldmVudCBmcm9tIHNlcnZlcgorUEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5kIHRoZSBldmVu
dCBuYW1lIGhhcyBiZWVuIHJlc2V0CitQQVNTOiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEgdGhh
dCBjb250YWlucyBhIGNvbG9uIGFuZCBhIGNhcnJpYWdlIHJldHVybgorRE9ORQorCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1jb2Rl
LXN0YXRlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRz
b3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1j
b2RlLXN0YXRlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc4IEBACis8aHRtbD4KKzxi
b2R5PgorPHA+VGVzdCBFdmVudFNvdXJjZSBzdGF0ZXMgZm9yIGRpZmZlcmVudCBzdGF0dXMgY29k
ZXMuIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERP
TkUuPC9wPgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2co
bXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCAr
PSBtc2cgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIGFycmF5Q29tcGFyZShhMSwgYTIpIHsKKyAg
ICBpZiAoYTEubGVuZ3RoICE9IGEyLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspCisgICAgICAgIGlmIChhMVtpXSAh
PSBhMltpXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordmFyIHN0YXRlTmFtZXMgPSBbIkNPTk5FQ1RJTkciLCAiT1BFTiIsICJDTE9TRUQiXTsKK2Zv
ciAodmFyIGkgaW4gc3RhdGVOYW1lcykKKyAgICBldmFsKCJ2YXIgIiArIHN0YXRlTmFtZXNbaV0g
KyAiID0gIiArIGkpOworCit2YXIgdGVzdHMgPSBbeyJjb2RlIjogMjAwLCAiZXhwZWN0ZWRTdGF0
ZXMiOiBbQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xPU0VEXX0sCisgICAg
ICAgICAgICAgeyJjb2RlIjogMjA0LCAiZXhwZWN0ZWRTdGF0ZXMiOiBbQ09OTkVDVElORywsLCBD
T05ORUNUSU5HLCBDTE9TRURdfSwKKyAgICAgICAgICAgICB7ImNvZGUiOiAyMDUsICJleHBlY3Rl
ZFN0YXRlcyI6IFtDT05ORUNUSU5HLCwsIENPTk5FQ1RJTkcsIENMT1NFRF19LAorICAgICAgICAg
ICAgIHsiY29kZSI6IDIwMiwgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsLCwgQ09OTkVD
VElORywgQ0xPU0VEXX0sIC8vIG90aGVyIDJ4eAorICAgICAgICAgICAgIHsiY29kZSI6IDMwMSwg
ImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENM
T1NFRF19LAorICAgICAgICAgICAgIHsiY29kZSI6IDMwMiwgImV4cGVjdGVkU3RhdGVzIjogW0NP
Tk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRF19LAorICAgICAgICAgICAg
IHsiY29kZSI6IDMwMywgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsIE9QRU4sIE9QRU4s
IENPTk5FQ1RJTkcsIENMT1NFRF19LAorICAgICAgICAgICAgIHsiY29kZSI6IDMwNywgImV4cGVj
dGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRF19
LAorICAgICAgICAgICAgIHsiY29kZSI6IDQwNCwgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJ
TkcsLCwgQ0xPU0VELCBDTE9TRURdfV07IC8vIGFueSBvdGhlcgordmFyIGNvdW50ID0gMDsKKwor
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAoY291bnQgPj0gdGVzdHMubGVuZ3RoKSB7Cisg
ICAgICAgIGxvZygiRE9ORSIpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHN0YXRlcyA9IFtdOworICAgIHZhciBlcyA9
IG5ldyBFdmVudFNvdXJjZSgicmVzb3VyY2VzL3N0YXR1cy1jb2Rlcy5waHA/c3RhdHVzLWNvZGU9
IiArIHRlc3RzW2NvdW50XS5jb2RlKTsKKyAgICBzdGF0ZXNbMF0gPSBlcy5yZWFkeVN0YXRlOwor
CisgICAgZXMub25vcGVuID0gZnVuY3Rpb24gKCkgeworICAgICAgICBzdGF0ZXNbMV0gPSBlcy5y
ZWFkeVN0YXRlOworICAgIH07CisKKyAgICBlcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7
CisgICAgICAgIHN0YXRlc1syXSA9IGVzLnJlYWR5U3RhdGU7CisgICAgfTsKKworICAgIGVzLm9u
ZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHN0YXRlc1szXSA9IGVzLnJlYWR5U3RhdGU7
CisgICAgICAgIGVzLmNsb3NlKCk7CisgICAgICAgIHN0YXRlc1s0XSA9IGVzLnJlYWR5U3RhdGU7
CisKKyAgICAgICAgdmFyIHJlc3VsdCA9IGFycmF5Q29tcGFyZShzdGF0ZXMsIHRlc3RzW2NvdW50
XS5leHBlY3RlZFN0YXRlcykgPyAiUEFTUyIgOiAiRkFJTCI7CisgICAgICAgIHJlc3VsdCArPSAi
OiBzdGF0dXMgY29kZSAiICsgdGVzdHNbY291bnRdLmNvZGUgKyAiIHJlc3VsdGVkIGluIHN0YXRl
cyAiOworICAgICAgICBmb3IgKHZhciBpIGluIHN0YXRlcykKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAoaSAhPSAwID8gIiwgIiA6ICIiKSArIHN0YXRlTmFtZXNbc3RhdGVzW2ldXTsKKyAgICAgICAg
bG9nKHJlc3VsdCk7CisKKyAgICAgICAgc2V0VGltZW91dChydW5UZXN0LCAwKTsKKyAgICAgICAg
Y291bnQrKzsKKyAgICB9OworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworcnVuVGVzdCgpOworPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNl
L2V2ZW50c291cmNlLXJlY29ubmVjdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0Lmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXJl
Y29ubmVjdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc3IEBACis8aHRtbD4KKzxib2R5
PgorPHA+VGVzdCBFdmVudFNvdXJjZSByZWNvbm5lY3QgYWZ0ZXIgZW5kIG9mIGV2ZW50IHN0cmVh
bS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9O
RS48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyht
c2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9
IG1zZyArICI8YnI+IjsKK30KKwordmFyIHN0YXRlTmFtZXMgPSBbIkNPTk5FQ1RJTkciLCAiT1BF
TiIsICJDTE9TRUQiXTsKK2ZvciAodmFyIGkgaW4gc3RhdGVOYW1lcykKKyAgICBldmFsKCJ2YXIg
IiArIHN0YXRlTmFtZXNbaV0gKyAiID0gIiArIGkpOwordmFyIHJldHJ5VGltZW91dDsKKworZnVu
Y3Rpb24gY2hlY2tSZWFkeVN0YXRlKGVzLCBkZXNpcmVkU3RhdGUpIHsKKyAgICB2YXIgY3VyclN0
YXRlID0gZXMucmVhZHlTdGF0ZTsKKyAgICBpZiAoY3VyclN0YXRlID09IGRlc2lyZWRTdGF0ZSkK
KyAgICAgICAgbG9nKCJQQVNTOiBzdGF0ZSBpcyAiICsgc3RhdGVOYW1lc1tkZXNpcmVkU3RhdGVd
KTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiRkFJTDogYmFkIHN0YXRlICgiICsgc3RhdGVOYW1l
c1tjdXJyU3RhdGVdICsgIiwgc2hvdWxkIGJlICIgKyBzdGF0ZU5hbWVzW2Rlc2lyZWRTdGF0ZV0g
KyAiKSIpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGVyckNvdW50ID0gMDsKK3ZhciBlcyA9IG5ldyBF
dmVudFNvdXJjZSgicmVzb3VyY2VzL3JlY29ubmVjdC5waHAiKTsKKworY2hlY2tSZWFkeVN0YXRl
KGVzLCBDT05ORUNUSU5HKTsKKworZXMub25vcGVuID0gZnVuY3Rpb24gKGV2dCkgeworICAgIGNo
ZWNrUmVhZHlTdGF0ZShlcywgT1BFTik7Cit9OworCitlcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAo
ZXZ0KSB7CisgICAgaWYgKCFlcnJDb3VudCkgeworICAgICAgICBpZiAoZXZ0Lmxhc3RFdmVudElk
ID09ICI3NyIpCisgICAgICAgICAgICBsb2coIlBBU1M6IGdvdCBsYXN0RXZlbnRJZCBcIjc3XCIi
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nKCJGQUlMOiB1bmV4cGVjdGVkIGxhc3RF
dmVudElkIFwiIiArIGV2dC5sYXN0RXZlbnRJZCArICJcIiIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChldnQuZGF0YSA9PSAiNzciKQorICAgICAgICAgICAgbG9nKCJQQVNTOiBMYXN0LUV2
ZW50LUlEIGhlYWRlciB3YXMgY29ycmVjdCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBs
b2coIkZBSUw6IExhc3QtRXZlbnQtSUQgaGVhZGVyIHdhcyBpbmNvcnJlY3QvbWlzc2luZyIpOwor
ICAgIH0KK307CisKK2VzLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgZXJyQ291bnQrKzsK
KyAgICBpZiAoZXJyQ291bnQgPCAyKSB7CisgICAgICAgIGNoZWNrUmVhZHlTdGF0ZShlcywgQ09O
TkVDVElORyk7CisgICAgICAgIHJldHJ5VGltZW91dCA9IHNldFRpbWVvdXQoZW5kLCAxMDAwKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhclRpbWVvdXQocmV0cnlUaW1lb3V0KTsK
KyAgICByZXRyeVRpbWVvdXQgPSBudWxsOworICAgIGVuZCgpOworfTsKKworZnVuY3Rpb24gZW5k
KCkgeworICAgIGVzLmNsb3NlKCk7CisgICAgaWYgKHJldHJ5VGltZW91dCkKKyAgICAgICAgbG9n
KCJGQUlMOiBkaWQgbm90IHJlY29ubmVjdCBpbiB0aW1lIik7CisgICAgZWxzZSB7CisgICAgICAg
IGNoZWNrUmVhZHlTdGF0ZShlcywgQ0xPU0VEKTsKKyAgICAgICAgbG9nKCJET05FIik7CisgICAg
fQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNl
LXBhcnNlLWV2ZW50LXN0cmVhbS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291
cmNlLXBhcnNlLWV2ZW50LXN0cmVhbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBA
Cis8aHRtbD4KKzxib2R5PgorPHA+VGVzdCBFdmVudFNvdXJjZSB0ZXh0L2V2ZW50LXN0cmVhbSBw
YXJzaW5nLiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBi
eSBET05FLjwvcD4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24g
bG9nKG1zZykgeworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhU
TUwgKz0gbXNnICsgIjxicj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGNvdW50ID0gMDsKK3ZhciBl
cyA9IG5ldyBFdmVudFNvdXJjZSgicmVzb3VyY2VzL2V2ZW50LXN0cmVhbS5waHAiKTsKKworZXMu
b25vcGVuID0gZnVuY3Rpb24gKGV2dCkgeworICAgIGlmICghZXZ0LmRhdGEpCisgICAgICAgIGxv
ZygiUEFTUzogZ290IG9wZW4gZXZlbnQiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiUEFTUzog
Z290IG9wZW4gZXZlbnQgZnJvbSBzZXJ2ZXIiKTsKK307CisKK2VzLm9ubWVzc2FnZSA9IGZ1bmN0
aW9uIChldnQpIHsKKyAgICBzd2l0Y2goY291bnQrKykgeworICAgICAgICBjYXNlIDA6CisgICAg
ICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gInNpbXBsZSIpCisgICAgICAgICAgICAgICAgbG9nKCJQ
QVNTOiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEgXCJzaW1wbGVcIiIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PSAic3Bh
bm5pbmdcbm11bHRpcGxlXG5cbmxpbmVzXG4iKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUzog
cmVjZWl2ZWQgZXZlbnQgd2l0aCBkYXRhIHNwYW5uaW5nIG11bHRpcGxlIGxpbmVzIik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKGV2dC5kYXRh
ID09ICJpZCBpcyAxIiAmJiBldnQubGFzdEV2ZW50SWQgPT0gIjEiKQorICAgICAgICAgICAgICAg
IGxvZygiUEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5kIGxhc3RFdmVudElkIGlzIFwiMVwiIik7Cisg
ICAgICAgICAgICBicmVhaworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiAoZXZ0LmRh
dGEgPT0gImlkIGlzIHN0aWxsIDEiICYmIGV2dC5sYXN0RXZlbnRJZCA9PSAiMSIpCisgICAgICAg
ICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCBhbmQgbGFzdEV2ZW50SWQgaXMgc3Rp
bGwgXCIxXCIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICBpZiAoZXZ0LmRhdGEgPT0gIm5vIGlkIiAmJiBldnQubGFzdEV2ZW50SWQgPT0gIiIpCisg
ICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCBhbmQgbGFzdEV2ZW50SWQg
aGFzIGJlZW4gY2xlYXJlZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToK
KyAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PSAiYSBtZXNzYWdlIGV2ZW50IHdpdGggdGhlIG5h
bWUgXCJtZXNzYWdlXCIiKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUzogcmVjZWl2ZWQgZXZl
bnQgYW5kIHRoZSBldmVudCBuYW1lIGhhcyBiZWVuIHJlc2V0Iik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgaWYgKGV2dC5kYXRhID09ICJhIGxpbmUg
ZW5kaW5nIHdpdGggY3JsZlxuYSBsaW5lIHdpdGggYSA6IChjb2xvbilcbmEgbGluZSB3aXRoIGEg
XHIgKGNhcnJpYWdlIHJldHVybikiKQorICAgICAgICAgICAgICAgIGxvZygiUEFTUzogcmVjZWl2
ZWQgZXZlbnQgd2l0aCBkYXRhIHRoYXQgY29udGFpbnMgYSBjb2xvbiBhbmQgYSBjYXJyaWFnZSBy
ZXR1cm4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgbG9nKCJGQUlMOiBnb3QgdW5leHBlY3RlZCBldmVudCIpOworICAgICAgICAgICAgZXMuY2xv
c2UoKTsKKyAgICB9Cit9OworCitlcy5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAgIGVzLmNs
b3NlKCk7CisKKyAgICBpZiAoY291bnQgIT0gNykKKyAgICAgICAgbG9nKCJGQUlMOiBnb3QgdW5l
eHBlY3RlZCBlcnJvciBldmVudCIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJET05FIik7CisK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLWJh
ZC1taW1lLXR5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50
c291cmNlLWJhZC1taW1lLXR5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDQgQEAKK1Rlc3QgRXZlbnRTb3VyY2Ugd2l0aCBhbiBldmVudC1zdHJlYW0gd2l0aCBpbmNvcnJl
Y3QgbWltZS10eXBlLgorCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZl
bnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3RhdGVzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNl
LXN0YXR1cy1jb2RlLXN0YXRlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1jb2RlLXN0YXRl
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgRXZlbnRT
b3VyY2Ugc3RhdGVzIGZvciBkaWZmZXJlbnQgc3RhdHVzIGNvZGVzLiBTaG91bGQgcHJpbnQgYSBz
ZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBET05FLgorCitQQVNTOiBzdGF0dXMg
Y29kZSAyMDAgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5F
Q1RJTkcsIENMT1NFRAorUEFTUzogc3RhdHVzIGNvZGUgMjA0IHJlc3VsdGVkIGluIHN0YXRlcyBD
T05ORUNUSU5HLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDIwNSByZXN1
bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgQ09OTkVDVElORywgQ0xPU0VECitQQVNTOiBzdGF0
dXMgY29kZSAyMDIgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcsIENPTk5FQ1RJTkcsIENM
T1NFRAorUEFTUzogc3RhdHVzIGNvZGUgMzAxIHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5H
LCBPUEVOLCBPUEVOLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDMwMiBy
ZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgT1BFTiwgT1BFTiwgQ09OTkVDVElORywgQ0xP
U0VECitQQVNTOiBzdGF0dXMgY29kZSAzMDMgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJTkcs
IE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRAorUEFTUzogc3RhdHVzIGNvZGUgMzA3IHJl
c3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBDT05ORUNUSU5HLCBDTE9T
RUQKK1BBU1M6IHN0YXR1cyBjb2RlIDQwNCByZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywg
Q0xPU0VELCBDTE9TRUQKK0RPTkUKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVu
dHNvdXJjZS9yZXNvdXJjZXMvc2ltcGxlLWV2ZW50LXN0cmVhbS5hc2lzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVu
dC1zdHJlYW0uYXNpcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZl
bnRzb3VyY2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzIEBACitDb250ZW50LVR5cGU6IHRleHQvZXZlbnQtc3RyZWFtCisKK2RhdGE6
IGhlbGxvCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNl
cy9ldmVudC1zdHJlYW0ucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
ZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2V2ZW50LXN0cmVhbS5waHAJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9ldmVudC1zdHJlYW0u
cGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACis8P3BocAoraGVhZGVyKCJDb250ZW50
LVR5cGU6IHRleHQvZXZlbnQtc3RyZWFtIik7Cis/PgorCis6IGEgY29tbWVudCAoaWdub3JlZCkK
K3RoaXMgbGluZSB3aWxsIGJlIGlnbm9yZWQgc2luY2UgdGhlcmUgaXMgbm8gZmllbGQgYW5kIHRo
ZSBsaW5lIGl0c2VsZiBpcyBub3QgYSBmaWVsZAorZmllbGQ6IGFuIHVua25vd24gZmllbGQgdGhh
dCB3aWxsIGJlIGlnbm9yZWQKKzphbm90aGVyIGNvbW1tZW50CisKK2RhdGEgOiB0aGlzIGxpbmUg
d2lsbCBiZSBpZ25vcmVkIHNpbmNlIHRoZXJlIGlzIGEgc3BhY2UgYWZ0ZXIgZGF0YQorCitkYXRh
CitkYXRhOgorZGF0YQorOiBubyBkaXNwYXRjaCBzaW5jZSBkYXRhIGJ1ZmZlciBpcyBlbXB0eQor
CitkYXRhOiBzaW1wbGUKKworZGF0YTogc3Bhbm5pbmcKK2RhdGE6bXVsdGlwbGUKK2RhdGEKK2Rh
dGE6IGxpbmVzCitkYXRhCisKK2lkOiAxCitkYXRhOiBpZCBpcyAxCisKK2RhdGE6IGlkIGlzIHN0
aWxsIDEKKworaWQKK2RhdGE6IG5vIGlkCisKK2V2ZW50OiBvcGVuCitkYXRhOiBhIG1lc3NhZ2Ug
ZXZlbnQgd2l0aCB0aGUgbmFtZSAib3BlbiIKKworPD9waHAgZmx1c2goKTsgZWNobyAiZGEiOyBm
bHVzaCgpOyA/PgordGE6IGEgbWVzc2FnZSBldmVudCB3aXRoIHRoZSBuYW1lICJtZXNzYWdlIgor
Cis8P3BocCBlY2hvICJkYXRhOiBhIGxpbmUgZW5kaW5nIHdpdGggY3JsZlxyXG4iOyA/PgorZGF0
YTogYSBsaW5lIHdpdGggYSA6IChjb2xvbikKKzw/cGhwIGVjaG8gImRhdGE6IGEgbGluZSB3aXRo
IGEgXHIgKGNhcnJpYWdlIHJldHVybilcbiI7ID8+CisKK3JldHJ5OiAxMDAwMAorOiByZWNvbm5l
Y3Rpb24gdGltZSBzZXQgdG8gMTAgc2Vjb25kcworCityZXRyeTogb25lIHRob3VzYW5kCis6IGln
bm9yZWQgaW52YWxpZCByZWNvbm5lY3Rpb24gdGltZSB2YWx1ZQorCityZXRyeQorOiByZXNldCB0
byB1YSBkZWZhdWx0CisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uv
cmVzb3VyY2VzL3N0YXR1cy1jb2Rlcy5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvc3RhdHVzLWNvZGVzLnBocAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3N0YXR1
cy1jb2Rlcy5waHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKKzw/cGhwCiskc3RhdHVz
X2NvZGUgPSAkX0dFVFsnc3RhdHVzLWNvZGUnXTsKK2hlYWRlcigiSFRUUC8xLjEgJHN0YXR1c19j
b2RlIE9LIik7CisKK3N3aXRjaCAoJHN0YXR1c19jb2RlKSB7CitjYXNlIDIwMDoKKyAgICBoZWFk
ZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9ldmVudC1zdHJlYW0iKTsKKyAgICBlY2hvICJkYXRhOiBo
ZWxsb1xuXG4iOworICAgIGJyZWFrOworY2FzZSAzMDE6CitjYXNlIDMwMjoKK2Nhc2UgMzAzOgor
Y2FzZSAzMDc6CisgICAgJHVyaSA9IHJ0cmltKGRpcm5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10p
LCAnL1xcJykgLiAiL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpcyI7CisgICAgaGVhZGVyKCJMb2Nh
dGlvbjogaHR0cDovLyIgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkdXJpKTsKKyAgICBicmVh
azsKK30KKz8+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291
cmNlcy9yZWNvbm5lY3QucGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
ZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3JlY29ubmVjdC5waHAJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9yZWNvbm5lY3QucGhwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3BocAoraGVhZGVyKCJDb250ZW50LVR5cGU6
IHRleHQvZXZlbnQtc3RyZWFtIik7CiskbGFzdEV2ZW50SWQgPSAkX1NFUlZFUlsnSFRUUF9MQVNU
X0VWRU5UX0lEJ107CisKK2lmICgkbGFzdEV2ZW50SWQpCisgICAgZWNobyAiZGF0YTogJGxhc3RF
dmVudElkXG5cbiI7CitlbHNlIHsKKyAgICBlY2hvICJpZDogNzdcbiI7CisgICAgZWNobyAicmV0
cnk6IDMwMFxuIjsKKyAgICBlY2hvICJkYXRhOiBoZWxsb1xuXG4iOworfQorPz4KSW5kZXg6IExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2JhZC1taW1lLXR5cGUu
YXNpcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jl
c291cmNlcy9iYWQtbWltZS10eXBlLmFzaXMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9iYWQtbWltZS10eXBlLmFzaXMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ29udGVudC1UeXBlOiB0ZXh0L2JvZ3VzCisKK2RhdGE6
IHNob3VsZCBub3QgdHJpZ2dlciBhbiBldmVudApJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2
ZW50c291cmNlLXNpbXBsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUZXN0IEV2ZW50U291cmNlIGlu
IGEgd29ya2VyLgorCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRz
b3VyY2Uvd29ya2Vycy9yZXNvdXJjZXMvc2ltcGxlLXdvcmtlci5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBs
ZS13b3JrZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50
c291cmNlL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZS13b3JrZXIuanMJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIgQEAKK3ZhciBlcyA9IG5ldyBFdmVudFNvdXJjZSgiLi4vLi4vcmVzb3VyY2Vz
L3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpcyIpOworCitlcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAo
ZXZ0KSB7CisgICAgcG9zdE1lc3NhZ2UoZXZ0LmRhdGEpOworICAgIGVzLmNsb3NlKCk7Cit9CisK
K2VzLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgcG9zdE1lc3NhZ2UoImVycm9yIik7Cisg
ICAgZXMuY2xvc2UoKTsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9ldmVudHNvdXJjZS1zaW1wbGUu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uv
d29ya2Vycy9ldmVudHNvdXJjZS1zaW1wbGUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
NyBAQAorPGh0bWw+Cis8Ym9keT4KKzxwPlRlc3QgRXZlbnRTb3VyY2UgaW4gYSB3b3JrZXIuPC9w
PgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobXNnKSB7
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCArPSBtc2cg
KyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgd29ya2VyID0gbmV3IFdvcmtlcigicmVzb3Vy
Y2VzL3NpbXBsZS13b3JrZXIuanMiKTsKKword29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChl
dnQpIHsKKyAgICBpZiAoZXZ0LmRhdGEgPT0gImhlbGxvIikKKyAgICAgICAgbG9nKCJQQVNTIik7
CisgICAgZWxzZQorICAgICAgICBsb2coIkZBSUwiKTsKKyAgICBlbmQoKTsKK30KKword29ya2Vy
Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgbG9nKCJGQUlMIik7CisgICAgZW5kKCk7Cit9
CisKK2Z1bmN0aW9uIGVuZCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVu
dHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZl
bnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMSBAQAorVGVzdCBFdmVudFNvdXJjZSByZWNvbm5lY3QgYWZ0ZXIgZW5kIG9m
IGV2ZW50IHN0cmVhbS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9s
bG93ZWQgYnkgRE9ORS4KKworUEFTUzogc3RhdGUgaXMgQ09OTkVDVElORworUEFTUzogc3RhdGUg
aXMgT1BFTgorUEFTUzogZ290IGxhc3RFdmVudElkICI3NyIKK1BBU1M6IHN0YXRlIGlzIENPTk5F
Q1RJTkcKK1BBU1M6IHN0YXRlIGlzIE9QRU4KK1BBU1M6IExhc3QtRXZlbnQtSUQgaGVhZGVyIHdh
cyBjb3JyZWN0CitQQVNTOiBzdGF0ZSBpcyBDTE9TRUQKK0RPTkUKKwpJbmRleDogTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNv
dXJjZS1iYWQtbWltZS10eXBlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLWJhZC1taW1lLXR5cGUuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MyBAQAorPGh0bWw+Cis8Ym9keT4KKzxwPlRlc3QgRXZlbnRTb3Vy
Y2Ugd2l0aCBhbiBldmVudC1zdHJlYW0gd2l0aCBpbmNvcnJlY3QgbWltZS10eXBlLjwvcD4KKzxk
aXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxi
cj4iOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKK30KKwordmFyIGVzID0gbmV3IEV2ZW50U291cmNlKCJyZXNvdXJjZXMv
YmFkLW1pbWUtdHlwZS5hc2lzIik7CisKK2VzLm9ub3BlbiA9IGZ1bmN0aW9uIChldnQpIHsKKyAg
ICBsb2coIkZBSUw6IGdvdCB1bmV4cGVjdGVkIG9wZW4gZXZlbnQiKTsKKyAgICBlbmQoKTsKK307
CisKK2VzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICBsb2coIkZBSUw6IGdvdCB1
bmV4cGVjdGVkIG1lc3NhZ2UgZXZlbnQiKTsKKyAgICBlbmQoKTsKK307CisKK2VzLm9uZXJyb3Ig
PSBmdW5jdGlvbiAoKSB7CisgICAgaWYgKGVzLnJlYWR5U3RhdGUgPT0gZXMuQ0xPU0VEKQorICAg
ICAgICBsb2coIlBBU1MiKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiRkFJTDogaW52YWxpZCBz
dGF0ZSIpOworICAgIGVuZCgpOworfTsKKworZnVuY3Rpb24gZW5kKCkgeworICAgIGVzLmNsb3Nl
KCk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MTA1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzggQEAKKzIwMDktMDgtMTIgIEFkYW0gQmVyZ2t2
aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIGZvciBFdmVudFNvdXJjZS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk3IAorCisgICAg
ICAgICogZmFzdC9ldmVudHNvdXJjZTogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHNvdXJj
ZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJz
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtY29u
c3RydWN0b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50c291cmNl
L2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvZXZlbnRzb3VyY2U6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2Uv
ZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXBhcnNl
LWV2ZW50LXN0cmVhbS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
ZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFtLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0LWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVu
dHNvdXJjZS1yZWNvbm5lY3QuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVu
dHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0dXMtY29kZS1zdGF0ZXMtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1j
b2RlLXN0YXRlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNl
L3Jlc291cmNlczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNv
dXJjZXMvYmFkLW1pbWUtdHlwZS5hc2lzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2
ZW50c291cmNlL3Jlc291cmNlcy9ldmVudC1zdHJlYW0ucGhwOiBBZGRlZC4KKyAgICAgICAgKiBo
dHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9yZWNvbm5lY3QucGhwOiBBZGRlZC4KKyAg
ICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9zaW1wbGUtZXZlbnQtc3Ry
ZWFtLmFzaXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3Vy
Y2VzL3N0YXR1cy1jb2Rlcy5waHA6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRz
b3VyY2Uvd29ya2VyczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93
b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGh0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vycy9ldmVudHNvdXJjZS1zaW1wbGUuaHRtbDog
QWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL3Jlc291cmNl
czogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL3Jlc291
cmNlcy9zaW1wbGUtd29ya2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKGVzLm9ubWVzc2FnZSk6Cisg
ICAgICAgIChlcy5vbmVycm9yKToKKwogMjAwOS0wOC0xMiAgQXJpeWEgSGlkYXlhdCAgPGFyaXlh
LmhpZGF5YXRAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNv
dXJjZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWNv
bnN0cnVjdG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitUZXN0
IEV2ZW50U291cmNlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNl
cmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuCisKK1BBU1M6IG1pc3Npbmcg
YXJndW1lbnQgdG8gRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0
aW9uIChTeW50YXhFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMpCitQQVNTOiBwYXNzaW5nIGFu
IGVtcHR5IHN0cmluZyB0byB0aGUgRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4g
YW4gZXhjZXB0aW9uIChFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMikKK1BBU1M6
IHBhc3NpbmcgYW4gaW52YWxpZCBVUkwgdG8gdGhlIEV2ZW50U291cmNlIGNvbnN0cnVjdG9yIHJl
c3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAoRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTIpCitET05FCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3Vy
Y2UtYXR0cmlidXRlLWxpc3RlbmVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2Uv
ZXZlbnRzb3VyY2UtYXR0cmlidXRlLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOCBAQAorVGVzdCBFdmVudFNvdXJjZSBhdHRyaWJ1dGUgbGlzdGVuZXIgZnVu
Y3Rpb25hbGl0eS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93
ZWQgYnkgRE9ORS4KKworUEFTUzogYXR0cmlidXRlIGxpc3RlbmVycyBhcmUgaW5pdGlhbGx5IG51
bGwKK1BBU1M6IHNldHRpbmcgYW5kIGdldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtzCitQ
QVNTOiByZXNldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtzCitQQVNTOiBkaXNwYXRjaGlu
ZyBldmVudCBvbiBhbiBFdmVudFNvdXJjZSB0cmlnZ2VycyBhdHRyaWJ1dGUgbGlzdGVuZXIKK0RP
TkUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25z
dHJ1Y3Rvci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2Uv
ZXZlbnRzb3VyY2UtY29uc3RydWN0b3IuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtY29uc3RydWN0b3IuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NSBAQAorPGh0bWw+Cis8Ym9keT4KKzxwPlRlc3QgRXZlbnRTb3VyY2Ug
Y29uc3RydWN0b3IgZnVuY3Rpb25hbGl0eS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1Mg
bWVzc2FnZXMgZm9sbG93ZWQgYnkgRE9ORS48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2Pgor
PHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsKK30KKworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3Ry
eSB7CisgICAgbmV3IEV2ZW50U291cmNlKCk7CisgICAgbG9nKCJGQUlMOiBubyBleGNlcHRpb24g
d2hlbiB0cnlpbmcgdG8gY29uc3RydWN0IGFuIEV2ZW50U291cmNlIHdpdGhvdXQgYXJndW1lbnQi
KTsKK30KK2NhdGNoIChleCkgeworICAgIGxvZygiUEFTUzogbWlzc2luZyBhcmd1bWVudCB0byBF
dmVudFNvdXJjZSBjb25zdHJ1Y3RvciByZXN1bHRlZCBpbiBhbiBleGNlcHRpb24gKCIgKyBleCAr
ICIpIik7Cit9CisKK3RyeSB7CisgICAgbmV3IEV2ZW50U291cmNlKCIiKTsKKyAgICBsb2coIkZB
SUw6IG5vIGV4Y2VwdGlvbiB3aGVuIHBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIHRoZSBFdmVu
dFNvdXJjZSBjb25zdHJ1Y3RvciIpOworfQorY2F0Y2ggKGV4KSB7CisgICAgbG9nKCJQQVNTOiBw
YXNzaW5nIGFuIGVtcHR5IHN0cmluZyB0byB0aGUgRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVz
dWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworfQorCit0cnkgeworICAgIG5l
dyBFdmVudFNvdXJjZSgiaHR0cDovL3dlYnNlcnZlcjplaWdodHkvIik7CisgICAgbG9nKCJGQUlM
OiBubyBleGNlcHRpb24gd2hlbiBwYXNzaW5nIGFuIGludmFsaWQgVVJMIHRvIHRoZSBFdmVudFNv
dXJjZSBjb25zdHJ1Y3RvciIpOworfQorY2F0Y2ggKGV4KSB7CisgICAgbG9nKCJQQVNTOiBwYXNz
aW5nIGFuIGludmFsaWQgVVJMIHRvIHRoZSBFdmVudFNvdXJjZSBjb25zdHJ1Y3RvciByZXN1bHRl
ZCBpbiBhbiBleGNlcHRpb24gKCIgKyBleCArICIpIik7CisgICAgbG9nKCJET05FIik7Cit9CisK
K2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYXR0cmlidXRlLWxpc3RlbmVy
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRz
b3VyY2UtYXR0cmlidXRlLWxpc3RlbmVycy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2
ZW50U291cmNlIGF0dHJpYnV0ZSBsaXN0ZW5lciBmdW5jdGlvbmFsaXR5LiBTaG91bGQgcHJpbnQg
YSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBET05FLjwvcD4KKzxkaXYgaWQ9
InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOwor
fQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKK30KKwordmFyIGVzID0gbmV3IEV2ZW50U291cmNlKCJldmVudHNvdXJjZSIpOwor
CitpZiAoZXMub25vcGVuID09IG51bGwgJiYgZXMub25tZXNzYWdlID09IG51bGwgJiYgZXMub25l
cnJvciA9PSBudWxsKQorICAgIGxvZygiUEFTUzogYXR0cmlidXRlIGxpc3RlbmVycyBhcmUgaW5p
dGlhbGx5IG51bGwiKTsKK2Vsc2UKKyAgICBsb2coIkZBSUw6IGF0dHJpYnV0ZSBsaXN0ZW5lcnMg
YXJlIG5vdCBudWxsIGluaXRpYWxseSIpOworCit2YXIgYSA9IGZ1bmN0aW9uICgpIHt9OworZXMu
b25vcGVuID0gYTsKK2lmIChlcy5vbm9wZW4gPT0gYSkKKyAgICBsb2coIlBBU1M6IHNldHRpbmcg
YW5kIGdldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtzIik7CitlbHNlCisgICAgbG9nKCJG
QUlMOiBzZXR0aW5nL2dldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIGRvZXMgbm90IHdvcmsiKTsK
KwordmFyIGIgPSBmdW5jdGlvbiAoKSB7fTsKK2VzLm9ub3BlbiA9IGI7CitpZiAoZXMub25vcGVu
ID09IGIpCisgICAgbG9nKCJQQVNTOiByZXNldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtz
Iik7CitlbHNlCisgICAgbG9nKCJGQUlMOiByZXNldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIGRv
ZXMgbm90IHdvcmsiKTsKKwordmFyIGZsYWcgPSBmYWxzZTsKK2VzLm9ubWVzc2FnZSA9IGZ1bmN0
aW9uIChlKSB7IGZsYWcgPSAoZS5kYXRhID09ICJoZWxsbyIpOyB9OwordmFyIGV2dCA9IGRvY3Vt
ZW50LmNyZWF0ZUV2ZW50KCJNZXNzYWdlRXZlbnQiKTsKK2V2dC5pbml0TWVzc2FnZUV2ZW50KCJt
ZXNzYWdlIiwgZmFsc2UsIGZhbHNlLCAiaGVsbG8iLCBudWxsLCBudWxsLCBudWxsLCBudWxsKTsK
K2VzLmRpc3BhdGNoRXZlbnQoZXZ0KTsKK2lmIChmbGFnKSB7CisgICAgbG9nKCJQQVNTOiBkaXNw
YXRjaGluZyBldmVudCBvbiBhbiBFdmVudFNvdXJjZSB0cmlnZ2VycyBhdHRyaWJ1dGUgbGlzdGVu
ZXIiKTsKKyAgICBsb2coIkRPTkUiKTsKK30KK2Vsc2UKKyAgICBsb2coIkZBSUw6IGRpc3BhdGNo
aW5nIGV2ZW50IG9uIGFuIEV2ZW50U291cmNlIGRvZXMgbm90IHRyaWdnZXIgYXR0cmlidXRlIGxp
c3RlbmVyIik7CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IGNvbmZpZ3VyZS5hYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25maWd1cmUuYWMJKHJldmlz
aW9uIDQ3MTA1KQorKysgY29uZmlndXJlLmFjCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4
LDE0IEBACiAgICAgICAgICAgICAgIFtdLFtlbmFibGVfZGF0YWJhc2U9InllcyJdKQogQUNfTVNH
X1JFU1VMVChbJGVuYWJsZV9kYXRhYmFzZV0pCiAKKyMgY2hlY2sgd2hldGhlciB0byBidWlsZCB3
aXRoIHNlcnZlci1zZW50IGV2ZW50cyBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIg
dG8gZW5hYmxlIEhUTUw1IHNlcnZlci1zZW50IGV2ZW50cyBzdXBwb3J0XSkKK0FDX0FSR19FTkFC
TEUoZXZlbnRzb3VyY2UsCisgICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1l
dmVudHNvdXJjZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgSFRNTDUg
c2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnQgW2RlZmF1bHQ9eWVzXV0pLAorICAgICAgICAgICAg
ICBbXSxbZW5hYmxlX2V2ZW50c291cmNlPSJ5ZXMiXSkKK0FDX01TR19SRVNVTFQoWyRlbmFibGVf
ZXZlbnRzb3VyY2VdKQorCiAjIGNoZWNrIHdoZXRoZXIgdG8gYnVpbGQgd2l0aCBpY29uIGRhdGFi
YXNlIHN1cHBvcnQKIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgaWNvbiBkYXRh
YmFzZSBzdXBwb3J0XSkKIEFDX0FSR19FTkFCTEUoaWNvbl9kYXRhYmFzZSwKQEAgLTcwMiw2ICs3
MTAsNyBAQAogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlNd
LFt0ZXN0ICIkZW5hYmxlX29mZmxpbmVfd2ViX2FwcGxpY2F0aW9ucyIgPSAieWVzIl0pCiBBTV9D
T05ESVRJT05BTChbRU5BQkxFX0RPTV9TVE9SQUdFXSxbdGVzdCAiJGVuYWJsZV9kb21fc3RvcmFn
ZSIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX0RBVEFCQVNFXSxbdGVzdCAiJGVu
YWJsZV9kYXRhYmFzZSIgPSAieWVzIl0pCitBTV9DT05ESVRJT05BTChbRU5BQkxFX0VWRU5UU09V
UkNFXSxbdGVzdCAiJGVuYWJsZV9ldmVudHNvdXJjZSIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05B
TChbRU5BQkxFX0lDT05EQVRBQkFTRV0sW3Rlc3QgIiRlbmFibGVfaWNvbl9kYXRhYmFzZSIgPSAi
eWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX1hQQVRIXSxbdGVzdCAiJGVuYWJsZV94cGF0
aCIgPSAieWVzIl0pCiBBTV9DT05ESVRJT05BTChbRU5BQkxFX1hTTFRdLFt0ZXN0ICIkZW5hYmxl
X3hzbHQiID0gInllcyJdKQpAQCAtNzU5LDYgKzc2OCw3IEBACiAgSFRNTDUgY2xpZW50LXNpZGUg
c2Vzc2lvbiBhbmQgcGVyc2lzdGVudCBzdG9yYWdlIHN1cHBvcnQgOiAkZW5hYmxlX2RvbV9zdG9y
YWdlCiAgSFRNTDUgY2xpZW50LXNpZGUgZGF0YWJhc2Ugc3RvcmFnZSBzdXBwb3J0ICAgICAgICAg
ICAgICAgOiAkZW5hYmxlX2RhdGFiYXNlCiAgSFRNTDUgcnVieSBzdXBwb3J0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkZW5hYmxlX3J1YnkKKyBIVE1MNSBzZXJ2ZXIt
c2VudCBldmVudHMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfZXZl
bnRzb3VyY2UKICBIVE1MNSB2aWRlbyBlbGVtZW50IHN1cHBvcnQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6ICRlbmFibGVfdmlkZW8KICBJY29uIGRhdGFiYXNlIHN1cHBvcnQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfaWNvbl9kYXRhYmFzZQogIFNo
YXJlZFdvcmtlcnMgc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
JGVuYWJsZV9zaGFyZWRfd29ya2VycwpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNDcxMDUpCisrKyBXZWJL
aXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0w
OC0xMiAgQWRhbSBCZXJna3Zpc3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgRXZlbnRT
b3VyY2UgdG8gdGhlIGJ1aWxkIHNjcmlwdCAoZGVmYXVsdCBvbikuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5NyAKKworICAgICAgICAqIFNjcmlw
dHMvYnVpbGQtd2Via2l0OgorCiAyMDA5LTA4LTExICBKb2huIEdyZWdnICA8am9obm55Z0Bnb29n
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRleDog
V2ViS2l0VG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9v
bHMvU2NyaXB0cy9idWlsZC13ZWJraXQJKHJldmlzaW9uIDQ3MTA1KQorKysgV2ViS2l0VG9vbHMv
U2NyaXB0cy9idWlsZC13ZWJraXQJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAKIG15
ICRtYWtlQXJnczsKIAogbXkgKCR0aHJlZURDYW52YXNTdXBwb3J0LCAkdGhyZWVEUmVuZGVyaW5n
U3VwcG9ydCwgJGNoYW5uZWxNZXNzYWdpbmdTdXBwb3J0LCAkZGF0YWJhc2VTdXBwb3J0LCAkZGF0
YWdyaWRTdXBwb3J0LCAkZG9tU3RvcmFnZVN1cHBvcnQsCi0gICAgJGZpbHRlcnNTdXBwb3J0LCAk
Z2VvbG9jYXRpb25TdXBwb3J0LCAkZ25vbWVLZXlyaW5nU3VwcG9ydCwgJGljb25EYXRhYmFzZVN1
cHBvcnQsCisgICAgJGV2ZW50c291cmNlU3VwcG9ydCwgJGZpbHRlcnNTdXBwb3J0LCAkZ2VvbG9j
YXRpb25TdXBwb3J0LCAkZ25vbWVLZXlyaW5nU3VwcG9ydCwgJGljb25EYXRhYmFzZVN1cHBvcnQs
CiAgICAgJGphdmFTY3JpcHREZWJ1Z2dlclN1cHBvcnQsICRvZmZsaW5lV2ViQXBwbGljYXRpb25T
dXBwb3J0LCAkcnVieVN1cHBvcnQsICRzaGFyZWRXb3JrZXJzU3VwcG9ydCwgCiAgICAgJHN2Z1N1
cHBvcnQsICRzdmdBbmltYXRpb25TdXBwb3J0LCAkc3ZnQXNJbWFnZVN1cHBvcnQsICRzdmdET01P
YmpDQmluZGluZ3NTdXBwb3J0LCAkc3ZnRm9udHNTdXBwb3J0LAogICAgICRzdmdGb3JlaWduT2Jq
ZWN0U3VwcG9ydCwgJHN2Z1VzZVN1cHBvcnQsICR2aWRlb1N1cHBvcnQsICR3ZWJTb2NrZXRzU3Vw
cG9ydCwgJHdtbFN1cHBvcnQsICR3b3JrZXJzU3VwcG9ydCwKQEAgLTc0LDYgKzc0LDkgQEAKICAg
ICB7IG9wdGlvbiA9PiAiZG9tLXN0b3JhZ2UiLCBkZXNjID0+ICJUb2dnbGUgRE9NIFN0b3JhZ2Ug
U3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9ET01fU1RPUkFHRSIsIGRlZmF1bHQg
PT4gMSwgdmFsdWUgPT4gXCRkb21TdG9yYWdlU3VwcG9ydCB9LAogCisgICAgeyBvcHRpb24gPT4g
ImV2ZW50c291cmNlIiwgZGVzYyA9PiAiVG9nZ2xlIHNlcnZlci1zZW50IGV2ZW50cyBzdXBwb3J0
IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0VWRU5UU09VUkNFIiwgZGVmYXVsdCA9PiAxLCB2
YWx1ZSA9PiBcJGV2ZW50c291cmNlU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gImZpbHRl
cnMiLCBkZXNjID0+ICJUb2dnbGUgRmlsdGVycyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAi
RU5BQkxFX0ZJTFRFUlMiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkZmlsdGVyc1N1cHBvcnQg
fSwKIAo=
</data>
<flag name="review"
          id="18819"
          type_id="1"
          status="+"
          setter="sam"
    />
    <flag name="commit-queue"
          id="18881"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34732</attachid>
            <date>2009-08-13 04:49:08 -0700</date>
            <delta_ts>2009-08-13 12:02:47 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>eventsource_r47105_2.patch</filename>
            <type>text/plain</type>
            <size>93320</size>
            <attacher name="Adam Bergkvist">adam.bergkvist</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQ3MTA1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDktMDgt
MTIgIEFkYW0gQmVyZ2t2aXN0ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZGVkIEV2
ZW50U291cmNlIHRvIHRoZSBidWlsZCAoZGVmYXVsdCBvbikuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5NyAKKworICAgICAgICAqIGNvbmZpZ3Vy
ZS5hYzoKKwogMjAwOS0wOC0xMSAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoQnVpbGQgYnJlYWspLgpJbmRleDogY29uZmln
dXJlLmFjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZpZ3VyZS5hYwkocmV2aXNpb24gNDcxMDUpCisrKyBj
b25maWd1cmUuYWMJKHdvcmtpbmcgY29weSkKQEAgLTM0OCw2ICszNDgsMTQgQEAgQUNfQVJHX0VO
QUJMRShkYXRhYmFzZSwKICAgICAgICAgICAgICAgW10sW2VuYWJsZV9kYXRhYmFzZT0ieWVzIl0p
CiBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2RhdGFiYXNlXSkKIAorIyBjaGVjayB3aGV0aGVyIHRv
IGJ1aWxkIHdpdGggc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnQKK0FDX01TR19DSEVDS0lORyhb
d2hldGhlciB0byBlbmFibGUgSFRNTDUgc2VydmVyLXNlbnQgZXZlbnRzIHN1cHBvcnRdKQorQUNf
QVJHX0VOQUJMRShldmVudHNvdXJjZSwKKyAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0t
ZW5hYmxlLWV2ZW50c291cmNlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJs
ZSBIVE1MNSBzZXJ2ZXItc2VudCBldmVudHMgc3VwcG9ydCBbZGVmYXVsdD15ZXNdXSksCisgICAg
ICAgICAgICAgIFtdLFtlbmFibGVfZXZlbnRzb3VyY2U9InllcyJdKQorQUNfTVNHX1JFU1VMVChb
JGVuYWJsZV9ldmVudHNvdXJjZV0pCisKICMgY2hlY2sgd2hldGhlciB0byBidWlsZCB3aXRoIGlj
b24gZGF0YWJhc2Ugc3VwcG9ydAogQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBp
Y29uIGRhdGFiYXNlIHN1cHBvcnRdKQogQUNfQVJHX0VOQUJMRShpY29uX2RhdGFiYXNlLApAQCAt
NzAyLDYgKzcxMCw3IEBAIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0cK
IEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TXSxbdGVzdCAi
JGVuYWJsZV9vZmZsaW5lX3dlYl9hcHBsaWNhdGlvbnMiID0gInllcyJdKQogQU1fQ09ORElUSU9O
QUwoW0VOQUJMRV9ET01fU1RPUkFHRV0sW3Rlc3QgIiRlbmFibGVfZG9tX3N0b3JhZ2UiID0gInll
cyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9EQVRBQkFTRV0sW3Rlc3QgIiRlbmFibGVfZGF0
YWJhc2UiID0gInllcyJdKQorQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9FVkVOVFNPVVJDRV0sW3Rl
c3QgIiRlbmFibGVfZXZlbnRzb3VyY2UiID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJM
RV9JQ09OREFUQUJBU0VdLFt0ZXN0ICIkZW5hYmxlX2ljb25fZGF0YWJhc2UiID0gInllcyJdKQog
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV9YUEFUSF0sW3Rlc3QgIiRlbmFibGVfeHBhdGgiID0gInll
cyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9YU0xUXSxbdGVzdCAiJGVuYWJsZV94c2x0IiA9
ICJ5ZXMiXSkKQEAgLTc1OSw2ICs3NjgsNyBAQCBGZWF0dXJlczoKICBIVE1MNSBjbGllbnQtc2lk
ZSBzZXNzaW9uIGFuZCBwZXJzaXN0ZW50IHN0b3JhZ2Ugc3VwcG9ydCA6ICRlbmFibGVfZG9tX3N0
b3JhZ2UKICBIVE1MNSBjbGllbnQtc2lkZSBkYXRhYmFzZSBzdG9yYWdlIHN1cHBvcnQgICAgICAg
ICAgICAgICA6ICRlbmFibGVfZGF0YWJhc2UKICBIVE1MNSBydWJ5IHN1cHBvcnQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICRlbmFibGVfcnVieQorIEhUTUw1IHNlcnZl
ci1zZW50IGV2ZW50cyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9l
dmVudHNvdXJjZQogIEhUTUw1IHZpZGVvIGVsZW1lbnQgc3VwcG9ydCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogJGVuYWJsZV92aWRlbwogIEljb24gZGF0YWJhc2Ugc3VwcG9ydCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJGVuYWJsZV9pY29uX2RhdGFiYXNlCiAg
U2hhcmVkV29ya2VycyBzdXBwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiAkZW5hYmxlX3NoYXJlZF93b3JrZXJzCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NzEwNSkK
KysrIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDA5LTA4LTEyICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29u
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRlZCBFTkFCTEVfRVZFTlRTT1VSQ0UgZmxhZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk3CisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9G
ZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKwogMjAwOS0wOC0xMiAgQmFsYXpzIEtlbGVtZW4gIDxr
ZWxlbWVuLmJhbGF6cy4zQHN0dWQudS1zemVnZWQuaHU+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QXJpeWEgSGlkYXlhdC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1
cmVEZWZpbmVzLnhjY29uZmlnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0NvbmZpZ3Vy
YXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCShyZXZpc2lvbiA0NzEwNSkKKysrIEphdmFT
Y3JpcHRDb3JlL0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORyA9IEVOQUJM
RV9DSEFOTkUKIEVOQUJMRV9EQVRBQkFTRSA9IEVOQUJMRV9EQVRBQkFTRTsKIEVOQUJMRV9EQVRB
R1JJRCA9IEVOQUJMRV9EQVRBR1JJRDsKIEVOQUJMRV9ET01fU1RPUkFHRSA9IEVOQUJMRV9ET01f
U1RPUkFHRTsKK0VOQUJMRV9FVkVOVFNPVVJDRSA9IEVOQUJMRV9FVkVOVFNPVVJDRTsKIEVOQUJM
RV9GSUxURVJTID0gOwogRU5BQkxFX0dFT0xPQ0FUSU9OID0gOwogRU5BQkxFX0lDT05EQVRBQkFT
RSA9IEVOQUJMRV9JQ09OREFUQUJBU0U7CkBAIC01OCw0ICs1OSw0IEBAIEVOQUJMRV9XT1JLRVJT
ID0gRU5BQkxFX1dPUktFUlM7CiBFTkFCTEVfWFBBVEggPSBFTkFCTEVfWFBBVEg7CiBFTkFCTEVf
WFNMVCA9IEVOQUJMRV9YU0xUOwogCi1GRUFUVVJFX0RFRklORVMgPSAkKEVOQUJMRV8zRF9SRU5E
RVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HKSAkKEVOQUJMRV9EQVRBQkFTRSkgJChF
TkFCTEVfREFUQUdSSUQpICQoRU5BQkxFX0RPTV9TVE9SQUdFKSAkKEVOQUJMRV9GSUxURVJTKSAk
KEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9KQVZB
U0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5F
X1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JVQlkpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJT
KSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19J
TUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMp
ICQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVf
VklERU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktF
UlMpICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9YU0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQo
RU5BQkxFXzNEX1JFTkRFUklORykgJChFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcpICQoRU5BQkxF
X0RBVEFCQVNFKSAkKEVOQUJMRV9EQVRBR1JJRCkgJChFTkFCTEVfRE9NX1NUT1JBR0UpICQoRU5B
QkxFX0VWRU5UU09VUkNFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9HRU9MT0NBVElPTikg
JChFTkFCTEVfSUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVO
QUJMRV9OT1RJRklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQo
RU5BQkxFX1JVQlkpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQoRU5B
QkxFX1NWR19BTklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZHX0RP
TV9PQkpDX0JJTkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JFSUdO
X09CSkVDVCkgJChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dFQl9T
T0NLRVRTKSAkKEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hQQVRIKSAk
KEVOQUJMRV9YU0xUKTsKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NzEwNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMDktMDgtMTIgIEFkYW0gQmVyZ2t2aXN0
ICA8YWRhbS5iZXJna3Zpc3RAZXJpY3Nzb24uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFdmVu
dFNvdXJjZSBvYmplY3QgdGhhdCBlbmFibGVzCisgICAgICAgIHNlcnZlci1zZW50IGV2ZW50cyBm
cm9tIEhUTUw1LgorICAgICAgICBodHRwOi8vZGV2LnczLm9yZy9odG1sNS9ldmVudHNvdXJjZS8K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTk3IAor
CisgICAgICAgIFRlc3RzOiBmYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1s
aXN0ZW5lcnMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJj
ZS1jb25zdHJ1Y3Rvci5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL2V2ZW50c291cmNl
L2V2ZW50c291cmNlLWJhZC1taW1lLXR5cGUuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0
cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0uaHRtbAorICAgICAg
ICAgICAgICAgaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QuaHRt
bAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0
dXMtY29kZS1zdGF0ZXMuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9ldmVudHNvdXJj
ZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS5odG1sCisKKyAgICAgICAgKiBDb25maWd1cmF0
aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZzoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5j
cHA6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OmV2ZW50U291cmNlKToKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OkpTRXZl
bnRTb3VyY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RFdmVudFNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OmdldENv
bnN0cnVjdERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1
Y3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
cjo6Y2xhc3NJbmZvKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9t
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlOjptYXJrQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6SlNFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcik6
CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29yZTo6dG9FdmVudFRhcmdldCk6CisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTV29ya2VyQ29udGV4dDo6ZXZlbnRTb3VyY2UpOgorICAgICAgICAqIGRvbS9FdmVudE5hbWVz
Lmg6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50VGFyZ2V0Ojp0b0V2ZW50U291cmNlKToKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXQuaDoK
KyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogcGFnZS9FdmVudFNvdXJj
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OkV2ZW50U291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjp+RXZlbnRTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmNvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRTb3VyY2U6OmVuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnNj
aGVkdWxlUmVjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpyZWNvbm5l
Y3RUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjp1cmwpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OnJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRTb3VyY2U6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjph
ZGRFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpyZW1vdmVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRjaEV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRSZWNlaXZlUmVzcG9uc2Up
OgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50U291cmNlOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291
cmNlOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJj
ZTo6cGFyc2VFdmVudFN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cGFy
c2VFdmVudFN0cmVhbUxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRpc3Bh
dGNoR2VuZXJpY0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpkaXNwYXRj
aE1lc3NhZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c3RvcCk6Cisg
ICAgICAgICogcGFnZS9FdmVudFNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50U291cmNlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6Oik6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6c2V0T25vcGVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50U291cmNlOjpvbm9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6
OnNldE9ubWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6b25tZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpzZXRPbmVycm9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50U291cmNlOjpvbmVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
U291cmNlOjp0b0V2ZW50U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50U291cmNlOjpl
dmVudExpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudFNvdXJjZTo6cmVmRXZlbnRU
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRTb3VyY2U6OmRlcmVmRXZlbnRUYXJnZXQp
OgorICAgICAgICAqIHBhZ2UvRXZlbnRTb3VyY2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiB3b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDA5LTA4LTEyICBBcml5YSBIaWRheWF0ICA8YXJp
eWEuaGlkYXlhdEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0
aGVyLgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291cmNlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5jcHAJKHJldmlzaW9uIDQ3MTA1KQorKysgV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRl
ICJKU0Vycm9yRXZlbnQuY3BwIgogI2luY2x1ZGUgIkpTRXZlbnQuY3BwIgogI2luY2x1ZGUgIkpT
RXZlbnRFeGNlcHRpb24uY3BwIgorI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2UuY3BwIgogI2luY2x1
ZGUgIkpTRmlsZS5jcHAiCiAjaW5jbHVkZSAiSlNGaWxlTGlzdC5jcHAiCiAjaW5jbHVkZSAiSlNI
aXN0b3J5LmNwcCIKSW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDQ3MTA1KQorKysgV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcg
QEAgRE9NX0NMQVNTRVMgPSBcCiAgICAgRXZlbnQgXAogICAgIEV2ZW50RXhjZXB0aW9uIFwKICAg
ICBFdmVudExpc3RlbmVyIFwKKyAgICBFdmVudFNvdXJjZSBcCiAgICAgRXZlbnRUYXJnZXQgXAog
ICAgIEZpbGUgXAogICAgIEZpbGVMaXN0IFwKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDcxMDUpCisr
KyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNiArMjQyLDcg
QEAgSURMX0JJTkRJTkdTICs9IFwKIAlXZWJDb3JlL3BhZ2UvQ29vcmRpbmF0ZXMuaWRsIFwKIAlX
ZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmlkbCBcCiAJV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5p
ZGwgXAorCVdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5pZGwgXAogCVdlYkNvcmUvcGFnZS9HZW9s
b2NhdGlvbi5pZGwgXAogCVdlYkNvcmUvcGFnZS9HZW9wb3NpdGlvbi5pZGwgXAogCVdlYkNvcmUv
cGFnZS9IaXN0b3J5LmlkbCBcCkBAIC0zNDUsNiArMzQ2LDkgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudExpc3RlbmVyLmggXAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0
cnVjdG9yLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0
b3IuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3VzdG9tLmNwcCBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0V2ZW50VGFyZ2V0LmggXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNHZW9sb2NhdGlv
bkN1c3RvbS5jcHAgXApAQCAtMTI3MCw2ICsxMjc0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmggXAogCVdlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwIFwKIAlXZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggXAorCVdlYkNvcmUvcGFnZS9F
dmVudFNvdXJjZS5jcHAgXAorCVdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5oIFwKIAlXZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxl
ci5oIFwKIAlXZWJDb3JlL3BhZ2UvRm9jdXNEaXJlY3Rpb24uaCBcCkBAIC0yMTIyLDYgKzIxMjgs
MjAgQEAgd2ViY29yZV9jcHBmbGFncyArPSAtREVOQUJMRV9EQVRBQkFTRT0wCiBlbmRpZiAjIEVO
RCBFTkFCTEVfREFUQUJBU0UKIAogIyAtLS0tCisjIEhUTUw1IHNlcnZlci1zZW50IGV2ZW50cwor
IyAtLS0tCitpZiAhRU5BQkxFX0VWRU5UU09VUkNFCitnbG9iYWxfY3BwZmxhZ3MgKz0gLURFTkFC
TEVfRVZFTlRTT1VSQ0U9MAorZW5kaWYKKworaWYgRU5BQkxFX0VWRU5UU09VUkNFCitGRUFUVVJF
X0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfRVZFTlRTT1VSQ0U9MQorCit3ZWJjb3JlX2Nw
cGZsYWdzICs9IFwKKwktREVOQUJMRV9FVkVOVFNPVVJDRT0xCitlbmRpZiAjIEVOQUJMRV9FVkVO
VFNPVVJDRQorCisjIC0tLS0KICMgSFRNTDUgY2xpZW50LXNpZGUgc2Vzc2lvbiBhbmQgcGVyc2lz
dGVudCBzdG9yYWdlCiAjIC0tLS0KIGlmIEVOQUJMRV9ET01fU1RPUkFHRQpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biA0NzEwNSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2
ICsxMDYsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU0lOR0xFX1RIUkVBREVECiAKICFj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0uKTogREVGSU5FUyAr
PSBFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxF
X0RBVEFCQVNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9EQVRBQkFTRT0xCishY29udGFpbnMoREVG
SU5FUywgRU5BQkxFX0VWRU5UU09VUkNFPS4pOiBERUZJTkVTICs9IEVOQUJMRV9FVkVOVFNPVVJD
RT0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUz0u
KTogREVGSU5FUyArPSBFTkFCTEVfT0ZGTElORV9XRUJfQVBQTElDQVRJT05TPTEKICFjb250YWlu
cyhERUZJTkVTLCBFTkFCTEVfRE9NX1NUT1JBR0U9Lik6IERFRklORVMgKz0gRU5BQkxFX0RPTV9T
VE9SQUdFPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSUNPTkRBVEFCQVNFPS4pOiBERUZJ
TkVTICs9IEVOQUJMRV9JQ09OREFUQUJBU0U9MQpAQCAtNDMxLDYgKzQzMiw3IEBAIElETF9CSU5E
SU5HUyArPSBcCiAgICAgcGFnZS9Db29yZGluYXRlcy5pZGwgXAogICAgIHBhZ2UvRE9NU2VsZWN0
aW9uLmlkbCBcCiAgICAgcGFnZS9ET01XaW5kb3cuaWRsIFwKKyAgICBwYWdlL0V2ZW50U291cmNl
LmlkbCBcCiAgICAgcGFnZS9HZW9sb2NhdGlvbi5pZGwgXAogICAgIHBhZ2UvR2VvcG9zaXRpb24u
aWRsIFwKICAgICBwYWdlL0hpc3RvcnkuaWRsIFwKQEAgLTY0Niw2ICs2NDgsOCBAQCBTT1VSQ0VT
ICs9IFwKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcCBcCiAgICAgYmluZGlu
Z3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNFdmVudEN1c3Rv
bS5jcHAgXAorICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAgXAor
ICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwIFwKICAgICBiaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0LmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3Rv
bS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb24uY3BwIFwKQEAgLTEw
NzcsNiArMTA4MSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvTmF2aWdhdG9yQmFzZS5jcHAg
XAogICAgIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIFwKICAgICBwYWdlL0V2ZW50SGFuZGxlci5j
cHAgXAorICAgIHBhZ2UvRXZlbnRTb3VyY2UuY3BwIFwKICAgICBwYWdlL0ZvY3VzQ29udHJvbGxl
ci5jcHAgXAogICAgIHBhZ2UvRnJhbWUuY3BwIFwKICAgICBwYWdlL0ZyYW1lVHJlZS5jcHAgXApA
QCAtMTMyNCw2ICsxMzI5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uaCBcCiAgICAgYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5oIFwKICAg
ICBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuaCBcCisgICAgYmluZGluZ3MvanMvSlNFdmVu
dFNvdXJjZUNvbnN0cnVjdG9yLmggXAogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaCBc
CiAgICAgYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmggXAogICAgIGJpbmRpbmdzL2pzL0pT
SFRNTEFsbENvbGxlY3Rpb24uaCBcCkBAIC0xNzQ5LDYgKzE3NTUsNyBAQCBIRUFERVJTICs9IFwK
ICAgICBwYWdlL0RPTVdpbmRvdy5oIFwKICAgICBwYWdlL0RyYWdDb250cm9sbGVyLmggXAogICAg
IHBhZ2UvRXZlbnRIYW5kbGVyLmggXAorICAgIHBhZ2UvRXZlbnRTb3VyY2UuaCBcCiAgICAgcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuaCBcCiAgICAgcGFnZS9GcmFtZS5oIFwKICAgICBwYWdlL0ZyYW1l
VHJlZS5oIFwKQEAgLTI0MjcsNiArMjQzNCwxMCBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
REFUQUdSSUQ9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9E
QVRBR1JJRD0xCiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9FVkVOVFNPVVJDRT0xKSB7
CisgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX0VWRU5UU09VUkNFPTEK
K30KKwogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NRTElURT0xKSB7CiAgICAgIXN5c3RlbS1z
cWxpdGU6ZXhpc3RzKCAkJHtTUUxJVEUzU1JDRElSfS9zcWxpdGUzLmMgKSB7CiAgICAgICAgICAg
ICAjIEJ1aWxkIHNxbGl0ZTMgaW50byBXZWJDb3JlIGZyb20gc291cmNlCkluZGV4OiBXZWJDb3Jl
L0NvbmZpZ3VyYXRpb25zL0ZlYXR1cmVEZWZpbmVzLnhjY29uZmlnCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQ29uZmlndXJhdGlvbnMvRmVhdHVyZURlZmluZXMueGNjb25maWcJKHJldmlzaW9uIDQ3
MTA1KQorKysgV2ViQ29yZS9Db25maWd1cmF0aW9ucy9GZWF0dXJlRGVmaW5lcy54Y2NvbmZpZwko
d29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBFTkFCTEVfQ0hBTk5FTF9NRVNTQUdJTkcg
PSBFTkFCTEVfQ0hBTk5FCiBFTkFCTEVfREFUQUJBU0UgPSBFTkFCTEVfREFUQUJBU0U7CiBFTkFC
TEVfREFUQUdSSUQgPSBFTkFCTEVfREFUQUdSSUQ7CiBFTkFCTEVfRE9NX1NUT1JBR0UgPSBFTkFC
TEVfRE9NX1NUT1JBR0U7CitFTkFCTEVfRVZFTlRTT1VSQ0UgPSBFTkFCTEVfRVZFTlRTT1VSQ0U7
CiBFTkFCTEVfRklMVEVSUyA9IDsKIEVOQUJMRV9HRU9MT0NBVElPTiA9IDsKIEVOQUJMRV9JQ09O
REFUQUJBU0UgPSBFTkFCTEVfSUNPTkRBVEFCQVNFOwpAQCAtNjAsNCArNjEsNCBAQCBFTkFCTEVf
V09SS0VSUyA9IEVOQUJMRV9XT1JLRVJTOwogRU5BQkxFX1hQQVRIID0gRU5BQkxFX1hQQVRIOwog
RU5BQkxFX1hTTFQgPSBFTkFCTEVfWFNMVDsKIAotRkVBVFVSRV9ERUZJTkVTID0gJChFTkFCTEVf
M0RfQ0FOVkFTKSAkKEVOQUJMRV8zRF9SRU5ERVJJTkcpICQoRU5BQkxFX0NIQU5ORUxfTUVTU0FH
SU5HKSAkKEVOQUJMRV9EQVRBQkFTRSkgJChFTkFCTEVfREFUQUdSSUQpICQoRU5BQkxFX0RPTV9T
VE9SQUdFKSAkKEVOQUJMRV9GSUxURVJTKSAkKEVOQUJMRV9HRU9MT0NBVElPTikgJChFTkFCTEVf
SUNPTkRBVEFCQVNFKSAkKEVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSKSAkKEVOQUJMRV9OT1RJ
RklDQVRJT05TKSAkKEVOQUJMRV9PRkZMSU5FX1dFQl9BUFBMSUNBVElPTlMpICQoRU5BQkxFX1JV
QlkpICQoRU5BQkxFX1NIQVJFRF9XT1JLRVJTKSAkKEVOQUJMRV9TVkcpICQoRU5BQkxFX1NWR19B
TklNQVRJT04pICQoRU5BQkxFX1NWR19BU19JTUFHRSkgJChFTkFCTEVfU1ZHX0RPTV9PQkpDX0JJ
TkRJTkdTKSAkKEVOQUJMRV9TVkdfRk9OVFMpICQoRU5BQkxFX1NWR19GT1JFSUdOX09CSkVDVCkg
JChFTkFCTEVfU1ZHX1VTRSkgJChFTkFCTEVfVklERU8pICQoRU5BQkxFX1dFQl9TT0NLRVRTKSAk
KEVOQUJMRV9XTUwpICQoRU5BQkxFX1dPUktFUlMpICQoRU5BQkxFX1hQQVRIKSAkKEVOQUJMRV9Y
U0xUKTsKK0ZFQVRVUkVfREVGSU5FUyA9ICQoRU5BQkxFXzNEX0NBTlZBUykgJChFTkFCTEVfM0Rf
UkVOREVSSU5HKSAkKEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORykgJChFTkFCTEVfREFUQUJBU0Up
ICQoRU5BQkxFX0RBVEFHUklEKSAkKEVOQUJMRV9ET01fU1RPUkFHRSkgJChFTkFCTEVfRVZFTlRT
T1VSQ0UpICQoRU5BQkxFX0ZJTFRFUlMpICQoRU5BQkxFX0dFT0xPQ0FUSU9OKSAkKEVOQUJMRV9J
Q09OREFUQUJBU0UpICQoRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIpICQoRU5BQkxFX05PVElG
SUNBVElPTlMpICQoRU5BQkxFX09GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykgJChFTkFCTEVfUlVC
WSkgJChFTkFCTEVfU0hBUkVEX1dPUktFUlMpICQoRU5BQkxFX1NWRykgJChFTkFCTEVfU1ZHX0FO
SU1BVElPTikgJChFTkFCTEVfU1ZHX0FTX0lNQUdFKSAkKEVOQUJMRV9TVkdfRE9NX09CSkNfQklO
RElOR1MpICQoRU5BQkxFX1NWR19GT05UUykgJChFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNUKSAk
KEVOQUJMRV9TVkdfVVNFKSAkKEVOQUJMRV9WSURFTykgJChFTkFCTEVfV0VCX1NPQ0tFVFMpICQo
RU5BQkxFX1dNTCkgJChFTkFCTEVfV09SS0VSUykgJChFTkFCTEVfWFBBVEgpICQoRU5BQkxFX1hT
TFQpOwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA0
NzEwNSkKKysrIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NzksNiArMjc3OSw1NCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXEpTRXZlbnRTb3VyY2UuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxl
Q29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxG
aWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJ
CQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiIN
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19DYWly
b3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJ
PFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJS
ZWxlYXNlX0NhaXJvfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJ
CQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkv
Pg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcSlNFdmVudFNvdXJjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3RO
YW1lKVxEZXJpdmVkU291cmNlc1xKU0ZpbGUuY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KQEAgLTE2ODEzLDYgKzE2ODYxLDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcRXZlbnRTb3VyY2UuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxF
dmVudFNvdXJjZS5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGFnZVxGb2N1c0NvbnRyb2xsZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxl
Pg0KQEAgLTI4Nzc1LDYgKzI4ODMxLDE4IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8
RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU0V2ZW50U291cmNlQ29u
c3RydWN0b3IuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oIg0K
KwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGJpbmRpbmdzXGpzXEpTRXZlbnRTb3VyY2VDdXN0b20uY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0Zp
bGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRXZl
bnRUYXJnZXQuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDQ3MTA1KQorKysgV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ0
MDIsNiArNDQwMiwxMyBAQAogCQlERDc2M0JCMjA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5k
eWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERE
NzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAvKiBsaWJ4bWwyLmR5bGliICovOyB9OwogCQlERDdDREYy
NTBBMjNDRjk4MDAwNjk5MjggLyogQ1NTVW5rbm93blJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MEU2Q0NFMEExOTg5Q0EwMDdGQjhDNSAvKiBD
U1NVbmtub3duUnVsZS5oICovOyB9OwogCQlEREU2M0VENTBCN0Q0NUE4MDAyMjY5OTggLyogRE9N
VGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5MzNBMTQ3NTBCN0QxQkFGMDBBNTNGRkQgLyogRE9NVGV4dEV2ZW50LmggKi87IH07CisJCUUw
RkVGMzcyQjE3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTBGRUYzNzFCMTdDNTNFQUMxQzFGQkVFIC8q
IEV2ZW50U291cmNlLmggKi87IH07CisJCUUwRkVGMzcyQjI3QzUzRUFDMUMxRkJFRSAvKiBFdmVu
dFNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMEZFRjM3MUIyN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuY3BwICovOyB9OworCQlF
MEZFRjM3MkIzN0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTBGRUYzNzFCMzdDNTNFQUMxQzFGQkVF
IC8qIEpTRXZlbnRTb3VyY2UuaCAqLzsgfTsKKwkJRTBGRUYzNzJCNDdDNTNFQUMxQzFGQkVFIC8q
IEpTRXZlbnRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTBGRUYzNzFCNDdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2UuY3BwICov
OyB9OworCQlFMEZFRjM3MkI1N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3
MUI1N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgKi87IH07CisJCUUw
RkVGMzcyQjY3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUwRkVGMzcxQjY3QzUz
RUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCAqLzsgfTsKKwkJRTBGRUYz
NzJCNzdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMEZFRjM3MUI3N0M1M0VB
QzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJRTEwNzQw
MEQwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEwNzQwMEIwRTc3QkRDMDAwMzNBRjI0
IC8qIEpTTWVzc2FnZUNoYW5uZWwuY3BwICovOyB9OwogCQlFMTA3NDAwRTBFNzdCREMwMDAzM0FG
MjQgLyogSlNNZXNzYWdlQ2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTEwNzQwMEMwRTc3QkRDMDAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5u
ZWwuaCAqLzsgfTsKIAkJRTEwNzQzMjQwRTc4MzU4MzAwMzNBRjI0IC8qIEpTTWVzc2FnZUNoYW5u
ZWxDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTA3NDMyMzBFNzgzNTgzMDAzM0FGMjQgLyogSlNNZXNzYWdlQ2hhbm5lbENvbnN0
cnVjdG9yLmNwcCAqLzsgfTsKQEAgLTkzMjcsNiArOTMzNCwxNCBAQAogCQlEQjIzQzJDQTBBNTA4
RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEluZGVudE91dGRlbnRDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUREMDVGRTBCMEI4QkEzQzYwMDlBQ0RGRSAvKiBXZWJDb3JlT2JqQ0V4dHJh
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZU9iakNFeHRyYXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREQ3NjNCQjEwOTkyQzJDOTAwNzQwQjhF
IC8qIGxpYnhtbDIuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnhtbDIuZHlsaWI7
IHBhdGggPSAvdXNyL2xpYi9saWJ4bWwyLmR5bGliOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4i
OyB9OworCQlFMEZFRjM3MUIwN0M1M0VBQzFDMUZCRUUgLyogRXZlbnRTb3VyY2UuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IEV2ZW50U291cmNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTBGRUYzNzFCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV2ZW50U291cmNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUwRkVGMzcxQjI3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFNvdXJjZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUwRkVGMzcxQjM3QzUzRUFDMUMxRkJFRSAv
KiBKU0V2ZW50U291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRXZl
bnRTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTBGRUYzNzFCNDdDNTNF
QUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNFdmVudFNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUUwRkVGMzcxQjU3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRTb3VyY2VDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMEZFRjM3MUI2N0M1M0VBQzFDMUZC
RUUgLyogSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFMEZFRjM3MUI3N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZUNvbnN0
cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRXZlbnRT
b3VyY2VDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDc0
MDBCMEU3N0JEQzAwMDMzQUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZUNoYW5uZWwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlFMTA3NDAwQzBFNzdCREMwMDAzM0FGMjQgLyogSlNNZXNzYWdl
Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01lc3NhZ2VDaGFu
bmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMDc0MzIzMEU3ODM1ODMwMDMz
QUYyNCAvKiBKU01lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNjA4LDYgKzEwNjIzLDkgQEAKIAkJCQkxQUYz
MjY3NzBENzhCOTQ0MDA2OEYwQzQgLyogRWRpdG9yQ2xpZW50LmggKi8sCiAJCQkJOTNDMDlBODAw
QjA2NEYwMDAwNUFCRDREIC8qIEV2ZW50SGFuZGxlci5jcHAgKi8sCiAJCQkJOTNDMDlBNTIwQjA2
NERCMzAwNUFCRDREIC8qIEV2ZW50SGFuZGxlci5oICovLAorCQkJCUUwRkVGMzcxQjI3QzUzRUFD
MUMxRkJFRSAvKiBFdmVudFNvdXJjZS5jcHAgKi8sCisJCQkJRTBGRUYzNzFCMTdDNTNFQUMxQzFG
QkVFIC8qIEV2ZW50U291cmNlLmggKi8sCisJCQkJRTBGRUYzNzFCMDdDNTNFQUMxQzFGQkVFIC8q
IEV2ZW50U291cmNlLmlkbCAqLywKIAkJCQkxNDk5M0JFMzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9j
dXNDb250cm9sbGVyLmNwcCAqLywKIAkJCQkxNDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9j
dXNDb250cm9sbGVyLmggKi8sCiAJCQkJMDYyMjg3ODMwQjREQjMyMjAwMEMzNERGIC8qIEZvY3Vz
RGlyZWN0aW9uLmggKi8sCkBAIC0xMzY1OSw2ICsxMzY3Nyw4IEBACiAJCQkJQkNCRkI1M0IwRENE
MjlDRjAwMTlCM0U1IC8qIEpTRE9NV2luZG93U2hlbGwuaCAqLywKIAkJCQk5M0I3MEQ0RDA5RUIw
QzdDMDA5RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmNwcCAqLywKIAkJCQk5M0I3MEQ0RTA5RUIw
QzdDMDA5RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmggKi8sCisJCQkJRTBGRUYzNzFCNjdDNTNF
QUMxQzFGQkVFIC8qIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oICovLAorCQkJCUUwRkVGMzcx
Qjc3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuY3BwICovLAogCQkJ
CUJDNjA5MDFFMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0LmNwcCAqLywKIAkJCQlC
QzYwOTAxRDBFOTFCOEVDMDAwQzY4QjUgLyogSlNFdmVudFRhcmdldC5oICovLAogCQkJCTkzNTBF
NzBDMEU4NzUwMEIwMDE4OUZGRiAvKiBKU0hUTUxBbGxDb2xsZWN0aW9uLmNwcCAqLywKQEAgLTEz
ODI0LDYgKzEzODQ0LDcgQEAKIAkJCQk2NTJGQkJCQjBERTI3Q0I2MDAwMUQzODYgLyogSlNET01X
aW5kb3dDdXN0b20uaCAqLywKIAkJCQlCQzJFRDU1NDBDNkI5QkQzMDA5MjBCRkYgLyogSlNFbGVt
ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQ0VGQUY0RDBDMzE3RTY5MDBGQTgxRjYgLyogSlNFdmVu
dEN1c3RvbS5jcHAgKi8sCisJCQkJRTBGRUYzNzFCNTdDNTNFQUMxQzFGQkVFIC8qIEpTRXZlbnRT
b3VyY2VDdXN0b20uY3BwICovLAogCQkJCUZFODBEN0E2MEU5QzFFRDIwMDBENkY3NSAvKiBKU0dl
b2xvY2F0aW9uQ3VzdG9tLmNwcCAqLywKIAkJCQlCQ0U3QjE5MjBENEU4Njk2MDA3NUE1MzkgLyog
SlNIaXN0b3J5Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzRFREVGMzBDMDhGM0ZCMDA3RURENDkgLyog
SlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAgKi8sCkBAIC0xMzk1Nyw2ICsxMzk3OCw4IEBA
CiAJCQkJQkM1QTg2QjQwQzMzNjdFODAwRUVBNjQ5IC8qIEpTRE9NU2VsZWN0aW9uLmggKi8sCiAJ
CQkJMTQwM0JBMEIwOUVCMThDNzAwNzk3QzdGIC8qIEpTRE9NV2luZG93LmNwcCAqLywKIAkJCQkx
NDAzQkEwRTA5RUIxOEY4MDA3OTdDN0YgLyogSlNET01XaW5kb3cuaCAqLywKKwkJCQlFMEZFRjM3
MUIzN0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJjZS5oICovLAorCQkJCUUwRkVGMzcxQjQ3
QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlLmNwcCAqLywKIAkJCQlCQzk0RDE0QzBDMjc1
QzY4MDA2QkM2MTcgLyogSlNIaXN0b3J5LmNwcCAqLywKIAkJCQlCQzk0RDE0RDBDMjc1QzY4MDA2
QkM2MTcgLyogSlNIaXN0b3J5LmggKi8sCiAJCQkJQkNFMUM0MzkwRDk4MzBEMzAwM0IwMkYyIC8q
IEpTTG9jYXRpb24uY3BwICovLApAQCAtMTU5MjIsNiArMTU5NDUsNyBAQAogCQkJCTkzNUZCQzQ1
MDlCQTAwQjkwMEUyMzBCMSAvKiBFdmVudExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
Q0ExOUUxNjBEQzI1NUNBMDA2NUE5OTQgLyogRXZlbnRMb29wLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5Mzk4ODVDNDA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTBGRUYzNzJCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMTJFREI3QjBCMzA4QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNjBEOEYzMEQyQTExRTAwMEI5OTE4RiAvKiBFeGNlcHRpb25CYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVGQkNGMjA5QkExNDNCMDBFMjMwQjEgLyogRXhjZXB0
aW9uQ29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjIwNyw2ICsxNjIzMSw4IEBACiAJCQkJMTRF
ODM3OEUwOUY4NUQ0RjAwQjg1QUU0IC8qIEpTRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NjBEOUMwMEQyQTI2OUEwMEI5OTE4RiAvKiBKU0V2ZW50RXhjZXB0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5M0I3MEQ2QTA5RUIwQzdDMDA5RDg0NjggLyogSlNFdmVudExpc3RlbmVyLmggaW4g
SGVhZGVycyAqLywKKwkJCQlFMEZFRjM3MkIzN0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJj
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTBGRUYzNzJCNjdDNTNFQUMxQzFGQkVFIC8qIEpTRXZl
bnRTb3VyY2VDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2MDkwMUYwRTkxQjhF
QzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDBGMDE1
MEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDBGMDE3
MEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTE3OTgy
LDYgKzE4MDA4LDcgQEAKIAkJCQk5M0MwOUE3RjBCMDY0RUVGMDA1QUJENEQgLyogRXZlbnRIYW5k
bGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUNBMTlFMDUwREMyNTU5NTAwNjVBOTk0IC8q
IEV2ZW50TG9vcE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzOTg4NUMzMDhCN0UzRDEwMEU3
MDdDNCAvKiBFdmVudE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUwRkVGMzcyQjI3QzUz
RUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTJFREJF
QTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkM2MEQ4RjIwRDJBMTFFMDAwQjk5MThGIC8qIEV4Y2VwdGlvbkJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTM4MzFCNTcwRDA4N0Q2MDAwRTVDOTg0IC8qIEV4Y2VwdGlvbkNvZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0xODI4OCw2ICsxODMxNSw5IEBACiAJCQkJQkNFRkFGNEUwQzMxN0U2
OTAwRkE4MUY2IC8qIEpTRXZlbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2MEQ5
QkYwRDJBMjY5QTAwQjk5MThGIC8qIEpTRXZlbnRFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTNCNzBENjkwOUVCMEM3QzAwOUQ4NDY4IC8qIEpTRXZlbnRMaXN0ZW5lci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQlFMEZFRjM3MkI0N0M1M0VBQzFDMUZCRUUgLyogSlNFdmVudFNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFMEZFRjM3MkI3N0M1M0VBQzFDMUZCRUUgLyogSlNF
dmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUwRkVGMzcyQjU3
QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNjA5MDIwMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2ZW50VGFyZ2V0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDMDBGMDE0MEUwQTE4OTUwMEZEMDRFMyAvKiBKU0ZpbGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkMwMEYwMTYwRTBBMTg5NTAwRkQwNEUzIC8qIEpTRmlsZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNDcxMDUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUg
IkpTRE9NV2luZG93U2hlbGwuaCIKICNpbmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNF
dmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiSlNIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkpTSGlzdG9yeS5oIgogI2lu
Y2x1ZGUgIkpTSW1hZ2VDb25zdHJ1Y3Rvci5oIgpAQCAtNDI1LDYgKzQyNiwxMyBAQCBKU1ZhbHVl
IEpTRE9NV2luZG93OjpldmVudChFeGVjU3RhdGUqIGV4CiAgICAgcmV0dXJuIHRvSlMoZXhlYywg
ZXZlbnQpOwogfQogCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQorSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6ZXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBnZXRE
T01Db25zdHJ1Y3RvcjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworfQor
I2VuZGlmCisKIEpTVmFsdWUgSlNET01XaW5kb3c6OmltYWdlKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKIHsKICAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNJbWFnZUNvbnN0cnVjdG9yPihl
eGVjLCB0aGlzKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRTb3Vy
Y2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAg
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRXJp
Y3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAg
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEVWRU5UU09VUkNFKQor
CisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJFdmVu
dFNvdXJjZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0V2ZW50
U291cmNlLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCit1c2luZyBu
YW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FTU0VSVF9DTEFTU19GSVRT
X0lOX0NFTEwoSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKTsKKworY29uc3QgQ2xhc3NJbmZvIEpT
RXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiRXZlbnRTb3VyY2VDb250cnVjdG9y
IiwgMCwgMCwgMCB9OworCitKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6OkpTRXZlbnRTb3VyY2VD
b25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChKU0V2ZW50U291cmNlQ29uc3RydWN0b3I6
OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFs
T2JqZWN0KQoreworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBl
LCBKU0V2ZW50U291cmNlUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUp
OworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihl
eGVjLCAxKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7Cit9CisKK3N0YXRpYyBKU09i
amVjdCogY29uc3RydWN0RXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29u
c3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwg
MSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5v
dWdoIGFyZ3VtZW50cyIpOworCisgICAgVVN0cmluZyB1cmwgPSBhcmdzLmF0KDApLnRvU3RyaW5n
KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBKU0V2ZW50U291cmNlQ29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSAgc3RhdGlj
X2Nhc3Q8SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOworICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBSZWZlcmVuY2VFcnJvciwgIkV2ZW50U291cmNlIGNvbnN0cnVjdG9yIGFzc29jaWF0
ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUiKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFJlZlB0cjxFdmVudFNvdXJjZT4gZXZlbnRTb3VyY2UgPSBFdmVudFNvdXJjZTo6Y3Jl
YXRlKHVybCwgY29udGV4dCwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4g
YXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgZXZlbnRT
b3VyY2UucmVsZWFzZSgpKSk7Cit9CisKK0NvbnN0cnVjdFR5cGUgSlNFdmVudFNvdXJjZUNvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKENvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7
CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RFdmVudFNvdXJj
ZTsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRXJpY3Nzb24g
QUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgRXJpY3Nzb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU0V2ZW50U291cmNlQ29uc3Ry
dWN0b3JfaAorI2RlZmluZSBKU0V2ZW50U291cmNlQ29uc3RydWN0b3JfaAorCisjaWYgRU5BQkxF
KEVWRU5UU09VUkNFKQorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIGNsYXNzIEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3RvciA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7CisgICAgcHVibGljOgorICAgICAgICBKU0V2ZW50U291cmNl
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgICAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOworCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkNv
bnN0cnVjdERhdGEmKTsKKyAgICAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorICAgIH07CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKKworI2VuZGlmIC8v
IEpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRTb3VyY2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudFNvdXJjZUN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAg
ICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVy
aWNzc29uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAg
ICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkK
KworI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2UuaCIKKworI2luY2x1ZGUgIkV2ZW50U291cmNlLmgi
CisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0V2ZW50TGlzdGVu
ZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2
b2lkIEpTRXZlbnRTb3VyY2U6Om1hcmtDaGlsZHJlbihNYXJrU3RhY2smIG1hcmtTdGFjaykKK3sK
KyAgICBET01PYmplY3Q6Om1hcmtDaGlsZHJlbihtYXJrU3RhY2spOworCisgICAgbWFya0lmTm90
TnVsbChtYXJrU3RhY2ssIG1faW1wbC0+b25vcGVuKCkpOworICAgIG1hcmtJZk5vdE51bGwobWFy
a1N0YWNrLCBtX2ltcGwtPm9ubWVzc2FnZSgpKTsKKyAgICBtYXJrSWZOb3ROdWxsKG1hcmtTdGFj
aywgbV9pbXBsLT5vbmVycm9yKCkpOworCisgICAgdHlwZWRlZiBFdmVudFNvdXJjZTo6RXZlbnRM
aXN0ZW5lcnNNYXAgRXZlbnRMaXN0ZW5lcnNNYXA7CisgICAgdHlwZWRlZiBFdmVudFNvdXJjZTo6
TGlzdGVuZXJWZWN0b3IgTGlzdGVuZXJWZWN0b3I7CisgICAgRXZlbnRMaXN0ZW5lcnNNYXAmIGV2
ZW50TGlzdGVuZXJzID0gbV9pbXBsLT5ldmVudExpc3RlbmVycygpOworICAgIGZvciAoRXZlbnRM
aXN0ZW5lcnNNYXA6Oml0ZXJhdG9yIG1hcEl0ZXIgPSBldmVudExpc3RlbmVycy5iZWdpbigpOyBt
YXBJdGVyICE9IGV2ZW50TGlzdGVuZXJzLmVuZCgpOyArK21hcEl0ZXIpIHsKKyAgICAgICAgZm9y
IChMaXN0ZW5lclZlY3Rvcjo6aXRlcmF0b3IgdmVjSXRlciA9IG1hcEl0ZXItPnNlY29uZC5iZWdp
bigpOyB2ZWNJdGVyICE9IG1hcEl0ZXItPnNlY29uZC5lbmQoKTsgKyt2ZWNJdGVyKQorICAgICAg
ICAgICAgKCp2ZWNJdGVyKS0+bWFya0pTRnVuY3Rpb24obWFya1N0YWNrKTsKKyAgICB9Cit9CisK
K0pTVmFsdWUgSlNFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5lcihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IHRvSlNET01HbG9iYWxPYmplY3QoaW1wbCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOworICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdsb2JhbE9iamVjdC0+
ZmluZE9yQ3JlYXRlSlNFdmVudExpc3RlbmVyKGFyZ3MuYXQoMSkpOworICAgIGlmICghbGlzdGVu
ZXIpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGltcGwoKS0+YWRkRXZlbnRM
aXN0ZW5lcihhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpLCBsaXN0ZW5lci5yZWxlYXNlKCksIGFy
Z3MuYXQoMikudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30K
KworSlNWYWx1ZSBKU0V2ZW50U291cmNlOjpyZW1vdmVFdmVudExpc3RlbmVyKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdChpbXBsKCktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSk7CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIEpTRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBnbG9iYWxPYmplY3QtPmZp
bmRKU0V2ZW50TGlzdGVuZXIoYXJncy5hdCgxKSk7CisgICAgaWYgKCFsaXN0ZW5lcikKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgaW1wbCgpLT5yZW1vdmVFdmVudExpc3RlbmVy
KGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyksIGxpc3RlbmVyLCBhcmdzLmF0KDIpLnRvQm9vbGVh
bihleGVjKSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShFVkVOVFNPVVJDRSkKSW5kZXg6IFdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gNDcxMDUpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Mywx
MSBAQAogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVl
c3RVcGxvYWQuaCIKIAorI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKKyNpbmNsdWRlICJFdmVudFNv
dXJjZS5oIgorI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2UuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxF
KE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICNpbmNsdWRlICJET01BcHBsaWNhdGlvbkNhY2hl
LmgiCiAjaW5jbHVkZSAiSlNET01BcHBsaWNhdGlvbkNhY2hlLmgiCkBAIC03NCw2ICs3OSwxMSBA
QCBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgaWYgKCF0YXJn
ZXQpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKICAgICAKKyNpZiBFTkFCTEUoRVZFTlRTT1VS
Q0UpCisgICAgaWYgKEV2ZW50U291cmNlKiBldmVudFNvdXJjZSA9IHRhcmdldC0+dG9FdmVudFNv
dXJjZSgpKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGV2ZW50U291
cmNlKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBTVkdFbGVtZW50SW5zdGFu
Y2Ugc3VwcG9ydHMgYm90aCB0b1NWR0VsZW1lbnRJbnN0YW5jZSBhbmQgdG9Ob2RlIHNpbmNlIHNv
IG11Y2ggbW91c2UgaGFuZGxpbmcgY29kZSBkZXBlbmRzIG9uIHRvTm9kZSByZXR1cm5pbmcgYSB2
YWxpZCBub2RlLgogICAgIGlmIChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdGFyZ2V0
LT50b1NWR0VsZW1lbnRJbnN0YW5jZSgpKQpAQCAtMTM5LDYgKzE0OSwxMCBAQCBFdmVudFRhcmdl
dCogdG9FdmVudFRhcmdldChKU0M6OkpTVmFsdWUgCiAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCZK
U0RPTVdpbmRvd1NoZWxsOjpzX2luZm8pKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNE
T01XaW5kb3dTaGVsbCo+KGFzT2JqZWN0KHZhbHVlKSktPmltcGwoKTsKIAorI2lmIEVOQUJMRShF
VkVOVFNPVVJDRSkKKyAgICBDT05WRVJUX1RPX0VWRU5UX1RBUkdFVChFdmVudFNvdXJjZSkKKyNl
bmRpZgorCiAjaWYgRU5BQkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICBDT05WRVJU
X1RPX0VWRU5UX1RBUkdFVChET01BcHBsaWNhdGlvbkNhY2hlKQogI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA0
NzEwNSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTAgQEAKICNpbmNsdWRlICJXb3JrZXJOYXZpZ2F0
b3IuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRlci5oPgogCisjaWYgRU5BQkxF
KEVWRU5UU09VUkNFKQorI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rvci5oIgorI2Vu
ZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc3
LDYgKzgxLDEzIEBAIGJvb2wgSlNXb3JrZXJDb250ZXh0OjpnZXRPd25Qcm9wZXJ0eVNsb3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCitKU1ZhbHVlIEpT
V29ya2VyQ29udGV4dDo6ZXZlbnRTb3VyY2UoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0V2ZW50U291cmNlQ29uc3RydWN0b3I+KGV4ZWMs
IHRoaXMpOworfQorI2VuZGlmCisKIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0Ojp4bWxIdHRwUmVx
dWVzdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldERPTUNvbnN0cnVj
dG9yPEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7CkluZGV4OiBXZWJD
b3JlL2RvbS9FdmVudE5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnROYW1l
cy5oCShyZXZpc2lvbiA0NzEwNSkKKysrIFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgbWFjcm8o
b2Jzb2xldGUpIFwKICAgICBtYWNybyhvZmZsaW5lKSBcCiAgICAgbWFjcm8ob25saW5lKSBcCisg
ICAgbWFjcm8ob3BlbikgXAogICAgIG1hY3JvKG92ZXJmbG93Y2hhbmdlZCkgXAogICAgIG1hY3Jv
KHBhc3RlKSBcCiAgICAgbWFjcm8ocmVhZHlzdGF0ZWNoYW5nZSkgXApJbmRleDogV2ViQ29yZS9k
b20vRXZlbnRUYXJnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0
LmNwcAkocmV2aXNpb24gNDcxMDUpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDExIEBAIEV2ZW50VGFyZ2V0Ojp+RXZlbnRUYXJnZXQo
KQogewogfQogCitFdmVudFNvdXJjZSogRXZlbnRUYXJnZXQ6OnRvRXZlbnRTb3VyY2UoKQorewor
ICAgIHJldHVybiAwOworfQorCiBOb2RlKiBFdmVudFRhcmdldDo6dG9Ob2RlKCkKIHsKICAgICBy
ZXR1cm4gMDsKSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaAkocmV2aXNpb24gNDcxMDUpCisrKyBXZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBET01XaW5kb3c7CiAgICAgY2xhc3MgRXZlbnQ7CiAgICAg
Y2xhc3MgRXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBFdmVudFNvdXJjZTsKICAgICBjbGFzcyBN
ZXNzYWdlUG9ydDsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIE5vdGlmaWNhdGlvbjsKQEAg
LTU4LDYgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgRXZlbnRUYXJn
ZXQgewogICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBFdmVudFNvdXJjZSogdG9FdmVudFNv
dXJjZSgpOwogICAgICAgICB2aXJ0dWFsIE1lc3NhZ2VQb3J0KiB0b01lc3NhZ2VQb3J0KCk7CiAg
ICAgICAgIHZpcnR1YWwgTm9kZSogdG9Ob2RlKCk7CiAgICAgICAgIHZpcnR1YWwgRE9NV2luZG93
KiB0b0RPTVdpbmRvdygpOwpJbmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDQ3MTA1KQorKysg
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQ0NCw2ICs0NDQs
MTAgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGF0dHJpYnV0ZSBSYW5nZUNvbnN0cnVjdG9y
IFJhbmdlOwogICAgICAgICBhdHRyaWJ1dGUgUmFuZ2VFeGNlcHRpb25Db25zdHJ1Y3RvciBSYW5n
ZUV4Y2VwdGlvbjsKIAorI2lmIEVOQUJMRV9FVkVOVFNPVVJDRQorICAgICAgICBhdHRyaWJ1dGUg
W0pTQ0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VDb25zdHJ1Y3RvciBFdmVudFNvdXJjZTsgLy8g
VXNhYmxlIHdpdGggbmV3IHRoZSBvcGVyYXRvcgorI2VuZGlmCisKICAgICAgICAgLy8gTW96aWxs
YSBoYXMgYSBzZXBhcmF0ZSBYTUxEb2N1bWVudCBvYmplY3QgZm9yIFhNTCBkb2N1bWVudHMuIAog
ICAgICAgICAvLyBXZSBqdXN0IHVzZSBEb2N1bWVudCBmb3IgdGhpcy4KICAgICAgICAgYXR0cmli
dXRlIERvY3VtZW50Q29uc3RydWN0b3IgWE1MRG9jdW1lbnQ7CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
RXZlbnRTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudFNvdXJjZS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDM2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljc3Nv
biBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNpbmNsdWRlICJFdmVudFNvdXJjZS5oIgorCisjaW5j
bHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJFdmVudC5o
IgorI2luY2x1ZGUgIkV2ZW50RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJNZXNzYWdlRXZlbnQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0
UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBFdmVudFNvdXJjZTo6
ZGVmYXVsdFJlY29ubmVjdERlbGF5ID0gMzAwMDsKKworRXZlbnRTb3VyY2U6OkV2ZW50U291cmNl
KGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNl
cHRpb25Db2RlJiBlYykKKyAgICA6IEFjdGl2ZURPTU9iamVjdChjb250ZXh0LCB0aGlzKQorICAg
ICwgbV9zdGF0ZShDT05ORUNUSU5HKQorICAgICwgbV9yZWNvbm5lY3RUaW1lcih0aGlzLCAmRXZl
bnRTb3VyY2U6OnJlY29ubmVjdFRpbWVyRmlyZWQpCisgICAgLCBtX2ZhaWxTaWxlbnRseShmYWxz
ZSkKKyAgICAsIG1fcmVxdWVzdEluRmxpZ2h0KGZhbHNlKQorICAgICwgbV9yZWNvbm5lY3REZWxh
eShkZWZhdWx0UmVjb25uZWN0RGVsYXkpCit7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgISht
X3VybCA9IGNvbnRleHQtPmNvbXBsZXRlVVJMKHVybCkpLmlzVmFsaWQoKSkgeworICAgICAgICBl
YyA9IFNZTlRBWF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IHNo
b3VsZCBzdXBwb3J0IGNyb3NzLW9yaWdpbiByZXF1ZXN0cworICAgIGlmICghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KG1fdXJsKSkgeworICAg
ICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
b3JpZ2luID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpLT50b1N0
cmluZygpOworICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4
dC9wbGFpbiIsICJVVEYtOCIpOworCisgICAgc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAg
IGNvbm5lY3QoKTsKK30KKworRXZlbnRTb3VyY2U6On5FdmVudFNvdXJjZSgpCit7Cit9CisKK3Zv
aWQgRXZlbnRTb3VyY2U6OmNvbm5lY3QoKQoreworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0
KG1fdXJsKTsKKyAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOworICAgIHJlcXVlc3Qu
c2V0SFRUUEhlYWRlckZpZWxkKCJBY2NlcHQiLCAidGV4dC9ldmVudC1zdHJlYW0iKTsKKyAgICBy
ZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiQ2FjaGUtQ29udHJvbCIsICJuby1jYWNoZSIpOwor
ICAgIGlmICghbV9sYXN0RXZlbnRJZC5pc0VtcHR5KCkpCisgICAgICAgIHJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKCJMYXN0LUV2ZW50LUlEIiwgbV9sYXN0RXZlbnRJZCk7CisgICAgbV9sb2Fk
ZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0
aGlzLCByZXF1ZXN0LCBTZW5kTG9hZENhbGxiYWNrcywgRG9Ob3RTbmlmZkNvbnRlbnQsIEFsbG93
U3RvcmVkQ3JlZGVudGlhbHMsIERlbnlDcm9zc09yaWdpblJlZGlyZWN0KTsKKyAgICBtX3JlcXVl
c3RJbkZsaWdodCA9IHRydWU7CisKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+
aXNXb3JrZXJDb250ZXh0KCkpCisgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5ub25DYWNoZVJl
cXVlc3RJbkZsaWdodChtX3VybCk7Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmVuZFJlcXVlc3Qo
KQoreworICAgIG1fcmVxdWVzdEluRmxpZ2h0ID0gZmFsc2U7CisKKyAgICBpZiAoIW1fZmFpbFNp
bGVudGx5KQorICAgICAgICBkaXNwYXRjaEdlbmVyaWNFdmVudChldmVudE5hbWVzKCkuZXJyb3JF
dmVudCk7CisKKyAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNXb3JrZXJDb250
ZXh0KCkpCisgICAgICAgIGNhY2hlKCktPmxvYWRlcigpLT5ub25DYWNoZVJlcXVlc3RDb21wbGV0
ZShtX3VybCk7CisKKyAgICBpZiAobV9zdGF0ZSAhPSBDTE9TRUQpCisgICAgICAgIHNjaGVkdWxl
UmVjb25uZWN0KCk7CisgICAgZWxzZQorICAgICAgICB1bnNldFBlbmRpbmdBY3Rpdml0eSh0aGlz
KTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6c2NoZWR1bGVSZWNvbm5lY3QoKQoreworICAgIG1f
c3RhdGUgPSBDT05ORUNUSU5HOworICAgIG1fcmVjb25uZWN0VGltZXIuc3RhcnRPbmVTaG90KG1f
cmVjb25uZWN0RGVsYXkgLyAxMDAwKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6cmVjb25uZWN0
VGltZXJGaXJlZChUaW1lcjxFdmVudFNvdXJjZT4qKQoreworICAgIGNvbm5lY3QoKTsKK30KKwor
U3RyaW5nIEV2ZW50U291cmNlOjp1cmwoKSBjb25zdAoreworICAgIHJldHVybiBtX3VybC5zdHJp
bmcoKTsKK30KKworRXZlbnRTb3VyY2U6OlN0YXRlIEV2ZW50U291cmNlOjpyZWFkeVN0YXRlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdGF0ZTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6Y2xv
c2UoKQoreworICAgIGlmIChtX3N0YXRlID09IENMT1NFRCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKG1fcmVjb25uZWN0VGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX3JlY29ubmVj
dFRpbWVyLnN0b3AoKTsKKyAgICAgICAgdW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAg
fQorCisgICAgbV9zdGF0ZSA9IENMT1NFRDsKKyAgICBtX2ZhaWxTaWxlbnRseSA9IHRydWU7CisK
KyAgICBpZiAobV9yZXF1ZXN0SW5GbGlnaHQpCisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsK
K30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogRXZlbnRTb3VyY2U6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6YWRkRXZlbnRMaXN0ZW5l
cihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVudExpc3RlbmVy
PiBldmVudExpc3RlbmVyLCBib29sKQoreworICAgIEV2ZW50TGlzdGVuZXJzTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9ldmVudExpc3RlbmVycy5maW5kKGV2ZW50VHlwZSk7CisgICAgaWYgKGl0ZXIg
PT0gbV9ldmVudExpc3RlbmVycy5lbmQoKSkgeworICAgICAgICBMaXN0ZW5lclZlY3RvciBsaXN0
ZW5lcnM7CisgICAgICAgIGxpc3RlbmVycy5hcHBlbmQoZXZlbnRMaXN0ZW5lcik7CisgICAgICAg
IG1fZXZlbnRMaXN0ZW5lcnMuYWRkKGV2ZW50VHlwZSwgbGlzdGVuZXJzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBMaXN0ZW5lclZlY3RvciYgbGlzdGVuZXJzID0gaXRlci0+c2Vjb25kOworICAg
ICAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjppdGVyYXRvciBsaXN0ZW5lckl0ZXIgPSBsaXN0ZW5l
cnMuYmVnaW4oKTsgbGlzdGVuZXJJdGVyICE9IGxpc3RlbmVycy5lbmQoKTsgKytsaXN0ZW5lckl0
ZXIpIHsKKyAgICAgICAgICAgIGlmICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbGlzdGVuZXJzLmFw
cGVuZChldmVudExpc3RlbmVyKTsKKyAgICAgICAgbV9ldmVudExpc3RlbmVycy5hZGQoZXZlbnRU
eXBlLCBsaXN0ZW5lcnMpOworICAgIH0KK30KKwordm9pZCBFdmVudFNvdXJjZTo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciog
ZXZlbnRMaXN0ZW5lciwgYm9vbCkKK3sKKyAgICBFdmVudExpc3RlbmVyc01hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fZXZlbnRMaXN0ZW5lcnMuZmluZChldmVudFR5cGUpOworICAgIGlmIChpdGVyID09
IG1fZXZlbnRMaXN0ZW5lcnMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIExpc3RlbmVy
VmVjdG9yJiBsaXN0ZW5lcnMgPSBpdGVyLT5zZWNvbmQ7CisgICAgZm9yIChMaXN0ZW5lclZlY3Rv
cjo6Y29uc3RfaXRlcmF0b3IgbGlzdGVuZXJJdGVyID0gbGlzdGVuZXJzLmJlZ2luKCk7IGxpc3Rl
bmVySXRlciAhPSBsaXN0ZW5lcnMuZW5kKCk7ICsrbGlzdGVuZXJJdGVyKSB7CisgICAgICAgIGlm
ICgqbGlzdGVuZXJJdGVyID09IGV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGxpc3RlbmVy
cy5yZW1vdmUobGlzdGVuZXJJdGVyIC0gbGlzdGVuZXJzLmJlZ2luKCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEV2ZW50U291cmNlOjpkaXNwYXRj
aEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIWV2ZW50IHx8IGV2ZW50LT50eXBlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVjID0g
RXZlbnRFeGNlcHRpb246OlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBFdmVudExpc3RlbmVyKiBhdHRyaWJ1dGVMaXN0ZW5lciA9
IG1fYXR0cmlidXRlTGlzdGVuZXJzLmdldChldmVudC0+dHlwZSgpKS5nZXQoKTsKKyAgICBpZiAo
YXR0cmlidXRlTGlzdGVuZXIpIHsKKyAgICAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKKyAg
ICAgICAgZXZlbnQtPnNldEN1cnJlbnRUYXJnZXQodGhpcyk7CisgICAgICAgIGF0dHJpYnV0ZUxp
c3RlbmVyLT5oYW5kbGVFdmVudChldmVudC5nZXQoKSwgZmFsc2UpOworICAgIH0KKworICAgIExp
c3RlbmVyVmVjdG9yIGxpc3RlbmVyc0NvcHkgPSBtX2V2ZW50TGlzdGVuZXJzLmdldChldmVudC0+
dHlwZSgpKTsKKyAgICBmb3IgKExpc3RlbmVyVmVjdG9yOjpjb25zdF9pdGVyYXRvciBsaXN0ZW5l
ckl0ZXIgPSBsaXN0ZW5lcnNDb3B5LmJlZ2luKCk7IGxpc3RlbmVySXRlciAhPSBsaXN0ZW5lcnND
b3B5LmVuZCgpOyArK2xpc3RlbmVySXRlcikgeworICAgICAgICBldmVudC0+c2V0VGFyZ2V0KHRo
aXMpOworICAgICAgICBldmVudC0+c2V0Q3VycmVudFRhcmdldCh0aGlzKTsKKyAgICAgICAgbGlz
dGVuZXJJdGVyLT5nZXQoKS0+aGFuZGxlRXZlbnQoZXZlbnQuZ2V0KCksIGZhbHNlKTsKKyAgICB9
CisKKyAgICByZXR1cm4gIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCk7Cit9CisKK3ZvaWQgRXZl
bnRTb3VyY2U6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSkKK3sKKyAgICBpbnQgc3RhdHVzQ29kZSA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCk7
CisgICAgaWYgKHN0YXR1c0NvZGUgPT0gMjAwICYmIHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZCgi
Q29udGVudC1UeXBlIikgPT0gInRleHQvZXZlbnQtc3RyZWFtIikgeworICAgICAgICBtX3N0YXRl
ID0gT1BFTjsKKyAgICAgICAgZGlzcGF0Y2hHZW5lcmljRXZlbnQoZXZlbnROYW1lcygpLm9wZW5F
dmVudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXR1c0NvZGUgPD0gMjAwIHx8IHN0
YXR1c0NvZGUgPiAyOTkpCisgICAgICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOworICAgICAgICBt
X2xvYWRlci0+Y2FuY2VsKCk7CisgICAgfQorfQorCit2b2lkIEV2ZW50U291cmNlOjpkaWRSZWNl
aXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIGFwcGVuZChtX3Jl
Y2VpdmVCdWYsIG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbmd0aCkpOworICAgIHBhcnNlRXZl
bnRTdHJlYW0oKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nKQoreworICAgIGlmIChtX3JlY2VpdmVCdWYuc2l6ZSgpID4gMCB8fCBtX2RhdGEu
c2l6ZSgpID4gMCkgeworICAgICAgICBhcHBlbmQobV9yZWNlaXZlQnVmLCAiXG5cbiIpOworICAg
ICAgICBwYXJzZUV2ZW50U3RyZWFtKCk7CisgICAgfQorICAgIG1fc3RhdGUgPSBDT05ORUNUSU5H
OworICAgIGVuZFJlcXVlc3QoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlkRmFpbChjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpbnQgY2FuY2VsZWQgPSBlcnJvci5pc0Nh
bmNlbGxhdGlvbigpOworICAgIGlmICgoKG1fc3RhdGUgPT0gQ09OTkVDVElORykgJiYgIWNhbmNl
bGVkKSB8fCAoKG1fc3RhdGUgPT0gT1BFTikgJiYgY2FuY2VsZWQpKQorICAgICAgICBtX3N0YXRl
ID0gQ0xPU0VEOworICAgIGVuZFJlcXVlc3QoKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlk
RmFpbFJlZGlyZWN0Q2hlY2soKQoreworICAgIG1fc3RhdGUgPSBDTE9TRUQ7CisgICAgbV9sb2Fk
ZXItPmNhbmNlbCgpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpwYXJzZUV2ZW50U3RyZWFtKCkK
K3sKKyAgICB1bnNpZ25lZCBpbnQgYnVmUG9zID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYnVmU2l6
ZSA9IG1fcmVjZWl2ZUJ1Zi5zaXplKCk7CisgICAgZm9yICg7OykgeworICAgICAgICBpbnQgbGlu
ZUxlbmd0aCA9IC0xOworICAgICAgICBpbnQgZmllbGRMZW5ndGggPSAtMTsKKyAgICAgICAgaW50
IGNhcnJpYWdlUmV0dXJuID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IGJ1ZlBv
czsgbGluZUxlbmd0aCA8IDAgJiYgaSA8IGJ1ZlNpemU7IGkrKykgeworICAgICAgICAgICAgc3dp
dGNoIChtX3JlY2VpdmVCdWZbaV0pIHsKKyAgICAgICAgICAgIGNhc2UgJzonOgorICAgICAgICAg
ICAgICAgIGlmIChmaWVsZExlbmd0aCA8IDApCisgICAgICAgICAgICAgICAgICAgIGZpZWxkTGVu
Z3RoID0gaSAtIGJ1ZlBvczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgJ1xuJzoKKyAgICAgICAgICAgICAgICBpZiAoaSA+IGJ1ZlBvcyAmJiBtX3JlY2VpdmVCdWZb
aSAtIDFdID09ICdccicpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FycmlhZ2VSZXR1cm4rKzsK
KyAgICAgICAgICAgICAgICAgICAgaS0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBsaW5lTGVuZ3RoID0gaSAtIGJ1ZlBvczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChsaW5lTGVuZ3RoIDwgMCkKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHBhcnNlRXZlbnRTdHJlYW1MaW5lKGJ1ZlBvcywg
ZmllbGRMZW5ndGgsIGxpbmVMZW5ndGgpOworICAgICAgICBidWZQb3MgKz0gbGluZUxlbmd0aCAr
IGNhcnJpYWdlUmV0dXJuICsgMTsKKyAgICB9CisKKyAgICBpZiAoYnVmUG9zID09IGJ1ZlNpemUp
CisgICAgICAgIG1fcmVjZWl2ZUJ1Zi5jbGVhcigpOworICAgIGVsc2UgaWYgKGJ1ZlBvcykKKyAg
ICAgICAgbV9yZWNlaXZlQnVmLnJlbW92ZSgwLCBidWZQb3MpOworfQorCit2b2lkIEV2ZW50U291
cmNlOjpwYXJzZUV2ZW50U3RyZWFtTGluZSh1bnNpZ25lZCBpbnQgYnVmUG9zLCBpbnQgZmllbGRM
ZW5ndGgsIGludCBsaW5lTGVuZ3RoKQoreworICAgIGlmICghbGluZUxlbmd0aCkgeworICAgICAg
ICBpZiAoIW1fZGF0YS5pc0VtcHR5KCkpCisgICAgICAgICAgICBkaXNwYXRjaE1lc3NhZ2VFdmVu
dCgpOworICAgICAgICBpZiAoIW1fZXZlbnROYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1f
ZXZlbnROYW1lID0gIiI7CisgICAgfSBlbHNlIGlmIChmaWVsZExlbmd0aCkgeworICAgICAgICBi
b29sIG5vVmFsdWUgPSBmaWVsZExlbmd0aCA8IDA7CisKKyAgICAgICAgU3RyaW5nIGZpZWxkKCZt
X3JlY2VpdmVCdWZbYnVmUG9zXSwgbm9WYWx1ZSA/IGxpbmVMZW5ndGggOiBmaWVsZExlbmd0aCk7
CisgICAgICAgIGludCBzdGVwOworICAgICAgICBpZiAobm9WYWx1ZSkKKyAgICAgICAgICAgIHN0
ZXAgPSBsaW5lTGVuZ3RoOworICAgICAgICBlbHNlIGlmIChtX3JlY2VpdmVCdWZbYnVmUG9zICsg
ZmllbGRMZW5ndGggKyAxXSAhPSAnICcpCisgICAgICAgICAgICBzdGVwID0gZmllbGRMZW5ndGgg
KyAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGVwID0gZmllbGRMZW5ndGggKyAyOwor
ICAgICAgICBidWZQb3MgKz0gc3RlcDsKKyAgICAgICAgaW50IHZhbHVlTGVuZ3RoID0gbGluZUxl
bmd0aCAtIHN0ZXA7CisKKyAgICAgICAgaWYgKGZpZWxkID09ICJkYXRhIikgeworICAgICAgICAg
ICAgaWYgKG1fZGF0YS5zaXplKCkgPiAwKQorICAgICAgICAgICAgICAgIG1fZGF0YS5hcHBlbmQo
J1xuJyk7CisgICAgICAgICAgICBpZiAodmFsdWVMZW5ndGgpCisgICAgICAgICAgICAgICAgbV9k
YXRhLmFwcGVuZCgmbV9yZWNlaXZlQnVmW2J1ZlBvc10sIHZhbHVlTGVuZ3RoKTsKKyAgICAgICAg
fSBlbHNlIGlmIChmaWVsZCA9PSAiZXZlbnQiKQorICAgICAgICAgICAgbV9ldmVudE5hbWUgPSB2
YWx1ZUxlbmd0aCA/IFN0cmluZygmbV9yZWNlaXZlQnVmW2J1ZlBvc10sIHZhbHVlTGVuZ3RoKSA6
ICIiOworICAgICAgICBlbHNlIGlmIChmaWVsZCA9PSAiaWQiKQorICAgICAgICAgICAgbV9sYXN0
RXZlbnRJZCA9IHZhbHVlTGVuZ3RoID8gU3RyaW5nKCZtX3JlY2VpdmVCdWZbYnVmUG9zXSwgdmFs
dWVMZW5ndGgpIDogIiI7CisgICAgICAgIGVsc2UgaWYgKGZpZWxkID09ICJyZXRyeSIpIHsKKyAg
ICAgICAgICAgIGlmICghdmFsdWVMZW5ndGgpCisgICAgICAgICAgICAgICAgbV9yZWNvbm5lY3RE
ZWxheSA9IGRlZmF1bHRSZWNvbm5lY3REZWxheTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZSgmbV9yZWNlaXZlQnVmW2J1ZlBvc10sIHZhbHVlTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICBib29sIG9rOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyByZXRyeSA9IHZhbHVlLnRvVUludDY0KCZvayk7CisgICAgICAgICAgICAgICAgaWYg
KG9rKQorICAgICAgICAgICAgICAgICAgICBtX3JlY29ubmVjdERlbGF5ID0gcmV0cnk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgRXZlbnRTb3VyY2U6OmRpc3Bh
dGNoR2VuZXJpY0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSkKK3sKKyAgICBSZWZQdHI8
RXZlbnQ+IGV2dCA9IEV2ZW50OjpjcmVhdGUodHlwZSwgZmFsc2UsIGZhbHNlKTsKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBkaXNwYXRjaEV2ZW50KGV2dC5yZWxlYXNlKCksIGVjKTsK
KyAgICBBU1NFUlQoIWVjKTsKK30KKwordm9pZCBFdmVudFNvdXJjZTo6ZGlzcGF0Y2hNZXNzYWdl
RXZlbnQoKQoreworICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6
Y3JlYXRlKCk7CisgICAgU3RyaW5nIGV2ZW50TmFtZSA9IG1fZXZlbnROYW1lLmlzRW1wdHkoKSA/
IGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQuc3RyaW5nKCkgOiBtX2V2ZW50TmFtZTsKKyAgICBl
dnQtPmluaXRNZXNzYWdlRXZlbnQoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UsIFN0cmluZzo6YWRv
cHQobV9kYXRhKSwgbV9vcmlnaW4sIG1fbGFzdEV2ZW50SWQsIDAsIDApOworICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgIGRpc3BhdGNoRXZlbnQoZXZ0LnJlbGVhc2UoKSwgZWMpOworICAg
IEFTU0VSVCghZWMpOworfQorCit2b2lkIEV2ZW50U291cmNlOjpzdG9wKCkKK3sKKyAgICBjbG9z
ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRVZF
TlRTT1VSQ0UpCkluZGV4OiBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFn
ZS9FdmVudFNvdXJjZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBFcmljc3NvbiBBQgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogICAgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBFcmljc3NvbiBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogICAgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEV2ZW50U291cmNlX2gKKyNkZWZpbmUgRXZlbnRTb3VyY2VfaAorCisjaWYgRU5BQkxF
KEVWRU5UU09VUkNFKQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAi
QXRvbWljU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKKyNpbmNsdWRlICJLVVJM
LmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlRpbWVy
LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKKyAgICBj
bGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOworICAgIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7CisK
KyAgICBjbGFzcyBFdmVudFNvdXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEV2ZW50U291cmNlPiwg
cHVibGljIEV2ZW50VGFyZ2V0LCBwcml2YXRlIFRocmVhZGFibGVMb2FkZXJDbGllbnQsIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RXZlbnRTb3VyY2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHVybCwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBFdmVudFNvdXJjZSh1cmwsIGNvbnRleHQsIGVjKSk7IH0KKyAgICAgICAgdmlydHVhbCB+RXZl
bnRTb3VyY2UoKTsKKworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRl
ZmF1bHRSZWNvbm5lY3REZWxheTsKKworICAgICAgICBTdHJpbmcgdXJsKCkgY29uc3Q7CisKKyAg
ICAgICAgZW51bSBTdGF0ZSB7CisgICAgICAgICAgICBDT05ORUNUSU5HID0gMCwKKyAgICAgICAg
ICAgIE9QRU4gPSAxLAorICAgICAgICAgICAgQ0xPU0VEID0gMiwKKyAgICAgICAgfTsKKworICAg
ICAgICBTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRPbm9wZW4o
UGFzc1JlZlB0cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fYXR0cmlidXRlTGlz
dGVuZXJzLnNldChldmVudE5hbWVzKCkub3BlbkV2ZW50LCBldmVudExpc3RlbmVyKTsgfQorICAg
ICAgICBFdmVudExpc3RlbmVyKiBvbm9wZW4oKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZUxp
c3RlbmVycy5nZXQoZXZlbnROYW1lcygpLm9wZW5FdmVudCkuZ2V0KCk7IH0KKworICAgICAgICB2
b2lkIHNldE9ubWVzc2FnZShQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIp
IHsgbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuc2V0KGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGV2
ZW50TGlzdGVuZXIpOyB9CisgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9ubWVzc2FnZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYXR0cmlidXRlTGlzdGVuZXJzLmdldChldmVudE5hbWVzKCkubWVzc2FnZUV2
ZW50KS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgc2V0T25lcnJvcihQYXNzUmVmUHRyPEV2ZW50
TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIpIHsgbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuc2V0KGV2ZW50
TmFtZXMoKS5lcnJvckV2ZW50LCBldmVudExpc3RlbmVyKTsgfQorICAgICAgICBFdmVudExpc3Rl
bmVyKiBvbmVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVMaXN0ZW5lcnMuZ2V0KGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50KS5nZXQoKTsgfQorCisgICAgICAgIHZvaWQgY2xvc2UoKTsK
KworICAgICAgICB1c2luZyBSZWZDb3VudGVkPEV2ZW50U291cmNlPjo6cmVmOworICAgICAgICB1
c2luZyBSZWZDb3VudGVkPEV2ZW50U291cmNlPjo6ZGVyZWY7CisKKyAgICAgICAgdmlydHVhbCBF
dmVudFNvdXJjZSogdG9FdmVudFNvdXJjZSgpIHsgcmV0dXJuIHRoaXM7IH0KKyAgICAgICAgdmly
dHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3Q7CisKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEV2ZW50TGlzdGVuZXI+ID4gTGlz
dGVuZXJWZWN0b3I7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIExpc3Rl
bmVyVmVjdG9yPiBFdmVudExpc3RlbmVyc01hcDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiwgYm9vbCB1c2VDYXB0dXJlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJl
bW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlz
dGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hF
dmVudChQYXNzUmVmUHRyPEV2ZW50PiwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICBFdmVudExp
c3RlbmVyc01hcCYgZXZlbnRMaXN0ZW5lcnMoKSB7IHJldHVybiBtX2V2ZW50TGlzdGVuZXJzOyB9
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIHByaXZhdGU6CisgICAgICAg
IEV2ZW50U291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYyk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZkV2
ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZFdmVudFRh
cmdldCgpIHsgZGVyZWYoKTsgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsUmVkaXJlY3RDaGVjaygpOworCisgICAgICAgIHZvaWQg
Y29ubmVjdCgpOworICAgICAgICB2b2lkIGVuZFJlcXVlc3QoKTsKKyAgICAgICAgdm9pZCBzY2hl
ZHVsZVJlY29ubmVjdCgpOworICAgICAgICB2b2lkIHJlY29ubmVjdFRpbWVyRmlyZWQoVGltZXI8
RXZlbnRTb3VyY2U+Kik7CisgICAgICAgIHZvaWQgcGFyc2VFdmVudFN0cmVhbSgpOworICAgICAg
ICB2b2lkIHBhcnNlRXZlbnRTdHJlYW1MaW5lKHVuc2lnbmVkIGludCBwb3MsIGludCBmaWVsZExl
bmd0aCwgaW50IGxpbmVMZW5ndGgpOworICAgICAgICB2b2lkIGRpc3BhdGNoR2VuZXJpY0V2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CisgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdl
RXZlbnQoKTsKKworICAgICAgICBLVVJMIG1fdXJsOworICAgICAgICBTdGF0ZSBtX3N0YXRlOwor
CisgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gPiBt
X2F0dHJpYnV0ZUxpc3RlbmVyczsKKyAgICAgICAgRXZlbnRMaXN0ZW5lcnNNYXAgbV9ldmVudExp
c3RlbmVyczsKKworICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gbV9kZWNvZGVy
OworICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7CisgICAgICAgIFRp
bWVyPEV2ZW50U291cmNlPiBtX3JlY29ubmVjdFRpbWVyOworICAgICAgICBWZWN0b3I8VUNoYXI+
IG1fcmVjZWl2ZUJ1ZjsKKyAgICAgICAgYm9vbCBtX2ZhaWxTaWxlbnRseTsKKyAgICAgICAgYm9v
bCBtX3JlcXVlc3RJbkZsaWdodDsKKworICAgICAgICBTdHJpbmcgbV9ldmVudE5hbWU7CisgICAg
ICAgIFZlY3RvcjxVQ2hhcj4gbV9kYXRhOworICAgICAgICBTdHJpbmcgbV9sYXN0RXZlbnRJZDsK
KyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1fcmVjb25uZWN0RGVsYXk7CisgICAgICAgIFN0
cmluZyBtX29yaWdpbjsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRVZFTlRTT1VSQ0UpCisKKyNlbmRpZiAvLyBFdmVudFNvdXJjZV9oCkluZGV4
OiBXZWJDb3JlL3BhZ2UvRXZlbnRTb3VyY2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS9FdmVudFNvdXJjZS5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRTb3Vy
Y2UuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEVyaWNzc29uIEFCCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEVyaWNzc29uIG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSB3aW5k
b3cgeworCisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9RVZFTlRTT1VSQ0Us
CisgICAgICAgIEN1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKKyAg
ICBdIEV2ZW50U291cmNlIHsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5n
IFVSTDsKKworICAgICAgICAvLyByZWFkeSBzdGF0ZQorICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBDT05ORUNUSU5HID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgT1BFTiA9
IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENMT1NFRCA9IDI7CisgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlOworCisgICAgICAgIC8v
IG5ldHdvcmtpbmcKKyAgICAgICAgYXR0cmlidXRlIEV2ZW50TGlzdGVuZXIgb25vcGVuOworICAg
ICAgICBhdHRyaWJ1dGUgRXZlbnRMaXN0ZW5lciBvbm1lc3NhZ2U7CisgICAgICAgIGF0dHJpYnV0
ZSBFdmVudExpc3RlbmVyIG9uZXJyb3I7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKworICAgICAg
ICAvLyBFdmVudFRhcmdldCBpbnRlcmZhY2UKKyAgICAgICAgW0N1c3RvbV0gdm9pZCBhZGRFdmVu
dExpc3RlbmVyKGluIERPTVN0cmluZyB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3Rl
bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9vbGVh
biB1c2VDYXB0dXJlKTsKKyAgICAgICAgYm9vbGVhbiBkaXNwYXRjaEV2ZW50KGluIEV2ZW50IGV2
dCkKKyAgICAgICAgICAgIHJhaXNlcyhFdmVudEV4Y2VwdGlvbik7CisKKyAgICB9OworfQpJbmRl
eDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNpb24gNDcxMDUpCisrKyBXZWJDb3Jl
L3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDkg
QEAgbW9kdWxlIHRocmVhZHMgewogI2lmIEVOQUJMRV9DSEFOTkVMX01FU1NBR0lORwogICAgICAg
ICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3RvciBN
ZXNzYWdlQ2hhbm5lbDsKICNlbmRpZgorI2lmIEVOQUJMRV9FVkVOVFNPVVJDRQorICAgICAgICBh
dHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VDb25zdHJ1Y3RvciBFdmVudFNv
dXJjZTsKKyNlbmRpZgogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gWE1MSHR0
cFJlcXVlc3RDb25zdHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsKICAgICB9OwogCkluZGV4OiBXZWJL
aXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA0NzEwNSkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDA5LTA4LTEyICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2
aXN0QGVyaWNzc29uLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRlZCBFdmVudFNvdXJjZSB0byB0aGUgYnVpbGQgc2NyaXB0IChkZWZhdWx0
IG9uKS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
OTk3IAorCisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6CisKIDIwMDktMDgtMTEgIEpv
aG4gR3JlZ2cgIDxqb2hubnlnQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFj
aWVqIFN0YWNob3dpYWsuCkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkocmV2aXNpb24g
NDcxMDUpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsNyBAQCBteSAkbWluaW1hbCA9IDA7CiBteSAkbWFrZUFyZ3M7CiAKIG15
ICgkdGhyZWVEQ2FudmFzU3VwcG9ydCwgJHRocmVlRFJlbmRlcmluZ1N1cHBvcnQsICRjaGFubmVs
TWVzc2FnaW5nU3VwcG9ydCwgJGRhdGFiYXNlU3VwcG9ydCwgJGRhdGFncmlkU3VwcG9ydCwgJGRv
bVN0b3JhZ2VTdXBwb3J0LAotICAgICRmaWx0ZXJzU3VwcG9ydCwgJGdlb2xvY2F0aW9uU3VwcG9y
dCwgJGdub21lS2V5cmluZ1N1cHBvcnQsICRpY29uRGF0YWJhc2VTdXBwb3J0LAorICAgICRldmVu
dHNvdXJjZVN1cHBvcnQsICRmaWx0ZXJzU3VwcG9ydCwgJGdlb2xvY2F0aW9uU3VwcG9ydCwgJGdu
b21lS2V5cmluZ1N1cHBvcnQsICRpY29uRGF0YWJhc2VTdXBwb3J0LAogICAgICRqYXZhU2NyaXB0
RGVidWdnZXJTdXBwb3J0LCAkb2ZmbGluZVdlYkFwcGxpY2F0aW9uU3VwcG9ydCwgJHJ1YnlTdXBw
b3J0LCAkc2hhcmVkV29ya2Vyc1N1cHBvcnQsIAogICAgICRzdmdTdXBwb3J0LCAkc3ZnQW5pbWF0
aW9uU3VwcG9ydCwgJHN2Z0FzSW1hZ2VTdXBwb3J0LCAkc3ZnRE9NT2JqQ0JpbmRpbmdzU3VwcG9y
dCwgJHN2Z0ZvbnRzU3VwcG9ydCwKICAgICAkc3ZnRm9yZWlnbk9iamVjdFN1cHBvcnQsICRzdmdV
c2VTdXBwb3J0LCAkdmlkZW9TdXBwb3J0LCAkd2ViU29ja2V0c1N1cHBvcnQsICR3bWxTdXBwb3J0
LCAkd29ya2Vyc1N1cHBvcnQsCkBAIC03NCw2ICs3NCw5IEBAIG15IEBmZWF0dXJlcyA9ICgKICAg
ICB7IG9wdGlvbiA9PiAiZG9tLXN0b3JhZ2UiLCBkZXNjID0+ICJUb2dnbGUgRE9NIFN0b3JhZ2Ug
U3VwcG9ydCIsCiAgICAgICBkZWZpbmUgPT4gIkVOQUJMRV9ET01fU1RPUkFHRSIsIGRlZmF1bHQg
PT4gMSwgdmFsdWUgPT4gXCRkb21TdG9yYWdlU3VwcG9ydCB9LAogCisgICAgeyBvcHRpb24gPT4g
ImV2ZW50c291cmNlIiwgZGVzYyA9PiAiVG9nZ2xlIHNlcnZlci1zZW50IGV2ZW50cyBzdXBwb3J0
IiwKKyAgICAgIGRlZmluZSA9PiAiRU5BQkxFX0VWRU5UU09VUkNFIiwgZGVmYXVsdCA9PiAxLCB2
YWx1ZSA9PiBcJGV2ZW50c291cmNlU3VwcG9ydCB9LAorCiAgICAgeyBvcHRpb24gPT4gImZpbHRl
cnMiLCBkZXNjID0+ICJUb2dnbGUgRmlsdGVycyBzdXBwb3J0IiwKICAgICAgIGRlZmluZSA9PiAi
RU5BQkxFX0ZJTFRFUlMiLCBkZWZhdWx0ID0+IDAsIHZhbHVlID0+IFwkZmlsdGVyc1N1cHBvcnQg
fSwKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDcxMDUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOCBAQAorMjAwOS0wOC0xMiAgQWRhbSBCZXJna3Zp
c3QgIDxhZGFtLmJlcmdrdmlzdEBlcmljc3Nvbi5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgZm9yIEV2ZW50U291cmNlLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTcgCisKKyAgICAg
ICAgKiBmYXN0L2V2ZW50c291cmNlOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50c291cmNl
L2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0ZW5lcnMu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25z
dHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzb3VyY2Uv
ZXZlbnRzb3VyY2UtY29uc3RydWN0b3IuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9ldmVudHNvdXJjZTogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9l
dmVudHNvdXJjZS1iYWQtbWltZS10eXBlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1iYWQtbWltZS10eXBlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2Ut
ZXZlbnQtc3RyZWFtLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9l
dmVudHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0uaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50
c291cmNlLXJlY29ubmVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50
c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNv
ZGUtc3RhdGVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2Uv
cmVzb3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291
cmNlcy9iYWQtbWltZS10eXBlLmFzaXM6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvZXZl
bnRzb3VyY2UvcmVzb3VyY2VzL2V2ZW50LXN0cmVhbS5waHA6IEFkZGVkLgorICAgICAgICAqIGh0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3JlY29ubmVjdC5waHA6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJl
YW0uYXNpczogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJj
ZXMvc3RhdHVzLWNvZGVzLnBocDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS93b3JrZXJzOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dv
cmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2Vz
OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3Vy
Y2VzL3NpbXBsZS13b3JrZXIuanM6IEFkZGVkLgorICAgICAgICAoZXMub25tZXNzYWdlKToKKyAg
ICAgICAgKGVzLm9uZXJyb3IpOgorCiAyMDA5LTA4LTEyICBBcml5YSBIaWRheWF0ICA8YXJpeWEu
aGlkYXlhdEBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJp
dGFuY2UtMi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20v
cHJvdG90eXBlLWluaGVyaXRhbmNlLTItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0NzEwNSkKKysr
IExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1pbmhlcml0YW5jZS0yLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBQQVNTIERhdGFHcmlkQ29sdW1uTGlz
dENvbnN0cnVjdG9yIGZyb20gCiBQQVNTIERhdGFHcmlkQ29sdW1uTGlzdFByb3RvdHlwZSBmcm9t
IGlubmVyLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2hpbGROb2Rlcy4xNC5jb2x1bW5zLl9fcHJv
dG9fXwogUEFTUyBEb2N1bWVudFByb3RvdHlwZSBmcm9tIGlubmVyLmRvY3VtZW50Ll9fcHJvdG9f
Xy5fX3Byb3RvX18KIFBBU1MgRWxlbWVudFByb3RvdHlwZSBmcm9tIGlubmVyLmRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQubGFzdEVsZW1lbnRDaGlsZC5fX3Byb3RvX18uX19wcm90b19fCitQQVNTIEV2
ZW50U291cmNlQ29udHJ1Y3RvciBmcm9tIGlubmVyLkV2ZW50U291cmNlCiBGQUlMIEZ1bmN0aW9u
IGZyb20gaW5uZXIuZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUuY29uc3RydWN0b3IKIFBBU1Mg
SFRNTEFuY2hvckVsZW1lbnQgZnJvbSBpbm5lci5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmZpcnN0
RWxlbWVudENoaWxkCiBQQVNTIEhUTUxBbmNob3JFbGVtZW50Q29uc3RydWN0b3IgZnJvbSBpbm5l
ci5kb2N1bWVudC5hY3RpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmNvbnN0cnVjdG9yCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9wcm90b3R5cGUtaW5oZXJpdGFuY2UtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3Byb3RvdHlwZS1pbmhlcml0
YW5jZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDQ3MTA1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9k
b20vcHJvdG90eXBlLWluaGVyaXRhbmNlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNiArNzcsOCBAQCBQQVNTIGlubmVyLkV2ZW50LmlzSW5uZXIgaXMgdHJ1ZQogUEFTUyBpbm5l
ci5FdmVudC5jb25zdHJ1Y3Rvci5pc0lubmVyIGlzIHRydWUKIFBBU1MgaW5uZXIuRXZlbnRFeGNl
cHRpb24uaXNJbm5lciBpcyB0cnVlCiBQQVNTIGlubmVyLkV2ZW50RXhjZXB0aW9uLmNvbnN0cnVj
dG9yLmlzSW5uZXIgaXMgdHJ1ZQorUEFTUyBpbm5lci5FdmVudFNvdXJjZS5pc0lubmVyIGlzIHRy
dWUKK1BBU1MgaW5uZXIuRXZlbnRTb3VyY2UuY29uc3RydWN0b3IuaXNJbm5lciBpcyB0cnVlCiBQ
QVNTIGlubmVyLkZpbGUuaXNJbm5lciBpcyB0cnVlCiBQQVNTIGlubmVyLkZpbGUuY29uc3RydWN0
b3IuaXNJbm5lciBpcyB0cnVlCiBQQVNTIGlubmVyLkZpbGVMaXN0LmlzSW5uZXIgaXMgdHJ1ZQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93
LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA0NzEwNSkKKysrIExheW91dFRlc3Rz
L2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTg1Nyw2ICs4NTcsMTUgQEAgd2luZG93LkV2ZW50RXhjZXB0aW9uIFtvYmplY3Qg
RXZlbnRFeGNlcAogd2luZG93LkV2ZW50RXhjZXB0aW9uLlVOU1BFQ0lGSUVEX0VWRU5UX1RZUEVf
RVJSIFtudW1iZXJdCiB3aW5kb3cuRXZlbnRFeGNlcHRpb24ucHJvdG90eXBlIFtvYmplY3QgRXZl
bnRFeGNlcHRpb25Qcm90b3R5cGVdCiB3aW5kb3cuRXZlbnRFeGNlcHRpb24ucHJvdG90eXBlLlVO
U1BFQ0lGSUVEX0VWRU5UX1RZUEVfRVJSIFtudW1iZXJdCit3aW5kb3cuRXZlbnRTb3VyY2UgW29i
amVjdCBFdmVudFNvdXJjZUNvbnRydWN0b3JdCit3aW5kb3cuRXZlbnRTb3VyY2UucHJvdG90eXBl
IFtvYmplY3QgRXZlbnRTb3VyY2VQcm90b3R5cGVdCit3aW5kb3cuRXZlbnRTb3VyY2UucHJvdG90
eXBlLkNMT1NFRCBbbnVtYmVyXQord2luZG93LkV2ZW50U291cmNlLnByb3RvdHlwZS5DT05ORUNU
SU5HIFtudW1iZXJdCit3aW5kb3cuRXZlbnRTb3VyY2UucHJvdG90eXBlLk9QRU4gW251bWJlcl0K
K3dpbmRvdy5FdmVudFNvdXJjZS5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciBbZnVuY3Rpb25d
Cit3aW5kb3cuRXZlbnRTb3VyY2UucHJvdG90eXBlLmNsb3NlIFtmdW5jdGlvbl0KK3dpbmRvdy5F
dmVudFNvdXJjZS5wcm90b3R5cGUuZGlzcGF0Y2hFdmVudCBbZnVuY3Rpb25dCit3aW5kb3cuRXZl
bnRTb3VyY2UucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgW2Z1bmN0aW9uXQogd2luZG93
LkZpbGUgW29iamVjdCBGaWxlQ29uc3RydWN0b3JdCiB3aW5kb3cuRmlsZS5wcm90b3R5cGUgW29i
amVjdCBGaWxlUHJvdG90eXBlXQogd2luZG93LkZpbGVMaXN0IFtvYmplY3QgRmlsZUxpc3RDb25z
dHJ1Y3Rvcl0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Ut
YXR0cmlidXRlLWxpc3RlbmVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZl
bnRzb3VyY2UtYXR0cmlidXRlLWxpc3RlbmVycy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOCBAQAorVGVzdCBFdmVudFNvdXJjZSBhdHRyaWJ1dGUgbGlzdGVuZXIgZnVuY3Rp
b25hbGl0eS4gU2hvdWxkIHByaW50IGEgc2VyaWVzIG9mIFBBU1MgbWVzc2FnZXMgZm9sbG93ZWQg
YnkgRE9ORS4KKworUEFTUzogYXR0cmlidXRlIGxpc3RlbmVycyBhcmUgaW5pdGlhbGx5IG51bGwK
K1BBU1M6IHNldHRpbmcgYW5kIGdldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtzCitQQVNT
OiByZXNldHRpbmcgYXR0cmlidXRlIGxpc3RlbmVyIHdvcmtzCitQQVNTOiBkaXNwYXRjaGluZyBl
dmVudCBvbiBhbiBFdmVudFNvdXJjZSB0cmlnZ2VycyBhdHRyaWJ1dGUgbGlzdGVuZXIKK0RPTkUK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1
dGUtbGlzdGVuZXJzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNv
dXJjZS9ldmVudHNvdXJjZS1hdHRyaWJ1dGUtbGlzdGVuZXJzLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWF0dHJpYnV0ZS1saXN0
ZW5lcnMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBAQAorPGh0bWw+Cis8Ym9keT4K
KzxwPlRlc3QgRXZlbnRTb3VyY2UgYXR0cmlidXRlIGxpc3RlbmVyIGZ1bmN0aW9uYWxpdHkuIFNo
b3VsZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuPC9w
PgorPGRpdiBpZD0icmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobXNnKSB7
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCArPSBtc2cg
KyAiPGJyPiI7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgZXMgPSBuZXcgRXZlbnRTb3VyY2UoImV2ZW50
c291cmNlIik7CisKK2lmIChlcy5vbm9wZW4gPT0gbnVsbCAmJiBlcy5vbm1lc3NhZ2UgPT0gbnVs
bCAmJiBlcy5vbmVycm9yID09IG51bGwpCisgICAgbG9nKCJQQVNTOiBhdHRyaWJ1dGUgbGlzdGVu
ZXJzIGFyZSBpbml0aWFsbHkgbnVsbCIpOworZWxzZQorICAgIGxvZygiRkFJTDogYXR0cmlidXRl
IGxpc3RlbmVycyBhcmUgbm90IG51bGwgaW5pdGlhbGx5Iik7CisKK3ZhciBhID0gZnVuY3Rpb24g
KCkge307Citlcy5vbm9wZW4gPSBhOworaWYgKGVzLm9ub3BlbiA9PSBhKQorICAgIGxvZygiUEFT
Uzogc2V0dGluZyBhbmQgZ2V0dGluZyBhdHRyaWJ1dGUgbGlzdGVuZXIgd29ya3MiKTsKK2Vsc2UK
KyAgICBsb2coIkZBSUw6IHNldHRpbmcvZ2V0dGluZyBhdHRyaWJ1dGUgbGlzdGVuZXIgZG9lcyBu
b3Qgd29yayIpOworCit2YXIgYiA9IGZ1bmN0aW9uICgpIHt9OworZXMub25vcGVuID0gYjsKK2lm
IChlcy5vbm9wZW4gPT0gYikKKyAgICBsb2coIlBBU1M6IHJlc2V0dGluZyBhdHRyaWJ1dGUgbGlz
dGVuZXIgd29ya3MiKTsKK2Vsc2UKKyAgICBsb2coIkZBSUw6IHJlc2V0dGluZyBhdHRyaWJ1dGUg
bGlzdGVuZXIgZG9lcyBub3Qgd29yayIpOworCit2YXIgZmxhZyA9IGZhbHNlOworZXMub25tZXNz
YWdlID0gZnVuY3Rpb24gKGUpIHsgZmxhZyA9IChlLmRhdGEgPT0gImhlbGxvIik7IH07Cit2YXIg
ZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1lc3NhZ2VFdmVudCIpOworZXZ0LmluaXRNZXNz
YWdlRXZlbnQoIm1lc3NhZ2UiLCBmYWxzZSwgZmFsc2UsICJoZWxsbyIsIG51bGwsIG51bGwsIG51
bGwsIG51bGwpOworZXMuZGlzcGF0Y2hFdmVudChldnQpOworaWYgKGZsYWcpIHsKKyAgICBsb2co
IlBBU1M6IGRpc3BhdGNoaW5nIGV2ZW50IG9uIGFuIEV2ZW50U291cmNlIHRyaWdnZXJzIGF0dHJp
YnV0ZSBsaXN0ZW5lciIpOworICAgIGxvZygiRE9ORSIpOworfQorZWxzZQorICAgIGxvZygiRkFJ
TDogZGlzcGF0Y2hpbmcgZXZlbnQgb24gYW4gRXZlbnRTb3VyY2UgZG9lcyBub3QgdHJpZ2dlciBh
dHRyaWJ1dGUgbGlzdGVuZXIiKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHNvdXJjZS9ldmVudHNv
dXJjZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWNv
bnN0cnVjdG9yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitUZXN0
IEV2ZW50U291cmNlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNl
cmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuCisKK1BBU1M6IG1pc3Npbmcg
YXJndW1lbnQgdG8gRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0
aW9uIChTeW50YXhFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMpCitQQVNTOiBwYXNzaW5nIGFu
IGVtcHR5IHN0cmluZyB0byB0aGUgRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4g
YW4gZXhjZXB0aW9uIChFcnJvcjogU1lOVEFYX0VSUjogRE9NIEV4Y2VwdGlvbiAxMikKK1BBU1M6
IHBhc3NpbmcgYW4gaW52YWxpZCBVUkwgdG8gdGhlIEV2ZW50U291cmNlIGNvbnN0cnVjdG9yIHJl
c3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAoRXJyb3I6IFNZTlRBWF9FUlI6IERPTSBFeGNlcHRpb24g
MTIpCitET05FCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzb3VyY2UvZXZlbnRzb3Vy
Y2UtY29uc3RydWN0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
c291cmNlL2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50c291cmNlL2V2ZW50c291cmNlLWNvbnN0cnVjdG9yLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50
U291cmNlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uYWxpdHkuIFNob3VsZCBwcmludCBhIHNlcmllcyBv
ZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuPC9wPgorPGRpdiBpZD0icmVzdWx0Ij48
L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobXNnKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCArPSBtc2cgKyAiPGJyPiI7Cit9CisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
fQorCit0cnkgeworICAgIG5ldyBFdmVudFNvdXJjZSgpOworICAgIGxvZygiRkFJTDogbm8gZXhj
ZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGNvbnN0cnVjdCBhbiBFdmVudFNvdXJjZSB3aXRob3V0IGFy
Z3VtZW50Iik7Cit9CitjYXRjaCAoZXgpIHsKKyAgICBsb2coIlBBU1M6IG1pc3NpbmcgYXJndW1l
bnQgdG8gRXZlbnRTb3VyY2UgY29uc3RydWN0b3IgcmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgi
ICsgZXggKyAiKSIpOworfQorCit0cnkgeworICAgIG5ldyBFdmVudFNvdXJjZSgiIik7CisgICAg
bG9nKCJGQUlMOiBubyBleGNlcHRpb24gd2hlbiBwYXNzaW5nIGFuIGVtcHR5IHN0cmluZyB0byB0
aGUgRXZlbnRTb3VyY2UgY29uc3RydWN0b3IiKTsKK30KK2NhdGNoIChleCkgeworICAgIGxvZygi
UEFTUzogcGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gdGhlIEV2ZW50U291cmNlIGNvbnN0cnVj
dG9yIHJlc3VsdGVkIGluIGFuIGV4Y2VwdGlvbiAoIiArIGV4ICsgIikiKTsKK30KKwordHJ5IHsK
KyAgICBuZXcgRXZlbnRTb3VyY2UoImh0dHA6Ly93ZWJzZXJ2ZXI6ZWlnaHR5LyIpOworICAgIGxv
ZygiRkFJTDogbm8gZXhjZXB0aW9uIHdoZW4gcGFzc2luZyBhbiBpbnZhbGlkIFVSTCB0byB0aGUg
RXZlbnRTb3VyY2UgY29uc3RydWN0b3IiKTsKK30KK2NhdGNoIChleCkgeworICAgIGxvZygiUEFT
UzogcGFzc2luZyBhbiBpbnZhbGlkIFVSTCB0byB0aGUgRXZlbnRTb3VyY2UgY29uc3RydWN0b3Ig
cmVzdWx0ZWQgaW4gYW4gZXhjZXB0aW9uICgiICsgZXggKyAiKSIpOworICAgIGxvZygiRE9ORSIp
OworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLWJhZC1t
aW1lLXR5cGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291
cmNlLWJhZC1taW1lLXR5cGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQg
QEAKK1Rlc3QgRXZlbnRTb3VyY2Ugd2l0aCBhbiBldmVudC1zdHJlYW0gd2l0aCBpbmNvcnJlY3Qg
bWltZS10eXBlLgorCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRz
b3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtYmFkLW1pbWUtdHlwZS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9l
dmVudHNvdXJjZS1iYWQtbWltZS10eXBlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMg
QEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50U291cmNlIHdpdGggYW4gZXZlbnQtc3Ry
ZWFtIHdpdGggaW5jb3JyZWN0IG1pbWUtdHlwZS48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2
PgorPHNjcmlwdD4KK2Z1bmN0aW9uIGxvZyhtc2cpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MICs9IG1zZyArICI8YnI+IjsKK30KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisK
K3ZhciBlcyA9IG5ldyBFdmVudFNvdXJjZSgicmVzb3VyY2VzL2JhZC1taW1lLXR5cGUuYXNpcyIp
OworCitlcy5vbm9wZW4gPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgbG9nKCJGQUlMOiBnb3QgdW5l
eHBlY3RlZCBvcGVuIGV2ZW50Iik7CisgICAgZW5kKCk7Cit9OworCitlcy5vbm1lc3NhZ2UgPSBm
dW5jdGlvbiAoZXZ0KSB7CisgICAgbG9nKCJGQUlMOiBnb3QgdW5leHBlY3RlZCBtZXNzYWdlIGV2
ZW50Iik7CisgICAgZW5kKCk7Cit9OworCitlcy5vbmVycm9yID0gZnVuY3Rpb24gKCkgeworICAg
IGlmIChlcy5yZWFkeVN0YXRlID09IGVzLkNMT1NFRCkKKyAgICAgICAgbG9nKCJQQVNTIik7Cisg
ICAgZWxzZQorICAgICAgICBsb2coIkZBSUw6IGludmFsaWQgc3RhdGUiKTsKKyAgICBlbmQoKTsK
K307CisKK2Z1bmN0aW9uIGVuZCgpIHsKKyAgICBlcy5jbG9zZSgpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXBhcnNlLWV2ZW50LXN0cmVh
bS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVu
dHNvdXJjZS9ldmVudHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0tZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJj
ZS1wYXJzZS1ldmVudC1zdHJlYW0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEzIEBACitUZXN0IEV2ZW50U291cmNlIHRleHQvZXZlbnQtc3RyZWFtIHBhcnNpbmcuIFNob3Vs
ZCBwcmludCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuCisKK1BB
U1M6IGdvdCBvcGVuIGV2ZW50CitQQVNTOiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEgInNpbXBs
ZSIKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IHdpdGggZGF0YSBzcGFubmluZyBtdWx0aXBsZSBsaW5l
cworUEFTUzogcmVjZWl2ZWQgZXZlbnQgYW5kIGxhc3RFdmVudElkIGlzICIxIgorUEFTUzogcmVj
ZWl2ZWQgZXZlbnQgYW5kIGxhc3RFdmVudElkIGlzIHN0aWxsICIxIgorUEFTUzogcmVjZWl2ZWQg
ZXZlbnQgYW5kIGxhc3RFdmVudElkIGhhcyBiZWVuIGNsZWFyZWQKK1BBU1M6IGdvdCBvcGVuIGV2
ZW50IGZyb20gc2VydmVyCitQQVNTOiByZWNlaXZlZCBldmVudCBhbmQgdGhlIGV2ZW50IG5hbWUg
aGFzIGJlZW4gcmVzZXQKK1BBU1M6IHJlY2VpdmVkIGV2ZW50IHdpdGggZGF0YSB0aGF0IGNvbnRh
aW5zIGEgY29sb24gYW5kIGEgY2FycmlhZ2UgcmV0dXJuCitET05FCisKSW5kZXg6IExheW91dFRl
c3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3RyZWFt
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9l
dmVudHNvdXJjZS1wYXJzZS1ldmVudC1zdHJlYW0uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcGFyc2UtZXZlbnQtc3Ry
ZWFtLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKzxodG1sPgorPGJvZHk+Cis8
cD5UZXN0IEV2ZW50U291cmNlIHRleHQvZXZlbnQtc3RyZWFtIHBhcnNpbmcuIFNob3VsZCBwcmlu
dCBhIHNlcmllcyBvZiBQQVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuPC9wPgorPGRpdiBp
ZD0icmVzdWx0Ij48L2Rpdj4KKzxzY3JpcHQ+CitmdW5jdGlvbiBsb2cobXNnKSB7CisgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCArPSBtc2cgKyAiPGJyPiI7
Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworfQorCit2YXIgY291bnQgPSAwOwordmFyIGVzID0gbmV3IEV2ZW50U291cmNl
KCJyZXNvdXJjZXMvZXZlbnQtc3RyZWFtLnBocCIpOworCitlcy5vbm9wZW4gPSBmdW5jdGlvbiAo
ZXZ0KSB7CisgICAgaWYgKCFldnQuZGF0YSkKKyAgICAgICAgbG9nKCJQQVNTOiBnb3Qgb3BlbiBl
dmVudCIpOworICAgIGVsc2UKKyAgICAgICAgbG9nKCJQQVNTOiBnb3Qgb3BlbiBldmVudCBmcm9t
IHNlcnZlciIpOworfTsKKworZXMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIHN3
aXRjaChjb3VudCsrKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGlmIChldnQuZGF0
YSA9PSAic2ltcGxlIikKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6IHJlY2VpdmVkIGV2ZW50
IHdpdGggZGF0YSBcInNpbXBsZVwiIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAxOgorICAgICAgICAgICAgaWYgKGV2dC5kYXRhID09ICJzcGFubmluZ1xubXVsdGlwbGVcblxu
bGluZXNcbiIpCisgICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCB3aXRo
IGRhdGEgc3Bhbm5pbmcgbXVsdGlwbGUgbGluZXMiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gImlkIGlzIDEiICYmIGV2
dC5sYXN0RXZlbnRJZCA9PSAiMSIpCisgICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZl
ZCBldmVudCBhbmQgbGFzdEV2ZW50SWQgaXMgXCIxXCIiKTsKKyAgICAgICAgICAgIGJyZWFrCisg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGlmIChldnQuZGF0YSA9PSAiaWQgaXMgc3RpbGwg
MSIgJiYgZXZ0Lmxhc3RFdmVudElkID09ICIxIikKKyAgICAgICAgICAgICAgICBsb2coIlBBU1M6
IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBpcyBzdGlsbCBcIjFcIiIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGlmIChldnQuZGF0YSA9
PSAibm8gaWQiICYmIGV2dC5sYXN0RXZlbnRJZCA9PSAiIikKKyAgICAgICAgICAgICAgICBsb2co
IlBBU1M6IHJlY2VpdmVkIGV2ZW50IGFuZCBsYXN0RXZlbnRJZCBoYXMgYmVlbiBjbGVhcmVkIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgaWYgKGV2
dC5kYXRhID09ICJhIG1lc3NhZ2UgZXZlbnQgd2l0aCB0aGUgbmFtZSBcIm1lc3NhZ2VcIiIpCisg
ICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCBhbmQgdGhlIGV2ZW50IG5h
bWUgaGFzIGJlZW4gcmVzZXQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDY6
CisgICAgICAgICAgICBpZiAoZXZ0LmRhdGEgPT0gImEgbGluZSBlbmRpbmcgd2l0aCBjcmxmXG5h
IGxpbmUgd2l0aCBhIDogKGNvbG9uKVxuYSBsaW5lIHdpdGggYSBcciAoY2FycmlhZ2UgcmV0dXJu
KSIpCisgICAgICAgICAgICAgICAgbG9nKCJQQVNTOiByZWNlaXZlZCBldmVudCB3aXRoIGRhdGEg
dGhhdCBjb250YWlucyBhIGNvbG9uIGFuZCBhIGNhcnJpYWdlIHJldHVybiIpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBsb2coIkZBSUw6IGdvdCB1
bmV4cGVjdGVkIGV2ZW50Iik7CisgICAgICAgICAgICBlcy5jbG9zZSgpOworICAgIH0KK307CisK
K2VzLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7CisgICAgZXMuY2xvc2UoKTsKKworICAgIGlmIChj
b3VudCAhPSA3KQorICAgICAgICBsb2coIkZBSUw6IGdvdCB1bmV4cGVjdGVkIGVycm9yIGV2ZW50
Iik7CisgICAgZWxzZQorICAgICAgICBsb2coIkRPTkUiKTsKKworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK307Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50
c291cmNlLXJlY29ubmVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291cmNlLXJlY29ubmVjdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgRXZlbnRTb3VyY2UgcmVjb25u
ZWN0IGFmdGVyIGVuZCBvZiBldmVudCBzdHJlYW0uIFNob3VsZCBwcmludCBhIHNlcmllcyBvZiBQ
QVNTIG1lc3NhZ2VzIGZvbGxvd2VkIGJ5IERPTkUuCisKK1BBU1M6IHN0YXRlIGlzIENPTk5FQ1RJ
TkcKK1BBU1M6IHN0YXRlIGlzIE9QRU4KK1BBU1M6IGdvdCBsYXN0RXZlbnRJZCAiNzciCitQQVNT
OiBzdGF0ZSBpcyBDT05ORUNUSU5HCitQQVNTOiBzdGF0ZSBpcyBPUEVOCitQQVNTOiBMYXN0LUV2
ZW50LUlEIGhlYWRlciB3YXMgY29ycmVjdAorUEFTUzogc3RhdGUgaXMgQ0xPU0VECitET05FCisK
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVj
b25uZWN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNv
dXJjZS9ldmVudHNvdXJjZS1yZWNvbm5lY3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2UtcmVjb25uZWN0Lmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzcgQEAKKzxodG1sPgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50
U291cmNlIHJlY29ubmVjdCBhZnRlciBlbmQgb2YgZXZlbnQgc3RyZWFtLiBTaG91bGQgcHJpbnQg
YSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBET05FLjwvcD4KKzxkaXYgaWQ9
InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOwor
fQorCit2YXIgc3RhdGVOYW1lcyA9IFsiQ09OTkVDVElORyIsICJPUEVOIiwgIkNMT1NFRCJdOwor
Zm9yICh2YXIgaSBpbiBzdGF0ZU5hbWVzKQorICAgIGV2YWwoInZhciAiICsgc3RhdGVOYW1lc1tp
XSArICIgPSAiICsgaSk7Cit2YXIgcmV0cnlUaW1lb3V0OworCitmdW5jdGlvbiBjaGVja1JlYWR5
U3RhdGUoZXMsIGRlc2lyZWRTdGF0ZSkgeworICAgIHZhciBjdXJyU3RhdGUgPSBlcy5yZWFkeVN0
YXRlOworICAgIGlmIChjdXJyU3RhdGUgPT0gZGVzaXJlZFN0YXRlKQorICAgICAgICBsb2coIlBB
U1M6IHN0YXRlIGlzICIgKyBzdGF0ZU5hbWVzW2Rlc2lyZWRTdGF0ZV0pOworICAgIGVsc2UKKyAg
ICAgICAgbG9nKCJGQUlMOiBiYWQgc3RhdGUgKCIgKyBzdGF0ZU5hbWVzW2N1cnJTdGF0ZV0gKyAi
LCBzaG91bGQgYmUgIiArIHN0YXRlTmFtZXNbZGVzaXJlZFN0YXRlXSArICIpIik7Cit9CisKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworfQorCit2YXIgZXJyQ291bnQgPSAwOwordmFyIGVzID0gbmV3IEV2ZW50U291cmNlKCJyZXNv
dXJjZXMvcmVjb25uZWN0LnBocCIpOworCitjaGVja1JlYWR5U3RhdGUoZXMsIENPTk5FQ1RJTkcp
OworCitlcy5vbm9wZW4gPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAgY2hlY2tSZWFkeVN0YXRlKGVz
LCBPUEVOKTsKK307CisKK2VzLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHsKKyAgICBpZiAo
IWVyckNvdW50KSB7CisgICAgICAgIGlmIChldnQubGFzdEV2ZW50SWQgPT0gIjc3IikKKyAgICAg
ICAgICAgIGxvZygiUEFTUzogZ290IGxhc3RFdmVudElkIFwiNzdcIiIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBsb2coIkZBSUw6IHVuZXhwZWN0ZWQgbGFzdEV2ZW50SWQgXCIiICsgZXZ0
Lmxhc3RFdmVudElkICsgIlwiIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV2dC5kYXRh
ID09ICI3NyIpCisgICAgICAgICAgICBsb2coIlBBU1M6IExhc3QtRXZlbnQtSUQgaGVhZGVyIHdh
cyBjb3JyZWN0Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiRkFJTDogTGFzdC1F
dmVudC1JRCBoZWFkZXIgd2FzIGluY29ycmVjdC9taXNzaW5nIik7CisgICAgfQorfTsKKworZXMu
b25lcnJvciA9IGZ1bmN0aW9uICgpIHsKKyAgICBlcnJDb3VudCsrOworICAgIGlmIChlcnJDb3Vu
dCA8IDIpIHsKKyAgICAgICAgY2hlY2tSZWFkeVN0YXRlKGVzLCBDT05ORUNUSU5HKTsKKyAgICAg
ICAgcmV0cnlUaW1lb3V0ID0gc2V0VGltZW91dChlbmQsIDEwMDApOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGNsZWFyVGltZW91dChyZXRyeVRpbWVvdXQpOworICAgIHJldHJ5VGltZW91
dCA9IG51bGw7CisgICAgZW5kKCk7Cit9OworCitmdW5jdGlvbiBlbmQoKSB7CisgICAgZXMuY2xv
c2UoKTsKKyAgICBpZiAocmV0cnlUaW1lb3V0KQorICAgICAgICBsb2coIkZBSUw6IGRpZCBub3Qg
cmVjb25uZWN0IGluIHRpbWUiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgY2hlY2tSZWFkeVN0YXRl
KGVzLCBDTE9TRUQpOworICAgICAgICBsb2coIkRPTkUiKTsKKyAgICB9CisKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvZXZlbnRzb3VyY2Utc3RhdHVzLWNvZGUtc3Rh
dGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2
ZW50c291cmNlL2V2ZW50c291cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL2V2ZW50c291
cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTMgQEAKK1Rlc3QgRXZlbnRTb3VyY2Ugc3RhdGVzIGZvciBkaWZmZXJlbnQgc3RhdHVzIGNv
ZGVzLiBTaG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBE
T05FLgorCitQQVNTOiBzdGF0dXMgY29kZSAyMDAgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5FQ1RJ
TkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRAorUEFTUzogc3RhdHVzIGNvZGUgMjA0
IHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BBU1M6
IHN0YXR1cyBjb2RlIDIwNSByZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgQ09OTkVDVElO
RywgQ0xPU0VECitQQVNTOiBzdGF0dXMgY29kZSAyMDIgcmVzdWx0ZWQgaW4gc3RhdGVzIENPTk5F
Q1RJTkcsIENPTk5FQ1RJTkcsIENMT1NFRAorUEFTUzogc3RhdHVzIGNvZGUgMzAxIHJlc3VsdGVk
IGluIHN0YXRlcyBDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BB
U1M6IHN0YXR1cyBjb2RlIDMwMiByZXN1bHRlZCBpbiBzdGF0ZXMgQ09OTkVDVElORywgT1BFTiwg
T1BFTiwgQ09OTkVDVElORywgQ0xPU0VECitQQVNTOiBzdGF0dXMgY29kZSAzMDMgcmVzdWx0ZWQg
aW4gc3RhdGVzIENPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRAorUEFT
Uzogc3RhdHVzIGNvZGUgMzA3IHJlc3VsdGVkIGluIHN0YXRlcyBDT05ORUNUSU5HLCBPUEVOLCBP
UEVOLCBDT05ORUNUSU5HLCBDTE9TRUQKK1BBU1M6IHN0YXR1cyBjb2RlIDQwNCByZXN1bHRlZCBp
biBzdGF0ZXMgQ09OTkVDVElORywgQ0xPU0VELCBDTE9TRUQKK0RPTkUKKwpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0dXMtY29kZS1zdGF0
ZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNl
L2V2ZW50c291cmNlLXN0YXR1cy1jb2RlLXN0YXRlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdGF0dXMtY29kZS1z
dGF0ZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OCBAQAorPGh0bWw+Cis8Ym9keT4K
KzxwPlRlc3QgRXZlbnRTb3VyY2Ugc3RhdGVzIGZvciBkaWZmZXJlbnQgc3RhdHVzIGNvZGVzLiBT
aG91bGQgcHJpbnQgYSBzZXJpZXMgb2YgUEFTUyBtZXNzYWdlcyBmb2xsb3dlZCBieSBET05FLjwv
cD4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykg
eworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNn
ICsgIjxicj4iOworfQorCitmdW5jdGlvbiBhcnJheUNvbXBhcmUoYTEsIGEyKSB7CisgICAgaWYg
KGExLmxlbmd0aCAhPSBhMi5sZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGExLmxlbmd0aDsgaSsrKQorICAgICAgICBpZiAoYTFbaV0gIT0gYTJb
aV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zh
ciBzdGF0ZU5hbWVzID0gWyJDT05ORUNUSU5HIiwgIk9QRU4iLCAiQ0xPU0VEIl07Citmb3IgKHZh
ciBpIGluIHN0YXRlTmFtZXMpCisgICAgZXZhbCgidmFyICIgKyBzdGF0ZU5hbWVzW2ldICsgIiA9
ICIgKyBpKTsKKwordmFyIHRlc3RzID0gW3siY29kZSI6IDIwMCwgImV4cGVjdGVkU3RhdGVzIjog
W0NPTk5FQ1RJTkcsIE9QRU4sIE9QRU4sIENPTk5FQ1RJTkcsIENMT1NFRF19LAorICAgICAgICAg
ICAgIHsiY29kZSI6IDIwNCwgImV4cGVjdGVkU3RhdGVzIjogW0NPTk5FQ1RJTkcsLCwgQ09OTkVD
VElORywgQ0xPU0VEXX0sCisgICAgICAgICAgICAgeyJjb2RlIjogMjA1LCAiZXhwZWN0ZWRTdGF0
ZXMiOiBbQ09OTkVDVElORywsLCBDT05ORUNUSU5HLCBDTE9TRURdfSwKKyAgICAgICAgICAgICB7
ImNvZGUiOiAyMDIsICJleHBlY3RlZFN0YXRlcyI6IFtDT05ORUNUSU5HLCwsIENPTk5FQ1RJTkcs
IENMT1NFRF19LCAvLyBvdGhlciAyeHgKKyAgICAgICAgICAgICB7ImNvZGUiOiAzMDEsICJleHBl
Y3RlZFN0YXRlcyI6IFtDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBDT05ORUNUSU5HLCBDTE9TRURd
fSwKKyAgICAgICAgICAgICB7ImNvZGUiOiAzMDIsICJleHBlY3RlZFN0YXRlcyI6IFtDT05ORUNU
SU5HLCBPUEVOLCBPUEVOLCBDT05ORUNUSU5HLCBDTE9TRURdfSwKKyAgICAgICAgICAgICB7ImNv
ZGUiOiAzMDMsICJleHBlY3RlZFN0YXRlcyI6IFtDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBDT05O
RUNUSU5HLCBDTE9TRURdfSwKKyAgICAgICAgICAgICB7ImNvZGUiOiAzMDcsICJleHBlY3RlZFN0
YXRlcyI6IFtDT05ORUNUSU5HLCBPUEVOLCBPUEVOLCBDT05ORUNUSU5HLCBDTE9TRURdfSwKKyAg
ICAgICAgICAgICB7ImNvZGUiOiA0MDQsICJleHBlY3RlZFN0YXRlcyI6IFtDT05ORUNUSU5HLCws
IENMT1NFRCwgQ0xPU0VEXX1dOyAvLyBhbnkgb3RoZXIKK3ZhciBjb3VudCA9IDA7CisKK2Z1bmN0
aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKGNvdW50ID49IHRlc3RzLmxlbmd0aCkgeworICAgICAg
ICBsb2coIkRPTkUiKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHZhciBzdGF0ZXMgPSBbXTsKKyAgICB2YXIgZXMgPSBuZXcg
RXZlbnRTb3VyY2UoInJlc291cmNlcy9zdGF0dXMtY29kZXMucGhwP3N0YXR1cy1jb2RlPSIgKyB0
ZXN0c1tjb3VudF0uY29kZSk7CisgICAgc3RhdGVzWzBdID0gZXMucmVhZHlTdGF0ZTsKKworICAg
IGVzLm9ub3BlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc3RhdGVzWzFdID0gZXMucmVhZHlT
dGF0ZTsKKyAgICB9OworCisgICAgZXMub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAg
ICAgICBzdGF0ZXNbMl0gPSBlcy5yZWFkeVN0YXRlOworICAgIH07CisKKyAgICBlcy5vbmVycm9y
ID0gZnVuY3Rpb24gKCkgeworICAgICAgICBzdGF0ZXNbM10gPSBlcy5yZWFkeVN0YXRlOworICAg
ICAgICBlcy5jbG9zZSgpOworICAgICAgICBzdGF0ZXNbNF0gPSBlcy5yZWFkeVN0YXRlOworCisg
ICAgICAgIHZhciByZXN1bHQgPSBhcnJheUNvbXBhcmUoc3RhdGVzLCB0ZXN0c1tjb3VudF0uZXhw
ZWN0ZWRTdGF0ZXMpID8gIlBBU1MiIDogIkZBSUwiOworICAgICAgICByZXN1bHQgKz0gIjogc3Rh
dHVzIGNvZGUgIiArIHRlc3RzW2NvdW50XS5jb2RlICsgIiByZXN1bHRlZCBpbiBzdGF0ZXMgIjsK
KyAgICAgICAgZm9yICh2YXIgaSBpbiBzdGF0ZXMpCisgICAgICAgICAgICByZXN1bHQgKz0gKGkg
IT0gMCA/ICIsICIgOiAiIikgKyBzdGF0ZU5hbWVzW3N0YXRlc1tpXV07CisgICAgICAgIGxvZyhy
ZXN1bHQpOworCisgICAgICAgIHNldFRpbWVvdXQocnVuVGVzdCwgMCk7CisgICAgICAgIGNvdW50
Kys7CisgICAgfTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK3J1blRlc3QoKTsKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNv
dXJjZXMvYmFkLW1pbWUtdHlwZS5hc2lzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2JhZC1taW1lLXR5cGUuYXNpcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL2JhZC1t
aW1lLXR5cGUuYXNpcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDb250ZW50LVR5cGU6
IHRleHQvYm9ndXMKKworZGF0YTogc2hvdWxkIG5vdCB0cmlnZ2VyIGFuIGV2ZW50CkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9ldmVudC1zdHJlYW0u
cGhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVz
b3VyY2VzL2V2ZW50LXN0cmVhbS5waHAJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNlcy9ldmVudC1zdHJlYW0ucGhwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUxIEBACis8P3BocAoraGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvZXZl
bnQtc3RyZWFtIik7Cis/PgorCis6IGEgY29tbWVudCAoaWdub3JlZCkKK3RoaXMgbGluZSB3aWxs
IGJlIGlnbm9yZWQgc2luY2UgdGhlcmUgaXMgbm8gZmllbGQgYW5kIHRoZSBsaW5lIGl0c2VsZiBp
cyBub3QgYSBmaWVsZAorZmllbGQ6IGFuIHVua25vd24gZmllbGQgdGhhdCB3aWxsIGJlIGlnbm9y
ZWQKKzphbm90aGVyIGNvbW1tZW50CisKK2RhdGEgOiB0aGlzIGxpbmUgd2lsbCBiZSBpZ25vcmVk
IHNpbmNlIHRoZXJlIGlzIGEgc3BhY2UgYWZ0ZXIgZGF0YQorCitkYXRhCitkYXRhOgorZGF0YQor
OiBubyBkaXNwYXRjaCBzaW5jZSBkYXRhIGJ1ZmZlciBpcyBlbXB0eQorCitkYXRhOiBzaW1wbGUK
KworZGF0YTogc3Bhbm5pbmcKK2RhdGE6bXVsdGlwbGUKK2RhdGEKK2RhdGE6IGxpbmVzCitkYXRh
CisKK2lkOiAxCitkYXRhOiBpZCBpcyAxCisKK2RhdGE6IGlkIGlzIHN0aWxsIDEKKworaWQKK2Rh
dGE6IG5vIGlkCisKK2V2ZW50OiBvcGVuCitkYXRhOiBhIG1lc3NhZ2UgZXZlbnQgd2l0aCB0aGUg
bmFtZSAib3BlbiIKKworPD9waHAgZmx1c2goKTsgZWNobyAiZGEiOyBmbHVzaCgpOyA/PgordGE6
IGEgbWVzc2FnZSBldmVudCB3aXRoIHRoZSBuYW1lICJtZXNzYWdlIgorCis8P3BocCBlY2hvICJk
YXRhOiBhIGxpbmUgZW5kaW5nIHdpdGggY3JsZlxyXG4iOyA/PgorZGF0YTogYSBsaW5lIHdpdGgg
YSA6IChjb2xvbikKKzw/cGhwIGVjaG8gImRhdGE6IGEgbGluZSB3aXRoIGEgXHIgKGNhcnJpYWdl
IHJldHVybilcbiI7ID8+CisKK3JldHJ5OiAxMDAwMAorOiByZWNvbm5lY3Rpb24gdGltZSBzZXQg
dG8gMTAgc2Vjb25kcworCityZXRyeTogb25lIHRob3VzYW5kCis6IGlnbm9yZWQgaW52YWxpZCBy
ZWNvbm5lY3Rpb24gdGltZSB2YWx1ZQorCityZXRyeQorOiByZXNldCB0byB1YSBkZWZhdWx0CisK
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3JlY29u
bmVjdC5waHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJj
ZS9yZXNvdXJjZXMvcmVjb25uZWN0LnBocAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3JlY29ubmVjdC5waHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTIgQEAKKzw/cGhwCitoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9ldmVu
dC1zdHJlYW0iKTsKKyRsYXN0RXZlbnRJZCA9ICRfU0VSVkVSWydIVFRQX0xBU1RfRVZFTlRfSUQn
XTsKKworaWYgKCRsYXN0RXZlbnRJZCkKKyAgICBlY2hvICJkYXRhOiAkbGFzdEV2ZW50SWRcblxu
IjsKK2Vsc2UgeworICAgIGVjaG8gImlkOiA3N1xuIjsKKyAgICBlY2hvICJyZXRyeTogMzAwXG4i
OworICAgIGVjaG8gImRhdGE6IGhlbGxvXG5cbiI7Cit9Cis/PgpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9ldmVudHNvdXJjZS9yZXNvdXJjZXMvc2ltcGxlLWV2ZW50LXN0cmVhbS5hc2lz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3Vy
Y2VzL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNpcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3NpbXBsZS1ldmVudC1zdHJlYW0uYXNp
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDb250ZW50LVR5cGU6IHRleHQvZXZlbnQt
c3RyZWFtCisKK2RhdGE6IGhlbGxvCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50
c291cmNlL3Jlc291cmNlcy9zdGF0dXMtY29kZXMucGhwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2UvcmVzb3VyY2VzL3N0YXR1cy1jb2Rlcy5waHAJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3Jlc291cmNl
cy9zdGF0dXMtY29kZXMucGhwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8P3BocAor
JHN0YXR1c19jb2RlID0gJF9HRVRbJ3N0YXR1cy1jb2RlJ107CitoZWFkZXIoIkhUVFAvMS4xICRz
dGF0dXNfY29kZSBPSyIpOworCitzd2l0Y2ggKCRzdGF0dXNfY29kZSkgeworY2FzZSAyMDA6Cisg
ICAgaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvZXZlbnQtc3RyZWFtIik7CisgICAgZWNobyAi
ZGF0YTogaGVsbG9cblxuIjsKKyAgICBicmVhazsKK2Nhc2UgMzAxOgorY2FzZSAzMDI6CitjYXNl
IDMwMzoKK2Nhc2UgMzA3OgorICAgICR1cmkgPSBydHJpbShkaXJuYW1lKCRfU0VSVkVSWydQSFBf
U0VMRiddKSwgJy9cXCcpIC4gIi9zaW1wbGUtZXZlbnQtc3RyZWFtLmFzaXMiOworICAgIGhlYWRl
cigiTG9jYXRpb246IGh0dHA6Ly8iIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gJHVyaSk7Cisg
ICAgYnJlYWs7Cit9Cis/PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJj
ZS93b3JrZXJzL2V2ZW50c291cmNlLXNpbXBsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9ldmVudHNvdXJjZS93b3JrZXJzL2V2ZW50c291cmNlLXNp
bXBsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2V2ZW50c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0IEBACitUZXN0IEV2ZW50U291cmNlIGluIGEgd29ya2VyLgor
CitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29ya2Vy
cy9ldmVudHNvdXJjZS1zaW1wbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZlbnRzb3VyY2Utc2ltcGxlLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvZXZl
bnRzb3VyY2Utc2ltcGxlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1s
PgorPGJvZHk+Cis8cD5UZXN0IEV2ZW50U291cmNlIGluIGEgd29ya2VyLjwvcD4KKzxkaXYgaWQ9
InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorZnVuY3Rpb24gbG9nKG1zZykgeworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lckhUTUwgKz0gbXNnICsgIjxicj4iOwor
fQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKK30KKwordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoInJlc291cmNlcy9zaW1wbGUt
d29ya2VyLmpzIik7CisKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7CisgICAg
aWYgKGV2dC5kYXRhID09ICJoZWxsbyIpCisgICAgICAgIGxvZygiUEFTUyIpOworICAgIGVsc2UK
KyAgICAgICAgbG9nKCJGQUlMIik7CisgICAgZW5kKCk7Cit9CisKK3dvcmtlci5vbmVycm9yID0g
ZnVuY3Rpb24gKCkgeworICAgIGxvZygiRkFJTCIpOworICAgIGVuZCgpOworfQorCitmdW5jdGlv
biBlbmQoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvZXZlbnRzb3VyY2Uvd29y
a2Vycy9yZXNvdXJjZXMvc2ltcGxlLXdvcmtlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZS13b3JrZXIu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2V2ZW50c291cmNlL3dv
cmtlcnMvcmVzb3VyY2VzL3NpbXBsZS13b3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTIgQEAKK3ZhciBlcyA9IG5ldyBFdmVudFNvdXJjZSgiLi4vLi4vcmVzb3VyY2VzL3NpbXBsZS1l
dmVudC1zdHJlYW0uYXNpcyIpOworCitlcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7Cisg
ICAgcG9zdE1lc3NhZ2UoZXZ0LmRhdGEpOworICAgIGVzLmNsb3NlKCk7Cit9CisKK2VzLm9uZXJy
b3IgPSBmdW5jdGlvbiAoKSB7CisgICAgcG9zdE1lc3NhZ2UoImVycm9yIik7CisgICAgZXMuY2xv
c2UoKTsKK30KKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>