<?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>22631</bug_id>
          
          <creation_ts>2008-12-03 10:20:51 -0800</creation_ts>
          <short_desc>Streamline Console.cpp, abstract out the use of JSC::ExecState and JSC::ArgList by introducing ScriptCallFrame and ScriptStackTrace abstractions</short_desc>
          <delta_ts>2008-12-09 15:11:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>22758</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>101219</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-03 10:20:51 -0800</bug_when>
    <thetext>Eliminate the need for custom bindings in Console.cpp and make argument and stack-trace handling more JS engine-agnostic by introducing two abstractions:

* ScriptCallFrame, which represents current JS call frame and provides access to call arguments and stack trace.
* ScriptStackFrame, which represents a frame in the stack trace.

This is also a good opportunity to give Console.cpp a few tweaks to make it more homogeneous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101220</commentid>
    <comment_count>1</comment_count>
      <attachid>25713</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-03 10:35:49 -0800</bug_when>
    <thetext>Created attachment 25713
ScriptCallFrame and ScriptStackTrace v1

Ok, this one is big. My apologies -- I tried to start small, but it was kind of hard to make meaningful changes without touching more files.

This patch also addresses:
* https://bugs.webkit.org/show_bug.cgi?id=22597
* https://bugs.webkit.org/show_bug.cgi?id=19136
* https://bugs.webkit.org/show_bug.cgi?id=21221

And makes some progress on:
* https://bugs.webkit.org/show_bug.cgi?id=21180</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101221</commentid>
    <comment_count>2</comment_count>
      <attachid>25714</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-03 10:36:54 -0800</bug_when>
    <thetext>Created attachment 25714
ScriptCallFrame and ScriptStackTrace v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101224</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-03 10:57:41 -0800</bug_when>
    <thetext>I uploaded a wrong patch with https://bugs.webkit.org/show_bug.cgi?id=22631#c1, so please apply the contents of that comment to the patch below:

https://bugs.webkit.org/attachment.cgi?id=25714&amp;action=prettypatch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101343</commentid>
    <comment_count>4</comment_count>
      <attachid>25714</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-12-04 09:44:57 -0800</bug_when>
    <thetext>Comment on attachment 25714
ScriptCallFrame and ScriptStackTrace v1

This patch looks good. Though I think the ScriptCallFrame and ScriptStackFrame classes are not clear.

I think more needs to be moved to ScriptStackFrame (like arguments, lineNumber and sourceURL). Then call ScriptCallFrame ScriptCallStack, and make it only return ScriptStackFrames. That would be a better design, and give more functionality.

I like the CustomArgumentHandling changes and the Firebug compat changes/comments!

r- based on the ScriptCallFrame and ScriptStackFrame classes design.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101346</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-04 10:02:52 -0800</bug_when>
    <thetext>Cool! I am glad you like it. What do you think about this idea?

* Move lineNumber, functionName, sourceURL to ScriptStackFrame
* Keep argument and frame accessors on ScriptCallFrame

This way, the stack trace is cleanly represented as a collection of ScriptCallFrames and ScriptCallFrame is essentially a way to access arguments and/or stack trace of the current call.

I don&apos;t see why we need to move arguments to ScriptStackFrame... unless you&apos;re thinking about eventually displaying the arguments for each frame?

As an aside note, the first frame in stack trace will have to be populated differently that the others, because currently there isn&apos;t a way to get line numbers, etc. from the JSC -- I think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101705</commentid>
    <comment_count>6</comment_count>
      <attachid>25825</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-06 19:39:25 -0800</bug_when>
    <thetext>Created attachment 25825
ScriptStackTrace and ScriptCallFrame v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101706</commentid>
    <comment_count>7</comment_count>
      <attachid>25825</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-06 19:44:44 -0800</bug_when>
    <thetext>Comment on attachment 25825
ScriptStackTrace and ScriptCallFrame v2

I reworked this a little bit to change the relationship and move methods around as follows:

* Now, the umbrella instance is ScriptStackTrace, which just has methods to access ScriptCallFrames and ScriptState

* argumentAt, argumentCount, functionName, lineNumber, etc. are now all at ScriptCallFrame.

* first ScriptCallFrame is created differently, because it is the only frame that has line number and arguments information at the moment.

Thanks for suggesting this, Timothy. This does look a bit cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101836</commentid>
    <comment_count>8</comment_count>
      <attachid>25846</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-08 11:08:40 -0800</bug_when>
    <thetext>Created attachment 25846
ScriptCallStack and ScriptCallFrame v3

Darin (Fisher) suggested renaming ScriptStackTrace to ScriptCallStack. It seemed prettier, so I went ahead and did just that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101839</commentid>
    <comment_count>9</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-12-08 11:49:05 -0800</bug_when>
    <thetext>ScriptCallStack was also what I originally suggested. I will review this patch after lunch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101842</commentid>
    <comment_count>10</comment_count>
      <attachid>25846</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-12-08 12:12:38 -0800</bug_when>
    <thetext>Comment on attachment 25846
ScriptCallStack and ScriptCallFrame v3

&gt; +    bindings/js/ScriptCalFrame.cpp \

Mispelling here.

&gt; +ScriptCallFrame::ScriptCallFrame(const JSC::UString&amp; functionName,
&gt; +                                 const JSC::UString&amp; urlString,
&gt; +                                 int lineNumber,
&gt; +                                 JSC::ExecState* exec,
&gt; +                                 const JSC::ArgList&amp; args,
&gt; +                                 unsigned skipArgumentCount)

You should not need all those JSC prefixes here.

&gt; +    for(unsigned i = skipArgumentCount; i &lt; args.size(); ++i)

We normally call size() outside the loop. We normally use a space between &quot;for&quot; and &quot;(&quot;.

&gt; +const ScriptValue &amp;ScriptCallFrame::argumentAt(unsigned index) const

We put the &amp; next to the type name. ScriptValue&amp;.

&gt; +#include &quot;runtime/ArgList.h&quot;

This include should have angle brackets, I believe. We may also need a new forwarding header.

&gt; +        const ScriptString &amp;functionName() const { return m_functionName; }
&gt; +        const KURL &amp;sourceURL() const { return m_sourceURL; }

We put the &amp; next to the type name. ScriptString&amp; and KURL&amp;.

&gt; +        const ScriptValue &amp;argumentAt(unsigned) const;

Ditto.

&gt; +ScriptCallStack::ScriptCallStack(ExecState* exec, const ArgList&amp; args,
&gt; +                                   unsigned skipArgumentCount)

Strange indentation here. We normally try to avoid lining up second lines with parentheses for just this reason. Things don&apos;t line up any more if you rename. Instead we put things on one line or indent the second line by some fixed amount instead of lining up.

&gt; +    JSValue* func;

Maybe &quot;function&quot; instead of &quot;func&quot;.

&gt; +    exec-&gt;interpreter()-&gt;retrieveLastCaller(exec, signedLineNumber, sourceID,
&gt; +                                            urlString, func);

Another case if the &quot;lining up a second line with parentheses&quot;.

&gt; +        unsigned lineNumber =  signedLineNumber &gt;= 0 ? signedLineNumber : 0;

Extra space here after the = sign.

&gt; +        m_frames.append(
&gt; +            ScriptCallFrame(m_caller-&gt;name(&amp;m_exec-&gt;globalData()), urlString,
&gt; +                            lineNumber, exec, args, skipArgumentCount));

Not a big fan of the line break before the ScriptCallFrame. I think that trying to line up subsequent lines with the open parenthesis leads to that decision because you want to preserve space for the second line. If the second line is just indented by 4 spaces I think that works better.

&gt; +        // caller is unknown, but we should still add the frame, because
&gt; +        // something called us, and gave us arguments

We almost always use sentence capitalization and periods for comments like this one.

&gt; +    JSValue* func = m_exec-&gt;interpreter()-&gt;retrieveCaller(m_exec, m_caller);
&gt; +    while(!func-&gt;isNull()) {

Space after while here before parenthesis here.

&gt; +        InternalFunction* internalFunction = asInternalFunction(func);
&gt; +        ArgList emptyArgList;
&gt; +        m_frames.append(
&gt; +            ScriptCallFrame(
&gt; +                internalFunction-&gt;name(&amp;m_exec-&gt;globalData()), UString(), 0, 0,
&gt; +                emptyArgList, 0));

Same comments about indentation.

&gt; +    if (!m_value.get())
&gt; +        return false;

This get() here should not be necessary. I&apos;m a little concerned that when m_value is 0 we return false from both isNull() and isUndefined(). What is the name for that state when m_value is 0? Why do we allow that state at all?

I notice that you&apos;re not using isUndefined() yet. We may find later that isNullOrUndefined() is more common than isUndefined().

&gt; -    ConsoleMessage(MessageSource s, MessageLevel l, ExecState* exec, const ArgList&amp; args, unsigned li, const String&amp; u, unsigned g)
&gt; +    ConsoleMessage(MessageSource s, MessageLevel l, ScriptCallStack* callStack, unsigned g, bool storeTrace = false)

Maybe const ScriptCallStack&amp; would be a better type than ScriptCallStack*. Is there a reason to prefer a pointer here?

&gt; +        if (storeTrace)
&gt; +            for(unsigned i = 0; i &lt; callStack-&gt;size(); ++i)
&gt; +                frames[i] = callStack-&gt;at(i).functionName();

Our coding style puts braces around a multi-line if statement like this one. Also a space after the for before the parenthesis.

I believe that assigning to a UString requires holding the JSLock, so this new code should be added after the JSLock line. But maybe my information about that is out of date. It could date back to an earlier stage of our threading model.

&gt; -void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, ExecState* exec, const ArgList&amp; arguments, unsigned lineNumber, const String&amp; sourceURL)
&gt; +void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, ScriptCallStack* callStack)

Again, I think a const ScriptCallStack&amp; would be better here.

&gt; -void InspectorController::startGroup(MessageSource source, ExecState* exec, const ArgList&amp; arguments, unsigned lineNumber, const String&amp; sourceURL)
&gt; +void InspectorController::startGroup(MessageSource source, ScriptCallStack* callStack)

Ditto.

&gt;  #include &quot;PlatformString.h&quot;
&gt; +#if USE(JSC)
&gt;  #include &lt;profiler/Profile.h&gt;
&gt; +#endif
&gt;  #include &lt;wtf/RefCounted.h&gt;
&gt;  #include &lt;wtf/PassRefPtr.h&gt;

Includes inside an #if should be in a separate paragraph.

My review comments are mostly minor things, but there are enough that I think I&apos;ll say review- for now. Seems like you&apos;re on the right track, though. Looking forward to the next patch. Tim, sorry I &quot;grabbed this one out from under you&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101927</commentid>
    <comment_count>11</comment_count>
      <attachid>25871</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-12-08 20:47:07 -0800</bug_when>
    <thetext>Created attachment 25871
ScriptCallStack and ScriptCallFrame v4

(In reply to comment #10)

Thanks for reviewing!

&gt; (From update of attachment 25846 [review])
&gt; &gt; +    bindings/js/ScriptCalFrame.cpp \
&gt; 
&gt; Mispelling here.

Fixed.

&gt; &gt; +ScriptCallFrame::ScriptCallFrame(const JSC::UString&amp; functionName,
&gt; &gt; +                                 const JSC::UString&amp; urlString,
&gt; &gt; +                                 int lineNumber,
&gt; &gt; +                                 JSC::ExecState* exec,
&gt; &gt; +                                 const JSC::ArgList&amp; args,
&gt; &gt; +                                 unsigned skipArgumentCount)
&gt; 
&gt; You should not need all those JSC prefixes here.
&gt; 
&gt; &gt; +    for(unsigned i = skipArgumentCount; i &lt; args.size(); ++i)
&gt; 
&gt; We normally call size() outside the loop. We normally use a space between &quot;for&quot;
&gt; and &quot;(&quot;.

Fixed.

&gt; &gt; +const ScriptValue &amp;ScriptCallFrame::argumentAt(unsigned index) const
&gt; 
&gt; We put the &amp; next to the type name. ScriptValue&amp;.
&gt; 
&gt; &gt; +#include &quot;runtime/ArgList.h&quot;
&gt; 
&gt; This include should have angle brackets, I believe. We may also need a new
&gt; forwarding header.

Fixed.

&gt; &gt; +        const ScriptString &amp;functionName() const { return m_functionName; }
&gt; &gt; +        const KURL &amp;sourceURL() const { return m_sourceURL; }
&gt; 
&gt; We put the &amp; next to the type name. ScriptString&amp; and KURL&amp;.

Fixed.

&gt; 
&gt; &gt; +        const ScriptValue &amp;argumentAt(unsigned) const;
&gt; 
&gt; Ditto.

Fixed.

&gt; 
&gt; &gt; +ScriptCallStack::ScriptCallStack(ExecState* exec, const ArgList&amp; args,
&gt; &gt; +                                   unsigned skipArgumentCount)
&gt; 
&gt; Strange indentation here. We normally try to avoid lining up second lines with
&gt; parentheses for just this reason. Things don&apos;t line up any more if you rename.
&gt; Instead we put things on one line or indent the second line by some fixed
&gt; amount instead of lining up.

I went ahead and made all of my changes run over 80 cols instead of lining up on next line.

&gt; &gt; +    JSValue* func;
&gt; 
&gt; Maybe &quot;function&quot; instead of &quot;func&quot;.

Renamed to &quot;function&quot;.

&gt; 
&gt; &gt; +    exec-&gt;interpreter()-&gt;retrieveLastCaller(exec, signedLineNumber, sourceID,
&gt; &gt; +                                            urlString, func);
&gt; 
&gt; Another case if the &quot;lining up a second line with parentheses&quot;.

Fixed.

&gt; 
&gt; &gt; +        unsigned lineNumber =  signedLineNumber &gt;= 0 ? signedLineNumber : 0;
&gt; 
&gt; Extra space here after the = sign.

Fixed.

&gt; 
&gt; &gt; +        m_frames.append(
&gt; &gt; +            ScriptCallFrame(m_caller-&gt;name(&amp;m_exec-&gt;globalData()), urlString,
&gt; &gt; +                            lineNumber, exec, args, skipArgumentCount));
&gt; 
&gt; Not a big fan of the line break before the ScriptCallFrame. I think that trying
&gt; to line up subsequent lines with the open parenthesis leads to that decision
&gt; because you want to preserve space for the second line. If the second line is
&gt; just indented by 4 spaces I think that works better.

Fixed.

&gt; 
&gt; &gt; +        // caller is unknown, but we should still add the frame, because
&gt; &gt; +        // something called us, and gave us arguments
&gt; 
&gt; We almost always use sentence capitalization and periods for comments like this
&gt; one.

Fixed.

&gt; &gt; +    JSValue* func = m_exec-&gt;interpreter()-&gt;retrieveCaller(m_exec, m_caller);
&gt; &gt; +    while(!func-&gt;isNull()) {
&gt; 
&gt; Space after while here before parenthesis here.

Fixed.

&gt; &gt; +        InternalFunction* internalFunction = asInternalFunction(func);
&gt; &gt; +        ArgList emptyArgList;
&gt; &gt; +        m_frames.append(
&gt; &gt; +            ScriptCallFrame(
&gt; &gt; +                internalFunction-&gt;name(&amp;m_exec-&gt;globalData()), UString(), 0, 0,
&gt; &gt; +                emptyArgList, 0));
&gt; 
&gt; Same comments about indentation.

Fixed.

&gt; &gt; +    if (!m_value.get())
&gt; &gt; +        return false;
&gt; 
&gt; This get() here should not be necessary. I&apos;m a little concerned that when
&gt; m_value is 0 we return false from both isNull() and isUndefined(). What is the
&gt; name for that state when m_value is 0? Why do we allow that state at all?

Removed &quot;.get()&quot; from all methods. You&apos;re right, there&apos;s an overload that takes care of this.

As for the state, I would think that if someone writes &quot;ProtectedPtr&lt;JSValue&gt; emptyValue;&quot;, they don&apos;t necessarily mean that the held value is null or undefined -- just that there isn&apos;t one being held by the wrapper. If we want to change the meaning of this, we should do it by changing ProtectedPtr by always populating with some default T constructor, which contains initial value. Right? I am not really sure, just thinking outloud.

&gt; I notice that you&apos;re not using isUndefined() yet. We may find later that
&gt; isNullOrUndefined() is more common than isUndefined().

I am using both isNull() and isUndefined() in a composite statement that&apos;s the equivalent of isNullOrUndefined(). I thought keeping them separate would be a good thing, since one can check for either together or separately, but I am open to just smushing them together into one method.

&gt; 
&gt; &gt; -    ConsoleMessage(MessageSource s, MessageLevel l, ExecState* exec, const ArgList&amp; args, unsigned li, const String&amp; u, unsigned g)
&gt; &gt; +    ConsoleMessage(MessageSource s, MessageLevel l, ScriptCallStack* callStack, unsigned g, bool storeTrace = false)
&gt; 
&gt; Maybe const ScriptCallStack&amp; would be a better type than ScriptCallStack*. Is
&gt; there a reason to prefer a pointer here?

The reason I use a pointer is because ScriptCallFrame vector is lazily populated when first queried for stack trace, which contradicts the &quot;constness&quot; qualifier ... Oops, I just realized I have a problem where the laziness is not really lazy -- access to 0&apos;th call frame should not trigger initialization. Fixed that.

&gt; &gt; +        if (storeTrace)
&gt; &gt; +            for(unsigned i = 0; i &lt; callStack-&gt;size(); ++i)
&gt; &gt; +                frames[i] = callStack-&gt;at(i).functionName();
&gt; 
&gt; Our coding style puts braces around a multi-line if statement like this one.
&gt; Also a space after the for before the parenthesis.

Fixed.

&gt; I believe that assigning to a UString requires holding the JSLock, so this new
&gt; code should be added after the JSLock line. But maybe my information about that
&gt; is out of date. It could date back to an earlier stage of our threading model.

Sounds good. Addressed by using ScriptString, which does the locking for you.

&gt; &gt; -void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, ExecState* exec, const ArgList&amp; arguments, unsigned lineNumber, const String&amp; sourceURL)
&gt; &gt; +void InspectorController::addMessageToConsole(MessageSource source, MessageLevel level, ScriptCallStack* callStack)
&gt; 
&gt; Again, I think a const ScriptCallStack&amp; would be better here.
&gt; 
&gt; &gt; -void InspectorController::startGroup(MessageSource source, ExecState* exec, const ArgList&amp; arguments, unsigned lineNumber, const String&amp; sourceURL)
&gt; &gt; +void InspectorController::startGroup(MessageSource source, ScriptCallStack* callStack)
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt;  #include &quot;PlatformString.h&quot;
&gt; &gt; +#if USE(JSC)
&gt; &gt;  #include &lt;profiler/Profile.h&gt;
&gt; &gt; +#endif
&gt; &gt;  #include &lt;wtf/RefCounted.h&gt;
&gt; &gt;  #include &lt;wtf/PassRefPtr.h&gt;
&gt; 
&gt; Includes inside an #if should be in a separate paragraph.
&gt; 
&gt; My review comments are mostly minor things, but there are enough that I think
&gt; I&apos;ll say review- for now. Seems like you&apos;re on the right track, though. Looking
&gt; forward to the next patch. Tim, sorry I &quot;grabbed this one out from under you&quot;.
&gt; 

Thanks again for reviewing! This really helps me get up to speed on conventions and general WebKit way of life :)

Additionally, I started testing .trace behavior some more and realized that with the introduction of a separate frames vector, the comparison of messages needs a tweak. Added that in v4.

I&apos;ve been thinking: it is kind of unfortunate that there&apos;s all this pouring of data from one fairly similar object (ScriptCallStack) to another (ConsoleMessage). Perhaps there needs to be some sort of safe, &quot;frozen-in-time&quot; ScriptCallStack, which ConsoleMessage can hold and pass around.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101994</commentid>
    <comment_count>12</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-12-09 11:22:33 -0800</bug_when>
    <thetext>(In reply to comment #11)

&gt; I&apos;ve been thinking: it is kind of unfortunate that there&apos;s all this pouring of
&gt; data from one fairly similar object (ScriptCallStack) to another
&gt; (ConsoleMessage). Perhaps there needs to be some sort of safe, &quot;frozen-in-time&quot;
&gt; ScriptCallStack, which ConsoleMessage can hold and pass around.

I think that sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101999</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-12-09 12:26:10 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/39142</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102006</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-12-09 12:44:33 -0800</bug_when>
    <thetext>and the newly added files (doh!):
http://trac.webkit.org/changeset/39143
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102026</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-12-09 15:11:40 -0800</bug_when>
    <thetext>fix windows bustage:
http://trac.webkit.org/changeset/39147
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25713</attachid>
            <date>2008-12-03 10:35:49 -0800</date>
            <delta_ts>2008-12-03 10:37:15 -0800</delta_ts>
            <desc>ScriptCallFrame and ScriptStackTrace v1</desc>
            <filename>script-state.patch</filename>
            <type>text/plain</type>
            <size>30364</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmI2ZDFiOS4uYWMxNGNiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAwOC0xMS0yNiAgRGltaXRyaSBHbGF6
a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBTY3JpcHRTdGF0ZSBhYnN0cmFjdGlvbiAo
aW5pdGlhbGx5LCBhIHNpbXBsZSB0eXBlZGVmKQorICAgICAgICBhcyBtZWFucyBvZiBjYXJyeWlu
ZyBleGNlcHRpb24gaW5mb3JtYXRpb24gYWNyb3NzIGJpbmRpbmdzIGJvdW5kYXJpZXMKKyAgICAg
ICAgYW5kIGluIGEgc2NyaXB0IGVuZ2luZS1pbmRlcGVuZGVudCB3YXkuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmlwdFN0YXRlRnJvbU5vZGUpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUZp
bHRlckNvbmRpdGlvbi5oOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5v
ZGVGaWx0ZXI6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9Ob2RlRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlRmlsdGVyQ29uZGl0
aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBkb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oOgor
ICAgICAgICAqIGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0
ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6OnByZXZp
b3VzTm9kZSk6CisgICAgICAgICogZG9tL05vZGVJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0
b3I6OnByZXZpb3VzTm9kZSk6CisgICAgICAgICogZG9tL1RyYXZlcnNhbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmF2ZXJzYWw6OmFjY2VwdE5vZGUpOgorICAgICAgICAqIGRvbS9UcmF2ZXJz
YWwuaDoKKyAgICAgICAgKiBkb20vVHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4
dE5vZGUpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpU
cmVlV2Fsa2VyOjpwYXJlbnROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OmZp
cnN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bGFzdENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyZWVXYWxrZXI6OnByZXZpb3VzU2libGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpUcmVlV2Fsa2VyOjpuZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
V2Fsa2VyOjpwcmV2aW91c05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVdhbGtlcjo6bmV4
dE5vZGUpOgorCiAyMDA4LTExLTI1ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOWY0NTM4Yi4uMzNmMWIwMSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xMzg4OSw2ICsxMzg4OSwxMCBAQAogCQkJCQk+
DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcU2NyaXB0U3RhdGUuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0K
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRTdHJpbmcuaCINCiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNjQyMWMwYi4uNThmNjM4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTMsNyArMyw3IEBACiAJYXJjaGl2ZVZlcnNpb24gPSAxOwogCWNs
YXNzZXMgPSB7CiAJfTsKLQlvYmplY3RWZXJzaW9uID0gNDI7CisJb2JqZWN0VmVyc2lvbiA9IDQ1
OwogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEFnZ3JlZ2F0ZVRhcmdldCBzZWN0aW9uICov
CkBAIC01MjksNiArNTI5LDcgQEAKIAkJMzdGODE4RkQwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNv
cmVVUkxSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzdGODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3RjgxOEZF
MEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUg
LyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovOyB9OwogCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1
QjYgLyogU2NyaXB0U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZGNDVFRjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi87
IH07CisJCTQxQzc2MEIxMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDFDNzYwQjAwRURFMDNEMzAw
QzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5J
bWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmgg
Ki87IH07CiAJCTQ0MTUyOTJGMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0
MTUyOTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCAqLzsg
fTsKIAkJNDQxQjA1NTYwQ0Q3NzlCNjAwN0MxRjE4IC8qIERPTUNTU1N0eWxlU2hlZXRQcml2YXRl
LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NDI5QUFFQTBDQjg0REM3MDA3NjQ3QzUgLyogRE9NQ1NTU3R5bGVTaGVldFByaXZh
dGUuaCAqLzsgfTsKQEAgLTUzMjksNiArNTMzMCw3IEBACiAJCTM3RjgxOEZCMEQ2NTc2MDYwMDVF
MUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNkY0NUVGMEVEN0IzMTEwMDgyMTVCNiAv
KiBTY3JpcHRTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
U3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxQzc2MEIwMEVERTAzRDMw
MEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTY3JpcHRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBF
MUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJEMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0lu
SW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhU
TUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NDI5QUFFQTBDQjg0REM3MDA3NjQ3QzUgLyogRE9NQ1NTU3R5bGVTaGVldFByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUNTU1N0eWxlU2hlZXRQcml2YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzA0LDcgKzY3MDYsNyBAQAogCQk5M0VF
QzFGNzA5QzI4Nzc3MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV2hlZWxFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVD
MjZFMDlDMzIxODAwMEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1BhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzU3R5bGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyog
SW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJOTNGMTlC
MTkwODI0NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQucGxpc3QueG1s
OyBwYXRoID0gSW5mby5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3Jl
LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gd3JhcHBlci5mcmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUu
ZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMx
QTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBu
YW1lID0gbGliaWN1Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7
IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFC
OCAvKiBDb2RlR2VuZXJhdG9yLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9
IENvZGVHZW5lcmF0b3IucG07IHBhdGggPSBzY3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzA4MSw2ICsxMzA4Myw3IEBACiAJCQkJOTNCNzBE
NTQwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuaCAqLywKIAkJCQlBODNFMUM3
MjBFNDkwNDJCMDAxNDBCOUMgLyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLywKIAkJCQk5MzRD
QzEwOTBFREIyMjM5MDBBNjU4RjIgLyogU2NyaXB0U291cmNlQ29kZS5oICovLAorCQkJCTQxQzc2
MEIwMEVERTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovLAogCQkJCTQxNkY0NUVGMEVE
N0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLywKIAkJCQk5MzRDQzBERjBFRDM5RDZG
MDBBNjU4RjIgLyogU2NyaXB0VmFsdWUuY3BwICovLAogCQkJCTkzNENDMEUwMEVEMzlENkYwMEE2
NThGMiAvKiBTY3JpcHRWYWx1ZS5oICovLApAQCAtMTY0MDYsNiArMTY0MDksNyBAQAogCQkJCTA4
MEFFQzg0MEVEODcwOEIwMERGNENDRSAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4MjAzQUEwMEVEOEMzNTMwMEI4QjYxQSAvKiBXTUxBY2Nlc3NFbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzRDQzEwQTBFREIyMjM5MDBBNjU4RjIgLyogU2Ny
aXB0U291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDFDNzYwQjEwRURFMDNEMzAwQzE2
NTVGIC8qIFNjcmlwdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAppbmRleCA3NGFjYmE0Li5iNmEzYjk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwCkBAIC00OTIsNyArNDkyLDcgQEAgSlNWYWx1ZSogb2JqZWN0VG9TdHJpbmdG
dW5jdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnQK
ICAgICByZXR1cm4gbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCAwLCBwcm9wZXJ0
eU5hbWUsIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKTsKIH0KIAotRXhlY1N0YXRlKiBleGVjU3Rh
dGVGcm9tTm9kZShOb2RlKiBub2RlKQorU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlRnJvbU5vZGUo
Tm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKaW5kZXggY2FmY2Y0NC4uMjRlZjIwOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9D
b21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KICNpbmNsdWRlIDxydW50
aW1lL0pTRnVuY3Rpb24uaD4KKyNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE4MCw3ICsxODEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKICAgICBKU0M6OkpTVmFsdWUqIG9iamVjdFRv
U3RyaW5nRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgY29uc3QgSlNDOjpQcm9wZXJ0eVNsb3QmKTsKIAotICAgIEpTQzo6
RXhlY1N0YXRlKiBleGVjU3RhdGVGcm9tTm9kZShOb2RlKik7CisgICAgU2NyaXB0U3RhdGUqIHNj
cmlwdFN0YXRlRnJvbU5vZGUoTm9kZSopOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29uZGl0aW9uLmggYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IGUzOWQwOTQu
LjhiYTA5MDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlRmlsdGVyQ29u
ZGl0aW9uLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVGaWx0ZXJDb25kaXRpb24u
aApAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgSlNOb2RlRmlsdGVyQ29uZGl0aW9uKEpTQzo6SlNWYWx1ZSogZmlsdGVyKTsKIAotICAg
ICAgICB2aXJ0dWFsIHNob3J0IGFjY2VwdE5vZGUoSlNDOjpFeGVjU3RhdGUqLCBOb2RlKikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgc2hvcnQgYWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUq
KSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmsoKTsKIAogICAgICAgICBKU0M6OkpT
VmFsdWUqIG1fZmlsdGVyOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
dGF0ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2UwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFN0YXRlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTY3JpcHRTdGF0ZV9oCisjZGVmaW5lIFNjcmlwdFN0YXRlX2gKKworbmFtZXNwYWNlIEpTQyB7
CisgICAgY2xhc3MgRXhlY1N0YXRlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAv
LyBUaGUgaWRlYSBpcyB0byBleHBvc2UgInN0YXRlLWxpa2UiIG1ldGhvZHMgKGhhZEV4Y2VwdGlv
biwgYW5kIGFueSBvdGhlcgorICAgIC8vIG1ldGhvZHMgd2hlcmUgRXhlY1N0YXRlIGp1c3QgZGlw
cyBpbnRvIGdsb2JhbERhdGEpIG9mIEpTQzo6RXhlY1N0YXRlIGFzIGEKKyAgICAvLyBzZXBhcmF0
ZSBhYnN0cmFjdGlvbi4KKyAgICAvLyBGb3Igbm93LCB0aGUgc2VwYXJhdGlvbiBpcyBwdXJlbHkg
YnkgY29udmVudGlvbi4KKyAgICB0eXBlZGVmIEpTQzo6RXhlY1N0YXRlIFNjcmlwdFN0YXRlOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JpcHRTdGF0ZV9oCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyLmNwcCBiL1dlYkNvcmUvZG9tL05vZGVGaWx0
ZXIuY3BwCmluZGV4IDU1ZWQ4ZTIuLmM1ZDg1NWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL05v
ZGVGaWx0ZXIuY3BwCisrKyBiL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuY3BwCkBAIC0yNiwxNiAr
MjYsMTMgQEAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCi0j
aW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc2hvcnQgTm9kZUZpbHRlcjo6YWNjZXB0Tm9kZShF
eGVjU3RhdGUqIGV4ZWMsIE5vZGUqIG5vZGUpIGNvbnN0CitzaG9ydCBOb2RlRmlsdGVyOjphY2Nl
cHROb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBj
YXN0IHRvIHNob3J0IHNpbGVuY2VzICJlbnVtZXJhbCBhbmQgbm9uLWVudW1lcmFsIHR5cGVzIGlu
IHJldHVybiIgd2FybmluZwotICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5h
Y2NlcHROb2RlKGV4ZWMsIG5vZGUpIDogc3RhdGljX2Nhc3Q8c2hvcnQ+KEZJTFRFUl9BQ0NFUFQp
OworICAgIHJldHVybiBtX2NvbmRpdGlvbiA/IG1fY29uZGl0aW9uLT5hY2NlcHROb2RlKHN0YXRl
LCBub2RlKSA6IHN0YXRpY19jYXN0PHNob3J0PihGSUxURVJfQUNDRVBUKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlci5oIGIv
V2ViQ29yZS9kb20vTm9kZUZpbHRlci5oCmluZGV4IDQ3ZDBhNGEuLjQzNTYzNTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZG9tL05vZGVGaWx0ZXIuaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVy
LmgKQEAgLTcxLDExICs3MSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVGaWx0ZXIoY29uZGl0aW9uKSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSopIGNvbnN0Owor
ICAgICAgICBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0OwogICAg
ICAgICB2b2lkIG1hcmsoKSB7IG1fY29uZGl0aW9uLT5tYXJrKCk7IH07CiAKICAgICAgICAgLy8g
Rm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUgSmF2YVNjcmlwdCBleGNl
cHRpb24gaWYgYW55LgotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKE5vZGUqIG5vZGUpIGNvbnN0
IHsgcmV0dXJuIGFjY2VwdE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobm9kZSksIG5vZGUpOyB9Cisg
ICAgICAgIHNob3J0IGFjY2VwdE5vZGUoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gYWNjZXB0
Tm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKG5vZGUpLCBub2RlKTsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZUZpbHRlcihQYXNzUmVmUHRyPE5vZGVGaWx0ZXJDb25kaXRpb24+IGNvbmRp
dGlvbikgOiBtX2NvbmRpdGlvbihjb25kaXRpb24pIHsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9k
b20vTm9kZUZpbHRlckNvbmRpdGlvbi5jcHAgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0
aW9uLmNwcAppbmRleCA3NDY3N2I3Li4xZDJlMWUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2RvbS9O
b2RlRmlsdGVyQ29uZGl0aW9uLmNwcAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmlsdGVyQ29uZGl0
aW9uLmNwcApAQCAtMjcsMTEgKzI3LDkgQEAKIAogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKIAot
dXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zaG9ydCBOb2Rl
RmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKEV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdAorc2hv
cnQgTm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShTY3JpcHRTdGF0ZSosIE5vZGUqKSBj
b25zdAogewogICAgIHJldHVybiBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOwogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9kb20vTm9kZUZpbHRlckNvbmRpdGlvbi5oIGIvV2ViQ29yZS9kb20vTm9k
ZUZpbHRlckNvbmRpdGlvbi5oCmluZGV4IDZmY2RmYTguLmM5NGNjOWEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvZG9tL05vZGVGaWx0ZXJDb25kaXRpb24uaAorKysgYi9XZWJDb3JlL2RvbS9Ob2RlRmls
dGVyQ29uZGl0aW9uLmgKQEAgLTI1LDEyICsyNSw5IEBACiAjaWZuZGVmIE5vZGVGaWx0ZXJDb25k
aXRpb25faAogI2RlZmluZSBOb2RlRmlsdGVyQ29uZGl0aW9uX2gKIAorI2luY2x1ZGUgIlNjcmlw
dFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAotbmFtZXNwYWNlIEpTQyB7
Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBOb2RlOwpAQCAtMzgsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgTm9kZUZpbHRlckNvbmRpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPE5vZGVGaWx0ZXJDb25k
aXRpb24+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgfk5vZGVGaWx0ZXJDb25kaXRp
b24oKSB7IH0KLSAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRl
KiwgTm9kZSopIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBzaG9ydCBhY2NlcHROb2RlKFNj
cmlwdFN0YXRlKiwgTm9kZSopIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIG1hcmso
KSB7IH0KICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3Bw
IGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAppbmRleCBlZGMwZjExLi5hZjA3ZjQyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCisrKyBiL1dlYkNvcmUvZG9t
L05vZGVJdGVyYXRvci5jcHAKQEAgLTI1LDEyICsyNSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5oIgogCi0jaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmg+CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgotCi11c2luZyBuYW1lc3BhY2UgSlNDOworI2lu
Y2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODYsNyAr
ODQsNyBAQCBOb2RlSXRlcmF0b3I6On5Ob2RlSXRlcmF0b3IoKQogICAgIHJvb3QoKS0+ZG9jdW1l
bnQoKS0+ZGV0YWNoTm9kZUl0ZXJhdG9yKHRoaXMpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IE5v
ZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlJiBlYykK
K1Bhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShTY3JpcHRTdGF0ZSogc3Rh
dGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChtX2RldGFjaGVkKSB7CiAgICAgICAg
IGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBAIC0xMDEsOCArOTksOCBAQCBQYXNzUmVmUHRyPE5v
ZGU+IE5vZGVJdGVyYXRvcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIEZJTFRFUl9SRUpFQ1QgZG9lcyBub3Qg
cGFzcyBvdmVyIGRlc2NlbmRhbnRzCiAgICAgICAgIC8vIG9mIHRoZSByZWplY3RlZCBub2RlLiBI
ZW5jZSwgRklMVEVSX1JFSkVDVCBpcyB0aGUgc2FtZSBhcyBGSUxURVJfU0tJUC4KICAgICAgICAg
UmVmUHRyPE5vZGU+IHByb3Zpc2lvbmFsUmVzdWx0ID0gbV9jYW5kaWRhdGVOb2RlLm5vZGU7Ci0g
ICAgICAgIGJvb2wgbm9kZVdhc0FjY2VwdGVkID0gYWNjZXB0Tm9kZShleGVjLCBwcm92aXNpb25h
bFJlc3VsdC5nZXQoKSkgPT0gTm9kZUZpbHRlcjo6RklMVEVSX0FDQ0VQVDsKLSAgICAgICAgaWYg
KGV4ZWMgJiYgZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGJvb2wgbm9kZVdhc0FjY2Vw
dGVkID0gYWNjZXB0Tm9kZShzdGF0ZSwgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0KCkpID09IE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhj
ZXB0aW9uKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGVXYXNBY2NlcHRl
ZCkgewogICAgICAgICAgICAgbV9yZWZlcmVuY2VOb2RlID0gbV9jYW5kaWRhdGVOb2RlOwpAQCAt
MTE1LDcgKzExMyw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTm9kZUl0ZXJhdG9yOjpuZXh0Tm9kZShF
eGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRvcjo6cHJldmlvdXNOb2Rl
KEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPE5vZGU+IE5v
ZGVJdGVyYXRvcjo6cHJldmlvdXNOb2RlKFNjcmlwdFN0YXRlKiBzdGF0ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgaWYgKG1fZGV0YWNoZWQpIHsKICAgICAgICAgZWMgPSBJTlZBTElEX1NU
QVRFX0VSUjsKQEAgLTEzMCw4ICsxMjgsOCBAQCBQYXNzUmVmUHRyPE5vZGU+IE5vZGVJdGVyYXRv
cjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
ICAgIC8vIEluIG90aGVyIHdvcmRzLCBGSUxURVJfUkVKRUNUIGRvZXMgbm90IHBhc3Mgb3ZlciBk
ZXNjZW5kYW50cwogICAgICAgICAvLyBvZiB0aGUgcmVqZWN0ZWQgbm9kZS4gSGVuY2UsIEZJTFRF
Ul9SRUpFQ1QgaXMgdGhlIHNhbWUgYXMgRklMVEVSX1NLSVAuCiAgICAgICAgIFJlZlB0cjxOb2Rl
PiBwcm92aXNpb25hbFJlc3VsdCA9IG1fY2FuZGlkYXRlTm9kZS5ub2RlOwotICAgICAgICBib29s
IG5vZGVXYXNBY2NlcHRlZCA9IGFjY2VwdE5vZGUoZXhlYywgcHJvdmlzaW9uYWxSZXN1bHQuZ2V0
KCkpID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgICAgIGlmIChleGVjICYmIGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBib29sIG5vZGVXYXNBY2NlcHRlZCA9IGFjY2Vw
dE5vZGUoc3RhdGUsIHByb3Zpc2lvbmFsUmVzdWx0LmdldCgpKSA9PSBOb2RlRmlsdGVyOjpGSUxU
RVJfQUNDRVBUOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChub2RlV2FzQWNjZXB0ZWQpIHsKICAgICAg
ICAgICAgIG1fcmVmZXJlbmNlTm9kZSA9IG1fY2FuZGlkYXRlTm9kZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZG9tL05vZGVJdGVyYXRvci5oIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKaW5k
ZXggODQyZTcxZC4uZDdlZWUzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9y
LmgKKysrIGIvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmgKQEAgLTQzLDggKzQzLDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAgICAgICAgIH5Ob2RlSXRlcmF0b3IoKTsKIAot
ICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IHByZXZpb3VzTm9kZShKU0M6OkV4
ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBuZXh0
Tm9kZShTY3JpcHRTdGF0ZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxO
b2RlPiBwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAg
IHZvaWQgZGV0YWNoKCk7CiAKICAgICAgICAgTm9kZSogcmVmZXJlbmNlTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVmZXJlbmNlTm9kZS5ub2RlLmdldCgpOyB9CkBAIC01NCw4ICs1NCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlKik7
CiAKICAgICAgICAgLy8gRm9yIG5vbi1KUyBiaW5kaW5ncy4gU2lsZW50bHkgaWdub3JlcyB0aGUg
SmF2YVNjcmlwdCBleGNlcHRpb24gaWYgYW55LgotICAgICAgICBQYXNzUmVmUHRyPE5vZGU+IG5l
eHROb2RlKEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBuZXh0Tm9kZShleGVjU3RhdGVGcm9t
Tm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KLSAgICAgICAgUGFzc1JlZlB0cjxOb2RlPiBw
cmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZpb3VzTm9kZShleGVj
U3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFzc1JlZlB0
cjxOb2RlPiBuZXh0Tm9kZShFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gbmV4dE5vZGUoc2Ny
aXB0U3RhdGVGcm9tTm9kZShyZWZlcmVuY2VOb2RlKCkpLCBlYyk7IH0KKyAgICAgICAgUGFzc1Jl
ZlB0cjxOb2RlPiBwcmV2aW91c05vZGUoRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHByZXZp
b3VzTm9kZShzY3JpcHRTdGF0ZUZyb21Ob2RlKHJlZmVyZW5jZU5vZGUoKSksIGVjKTsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgTm9kZUl0ZXJhdG9yKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2ln
bmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5
UmVmZXJlbmNlcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwIGIvV2Vi
Q29yZS9kb20vVHJhdmVyc2FsLmNwcAppbmRleCBjMmM5MWQ0Li41ZDU2ZGViIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9UcmF2ZXJzYWwuY3BwCisrKyBiL1dlYkNvcmUvZG9tL1RyYXZlcnNhbC5j
cHAKQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZp
bHRlci5oIgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFRyYXZlcnNhbDo6VHJhdmVyc2FsKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVk
IHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gbm9kZUZpbHRlciwgYm9vbCBleHBh
bmRFbnRpdHlSZWZlcmVuY2VzKQpAQCAtNDAsNyArMzgsNyBAQCBUcmF2ZXJzYWw6OlRyYXZlcnNh
bChQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCB1bnNpZ25lZCB3aGF0VG9TaG93LCBQYXNzUmVm
UHRyPAogewogfQogCi1zaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoRXhlY1N0YXRlKiBleGVj
LCBOb2RlKiBub2RlKSBjb25zdAorc2hvcnQgVHJhdmVyc2FsOjphY2NlcHROb2RlKFNjcmlwdFN0
YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogVG8gaGFuZGxl
IFhNTCBwcm9wZXJseSB3ZSB3b3VsZCBoYXZlIHRvIGNoZWNrIG1fZXhwYW5kRW50aXR5UmVmZXJl
bmNlcy4KIApAQCAtNTAsNyArNDgsNyBAQCBzaG9ydCBUcmF2ZXJzYWw6OmFjY2VwdE5vZGUoRXhl
Y1N0YXRlKiBleGVjLCBOb2RlKiBub2RlKSBjb25zdAogICAgICAgICByZXR1cm4gTm9kZUZpbHRl
cjo6RklMVEVSX1NLSVA7CiAgICAgaWYgKCFtX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQ7Ci0gICAgcmV0dXJuIG1fZmlsdGVyLT5hY2NlcHROb2RlKGV4
ZWMsIG5vZGUpOworICAgIHJldHVybiBtX2ZpbHRlci0+YWNjZXB0Tm9kZShzdGF0ZSwgbm9kZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL1Ry
YXZlcnNhbC5oIGIvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKaW5kZXggNmU4NzEwMy4uZmM0NDAz
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJhdmVyc2FsLmgKKysrIGIvV2ViQ29yZS9kb20v
VHJhdmVyc2FsLmgKQEAgLTI1LDEzICsyNSwxMCBAQAogI2lmbmRlZiBUcmF2ZXJzYWxfaAogI2Rl
ZmluZSBUcmF2ZXJzYWxfaAogCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7
Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBOb2RlOwpAQCAtNDYsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBw
cm90ZWN0ZWQ6CiAgICAgICAgIFRyYXZlcnNhbChQYXNzUmVmUHRyPE5vZGU+LCB1bnNpZ25lZCB3
aGF0VG9TaG93LCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+LCBib29sIGV4cGFuZEVudGl0eVJlZmVy
ZW5jZXMpOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlKEpTQzo6RXhlY1N0YXRlKiwgTm9kZSop
IGNvbnN0OworICAgICAgICBzaG9ydCBhY2NlcHROb2RlKFNjcmlwdFN0YXRlKiwgTm9kZSopIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fcm9vdDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtl
ci5jcHAKaW5kZXggOTg0ZDZjYi4uZGUwNjM2MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJl
ZVdhbGtlci5jcHAKKysrIGIvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKQEAgLTI1LDE0ICsy
NSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKIAot
I2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5o
IgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
IAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBUcmVlV2Fs
a2VyOjpUcmVlV2Fsa2VyKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIHVuc2lnbmVkIHdoYXRU
b1Nob3csIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gZmlsdGVyLCBib29sIGV4cGFuZEVudGl0eVJl
ZmVyZW5jZXMpCkBAIC01NiwxNSArNTQsMTUgQEAgaW5saW5lIE5vZGUqIFRyZWVXYWxrZXI6OnNl
dEN1cnJlbnQoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQogICAgIHJldHVybiBtX2N1cnJlbnQuZ2V0
KCk7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjKQor
Tm9kZSogVHJlZVdhbGtlcjo6cGFyZW50Tm9kZShTY3JpcHRTdGF0ZSogc3RhdGUpCiB7CiAgICAg
UmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgd2hpbGUgKG5vZGUgIT0gcm9vdCgp
KSB7CiAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmICghbm9k
ZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0
Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0
dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlKCkpOwpAQCAtNzIsMTEgKzcwLDExIEBAIE5vZGUq
IFRyZWVXYWxrZXI6OnBhcmVudE5vZGUoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiAwOwog
fQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpmaXJzdENoaWxkKEV4ZWNTdGF0ZSogZXhlYykKK05vZGUq
IFRyZWVXYWxrZXI6OmZpcnN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIGZvciAo
UmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgKSB7Ci0g
ICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0
KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
c2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOwor
ICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAg
ICAgY2FzZSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUOgpAQCAtMTA1LDExICsxMDMsMTEgQEAg
Tm9kZSogVHJlZVdhbGtlcjo6Zmlyc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJu
IDA7CiB9CiAKLU5vZGUqIFRyZWVXYWxrZXI6Omxhc3RDaGlsZChFeGVjU3RhdGUqIGV4ZWMpCitO
b2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIGZv
ciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQtPmxhc3RDaGlsZCgpOyBub2RlOyApIHsK
LSAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoZXhlYywgbm9kZS5n
ZXQoKSk7Ci0gICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7
CisgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgc3dpdGNoIChhY2NlcHROb2RlUmVzdWx0KSB7CiAgICAgICAg
ICAgICBjYXNlIE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQ6CkBAIC0xMzgsMTUgKzEzNiwxNSBA
QCBOb2RlKiBUcmVlV2Fsa2VyOjpsYXN0Q2hpbGQoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVy
biAwOwogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c1NpYmxpbmcoRXhlY1N0YXRlKiBl
eGVjKQorTm9kZSogVHJlZVdhbGtlcjo6cHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKiBzdGF0
ZSkKIHsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IG1fY3VycmVudDsKICAgICBpZiAobm9kZSA9
PSByb290KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIGZv
ciAoUmVmUHRyPE5vZGU+IHNpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsgc2libGlu
ZzsgKSB7Ci0gICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShl
eGVjLCBzaWJsaW5nLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5v
ZGUoc3RhdGUsIHNpYmxpbmcuZ2V0KCkpOworICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
IHN3aXRjaCAoYWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAgICAgICAgIGNhc2UgTm9kZUZp
bHRlcjo6RklMVEVSX0FDQ0VQVDoKQEAgLTE2NiwyMyArMTY0LDIzIEBAIE5vZGUqIFRyZWVXYWxr
ZXI6OnByZXZpb3VzU2libGluZyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCBub2RlID09IHJvb3QoKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNj
ZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2Rl
KHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJl
c3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogfQogCi1Ob2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhFeGVjU3RhdGUqIGV4
ZWMpCitOb2RlKiBUcmVlV2Fsa2VyOjpuZXh0U2libGluZyhTY3JpcHRTdGF0ZSogc3RhdGUpCiB7
CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBtX2N1cnJlbnQ7CiAgICAgaWYgKG5vZGUgPT0gcm9v
dCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBmb3IgKFJl
ZlB0cjxOb2RlPiBzaWJsaW5nID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsgc2libGluZzsgKSB7Ci0g
ICAgICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBzaWJs
aW5nLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUs
IHNpYmxpbmcuZ2V0KCkpOworICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHN3aXRjaCAo
YWNjZXB0Tm9kZVJlc3VsdCkgewogICAgICAgICAgICAgICAgIGNhc2UgTm9kZUZpbHRlcjo6RklM
VEVSX0FDQ0VQVDoKQEAgLTIwMiwyOSArMjAwLDI5IEBAIE5vZGUqIFRyZWVXYWxrZXI6Om5leHRT
aWJsaW5nKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKICAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUgPT0gcm9vdCgpKQogICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMs
IG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUu
Z2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVG
aWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAK
LU5vZGUqIFRyZWVXYWxrZXI6OnByZXZpb3VzTm9kZShFeGVjU3RhdGUqIGV4ZWMpCitOb2RlKiBU
cmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogICAgIHdoaWxlIChub2RlICE9IHJvb3QoKSkgewog
ICAgICAgICB3aGlsZSAoTm9kZSogcHJldmlvdXNTaWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgIG5vZGUgPSBwcmV2aW91c1NpYmxpbmc7Ci0gICAgICAgICAg
ICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsK
LSAgICAgICAgICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkp
OworICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09
IE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1QpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB3aGlsZSAoTm9kZSogbGFzdENoaWxkID0gbm9kZS0+bGFzdENoaWxkKCkpIHsK
ICAgICAgICAgICAgICAgICBub2RlID0gbGFzdENoaWxkOwotICAgICAgICAgICAgICAgIGFjY2Vw
dE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAg
ICAgIGlmIChleGVjICYmIGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIGFj
Y2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9
PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTI0MCw4ICsyMzgsOCBAQCBOb2RlKiBUcmVlV2Fsa2VyOjpwcmV2aW91c05vZGUoRXhl
Y1N0YXRlKiBleGVjKQogICAgICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICBub2RlID0gcGFyZW50OwotICAgICAgICBzaG9ydCBhY2NlcHROb2RlUmVzdWx0
ID0gYWNjZXB0Tm9kZShleGVjLCBub2RlLmdldCgpKTsKLSAgICAgICAgaWYgKGV4ZWMgJiYgZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2Nl
cHROb2RlKHN0YXRlLCBub2RlLmdldCgpKTsKKyAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBpZiAoYWNjZXB0
Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxURVJfQUNDRVBUKQogICAgICAgICAgICAgcmV0
dXJuIHNldEN1cnJlbnQobm9kZS5yZWxlYXNlKCkpOwpAQCAtMjQ5LDE0ICsyNDcsMTQgQEAgTm9k
ZSogVHJlZVdhbGtlcjo6cHJldmlvdXNOb2RlKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4g
MDsKIH0KIAotTm9kZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoRXhlY1N0YXRlKiBleGVjKQorTm9k
ZSogVHJlZVdhbGtlcjo6bmV4dE5vZGUoU2NyaXB0U3RhdGUqIHN0YXRlKQogewogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gbV9jdXJyZW50OwogQ2hpbGRyZW46CiAgICAgd2hpbGUgKE5vZGUqIGZp
cnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgbm9kZSA9IGZpcnN0Q2hp
bGQ7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5v
ZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAmJiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0
KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0
ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAgICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJl
bGVhc2UoKSk7CkBAIC0yNjUsOCArMjYzLDggQEAgQ2hpbGRyZW46CiAgICAgfQogICAgIHdoaWxl
IChOb2RlKiBuZXh0U2libGluZyA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcocm9vdCgpKSkg
ewogICAgICAgICBub2RlID0gbmV4dFNpYmxpbmc7Ci0gICAgICAgIHNob3J0IGFjY2VwdE5vZGVS
ZXN1bHQgPSBhY2NlcHROb2RlKGV4ZWMsIG5vZGUuZ2V0KCkpOwotICAgICAgICBpZiAoZXhlYyAm
JiBleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9
IGFjY2VwdE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOworICAgICAgICBpZiAoc3RhdGUgJiYgc3Rh
dGUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChh
Y2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9BQ0NFUFQpCiAgICAgICAgICAg
ICByZXR1cm4gc2V0Q3VycmVudChub2RlLnJlbGVhc2UoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2RvbS9UcmVlV2Fsa2VyLmggYi9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmgKaW5kZXggMzQ4ZmY5
NC4uZDA2YWNiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5oCisrKyBiL1dl
YkNvcmUvZG9tL1RyZWVXYWxrZXIuaApAQCAtNDUsMjIgKzQ1LDIyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnQuZ2V0KCk7IH0KICAgICAgICAgdm9pZCBzZXRDdXJyZW50Tm9kZShQYXNzUmVmUHRyPE5vZGU+
LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZShKU0M6OkV4ZWNT
dGF0ZSopOwotICAgICAgICBOb2RlKiBmaXJzdENoaWxkKEpTQzo6RXhlY1N0YXRlKik7Ci0gICAg
ICAgIE5vZGUqIGxhc3RDaGlsZChKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICBOb2RlKiBwcmV2
aW91c1NpYmxpbmcoSlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogbmV4dFNpYmxpbmco
SlNDOjpFeGVjU3RhdGUqKTsKLSAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKEpTQzo6RXhlY1N0
YXRlKik7Ci0gICAgICAgIE5vZGUqIG5leHROb2RlKEpTQzo6RXhlY1N0YXRlKik7CisgICAgICAg
IE5vZGUqIHBhcmVudE5vZGUoU2NyaXB0U3RhdGUqKTsKKyAgICAgICAgTm9kZSogZmlyc3RDaGls
ZChTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoU2NyaXB0U3RhdGUqKTsK
KyAgICAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5v
ZGUqIG5leHRTaWJsaW5nKFNjcmlwdFN0YXRlKik7CisgICAgICAgIE5vZGUqIHByZXZpb3VzTm9k
ZShTY3JpcHRTdGF0ZSopOworICAgICAgICBOb2RlKiBuZXh0Tm9kZShTY3JpcHRTdGF0ZSopOwog
CiAgICAgICAgIC8vIEZvciBub24tSlMgYmluZGluZ3MuIFNpbGVudGx5IGlnbm9yZXMgdGhlIEph
dmFTY3JpcHQgZXhjZXB0aW9uIGlmIGFueS4KLSAgICAgICAgTm9kZSogcGFyZW50Tm9kZSgpIHsg
cmV0dXJuIHBhcmVudE5vZGUoZXhlY1N0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0K
LSAgICAgICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoZXhlY1N0YXRl
RnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KLSAgICAgICAgTm9kZSogbGFzdENoaWxkKCkg
eyByZXR1cm4gbGFzdENoaWxkKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3VycmVudC5nZXQoKSkpOyB9
Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzU2libGluZygpIHsgcmV0dXJuIHByZXZpb3VzU2libGlu
ZyhleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAgICBOb2RlKiBu
ZXh0U2libGluZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKGV4ZWNTdGF0ZUZyb21Ob2RlKG1fY3Vy
cmVudC5nZXQoKSkpOyB9Ci0gICAgICAgIE5vZGUqIHByZXZpb3VzTm9kZSgpIHsgcmV0dXJuIHBy
ZXZpb3VzTm9kZShleGVjU3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQotICAgICAg
ICBOb2RlKiBuZXh0Tm9kZSgpIHsgcmV0dXJuIG5leHROb2RlKGV4ZWNTdGF0ZUZyb21Ob2RlKG1f
Y3VycmVudC5nZXQoKSkpOyB9CisgICAgICAgIE5vZGUqIHBhcmVudE5vZGUoKSB7IHJldHVybiBw
YXJlbnROb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAgICAg
ICAgTm9kZSogZmlyc3RDaGlsZCgpIHsgcmV0dXJuIGZpcnN0Q2hpbGQoc2NyaXB0U3RhdGVGcm9t
Tm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBsYXN0Q2hpbGQoKSB7IHJl
dHVybiBsYXN0Q2hpbGQoc2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQor
ICAgICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcoKSB7IHJldHVybiBwcmV2aW91c1NpYmxpbmco
c2NyaXB0U3RhdGVGcm9tTm9kZShtX2N1cnJlbnQuZ2V0KCkpKTsgfQorICAgICAgICBOb2RlKiBu
ZXh0U2libGluZygpIHsgcmV0dXJuIG5leHRTaWJsaW5nKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9j
dXJyZW50LmdldCgpKSk7IH0KKyAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlKCkgeyByZXR1cm4g
cHJldmlvdXNOb2RlKHNjcmlwdFN0YXRlRnJvbU5vZGUobV9jdXJyZW50LmdldCgpKSk7IH0KKyAg
ICAgICAgTm9kZSogbmV4dE5vZGUoKSB7IHJldHVybiBuZXh0Tm9kZShzY3JpcHRTdGF0ZUZyb21O
b2RlKG1fY3VycmVudC5nZXQoKSkpOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBUcmVlV2Fs
a2VyKFBhc3NSZWZQdHI8Tm9kZT4sIHVuc2lnbmVkIHdoYXRUb1Nob3csIFBhc3NSZWZQdHI8Tm9k
ZUZpbHRlcj4sIGJvb2wgZXhwYW5kRW50aXR5UmVmZXJlbmNlcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25714</attachid>
            <date>2008-12-03 10:36:54 -0800</date>
            <delta_ts>2008-12-06 19:39:25 -0800</delta_ts>
            <desc>ScriptCallFrame and ScriptStackTrace v1</desc>
            <filename>call-frame.patch</filename>
            <type>text/plain</type>
            <size>59089</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA4YjRiZGMwLi4xMGQxYTVmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEg
QEAKKzIwMDgtMTItMDMgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IEFsbG93IFNjcmlwdENhbGxGcmFtZSBxdWVyeSBuYW1lcyBvZiBmdW5jdGlvbnMgaW4gdGhlIGNh
bGwgc3RhY2suCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6IGFkZGVkIEludGVybmFs
RnVuY3Rpb246Om5hbWUgYXMgZXhwb3J0ZWQgc3ltYm9sCisKIDIwMDgtMTEtMjcgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAppbmRleCA2NjcxYzZlLi5hN2MzOTMyIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKKysrIGIvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCkBAIC05Niw2ICs5Niw3IEBAIF9fWk4zSlNDMTBJZGVudGlm
aWVyMjRjaGVja1NhbWVJZGVudGlmaWVyVGFibGVFUE5TXzlFeGVjU3RhdGVFUE5TXzdVU3RyaW5n
M1JlcEUKIF9fWk4zSlNDMTBJZGVudGlmaWVyM2FkZEVQTlNfOUV4ZWNTdGF0ZUVQS2MKIF9fWk4z
SlNDMTBJZGVudGlmaWVyNWVxdWFsRVBLTlNfN1VTdHJpbmczUmVwRVBLYwogX19aTjNKU0MxMEpT
RnVuY3Rpb240aW5mb0UKK19fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uNG5hbWVFUE5TXzEySlNH
bG9iYWxEYXRhRQogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNfOUVycm9y
VHlwZUUKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJvclR5cGVF
UEtjCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRVJL
TlNfN1VTdHJpbmdFCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IGVjN2QwMWQuLjI5MmI2YjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMDgtMTItMDMg
IERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MzEKKyAgICAgICAgU3RyZWFtbGluZSBDb25zb2xlLmNwcCwg
YWJzdHJhY3Qgb3V0IHRoZSB1c2Ugb2YgSlNDOjpFeGVjU3RhdGUgYW5kIAorICAgICAgICBKU0M6
OkFyZ0xpc3QgYnkgaW50cm9kdWNpbmcgU2NyaXB0Q2FsbEZyYW1lIGFuZCBTY3JpcHRTdGFja0Zy
YW1lCisgICAgICAgIGFic3RyYWN0aW9ucy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBB
ZGQgU2NyaXB0Q2FsbEZyYW1lIGFuZCBTY3JpcHRTdGFja1RyYWNlIHRvIGJ1aWxkCisgICAgICAg
ICogV2ViQ29yZS5wcm86ICBBZGQgU2NyaXB0Q2FsbEZyYW1lIGFuZCBTY3JpcHRTdGFja1RyYWNl
IHRvIGJ1aWxkCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZCBT
Y3JpcHRDYWxsRnJhbWUgYW5kCisgICAgICAgICAgICBTY3JpcHRTdGFja1RyYWNlIHRvIHByb2pl
Y3QKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZCBTY3Jp
cHRDYWxsRnJhbWUgYW5kCisgICAgICAgICAgICBTY3JpcHRTdGFja1RyYWNlIHRvIHByb2plY3QK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmUgY3VzdG9t
IGJpbmRpbmdzLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjp+U2NyaXB0Q2FsbEZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6YXJndW1lbnRBdCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6OmZyYW1lQXQpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0Q2FsbEZyYW1lOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENh
bGxGcmFtZTo6aW5pdGlhbGl6ZUZyYW1lcyk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q2FsbEZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpm
dW5jdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpzb3VyY2VV
UkwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpsaW5lTnVtYmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6YXJndW1lbnRDb3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6OnN0YXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRTdGFja0ZyYW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRT
dGFja0ZyYW1lOjpTY3JpcHRTdGFja0ZyYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRTdGFja0ZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RhY2tGcmFt
ZTo6ZnVuY3Rpb25OYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaDog
QWRkIG1pc3NpbmcgUGxhdGZvcm1TdHJpbmcgaW5jbHVkZS4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9TY3JpcHRWYWx1ZS5jcHA6IEFkZCBpc051bGwgYW5kIGlzVW5kZWZpbmVkLgorICAgICAgICAo
V2ViQ29yZTo6U2NyaXB0VmFsdWU6OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRW
YWx1ZTo6aXNVbmRlZmluZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmg6
IEFkZCBpc051bGwgYW5kIGlzVW5kZWZpbmVkCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG06IEFkZCBoYW5kbGluZyBmb3IKKyAgICAgICAgICAgIEN1c3RvbUFy
Z3VtZW50SGFuZGxpbmcgYXR0cmlidXRlLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcDogUmVmYWN0b3IgdG8gdXNlIFNjcmlwdENhbGxGcmFtZSBhbmQKKyAgICAg
ICAgICAgIFNjcmlwdFN0YWNrVHJhY2UuCisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlTWVzc2Fn
ZTo6Q29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxl
cjo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250
cm9sbGVyOjpzdGFydEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OmFkZFNjcmlwdENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OnN0YXJ0VGltaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6
OnN0b3BUaW1pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmg6
IFJlZmFjdG9yIHRvIHVzZSBTY3JpcHRDYWxsRnJhbWUgYW5kCisgICAgICAgICAgICBTY3JpcHRT
dGFja1RyYWNlLgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5qczogbW9k
aWZ5IHRvIHVzZSBhcmd1bWVudCB2YWx1ZSBpdHNlbGYKKyAgICAgICAgICAgIHJhdGhlciB0aGFu
IGYubmFtZSBmb3Igc3RhY2sgdHJhY2UuCisgICAgICAgICogcGFnZS9Db25zb2xlLmNwcDogUmVm
YWN0b3IgdG8gdXNlIFNjcmlwdENhbGxGcmFtZSBhbmQKKyAgICAgICAgICAgIFNjcmlwdFN0YWNr
VHJhY2UuCisgICAgICAgIChXZWJDb3JlOjpnZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29uc29sZTo6YWRkTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b25zb2xlOjpkZWJ1Zyk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjplcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb25zb2xlOjppbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6
OmxvZyk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjpkaXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29uc29sZTo6ZGlyeG1sKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OnRyYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OmFzc2VydENvbmRpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDb25zb2xlOjpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjpwcm9m
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OnByb2ZpbGVFbmQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29uc29sZTo6dGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjp0aW1l
RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6Omdyb3VwKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnNvbGU6Ondhcm4pOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5oOgorICAgICAgICAq
IHBhZ2UvQ29uc29sZS5pZGw6IFJlbW92ZSBDdXN0b20gYXR0cmlidXRlcywgYWRkIEN1c3RvbUFy
Z3VtZW50SGFuZGxpbmcKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMsIHR3ZWFrIGFyZ3VtZW50IGRl
ZnMuCisKIDIwMDgtMTEtMjcgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBlMjA0NGIwLi4z
MmY2ZmFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KQEAgLTM0OSw5ICszNDksMTMgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL1BhdXNlZFRpbWVvdXRzLmggXAogCVdlYkNvcmUvYmluZGlu
Z3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVs
ZWRBY3Rpb24uaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwIFwK
KwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oIFwKIAlXZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRJbnN0YW5jZS5oIFwK
KwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YWNrRnJhbWUuY3BwIFwKKwlXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFN0YWNrRnJhbWUuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRWYWx1ZS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaCBcCiAJV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGQ5MDRiZDkuLjky
MWY0NDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnBybwpAQCAtNDYwLDcgKzQ2MCw5IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAg
XAogICAgIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAgXAorICAgIGJp
bmRpbmdzL2pzL1NjcmlwdENhbEZyYW1lLmNwcCBcCiAgICAgYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHAgXAorICAgIGJpbmRpbmdzL2pzL1NjcmlwdFN0YWNrRnJhbWUuY3BwIFwKICAg
ICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1BhdXNlZFRp
bWVvdXRzLmNwcCBcCiAgICAgYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcCBcCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBiNThkN2U1Li5hMzhhMjI3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTEzODgxLDYgKzEzODgxLDE0IEBA
CiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxiaW5kaW5nc1xqc1xTY3JpcHRDYWxsRnJhbWUuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdENh
bGxGcmFtZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdENvbnRyb2xsZXIuY3BwIg0KIAkJCQkJPg0K
IAkJCQk8L0ZpbGU+DQpAQCAtMTM5MDUsNiArMTM5MTMsMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0Zp
bGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlw
dFN0YWNrRnJhbWUuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFN0YWNrRnJhbWUuaCINCisJCQkJ
CT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5k
aW5nc1xqc1xTY3JpcHRWYWx1ZS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDhlYzZhMDMuLjJlMTcyYjkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zLDcgKzMs
NyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsKIAljbGFzc2VzID0gewogCX07Ci0Jb2JqZWN0VmVy
c2lvbiA9IDQyOworCW9iamVjdFZlcnNpb24gPSA0NTsKIAlvYmplY3RzID0gewogCiAvKiBCZWdp
biBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtNTM4LDYgKzUzOCwxMCBAQAogCQkz
N0FDQ0Y2OTBEQTQxNEU3MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QUNDRTYyMERBMkFBOTYwMDg5
RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwICovOyB9OwogCQkzN0Y4MThGRDBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVS
TFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2
NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CisJCTQxNkU3NUJF
MEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRTdGFja0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyog
U2NyaXB0U3RhY2tGcmFtZS5oICovOyB9OworCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQgLyog
U2NyaXB0U3RhY2tGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0U3RhY2tGcmFtZS5j
cHAgKi87IH07CisJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUM5
MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLzsgfTsKKwkJNDE2RTc1Q0Mw
RURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVDQTBFREY5MEM3MDAzNjBFMUQgLyog
U2NyaXB0Q2FsbEZyYW1lLmNwcCAqLzsgfTsKIAkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2IC8q
IFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovOyB9Owog
CQk0NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkMwRTFB
RThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgfTsKIAkJNDQxNTI5
MkYwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkQwRTFBRThBMDAw
QzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwICovOyB9OwpAQCAtNTM0OSw2ICs1
MzUzLDEwIEBACiAJCTM3QUNDRTYyMERBMkFBOTYwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERlc2NyaXB0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkIwRDY1NzYwNjAwNUUx
RjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJDb3JlVVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RTc1QkMwRURGOEZENzAwMzYwRTFEIC8q
IFNjcmlwdFN0YWNrRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
aXB0U3RhY2tGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTZFNzVCRDBF
REY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0U3RhY2tGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRTdGFja0ZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDE2RTc1QzkwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFt
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRDYWxsRnJhbWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8q
IFNjcmlwdENhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTY3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZG
NDVFRjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MTUyOTJEMEUxQUU4QTAwMEM0QTJE
MCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTMxMDksMTIgKzEzMTE3LDE2IEBACiAJCQkJQkNBMzc4MTUwRDE1QzY0
NjAwQjc5M0Q2IC8qIFBhdXNlZFRpbWVvdXRzLmggKi8sCiAJCQkJQkNBMzc4QkEwRDE1RjY0MjAw
Qjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5jcHAgKi8sCiAJCQkJQkNBMzc4QkIwRDE1RjY0MjAw
Qjc5M0Q2IC8qIFNjaGVkdWxlZEFjdGlvbi5oICovLAorCQkJCTQxNkU3NUM5MEVERjkwQzcwMDM2
MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLywKKwkJCQk0MTZFNzVDQTBFREY5MEM3MDAzNjBF
MUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLywKIAkJCQk5M0I3MEQ1MzA5RUIwQzdDMDA5RDg0
NjggLyogU2NyaXB0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJOTNCNzBENTQwOUVCMEM3QzAwOUQ4
NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIuaCAqLywKIAkJCQlBODNFMUM3MjBFNDkwNDJCMDAxNDBC
OUMgLyogU2NyaXB0Q29udHJvbGxlck1hYy5tbSAqLywKIAkJCQk5MzRDQzExNjBFRENBQzczMDBB
NjU4RjIgLyogU2NyaXB0SW5zdGFuY2UuaCAqLywKIAkJCQk5MzRDQzEwOTBFREIyMjM5MDBBNjU4
RjIgLyogU2NyaXB0U291cmNlQ29kZS5oICovLAogCQkJCTQxNkY0NUVGMEVEN0IzMTEwMDgyMTVC
NiAvKiBTY3JpcHRTdHJpbmcuaCAqLywKKwkJCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyog
U2NyaXB0U3RhY2tGcmFtZS5oICovLAorCQkJCTQxNkU3NUJEMEVERjhGRDcwMDM2MEUxRCAvKiBT
Y3JpcHRTdGFja0ZyYW1lLmNwcCAqLywKIAkJCQk5MzRDQzBERjBFRDM5RDZGMDBBNjU4RjIgLyog
U2NyaXB0VmFsdWUuY3BwICovLAogCQkJCTkzNENDMEUwMEVEMzlENkYwMEE2NThGMiAvKiBTY3Jp
cHRWYWx1ZS5oICovLAogCQkJCTY1NDg4RDZBMERENUE4M0QwMDlEODNCMiAvKiBTdHJpbmdTb3Vy
Y2VQcm92aWRlci5oICovLApAQCAtMTY0NDUsNiArMTY0NTcsOCBAQAogCQkJCTA4MThBRUUzMEVE
Qjg2QkMwMDY0N0I2NiAvKiBXTUxFdmVudEhhbmRsaW5nRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDg2NUNDRTcwRURERjUxQjAwREY5RUMzIC8qIFdNTE5vb3BFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwOEUxOTI1NDBFREUwQzNBMDA4N0I3ODAgLyogV01MRXJyb3JIYW5kbGlu
Zy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDE2RTc1QkUwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlw
dFN0YWNrRnJhbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTY0ODYsNyArMTY1MDAs
NyBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7
CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMy
ODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFBy
b2plY3QgIldlYkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40
IjsKKwkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMSI7CiAJCQloYXNTY2FubmVk
Rm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAt
MTgzODIsNiArMTgzOTYsOCBAQAogCQkJCTA4MThBRUUyMEVEQjg2QkMwMDY0N0I2NiAvKiBXTUxF
dmVudEhhbmRsaW5nRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwODY1Q0NFNjBFRERG
NTFCMDBERjlFQzMgLyogV01MTm9vcEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDhF
MTkyNTMwRURFMEMzQTAwODdCNzgwIC8qIFdNTEVycm9ySGFuZGxpbmcuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNDE2RTc1QkYwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdFN0YWNrRnJhbWUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDE2RTc1Q0MwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENh
bGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDb25zb2xlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3Vz
dG9tLmNwcAppbmRleCA2MTMxY2I2Li5kMDVmZmU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nv
bnNvbGVDdXN0b20uY3BwCkBAIC00OCw5MSArNDgsNCBAQCBKU1ZhbHVlKiBKU0NvbnNvbGU6OnBy
b2ZpbGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICByZXR1cm4gY29uc3RydWN0QXJyYXko
ZXhlYywgbGlzdCk7CiB9CiAKLUpTVmFsdWUqIEpTQ29uc29sZTo6ZGVidWcoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT5kZWJ1ZyhleGVj
LCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBK
U0NvbnNvbGU6OmVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRz
KQotewotICAgIGltcGwoKS0+ZXJyb3IoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjppbmZvKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+aW5mbyhleGVjLCBh
cmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBKU0Nv
bnNvbGU6OmxvZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKLXsK
LSAgICBpbXBsKCktPmxvZyhleGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotfQotCi1KU1ZhbHVlKiBKU0NvbnNvbGU6Ondhcm4oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT53YXJuKGV4ZWMsIGFyZ3VtZW50
cyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6
ZGlyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGlt
cGwoKS0+ZGlyKGV4ZWMsIGFyZ3VtZW50cyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19
Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6ZGlyeG1sKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+ZGlyeG1sKGV4ZWMsIGFyZ3VtZW50cyk7
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6dHJh
Y2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKLXsKLSAgICBpbXBsKCktPnRyYWNl
KGV4ZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBKU0NvbnNv
bGU6OmFzc2VydENvbmRpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Vt
ZW50cykKLXsKLSAgICBBcmdMaXN0IG1lc3NhZ2VQYXJhbWV0ZXJzOwotICAgIGFyZ3VtZW50cy5n
ZXRTbGljZSgxLCBtZXNzYWdlUGFyYW1ldGVycyk7Ci0KLSAgICBpbXBsKCktPmFzc2VydENvbmRp
dGlvbihhcmd1bWVudHMuYXQoZXhlYywgMCktPnRvQm9vbGVhbihleGVjKSwgZXhlYywgbWVzc2Fn
ZVBhcmFtZXRlcnMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBK
U0NvbnNvbGU6OmNvdW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRz
KQotewotICAgIGltcGwoKS0+Y291bnQoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjp0aW1lRW5kKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+dGltZUVuZChl
eGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVl
KiBKU0NvbnNvbGU6OnByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1
bWVudHMpCi17Ci0gICAgaW1wbCgpLT5wcm9maWxlKGV4ZWMsIGFyZ3VtZW50cyk7Ci0gICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6cHJvZmlsZUVuZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCkt
PnByb2ZpbGVFbmQoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjpncm91cChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCktPmdyb3VwKGV4ZWMsIGFyZ3VtZW50cyk7
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41ZjI1OTEwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29w
eXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRDYWxsRnJhbWUuaCIKKworI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgorI2luY2x1
ZGUgPGludGVycHJldGVyL0ludGVycHJldGVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0
aW9uLmg+CisjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CisjaW5jbHVkZSAiU2NyaXB0U3Rh
Y2tGcmFtZS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1NjcmlwdENhbGxGcmFtZTo6U2NyaXB0Q2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncywgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpCisgICAgOiBtX2Zy
YW1lc0luaXRpYWxpemVkKGZhbHNlKQorICAgICwgbV9leGVjKGV4ZWMpCisgICAgLCBtX2NhbGxl
cigwKQorICAgICwgbV9mdW5jdGlvbk5hbWUoIiIpCit7CisgICAgZm9yKHVuc2lnbmVkIGkgPSBz
a2lwQXJndW1lbnRDb3VudDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbV9hcmd1
bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVlKGFyZ3MuYXQoZXhlYywgaSkpKTsKKyAgICB9CisKKyAg
ICBpbnQgc2lnbmVkTGluZU51bWJlcjsKKyAgICBpbnRwdHJfdCBzb3VyY2VJRDsKKyAgICBVU3Ry
aW5nIHVybFN0cmluZzsKKyAgICBKU1ZhbHVlKiBmdW5jOworCisgICAgZXhlYy0+aW50ZXJwcmV0
ZXIoKS0+cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNvdXJjZUlE
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxTdHJpbmcs
IGZ1bmMpOworCisgICAgbV9zb3VyY2VVUkwgPSBLVVJMKHVybFN0cmluZyk7CisgICAgbV9saW5l
TnVtYmVyID0gc2lnbmVkTGluZU51bWJlciA+PSAwID8gc2lnbmVkTGluZU51bWJlciA6IDA7Cisg
ICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgbV9jYWxsZXIgPSBhc0Z1bmN0aW9uKGZ1bmMpOworICAg
ICAgICBtX2Z1bmN0aW9uTmFtZSA9IG1fY2FsbGVyLT5uYW1lKCZleGVjLT5nbG9iYWxEYXRhKCkp
OworICAgIH0KK30KKworU2NyaXB0Q2FsbEZyYW1lOjp+U2NyaXB0Q2FsbEZyYW1lKCkKK3sKK30K
KworY29uc3QgU2NyaXB0VmFsdWUgJlNjcmlwdENhbGxGcmFtZTo6YXJndW1lbnRBdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID4gaW5kZXgp
OworICAgIHJldHVybiBtX2FyZ3VtZW50c1tpbmRleF07Cit9CisKKworY29uc3QgU2NyaXB0U3Rh
Y2tGcmFtZSAmU2NyaXB0Q2FsbEZyYW1lOjpmcmFtZUF0KHVuc2lnbmVkIGluZGV4KQoreworICAg
IGluaXRpYWxpemVGcmFtZXMoKTsKKyAgICBBU1NFUlQobV9mcmFtZXMuc2l6ZSgpID4gaW5kZXgp
OworICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF07Cit9CisKK3Vuc2lnbmVkIFNjcmlwdENhbGxG
cmFtZTo6ZnJhbWVDb3VudCgpCit7CisgICAgaW5pdGlhbGl6ZUZyYW1lcygpOworICAgIHJldHVy
biBtX2ZyYW1lcy5zaXplKCk7Cit9CisKK3ZvaWQgU2NyaXB0Q2FsbEZyYW1lOjppbml0aWFsaXpl
RnJhbWVzKCkKK3sKKyAgICBpZiAoIW1fY2FsbGVyIHx8IG1fZnJhbWVzSW5pdGlhbGl6ZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEpTVmFsdWUqIGZ1bmMgPSBtX2NhbGxlcjsKKyAgICB3aGls
ZSghZnVuYy0+aXNOdWxsKCkpIHsKKyAgICAgICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlwdFN0YWNr
RnJhbWUobV9leGVjLCBmdW5jKSk7CisgICAgICAgIGZ1bmMgPSBtX2V4ZWMtPmludGVycHJldGVy
KCktPnJldHJpZXZlQ2FsbGVyKG1fZXhlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXNJbnRlcm5hbEZ1bmN0aW9uKGZ1bmMpKTsKKyAgICB9
CisgICAgbV9mcmFtZXNJbml0aWFsaXplZCA9IHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjVlZTlkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBT
Y3JpcHRDYWxsRnJhbWVfaAorI2RlZmluZSBTY3JpcHRDYWxsRnJhbWVfaAorCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgInJ1bnRpbWUvQXJnTGlzdC5oIgorI2luY2x1ZGUgIlNjcmlwdFN0
cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKyAgICBj
bGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3MgSlNGdW5jdGlvbjsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIGNsYXNzIFNjcmlwdFN0YWNrRnJhbWU7CisKKyAgICBjbGFzcyBTY3JpcHRD
YWxsRnJhbWUgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2Ny
aXB0Q2FsbEZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0JiwgdW5zaWdu
ZWQgc2tpcEFyZ3VtZW50Q291bnQgPSAwKTsKKyAgICAgICAgflNjcmlwdENhbGxGcmFtZSgpOwor
ICAgICAgICBjb25zdCBTY3JpcHRTdHJpbmcgJmZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZnVuY3Rpb25OYW1lOyB9CisgICAgICAgIGNvbnN0IEtVUkwgJnNvdXJjZVVSTCgpIGNvbnN0
IHsgcmV0dXJuIG1fc291cmNlVVJMOyB9CisgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIoKSBj
b25zdCB7IHJldHVybiBtX2xpbmVOdW1iZXI7IH0KKyAgICAgICAgLy8gYXJndW1lbnQgcmV0cmll
dmFsIG1ldGhvZHMKKyAgICAgICAgY29uc3QgU2NyaXB0VmFsdWUgJmFyZ3VtZW50QXQodW5zaWdu
ZWQpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgICAgIC8vIGNhbGwgZnJhbWUgcmV0cmlldmFs
IG1ldGhvZHMKKyAgICAgICAgY29uc3QgU2NyaXB0U3RhY2tGcmFtZSAmZnJhbWVBdCh1bnNpZ25l
ZCk7CisgICAgICAgIHVuc2lnbmVkIGZyYW1lQ291bnQoKTsKKyAgICAgICAgLy8gRklYTUU6IFVz
ZSBTY3JpcHRTdGF0ZSBvbmNlIGl0J3MgaW4KKyAgICAgICAgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9leGVjOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lk
IGluaXRpYWxpemVGcmFtZXMoKTsKKworICAgICAgICBib29sIG1fZnJhbWVzSW5pdGlhbGl6ZWQ7
CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbmxpbmVDYXBhY2l0eSA9IDg7CisKKyAg
ICAgICAgSlNDOjpFeGVjU3RhdGUqIG1fZXhlYzsKKyAgICAgICAgS1VSTCBtX3NvdXJjZVVSTDsK
KyAgICAgICAgdW5zaWduZWQgbV9saW5lTnVtYmVyOworICAgICAgICBKU0M6OkpTRnVuY3Rpb24q
IG1fY2FsbGVyOworICAgICAgICBWZWN0b3I8U2NyaXB0VmFsdWUsIGlubGluZUNhcGFjaXR5PiBt
X2FyZ3VtZW50czsKKyAgICAgICAgVmVjdG9yPFNjcmlwdFN0YWNrRnJhbWU+IG1fZnJhbWVzOwor
ICAgICAgICBTY3JpcHRTdHJpbmcgbV9mdW5jdGlvbk5hbWU7CisgICAgfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0Q2FsbEZyYW1lX2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RhY2tGcmFtZS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdFN0YWNrRnJhbWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjM3ZWNlMGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdFN0YWNrRnJhbWUuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNjcmlwdFN0YWNrRnJhbWUuaCIKKworI2luY2x1ZGUgPGludGVycHJldGVy
L0NhbGxGcmFtZS5oPgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNWYWx1ZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmluZy5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNHbG9iYWxEYXRhLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworU2NyaXB0U3RhY2tGcmFtZTo6U2NyaXB0U3RhY2tGcmFtZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUqIGZ1bmMpCisgICAgOiBtX2Z1bmN0aW9uTmFtZShhc0Z1bmN0aW9u
KGZ1bmMpLT5uYW1lKCZleGVjLT5nbG9iYWxEYXRhKCkpKSB7IH0KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGFja0ZyYW1l
LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YWNrRnJhbWUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2U5NWEzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRTdGFja0ZyYW1lLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNjcmlwdFN0YWNrRnJhbWVfaAorI2RlZmluZSBTY3JpcHRTdGFja0ZyYW1lX2gKKworI2lu
Y2x1ZGUgIlNjcmlwdFN0cmluZy5oIgorCituYW1lc3BhY2UgSlNDIHsKKyAgICBjbGFzcyBFeGVj
U3RhdGU7CisgICAgY2xhc3MgSlNWYWx1ZTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCByZXRyaWV2aW5nIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2Ug
VVJMIGFuZCBzdG9yaW5nIGhlcmUuCisgICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1NTY+CisgICAgY2xhc3MgU2NyaXB0U3RhY2tGcmFtZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBTY3JpcHRTdGFja0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlKik7CisKKyAgICAgICAgY29uc3QgU2NyaXB0U3RyaW5nICZmdW5jdGlvbk5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgU2NyaXB0U3RyaW5nIG1fZnVuY3Rpb25OYW1lOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdFN0YWNrRnJhbWVfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0U3RyaW5nLmgKaW5kZXggNjhiOThmZi4uYTU4MmJkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFN0cmluZy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNjcmlwdFN0cmluZ19oCiAjZGVm
aW5lIFNjcmlwdFN0cmluZ19oCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1
ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggNjI2Y2RmNi4uYmIyZWUxZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAKQEAgLTUwLDQgKzUwLDE4IEBAIGJvb2wgU2NyaXB0
VmFsdWU6OmdldFN0cmluZyhTdHJpbmcmIHJlc3VsdCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorYm9vbCBTY3JpcHRWYWx1ZTo6aXNOdWxsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdmFs
dWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV92YWx1ZS0+aXNO
dWxsKCk7Cit9CisKK2Jvb2wgU2NyaXB0VmFsdWU6OmlzVW5kZWZpbmVkKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fdmFsdWUuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
bV92YWx1ZS0+aXNVbmRlZmluZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRWYWx1ZS5oCmluZGV4IDhjY2JiNjQuLjVkZmU3NmQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmgKQEAgLTQzLDYgKzQzLDggQEAgcHVibGljOgogCiAgICAgSlNDOjpK
U1ZhbHVlKiBqc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQogICAgIGJv
b2wgZ2V0U3RyaW5nKFN0cmluZyYgcmVzdWx0KSBjb25zdDsKKyAgICBib29sIGlzTnVsbCgpIGNv
bnN0OworICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBKU0M6
OlByb3RlY3RlZFB0cjxKU0M6OkpTVmFsdWU+IG1fdmFsdWU7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCA0YzE5OWE5Li5lZGI0ZDBkIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KQEAgLTEzNDEsNiArMTM0
MSwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAgICAgICAgICAgICAgICAgbXkg
JGhhc09wdGlvbmFsQXJndW1lbnRzID0gMDsKIAorICAgICAgICAgICAgICAgIGlmICgkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxp
bmcifSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBTY3Jp
cHRDYWxsRnJhbWUgY2FsbEZyYW1lKGV4ZWMsIGFyZ3MsICRudW1QYXJhbWV0ZXJzKTtcbiIpOwor
ICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRDYWxsRnJhbWUuaCJ9ID0g
MTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJh
bWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoISRoYXNPcHRpb25hbEFyZ3VtZW50cyAmJiAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiT3B0aW9uYWwifSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsICJcbiAgICBpbnQgYXJnc0NvdW50ID0gYXJncy5zaXplKCk7XG4iKTsKQEAgLTE0Nzks
NiArMTQ4NCwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgpCiAg
ICAgbXkgJHBvZFR5cGUgPSBzaGlmdDsKICAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNoaWZ0Owog
CisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7CisgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiLCAi
IGlmICRwYXJhbUluZGV4OworICAgICAgICArKyRwYXJhbUluZGV4OworICAgICAgICAkZnVuY3Rp
b25TdHJpbmcgLj0gIiZjYWxsRnJhbWUiOworICAgIH0KKwogICAgIGlmIChAeyRmdW5jdGlvbi0+
cmFpc2VzRXhjZXB0aW9uc30pIHsKICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICIsICIgaWYg
JHBhcmFtSW5kZXg7CiAgICAgICAgICRmdW5jdGlvblN0cmluZyAuPSAiZWMiOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA4NGJhZGIxLi43MTRkZTA4IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNTksNiArNTks
OCBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVz
cG9uc2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxGcmFt
ZS5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YWNrRnJhbWUuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgi
CkBAIC0xNzAsMTggKzE3MiwyOCBAQCBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2UgewogICAgIHsKICAg
ICB9CiAKLSAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VMZXZlbCBs
LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIHVuc2lnbmVkIGxpLCBjb25z
dCBTdHJpbmcmIHUsIHVuc2lnbmVkIGcpCisgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZSBzLCBNZXNzYWdlTGV2ZWwgbCwgU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIHVuc2lnbmVk
IGcsIGJvb2wgc3RvcmVUcmFjZSA9IGZhbHNlKQogICAgICAgICA6IHNvdXJjZShzKQogICAgICAg
ICAsIGxldmVsKGwpCi0gICAgICAgICwgd3JhcHBlZEFyZ3VtZW50cyhhcmdzLnNpemUoKSkKLSAg
ICAgICAgLCBsaW5lKGxpKQotICAgICAgICAsIHVybCh1KQorICAgICAgICAsIHdyYXBwZWRBcmd1
bWVudHMoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCisgICAgICAgICwgZnJhbWVzKHN0b3Jl
VHJhY2UgPyBjYWxsRnJhbWUtPmZyYW1lQ291bnQoKSA6IDApCisgICAgICAgICwgbGluZShjYWxs
RnJhbWUtPmxpbmVOdW1iZXIoKSkKKyAgICAgICAgLCB1cmwoY2FsbEZyYW1lLT5zb3VyY2VVUkwo
KS5zdHJpbmcoKSkKICAgICAgICAgLCBncm91cExldmVsKGcpCiAgICAgICAgICwgcmVwZWF0Q291
bnQoMSkKICAgICB7CisKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3csIGp1c3Qgc3RvcmUgZnVu
Y3Rpb24gbmFtZXMgYXMgc3RyaW5ncy4KKyAgICAgICAgLy8gQXMgU2NyaXB0U3RhY2tGcmFtZSBn
cm93cyBtb3JlIG1lbWJlcnMsIHJlZmFjdG9yIHRvIHN0b3JlIGxpbmUgbnVtYmVyCisgICAgICAg
IC8vIGFuZCBzb3VyY2UgVVJMIGluZm9ybWF0aW9uLgorICAgICAgICBpZiAoc3RvcmVUcmFjZSkK
KyAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+ZnJhbWVDb3Vu
dCgpOyArK2kpCisgICAgICAgICAgICAgICAgZnJhbWVzW2ldID0gY2FsbEZyYW1lLT5mcmFtZUF0
KGkpLmZ1bmN0aW9uTmFtZSgpOworCiAgICAgICAgIEpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICB3cmFwcGVkQXJndW1lbnRzW2ldID0gSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGV4
ZWMsIGFyZ3MuYXQoZXhlYywgaSkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICAgICAgd3JhcHBlZEFy
Z3VtZW50c1tpXSA9IEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChjYWxsRnJhbWUtPnN0
YXRlKCksIGNhbGxGcmFtZS0+YXJndW1lbnRBdChpKS5qc1ZhbHVlKCkpOwogICAgIH0KICAgICAK
ICAgICBib29sIGlzRXF1YWwoRXhlY1N0YXRlKiBleGVjLCBDb25zb2xlTWVzc2FnZSogbXNnKSBj
b25zdApAQCAtMjA4LDYgKzIyMCw3IEBAIHN0cnVjdCBDb25zb2xlTWVzc2FnZSB7CiAgICAgTWVz
c2FnZUxldmVsIGxldmVsOwogICAgIFN0cmluZyBtZXNzYWdlOwogICAgIFZlY3RvcjxQcm90ZWN0
ZWRQdHI8SlNWYWx1ZT4gPiB3cmFwcGVkQXJndW1lbnRzOworICAgIFZlY3RvcjxVU3RyaW5nPiBm
cmFtZXM7CiAgICAgdW5zaWduZWQgbGluZTsKICAgICBTdHJpbmcgdXJsOwogICAgIHVuc2lnbmVk
IGdyb3VwTGV2ZWw7CkBAIC0xMjk5LDEyICsxMzEyLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2V0V2luZG93VmlzaWJsZShib29sIHZpc2libGUsIGJvb2wgYXR0YWNoZWQpCiAgICAg
bV9zaG93QWZ0ZXJWaXNpYmxlID0gQ3VycmVudFBhbmVsOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMs
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAg
IGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhZGRDb25zb2xlTWVzc2Fn
ZShleGVjLCBuZXcgQ29uc29sZU1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgZXhlYywgYXJndW1lbnRz
LCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIG1fZ3JvdXBMZXZlbCkpOworICAgIGFkZENvbnNvbGVN
ZXNzYWdlKGNhbGxGcmFtZS0+c3RhdGUoKSwgbmV3IENvbnNvbGVNZXNzYWdlKHNvdXJjZSwgbGV2
ZWwsIGNhbGxGcmFtZSwgbV9ncm91cExldmVsLCBsZXZlbCA9PSBUcmFjZU1lc3NhZ2VMZXZlbCkp
OwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVz
c2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQpAQCAtMTM1
MCwxMSArMTM2MywxMSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnRvZ2dsZVJlY29yZEJ1
dHRvbihib29sIGlzUHJvZmlsaW5nKQogICAgIGNhbGxGdW5jdGlvbihtX3NjcmlwdENvbnRleHQs
IG1fc2NyaXB0T2JqZWN0LCAic2V0UmVjb3JkaW5nUHJvZmlsZSIsIDEsICZpc1Byb3ZpbmdWYWx1
ZSwgZXhjZXB0aW9uKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydEdyb3Vw
KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3VtZW50cywgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit2
b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0R3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lKQogeyAgICAKICAgICArK21fZ3JvdXBMZXZlbDsK
IAotICAgIGFkZENvbnNvbGVNZXNzYWdlKGV4ZWMsIG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2Us
IFN0YXJ0R3JvdXBNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cywgbGluZU51bWJlciwgc291
cmNlVVJMLCBtX2dyb3VwTGV2ZWwpKTsKKyAgICBhZGRDb25zb2xlTWVzc2FnZShjYWxsRnJhbWUt
PnN0YXRlKCksIG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIFN0YXJ0R3JvdXBNZXNzYWdlTGV2
ZWwsIGNhbGxGcmFtZSwgbV9ncm91cExldmVsKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6ZW5kR3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQpAQCAtMjE4NSw3ICsyMTk4LDEyIEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6YWRkU2NyaXB0Q29uc29sZU1lc3NhZ2UoY29uc3QgQ29uc29sZU1l
c3NhZ2UqIG1lc3NhZ2UpCiAgICAgYXJndW1lbnRzW2FyZ3VtZW50Q291bnQrK10gPSBncm91cExl
dmVsVmFsdWU7CiAgICAgYXJndW1lbnRzW2FyZ3VtZW50Q291bnQrK10gPSByZXBlYXRDb3VudFZh
bHVlOwogCi0gICAgaWYgKCFtZXNzYWdlLT53cmFwcGVkQXJndW1lbnRzLmlzRW1wdHkoKSkgewor
ICAgIGlmICghbWVzc2FnZS0+ZnJhbWVzLmlzRW1wdHkoKSkgeworICAgICAgICB1bnNpZ25lZCBy
ZW1haW5pbmdTcGFjZUluQXJndW1lbnRzID0gbWF4aW11bU1lc3NhZ2VBcmd1bWVudHMgLSBhcmd1
bWVudENvdW50OworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNUb0FkZCA9IG1pbihyZW1haW5p
bmdTcGFjZUluQXJndW1lbnRzLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obWVzc2FnZS0+ZnJhbWVz
LnNpemUoKSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzVG9B
ZGQ7ICsraSkKKyAgICAgICAgICAgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gSlNWYWx1
ZU1ha2VTdHJpbmcobV9zY3JpcHRDb250ZXh0LCBqc1N0cmluZ1JlZihtZXNzYWdlLT5mcmFtZXNb
aV0pLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKCFtZXNzYWdlLT53cmFwcGVkQXJndW1lbnRzLmlz
RW1wdHkoKSkgewogICAgICAgICB1bnNpZ25lZCByZW1haW5pbmdTcGFjZUluQXJndW1lbnRzID0g
bWF4aW11bU1lc3NhZ2VBcmd1bWVudHMgLSBhcmd1bWVudENvdW50OwogICAgICAgICB1bnNpZ25l
ZCBhcmd1bWVudHNUb0FkZCA9IG1pbihyZW1haW5pbmdTcGFjZUluQXJndW1lbnRzLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obWVzc2FnZS0+d3JhcHBlZEFyZ3VtZW50cy5zaXplKCkpKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50c1RvQWRkOyArK2kpCkBAIC0yNzg2
LDkgKzI4MDQsOSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdOb2RlSGlnaGxpZ2h0
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBkcmF3SGlnaGxpZ2h0Rm9yQm94
ZXMoY29udGV4dCwgbGluZUJveFF1YWRzLCBhYnNDb250ZW50UXVhZCwgYWJzUGFkZGluZ1F1YWQs
IGFic0JvcmRlclF1YWQsIGFic01hcmdpblF1YWQpOwogfQogCi12b2lkIEluc3BlY3RvckNvbnRy
b2xsZXI6OmNvdW50KGNvbnN0IFVTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZUlEKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb3VudChj
b25zdCBTdHJpbmcmIHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlEKQogewotICAgIFN0cmluZyBpZGVudGlmaWVyID0gU3RyaW5nKHRpdGxlKSArIFN0cmlu
Zzo6Zm9ybWF0KCJAJXM6JWQiLCBzb3VyY2VJRC51dGY4KCkuZGF0YSgpLCBsaW5lTnVtYmVyKTsK
KyAgICBTdHJpbmcgaWRlbnRpZmllciA9IHRpdGxlICsgU3RyaW5nOjpmb3JtYXQoIkAlczolZCIs
IHNvdXJjZUlELnV0ZjgoKS5kYXRhKCksIGxpbmVOdW1iZXIpOwogICAgIEhhc2hNYXA8U3RyaW5n
LCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ID0gbV9jb3VudHMuZmluZChpZGVudGlmaWVyKTsKICAg
ICBpbnQgY291bnQ7CiAgICAgaWYgKGl0ID09IG1fY291bnRzLmVuZCgpKQpAQCAtMjgwMCwxNiAr
MjgxOCwxNiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvdW50KGNvbnN0IFVTdHJpbmcm
IHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdAogCiAgICAgbV9jb3VudHMuYWRkKGlk
ZW50aWZpZXIsIGNvdW50KTsKIAotICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQo
IiVzOiAlZCIsIHRpdGxlLlVURjhTdHJpbmcoKS5jX3N0cigpLCBjb3VudCk7CisgICAgU3RyaW5n
IG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiJXM6ICVkIiwgdGl0bGUudXRmOCgpLmRhdGEoKSwg
Y291bnQpOwogICAgIGFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNz
YWdlTGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzdGFydFRpbWluZyhjb25zdCBVU3RyaW5nJiB0aXRsZSkKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsK
ICAgICBtX3RpbWVzLmFkZCh0aXRsZSwgY3VycmVudFRpbWUoKSAqIDEwMDApOwogfQogCi1ib29s
IEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcoY29uc3QgVVN0cmluZyYgdGl0bGUsIGRv
dWJsZSYgZWxhcHNlZCkKK2Jvb2wgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RvcFRpbWluZyhjb25z
dCBTdHJpbmcmIHRpdGxlLCBkb3VibGUmIGVsYXBzZWQpCiB7CiAgICAgSGFzaE1hcDxTdHJpbmcs
IGRvdWJsZT46Oml0ZXJhdG9yIGl0ID0gbV90aW1lcy5maW5kKHRpdGxlKTsKICAgICBpZiAoaXQg
PT0gbV90aW1lcy5lbmQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApp
bmRleCBmNGQyNDcyLi5hMjM3ODhhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oCkBAIC02MSw2ICs2MSw3IEBAIGNsYXNzIE5vZGU7CiBjbGFzcyBQYWdlOwogY2xhc3Mg
UmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFJlc291cmNlRXJyb3I7CitjbGFzcyBTY3JpcHRDYWxs
RnJhbWU7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKIHN0cnVjdCBDb25zb2xlTWVzc2FnZTsKQEAg
LTE2MCw3ICsxNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCB3aW5kb3dWaXNpYmxlKCk7CiAgICAg
dm9pZCBzZXRXaW5kb3dWaXNpYmxlKGJvb2wgdmlzaWJsZSA9IHRydWUsIGJvb2wgYXR0YWNoZWQg
PSBmYWxzZSk7CiAKLSAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwg
TWVzc2FnZUxldmVsLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJndW1l
bnRzLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKKyAgICB2
b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZUxldmVsLCBTY3Jp
cHRDYWxsRnJhbWUqKTsKICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJj
ZSwgTWVzc2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOwogICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2Fn
ZXMoKTsKICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKQEAgLTIzNywxMiArMjM4
LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBjb3VudChjb25zdCBKU0M6OlVTdHJpbmcmIHRp
dGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKKyAgICB2
b2lkIGNvdW50KGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0
IFN0cmluZyYgc291cmNlSUQpOwogCi0gICAgdm9pZCBzdGFydFRpbWluZyhjb25zdCBKU0M6OlVT
dHJpbmcmIHRpdGxlKTsKLSAgICBib29sIHN0b3BUaW1pbmcoY29uc3QgSlNDOjpVU3RyaW5nJiB0
aXRsZSwgZG91YmxlJiBlbGFwc2VkKTsKKyAgICB2b2lkIHN0YXJ0VGltaW5nKGNvbnN0IFN0cmlu
ZyYgdGl0bGUpOworICAgIGJvb2wgc3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3Vi
bGUmIGVsYXBzZWQpOwogCi0gICAgdm9pZCBzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmd1bWVudHMsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICB2b2lkIHN0
YXJ0R3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1l
KTsKICAgICB2b2lkIGVuZEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCmluZGV4IGU0ZGU4OGIuLjQ1ZjAzZTcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCkBAIC02MDQsNyArNjA0LDcgQEAgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgbGluZSwgdXJs
LCBncm91cExldmVsLCByZXAKICAgICAgICAgICAgIHNwYW4uYWRkU3R5bGVDbGFzcygiY29uc29s
ZS1mb3JtYXR0ZWQtdHJhY2UiKTsKICAgICAgICAgICAgIHZhciBzdGFjayA9IEFycmF5LnByb3Rv
dHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgNik7CiAgICAgICAgICAgICB2YXIgZnVuY05hbWVz
ID0gc3RhY2subWFwKGZ1bmN0aW9uKGYpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZi5uYW1l
IHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbikiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZiB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihhbm9ueW1vdXMg
ZnVuY3Rpb24pIik7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZnVuY05hbWVzLmpvaW4oIlxuIikpKTsKICAgICAg
ICAgICAgIHRoaXMuZm9ybWF0dGVkTWVzc2FnZSA9IHNwYW47CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BhZ2UvQ29uc29sZS5jcHAgYi9XZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAKaW5kZXggNmEyM2Yy
Zi4uZTNmMDM3NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCisrKyBiL1dl
YkNvcmUvcGFnZS9Db25zb2xlLmNwcApAQCAtMzUsMTkgKzM1LDE2IEBACiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JD
b250cm9sbGVyLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0j
aW5jbHVkZSA8cnVudGltZS9BcmdMaXN0Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9Db21wbGV0aW9u
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgotI2luY2x1ZGUgPGludGVycHJldGVy
L0ludGVycHJldGVyLmg+CisjaWYgVVNFKEpTQykKICNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxl
ci5oPgorI2VuZGlmCisjaW5jbHVkZSAiU2NyaXB0Q2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiU2Ny
aXB0U3RhY2tGcmFtZS5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBK
U0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29uc29sZTo6Q29uc29sZShGcmFtZSogZnJh
bWUpCkBAIC03MCw2ICs2NywxOCBAQCBzdGF0aWMgdm9pZCBwcmludFNvdXJjZVVSTEFuZExpbmUo
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCiAgICAgfQogfQog
CitzdGF0aWMgYm9vbCBnZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcoU2NyaXB0Q2FsbEZyYW1lKiBj
YWxsRnJhbWUsIFN0cmluZyYgcmVzdWx0LCBib29sIGNoZWNrRm9yTnVsbE9yVW5kZWZpbmVkID0g
ZmFsc2UpCit7CisgICAgaWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlID0gY2FsbEZyYW1l
LT5hcmd1bWVudEF0KDApOworICAgIGlmIChjaGVja0Zvck51bGxPclVuZGVmaW5lZCAmJiAodmFs
dWUuaXNOdWxsKCkgfHwgdmFsdWUuaXNVbmRlZmluZWQoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiB2YWx1ZS5nZXRTdHJpbmcocmVzdWx0KTsKK30KKwogc3RhdGljIHZv
aWQgcHJpbnRNZXNzYWdlU291cmNlQW5kTGV2ZWxQcmVmaXgoTWVzc2FnZVNvdXJjZSBzb3VyY2Us
IE1lc3NhZ2VMZXZlbCBsZXZlbCkKIHsKICAgICBjb25zdCBjaGFyKiBzb3VyY2VTdHJpbmc7CkBA
IC0xMTYsOCArMTI1LDE3IEBAIHN0YXRpYyB2b2lkIHByaW50TWVzc2FnZVNvdXJjZUFuZExldmVs
UHJlZml4KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwKICAgICBwcmludGYoIiVz
ICVzOiIsIHNvdXJjZVN0cmluZywgbGV2ZWxTdHJpbmcpOwogfQogCi1zdGF0aWMgdm9pZCBwcmlu
dFRvU3RhbmRhcmRPdXQoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQg
bGluZU51bWJlcikKK3ZvaWQgQ29uc29sZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJj
ZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxp
bmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogeworICAgIFBhZ2UqIHBhZ2UgPSB0
aGlzLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
c291cmNlID09IEpTTWVzc2FnZVNvdXJjZSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVu
dCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7
CisKKyAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUo
c291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsKKwogICAgIGlm
ICghQ29uc29sZTo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMTI3LDI4OCArMTQ1LDE4NiBAQCBzdGF0aWMgdm9pZCBwcmludFRvU3RhbmRhcmRPdXQoTWVz
c2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgUwogICAgIHByaW50
ZigiICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwogfQogCi1zdGF0aWMgdm9pZCBwcmlu
dFRvU3RhbmRhcmRPdXQoTWVzc2FnZUxldmVsIGxldmVsLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBpZiAoIUNvbnNvbGU6OnNo
b3VsZFByaW50RXhjZXB0aW9ucygpKQordm9pZCBDb25zb2xlOjphZGRNZXNzYWdlKE1lc3NhZ2VM
ZXZlbCBsZXZlbCwgU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGJvb2wgYWNjZXB0Tm9Bcmd1
bWVudHMpIHsKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOworICAgIGlmICghcGFnZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJpbnRTb3VyY2VVUkxBbmRMaW5lKHVybC5wcmV0dHlV
UkwoKSwgMCk7Ci0gICAgcHJpbnRNZXNzYWdlU291cmNlQW5kTGV2ZWxQcmVmaXgoSlNNZXNzYWdl
U291cmNlLCBsZXZlbCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFyZ3Muc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgVVN0cmluZyBhcmdBc1N0cmluZyA9IGFyZ3MuYXQoZXhlYywgaSkt
PnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICBwcmludGYoIiAlcyIsIGFyZ0FzU3RyaW5nLlVURjhT
dHJpbmcoKS5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICBwcmludGYoIlxuIik7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgdm9pZCByZXRyaWV2ZUxhc3RDYWxsZXIoRXhlY1N0YXRlKiBleGVjLCBLVVJMJiB1
cmwsIHVuc2lnbmVkJiBsaW5lTnVtYmVyKQotewotICAgIGludCBzaWduZWRMaW5lTnVtYmVyOwot
ICAgIGludHB0cl90IHNvdXJjZUlEOwotICAgIFVTdHJpbmcgdXJsU3RyaW5nOwotICAgIEpTVmFs
dWUqIGZ1bmN0aW9uOworICAgIGlmICghYWNjZXB0Tm9Bcmd1bWVudHMgJiYgIWNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBleGVjLT5pbnRlcnByZXRl
cigpLT5yZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgc2lnbmVkTGluZU51bWJlciwgc291cmNlSUQs
IHVybFN0cmluZywgZnVuY3Rpb24pOworICAgIFN0cmluZyBtZXNzYWdlOworICAgIGlmIChnZXRG
aXJzdEFyZ3VtZW50QXNTdHJpbmcoY2FsbEZyYW1lLCBtZXNzYWdlKSkKKyAgICAgICAgcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGNhbGxGcmFt
ZS0+bGluZU51bWJlcigpLCBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpLnByZXR0eVVSTCgpKTsKIAot
ICAgIHVybCA9IEtVUkwodXJsU3RyaW5nKTsKLSAgICBsaW5lTnVtYmVyID0gKHNpZ25lZExpbmVO
dW1iZXIgPj0gMCA/IHNpZ25lZExpbmVOdW1iZXIgOiAwKTsKLX0KKyAgICBwYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBsZXZl
bCwgY2FsbEZyYW1lKTsKIAotdm9pZCBDb25zb2xlOjphZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWdu
ZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgUGFnZSogcGFn
ZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCisgICAgaWYgKCFDb25zb2xlOjpzaG91
bGRQcmludEV4Y2VwdGlvbnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNvdXJjZSA9
PSBKU01lc3NhZ2VTb3VyY2UpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWRk
TWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwotCi0gICAg
cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwg
bGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisgICAgcHJpbnRTb3VyY2VV
UkxBbmRMaW5lKGNhbGxGcmFtZS0+c291cmNlVVJMKCkucHJldHR5VVJMKCksIDApOworICAgIHBy
aW50TWVzc2FnZVNvdXJjZUFuZExldmVsUHJlZml4KEpTTWVzc2FnZVNvdXJjZSwgbGV2ZWwpOwog
Ci0gICAgcHJpbnRUb1N0YW5kYXJkT3V0KHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVS
TCwgbGluZU51bWJlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxGcmFtZS0+
YXJndW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGFyZ0FzU3RyaW5nOworICAg
ICAgICBpZiAoY2FsbEZyYW1lLT5hcmd1bWVudEF0KGkpLmdldFN0cmluZyhhcmdBc1N0cmluZykp
CisgICAgICAgICAgICBwcmludGYoIiAlcyIsIGFyZ0FzU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIH0KKyAgICBwcmludGYoIlxuIik7CiB9CiAKLXZvaWQgQ29uc29sZTo6ZGVidWcoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjpkZWJ1ZyhTY3Jp
cHRDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICAvLyBJbiBGaXJlYnVnLCBjb25zb2xlLmRl
YnVnIGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBjb25zb2xlLmxvZy4gU28gd2UnbGwgZG8gdGhl
IHNhbWUuCi0gICAgbG9nKGV4ZWMsIGFyZ3MpOworICAgIGxvZyhjYWxsRnJhbWUpOwogfQogCi12
b2lkIENvbnNvbGU6OmVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykK
K3ZvaWQgQ29uc29sZTo6ZXJyb3IoU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAg
aWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3Ry
aW5nIG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKLQotICAgIEtV
UkwgdXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0Q2FsbGVy
KGV4ZWMsIHVybCwgbGluZU51bWJlcik7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkt
PmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgdXJsLnByZXR0eVVSTCgp
KTsKLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUo
SlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgbGluZU51bWJl
ciwgdXJsLnN0cmluZygpKTsKLQotICAgIHByaW50VG9TdGFuZGFyZE91dChFcnJvck1lc3NhZ2VM
ZXZlbCwgZXhlYywgYXJncywgdXJsKTsKKyAgICBhZGRNZXNzYWdlKEVycm9yTWVzc2FnZUxldmVs
LCBjYWxsRnJhbWUpOwogfQogCi12b2lkIENvbnNvbGU6OmluZm8oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjppbmZvKFNjcmlwdENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewotICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJp
bmcoZXhlYyk7Ci0KLSAgICBLVVJMIHVybDsKLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwotICAg
IHJldHJpZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxpbmVOdW1iZXIpOwotCi0gICAgcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1i
ZXIsIHVybC5wcmV0dHlVUkwoKSk7Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5h
ZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVsLCBleGVj
LCBhcmdzLCBsaW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOwotCi0gICAgcHJpbnRUb1N0YW5kYXJk
T3V0KExvZ01lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgdXJsKTsKKyAgICBsb2coY2FsbEZyYW1l
KTsKIH0KIAotdm9pZCBDb25zb2xlOjpsb2coRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQordm9pZCBDb25zb2xlOjpsb2coU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
Ci0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBw
YWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKLQot
ICAgIEtVUkwgdXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0
Q2FsbGVyKGV4ZWMsIHVybCwgbGluZU51bWJlcik7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+Y2xp
ZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgdXJsLnByZXR0
eVVSTCgpKTsKLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0Nv
bnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIGxpbmVO
dW1iZXIsIHVybC5zdHJpbmcoKSk7Ci0KLSAgICBwcmludFRvU3RhbmRhcmRPdXQoTG9nTWVzc2Fn
ZUxldmVsLCBleGVjLCBhcmdzLCB1cmwpOworICAgIGFkZE1lc3NhZ2UoTG9nTWVzc2FnZUxldmVs
LCBjYWxsRnJhbWUpOwogfQogCi12b2lkIENvbnNvbGU6OmRpcihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6OmRpcihTY3JpcHRDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0Nv
bnNvbGUoSlNNZXNzYWdlU291cmNlLCBPYmplY3RNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIDAs
IFN0cmluZygpKTsKKyAgICBhZGRNZXNzYWdlKE9iamVjdE1lc3NhZ2VMZXZlbCwgY2FsbEZyYW1l
KTsKIH0KIAotdm9pZCBDb25zb2xlOjpkaXJ4bWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjpkaXJ4bWwoU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJh
bWUpCiB7Ci0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQ
YWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xl
KEpTTWVzc2FnZVNvdXJjZSwgTm9kZU1lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgMCwgU3RyaW5n
KCkpOworICAgIGFkZE1lc3NhZ2UoTm9kZU1lc3NhZ2VMZXZlbCwgY2FsbEZyYW1lKTsKIH0KIAot
dm9pZCBDb25zb2xlOjp0cmFjZShFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIENvbnNvbGU6OnRyYWNl
KFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lKQogewotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5w
YWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47CisgICAgYWRkTWVzc2FnZShU
cmFjZU1lc3NhZ2VMZXZlbCwgY2FsbEZyYW1lLCB0cnVlKTsKIAotICAgIGludCBzaWduZWRMaW5l
TnVtYmVyOwotICAgIGludHB0cl90IHNvdXJjZUlEOwotICAgIFVTdHJpbmcgdXJsU3RyaW5nOwot
ICAgIEpTVmFsdWUqIGZ1bmM7Ci0KLSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUxh
c3RDYWxsZXIoZXhlYywgc2lnbmVkTGluZU51bWJlciwgc291cmNlSUQsIHVybFN0cmluZywgZnVu
Yyk7CisgICAgaWYgKCFzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgQXJnTGlzdCBhcmdzOwotICAgIHdoaWxlICghZnVuYy0+aXNOdWxsKCkpIHsKLSAgICAg
ICAgYXJncy5hcHBlbmQoZnVuYyk7Ci0gICAgICAgIGZ1bmMgPSBleGVjLT5pbnRlcnByZXRlcigp
LT5yZXRyaWV2ZUNhbGxlcihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZnVuYykpOworICAgIHBy
aW50ZigiU3RhY2sgVHJhY2VcbiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxs
RnJhbWUtPmZyYW1lQ291bnQoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWUg
PSBTdHJpbmcoY2FsbEZyYW1lLT5mcmFtZUF0KGkpLmZ1bmN0aW9uTmFtZSgpKTsKKyAgICAgICAg
cHJpbnRmKCJcdCVzXG4iLCBmdW5jdGlvbk5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQotICAg
IAotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShK
U01lc3NhZ2VTb3VyY2UsIFRyYWNlTWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCAwLCBTdHJpbmco
KSk7CiB9CiAKLXZvaWQgQ29uc29sZTo6YXNzZXJ0Q29uZGl0aW9uKGJvb2wgY29uZGl0aW9uLCBF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6OmFzc2Vy
dENvbmRpdGlvbihib29sIGNvbmRpdGlvbiwgU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7
CiAgICAgaWYgKGNvbmRpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGFnZSogcGFnZSA9
IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEtV
UkwgdXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0Q2FsbGVy
KGV4ZWMsIHVybCwgbGluZU51bWJlcik7Ci0KICAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTEzNT4gSXQgd291bGQgYmUgbmljZSB0byBwcmVm
aXggYXNzZXJ0aW9uIGZhaWx1cmVzIHdpdGggYSBtZXNzYWdlIGxpa2UgIkFzc2VydGlvbiBmYWls
ZWQ6ICIuCi0gICAgLy8gRklYTUU6IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkxMzY+IFdlIHNob3VsZCBwcmludCBhIG1lc3NhZ2UgZXZlbiB3aGVuIGFyZ3MuaXNF
bXB0eSgpIGlzIHRydWUuCi0KLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1l
c3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgZXhlYywg
YXJncywgbGluZU51bWJlciwgdXJsLnN0cmluZygpKTsKLQotICAgIHByaW50VG9TdGFuZGFyZE91
dChFcnJvck1lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgdXJsKTsKKyAgICBhZGRNZXNzYWdlKEVy
cm9yTWVzc2FnZUxldmVsLCBjYWxsRnJhbWUsIHRydWUpOwogfQogCi12b2lkIENvbnNvbGU6OmNv
dW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6
Y291bnQoU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgUGFnZSogcGFnZSA9IHRo
aXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIEtVUkwg
dXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0Q2FsbGVyKGV4
ZWMsIHVybCwgbGluZU51bWJlcik7CisgICAgLy8gRm9sbG93IEZpcmVidWcncyBiZWhhdmlvciBv
ZiBjb3VudGluZyB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB0aXRsZSBpbgorICAgIC8vIHRoZSBz
YW1lIGJ1Y2tldCBhcyBubyBhcmd1bWVudAorICAgIFN0cmluZyB0aXRsZTsKKyAgICBnZXRGaXJz
dEFyZ3VtZW50QXNTdHJpbmcoY2FsbEZyYW1lLCB0aXRsZSk7CiAKLSAgICBVU3RyaW5nIHRpdGxl
OwotICAgIGlmIChhcmdzLnNpemUoKSA+PSAxKQotICAgICAgICB0aXRsZSA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdChleGVjLCAwKSk7Ci0KLSAg
ICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNvdW50KHRpdGxlLCBsaW5lTnVtYmVyLCB1
cmwuc3RyaW5nKCkpOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y291bnQodGl0
bGUsIGNhbGxGcmFtZS0+bGluZU51bWJlcigpLCBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpLnN0cmlu
ZygpKTsKIH0KIAotdm9pZCBDb25zb2xlOjpwcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKKyNpZiBVU0UoSlNDKQorCit2b2lkIENvbnNvbGU6OnByb2ZpbGUoY29u
c3QgSlNDOjpVU3RyaW5nJiB0aXRsZSwgU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAg
ICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGlmICh0aXRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
Ly8gRklYTUU6IGxvZyBhIGNvbnNvbGUgbWVzc2FnZSB3aGVuIHByb2ZpbGluZyBpcyBkaXNhYmxl
ZC4KICAgICBpZiAoIXBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+cHJvZmlsZXJFbmFibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVTdHJpbmcgdGl0bGUgPSBhcmdzLmF0KGV4ZWMs
IDApLT50b1N0cmluZyhleGVjKTsKLSAgICBQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3RhcnRQcm9m
aWxpbmcoZXhlYywgdGl0bGUpOworICAgIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0YXJ0
UHJvZmlsaW5nKGNhbGxGcmFtZS0+c3RhdGUoKSwgdGl0bGUpOwogfQogCi12b2lkIENvbnNvbGU6
OnByb2ZpbGVFbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9pZCBD
b25zb2xlOjpwcm9maWxlRW5kKGNvbnN0IEpTQzo6VVN0cmluZyYgdGl0bGUsIFNjcmlwdENhbGxG
cmFtZSogY2FsbEZyYW1lKQogewogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+cHJvZmlsZXJFbmFibGVkKCkpCisgICAgaWYgKHRpdGxlLmlzTnVsbCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBVU3RyaW5nIHRpdGxlOwotICAgIGlmIChhcmdzLnNpemUo
KSA+PSAxKQotICAgICAgICB0aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxs
Q2hlY2soZXhlYywgYXJncy5hdChleGVjLCAwKSk7CisgICAgaWYgKCFwYWdlLT5pbnNwZWN0b3JD
b250cm9sbGVyKCktPnByb2ZpbGVyRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8UHJvZmlsZT4gcHJvZmlsZSA9IFByb2ZpbGVyOjpwcm9maWxlcigpLT5zdG9wUHJvZmls
aW5nKGV4ZWMsIHRpdGxlKTsKKyAgICBSZWZQdHI8SlNDOjpQcm9maWxlPiBwcm9maWxlID0gSlND
OjpQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3RvcFByb2ZpbGluZyhjYWxsRnJhbWUtPnN0YXRlKCks
IHRpdGxlKTsKICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fcHJv
ZmlsZXMuYXBwZW5kKHByb2ZpbGUpOwogCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdl
KCkpIHsKLSAgICAgICAgS1VSTCB1cmw7Ci0gICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0g
ICAgICAgIHJldHJpZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxpbmVOdW1iZXIpOwotCi0gICAg
ICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkUHJvZmlsZShwcm9maWxlLCBsaW5l
TnVtYmVyLCB1cmwpOworICAgICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZFBy
b2ZpbGUocHJvZmlsZSwgY2FsbEZyYW1lLT5saW5lTnVtYmVyKCksIGNhbGxGcmFtZS0+c291cmNl
VVJMKCkpOwogICAgIH0KIH0KIAotdm9pZCBDb25zb2xlOjp0aW1lKGNvbnN0IFVTdHJpbmcmIHRp
dGxlKQotewotICAgIGlmICh0aXRsZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOworI2VuZGlm
CiAgICAgCit2b2lkIENvbnNvbGU6OnRpbWUoY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKICAgICBQ
YWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJu
OworCisgICAgLy8gRm9sbG93IEZpcmVidWcncyBiZWhhdmlvciBvZiByZXF1aXJpbmcgYSB0aXRs
ZSB0aGF0IGlzIG5vdCBudWxsIG9yCisgICAgLy8gdW5kZWZpbmVkIGZvciB0aW1pbmcgZnVuY3Rp
b25zCisgICAgaWYgKHRpdGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
cGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zdGFydFRpbWluZyh0aXRsZSk7CiB9CiAKLXZv
aWQgQ29uc29sZTo6dGltZUVuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit2b2lkIENvbnNvbGU6OnRpbWVFbmQoY29uc3QgU3RyaW5nJiB0aXRsZSwgU2NyaXB0Q2FsbEZy
YW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgVVN0cmluZyB0aXRsZTsKLSAgICBpZiAoYXJncy5zaXpl
KCkgPj0gMSkKLSAgICAgICAgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVs
bENoZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCkpOwotICAgIGlmICh0aXRsZS5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZvbGxvdyBGaXJlYnVnJ3MgYmVo
YXZpb3Igb2YgcmVxdWlyaW5nIGEgdGl0bGUgdGhhdCBpcyBub3QgbnVsbCBvcgorICAgIC8vIHVu
ZGVmaW5lZCBmb3IgdGltaW5nIGZ1bmN0aW9ucworICAgIGlmICh0aXRsZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgZG91YmxlIGVsYXBzZWQ7CiAgICAgaWYgKCFwYWdlLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCktPnN0b3BUaW1pbmcodGl0bGUsIGVsYXBzZWQpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZyh0aXRsZSkgKyBTdHJpbmc6OmZv
cm1hdCgiOiAlLjBmbXMiLCBlbGFwc2VkKTsKLQotICAgIEtVUkwgdXJsOwotICAgIHVuc2lnbmVk
IGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHVybCwgbGluZU51bWJl
cik7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSB0aXRsZSArIFN0cmluZzo6Zm9ybWF0KCI6ICUuMGZt
cyIsIGVsYXBzZWQpOwogCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRNZXNz
YWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBs
aW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIo
KS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VMZXZlbCwg
bWVzc2FnZSwgY2FsbEZyYW1lLT5saW5lTnVtYmVyKCksIGNhbGxGcmFtZS0+c291cmNlVVJMKCku
c3RyaW5nKCkpOwogfQogCi12b2lkIENvbnNvbGU6Omdyb3VwKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpncm91cChTY3JpcHRDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKIHsKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlm
ICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxl
cigpLT5zdGFydEdyb3VwKEpTTWVzc2FnZVNvdXJjZSwgZXhlYywgYXJndW1lbnRzLCAwLCBTdHJp
bmcoKSk7CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zdGFydEdyb3VwKEpTTWVz
c2FnZVNvdXJjZSwgY2FsbEZyYW1lKTsKIH0KIAogdm9pZCBDb25zb2xlOjpncm91cEVuZCgpCkBA
IC00MjAsMjUgKzMzNiw5IEBAIHZvaWQgQ29uc29sZTo6Z3JvdXBFbmQoKQogICAgIHBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+ZW5kR3JvdXAoSlNNZXNzYWdlU291cmNlLCAwLCBTdHJpbmco
KSk7CiB9CiAKLXZvaWQgQ29uc29sZTo6d2FybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6Ondhcm4oU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiB7Ci0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdl
KiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgU3RyaW5nIG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsK
LQotICAgIEtVUkwgdXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVM
YXN0Q2FsbGVyKGV4ZWMsIHVybCwgbGluZU51bWJlcik7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+
Y2xpZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgdXJsLnBy
ZXR0eVVSTCgpKTsKLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VU
b0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBXYXJuaW5nTWVzc2FnZUxldmVsLCBleGVjLCBhcmdz
LCBsaW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOwotCi0gICAgcHJpbnRUb1N0YW5kYXJkT3V0KFdh
cm5pbmdNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIHVybCk7CisgICAgYWRkTWVzc2FnZShXYXJu
aW5nTWVzc2FnZUxldmVsLCBjYWxsRnJhbWUpOwogfQogCiBzdGF0aWMgYm9vbCBwcmludEV4Y2Vw
dGlvbnMgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmggYi9XZWJD
b3JlL3BhZ2UvQ29uc29sZS5oCmluZGV4IGE2NDM3ZDQuLjlkMjEwNGYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGFnZS9Db25zb2xlLmgKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaApAQCAtMzAs
MjIgKzMwLDIyIEBACiAjZGVmaW5lIENvbnNvbGVfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpZiBVU0UoSlNDKQogI2luY2x1ZGUgPHByb2ZpbGVyL1Byb2ZpbGUuaD4KKyNlbmRp
ZgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3MgRXhlY1N0YXRlOwotICAgIGNsYXNzIEFy
Z0xpc3Q7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFVTRShKU0MpCiAgICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPEpTQzo6UHJvZmlsZT4gPiBQcm9maWxlc0FycmF5OworI2VuZGlm
CiAKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBQYWdlOwogICAgIGNsYXNzIFN0cmluZzsK
KyAgICBjbGFzcyBTY3JpcHRDYWxsRnJhbWU7CiAKICAgICBlbnVtIE1lc3NhZ2VTb3VyY2Ugewog
ICAgICAgICBIVE1MTWVzc2FnZVNvdXJjZSwKQEAgLTc1LDM3ICs3NSw0MiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3Nh
Z2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAKKyAgICAgICAgdm9pZCBkZWJ1ZyhTY3JpcHRDYWxsRnJh
bWUqKTsKKyAgICAgICAgdm9pZCBlcnJvcihTY3JpcHRDYWxsRnJhbWUqKTsKKyAgICAgICAgdm9p
ZCBpbmZvKFNjcmlwdENhbGxGcmFtZSopOworICAgICAgICB2b2lkIGxvZyhTY3JpcHRDYWxsRnJh
bWUqKTsKKyAgICAgICAgdm9pZCB3YXJuKFNjcmlwdENhbGxGcmFtZSopOworICAgICAgICB2b2lk
IGRpcihTY3JpcHRDYWxsRnJhbWUqKTsKKyAgICAgICAgdm9pZCBkaXJ4bWwoU2NyaXB0Q2FsbEZy
YW1lKik7CisgICAgICAgIHZvaWQgdHJhY2UoU2NyaXB0Q2FsbEZyYW1lKik7CisgICAgICAgIHZv
aWQgYXNzZXJ0Q29uZGl0aW9uKGJvb2wgY29uZGl0aW9uLCBTY3JpcHRDYWxsRnJhbWUqKTsKKyAg
ICAgICAgdm9pZCBjb3VudChTY3JpcHRDYWxsRnJhbWUqKTsKICNpZiBVU0UoSlNDKQotICAgICAg
ICB2b2lkIGRlYnVnKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAg
ICAgIHZvaWQgZXJyb3IoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAg
ICAgICAgdm9pZCBpbmZvKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0g
ICAgICAgIHZvaWQgbG9nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0g
ICAgICAgIHZvaWQgd2FybihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwot
ICAgICAgICB2b2lkIGRpcihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwot
ICAgICAgICB2b2lkIGRpcnhtbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYg
YXJndW1lbnRzKTsKLSAgICAgICAgdm9pZCB0cmFjZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAg
ICB2b2lkIGFzc2VydENvbmRpdGlvbihib29sIGNvbmRpdGlvbiwgSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAgICAgICAgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAgICAgICB2b2lkIHByb2ZpbGUoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAgICAgICAgdm9pZCBwcm9maWxlRW5kKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgdGltZShjb25z
dCBKU0M6OlVTdHJpbmcmIHRpdGxlKTsKLSAgICAgICAgdm9pZCB0aW1lRW5kKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgZ3JvdXAoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKKyAgICAgICAgdm9pZCBwcm9maWxlKGNvbnN0
IEpTQzo6VVN0cmluZyYsIFNjcmlwdENhbGxGcmFtZSopOworICAgICAgICB2b2lkIHByb2ZpbGVF
bmQoY29uc3QgSlNDOjpVU3RyaW5nJiwgU2NyaXB0Q2FsbEZyYW1lKik7CisjZW5kaWYKKyAgICAg
ICAgdm9pZCB0aW1lKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIHRpbWVFbmQoY29uc3Qg
U3RyaW5nJiwgU2NyaXB0Q2FsbEZyYW1lKik7CisgICAgICAgIHZvaWQgZ3JvdXAoU2NyaXB0Q2Fs
bEZyYW1lKik7CiAgICAgICAgIHZvaWQgZ3JvdXBFbmQoKTsKIAogICAgICAgICBzdGF0aWMgYm9v
bCBzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxk
UHJpbnRFeGNlcHRpb25zKGJvb2wpOwogCisjaWYgVVNFKEpTQykKICAgICAgICAgY29uc3QgUHJv
ZmlsZXNBcnJheSYgcHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVzOyB9CiAjZW5k
aWYKIAogICAgIHByaXZhdGU6CiAgICAgICAgIGlubGluZSBQYWdlKiBwYWdlKCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgYWRkTWVzc2FnZShNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxGcmFtZSosIGJv
b2wgYWNjZXB0Tm9Bcmd1bWVudHMgPSBmYWxzZSk7CiAKICAgICAgICAgQ29uc29sZShGcmFtZSop
OwogCiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworI2lmIFVTRShKU0MpCiAgICAgICAgIFByb2Zp
bGVzQXJyYXkgbV9wcm9maWxlczsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbCBiL1dlYkNvcmUvcGFn
ZS9Db25zb2xlLmlkbAppbmRleCA5MDc1OTYzLi5jMDYyNjI3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BhZ2UvQ29uc29sZS5pZGwKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCkBAIC0yOSwy
NCArMjksMjcgQEAKIG1vZHVsZSB3aW5kb3cgewogCiAgICAgaW50ZXJmYWNlIENvbnNvbGUgewot
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJyYXkgcHJvZmlsZXM7
ICAgICAgICAKKyNpZiAhZGVmaW5lZChWOF9CSU5ESU5HKQorICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJyYXkgcHJvZmlsZXM7CisjZW5kaWYKICAgICAKLSAgICAg
ICAgW0N1c3RvbV0gdm9pZCBkZWJ1ZygpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGVycm9yKCk7
Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgaW5mbygpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGxv
ZygpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHdhcm4oKTsKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCBkaXIoKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBkaXJ4bWwoKTsKLSAgICAgICAgW0N1c3Rv
bV0gdm9pZCB0cmFjZSgpOwotICAgICAgICBbQ3VzdG9tLCBJbXBsZW1lbnRhdGlvbkZ1bmN0aW9u
PWFzc2VydENvbmRpdGlvbl0gdm9pZCBhc3NlcnQoaW4gYm9vbGVhbiBjb25kaXRpb24pOwotICAg
ICAgICBbQ3VzdG9tXSB2b2lkIGNvdW50KCk7Ci0KLSAgICAgICAgW0N1c3RvbV0gdm9pZCBwcm9m
aWxlKGluIERPTVN0cmluZyB0aXRsZSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgcHJvZmlsZUVu
ZCgpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBkZWJ1ZygpOworICAg
ICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBlcnJvcigpOworICAgICAgICBbQ3Vz
dG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBpbmZvKCk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVu
dEhhbmRsaW5nXSB2b2lkIGxvZygpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10g
dm9pZCB3YXJuKCk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIGRpcigp
OworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBkaXJ4bWwoKTsKKyAgICAg
ICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgdHJhY2UoKTsKKyAgICAgICAgW0N1c3Rv
bUFyZ3VtZW50SGFuZGxpbmcsIEltcGxlbWVudGF0aW9uRnVuY3Rpb249YXNzZXJ0Q29uZGl0aW9u
XSB2b2lkIGFzc2VydChpbiBib29sZWFuIGNvbmRpdGlvbik7CisgICAgICAgIFtDdXN0b21Bcmd1
bWVudEhhbmRsaW5nXSB2b2lkIGNvdW50KCk7CisjaWYgIWRlZmluZWQoVjhfQklORElORykKKyAg
ICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZShpbiBbQ29udmVydFVu
ZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKKyAgICAgICAgW0N1
c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZUVuZChpbiBbQ29udmVydFVuZGVmaW5l
ZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKKyNlbmRpZgogICAgICAgICB2
b2lkIHRpbWUoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmlu
ZyB0aXRsZSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdGltZUVuZCgpOwotICAgICAgICBbQ3Vz
dG9tXSB2b2lkIGdyb3VwKCk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lk
IHRpbWVFbmQoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmlu
ZyB0aXRsZSk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIGdyb3VwKCk7
CiAgICAgICAgIHZvaWQgZ3JvdXBFbmQoKTsKICAgICB9OwogCg==
</data>
<flag name="review"
          id="12013"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25825</attachid>
            <date>2008-12-06 19:39:25 -0800</date>
            <delta_ts>2008-12-08 11:08:40 -0800</delta_ts>
            <desc>ScriptStackTrace and ScriptCallFrame v2</desc>
            <filename>stackTrace.patch</filename>
            <type>text/plain</type>
            <size>60754</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBhZjU4NmU4Li4xMTcwYWEwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEg
QEAKKzIwMDgtMTItMDYgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyBT
Y3JpcHRDYWxsRnJhbWUgcXVlcnkgbmFtZXMgb2YgZnVuY3Rpb25zIGluIHRoZSBjYWxsIHN0YWNr
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOiBhZGRlZCBJbnRlcm5hbEZ1bmN0aW9u
OjpuYW1lIGFzIGV4cG9ydGVkIHN5bWJvbAorCiAyMDA4LTEyLTA2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ2FtZXJvbiBad2FyaWNoLApkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwIGIvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDQzY2UyYTkuLjQ1NGJkZjMgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAorKysgYi9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAKQEAgLTk2LDYgKzk2LDcgQEAgX19aTjNKU0MxMElkZW50aWZpZXIy
NGNoZWNrU2FtZUlkZW50aWZpZXJUYWJsZUVQTlNfOUV4ZWNTdGF0ZUVQTlNfN1VTdHJpbmczUmVw
RQogX19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBOU185RXhlY1N0YXRlRVBLYwogX19aTjNKU0Mx
MElkZW50aWZpZXI1ZXF1YWxFUEtOU183VVN0cmluZzNSZXBFUEtjCiBfX1pOM0pTQzEwSlNGdW5j
dGlvbjRpbmZvRQorX19aTjNKU0MxNkludGVybmFsRnVuY3Rpb240bmFtZUVQTlNfMTJKU0dsb2Jh
bERhdGFFCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBl
RQogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNfOUVycm9yVHlwZUVQS2MK
IF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJvclR5cGVFUktOU183
VVN0cmluZ0UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYzIyMWRjZC4uNjhlZjY5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAwOC0xMi0wNiAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjYzMQorICAgICAgICBTdHJlYW1saW5lIENvbnNvbGUuY3BwLCBhYnN0
cmFjdCBvdXQgdGhlIHVzZSBvZiBKU0M6OkV4ZWNTdGF0ZSBhbmQKKyAgICAgICAgSlNDOjpBcmdM
aXN0IGJ5IGludHJvZHVjaW5nIFNjcmlwdENhbGxGcmFtZSBhbmQgU2NyaXB0U3RhY2tUcmFjZQor
ICAgICAgICBhYnN0cmFjdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIFNj
cmlwdENhbGxGcmFtZSBhbmQgU2NyaXB0U3RhY2tUcmFjZSB0byBidWlsZAorICAgICAgICAqIFdl
YkNvcmUucHJvOiAgQWRkIFNjcmlwdENhbGxGcmFtZSBhbmQgU2NyaXB0U3RhY2tUcmFjZSB0byBi
dWlsZAorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBBZGQgU2NyaXB0
Q2FsbEZyYW1lIGFuZAorICAgICAgICAgICAgU2NyaXB0U3RhY2tUcmFjZSB0byBwcm9qZWN0Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGQgU2NyaXB0Q2Fs
bEZyYW1lIGFuZAorICAgICAgICAgICAgU2NyaXB0U3RhY2tUcmFjZSB0byBwcm9qZWN0CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcDogUmVtb3ZlIGN1c3RvbSBiaW5k
aW5ncy4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6U2NyaXB0Q2FsbEZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6flNjcmlwdENhbGxGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6OmFyZ3VtZW50QXQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENhbGxGcmFtZTo6ZnVuY3Rpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENh
bGxGcmFtZTo6c291cmNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6
bGluZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6OmFyZ3VtZW50
Q291bnQpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0YWNrVHJhY2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0YWNrVHJhY2U6OlNjcmlwdFN0YWNrVHJhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RhY2tUcmFjZTo6flNjcmlwdFN0YWNrVHJhY2Up
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RhY2tUcmFjZTo6YXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0U3RhY2tUcmFjZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRT
dGFja1RyYWNlOjppbml0aWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdGFj
a1RyYWNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RhY2tUcmFjZTo6U2Ny
aXB0U3RhY2tUcmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdGFja1RyYWNlOjp+U2Ny
aXB0U3RhY2tUcmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdGFja1RyYWNlOjpzdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdGFja1RyYWNlOjphdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRTdGFja1RyYWNlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dFN0YWNrVHJhY2U6OmluaXRpYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0
cmluZy5oOiBBZGQgbWlzc2luZyBQbGF0Zm9ybVN0cmluZyBpbmNsdWRlLgorICAgICAgICAqIGJp
bmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcDogQWRkIGlzTnVsbCBhbmQgaXNVbmRlZmluZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6aXNOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdFZhbHVlOjppc1VuZGVmaW5lZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
VmFsdWUuaDogQWRkIGlzTnVsbCBhbmQgaXNVbmRlZmluZWQKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogQWRkIGhhbmRsaW5nIGZvcgorICAgICAgICAgICAg
Q3VzdG9tQXJndW1lbnRIYW5kbGluZyBhdHRyaWJ1dGUuCisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOiBSZWZhY3RvciB0byB1c2UgU2NyaXB0Q2FsbEZyYW1lIGFu
ZAorICAgICAgICAgICAgU2NyaXB0U3RhY2tUcmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnNv
bGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
b250cm9sbGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OnN0YXJ0R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6YWRkU2NyaXB0Q29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ29udHJvbGxlcjo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6c3RhcnRUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RvcFRpbWluZyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaDogUmVmYWN0b3IgdG8gdXNlIFNjcmlwdENhbGxGcmFtZSBhbmQKKyAgICAgICAgICAg
IFNjcmlwdFN0YWNrVHJhY2UuCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xl
LmpzOiBtb2RpZnkgdG8gdXNlIGFyZ3VtZW50IHZhbHVlIGl0c2VsZgorICAgICAgICAgICAgcmF0
aGVyIHRoYW4gZi5uYW1lIGZvciBzdGFjayB0cmFjZS4KKyAgICAgICAgKiBwYWdlL0NvbnNvbGUu
Y3BwOiBSZWZhY3RvciB0byB1c2UgU2NyaXB0Q2FsbEZyYW1lIGFuZAorICAgICAgICAgICAgU2Ny
aXB0U3RhY2tUcmFjZS4KKyAgICAgICAgKFdlYkNvcmU6OmdldEZpcnN0QXJndW1lbnRBc1N0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjphZGRNZXNzYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnNvbGU6OmRlYnVnKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OmVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OmluZm8pOgorICAgICAgICAoV2ViQ29yZTo6
Q29uc29sZTo6bG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OmRpcik6CisgICAgICAg
IChXZWJDb3JlOjpDb25zb2xlOjpkaXJ4bWwpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6
dHJhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6YXNzZXJ0Q29uZGl0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNv
bGU6OnByb2ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6cHJvZmlsZUVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjp0aW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNv
bGU6OnRpbWVFbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6Z3JvdXApOgorICAgICAg
ICAoV2ViQ29yZTo6Q29uc29sZTo6d2Fybik6CisgICAgICAgICogcGFnZS9Db25zb2xlLmg6Cisg
ICAgICAgICogcGFnZS9Db25zb2xlLmlkbDogUmVtb3ZlIEN1c3RvbSBhdHRyaWJ1dGVzLCBhZGQg
Q3VzdG9tQXJndW1lbnRIYW5kbGluZworICAgICAgICAgICAgYXR0cmlidXRlcywgdHdlYWsgYXJn
dW1lbnQgZGVmcy4KKwogMjAwOC0xMi0wNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA5ZTZiZWNh
Li5kMmM4N2M1IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KQEAgLTM0OSw5ICszNDksMTMgQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1BhdXNlZFRpbWVvdXRzLmggXAogCVdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hl
ZHVsZWRBY3Rpb24uaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3Bw
IFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRJbnN0YW5jZS5o
IFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YWNrVHJhY2UuY3BwIFwKKwlXZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFN0YWNrVHJhY2UuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRWYWx1ZS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaCBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oIFwKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGY1ZTU3YWEu
LjEwZjg3YjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLnBybwpAQCAtNDQyLDcgKzQ0Miw5IEBAIFNPVVJDRVMgKz0gXAogICAgIGJpbmRpbmdz
L2pzL0pTRE9NQmluZGluZy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5j
cHAgXAogICAgIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0aW9ucy5jcHAgXAorICAg
IGJpbmRpbmdzL2pzL1NjcmlwdENhbEZyYW1lLmNwcCBcCiAgICAgYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAgXAorICAgIGJpbmRpbmdzL2pzL1NjcmlwdFN0YWNrVHJhY2UuY3BwIFwK
ICAgICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1BhdXNl
ZFRpbWVvdXRzLmNwcCBcCiAgICAgYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCAyMWNlYzFhLi41YjMzZDExIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTEzOTYxLDYgKzEzOTYxLDE0
IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRDYWxsRnJhbWUuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0Zp
bGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlw
dENhbGxGcmFtZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdENvbnRyb2xsZXIuY3BwIg0KIAkJCQkJ
Pg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTM5ODksNiArMTM5OTcsMTQgQEAKIAkJCQkJPg0KIAkJCQk8
L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNj
cmlwdFN0YWNrVHJhY2UuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQor
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdFN0YWNrVHJhY2UuaCINCisJ
CQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxi
aW5kaW5nc1xqc1xTY3JpcHRWYWx1ZS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRlZTg5YzguLmYwZWI5
MjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zLDcg
KzMsNyBAQAogCWFyY2hpdmVWZXJzaW9uID0gMTsKIAljbGFzc2VzID0gewogCX07Ci0Jb2JqZWN0
VmVyc2lvbiA9IDQyOworCW9iamVjdFZlcnNpb24gPSA0NTsKIAlvYmplY3RzID0gewogCiAvKiBC
ZWdpbiBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwpAQCAtNTQyLDYgKzU0MiwxMCBAQAog
CQkzN0FDQ0Y2OTBEQTQxNEU3MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QUNDRTYyMERBMkFBOTYw
MDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwICovOyB9OwogCQkzN0Y4MThGRDBENjU3NjA2
MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29y
ZVVSTFJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMzdGODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZD
MEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CisJCTQxNkU3
NUJFMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRTdGFja1RyYWNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0U3RhY2tUcmFjZS5oICovOyB9OworCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0U3RhY2tUcmFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0U3RhY2tUcmFj
ZS5jcHAgKi87IH07CisJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJh
bWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3
NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUuaCAqLzsgfTsKKwkJNDE2RTc1
Q0MwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVDQTBFREY5MEM3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbEZyYW1lLmNwcCAqLzsgfTsKIAkJNDE2RjQ1RjAwRUQ3QjMxMTAwODIxNUI2
IC8qIFNjcmlwdFN0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDE2RjQ1RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovOyB9
OwogCQk0MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxQzc2MEIwMEVERTAzRDMwMEMx
NjU1RiAvKiBTY3JpcHRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQ0MTUyOTJFMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICov
OyB9OwpAQCAtNTM1Nyw2ICs1MzYxLDEwIEBACiAJCTM3QUNDRTYyMERBMkFBOTYwMDg5RTYwMiAv
KiBGb250RGVzY3JpcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRm9udERlc2NyaXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdG
ODE4RkIwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzdGODE4RkMwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxS
ZXNwb25zZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
cmVVUkxSZXNwb25zZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RTc1QkMw
RURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdFN0YWNrVHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2NyaXB0U3RhY2tUcmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0U3RhY2tUcmFjZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRTdGFja1RyYWNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RTc1QzkwRURGOTBDNzAwMzYwRTFE
IC8qIFNjcmlwdENhbGxGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JpcHRDYWxsRnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RTc1Q0Ew
RURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTZGNDVFRjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0cmluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0
U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U3RhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8q
IEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTMxMjAsNiArMTMxMjgsOCBAQAogCQkJCUJDQTM3ODE1MEQxNUM2NDYwMEI3OTNENiAvKiBQ
YXVzZWRUaW1lb3V0cy5oICovLAogCQkJCUJDQTM3OEJBMEQxNUY2NDIwMEI3OTNENiAvKiBTY2hl
ZHVsZWRBY3Rpb24uY3BwICovLAogCQkJCUJDQTM3OEJCMEQxNUY2NDIwMEI3OTNENiAvKiBTY2hl
ZHVsZWRBY3Rpb24uaCAqLywKKwkJCQk0MTZFNzVDOTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0
Q2FsbEZyYW1lLmggKi8sCisJCQkJNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENh
bGxGcmFtZS5jcHAgKi8sCiAJCQkJOTNCNzBENTMwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENv
bnRyb2xsZXIuY3BwICovLAogCQkJCTkzQjcwRDU0MDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRD
b250cm9sbGVyLmggKi8sCiAJCQkJQTgzRTFDNzIwRTQ5MDQyQjAwMTQwQjlDIC8qIFNjcmlwdENv
bnRyb2xsZXJNYWMubW0gKi8sCkBAIC0xMzEyNyw2ICsxMzEzNyw4IEBACiAJCQkJOTM0Q0MxMDkw
RURCMjIzOTAwQTY1OEYyIC8qIFNjcmlwdFNvdXJjZUNvZGUuaCAqLywKIAkJCQk0MUM3NjBCMDBF
REUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLywKIAkJCQk0MTZGNDVFRjBFRDdCMzEx
MDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi8sCisJCQkJNDE2RTc1QkMwRURGOEZENzAwMzYw
RTFEIC8qIFNjcmlwdFN0YWNrVHJhY2UuaCAqLywKKwkJCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBF
MUQgLyogU2NyaXB0U3RhY2tUcmFjZS5jcHAgKi8sCiAJCQkJOTM0Q0MwREYwRUQzOUQ2RjAwQTY1
OEYyIC8qIFNjcmlwdFZhbHVlLmNwcCAqLywKIAkJCQk5MzRDQzBFMDBFRDM5RDZGMDBBNjU4RjIg
LyogU2NyaXB0VmFsdWUuaCAqLywKIAkJCQk2NTQ4OEQ2QTBERDVBODNEMDA5RDgzQjIgLyogU3Ry
aW5nU291cmNlUHJvdmlkZXIuaCAqLywKQEAgLTE2NDYwLDYgKzE2NDcyLDggQEAKIAkJCQkwODFE
ODEzMjBFRTBFNzREMDBENzM2ODkgLyogV01MVGltZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNEMxNzg5QjBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTQxNkU3NUJFMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRTdGFj
a1RyYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MTZFNzVDQjBFREY5MEM3MDAzNjBFMUQgLyog
U2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE2NTAxLDcgKzE2NTE1LDcgQEAK
IAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJ
aXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4
OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJXZWJDb3JlIiAqLzsKLQkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7CisJ
CQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOwogCQkJaGFzU2Nhbm5lZEZvckVu
Y29kaW5ncyA9IDE7CiAJCQlrbm93blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTE4Mzk4
LDYgKzE4NDEyLDggQEAKIAkJCQkwODA0QkY2RTBFRTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4MUQ4MTMxMEVFMEU3NEQwMEQ3MzY4OSAvKiBX
TUxUaW1lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRDMTc4OUEwRUU2OTAzODAw
ODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0MTZFNzVC
RjBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0U3RhY2tUcmFjZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk0MTZFNzVDQzBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0
b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCmluZGV4IDYx
MzFjYjYuLmQwNWZmZTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xl
Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAK
QEAgLTQ4LDkxICs0OCw0IEBAIEpTVmFsdWUqIEpTQ29uc29sZTo6cHJvZmlsZXMoRXhlY1N0YXRl
KiBleGVjKSBjb25zdAogICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBsaXN0KTsKIH0K
IAotSlNWYWx1ZSogSlNDb25zb2xlOjpkZWJ1ZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCktPmRlYnVnKGV4ZWMsIGFyZ3VtZW50cyk7Ci0g
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6ZXJyb3Io
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgp
LT5lcnJvcihleGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQot
Ci1KU1ZhbHVlKiBKU0NvbnNvbGU6OmluZm8oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT5pbmZvKGV4ZWMsIGFyZ3VtZW50cyk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6bG9nKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+bG9n
KGV4ZWMsIGFyZ3VtZW50cyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFs
dWUqIEpTQ29uc29sZTo6d2FybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Vt
ZW50cykKLXsKLSAgICBpbXBsKCktPndhcm4oZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjpkaXIoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT5kaXIoZXhlYywg
YXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlND
b25zb2xlOjpkaXJ4bWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMp
Ci17Ci0gICAgaW1wbCgpLT5kaXJ4bWwoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjp0cmFjZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmKQotewotICAgIGltcGwoKS0+dHJhY2UoZXhlYyk7Ci0gICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6YXNzZXJ0Q29uZGl0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIEFy
Z0xpc3QgbWVzc2FnZVBhcmFtZXRlcnM7Ci0gICAgYXJndW1lbnRzLmdldFNsaWNlKDEsIG1lc3Nh
Z2VQYXJhbWV0ZXJzKTsKLQotICAgIGltcGwoKS0+YXNzZXJ0Q29uZGl0aW9uKGFyZ3VtZW50cy5h
dChleGVjLCAwKS0+dG9Cb29sZWFuKGV4ZWMpLCBleGVjLCBtZXNzYWdlUGFyYW1ldGVycyk7Ci0g
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6Y291bnQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgp
LT5jb3VudChleGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQot
Ci1KU1ZhbHVlKiBKU0NvbnNvbGU6OnRpbWVFbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT50aW1lRW5kKGV4ZWMsIGFyZ3VtZW50cyk7
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6cHJv
ZmlsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKLXsKLSAgICBp
bXBsKCktPnByb2ZpbGUoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjpwcm9maWxlRW5kKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+cHJvZmlsZUVuZChleGVj
LCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBK
U0NvbnNvbGU6Omdyb3VwKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRz
KQotewotICAgIGltcGwoKS0+Z3JvdXAoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRDYWxsRnJhbWUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjliMzFjMjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENh
bGxGcmFtZS5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiU2NyaXB0Q2FsbEZyYW1lLmgiCisKKyNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJh
bWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JpcHRDYWxsRnJhbWU6OlNjcmlwdENhbGxG
cmFtZShjb25zdCBKU0M6OlVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEpTQzo6VVN0cmluZyYgdXJsU3RyaW5nLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQorICAgIDogbV9m
dW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQorICAgICwgbV9zb3VyY2VVUkwodXJsU3RyaW5nKQor
ICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCit7CisgICAgZm9yKHVuc2lnbmVkIGkgPSBz
a2lwQXJndW1lbnRDb3VudDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXJndW1l
bnRzLmFwcGVuZChTY3JpcHRWYWx1ZShhcmdzLmF0KGV4ZWMsIGkpKSk7Cit9CisKK1NjcmlwdENh
bGxGcmFtZTo6flNjcmlwdENhbGxGcmFtZSgpCit7Cit9CisKK2NvbnN0IFNjcmlwdFZhbHVlICZT
Y3JpcHRDYWxsRnJhbWU6OmFyZ3VtZW50QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA+IGluZGV4KTsKKyAgICByZXR1cm4gbV9hcmd1bWVu
dHNbaW5kZXhdOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsRnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWFh
YTM2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJh
bWUuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0Q2FsbEZyYW1lX2gKKyNkZWZp
bmUgU2NyaXB0Q2FsbEZyYW1lX2gKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJydW50
aW1lL0FyZ0xpc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKKyNpbmNsdWRlICJTY3Jp
cHRWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7Cisg
ICAgY2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEludGVybmFsRnVuY3Rpb247Cit9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV0cmlldmluZyBs
aW5lIG51bWJlciBhbmQgc291cmNlIFVSTCBhbmQgc3RvcmluZyBoZXJlCisgICAgLy8gZm9yIGFs
bCBjYWxsIGZyYW1lcywgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4KKyAgICAvLyBTZWUgPGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1Nj4gYW5kCisgICAgLy8gPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE4MD4KKyAgICBjbGFzcyBT
Y3JpcHRDYWxsRnJhbWUgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjcmlwdENhbGxGcmFtZShj
b25zdCBKU0M6OlVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEpTQzo6VVN0cmluZyYgdXJsU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBKU0M6OkV4ZWNTdGF0ZSos
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKU0M6OkFyZ0xpc3QmLAorICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpOworICAgICAgICB+U2Ny
aXB0Q2FsbEZyYW1lKCk7CisKKyAgICAgICAgY29uc3QgU2NyaXB0U3RyaW5nICZmdW5jdGlvbk5h
bWUoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZTsgfQorICAgICAgICBjb25zdCBLVVJM
ICZzb3VyY2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTDsgfQorICAgICAgICB1bnNp
Z25lZCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9CisKKyAgICAg
ICAgLy8gYXJndW1lbnQgcmV0cmlldmFsIG1ldGhvZHMKKyAgICAgICAgY29uc3QgU2NyaXB0VmFs
dWUgJmFyZ3VtZW50QXQodW5zaWduZWQpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBTY3JpcHRTdHJpbmcgbV9mdW5jdGlvbk5hbWU7CisgICAgICAgIEtVUkwg
bV9zb3VyY2VVUkw7CisgICAgICAgIHVuc2lnbmVkIG1fbGluZU51bWJlcjsKKworICAgICAgICBW
ZWN0b3I8U2NyaXB0VmFsdWU+IG1fYXJndW1lbnRzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcmlwdENhbGxGcmFtZV9oCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YWNrVHJhY2UuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRTdGFja1RyYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kNzQzYjAzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRT
dGFja1RyYWNlLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAw
OCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiU2NyaXB0U3RhY2tUcmFjZS5oIgorCisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2Fs
bEZyYW1lLmg+CisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTR2xv
YmFsRGF0YS5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1NjcmlwdFN0YWNrVHJhY2U6OlNjcmlwdFN0YWNrVHJhY2UoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKKyAgICA6IG1faW5pdGlhbGl6ZWQoZmFsc2UpCisg
ICAgLCBtX2V4ZWMoZXhlYykKKyAgICAsIG1fY2FsbGVyKDApCit7CisgICAgaW50IHNpZ25lZExp
bmVOdW1iZXI7CisgICAgaW50cHRyX3Qgc291cmNlSUQ7CisgICAgVVN0cmluZyB1cmxTdHJpbmc7
CisgICAgSlNWYWx1ZSogZnVuYzsKKworICAgIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZl
TGFzdENhbGxlcihleGVjLCBzaWduZWRMaW5lTnVtYmVyLCBzb3VyY2VJRCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsU3RyaW5nLCBmdW5jKTsKKworICAg
IGlmIChmdW5jKSB7CisgICAgICAgIG1fY2FsbGVyID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGZ1bmMp
OworICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gIHNpZ25lZExpbmVOdW1iZXIgPj0gMCA/
IHNpZ25lZExpbmVOdW1iZXIgOiAwOworICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoCisgICAgICAg
ICAgICBTY3JpcHRDYWxsRnJhbWUobV9jYWxsZXItPm5hbWUoJm1fZXhlYy0+Z2xvYmFsRGF0YSgp
KSwgdXJsU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVOdW1iZXIsIGV4
ZWMsIGFyZ3MsIHNraXBBcmd1bWVudENvdW50KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
Y2FsbGVyIGlzIHVua25vd24sIGJ1dCB3ZSBzaG91bGQgc3RpbGwgYWRkIHRoZSBmcmFtZSwgYmVj
YXVzZQorICAgICAgICAvLyBzb21ldGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1cyBhcmd1bWVu
dHMKKyAgICAgICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShVU3RyaW5nKCksIFVT
dHJpbmcoKSwgMCwgZXhlYywgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBza2lwQXJndW1lbnRDb3VudCkpOworICAgIH0KK30KKworU2NyaXB0U3RhY2tUcmFj
ZTo6flNjcmlwdFN0YWNrVHJhY2UoKQoreworfQorCitjb25zdCBTY3JpcHRDYWxsRnJhbWUgJlNj
cmlwdFN0YWNrVHJhY2U6OmF0KHVuc2lnbmVkIGluZGV4KQoreworICAgIGluaXRpYWxpemUoKTsK
KyAgICBBU1NFUlQobV9mcmFtZXMuc2l6ZSgpID4gaW5kZXgpOworICAgIHJldHVybiBtX2ZyYW1l
c1tpbmRleF07Cit9CisKK3Vuc2lnbmVkIFNjcmlwdFN0YWNrVHJhY2U6OnNpemUoKQoreworICAg
IGluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gbV9mcmFtZXMuc2l6ZSgpOworfQorCit2b2lkIFNj
cmlwdFN0YWNrVHJhY2U6OmluaXRpYWxpemUoKQoreworICAgIGlmICghbV9jYWxsZXIgfHwgbV9p
bml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNWYWx1ZSogZnVuYyA9IG1fZXhl
Yy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXIobV9leGVjLCBtX2NhbGxlcik7CisgICAg
d2hpbGUoIWZ1bmMtPmlzTnVsbCgpKSB7CisgICAgICAgIEludGVybmFsRnVuY3Rpb24qIGludGVy
bmFsRnVuY3Rpb24gPSBhc0ludGVybmFsRnVuY3Rpb24oZnVuYyk7CisgICAgICAgIEFyZ0xpc3Qg
ZW1wdHlBcmdMaXN0OworICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoCisgICAgICAgICAgICBTY3Jp
cHRDYWxsRnJhbWUoCisgICAgICAgICAgICAgICAgaW50ZXJuYWxGdW5jdGlvbi0+bmFtZSgmbV9l
eGVjLT5nbG9iYWxEYXRhKCkpLCBVU3RyaW5nKCksIDAsIDAsCisgICAgICAgICAgICAgICAgZW1w
dHlBcmdMaXN0LCAwKSk7CisgICAgICAgIGZ1bmMgPSBtX2V4ZWMtPmludGVycHJldGVyKCktPnJl
dHJpZXZlQ2FsbGVyKG1fZXhlYywgaW50ZXJuYWxGdW5jdGlvbik7CisgICAgfQorICAgIG1faW5p
dGlhbGl6ZWQgPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0YWNrVHJhY2UuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0U3RhY2tUcmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmIyOTY0MjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dFN0YWNrVHJhY2UuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3RhY2tUcmFj
ZV9oCisjZGVmaW5lIFNjcmlwdFN0YWNrVHJhY2VfaAorCisjaW5jbHVkZSAiU2NyaXB0Q2FsbEZy
YW1lLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKKyNpbmNsdWRlICJTY3JpcHRTdHJpbmcu
aCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisgICAg
Y2xhc3MgRXhlY1N0YXRlOworICAgIGNsYXNzIEpTVmFsdWU7Cit9CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIFNjcmlwdFN0YWNrVHJhY2UgOiBwdWJsaWMgTm9uY29weWFibGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgU2NyaXB0U3RhY2tUcmFjZShKU0M6OkV4ZWNTdGF0ZSos
CisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSlNDOjpBcmdMaXN0JiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCA9IDApOworICAgICAg
ICB+U2NyaXB0U3RhY2tUcmFjZSgpOworCisgICAgICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhlYzsgfQorICAgICAgICAvLyBmcmFtZSByZXRyaWV2YWwgbWV0aG9k
cworICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUgJmF0KHVuc2lnbmVkKTsKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBpbml0aWFsaXpl
KCk7CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKworICAgICAgICBKU0M6OkV4ZWNTdGF0
ZSogbV9leGVjOworICAgICAgICBWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiBtX2ZyYW1lczsKKyAg
ICAgICAgSlNDOjpJbnRlcm5hbEZ1bmN0aW9uKiBtX2NhbGxlcjsKKyAgICB9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JpcHRTdGFja1RyYWNlX2gKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFN0cmluZy5oCmluZGV4IDY4Yjk4ZmYuLmE1ODJiZGYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRTdHJpbmcuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JpcHRTdHJpbmdf
aAogI2RlZmluZSBTY3JpcHRTdHJpbmdfaAogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
ICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmluZy5o
PgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCmluZGV4IDYyNmNkZjYuLmJiMmVlMWQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCkBAIC01MCw0ICs1MCwxOCBAQCBib29s
IFNjcmlwdFZhbHVlOjpnZXRTdHJpbmcoU3RyaW5nJiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2Jvb2wgU2NyaXB0VmFsdWU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3ZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fdmFs
dWUtPmlzTnVsbCgpOworfQorCitib29sIFNjcmlwdFZhbHVlOjppc1VuZGVmaW5lZCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3ZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIG1fdmFsdWUtPmlzVW5kZWZpbmVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaCBiL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAppbmRleCA4Y2NiYjY0Li41ZGZlNzZkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKIAogICAg
IEpTQzo6SlNWYWx1ZSoganNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0K
ICAgICBib29sIGdldFN0cmluZyhTdHJpbmcmIHJlc3VsdCkgY29uc3Q7CisgICAgYm9vbCBpc051
bGwoKSBjb25zdDsKKyAgICBib29sIGlzVW5kZWZpbmVkKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiBtX3ZhbHVlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggYjAzYWU5ZC4uMjk4NDljMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBAIC0xMzQ0
LDYgKzEzNDQsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAgICAgICAg
ICAgIG15ICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDA7CiAKKyAgICAgICAgICAgICAgICBpZiAo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Bcmd1bWVu
dEhhbmRsaW5nIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgU2NyaXB0U3RhY2tUcmFjZSBzdGFja1RyYWNlKGV4ZWMsIGFyZ3MsICRudW1QYXJhbWV0ZXJz
KTtcbiIpOworICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3JpcHRTdGFja1Ry
YWNlLmgifSA9IDE7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgZm9yZWFj
aCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEkaGFzT3B0aW9uYWxBcmd1bWVudHMgJiYgJHBhcmFtZXRlci0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiXG4gICAgaW50IGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpO1xuIik7
CkBAIC0xNDgyLDYgKzE0ODcsMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlv
bkNhbGwoKQogICAgIG15ICRwb2RUeXBlID0gc2hpZnQ7CiAgICAgbXkgJGltcGxDbGFzc05hbWUg
PSBzaGlmdDsKIAorICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgeworICAgICAgICAkZnVuY3Rpb25TdHJp
bmcgLj0gIiwgIiBpZiAkcGFyYW1JbmRleDsKKyAgICAgICAgKyskcGFyYW1JbmRleDsKKyAgICAg
ICAgJGZ1bmN0aW9uU3RyaW5nIC49ICImc3RhY2tUcmFjZSI7CisgICAgfQorCiAgICAgaWYgKEB7
JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgewogICAgICAgICAkZnVuY3Rpb25TdHJpbmcg
Lj0gIiwgIiBpZiAkcGFyYW1JbmRleDsKICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICJlYyI7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDg0YmFkYjEu
LjBkYTcyNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBA
IC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2Ny
aXB0U3RhY2tUcmFjZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgIlN5
c3RlbVRpbWUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKQEAgLTE3MCwxOCArMTcxLDI5
IEBAIHN0cnVjdCBDb25zb2xlTWVzc2FnZSB7CiAgICAgewogICAgIH0KIAotICAgIENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZUxldmVsIGwsIEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncywgdW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwgdW5zaWdu
ZWQgZykKKyAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VMZXZlbCBs
LCBTY3JpcHRTdGFja1RyYWNlKiBzdGFja1RyYWNlLCB1bnNpZ25lZCBnLCBib29sIHN0b3JlVHJh
Y2UgPSBmYWxzZSkKICAgICAgICAgOiBzb3VyY2UocykKICAgICAgICAgLCBsZXZlbChsKQotICAg
ICAgICAsIHdyYXBwZWRBcmd1bWVudHMoYXJncy5zaXplKCkpCi0gICAgICAgICwgbGluZShsaSkK
LSAgICAgICAgLCB1cmwodSkKKyAgICAgICAgLCB3cmFwcGVkQXJndW1lbnRzKHN0YWNrVHJhY2Ut
PmF0KDApLmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgLCBmcmFtZXMoc3RvcmVUcmFjZSA/IHN0
YWNrVHJhY2UtPnNpemUoKSA6IDApCiAgICAgICAgICwgZ3JvdXBMZXZlbChnKQogICAgICAgICAs
IHJlcGVhdENvdW50KDEpCiAgICAgeworICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxh
c3RDYWxsZXIgPSBzdGFja1RyYWNlLT5hdCgwKTsKKyAgICAgICAgbGluZSA9IGxhc3RDYWxsZXIu
bGluZU51bWJlcigpOworICAgICAgICB1cmwgPSBsYXN0Q2FsbGVyLnNvdXJjZVVSTCgpLnN0cmlu
ZygpOworCisgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93LCBqdXN0IHN0b3JlIGZ1bmN0aW9uIG5h
bWVzIGFzIHN0cmluZ3MuCisgICAgICAgIC8vIEFzIFNjcmlwdFN0YWNrRnJhbWUgZ3Jvd3MgbW9y
ZSBtZW1iZXJzLCByZWZhY3RvciB0byBzdG9yZSBsaW5lIG51bWJlcgorICAgICAgICAvLyBhbmQg
c291cmNlIFVSTCBpbmZvcm1hdGlvbi4KKyAgICAgICAgaWYgKHN0b3JlVHJhY2UpCisgICAgICAg
ICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFja1RyYWNlLT5zaXplKCk7ICsraSkKKyAg
ICAgICAgICAgICAgICBmcmFtZXNbaV0gPSBzdGFja1RyYWNlLT5hdChpKS5mdW5jdGlvbk5hbWUo
KTsKKwogICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgd3JhcHBlZEFyZ3VtZW50
c1tpXSA9IEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChleGVjLCBhcmdzLmF0KGV4ZWMs
IGkpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGFzdENhbGxlci5hcmd1
bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgICAgIHdyYXBwZWRBcmd1bWVudHNbaV0gPSBKU0lu
c3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoc3RhY2tUcmFjZS0+c3RhdGUoKSwgbGFzdENhbGxl
ci5hcmd1bWVudEF0KGkpLmpzVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNFcXVh
bChFeGVjU3RhdGUqIGV4ZWMsIENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0CkBAIC0yMDgsNiAr
MjIwLDcgQEAgc3RydWN0IENvbnNvbGVNZXNzYWdlIHsKICAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7
CiAgICAgU3RyaW5nIG1lc3NhZ2U7CiAgICAgVmVjdG9yPFByb3RlY3RlZFB0cjxKU1ZhbHVlPiA+
IHdyYXBwZWRBcmd1bWVudHM7CisgICAgVmVjdG9yPFVTdHJpbmc+IGZyYW1lczsKICAgICB1bnNp
Z25lZCBsaW5lOwogICAgIFN0cmluZyB1cmw7CiAgICAgdW5zaWduZWQgZ3JvdXBMZXZlbDsKQEAg
LTEyOTksMTIgKzEzMTIsMTIgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRXaW5kb3dW
aXNpYmxlKGJvb2wgdmlzaWJsZSwgYm9vbCBhdHRhY2hlZCkKICAgICBtX3Nob3dBZnRlclZpc2li
bGUgPSBDdXJyZW50UGFuZWw7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkTWVz
c2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cywgdW5zaWduZWQgbGluZU51
bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6
OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBs
ZXZlbCwgU2NyaXB0U3RhY2tUcmFjZSogc3RhY2tUcmFjZSkKIHsKICAgICBpZiAoIWVuYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYWRkQ29uc29sZU1lc3NhZ2UoZXhlYywgbmV3IENv
bnNvbGVNZXNzYWdlKHNvdXJjZSwgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cywgbGluZU51bWJlciwg
c291cmNlVVJMLCBtX2dyb3VwTGV2ZWwpKTsKKyAgICBhZGRDb25zb2xlTWVzc2FnZShzdGFja1Ry
YWNlLT5zdGF0ZSgpLCBuZXcgQ29uc29sZU1lc3NhZ2Uoc291cmNlLCBsZXZlbCwgc3RhY2tUcmFj
ZSwgbV9ncm91cExldmVsLCBsZXZlbCA9PSBUcmFjZU1lc3NhZ2VMZXZlbCkpOwogfQogCiB2b2lk
IEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSBz
b3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQpAQCAtMTM1MCwxMSArMTM2Mywx
MSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlz
UHJvZmlsaW5nKQogICAgIGNhbGxGdW5jdGlvbihtX3NjcmlwdENvbnRleHQsIG1fc2NyaXB0T2Jq
ZWN0LCAic2V0UmVjb3JkaW5nUHJvZmlsZSIsIDEsICZpc1Byb3ZpbmdWYWx1ZSwgZXhjZXB0aW9u
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFydEdyb3VwKE1lc3NhZ2VTb3Vy
Y2Ugc291cmNlLCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cywgdW5z
aWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0YXJ0R3JvdXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIFNjcmlwdFN0YWNr
VHJhY2UqIHN0YWNrVHJhY2UpCiB7ICAgIAogICAgICsrbV9ncm91cExldmVsOwogCi0gICAgYWRk
Q29uc29sZU1lc3NhZ2UoZXhlYywgbmV3IENvbnNvbGVNZXNzYWdlKHNvdXJjZSwgU3RhcnRHcm91
cE1lc3NhZ2VMZXZlbCwgZXhlYywgYXJndW1lbnRzLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwsIG1f
Z3JvdXBMZXZlbCkpOworICAgIGFkZENvbnNvbGVNZXNzYWdlKHN0YWNrVHJhY2UtPnN0YXRlKCks
IG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIFN0YXJ0R3JvdXBNZXNzYWdlTGV2ZWwsIHN0YWNr
VHJhY2UsIG1fZ3JvdXBMZXZlbCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVu
ZEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCkKQEAgLTIxODUsNyArMjE5OCwxMiBAQCB2b2lkIEluc3BlY3RvckNv
bnRyb2xsZXI6OmFkZFNjcmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0IENvbnNvbGVNZXNzYWdlKiBt
ZXNzYWdlKQogICAgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gZ3JvdXBMZXZlbFZhbHVl
OwogICAgIGFyZ3VtZW50c1thcmd1bWVudENvdW50KytdID0gcmVwZWF0Q291bnRWYWx1ZTsKIAot
ICAgIGlmICghbWVzc2FnZS0+d3JhcHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKKyAgICBpZiAo
IW1lc3NhZ2UtPmZyYW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgcmVtYWluaW5n
U3BhY2VJbkFyZ3VtZW50cyA9IG1heGltdW1NZXNzYWdlQXJndW1lbnRzIC0gYXJndW1lbnRDb3Vu
dDsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzVG9BZGQgPSBtaW4ocmVtYWluaW5nU3BhY2VJ
bkFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1lc3NhZ2UtPmZyYW1lcy5zaXplKCkp
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50c1RvQWRkOyArK2kp
CisgICAgICAgICAgICBhcmd1bWVudHNbYXJndW1lbnRDb3VudCsrXSA9IEpTVmFsdWVNYWtlU3Ry
aW5nKG1fc2NyaXB0Q29udGV4dCwganNTdHJpbmdSZWYobWVzc2FnZS0+ZnJhbWVzW2ldKS5nZXQo
KSk7CisgICAgfSBlbHNlIGlmICghbWVzc2FnZS0+d3JhcHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkp
IHsKICAgICAgICAgdW5zaWduZWQgcmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50cyA9IG1heGltdW1N
ZXNzYWdlQXJndW1lbnRzIC0gYXJndW1lbnRDb3VudDsKICAgICAgICAgdW5zaWduZWQgYXJndW1l
bnRzVG9BZGQgPSBtaW4ocmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1lc3NhZ2UtPndyYXBwZWRBcmd1bWVudHMuc2l6ZSgpKSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHNUb0FkZDsgKytpKQpAQCAtMjc4Niw5ICsyODA0
LDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgZHJhd0hpZ2hsaWdodEZvckJveGVzKGNvbnRl
eHQsIGxpbmVCb3hRdWFkcywgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3Jk
ZXJRdWFkLCBhYnNNYXJnaW5RdWFkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpj
b3VudChjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y291bnQoY29uc3QgU3Ry
aW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkK
IHsKLSAgICBTdHJpbmcgaWRlbnRpZmllciA9IFN0cmluZyh0aXRsZSkgKyBTdHJpbmc6OmZvcm1h
dCgiQCVzOiVkIiwgc291cmNlSUQudXRmOCgpLmRhdGEoKSwgbGluZU51bWJlcik7CisgICAgU3Ry
aW5nIGlkZW50aWZpZXIgPSB0aXRsZSArIFN0cmluZzo6Zm9ybWF0KCJAJXM6JWQiLCBzb3VyY2VJ
RC51dGY4KCkuZGF0YSgpLCBsaW5lTnVtYmVyKTsKICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWdu
ZWQ+OjppdGVyYXRvciBpdCA9IG1fY291bnRzLmZpbmQoaWRlbnRpZmllcik7CiAgICAgaW50IGNv
dW50OwogICAgIGlmIChpdCA9PSBtX2NvdW50cy5lbmQoKSkKQEAgLTI4MDAsMTYgKzI4MTgsMTYg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb3VudChjb25zdCBVU3RyaW5nJiB0aXRsZSwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QKIAogICAgIG1fY291bnRzLmFkZChpZGVudGlmaWVy
LCBjb3VudCk7CiAKLSAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCIlczogJWQi
LCB0aXRsZS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgY291bnQpOworICAgIFN0cmluZyBtZXNzYWdl
ID0gU3RyaW5nOjpmb3JtYXQoIiVzOiAlZCIsIHRpdGxlLnV0ZjgoKS5kYXRhKCksIGNvdW50KTsK
ICAgICBhZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVs
LCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29u
dHJvbGxlcjo6c3RhcnRUaW1pbmcoY29uc3QgVVN0cmluZyYgdGl0bGUpCit2b2lkIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0YXJ0VGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgbV90
aW1lcy5hZGQodGl0bGUsIGN1cnJlbnRUaW1lKCkgKiAxMDAwKTsKIH0KIAotYm9vbCBJbnNwZWN0
b3JDb250cm9sbGVyOjpzdG9wVGltaW5nKGNvbnN0IFVTdHJpbmcmIHRpdGxlLCBkb3VibGUmIGVs
YXBzZWQpCitib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5n
JiB0aXRsZSwgZG91YmxlJiBlbGFwc2VkKQogewogICAgIEhhc2hNYXA8U3RyaW5nLCBkb3VibGU+
OjppdGVyYXRvciBpdCA9IG1fdGltZXMuZmluZCh0aXRsZSk7CiAgICAgaWYgKGl0ID09IG1fdGlt
ZXMuZW5kKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZjRk
MjQ3Mi4uZDQ1ZjZjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApA
QCAtNjEsNiArNjEsNyBAQCBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlc291cmNl
UmVzcG9uc2U7CiBjbGFzcyBSZXNvdXJjZUVycm9yOworY2xhc3MgU2NyaXB0U3RhY2tUcmFjZTsK
IGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAogc3RydWN0IENvbnNvbGVNZXNzYWdlOwpAQCAtMTYwLDcg
KzE2MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHdpbmRvd1Zpc2libGUoKTsKICAgICB2b2lkIHNl
dFdpbmRvd1Zpc2libGUoYm9vbCB2aXNpYmxlID0gdHJ1ZSwgYm9vbCBhdHRhY2hlZCA9IGZhbHNl
KTsKIAotICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdl
TGV2ZWwsIEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmd1bWVudHMsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOworICAgIHZvaWQgYWRk
TWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIFNjcmlwdFN0YWNr
VHJhY2UqKTsKICAgICB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVz
c2FnZUxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlSUQpOwogICAgIHZvaWQgY2xlYXJDb25zb2xlTWVzc2FnZXMoKTsK
ICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKQEAgLTIzNywxMiArMjM4LDEyIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgZHJhd05vZGVIaWdobGlnaHQoR3JhcGhpY3NDb250ZXh0Jikg
Y29uc3Q7CiAgICAgCi0gICAgdm9pZCBjb3VudChjb25zdCBKU0M6OlVTdHJpbmcmIHRpdGxlLCB1
bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKKyAgICB2b2lkIGNv
dW50KGNvbnN0IFN0cmluZyYgdGl0bGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpOwogCi0gICAgdm9pZCBzdGFydFRpbWluZyhjb25zdCBKU0M6OlVTdHJpbmcm
IHRpdGxlKTsKLSAgICBib29sIHN0b3BUaW1pbmcoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSwg
ZG91YmxlJiBlbGFwc2VkKTsKKyAgICB2b2lkIHN0YXJ0VGltaW5nKGNvbnN0IFN0cmluZyYgdGl0
bGUpOworICAgIGJvb2wgc3RvcFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlLCBkb3VibGUmIGVs
YXBzZWQpOwogCi0gICAgdm9pZCBzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVk
IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKKyAgICB2b2lkIHN0YXJ0R3Jv
dXAoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIFNjcmlwdFN0YWNrVHJhY2UqIGNhbGxGcmFtZSk7CiAg
ICAgdm9pZCBlbmRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0NvbnNvbGUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQ29uc29sZS5qcwppbmRleCBhNDA1ZGIzLi4yMzMzZjQyIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5qcworKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQ29uc29sZS5qcwpAQCAtNjA0LDcgKzYwNCw3IEBAIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZSA9IGZ1bmN0aW9uKHNvdXJjZSwgbGV2ZWwsIGxpbmUsIHVybCwgZ3Jv
dXBMZXZlbCwgcmVwCiAgICAgICAgICAgICBzcGFuLmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtZm9y
bWF0dGVkLXRyYWNlIik7CiAgICAgICAgICAgICB2YXIgc3RhY2sgPSBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMsIDYpOwogICAgICAgICAgICAgdmFyIGZ1bmNOYW1lcyA9IHN0
YWNrLm1hcChmdW5jdGlvbihmKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGYubmFtZSB8fCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGYgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0
aW9uKSIpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKGZ1bmNOYW1lcy5qb2luKCJcbiIpKSk7CiAgICAgICAgICAg
ICB0aGlzLmZvcm1hdHRlZE1lc3NhZ2UgPSBzcGFuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0NvbnNvbGUuY3BwIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCmluZGV4IGJmZTQ5YTMuLmQy
N2EyYWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmNwcAorKysgYi9XZWJDb3Jl
L3BhZ2UvQ29uc29sZS5jcHAKQEAgLTM1LDE5ICszNSwxNSBAQAogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1
ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRl
cnByZXRlci5oPgorI2lmIFVTRShKU0MpCiAjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4K
KyNlbmRpZgorI2luY2x1ZGUgIlNjcmlwdFN0YWNrVHJhY2UuaCIKICNpbmNsdWRlIDxzdGRpby5o
PgogCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENvbnNv
bGU6OkNvbnNvbGUoRnJhbWUqIGZyYW1lKQpAQCAtNzAsNiArNjYsMTggQEAgc3RhdGljIHZvaWQg
cHJpbnRTb3VyY2VVUkxBbmRMaW5lKGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBs
aW5lTnVtYmVyKQogICAgIH0KIH0KIAorc3RhdGljIGJvb2wgZ2V0Rmlyc3RBcmd1bWVudEFzU3Ry
aW5nKGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgY2FsbEZyYW1lLCBTdHJpbmcmIHJlc3VsdCwgYm9v
bCBjaGVja0Zvck51bGxPclVuZGVmaW5lZCA9IGZhbHNlKQoreworICAgIGlmICghY2FsbEZyYW1l
LmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU2Ny
aXB0VmFsdWUmIHZhbHVlID0gY2FsbEZyYW1lLmFyZ3VtZW50QXQoMCk7CisgICAgaWYgKGNoZWNr
Rm9yTnVsbE9yVW5kZWZpbmVkICYmICh2YWx1ZS5pc051bGwoKSB8fCB2YWx1ZS5pc1VuZGVmaW5l
ZCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHZhbHVlLmdldFN0cmlu
ZyhyZXN1bHQpOworfQorCiBzdGF0aWMgdm9pZCBwcmludE1lc3NhZ2VTb3VyY2VBbmRMZXZlbFBy
ZWZpeChNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsKQogewogICAgIGNv
bnN0IGNoYXIqIHNvdXJjZVN0cmluZzsKQEAgLTExOSw4ICsxMjcsMTcgQEAgc3RhdGljIHZvaWQg
cHJpbnRNZXNzYWdlU291cmNlQW5kTGV2ZWxQcmVmaXgoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1l
c3NhZ2VMZXZlbAogICAgIHByaW50ZigiJXMgJXM6Iiwgc291cmNlU3RyaW5nLCBsZXZlbFN0cmlu
Zyk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50VG9TdGFuZGFyZE91dChNZXNzYWdlU291cmNlIHNv
dXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyKQordm9pZCBDb25zb2xlOjphZGRN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpCiB7CisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChzb3VyY2UgPT0gSlNNZXNzYWdlU291cmNlIHx8IHNv
dXJjZSA9PSBXTUxNZXNzYWdlU291cmNlKQorICAgICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlVVJMKTsK
KworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShz
b3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworCiAgICAgaWYg
KCFDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMzAsMjg4ICsxNDcsMTkxIEBAIHN0YXRpYyB2b2lkIHByaW50VG9TdGFuZGFyZE91dChNZXNz
YWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTCiAgICAgcHJpbnRm
KCIgJXNcbiIsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByaW50
VG9TdGFuZGFyZE91dChNZXNzYWdlTGV2ZWwgbGV2ZWwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncywgY29uc3QgS1VSTCYgdXJsKQotewotICAgIGlmICghQ29uc29sZTo6c2hv
dWxkUHJpbnRFeGNlcHRpb25zKCkpCit2b2lkIENvbnNvbGU6OmFkZE1lc3NhZ2UoTWVzc2FnZUxl
dmVsIGxldmVsLCBTY3JpcHRTdGFja1RyYWNlKiBzdGFja1RyYWNlLCBib29sIGFjY2VwdE5vQXJn
dW1lbnRzKSB7CisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIHByaW50U291cmNlVVJMQW5kTGluZSh1cmwucHJldHR5
VVJMKCksIDApOwotICAgIHByaW50TWVzc2FnZVNvdXJjZUFuZExldmVsUHJlZml4KEpTTWVzc2Fn
ZVNvdXJjZSwgbGV2ZWwpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIFVTdHJpbmcgYXJnQXNTdHJpbmcgPSBhcmdzLmF0KGV4ZWMsIGkp
LT50b1N0cmluZyhleGVjKTsKLSAgICAgICAgcHJpbnRmKCIgJXMiLCBhcmdBc1N0cmluZy5VVEY4
U3RyaW5nKCkuY19zdHIoKSk7Ci0gICAgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotfQorICAgIGNv
bnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENhbGxlciA9IHN0YWNrVHJhY2UtPmF0KDApOwogCi1z
dGF0aWMgaW5saW5lIHZvaWQgcmV0cmlldmVMYXN0Q2FsbGVyKEV4ZWNTdGF0ZSogZXhlYywgS1VS
TCYgdXJsLCB1bnNpZ25lZCYgbGluZU51bWJlcikKLXsKLSAgICBpbnQgc2lnbmVkTGluZU51bWJl
cjsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRDsKLSAgICBVU3RyaW5nIHVybFN0cmluZzsKLSAgICBK
U1ZhbHVlKiBmdW5jdGlvbjsKKyAgICBpZiAoIWFjY2VwdE5vQXJndW1lbnRzICYmICFsYXN0Q2Fs
bGVyLmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZXhlYy0+aW50ZXJw
cmV0ZXIoKS0+cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNvdXJj
ZUlELCB1cmxTdHJpbmcsIGZ1bmN0aW9uKTsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpZiAo
Z2V0Rmlyc3RBcmd1bWVudEFzU3RyaW5nKGxhc3RDYWxsZXIsIG1lc3NhZ2UpKQorICAgICAgICBw
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGFz
dENhbGxlci5saW5lTnVtYmVyKCksIGxhc3RDYWxsZXIuc291cmNlVVJMKCkucHJldHR5VVJMKCkp
OwogCi0gICAgdXJsID0gS1VSTCh1cmxTdHJpbmcpOwotICAgIGxpbmVOdW1iZXIgPSAoc2lnbmVk
TGluZU51bWJlciA+PSAwID8gc2lnbmVkTGluZU51bWJlciA6IDApOwotfQorICAgIHBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2Us
IGxldmVsLCBzdGFja1RyYWNlKTsKIAotdm9pZCBDb25zb2xlOjphZGRNZXNzYWdlKE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCi17Ci0gICAgUGFn
ZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCisgICAgaWYgKCFDb25zb2xl
OjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHNv
dXJjZSA9PSBKU01lc3NhZ2VTb3VyY2UgfHwgc291cmNlID09IFdNTE1lc3NhZ2VTb3VyY2UpCi0g
ICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNz
YWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwotCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVO
dW1iZXIsIHNvdXJjZVVSTCk7CisgICAgcHJpbnRTb3VyY2VVUkxBbmRMaW5lKGxhc3RDYWxsZXIu
c291cmNlVVJMKCkucHJldHR5VVJMKCksIDApOworICAgIHByaW50TWVzc2FnZVNvdXJjZUFuZExl
dmVsUHJlZml4KEpTTWVzc2FnZVNvdXJjZSwgbGV2ZWwpOwogCi0gICAgcHJpbnRUb1N0YW5kYXJk
T3V0KHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwgbGluZU51bWJlcik7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RDYWxsZXIuYXJndW1lbnRDb3VudCgpOyArK2kp
IHsKKyAgICAgICAgU3RyaW5nIGFyZ0FzU3RyaW5nOworICAgICAgICBpZiAobGFzdENhbGxlci5h
cmd1bWVudEF0KGkpLmdldFN0cmluZyhhcmdBc1N0cmluZykpCisgICAgICAgICAgICBwcmludGYo
IiAlcyIsIGFyZ0FzU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKyAgICBwcmludGYoIlxu
Iik7CiB9CiAKLXZvaWQgQ29uc29sZTo6ZGVidWcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjpkZWJ1ZyhTY3JpcHRTdGFja1RyYWNlKiBzdGFja1Ry
YWNlKQogewogICAgIC8vIEluIEZpcmVidWcsIGNvbnNvbGUuZGVidWcgaGFzIHRoZSBzYW1lIGJl
aGF2aW9yIGFzIGNvbnNvbGUubG9nLiBTbyB3ZSdsbCBkbyB0aGUgc2FtZS4KLSAgICBsb2coZXhl
YywgYXJncyk7CisgICAgbG9nKHN0YWNrVHJhY2UpOwogfQogCi12b2lkIENvbnNvbGU6OmVycm9y
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6ZXJy
b3IoU2NyaXB0U3RhY2tUcmFjZSogc3RhY2tUcmFjZSkKIHsKLSAgICBpZiAoYXJncy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0g
ICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbWVzc2FnZSA9IGFy
Z3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwotCi0gICAgS1VSTCB1cmw7Ci0gICAgdW5z
aWduZWQgbGluZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgdXJsLCBsaW5l
TnVtYmVyKTsKLQotICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWRkTWVzc2FnZVRvQ29u
c29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCB1cmwucHJldHR5VVJMKCkpOwotICAgIHBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2Us
IEVycm9yTWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCBsaW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkp
OwotCi0gICAgcHJpbnRUb1N0YW5kYXJkT3V0KEVycm9yTWVzc2FnZUxldmVsLCBleGVjLCBhcmdz
LCB1cmwpOworICAgIGFkZE1lc3NhZ2UoRXJyb3JNZXNzYWdlTGV2ZWwsIHN0YWNrVHJhY2UpOwog
fQogCi12b2lkIENvbnNvbGU6OmluZm8oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQordm9pZCBDb25zb2xlOjppbmZvKFNjcmlwdFN0YWNrVHJhY2UqIHN0YWNrVHJhY2UpCiB7
Ci0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBw
YWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKLQot
ICAgIEtVUkwgdXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0
Q2FsbGVyKGV4ZWMsIHVybCwgbGluZU51bWJlcik7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+Y2xp
ZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgdXJsLnByZXR0
eVVSTCgpKTsKLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0Nv
bnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIGxpbmVO
dW1iZXIsIHVybC5zdHJpbmcoKSk7Ci0KLSAgICBwcmludFRvU3RhbmRhcmRPdXQoTG9nTWVzc2Fn
ZUxldmVsLCBleGVjLCBhcmdzLCB1cmwpOworICAgIGxvZyhzdGFja1RyYWNlKTsKIH0KIAotdm9p
ZCBDb25zb2xlOjpsb2coRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9p
ZCBDb25zb2xlOjpsb2coU2NyaXB0U3RhY2tUcmFjZSogc3RhY2tUcmFjZSkKIHsKLSAgICBpZiAo
YXJncy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSB0aGlz
LT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcg
bWVzc2FnZSA9IGFyZ3MuYXQoZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwotCi0gICAgS1VSTCB1
cmw7Ci0gICAgdW5zaWduZWQgbGluZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIoZXhl
YywgdXJsLCBsaW5lTnVtYmVyKTsKLQotICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWRk
TWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCB1cmwucHJldHR5VVJMKCkpOwot
ICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01l
c3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgbGluZU51bWJlciwgdXJs
LnN0cmluZygpKTsKLQotICAgIHByaW50VG9TdGFuZGFyZE91dChMb2dNZXNzYWdlTGV2ZWwsIGV4
ZWMsIGFyZ3MsIHVybCk7CisgICAgYWRkTWVzc2FnZShMb2dNZXNzYWdlTGV2ZWwsIHN0YWNrVHJh
Y2UpOwogfQogCi12b2lkIENvbnNvbGU6OmRpcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6OmRpcihTY3JpcHRTdGFja1RyYWNlKiBzdGFja1RyYWNl
KQogewotICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFn
ZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShK
U01lc3NhZ2VTb3VyY2UsIE9iamVjdE1lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgMCwgU3RyaW5n
KCkpOworICAgIGFkZE1lc3NhZ2UoT2JqZWN0TWVzc2FnZUxldmVsLCBzdGFja1RyYWNlKTsKIH0K
IAotdm9pZCBDb25zb2xlOjpkaXJ4bWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQordm9pZCBDb25zb2xlOjpkaXJ4bWwoU2NyaXB0U3RhY2tUcmFjZSogc3RhY2tUcmFjZSkK
IHsKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFBhZ2Uq
IHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNN
ZXNzYWdlU291cmNlLCBOb2RlTWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCAwLCBTdHJpbmcoKSk7
CisgICAgYWRkTWVzc2FnZShOb2RlTWVzc2FnZUxldmVsLCBzdGFja1RyYWNlKTsKIH0KIAotdm9p
ZCBDb25zb2xlOjp0cmFjZShFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIENvbnNvbGU6OnRyYWNlKFNj
cmlwdFN0YWNrVHJhY2UqIHN0YWNrVHJhY2UpCiB7Ci0gICAgUGFnZSogcGFnZSA9IHRoaXMtPnBh
Z2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBhZGRNZXNzYWdlKFRy
YWNlTWVzc2FnZUxldmVsLCBzdGFja1RyYWNlLCB0cnVlKTsKIAotICAgIGludCBzaWduZWRMaW5l
TnVtYmVyOwotICAgIGludHB0cl90IHNvdXJjZUlEOwotICAgIFVTdHJpbmcgdXJsU3RyaW5nOwot
ICAgIEpTVmFsdWUqIGZ1bmM7Ci0KLSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUxh
c3RDYWxsZXIoZXhlYywgc2lnbmVkTGluZU51bWJlciwgc291cmNlSUQsIHVybFN0cmluZywgZnVu
Yyk7CisgICAgaWYgKCFzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgQXJnTGlzdCBhcmdzOwotICAgIHdoaWxlICghZnVuYy0+aXNOdWxsKCkpIHsKLSAgICAg
ICAgYXJncy5hcHBlbmQoZnVuYyk7Ci0gICAgICAgIGZ1bmMgPSBleGVjLT5pbnRlcnByZXRlcigp
LT5yZXRyaWV2ZUNhbGxlcihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZnVuYykpOworICAgIHBy
aW50ZigiU3RhY2sgVHJhY2VcbiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFj
a1RyYWNlLT5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJpbmcgZnVuY3Rpb25OYW1lID0gU3Ry
aW5nKHN0YWNrVHJhY2UtPmF0KGkpLmZ1bmN0aW9uTmFtZSgpKTsKKyAgICAgICAgcHJpbnRmKCJc
dCVzXG4iLCBmdW5jdGlvbk5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgfQotICAgIAotICAgIHBh
Z2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VT
b3VyY2UsIFRyYWNlTWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCAwLCBTdHJpbmcoKSk7CiB9CiAK
LXZvaWQgQ29uc29sZTo6YXNzZXJ0Q29uZGl0aW9uKGJvb2wgY29uZGl0aW9uLCBFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6OmFzc2VydENvbmRpdGlv
bihib29sIGNvbmRpdGlvbiwgU2NyaXB0U3RhY2tUcmFjZSogc3RhY2tUcmFjZSkKIHsKICAgICBp
ZiAoY29uZGl0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBQYWdlKiBwYWdlID0gdGhpcy0+
cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgS1VSTCB1cmw7
Ci0gICAgdW5zaWduZWQgbGluZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywg
dXJsLCBsaW5lTnVtYmVyKTsKLQogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5MTM1PiBJdCB3b3VsZCBiZSBuaWNlIHRvIHByZWZpeCBhc3Nl
cnRpb24gZmFpbHVyZXMgd2l0aCBhIG1lc3NhZ2UgbGlrZSAiQXNzZXJ0aW9uIGZhaWxlZDogIi4K
LSAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTEzNj4gV2Ugc2hvdWxkIHByaW50IGEgbWVzc2FnZSBldmVuIHdoZW4gYXJncy5pc0VtcHR5KCkg
aXMgdHJ1ZS4KLQotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRv
Q29uc29sZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCBs
aW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOwotCi0gICAgcHJpbnRUb1N0YW5kYXJkT3V0KEVycm9y
TWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCB1cmwpOworICAgIGFkZE1lc3NhZ2UoRXJyb3JNZXNz
YWdlTGV2ZWwsIHN0YWNrVHJhY2UsIHRydWUpOwogfQogCi12b2lkIENvbnNvbGU6OmNvdW50KEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6Y291bnQo
U2NyaXB0U3RhY2tUcmFjZSogc3RhY2tUcmFjZSkKIHsKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+
cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgS1VSTCB1cmw7
Ci0gICAgdW5zaWduZWQgbGluZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywg
dXJsLCBsaW5lTnVtYmVyKTsKKyAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxsZXIg
PSBzdGFja1RyYWNlLT5hdCgwKTsKKyAgICAvLyBGb2xsb3cgRmlyZWJ1ZydzIGJlaGF2aW9yIG9m
IGNvdW50aW5nIHdpdGggbnVsbCBhbmQgdW5kZWZpbmVkIHRpdGxlIGluCisgICAgLy8gdGhlIHNh
bWUgYnVja2V0IGFzIG5vIGFyZ3VtZW50CisgICAgU3RyaW5nIHRpdGxlOworICAgIGdldEZpcnN0
QXJndW1lbnRBc1N0cmluZyhsYXN0Q2FsbGVyLCB0aXRsZSk7CiAKLSAgICBVU3RyaW5nIHRpdGxl
OwotICAgIGlmIChhcmdzLnNpemUoKSA+PSAxKQotICAgICAgICB0aXRsZSA9IHZhbHVlVG9TdHJp
bmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdChleGVjLCAwKSk7Ci0KLSAg
ICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNvdW50KHRpdGxlLCBsaW5lTnVtYmVyLCB1
cmwuc3RyaW5nKCkpOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y291bnQodGl0
bGUsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVyLnNvdXJjZVVSTCgpLnN0cmlu
ZygpKTsKIH0KIAotdm9pZCBDb25zb2xlOjpwcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJncykKKyNpZiBVU0UoSlNDKQorCit2b2lkIENvbnNvbGU6OnByb2ZpbGUoY29u
c3QgSlNDOjpVU3RyaW5nJiB0aXRsZSwgU2NyaXB0U3RhY2tUcmFjZSogc3RhY2tUcmFjZSkKIHsK
ICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAg
cmV0dXJuOwogCisgICAgaWYgKHRpdGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKICAg
ICAvLyBGSVhNRTogbG9nIGEgY29uc29sZSBtZXNzYWdlIHdoZW4gcHJvZmlsaW5nIGlzIGRpc2Fi
bGVkLgogICAgIGlmICghcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5wcm9maWxlckVuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVVN0cmluZyB0aXRsZSA9IGFyZ3MuYXQoZXhl
YywgMCktPnRvU3RyaW5nKGV4ZWMpOwotICAgIFByb2ZpbGVyOjpwcm9maWxlcigpLT5zdGFydFBy
b2ZpbGluZyhleGVjLCB0aXRsZSk7CisgICAgSlNDOjpQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3Rh
cnRQcm9maWxpbmcoc3RhY2tUcmFjZS0+c3RhdGUoKSwgdGl0bGUpOwogfQogCi12b2lkIENvbnNv
bGU6OnByb2ZpbGVFbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9p
ZCBDb25zb2xlOjpwcm9maWxlRW5kKGNvbnN0IEpTQzo6VVN0cmluZyYgdGl0bGUsIFNjcmlwdFN0
YWNrVHJhY2UqIHN0YWNrVHJhY2UpCiB7CiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsK
ICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghcGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5wcm9maWxlckVuYWJsZWQoKSkKKyAgICBpZiAodGl0bGUuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVTdHJpbmcgdGl0bGU7Ci0gICAgaWYgKGFyZ3Mu
c2l6ZSgpID49IDEpCi0gICAgICAgIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIDApKTsKKyAgICBpZiAoIXBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+cHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxQcm9maWxlPiBwcm9maWxlID0gUHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0b3BQ
cm9maWxpbmcoZXhlYywgdGl0bGUpOworICAgIFJlZlB0cjxKU0M6OlByb2ZpbGU+IHByb2ZpbGUg
PSBKU0M6OlByb2ZpbGVyOjpwcm9maWxlcigpLT5zdG9wUHJvZmlsaW5nKHN0YWNrVHJhY2UtPnN0
YXRlKCksIHRpdGxlKTsKICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1fcHJvZmlsZXMuYXBwZW5kKHByb2ZpbGUpOwogCiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlz
LT5wYWdlKCkpIHsKLSAgICAgICAgS1VSTCB1cmw7Ci0gICAgICAgIHVuc2lnbmVkIGxpbmVOdW1i
ZXI7Ci0gICAgICAgIHJldHJpZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxpbmVOdW1iZXIpOwot
Ci0gICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkUHJvZmlsZShwcm9maWxl
LCBsaW5lTnVtYmVyLCB1cmwpOworICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RD
YWxsZXIgPSBzdGFja1RyYWNlLT5hdCgwKTsKKyAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5hZGRQcm9maWxlKHByb2ZpbGUsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0
Q2FsbGVyLnNvdXJjZVVSTCgpKTsKICAgICB9CiB9CiAKLXZvaWQgQ29uc29sZTo6dGltZShjb25z
dCBVU3RyaW5nJiB0aXRsZSkKLXsKLSAgICBpZiAodGl0bGUuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybjsKKyNlbmRpZgogICAgIAordm9pZCBDb25zb2xlOjp0aW1lKGNvbnN0IFN0cmluZyYgdGl0
bGUpCit7CiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEZvbGxvdyBGaXJlYnVnJ3MgYmVoYXZpb3Igb2YgcmVx
dWlyaW5nIGEgdGl0bGUgdGhhdCBpcyBub3QgbnVsbCBvcgorICAgIC8vIHVuZGVmaW5lZCBmb3Ig
dGltaW5nIGZ1bmN0aW9ucworICAgIGlmICh0aXRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c3RhcnRUaW1pbmcodGl0
bGUpOwogfQogCi12b2lkIENvbnNvbGU6OnRpbWVFbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjp0aW1lRW5kKGNvbnN0IFN0cmluZyYgdGl0bGUs
IFNjcmlwdFN0YWNrVHJhY2UqIHN0YWNrVHJhY2UpCiB7Ci0gICAgVVN0cmluZyB0aXRsZTsKLSAg
ICBpZiAoYXJncy5zaXplKCkgPj0gMSkKLSAgICAgICAgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGFyZ3MuYXQoZXhlYywgMCkpOwotICAgIGlmICh0
aXRsZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGFnZSogcGFnZSA9IHRoaXMt
PnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIEZvbGxv
dyBGaXJlYnVnJ3MgYmVoYXZpb3Igb2YgcmVxdWlyaW5nIGEgdGl0bGUgdGhhdCBpcyBub3QgbnVs
bCBvcgorICAgIC8vIHVuZGVmaW5lZCBmb3IgdGltaW5nIGZ1bmN0aW9ucworICAgIGlmICh0aXRs
ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZG91YmxlIGVsYXBzZWQ7CiAgICAg
aWYgKCFwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnN0b3BUaW1pbmcodGl0bGUsIGVsYXBz
ZWQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZyh0aXRs
ZSkgKyBTdHJpbmc6OmZvcm1hdCgiOiAlLjBmbXMiLCBlbGFwc2VkKTsKLQotICAgIEtVUkwgdXJs
OwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMs
IHVybCwgbGluZU51bWJlcik7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSB0aXRsZSArIFN0cmluZzo6
Zm9ybWF0KCI6ICUuMGZtcyIsIGVsYXBzZWQpOwogCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJv
bGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxl
dmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOworICAgIGNvbnN0IFNjcmlw
dENhbGxGcmFtZSYgbGFzdENhbGxlciA9IHN0YWNrVHJhY2UtPmF0KDApOworICAgIHBhZ2UtPmlu
c3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2Us
IExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGFzdENhbGxlci5saW5lTnVtYmVyKCksIGxhc3RD
YWxsZXIuc291cmNlVVJMKCkuc3RyaW5nKCkpOwogfQogCi12b2lkIENvbnNvbGU6Omdyb3VwKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpn
cm91cChTY3JpcHRTdGFja1RyYWNlKiBzdGFja1RyYWNlKQogewogICAgIFBhZ2UqIHBhZ2UgPSB0
aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYWdl
LT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnN0YXJ0R3JvdXAoSlNNZXNzYWdlU291cmNlLCBleGVj
LCBhcmd1bWVudHMsIDAsIFN0cmluZygpKTsKKyAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPnN0YXJ0R3JvdXAoSlNNZXNzYWdlU291cmNlLCBzdGFja1RyYWNlKTsKIH0KIAogdm9pZCBD
b25zb2xlOjpncm91cEVuZCgpCkBAIC00MjMsMjUgKzM0Myw5IEBAIHZvaWQgQ29uc29sZTo6Z3Jv
dXBFbmQoKQogICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+ZW5kR3JvdXAoSlNNZXNz
YWdlU291cmNlLCAwLCBTdHJpbmcoKSk7CiB9CiAKLXZvaWQgQ29uc29sZTo6d2FybihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6Ondhcm4oU2NyaXB0
U3RhY2tUcmFjZSogc3RhY2tUcmFjZSkKIHsKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYgKCFw
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbWVzc2FnZSA9IGFyZ3MuYXQoZXhl
YywgMCktPnRvU3RyaW5nKGV4ZWMpOwotCi0gICAgS1VSTCB1cmw7Ci0gICAgdW5zaWduZWQgbGlu
ZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgdXJsLCBsaW5lTnVtYmVyKTsK
LQotICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNz
YWdlLCBsaW5lTnVtYmVyLCB1cmwucHJldHR5VVJMKCkpOwotICAgIHBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIFdhcm5pbmdN
ZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIGxpbmVOdW1iZXIsIHVybC5zdHJpbmcoKSk7Ci0KLSAg
ICBwcmludFRvU3RhbmRhcmRPdXQoV2FybmluZ01lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgdXJs
KTsKKyAgICBhZGRNZXNzYWdlKFdhcm5pbmdNZXNzYWdlTGV2ZWwsIHN0YWNrVHJhY2UpOwogfQog
CiBzdGF0aWMgYm9vbCBwcmludEV4Y2VwdGlvbnMgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9Db25zb2xlLmggYi9XZWJDb3JlL3BhZ2UvQ29uc29sZS5oCmluZGV4IGQ4NzE1YmEu
LmRjOWM3ZTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmgKKysrIGIvV2ViQ29y
ZS9wYWdlL0NvbnNvbGUuaApAQCAtMzAsMjIgKzMwLDIyIEBACiAjZGVmaW5lIENvbnNvbGVfaAog
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpZiBVU0UoSlNDKQogI2luY2x1ZGUgPHBy
b2ZpbGVyL1Byb2ZpbGUuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAotbmFtZXNwYWNlIEpTQyB7Ci0gICAgY2xhc3Mg
RXhlY1N0YXRlOwotICAgIGNsYXNzIEFyZ0xpc3Q7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorI2lmIFVTRShKU0MpCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEpTQzo6UHJvZmlsZT4g
PiBQcm9maWxlc0FycmF5OworI2VuZGlmCiAKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFzcyBQ
YWdlOwogICAgIGNsYXNzIFN0cmluZzsKKyAgICBjbGFzcyBTY3JpcHRTdGFja1RyYWNlOwogCiAg
ICAgLy8gS2VlcCBpbiBzeW5jIHdpdGggaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCiAg
ICAgZW51bSBNZXNzYWdlU291cmNlIHsKQEAgLTc3LDM3ICs3Nyw0MiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VM
ZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCk7CiAKKyAgICAgICAgdm9pZCBkZWJ1ZyhTY3JpcHRTdGFja1RyYWNl
Kik7CisgICAgICAgIHZvaWQgZXJyb3IoU2NyaXB0U3RhY2tUcmFjZSopOworICAgICAgICB2b2lk
IGluZm8oU2NyaXB0U3RhY2tUcmFjZSopOworICAgICAgICB2b2lkIGxvZyhTY3JpcHRTdGFja1Ry
YWNlKik7CisgICAgICAgIHZvaWQgd2FybihTY3JpcHRTdGFja1RyYWNlKik7CisgICAgICAgIHZv
aWQgZGlyKFNjcmlwdFN0YWNrVHJhY2UqKTsKKyAgICAgICAgdm9pZCBkaXJ4bWwoU2NyaXB0U3Rh
Y2tUcmFjZSopOworICAgICAgICB2b2lkIHRyYWNlKFNjcmlwdFN0YWNrVHJhY2UqKTsKKyAgICAg
ICAgdm9pZCBhc3NlcnRDb25kaXRpb24oYm9vbCBjb25kaXRpb24sIFNjcmlwdFN0YWNrVHJhY2Uq
KTsKKyAgICAgICAgdm9pZCBjb3VudChTY3JpcHRTdGFja1RyYWNlKik7CiAjaWYgVVNFKEpTQykK
LSAgICAgICAgdm9pZCBkZWJ1ZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYp
OwotICAgICAgICB2b2lkIGVycm9yKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0
Jik7Ci0gICAgICAgIHZvaWQgaW5mbyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlz
dCYpOwotICAgICAgICB2b2lkIGxvZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlz
dCYpOwotICAgICAgICB2b2lkIHdhcm4oSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xp
c3QmKTsKLSAgICAgICAgdm9pZCBkaXIoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xp
c3QmKTsKLSAgICAgICAgdm9pZCBkaXJ4bWwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFy
Z0xpc3QmIGFyZ3VtZW50cyk7Ci0gICAgICAgIHZvaWQgdHJhY2UoSlNDOjpFeGVjU3RhdGUqKTsK
LSAgICAgICAgdm9pZCBhc3NlcnRDb25kaXRpb24oYm9vbCBjb25kaXRpb24sIEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgY291bnQoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAgICAgICAgdm9pZCBwcm9maWxlKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgcHJvZmlsZUVu
ZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAgICAgICB2b2lkIHRp
bWUoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSk7Ci0gICAgICAgIHZvaWQgdGltZUVuZChKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAgICAgICB2b2lkIGdyb3VwKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CisgICAgICAgIHZvaWQgcHJvZmls
ZShjb25zdCBKU0M6OlVTdHJpbmcmLCBTY3JpcHRTdGFja1RyYWNlKik7CisgICAgICAgIHZvaWQg
cHJvZmlsZUVuZChjb25zdCBKU0M6OlVTdHJpbmcmLCBTY3JpcHRTdGFja1RyYWNlKik7CisjZW5k
aWYKKyAgICAgICAgdm9pZCB0aW1lKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIHRpbWVF
bmQoY29uc3QgU3RyaW5nJiwgU2NyaXB0U3RhY2tUcmFjZSopOworICAgICAgICB2b2lkIGdyb3Vw
KFNjcmlwdFN0YWNrVHJhY2UqKTsKICAgICAgICAgdm9pZCBncm91cEVuZCgpOwogCiAgICAgICAg
IHN0YXRpYyBib29sIHNob3VsZFByaW50RXhjZXB0aW9ucygpOwogICAgICAgICBzdGF0aWMgdm9p
ZCBzZXRTaG91bGRQcmludEV4Y2VwdGlvbnMoYm9vbCk7CiAKKyNpZiBVU0UoSlNDKQogICAgICAg
ICBjb25zdCBQcm9maWxlc0FycmF5JiBwcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmls
ZXM7IH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW5saW5lIFBhZ2UqIHBhZ2Uo
KSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VMZXZlbCwgU2NyaXB0U3Rh
Y2tUcmFjZSosIGJvb2wgYWNjZXB0Tm9Bcmd1bWVudHMgPSBmYWxzZSk7CiAKICAgICAgICAgQ29u
c29sZShGcmFtZSopOwogCiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworI2lmIFVTRShKU0MpCiAg
ICAgICAgIFByb2ZpbGVzQXJyYXkgbV9wcm9maWxlczsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbCBi
L1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAppbmRleCA5MDc1OTYzLi5jMDYyNjI3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUu
aWRsCkBAIC0yOSwyNCArMjksMjcgQEAKIG1vZHVsZSB3aW5kb3cgewogCiAgICAgaW50ZXJmYWNl
IENvbnNvbGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJy
YXkgcHJvZmlsZXM7ICAgICAgICAKKyNpZiAhZGVmaW5lZChWOF9CSU5ESU5HKQorICAgICAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJyYXkgcHJvZmlsZXM7CisjZW5kaWYK
ICAgICAKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBkZWJ1ZygpOwotICAgICAgICBbQ3VzdG9tXSB2
b2lkIGVycm9yKCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgaW5mbygpOwotICAgICAgICBbQ3Vz
dG9tXSB2b2lkIGxvZygpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHdhcm4oKTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCBkaXIoKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBkaXJ4bWwoKTsKLSAg
ICAgICAgW0N1c3RvbV0gdm9pZCB0cmFjZSgpOwotICAgICAgICBbQ3VzdG9tLCBJbXBsZW1lbnRh
dGlvbkZ1bmN0aW9uPWFzc2VydENvbmRpdGlvbl0gdm9pZCBhc3NlcnQoaW4gYm9vbGVhbiBjb25k
aXRpb24pOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGNvdW50KCk7Ci0KLSAgICAgICAgW0N1c3Rv
bV0gdm9pZCBwcm9maWxlKGluIERPTVN0cmluZyB0aXRsZSk7Ci0gICAgICAgIFtDdXN0b21dIHZv
aWQgcHJvZmlsZUVuZCgpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBk
ZWJ1ZygpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBlcnJvcigpOwor
ICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBpbmZvKCk7CisgICAgICAgIFtD
dXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIGxvZygpOworICAgICAgICBbQ3VzdG9tQXJndW1l
bnRIYW5kbGluZ10gdm9pZCB3YXJuKCk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5n
XSB2b2lkIGRpcigpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBkaXJ4
bWwoKTsKKyAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgdHJhY2UoKTsKKyAg
ICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmcsIEltcGxlbWVudGF0aW9uRnVuY3Rpb249YXNz
ZXJ0Q29uZGl0aW9uXSB2b2lkIGFzc2VydChpbiBib29sZWFuIGNvbmRpdGlvbik7CisgICAgICAg
IFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIGNvdW50KCk7CisjaWYgIWRlZmluZWQoVjhf
QklORElORykKKyAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZShp
biBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsK
KyAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZUVuZChpbiBbQ29u
dmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKKyNlbmRp
ZgogICAgICAgICB2b2lkIHRpbWUoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyB0aXRsZSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdGltZUVuZCgpOwot
ICAgICAgICBbQ3VzdG9tXSB2b2lkIGdyb3VwKCk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhh
bmRsaW5nXSB2b2lkIHRpbWVFbmQoaW4gW0NvbnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyB0aXRsZSk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2
b2lkIGdyb3VwKCk7CiAgICAgICAgIHZvaWQgZ3JvdXBFbmQoKTsKICAgICB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25846</attachid>
            <date>2008-12-08 11:08:40 -0800</date>
            <delta_ts>2008-12-08 20:47:07 -0800</delta_ts>
            <desc>ScriptCallStack and ScriptCallFrame v3</desc>
            <filename>callStack.patch</filename>
            <type>text/plain</type>
            <size>60043</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkM2JkMmVlLi5mYzZiYTY5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEg
QEAKKzIwMDgtMTItMDYgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyBT
Y3JpcHRDYWxsRnJhbWUgcXVlcnkgbmFtZXMgb2YgZnVuY3Rpb25zIGluIHRoZSBjYWxsIHN0YWNr
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOiBhZGRlZCBJbnRlcm5hbEZ1bmN0aW9u
OjpuYW1lIGFzIGV4cG9ydGVkIHN5bWJvbAorCiAyMDA4LTEyLTA4ICBTaW1vbiBIYXVzbWFubiAg
PHNpbW9uLmhhdXNtYW5uQG5va2lhLmNvbT4KIAogICAgICAgICBGaXggdGhlIExpbnV4IGJ1aWxk
IHdpdGggbmV3ZXIgZ2NjL2dsaWJjLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZXhwIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCmluZGV4IDQz
Y2UyYTkuLjQ1NGJkZjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LmV4cAorKysgYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKQEAgLTk2LDYgKzk2
LDcgQEAgX19aTjNKU0MxMElkZW50aWZpZXIyNGNoZWNrU2FtZUlkZW50aWZpZXJUYWJsZUVQTlNf
OUV4ZWNTdGF0ZUVQTlNfN1VTdHJpbmczUmVwRQogX19aTjNKU0MxMElkZW50aWZpZXIzYWRkRVBO
U185RXhlY1N0YXRlRVBLYwogX19aTjNKU0MxMElkZW50aWZpZXI1ZXF1YWxFUEtOU183VVN0cmlu
ZzNSZXBFUEtjCiBfX1pOM0pTQzEwSlNGdW5jdGlvbjRpbmZvRQorX19aTjNKU0MxNkludGVybmFs
RnVuY3Rpb240bmFtZUVQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQ
TlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRQogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlF
eGVjU3RhdGVFTlNfOUVycm9yVHlwZUVQS2MKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhl
Y1N0YXRlRU5TXzlFcnJvclR5cGVFUktOU183VVN0cmluZ0UKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Q2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjQzYzIwMi4uOTdhNGYwYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NCBAQAorMjAwOC0xMi0wNiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYzMQorICAgICAgICBT
dHJlYW1saW5lIENvbnNvbGUuY3BwLCBhYnN0cmFjdCBvdXQgdGhlIHVzZSBvZiBKU0M6OkV4ZWNT
dGF0ZSBhbmQKKyAgICAgICAgSlNDOjpBcmdMaXN0IGJ5IGludHJvZHVjaW5nIFNjcmlwdENhbGxG
cmFtZSBhbmQgU2NyaXB0Q2FsbFN0YWNrCisgICAgICAgIGFic3RyYWN0aW9ucy4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgU2NyaXB0Q2FsbEZyYW1lIGFuZCBTY3JpcHRDYWxsU3Rh
Y2sgdG8gYnVpbGQKKyAgICAgICAgKiBXZWJDb3JlLnBybzogIEFkZCBTY3JpcHRDYWxsRnJhbWUg
YW5kIFNjcmlwdENhbGxTdGFjayB0byBidWlsZAorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qOiBBZGQgU2NyaXB0Q2FsbEZyYW1lIGFuZAorICAgICAgICAgICAgU2NyaXB0
Q2FsbFN0YWNrIHRvIHByb2plY3QKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IEFkZCBTY3JpcHRDYWxsRnJhbWUgYW5kCisgICAgICAgICAgICBTY3JpcHRDYWxs
U3RhY2sgdG8gcHJvamVjdAorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5j
cHA6IFJlbW92ZSBjdXN0b20gYmluZGluZ3MuCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0
Q2FsbEZyYW1lLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6
OlNjcmlwdENhbGxGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6On5T
Y3JpcHRDYWxsRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjphcmd1
bWVudEF0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6OmZ1bmN0aW9uTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsRnJhbWU6OnNvdXJjZVVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRDYWxsRnJhbWU6OmxpbmVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q2FsbEZyYW1lOjphcmd1bWVudENvdW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3Jp
cHRDYWxsU3RhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFj
azo6U2NyaXB0Q2FsbFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6
flNjcmlwdENhbGxTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OmF0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6c2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1NjcmlwdENhbGxTdGFjay5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENh
bGxTdGFjazo6U2NyaXB0Q2FsbFN0YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxT
dGFjazo6flNjcmlwdENhbGxTdGFjayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3Rh
Y2s6OnN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxTdGFjazo6YXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdENhbGxTdGFjazo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvU2Ny
aXB0U3RyaW5nLmg6IEFkZCBtaXNzaW5nIFBsYXRmb3JtU3RyaW5nIGluY2x1ZGUuCisgICAgICAg
ICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOiBBZGQgaXNOdWxsIGFuZCBpc1VuZGVmaW5l
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjppc051bGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0VmFsdWU6OmlzVW5kZWZpbmVkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
Y3JpcHRWYWx1ZS5oOiBBZGQgaXNOdWxsIGFuZCBpc1VuZGVmaW5lZAorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOiBBZGQgaGFuZGxpbmcgZm9yCisgICAgICAg
ICAgICBDdXN0b21Bcmd1bWVudEhhbmRsaW5nIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IFJlZmFjdG9yIHRvIHVzZSBTY3JpcHRDYWxsRnJh
bWUgYW5kCisgICAgICAgICAgICBTY3JpcHRDYWxsU3RhY2suCisgICAgICAgIChXZWJDb3JlOjpD
b25zb2xlTWVzc2FnZTo6Q29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDb250cm9sbGVyOjpzdGFydEdyb3VwKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmFkZFNjcmlwdENvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OnN0YXJ0VGltaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmg6IFJlZmFjdG9yIHRvIHVzZSBTY3JpcHRDYWxsRnJhbWUgYW5kCisgICAgICAg
ICAgICBTY3JpcHRDYWxsU3RhY2suCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25z
b2xlLmpzOiBtb2RpZnkgdG8gdXNlIGFyZ3VtZW50IHZhbHVlIGl0c2VsZgorICAgICAgICAgICAg
cmF0aGVyIHRoYW4gZi5uYW1lIGZvciBzdGFjayB0cmFjZS4KKyAgICAgICAgKiBwYWdlL0NvbnNv
bGUuY3BwOiBSZWZhY3RvciB0byB1c2UgU2NyaXB0Q2FsbEZyYW1lIGFuZAorICAgICAgICAgICAg
U2NyaXB0Q2FsbFN0YWNrLgorICAgICAgICAoV2ViQ29yZTo6Z2V0Rmlyc3RBcmd1bWVudEFzU3Ry
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OmFkZE1lc3NhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q29uc29sZTo6ZGVidWcpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6ZXJy
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6aW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb25zb2xlOjpsb2cpOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6ZGlyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnNvbGU6OmRpcnhtbCk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xl
Ojp0cmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjphc3NlcnRDb25kaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
c29sZTo6cHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjpwcm9maWxlRW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OnRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
c29sZTo6dGltZUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjpncm91cCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb25zb2xlOjp3YXJuKToKKyAgICAgICAgKiBwYWdlL0NvbnNvbGUuaDoK
KyAgICAgICAgKiBwYWdlL0NvbnNvbGUuaWRsOiBSZW1vdmUgQ3VzdG9tIGF0dHJpYnV0ZXMsIGFk
ZCBDdXN0b21Bcmd1bWVudEhhbmRsaW5nCisgICAgICAgICAgICBhdHRyaWJ1dGVzLCB0d2VhayBh
cmd1bWVudCBkZWZzLgorCiAyMDA4LTEyLTA4ICBUcmVudG9uIFNjaHVseiA8dHJlbnRvbi5zY2h1
bHpAbm9raWEuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFRvciBBcm5lIFZlc3Ri
w7guCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQppbmRleCA5ZDY4ZDhiLi5kMjQ3MWU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTM0Nyw2ICszNDcsMTAg
QEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFNMVFByb2Nl
c3NvckN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNw
cCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uaCBcCisJV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENhbGxGcmFtZS5oIFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5j
cHAgXAorCVdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmggXAogCVdlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0Q29udHJvbGxlci5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEluc3RhbmNl
LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggMjNiZjE3Ny4uMmRkOWY3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC00NDIsNiArNDQyLDggQEAgU09VUkNFUyAr
PSBcCiAgICAgYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcCBcCiAgICAgYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNQbHVnaW5FbGVtZW50RnVu
Y3Rpb25zLmNwcCBcCisgICAgYmluZGluZ3MvanMvU2NyaXB0Q2FsRnJhbWUuY3BwIFwKKyAgICBi
aW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRD
b250cm9sbGVyLmNwcCBcCiAgICAgYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwIFwKICAgICBi
aW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5zY29ucyBiL1dlYkNvcmUvV2ViQ29yZS5zY29ucwppbmRleCAwMGEyZWRmLi4xZWI5MTc2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuc2NvbnMKKysrIGIvV2ViQ29yZS9XZWJDb3Jl
LnNjb25zCkBAIC02ODAsNiArNjgwLDggQEAgc291cmNlc1snYmluZGluZ3MvanMnXSA9IFsKICAg
ICAiYmluZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwIiwKICAgICAiYmlu
ZGluZ3MvanMvSlNYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcCIsCiAgICAgImJpbmRpbmdzL2pzL1Nj
aGVkdWxlZEFjdGlvbi5jcHAiLAorICAgICJiaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3Bw
IiwKKyAgICAiYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcCIsCiAgICAgImJpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIiwKICAgICAiYmluZGluZ3MvanMvU2NyaXB0VmFsdWUu
Y3BwIiwKICAgICAiYmluZGluZ3MvanMvV29ya2VyU2NyaXB0Q29udHJvbGxlci5jcHAiLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZWZmZWM0Ni4uN2IzYmYzNSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0xMzk1Myw2ICsxMzk1MywyMiBA
QAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cYmluZGluZ3NcanNcU2NyaXB0Q2FsbEZyYW1lLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxl
Pg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRD
YWxsRnJhbWUuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xTY3JpcHRDYWxsU3RhY2suY3BwIg0KKwkJCQkJPg0K
KwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdz
XGpzXFNjcmlwdENhbGxTdGFjay5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxl
DQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdENvbnRyb2xsZXIuY3Bw
Ig0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBhMWViMmY4Li41ZTU4NmVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTQyLDYgKzU0MiwxMCBAQAogCQkzN0FDQ0Y2OTBE
QTQxNEU3MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3QUNDRTYyMERBMkFBOTYwMDg5RTYwMiAvKiBG
b250RGVzY3JpcHRpb24uY3BwICovOyB9OwogCQkzN0Y4MThGRDBENjU3NjA2MDA1RTFGMDUgLyog
V2ViQ29yZVVSTFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzN0Y4MThGQjBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzdG
ODE4RkUwRDY1NzYwNjAwNUUxRjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3RjgxOEZDMEQ2NTc2MDYwMDVF
MUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi87IH07CisJCTQxNkU3NUJFMEVERjhGRDcw
MDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkU3NUJDMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxs
U3RhY2suaCAqLzsgfTsKKwkJNDE2RTc1QkYwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxT
dGFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLzsgfTsKKwkJ
NDE2RTc1Q0IwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QzkwRURGOTBDNzAwMzYw
RTFEIC8qIFNjcmlwdENhbGxGcmFtZS5oICovOyB9OworCQk0MTZFNzVDQzBFREY5MEM3MDAzNjBF
MUQgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJh
bWUuY3BwICovOyB9OwogCQk0MTZGNDVGMDBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZGNDVF
RjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi87IH07CiAJCTQxQzc2MEIxMEVE
RTAzRDMwMEMxNjU1RiAvKiBTY3JpcHRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDQxNTI5MkUwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0MTUyOTJDMEUxQUU4
QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50LmggKi87IH07CkBAIC01MzU1LDYg
KzUzNTksMTAgQEAKIAkJMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZvbnREZXNjcmlwdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RGVzY3JpcHRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0Y4MThGQjBENjU3NjA2MDA1
RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYkNvcmVVUkxSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzN0Y4MThGQzBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbFN0YWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmlwdENhbGxTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MTZFNzVCRDBF
REY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNjcmlwdENhbGxTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0Q2FsbEZyYW1lLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBT
Y3JpcHRDYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2NyaXB0Q2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDE2RjQ1
RUYwRUQ3QjMxMTAwODIxNUI2IC8qIFNjcmlwdFN0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNDFDNzYwQjAwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ0MTUyOTJDMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1MUGx1Z0luSW1hZ2VFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxQbHVnSW5JbWFnZUVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMTE0LDYgKzEzMTIyLDEw
IEBACiAJCQkJQkNFOTlFQzIwRENBNjI0MTAwMTgyNjgzIC8qIEpTWFNMVFByb2Nlc3NvckNvbnN0
cnVjdG9yLmggKi8sCiAJCQkJQkNBMzc4QkEwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFj
dGlvbi5jcHAgKi8sCiAJCQkJQkNBMzc4QkIwRDE1RjY0MjAwQjc5M0Q2IC8qIFNjaGVkdWxlZEFj
dGlvbi5oICovLAorCQkJCTQxNkU3NUM5MEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJh
bWUuaCAqLywKKwkJCQk0MTZFNzVDQTBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1l
LmNwcCAqLywKKwkJCQk0MTZFNzVCQzBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNr
LmggKi8sCisJCQkJNDE2RTc1QkQwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxTdGFjay5j
cHAgKi8sCiAJCQkJOTNCNzBENTMwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIu
Y3BwICovLAogCQkJCTkzQjcwRDU0MDlFQjBDN0MwMDlEODQ2OCAvKiBTY3JpcHRDb250cm9sbGVy
LmggKi8sCiAJCQkJQTgzRTFDNzIwRTQ5MDQyQjAwMTQwQjlDIC8qIFNjcmlwdENvbnRyb2xsZXJN
YWMubW0gKi8sCkBAIC0xNjQ1Myw2ICsxNjQ2NSw4IEBACiAJCQkJMDgxRDgxMzIwRUUwRTc0RDAw
RDczNjg5IC8qIFdNTFRpbWVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRDMTc4OUIw
RUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDFDNzYwQjEwRURFMDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk0MTZFNzVCRTBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0MTZFNzVDQjBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1l
LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4MzkwLDYgKzE4NDA0LDggQEAKIAkJCQkwODA0QkY2RTBF
RTA5QzNCMDAwNkMwMDAgLyogV01MRG9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA4
MUQ4MTMxMEVFMEU3NEQwMEQ3MzY4OSAvKiBXTUxUaW1lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTRDMTc4OUEwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2Fs
bFN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQxNkU3NUNDMEVERjkwQzcwMDM2MEUxRCAv
KiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q29uc29sZUN1c3RvbS5jcHAKaW5kZXggNjEzMWNiNi4uZDA1ZmZlOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcApAQCAtNDgsOTEgKzQ4LDQgQEAgSlNWYWx1ZSogSlND
b25zb2xlOjpwcm9maWxlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnN0
cnVjdEFycmF5KGV4ZWMsIGxpc3QpOwogfQogCi1KU1ZhbHVlKiBKU0NvbnNvbGU6OmRlYnVnKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+
ZGVidWcoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQot
SlNWYWx1ZSogSlNDb25zb2xlOjplcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCktPmVycm9yKGV4ZWMsIGFyZ3VtZW50cyk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6aW5mbyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCktPmlu
Zm8oZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNW
YWx1ZSogSlNDb25zb2xlOjpsb2coRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1
bWVudHMpCi17Ci0gICAgaW1wbCgpLT5sb2coZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjp3YXJuKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+d2FybihleGVj
LCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBK
U0NvbnNvbGU6OmRpcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykK
LXsKLSAgICBpbXBsKCktPmRpcihleGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotfQotCi1KU1ZhbHVlKiBKU0NvbnNvbGU6OmRpcnhtbChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCktPmRpcnhtbChleGVjLCBh
cmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBKU0Nv
bnNvbGU6OnRyYWNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYpCi17Ci0gICAgaW1w
bCgpLT50cmFjZShleGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1
ZSogSlNDb25zb2xlOjphc3NlcnRDb25kaXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmd1bWVudHMpCi17Ci0gICAgQXJnTGlzdCBtZXNzYWdlUGFyYW1ldGVyczsKLSAgICBh
cmd1bWVudHMuZ2V0U2xpY2UoMSwgbWVzc2FnZVBhcmFtZXRlcnMpOwotCi0gICAgaW1wbCgpLT5h
c3NlcnRDb25kaXRpb24oYXJndW1lbnRzLmF0KGV4ZWMsIDApLT50b0Jvb2xlYW4oZXhlYyksIGV4
ZWMsIG1lc3NhZ2VQYXJhbWV0ZXJzKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQot
SlNWYWx1ZSogSlNDb25zb2xlOjpjb3VudChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCktPmNvdW50KGV4ZWMsIGFyZ3VtZW50cyk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6dGltZUVuZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCkt
PnRpbWVFbmQoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0K
LQotSlNWYWx1ZSogSlNDb25zb2xlOjpwcm9maWxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+cHJvZmlsZShleGVjLCBhcmd1bWVudHMp
OwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBKU0NvbnNvbGU6OnBy
b2ZpbGVFbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0g
ICAgaW1wbCgpLT5wcm9maWxlRW5kKGV4ZWMsIGFyZ3VtZW50cyk7Ci0gICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6Z3JvdXAoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT5ncm91cChleGVjLCBh
cmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFt
ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIzMWMyOQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcApAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRDYWxsRnJhbWUuaCIKKworI2lu
Y2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVVN0cmlu
Zy5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Nj
cmlwdENhbGxGcmFtZTo6U2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6VVN0cmluZyYgZnVuY3Rp
b25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSlNDOjpVU3Ry
aW5nJiB1cmxTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2tp
cEFyZ3VtZW50Q291bnQpCisgICAgOiBtX2Z1bmN0aW9uTmFtZShmdW5jdGlvbk5hbWUpCisgICAg
LCBtX3NvdXJjZVVSTCh1cmxTdHJpbmcpCisgICAgLCBtX2xpbmVOdW1iZXIobGluZU51bWJlcikK
K3sKKyAgICBmb3IodW5zaWduZWQgaSA9IHNraXBBcmd1bWVudENvdW50OyBpIDwgYXJncy5zaXpl
KCk7ICsraSkKKyAgICAgICAgbV9hcmd1bWVudHMuYXBwZW5kKFNjcmlwdFZhbHVlKGFyZ3MuYXQo
ZXhlYywgaSkpKTsKK30KKworU2NyaXB0Q2FsbEZyYW1lOjp+U2NyaXB0Q2FsbEZyYW1lKCkKK3sK
K30KKworY29uc3QgU2NyaXB0VmFsdWUgJlNjcmlwdENhbGxGcmFtZTo6YXJndW1lbnRBdCh1bnNp
Z25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID4gaW5k
ZXgpOworICAgIHJldHVybiBtX2FyZ3VtZW50c1tpbmRleF07Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1l
LmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YWFhMzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTY3JpcHRDYWxsRnJhbWVfaAorI2RlZmluZSBTY3JpcHRDYWxsRnJhbWVfaAorCisjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgInJ1bnRpbWUvQXJnTGlzdC5oIgorI2luY2x1ZGUgIlNjcmlw
dFN0cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdFZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKyAgICBjbGFzcyBFeGVjU3RhdGU7CisgICAgY2xhc3Mg
SW50ZXJuYWxGdW5jdGlvbjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgLy8gRklY
TUU6IEltcGxlbWVudCByZXRyaWV2aW5nIGxpbmUgbnVtYmVyIGFuZCBzb3VyY2UgVVJMIGFuZCBz
dG9yaW5nIGhlcmUKKyAgICAvLyBmb3IgYWxsIGNhbGwgZnJhbWVzLCBub3QganVzdCB0aGUgZmly
c3Qgb25lLgorICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNTU2PiBhbmQKKyAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMTgwPgorICAgIGNsYXNzIFNjcmlwdENhbGxGcmFtZSAgeworICAgIHB1YmxpYzoK
KyAgICAgICAgU2NyaXB0Q2FsbEZyYW1lKGNvbnN0IEpTQzo6VVN0cmluZyYgZnVuY3Rpb25OYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSlNDOjpVU3RyaW5nJiB1cmxTdHJpbmcs
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZU51bWJlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEpTQzo6RXhlY1N0YXRlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEpTQzo6QXJnTGlzdCYsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBza2lwQXJn
dW1lbnRDb3VudCk7CisgICAgICAgIH5TY3JpcHRDYWxsRnJhbWUoKTsKKworICAgICAgICBjb25z
dCBTY3JpcHRTdHJpbmcgJmZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25O
YW1lOyB9CisgICAgICAgIGNvbnN0IEtVUkwgJnNvdXJjZVVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlVVJMOyB9CisgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVy
biBtX2xpbmVOdW1iZXI7IH0KKworICAgICAgICAvLyBhcmd1bWVudCByZXRyaWV2YWwgbWV0aG9k
cworICAgICAgICBjb25zdCBTY3JpcHRWYWx1ZSAmYXJndW1lbnRBdCh1bnNpZ25lZCkgY29uc3Q7
CisgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2FyZ3Vt
ZW50cy5zaXplKCk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFNjcmlwdFN0cmluZyBtX2Z1
bmN0aW9uTmFtZTsKKyAgICAgICAgS1VSTCBtX3NvdXJjZVVSTDsKKyAgICAgICAgdW5zaWduZWQg
bV9saW5lTnVtYmVyOworCisgICAgICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gbV9hcmd1bWVudHM7
CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0Q2Fs
bEZyYW1lX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNr
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWY1N2IwCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwCkBAIC0wLDAgKzEsMTA4IEBACisv
KgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKKworI2lu
Y2x1ZGUgPGludGVycHJldGVyL0NhbGxGcmFtZS5oPgorI2luY2x1ZGUgPGludGVycHJldGVyL0lu
dGVycHJldGVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU1ZhbHVlLmg+CisjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU0dsb2JhbERhdGEuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTY3JpcHRDYWxsU3RhY2s6OlNjcmlwdENhbGxTdGFj
ayhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQorICAgIDogbV9p
bml0aWFsaXplZChmYWxzZSkKKyAgICAsIG1fZXhlYyhleGVjKQorICAgICwgbV9jYWxsZXIoMCkK
K3sKKyAgICBpbnQgc2lnbmVkTGluZU51bWJlcjsKKyAgICBpbnRwdHJfdCBzb3VyY2VJRDsKKyAg
ICBVU3RyaW5nIHVybFN0cmluZzsKKyAgICBKU1ZhbHVlKiBmdW5jOworCisgICAgZXhlYy0+aW50
ZXJwcmV0ZXIoKS0+cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNv
dXJjZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxT
dHJpbmcsIGZ1bmMpOworCisgICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgbV9jYWxsZXIgPSBhc0lu
dGVybmFsRnVuY3Rpb24oZnVuYyk7CisgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSAgc2ln
bmVkTGluZU51bWJlciA+PSAwID8gc2lnbmVkTGluZU51bWJlciA6IDA7CisgICAgICAgIG1fZnJh
bWVzLmFwcGVuZCgKKyAgICAgICAgICAgIFNjcmlwdENhbGxGcmFtZShtX2NhbGxlci0+bmFtZSgm
bV9leGVjLT5nbG9iYWxEYXRhKCkpLCB1cmxTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGluZU51bWJlciwgZXhlYywgYXJncywgc2tpcEFyZ3VtZW50Q291bnQpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBjYWxsZXIgaXMgdW5rbm93biwgYnV0IHdlIHNob3VsZCBzdGls
bCBhZGQgdGhlIGZyYW1lLCBiZWNhdXNlCisgICAgICAgIC8vIHNvbWV0aGluZyBjYWxsZWQgdXMs
IGFuZCBnYXZlIHVzIGFyZ3VtZW50cworICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoU2NyaXB0Q2Fs
bEZyYW1lKFVTdHJpbmcoKSwgVVN0cmluZygpLCAwLCBleGVjLCBhcmdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBBcmd1bWVudENvdW50KSk7CisgICAgfQor
fQorCitTY3JpcHRDYWxsU3RhY2s6On5TY3JpcHRDYWxsU3RhY2soKQoreworfQorCitjb25zdCBT
Y3JpcHRDYWxsRnJhbWUgJlNjcmlwdENhbGxTdGFjazo6YXQodW5zaWduZWQgaW5kZXgpCit7Cisg
ICAgaW5pdGlhbGl6ZSgpOworICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkgPiBpbmRleCk7Cisg
ICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XTsKK30KKwordW5zaWduZWQgU2NyaXB0Q2FsbFN0YWNr
OjpzaXplKCkKK3sKKyAgICBpbml0aWFsaXplKCk7CisgICAgcmV0dXJuIG1fZnJhbWVzLnNpemUo
KTsKK30KKwordm9pZCBTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxpemUoKQoreworICAgIGlmICgh
bV9jYWxsZXIgfHwgbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSlNWYWx1
ZSogZnVuYyA9IG1fZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXIobV9leGVjLCBt
X2NhbGxlcik7CisgICAgd2hpbGUoIWZ1bmMtPmlzTnVsbCgpKSB7CisgICAgICAgIEludGVybmFs
RnVuY3Rpb24qIGludGVybmFsRnVuY3Rpb24gPSBhc0ludGVybmFsRnVuY3Rpb24oZnVuYyk7Cisg
ICAgICAgIEFyZ0xpc3QgZW1wdHlBcmdMaXN0OworICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoCisg
ICAgICAgICAgICBTY3JpcHRDYWxsRnJhbWUoCisgICAgICAgICAgICAgICAgaW50ZXJuYWxGdW5j
dGlvbi0+bmFtZSgmbV9leGVjLT5nbG9iYWxEYXRhKCkpLCBVU3RyaW5nKCksIDAsIDAsCisgICAg
ICAgICAgICAgICAgZW1wdHlBcmdMaXN0LCAwKSk7CisgICAgICAgIGZ1bmMgPSBtX2V4ZWMtPmlu
dGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyKG1fZXhlYywgaW50ZXJuYWxGdW5jdGlvbik7Cisg
ICAgfQorICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yMmU0ZGMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2Ny
aXB0Q2FsbFN0YWNrX2gKKyNkZWZpbmUgU2NyaXB0Q2FsbFN0YWNrX2gKKworI2luY2x1ZGUgIlNj
cmlwdENhbGxGcmFtZS5oIgorI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCisjaW5jbHVkZSAiU2Ny
aXB0U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBK
U0MgeworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAgICBjbGFzcyBKU1ZhbHVlOworfQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTY3JpcHRDYWxsU3RhY2sgOiBwdWJsaWMgTm9u
Y29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2NyaXB0Q2FsbFN0YWNrKEpTQzo6RXhl
Y1N0YXRlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBKU0M6OkFyZ0xpc3QmLAor
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50ID0gMCk7
CisgICAgICAgIH5TY3JpcHRDYWxsU3RhY2soKTsKKworICAgICAgICBTY3JpcHRTdGF0ZSogc3Rh
dGUoKSBjb25zdCB7IHJldHVybiBtX2V4ZWM7IH0KKyAgICAgICAgLy8gZnJhbWUgcmV0cmlldmFs
IG1ldGhvZHMKKyAgICAgICAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lICZhdCh1bnNpZ25lZCk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemUoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgaW5p
dGlhbGl6ZSgpOworICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7CisKKyAgICAgICAgSlNDOjpF
eGVjU3RhdGUqIG1fZXhlYzsKKyAgICAgICAgVmVjdG9yPFNjcmlwdENhbGxGcmFtZT4gbV9mcmFt
ZXM7CisgICAgICAgIEpTQzo6SW50ZXJuYWxGdW5jdGlvbiogbV9jYWxsZXI7CisgICAgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0Q2FsbFN0YWNrX2gKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmggYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oCmluZGV4IDY4Yjk4ZmYuLmE1ODJiZGYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRTdHJpbmcuaApAQCAtMzEsNiArMzEsNyBAQAogI2lmbmRlZiBTY3JpcHRT
dHJpbmdfaAogI2RlZmluZSBTY3JpcHRTdHJpbmdfaAogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVVN0
cmluZy5oPgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCmluZGV4IDYyNmNkZjYuLmJi
MmVlMWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCkBAIC01MCw0ICs1MCwxOCBA
QCBib29sIFNjcmlwdFZhbHVlOjpnZXRTdHJpbmcoU3RyaW5nJiByZXN1bHQpIGNvbnN0CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU2NyaXB0VmFsdWU6OmlzTnVsbCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3ZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IG1fdmFsdWUtPmlzTnVsbCgpOworfQorCitib29sIFNjcmlwdFZhbHVlOjppc1VuZGVmaW5lZCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3ZhbHVlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIG1fdmFsdWUtPmlzVW5kZWZpbmVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAppbmRleCA4Y2NiYjY0Li41ZGZlNzZk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoK
IAogICAgIEpTQzo6SlNWYWx1ZSoganNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0
KCk7IH0KICAgICBib29sIGdldFN0cmluZyhTdHJpbmcmIHJlc3VsdCkgY29uc3Q7CisgICAgYm9v
bCBpc051bGwoKSBjb25zdDsKKyAgICBib29sIGlzVW5kZWZpbmVkKCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgSlNDOjpQcm90ZWN0ZWRQdHI8SlNDOjpKU1ZhbHVlPiBtX3ZhbHVlOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggYjAzYWU5ZC4uYmQ2
NjVlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JK
Uy5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCkBA
IC0xMzQ0LDYgKzEzNDQsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KIAogICAgICAg
ICAgICAgICAgIG15ICRoYXNPcHRpb25hbEFyZ3VtZW50cyA9IDA7CiAKKyAgICAgICAgICAgICAg
ICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21B
cmd1bWVudEhhbmRsaW5nIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgU2NyaXB0Q2FsbFN0YWNrIGNhbGxTdGFjayhleGVjLCBhcmdzLCAkbnVtUGFyYW1l
dGVycyk7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siU2NyaXB0Q2Fs
bFN0YWNrLmgifSA9IDE7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgZm9y
ZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCEkaGFzT3B0aW9uYWxBcmd1bWVudHMgJiYgJHBhcmFtZXRlci0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Ik9wdGlvbmFsIn0pIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiXG4gICAgaW50IGFyZ3NDb3VudCA9IGFyZ3Muc2l6ZSgpO1xu
Iik7CkBAIC0xNDgyLDYgKzE0ODcsMTIgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5j
dGlvbkNhbGwoKQogICAgIG15ICRwb2RUeXBlID0gc2hpZnQ7CiAgICAgbXkgJGltcGxDbGFzc05h
bWUgPSBzaGlmdDsKIAorICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkN1c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgeworICAgICAgICAkZnVuY3Rpb25T
dHJpbmcgLj0gIiwgIiBpZiAkcGFyYW1JbmRleDsKKyAgICAgICAgKyskcGFyYW1JbmRleDsKKyAg
ICAgICAgJGZ1bmN0aW9uU3RyaW5nIC49ICImY2FsbFN0YWNrIjsKKyAgICB9CisKICAgICBpZiAo
QHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSB7CiAgICAgICAgICRmdW5jdGlvblN0cmlu
ZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OwogICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gImVj
IjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggODRiYWRi
MS4uOWM0YzkyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
QEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJT
Y3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlICJT
eXN0ZW1UaW1lLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCkBAIC0xNzAsMTggKzE3MSwy
OSBAQCBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2UgewogICAgIHsKICAgICB9CiAKLSAgICBDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VMZXZlbCBsLCBFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIHVuc2lnbmVkIGxpLCBjb25zdCBTdHJpbmcmIHUsIHVuc2ln
bmVkIGcpCisgICAgQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZSBzLCBNZXNzYWdlTGV2ZWwg
bCwgU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2ssIHVuc2lnbmVkIGcsIGJvb2wgc3RvcmVUcmFj
ZSA9IGZhbHNlKQogICAgICAgICA6IHNvdXJjZShzKQogICAgICAgICAsIGxldmVsKGwpCi0gICAg
ICAgICwgd3JhcHBlZEFyZ3VtZW50cyhhcmdzLnNpemUoKSkKLSAgICAgICAgLCBsaW5lKGxpKQot
ICAgICAgICAsIHVybCh1KQorICAgICAgICAsIHdyYXBwZWRBcmd1bWVudHMoY2FsbFN0YWNrLT5h
dCgwKS5hcmd1bWVudENvdW50KCkpCisgICAgICAgICwgZnJhbWVzKHN0b3JlVHJhY2UgPyBjYWxs
U3RhY2stPnNpemUoKSA6IDApCiAgICAgICAgICwgZ3JvdXBMZXZlbChnKQogICAgICAgICAsIHJl
cGVhdENvdW50KDEpCiAgICAgeworICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RD
YWxsZXIgPSBjYWxsU3RhY2stPmF0KDApOworICAgICAgICBsaW5lID0gbGFzdENhbGxlci5saW5l
TnVtYmVyKCk7CisgICAgICAgIHVybCA9IGxhc3RDYWxsZXIuc291cmNlVVJMKCkuc3RyaW5nKCk7
CisKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3csIGp1c3Qgc3RvcmUgZnVuY3Rpb24gbmFtZXMg
YXMgc3RyaW5ncy4KKyAgICAgICAgLy8gQXMgU2NyaXB0U3RhY2tGcmFtZSBncm93cyBtb3JlIG1l
bWJlcnMsIHJlZmFjdG9yIHRvIHN0b3JlIGxpbmUgbnVtYmVyCisgICAgICAgIC8vIGFuZCBzb3Vy
Y2UgVVJMIGluZm9ybWF0aW9uLgorICAgICAgICBpZiAoc3RvcmVUcmFjZSkKKyAgICAgICAgICAg
IGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGNhbGxTdGFjay0+c2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICAgICAgZnJhbWVzW2ldID0gY2FsbFN0YWNrLT5hdChpKS5mdW5jdGlvbk5hbWUoKTsKKwog
ICAgICAgICBKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmdzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgd3JhcHBlZEFyZ3VtZW50c1tpXSA9
IEpTSW5zcGVjdGVkT2JqZWN0V3JhcHBlcjo6d3JhcChleGVjLCBhcmdzLmF0KGV4ZWMsIGkpKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGFzdENhbGxlci5hcmd1bWVudENv
dW50KCk7ICsraSkKKyAgICAgICAgICAgIHdyYXBwZWRBcmd1bWVudHNbaV0gPSBKU0luc3BlY3Rl
ZE9iamVjdFdyYXBwZXI6OndyYXAoY2FsbFN0YWNrLT5zdGF0ZSgpLCBsYXN0Q2FsbGVyLmFyZ3Vt
ZW50QXQoaSkuanNWYWx1ZSgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc0VxdWFsKEV4ZWNT
dGF0ZSogZXhlYywgQ29uc29sZU1lc3NhZ2UqIG1zZykgY29uc3QKQEAgLTIwOCw2ICsyMjAsNyBA
QCBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2UgewogICAgIE1lc3NhZ2VMZXZlbCBsZXZlbDsKICAgICBT
dHJpbmcgbWVzc2FnZTsKICAgICBWZWN0b3I8UHJvdGVjdGVkUHRyPEpTVmFsdWU+ID4gd3JhcHBl
ZEFyZ3VtZW50czsKKyAgICBWZWN0b3I8VVN0cmluZz4gZnJhbWVzOwogICAgIHVuc2lnbmVkIGxp
bmU7CiAgICAgU3RyaW5nIHVybDsKICAgICB1bnNpZ25lZCBncm91cExldmVsOwpAQCAtMTI5OSwx
MiArMTMxMiwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFdpbmRvd1Zpc2libGUo
Ym9vbCB2aXNpYmxlLCBib29sIGF0dGFjaGVkKQogICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IEN1
cnJlbnRQYW5lbDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRNZXNzYWdlVG9D
b25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkTWVz
c2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBT
Y3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaykKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYWRkQ29uc29sZU1lc3NhZ2UoZXhlYywgbmV3IENvbnNvbGVNZXNz
YWdlKHNvdXJjZSwgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cywgbGluZU51bWJlciwgc291cmNlVVJM
LCBtX2dyb3VwTGV2ZWwpKTsKKyAgICBhZGRDb25zb2xlTWVzc2FnZShjYWxsU3RhY2stPnN0YXRl
KCksIG5ldyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBjYWxsU3RhY2ssIG1fZ3JvdXBM
ZXZlbCwgbGV2ZWwgPT0gVHJhY2VNZXNzYWdlTGV2ZWwpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNz
YWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKQEAgLTEzNTAsMTEgKzEzNjMsMTEgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjp0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZykK
ICAgICBjYWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgInNldFJl
Y29yZGluZ1Byb2ZpbGUiLCAxLCAmaXNQcm92aW5nVmFsdWUsIGV4Y2VwdGlvbik7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwg
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
OjpzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxT
dGFjaykKIHsgICAgCiAgICAgKyttX2dyb3VwTGV2ZWw7CiAKLSAgICBhZGRDb25zb2xlTWVzc2Fn
ZShleGVjLCBuZXcgQ29uc29sZU1lc3NhZ2Uoc291cmNlLCBTdGFydEdyb3VwTWVzc2FnZUxldmVs
LCBleGVjLCBhcmd1bWVudHMsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCwgbV9ncm91cExldmVsKSk7
CisgICAgYWRkQ29uc29sZU1lc3NhZ2UoY2FsbFN0YWNrLT5zdGF0ZSgpLCBuZXcgQ29uc29sZU1l
c3NhZ2Uoc291cmNlLCBTdGFydEdyb3VwTWVzc2FnZUxldmVsLCBjYWxsU3RhY2ssIG1fZ3JvdXBM
ZXZlbCkpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuZEdyb3VwKE1lc3NhZ2VT
b3VyY2Ugc291cmNlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVS
TCkKQEAgLTIxODUsNyArMjE5OCwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNj
cmlwdENvbnNvbGVNZXNzYWdlKGNvbnN0IENvbnNvbGVNZXNzYWdlKiBtZXNzYWdlKQogICAgIGFy
Z3VtZW50c1thcmd1bWVudENvdW50KytdID0gZ3JvdXBMZXZlbFZhbHVlOwogICAgIGFyZ3VtZW50
c1thcmd1bWVudENvdW50KytdID0gcmVwZWF0Q291bnRWYWx1ZTsKIAotICAgIGlmICghbWVzc2Fn
ZS0+d3JhcHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIW1lc3NhZ2UtPmZyYW1l
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgcmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50
cyA9IG1heGltdW1NZXNzYWdlQXJndW1lbnRzIC0gYXJndW1lbnRDb3VudDsKKyAgICAgICAgdW5z
aWduZWQgYXJndW1lbnRzVG9BZGQgPSBtaW4ocmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50cywgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1lc3NhZ2UtPmZyYW1lcy5zaXplKCkpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50c1RvQWRkOyArK2kpCisgICAgICAgICAgICBh
cmd1bWVudHNbYXJndW1lbnRDb3VudCsrXSA9IEpTVmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29u
dGV4dCwganNTdHJpbmdSZWYobWVzc2FnZS0+ZnJhbWVzW2ldKS5nZXQoKSk7CisgICAgfSBlbHNl
IGlmICghbWVzc2FnZS0+d3JhcHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgdW5z
aWduZWQgcmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50cyA9IG1heGltdW1NZXNzYWdlQXJndW1lbnRz
IC0gYXJndW1lbnRDb3VudDsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzVG9BZGQgPSBtaW4o
cmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1lc3NhZ2Ut
PndyYXBwZWRBcmd1bWVudHMuc2l6ZSgpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudHNUb0FkZDsgKytpKQpAQCAtMjc4Niw5ICsyODA0LDkgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CiAgICAgZHJhd0hpZ2hsaWdodEZvckJveGVzKGNvbnRleHQsIGxpbmVCb3hRdWFk
cywgYWJzQ29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJn
aW5RdWFkKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb3VudChjb25zdCBVU3Ry
aW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkK
K3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6Y291bnQoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5z
aWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKIHsKLSAgICBTdHJpbmcg
aWRlbnRpZmllciA9IFN0cmluZyh0aXRsZSkgKyBTdHJpbmc6OmZvcm1hdCgiQCVzOiVkIiwgc291
cmNlSUQudXRmOCgpLmRhdGEoKSwgbGluZU51bWJlcik7CisgICAgU3RyaW5nIGlkZW50aWZpZXIg
PSB0aXRsZSArIFN0cmluZzo6Zm9ybWF0KCJAJXM6JWQiLCBzb3VyY2VJRC51dGY4KCkuZGF0YSgp
LCBsaW5lTnVtYmVyKTsKICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQ+OjppdGVyYXRvciBp
dCA9IG1fY291bnRzLmZpbmQoaWRlbnRpZmllcik7CiAgICAgaW50IGNvdW50OwogICAgIGlmIChp
dCA9PSBtX2NvdW50cy5lbmQoKSkKQEAgLTI4MDAsMTYgKzI4MTgsMTYgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpjb3VudChjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51
bWJlciwgY29uc3QKIAogICAgIG1fY291bnRzLmFkZChpZGVudGlmaWVyLCBjb3VudCk7CiAKLSAg
ICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCIlczogJWQiLCB0aXRsZS5VVEY4U3Ry
aW5nKCkuY19zdHIoKSwgY291bnQpOworICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3Jt
YXQoIiVzOiAlZCIsIHRpdGxlLnV0ZjgoKS5kYXRhKCksIGNvdW50KTsKICAgICBhZGRNZXNzYWdl
VG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5l
TnVtYmVyLCBzb3VyY2VJRCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRU
aW1pbmcoY29uc3QgVVN0cmluZyYgdGl0bGUpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0
YXJ0VGltaW5nKGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgbV90aW1lcy5hZGQodGl0bGUs
IGN1cnJlbnRUaW1lKCkgKiAxMDAwKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpz
dG9wVGltaW5nKGNvbnN0IFVTdHJpbmcmIHRpdGxlLCBkb3VibGUmIGVsYXBzZWQpCitib29sIElu
c3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91Ymxl
JiBlbGFwc2VkKQogewogICAgIEhhc2hNYXA8U3RyaW5nLCBkb3VibGU+OjppdGVyYXRvciBpdCA9
IG1fdGltZXMuZmluZCh0aXRsZSk7CiAgICAgaWYgKGl0ID09IG1fdGltZXMuZW5kKCkpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZjRkMjQ3Mi4uMDU2YWU5MSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjEsNiArNjEsNyBA
QCBjbGFzcyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFz
cyBSZXNvdXJjZUVycm9yOworY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogY2xhc3MgU2hhcmVkQnVm
ZmVyOwogCiBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2U7CkBAIC0xNjAsNyArMTYxLDcgQEAgcHVibGlj
OgogICAgIGJvb2wgd2luZG93VmlzaWJsZSgpOwogICAgIHZvaWQgc2V0V2luZG93VmlzaWJsZShi
b29sIHZpc2libGUgPSB0cnVlLCBib29sIGF0dGFjaGVkID0gZmFsc2UpOwogCi0gICAgdm9pZCBh
ZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3VtZW50cywgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CisgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAgdm9p
ZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlEKTsKICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAgICAgdm9pZCB0b2dnbGVS
ZWNvcmRCdXR0b24oYm9vbCk7CkBAIC0yMzcsMTIgKzIzOCwxMiBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGRyYXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIAotICAg
IHZvaWQgY291bnQoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJl
ciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CisgICAgdm9pZCBjb3VudChjb25zdCBTdHJpbmcm
IHRpdGxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKIAot
ICAgIHZvaWQgc3RhcnRUaW1pbmcoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSk7Ci0gICAgYm9v
bCBzdG9wVGltaW5nKGNvbnN0IEpTQzo6VVN0cmluZyYgdGl0bGUsIGRvdWJsZSYgZWxhcHNlZCk7
CisgICAgdm9pZCBzdGFydFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICBib29sIHN0
b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlJiBlbGFwc2VkKTsKIAotICAgIHZv
aWQgc3RhcnRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCk7CisgICAgdm9pZCBzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxGcmFtZSk7CiAgICAgdm9pZCBlbmRHcm91cChN
ZXNzYWdlU291cmNlIHNvdXJjZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL0NvbnNvbGUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5q
cwppbmRleCBhNDA1ZGIzLi4yMzMzZjQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQ29uc29sZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29u
c29sZS5qcwpAQCAtNjA0LDcgKzYwNCw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSA9
IGZ1bmN0aW9uKHNvdXJjZSwgbGV2ZWwsIGxpbmUsIHVybCwgZ3JvdXBMZXZlbCwgcmVwCiAgICAg
ICAgICAgICBzcGFuLmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtZm9ybWF0dGVkLXRyYWNlIik7CiAg
ICAgICAgICAgICB2YXIgc3RhY2sgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVu
dHMsIDYpOwogICAgICAgICAgICAgdmFyIGZ1bmNOYW1lcyA9IHN0YWNrLm1hcChmdW5jdGlvbihm
KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGYubmFtZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGYgfHwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKGZ1bmNOYW1lcy5qb2luKCJcbiIpKSk7CiAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZE1l
c3NhZ2UgPSBzcGFuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwIGIvV2Vi
Q29yZS9wYWdlL0NvbnNvbGUuY3BwCmluZGV4IGJmZTQ5YTMuLmJhOWJkOWQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9Db25zb2xlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAK
QEAgLTM1LDE5ICszNSwxNSBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAi
RnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUg
IkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlz
dC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNPYmplY3QuaD4KLSNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRlci5oPgorI2lmIFVT
RShKU0MpCiAjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KKyNlbmRpZgorI2luY2x1ZGUg
IlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLXVzaW5nIG5hbWVzcGFj
ZSBKU0M7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29uc29sZTo6Q29uc29sZShGcmFtZSog
ZnJhbWUpCkBAIC03MCw2ICs2NiwxOCBAQCBzdGF0aWMgdm9pZCBwcmludFNvdXJjZVVSTEFuZExp
bmUoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIpCiAgICAgfQog
fQogCitzdGF0aWMgYm9vbCBnZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcoY29uc3QgU2NyaXB0Q2Fs
bEZyYW1lJiBjYWxsRnJhbWUsIFN0cmluZyYgcmVzdWx0LCBib29sIGNoZWNrRm9yTnVsbE9yVW5k
ZWZpbmVkID0gZmFsc2UpCit7CisgICAgaWYgKCFjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUgPSBj
YWxsRnJhbWUuYXJndW1lbnRBdCgwKTsKKyAgICBpZiAoY2hlY2tGb3JOdWxsT3JVbmRlZmluZWQg
JiYgKHZhbHVlLmlzTnVsbCgpIHx8IHZhbHVlLmlzVW5kZWZpbmVkKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdmFsdWUuZ2V0U3RyaW5nKHJlc3VsdCk7Cit9CisKIHN0
YXRpYyB2b2lkIHByaW50TWVzc2FnZVNvdXJjZUFuZExldmVsUHJlZml4KE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwpCiB7CiAgICAgY29uc3QgY2hhciogc291cmNlU3Ry
aW5nOwpAQCAtMTE5LDggKzEyNywxNyBAQCBzdGF0aWMgdm9pZCBwcmludE1lc3NhZ2VTb3VyY2VB
bmRMZXZlbFByZWZpeChNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsCiAgICAgcHJp
bnRmKCIlcyAlczoiLCBzb3VyY2VTdHJpbmcsIGxldmVsU3RyaW5nKTsKIH0KIAotc3RhdGljIHZv
aWQgcHJpbnRUb1N0YW5kYXJkT3V0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwg
bGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVu
c2lnbmVkIGxpbmVOdW1iZXIpCit2b2lkIENvbnNvbGU6OmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNp
Z25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKKyAgICBQYWdlKiBw
YWdlID0gdGhpcy0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHNvdXJjZSA9PSBKU01lc3NhZ2VTb3VyY2UgfHwgc291cmNlID09IFdNTE1lc3NhZ2VT
b3VyY2UpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWRkTWVzc2FnZVRvQ29u
c29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworCisgICAgcGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgbGV2ZWwsIG1lc3Nh
Z2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisKICAgICBpZiAoIUNvbnNvbGU6OnNob3VsZFBy
aW50RXhjZXB0aW9ucygpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEzMCwyODggKzE0NywxOTEg
QEAgc3RhdGljIHZvaWQgcHJpbnRUb1N0YW5kYXJkT3V0KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBN
ZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFMKICAgICBwcmludGYoIiAlc1xuIiwgbWVzc2FnZS51
dGY4KCkuZGF0YSgpKTsKIH0KIAotc3RhdGljIHZvaWQgcHJpbnRUb1N0YW5kYXJkT3V0KE1lc3Nh
Z2VMZXZlbCBsZXZlbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzLCBjb25z
dCBLVVJMJiB1cmwpCi17Ci0gICAgaWYgKCFDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMo
KSkKK3ZvaWQgQ29uc29sZTo6YWRkTWVzc2FnZShNZXNzYWdlTGV2ZWwgbGV2ZWwsIFNjcmlwdENh
bGxTdGFjayogY2FsbFN0YWNrLCBib29sIGFjY2VwdE5vQXJndW1lbnRzKSB7CisgICAgUGFnZSog
cGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHByaW50U291cmNlVVJMQW5kTGluZSh1cmwucHJldHR5VVJMKCksIDApOwotICAgIHByaW50
TWVzc2FnZVNvdXJjZUFuZExldmVsUHJlZml4KEpTTWVzc2FnZVNvdXJjZSwgbGV2ZWwpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFVT
dHJpbmcgYXJnQXNTdHJpbmcgPSBhcmdzLmF0KGV4ZWMsIGkpLT50b1N0cmluZyhleGVjKTsKLSAg
ICAgICAgcHJpbnRmKCIgJXMiLCBhcmdBc1N0cmluZy5VVEY4U3RyaW5nKCkuY19zdHIoKSk7Ci0g
ICAgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotfQorICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYg
bGFzdENhbGxlciA9IGNhbGxTdGFjay0+YXQoMCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXRy
aWV2ZUxhc3RDYWxsZXIoRXhlY1N0YXRlKiBleGVjLCBLVVJMJiB1cmwsIHVuc2lnbmVkJiBsaW5l
TnVtYmVyKQotewotICAgIGludCBzaWduZWRMaW5lTnVtYmVyOwotICAgIGludHB0cl90IHNvdXJj
ZUlEOwotICAgIFVTdHJpbmcgdXJsU3RyaW5nOwotICAgIEpTVmFsdWUqIGZ1bmN0aW9uOworICAg
IGlmICghYWNjZXB0Tm9Bcmd1bWVudHMgJiYgIWxhc3RDYWxsZXIuYXJndW1lbnRDb3VudCgpKQor
ICAgICAgICByZXR1cm47CiAKLSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUxhc3RD
YWxsZXIoZXhlYywgc2lnbmVkTGluZU51bWJlciwgc291cmNlSUQsIHVybFN0cmluZywgZnVuY3Rp
b24pOworICAgIFN0cmluZyBtZXNzYWdlOworICAgIGlmIChnZXRGaXJzdEFyZ3VtZW50QXNTdHJp
bmcobGFzdENhbGxlciwgbWVzc2FnZSkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNzYWdlLCBsYXN0Q2FsbGVyLmxpbmVOdW1iZXIoKSwg
bGFzdENhbGxlci5zb3VyY2VVUkwoKS5wcmV0dHlVUkwoKSk7CiAKLSAgICB1cmwgPSBLVVJMKHVy
bFN0cmluZyk7Ci0gICAgbGluZU51bWJlciA9IChzaWduZWRMaW5lTnVtYmVyID49IDAgPyBzaWdu
ZWRMaW5lTnVtYmVyIDogMCk7Ci19CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5h
ZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgbGV2ZWwsIGNhbGxTdGFjayk7CiAK
LXZvaWQgQ29uc29sZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxl
dmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKQotewotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7
Ci0gICAgaWYgKCFwYWdlKQorICAgIGlmICghQ29uc29sZTo6c2hvdWxkUHJpbnRFeGNlcHRpb25z
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzb3VyY2UgPT0gSlNNZXNzYWdlU291cmNl
IHx8IHNvdXJjZSA9PSBXTUxNZXNzYWdlU291cmNlKQotICAgICAgICBwYWdlLT5jaHJvbWUoKS0+
Y2xpZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgc291cmNl
VVJMKTsKLQotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29u
c29sZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOworICAg
IHByaW50U291cmNlVVJMQW5kTGluZShsYXN0Q2FsbGVyLnNvdXJjZVVSTCgpLnByZXR0eVVSTCgp
LCAwKTsKKyAgICBwcmludE1lc3NhZ2VTb3VyY2VBbmRMZXZlbFByZWZpeChKU01lc3NhZ2VTb3Vy
Y2UsIGxldmVsKTsKIAotICAgIHByaW50VG9TdGFuZGFyZE91dChzb3VyY2UsIGxldmVsLCBtZXNz
YWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsYXN0Q2FsbGVyLmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBhcmdB
c1N0cmluZzsKKyAgICAgICAgaWYgKGxhc3RDYWxsZXIuYXJndW1lbnRBdChpKS5nZXRTdHJpbmco
YXJnQXNTdHJpbmcpKQorICAgICAgICAgICAgcHJpbnRmKCIgJXMiLCBhcmdBc1N0cmluZy51dGY4
KCkuZGF0YSgpKTsKKyAgICB9CisgICAgcHJpbnRmKCJcbiIpOwogfQogCi12b2lkIENvbnNvbGU6
OmRlYnVnKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29s
ZTo6ZGVidWcoU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2spCiB7CiAgICAgLy8gSW4gRmlyZWJ1
ZywgY29uc29sZS5kZWJ1ZyBoYXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgY29uc29sZS5sb2cuIFNv
IHdlJ2xsIGRvIHRoZSBzYW1lLgotICAgIGxvZyhleGVjLCBhcmdzKTsKKyAgICBsb2coY2FsbFN0
YWNrKTsKIH0KIAotdm9pZCBDb25zb2xlOjplcnJvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6OmVycm9yKFNjcmlwdENhbGxTdGFjayogY2FsbFN0
YWNrKQogewotICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmcoZXhl
Yyk7Ci0KLSAgICBLVVJMIHVybDsKLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwotICAgIHJldHJp
ZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxpbmVOdW1iZXIpOwotCi0gICAgcGFnZS0+Y2hyb21l
KCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHVy
bC5wcmV0dHlVUkwoKSk7Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRNZXNz
YWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFy
Z3MsIGxpbmVOdW1iZXIsIHVybC5zdHJpbmcoKSk7Ci0KLSAgICBwcmludFRvU3RhbmRhcmRPdXQo
RXJyb3JNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIHVybCk7CisgICAgYWRkTWVzc2FnZShFcnJv
ck1lc3NhZ2VMZXZlbCwgY2FsbFN0YWNrKTsKIH0KIAotdm9pZCBDb25zb2xlOjppbmZvKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6aW5mbyhTY3Jp
cHRDYWxsU3RhY2sqIGNhbGxTdGFjaykKIHsKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYgKCFw
YWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgbWVzc2FnZSA9IGFyZ3MuYXQoZXhl
YywgMCktPnRvU3RyaW5nKGV4ZWMpOwotCi0gICAgS1VSTCB1cmw7Ci0gICAgdW5zaWduZWQgbGlu
ZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgdXJsLCBsaW5lTnVtYmVyKTsK
LQotICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShtZXNz
YWdlLCBsaW5lTnVtYmVyLCB1cmwucHJldHR5VVJMKCkpOwotICAgIHBhZ2UtPmluc3BlY3RvckNv
bnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3Nh
Z2VMZXZlbCwgZXhlYywgYXJncywgbGluZU51bWJlciwgdXJsLnN0cmluZygpKTsKLQotICAgIHBy
aW50VG9TdGFuZGFyZE91dChMb2dNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIHVybCk7CisgICAg
bG9nKGNhbGxTdGFjayk7CiB9CiAKLXZvaWQgQ29uc29sZTo6bG9nKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6bG9nKFNjcmlwdENhbGxTdGFjayog
Y2FsbFN0YWNrKQogewotICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJp
bmcoZXhlYyk7Ci0KLSAgICBLVVJMIHVybDsKLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwotICAg
IHJldHJpZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxpbmVOdW1iZXIpOwotCi0gICAgcGFnZS0+
Y2hyb21lKCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1i
ZXIsIHVybC5wcmV0dHlVUkwoKSk7Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5h
ZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVsLCBleGVj
LCBhcmdzLCBsaW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOwotCi0gICAgcHJpbnRUb1N0YW5kYXJk
T3V0KExvZ01lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgdXJsKTsKKyAgICBhZGRNZXNzYWdlKExv
Z01lc3NhZ2VMZXZlbCwgY2FsbFN0YWNrKTsKIH0KIAotdm9pZCBDb25zb2xlOjpkaXIoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjpkaXIoU2NyaXB0
Q2FsbFN0YWNrKiBjYWxsU3RhY2spCiB7Ci0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5h
ZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgT2JqZWN0TWVzc2FnZUxldmVsLCBl
eGVjLCBhcmdzLCAwLCBTdHJpbmcoKSk7CisgICAgYWRkTWVzc2FnZShPYmplY3RNZXNzYWdlTGV2
ZWwsIGNhbGxTdGFjayk7CiB9CiAKLXZvaWQgQ29uc29sZTo6ZGlyeG1sKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6ZGlyeG1sKFNjcmlwdENhbGxT
dGFjayogY2FsbFN0YWNrKQogewotICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVz
c2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIE5vZGVNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFy
Z3MsIDAsIFN0cmluZygpKTsKKyAgICBhZGRNZXNzYWdlKE5vZGVNZXNzYWdlTGV2ZWwsIGNhbGxT
dGFjayk7CiB9CiAKLXZvaWQgQ29uc29sZTo6dHJhY2UoRXhlY1N0YXRlKiBleGVjKQordm9pZCBD
b25zb2xlOjp0cmFjZShTY3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaykKIHsKLSAgICBQYWdlKiBw
YWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOworICAg
IGFkZE1lc3NhZ2UoVHJhY2VNZXNzYWdlTGV2ZWwsIGNhbGxTdGFjaywgdHJ1ZSk7CiAKLSAgICBp
bnQgc2lnbmVkTGluZU51bWJlcjsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRDsKLSAgICBVU3RyaW5n
IHVybFN0cmluZzsKLSAgICBKU1ZhbHVlKiBmdW5jOwotCi0gICAgZXhlYy0+aW50ZXJwcmV0ZXIo
KS0+cmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNvdXJjZUlELCB1
cmxTdHJpbmcsIGZ1bmMpOworICAgIGlmICghc2hvdWxkUHJpbnRFeGNlcHRpb25zKCkpCisgICAg
ICAgIHJldHVybjsKIAotICAgIEFyZ0xpc3QgYXJnczsKLSAgICB3aGlsZSAoIWZ1bmMtPmlzTnVs
bCgpKSB7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKGZ1bmMpOwotICAgICAgICBmdW5jID0gZXhlYy0+
aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVDYWxsZXIoZXhlYywgYXNJbnRlcm5hbEZ1bmN0aW9uKGZ1
bmMpKTsKKyAgICBwcmludGYoIlN0YWNrIFRyYWNlXG4iKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY2FsbFN0YWNrLT5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJpbmcgZnVuY3Rp
b25OYW1lID0gU3RyaW5nKGNhbGxTdGFjay0+YXQoaSkuZnVuY3Rpb25OYW1lKCkpOworICAgICAg
ICBwcmludGYoIlx0JXNcbiIsIGZ1bmN0aW9uTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICB9Ci0g
ICAgCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xl
KEpTTWVzc2FnZVNvdXJjZSwgVHJhY2VNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIDAsIFN0cmlu
ZygpKTsKIH0KIAotdm9pZCBDb25zb2xlOjphc3NlcnRDb25kaXRpb24oYm9vbCBjb25kaXRpb24s
IEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6YXNz
ZXJ0Q29uZGl0aW9uKGJvb2wgY29uZGl0aW9uLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaykK
IHsKICAgICBpZiAoY29uZGl0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBQYWdlKiBwYWdl
ID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
S1VSTCB1cmw7Ci0gICAgdW5zaWduZWQgbGluZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxs
ZXIoZXhlYywgdXJsLCBsaW5lTnVtYmVyKTsKLQogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTM1PiBJdCB3b3VsZCBiZSBuaWNlIHRvIHBy
ZWZpeCBhc3NlcnRpb24gZmFpbHVyZXMgd2l0aCBhIG1lc3NhZ2UgbGlrZSAiQXNzZXJ0aW9uIGZh
aWxlZDogIi4KLSAgICAvLyBGSVhNRTogPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTEzNj4gV2Ugc2hvdWxkIHByaW50IGEgbWVzc2FnZSBldmVuIHdoZW4gYXJncy5p
c0VtcHR5KCkgaXMgdHJ1ZS4KLQotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRk
TWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIEVycm9yTWVzc2FnZUxldmVsLCBleGVj
LCBhcmdzLCBsaW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOwotCi0gICAgcHJpbnRUb1N0YW5kYXJk
T3V0KEVycm9yTWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCB1cmwpOworICAgIGFkZE1lc3NhZ2Uo
RXJyb3JNZXNzYWdlTGV2ZWwsIGNhbGxTdGFjaywgdHJ1ZSk7CiB9CiAKLXZvaWQgQ29uc29sZTo6
Y291bnQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xl
Ojpjb3VudChTY3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaykKIHsKICAgICBQYWdlKiBwYWdlID0g
dGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgS1VS
TCB1cmw7Ci0gICAgdW5zaWduZWQgbGluZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIo
ZXhlYywgdXJsLCBsaW5lTnVtYmVyKTsKKyAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RD
YWxsZXIgPSBjYWxsU3RhY2stPmF0KDApOworICAgIC8vIEZvbGxvdyBGaXJlYnVnJ3MgYmVoYXZp
b3Igb2YgY291bnRpbmcgd2l0aCBudWxsIGFuZCB1bmRlZmluZWQgdGl0bGUgaW4KKyAgICAvLyB0
aGUgc2FtZSBidWNrZXQgYXMgbm8gYXJndW1lbnQKKyAgICBTdHJpbmcgdGl0bGU7CisgICAgZ2V0
Rmlyc3RBcmd1bWVudEFzU3RyaW5nKGxhc3RDYWxsZXIsIHRpdGxlKTsKIAotICAgIFVTdHJpbmcg
dGl0bGU7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID49IDEpCi0gICAgICAgIHRpdGxlID0gdmFsdWVU
b1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIDApKTsK
LQotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+Y291bnQodGl0bGUsIGxpbmVOdW1i
ZXIsIHVybC5zdHJpbmcoKSk7CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5jb3Vu
dCh0aXRsZSwgbGFzdENhbGxlci5saW5lTnVtYmVyKCksIGxhc3RDYWxsZXIuc291cmNlVVJMKCku
c3RyaW5nKCkpOwogfQogCi12b2lkIENvbnNvbGU6OnByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQorI2lmIFVTRShKU0MpCisKK3ZvaWQgQ29uc29sZTo6cHJvZmls
ZShjb25zdCBKU0M6OlVTdHJpbmcmIHRpdGxlLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaykK
IHsKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKHRpdGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisK
ICAgICAvLyBGSVhNRTogbG9nIGEgY29uc29sZSBtZXNzYWdlIHdoZW4gcHJvZmlsaW5nIGlzIGRp
c2FibGVkLgogICAgIGlmICghcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5wcm9maWxlckVu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVVN0cmluZyB0aXRsZSA9IGFyZ3MuYXQo
ZXhlYywgMCktPnRvU3RyaW5nKGV4ZWMpOwotICAgIFByb2ZpbGVyOjpwcm9maWxlcigpLT5zdGFy
dFByb2ZpbGluZyhleGVjLCB0aXRsZSk7CisgICAgSlNDOjpQcm9maWxlcjo6cHJvZmlsZXIoKS0+
c3RhcnRQcm9maWxpbmcoY2FsbFN0YWNrLT5zdGF0ZSgpLCB0aXRsZSk7CiB9CiAKLXZvaWQgQ29u
c29sZTo6cHJvZmlsZUVuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit2
b2lkIENvbnNvbGU6OnByb2ZpbGVFbmQoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSwgU2NyaXB0
Q2FsbFN0YWNrKiBjYWxsU3RhY2spCiB7CiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsK
ICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghcGFnZS0+aW5zcGVj
dG9yQ29udHJvbGxlcigpLT5wcm9maWxlckVuYWJsZWQoKSkKKyAgICBpZiAodGl0bGUuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVTdHJpbmcgdGl0bGU7Ci0gICAgaWYgKGFyZ3Mu
c2l6ZSgpID49IDEpCi0gICAgICAgIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhleGVjLCBhcmdzLmF0KGV4ZWMsIDApKTsKKyAgICBpZiAoIXBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+cHJvZmlsZXJFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxQcm9maWxlPiBwcm9maWxlID0gUHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0b3BQ
cm9maWxpbmcoZXhlYywgdGl0bGUpOworICAgIFJlZlB0cjxKU0M6OlByb2ZpbGU+IHByb2ZpbGUg
PSBKU0M6OlByb2ZpbGVyOjpwcm9maWxlcigpLT5zdG9wUHJvZmlsaW5nKGNhbGxTdGFjay0+c3Rh
dGUoKSwgdGl0bGUpOwogICAgIGlmICghcHJvZmlsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9wcm9maWxlcy5hcHBlbmQocHJvZmlsZSk7CiAKICAgICBpZiAoUGFnZSogcGFnZSA9IHRoaXMt
PnBhZ2UoKSkgewotICAgICAgICBLVVJMIHVybDsKLSAgICAgICAgdW5zaWduZWQgbGluZU51bWJl
cjsKLSAgICAgICAgcmV0cmlldmVMYXN0Q2FsbGVyKGV4ZWMsIHVybCwgbGluZU51bWJlcik7Ci0K
LSAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRQcm9maWxlKHByb2ZpbGUs
IGxpbmVOdW1iZXIsIHVybCk7CisgICAgICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENh
bGxlciA9IGNhbGxTdGFjay0+YXQoMCk7CisgICAgICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS0+YWRkUHJvZmlsZShwcm9maWxlLCBsYXN0Q2FsbGVyLmxpbmVOdW1iZXIoKSwgbGFzdENh
bGxlci5zb3VyY2VVUkwoKSk7CiAgICAgfQogfQogCi12b2lkIENvbnNvbGU6OnRpbWUoY29uc3Qg
VVN0cmluZyYgdGl0bGUpCi17Ci0gICAgaWYgKHRpdGxlLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm47CisjZW5kaWYKICAgICAKK3ZvaWQgQ29uc29sZTo6dGltZShjb25zdCBTdHJpbmcmIHRpdGxl
KQorewogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBGb2xsb3cgRmlyZWJ1ZydzIGJlaGF2aW9yIG9mIHJlcXVp
cmluZyBhIHRpdGxlIHRoYXQgaXMgbm90IG51bGwgb3IKKyAgICAvLyB1bmRlZmluZWQgZm9yIHRp
bWluZyBmdW5jdGlvbnMKKyAgICBpZiAodGl0bGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnN0YXJ0VGltaW5nKHRpdGxl
KTsKIH0KIAotdm9pZCBDb25zb2xlOjp0aW1lRW5kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJn
TGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6dGltZUVuZChjb25zdCBTdHJpbmcmIHRpdGxlLCBT
Y3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaykKIHsKLSAgICBVU3RyaW5nIHRpdGxlOwotICAgIGlm
IChhcmdzLnNpemUoKSA+PSAxKQotICAgICAgICB0aXRsZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywgYXJncy5hdChleGVjLCAwKSk7Ci0gICAgaWYgKHRpdGxl
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFn
ZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRm9sbG93IEZp
cmVidWcncyBiZWhhdmlvciBvZiByZXF1aXJpbmcgYSB0aXRsZSB0aGF0IGlzIG5vdCBudWxsIG9y
CisgICAgLy8gdW5kZWZpbmVkIGZvciB0aW1pbmcgZnVuY3Rpb25zCisgICAgaWYgKHRpdGxlLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm47CisKICAgICBkb3VibGUgZWxhcHNlZDsKICAgICBpZiAo
IXBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c3RvcFRpbWluZyh0aXRsZSwgZWxhcHNlZCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nKHRpdGxlKSAr
IFN0cmluZzo6Zm9ybWF0KCI6ICUuMGZtcyIsIGVsYXBzZWQpOwotCi0gICAgS1VSTCB1cmw7Ci0g
ICAgdW5zaWduZWQgbGluZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgdXJs
LCBsaW5lTnVtYmVyKTsKKyAgICBTdHJpbmcgbWVzc2FnZSA9IHRpdGxlICsgU3RyaW5nOjpmb3Jt
YXQoIjogJS4wZm1zIiwgZWxhcHNlZCk7CiAKLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVy
KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlTGV2ZWws
IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHVybC5zdHJpbmcoKSk7CisgICAgY29uc3QgU2NyaXB0Q2Fs
bEZyYW1lJiBsYXN0Q2FsbGVyID0gY2FsbFN0YWNrLT5hdCgwKTsKKyAgICBwYWdlLT5pbnNwZWN0
b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNlLCBMb2dN
ZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVy
LnNvdXJjZVVSTCgpLnN0cmluZygpKTsKIH0KIAotdm9pZCBDb25zb2xlOjpncm91cChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKK3ZvaWQgQ29uc29sZTo6Z3JvdXAo
U2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2spCiB7CiAgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBh
Z2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+c3RhcnRHcm91cChKU01lc3NhZ2VTb3VyY2UsIGV4ZWMsIGFyZ3Vt
ZW50cywgMCwgU3RyaW5nKCkpOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c3Rh
cnRHcm91cChKU01lc3NhZ2VTb3VyY2UsIGNhbGxTdGFjayk7CiB9CiAKIHZvaWQgQ29uc29sZTo6
Z3JvdXBFbmQoKQpAQCAtNDIzLDI1ICszNDMsOSBAQCB2b2lkIENvbnNvbGU6Omdyb3VwRW5kKCkK
ICAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmVuZEdyb3VwKEpTTWVzc2FnZVNvdXJj
ZSwgMCwgU3RyaW5nKCkpOwogfQogCi12b2lkIENvbnNvbGU6Ondhcm4oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjp3YXJuKFNjcmlwdENhbGxTdGFj
ayogY2FsbFN0YWNrKQogewotICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9T
dHJpbmcoZXhlYyk7Ci0KLSAgICBLVVJMIHVybDsKLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwot
ICAgIHJldHJpZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxpbmVOdW1iZXIpOwotCi0gICAgcGFn
ZS0+Y2hyb21lKCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVO
dW1iZXIsIHVybC5wcmV0dHlVUkwoKSk7Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5hZGRNZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgV2FybmluZ01lc3NhZ2VMZXZl
bCwgZXhlYywgYXJncywgbGluZU51bWJlciwgdXJsLnN0cmluZygpKTsKLQotICAgIHByaW50VG9T
dGFuZGFyZE91dChXYXJuaW5nTWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCB1cmwpOworICAgIGFk
ZE1lc3NhZ2UoV2FybmluZ01lc3NhZ2VMZXZlbCwgY2FsbFN0YWNrKTsKIH0KIAogc3RhdGljIGJv
b2wgcHJpbnRFeGNlcHRpb25zID0gZmFsc2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvQ29u
c29sZS5oIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaAppbmRleCBkODcxNWJhLi5iNDhhNThjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9Db25z
b2xlLmgKQEAgLTMwLDIyICszMCwyMiBAQAogI2RlZmluZSBDb25zb2xlX2gKIAogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaWYgVVNFKEpTQykKICNpbmNsdWRlIDxwcm9maWxlci9Qcm9m
aWxlLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEV4ZWNTdGF0ZTsK
LSAgICBjbGFzcyBBcmdMaXN0OwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBVU0Uo
SlNDKQogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxKU0M6OlByb2ZpbGU+ID4gUHJvZmlsZXNB
cnJheTsKKyNlbmRpZgogCiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgUGFnZTsKICAgICBj
bGFzcyBTdHJpbmc7CisgICAgY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogCiAgICAgLy8gS2VlcCBp
biBzeW5jIHdpdGggaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCiAgICAgZW51bSBNZXNz
YWdlU291cmNlIHsKQEAgLTc3LDM3ICs3Nyw0MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZVVSTCk7CiAKKyAgICAgICAgdm9pZCBkZWJ1ZyhTY3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAg
dm9pZCBlcnJvcihTY3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAgdm9pZCBpbmZvKFNjcmlwdENh
bGxTdGFjayopOworICAgICAgICB2b2lkIGxvZyhTY3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAg
dm9pZCB3YXJuKFNjcmlwdENhbGxTdGFjayopOworICAgICAgICB2b2lkIGRpcihTY3JpcHRDYWxs
U3RhY2sqKTsKKyAgICAgICAgdm9pZCBkaXJ4bWwoU2NyaXB0Q2FsbFN0YWNrKik7CisgICAgICAg
IHZvaWQgdHJhY2UoU2NyaXB0Q2FsbFN0YWNrKik7CisgICAgICAgIHZvaWQgYXNzZXJ0Q29uZGl0
aW9uKGJvb2wgY29uZGl0aW9uLCBTY3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAgdm9pZCBjb3Vu
dChTY3JpcHRDYWxsU3RhY2sqKTsKICNpZiBVU0UoSlNDKQotICAgICAgICB2b2lkIGRlYnVnKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgZXJyb3Io
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAgICAgICAgdm9pZCBpbmZv
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgbG9n
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgd2Fy
bihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAgICAgICB2b2lkIGRp
cihKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAgICAgICB2b2lkIGRp
cnhtbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJndW1lbnRzKTsKLSAg
ICAgICAgdm9pZCB0cmFjZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICB2b2lkIGFzc2VydENv
bmRpdGlvbihib29sIGNvbmRpdGlvbiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xp
c3QmKTsKLSAgICAgICAgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJn
TGlzdCYpOwotICAgICAgICB2b2lkIHByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6
OkFyZ0xpc3QmKTsKLSAgICAgICAgdm9pZCBwcm9maWxlRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgdGltZShjb25zdCBKU0M6OlVTdHJpbmcm
IHRpdGxlKTsKLSAgICAgICAgdm9pZCB0aW1lRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgZ3JvdXAoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBK
U0M6OkFyZ0xpc3QmKTsKKyAgICAgICAgdm9pZCBwcm9maWxlKGNvbnN0IEpTQzo6VVN0cmluZyYs
IFNjcmlwdENhbGxTdGFjayopOworICAgICAgICB2b2lkIHByb2ZpbGVFbmQoY29uc3QgSlNDOjpV
U3RyaW5nJiwgU2NyaXB0Q2FsbFN0YWNrKik7CisjZW5kaWYKKyAgICAgICAgdm9pZCB0aW1lKGNv
bnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIHRpbWVFbmQoY29uc3QgU3RyaW5nJiwgU2NyaXB0
Q2FsbFN0YWNrKik7CisgICAgICAgIHZvaWQgZ3JvdXAoU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAg
ICAgIHZvaWQgZ3JvdXBFbmQoKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGRQcmludEV4
Y2VwdGlvbnMoKTsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25z
KGJvb2wpOwogCisjaWYgVVNFKEpTQykKICAgICAgICAgY29uc3QgUHJvZmlsZXNBcnJheSYgcHJv
ZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVzOyB9CiAjZW5kaWYKIAogICAgIHByaXZh
dGU6CiAgICAgICAgIGlubGluZSBQYWdlKiBwYWdlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgYWRk
TWVzc2FnZShNZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayosIGJvb2wgYWNjZXB0Tm9Bcmd1
bWVudHMgPSBmYWxzZSk7CiAKICAgICAgICAgQ29uc29sZShGcmFtZSopOwogCiAgICAgICAgIEZy
YW1lKiBtX2ZyYW1lOworI2lmIFVTRShKU0MpCiAgICAgICAgIFByb2ZpbGVzQXJyYXkgbV9wcm9m
aWxlczsKKyNlbmRpZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbCBiL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbApp
bmRleCA5MDc1OTYzLi5jMDYyNjI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5p
ZGwKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCkBAIC0yOSwyNCArMjksMjcgQEAKIG1v
ZHVsZSB3aW5kb3cgewogCiAgICAgaW50ZXJmYWNlIENvbnNvbGUgewotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gQXJyYXkgcHJvZmlsZXM7ICAgICAgICAKKyNpZiAh
ZGVmaW5lZChWOF9CSU5ESU5HKQorICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbUdl
dHRlcl0gQXJyYXkgcHJvZmlsZXM7CisjZW5kaWYKICAgICAKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCBkZWJ1ZygpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGVycm9yKCk7Ci0gICAgICAgIFtDdXN0
b21dIHZvaWQgaW5mbygpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGxvZygpOwotICAgICAgICBb
Q3VzdG9tXSB2b2lkIHdhcm4oKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBkaXIoKTsKLSAgICAg
ICAgW0N1c3RvbV0gdm9pZCBkaXJ4bWwoKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB0cmFjZSgp
OwotICAgICAgICBbQ3VzdG9tLCBJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWFzc2VydENvbmRpdGlv
bl0gdm9pZCBhc3NlcnQoaW4gYm9vbGVhbiBjb25kaXRpb24pOwotICAgICAgICBbQ3VzdG9tXSB2
b2lkIGNvdW50KCk7Ci0KLSAgICAgICAgW0N1c3RvbV0gdm9pZCBwcm9maWxlKGluIERPTVN0cmlu
ZyB0aXRsZSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgcHJvZmlsZUVuZCgpOworICAgICAgICBb
Q3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBkZWJ1ZygpOworICAgICAgICBbQ3VzdG9tQXJn
dW1lbnRIYW5kbGluZ10gdm9pZCBlcnJvcigpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5k
bGluZ10gdm9pZCBpbmZvKCk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lk
IGxvZygpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCB3YXJuKCk7Cisg
ICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIGRpcigpOworICAgICAgICBbQ3Vz
dG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBkaXJ4bWwoKTsKKyAgICAgICAgW0N1c3RvbUFyZ3Vt
ZW50SGFuZGxpbmddIHZvaWQgdHJhY2UoKTsKKyAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxp
bmcsIEltcGxlbWVudGF0aW9uRnVuY3Rpb249YXNzZXJ0Q29uZGl0aW9uXSB2b2lkIGFzc2VydChp
biBib29sZWFuIGNvbmRpdGlvbik7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2
b2lkIGNvdW50KCk7CisjaWYgIWRlZmluZWQoVjhfQklORElORykKKyAgICAgICAgW0N1c3RvbUFy
Z3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZShpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRv
TnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKKyAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFu
ZGxpbmddIHZvaWQgcHJvZmlsZUVuZChpbiBbQ29udmVydFVuZGVmaW5lZE9yTnVsbFRvTnVsbFN0
cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKKyNlbmRpZgogICAgICAgICB2b2lkIHRpbWUoaW4gW0Nv
bnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZSk7Ci0gICAg
ICAgIFtDdXN0b21dIHZvaWQgdGltZUVuZCgpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGdyb3Vw
KCk7CisgICAgICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIHRpbWVFbmQoaW4gW0Nv
bnZlcnRVbmRlZmluZWRPck51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyB0aXRsZSk7CisgICAg
ICAgIFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIGdyb3VwKCk7CiAgICAgICAgIHZvaWQg
Z3JvdXBFbmQoKTsKICAgICB9OwogCg==
</data>
<flag name="review"
          id="12121"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25871</attachid>
            <date>2008-12-08 20:47:07 -0800</date>
            <delta_ts>2008-12-09 11:25:46 -0800</delta_ts>
            <desc>ScriptCallStack and ScriptCallFrame v4</desc>
            <filename>callStack.patch</filename>
            <type>text/plain</type>
            <size>62087</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkM2JkMmVlLi4zMTJjZjBkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMDgtMTItMDggIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbGxvdyBT
Y3JpcHRDYWxsRnJhbWUgcXVlcnkgbmFtZXMgb2YgZnVuY3Rpb25zIGluIHRoZSBjYWxsIHN0YWNr
LgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOiBhZGRlZCBJbnRlcm5hbEZ1bmN0aW9u
OjpuYW1lIGFuZAorICAgICAgICBVU3RyaW5nIG9wZXJhdG9yPT0oKSBhcyBleHBvcnRlZCBzeW1i
b2wKKwogMjAwOC0xMi0wOCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBub2tpYS5j
b20+CiAKICAgICAgICAgRml4IHRoZSBMaW51eCBidWlsZCB3aXRoIG5ld2VyIGdjYy9nbGliYy4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cCBiL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAppbmRleCA0M2NlMmE5Li5hMTUxNDUxIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKKysrIGIvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCkBAIC05Niw2ICs5Niw3IEBAIF9fWk4zSlNDMTBJZGVudGlm
aWVyMjRjaGVja1NhbWVJZGVudGlmaWVyVGFibGVFUE5TXzlFeGVjU3RhdGVFUE5TXzdVU3RyaW5n
M1JlcEUKIF9fWk4zSlNDMTBJZGVudGlmaWVyM2FkZEVQTlNfOUV4ZWNTdGF0ZUVQS2MKIF9fWk4z
SlNDMTBJZGVudGlmaWVyNWVxdWFsRVBLTlNfN1VTdHJpbmczUmVwRVBLYwogX19aTjNKU0MxMEpT
RnVuY3Rpb240aW5mb0UKK19fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uNG5hbWVFUE5TXzEySlNH
bG9iYWxEYXRhRQogX19aTjNKU0MxMHRocm93RXJyb3JFUE5TXzlFeGVjU3RhdGVFTlNfOUVycm9y
VHlwZUUKIF9fWk4zSlNDMTB0aHJvd0Vycm9yRVBOU185RXhlY1N0YXRlRU5TXzlFcnJvclR5cGVF
UEtjCiBfX1pOM0pTQzEwdGhyb3dFcnJvckVQTlNfOUV4ZWNTdGF0ZUVOU185RXJyb3JUeXBlRVJL
TlNfN1VTdHJpbmdFCkBAIC0yNTksNiArMjYwLDcgQEAgX19aTjNKU0M5U3RydWN0dXJlQzFFUE5T
XzdKU1ZhbHVlRVJLTlNfOFR5cGVJbmZvRQogX19aTjNKU0M5U3RydWN0dXJlRDFFdgogX19aTjNK
U0M5Y29uc3RydWN0RVBOU185RXhlY1N0YXRlRVBOU183SlNWYWx1ZUVOU18xM0NvbnN0cnVjdFR5
cGVFUktOU18xM0NvbnN0cnVjdERhdGFFUktOU183QXJnTGlzdEUKIF9fWk4zSlNDZXFFUktOU183
VVN0cmluZ0VQS2MKK19fWk4zSlNDZXFFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zSlNDZ3RFUktO
U183VVN0cmluZ0VTMl8KIF9fWk4zSlNDbHRFUktOU183VVN0cmluZ0VTMl8KIF9fWk4zV1RGMTBm
YXN0Q2FsbG9jRW1tCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDY0M2MyMDIuLjIxNmMyZmEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODcgQEAKKzIwMDgtMTItMDgg
IERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MzEKKyAgICAgICAgU3RyZWFtbGluZSBDb25zb2xlLmNwcCwg
YWJzdHJhY3Qgb3V0IHRoZSB1c2Ugb2YgSlNDOjpFeGVjU3RhdGUgYW5kCisgICAgICAgIEpTQzo6
QXJnTGlzdCBieSBpbnRyb2R1Y2luZyBTY3JpcHRDYWxsRnJhbWUgYW5kIFNjcmlwdENhbGxTdGFj
aworICAgICAgICBhYnN0cmFjdGlvbnMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
ZWQgU2NyaXB0Q2FsbEZyYW1lIGFuZCBTY3JpcHRDYWxsU3RhY2sgdG8gYnVpbGQKKyAgICAgICAg
KiBXZWJDb3JlLnBybzogIEFkZGVkIFNjcmlwdENhbGxGcmFtZSBhbmQgU2NyaXB0Q2FsbFN0YWNr
IHRvIGJ1aWxkCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IEFkZGVk
IFNjcmlwdENhbGxGcmFtZSBhbmQKKyAgICAgICAgU2NyaXB0Q2FsbFN0YWNrIHRvIHByb2plY3QK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEFkZGVkIFNjcmlw
dENhbGxGcmFtZSBhbmQKKyAgICAgICAgU2NyaXB0Q2FsbFN0YWNrIHRvIHByb2plY3QKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwOiBSZW1vdmUgY3VzdG9tIGJpbmRp
bmdzLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjp+U2NyaXB0Q2FsbEZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6YXJndW1lbnRBdCk6CisgICAgICAgICogYmlu
ZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2Fs
bEZyYW1lOjpzb3VyY2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjps
aW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6YXJndW1lbnRD
b3VudCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q2FsbFN0YWNrLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OlNjcmlwdENhbGxTdGFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6On5TY3JpcHRDYWxsU3RhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjphdCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRDYWxsU3RhY2s6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNr
Ojppbml0aWFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OlNjcmlwdENhbGxTdGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6On5TY3JpcHRDYWxsU3RhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjpzdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OmF0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENh
bGxTdGFjazo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OmluaXRp
YWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oOiBBZGRlZCBtaXNz
aW5nIFBsYXRmb3JtU3RyaW5nIGluY2x1ZGUuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJp
bmc6OlNjcmlwdFN0cmluZyk6IEFkZGVkIGRlZmF1bHQgY29uc3RydWN0b3IuCisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRTdHJpbmc6Om9wZXJhdG9yPT0pOiBBZGRlZCBlcXVhbGl0eSBvcGVyYXRv
ci4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOiBBZGRlZCBpc051bGwgYW5kIGlzVW5kZWZp
bmVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmlzTnVsbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRWYWx1ZTo6aXNVbmRlZmluZWQpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NjcmlwdFZhbHVlLmg6IEFkZGVkIGlzTnVsbCBhbmQgaXNVbmRlZmluZWQKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbTogQWRkIGhhbmRsaW5nIGZvcgorICAg
ICAgICBDdXN0b21Bcmd1bWVudEhhbmRsaW5nIGF0dHJpYnV0ZS4KKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6IFJlZmFjdG9yZWQgdG8gdXNlIAorICAgICAgICBT
Y3JpcHRDYWxsRnJhbWUgYW5kIFNjcmlwdENhbGxTdGFjay4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bnNvbGVNZXNzYWdlOjpDb25zb2xlTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0R3JvdXApOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6YWRkU2NyaXB0Q29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6Y291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6c3RhcnRUaW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q29udHJvbGxlcjo6c3RvcFRpbWluZyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaDogUmVmYWN0b3JlZCB0byB1c2UgU2NyaXB0Q2FsbEZyYW1lIGFuZAorICAgICAg
ICBTY3JpcHRDYWxsU3RhY2suCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xl
LmpzOiBNb2RpZmllZCB0byB1c2UgYXJndW1lbnQgdmFsdWUgaXRzZWxmCisgICAgICAgIHJhdGhl
ciB0aGFuIGYubmFtZSBmb3Igc3RhY2sgdHJhY2UuCisgICAgICAgICogcGFnZS9Db25zb2xlLmNw
cDogUmVmYWN0b3JlZCB0byB1c2UgU2NyaXB0Q2FsbEZyYW1lIGFuZAorICAgICAgICBTY3JpcHRD
YWxsU3RhY2suCisgICAgICAgIChXZWJDb3JlOjpnZXRGaXJzdEFyZ3VtZW50QXNTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6YWRkTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb25zb2xlOjpkZWJ1Zyk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjplcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjppbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNv
bGU6OmxvZyk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjpkaXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29uc29sZTo6ZGlyeG1sKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OnRyYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OmFzc2VydENvbmRpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDb25zb2xlOjpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjpw
cm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6OnByb2ZpbGVFbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29uc29sZTo6dGltZSk6CisgICAgICAgIChXZWJDb3JlOjpDb25zb2xlOjp0
aW1lRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6Omdyb3VwKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnNvbGU6Ondhcm4pOgorICAgICAgICAqIHBhZ2UvQ29uc29sZS5oOgorICAgICAg
ICAqIHBhZ2UvQ29uc29sZS5pZGw6IFJlbW92ZWQgQ3VzdG9tIGF0dHJpYnV0ZXMsIGFkZGVkCisg
ICAgICAgIEN1c3RvbUFyZ3VtZW50SGFuZGxpbmcgYXR0cmlidXRlcywgYW5kIHR3ZWFrZWQgYXJn
dW1lbnQgZGVmcy4KKwogMjAwOC0xMi0wOCAgVHJlbnRvbiBTY2h1bHogPHRyZW50b24uc2NodWx6
QG5va2lhLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBUb3IgQXJuZSBWZXN0YsO4
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KaW5kZXggOWQ2OGQ4Yi4uZDI0NzFlOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0zNDcsNiArMzQ3LDEwIEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNz
b3JDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAg
XAogCVdlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmggXAorCVdlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDYWxsRnJhbWUuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3Bw
IFwKKwlXZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5oIFwKIAlXZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL1Nj
cmlwdENvbnRyb2xsZXIuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRJbnN0YW5jZS5o
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IDIzYmYxNzcuLjAwNTAwMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8K
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDQyLDYgKzQ0Miw4IEBAIFNPVVJDRVMgKz0g
XAogICAgIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTUGx1Z2luRWxlbWVudEZ1bmN0
aW9ucy5jcHAgXAorICAgIGJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAgXAorICAgIGJp
bmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAgXAogICAgIGJpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuY3BwIFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgXAogICAgIGJp
bmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLnNjb25zIGIvV2ViQ29yZS9XZWJDb3JlLnNjb25zCmluZGV4IDAwYTJlZGYuLjFlYjkxNzYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5zY29ucworKysgYi9XZWJDb3JlL1dlYkNvcmUu
c2NvbnMKQEAgLTY4MCw2ICs2ODAsOCBAQCBzb3VyY2VzWydiaW5kaW5ncy9qcyddID0gWwogICAg
ICJiaW5kaW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAiLAogICAgICJiaW5k
aW5ncy9qcy9KU1hTTFRQcm9jZXNzb3JDdXN0b20uY3BwIiwKICAgICAiYmluZGluZ3MvanMvU2No
ZWR1bGVkQWN0aW9uLmNwcCIsCisgICAgImJpbmRpbmdzL2pzL1NjcmlwdENhbGxGcmFtZS5jcHAi
LAorICAgICJiaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3BwIiwKICAgICAiYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5jcHAiLAogICAgICJiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5j
cHAiLAogICAgICJiaW5kaW5ncy9qcy9Xb3JrZXJTY3JpcHRDb250cm9sbGVyLmNwcCIsCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBlZmZlYzQ2Li43YjNiZjM1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTEzOTUzLDYgKzEzOTUzLDIyIEBA
CiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxiaW5kaW5nc1xqc1xTY3JpcHRDYWxsRnJhbWUuY3BwIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+
DQorCQkJCTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdENh
bGxGcmFtZS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXFNjcmlwdENhbGxTdGFjay5jcHAiDQorCQkJCQk+DQor
CQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3Nc
anNcU2NyaXB0Q2FsbFN0YWNrLmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUN
CiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcU2NyaXB0Q29udHJvbGxlci5jcHAi
DQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGExZWIyZjguLjVlNTg2ZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NDIsNiArNTQyLDEwIEBACiAJCTM3QUNDRjY5MERB
NDE0RTcwMDg5RTYwMiAvKiBGb250RGVzY3JpcHRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdBQ0NFNjIwREEyQUE5NjAwODlFNjAyIC8qIEZv
bnREZXNjcmlwdGlvbi5jcHAgKi87IH07CiAJCTM3RjgxOEZEMEQ2NTc2MDYwMDVFMUYwNSAvKiBX
ZWJDb3JlVVJMUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDM3RjgxOEZCMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzN0Y4
MThGRTBENjU3NjA2MDA1RTFGMDUgLyogV2ViQ29yZVVSTFJlc3BvbnNlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdGODE4RkMwRDY1NzYwNjAwNUUx
RjA1IC8qIFdlYkNvcmVVUkxSZXNwb25zZS5tbSAqLzsgfTsKKwkJNDE2RTc1QkUwRURGOEZENzAw
MzYwRTFEIC8qIFNjcmlwdENhbGxTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDE2RTc1QkMwRURGOEZENzAwMzYwRTFEIC8qIFNjcmlwdENhbGxT
dGFjay5oICovOyB9OworCQk0MTZFNzVCRjBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0
YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
NkU3NUJEMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwICovOyB9OworCQk0
MTZFNzVDQjBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVDOTBFREY5MEM3MDAzNjBF
MUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CisJCTQxNkU3NUNDMEVERjkwQzcwMDM2MEUx
RCAvKiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFt
ZS5jcHAgKi87IH07CiAJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkY0NUVG
MEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLzsgfTsKIAkJNDFDNzYwQjEwRURF
MDNEMzAwQzE2NTVGIC8qIFNjcmlwdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3Rh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0
NDE1MjkyRTBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQxNTI5MkMwRTFBRThB
MDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCAqLzsgfTsKQEAgLTUzNTUsNiAr
NTM1OSwxMCBAQAogCQkzN0FDQ0U2MjBEQTJBQTk2MDA4OUU2MDIgLyogRm9udERlc2NyaXB0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnREZXNjcmlwdGlv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3RjgxOEZCMEQ2NTc2MDYwMDVF
MUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29yZVVSTFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTM3RjgxOEZDMEQ2NTc2MDYwMDVFMUYwNSAvKiBXZWJDb3JlVVJMUmVzcG9uc2UubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlVVJMUmVzcG9uc2UubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNkU3NUJDMEVERjhGRDcwMDM2MEUxRCAv
KiBTY3JpcHRDYWxsU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
aXB0Q2FsbFN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQxNkU3NUJEMEVE
RjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0Q2FsbFN0YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDE2RTc1QzkwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRDYWxsRnJhbWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8qIFNj
cmlwdENhbGxGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
Y3JpcHRDYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTZGNDVF
RjBFRDdCMzExMDA4MjE1QjYgLyogU2NyaXB0U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcmlwdFN0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MUM3NjBCMDBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDQxNTI5MkMwRTFBRThBMDAwQzRBMkQwIC8qIEhUTUxQbHVnSW5JbWFnZUVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxMTQsNiArMTMxMjIsMTAg
QEAKIAkJCQlCQ0U5OUVDMjBEQ0E2MjQxMDAxODI2ODMgLyogSlNYU0xUUHJvY2Vzc29yQ29uc3Ry
dWN0b3IuaCAqLywKIAkJCQlCQ0EzNzhCQTBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1bGVkQWN0
aW9uLmNwcCAqLywKIAkJCQlCQ0EzNzhCQjBEMTVGNjQyMDBCNzkzRDYgLyogU2NoZWR1bGVkQWN0
aW9uLmggKi8sCisJCQkJNDE2RTc1QzkwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFt
ZS5oICovLAorCQkJCTQxNkU3NUNBMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
Y3BwICovLAorCQkJCTQxNkU3NUJDMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2su
aCAqLywKKwkJCQk0MTZFNzVCRDBFREY4RkQ3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbFN0YWNrLmNw
cCAqLywKIAkJCQk5M0I3MEQ1MzA5RUIwQzdDMDA5RDg0NjggLyogU2NyaXB0Q29udHJvbGxlci5j
cHAgKi8sCiAJCQkJOTNCNzBENTQwOUVCMEM3QzAwOUQ4NDY4IC8qIFNjcmlwdENvbnRyb2xsZXIu
aCAqLywKIAkJCQlBODNFMUM3MjBFNDkwNDJCMDAxNDBCOUMgLyogU2NyaXB0Q29udHJvbGxlck1h
Yy5tbSAqLywKQEAgLTE2NDUzLDYgKzE2NDY1LDggQEAKIAkJCQkwODFEODEzMjBFRTBFNzREMDBE
NzM2ODkgLyogV01MVGltZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMxNzg5QjBF
RTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MUM3NjBCMTBFREUwM0QzMDBDMTY1NUYgLyogU2NyaXB0U3RhdGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTQxNkU3NUJFMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsU3RhY2suaCBpbiBIZWFk
ZXJzICovLAorCQkJCTQxNkU3NUNCMEVERjkwQzcwMDM2MEUxRCAvKiBTY3JpcHRDYWxsRnJhbWUu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpAQCAtMTgzOTAsNiArMTg0MDQsOCBAQAogCQkJCTA4MDRCRjZFMEVF
MDlDM0IwMDA2QzAwMCAvKiBXTUxEb0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDgx
RDgxMzEwRUUwRTc0RDAwRDczNjg5IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlFNEMxNzg5QTBFRTY5MDM4MDA4MjRENjkgLyogQ1NTU2VsZWN0b3JMaXN0LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTQxNkU3NUJGMEVERjhGRDcwMDM2MEUxRCAvKiBTY3JpcHRDYWxs
U3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDE2RTc1Q0MwRURGOTBDNzAwMzYwRTFEIC8q
IFNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
b25zb2xlQ3VzdG9tLmNwcAppbmRleCA2MTMxY2I2Li5kMDVmZmU4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCkBAIC00OCw5MSArNDgsNCBAQCBKU1ZhbHVlKiBKU0Nv
bnNvbGU6OnByb2ZpbGVzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICByZXR1cm4gY29uc3Ry
dWN0QXJyYXkoZXhlYywgbGlzdCk7CiB9CiAKLUpTVmFsdWUqIEpTQ29uc29sZTo6ZGVidWcoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT5k
ZWJ1ZyhleGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1K
U1ZhbHVlKiBKU0NvbnNvbGU6OmVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJndW1lbnRzKQotewotICAgIGltcGwoKS0+ZXJyb3IoZXhlYywgYXJndW1lbnRzKTsKLSAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjppbmZvKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+aW5m
byhleGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1Zh
bHVlKiBKU0NvbnNvbGU6OmxvZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Vt
ZW50cykKLXsKLSAgICBpbXBsKCktPmxvZyhleGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVlKiBKU0NvbnNvbGU6Ondhcm4oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT53YXJuKGV4ZWMs
IGFyZ3VtZW50cyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpT
Q29uc29sZTo6ZGlyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQot
ewotICAgIGltcGwoKS0+ZGlyKGV4ZWMsIGFyZ3VtZW50cyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6ZGlyeG1sKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+ZGlyeG1sKGV4ZWMsIGFy
Z3VtZW50cyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29u
c29sZTo6dHJhY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JikKLXsKLSAgICBpbXBs
KCktPnRyYWNlKGV4ZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1ZhbHVl
KiBKU0NvbnNvbGU6OmFzc2VydENvbmRpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3VtZW50cykKLXsKLSAgICBBcmdMaXN0IG1lc3NhZ2VQYXJhbWV0ZXJzOwotICAgIGFy
Z3VtZW50cy5nZXRTbGljZSgxLCBtZXNzYWdlUGFyYW1ldGVycyk7Ci0KLSAgICBpbXBsKCktPmFz
c2VydENvbmRpdGlvbihhcmd1bWVudHMuYXQoZXhlYywgMCktPnRvQm9vbGVhbihleGVjKSwgZXhl
YywgbWVzc2FnZVBhcmFtZXRlcnMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1K
U1ZhbHVlKiBKU0NvbnNvbGU6OmNvdW50KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYg
YXJndW1lbnRzKQotewotICAgIGltcGwoKS0+Y291bnQoZXhlYywgYXJndW1lbnRzKTsKLSAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjp0aW1lRW5kKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQotewotICAgIGltcGwoKS0+
dGltZUVuZChleGVjLCBhcmd1bWVudHMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQot
Ci1KU1ZhbHVlKiBKU0NvbnNvbGU6OnByb2ZpbGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdM
aXN0JiBhcmd1bWVudHMpCi17Ci0gICAgaW1wbCgpLT5wcm9maWxlKGV4ZWMsIGFyZ3VtZW50cyk7
Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTVmFsdWUqIEpTQ29uc29sZTo6cHJv
ZmlsZUVuZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKLXsKLSAg
ICBpbXBsKCktPnByb2ZpbGVFbmQoZXhlYywgYXJndW1lbnRzKTsKLSAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLX0KLQotSlNWYWx1ZSogSlNDb25zb2xlOjpncm91cChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKLXsKLSAgICBpbXBsKCktPmdyb3VwKGV4ZWMsIGFy
Z3VtZW50cyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1l
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2FsbEZyYW1lLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWYzODBhCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxGcmFtZS5oIgorCisjaW5j
bHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CisjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5n
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Ny
aXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUoY29uc3QgVVN0cmluZyYgZnVuY3Rpb25OYW1l
LCBjb25zdCBVU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIHVuc2lnbmVkIHNraXBBcmd1bWVudENvdW50KQorICAg
IDogbV9mdW5jdGlvbk5hbWUoZnVuY3Rpb25OYW1lKQorICAgICwgbV9zb3VyY2VVUkwodXJsU3Ry
aW5nKQorICAgICwgbV9saW5lTnVtYmVyKGxpbmVOdW1iZXIpCit7CisgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQgPSBhcmdzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gc2tpcEFyZ3VtZW50
Q291bnQ7IGkgPCBhcmd1bWVudENvdW50OyArK2kpCisgICAgICAgIG1fYXJndW1lbnRzLmFwcGVu
ZChTY3JpcHRWYWx1ZShhcmdzLmF0KGV4ZWMsIGkpKSk7Cit9CisKK1NjcmlwdENhbGxGcmFtZTo6
flNjcmlwdENhbGxGcmFtZSgpCit7Cit9CisKK2NvbnN0IFNjcmlwdFZhbHVlICZTY3JpcHRDYWxs
RnJhbWU6OmFyZ3VtZW50QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1f
YXJndW1lbnRzLnNpemUoKSA+IGluZGV4KTsKKyAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhd
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENhbGxGcmFtZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxs
RnJhbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGExYTA4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsRnJhbWUuaApAQCAt
MCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0Q2FsbEZyYW1lX2gKKyNkZWZpbmUgU2NyaXB0
Q2FsbEZyYW1lX2gKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlIDxydW50aW1lL0FyZ0xp
c3QuaD4KKyNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisgICAgY2xhc3Mg
RXhlY1N0YXRlOworICAgIGNsYXNzIEludGVybmFsRnVuY3Rpb247Cit9CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV0cmlldmluZyBsaW5lIG51bWJl
ciBhbmQgc291cmNlIFVSTCBhbmQgc3RvcmluZyBoZXJlCisgICAgLy8gZm9yIGFsbCBjYWxsIGZy
YW1lcywgbm90IGp1c3QgdGhlIGZpcnN0IG9uZS4KKyAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjU1Nj4gYW5kCisgICAgLy8gPGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTE4MD4KKyAgICBjbGFzcyBTY3JpcHRDYWxs
RnJhbWUgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNjcmlwdENhbGxGcmFtZShjb25zdCBKU0M6
OlVTdHJpbmcmIGZ1bmN0aW9uTmFtZSwgY29uc3QgSlNDOjpVU3RyaW5nJiB1cmxTdHJpbmcsIGlu
dCBsaW5lTnVtYmVyLCBKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYsIHVuc2ln
bmVkIHNraXBBcmd1bWVudENvdW50KTsKKyAgICAgICAgflNjcmlwdENhbGxGcmFtZSgpOworCisg
ICAgICAgIGNvbnN0IFNjcmlwdFN0cmluZyYgZnVuY3Rpb25OYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9mdW5jdGlvbk5hbWU7IH0KKyAgICAgICAgY29uc3QgS1VSTCYgc291cmNlVVJMKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VVUkw7IH0KKyAgICAgICAgdW5zaWduZWQgbGluZU51bWJlcigpIGNv
bnN0IHsgcmV0dXJuIG1fbGluZU51bWJlcjsgfQorCisgICAgICAgIC8vIGFyZ3VtZW50IHJldHJp
ZXZhbCBtZXRob2RzCisgICAgICAgIGNvbnN0IFNjcmlwdFZhbHVlJiBhcmd1bWVudEF0KHVuc2ln
bmVkKSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU2NyaXB0
U3RyaW5nIG1fZnVuY3Rpb25OYW1lOworICAgICAgICBLVVJMIG1fc291cmNlVVJMOworICAgICAg
ICB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7CisKKyAgICAgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBt
X2FyZ3VtZW50czsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBTY3JpcHRDYWxsRnJhbWVfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDYWxsU3RhY2suY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4ZDJhZTAKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhbGxTdGFjay5jcHAKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdENhbGxTdGFj
ay5oIgorCisjaW5jbHVkZSA8aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg+CisjaW5jbHVkZSA8aW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0ludGVybmFsRnVuY3Rp
b24uaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVmFsdWUuaD4KKyNpbmNsdWRlIDxydW50aW1lL1VT
dHJpbmcuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsRGF0YS5oPgorCit1c2luZyBuYW1l
c3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NjcmlwdENhbGxTdGFjazo6U2Ny
aXB0Q2FsbFN0YWNrKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgdW5zaWdu
ZWQgc2tpcEFyZ3VtZW50Q291bnQpCisgICAgOiBtX2luaXRpYWxpemVkKGZhbHNlKQorICAgICwg
bV9leGVjKGV4ZWMpCisgICAgLCBtX2NhbGxlcigwKQoreworICAgIGludCBzaWduZWRMaW5lTnVt
YmVyOworICAgIGludHB0cl90IHNvdXJjZUlEOworICAgIFVTdHJpbmcgdXJsU3RyaW5nOworICAg
IEpTVmFsdWUqIGZ1bmN0aW9uOworCisgICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVM
YXN0Q2FsbGVyKGV4ZWMsIHNpZ25lZExpbmVOdW1iZXIsIHNvdXJjZUlELCB1cmxTdHJpbmcsIGZ1
bmN0aW9uKTsKKworICAgIGlmIChmdW5jdGlvbikgeworICAgICAgICBtX2NhbGxlciA9IGFzSW50
ZXJuYWxGdW5jdGlvbihmdW5jdGlvbik7CisgICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSBz
aWduZWRMaW5lTnVtYmVyID49IDAgPyBzaWduZWRMaW5lTnVtYmVyIDogMDsKKyAgICAgICAgbV9m
cmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShtX2NhbGxlci0+bmFtZSgmbV9leGVjLT5nbG9i
YWxEYXRhKCkpLCB1cmxTdHJpbmcsIGxpbmVOdW1iZXIsIGV4ZWMsIGFyZ3MsIHNraXBBcmd1bWVu
dENvdW50KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQ2FsbGVyIGlzIHVua25vd24sIGJ1
dCB3ZSBzaG91bGQgc3RpbGwgYWRkIHRoZSBmcmFtZSwgYmVjYXVzZQorICAgICAgICAvLyBzb21l
dGhpbmcgY2FsbGVkIHVzLCBhbmQgZ2F2ZSB1cyBhcmd1bWVudHMuCisgICAgICAgIG1fZnJhbWVz
LmFwcGVuZChTY3JpcHRDYWxsRnJhbWUoVVN0cmluZygpLCBVU3RyaW5nKCksIDAsIGV4ZWMsIGFy
Z3MsIHNraXBBcmd1bWVudENvdW50KSk7CisgICAgfQorfQorCitTY3JpcHRDYWxsU3RhY2s6On5T
Y3JpcHRDYWxsU3RhY2soKQoreworfQorCitjb25zdCBTY3JpcHRDYWxsRnJhbWUgJlNjcmlwdENh
bGxTdGFjazo6YXQodW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gRmlyc3QgZnJhbWUgaXMgcHJl
LXBvcHVsYXRlZCBpbiBjb25zdHJ1Y3Rvciwgc28gZG9uJ3QgdHJpZ2dlcgorICAgIC8vIGluaXRp
YWxpemF0aW9uIHVubGVzcyBsb29raW5nIGJleW9uZCB0aGUgZmlyc3QgZnJhbWUuCisgICAgaWYg
KGluZGV4ID4gMCkKKyAgICAgICAgaW5pdGlhbGl6ZSgpOworICAgIEFTU0VSVChtX2ZyYW1lcy5z
aXplKCkgPiBpbmRleCk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XTsKK30KKwordW5zaWdu
ZWQgU2NyaXB0Q2FsbFN0YWNrOjpzaXplKCkKK3sKKyAgICBpbml0aWFsaXplKCk7CisgICAgcmV0
dXJuIG1fZnJhbWVzLnNpemUoKTsKK30KKwordm9pZCBTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxp
emUoKQoreworICAgIGlmICghbV9jYWxsZXIgfHwgbV9pbml0aWFsaXplZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgSlNWYWx1ZSogZnVuYyA9IG1fZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmll
dmVDYWxsZXIobV9leGVjLCBtX2NhbGxlcik7CisgICAgd2hpbGUgKCFmdW5jLT5pc051bGwoKSkg
eworICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBpbnRlcm5hbEZ1bmN0aW9uID0gYXNJbnRlcm5h
bEZ1bmN0aW9uKGZ1bmMpOworICAgICAgICBBcmdMaXN0IGVtcHR5QXJnTGlzdDsKKyAgICAgICAg
bV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFtZShpbnRlcm5hbEZ1bmN0aW9uLT5uYW1lKCZt
X2V4ZWMtPmdsb2JhbERhdGEoKSksIFVTdHJpbmcoKSwgMCwgMCwgZW1wdHlBcmdMaXN0LCAwKSk7
CisgICAgICAgIGZ1bmMgPSBtX2V4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlQ2FsbGVyKG1f
ZXhlYywgaW50ZXJuYWxGdW5jdGlvbik7CisgICAgfQorICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENhbGxTdGFjay5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxs
U3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTA3NTY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDYWxsU3RhY2suaApAQCAt
MCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0Q2FsbFN0YWNrX2gKKyNkZWZpbmUgU2NyaXB0
Q2FsbFN0YWNrX2gKKworI2luY2x1ZGUgIlNjcmlwdENhbGxGcmFtZS5oIgorI2luY2x1ZGUgIlNj
cmlwdFN0YXRlLmgiCisjaW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeworICAgIGNsYXNzIEV4ZWNTdGF0ZTsKKyAg
ICBjbGFzcyBKU1ZhbHVlOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBT
Y3JpcHRDYWxsU3RhY2sgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU2NyaXB0Q2FsbFN0YWNrKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jiwg
dW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQgPSAwKTsKKyAgICAgICAgflNjcmlwdENhbGxTdGFj
aygpOworCisgICAgICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhl
YzsgfQorICAgICAgICAvLyBmcmFtZSByZXRyaWV2YWwgbWV0aG9kcworICAgICAgICBjb25zdCBT
Y3JpcHRDYWxsRnJhbWUgJmF0KHVuc2lnbmVkKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgICAgIGJvb2wg
bV9pbml0aWFsaXplZDsKKworICAgICAgICBKU0M6OkV4ZWNTdGF0ZSogbV9leGVjOworICAgICAg
ICBWZWN0b3I8U2NyaXB0Q2FsbEZyYW1lPiBtX2ZyYW1lczsKKyAgICAgICAgSlNDOjpJbnRlcm5h
bEZ1bmN0aW9uKiBtX2NhbGxlcjsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBTY3JpcHRDYWxsU3RhY2tfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRTdHJpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgK
aW5kZXggNjhiOThmZi4uM2VmYTE2MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRTdHJpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oCkBA
IC0zMSw2ICszMSw3IEBACiAjaWZuZGVmIFNjcmlwdFN0cmluZ19oCiAjZGVmaW5lIFNjcmlwdFN0
cmluZ19oCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNMb2NrLmg+CiAjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+CiAKQEAgLTQwLDYgKzQxLDcg
QEAgY2xhc3MgU3RyaW5nOwogCiBjbGFzcyBTY3JpcHRTdHJpbmcgewogcHVibGljOgorICAgIFNj
cmlwdFN0cmluZygpIHt9CiAgICAgU2NyaXB0U3RyaW5nKGNvbnN0IGNoYXIqIHMpIDogbV9zdHIo
cykge30KICAgICBTY3JpcHRTdHJpbmcoY29uc3QgSlNDOjpVU3RyaW5nJiBzKSA6IG1fc3RyKHMp
IHt9CiAKQEAgLTYyLDYgKzY0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTY3JpcHRTdHJpbmcmIHMpIGNvbnN0
CisgICAgeworICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgcmV0dXJu
IG1fc3RyID09IHMubV9zdHI7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNj
cmlwdFN0cmluZyYgcykgY29uc3QKKyAgICB7CisgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soZmFs
c2UpOworICAgICAgICAvLyBBdm9pZCBleHBvcnRpbmcgYW4gZXh0cmEgc3ltYm9sIGJ5IHJlLXVz
aW5nICI9PSIgb3BlcmF0b3IuCisgICAgICAgIHJldHVybiAhKG1fc3RyID09IHMubV9zdHIpOwor
ICAgIH0KKwogcHJpdmF0ZToKICAgICBKU0M6OlVTdHJpbmcgbV9zdHI7CiB9OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmNwcAppbmRleCA2MjZjZGY2Li5mNDYyZTIxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFZhbHVlLmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhTdHJpbmcmIHJlc3VsdCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fdmFsdWUuZ2V0KCkpCisgICAgaWYgKCFtX3ZhbHVlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwogICAgIFVTdHJpbmcgdXN0cmluZzsK
QEAgLTUwLDQgKzUwLDE4IEBAIGJvb2wgU2NyaXB0VmFsdWU6OmdldFN0cmluZyhTdHJpbmcmIHJl
c3VsdCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBTY3JpcHRWYWx1ZTo6aXNO
dWxsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbV92YWx1ZS0+aXNOdWxsKCk7Cit9CisKK2Jvb2wgU2NyaXB0VmFsdWU6Omlz
VW5kZWZpbmVkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fdmFsdWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbV92YWx1ZS0+aXNVbmRlZmluZWQoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1
ZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCmluZGV4IDhjY2JiNjQuLjVk
ZmU3NmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgKQEAgLTQzLDYgKzQzLDggQEAgcHVi
bGljOgogCiAgICAgSlNDOjpKU1ZhbHVlKiBqc1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZS5nZXQoKTsgfQogICAgIGJvb2wgZ2V0U3RyaW5nKFN0cmluZyYgcmVzdWx0KSBjb25zdDsKKyAg
ICBib29sIGlzTnVsbCgpIGNvbnN0OworICAgIGJvb2wgaXNVbmRlZmluZWQoKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBKU0M6OlByb3RlY3RlZFB0cjxKU0M6OkpTVmFsdWU+IG1fdmFsdWU7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtIGIv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQppbmRleCBiMDNhZTlk
Li5iZDY2NWUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0KQEAgLTEzNDQsNiArMTM0NCwxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogCiAg
ICAgICAgICAgICAgICAgbXkgJGhhc09wdGlvbmFsQXJndW1lbnRzID0gMDsKIAorICAgICAgICAg
ICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkN1
c3RvbUFyZ3VtZW50SGFuZGxpbmcifSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICBTY3JpcHRDYWxsU3RhY2sgY2FsbFN0YWNrKGV4ZWMsIGFyZ3MsICRudW1Q
YXJhbWV0ZXJzKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTY3Jp
cHRDYWxsU3RhY2suaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAg
ICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoISRoYXNPcHRpb25hbEFyZ3VtZW50cyAmJiAkcGFyYW1ldGVy
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiT3B0aW9uYWwifSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiAgICBpbnQgYXJnc0NvdW50ID0gYXJncy5zaXpl
KCk7XG4iKTsKQEAgLTE0ODIsNiArMTQ4NywxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bkZ1bmN0aW9uQ2FsbCgpCiAgICAgbXkgJHBvZFR5cGUgPSBzaGlmdDsKICAgICBteSAkaW1wbENs
YXNzTmFtZSA9IHNoaWZ0OwogCisgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5kbGluZyJ9KSB7CisgICAgICAgICRmdW5j
dGlvblN0cmluZyAuPSAiLCAiIGlmICRwYXJhbUluZGV4OworICAgICAgICArKyRwYXJhbUluZGV4
OworICAgICAgICAkZnVuY3Rpb25TdHJpbmcgLj0gIiZjYWxsU3RhY2siOworICAgIH0KKwogICAg
IGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKICAgICAgICAgJGZ1bmN0aW9u
U3RyaW5nIC49ICIsICIgaWYgJHBhcmFtSW5kZXg7CiAgICAgICAgICRmdW5jdGlvblN0cmluZyAu
PSAiZWMiOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA4
NGJhZGIxLi5lMDU1NjRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgIlNjcmlwdENhbGxTdGFjay5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1
ZGUgIlN5c3RlbVRpbWUuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKQEAgLTE3MCwxOCAr
MTcxLDMxIEBAIHN0cnVjdCBDb25zb2xlTWVzc2FnZSB7CiAgICAgewogICAgIH0KIAotICAgIENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UgcywgTWVzc2FnZUxldmVsIGwsIEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgdW5zaWduZWQgbGksIGNvbnN0IFN0cmluZyYgdSwg
dW5zaWduZWQgZykKKyAgICBDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlIHMsIE1lc3NhZ2VM
ZXZlbCBsLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaywgdW5zaWduZWQgZywgYm9vbCBzdG9y
ZVRyYWNlID0gZmFsc2UpCiAgICAgICAgIDogc291cmNlKHMpCiAgICAgICAgICwgbGV2ZWwobCkK
LSAgICAgICAgLCB3cmFwcGVkQXJndW1lbnRzKGFyZ3Muc2l6ZSgpKQotICAgICAgICAsIGxpbmUo
bGkpCi0gICAgICAgICwgdXJsKHUpCisgICAgICAgICwgd3JhcHBlZEFyZ3VtZW50cyhjYWxsU3Rh
Y2stPmF0KDApLmFyZ3VtZW50Q291bnQoKSkKKyAgICAgICAgLCBmcmFtZXMoc3RvcmVUcmFjZSA/
IGNhbGxTdGFjay0+c2l6ZSgpIDogMCkKICAgICAgICAgLCBncm91cExldmVsKGcpCiAgICAgICAg
ICwgcmVwZWF0Q291bnQoMSkKICAgICB7CisgICAgICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYg
bGFzdENhbGxlciA9IGNhbGxTdGFjay0+YXQoMCk7CisgICAgICAgIGxpbmUgPSBsYXN0Q2FsbGVy
LmxpbmVOdW1iZXIoKTsKKyAgICAgICAgdXJsID0gbGFzdENhbGxlci5zb3VyY2VVUkwoKS5zdHJp
bmcoKTsKKworICAgICAgICAvLyBGSVhNRTogRm9yIG5vdywganVzdCBzdG9yZSBmdW5jdGlvbiBu
YW1lcyBhcyBzdHJpbmdzLgorICAgICAgICAvLyBBcyBTY3JpcHRDYWxsU3RhY2sgc3RhcnQgc3Rv
cmluZyBsaW5lIG51bWJlciBhbmQgc291cmNlIFVSTCBmb3IgYWxsCisgICAgICAgIC8vIGZyYW1l
cywgcmVmYWN0b3IgdG8gdXNlIHRoYXQsIGFzIHdlbGwuCisgICAgICAgIGlmIChzdG9yZVRyYWNl
KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzdGFja1NpemUgPSBjYWxsU3RhY2stPnNpemUoKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFja1NpemU7ICsraSkKKyAg
ICAgICAgICAgICAgICBmcmFtZXNbaV0gPSBjYWxsU3RhY2stPmF0KGkpLmZ1bmN0aW9uTmFtZSgp
OworICAgICAgICB9CisKICAgICAgICAgSlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJncy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHdyYXBw
ZWRBcmd1bWVudHNbaV0gPSBKU0luc3BlY3RlZE9iamVjdFdyYXBwZXI6OndyYXAoZXhlYywgYXJn
cy5hdChleGVjLCBpKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RD
YWxsZXIuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgICAgICB3cmFwcGVkQXJndW1lbnRz
W2ldID0gSlNJbnNwZWN0ZWRPYmplY3RXcmFwcGVyOjp3cmFwKGNhbGxTdGFjay0+c3RhdGUoKSwg
bGFzdENhbGxlci5hcmd1bWVudEF0KGkpLmpzVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIGJv
b2wgaXNFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIENvbnNvbGVNZXNzYWdlKiBtc2cpIGNvbnN0CkBA
IC0xODksMTIgKzIwMywyMiBAQCBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2UgewogICAgICAgICBpZiAo
bXNnLT53cmFwcGVkQXJndW1lbnRzLnNpemUoKSAhPSB0aGlzLT53cmFwcGVkQXJndW1lbnRzLnNp
emUoKSB8fAogICAgICAgICAgICAoIWV4ZWMgJiYgbXNnLT53cmFwcGVkQXJndW1lbnRzLnNpemUo
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbXNnLT53cmFwcGVkQXJndW1lbnRzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBBU1NFUlRfQVJHKGV4ZWMsIGV4ZWMpOwogICAgICAgICAgICAgaWYgKCFKU1Zh
bHVlSXNFcXVhbCh0b1JlZihleGVjKSwgdG9SZWYobXNnLT53cmFwcGVkQXJndW1lbnRzW2ldLmdl
dCgpKSwgdG9SZWYodGhpcy0+d3JhcHBlZEFyZ3VtZW50c1tpXS5nZXQoKSksIDApKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBmcmFt
ZUNvdW50ID0gbXNnLT5mcmFtZXMuc2l6ZSgpOworICAgICAgICBpZiAoZnJhbWVDb3VudCAhPSB0
aGlzLT5mcmFtZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZUNvdW50OyArK2kpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFNjcmlwdFN0cmluZyYgbXlGcmFtZUZ1bmN0aW9uTmFtZSA9IHRoaXMtPmZy
YW1lc1tpXTsKKyAgICAgICAgICAgIGlmIChteUZyYW1lRnVuY3Rpb25OYW1lICE9IG1zZy0+ZnJh
bWVzW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIAog
ICAgICAgICByZXR1cm4gbXNnLT5zb3VyY2UgPT0gdGhpcy0+c291cmNlCiAgICAgICAgICAgICAm
JiBtc2ctPmxldmVsID09IHRoaXMtPmxldmVsCkBAIC0yMDgsNiArMjMyLDcgQEAgc3RydWN0IENv
bnNvbGVNZXNzYWdlIHsKICAgICBNZXNzYWdlTGV2ZWwgbGV2ZWw7CiAgICAgU3RyaW5nIG1lc3Nh
Z2U7CiAgICAgVmVjdG9yPFByb3RlY3RlZFB0cjxKU1ZhbHVlPiA+IHdyYXBwZWRBcmd1bWVudHM7
CisgICAgVmVjdG9yPFNjcmlwdFN0cmluZz4gZnJhbWVzOwogICAgIHVuc2lnbmVkIGxpbmU7CiAg
ICAgU3RyaW5nIHVybDsKICAgICB1bnNpZ25lZCBncm91cExldmVsOwpAQCAtMTI5OSwxMiArMTMy
NCwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnNldFdpbmRvd1Zpc2libGUoYm9vbCB2
aXNpYmxlLCBib29sIGF0dGFjaGVkKQogICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IEN1cnJlbnRQ
YW5lbDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjphZGRNZXNzYWdlVG9Db25zb2xl
KE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBT
dHJpbmcmIHNvdXJjZVVSTCkKK3ZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6YWRkTWVzc2FnZVRv
Q29uc29sZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBTY3JpcHRD
YWxsU3RhY2sqIGNhbGxTdGFjaykKIHsKICAgICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYWRkQ29uc29sZU1lc3NhZ2UoZXhlYywgbmV3IENvbnNvbGVNZXNzYWdlKHNv
dXJjZSwgbGV2ZWwsIGV4ZWMsIGFyZ3VtZW50cywgbGluZU51bWJlciwgc291cmNlVVJMLCBtX2dy
b3VwTGV2ZWwpKTsKKyAgICBhZGRDb25zb2xlTWVzc2FnZShjYWxsU3RhY2stPnN0YXRlKCksIG5l
dyBDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBjYWxsU3RhY2ssIG1fZ3JvdXBMZXZlbCwg
bGV2ZWwgPT0gVHJhY2VNZXNzYWdlTGV2ZWwpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb250cm9s
bGVyOjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2
ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCkKQEAgLTEzNTAsMTEgKzEzNzUsMTEgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjp0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZykKICAgICBj
YWxsRnVuY3Rpb24obV9zY3JpcHRDb250ZXh0LCBtX3NjcmlwdE9iamVjdCwgInNldFJlY29yZGlu
Z1Byb2ZpbGUiLCAxLCAmaXNQcm92aW5nVmFsdWUsIGV4Y2VwdGlvbik7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6c3RhcnRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdGFy
dEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaykK
IHsgICAgCiAgICAgKyttX2dyb3VwTGV2ZWw7CiAKLSAgICBhZGRDb25zb2xlTWVzc2FnZShleGVj
LCBuZXcgQ29uc29sZU1lc3NhZ2Uoc291cmNlLCBTdGFydEdyb3VwTWVzc2FnZUxldmVsLCBleGVj
LCBhcmd1bWVudHMsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCwgbV9ncm91cExldmVsKSk7CisgICAg
YWRkQ29uc29sZU1lc3NhZ2UoY2FsbFN0YWNrLT5zdGF0ZSgpLCBuZXcgQ29uc29sZU1lc3NhZ2Uo
c291cmNlLCBTdGFydEdyb3VwTWVzc2FnZUxldmVsLCBjYWxsU3RhY2ssIG1fZ3JvdXBMZXZlbCkp
OwogfQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmVuZEdyb3VwKE1lc3NhZ2VTb3VyY2Ug
c291cmNlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKQEAg
LTIxODUsNyArMjIxMCwxMiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmFkZFNjcmlwdENv
bnNvbGVNZXNzYWdlKGNvbnN0IENvbnNvbGVNZXNzYWdlKiBtZXNzYWdlKQogICAgIGFyZ3VtZW50
c1thcmd1bWVudENvdW50KytdID0gZ3JvdXBMZXZlbFZhbHVlOwogICAgIGFyZ3VtZW50c1thcmd1
bWVudENvdW50KytdID0gcmVwZWF0Q291bnRWYWx1ZTsKIAotICAgIGlmICghbWVzc2FnZS0+d3Jh
cHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIW1lc3NhZ2UtPmZyYW1lcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgcmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50cyA9IG1h
eGltdW1NZXNzYWdlQXJndW1lbnRzIC0gYXJndW1lbnRDb3VudDsKKyAgICAgICAgdW5zaWduZWQg
YXJndW1lbnRzVG9BZGQgPSBtaW4ocmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50cywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1lc3NhZ2UtPmZyYW1lcy5zaXplKCkpKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGFyZ3VtZW50c1RvQWRkOyArK2kpCisgICAgICAgICAgICBhcmd1bWVu
dHNbYXJndW1lbnRDb3VudCsrXSA9IEpTVmFsdWVNYWtlU3RyaW5nKG1fc2NyaXB0Q29udGV4dCwg
anNTdHJpbmdSZWYobWVzc2FnZS0+ZnJhbWVzW2ldKS5nZXQoKSk7CisgICAgfSBlbHNlIGlmICgh
bWVzc2FnZS0+d3JhcHBlZEFyZ3VtZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgdW5zaWduZWQg
cmVtYWluaW5nU3BhY2VJbkFyZ3VtZW50cyA9IG1heGltdW1NZXNzYWdlQXJndW1lbnRzIC0gYXJn
dW1lbnRDb3VudDsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzVG9BZGQgPSBtaW4ocmVtYWlu
aW5nU3BhY2VJbkFyZ3VtZW50cywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1lc3NhZ2UtPndyYXBw
ZWRBcmd1bWVudHMuc2l6ZSgpKSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBh
cmd1bWVudHNUb0FkZDsgKytpKQpAQCAtMjc4Niw5ICsyODE2LDkgQEAgdm9pZCBJbnNwZWN0b3JD
b250cm9sbGVyOjpkcmF3Tm9kZUhpZ2hsaWdodChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNv
bnN0CiAgICAgZHJhd0hpZ2hsaWdodEZvckJveGVzKGNvbnRleHQsIGxpbmVCb3hRdWFkcywgYWJz
Q29udGVudFF1YWQsIGFic1BhZGRpbmdRdWFkLCBhYnNCb3JkZXJRdWFkLCBhYnNNYXJnaW5RdWFk
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb3VudChjb25zdCBVU3RyaW5nJiB0
aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKK3ZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6Y291bnQoY29uc3QgU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKIHsKLSAgICBTdHJpbmcgaWRlbnRp
ZmllciA9IFN0cmluZyh0aXRsZSkgKyBTdHJpbmc6OmZvcm1hdCgiQCVzOiVkIiwgc291cmNlSUQu
dXRmOCgpLmRhdGEoKSwgbGluZU51bWJlcik7CisgICAgU3RyaW5nIGlkZW50aWZpZXIgPSB0aXRs
ZSArIFN0cmluZzo6Zm9ybWF0KCJAJXM6JWQiLCBzb3VyY2VJRC51dGY4KCkuZGF0YSgpLCBsaW5l
TnVtYmVyKTsKICAgICBIYXNoTWFwPFN0cmluZywgdW5zaWduZWQ+OjppdGVyYXRvciBpdCA9IG1f
Y291bnRzLmZpbmQoaWRlbnRpZmllcik7CiAgICAgaW50IGNvdW50OwogICAgIGlmIChpdCA9PSBt
X2NvdW50cy5lbmQoKSkKQEAgLTI4MDAsMTYgKzI4MzAsMTYgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpjb3VudChjb25zdCBVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwg
Y29uc3QKIAogICAgIG1fY291bnRzLmFkZChpZGVudGlmaWVyLCBjb3VudCk7CiAKLSAgICBTdHJp
bmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCIlczogJWQiLCB0aXRsZS5VVEY4U3RyaW5nKCku
Y19zdHIoKSwgY291bnQpOworICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIiVz
OiAlZCIsIHRpdGxlLnV0ZjgoKS5kYXRhKCksIGNvdW50KTsKICAgICBhZGRNZXNzYWdlVG9Db25z
b2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVsLCBtZXNzYWdlLCBsaW5lTnVtYmVy
LCBzb3VyY2VJRCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6c3RhcnRUaW1pbmco
Y29uc3QgVVN0cmluZyYgdGl0bGUpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0YXJ0VGlt
aW5nKGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7CiAgICAgbV90aW1lcy5hZGQodGl0bGUsIGN1cnJl
bnRUaW1lKCkgKiAxMDAwKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGlt
aW5nKGNvbnN0IFVTdHJpbmcmIHRpdGxlLCBkb3VibGUmIGVsYXBzZWQpCitib29sIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlJiBlbGFw
c2VkKQogewogICAgIEhhc2hNYXA8U3RyaW5nLCBkb3VibGU+OjppdGVyYXRvciBpdCA9IG1fdGlt
ZXMuZmluZCh0aXRsZSk7CiAgICAgaWYgKGl0ID09IG1fdGltZXMuZW5kKCkpCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZjRkMjQ3Mi4uMDU2YWU5MSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjEsNiArNjEsNyBAQCBjbGFz
cyBOb2RlOwogY2xhc3MgUGFnZTsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBSZXNv
dXJjZUVycm9yOworY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogY2xhc3MgU2hhcmVkQnVmZmVyOwog
CiBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2U7CkBAIC0xNjAsNyArMTYxLDcgQEAgcHVibGljOgogICAg
IGJvb2wgd2luZG93VmlzaWJsZSgpOwogICAgIHZvaWQgc2V0V2luZG93VmlzaWJsZShib29sIHZp
c2libGUgPSB0cnVlLCBib29sIGF0dGFjaGVkID0gZmFsc2UpOwogCi0gICAgdm9pZCBhZGRNZXNz
YWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3VtZW50cywgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCk7CisgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3Nh
Z2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAgdm9pZCBhZGRN
ZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsK
ICAgICB2b2lkIGNsZWFyQ29uc29sZU1lc3NhZ2VzKCk7CiAgICAgdm9pZCB0b2dnbGVSZWNvcmRC
dXR0b24oYm9vbCk7CkBAIC0yMzcsMTIgKzIzOCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRy
YXdOb2RlSGlnaGxpZ2h0KEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogICAgIAotICAgIHZvaWQg
Y291bnQoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCk7CisgICAgdm9pZCBjb3VudChjb25zdCBTdHJpbmcmIHRpdGxl
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKIAotICAgIHZv
aWQgc3RhcnRUaW1pbmcoY29uc3QgSlNDOjpVU3RyaW5nJiB0aXRsZSk7Ci0gICAgYm9vbCBzdG9w
VGltaW5nKGNvbnN0IEpTQzo6VVN0cmluZyYgdGl0bGUsIGRvdWJsZSYgZWxhcHNlZCk7CisgICAg
dm9pZCBzdGFydFRpbWluZyhjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICBib29sIHN0b3BUaW1p
bmcoY29uc3QgU3RyaW5nJiB0aXRsZSwgZG91YmxlJiBlbGFwc2VkKTsKIAotICAgIHZvaWQgc3Rh
cnRHcm91cChNZXNzYWdlU291cmNlIHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTQzo6QXJnTGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVVSTCk7CisgICAgdm9pZCBzdGFydEdyb3VwKE1lc3NhZ2VTb3VyY2Ugc291cmNl
LCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxGcmFtZSk7CiAgICAgdm9pZCBlbmRHcm91cChNZXNzYWdl
U291cmNlIHNvdXJjZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VV
UkwpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0NvbnNvbGUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5qcwppbmRl
eCBhNDA1ZGIzLi4yMzMzZjQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvQ29uc29sZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ29uc29sZS5q
cwpAQCAtNjA0LDcgKzYwNCw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSA9IGZ1bmN0
aW9uKHNvdXJjZSwgbGV2ZWwsIGxpbmUsIHVybCwgZ3JvdXBMZXZlbCwgcmVwCiAgICAgICAgICAg
ICBzcGFuLmFkZFN0eWxlQ2xhc3MoImNvbnNvbGUtZm9ybWF0dGVkLXRyYWNlIik7CiAgICAgICAg
ICAgICB2YXIgc3RhY2sgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDYp
OwogICAgICAgICAgICAgdmFyIGZ1bmNOYW1lcyA9IHN0YWNrLm1hcChmdW5jdGlvbihmKSB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGYubmFtZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihh
bm9ueW1vdXMgZnVuY3Rpb24pIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGYgfHwgV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpOwogICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGZ1
bmNOYW1lcy5qb2luKCJcbiIpKSk7CiAgICAgICAgICAgICB0aGlzLmZvcm1hdHRlZE1lc3NhZ2Ug
PSBzcGFuOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwIGIvV2ViQ29yZS9w
YWdlL0NvbnNvbGUuY3BwCmluZGV4IGJmZTQ5YTMuLjU2NTZiYTMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGFnZS9Db25zb2xlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAKQEAgLTM1
LDE4ICszNSwxNiBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVU
cmVlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkpTRE9N
QmluZGluZy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvQXJnTGlzdC5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmpl
Y3QuaD4KLSNpbmNsdWRlIDxpbnRlcnByZXRlci9JbnRlcnByZXRlci5oPgorCisjaWYgVVNFKEpT
QykKICNpbmNsdWRlIDxwcm9maWxlci9Qcm9maWxlci5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
ZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIEpTQzsKKyNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2su
aCIKKyNpbmNsdWRlIDxzdGRpby5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTcwLDYg
KzY4LDE4IEBAIHN0YXRpYyB2b2lkIHByaW50U291cmNlVVJMQW5kTGluZShjb25zdCBTdHJpbmcm
IHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJlcikKICAgICB9CiB9CiAKK3N0YXRpYyBib29s
IGdldEZpcnN0QXJndW1lbnRBc1N0cmluZyhjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGNhbGxGcmFt
ZSwgU3RyaW5nJiByZXN1bHQsIGJvb2wgY2hlY2tGb3JOdWxsT3JVbmRlZmluZWQgPSBmYWxzZSkK
K3sKKyAgICBpZiAoIWNhbGxGcmFtZS5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGNvbnN0IFNjcmlwdFZhbHVlJiB2YWx1ZSA9IGNhbGxGcmFtZS5hcmd1bWVu
dEF0KDApOworICAgIGlmIChjaGVja0Zvck51bGxPclVuZGVmaW5lZCAmJiAodmFsdWUuaXNOdWxs
KCkgfHwgdmFsdWUuaXNVbmRlZmluZWQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB2YWx1ZS5nZXRTdHJpbmcocmVzdWx0KTsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRN
ZXNzYWdlU291cmNlQW5kTGV2ZWxQcmVmaXgoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VM
ZXZlbCBsZXZlbCkKIHsKICAgICBjb25zdCBjaGFyKiBzb3VyY2VTdHJpbmc7CkBAIC0xMTksOCAr
MTI5LDE3IEBAIHN0YXRpYyB2b2lkIHByaW50TWVzc2FnZVNvdXJjZUFuZExldmVsUHJlZml4KE1l
c3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwKICAgICBwcmludGYoIiVzICVzOiIsIHNv
dXJjZVN0cmluZywgbGV2ZWxTdHJpbmcpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludFRvU3RhbmRh
cmRPdXQoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgdW5zaWduZWQgbGluZU51bWJl
cikKK3ZvaWQgQ29uc29sZTo6YWRkTWVzc2FnZShNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2Fn
ZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlVVJMKQogeworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdl
KCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc291cmNlID09
IEpTTWVzc2FnZVNvdXJjZSB8fCBzb3VyY2UgPT0gV01MTWVzc2FnZVNvdXJjZSkKKyAgICAgICAg
cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxp
bmVOdW1iZXIsIHNvdXJjZVVSTCk7CisKKyAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PmFkZE1lc3NhZ2VUb0NvbnNvbGUoc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwg
c291cmNlVVJMKTsKKwogICAgIGlmICghQ29uc29sZTo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMTMwLDI4OCArMTQ5LDE5MSBAQCBzdGF0aWMgdm9pZCBw
cmludFRvU3RhbmRhcmRPdXQoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZl
bCwgY29uc3QgUwogICAgIHByaW50ZigiICVzXG4iLCBtZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwog
fQogCi1zdGF0aWMgdm9pZCBwcmludFRvU3RhbmRhcmRPdXQoTWVzc2FnZUxldmVsIGxldmVsLCBF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIGNvbnN0IEtVUkwmIHVybCkKLXsK
LSAgICBpZiAoIUNvbnNvbGU6OnNob3VsZFByaW50RXhjZXB0aW9ucygpKQordm9pZCBDb25zb2xl
OjphZGRNZXNzYWdlKE1lc3NhZ2VMZXZlbCBsZXZlbCwgU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3Rh
Y2ssIGJvb2wgYWNjZXB0Tm9Bcmd1bWVudHMpIHsKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJpbnRTb3VyY2VV
UkxBbmRMaW5lKHVybC5wcmV0dHlVUkwoKSwgMCk7Ci0gICAgcHJpbnRNZXNzYWdlU291cmNlQW5k
TGV2ZWxQcmVmaXgoSlNNZXNzYWdlU291cmNlLCBsZXZlbCk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFyZ3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVVN0cmluZyBhcmdBc1N0cmlu
ZyA9IGFyZ3MuYXQoZXhlYywgaSktPnRvU3RyaW5nKGV4ZWMpOwotICAgICAgICBwcmludGYoIiAl
cyIsIGFyZ0FzU3RyaW5nLlVURjhTdHJpbmcoKS5jX3N0cigpKTsKLSAgICB9Ci0KLSAgICBwcmlu
dGYoIlxuIik7Ci19CisgICAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBsYXN0Q2FsbGVyID0gY2Fs
bFN0YWNrLT5hdCgwKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJldHJpZXZlTGFzdENhbGxlcihF
eGVjU3RhdGUqIGV4ZWMsIEtVUkwmIHVybCwgdW5zaWduZWQmIGxpbmVOdW1iZXIpCi17Ci0gICAg
aW50IHNpZ25lZExpbmVOdW1iZXI7Ci0gICAgaW50cHRyX3Qgc291cmNlSUQ7Ci0gICAgVVN0cmlu
ZyB1cmxTdHJpbmc7Ci0gICAgSlNWYWx1ZSogZnVuY3Rpb247CisgICAgaWYgKCFhY2NlcHROb0Fy
Z3VtZW50cyAmJiAhbGFzdENhbGxlci5hcmd1bWVudENvdW50KCkpCisgICAgICAgIHJldHVybjsK
IAotICAgIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlTGFzdENhbGxlcihleGVjLCBzaWdu
ZWRMaW5lTnVtYmVyLCBzb3VyY2VJRCwgdXJsU3RyaW5nLCBmdW5jdGlvbik7CisgICAgU3RyaW5n
IG1lc3NhZ2U7CisgICAgaWYgKGdldEZpcnN0QXJndW1lbnRBc1N0cmluZyhsYXN0Q2FsbGVyLCBt
ZXNzYWdlKSkKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9D
b25zb2xlKG1lc3NhZ2UsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVyLnNvdXJj
ZVVSTCgpLnByZXR0eVVSTCgpKTsKIAotICAgIHVybCA9IEtVUkwodXJsU3RyaW5nKTsKLSAgICBs
aW5lTnVtYmVyID0gKHNpZ25lZExpbmVOdW1iZXIgPj0gMCA/IHNpZ25lZExpbmVOdW1iZXIgOiAw
KTsKLX0KKyAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNv
bGUoSlNNZXNzYWdlU291cmNlLCBsZXZlbCwgY2FsbFN0YWNrKTsKIAotdm9pZCBDb25zb2xlOjph
ZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpCi17Ci0gICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2Up
CisgICAgaWYgKCFDb25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKHNvdXJjZSA9PSBKU01lc3NhZ2VTb3VyY2UgfHwgc291cmNlID09IFdN
TE1lc3NhZ2VTb3VyY2UpCi0gICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+YWRkTWVz
c2FnZVRvQ29uc29sZShtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VVUkwpOwotCi0gICAgcGFn
ZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xlKHNvdXJjZSwgbGV2
ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZVVSTCk7CisgICAgcHJpbnRTb3VyY2VVUkxB
bmRMaW5lKGxhc3RDYWxsZXIuc291cmNlVVJMKCkucHJldHR5VVJMKCksIDApOworICAgIHByaW50
TWVzc2FnZVNvdXJjZUFuZExldmVsUHJlZml4KEpTTWVzc2FnZVNvdXJjZSwgbGV2ZWwpOwogCi0g
ICAgcHJpbnRUb1N0YW5kYXJkT3V0KHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNvdXJjZVVSTCwg
bGluZU51bWJlcik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RDYWxsZXIuYXJn
dW1lbnRDb3VudCgpOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGFyZ0FzU3RyaW5nOworICAgICAg
ICBpZiAobGFzdENhbGxlci5hcmd1bWVudEF0KGkpLmdldFN0cmluZyhhcmdBc1N0cmluZykpCisg
ICAgICAgICAgICBwcmludGYoIiAlcyIsIGFyZ0FzU3RyaW5nLnV0ZjgoKS5kYXRhKCkpOworICAg
IH0KKyAgICBwcmludGYoIlxuIik7CiB9CiAKLXZvaWQgQ29uc29sZTo6ZGVidWcoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjpkZWJ1ZyhTY3JpcHRD
YWxsU3RhY2sqIGNhbGxTdGFjaykKIHsKICAgICAvLyBJbiBGaXJlYnVnLCBjb25zb2xlLmRlYnVn
IGhhcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBjb25zb2xlLmxvZy4gU28gd2UnbGwgZG8gdGhlIHNh
bWUuCi0gICAgbG9nKGV4ZWMsIGFyZ3MpOworICAgIGxvZyhjYWxsU3RhY2spOwogfQogCi12b2lk
IENvbnNvbGU6OmVycm9yKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3Zv
aWQgQ29uc29sZTo6ZXJyb3IoU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2spCiB7Ci0gICAgaWYg
KGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdlID0gdGhp
cy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5n
IG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKLQotICAgIEtVUkwg
dXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0Q2FsbGVyKGV4
ZWMsIHVybCwgbGluZU51bWJlcik7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmFk
ZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgdXJsLnByZXR0eVVSTCgpKTsK
LSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNN
ZXNzYWdlU291cmNlLCBFcnJvck1lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgbGluZU51bWJlciwg
dXJsLnN0cmluZygpKTsKLQotICAgIHByaW50VG9TdGFuZGFyZE91dChFcnJvck1lc3NhZ2VMZXZl
bCwgZXhlYywgYXJncywgdXJsKTsKKyAgICBhZGRNZXNzYWdlKEVycm9yTWVzc2FnZUxldmVsLCBj
YWxsU3RhY2spOwogfQogCi12b2lkIENvbnNvbGU6OmluZm8oRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjppbmZvKFNjcmlwdENhbGxTdGFjayogY2Fs
bFN0YWNrKQogewotICAgIGlmIChhcmdzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJpbmco
ZXhlYyk7Ci0KLSAgICBLVVJMIHVybDsKLSAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwotICAgIHJl
dHJpZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxpbmVOdW1iZXIpOwotCi0gICAgcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHVybC5wcmV0dHlVUkwoKSk7Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRN
ZXNzYWdlVG9Db25zb2xlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZUxldmVsLCBleGVjLCBh
cmdzLCBsaW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOwotCi0gICAgcHJpbnRUb1N0YW5kYXJkT3V0
KExvZ01lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgdXJsKTsKKyAgICBsb2coY2FsbFN0YWNrKTsK
IH0KIAotdm9pZCBDb25zb2xlOjpsb2coRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBh
cmdzKQordm9pZCBDb25zb2xlOjpsb2coU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2spCiB7Ci0g
ICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBwYWdl
ID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
U3RyaW5nIG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKLQotICAg
IEtVUkwgdXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0Q2Fs
bGVyKGV4ZWMsIHVybCwgbGluZU51bWJlcik7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50
KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgdXJsLnByZXR0eVVS
TCgpKTsKLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNv
bGUoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIGxpbmVOdW1i
ZXIsIHVybC5zdHJpbmcoKSk7Ci0KLSAgICBwcmludFRvU3RhbmRhcmRPdXQoTG9nTWVzc2FnZUxl
dmVsLCBleGVjLCBhcmdzLCB1cmwpOworICAgIGFkZE1lc3NhZ2UoTG9nTWVzc2FnZUxldmVsLCBj
YWxsU3RhY2spOwogfQogCi12b2lkIENvbnNvbGU6OmRpcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6OmRpcihTY3JpcHRDYWxsU3RhY2sqIGNhbGxT
dGFjaykKIHsKLSAgICBpZiAoYXJncy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNv
bGUoSlNNZXNzYWdlU291cmNlLCBPYmplY3RNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIDAsIFN0
cmluZygpKTsKKyAgICBhZGRNZXNzYWdlKE9iamVjdE1lc3NhZ2VMZXZlbCwgY2FsbFN0YWNrKTsK
IH0KIAotdm9pZCBDb25zb2xlOjpkaXJ4bWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0
JiBhcmdzKQordm9pZCBDb25zb2xlOjpkaXJ4bWwoU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2sp
CiB7Ci0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdl
KiBwYWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xlKEpT
TWVzc2FnZVNvdXJjZSwgTm9kZU1lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgMCwgU3RyaW5nKCkp
OworICAgIGFkZE1lc3NhZ2UoTm9kZU1lc3NhZ2VMZXZlbCwgY2FsbFN0YWNrKTsKIH0KIAotdm9p
ZCBDb25zb2xlOjp0cmFjZShFeGVjU3RhdGUqIGV4ZWMpCit2b2lkIENvbnNvbGU6OnRyYWNlKFNj
cmlwdENhbGxTdGFjayogY2FsbFN0YWNrKQogewotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdl
KCk7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgc2lnbmVkTGlu
ZU51bWJlcjsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRDsKLSAgICBVU3RyaW5nIHVybFN0cmluZzsK
LSAgICBKU1ZhbHVlKiBmdW5jOworICAgIGFkZE1lc3NhZ2UoVHJhY2VNZXNzYWdlTGV2ZWwsIGNh
bGxTdGFjaywgdHJ1ZSk7CiAKLSAgICBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUxhc3RD
YWxsZXIoZXhlYywgc2lnbmVkTGluZU51bWJlciwgc291cmNlSUQsIHVybFN0cmluZywgZnVuYyk7
CisgICAgaWYgKCFzaG91bGRQcmludEV4Y2VwdGlvbnMoKSkKKyAgICAgICAgcmV0dXJuOwogCi0g
ICAgQXJnTGlzdCBhcmdzOwotICAgIHdoaWxlICghZnVuYy0+aXNOdWxsKCkpIHsKLSAgICAgICAg
YXJncy5hcHBlbmQoZnVuYyk7Ci0gICAgICAgIGZ1bmMgPSBleGVjLT5pbnRlcnByZXRlcigpLT5y
ZXRyaWV2ZUNhbGxlcihleGVjLCBhc0ludGVybmFsRnVuY3Rpb24oZnVuYykpOworICAgIHByaW50
ZigiU3RhY2sgVHJhY2VcbiIpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjYWxsU3Rh
Y2stPnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWUgPSBTdHJpbmco
Y2FsbFN0YWNrLT5hdChpKS5mdW5jdGlvbk5hbWUoKSk7CisgICAgICAgIHByaW50ZigiXHQlc1xu
IiwgZnVuY3Rpb25OYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KLSAgICAKLSAgICBwYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoSlNNZXNzYWdlU291cmNl
LCBUcmFjZU1lc3NhZ2VMZXZlbCwgZXhlYywgYXJncywgMCwgU3RyaW5nKCkpOwogfQogCi12b2lk
IENvbnNvbGU6OmFzc2VydENvbmRpdGlvbihib29sIGNvbmRpdGlvbiwgRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9pZCBDb25zb2xlOjphc3NlcnRDb25kaXRpb24oYm9v
bCBjb25kaXRpb24sIFNjcmlwdENhbGxTdGFjayogY2FsbFN0YWNrKQogewogICAgIGlmIChjb25k
aXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBLVVJMIHVybDsKLSAgICB1
bnNpZ25lZCBsaW5lTnVtYmVyOwotICAgIHJldHJpZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxp
bmVOdW1iZXIpOwotCiAgICAgLy8gRklYTUU6IDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkxMzU+IEl0IHdvdWxkIGJlIG5pY2UgdG8gcHJlZml4IGFzc2VydGlvbiBm
YWlsdXJlcyB3aXRoIGEgbWVzc2FnZSBsaWtlICJBc3NlcnRpb24gZmFpbGVkOiAiLgotICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTM2PiBX
ZSBzaG91bGQgcHJpbnQgYSBtZXNzYWdlIGV2ZW4gd2hlbiBhcmdzLmlzRW1wdHkoKSBpcyB0cnVl
LgotCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRNZXNzYWdlVG9Db25zb2xl
KEpTTWVzc2FnZVNvdXJjZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIGxpbmVOdW1i
ZXIsIHVybC5zdHJpbmcoKSk7Ci0KLSAgICBwcmludFRvU3RhbmRhcmRPdXQoRXJyb3JNZXNzYWdl
TGV2ZWwsIGV4ZWMsIGFyZ3MsIHVybCk7CisgICAgYWRkTWVzc2FnZShFcnJvck1lc3NhZ2VMZXZl
bCwgY2FsbFN0YWNrLCB0cnVlKTsKIH0KIAotdm9pZCBDb25zb2xlOjpjb3VudChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit2b2lkIENvbnNvbGU6OmNvdW50KFNjcmlwdENh
bGxTdGFjayogY2FsbFN0YWNrKQogewogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBLVVJMIHVybDsKLSAgICB1bnNp
Z25lZCBsaW5lTnVtYmVyOwotICAgIHJldHJpZXZlTGFzdENhbGxlcihleGVjLCB1cmwsIGxpbmVO
dW1iZXIpOwotCi0gICAgVVN0cmluZyB0aXRsZTsKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMSkK
LSAgICAgICAgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4
ZWMsIGFyZ3MuYXQoZXhlYywgMCkpOworICAgIGNvbnN0IFNjcmlwdENhbGxGcmFtZSYgbGFzdENh
bGxlciA9IGNhbGxTdGFjay0+YXQoMCk7CisgICAgLy8gRm9sbG93IEZpcmVidWcncyBiZWhhdmlv
ciBvZiBjb3VudGluZyB3aXRoIG51bGwgYW5kIHVuZGVmaW5lZCB0aXRsZSBpbgorICAgIC8vIHRo
ZSBzYW1lIGJ1Y2tldCBhcyBubyBhcmd1bWVudAorICAgIFN0cmluZyB0aXRsZTsKKyAgICBnZXRG
aXJzdEFyZ3VtZW50QXNTdHJpbmcobGFzdENhbGxlciwgdGl0bGUpOwogCi0gICAgcGFnZS0+aW5z
cGVjdG9yQ29udHJvbGxlcigpLT5jb3VudCh0aXRsZSwgbGluZU51bWJlciwgdXJsLnN0cmluZygp
KTsKKyAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmNvdW50KHRpdGxlLCBsYXN0Q2Fs
bGVyLmxpbmVOdW1iZXIoKSwgbGFzdENhbGxlci5zb3VyY2VVUkwoKS5zdHJpbmcoKSk7CiB9CiAK
LXZvaWQgQ29uc29sZTo6cHJvZmlsZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCisjaWYgVVNFKEpTQykKKwordm9pZCBDb25zb2xlOjpwcm9maWxlKGNvbnN0IEpTQzo6VVN0
cmluZyYgdGl0bGUsIFNjcmlwdENhbGxTdGFjayogY2FsbFN0YWNrKQogewogICAgIFBhZ2UqIHBh
Z2UgPSB0aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBpZiAodGl0bGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIEZJWE1FOiBs
b2cgYSBjb25zb2xlIG1lc3NhZ2Ugd2hlbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQuCiAgICAgaWYg
KCFwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPnByb2ZpbGVyRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBVU3RyaW5nIHRpdGxlID0gYXJncy5hdChleGVjLCAwKS0+dG9TdHJp
bmcoZXhlYyk7Ci0gICAgUHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0YXJ0UHJvZmlsaW5nKGV4ZWMs
IHRpdGxlKTsKKyAgICBKU0M6OlByb2ZpbGVyOjpwcm9maWxlcigpLT5zdGFydFByb2ZpbGluZyhj
YWxsU3RhY2stPnN0YXRlKCksIHRpdGxlKTsKIH0KIAotdm9pZCBDb25zb2xlOjpwcm9maWxlRW5k
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3ZvaWQgQ29uc29sZTo6cHJv
ZmlsZUVuZChjb25zdCBKU0M6OlVTdHJpbmcmIHRpdGxlLCBTY3JpcHRDYWxsU3RhY2sqIGNhbGxT
dGFjaykKIHsKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICghcGFnZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCkt
PnByb2ZpbGVyRW5hYmxlZCgpKQorICAgIGlmICh0aXRsZS5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgVVN0cmluZyB0aXRsZTsKLSAgICBpZiAoYXJncy5zaXplKCkgPj0gMSkKLSAg
ICAgICAgdGl0bGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMs
IGFyZ3MuYXQoZXhlYywgMCkpOworICAgIGlmICghcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5wcm9maWxlckVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFByb2Zp
bGU+IHByb2ZpbGUgPSBQcm9maWxlcjo6cHJvZmlsZXIoKS0+c3RvcFByb2ZpbGluZyhleGVjLCB0
aXRsZSk7CisgICAgUmVmUHRyPEpTQzo6UHJvZmlsZT4gcHJvZmlsZSA9IEpTQzo6UHJvZmlsZXI6
OnByb2ZpbGVyKCktPnN0b3BQcm9maWxpbmcoY2FsbFN0YWNrLT5zdGF0ZSgpLCB0aXRsZSk7CiAg
ICAgaWYgKCFwcm9maWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Byb2ZpbGVzLmFwcGVu
ZChwcm9maWxlKTsKIAogICAgIGlmIChQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpKSB7Ci0gICAg
ICAgIEtVUkwgdXJsOwotICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwotICAgICAgICByZXRy
aWV2ZUxhc3RDYWxsZXIoZXhlYywgdXJsLCBsaW5lTnVtYmVyKTsKLQotICAgICAgICBwYWdlLT5p
bnNwZWN0b3JDb250cm9sbGVyKCktPmFkZFByb2ZpbGUocHJvZmlsZSwgbGluZU51bWJlciwgdXJs
KTsKKyAgICAgICAgY29uc3QgU2NyaXB0Q2FsbEZyYW1lJiBsYXN0Q2FsbGVyID0gY2FsbFN0YWNr
LT5hdCgwKTsKKyAgICAgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5hZGRQcm9maWxl
KHByb2ZpbGUsIGxhc3RDYWxsZXIubGluZU51bWJlcigpLCBsYXN0Q2FsbGVyLnNvdXJjZVVSTCgp
KTsKICAgICB9CiB9CiAKLXZvaWQgQ29uc29sZTo6dGltZShjb25zdCBVU3RyaW5nJiB0aXRsZSkK
LXsKLSAgICBpZiAodGl0bGUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKKyNlbmRpZgogICAg
IAordm9pZCBDb25zb2xlOjp0aW1lKGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CiAgICAgUGFnZSog
cGFnZSA9IHRoaXMtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEZvbGxvdyBGaXJlYnVnJ3MgYmVoYXZpb3Igb2YgcmVxdWlyaW5nIGEgdGl0bGUgdGhh
dCBpcyBub3QgbnVsbCBvcgorICAgIC8vIHVuZGVmaW5lZCBmb3IgdGltaW5nIGZ1bmN0aW9ucwor
ICAgIGlmICh0aXRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHBhZ2Ut
Pmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c3RhcnRUaW1pbmcodGl0bGUpOwogfQogCi12b2lkIENv
bnNvbGU6OnRpbWVFbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQordm9p
ZCBDb25zb2xlOjp0aW1lRW5kKGNvbnN0IFN0cmluZyYgdGl0bGUsIFNjcmlwdENhbGxTdGFjayog
Y2FsbFN0YWNrKQogewotICAgIFVTdHJpbmcgdGl0bGU7Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpID49
IDEpCi0gICAgICAgIHRpdGxlID0gdmFsdWVUb1N0cmluZ1dpdGhVbmRlZmluZWRPck51bGxDaGVj
ayhleGVjLCBhcmdzLmF0KGV4ZWMsIDApKTsKLSAgICBpZiAodGl0bGUuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGb2xsb3cgRmlyZWJ1ZydzIGJlaGF2aW9y
IG9mIHJlcXVpcmluZyBhIHRpdGxlIHRoYXQgaXMgbm90IG51bGwgb3IKKyAgICAvLyB1bmRlZmlu
ZWQgZm9yIHRpbWluZyBmdW5jdGlvbnMKKyAgICBpZiAodGl0bGUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybjsKKwogICAgIGRvdWJsZSBlbGFwc2VkOwogICAgIGlmICghcGFnZS0+aW5zcGVjdG9y
Q29udHJvbGxlcigpLT5zdG9wVGltaW5nKHRpdGxlLCBlbGFwc2VkKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RyaW5nIG1lc3NhZ2UgPSBTdHJpbmcodGl0bGUpICsgU3RyaW5nOjpmb3JtYXQo
IjogJS4wZm1zIiwgZWxhcHNlZCk7CisgICAgU3RyaW5nIG1lc3NhZ2UgPSB0aXRsZSArIFN0cmlu
Zzo6Zm9ybWF0KCI6ICUuMGZtcyIsIGVsYXBzZWQpOwogCi0gICAgS1VSTCB1cmw7Ci0gICAgdW5z
aWduZWQgbGluZU51bWJlcjsKLSAgICByZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgdXJsLCBsaW5l
TnVtYmVyKTsKLQotICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+YWRkTWVzc2FnZVRv
Q29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgbGluZU51
bWJlciwgdXJsLnN0cmluZygpKTsKKyAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGxhc3RDYWxs
ZXIgPSBjYWxsU3RhY2stPmF0KDApOworICAgIHBhZ2UtPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+
YWRkTWVzc2FnZVRvQ29uc29sZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VMZXZlbCwgbWVz
c2FnZSwgbGFzdENhbGxlci5saW5lTnVtYmVyKCksIGxhc3RDYWxsZXIuc291cmNlVVJMKCkuc3Ry
aW5nKCkpOwogfQogCi12b2lkIENvbnNvbGU6Omdyb3VwKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
QXJnTGlzdCYgYXJndW1lbnRzKQordm9pZCBDb25zb2xlOjpncm91cChTY3JpcHRDYWxsU3RhY2sq
IGNhbGxTdGFjaykKIHsKICAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigp
LT5zdGFydEdyb3VwKEpTTWVzc2FnZVNvdXJjZSwgZXhlYywgYXJndW1lbnRzLCAwLCBTdHJpbmco
KSk7CisgICAgcGFnZS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLT5zdGFydEdyb3VwKEpTTWVzc2Fn
ZVNvdXJjZSwgY2FsbFN0YWNrKTsKIH0KIAogdm9pZCBDb25zb2xlOjpncm91cEVuZCgpCkBAIC00
MjMsMjUgKzM0NSw5IEBAIHZvaWQgQ29uc29sZTo6Z3JvdXBFbmQoKQogICAgIHBhZ2UtPmluc3Bl
Y3RvckNvbnRyb2xsZXIoKS0+ZW5kR3JvdXAoSlNNZXNzYWdlU291cmNlLCAwLCBTdHJpbmcoKSk7
CiB9CiAKLXZvaWQgQ29uc29sZTo6d2FybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3MpCit2b2lkIENvbnNvbGU6Ondhcm4oU2NyaXB0Q2FsbFN0YWNrKiBjYWxsU3RhY2spCiB7
Ci0gICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQYWdlKiBw
YWdlID0gdGhpcy0+cGFnZSgpOwotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgU3RyaW5nIG1lc3NhZ2UgPSBhcmdzLmF0KGV4ZWMsIDApLT50b1N0cmluZyhleGVjKTsKLQot
ICAgIEtVUkwgdXJsOwotICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgcmV0cmlldmVMYXN0
Q2FsbGVyKGV4ZWMsIHVybCwgbGluZU51bWJlcik7Ci0KLSAgICBwYWdlLT5jaHJvbWUoKS0+Y2xp
ZW50KCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgbGluZU51bWJlciwgdXJsLnByZXR0
eVVSTCgpKTsKLSAgICBwYWdlLT5pbnNwZWN0b3JDb250cm9sbGVyKCktPmFkZE1lc3NhZ2VUb0Nv
bnNvbGUoSlNNZXNzYWdlU291cmNlLCBXYXJuaW5nTWVzc2FnZUxldmVsLCBleGVjLCBhcmdzLCBs
aW5lTnVtYmVyLCB1cmwuc3RyaW5nKCkpOwotCi0gICAgcHJpbnRUb1N0YW5kYXJkT3V0KFdhcm5p
bmdNZXNzYWdlTGV2ZWwsIGV4ZWMsIGFyZ3MsIHVybCk7CisgICAgYWRkTWVzc2FnZShXYXJuaW5n
TWVzc2FnZUxldmVsLCBjYWxsU3RhY2spOwogfQogCiBzdGF0aWMgYm9vbCBwcmludEV4Y2VwdGlv
bnMgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmggYi9XZWJDb3Jl
L3BhZ2UvQ29uc29sZS5oCmluZGV4IGQ4NzE1YmEuLjczMDFmYzkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGFnZS9Db25zb2xlLmgKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaApAQCAtMzAsMjIg
KzMwLDI0IEBACiAjZGVmaW5lIENvbnNvbGVfaAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKworI2lmIFVTRShKU0MpCiAjaW5jbHVkZSA8cHJvZmlsZXIvUHJvZmlsZS5oPgorI2VuZGlm
CisKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKLW5hbWVzcGFjZSBKU0MgewotICAgIGNsYXNzIEV4ZWNTdGF0ZTsKLSAgICBjbGFzcyBB
cmdMaXN0OwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBVU0UoSlNDKQogICAgIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxKU0M6OlByb2ZpbGU+ID4gUHJvZmlsZXNBcnJheTsKKyNlbmRp
ZgogCiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBTdHJpbmc7
CisgICAgY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogCiAgICAgLy8gS2VlcCBpbiBzeW5jIHdpdGgg
aW5zcGVjdG9yL2Zyb250LWVuZC9Db25zb2xlLmpzCiAgICAgZW51bSBNZXNzYWdlU291cmNlIHsK
QEAgLTc3LDM3ICs3OSw0MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBh
ZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAKKyAg
ICAgICAgdm9pZCBkZWJ1ZyhTY3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAgdm9pZCBlcnJvcihT
Y3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAgdm9pZCBpbmZvKFNjcmlwdENhbGxTdGFjayopOwor
ICAgICAgICB2b2lkIGxvZyhTY3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAgdm9pZCB3YXJuKFNj
cmlwdENhbGxTdGFjayopOworICAgICAgICB2b2lkIGRpcihTY3JpcHRDYWxsU3RhY2sqKTsKKyAg
ICAgICAgdm9pZCBkaXJ4bWwoU2NyaXB0Q2FsbFN0YWNrKik7CisgICAgICAgIHZvaWQgdHJhY2Uo
U2NyaXB0Q2FsbFN0YWNrKik7CisgICAgICAgIHZvaWQgYXNzZXJ0Q29uZGl0aW9uKGJvb2wgY29u
ZGl0aW9uLCBTY3JpcHRDYWxsU3RhY2sqKTsKKyAgICAgICAgdm9pZCBjb3VudChTY3JpcHRDYWxs
U3RhY2sqKTsKICNpZiBVU0UoSlNDKQotICAgICAgICB2b2lkIGRlYnVnKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgZXJyb3IoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAgICAgICAgdm9pZCBpbmZvKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgbG9nKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7Ci0gICAgICAgIHZvaWQgd2FybihKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAgICAgICB2b2lkIGRpcihKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAgICAgICB2b2lkIGRpcnhtbChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJndW1lbnRzKTsKLSAgICAgICAgdm9pZCB0
cmFjZShKU0M6OkV4ZWNTdGF0ZSopOwotICAgICAgICB2b2lkIGFzc2VydENvbmRpdGlvbihib29s
IGNvbmRpdGlvbiwgSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsKLSAgICAg
ICAgdm9pZCBjb3VudChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlzdCYpOwotICAg
ICAgICB2b2lkIHByb2ZpbGUoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3QmKTsK
LSAgICAgICAgdm9pZCBwcm9maWxlRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdM
aXN0Jik7Ci0gICAgICAgIHZvaWQgdGltZShjb25zdCBKU0M6OlVTdHJpbmcmIHRpdGxlKTsKLSAg
ICAgICAgdm9pZCB0aW1lRW5kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7
Ci0gICAgICAgIHZvaWQgZ3JvdXAoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
KTsKKyAgICAgICAgdm9pZCBwcm9maWxlKGNvbnN0IEpTQzo6VVN0cmluZyYsIFNjcmlwdENhbGxT
dGFjayopOworICAgICAgICB2b2lkIHByb2ZpbGVFbmQoY29uc3QgSlNDOjpVU3RyaW5nJiwgU2Ny
aXB0Q2FsbFN0YWNrKik7CisjZW5kaWYKKyAgICAgICAgdm9pZCB0aW1lKGNvbnN0IFN0cmluZyYp
OworICAgICAgICB2b2lkIHRpbWVFbmQoY29uc3QgU3RyaW5nJiwgU2NyaXB0Q2FsbFN0YWNrKik7
CisgICAgICAgIHZvaWQgZ3JvdXAoU2NyaXB0Q2FsbFN0YWNrKik7CiAgICAgICAgIHZvaWQgZ3Jv
dXBFbmQoKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBzaG91bGRQcmludEV4Y2VwdGlvbnMoKTsK
ICAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkUHJpbnRFeGNlcHRpb25zKGJvb2wpOwogCisj
aWYgVVNFKEpTQykKICAgICAgICAgY29uc3QgUHJvZmlsZXNBcnJheSYgcHJvZmlsZXMoKSBjb25z
dCB7IHJldHVybiBtX3Byb2ZpbGVzOyB9CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IGlubGluZSBQYWdlKiBwYWdlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgYWRkTWVzc2FnZShNZXNz
YWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayosIGJvb2wgYWNjZXB0Tm9Bcmd1bWVudHMgPSBmYWxz
ZSk7CiAKICAgICAgICAgQ29uc29sZShGcmFtZSopOwogCiAgICAgICAgIEZyYW1lKiBtX2ZyYW1l
OworI2lmIFVTRShKU0MpCiAgICAgICAgIFByb2ZpbGVzQXJyYXkgbV9wcm9maWxlczsKKyNlbmRp
ZgogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGFnZS9Db25zb2xlLmlkbCBiL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbAppbmRleCA5MDc1OTYz
Li5mYjc2ODhkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5pZGwKKysrIGIvV2Vi
Q29yZS9wYWdlL0NvbnNvbGUuaWRsCkBAIC0yOSwyNCArMjksMzAgQEAKIG1vZHVsZSB3aW5kb3cg
ewogCiAgICAgaW50ZXJmYWNlIENvbnNvbGUgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
W0N1c3RvbUdldHRlcl0gQXJyYXkgcHJvZmlsZXM7ICAgICAgICAKKworI2lmICFkZWZpbmVkKFY4
X0JJTkRJTkcpCisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ3VzdG9tR2V0dGVyXSBBcnJh
eSBwcm9maWxlczsKKyNlbmRpZgogICAgIAotICAgICAgICBbQ3VzdG9tXSB2b2lkIGRlYnVnKCk7
Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgZXJyb3IoKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBp
bmZvKCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgbG9nKCk7Ci0gICAgICAgIFtDdXN0b21dIHZv
aWQgd2FybigpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIGRpcigpOwotICAgICAgICBbQ3VzdG9t
XSB2b2lkIGRpcnhtbCgpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHRyYWNlKCk7Ci0gICAgICAg
IFtDdXN0b20sIEltcGxlbWVudGF0aW9uRnVuY3Rpb249YXNzZXJ0Q29uZGl0aW9uXSB2b2lkIGFz
c2VydChpbiBib29sZWFuIGNvbmRpdGlvbik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgY291bnQo
KTsKKyAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgZGVidWcoKTsKKyAgICAg
ICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgZXJyb3IoKTsKKyAgICAgICAgW0N1c3Rv
bUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgaW5mbygpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRI
YW5kbGluZ10gdm9pZCBsb2coKTsKKyAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZv
aWQgd2FybigpOworICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBkaXIoKTsK
KyAgICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgZGlyeG1sKCk7CisgICAgICAg
IFtDdXN0b21Bcmd1bWVudEhhbmRsaW5nXSB2b2lkIHRyYWNlKCk7CisgICAgICAgIFtDdXN0b21B
cmd1bWVudEhhbmRsaW5nLCBJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uPWFzc2VydENvbmRpdGlvbl0g
dm9pZCBhc3NlcnQoaW4gYm9vbGVhbiBjb25kaXRpb24pOworICAgICAgICBbQ3VzdG9tQXJndW1l
bnRIYW5kbGluZ10gdm9pZCBjb3VudCgpOworCisjaWYgIWRlZmluZWQoVjhfQklORElORykKKyAg
ICAgICAgW0N1c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZShpbiBbQ29udmVydFVu
ZGVmaW5lZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKKyAgICAgICAgW0N1
c3RvbUFyZ3VtZW50SGFuZGxpbmddIHZvaWQgcHJvZmlsZUVuZChpbiBbQ29udmVydFVuZGVmaW5l
ZE9yTnVsbFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIHRpdGxlKTsKKyNlbmRpZgogCi0gICAgICAg
IFtDdXN0b21dIHZvaWQgcHJvZmlsZShpbiBET01TdHJpbmcgdGl0bGUpOwotICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHByb2ZpbGVFbmQoKTsKICAgICAgICAgdm9pZCB0aW1lKGluIFtDb252ZXJ0VW5k
ZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdGl0bGUpOwotICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHRpbWVFbmQoKTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCBncm91cCgpOworICAg
ICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCB0aW1lRW5kKGluIFtDb252ZXJ0VW5k
ZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgdGl0bGUpOworICAgICAgICBbQ3Vz
dG9tQXJndW1lbnRIYW5kbGluZ10gdm9pZCBncm91cCgpOwogICAgICAgICB2b2lkIGdyb3VwRW5k
KCk7CiAgICAgfTsKIAo=
</data>
<flag name="review"
          id="12136"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>