<?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>105602</bug_id>
          
          <creation_ts>2012-12-20 18:51:48 -0800</creation_ts>
          <short_desc>[EFL][WebGL] Implement EGL support with GLX</short_desc>
          <delta_ts>2012-12-27 13:17:19 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>105286</blocked>
    
    <blocked>105659</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kalyan">kalyan.kondapally</reporter>
          <assigned_to name="Kalyan">kalyan.kondapally</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>796041</commentid>
    <comment_count>0</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-20 18:51:48 -0800</bug_when>
    <thetext>Implement EGL support with GLX.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796426</commentid>
    <comment_count>1</comment_count>
      <attachid>180545</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-21 12:46:53 -0800</bug_when>
    <thetext>Created attachment 180545
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796430</commentid>
    <comment_count>2</comment_count>
      <attachid>180545</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-12-21 12:56:57 -0800</bug_when>
    <thetext>Comment on attachment 180545
patch

Attachment 180545 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15464387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796439</commentid>
    <comment_count>3</comment_count>
      <attachid>180545</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-21 13:33:51 -0800</bug_when>
    <thetext>Comment on attachment 180545
patch

will upload a new patch with the build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796452</commentid>
    <comment_count>4</comment_count>
      <attachid>180553</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-21 14:01:39 -0800</bug_when>
    <thetext>Created attachment 180553
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796466</commentid>
    <comment_count>5</comment_count>
      <attachid>180557</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-21 14:32:40 -0800</bug_when>
    <thetext>Created attachment 180557
patch

fixed some white spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796504</commentid>
    <comment_count>6</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-21 15:25:51 -0800</bug_when>
    <thetext>I would like to hear Zeno&apos;s opinion on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796513</commentid>
    <comment_count>7</comment_count>
      <attachid>180557</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-21 15:50:12 -0800</bug_when>
    <thetext>Comment on attachment 180557
patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        by passing -DENABLE_EGL=ON as cmake config parameter. This is disabled by default.
&gt; +        Reviewed by NOBODY (OOPS!).

Reviewed by should be below the bugzilla link

&gt; Source/WebCore/ChangeLog:29
&gt; +        (WebCore):
&gt; +        (WebCore::GLPlatformContext::createContext):
&gt; +        (WebCore::GLPlatformContext::createOffScreenContext):
&gt; +        (WebCore::GLPlatformContext::createCurrentContextWrapper):
&gt; +        * platform/graphics/opengl/GLPlatformContext.h:
&gt; +        * platform/graphics/opengl/GLPlatformSurface.cpp:
&gt; +        (WebCore::GLPlatformSurface::createTransportSurface):
&gt; +        * platform/graphics/surfaces/egl/EGLContext.cpp: Added.
&gt; +        (WebCore):
&gt; +        (WebCore::isRobustnessExtSupported):
&gt; +        (WebCore::EGLCurrentContextWrapper::EGLCurrentContextWrapper):
&gt; +        (WebCore::EGLCurrentContextWrapper::handle):
&gt; +        (WebCore::EGLOffScreenContext::EGLOffScreenContext):
&gt; +        (WebCore::EGLOffScreenContext::initialize):

Very little information here...

This patch needs a lot more information on what you are doing and why. Without this is it very hard to understand and review

&gt; Source/WebCore/platform/graphics/opengl/GLDefs.h:62
&gt; +static const EGLenum eglApi = EGL_OPENGL_ES_API;

eglAPIVersion ?

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:82
&gt;  #if USE(GLX)
&gt; -    OwnPtr&lt;GLPlatformContext&gt; glxContext = adoptPtr(new GLXOffScreenContext());
&gt; -    return glxContext.release();
&gt; +    OwnPtr&lt;GLPlatformContext&gt; context = adoptPtr(new GLXOffScreenContext());
&gt; +    return context.release();
&gt; +#endif
&gt; +
&gt; +#if USE(EGL)

Why not #elif ?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:65
&gt; +            std::string foundExtensions(extensions);

why not use WebCore strings?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:67
&gt; +            std::string extName(&quot;EGL_EXT_create_context_robustness &quot;);

extensionName
is the &quot; &quot; needed?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:80
&gt; +// FixMe: This is a temporary workaround till we are able to build evas with EGL support

We write FIXME: not FixMe:

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:97
&gt; +    // set current rendering API

Set* API.* (Capital, punctuation mark)

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:98
&gt; +    EGLBoolean eglResult = eglBindAPI(eglApi);

why not just result or success

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:117
&gt; +    if (config) {
&gt; +
&gt; +        if (isRobustnessExtSupported(m_display))

Unneeded, weird newline

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:143
&gt; +    // set current rendering API

Comment style

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:144
&gt; +    EGLBoolean eglResult = eglBindAPI(eglApi);

success ?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:31
&gt; +#include &quot;NotImplemented.h&quot;

You dont seem to use this

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:39
&gt; +        LOG_ERROR(&quot;No valid hardware display found. \n&quot;);

unneeded space in error message

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:51
&gt; +        LOG_ERROR(&quot;Failed to create XWindow. \n&quot;);

same

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:59
&gt; +        LOG_ERROR(&quot;Failed to create EGL surface. \n&quot;);

again

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:85
&gt; +    // post EGL surface to window

commetn style

&gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:53
&gt; +            int maj, min;

major, minor please

&gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:56
&gt; +            m_eglDisplay = eglGetDisplay((EGLNativeDisplayType) SharedX11Resources::x11Display());

C++ cast?

&gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:59
&gt; +                LOG_ERROR(&quot;EGLDisplay Initialization failed&quot;);

You added \n before... does this LOG_ERROR need \n or not? Consistency please

&gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:74
&gt; +                LOG_ERROR(&quot;failed to set EGL API(%d).\n&quot;, eglGetError());

is \n needed?

&gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:174
&gt; +        visualId = (VisualID)eglValue;

c++ cast

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.h:158
&gt; +// Dummy Implementation to avoid ifdefs

Could be a better comment. Like when is it used? also missing punctation mark

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.h:159
&gt; +class DummySharedResources : public SharedX11Resources {

I tihnk the style is calling it EmptySharedResources... like we have the EmptyChromeClient or similar in WebCore

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.h:170
&gt; +        return 0;

return nullptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796594</commentid>
    <comment_count>8</comment_count>
      <attachid>180586</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-21 19:37:00 -0800</bug_when>
    <thetext>Created attachment 180586
patch

review changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796597</commentid>
    <comment_count>9</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-21 19:43:44 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 180557 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180557&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        by passing -DENABLE_EGL=ON as cmake config parameter. This is disabled by default.
&gt; 

&gt; &gt; +        (WebCore::EGLOffScreenContext::initialize):
&gt; 
&gt; Very little information here...
&gt; 
&gt; This patch needs a lot more information on what you are doing and why. Without this is it very hard to understand and review

Added relevant info to the changelog.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/opengl/GLDefs.h:62
&gt; &gt; +static const EGLenum eglApi = EGL_OPENGL_ES_API;
&gt; 
&gt; eglAPIVersion ?

Fixed.

&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt; +#if USE(EGL)
&gt; 
&gt; Why not #elif ?
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:65
&gt; &gt; +            std::string foundExtensions(extensions);
&gt; 
&gt; why not use WebCore strings?

Changed to use WebCore strings.
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:67
&gt; &gt; +            std::string extName(&quot;EGL_EXT_create_context_robustness &quot;);
&gt; 
&gt; extensionName
&gt; is the &quot; &quot; needed?
Yes.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:80
&gt; &gt; +// FixMe: This is a temporary workaround till we are able to build evas with EGL support
&gt; 
&gt; We write FIXME: not FixMe:
&gt; 
Fixed
&gt; 
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:144
&gt; &gt; +    EGLBoolean eglResult = eglBindAPI(eglApi);
&gt; 
&gt; success ?

Changed.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.cpp:31
&gt; &gt; +#include &quot;NotImplemented.h&quot;
&gt; 
&gt; You dont seem to use this

Removed

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:56
&gt; &gt; +            m_eglDisplay = eglGetDisplay((EGLNativeDisplayType) SharedX11Resources::x11Display());
&gt; 
&gt; C++ cast?
Fixed

&gt; 
&gt; You added \n before... does this LOG_ERROR need \n or not? Consistency please
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:74
&gt; &gt; +                LOG_ERROR(&quot;failed to set EGL API(%d).\n&quot;, eglGetError());
&gt; 
&gt; is \n needed?

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:174
&gt; &gt; +        visualId = (VisualID)eglValue;
&gt; 
&gt; c++ cast

Done

&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.h:158
&gt; &gt; +// Dummy Implementation to avoid ifdefs
&gt; 
&gt; Could be a better comment. Like when is it used? also missing punctation mark
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.h:159

Removed DummySharedResources as it wasn&apos;t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796667</commentid>
    <comment_count>10</comment_count>
      <attachid>180602</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-22 05:26:01 -0800</bug_when>
    <thetext>Created attachment 180602
rebasedpatch

rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796674</commentid>
    <comment_count>11</comment_count>
      <attachid>180602</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-22 10:19:28 -0800</bug_when>
    <thetext>Comment on attachment 180602
rebasedpatch

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

The dependency between EGL &amp; X11 needs to be more explicit and encapsulated.

&gt; Source/WebCore/ChangeLog:24
&gt; +        EGL implementation for Context Management.

Put comment after filenames

&gt; Source/WebCore/ChangeLog:44
&gt; +        EGL implementation for Offscreen Surface.

Ditto

&gt; Source/WebCore/ChangeLog:57
&gt; +        X integration.

Ditto

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.h:37
&gt; +class EGLTransportSurface : public X11OffScreenWindow {

This should be an EGLX11TransportSurface.
EGL doesn&apos;t always support X11.

&gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:37
&gt; +class SharedEGLResources : public SharedX11Resources {

What is the benefit of tying EGL resources to X11 resources? Can we somehow separate them a bit better?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796680</commentid>
    <comment_count>12</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-22 12:40:01 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 180602 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180602&amp;action=review
&gt; 
&gt; The dependency between EGL &amp; X11 needs to be more explicit and encapsulated.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.h:37
&gt; &gt; +class EGLTransportSurface : public X11OffScreenWindow {
&gt; 
&gt; This should be an EGLX11TransportSurface.
&gt; EGL doesn&apos;t always support X11.

We use a EGLSurface backed by a native pixmap. All the stuff related to native resource management(XWindow in this case) has been moved to X11OffscreenWindow. We could get rid of the inheritance and make EGLTransportSurface construct the respective class (NativeOffscreenWindow i.e X11OffScreenWindow) as needed. Idea is not to have any native window dependencies in this class. Does that sound ok ??
 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:37
&gt; &gt; +class SharedEGLResources : public SharedX11Resources {
&gt; 
&gt; What is the benefit of tying EGL resources to X11 resources? Can we somehow separate them a bit better?

Purpose was for X integration. Here we use X11 resources to find the right configs and XVisuals. Ofcourse, I could try moving this to SharedX11Resources class. Get rid of the inheritance and let this class construct SharedX11Resources as needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796827</commentid>
    <comment_count>13</comment_count>
      <attachid>180633</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-23 17:29:30 -0800</bug_when>
    <thetext>Created attachment 180633
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796830</commentid>
    <comment_count>14</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-23 17:39:14 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 180602 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180602&amp;action=review

&gt; &gt; Source/WebCore/ChangeLog:57
&gt; &gt; +        X integration.
&gt; 
&gt; Ditto
Fixed

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.h:37
&gt; &gt; +class EGLTransportSurface : public X11OffScreenWindow {
&gt; 
&gt; This should be an EGLX11TransportSurface.
&gt; EGL doesn&apos;t always support X11.


&gt; &gt; Source/WebCore/platform/graphics/surfaces/glx/EGLXWindowResources.h:37
&gt; &gt; +class SharedEGLResources : public SharedX11Resources {
&gt; 
&gt; What is the benefit of tying EGL resources to X11 resources? Can we somehow separate them a bit better?

I have separated the X parts now. This is removed completely and moved the logic to find EGLConfig to EGLConfigHelper class. This doesn&apos;t have any dependencies on X. Native Window resource Management and EGL related things are separated now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796831</commentid>
    <comment_count>15</comment_count>
      <attachid>180633</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-23 17:43:07 -0800</bug_when>
    <thetext>Comment on attachment 180633
patch

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

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.cpp:75
&gt;      XVisualInfo* visInfo = m_sharedResources-&gt;visualInfo();

I have some ifdefs like this in place as this is common code shared between GLX and EGL implementation. Once we finalize this, I will make the changes for GLX implementation and remove them in a separate changeset. I was trying to avoid any major GLX changes in this changeset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796832</commentid>
    <comment_count>16</comment_count>
      <attachid>180633</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-23 17:56:09 -0800</bug_when>
    <thetext>Comment on attachment 180633
patch

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

Have to sort out the m_contextHandle stuff...

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:89
&gt; +    OwnPtr&lt;GLPlatformContext&gt; context = adoptPtr(new GLXCurrentContextWrapper());
&gt; +    return context.release();

You don&apos;t need two lines here, adoptPtr already returns a PassOwnPtr.

return adoptPtr(new GLXCurrentContextWrapper());

&gt; Source/WebCore/platform/graphics/opengl/GLPlatformContext.cpp:92
&gt; +    OwnPtr&lt;GLPlatformContext&gt; context = adoptPtr(new EGLCurrentContextWrapper());
&gt; +    return context.release();

ditto

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp:116
&gt; +#if USE(OPENGL_ES_2)
&gt; +            EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
&gt; +#else
&gt; +            EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
&gt; +#endif

Instead of repeating this twice, you can have a function EGLint getRenderableType() that returns a different value based on the define.

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp:140
&gt; +#if USE(OPENGL_ES_2)
&gt; +            EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
&gt; +#else
&gt; +            EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
&gt; +#endif

Ditto

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:29
&gt; +#if USE(ACCELERATED_COMPOSITING) &amp;&amp; USE(EGL)

I don&apos;t understand why all these classes are wrapped with ACCELERATED_COMPOSITING.

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:57
&gt; +    static bool queryDone = false;

queryDone =&gt; didQueryForRobustnessExtension

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:58
&gt; +    static bool isEGLEXTsupported = false;

isRobustnessExtensionSupported

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:77
&gt; +// FIXME: This is a temporary workaround till we are able to build evas with EGL support

till =&gt; until
Period at end of sentence(.)

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:111
&gt; +        if (!m_contextHandle &amp;&amp; m_contextHandle != EGL_NO_CONTEXT)

EGL_NO_CONTEXT is 0
So this line means if (!handle &amp;&amp; handle)

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:116
&gt; +        if (m_contextHandle &amp;&amp; m_contextHandle != EGL_NO_CONTEXT)

This is superfluously redundant :)

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.h:40
&gt; +    PlatformContext handle() const;

add OVERRIDE keyword for overrides</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796958</commentid>
    <comment_count>17</comment_count>
      <attachid>180664</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-24 05:37:20 -0800</bug_when>
    <thetext>Created attachment 180664
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>796959</commentid>
    <comment_count>18</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-24 05:39:29 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 180633 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180633&amp;action=review
&gt; 
&gt; Have to sort out the m_contextHandle stuff...
&gt; 
&gt; You don&apos;t need two lines here, adoptPtr already returns a PassOwnPtr.
&gt; 
&gt; return adoptPtr(new GLXCurrentContextWrapper());

done

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:29
&gt; &gt; +#if USE(ACCELERATED_COMPOSITING) &amp;&amp; USE(EGL)
&gt; 
&gt; I don&apos;t understand why all these classes are wrapped with ACCELERATED_COMPOSITING.

Removed the checks.
 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:57
&gt; &gt; +    static bool queryDone = false;
&gt; 
&gt; queryDone =&gt; didQueryForRobustnessExtension
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:58
&gt; &gt; +    static bool isEGLEXTsupported = false;
&gt; 
&gt; isRobustnessExtensionSupported
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:77
&gt; &gt; +// FIXME: This is a temporary workaround till we are able to build evas with EGL support
&gt; 
&gt; till =&gt; until
&gt; Period at end of sentence(.)

done

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:111
&gt; &gt; +        if (!m_contextHandle &amp;&amp; m_contextHandle != EGL_NO_CONTEXT)
&gt; 
&gt; EGL_NO_CONTEXT is 0
&gt; So this line means if (!handle &amp;&amp; handle)

oops missed that. Fixed now

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:116
&gt; &gt; +        if (m_contextHandle &amp;&amp; m_contextHandle != EGL_NO_CONTEXT)
&gt; 
&gt; This is superfluously redundant :)

:)

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.h:40
&gt; &gt; +    PlatformContext handle() const;
&gt; 
&gt; add OVERRIDE keyword for overrides

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797130</commentid>
    <comment_count>19</comment_count>
      <attachid>180664</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-25 03:35:00 -0800</bug_when>
    <thetext>Comment on attachment 180664
patch

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

&gt; Source/WebCore/ChangeLog:75
&gt; +        Helper class to initialize EGL resources and choose right EGL configiration.

spelling configuration*

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp:130
&gt; +    return m_pbufferfbConfig;

m_pBufferFBConfig ?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp:156
&gt; +    m_surfaceContextfbConfig = 0;

...FBConfig ?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:79
&gt; +// FIXME: This is a temporary workaround until we are able to build evas with EGL support.
&gt; +PlatformContext EGLCurrentContextWrapper::handle() const

What about othre non-evas platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797190</commentid>
    <comment_count>20</comment_count>
      <attachid>180664</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-12-25 17:30:52 -0800</bug_when>
    <thetext>Comment on attachment 180664
patch

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

Great work. I don&apos;t fully understand yet. some nits after looking over.

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:35
&gt; +#endif

Is it needed?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:135
&gt; +    if (!eglBindAPI(eglAPIVersion)) {

calling eglBindAPI every makeCurrent seems to be a bit heavy.. I&apos;m not sure :)

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.h:40
&gt; +    PlatformContext handle() const OVERRIDE;

nits: virtual PlatformContext handle() const OVERRIDE;

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.h:45
&gt; +    WTF_MAKE_NONCOPYABLE(EGLOffScreenContext);

Not necessary because GLPlatformContext is already non-copyable.

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.h:54
&gt; +    bool isCurrentContext() const OVERRIDE;

nits: I think all above methods should have &apos;virtual&apos; keyword.

&gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.cpp:105
&gt; +    m_bufferHandle = tempHandleId;

m_bufferHandle is still needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797407</commentid>
    <comment_count>21</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-26 15:56:42 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 180664 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180664&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:75
&gt; &gt; +        Helper class to initialize EGL resources and choose right EGL  
&gt; What about othre non-evas platforms

This should work if there is support for EGL. We need to use some kind of if defs for our port and replace glx call with EGL. This is a temporary workaround till we have our view get the surface and context from PlatformSurface. Quick solution would be to get evas built with EGL support though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797411</commentid>
    <comment_count>22</comment_count>
      <attachid>180664</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-26 16:32:11 -0800</bug_when>
    <thetext>Comment on attachment 180664
patch

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

&gt;&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:35
&gt;&gt; +#endif
&gt; 
&gt; Is it needed?

Yes, we use glx call to query for current context. i.e see line 81 below

&gt;&gt; Source/WebCore/platform/graphics/surfaces/glx/X11WindowResources.cpp:105
&gt;&gt; +    m_bufferHandle = tempHandleId;
&gt; 
&gt; m_bufferHandle is still needed?

Yes, till this changes are taken into account in GLX side. I plan to do it in another changeset, so we could avoid any major GLX changes in this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797437</commentid>
    <comment_count>23</comment_count>
      <attachid>180772</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-26 18:10:09 -0800</bug_when>
    <thetext>Created attachment 180772
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797438</commentid>
    <comment_count>24</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-26 18:10:54 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 180664 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180664&amp;action=review

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp:130
&gt; &gt; +    return m_pbufferfbConfig;
&gt; 
&gt; m_pBufferFBConfig ?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp:156
&gt; &gt; +    m_surfaceContextfbConfig = 0;
&gt; 
&gt; ...FBConfig ?
&gt; 

fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797439</commentid>
    <comment_count>25</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-26 18:13:11 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 180664 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180664&amp;action=review
&gt; 
&gt; Great work. I don&apos;t fully understand yet. some nits after looking over.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:35
&gt; &gt; +#endif
&gt; 
&gt; Is it needed?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:135
&gt; &gt; +    if (!eglBindAPI(eglAPIVersion)) {
&gt; 
&gt; calling eglBindAPI every makeCurrent seems to be a bit heavy.. I&apos;m not sure :)
&gt; 
 Removed. We either bind to opengles_2 or opengl api, thus it should be sufficient to do it during context creation.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.h:45
&gt; &gt; +    WTF_MAKE_NONCOPYABLE(EGLOffScreenContext);
&gt; 
&gt; Not necessary because GLPlatformContext is already non-copyable.

done

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.h:54
&gt; &gt; +    bool isCurrentContext() const OVERRIDE;
&gt; 
&gt; nits: I think all above methods should have &apos;virtual&apos; keyword.
&gt; 
done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797580</commentid>
    <comment_count>26</comment_count>
      <attachid>180772</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-27 08:39:54 -0800</bug_when>
    <thetext>Comment on attachment 180772
patch

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

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp:166
&gt; +    EGLConfig rightConfig = 0;

what is a right config? a correct one? why not just config?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:96
&gt; +        LOG_ERROR(&quot;Failed to set EGL API(%d).\n&quot;, eglGetError());

Are you sure \n is needed here?

&gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:108
&gt; +    EGLConfig config = surface-&gt;configuration();
&gt; +    if (!config)
&gt; +        return false;
&gt; +
&gt; +    if (config) {

That config check seems useless, as you check above</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797600</commentid>
    <comment_count>27</comment_count>
      <attachid>180806</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-27 10:05:50 -0800</bug_when>
    <thetext>Created attachment 180806
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797601</commentid>
    <comment_count>28</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-27 10:07:57 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 180772 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180772&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLConfigHelper.cpp:166
&gt; &gt; +    EGLConfig rightConfig = 0;
&gt; 
&gt; what is a right config? a correct one? why not just config?

changed to config.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:96
&gt; &gt; +        LOG_ERROR(&quot;Failed to set EGL API(%d).\n&quot;, eglGetError());
&gt; 
&gt; Are you sure \n is needed here?
I think it is good to have it.

&gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:108
&gt; &gt; +    EGLConfig config = surface-&gt;configuration();
&gt; &gt; +    if (!config)
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    if (config) {
&gt; 
&gt; That config check seems useless, as you check above
 removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797637</commentid>
    <comment_count>29</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2012-12-27 11:59:57 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; &gt; (From update of attachment 180772 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=180772&amp;action=review

&gt; &gt; &gt; Source/WebCore/platform/graphics/surfaces/egl/EGLContext.cpp:96
&gt; &gt; &gt; +        LOG_ERROR(&quot;Failed to set EGL API(%d).\n&quot;, eglGetError());
&gt; &gt; 
&gt; &gt; Are you sure \n is needed here?
&gt; I think it is good to have it.

This will add an extra empty line, I think Kenneth has a point here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797638</commentid>
    <comment_count>30</comment_count>
      <attachid>180806</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-27 12:02:03 -0800</bug_when>
    <thetext>Comment on attachment 180806
patch

Will update a new patch after removing \n from the LOG_ERROR calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797647</commentid>
    <comment_count>31</comment_count>
      <attachid>180814</attachid>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2012-12-27 12:36:38 -0800</bug_when>
    <thetext>Created attachment 180814
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797661</commentid>
    <comment_count>32</comment_count>
      <attachid>180814</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-27 13:17:12 -0800</bug_when>
    <thetext>Comment on attachment 180814
patch

Clearing flags on attachment: 180814

Committed r138513: &lt;http://trac.webkit.org/changeset/138513&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797662</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-27 13:17:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180545</attachid>
            <date>2012-12-21 12:46:53 -0800</date>
            <delta_ts>2012-12-21 13:34:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>eglsupport.patch</filename>
            <type>text/plain</type>
            <size>37079</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLmI1OGJkMzMgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQg
Y2FuIGJlIGVuYWJsZWQgZHVyaW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1E
RU5BQkxFX0VHTD1PTiBhcyBjbWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzgzMzguCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA0ZjAyYTZjLi5jNTg5ZTYxIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMi0x
Mi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTYwMgorCisg
ICAgICAgIEFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJhY2tlbmQuIEVHTCBzdXBwb3J0
IGNhbiBiZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAgICAgICAgYnkgcGFzc2luZyAt
REVOQUJMRV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRlci4gVGhpcyBpcyBkaXNhYmxl
ZCBieSBkZWZhdWx0LgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxh
dGZvcm1Db250ZXh0OjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1Db250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
UGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNSb2J1c3RuZXNz
RXh0U3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEN1cnJlbnRDb250ZXh0V3JhcHBl
cjo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEN1cnJl
bnRDb250ZXh0V3JhcHBlcjo6aGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
bkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2Zm
U2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3Jl
ZW5Db250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xP
ZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3VycmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OmRlc3Ryb3kpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6On5FR0xDdXJyZW50Q29udGV4dFdyYXBwZXIpOgor
ICAgICAgICAoRUdMT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6RUdMVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjp+RUdMVHJhbnNw
b3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpjb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBC
dWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kp
OgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMVHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0VHTFhXaW5kb3dSZXNvdXJj
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEVHTFJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6Om5hdGl2ZURpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkRUdMUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29u
ZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6U2hhcmVkRUdMUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6Y2xlYW51cCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZUNvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6On5TaGFyZWRFR0xSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFX
aW5kb3dSZXNvdXJjZXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRHVtbXlTaGFy
ZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlTaGFyZWRSZXNvdXJjZXM6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJlZFJlc291cmNlczo6bmF0aXZlRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJlZFJlc291cmNlczo6cEJ1ZmZlckNv
bnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlTaGFyZWRSZXNvdXJjZXM6OnN1
cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bW15U2hhcmVkUmVzb3Vy
Y2VzOjpEdW1teVNoYXJlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJl
ZFJlc291cmNlczo6fkR1bW15U2hhcmVkUmVzb3VyY2VzKToKKwogMjAxMi0xMi0yMSAgU2hlcmlm
ZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjEzODMzOC4KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1NmUzMDZj
Li5lN2U0NjljIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysr
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNjUsNiArMjY1LDE0IEBAIGlm
IChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4IgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwIgogICAgICkKKworICAgIGlmIChXVEZfVVNFX0VHTCkKKyAgICAgICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICAgICAke0VH
TF9JTkNMVURFX0RJUn0KKyAgICAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wiCisgICAgKQorICAgIGVuZGlmICgpCisKICAgICBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0RyYXdpbmdCdWZmZXJDYWlyby5j
cHAKQEAgLTI3NywxOCArMjg1LDM2IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJm
YWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFj
ZS5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZh
Y2VHTFguY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5k
b3dSZXNvdXJjZXMuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJl
TWFwcGVyR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlci5jcHAKICAgICApCisKKyAgICBpZiAoV1RGX1VTRV9FR0wpCisgICAg
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5jcHAKKyAgICAgICAgKQorICAgIGVuZGlm
ICgpCisKKyAgICBpZiAoV1RGX1VTRV9HTFgpCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1
cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xY
Q29udGV4dC5jcHAKKyAgICAgICAgKQorICAgIGVuZGlmICgpCisKICAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX0xJQlJBUklFUwogICAgICAgICAke1gxMV9YMTFfTElCfQogICAgICAgICAke1gxMV9Y
Y29tcG9zaXRlX0xJQn0KICAgICAgICAgJHtYMTFfWHJlbmRlcl9MSUJ9CiAgICAgKQorICAgIGlm
IChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAg
ICAgICAgICAgICR7RUdMX0xJQlJBUll9CisgICAgICAgICkKKyAgICBlbmRpZiAoKQogZW5kaWYg
KCkKIAogYWRkX2RlZmluaXRpb25zKC1EREFUQV9ESVI9IiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9
LyR7REFUQV9JTlNUQUxMX0RJUn0iKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR0xEZWZzLmgKaW5kZXggMmRmYjRjOS4uYTVjYzI4MiAxMDA2NDQKLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oCkBAIC00Miw2ICs0MiwxMiBA
QAogI2luY2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoRUdMKQorI2RlZmluZSBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgMQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxF
R0wvZWdsZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVp
bnQzMl90IFBsYXRmb3JtQnVmZmVySGFuZGxlOwpAQCAtNTEsNiArNTcsMTYgQEAgdHlwZWRlZiBH
TFhDb250ZXh0IFBsYXRmb3JtQ29udGV4dDsKIHR5cGVkZWYgRGlzcGxheSogUGxhdGZvcm1EaXNw
bGF5OwogdHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9ybVN1cmZhY2VDb25maWc7CiB0eXBlZGVm
IEdMWERyYXdhYmxlIFBsYXRmb3JtRHJhd2FibGU7CisjZWxpZiBVU0UoRUdMKQorI2lmIFVTRShP
UEVOR0xfRVNfMikKK3N0YXRpYyBjb25zdCBFR0xlbnVtIGVnbEFwaSA9IEVHTF9PUEVOR0xfRVNf
QVBJOworI2Vsc2UKK3N0YXRpYyBjb25zdCBFR0xlbnVtIGVnbEFwaSA9IEVHTF9PUEVOR0xfQVBJ
OworI2VuZGlmCit0eXBlZGVmIEVHTENvbnRleHQgUGxhdGZvcm1Db250ZXh0OwordHlwZWRlZiBF
R0xEaXNwbGF5IFBsYXRmb3JtRGlzcGxheTsKK3R5cGVkZWYgRUdMQ29uZmlnIFBsYXRmb3JtU3Vy
ZmFjZUNvbmZpZzsKK3R5cGVkZWYgRUdMU3VyZmFjZSBQbGF0Zm9ybURyYXdhYmxlOwogI2Vsc2UK
IHR5cGVkZWYgdm9pZCogUGxhdGZvcm1Db250ZXh0OwogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURp
c3BsYXk7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMUGxhdGZvcm1Db250ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwCmluZGV4IDc2MjFlMmUuLjU5ODNlZWYgMTAwNjQ0
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNv
bnRleHQuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQ
bGF0Zm9ybUNvbnRleHQuY3BwCkBAIC0zMiwxMSArMzIsMTYgQEAKICNpbmNsdWRlICJHTFhDb250
ZXh0LmgiCiAjZW5kaWYKIAorI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiRUdMQ29udGV4dC5oIgor
I2VuZGlmCisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0YXRpYyBQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNBUkJQUk9DIGdsR2V0R3Jh
cGhpY3NSZXNldFN0YXR1c0FSQiA9IDA7CisKIHN0YXRpYyBHTFBsYXRmb3JtQ29udGV4dCogbV9j
dXJyZW50Q29udGV4dCA9IDA7CiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IEdMUGxh
dGZvcm1Db250ZXh0OjpjcmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHls
ZSByZW5kZXJTdHlsZSkKQEAgLTQ0LDExICs0OSwxMSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1D
b250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQz
RAogICAgIGlmICghaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgaWYgKCFnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpIHsKICNpZiBVU0Uo
R0xYKQorICAgIGlmICghZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7CiAgICAgICAgIGds
R2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVRHUkFQ
SElDU1JFU0VUU1RBVFVTQVJCUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3NBUkIocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBHTHVieXRlKj4oImdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiIpKSk7Ci0j
ZW5kaWYKICAgICB9CisjZW5kaWYKIAogICAgIHN3aXRjaCAocmVuZGVyU3R5bGUpIHsKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW46CkBAIC03MCw4ICs3NSwxMyBA
QCBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRl
Q29udGV4dChHcmFwaGljc0NvbnRleHQzRAogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4g
R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogewogI2lmIFVTRShH
TFgpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIo
bmV3IEdMWE9mZlNjcmVlbkNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFz
ZSgpOworICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gY29udGV4dCA9IGFkb3B0UHRyKG5l
dyBHTFhPZmZTY3JlZW5Db250ZXh0KCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsK
KyNlbmRpZgorCisjaWYgVVNFKEVHTCkKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNv
bnRleHQgPSBhZG9wdFB0cihuZXcgRUdMT2ZmU2NyZWVuQ29udGV4dCgpKTsKKyAgICByZXR1cm4g
Y29udGV4dC5yZWxlYXNlKCk7CiAjZW5kaWYKIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtODAs
OCArOTAsMTMgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRl
eHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4
dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcigpCiB7CiAj
aWYgVVNFKEdMWCkKLSAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBh
ZG9wdFB0cihuZXcgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOwotICAgIHJldHVybiBnbHhD
b250ZXh0LnJlbGVhc2UoKTsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQg
PSBhZG9wdFB0cihuZXcgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOworICAgIHJldHVybiBj
b250ZXh0LnJlbGVhc2UoKTsKKyNlbmRpZgorCisjaWYgVVNFKEVHTCkKKyAgICBPd25QdHI8R0xQ
bGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgRUdMQ3VycmVudENvbnRleHRX
cmFwcGVyKCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKICNlbmRpZgogCiAgICAg
cmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKaW5kZXggMTcwYjc2ZS4uMDM1M2RmOCAx
MDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRm
b3JtQ29udGV4dC5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R0xQbGF0Zm9ybUNvbnRleHQuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgLy8gRG9l
c24ndCBoYXZlIGFueSBlZmZlY3QgaWYgdGhpcyBpcyBub3QgdGhlIGN1cnJlbnQgQ29udGV4dC4K
ICAgICB2b2lkIHJlbGVhc2VDdXJyZW50KCk7CiAKLSAgICBQbGF0Zm9ybUNvbnRleHQgaGFuZGxl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNl
LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1
cmZhY2UuY3BwCmluZGV4IDgzOTFlNDcuLjhlMjk5YzcgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3Bw
CkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKICNlbmRpZgogCisj
aWYgVVNFKEVHTCkKKyNpbmNsdWRlICJFR0xTdXJmYWNlLmgiCisjZW5kaWYKKwogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDEwICs1NCwx
NSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3Jl
YXRlT2Zmc2NyZWVuU3VyZmFjZSgpCiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdM
UGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCkKIHsKLSNpZiBVU0UoR0xY
KSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNp
ZiBVU0UoR0xYKQogICAgIE93blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0
UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNlKCkpOworI2VuZGlmCisjaWYgVVNFKEVHTCkKKyAg
ICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdMVHJh
bnNwb3J0U3VyZmFjZSgpKTsKKyNlbmRpZgogCi0gICAgaWYgKHN1cmZhY2UtPmhhbmRsZSgpKQor
ICAgIGlmIChzdXJmYWNlICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZhY2UtPmRyYXdhYmxl
KCkpCiAgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKICNlbmRpZgogCmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRl
eHQuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xD
b250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTZhY2M2Ci0t
LSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb250ZXh0LmNwcApAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVHTENvbnRleHQuaCIKKworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKEVHTCkKKworI2luY2x1ZGUgPHN0cmlu
Zz4KKworI2lmIEhBVkUoR0xYKQorI2luY2x1ZGUgPEdML2dseC5oPgorI2VuZGlmCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291
cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7CisKK3N0YXRpYyBjb25zdCBFR0xpbnQg
Y29udGV4dEF0dHJpYnV0ZXNbXSA9IHsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgRUdMX0NP
TlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsCisjZW5kaWYKKyAgICBFR0xfTk9ORQorfTsKKworc3Rh
dGljIGNvbnN0IEVHTGludCBjb250ZXh0Um9idXN0bmVzc0F0dHJpYnV0ZXNbXSA9IHsKKyNpZiBV
U0UoT1BFTkdMX0VTXzIpCisgICAgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsCisjZW5k
aWYKKyAgICBFR0xfQ09OVEVYVF9PUEVOR0xfUkVTRVRfTk9USUZJQ0FUSU9OX1NUUkFURUdZX0VY
VCwKKyAgICBFR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCwKKyAgICBFR0xfTk9ORQorfTsK
Kworc3RhdGljIGJvb2wgaXNSb2J1c3RuZXNzRXh0U3VwcG9ydGVkKEVHTERpc3BsYXkgZGlzcGxh
eSkKK3sKKyAgICBzdGF0aWMgYm9vbCBxdWVyeURvbmUgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9v
bCBpc0VHTEVYVHN1cHBvcnRlZCA9IGZhbHNlOworCisgICAgaWYgKCFxdWVyeURvbmUpIHsKKyAg
ICAgICAgcXVlcnlEb25lID0gdHJ1ZTsKKworICAgICAgICBjb25zdCBjaGFyKiBleHRlbnNpb25z
ID0gZWdsUXVlcnlTdHJpbmcoZGlzcGxheSwgRUdMX0VYVEVOU0lPTlMpOworICAgICAgICBpZiAo
ZXh0ZW5zaW9ucykgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZm91bmRFeHRlbnNpb25zKGV4
dGVuc2lvbnMpOworICAgICAgICAgICAgZm91bmRFeHRlbnNpb25zICs9ICIgIjsKKyAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIGV4dE5hbWUoIkVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVz
cyAiKTsKKyAgICAgICAgICAgIGlzRUdMRVhUc3VwcG9ydGVkID0gZm91bmRFeHRlbnNpb25zLmZp
bmQoZXh0TmFtZSkgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gaXNFR0xFWFRzdXBwb3J0ZWQ7Cit9CisKK0VHTEN1cnJlbnRDb250ZXh0V3JhcHBl
cjo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCkKKyAgICA6IEdMUGxhdGZvcm1Db250ZXh0KCkK
K3sKK30KKworLy8gRml4TWU6IFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0aWxsIHdl
IGFyZSBhYmxlIHRvIGJ1aWxkIGV2YXMgd2l0aCBFR0wgc3VwcG9ydAorUGxhdGZvcm1Db250ZXh0
IEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6aGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Z2xYR2V0Q3VycmVudENvbnRleHQoKTsKK30KKworRUdMT2ZmU2NyZWVuQ29udGV4dDo6RUdMT2Zm
U2NyZWVuQ29udGV4dCgpCisgICAgOiBHTFBsYXRmb3JtQ29udGV4dCgpCisgICAgLCBtX2Rpc3Bs
YXkoMCkKK3sKK30KKworYm9vbCBFR0xPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFsaXplKEdMUGxh
dGZvcm1TdXJmYWNlKiBzdXJmYWNlKQoreworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gc2V0IGN1cnJlbnQgcmVuZGVyaW5nIEFQSQorICAgIEVHTEJv
b2xlYW4gZWdsUmVzdWx0ID0gZWdsQmluZEFQSShlZ2xBcGkpOworCisgICAgaWYgKGVnbFJlc3Vs
dCAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1IoImZhaWxlZCB0byBzZXQgRUdMIEFQ
SSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIG1fZGlzcGxheSA9IHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKTsKKworICAgIGlmICgh
bV9kaXNwbGF5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFR0xDb25maWcgY29uZmln
ID0gc3VyZmFjZS0+Y29uZmlndXJhdGlvbigpOworCisgICAgaWYgKCFjb25maWcpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb25maWcpIHsKKworICAgICAgICBpZiAoaXNSb2J1
c3RuZXNzRXh0U3VwcG9ydGVkKG1fZGlzcGxheSkpCisgICAgICAgICAgICBtX2NvbnRleHRIYW5k
bGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBFR0xfTk9fQ09OVEVYVCwg
Y29udGV4dFJvYnVzdG5lc3NBdHRyaWJ1dGVzKTsKKworICAgICAgICBpZiAoIW1fY29udGV4dEhh
bmRsZSAmJiBtX2NvbnRleHRIYW5kbGUgIT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgICAgICBt
X3Jlc2V0TG9zdENvbnRleHQgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Nv
bnRleHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBFR0xfTk9f
Q09OVEVYVCwgY29udGV4dEF0dHJpYnV0ZXMpOworCisgICAgICAgIGlmIChtX2NvbnRleHRIYW5k
bGUgJiYgbV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05URVhUKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitFR0xPZmZTY3JlZW5D
b250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCgpCit7Cit9CisKK2Jvb2wgRUdMT2ZmU2NyZWVu
Q29udGV4dDo6aXNDdXJyZW50Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4
dEhhbmRsZSA9PSBlZ2xHZXRDdXJyZW50Q29udGV4dCgpOworfQorCitib29sIEVHTE9mZlNjcmVl
bkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2Up
Cit7CisgICAgLy8gc2V0IGN1cnJlbnQgcmVuZGVyaW5nIEFQSQorICAgIEVHTEJvb2xlYW4gZWds
UmVzdWx0ID0gZWdsQmluZEFQSShlZ2xBcGkpOworCisgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xf
VFJVRSkgeworICAgICAgICBMT0dfRVJST1IoImZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4i
LCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBzdXJmYWNlLT5kcmF3YWJsZSgpLCBzdXJmYWNl
LT5kcmF3YWJsZSgpLCBtX2NvbnRleHRIYW5kbGUpKSB7CisgICAgICAgIExPR19FUlJPUigiZmFp
bGVkIHRvIG1ha2UgY29udGV4dCBjdXJyZW50LiglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKwor
ICAgICAgICBpZiAobV9yZXNldExvc3RDb250ZXh0ICYmIGVnbEdldEVycm9yKCkgPT0gRUdMX0NP
TlRFWFRfTE9TVCkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJMb3N0IGN1cnJlbnQgY29udGV4
dC5cbiIpOworICAgICAgICAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgRUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpCit7CisgICAg
ZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0Us
IEVHTF9OT19DT05URVhUKTsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVz
b3VyY2VzKCkKK3sKKyAgICBpZiAobV9jb250ZXh0SGFuZGxlKQorICAgICAgICBlZ2xEZXN0cm95
Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CisKKyAgICBtX2NvbnRleHRIYW5k
bGUgPSAwOworICAgIG1fZGlzcGxheSA9IDA7Cit9CisKK3ZvaWQgRUdMT2ZmU2NyZWVuQ29udGV4
dDo6ZGVzdHJveSgpCit7CisgICAgR0xQbGF0Zm9ybUNvbnRleHQ6OmRlc3Ryb3koKTsKKyAgICBm
cmVlUmVzb3VyY2VzKCk7Cit9CisKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc4YWZmNAotLS0gL2Rldi9udWxsCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5o
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMQ29udGV4
dF9oCisjZGVmaW5lIEVHTENvbnRleHRfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBVU0UoRUdMKQorCisjaW5jbHVkZSAiR0xQbGF0Zm9ybUNvbnRleHQuaCIKKworI2lu
Y2x1ZGUgPGdseC9FR0xYV2luZG93UmVzb3VyY2VzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyIDogcHVibGljIEdMUGxhdGZvcm1Db250
ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIp
OworCitwdWJsaWM6CisgICAgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCk7CisgICAgUGxhdGZv
cm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgfkVHTEN1cnJlbnRDb250ZXh0
V3JhcHBlcigpIHsgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVmUHRyPFNoYXJlZEVHTFJlc291cmNl
cz4gbV9uYXRpdmVSZXNvdXJjZXM7Cit9OworCitjbGFzcyBFR0xPZmZTY3JlZW5Db250ZXh0IDog
cHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFR0xP
ZmZTY3JlZW5Db250ZXh0KTsKKworcHVibGljOgorICAgIEVHTE9mZlNjcmVlbkNvbnRleHQoKTsK
KyAgICB2aXJ0dWFsIH5FR0xPZmZTY3JlZW5Db250ZXh0KCk7CisgICAgYm9vbCBpbml0aWFsaXpl
KEdMUGxhdGZvcm1TdXJmYWNlKik7CisgICAgYm9vbCBwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxh
dGZvcm1TdXJmYWNlKik7CisgICAgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CisgICAg
dm9pZCBkZXN0cm95KCk7CisgICAgYm9vbCBpc0N1cnJlbnRDb250ZXh0KCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7CisgICAgRUdMRGlzcGxheSBtX2Rpc3Bs
YXk7Cit9OworCit9CisKKyNlbmRpZiAvLyBHTFhDVVJSRU5UQ09OVEVYV1JBUFBFUl9ICisKKyNl
bmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNDc2MzI5YwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFR0xTdXJmYWNl
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpICYmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitFR0xUcmFuc3BvcnRTdXJmYWNlOjpFR0xUcmFuc3BvcnRTdXJm
YWNlKCkKKyAgICA6IFgxMU9mZlNjcmVlbldpbmRvdygpCit7CisgICAgaWYgKG1fc2hhcmVkRGlz
cGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICBMT0dfRVJST1IoIk5vIHZhbGlkIGhh
cmR3YXJlIGRpc3BsYXkgZm91bmQuIFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIWNvbmZpZ3VyYXRpb24oKSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBjcmVhdGVPZmZzY3JlZW5XaW5kb3coKTsKKworICAgIGlmICgh
bV9idWZmZXJIYW5kbGUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFhX
aW5kb3cuIFxuIik7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVkUmVzb3Vy
Y2VzLT5uYXRpdmVEaXNwbGF5KCksIGNvbmZpZ3VyYXRpb24oKSwgKEVHTE5hdGl2ZVdpbmRvd1R5
cGUpbV9idWZmZXJIYW5kbGUsIDApOworCisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NV
UkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJmYWNl
LiBcbiIpOworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorfQorCitFR0xUcmFuc3BvcnRTdXJm
YWNlOjp+RUdMVHJhbnNwb3J0U3VyZmFjZSgpCit7Cit9CisKK1BsYXRmb3JtU3VyZmFjZUNvbmZp
ZyBFR0xUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9z
aGFyZWRSZXNvdXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Cit9CisKK3ZvaWQgRUdMVHJh
bnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmICghbV9kcmF3YWJsZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVn
bEFwaSk7CisKKyAgICBpZiAoZWdsUmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19F
UlJPUigiZmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAg
ICAgICBkZXN0cm95KCk7CisgICAgfQorCisgICAgLy8gcG9zdCBFR0wgc3VyZmFjZSB0byB3aW5k
b3cKKyAgICBlZ2xSZXN1bHQgPSBlZ2xTd2FwQnVmZmVycyhzaGFyZWREaXNwbGF5KCksIG1fZHJh
d2FibGUpOworCisgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0df
RVJST1IoImZhaWxlZCB0byBTd2FwQnVmZmVycyglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAg
ICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKwordm9pZCBFR0xUcmFuc3BvcnRTdXJmYWNlOjpk
ZXN0cm95KCkKK3sKKyAgICBkZXN0cm95V2luZG93KCk7CisgICAgZnJlZUVHTFJlc291cmNlcygp
OworfQorCit2b2lkIEVHTFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVFR0xSZXNvdXJjZXMoKQorewor
ICAgIGlmIChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICByZXR1cm47CisK
KyAgICBFR0xCb29sZWFuIGVnbFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQXBpKTsKKworICAgIGlm
IChlZ2xSZXN1bHQgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8g
c2V0IEVHTCBBUEkoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKworICAgIGVnbERlc3Ryb3lTdXJmYWNlKHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJs
ZSk7CisgICAgbV9kcmF3YWJsZSA9IEVHTF9OT19TVVJGQUNFOworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9F
R0xTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWds
L0VHTFN1cmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzkyOWY2
Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xTdXJmYWNlLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBFR0xTdXJmYWNlX2gKKyNkZWZpbmUgRUdMU3VyZmFjZV9oCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19TVVJG
QUNFKQorCisjaW5jbHVkZSA8Z2x4L0VHTFhXaW5kb3dSZXNvdXJjZXMuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEVHTFRyYW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgWDExT2Zm
U2NyZWVuV2luZG93IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFR0xUcmFuc3BvcnRTdXJm
YWNlKTsKKworcHVibGljOgorICAgIEVHTFRyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFs
IH5FR0xUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZp
Z3VyYXRpb24oKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBkZXN0cm95KCk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBmcmVlRUdMUmVzb3VyY2VzKCk7Cit9OworCit9CisKKyNl
bmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvRUdMWFdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9FR0xYV2luZG93UmVzb3VyY2VzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc0NzQxYwotLS0gL2Rldi9udWxsCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvRUdMWFdpbmRvd1Jlc291
cmNlcy5oCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVH
TFhXaW5kb3dSZXNvdXJjZXNfaAorI2RlZmluZSBFR0xYV2luZG93UmVzb3VyY2VzX2gKKworI2lu
Y2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKSAmJiBVU0UoRUdMKQorCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEVHTFJlc291cmNlcyA6IHB1YmxpYyBTaGFy
ZWRYMTFSZXNvdXJjZXMgeworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVk
RUdMUmVzb3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJl
ZFJlc291cmNlKQorICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IG5ldyBTaGFy
ZWRFR0xSZXNvdXJjZXMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdGF0aWNTaGFy
ZWRSZXNvdXJjZS0+cmVmKCk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hh
cmVkUmVzb3VyY2UpOworICAgIH0KKworICAgIFBsYXRmb3JtRGlzcGxheSBuYXRpdmVEaXNwbGF5
KCkKKyAgICB7CisgICAgICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsK
KyAgICAgICAgICAgIGludCBtYWosIG1pbjsKKyAgICAgICAgICAgIEVHTEJvb2xlYW4gZWdsUmVz
dWx0OworCisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KChFR0xOYXRp
dmVEaXNwbGF5VHlwZSkgU2hhcmVkWDExUmVzb3VyY2VzOjp4MTFEaXNwbGF5KCkpOworCisgICAg
ICAgICAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBtX2VnbERpc3BsYXk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGVnbFJlc3VsdCA9IGVnbEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAmbWFqLCAmbWlu
KTsKKworICAgICAgICAgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgeworICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiRUdMSW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisgICAgICAgICAg
ICAgICAgY2xlYW51cCgpOworICAgICAgICAgICAgICAgIHJldHVybiBtX2VnbERpc3BsYXk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVnbFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQXBp
KTsKKworICAgICAgICAgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgeworICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVy
cm9yKCkpOworICAgICAgICAgICAgICAgIGNsZWFudXAoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBtX2VnbERpc3BsYXk7CisgICAgfQorCisgICAgdmlydHVh
bCBFR0xDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3BidWZmZXJmYkNvbmZpZykgeworICAgICAgICAgICAgRUdMaW50IGF0dHJpYnV0ZUxpc3RbXSA9
IHsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVf
VFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorI2Vsc2UKKyAgICAgICAgICAgICAgICBFR0xfUkVO
REVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0JJVCwKKyNlbmRpZgorICAgICAgICAgICAgICAgIEVH
TF9SRURfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKKyAgICAg
ICAgICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9TVEVOQ0lM
X1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgsCisgICAgICAgICAg
ICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1BJWE1BUF9CSVQsCisgICAgICAgICAgICAgICAg
RUdMX05PTkUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9
IGNyZWF0ZUNvbmZpZyhhdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bV9wYnVmZmVyZmJDb25maWc7CisgICAgfQorCisgICAgdmlydHVhbCBFR0xDb25maWcgc3VyZmFj
ZUNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N1cmZhY2VDb250ZXh0ZmJD
b25maWcpIHsKKyAgICAgICAgICAgIEVHTGludCBhdHRyaWJ1dGVMaXN0W10gPSB7CisgICAgICAg
ICAgICAgICAgRUdMX0xFVkVMLCAwLAorI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICAgICAgICAg
ICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisjZWxzZQorICAg
ICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfQklULAorI2VuZGlm
CisgICAgICAgICAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9H
UkVFTl9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCisgICAgICAg
ICAgICAgICAgRUdMX1NURU5DSUxfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfQUxQSEFf
U0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfREVQVEhfU0laRSwgOCwKKyAgICAgICAgICAg
ICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfV0lORE9XX0JJVCwKKyAgICAgICAgICAgICAgICBF
R0xfTk9ORQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNv
bmZpZyA9IGNyZWF0ZUNvbmZpZyhhdHRyaWJ1dGVMaXN0KTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CisgICAgfQorCitwcml2YXRlOgorICAg
IFNoYXJlZEVHTFJlc291cmNlcygpCisgICAgICAgIDogU2hhcmVkWDExUmVzb3VyY2VzKCkKKyAg
ICB7CisgICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgICAgICBtX3N1
cmZhY2VDb250ZXh0ZmJDb25maWcgPSAwOworICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IDA7
CisgICAgfQorCisgICAgdm9pZCBjbGVhbnVwKCkKKyAgICB7CisgICAgICAgIGVnbE1ha2VDdXJy
ZW50KG1fZWdsRGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9f
Q09OVEVYVCk7CisgICAgICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3BsYXkpOworICAgICAgICBt
X2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICB9CisKKyAgICBFR0xDb25maWcgY3Jl
YXRlQ29uZmlnKGNvbnN0IGludCBhdHRyaWJ1dGVzW10pCisgICAgeworICAgICAgICBpZiAobV9l
Z2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8gaW5p
dGlhbGl6ZSBEaXNwbGF5IGlmIGFscmVhZHkgbm90IGRvbmUuCisgICAgICAgICAgICBuYXRpdmVE
aXNwbGF5KCk7CisKKyAgICAgICAgICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BM
QVkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpbnQg
bnVtQ29uZmlnczsKKyAgICAgICAgRUdMQ29uZmlnIHJpZ2h0Q29uZmlnID0gMDsKKworICAgICAg
ICAvLyBDaG9vc2UgY29uZmlnCisgICAgICAgIGlmICghZWdsQ2hvb3NlQ29uZmlnKG1fZWdsRGlz
cGxheSwgYXR0cmlidXRlcywgJnJpZ2h0Q29uZmlnLCAxLCAmbnVtQ29uZmlncykpIHsKKyAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBzdXBwb3J0ZWQgY29uZmlnaXJhdGlvbnMu
Iik7CisgICAgICAgICAgICBjbGVhbnVwKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobnVt
Q29uZmlncyAhPSAxKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkVHTENob29zZUNvbmZpZyBk
aWRuJ3QgcmV0dXJuIGV4YWN0bHkgb25lIGNvbmZpZyBidXQgKCVkKS5cbiIsIG51bUNvbmZpZ3Mp
OworICAgICAgICAgICAgY2xlYW51cCgpOworICAgICAgICB9CisKKyAgICAgICAgVmlzdWFsSUQg
dmlzdWFsSWQgPSAwOworICAgICAgICBFR0xpbnQgZWdsVmFsdWUgPSAwOworCisgICAgICAgIC8v
IFNlZSBpZiBFR0wgcHJvdmlkZWQgYSB2YWxpZCBWaXN1YWxJRDoKKyAgICAgICAgZWdsR2V0Q29u
ZmlnQXR0cmliKG1fZWdsRGlzcGxheSwgcmlnaHRDb25maWcsIEVHTF9OQVRJVkVfVklTVUFMX0lE
LCAmZWdsVmFsdWUpOworICAgICAgICB2aXN1YWxJZCA9IChWaXN1YWxJRCllZ2xWYWx1ZTsKKyAg
ICAgICAgaWYgKHZpc3VhbElkKSB7CisgICAgICAgICAgICAvLyBFR0wgaGFzIHN1Z2dlc3RlZCBh
IHZpc3VhbCBpZCwgc28gZ2V0IHRoZSByZXN0IG9mIHRoZSB2aXN1YWwgaW5mbyBmb3IgdGhhdCBp
ZDoKKyAgICAgICAgICAgIFhWaXN1YWxJbmZvIHZpc3VhbEluZm9UZW1wbGF0ZTsKKyAgICAgICAg
ICAgIG1lbXNldCgmdmlzdWFsSW5mb1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsK
KyAgICAgICAgICAgIHZpc3VhbEluZm9UZW1wbGF0ZS52aXN1YWxpZCA9IHZpc3VhbElkOworCisg
ICAgICAgICAgICBYVmlzdWFsSW5mbyAqY2hvc2VuVmlzdWFsSW5mbzsKKyAgICAgICAgICAgIGlu
dCBtYXRjaGluZ0NvdW50ID0gMDsKKyAgICAgICAgICAgIGNob3NlblZpc3VhbEluZm8gPSBYR2V0
VmlzdWFsSW5mbyh4MTFEaXNwbGF5KCksIFZpc3VhbElETWFzaywgJnZpc3VhbEluZm9UZW1wbGF0
ZSwgJm1hdGNoaW5nQ291bnQpOworICAgICAgICAgICAgaWYgKGNob3NlblZpc3VhbEluZm8pIHsK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgICAgICAgICBpZiAobV9zdXBwb3J0
c1hSZW5kZXJFeHRlbnNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgWFJlbmRlclBpY3RGb3Jt
YXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0KHgxMURpc3BsYXkoKSwgY2hvc2Vu
VmlzdWFsSW5mby0+dmlzdWFsKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBm
b3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9W
aXN1YWxJbmZvID0gY2hvc2VuVmlzdWFsSW5mbzsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbyAmJiBjaG9zZW5WaXN1YWxJbmZvLT5k
ZXB0aCA9PSAzMikKKyAgICAgICAgICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gY2hvc2VuVmlz
dWFsSW5mbzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8p
IHsKKyAgICAgICAgICAgICAgICBYVmlzdWFsSW5mbyB2aXN1YWxJbmZvVGVtcGxhdGU7CisgICAg
ICAgICAgICAgICAgbWVtc2V0KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFs
SW5mbykpOworICAgICAgICAgICAgICAgIFhWaXN1YWxJbmZvICptYXRjaGluZ1Zpc3VhbHM7Cisg
ICAgICAgICAgICAgICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOworCisgICAgICAgICAgICAgICAg
dmlzdWFsSW5mb1RlbXBsYXRlLmRlcHRoID0gY2hvc2VuVmlzdWFsSW5mby0+ZGVwdGg7CisgICAg
ICAgICAgICAgICAgbWF0Y2hpbmdWaXN1YWxzID0gWEdldFZpc3VhbEluZm8oeDExRGlzcGxheSgp
LCBWaXN1YWxEZXB0aE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGluZ0NvdW50KTsK
KworICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ1Zpc3VhbHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9WaXN1YWxJbmZvID0gJm1hdGNoaW5nVmlzdWFsc1swXTsKKyAgICAgICAgICAgICAg
ICAgICAgWEZyZWUobWF0Y2hpbmdWaXN1YWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykgeworICAgICAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IFZpc3VhbCBJbmZvLiIpOworICAgICAgICAg
ICAgY2xlYW51cCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJpZ2h0Q29uZmlnOwor
ICAgIH0KKworICAgIHZpcnR1YWwgflNoYXJlZEVHTFJlc291cmNlcygpCisgICAgeworICAgICAg
ICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmIChtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpCisgICAgICAgICAgICBt
X3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSAwOworCisgICAgICAgIGVnbFRlcm1pbmF0ZShtX2Vn
bERpc3BsYXkpOworICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICBFR0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKKyAgICBFR0xDb25m
aWcgbV9wYnVmZmVyZmJDb25maWc7CisgICAgRUdMQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRmYkNv
bmZpZzsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3Bw
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dS
ZXNvdXJjZXMuY3BwCmluZGV4IDYwMjkzZTcuLmQ0MjhlNTUgMTAwNjQ0Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNw
cAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdp
bmRvd1Jlc291cmNlcy5jcHAKQEAgLTI4LDExICsyOCwxNSBAQAogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogCisjaWYgVVNFKEdMWCkKICNpbmNsdWRlICJHTFhXaW5kb3dSZXNv
dXJjZXMuaCIKKyNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisjaWYgVVNFKEVHTCkKKyNp
bmNsdWRlICJFR0xYV2luZG93UmVzb3VyY2VzLmgiCisjZW5kaWYKIAotUGxhdGZvcm1TaGFyZWRS
ZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IDA7
CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFgxMU9mZlNjcmVlbldpbmRvdzo6WDExT2ZmU2NyZWVu
V2luZG93KCkKICAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5oCmluZGV4IGIyNWIyYWMuLjEzZjc1YTIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dS
ZXNvdXJjZXMuaApAQCAtNDAsOCArNDAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisj
aWYgVVNFKEdMWCkKIGNsYXNzIFNoYXJlZEdMWFJlc291cmNlczsKIHR5cGVkZWYgU2hhcmVkR0xY
UmVzb3VyY2VzIFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzOworI2VsaWYgVVNFKEVHTCkKK2NsYXNz
IFNoYXJlZEVHTFJlc291cmNlczsKK3R5cGVkZWYgU2hhcmVkRUdMUmVzb3VyY2VzIFBsYXRmb3Jt
U2hhcmVkUmVzb3VyY2VzOworI2Vsc2UKK2NsYXNzIER1bW15U2hhcmVkUmVzb3VyY2VzOwordHlw
ZWRlZiBEdW1teVNoYXJlZFJlc291cmNlcyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczsKKyNlbmRp
ZgogCiBjbGFzcyBTaGFyZWRYMTFSZXNvdXJjZXMgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFz
ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkWDExUmVzb3VyY2VzKTsKQEAgLTE0
Nyw2ICsxNTUsNDIgQEAgcHJvdGVjdGVkOgogICAgIFhWaXN1YWxJbmZvKiBtX1Zpc3VhbEluZm87
CiB9OwogCisvLyBEdW1teSBJbXBsZW1lbnRhdGlvbiB0byBhdm9pZCBpZmRlZnMKK2NsYXNzIER1
bW15U2hhcmVkUmVzb3VyY2VzIDogcHVibGljIFNoYXJlZFgxMVJlc291cmNlcyB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoRHVtbXlTaGFyZWRSZXNvdXJjZXMpOworCitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RHVtbXlTaGFyZWRSZXNvdXJjZXM+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQbGF0Zm9ybURpc3BsYXkgbmF0aXZlRGlz
cGxheSgpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBs
YXRmb3JtU3VyZmFjZUNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpCisgICAgeworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBz
dXJmYWNlQ29udGV4dENvbmZpZygpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgRHVtbXlTaGFyZWRSZXNvdXJjZXMoKQorICAgICAgICA6IFNoYXJlZFgx
MVJlc291cmNlcygpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkR1bW15U2hhcmVkUmVz
b3VyY2VzKCkKKyAgICB7CisgICAgfQorfTsKKwogY2xhc3MgWDExT2ZmU2NyZWVuV2luZG93IDog
cHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYMTFP
ZmZTY3JlZW5XaW5kb3cpOwogCmRpZmYgLS1naXQgU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21h
a2UgU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggODAwYTcwOS4uZTdmY2NkMSAx
MDA2NDQKLS0tIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBTb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZQpAQCAtMTc1LDEyICsxNzUsMjcgQEAgaWYgKEVOQUJMRV9XRUJHTCBP
UiBXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUpCiAKICAgICBpZiAoT1BFTkdMWF9GT1VORCkK
ICAgICAgICAgYWRkX2RlZmluaXRpb25zKC1ESEFWRV9HTFgpCi0gICAgICAgIGFkZF9kZWZpbml0
aW9ucygtRFdURl9VU0VfR0xYPTEpCisgICAgZW5kaWYgKCkKKworICAgIG9wdGlvbihFTkFCTEVf
RUdMIE9OKQogCi0gICAgICAgIGlmIChYMTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQgWDExX1hyZW5k
ZXJfRk9VTkQpCi0gICAgICAgICAgIHNldChVU0VfR1JBUEhJQ1NfU1VSRkFDRSAxKQorICAgIGlm
IChFTkFCTEVfRUdMKQorICAgICAgICBmaW5kX3BhY2thZ2UoRUdMIFJFUVVJUkVEKQorICAgIGVu
ZGlmICgpCisKKyAgICBpZiAoRUdMX0ZPVU5EKQorICAgICAgICBzZXQoV1RGX1VTRV9FR0wgMSkK
KyAgICAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9FR0w9MSkKKyAgICAgZWxzZSAoKQor
ICAgICAgICBpZiAoT1BFTkdMWF9GT1VORCkKKyAgICAgICAgICAgIHNldChXVEZfVVNFX0dMWCAx
KQorICAgICAgICAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9HTFg9MSkKICAgICAgICAg
ZW5kaWYgKCkKICAgICBlbmRpZiAoKQorCisgICAgIGlmICgoT1BFTkdMWF9GT1VORCBPUiBFR0xf
Rk9VTkQpIEFORCBYMTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQgWDExX1hyZW5kZXJfRk9VTkQpCisg
ICAgICAgICBzZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkKKyAgICAgZW5kaWYgKCkKIGVuZGlm
ICgpCiAKIGlmIChFTkFCTEVfSU5TUEVDVE9SKQo=
</data>
<flag name="commit-queue"
          id="197846"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180553</attachid>
            <date>2012-12-21 14:01:39 -0800</date>
            <delta_ts>2012-12-21 14:32:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>eglpatch2.patch</filename>
            <type>text/plain</type>
            <size>36861</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLmI1OGJkMzMgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQg
Y2FuIGJlIGVuYWJsZWQgZHVyaW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1E
RU5BQkxFX0VHTD1PTiBhcyBjbWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzgzMzguCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAxYTA0MDRmLi42ODRjMDRkIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMi0x
Mi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTYwMgorCisg
ICAgICAgIEFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJhY2tlbmQuIEVHTCBzdXBwb3J0
IGNhbiBiZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAgICAgICAgYnkgcGFzc2luZyAt
REVOQUJMRV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRlci4gVGhpcyBpcyBkaXNhYmxl
ZCBieSBkZWZhdWx0LgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxh
dGZvcm1Db250ZXh0OjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1Db250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
UGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNSb2J1c3RuZXNz
RXh0U3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEN1cnJlbnRDb250ZXh0V3JhcHBl
cjo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEN1cnJl
bnRDb250ZXh0V3JhcHBlcjo6aGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
bkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2Zm
U2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3Jl
ZW5Db250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xP
ZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3VycmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OmRlc3Ryb3kpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6On5FR0xDdXJyZW50Q29udGV4dFdyYXBwZXIpOgor
ICAgICAgICAoRUdMT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6RUdMVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjp+RUdMVHJhbnNw
b3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpjb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBC
dWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kp
OgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMVHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0VHTFhXaW5kb3dSZXNvdXJj
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEVHTFJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6Om5hdGl2ZURpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkRUdMUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29u
ZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6U2hhcmVkRUdMUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6Y2xlYW51cCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZUNvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6On5TaGFyZWRFR0xSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFX
aW5kb3dSZXNvdXJjZXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRHVtbXlTaGFy
ZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlTaGFyZWRSZXNvdXJjZXM6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJlZFJlc291cmNlczo6bmF0aXZlRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJlZFJlc291cmNlczo6cEJ1ZmZlckNv
bnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlTaGFyZWRSZXNvdXJjZXM6OnN1
cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bW15U2hhcmVkUmVzb3Vy
Y2VzOjpEdW1teVNoYXJlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJl
ZFJlc291cmNlczo6fkR1bW15U2hhcmVkUmVzb3VyY2VzKToKKwogMjAxMi0xMi0yMSAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxvY2FsaXphYmxl
IHN0cmluZ3MgYXMgYSBmb2xsb3d1cCB0byBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8xMzgzODcKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1NmUzMDZjLi5lN2U0NjljIDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNjUsNiArMjY1LDE0IEBAIGlmIChXVEZfVVNFXzNEX0dS
QVBISUNTKQogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4IgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
IgogICAgICkKKworICAgIGlmIChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICAgICAke0VHTF9JTkNMVURFX0RJUn0K
KyAgICAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
Z2wiCisgICAgKQorICAgIGVuZGlmICgpCisKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKQEAgLTI3NywxOCAr
Mjg1LDM2IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHAKICAgICApCisKKyAgICBpZiAoV1RGX1VTRV9FR0wpCisgICAgICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29udGV4dC5jcHAKKyAgICAgICAgKQorICAgIGVuZGlmICgpCisKKyAgICBpZiAo
V1RGX1VTRV9HTFgpCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKyAg
ICAgICAgKQorICAgIGVuZGlmICgpCisKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklF
UwogICAgICAgICAke1gxMV9YMTFfTElCfQogICAgICAgICAke1gxMV9YY29tcG9zaXRlX0xJQn0K
ICAgICAgICAgJHtYMTFfWHJlbmRlcl9MSUJ9CiAgICAgKQorICAgIGlmIChXVEZfVVNFX0VHTCkK
KyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICR7RUdM
X0xJQlJBUll9CisgICAgICAgICkKKyAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAogYWRkX2RlZmlu
aXRpb25zKC1EREFUQV9ESVI9IiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7REFUQV9JTlNUQUxM
X0RJUn0iKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTERlZnMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZz
LmgKaW5kZXggMmRmYjRjOS4uYTVjYzI4MiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oCkBAIC00Miw2ICs0MiwxMiBAQAogI2luY2x1ZGUgPEdM
L2dseC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoRUdMKQorI2RlZmluZSBFR0xfRUdMRVhUX1BST1RP
VFlQRVMgMQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+Cisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVpbnQzMl90IFBsYXRmb3Jt
QnVmZmVySGFuZGxlOwpAQCAtNTEsNiArNTcsMTYgQEAgdHlwZWRlZiBHTFhDb250ZXh0IFBsYXRm
b3JtQ29udGV4dDsKIHR5cGVkZWYgRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5OwogdHlwZWRlZiBH
TFhGQkNvbmZpZyBQbGF0Zm9ybVN1cmZhY2VDb25maWc7CiB0eXBlZGVmIEdMWERyYXdhYmxlIFBs
YXRmb3JtRHJhd2FibGU7CisjZWxpZiBVU0UoRUdMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0
YXRpYyBjb25zdCBFR0xlbnVtIGVnbEFwaSA9IEVHTF9PUEVOR0xfRVNfQVBJOworI2Vsc2UKK3N0
YXRpYyBjb25zdCBFR0xlbnVtIGVnbEFwaSA9IEVHTF9PUEVOR0xfQVBJOworI2VuZGlmCit0eXBl
ZGVmIEVHTENvbnRleHQgUGxhdGZvcm1Db250ZXh0OwordHlwZWRlZiBFR0xEaXNwbGF5IFBsYXRm
b3JtRGlzcGxheTsKK3R5cGVkZWYgRUdMQ29uZmlnIFBsYXRmb3JtU3VyZmFjZUNvbmZpZzsKK3R5
cGVkZWYgRUdMU3VyZmFjZSBQbGF0Zm9ybURyYXdhYmxlOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCog
UGxhdGZvcm1Db250ZXh0OwogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURpc3BsYXk7CmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250
ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9y
bUNvbnRleHQuY3BwCmluZGV4IDc2MjFlMmUuLmQ5YzE3YmQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQu
Y3BwCkBAIC0zMiwxMSArMzIsMTYgQEAKICNpbmNsdWRlICJHTFhDb250ZXh0LmgiCiAjZW5kaWYK
IAorI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiRUdMQ29udGV4dC5oIgorI2VuZGlmCisKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBQ
Rk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNBUkJQUk9DIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQiA9IDA7CisKIHN0YXRpYyBHTFBsYXRmb3JtQ29udGV4dCogbV9jdXJyZW50Q29udGV4dCA9
IDA7CiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IEdMUGxhdGZvcm1Db250ZXh0Ojpj
cmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkK
QEAgLTQ0LDExICs0OSwxMSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBsYXRm
b3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRAogICAgIGlmICghaW5p
dGlhbGl6ZU9wZW5HTFNoaW1zKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYg
KCFnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpIHsKICNpZiBVU0UoR0xYKQorICAgIGlmICgh
Z2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7CiAgICAgICAgIGdsR2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVRHUkFQSElDU1JFU0VUU1RBVFVT
QVJCUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3NBUkIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVi
eXRlKj4oImdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiIpKSk7Ci0jZW5kaWYKICAgICB9Cisj
ZW5kaWYKIAogICAgIHN3aXRjaCAocmVuZGVyU3R5bGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJPZmZzY3JlZW46CkBAIC03MCw4ICs3NSwxMyBAQCBQYXNzT3duUHRyPEdM
UGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGlj
c0NvbnRleHQzRAogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRl
eHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogewogI2lmIFVTRShHTFgpCi0gICAgT3duUHRy
PEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVl
bkNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAgIE93blB0
cjxHTFBsYXRmb3JtQ29udGV4dD4gY29udGV4dCA9IGFkb3B0UHRyKG5ldyBHTFhPZmZTY3JlZW5D
b250ZXh0KCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKKyNlbmRpZgorCisjaWYg
VVNFKEVHTCkKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0
cihuZXcgRUdMT2ZmU2NyZWVuQ29udGV4dCgpKTsKKyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNl
KCk7CiAjZW5kaWYKIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtODAsOCArOTAsMTMgQEAgUGFz
c093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNj
cmVlbkNvbnRleHQoKQogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNv
bnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcigpCiB7CiAjaWYgVVNFKEdMWCkKLSAg
ICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xY
Q3VycmVudENvbnRleHRXcmFwcGVyKCkpOwotICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2Uo
KTsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcg
R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2Uo
KTsKKyNlbmRpZgorCisjaWYgVVNFKEVHTCkKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+
IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOworICAg
IHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIG51bGxwdHI7
CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxh
dGZvcm1Db250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
UGxhdGZvcm1Db250ZXh0LmgKaW5kZXggMTcwYjc2ZS4uMDM1M2RmOCAxMDA2NDQKLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRl
eHQuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgLy8gRG9lc24ndCBoYXZlIGFueSBl
ZmZlY3QgaWYgdGhpcyBpcyBub3QgdGhlIGN1cnJlbnQgQ29udGV4dC4KICAgICB2b2lkIHJlbGVh
c2VDdXJyZW50KCk7CiAKLSAgICBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CisgICAg
dmlydHVhbCBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4
IDgzOTFlNDcuLjhlMjk5YzcgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC0zMiw2ICszMiwx
MCBAQAogI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKICNlbmRpZgogCisjaWYgVVNFKEVHTCkKKyNp
bmNsdWRlICJFR0xTdXJmYWNlLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDEwICs1NCwxNSBAQCBQYXNzT3duUHRy
PEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2Zmc2NyZWVuU3Vy
ZmFjZSgpCiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNl
OjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCkKIHsKLSNpZiBVU0UoR0xYKSAmJiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiBVU0UoR0xYKQogICAg
IE93blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFu
c3BvcnRTdXJmYWNlKCkpOworI2VuZGlmCisjaWYgVVNFKEVHTCkKKyAgICBPd25QdHI8R0xQbGF0
Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdMVHJhbnNwb3J0U3VyZmFjZSgp
KTsKKyNlbmRpZgogCi0gICAgaWYgKHN1cmZhY2UtPmhhbmRsZSgpKQorICAgIGlmIChzdXJmYWNl
ICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZhY2UtPmRyYXdhYmxlKCkpCiAgICAgICAgIHJl
dHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FlYTJkCi0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0
LmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkVHTENvbnRleHQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKEVHTCkKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2lmIEhBVkUo
R0xYKQorI2luY2x1ZGUgPEdML2dseC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0geworI2lmIFVTRShP
UEVOR0xfRVNfMikKKyAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgMiwKKyNlbmRpZgor
ICAgIEVHTF9OT05FCit9OworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRleHRSb2J1c3RuZXNz
QXR0cmlidXRlc1tdID0geworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICBFR0xfQ09OVEVYVF9D
TElFTlRfVkVSU0lPTiwgMiwKKyNlbmRpZgorICAgIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9O
T1RJRklDQVRJT05fU1RSQVRFR1lfRVhULAorICAgIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRf
RVhULAorICAgIEVHTF9OT05FCit9OworCitzdGF0aWMgYm9vbCBpc1JvYnVzdG5lc3NFeHRTdXBw
b3J0ZWQoRUdMRGlzcGxheSBkaXNwbGF5KQoreworICAgIHN0YXRpYyBib29sIHF1ZXJ5RG9uZSA9
IGZhbHNlOworICAgIHN0YXRpYyBib29sIGlzRUdMRVhUc3VwcG9ydGVkID0gZmFsc2U7CisKKyAg
ICBpZiAoIXF1ZXJ5RG9uZSkgeworICAgICAgICBxdWVyeURvbmUgPSB0cnVlOworCisgICAgICAg
IGNvbnN0IGNoYXIqIGV4dGVuc2lvbnMgPSBlZ2xRdWVyeVN0cmluZyhkaXNwbGF5LCBFR0xfRVhU
RU5TSU9OUyk7CisgICAgICAgIGlmIChleHRlbnNpb25zKSB7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZyBmb3VuZEV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7CisgICAgICAgICAgICBmb3VuZEV4dGVu
c2lvbnMgKz0gIiAiOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0TmFtZSgiRUdMX0VYVF9j
cmVhdGVfY29udGV4dF9yb2J1c3RuZXNzICIpOworICAgICAgICAgICAgaXNFR0xFWFRzdXBwb3J0
ZWQgPSBmb3VuZEV4dGVuc2lvbnMuZmluZChleHROYW1lKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpc0VHTEVYVHN1cHBvcnRlZDsKK30KKwor
RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKQorICAg
IDogR0xQbGF0Zm9ybUNvbnRleHQoKQoreworfQorCisvLyBGaXhNZTogVGhpcyBpcyBhIHRlbXBv
cmFyeSB3b3JrYXJvdW5kIHRpbGwgd2UgYXJlIGFibGUgdG8gYnVpbGQgZXZhcyB3aXRoIEVHTCBz
dXBwb3J0CitQbGF0Zm9ybUNvbnRleHQgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpoYW5kbGUo
KSBjb25zdAoreworICAgIHJldHVybiBnbFhHZXRDdXJyZW50Q29udGV4dCgpOworfQorCitFR0xP
ZmZTY3JlZW5Db250ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0KCkKKyAgICA6IEdMUGxhdGZvcm1D
b250ZXh0KCkKKyAgICAsIG1fZGlzcGxheSgwKQoreworfQorCitib29sIEVHTE9mZlNjcmVlbkNv
bnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgaWYg
KCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBzZXQgY3VycmVudCBy
ZW5kZXJpbmcgQVBJCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFw
aSk7CisKKyAgICBpZiAoZWdsUmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJP
UigiZmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9kaXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVk
RGlzcGxheSgpOworCisgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEVHTENvbmZpZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CisKKyAg
ICBpZiAoIWNvbmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvbmZpZykg
eworCisgICAgICAgIGlmIChpc1JvYnVzdG5lc3NFeHRTdXBwb3J0ZWQobV9kaXNwbGF5KSkKKyAg
ICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGVnbENyZWF0ZUNvbnRleHQobV9kaXNwbGF5LCBj
b25maWcsIEVHTF9OT19DT05URVhULCBjb250ZXh0Um9idXN0bmVzc0F0dHJpYnV0ZXMpOworCisg
ICAgICAgIGlmICghbV9jb250ZXh0SGFuZGxlICYmIG1fY29udGV4dEhhbmRsZSAhPSBFR0xfTk9f
Q09OVEVYVCkKKyAgICAgICAgICAgIG1fcmVzZXRMb3N0Q29udGV4dCA9IHRydWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGVnbENyZWF0ZUNvbnRleHQobV9k
aXNwbGF5LCBjb25maWcsIEVHTF9OT19DT05URVhULCBjb250ZXh0QXR0cmlidXRlcyk7CisKKyAg
ICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSAmJiBtX2NvbnRleHRIYW5kbGUgIT0gRUdMX05PX0NP
TlRFWFQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0VHTE9mZlNjcmVlbkNvbnRleHQ6On5FR0xPZmZTY3JlZW5Db250ZXh0KCkKK3sK
K30KKworYm9vbCBFR0xPZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0SGFuZGxlID09IGVnbEdldEN1cnJlbnRDb250ZXh0KCk7
Cit9CisKK2Jvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudChHTFBs
YXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICAvLyBzZXQgY3VycmVudCByZW5kZXJpbmcg
QVBJCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFwaSk7CisKKyAg
ICBpZiAoZWdsUmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiZmFpbGVk
IHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIHN1cmZh
Y2UtPmRyYXdhYmxlKCksIHN1cmZhY2UtPmRyYXdhYmxlKCksIG1fY29udGV4dEhhbmRsZSkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gbWFrZSBjb250ZXh0IGN1cnJlbnQuKCVkKS5c
biIsIGVnbEdldEVycm9yKCkpOworCisgICAgICAgIGlmIChtX3Jlc2V0TG9zdENvbnRleHQgJiYg
ZWdsR2V0RXJyb3IoKSA9PSBFR0xfQ09OVEVYVF9MT1NUKSB7CisgICAgICAgICAgICBMT0dfRVJS
T1IoIkxvc3QgY3VycmVudCBjb250ZXh0LlxuIik7CisgICAgICAgICAgICBtX2NvbnRleHRMb3N0
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybVJl
bGVhc2VDdXJyZW50KCkKK3sKKyAgICBlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIEVHTF9OT19T
VVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworfQorCit2b2lkIEVHTE9m
ZlNjcmVlbkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2NvbnRleHRIYW5k
bGUpCisgICAgICAgIGVnbERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxl
KTsKKworICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CisgICAgbV9kaXNwbGF5ID0gMDsKK30KKwor
dm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KCkKK3sKKyAgICBHTFBsYXRmb3JtQ29u
dGV4dDo6ZGVzdHJveSgpOworICAgIGZyZWVSZXNvdXJjZXMoKTsKK30KKworfQorCisjZW5kaWYK
KwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xDb250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzhh
ZmY0Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBFR0xDb250ZXh0X2gKKyNkZWZpbmUgRUdMQ29udGV4dF9oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpCisKKyNpbmNsdWRlICJHTFBs
YXRmb3JtQ29udGV4dC5oIgorCisjaW5jbHVkZSA8Z2x4L0VHTFhXaW5kb3dSZXNvdXJjZXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIg
OiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVH
TEN1cnJlbnRDb250ZXh0V3JhcHBlcik7CisKK3B1YmxpYzoKKyAgICBFR0xDdXJyZW50Q29udGV4
dFdyYXBwZXIoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CisgICAgdmly
dHVhbCB+RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBS
ZWZQdHI8U2hhcmVkRUdMUmVzb3VyY2VzPiBtX25hdGl2ZVJlc291cmNlczsKK307CisKK2NsYXNz
IEVHTE9mZlNjcmVlbkNvbnRleHQgOiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEVHTE9mZlNjcmVlbkNvbnRleHQpOworCitwdWJsaWM6CisgICAg
RUdMT2ZmU2NyZWVuQ29udGV4dCgpOworICAgIHZpcnR1YWwgfkVHTE9mZlNjcmVlbkNvbnRleHQo
KTsKKyAgICBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKTsKKyAgICBib29sIHBs
YXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqKTsKKyAgICB2b2lkIHBsYXRmb3Jt
UmVsZWFzZUN1cnJlbnQoKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBib29sIGlzQ3VycmVu
dENvbnRleHQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsK
KyAgICBFR0xEaXNwbGF5IG1fZGlzcGxheTsKK307CisKK30KKworI2VuZGlmIC8vIEdMWENVUlJF
TlRDT05URVhXUkFQUEVSX0gKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzYzMjljCi0tLSAvZGV2L251bGwKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApA
QCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkVHTFN1cmZhY2UuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykgJiYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VHTFRyYW5zcG9ydFN1
cmZhY2U6OkVHTFRyYW5zcG9ydFN1cmZhY2UoKQorICAgIDogWDExT2ZmU2NyZWVuV2luZG93KCkK
K3sKKyAgICBpZiAobV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAgICAg
IExPR19FUlJPUigiTm8gdmFsaWQgaGFyZHdhcmUgZGlzcGxheSBmb3VuZC4gXG4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY29uZmlndXJhdGlvbigpKSB7CisgICAgICAg
IGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNyZWF0ZU9mZnNjcmVl
bldpbmRvdygpOworCisgICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgeworICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBjcmVhdGUgWFdpbmRvdy4gXG4iKTsKKyAgICAgICAgZGVzdHJveSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kcmF3YWJsZSA9IGVnbENyZWF0ZVdpbmRv
d1N1cmZhY2UobV9zaGFyZWRSZXNvdXJjZXMtPm5hdGl2ZURpc3BsYXkoKSwgY29uZmlndXJhdGlv
bigpLCAoRUdMTmF0aXZlV2luZG93VHlwZSltX2J1ZmZlckhhbmRsZSwgMCk7CisKKyAgICBpZiAo
bV9kcmF3YWJsZSA9PSBFR0xfTk9fU1VSRkFDRSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byBjcmVhdGUgRUdMIHN1cmZhY2UuIFxuIik7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICB9
Cit9CisKK0VHTFRyYW5zcG9ydFN1cmZhY2U6On5FR0xUcmFuc3BvcnRTdXJmYWNlKCkKK3sKK30K
KworUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEVHTFRyYW5zcG9ydFN1cmZhY2U6OmNvbmZpZ3VyYXRp
b24oKQoreworICAgIHJldHVybiBtX3NoYXJlZFJlc291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25m
aWcoKTsKK30KKwordm9pZCBFR0xUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCit7Cisg
ICAgaWYgKCFtX2RyYXdhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBFR0xCb29sZWFuIGVn
bFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQXBpKTsKKworICAgIGlmIChlZ2xSZXN1bHQgIT0gRUdM
X1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLlxu
IiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICB9CisKKyAgICAvLyBw
b3N0IEVHTCBzdXJmYWNlIHRvIHdpbmRvdworICAgIGVnbFJlc3VsdCA9IGVnbFN3YXBCdWZmZXJz
KHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CisKKyAgICBpZiAoZWdsUmVzdWx0ICE9IEVH
TF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiZmFpbGVkIHRvIFN3YXBCdWZmZXJzKCVkKS5c
biIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorfQorCit2b2lk
IEVHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQoreworICAgIGRlc3Ryb3lXaW5kb3coKTsK
KyAgICBmcmVlRUdMUmVzb3VyY2VzKCk7Cit9CisKK3ZvaWQgRUdMVHJhbnNwb3J0U3VyZmFjZTo6
ZnJlZUVHTFJlc291cmNlcygpCit7CisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZB
Q0UpCisgICAgICAgIHJldHVybjsKKworICAgIEVHTEJvb2xlYW4gZWdsUmVzdWx0ID0gZWdsQmlu
ZEFQSShlZ2xBcGkpOworCisgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgeworICAgICAg
ICBMT0dfRVJST1IoImZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgZWdsRGVzdHJveVN1cmZhY2Uoc2hh
cmVkRGlzcGxheSgpLCBtX2RyYXdhYmxlKTsKKyAgICBtX2RyYXdhYmxlID0gRUdMX05PX1NVUkZB
Q0U7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjRhNjllNDkKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaApAQCAtMCwwICsxLDU1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVHTFN1cmZhY2VfaAorI2RlZmluZSBF
R0xTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykgJiYgVVNFKEVH
TCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNpbmNsdWRlIDxnbHgvRUdMWFdpbmRvd1Jl
c291cmNlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRUdMVHJhbnNwb3J0
U3VyZmFjZSA6IHB1YmxpYyBYMTFPZmZTY3JlZW5XaW5kb3cgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEVHTFRyYW5zcG9ydFN1cmZhY2UpOworCitwdWJsaWM6CisgICAgRUdMVHJhbnNwb3J0
U3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkVHTFRyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICBQbGF0
Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpOworICAgIHZvaWQgc3dhcEJ1ZmZlcnMo
KTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGZyZWVFR0xSZXNv
dXJjZXMoKTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9FR0xYV2luZG93UmVzb3VyY2Vz
LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0VHTFhXaW5k
b3dSZXNvdXJjZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQ3NDFj
Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9FR0xYV2luZG93UmVzb3VyY2VzLmgKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgRUdMWFdpbmRvd1Jlc291cmNlc19oCisjZGVmaW5lIEVHTFhX
aW5kb3dSZXNvdXJjZXNfaAorCisjaW5jbHVkZSAiWDExV2luZG93UmVzb3VyY2VzLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpCisKKyNpbmNsdWRlIDxv
cGVuZ2wvR0xEZWZzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2hhcmVkRUdM
UmVzb3VyY2VzIDogcHVibGljIFNoYXJlZFgxMVJlc291cmNlcyB7CisKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRFR0xSZXNvdXJjZXM+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICBpZiAoIW1fc3RhdGljU2hhcmVkUmVzb3VyY2UpCisgICAgICAgICAgICBtX3N0YXRpY1No
YXJlZFJlc291cmNlID0gbmV3IFNoYXJlZEVHTFJlc291cmNlcygpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlLT5yZWYoKTsKKworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRSZXNvdXJjZSk7CisgICAgfQorCisgICAgUGxhdGZv
cm1EaXNwbGF5IG5hdGl2ZURpc3BsYXkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZWdsRGlzcGxh
eSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICAgICAgaW50IG1haiwgbWluOworICAgICAg
ICAgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQ7CisKKyAgICAgICAgICAgIG1fZWdsRGlzcGxheSA9
IGVnbEdldERpc3BsYXkoKEVHTE5hdGl2ZURpc3BsYXlUeXBlKSBTaGFyZWRYMTFSZXNvdXJjZXM6
OngxMURpc3BsYXkoKSk7CisKKyAgICAgICAgICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05P
X0RJU1BMQVkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkVHTERpc3BsYXkgSW5pdGlh
bGl6YXRpb24gZmFpbGVkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZWdsRGlzcGxheTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZWdsUmVzdWx0ID0gZWdsSW5pdGlhbGl6ZSht
X2VnbERpc3BsYXksICZtYWosICZtaW4pOworCisgICAgICAgICAgICBpZiAoZWdsUmVzdWx0ICE9
IEVHTF9UUlVFKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xJbml0aWFsaXphdGlv
biBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBjbGVhbnVwKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fZWdsRGlzcGxheTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZWdsUmVz
dWx0ID0gZWdsQmluZEFQSShlZ2xBcGkpOworCisgICAgICAgICAgICBpZiAoZWdsUmVzdWx0ICE9
IEVHTF9UUlVFKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IEVH
TCBBUEkoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgY2xlYW51cCgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fZWdsRGlzcGxh
eTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEVHTENvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygp
CisgICAgeworICAgICAgICBpZiAoIW1fcGJ1ZmZlcmZiQ29uZmlnKSB7CisgICAgICAgICAgICBF
R0xpbnQgYXR0cmlidXRlTGlzdFtdID0geworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICAgICAg
ICAgICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisjZWxzZQor
ICAgICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfQklULAorI2Vu
ZGlmCisgICAgICAgICAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVH
TF9HUkVFTl9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCisgICAg
ICAgICAgICAgICAgRUdMX1NURU5DSUxfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfQUxQ
SEFfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfUElYTUFQ
X0JJVCwKKyAgICAgICAgICAgICAgICBFR0xfTk9ORQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIG1fcGJ1ZmZlcmZiQ29uZmlnID0gY3JlYXRlQ29uZmlnKGF0dHJpYnV0ZUxpc3QpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBtX3BidWZmZXJmYkNvbmZpZzsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIEVHTENvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpCisgICAgeworICAgICAgICBp
ZiAoIW1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykgeworICAgICAgICAgICAgRUdMaW50IGF0dHJp
YnV0ZUxpc3RbXSA9IHsKKyAgICAgICAgICAgICAgICBFR0xfTEVWRUwsIDAsCisjaWYgVVNFKE9Q
RU5HTF9FU18yKQorICAgICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVO
R0xfRVMyX0JJVCwKKyNlbHNlCisgICAgICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwg
RUdMX09QRU5HTF9CSVQsCisjZW5kaWYKKyAgICAgICAgICAgICAgICBFR0xfUkVEX1NJWkUsIDgs
CisgICAgICAgICAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdM
X0JMVUVfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfU1RFTkNJTF9TSVpFLCA4LAorICAg
ICAgICAgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9ERVBU
SF9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9XSU5ET1df
QklULAorICAgICAgICAgICAgICAgIEVHTF9OT05FCisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gY3JlYXRlQ29uZmlnKGF0dHJpYnV0ZUxpc3Qp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgU2hhcmVkRUdMUmVzb3VyY2VzKCkKKyAgICAgICAgOiBT
aGFyZWRYMTFSZXNvdXJjZXMoKQorICAgIHsKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05P
X0RJU1BMQVk7CisgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IDA7CisgICAgICAg
IG1fcGJ1ZmZlcmZiQ29uZmlnID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFudXAoKQorICAg
IHsKKyAgICAgICAgZWdsTWFrZUN1cnJlbnQobV9lZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwg
RUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgZWdsVGVybWluYXRlKG1f
ZWdsRGlzcGxheSk7CisgICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAg
IH0KKworICAgIEVHTENvbmZpZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkK
KyAgICB7CisgICAgICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAg
ICAgICAgICAgIC8vIFRyeSB0byBpbml0aWFsaXplIERpc3BsYXkgaWYgYWxyZWFkeSBub3QgZG9u
ZS4KKyAgICAgICAgICAgIG5hdGl2ZURpc3BsYXkoKTsKKworICAgICAgICAgICAgaWYgKG1fZWds
RGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIGludCBudW1Db25maWdzOworICAgICAgICBFR0xDb25maWcgcmln
aHRDb25maWcgPSAwOworCisgICAgICAgIC8vIENob29zZSBjb25maWcKKyAgICAgICAgaWYgKCFl
Z2xDaG9vc2VDb25maWcobV9lZ2xEaXNwbGF5LCBhdHRyaWJ1dGVzLCAmcmlnaHRDb25maWcsIDEs
ICZudW1Db25maWdzKSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IHN1
cHBvcnRlZCBjb25maWdpcmF0aW9ucy4iKTsKKyAgICAgICAgICAgIGNsZWFudXAoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChudW1Db25maWdzICE9IDEpIHsKKyAgICAgICAgICAgIExPR19F
UlJPUigiRUdMQ2hvb3NlQ29uZmlnIGRpZG4ndCByZXR1cm4gZXhhY3RseSBvbmUgY29uZmlnIGJ1
dCAoJWQpLlxuIiwgbnVtQ29uZmlncyk7CisgICAgICAgICAgICBjbGVhbnVwKCk7CisgICAgICAg
IH0KKworICAgICAgICBWaXN1YWxJRCB2aXN1YWxJZCA9IDA7CisgICAgICAgIEVHTGludCBlZ2xW
YWx1ZSA9IDA7CisKKyAgICAgICAgLy8gU2VlIGlmIEVHTCBwcm92aWRlZCBhIHZhbGlkIFZpc3Vh
bElEOgorICAgICAgICBlZ2xHZXRDb25maWdBdHRyaWIobV9lZ2xEaXNwbGF5LCByaWdodENvbmZp
ZywgRUdMX05BVElWRV9WSVNVQUxfSUQsICZlZ2xWYWx1ZSk7CisgICAgICAgIHZpc3VhbElkID0g
KFZpc3VhbElEKWVnbFZhbHVlOworICAgICAgICBpZiAodmlzdWFsSWQpIHsKKyAgICAgICAgICAg
IC8vIEVHTCBoYXMgc3VnZ2VzdGVkIGEgdmlzdWFsIGlkLCBzbyBnZXQgdGhlIHJlc3Qgb2YgdGhl
IHZpc3VhbCBpbmZvIGZvciB0aGF0IGlkOgorICAgICAgICAgICAgWFZpc3VhbEluZm8gdmlzdWFs
SW5mb1RlbXBsYXRlOworICAgICAgICAgICAgbWVtc2V0KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAs
IHNpemVvZihYVmlzdWFsSW5mbykpOworICAgICAgICAgICAgdmlzdWFsSW5mb1RlbXBsYXRlLnZp
c3VhbGlkID0gdmlzdWFsSWQ7CisKKyAgICAgICAgICAgIFhWaXN1YWxJbmZvICpjaG9zZW5WaXN1
YWxJbmZvOworICAgICAgICAgICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOworICAgICAgICAgICAg
Y2hvc2VuVmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJbmZvKHgxMURpc3BsYXkoKSwgVmlzdWFsSURN
YXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7CisgICAgICAgICAgICBp
ZiAoY2hvc2VuVmlzdWFsSW5mbykgeworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAg
ICAgICAgICAgIGlmIChtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbikgeworICAgICAgICAgICAg
ICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3Jt
YXQoeDExRGlzcGxheSgpLCBjaG9zZW5WaXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSBjaG9zZW5WaXN1YWxJbmZvOworICAg
ICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmICghbV9WaXN1YWxJbmZv
ICYmIGNob3NlblZpc3VhbEluZm8tPmRlcHRoID09IDMyKQorICAgICAgICAgICAgICAgICAgICBt
X1Zpc3VhbEluZm8gPSBjaG9zZW5WaXN1YWxJbmZvOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIW1fVmlzdWFsSW5mbykgeworICAgICAgICAgICAgICAgIFhWaXN1YWxJbmZvIHZp
c3VhbEluZm9UZW1wbGF0ZTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1w
bGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7CisgICAgICAgICAgICAgICAgWFZpc3VhbElu
Zm8gKm1hdGNoaW5nVmlzdWFsczsKKyAgICAgICAgICAgICAgICBpbnQgbWF0Y2hpbmdDb3VudCA9
IDA7CisKKyAgICAgICAgICAgICAgICB2aXN1YWxJbmZvVGVtcGxhdGUuZGVwdGggPSBjaG9zZW5W
aXN1YWxJbmZvLT5kZXB0aDsKKyAgICAgICAgICAgICAgICBtYXRjaGluZ1Zpc3VhbHMgPSBYR2V0
VmlzdWFsSW5mbyh4MTFEaXNwbGF5KCksIFZpc3VhbERlcHRoTWFzaywgJnZpc3VhbEluZm9UZW1w
bGF0ZSwgJm1hdGNoaW5nQ291bnQpOworCisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nVmlz
dWFscykgeworICAgICAgICAgICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSAmbWF0Y2hpbmdWaXN1
YWxzWzBdOworICAgICAgICAgICAgICAgICAgICBYRnJlZShtYXRjaGluZ1Zpc3VhbHMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgh
bV9WaXN1YWxJbmZvKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgVmlz
dWFsIEluZm8uIik7CisgICAgICAgICAgICBjbGVhbnVwKCk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gcmlnaHRDb25maWc7CisgICAgfQorCisgICAgdmlydHVhbCB+U2hhcmVkRUdMUmVz
b3VyY2VzKCkKKyAgICB7CisgICAgICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BM
QVkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fc3VyZmFjZUNvbnRleHRm
YkNvbmZpZykKKyAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IDA7CisKKyAg
ICAgICAgZWdsVGVybWluYXRlKG1fZWdsRGlzcGxheSk7CisgICAgICAgIG1fZWdsRGlzcGxheSA9
IEVHTF9OT19ESVNQTEFZOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEVHTERpc3BsYXkgbV9l
Z2xEaXNwbGF5OworICAgIEVHTENvbmZpZyBtX3BidWZmZXJmYkNvbmZpZzsKKyAgICBFR0xDb25m
aWcgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlm
CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKaW5kZXggNjAyOTNlNy4uNDg1MjVm
NSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcApAQCAtMjgsNyArMjgsMTMg
QEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2lmIFVTRShHTFgpCiAj
aW5jbHVkZSAiR0xYV2luZG93UmVzb3VyY2VzLmgiCisjZW5kaWYKKworI2lmIFVTRShFR0wpCisj
aW5jbHVkZSAiRUdMWFdpbmRvd1Jlc291cmNlcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKaW5kZXggYjI1YjJhYy4uMTNm
NzVhMiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCkBAIC00MCw4ICs0MCwxNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBVU0UoR0xYKQogY2xhc3MgU2hhcmVkR0xY
UmVzb3VyY2VzOwogdHlwZWRlZiBTaGFyZWRHTFhSZXNvdXJjZXMgUGxhdGZvcm1TaGFyZWRSZXNv
dXJjZXM7CisjZWxpZiBVU0UoRUdMKQorY2xhc3MgU2hhcmVkRUdMUmVzb3VyY2VzOwordHlwZWRl
ZiBTaGFyZWRFR0xSZXNvdXJjZXMgUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM7CisjZWxzZQorY2xh
c3MgRHVtbXlTaGFyZWRSZXNvdXJjZXM7Cit0eXBlZGVmIER1bW15U2hhcmVkUmVzb3VyY2VzIFBs
YXRmb3JtU2hhcmVkUmVzb3VyY2VzOworI2VuZGlmCiAKIGNsYXNzIFNoYXJlZFgxMVJlc291cmNl
cyA6IHB1YmxpYyBXVEY6OlJlZkNvdW50ZWRCYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTaGFyZWRYMTFSZXNvdXJjZXMpOwpAQCAtMTQ3LDYgKzE1NSw0MiBAQCBwcm90ZWN0ZWQ6CiAg
ICAgWFZpc3VhbEluZm8qIG1fVmlzdWFsSW5mbzsKIH07CiAKKy8vIER1bW15IEltcGxlbWVudGF0
aW9uIHRvIGF2b2lkIGlmZGVmcworY2xhc3MgRHVtbXlTaGFyZWRSZXNvdXJjZXMgOiBwdWJsaWMg
U2hhcmVkWDExUmVzb3VyY2VzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEdW1teVNoYXJl
ZFJlc291cmNlcyk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxEdW1teVNoYXJl
ZFJlc291cmNlcz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIFBsYXRmb3JtRGlzcGxheSBuYXRpdmVEaXNwbGF5KCkKKyAgICB7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIHBCdWZmZXJD
b250ZXh0Q29uZmlnKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZp
cnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCkKKyAgICB7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEdW1teVNoYXJlZFJl
c291cmNlcygpCisgICAgICAgIDogU2hhcmVkWDExUmVzb3VyY2VzKCkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB+RHVtbXlTaGFyZWRSZXNvdXJjZXMoKQorICAgIHsKKyAgICB9Cit9Owor
CiBjbGFzcyBYMTFPZmZTY3JlZW5XaW5kb3cgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2Ugewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFgxMU9mZlNjcmVlbldpbmRvdyk7CiAKZGlmZiAtLWdp
dCBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5j
bWFrZQppbmRleCA4MDBhNzA5Li5mZTIwMmVmIDEwMDY0NAotLS0gU291cmNlL2NtYWtlL09wdGlv
bnNFZmwuY21ha2UKKysrIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC0xNzUsMTIg
KzE3NSwyNSBAQCBpZiAoRU5BQkxFX1dFQkdMIE9SIFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9S
RSkKIAogICAgIGlmIChPUEVOR0xYX0ZPVU5EKQogICAgICAgICBhZGRfZGVmaW5pdGlvbnMoLURI
QVZFX0dMWCkKLSAgICAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9HTFg9MSkKKyAgICBl
bmRpZiAoKQorCisgICAgb3B0aW9uKEVOQUJMRV9FR0wgT04pCiAKLSAgICAgICAgaWYgKFgxMV9Y
Y29tcG9zaXRlX0ZPVU5EIEFORCBYMTFfWHJlbmRlcl9GT1VORCkKLSAgICAgICAgICAgc2V0KFVT
RV9HUkFQSElDU19TVVJGQUNFIDEpCi0gICAgICAgIGVuZGlmICgpCisgICAgaWYgKEVOQUJMRV9F
R0wpCisgICAgICAgIGZpbmRfcGFja2FnZShFR0wgUkVRVUlSRUQpCiAgICAgZW5kaWYgKCkKKwor
ICAgIGlmIChFR0xfRk9VTkQpCisgICAgICAgIHNldChXVEZfVVNFX0VHTCAxKQorICAgICAgICBh
ZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0VHTD0xKQorICAgICBlbHNlaWYgKE9QRU5HTFhfRk9V
TkQpCisgICAgICAgICBzZXQoV1RGX1VTRV9HTFggMSkKKyAgICAgICAgIGFkZF9kZWZpbml0aW9u
cygtRFdURl9VU0VfR0xYPTEpCisgICAgZW5kaWYgKCkKKworICAgICBpZiAoKE9QRU5HTFhfRk9V
TkQgT1IgRUdMX0ZPVU5EKSBBTkQgWDExX1hjb21wb3NpdGVfRk9VTkQgQU5EIFgxMV9YcmVuZGVy
X0ZPVU5EKQorICAgICAgICAgc2V0KFVTRV9HUkFQSElDU19TVVJGQUNFIDEpCisgICAgIGVuZGlm
ICgpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX0lOU1BFQ1RPUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180557</attachid>
            <date>2012-12-21 14:32:40 -0800</date>
            <delta_ts>2012-12-21 19:37:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>eglrefactor3.patch</filename>
            <type>text/plain</type>
            <size>36830</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLmI1OGJkMzMgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQg
Y2FuIGJlIGVuYWJsZWQgZHVyaW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1E
RU5BQkxFX0VHTD1PTiBhcyBjbWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzgzMzguCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAxYTA0MDRmLi42ODRjMDRkIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NiBAQAorMjAxMi0x
Mi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTYwMgorCisg
ICAgICAgIEFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJhY2tlbmQuIEVHTCBzdXBwb3J0
IGNhbiBiZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAgICAgICAgYnkgcGFzc2luZyAt
REVOQUJMRV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRlci4gVGhpcyBpcyBkaXNhYmxl
ZCBieSBkZWZhdWx0LgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxh
dGZvcm1Db250ZXh0OjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1Db250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdM
UGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6aXNSb2J1c3RuZXNz
RXh0U3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEN1cnJlbnRDb250ZXh0V3JhcHBl
cjo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEN1cnJl
bnRDb250ZXh0V3JhcHBlcjo6aGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
bkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2Zm
U2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3Jl
ZW5Db250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xP
ZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3VycmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKToKKyAgICAgICAg
KFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OmRlc3Ryb3kpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6On5FR0xDdXJyZW50Q29udGV4dFdyYXBwZXIpOgor
ICAgICAgICAoRUdMT2ZmU2NyZWVuQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6RUdMVHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjp+RUdMVHJhbnNw
b3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpjb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBC
dWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kp
OgorICAgICAgICAoV2ViQ29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNl
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMVHJhbnNwb3J0U3VyZmFjZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0VHTFhXaW5kb3dSZXNvdXJj
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEVHTFJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6Om5hdGl2ZURpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkRUdMUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29u
ZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6U2hhcmVkRUdMUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6Y2xlYW51cCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZUNvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6On5TaGFyZWRFR0xSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFX
aW5kb3dSZXNvdXJjZXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRHVtbXlTaGFy
ZWRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlTaGFyZWRSZXNvdXJjZXM6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJlZFJlc291cmNlczo6bmF0aXZlRGlz
cGxheSk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJlZFJlc291cmNlczo6cEJ1ZmZlckNv
bnRleHRDb25maWcpOgorICAgICAgICAoV2ViQ29yZTo6RHVtbXlTaGFyZWRSZXNvdXJjZXM6OnN1
cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bW15U2hhcmVkUmVzb3Vy
Y2VzOjpEdW1teVNoYXJlZFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEdW1teVNoYXJl
ZFJlc291cmNlczo6fkR1bW15U2hhcmVkUmVzb3VyY2VzKToKKwogMjAxMi0xMi0yMSAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxvY2FsaXphYmxl
IHN0cmluZ3MgYXMgYSBmb2xsb3d1cCB0byBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8xMzgzODcKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCA1NmUzMDZjLi5lN2U0NjljIDEwMDY0
NAotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNjUsNiArMjY1LDE0IEBAIGlmIChXVEZfVVNFXzNEX0dS
QVBISUNTKQogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4IgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
IgogICAgICkKKworICAgIGlmIChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICAgICAke0VHTF9JTkNMVURFX0RJUn0K
KyAgICAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
Z2wiCisgICAgKQorICAgIGVuZGlmICgpCisKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKQEAgLTI3NywxOCAr
Mjg1LDM2IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKLSAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHAKICAgICApCisKKyAgICBpZiAoV1RGX1VTRV9FR0wpCisgICAgICAgIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTFN1cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29udGV4dC5jcHAKKyAgICAgICAgKQorICAgIGVuZGlmICgpCisKKyAgICBpZiAo
V1RGX1VTRV9HTFgpCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisgICAg
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKyAg
ICAgICAgKQorICAgIGVuZGlmICgpCisKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklF
UwogICAgICAgICAke1gxMV9YMTFfTElCfQogICAgICAgICAke1gxMV9YY29tcG9zaXRlX0xJQn0K
ICAgICAgICAgJHtYMTFfWHJlbmRlcl9MSUJ9CiAgICAgKQorICAgIGlmIChXVEZfVVNFX0VHTCkK
KyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICR7RUdM
X0xJQlJBUll9CisgICAgICAgICkKKyAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAogYWRkX2RlZmlu
aXRpb25zKC1EREFUQV9ESVI9IiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7REFUQV9JTlNUQUxM
X0RJUn0iKQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTERlZnMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZz
LmgKaW5kZXggMmRmYjRjOS4uYTVjYzI4MiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oCkBAIC00Miw2ICs0MiwxMiBAQAogI2luY2x1ZGUgPEdM
L2dseC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoRUdMKQorI2RlZmluZSBFR0xfRUdMRVhUX1BST1RP
VFlQRVMgMQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+Cisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVpbnQzMl90IFBsYXRmb3Jt
QnVmZmVySGFuZGxlOwpAQCAtNTEsNiArNTcsMTYgQEAgdHlwZWRlZiBHTFhDb250ZXh0IFBsYXRm
b3JtQ29udGV4dDsKIHR5cGVkZWYgRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5OwogdHlwZWRlZiBH
TFhGQkNvbmZpZyBQbGF0Zm9ybVN1cmZhY2VDb25maWc7CiB0eXBlZGVmIEdMWERyYXdhYmxlIFBs
YXRmb3JtRHJhd2FibGU7CisjZWxpZiBVU0UoRUdMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0
YXRpYyBjb25zdCBFR0xlbnVtIGVnbEFwaSA9IEVHTF9PUEVOR0xfRVNfQVBJOworI2Vsc2UKK3N0
YXRpYyBjb25zdCBFR0xlbnVtIGVnbEFwaSA9IEVHTF9PUEVOR0xfQVBJOworI2VuZGlmCit0eXBl
ZGVmIEVHTENvbnRleHQgUGxhdGZvcm1Db250ZXh0OwordHlwZWRlZiBFR0xEaXNwbGF5IFBsYXRm
b3JtRGlzcGxheTsKK3R5cGVkZWYgRUdMQ29uZmlnIFBsYXRmb3JtU3VyZmFjZUNvbmZpZzsKK3R5
cGVkZWYgRUdMU3VyZmFjZSBQbGF0Zm9ybURyYXdhYmxlOwogI2Vsc2UKIHR5cGVkZWYgdm9pZCog
UGxhdGZvcm1Db250ZXh0OwogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybURpc3BsYXk7CmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250
ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9y
bUNvbnRleHQuY3BwCmluZGV4IDc2MjFlMmUuLmQ5YzE3YmQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQu
Y3BwCkBAIC0zMiwxMSArMzIsMTYgQEAKICNpbmNsdWRlICJHTFhDb250ZXh0LmgiCiAjZW5kaWYK
IAorI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiRUdMQ29udGV4dC5oIgorI2VuZGlmCisKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBQ
Rk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNBUkJQUk9DIGdsR2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQiA9IDA7CisKIHN0YXRpYyBHTFBsYXRmb3JtQ29udGV4dCogbV9jdXJyZW50Q29udGV4dCA9
IDA7CiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IEdMUGxhdGZvcm1Db250ZXh0Ojpj
cmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkK
QEAgLTQ0LDExICs0OSwxMSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBsYXRm
b3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRAogICAgIGlmICghaW5p
dGlhbGl6ZU9wZW5HTFNoaW1zKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYg
KCFnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpIHsKICNpZiBVU0UoR0xYKQorICAgIGlmICgh
Z2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7CiAgICAgICAgIGdsR2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVRHUkFQSElDU1JFU0VUU1RBVFVT
QVJCUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3NBUkIocmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVi
eXRlKj4oImdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiIpKSk7Ci0jZW5kaWYKICAgICB9Cisj
ZW5kaWYKIAogICAgIHN3aXRjaCAocmVuZGVyU3R5bGUpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSZW5kZXJPZmZzY3JlZW46CkBAIC03MCw4ICs3NSwxMyBAQCBQYXNzT3duUHRyPEdM
UGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGlj
c0NvbnRleHQzRAogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRl
eHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogewogI2lmIFVTRShHTFgpCi0gICAgT3duUHRy
PEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVl
bkNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAgIE93blB0
cjxHTFBsYXRmb3JtQ29udGV4dD4gY29udGV4dCA9IGFkb3B0UHRyKG5ldyBHTFhPZmZTY3JlZW5D
b250ZXh0KCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKKyNlbmRpZgorCisjaWYg
VVNFKEVHTCkKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0
cihuZXcgRUdMT2ZmU2NyZWVuQ29udGV4dCgpKTsKKyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNl
KCk7CiAjZW5kaWYKIAogICAgIHJldHVybiBudWxscHRyOwpAQCAtODAsOCArOTAsMTMgQEAgUGFz
c093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNj
cmVlbkNvbnRleHQoKQogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNv
bnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcigpCiB7CiAjaWYgVVNFKEdMWCkKLSAg
ICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xY
Q3VycmVudENvbnRleHRXcmFwcGVyKCkpOwotICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2Uo
KTsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcg
R0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2Uo
KTsKKyNlbmRpZgorCisjaWYgVVNFKEVHTCkKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+
IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOworICAg
IHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIG51bGxwdHI7
CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxh
dGZvcm1Db250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
UGxhdGZvcm1Db250ZXh0LmgKaW5kZXggMTcwYjc2ZS4uMDM1M2RmOCAxMDA2NDQKLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRl
eHQuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgLy8gRG9lc24ndCBoYXZlIGFueSBl
ZmZlY3QgaWYgdGhpcyBpcyBub3QgdGhlIGN1cnJlbnQgQ29udGV4dC4KICAgICB2b2lkIHJlbGVh
c2VDdXJyZW50KCk7CiAKLSAgICBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CisgICAg
dmlydHVhbCBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJv
b2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCmluZGV4
IDgzOTFlNDcuLjhlMjk5YzcgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC0zMiw2ICszMiwx
MCBAQAogI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKICNlbmRpZgogCisjaWYgVVNFKEVHTCkKKyNp
bmNsdWRlICJFR0xTdXJmYWNlLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDEwICs1NCwxNSBAQCBQYXNzT3duUHRy
PEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2Zmc2NyZWVuU3Vy
ZmFjZSgpCiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNl
OjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCkKIHsKLSNpZiBVU0UoR0xYKSAmJiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiBVU0UoR0xYKQogICAg
IE93blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFu
c3BvcnRTdXJmYWNlKCkpOworI2VuZGlmCisjaWYgVVNFKEVHTCkKKyAgICBPd25QdHI8R0xQbGF0
Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdMVHJhbnNwb3J0U3VyZmFjZSgp
KTsKKyNlbmRpZgogCi0gICAgaWYgKHN1cmZhY2UtPmhhbmRsZSgpKQorICAgIGlmIChzdXJmYWNl
ICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZhY2UtPmRyYXdhYmxlKCkpCiAgICAgICAgIHJl
dHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2FlYTJkCi0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0
LmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkVHTENvbnRleHQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykgJiYgVVNFKEVHTCkKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2lmIEhBVkUo
R0xYKQorI2luY2x1ZGUgPEdML2dseC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0geworI2lmIFVTRShP
UEVOR0xfRVNfMikKKyAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgMiwKKyNlbmRpZgor
ICAgIEVHTF9OT05FCit9OworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRleHRSb2J1c3RuZXNz
QXR0cmlidXRlc1tdID0geworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICBFR0xfQ09OVEVYVF9D
TElFTlRfVkVSU0lPTiwgMiwKKyNlbmRpZgorICAgIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9O
T1RJRklDQVRJT05fU1RSQVRFR1lfRVhULAorICAgIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRf
RVhULAorICAgIEVHTF9OT05FCit9OworCitzdGF0aWMgYm9vbCBpc1JvYnVzdG5lc3NFeHRTdXBw
b3J0ZWQoRUdMRGlzcGxheSBkaXNwbGF5KQoreworICAgIHN0YXRpYyBib29sIHF1ZXJ5RG9uZSA9
IGZhbHNlOworICAgIHN0YXRpYyBib29sIGlzRUdMRVhUc3VwcG9ydGVkID0gZmFsc2U7CisKKyAg
ICBpZiAoIXF1ZXJ5RG9uZSkgeworICAgICAgICBxdWVyeURvbmUgPSB0cnVlOworCisgICAgICAg
IGNvbnN0IGNoYXIqIGV4dGVuc2lvbnMgPSBlZ2xRdWVyeVN0cmluZyhkaXNwbGF5LCBFR0xfRVhU
RU5TSU9OUyk7CisgICAgICAgIGlmIChleHRlbnNpb25zKSB7CisgICAgICAgICAgICBzdGQ6OnN0
cmluZyBmb3VuZEV4dGVuc2lvbnMoZXh0ZW5zaW9ucyk7CisgICAgICAgICAgICBmb3VuZEV4dGVu
c2lvbnMgKz0gIiAiOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZXh0TmFtZSgiRUdMX0VYVF9j
cmVhdGVfY29udGV4dF9yb2J1c3RuZXNzICIpOworICAgICAgICAgICAgaXNFR0xFWFRzdXBwb3J0
ZWQgPSBmb3VuZEV4dGVuc2lvbnMuZmluZChleHROYW1lKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpc0VHTEVYVHN1cHBvcnRlZDsKK30KKwor
RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKQorICAg
IDogR0xQbGF0Zm9ybUNvbnRleHQoKQoreworfQorCisvLyBGaXhNZTogVGhpcyBpcyBhIHRlbXBv
cmFyeSB3b3JrYXJvdW5kIHRpbGwgd2UgYXJlIGFibGUgdG8gYnVpbGQgZXZhcyB3aXRoIEVHTCBz
dXBwb3J0CitQbGF0Zm9ybUNvbnRleHQgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpoYW5kbGUo
KSBjb25zdAoreworICAgIHJldHVybiBnbFhHZXRDdXJyZW50Q29udGV4dCgpOworfQorCitFR0xP
ZmZTY3JlZW5Db250ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0KCkKKyAgICA6IEdMUGxhdGZvcm1D
b250ZXh0KCkKKyAgICAsIG1fZGlzcGxheSgwKQoreworfQorCitib29sIEVHTE9mZlNjcmVlbkNv
bnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgaWYg
KCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBzZXQgY3VycmVudCBy
ZW5kZXJpbmcgQVBJCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFw
aSk7CisKKyAgICBpZiAoZWdsUmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJP
UigiZmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbV9kaXNwbGF5ID0gc3VyZmFjZS0+c2hhcmVk
RGlzcGxheSgpOworCisgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEVHTENvbmZpZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CisKKyAg
ICBpZiAoIWNvbmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvbmZpZykg
eworCisgICAgICAgIGlmIChpc1JvYnVzdG5lc3NFeHRTdXBwb3J0ZWQobV9kaXNwbGF5KSkKKyAg
ICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGVnbENyZWF0ZUNvbnRleHQobV9kaXNwbGF5LCBj
b25maWcsIEVHTF9OT19DT05URVhULCBjb250ZXh0Um9idXN0bmVzc0F0dHJpYnV0ZXMpOworCisg
ICAgICAgIGlmICghbV9jb250ZXh0SGFuZGxlICYmIG1fY29udGV4dEhhbmRsZSAhPSBFR0xfTk9f
Q09OVEVYVCkKKyAgICAgICAgICAgIG1fcmVzZXRMb3N0Q29udGV4dCA9IHRydWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGVnbENyZWF0ZUNvbnRleHQobV9k
aXNwbGF5LCBjb25maWcsIEVHTF9OT19DT05URVhULCBjb250ZXh0QXR0cmlidXRlcyk7CisKKyAg
ICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSAmJiBtX2NvbnRleHRIYW5kbGUgIT0gRUdMX05PX0NP
TlRFWFQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK0VHTE9mZlNjcmVlbkNvbnRleHQ6On5FR0xPZmZTY3JlZW5Db250ZXh0KCkKK3sK
K30KKworYm9vbCBFR0xPZmZTY3JlZW5Db250ZXh0Ojppc0N1cnJlbnRDb250ZXh0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0SGFuZGxlID09IGVnbEdldEN1cnJlbnRDb250ZXh0KCk7
Cit9CisKK2Jvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1NYWtlQ3VycmVudChHTFBs
YXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICAvLyBzZXQgY3VycmVudCByZW5kZXJpbmcg
QVBJCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFwaSk7CisKKyAg
ICBpZiAoZWdsUmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiZmFpbGVk
IHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIHN1cmZh
Y2UtPmRyYXdhYmxlKCksIHN1cmZhY2UtPmRyYXdhYmxlKCksIG1fY29udGV4dEhhbmRsZSkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gbWFrZSBjb250ZXh0IGN1cnJlbnQuKCVkKS5c
biIsIGVnbEdldEVycm9yKCkpOworCisgICAgICAgIGlmIChtX3Jlc2V0TG9zdENvbnRleHQgJiYg
ZWdsR2V0RXJyb3IoKSA9PSBFR0xfQ09OVEVYVF9MT1NUKSB7CisgICAgICAgICAgICBMT0dfRVJS
T1IoIkxvc3QgY3VycmVudCBjb250ZXh0LlxuIik7CisgICAgICAgICAgICBtX2NvbnRleHRMb3N0
ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybVJl
bGVhc2VDdXJyZW50KCkKK3sKKyAgICBlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIEVHTF9OT19T
VVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworfQorCit2b2lkIEVHTE9m
ZlNjcmVlbkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2NvbnRleHRIYW5k
bGUpCisgICAgICAgIGVnbERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxl
KTsKKworICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CisgICAgbV9kaXNwbGF5ID0gMDsKK30KKwor
dm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KCkKK3sKKyAgICBHTFBsYXRmb3JtQ29u
dGV4dDo6ZGVzdHJveSgpOworICAgIGZyZWVSZXNvdXJjZXMoKTsKK30KKworfQorCisjZW5kaWYK
KwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xDb250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDhi
ZGIyCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBFR0xDb250ZXh0X2gKKyNkZWZpbmUgRUdMQ29udGV4dF9oCisKKyNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpCisKKyNpbmNsdWRlICJHTFBs
YXRmb3JtQ29udGV4dC5oIgorCisjaW5jbHVkZSA8Z2x4L0VHTFhXaW5kb3dSZXNvdXJjZXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIg
OiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVH
TEN1cnJlbnRDb250ZXh0V3JhcHBlcik7CisKK3B1YmxpYzoKKyAgICBFR0xDdXJyZW50Q29udGV4
dFdyYXBwZXIoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CisgICAgdmly
dHVhbCB+RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBS
ZWZQdHI8U2hhcmVkRUdMUmVzb3VyY2VzPiBtX25hdGl2ZVJlc291cmNlczsKK307CisKK2NsYXNz
IEVHTE9mZlNjcmVlbkNvbnRleHQgOiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEVHTE9mZlNjcmVlbkNvbnRleHQpOworCitwdWJsaWM6CisgICAg
RUdMT2ZmU2NyZWVuQ29udGV4dCgpOworICAgIHZpcnR1YWwgfkVHTE9mZlNjcmVlbkNvbnRleHQo
KTsKKyAgICBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKTsKKyAgICBib29sIHBs
YXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqKTsKKyAgICB2b2lkIHBsYXRmb3Jt
UmVsZWFzZUN1cnJlbnQoKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBib29sIGlzQ3VycmVu
dENvbnRleHQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsK
KyAgICBFR0xEaXNwbGF5IG1fZGlzcGxheTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9F
R0xTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
Z2wvRUdMU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk4
ZGUxMAotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFR0xTdXJmYWNlLmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpICYmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitFR0xUcmFuc3BvcnRTdXJmYWNlOjpFR0xUcmFuc3BvcnRTdXJmYWNlKCkK
KyAgICA6IFgxMU9mZlNjcmVlbldpbmRvdygpCit7CisgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9
PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICBMT0dfRVJST1IoIk5vIHZhbGlkIGhhcmR3YXJl
IGRpc3BsYXkgZm91bmQuIFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWNvbmZpZ3VyYXRpb24oKSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjcmVhdGVPZmZzY3JlZW5XaW5kb3coKTsKKworICAgIGlmICghbV9idWZm
ZXJIYW5kbGUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIFhXaW5kb3cu
IFxuIik7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVkUmVzb3VyY2VzLT5u
YXRpdmVEaXNwbGF5KCksIGNvbmZpZ3VyYXRpb24oKSwgKEVHTE5hdGl2ZVdpbmRvd1R5cGUpbV9i
dWZmZXJIYW5kbGUsIDApOworCisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0Up
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJmYWNlLiBcbiIp
OworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorfQorCitFR0xUcmFuc3BvcnRTdXJmYWNlOjp+
RUdMVHJhbnNwb3J0U3VyZmFjZSgpCit7Cit9CisKK1BsYXRmb3JtU3VyZmFjZUNvbmZpZyBFR0xU
cmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRS
ZXNvdXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Cit9CisKK3ZvaWQgRUdMVHJhbnNwb3J0
U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFwaSk7
CisKKyAgICBpZiAoZWdsUmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigi
ZmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBk
ZXN0cm95KCk7CisgICAgfQorCisgICAgLy8gcG9zdCBFR0wgc3VyZmFjZSB0byB3aW5kb3cKKyAg
ICBlZ2xSZXN1bHQgPSBlZ2xTd2FwQnVmZmVycyhzaGFyZWREaXNwbGF5KCksIG1fZHJhd2FibGUp
OworCisgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1Io
ImZhaWxlZCB0byBTd2FwQnVmZmVycyglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAg
ZGVzdHJveSgpOworICAgIH0KK30KKwordm9pZCBFR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95
KCkKK3sKKyAgICBkZXN0cm95V2luZG93KCk7CisgICAgZnJlZUVHTFJlc291cmNlcygpOworfQor
Cit2b2lkIEVHTFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVFR0xSZXNvdXJjZXMoKQoreworICAgIGlm
IChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICByZXR1cm47CisKKyAgICBF
R0xCb29sZWFuIGVnbFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQXBpKTsKKworICAgIGlmIChlZ2xS
ZXN1bHQgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IEVH
TCBBUEkoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBlZ2xEZXN0cm95U3VyZmFjZShzaGFyZWREaXNwbGF5KCksIG1fZHJhd2FibGUpOworICAg
IG1fZHJhd2FibGUgPSBFR0xfTk9fU1VSRkFDRTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFj
ZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJm
YWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2OWU0OQotLS0gL2Rl
di9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMU3VyZmFjZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgRUdMU3VyZmFjZV9oCisjZGVmaW5lIEVHTFN1cmZhY2VfaAorCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoRUdMKSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKwor
I2luY2x1ZGUgPGdseC9FR0xYV2luZG93UmVzb3VyY2VzLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBFR0xUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIFgxMU9mZlNjcmVlbldp
bmRvdyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMVHJhbnNwb3J0U3VyZmFjZSk7CisK
K3B1YmxpYzoKKyAgICBFR0xUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgdmlydHVhbCB+RUdMVHJh
bnNwb3J0U3VyZmFjZSgpOworICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9u
KCk7CisgICAgdm9pZCBzd2FwQnVmZmVycygpOworICAgIHZvaWQgZGVzdHJveSgpOworCitwcml2
YXRlOgorICAgIHZvaWQgZnJlZUVHTFJlc291cmNlcygpOworfTsKKworfQorCisjZW5kaWYKKwor
I2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0VHTFhXaW5kb3dSZXNvdXJjZXMuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvRUdMWFdpbmRvd1Jlc291cmNlcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjg3NDc0MWMKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0VHTFhXaW5kb3dSZXNvdXJjZXMuaApA
QCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFR0xYV2luZG93
UmVzb3VyY2VzX2gKKyNkZWZpbmUgRUdMWFdpbmRvd1Jlc291cmNlc19oCisKKyNpbmNsdWRlICJY
MTFXaW5kb3dSZXNvdXJjZXMuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKEVHTCkKKworI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBTaGFyZWRFR0xSZXNvdXJjZXMgOiBwdWJsaWMgU2hhcmVkWDExUmVz
b3VyY2VzIHsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEVHTFJlc291
cmNlcz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zdGF0aWNTaGFyZWRSZXNvdXJj
ZSkKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSBuZXcgU2hhcmVkRUdMUmVz
b3VyY2VzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3Vy
Y2UtPnJlZigpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291
cmNlKTsKKyAgICB9CisKKyAgICBQbGF0Zm9ybURpc3BsYXkgbmF0aXZlRGlzcGxheSgpCisgICAg
eworICAgICAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAgICAg
ICAgICBpbnQgbWFqLCBtaW47CisgICAgICAgICAgICBFR0xCb29sZWFuIGVnbFJlc3VsdDsKKwor
ICAgICAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheSgoRUdMTmF0aXZlRGlzcGxh
eVR5cGUpIFNoYXJlZFgxMVJlc291cmNlczo6eDExRGlzcGxheSgpKTsKKworICAgICAgICAgICAg
aWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICAgICAgICAgIExP
R19FUlJPUigiRUdMRGlzcGxheSBJbml0aWFsaXphdGlvbiBmYWlsZWQiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9lZ2xEaXNwbGF5OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBl
Z2xSZXN1bHQgPSBlZ2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgJm1haiwgJm1pbik7CisKKyAg
ICAgICAgICAgIGlmIChlZ2xSZXN1bHQgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIkVHTEluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIGNs
ZWFudXAoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9lZ2xEaXNwbGF5OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFwaSk7CisKKyAg
ICAgICAgICAgIGlmIChlZ2xSZXN1bHQgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgICAgICAgICBM
T0dfRVJST1IoImZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsK
KyAgICAgICAgICAgICAgICBjbGVhbnVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbV9lZ2xEaXNwbGF5OworICAgIH0KKworICAgIHZpcnR1YWwgRUdMQ29u
ZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCkKKyAgICB7CisgICAgICAgIGlmICghbV9wYnVmZmVy
ZmJDb25maWcpIHsKKyAgICAgICAgICAgIEVHTGludCBhdHRyaWJ1dGVMaXN0W10gPSB7CisjaWYg
VVNFKE9QRU5HTF9FU18yKQorICAgICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVH
TF9PUEVOR0xfRVMyX0JJVCwKKyNlbHNlCisgICAgICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVf
VFlQRSwgRUdMX09QRU5HTF9CSVQsCisjZW5kaWYKKyAgICAgICAgICAgICAgICBFR0xfUkVEX1NJ
WkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgICAgICAg
ICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfU1RFTkNJTF9TSVpFLCA4
LAorICAgICAgICAgICAgICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVH
TF9TVVJGQUNFX1RZUEUsIEVHTF9QSVhNQVBfQklULAorICAgICAgICAgICAgICAgIEVHTF9OT05F
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgbV9wYnVmZmVyZmJDb25maWcgPSBjcmVhdGVD
b25maWcoYXR0cmlidXRlTGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fcGJ1ZmZl
cmZiQ29uZmlnOworICAgIH0KKworICAgIHZpcnR1YWwgRUdMQ29uZmlnIHN1cmZhY2VDb250ZXh0
Q29uZmlnKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKSB7
CisgICAgICAgICAgICBFR0xpbnQgYXR0cmlidXRlTGlzdFtdID0geworICAgICAgICAgICAgICAg
IEVHTF9MRVZFTCwgMCwKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICAgICAgRUdM
X1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAorI2Vsc2UKKyAgICAgICAgICAg
ICAgICBFR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0JJVCwKKyNlbmRpZgorICAgICAg
ICAgICAgICAgIEVHTF9SRURfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfR1JFRU5fU0la
RSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICAgICAgICAg
IEVHTF9TVEVOQ0lMX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgs
CisgICAgICAgICAgICAgICAgRUdMX0RFUFRIX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdM
X1NVUkZBQ0VfVFlQRSwgRUdMX1dJTkRPV19CSVQsCisgICAgICAgICAgICAgICAgRUdMX05PTkUK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSBj
cmVhdGVDb25maWcoYXR0cmlidXRlTGlzdCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
bV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTaGFyZWRF
R0xSZXNvdXJjZXMoKQorICAgICAgICA6IFNoYXJlZFgxMVJlc291cmNlcygpCisgICAgeworICAg
ICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICAgICAgbV9zdXJmYWNlQ29u
dGV4dGZiQ29uZmlnID0gMDsKKyAgICAgICAgbV9wYnVmZmVyZmJDb25maWcgPSAwOworICAgIH0K
KworICAgIHZvaWQgY2xlYW51cCgpCisgICAgeworICAgICAgICBlZ2xNYWtlQ3VycmVudChtX2Vn
bERpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQp
OworICAgICAgICBlZ2xUZXJtaW5hdGUobV9lZ2xEaXNwbGF5KTsKKyAgICAgICAgbV9lZ2xEaXNw
bGF5ID0gRUdMX05PX0RJU1BMQVk7CisgICAgfQorCisgICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZp
Zyhjb25zdCBpbnQgYXR0cmlidXRlc1tdKQorICAgIHsKKyAgICAgICAgaWYgKG1fZWdsRGlzcGxh
eSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICAgICAgLy8gVHJ5IHRvIGluaXRpYWxpemUg
RGlzcGxheSBpZiBhbHJlYWR5IG5vdCBkb25lLgorICAgICAgICAgICAgbmF0aXZlRGlzcGxheSgp
OworCisgICAgICAgICAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaW50IG51bUNvbmZp
Z3M7CisgICAgICAgIEVHTENvbmZpZyByaWdodENvbmZpZyA9IDA7CisKKyAgICAgICAgLy8gQ2hv
b3NlIGNvbmZpZworICAgICAgICBpZiAoIWVnbENob29zZUNvbmZpZyhtX2VnbERpc3BsYXksIGF0
dHJpYnV0ZXMsICZyaWdodENvbmZpZywgMSwgJm51bUNvbmZpZ3MpKSB7CisgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBnZXQgc3VwcG9ydGVkIGNvbmZpZ2lyYXRpb25zLiIpOworICAg
ICAgICAgICAgY2xlYW51cCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG51bUNvbmZpZ3Mg
IT0gMSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xDaG9vc2VDb25maWcgZGlkbid0IHJl
dHVybiBleGFjdGx5IG9uZSBjb25maWcgYnV0ICglZCkuXG4iLCBudW1Db25maWdzKTsKKyAgICAg
ICAgICAgIGNsZWFudXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIFZpc3VhbElEIHZpc3VhbElk
ID0gMDsKKyAgICAgICAgRUdMaW50IGVnbFZhbHVlID0gMDsKKworICAgICAgICAvLyBTZWUgaWYg
RUdMIHByb3ZpZGVkIGEgdmFsaWQgVmlzdWFsSUQ6CisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJp
YihtX2VnbERpc3BsYXksIHJpZ2h0Q29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJmVnbFZh
bHVlKTsKKyAgICAgICAgdmlzdWFsSWQgPSAoVmlzdWFsSUQpZWdsVmFsdWU7CisgICAgICAgIGlm
ICh2aXN1YWxJZCkgeworICAgICAgICAgICAgLy8gRUdMIGhhcyBzdWdnZXN0ZWQgYSB2aXN1YWwg
aWQsIHNvIGdldCB0aGUgcmVzdCBvZiB0aGUgdmlzdWFsIGluZm8gZm9yIHRoYXQgaWQ6CisgICAg
ICAgICAgICBYVmlzdWFsSW5mbyB2aXN1YWxJbmZvVGVtcGxhdGU7CisgICAgICAgICAgICBtZW1z
ZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7CisgICAgICAg
ICAgICB2aXN1YWxJbmZvVGVtcGxhdGUudmlzdWFsaWQgPSB2aXN1YWxJZDsKKworICAgICAgICAg
ICAgWFZpc3VhbEluZm8gKmNob3NlblZpc3VhbEluZm87CisgICAgICAgICAgICBpbnQgbWF0Y2hp
bmdDb3VudCA9IDA7CisgICAgICAgICAgICBjaG9zZW5WaXN1YWxJbmZvID0gWEdldFZpc3VhbElu
Zm8oeDExRGlzcGxheSgpLCBWaXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRj
aGluZ0NvdW50KTsKKyAgICAgICAgICAgIGlmIChjaG9zZW5WaXN1YWxJbmZvKSB7CisjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCisgICAgICAgICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVy
RXh0ZW5zaW9uKSB7CisgICAgICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3Jt
YXQgPSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdCh4MTFEaXNwbGF5KCksIGNob3NlblZpc3VhbElu
Zm8tPnZpc3VhbCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5k
aXJlY3QuYWxwaGFNYXNrID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fVmlzdWFsSW5m
byA9IGNob3NlblZpc3VhbEluZm87CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAg
ICAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8gJiYgY2hvc2VuVmlzdWFsSW5mby0+ZGVwdGggPT0g
MzIpCisgICAgICAgICAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGNob3NlblZpc3VhbEluZm87
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbV9WaXN1YWxJbmZvKSB7CisgICAg
ICAgICAgICAgICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOworICAgICAgICAgICAg
ICAgIG1lbXNldCgmdmlzdWFsSW5mb1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsK
KyAgICAgICAgICAgICAgICBYVmlzdWFsSW5mbyAqbWF0Y2hpbmdWaXN1YWxzOworICAgICAgICAg
ICAgICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKKworICAgICAgICAgICAgICAgIHZpc3VhbElu
Zm9UZW1wbGF0ZS5kZXB0aCA9IGNob3NlblZpc3VhbEluZm8tPmRlcHRoOworICAgICAgICAgICAg
ICAgIG1hdGNoaW5nVmlzdWFscyA9IFhHZXRWaXN1YWxJbmZvKHgxMURpc3BsYXkoKSwgVmlzdWFs
RGVwdGhNYXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7CisKKyAgICAg
ICAgICAgICAgICBpZiAobWF0Y2hpbmdWaXN1YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
VmlzdWFsSW5mbyA9ICZtYXRjaGluZ1Zpc3VhbHNbMF07CisgICAgICAgICAgICAgICAgICAgIFhG
cmVlKG1hdGNoaW5nVmlzdWFscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGdldCBWaXN1YWwgSW5mby4iKTsKKyAgICAgICAgICAgIGNsZWFu
dXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByaWdodENvbmZpZzsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIH5TaGFyZWRFR0xSZXNvdXJjZXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1f
ZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAobV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKQorICAgICAgICAgICAgbV9zdXJmYWNl
Q29udGV4dGZiQ29uZmlnID0gMDsKKworICAgICAgICBlZ2xUZXJtaW5hdGUobV9lZ2xEaXNwbGF5
KTsKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7CisgICAgRUdMQ29uZmlnIG1fcGJ1
ZmZlcmZiQ29uZmlnOworICAgIEVHTENvbmZpZyBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7Cit9
OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2Vz
LmNwcAppbmRleCA2MDI5M2U3Li40ODUyNWY1IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuY3BwCkBAIC0yOCw3ICsyOCwxMyBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogCisjaWYgVVNFKEdMWCkKICNpbmNsdWRlICJHTFhXaW5kb3dSZXNvdXJjZXMuaCIK
KyNlbmRpZgorCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlICJFR0xYV2luZG93UmVzb3VyY2VzLmgi
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuaAppbmRleCBiMjViMmFjLi4xM2Y3NWEyIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVz
b3VyY2VzLmgKQEAgLTQwLDggKzQwLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lm
IFVTRShHTFgpCiBjbGFzcyBTaGFyZWRHTFhSZXNvdXJjZXM7CiB0eXBlZGVmIFNoYXJlZEdMWFJl
c291cmNlcyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczsKKyNlbGlmIFVTRShFR0wpCitjbGFzcyBT
aGFyZWRFR0xSZXNvdXJjZXM7Cit0eXBlZGVmIFNoYXJlZEVHTFJlc291cmNlcyBQbGF0Zm9ybVNo
YXJlZFJlc291cmNlczsKKyNlbHNlCitjbGFzcyBEdW1teVNoYXJlZFJlc291cmNlczsKK3R5cGVk
ZWYgRHVtbXlTaGFyZWRSZXNvdXJjZXMgUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM7CisjZW5kaWYK
IAogY2xhc3MgU2hhcmVkWDExUmVzb3VyY2VzIDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2Ug
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYXJlZFgxMVJlc291cmNlcyk7CkBAIC0xNDcs
NiArMTU1LDQyIEBAIHByb3RlY3RlZDoKICAgICBYVmlzdWFsSW5mbyogbV9WaXN1YWxJbmZvOwog
fTsKIAorLy8gRHVtbXkgSW1wbGVtZW50YXRpb24gdG8gYXZvaWQgaWZkZWZzCitjbGFzcyBEdW1t
eVNoYXJlZFJlc291cmNlcyA6IHB1YmxpYyBTaGFyZWRYMTFSZXNvdXJjZXMgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKER1bW15U2hhcmVkUmVzb3VyY2VzKTsKKworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPER1bW15U2hhcmVkUmVzb3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUGxhdGZvcm1EaXNwbGF5IG5hdGl2ZURpc3Bs
YXkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdmlydHVhbCBQbGF0
Zm9ybVN1cmZhY2VDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgc3Vy
ZmFjZUNvbnRleHRDb25maWcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCitw
cml2YXRlOgorICAgIER1bW15U2hhcmVkUmVzb3VyY2VzKCkKKyAgICAgICAgOiBTaGFyZWRYMTFS
ZXNvdXJjZXMoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5EdW1teVNoYXJlZFJlc291
cmNlcygpCisgICAgeworICAgIH0KK307CisKIGNsYXNzIFgxMU9mZlNjcmVlbldpbmRvdyA6IHB1
YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWDExT2Zm
U2NyZWVuV2luZG93KTsKIApkaWZmIC0tZ2l0IFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtl
IFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IDgwMGE3MDkuLmZlMjAyZWYgMTAw
NjQ0Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgU291cmNlL2NtYWtlL09w
dGlvbnNFZmwuY21ha2UKQEAgLTE3NSwxMiArMTc1LDI1IEBAIGlmIChFTkFCTEVfV0VCR0wgT1Ig
V1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFKQogCiAgICAgaWYgKE9QRU5HTFhfRk9VTkQpCiAg
ICAgICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfR0xYKQotICAgICAgICBhZGRfZGVmaW5pdGlv
bnMoLURXVEZfVVNFX0dMWD0xKQorICAgIGVuZGlmICgpCisKKyAgICBvcHRpb24oRU5BQkxFX0VH
TCBPTikKIAotICAgICAgICBpZiAoWDExX1hjb21wb3NpdGVfRk9VTkQgQU5EIFgxMV9YcmVuZGVy
X0ZPVU5EKQotICAgICAgICAgICBzZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkKLSAgICAgICAg
ZW5kaWYgKCkKKyAgICBpZiAoRU5BQkxFX0VHTCkKKyAgICAgICAgZmluZF9wYWNrYWdlKEVHTCBS
RVFVSVJFRCkKICAgICBlbmRpZiAoKQorCisgICAgaWYgKEVHTF9GT1VORCkKKyAgICAgICAgc2V0
KFdURl9VU0VfRUdMIDEpCisgICAgICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfRUdMPTEp
CisgICAgIGVsc2VpZiAoT1BFTkdMWF9GT1VORCkKKyAgICAgICAgIHNldChXVEZfVVNFX0dMWCAx
KQorICAgICAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9HTFg9MSkKKyAgICBlbmRpZiAo
KQorCisgICAgIGlmICgoT1BFTkdMWF9GT1VORCBPUiBFR0xfRk9VTkQpIEFORCBYMTFfWGNvbXBv
c2l0ZV9GT1VORCBBTkQgWDExX1hyZW5kZXJfRk9VTkQpCisgICAgICAgICBzZXQoVVNFX0dSQVBI
SUNTX1NVUkZBQ0UgMSkKKyAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfSU5T
UEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180586</attachid>
            <date>2012-12-21 19:37:00 -0800</date>
            <delta_ts>2012-12-22 05:26:01 -0800</delta_ts>
            <desc>patch</desc>
            <filename>reviewchanges.patch</filename>
            <type>text/plain</type>
            <size>35304</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLjUxZDQxZjMgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQgY2FuIGJlIGVuYWJsZWQgZHVy
aW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1ERU5BQkxFX0VHTD1PTiBhcyBj
bWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzgzMzguCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAxYTA0MDRmLi44ZTgwZGY1IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAxMi0x
Mi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTYwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBHTEVTMiBzdXBwb3J0LgorICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJhY2tlbmQuIEVHTCBzdXBwb3J0IGNhbiBi
ZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAgICAgICAgYnkgcGFzc2luZyAtREVOQUJM
RV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRlci4gVGhpcyBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0
ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9m
ZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNy
ZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKToKKworICAgICAgICBFR0wgaW1wbGVt
ZW50YXRpb24gZm9yIENvbnRleHQgTWFuYWdlbWVudC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjppc1JvYnVzdG5lc3NFeHRTdXBwb3J0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpFR0xDdXJyZW50Q29udGV4dFdy
YXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpoYW5k
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6RUdMT2ZmU2NyZWVu
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6On5FR0xPZmZTY3Jl
ZW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OmlzQ3Vy
cmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxh
dGZvcm1NYWtlQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0
OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
bkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVu
Q29udGV4dDo6ZGVzdHJveSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMQ3VycmVu
dENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEN1cnJlbnRDb250ZXh0V3Jh
cHBlcjo6fkVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChFR0xPZmZTY3JlZW5D
b250ZXh0KToKKworICAgICAgICBFR0wgaW1wbGVtZW50YXRpb24gZm9yIE9mZnNjcmVlbiBTdXJm
YWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRy
YW5zcG9ydFN1cmZhY2U6OkVHTFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMVHJhbnNwb3J0U3VyZmFjZTo6fkVHTFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRy
YW5zcG9ydFN1cmZhY2U6OmZyZWVFR0xSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEVHTFRyYW5zcG9ydFN1cmZhY2UpOgorCisgICAgICAgIFggaW50ZWdyYXRpb24uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0VHTFhXaW5kb3dSZXNvdXJj
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEVHTFJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6Om5hdGl2ZURpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkRUdMUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29u
ZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6U2hhcmVkRUdMUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6Y2xlYW51cCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZUNvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6On5TaGFyZWRFR0xSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFX
aW5kb3dSZXNvdXJjZXMuaDoKKwogMjAxMi0xMi0yMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxvY2FsaXphYmxlIHN0cmluZ3MgYXMgYSBmb2xs
b3d1cCB0byBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMzgzODcKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQppbmRleCA1NmUzMDZjLi5lN2U0NjljIDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC0yNjUsNiArMjY1LDE0IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4IgogICAgICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgogICAgICkKKworICAgIGlm
IChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCisgICAgICAgICAgICAke0VHTF9JTkNMVURFX0RJUn0KKyAgICAgICAgICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wiCisgICAgKQorICAgIGVu
ZGlmICgpCisKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKQEAgLTI3NywxOCArMjg1LDM2IEBAIGlmIChXVEZf
VVNFXzNEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKICAgICApCisKKyAg
ICBpZiAoV1RGX1VTRV9FR0wpCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwor
ICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
CisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5j
cHAKKyAgICAgICAgKQorICAgIGVuZGlmICgpCisKKyAgICBpZiAoV1RGX1VTRV9HTFgpCisgICAg
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKyAgICAgICAgKQorICAgIGVuZGlm
ICgpCisKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwogICAgICAgICAke1gxMV9Y
MTFfTElCfQogICAgICAgICAke1gxMV9YY29tcG9zaXRlX0xJQn0KICAgICAgICAgJHtYMTFfWHJl
bmRlcl9MSUJ9CiAgICAgKQorICAgIGlmIChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICR7RUdMX0xJQlJBUll9CisgICAgICAg
ICkKKyAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAogYWRkX2RlZmluaXRpb25zKC1EREFUQV9ESVI9
IiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7REFUQV9JTlNUQUxMX0RJUn0iKQpkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZzLmgKaW5kZXggMmRmYjRjOS4u
NTczNTM0MCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTERlZnMuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
RGVmcy5oCkBAIC00Miw2ICs0MiwxMiBAQAogI2luY2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAK
KyNpZiBVU0UoRUdMKQorI2RlZmluZSBFR0xfRUdMRVhUX1BST1RPVFlQRVMgMQorI2luY2x1ZGUg
PEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB0eXBlZGVmIHVpbnQzMl90IFBsYXRmb3JtQnVmZmVySGFuZGxlOwpAQCAt
NTEsNiArNTcsMTYgQEAgdHlwZWRlZiBHTFhDb250ZXh0IFBsYXRmb3JtQ29udGV4dDsKIHR5cGVk
ZWYgRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5OwogdHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9y
bVN1cmZhY2VDb25maWc7CiB0eXBlZGVmIEdMWERyYXdhYmxlIFBsYXRmb3JtRHJhd2FibGU7Cisj
ZWxpZiBVU0UoRUdMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0YXRpYyBjb25zdCBFR0xlbnVt
IGVnbEFQSVZlcnNpb24gPSBFR0xfT1BFTkdMX0VTX0FQSTsKKyNlbHNlCitzdGF0aWMgY29uc3Qg
RUdMZW51bSBlZ2xBUElWZXJzaW9uID0gRUdMX09QRU5HTF9BUEk7CisjZW5kaWYKK3R5cGVkZWYg
RUdMQ29udGV4dCBQbGF0Zm9ybUNvbnRleHQ7Cit0eXBlZGVmIEVHTERpc3BsYXkgUGxhdGZvcm1E
aXNwbGF5OwordHlwZWRlZiBFR0xDb25maWcgUGxhdGZvcm1TdXJmYWNlQ29uZmlnOwordHlwZWRl
ZiBFR0xTdXJmYWNlIFBsYXRmb3JtRHJhd2FibGU7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUNvbnRleHQ7CiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtRGlzcGxheTsKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQu
Y3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29u
dGV4dC5jcHAKaW5kZXggNzYyMWUyZS4uZTg0NDVmZCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAK
QEAgLTMyLDExICszMiwxNiBAQAogI2luY2x1ZGUgIkdMWENvbnRleHQuaCIKICNlbmRpZgogCisj
aWYgVVNFKEVHTCkKKyNpbmNsdWRlICJFR0xDb250ZXh0LmgiCisjZW5kaWYKKwogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIFBGTkdM
R0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0FSQlBST0MgZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJC
ID0gMDsKKwogc3RhdGljIEdMUGxhdGZvcm1Db250ZXh0KiBtX2N1cnJlbnRDb250ZXh0ID0gMDsK
IAogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0
ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQpAQCAt
NDQsMTEgKzQ5LDExIEBAIFBhc3NPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IEdMUGxhdGZvcm1D
b250ZXh0OjpjcmVhdGVDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNECiAgICAgaWYgKCFpbml0aWFs
aXplT3BlbkdMU2hpbXMoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoIWds
R2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQikgewogI2lmIFVTRShHTFgpCisgICAgaWYgKCFnbEdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpIHsKICAgICAgICAgZ2xHZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzQVJCID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNBUkJQ
Uk9DPihnbFhHZXRQcm9jQWRkcmVzc0FSQihyZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUq
PigiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCIikpKTsKLSNlbmRpZgogICAgIH0KKyNlbmRp
ZgogCiAgICAgc3dpdGNoIChyZW5kZXJTdHlsZSkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJlbmRlck9mZnNjcmVlbjoKQEAgLTcwLDggKzc1LDExIEBAIFBhc3NPd25QdHI8R0xQbGF0
Zm9ybUNvbnRleHQ+IEdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dDNECiBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6
Y3JlYXRlT2ZmU2NyZWVuQ29udGV4dCgpCiB7CiAjaWYgVVNFKEdMWCkKLSAgICBPd25QdHI8R0xQ
bGF0Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuQ29u
dGV4dCgpKTsKLSAgICByZXR1cm4gZ2x4Q29udGV4dC5yZWxlYXNlKCk7CisgICAgT3duUHRyPEdM
UGxhdGZvcm1Db250ZXh0PiBjb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVlbkNvbnRl
eHQoKSk7CisgICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOworI2VsaWYgVVNFKEVHTCkKKyAg
ICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgRUdMT2Zm
U2NyZWVuQ29udGV4dCgpKTsKKyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7CiAjZW5kaWYK
IAogICAgIHJldHVybiBudWxscHRyOwpAQCAtODAsOCArODgsMTEgQEAgUGFzc093blB0cjxHTFBs
YXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQo
KQogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0
ZUN1cnJlbnRDb250ZXh0V3JhcHBlcigpCiB7CiAjaWYgVVNFKEdMWCkKLSAgICBPd25QdHI8R0xQ
bGF0Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xYQ3VycmVudENvbnRl
eHRXcmFwcGVyKCkpOwotICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2UoKTsKKyAgICBPd25Q
dHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xYQ3VycmVudENv
bnRleHRXcmFwcGVyKCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKKyNlbGlmIFVT
RShFR0wpCisgICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBjb250ZXh0ID0gYWRvcHRQdHIo
bmV3IEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcigpKTsKKyAgICByZXR1cm4gY29udGV4dC5yZWxl
YXNlKCk7CiAjZW5kaWYKIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oCmlu
ZGV4IDE3MGI3NmUuLjAzNTNkZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKQEAgLTY0LDcgKzY0LDcg
QEAgcHVibGljOgogICAgIC8vIERvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IGlmIHRoaXMgaXMgbm90
IHRoZSBjdXJyZW50IENvbnRleHQuCiAgICAgdm9pZCByZWxlYXNlQ3VycmVudCgpOwogCi0gICAg
UGxhdGZvcm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGxhdGZvcm1Db250
ZXh0IGhhbmRsZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzQ3VycmVudENvbnRleHQo
KSBjb25zdDsKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAppbmRleCA4MzkxZTQ3Li5lZDAyNWYyIDEw
MDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1TdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMUGxhdGZvcm1TdXJmYWNlLmNwcApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlICJHTFhT
dXJmYWNlLmgiCiAjZW5kaWYKIAorI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiRUdMU3VyZmFjZS5o
IgorI2VuZGlmCisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01MCwxMCArNTQsMTQgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4g
R0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoKQogCiBQYXNzT3duUHRy
PEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3Vy
ZmFjZSgpCiB7Ci0jaWYgVVNFKEdMWCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCisjaWYgVVNFKEdMWCkKICAgICBPd25QdHI8R0xQbGF0Zm9ybVN1
cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3VyZmFjZSgpKTsKKyNl
bGlmIFVTRShFR0wpCisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRv
cHRQdHIobmV3IEVHTFRyYW5zcG9ydFN1cmZhY2UoKSk7CisjZW5kaWYKIAotICAgIGlmIChzdXJm
YWNlLT5oYW5kbGUoKSkKKyAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBz
dXJmYWNlLT5kcmF3YWJsZSgpKQogICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xDb250ZXh0LmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMWMwYTg5NwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxNzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFR0xDb250
ZXh0LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIEhBVkUoR0xYKQorI2luY2x1
ZGUgPEdML2dseC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNv
bnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0geworI2lmIFVTRShPUEVOR0xfRVNfMikK
KyAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgMiwKKyNlbmRpZgorICAgIEVHTF9OT05F
Cit9OworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRleHRSb2J1c3RuZXNzQXR0cmlidXRlc1td
ID0geworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lP
TiwgMiwKKyNlbmRpZgorICAgIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05f
U1RSQVRFR1lfRVhULAorICAgIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhULAorICAgIEVH
TF9OT05FCit9OworCitzdGF0aWMgYm9vbCBpc1JvYnVzdG5lc3NFeHRTdXBwb3J0ZWQoRUdMRGlz
cGxheSBkaXNwbGF5KQoreworICAgIHN0YXRpYyBib29sIHF1ZXJ5RG9uZSA9IGZhbHNlOworICAg
IHN0YXRpYyBib29sIGlzRUdMRVhUc3VwcG9ydGVkID0gZmFsc2U7CisKKyAgICBpZiAoIXF1ZXJ5
RG9uZSkgeworICAgICAgICBxdWVyeURvbmUgPSB0cnVlOworICAgICAgICBTdHJpbmcgc3VwcG9y
dGVkRXh0ZW5zaW9ucyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGVnbFF1ZXJ5U3Ry
aW5nKGRpc3BsYXksIEVHTF9FWFRFTlNJT05TKSk7CisgICAgICAgIGlmICghc3VwcG9ydGVkRXh0
ZW5zaW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnMuYXBw
ZW5kKCIgIik7CisgICAgICAgICAgICBpc0VHTEVYVHN1cHBvcnRlZCA9IHN1cHBvcnRlZEV4dGVu
c2lvbnMuY29udGFpbnMoIkVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyAiKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpc0VHTEVYVHN1cHBvcnRlZDsKK30KKworRUdM
Q3VycmVudENvbnRleHRXcmFwcGVyOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKQorICAgIDog
R0xQbGF0Zm9ybUNvbnRleHQoKQoreworfQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFy
eSB3b3JrYXJvdW5kIHRpbGwgd2UgYXJlIGFibGUgdG8gYnVpbGQgZXZhcyB3aXRoIEVHTCBzdXBw
b3J0CitQbGF0Zm9ybUNvbnRleHQgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpoYW5kbGUoKSBj
b25zdAoreworICAgIHJldHVybiBnbFhHZXRDdXJyZW50Q29udGV4dCgpOworfQorCitFR0xPZmZT
Y3JlZW5Db250ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0KCkKKyAgICA6IEdMUGxhdGZvcm1Db250
ZXh0KCkKKyAgICAsIG1fZGlzcGxheSgwKQoreworfQorCitib29sIEVHTE9mZlNjcmVlbkNvbnRl
eHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgaWYgKCFz
dXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVnbEJpbmRBUEkoZWds
QVBJVmVyc2lvbikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IEVHTCBBUEko
JWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBtX2Rpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNwbGF5KCk7CisgICAgaWYgKCFtX2Rp
c3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVHTENvbmZpZyBjb25maWcgPSBz
dXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CisgICAgaWYgKCFjb25maWcpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgaWYgKGlzUm9idXN0bmVzc0V4
dFN1cHBvcnRlZChtX2Rpc3BsYXkpKQorICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWds
Q3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRS
b2J1c3RuZXNzQXR0cmlidXRlcyk7CisKKyAgICAgICAgaWYgKCFtX2NvbnRleHRIYW5kbGUgJiYg
bV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05URVhUKQorICAgICAgICAgICAgbV9yZXNldExv
c3RDb250ZXh0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0SGFu
ZGxlID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQs
IGNvbnRleHRBdHRyaWJ1dGVzKTsKKworICAgICAgICBpZiAobV9jb250ZXh0SGFuZGxlICYmIG1f
Y29udGV4dEhhbmRsZSAhPSBFR0xfTk9fQ09OVEVYVCkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworRUdMT2ZmU2NyZWVuQ29udGV4dDo6
fkVHTE9mZlNjcmVlbkNvbnRleHQoKQoreworfQorCitib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6
OmlzQ3VycmVudENvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRIYW5kbGUg
PT0gZWdsR2V0Q3VycmVudENvbnRleHQoKTsKK30KKworYm9vbCBFR0xPZmZTY3JlZW5Db250ZXh0
OjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKiBzdXJmYWNlKQoreworICAg
IGlmICghZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKSkgeworICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBz
dXJmYWNlLT5kcmF3YWJsZSgpLCBzdXJmYWNlLT5kcmF3YWJsZSgpLCBtX2NvbnRleHRIYW5kbGUp
KSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG1ha2UgY29udGV4dCBjdXJyZW50Ligl
ZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKworICAgICAgICBpZiAobV9yZXNldExvc3RDb250ZXh0
ICYmIGVnbEdldEVycm9yKCkgPT0gRUdMX0NPTlRFWFRfTE9TVCkgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJMb3N0IGN1cnJlbnQgY29udGV4dC5cbiIpOworICAgICAgICAgICAgbV9jb250ZXh0
TG9zdCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZv
cm1SZWxlYXNlQ3VycmVudCgpCit7CisgICAgZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBFR0xf
Tk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKK30KKwordm9pZCBF
R0xPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAobV9jb250ZXh0
SGFuZGxlKQorICAgICAgICBlZ2xEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1fY29udGV4dEhh
bmRsZSk7CisKKyAgICBtX2NvbnRleHRIYW5kbGUgPSAwOworICAgIG1fZGlzcGxheSA9IDA7Cit9
CisKK3ZvaWQgRUdMT2ZmU2NyZWVuQ29udGV4dDo6ZGVzdHJveSgpCit7CisgICAgR0xQbGF0Zm9y
bUNvbnRleHQ6OmRlc3Ryb3koKTsKKyAgICBmcmVlUmVzb3VyY2VzKCk7Cit9CisKK30KKworI2Vu
ZGlmCisKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMQ29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTgwNzkzZQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRUdMQ29udGV4dF9oCisjZGVmaW5lIEVHTENvbnRleHRfaAorCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoRUdMKQorCisjaW5jbHVkZSAi
R0xQbGF0Zm9ybUNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFR0xD
dXJyZW50Q29udGV4dFdyYXBwZXIgOiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik7CisKK3B1YmxpYzoK
KyAgICBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKKyAgICBQbGF0Zm9ybUNvbnRleHQgaGFu
ZGxlKCkgY29uc3Q7CisgICAgdmlydHVhbCB+RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCkgeyB9
Cit9OworCitjbGFzcyBFR0xPZmZTY3JlZW5Db250ZXh0IDogcHVibGljIEdMUGxhdGZvcm1Db250
ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFR0xPZmZTY3JlZW5Db250ZXh0KTsKKwor
cHVibGljOgorICAgIEVHTE9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5FR0xPZmZT
Y3JlZW5Db250ZXh0KCk7CisgICAgYm9vbCBpbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKik7
CisgICAgYm9vbCBwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJmYWNlKik7CisgICAg
dm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CisgICAgdm9pZCBkZXN0cm95KCk7CisgICAg
Ym9vbCBpc0N1cnJlbnRDb250ZXh0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBmcmVl
UmVzb3VyY2VzKCk7CisgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXk7Cit9OworCit9CisKKyNlbmRp
ZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmRjM2UwNmIKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsMTE1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUdM
U3VyZmFjZS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoRUdM
KSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitFR0xU
cmFuc3BvcnRTdXJmYWNlOjpFR0xUcmFuc3BvcnRTdXJmYWNlKCkKKyAgICA6IFgxMU9mZlNjcmVl
bldpbmRvdygpCit7CisgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkg
eworICAgICAgICBMT0dfRVJST1IoIk5vIHZhbGlkIGhhcmR3YXJlIGRpc3BsYXkgZm91bmQuXG4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY29uZmlndXJhdGlvbigpKSB7
CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNyZWF0
ZU9mZnNjcmVlbldpbmRvdygpOworCisgICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgeworICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgWFdpbmRvdy5cbiIpOworICAgICAgICBkZXN0
cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RyYXdhYmxlID0gZWdsQ3Jl
YXRlV2luZG93U3VyZmFjZShtX3NoYXJlZFJlc291cmNlcy0+bmF0aXZlRGlzcGxheSgpLCBjb25m
aWd1cmF0aW9uKCksIChFR0xOYXRpdmVXaW5kb3dUeXBlKW1fYnVmZmVySGFuZGxlLCAwKTsKKwor
ICAgIGlmIChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgc3VyZmFjZSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsK
KyAgICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKworRUdMVHJhbnNwb3J0U3VyZmFjZTo6fkVH
TFRyYW5zcG9ydFN1cmZhY2UoKQoreworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgRUdMVHJh
bnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkUmVz
b3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOworfQorCit2b2lkIEVHTFRyYW5zcG9ydFN1
cmZhY2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIEVHTEJvb2xlYW4gc3VjY2VzcyA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lv
bik7CisKKyAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1Io
IkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAg
ZGVzdHJveSgpOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBlZ2xTd2FwQnVmZmVycyhzaGFyZWRE
aXNwbGF5KCksIG1fZHJhd2FibGUpOworCisgICAgaWYgKHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gU3dhcEJ1ZmZlcnMoJWQpLlxuIiwgZWdsR2V0
RXJyb3IoKSk7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICB9Cit9CisKK3ZvaWQgRUdMVHJhbnNw
b3J0U3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgZGVzdHJveVdpbmRvdygpOworICAgIGZyZWVF
R0xSZXNvdXJjZXMoKTsKK30KKwordm9pZCBFR0xUcmFuc3BvcnRTdXJmYWNlOjpmcmVlRUdMUmVz
b3VyY2VzKCkKK3sKKyAgICBpZiAobV9kcmF3YWJsZSA9PSBFR0xfTk9fU1VSRkFDRSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5kQVBJKGVnbEFQ
SVZlcnNpb24pOworCisgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgeworICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVnbERlc3Ryb3lTdXJmYWNlKHNoYXJlZERp
c3BsYXkoKSwgbV9kcmF3YWJsZSk7CisgICAgbV9kcmF3YWJsZSA9IEVHTF9OT19TVVJGQUNFOwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40YTY5ZTQ5Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFR0xTdXJmYWNlX2gKKyNkZWZpbmUgRUdMU3Vy
ZmFjZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpICYm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorCisjaW5jbHVkZSA8Z2x4L0VHTFhXaW5kb3dSZXNvdXJj
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVHTFRyYW5zcG9ydFN1cmZh
Y2UgOiBwdWJsaWMgWDExT2ZmU2NyZWVuV2luZG93IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShFR0xUcmFuc3BvcnRTdXJmYWNlKTsKKworcHVibGljOgorICAgIEVHTFRyYW5zcG9ydFN1cmZh
Y2UoKTsKKyAgICB2aXJ0dWFsIH5FR0xUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgUGxhdGZvcm1T
dXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7Cisg
ICAgdm9pZCBkZXN0cm95KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBmcmVlRUdMUmVzb3VyY2Vz
KCk7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvRUdMWFdpbmRvd1Jlc291cmNlcy5oIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9FR0xYV2luZG93UmVz
b3VyY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmYmU5MQotLS0g
L2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvRUdMWFdpbmRvd1Jlc291cmNlcy5oCkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEVHTFhXaW5kb3dSZXNvdXJjZXNfaAorI2RlZmluZSBFR0xYV2luZG93
UmVzb3VyY2VzX2gKKworI2luY2x1ZGUgIlgxMVdpbmRvd1Jlc291cmNlcy5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoRUdMKQorCisjaW5jbHVkZSA8b3Blbmds
L0dMRGVmcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZEVHTFJlc291
cmNlcyA6IHB1YmxpYyBTaGFyZWRYMTFSZXNvdXJjZXMgeworCitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U2hhcmVkRUdMUmVzb3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQorICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRS
ZXNvdXJjZSA9IG5ldyBTaGFyZWRFR0xSZXNvdXJjZXMoKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZS0+cmVmKCk7CisKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG1fc3RhdGljU2hhcmVkUmVzb3VyY2UpOworICAgIH0KKworICAgIFBsYXRmb3JtRGlz
cGxheSBuYXRpdmVEaXNwbGF5KCkKKyAgICB7CisgICAgICAgIGlmIChtX2VnbERpc3BsYXkgPT0g
RUdMX05PX0RJU1BMQVkpIHsKKyAgICAgICAgICAgIEVHTEJvb2xlYW4gc3VjY2VzczsKKworICAg
ICAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShyZWludGVycHJldF9jYXN0PEVH
TE5hdGl2ZURpc3BsYXlUeXBlPihTaGFyZWRYMTFSZXNvdXJjZXM6OngxMURpc3BsYXkoKSkpOwor
CisgICAgICAgICAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC5c
biIpOworICAgICAgICAgICAgICAgIHJldHVybiBtX2VnbERpc3BsYXk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBlZ2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgMCwg
MCk7CisKKyAgICAgICAgICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJFR0xJbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAg
ICAgICAgICBjbGVhbnVwKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZWdsRGlzcGxheTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3VjY2VzcyA9IGVnbEJpbmRBUEkoZWdsQVBJ
VmVyc2lvbik7CisKKyAgICAgICAgICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJmYWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLlxuIiwgZWds
R2V0RXJyb3IoKSk7CisgICAgICAgICAgICAgICAgY2xlYW51cCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1fZWdsRGlzcGxheTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIEVHTENvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpCisgICAgeworICAgICAgICBp
ZiAoIW1fcGJ1ZmZlcmZiQ29uZmlnKSB7CisgICAgICAgICAgICBFR0xpbnQgYXR0cmlidXRlTGlz
dFtdID0geworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICAgICAgICAgICAgICBFR0xfUkVOREVS
QUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisjZWxzZQorICAgICAgICAgICAgICAgIEVH
TF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfQklULAorI2VuZGlmCisgICAgICAgICAgICAg
ICAgRUdMX1JFRF9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAor
ICAgICAgICAgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX1NU
RU5DSUxfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAg
ICAgICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfUElYTUFQX0JJVCwKKyAgICAgICAgICAg
ICAgICBFR0xfTk9ORQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIG1fcGJ1ZmZlcmZiQ29u
ZmlnID0gY3JlYXRlQ29uZmlnKGF0dHJpYnV0ZUxpc3QpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtX3BidWZmZXJmYkNvbmZpZzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEVHTENvbmZpZyBz
dXJmYWNlQ29udGV4dENvbmZpZygpCisgICAgeworICAgICAgICBpZiAoIW1fc3VyZmFjZUNvbnRl
eHRmYkNvbmZpZykgeworICAgICAgICAgICAgRUdMaW50IGF0dHJpYnV0ZUxpc3RbXSA9IHsKKyAg
ICAgICAgICAgICAgICBFR0xfTEVWRUwsIDAsCisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgICAg
ICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyNlbHNl
CisgICAgICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9CSVQsCisj
ZW5kaWYKKyAgICAgICAgICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAgICAgICAgICAg
RUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAg
ICAgICAgICAgICAgICBFR0xfU1RFTkNJTF9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9B
TFBIQV9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9ERVBUSF9TSVpFLCA4LAorICAgICAg
ICAgICAgICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9XSU5ET1dfQklULAorICAgICAgICAgICAg
ICAgIEVHTF9OT05FCisgICAgICAgICAgICB9OworICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4
dGZiQ29uZmlnID0gY3JlYXRlQ29uZmlnKGF0dHJpYnV0ZUxpc3QpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgU2hhcmVkRUdMUmVzb3VyY2VzKCkKKyAgICAgICAgOiBTaGFyZWRYMTFSZXNvdXJjZXMo
KQorICAgIHsKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7CisgICAgICAg
IG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IDA7CisgICAgICAgIG1fcGJ1ZmZlcmZiQ29uZmln
ID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFudXAoKQorICAgIHsKKyAgICAgICAgZWdsTWFr
ZUN1cnJlbnQobV9lZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVH
TF9OT19DT05URVhUKTsKKyAgICAgICAgZWdsVGVybWluYXRlKG1fZWdsRGlzcGxheSk7CisgICAg
ICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgIH0KKworICAgIEVHTENvbmZp
ZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkKKyAgICB7CisgICAgICAgIGlm
IChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICAgICAgICAgIC8vIFRyeSB0
byBpbml0aWFsaXplIERpc3BsYXkgaWYgYWxyZWFkeSBub3QgZG9uZS4KKyAgICAgICAgICAgIG5h
dGl2ZURpc3BsYXkoKTsKKworICAgICAgICAgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9f
RElTUExBWSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAg
IGludCBudW1Db25maWdzOworICAgICAgICBFR0xDb25maWcgcmlnaHRDb25maWcgPSAwOworCisg
ICAgICAgIGlmICghZWdsQ2hvb3NlQ29uZmlnKG1fZWdsRGlzcGxheSwgYXR0cmlidXRlcywgJnJp
Z2h0Q29uZmlnLCAxLCAmbnVtQ29uZmlncykpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIGdldCBzdXBwb3J0ZWQgY29uZmlnaXJhdGlvbnMuXG4iKTsKKyAgICAgICAgICAgIGNs
ZWFudXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChudW1Db25maWdzICE9IDEpIHsKKyAg
ICAgICAgICAgIExPR19FUlJPUigiRUdMQ2hvb3NlQ29uZmlnIGRpZG4ndCByZXR1cm4gZXhhY3Rs
eSBvbmUgY29uZmlnIGJ1dCAoJWQpLlxuIiwgbnVtQ29uZmlncyk7CisgICAgICAgICAgICBjbGVh
bnVwKCk7CisgICAgICAgIH0KKworICAgICAgICBWaXN1YWxJRCB2aXN1YWxJZCA9IDA7CisgICAg
ICAgIEVHTGludCBlZ2xWYWx1ZSA9IDA7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgRUdMIHByb3Zp
ZGVzIHVzIHdpdGggYSB2YWxpZCB2aXN1YWwgaWQuCisgICAgICAgIGVnbEdldENvbmZpZ0F0dHJp
YihtX2VnbERpc3BsYXksIHJpZ2h0Q29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJmVnbFZh
bHVlKTsKKyAgICAgICAgdmlzdWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1YWxJRD4oZWdsVmFsdWUp
OworICAgICAgICBpZiAodmlzdWFsSWQpIHsKKyAgICAgICAgICAgIC8vIEVHTCBoYXMgc3VnZ2Vz
dGVkIGEgdmlzdWFsIGlkLCBzbyBnZXQgdGhlIHJlc3Qgb2YgdGhlIHZpc3VhbCBpbmZvIGZvciB0
aGF0IGlkLgorICAgICAgICAgICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOworICAg
ICAgICAgICAgbWVtc2V0KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFsSW5m
bykpOworICAgICAgICAgICAgdmlzdWFsSW5mb1RlbXBsYXRlLnZpc3VhbGlkID0gdmlzdWFsSWQ7
CisKKyAgICAgICAgICAgIFhWaXN1YWxJbmZvICpjaG9zZW5WaXN1YWxJbmZvOworICAgICAgICAg
ICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOworICAgICAgICAgICAgY2hvc2VuVmlzdWFsSW5mbyA9
IFhHZXRWaXN1YWxJbmZvKHgxMURpc3BsYXkoKSwgVmlzdWFsSURNYXNrLCAmdmlzdWFsSW5mb1Rl
bXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7CisgICAgICAgICAgICBpZiAoY2hvc2VuVmlzdWFsSW5m
bykgeworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAgICAgICAgICAgIGlmIChtX3N1
cHBvcnRzWFJlbmRlckV4dGVuc2lvbikgeworICAgICAgICAgICAgICAgICAgICBYUmVuZGVyUGlj
dEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1YWxGb3JtYXQoeDExRGlzcGxheSgpLCBj
aG9zZW5WaXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0
ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+IDApCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX1Zpc3VhbEluZm8gPSBjaG9zZW5WaXN1YWxJbmZvOworICAgICAgICAgICAgICAgIH0KKyNl
bmRpZgorICAgICAgICAgICAgICAgIGlmICghbV9WaXN1YWxJbmZvICYmIGNob3NlblZpc3VhbElu
Zm8tPmRlcHRoID09IDMyKQorICAgICAgICAgICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSBjaG9z
ZW5WaXN1YWxJbmZvOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1fVmlzdWFs
SW5mbykgeworICAgICAgICAgICAgICAgIFhWaXN1YWxJbmZvIHZpc3VhbEluZm9UZW1wbGF0ZTsK
KyAgICAgICAgICAgICAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhW
aXN1YWxJbmZvKSk7CisgICAgICAgICAgICAgICAgWFZpc3VhbEluZm8gKm1hdGNoaW5nVmlzdWFs
czsKKyAgICAgICAgICAgICAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7CisKKyAgICAgICAgICAg
ICAgICB2aXN1YWxJbmZvVGVtcGxhdGUuZGVwdGggPSBjaG9zZW5WaXN1YWxJbmZvLT5kZXB0aDsK
KyAgICAgICAgICAgICAgICBtYXRjaGluZ1Zpc3VhbHMgPSBYR2V0VmlzdWFsSW5mbyh4MTFEaXNw
bGF5KCksIFZpc3VhbERlcHRoTWFzaywgJnZpc3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNoaW5nQ291
bnQpOworCisgICAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nVmlzdWFscykgeworICAgICAgICAg
ICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSAmbWF0Y2hpbmdWaXN1YWxzWzBdOworICAgICAgICAg
ICAgICAgICAgICBYRnJlZShtYXRjaGluZ1Zpc3VhbHMpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9WaXN1YWxJbmZvKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgVmlzdWFsIEluZm8uXG4iKTsKKyAg
ICAgICAgICAgIGNsZWFudXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByaWdodENv
bmZpZzsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5TaGFyZWRFR0xSZXNvdXJjZXMoKQorICAgIHsK
KyAgICAgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAobV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKQorICAgICAg
ICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0gMDsKKworICAgICAgICBlZ2xUZXJtaW5h
dGUobV9lZ2xEaXNwbGF5KTsKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7CisgICAg
RUdMQ29uZmlnIG1fcGJ1ZmZlcmZiQ29uZmlnOworICAgIEVHTENvbmZpZyBtX3N1cmZhY2VDb250
ZXh0ZmJDb25maWc7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3Vy
Y2VzLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
V2luZG93UmVzb3VyY2VzLmNwcAppbmRleCA2MDI5M2U3Li40ODUyNWY1IDEwMDY0NAotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291
cmNlcy5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCkBAIC0yOCw3ICsyOCwxMyBAQAogCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCisjaWYgVVNFKEdMWCkKICNpbmNsdWRlICJHTFhXaW5k
b3dSZXNvdXJjZXMuaCIKKyNlbmRpZgorCisjaWYgVVNFKEVHTCkKKyNpbmNsdWRlICJFR0xYV2lu
ZG93UmVzb3VyY2VzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRv
d1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2ds
eC9YMTFXaW5kb3dSZXNvdXJjZXMuaAppbmRleCBiMjViMmFjLi44N2UzNzAxIDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvWDExV2luZG93UmVzb3VyY2VzLmgKQEAgLTQwLDggKzQwLDEzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorI2lmIFVTRShHTFgpCiBjbGFzcyBTaGFyZWRHTFhSZXNvdXJjZXM7CiB0eXBl
ZGVmIFNoYXJlZEdMWFJlc291cmNlcyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczsKKyNlbGlmIFVT
RShFR0wpCitjbGFzcyBTaGFyZWRFR0xSZXNvdXJjZXM7Cit0eXBlZGVmIFNoYXJlZEVHTFJlc291
cmNlcyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczsKKyNlbmRpZgogCiBjbGFzcyBTaGFyZWRYMTFS
ZXNvdXJjZXMgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU2hhcmVkWDExUmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBTb3VyY2UvY21ha2UvT3B0
aW9uc0VmbC5jbWFrZSBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCA4MDBhNzA5
Li5mZTIwMmVmIDEwMDY0NAotLS0gU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIFNv
dXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCkBAIC0xNzUsMTIgKzE3NSwyNSBAQCBpZiAoRU5B
QkxFX1dFQkdMIE9SIFdURl9VU0VfVElMRURfQkFDS0lOR19TVE9SRSkKIAogICAgIGlmIChPUEVO
R0xYX0ZPVU5EKQogICAgICAgICBhZGRfZGVmaW5pdGlvbnMoLURIQVZFX0dMWCkKLSAgICAgICAg
YWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9HTFg9MSkKKyAgICBlbmRpZiAoKQorCisgICAgb3B0
aW9uKEVOQUJMRV9FR0wgT04pCiAKLSAgICAgICAgaWYgKFgxMV9YY29tcG9zaXRlX0ZPVU5EIEFO
RCBYMTFfWHJlbmRlcl9GT1VORCkKLSAgICAgICAgICAgc2V0KFVTRV9HUkFQSElDU19TVVJGQUNF
IDEpCi0gICAgICAgIGVuZGlmICgpCisgICAgaWYgKEVOQUJMRV9FR0wpCisgICAgICAgIGZpbmRf
cGFja2FnZShFR0wgUkVRVUlSRUQpCiAgICAgZW5kaWYgKCkKKworICAgIGlmIChFR0xfRk9VTkQp
CisgICAgICAgIHNldChXVEZfVVNFX0VHTCAxKQorICAgICAgICBhZGRfZGVmaW5pdGlvbnMoLURX
VEZfVVNFX0VHTD0xKQorICAgICBlbHNlaWYgKE9QRU5HTFhfRk9VTkQpCisgICAgICAgICBzZXQo
V1RGX1VTRV9HTFggMSkKKyAgICAgICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfR0xYPTEp
CisgICAgZW5kaWYgKCkKKworICAgICBpZiAoKE9QRU5HTFhfRk9VTkQgT1IgRUdMX0ZPVU5EKSBB
TkQgWDExX1hjb21wb3NpdGVfRk9VTkQgQU5EIFgxMV9YcmVuZGVyX0ZPVU5EKQorICAgICAgICAg
c2V0KFVTRV9HUkFQSElDU19TVVJGQUNFIDEpCisgICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCiBp
ZiAoRU5BQkxFX0lOU1BFQ1RPUikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180602</attachid>
            <date>2012-12-22 05:26:01 -0800</date>
            <delta_ts>2012-12-23 17:29:30 -0800</delta_ts>
            <desc>rebasedpatch</desc>
            <filename>rebasedpatch.patch</filename>
            <type>text/plain</type>
            <size>35048</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLjUxZDQxZjMgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQgY2FuIGJlIGVuYWJsZWQgZHVy
aW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1ERU5BQkxFX0VHTD1PTiBhcyBj
bWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzgzMzguCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAxYTA0MDRmLi44ZTgwZGY1IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NCBAQAorMjAxMi0x
Mi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTYwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBHTEVTMiBzdXBwb3J0LgorICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJhY2tlbmQuIEVHTCBzdXBwb3J0IGNhbiBi
ZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAgICAgICAgYnkgcGFzc2luZyAtREVOQUJM
RV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRlci4gVGhpcyBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0
ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9m
ZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNy
ZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZv
cm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKToKKworICAgICAgICBFR0wgaW1wbGVt
ZW50YXRpb24gZm9yIENvbnRleHQgTWFuYWdlbWVudC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjppc1JvYnVzdG5lc3NFeHRTdXBwb3J0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpFR0xDdXJyZW50Q29udGV4dFdy
YXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpoYW5k
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6RUdMT2ZmU2NyZWVu
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0Ojppbml0aWFs
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6On5FR0xPZmZTY3Jl
ZW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OmlzQ3Vy
cmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxh
dGZvcm1NYWtlQ3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0
OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
bkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVu
Q29udGV4dDo6ZGVzdHJveSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
ZWdsL0VHTENvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMQ3VycmVu
dENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTEN1cnJlbnRDb250ZXh0V3Jh
cHBlcjo6fkVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChFR0xPZmZTY3JlZW5D
b250ZXh0KToKKworICAgICAgICBFR0wgaW1wbGVtZW50YXRpb24gZm9yIE9mZnNjcmVlbiBTdXJm
YWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRy
YW5zcG9ydFN1cmZhY2U6OkVHTFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMVHJhbnNwb3J0U3VyZmFjZTo6fkVHTFRyYW5zcG9ydFN1cmZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMVHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFRy
YW5zcG9ydFN1cmZhY2U6OmZyZWVFR0xSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKEVHTFRyYW5zcG9ydFN1cmZhY2UpOgorCisgICAgICAgIFggaW50ZWdyYXRpb24uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0VHTFhXaW5kb3dSZXNvdXJj
ZXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFNoYXJlZEVHTFJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6Om5hdGl2ZURpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhcmVkRUdMUmVzb3VyY2VzOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OnN1cmZhY2VDb250ZXh0Q29u
ZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6U2hhcmVkRUdMUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTFJlc291cmNlczo6Y2xlYW51cCk6
CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6OmNyZWF0ZUNvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xSZXNvdXJjZXM6On5TaGFyZWRFR0xSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFX
aW5kb3dSZXNvdXJjZXMuaDoKKwogMjAxMi0xMi0yMSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGxvY2FsaXphYmxlIHN0cmluZ3MgYXMgYSBmb2xs
b3d1cCB0byBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMzgzODcKZGlmZiAtLWdp
dCBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQppbmRleCA1NmUzMDZjLi5lN2U0NjljIDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC0yNjUsNiArMjY1LDE0IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAgICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4IgogICAgICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgogICAgICkKKworICAgIGlm
IChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCisgICAgICAgICAgICAke0VHTF9JTkNMVURFX0RJUn0KKyAgICAgICAgICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wiCisgICAgKQorICAgIGVu
ZGlmICgpCisKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKQEAgLTI3NywxOCArMjg1LDM2IEBAIGlmIChXVEZf
VVNFXzNEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L0dMWENvbnRleHQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HcmFwaGljc1N1cmZhY2VHTFguY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKICAgICApCisKKyAg
ICBpZiAoV1RGX1VTRV9FR0wpCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwor
ICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
CisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5j
cHAKKyAgICAgICAgKQorICAgIGVuZGlmICgpCisKKyAgICBpZiAoV1RGX1VTRV9HTFgpCisgICAg
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKKyAgICAgICAgKQorICAgIGVuZGlm
ICgpCisKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUwogICAgICAgICAke1gxMV9Y
MTFfTElCfQogICAgICAgICAke1gxMV9YY29tcG9zaXRlX0xJQn0KICAgICAgICAgJHtYMTFfWHJl
bmRlcl9MSUJ9CiAgICAgKQorICAgIGlmIChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICR7RUdMX0xJQlJBUll9CisgICAgICAg
ICkKKyAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAogYWRkX2RlZmluaXRpb25zKC1EREFUQV9ESVI9
IiR7Q01BS0VfSU5TVEFMTF9QUkVGSVh9LyR7REFUQV9JTlNUQUxMX0RJUn0iKQpkaWZmIC0tZ2l0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZzLmgKaW5kZXggMmRmYjRjOS4u
NTczNTM0MCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTERlZnMuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
RGVmcy5oCkBAIC00Miw2ICs0MiwxMiBAQAogI2luY2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAK
KyNpZiBVU0UoRUdMKQorI2RlZmluZSBFR0xfRUdMRVhUX1BST1RPVFlQRVMgMQorI2luY2x1ZGUg
PEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB0eXBlZGVmIHVpbnQzMl90IFBsYXRmb3JtQnVmZmVySGFuZGxlOwpAQCAt
NTEsNiArNTcsMTYgQEAgdHlwZWRlZiBHTFhDb250ZXh0IFBsYXRmb3JtQ29udGV4dDsKIHR5cGVk
ZWYgRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5OwogdHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9y
bVN1cmZhY2VDb25maWc7CiB0eXBlZGVmIEdMWERyYXdhYmxlIFBsYXRmb3JtRHJhd2FibGU7Cisj
ZWxpZiBVU0UoRUdMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0YXRpYyBjb25zdCBFR0xlbnVt
IGVnbEFQSVZlcnNpb24gPSBFR0xfT1BFTkdMX0VTX0FQSTsKKyNlbHNlCitzdGF0aWMgY29uc3Qg
RUdMZW51bSBlZ2xBUElWZXJzaW9uID0gRUdMX09QRU5HTF9BUEk7CisjZW5kaWYKK3R5cGVkZWYg
RUdMQ29udGV4dCBQbGF0Zm9ybUNvbnRleHQ7Cit0eXBlZGVmIEVHTERpc3BsYXkgUGxhdGZvcm1E
aXNwbGF5OwordHlwZWRlZiBFR0xDb25maWcgUGxhdGZvcm1TdXJmYWNlQ29uZmlnOwordHlwZWRl
ZiBFR0xTdXJmYWNlIFBsYXRmb3JtRHJhd2FibGU7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUNvbnRleHQ7CiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtRGlzcGxheTsKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQu
Y3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29u
dGV4dC5jcHAKaW5kZXggNzYyMWUyZS4uMzllY2M3ZiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAK
QEAgLTMwLDYgKzMwLDggQEAKIAogI2lmIFVTRShHTFgpCiAjaW5jbHVkZSAiR0xYQ29udGV4dC5o
IgorI2VsaWYgVVNFKEVHTCkKKyNpbmNsdWRlICJFR0xDb250ZXh0LmgiCiAjZW5kaWYKIAogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC00NCwxMSArNDYsMTEgQEAgUGFzc093blB0cjxH
TFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0QKICAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7
CiAjaWYgVVNFKEdMWCkKKyAgICBpZiAoIWdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQikgewog
ICAgICAgICBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIgPSByZWludGVycHJldF9jYXN0PFBG
TkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0FSQlBST0M+KGdsWEdldFByb2NBZGRyZXNzQVJCKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIiKSkpOwotI2VuZGlmCiAgICAgfQorI2VuZGlmCiAKICAgICBzd2l0Y2ggKHJlbmRlclN0eWxl
KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgpAQCAtNzAs
OCArNzIsMTEgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRl
eHQ6OmNyZWF0ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QKIFBhc3NPd25QdHI8R0xQbGF0Zm9y
bUNvbnRleHQ+IEdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVPZmZTY3JlZW5Db250ZXh0KCkKIHsK
ICNpZiBVU0UoR0xYKQotICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gZ2x4Q29udGV4dCA9
IGFkb3B0UHRyKG5ldyBHTFhPZmZTY3JlZW5Db250ZXh0KCkpOwotICAgIHJldHVybiBnbHhDb250
ZXh0LnJlbGVhc2UoKTsKKyAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGNvbnRleHQgPSBh
ZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuQ29udGV4dCgpKTsKKyAgICByZXR1cm4gY29udGV4dC5y
ZWxlYXNlKCk7CisjZWxpZiBVU0UoRUdMKQorICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0UHRyKG5ldyBFR0xPZmZTY3JlZW5Db250ZXh0KCkpOworICAgIHJldHVy
biBjb250ZXh0LnJlbGVhc2UoKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC04
MCw4ICs4NSwxMSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29u
dGV4dDo6Y3JlYXRlT2ZmU2NyZWVuQ29udGV4dCgpCiBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250
ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ3VycmVudENvbnRleHRXcmFwcGVyKCkKIHsK
ICNpZiBVU0UoR0xYKQotICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gZ2x4Q29udGV4dCA9
IGFkb3B0UHRyKG5ldyBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKSk7Ci0gICAgcmV0dXJuIGds
eENvbnRleHQucmVsZWFzZSgpOworICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gY29udGV4
dCA9IGFkb3B0UHRyKG5ldyBHTFhDdXJyZW50Q29udGV4dFdyYXBwZXIoKSk7CisgICAgcmV0dXJu
IGNvbnRleHQucmVsZWFzZSgpOworI2VsaWYgVVNFKEVHTCkKKyAgICBPd25QdHI8R0xQbGF0Zm9y
bUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdFB0cihuZXcgRUdMQ3VycmVudENvbnRleHRXcmFwcGVy
KCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKICNlbmRpZgogCiAgICAgcmV0dXJu
IG51bGxwdHI7CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dMUGxhdGZvcm1Db250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKaW5kZXggMTcwYjc2ZS4uMDM1M2RmOCAxMDA2NDQK
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29u
dGV4dC5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybUNvbnRleHQuaApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgLy8gRG9lc24ndCBo
YXZlIGFueSBlZmZlY3QgaWYgdGhpcyBpcyBub3QgdGhlIGN1cnJlbnQgQ29udGV4dC4KICAgICB2
b2lkIHJlbGVhc2VDdXJyZW50KCk7CiAKLSAgICBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29u
c3Q7CisgICAgdmlydHVhbCBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2Uu
Y3BwCmluZGV4IDgzOTFlNDcuLmVkMDI1ZjIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCkBAIC0z
Miw2ICszMiwxMCBAQAogI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKICNlbmRpZgogCisjaWYgVVNF
KEVHTCkKKyNpbmNsdWRlICJFR0xTdXJmYWNlLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUwLDEwICs1NCwxNCBAQCBQ
YXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlT2Zm
c2NyZWVuU3VyZmFjZSgpCiAKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZv
cm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKCkKIHsKLSNpZiBVU0UoR0xYKSAmJiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpZiBVU0Uo
R0xYKQogICAgIE93blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5l
dyBHTFhUcmFuc3BvcnRTdXJmYWNlKCkpOworI2VsaWYgVVNFKEVHTCkKKyAgICBPd25QdHI8R0xQ
bGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgRUdMVHJhbnNwb3J0U3VyZmFj
ZSgpKTsKKyNlbmRpZgogCi0gICAgaWYgKHN1cmZhY2UtPmhhbmRsZSgpKQorICAgIGlmIChzdXJm
YWNlICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZhY2UtPmRyYXdhYmxlKCkpCiAgICAgICAg
IHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKICNlbmRpZgogCmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzBhODk3Ci0tLSAvZGV2L251bGwK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250
ZXh0LmNwcApAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkVHTENvbnRleHQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgVVNFKEVHTCkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCisjaWYgSEFWRShHTFgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRleHRBdHRyaWJ1dGVz
W10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJT
SU9OLCAyLAorI2VuZGlmCisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBjb25zdCBFR0xpbnQg
Y29udGV4dFJvYnVzdG5lc3NBdHRyaWJ1dGVzW10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQor
ICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLAorI2VuZGlmCisgICAgRUdMX0NPTlRF
WFRfT1BFTkdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQsCisgICAgRUdMX0xPU0Vf
Q09OVEVYVF9PTl9SRVNFVF9FWFQsCisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBib29sIGlz
Um9idXN0bmVzc0V4dFN1cHBvcnRlZChFR0xEaXNwbGF5IGRpc3BsYXkpCit7CisgICAgc3RhdGlj
IGJvb2wgcXVlcnlEb25lID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaXNFR0xFWFRzdXBwb3J0
ZWQgPSBmYWxzZTsKKworICAgIGlmICghcXVlcnlEb25lKSB7CisgICAgICAgIHF1ZXJ5RG9uZSA9
IHRydWU7CisgICAgICAgIFN0cmluZyBzdXBwb3J0ZWRFeHRlbnNpb25zID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oZWdsUXVlcnlTdHJpbmcoZGlzcGxheSwgRUdMX0VYVEVOU0lPTlMp
KTsKKyAgICAgICAgaWYgKCFzdXBwb3J0ZWRFeHRlbnNpb25zLmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9ucy5hcHBlbmQoIiAiKTsKKyAgICAgICAgICAgIGlzRUdM
RVhUc3VwcG9ydGVkID0gc3VwcG9ydGVkRXh0ZW5zaW9ucy5jb250YWlucygiRUdMX0VYVF9jcmVh
dGVfY29udGV4dF9yb2J1c3RuZXNzICIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGlzRUdMRVhUc3VwcG9ydGVkOworfQorCitFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OkVHTEN1
cnJlbnRDb250ZXh0V3JhcHBlcigpCisgICAgOiBHTFBsYXRmb3JtQ29udGV4dCgpCit7Cit9CisK
Ky8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdGlsbCB3ZSBhcmUgYWJs
ZSB0byBidWlsZCBldmFzIHdpdGggRUdMIHN1cHBvcnQKK1BsYXRmb3JtQ29udGV4dCBFR0xDdXJy
ZW50Q29udGV4dFdyYXBwZXI6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsWEdldEN1
cnJlbnRDb250ZXh0KCk7Cit9CisKK0VHTE9mZlNjcmVlbkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNv
bnRleHQoKQorICAgIDogR0xQbGF0Zm9ybUNvbnRleHQoKQorICAgICwgbV9kaXNwbGF5KDApCit7
Cit9CisKK2Jvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3Vy
ZmFjZSogc3VyZmFjZSkKK3sKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKSkgeworICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1fZGlzcGxheSA9IHN1cmZhY2UtPnNo
YXJlZERpc3BsYXkoKTsKKyAgICBpZiAoIW1fZGlzcGxheSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgRUdMQ29uZmlnIGNvbmZpZyA9IHN1cmZhY2UtPmNvbmZpZ3VyYXRpb24oKTsKKyAg
ICBpZiAoIWNvbmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvbmZpZykg
eworICAgICAgICBpZiAoaXNSb2J1c3RuZXNzRXh0U3VwcG9ydGVkKG1fZGlzcGxheSkpCisgICAg
ICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29u
ZmlnLCBFR0xfTk9fQ09OVEVYVCwgY29udGV4dFJvYnVzdG5lc3NBdHRyaWJ1dGVzKTsKKworICAg
ICAgICBpZiAoIW1fY29udGV4dEhhbmRsZSAmJiBtX2NvbnRleHRIYW5kbGUgIT0gRUdMX05PX0NP
TlRFWFQpCisgICAgICAgICAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSB0cnVlOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2NvbnRleHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlz
cGxheSwgY29uZmlnLCBFR0xfTk9fQ09OVEVYVCwgY29udGV4dEF0dHJpYnV0ZXMpOworCisgICAg
ICAgIGlmIChtX2NvbnRleHRIYW5kbGUgJiYgbV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05U
RVhUKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitFR0xPZmZTY3JlZW5Db250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCgpCit7Cit9
CisKK2Jvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZSA9PSBlZ2xHZXRDdXJyZW50Q29udGV4dCgpOwor
fQorCitib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0
Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgaWYgKCFlZ2xCaW5kQVBJKGVnbEFQSVZlcnNp
b24pKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIs
IGVnbEdldEVycm9yKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KCFlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIHN1cmZhY2UtPmRyYXdhYmxlKCksIHN1cmZhY2Ut
PmRyYXdhYmxlKCksIG1fY29udGV4dEhhbmRsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gbWFrZSBjb250ZXh0IGN1cnJlbnQuKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworCisg
ICAgICAgIGlmIChtX3Jlc2V0TG9zdENvbnRleHQgJiYgZWdsR2V0RXJyb3IoKSA9PSBFR0xfQ09O
VEVYVF9MT1NUKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkxvc3QgY3VycmVudCBjb250ZXh0
LlxuIik7CisgICAgICAgICAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKK3sKKyAgICBl
Z2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwg
RUdMX05PX0NPTlRFWFQpOworfQorCit2b2lkIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmZyZWVSZXNv
dXJjZXMoKQoreworICAgIGlmIChtX2NvbnRleHRIYW5kbGUpCisgICAgICAgIGVnbERlc3Ryb3lD
b250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKKworICAgIG1fY29udGV4dEhhbmRs
ZSA9IDA7CisgICAgbV9kaXNwbGF5ID0gMDsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0
OjpkZXN0cm95KCkKK3sKKyAgICBHTFBsYXRmb3JtQ29udGV4dDo6ZGVzdHJveSgpOworICAgIGZy
ZWVSZXNvdXJjZXMoKTsKK30KKworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmggU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODA3OTNlCi0tLSAvZGV2L251bGwKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgK
QEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFR0xDb250ZXh0
X2gKKyNkZWZpbmUgRUdMQ29udGV4dF9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShFR0wpCisKKyNpbmNsdWRlICJHTFBsYXRmb3JtQ29udGV4dC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlciA6IHB1Ymxp
YyBHTFBsYXRmb3JtQ29udGV4dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMQ3VycmVu
dENvbnRleHRXcmFwcGVyKTsKKworcHVibGljOgorICAgIEVHTEN1cnJlbnRDb250ZXh0V3JhcHBl
cigpOworICAgIFBsYXRmb3JtQ29udGV4dCBoYW5kbGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIH5F
R0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKSB7IH0KK307CisKK2NsYXNzIEVHTE9mZlNjcmVlbkNv
bnRleHQgOiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRleHQgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEVHTE9mZlNjcmVlbkNvbnRleHQpOworCitwdWJsaWM6CisgICAgRUdMT2ZmU2NyZWVuQ29u
dGV4dCgpOworICAgIHZpcnR1YWwgfkVHTE9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICBib29sIGlu
aXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKTsKKyAgICBib29sIHBsYXRmb3JtTWFrZUN1cnJl
bnQoR0xQbGF0Zm9ybVN1cmZhY2UqKTsKKyAgICB2b2lkIHBsYXRmb3JtUmVsZWFzZUN1cnJlbnQo
KTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKyAgICBib29sIGlzQ3VycmVudENvbnRleHQoKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGZyZWVSZXNvdXJjZXMoKTsKKyAgICBFR0xEaXNwbGF5
IG1fZGlzcGxheTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzZTA2YgotLS0gL2Rldi9u
dWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
U3VyZmFjZS5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFR0xTdXJmYWNlLmgiCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VHTFRyYW5zcG9ydFN1cmZhY2U6OkVHTFRyYW5zcG9y
dFN1cmZhY2UoKQorICAgIDogWDExT2ZmU2NyZWVuV2luZG93KCkKK3sKKyAgICBpZiAobV9zaGFy
ZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKSB7CisgICAgICAgIExPR19FUlJPUigiTm8gdmFs
aWQgaGFyZHdhcmUgZGlzcGxheSBmb3VuZC5cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKCFjb25maWd1cmF0aW9uKCkpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY3JlYXRlT2Zmc2NyZWVuV2luZG93KCk7CisKKyAgICBp
ZiAoIW1fYnVmZmVySGFuZGxlKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0
ZSBYV2luZG93LlxuIik7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVkUmVz
b3VyY2VzLT5uYXRpdmVEaXNwbGF5KCksIGNvbmZpZ3VyYXRpb24oKSwgKEVHTE5hdGl2ZVdpbmRv
d1R5cGUpbV9idWZmZXJIYW5kbGUsIDApOworCisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05P
X1NVUkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVHTCBzdXJm
YWNlKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBkZXN0cm95KCk7CisgICAgfQor
fQorCitFR0xUcmFuc3BvcnRTdXJmYWNlOjp+RUdMVHJhbnNwb3J0U3VyZmFjZSgpCit7Cit9CisK
K1BsYXRmb3JtU3VyZmFjZUNvbmZpZyBFR0xUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9u
KCkKK3sKKyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmln
KCk7Cit9CisKK3ZvaWQgRUdMVHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAg
IGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRUdMQm9vbGVhbiBzdWNj
ZXNzID0gZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKTsKKworICAgIGlmIChzdWNjZXNzICE9IEVH
TF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5c
biIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorCisgICAgc3Vj
Y2VzcyA9IGVnbFN3YXBCdWZmZXJzKHNoYXJlZERpc3BsYXkoKSwgbV9kcmF3YWJsZSk7CisKKyAg
ICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBTd2FwQnVmZmVycyglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgp
OworICAgIH0KK30KKwordm9pZCBFR0xUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKK3sKKyAg
ICBkZXN0cm95V2luZG93KCk7CisgICAgZnJlZUVHTFJlc291cmNlcygpOworfQorCit2b2lkIEVH
TFRyYW5zcG9ydFN1cmZhY2U6OmZyZWVFR0xSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2RyYXdh
YmxlID09IEVHTF9OT19TVVJGQUNFKQorICAgICAgICByZXR1cm47CisKKyAgICBFR0xCb29sZWFu
IGVnbFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7CisKKyAgICBpZiAoZWdsUmVz
dWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wg
QVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZWdsRGVzdHJveVN1cmZhY2Uoc2hhcmVkRGlzcGxheSgpLCBtX2RyYXdhYmxlKTsKKyAgICBt
X2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2Uu
aCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFj
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNjllNDkKLS0tIC9kZXYv
bnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TFN1cmZhY2UuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEVHTFN1cmZhY2VfaAorI2RlZmluZSBFR0xTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykgJiYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNp
bmNsdWRlIDxnbHgvRUdMWFdpbmRvd1Jlc291cmNlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgRUdMVHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBYMTFPZmZTY3JlZW5XaW5k
b3cgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVHTFRyYW5zcG9ydFN1cmZhY2UpOworCitw
dWJsaWM6CisgICAgRUdMVHJhbnNwb3J0U3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkVHTFRyYW5z
cG9ydFN1cmZhY2UoKTsKKyAgICBQbGF0Zm9ybVN1cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigp
OworICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKKyAgICB2b2lkIGRlc3Ryb3koKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGZyZWVFR0xSZXNvdXJjZXMoKTsKK307CisKK30KKworI2VuZGlmCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9FR0xYV2luZG93UmVzb3VyY2VzLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0VHTFhXaW5kb3dSZXNvdXJjZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43YWZiZTkxCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9FR0xYV2luZG93UmVzb3VyY2VzLmgKQEAg
LTAsMCArMSwyNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMWFdpbmRvd1Jl
c291cmNlc19oCisjZGVmaW5lIEVHTFhXaW5kb3dSZXNvdXJjZXNfaAorCisjaW5jbHVkZSAiWDEx
V2luZG93UmVzb3VyY2VzLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYm
IFVTRShFR0wpCisKKyNpbmNsdWRlIDxvcGVuZ2wvR0xEZWZzLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU2hhcmVkRUdMUmVzb3VyY2VzIDogcHVibGljIFNoYXJlZFgxMVJlc291
cmNlcyB7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRFR0xSZXNvdXJj
ZXM+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkUmVzb3VyY2Up
CisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlID0gbmV3IFNoYXJlZEVHTFJlc291
cmNlcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNl
LT5yZWYoKTsKKworICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRSZXNvdXJj
ZSk7CisgICAgfQorCisgICAgUGxhdGZvcm1EaXNwbGF5IG5hdGl2ZURpc3BsYXkoKQorICAgIHsK
KyAgICAgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICAg
ICAgRUdMQm9vbGVhbiBzdWNjZXNzOworCisgICAgICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xH
ZXREaXNwbGF5KHJlaW50ZXJwcmV0X2Nhc3Q8RUdMTmF0aXZlRGlzcGxheVR5cGU+KFNoYXJlZFgx
MVJlc291cmNlczo6eDExRGlzcGxheSgpKSk7CisKKyAgICAgICAgICAgIGlmIChtX2VnbERpc3Bs
YXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkVHTERp
c3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fZWdsRGlzcGxheTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3VjY2VzcyA9IGVn
bEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAwLCAwKTsKKworICAgICAgICAgICAgaWYgKHN1Y2Nl
c3MgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkVHTEluaXRpYWxp
emF0aW9uIGZhaWxlZC5cbiIpOworICAgICAgICAgICAgICAgIGNsZWFudXAoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9lZ2xEaXNwbGF5OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzdWNjZXNzID0gZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKTsKKworICAgICAgICAgICAgaWYg
KHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoImZhaWxl
ZCB0byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgICAgICAg
ICBjbGVhbnVwKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
bV9lZ2xEaXNwbGF5OworICAgIH0KKworICAgIHZpcnR1YWwgRUdMQ29uZmlnIHBCdWZmZXJDb250
ZXh0Q29uZmlnKCkKKyAgICB7CisgICAgICAgIGlmICghbV9wYnVmZmVyZmJDb25maWcpIHsKKyAg
ICAgICAgICAgIEVHTGludCBhdHRyaWJ1dGVMaXN0W10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18y
KQorICAgICAgICAgICAgICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJ
VCwKKyNlbHNlCisgICAgICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9CSVQsCisjZW5kaWYKKyAgICAgICAgICAgICAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgICAg
ICAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0JMVUVfU0la
RSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfU1RFTkNJTF9TSVpFLCA4LAorICAgICAgICAgICAg
ICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9TVVJGQUNFX1RZUEUs
IEVHTF9QSVhNQVBfQklULAorICAgICAgICAgICAgICAgIEVHTF9OT05FCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgbV9wYnVmZmVyZmJDb25maWcgPSBjcmVhdGVDb25maWcoYXR0cmlidXRl
TGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fcGJ1ZmZlcmZiQ29uZmlnOworICAg
IH0KKworICAgIHZpcnR1YWwgRUdMQ29uZmlnIHN1cmZhY2VDb250ZXh0Q29uZmlnKCkKKyAgICB7
CisgICAgICAgIGlmICghbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKSB7CisgICAgICAgICAgICBF
R0xpbnQgYXR0cmlidXRlTGlzdFtdID0geworICAgICAgICAgICAgICAgIEVHTF9MRVZFTCwgMCwK
KyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICAgICAgRUdMX1JFTkRFUkFCTEVfVFlQ
RSwgRUdMX09QRU5HTF9FUzJfQklULAorI2Vsc2UKKyAgICAgICAgICAgICAgICBFR0xfUkVOREVS
QUJMRV9UWVBFLCBFR0xfT1BFTkdMX0JJVCwKKyNlbmRpZgorICAgICAgICAgICAgICAgIEVHTF9S
RURfU0laRSwgOCwKKyAgICAgICAgICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKKyAgICAgICAg
ICAgICAgICBFR0xfQkxVRV9TSVpFLCA4LAorICAgICAgICAgICAgICAgIEVHTF9TVEVOQ0lMX1NJ
WkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX0FMUEhBX1NJWkUsIDgsCisgICAgICAgICAgICAg
ICAgRUdMX0RFUFRIX1NJWkUsIDgsCisgICAgICAgICAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwg
RUdMX1dJTkRPV19CSVQsCisgICAgICAgICAgICAgICAgRUdMX05PTkUKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSBjcmVhdGVDb25maWcoYXR0
cmlidXRlTGlzdCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV9zdXJmYWNlQ29udGV4
dGZiQ29uZmlnOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTaGFyZWRFR0xSZXNvdXJjZXMoKQor
ICAgICAgICA6IFNoYXJlZFgxMVJlc291cmNlcygpCisgICAgeworICAgICAgICBtX2VnbERpc3Bs
YXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnID0g
MDsKKyAgICAgICAgbV9wYnVmZmVyZmJDb25maWcgPSAwOworICAgIH0KKworICAgIHZvaWQgY2xl
YW51cCgpCisgICAgeworICAgICAgICBlZ2xNYWtlQ3VycmVudChtX2VnbERpc3BsYXksIEVHTF9O
T19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICBlZ2xU
ZXJtaW5hdGUobV9lZ2xEaXNwbGF5KTsKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJ
U1BMQVk7CisgICAgfQorCisgICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0
cmlidXRlc1tdKQorICAgIHsKKyAgICAgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElT
UExBWSkgeworICAgICAgICAgICAgLy8gVHJ5IHRvIGluaXRpYWxpemUgRGlzcGxheSBpZiBhbHJl
YWR5IG5vdCBkb25lLgorICAgICAgICAgICAgbmF0aXZlRGlzcGxheSgpOworCisgICAgICAgICAg
ICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaW50IG51bUNvbmZpZ3M7CisgICAgICAgIEVH
TENvbmZpZyByaWdodENvbmZpZyA9IDA7CisKKyAgICAgICAgaWYgKCFlZ2xDaG9vc2VDb25maWco
bV9lZ2xEaXNwbGF5LCBhdHRyaWJ1dGVzLCAmcmlnaHRDb25maWcsIDEsICZudW1Db25maWdzKSkg
eworICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IHN1cHBvcnRlZCBjb25maWdp
cmF0aW9ucy5cbiIpOworICAgICAgICAgICAgY2xlYW51cCgpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG51bUNvbmZpZ3MgIT0gMSkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFR0xDaG9v
c2VDb25maWcgZGlkbid0IHJldHVybiBleGFjdGx5IG9uZSBjb25maWcgYnV0ICglZCkuXG4iLCBu
dW1Db25maWdzKTsKKyAgICAgICAgICAgIGNsZWFudXAoKTsKKyAgICAgICAgfQorCisgICAgICAg
IFZpc3VhbElEIHZpc3VhbElkID0gMDsKKyAgICAgICAgRUdMaW50IGVnbFZhbHVlID0gMDsKKwor
ICAgICAgICAvLyBDaGVjayBpZiBFR0wgcHJvdmlkZXMgdXMgd2l0aCBhIHZhbGlkIHZpc3VhbCBp
ZC4KKyAgICAgICAgZWdsR2V0Q29uZmlnQXR0cmliKG1fZWdsRGlzcGxheSwgcmlnaHRDb25maWcs
IEVHTF9OQVRJVkVfVklTVUFMX0lELCAmZWdsVmFsdWUpOworICAgICAgICB2aXN1YWxJZCA9IHN0
YXRpY19jYXN0PFZpc3VhbElEPihlZ2xWYWx1ZSk7CisgICAgICAgIGlmICh2aXN1YWxJZCkgewor
ICAgICAgICAgICAgLy8gRUdMIGhhcyBzdWdnZXN0ZWQgYSB2aXN1YWwgaWQsIHNvIGdldCB0aGUg
cmVzdCBvZiB0aGUgdmlzdWFsIGluZm8gZm9yIHRoYXQgaWQuCisgICAgICAgICAgICBYVmlzdWFs
SW5mbyB2aXN1YWxJbmZvVGVtcGxhdGU7CisgICAgICAgICAgICBtZW1zZXQoJnZpc3VhbEluZm9U
ZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7CisgICAgICAgICAgICB2aXN1YWxJbmZv
VGVtcGxhdGUudmlzdWFsaWQgPSB2aXN1YWxJZDsKKworICAgICAgICAgICAgWFZpc3VhbEluZm8g
KmNob3NlblZpc3VhbEluZm87CisgICAgICAgICAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7Cisg
ICAgICAgICAgICBjaG9zZW5WaXN1YWxJbmZvID0gWEdldFZpc3VhbEluZm8oeDExRGlzcGxheSgp
LCBWaXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGluZ0NvdW50KTsKKyAg
ICAgICAgICAgIGlmIChjaG9zZW5WaXN1YWxJbmZvKSB7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCisgICAgICAgICAgICAgICAgaWYgKG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBYUmVuZGVyRmlu
ZFZpc3VhbEZvcm1hdCh4MTFEaXNwbGF5KCksIGNob3NlblZpc3VhbEluZm8tPnZpc3VhbCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxwaGFNYXNr
ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGNob3NlblZpc3Vh
bEluZm87CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKCFt
X1Zpc3VhbEluZm8gJiYgY2hvc2VuVmlzdWFsSW5mby0+ZGVwdGggPT0gMzIpCisgICAgICAgICAg
ICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IGNob3NlblZpc3VhbEluZm87CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghbV9WaXN1YWxJbmZvKSB7CisgICAgICAgICAgICAgICAgWFZp
c3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOworICAgICAgICAgICAgICAgIG1lbXNldCgmdmlz
dWFsSW5mb1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKKyAgICAgICAgICAgICAg
ICBYVmlzdWFsSW5mbyAqbWF0Y2hpbmdWaXN1YWxzOworICAgICAgICAgICAgICAgIGludCBtYXRj
aGluZ0NvdW50ID0gMDsKKworICAgICAgICAgICAgICAgIHZpc3VhbEluZm9UZW1wbGF0ZS5kZXB0
aCA9IGNob3NlblZpc3VhbEluZm8tPmRlcHRoOworICAgICAgICAgICAgICAgIG1hdGNoaW5nVmlz
dWFscyA9IFhHZXRWaXN1YWxJbmZvKHgxMURpc3BsYXkoKSwgVmlzdWFsRGVwdGhNYXNrLCAmdmlz
dWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
bWF0Y2hpbmdWaXN1YWxzKSB7CisgICAgICAgICAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9ICZt
YXRjaGluZ1Zpc3VhbHNbMF07CisgICAgICAgICAgICAgICAgICAgIFhGcmVlKG1hdGNoaW5nVmlz
dWFscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGdldCBWaXN1YWwgSW5mby5cbiIpOworICAgICAgICAgICAgY2xlYW51cCgpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHJpZ2h0Q29uZmlnOworICAgIH0KKworICAgIHZpcnR1YWwg
flNoYXJlZEVHTFJlc291cmNlcygpCisgICAgeworICAgICAgICBpZiAobV9lZ2xEaXNwbGF5ID09
IEVHTF9OT19ESVNQTEFZKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX3N1
cmZhY2VDb250ZXh0ZmJDb25maWcpCisgICAgICAgICAgICBtX3N1cmZhY2VDb250ZXh0ZmJDb25m
aWcgPSAwOworCisgICAgICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3BsYXkpOworICAgICAgICBt
X2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBF
R0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKKyAgICBFR0xDb25maWcgbV9wYnVmZmVyZmJDb25maWc7
CisgICAgRUdMQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKK307CisKK30KKworI2Vu
ZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCmluZGV4IDYw
MjkzZTcuLjQ4NTI1ZjUgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcAorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKQEAg
LTI4LDcgKzI4LDEzIEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNp
ZiBVU0UoR0xYKQogI2luY2x1ZGUgIkdMWFdpbmRvd1Jlc291cmNlcy5oIgorI2VuZGlmCisKKyNp
ZiBVU0UoRUdMKQorI2luY2x1ZGUgIkVHTFhXaW5kb3dSZXNvdXJjZXMuaCIKKyNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmggU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCmluZGV4
IGIyNWIyYWMuLjg3ZTM3MDEgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaApAQCAt
NDAsOCArNDAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKEdMWCkKIGNs
YXNzIFNoYXJlZEdMWFJlc291cmNlczsKIHR5cGVkZWYgU2hhcmVkR0xYUmVzb3VyY2VzIFBsYXRm
b3JtU2hhcmVkUmVzb3VyY2VzOworI2VsaWYgVVNFKEVHTCkKK2NsYXNzIFNoYXJlZEVHTFJlc291
cmNlczsKK3R5cGVkZWYgU2hhcmVkRUdMUmVzb3VyY2VzIFBsYXRmb3JtU2hhcmVkUmVzb3VyY2Vz
OworI2VuZGlmCiAKIGNsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJlZkNv
dW50ZWRCYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJjZXMp
OwpkaWZmIC0tZ2l0IFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIFNvdXJjZS9jbWFrZS9P
cHRpb25zRWZsLmNtYWtlCmluZGV4IDgwMGE3MDkuLmZlMjAyZWYgMTAwNjQ0Ci0tLSBTb3VyY2Uv
Y21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UK
QEAgLTE3NSwxMiArMTc1LDI1IEBAIGlmIChFTkFCTEVfV0VCR0wgT1IgV1RGX1VTRV9USUxFRF9C
QUNLSU5HX1NUT1JFKQogCiAgICAgaWYgKE9QRU5HTFhfRk9VTkQpCiAgICAgICAgIGFkZF9kZWZp
bml0aW9ucygtREhBVkVfR0xYKQotICAgICAgICBhZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0dM
WD0xKQorICAgIGVuZGlmICgpCisKKyAgICBvcHRpb24oRU5BQkxFX0VHTCBPTikKIAotICAgICAg
ICBpZiAoWDExX1hjb21wb3NpdGVfRk9VTkQgQU5EIFgxMV9YcmVuZGVyX0ZPVU5EKQotICAgICAg
ICAgICBzZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkKLSAgICAgICAgZW5kaWYgKCkKKyAgICBp
ZiAoRU5BQkxFX0VHTCkKKyAgICAgICAgZmluZF9wYWNrYWdlKEVHTCBSRVFVSVJFRCkKICAgICBl
bmRpZiAoKQorCisgICAgaWYgKEVHTF9GT1VORCkKKyAgICAgICAgc2V0KFdURl9VU0VfRUdMIDEp
CisgICAgICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfRUdMPTEpCisgICAgIGVsc2VpZiAo
T1BFTkdMWF9GT1VORCkKKyAgICAgICAgIHNldChXVEZfVVNFX0dMWCAxKQorICAgICAgICAgYWRk
X2RlZmluaXRpb25zKC1EV1RGX1VTRV9HTFg9MSkKKyAgICBlbmRpZiAoKQorCisgICAgIGlmICgo
T1BFTkdMWF9GT1VORCBPUiBFR0xfRk9VTkQpIEFORCBYMTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQg
WDExX1hyZW5kZXJfRk9VTkQpCisgICAgICAgICBzZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkK
KyAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfSU5TUEVDVE9SKQo=
</data>
<flag name="review"
          id="197914"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180633</attachid>
            <date>2012-12-23 17:29:30 -0800</date>
            <delta_ts>2012-12-24 05:37:20 -0800</delta_ts>
            <desc>patch</desc>
            <filename>reviewpatch.patch</filename>
            <type>text/plain</type>
            <size>47662</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLjUxZDQxZjMgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQgY2FuIGJlIGVuYWJsZWQgZHVy
aW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1ERU5BQkxFX0VHTD1PTiBhcyBj
bWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzgzMzguCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAxYTA0MDRmLi4wNDg3OGJkIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAxMi0x
Mi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTYwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBHTEVTMiBzdXBwb3J0LgorICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJhY2tlbmQuIEVHTCBzdXBwb3J0IGNhbiBi
ZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAgICAgICAgYnkgcGFzc2luZyAtREVOQUJM
RV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRlci4gVGhpcyBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0
ZUNvbnRleHQpOiBBZGRlZCBHTFggY2hlY2tzLgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQpOiBBZGRlZCBzdXBwb3J0IGZvciBjcmVh
dGluZyBFR0xPZmZzY3JlZW4gQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1D
b250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIpOiBBZGRlZCBzdXBwb3J0IGZvciBj
cmVhdGluZyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdM
UGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKTogQWRkZWQgc3VwcG9ydCBm
b3IgY3JlYXRpbmcgRUdMU3VyZmFjZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUm9idXN0bmVzc0V4dFN1cHBvcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OkVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OmhhbmRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6fkVHTE9mZlNjcmVlbkNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1h
a2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRm
b3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4
dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0
OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xDdXJyZW50Q29udGV4
dFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjp+
RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKEVHTE9mZlNjcmVlbkNvbnRleHQp
OgorCisgICAgICAgIEVHTCBpbXBsZW1lbnRhdGlvbiBmb3IgQ29udGV4dCBNYW5hZ2VtZW50Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjp+RUdMV2luZG93VHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpjb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6
OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6ZnJlZUVHTFJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZSk6CisKKyAgICAgICAgRUdMIGltcGxlbWVudGF0aW9uIGZvciBP
ZmZzY3JlZW4gU3VyZmFjZS4gVGhlIHN1cmZhY2UgaXMgYmFja2VkIGJ5IG5hdGl2ZSB3aW5kb3cu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVs
cGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEVHTERpc3BsYXk6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTERpc3Bs
YXk6OnNoYXJlZEVHTERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkRUdMRGlzcGxh
eTo6U2hhcmVkRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xEaXNwbGF5
OjpjbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTERpc3BsYXk6On5TaGFyZWRF
R0xEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6RUdMQ29uZmln
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6fkVHTENvbmZpZ0hl
bHBlcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6OmRpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToK
KyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6bmF0aXZlVmlzdWFsSWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xDb25maWdIZWxwZXI6OmNyZWF0ZUNvbmZpZyk6CisKKyAgICAgICAgSGVscGVyIGNsYXNz
IHRvIGluaXRpYWxpemUgRUdMIHJlc291cmNlcyBhbmQgY2hvb3NlIHJpZ2h0IEVHTCBjb25maWdp
cmF0aW9uLgorCiAyMDEyLTEyLTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVcGRhdGUgbG9jYWxpemFibGUgc3RyaW5ncyBhcyBhIGZvbGxvd3VwIHRvIGh0
dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEzODM4NwpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDU2ZTMwNmMuLmU3ZTQ2OWMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI2NSw2
ICsyNjUsMTQgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgiCiAgICAgICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCiAgICAgKQorCisgICAgaWYgKFdURl9VU0Vf
RUdMKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAgICAgICAgICR7RUdMX0lOQ0xVREVfRElSfQorICAgICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbCIKKyAgICApCisgICAgZW5kaWYgKCkKKwog
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9PcGVuR0xTaGltcy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2lu
Z0J1ZmZlckNhaXJvLmNwcApAQCAtMjc3LDE4ICsyODUsMzYgQEAgaWYgKFdURl9VU0VfM0RfR1JB
UEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9HcmFwaGljc1N1cmZhY2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhTdXJmYWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYQ29udGV4dC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAogICAgICkKKworICAgIGlmIChXVEZf
VVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcAorICAgICAg
ICApCisgICAgZW5kaWYgKCkKKworICAgIGlmIChXVEZfVVNFX0dMWCkKKyAgICAgICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAorICAgICAgICApCisgICAgZW5kaWYgKCkKKwogICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7WDExX1gxMV9MSUJ9CiAg
ICAgICAgICR7WDExX1hjb21wb3NpdGVfTElCfQogICAgICAgICAke1gxMV9YcmVuZGVyX0xJQn0K
ICAgICApCisgICAgaWYgKFdURl9VU0VfRUdMKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0xJQlJBUklFUworICAgICAgICAgICAgJHtFR0xfTElCUkFSWX0KKyAgICAgICAgKQorICAgIGVu
ZGlmICgpCiBlbmRpZiAoKQogCiBhZGRfZGVmaW5pdGlvbnMoLUREQVRBX0RJUj0iJHtDTUFLRV9J
TlNUQUxMX1BSRUZJWH0vJHtEQVRBX0lOU1RBTExfRElSfSIpCmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAppbmRleCAyZGZiNGM5Li41NzM1MzQwIDEw
MDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5o
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZzLmgKQEAg
LTQyLDYgKzQyLDEyIEBACiAjaW5jbHVkZSA8R0wvZ2x4Lmg+CiAjZW5kaWYKIAorI2lmIFVTRShF
R0wpCisjZGVmaW5lIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAxCisjaW5jbHVkZSA8RUdML2VnbC5o
PgorI2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHR5cGVkZWYgdWludDMyX3QgUGxhdGZvcm1CdWZmZXJIYW5kbGU7CkBAIC01MSw2ICs1Nywx
NiBAQCB0eXBlZGVmIEdMWENvbnRleHQgUGxhdGZvcm1Db250ZXh0OwogdHlwZWRlZiBEaXNwbGF5
KiBQbGF0Zm9ybURpc3BsYXk7CiB0eXBlZGVmIEdMWEZCQ29uZmlnIFBsYXRmb3JtU3VyZmFjZUNv
bmZpZzsKIHR5cGVkZWYgR0xYRHJhd2FibGUgUGxhdGZvcm1EcmF3YWJsZTsKKyNlbGlmIFVTRShF
R0wpCisjaWYgVVNFKE9QRU5HTF9FU18yKQorc3RhdGljIGNvbnN0IEVHTGVudW0gZWdsQVBJVmVy
c2lvbiA9IEVHTF9PUEVOR0xfRVNfQVBJOworI2Vsc2UKK3N0YXRpYyBjb25zdCBFR0xlbnVtIGVn
bEFQSVZlcnNpb24gPSBFR0xfT1BFTkdMX0FQSTsKKyNlbmRpZgordHlwZWRlZiBFR0xDb250ZXh0
IFBsYXRmb3JtQ29udGV4dDsKK3R5cGVkZWYgRUdMRGlzcGxheSBQbGF0Zm9ybURpc3BsYXk7Cit0
eXBlZGVmIEVHTENvbmZpZyBQbGF0Zm9ybVN1cmZhY2VDb25maWc7Cit0eXBlZGVmIEVHTFN1cmZh
Y2UgUGxhdGZvcm1EcmF3YWJsZTsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ29udGV4
dDsKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1EaXNwbGF5OwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcApp
bmRleCA3NjIxZTJlLi4zOWVjYzdmIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcAorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcApAQCAtMzAsNiAr
MzAsOCBAQAogCiAjaWYgVVNFKEdMWCkKICNpbmNsdWRlICJHTFhDb250ZXh0LmgiCisjZWxpZiBV
U0UoRUdMKQorI2luY2x1ZGUgIkVHTENvbnRleHQuaCIKICNlbmRpZgogCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKQEAgLTQ0LDExICs0NiwxMSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1D
b250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQz
RAogICAgIGlmICghaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgaWYgKCFnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIpIHsKICNpZiBVU0Uo
R0xYKQorICAgIGlmICghZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7CiAgICAgICAgIGds
R2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVRHUkFQ
SElDU1JFU0VUU1RBVFVTQVJCUFJPQz4oZ2xYR2V0UHJvY0FkZHJlc3NBUkIocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBHTHVieXRlKj4oImdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQiIpKSk7Ci0j
ZW5kaWYKICAgICB9CisjZW5kaWYKIAogICAgIHN3aXRjaCAocmVuZGVyU3R5bGUpIHsKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZzY3JlZW46CkBAIC03MCw4ICs3MiwxMSBA
QCBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRl
Q29udGV4dChHcmFwaGljc0NvbnRleHQzRAogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4g
R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogewogI2lmIFVTRShH
TFgpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIo
bmV3IEdMWE9mZlNjcmVlbkNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFz
ZSgpOworICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gY29udGV4dCA9IGFkb3B0UHRyKG5l
dyBHTFhPZmZTY3JlZW5Db250ZXh0KCkpOworICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsK
KyNlbGlmIFVTRShFR0wpCisgICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBjb250ZXh0ID0g
YWRvcHRQdHIobmV3IEVHTE9mZlNjcmVlbkNvbnRleHQoKSk7CisgICAgcmV0dXJuIGNvbnRleHQu
cmVsZWFzZSgpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTgwLDggKzg1LDEx
IEBAIFBhc3NPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IEdMUGxhdGZvcm1Db250ZXh0OjpjcmVh
dGVPZmZTY3JlZW5Db250ZXh0KCkKIFBhc3NPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IEdMUGxh
dGZvcm1Db250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIoKQogewogI2lmIFVTRShH
TFgpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIo
bmV3IEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpKTsKLSAgICByZXR1cm4gZ2x4Q29udGV4dC5y
ZWxlYXNlKCk7CisgICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBjb250ZXh0ID0gYWRvcHRQ
dHIobmV3IEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpKTsKKyAgICByZXR1cm4gY29udGV4dC5y
ZWxlYXNlKCk7CisjZWxpZiBVU0UoRUdMKQorICAgIE93blB0cjxHTFBsYXRmb3JtQ29udGV4dD4g
Y29udGV4dCA9IGFkb3B0UHRyKG5ldyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKSk7CisgICAg
cmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbnVsbHB0cjsK
ZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0
Zm9ybUNvbnRleHQuaCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQ
bGF0Zm9ybUNvbnRleHQuaAppbmRleCAxNzBiNzZlLi4wMzUzZGY4IDEwMDY0NAotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4
dC5oCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICAvLyBEb2Vzbid0IGhhdmUgYW55IGVm
ZmVjdCBpZiB0aGlzIGlzIG5vdCB0aGUgY3VycmVudCBDb250ZXh0LgogICAgIHZvaWQgcmVsZWFz
ZUN1cnJlbnQoKTsKIAotICAgIFBsYXRmb3JtQ29udGV4dCBoYW5kbGUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBsYXRmb3JtQ29udGV4dCBoYW5kbGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0N1cnJlbnRDb250ZXh0KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKaW5kZXgg
ODM5MWU0Ny4uN2Y3YTU2NCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAKQEAgLTMyLDYgKzMyLDEw
IEBACiAjaW5jbHVkZSAiR0xYU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpZiBVU0UoRUdMKQorI2lu
Y2x1ZGUgIkVHTFN1cmZhY2UuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTAsMTAgKzU0LDE0IEBAIFBhc3NPd25QdHI8
R0xQbGF0Zm9ybVN1cmZhY2U+IEdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVPZmZzY3JlZW5TdXJm
YWNlKCkKIAogUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6
OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoKQogewotI2lmIFVTRShHTFgpICYmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorI2lmIFVTRShHTFgpCiAgICAg
T3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEdMWFRyYW5z
cG9ydFN1cmZhY2UoKSk7CisjZWxpZiBVU0UoRUdMKQorICAgIE93blB0cjxHTFBsYXRmb3JtU3Vy
ZmFjZT4gc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKCkp
OworI2VuZGlmCiAKLSAgICBpZiAoc3VyZmFjZS0+aGFuZGxlKCkpCisgICAgaWYgKHN1cmZhY2Ug
JiYgc3VyZmFjZS0+aGFuZGxlKCkgJiYgc3VyZmFjZS0+ZHJhd2FibGUoKSkKICAgICAgICAgcmV0
dXJuIHN1cmZhY2UucmVsZWFzZSgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVscGVyLmNwcCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVscGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmRjNDg3Ci0tLSAvZGV2
L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9F
R0xDb25maWdIZWxwZXIuY3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUdMQ29uZmlnSGVscGVyLmgiCisKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIFVTRShFR0wpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU2hhcmVkRUdMRGlzcGxheSogU2hhcmVkRUdMRGlzcGxheTo6bV9zdGF0aWNT
aGFyZWRFR0xEaXNwbGF5ID0gMDsKKwordm9pZCBTaGFyZWRFR0xEaXNwbGF5OjpkZXJlZigpCit7
CisgICAgaWYgKGRlcmVmQmFzZSgpKSB7CisgICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxh
eSA9IDA7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KK30KKworRUdMRGlzcGxheSBTaGFy
ZWRFR0xEaXNwbGF5OjpzaGFyZWRFR0xEaXNwbGF5KCkKK3sKKyAgICByZXR1cm4gbV9lZ2xEaXNw
bGF5OworfQorCitTaGFyZWRFR0xEaXNwbGF5OjpTaGFyZWRFR0xEaXNwbGF5KE5hdGl2ZVNoYXJl
ZERpc3BsYXkqIGRpc3BsYXkpCisgICAgOiBtX2VnbERpc3BsYXkoRUdMX05PX0RJU1BMQVkpCit7
CisgICAgaWYgKGRpc3BsYXkpCisgICAgICAgIG1fZWdsRGlzcGxheSA9IGVnbEdldERpc3BsYXko
cmVpbnRlcnByZXRfY2FzdDxFR0xOYXRpdmVEaXNwbGF5VHlwZT4oZGlzcGxheSkpOworICAgIGVs
c2UKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQ
TEFZKTsKKworICAgIGlmIChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJFR0xEaXNwbGF5IEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdMQm9vbGVhbiBzdWNjZXNzOworICAgIHN1Y2Nl
c3MgPSBlZ2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgMCwgMCk7CisKKyAgICBpZiAoc3VjY2Vz
cyAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1IoIkVHTEluaXRpYWxpemF0aW9uIGZh
aWxlZC5cbiIpOworICAgICAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKKyAgICB9
CisKKyAgICBzdWNjZXNzID0gZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKTsKKworICAgIGlmIChz
dWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBF
R0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBtX2VnbERpc3BsYXkgPSBF
R0xfTk9fRElTUExBWTsKKyAgICB9Cit9CisKK3ZvaWQgU2hhcmVkRUdMRGlzcGxheTo6Y2xlYW51
cCgpCit7CisgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZWdsTWFrZUN1cnJlbnQobV9lZ2xEaXNwbGF5LCBFR0xfTk9fU1VSRkFD
RSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKKyAgICBlZ2xUZXJtaW5hdGUobV9l
Z2xEaXNwbGF5KTsKKyAgICBtX2VnbERpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsKK30KKworU2hh
cmVkRUdMRGlzcGxheTo6flNoYXJlZEVHTERpc3BsYXkoKQoreworICAgIGNsZWFudXAoKTsKK30K
KworRUdMQ29uZmlnSGVscGVyOjpFR0xDb25maWdIZWxwZXIoTmF0aXZlU2hhcmVkRGlzcGxheSog
ZGlzcGxheSkKKyAgICA6IG1fcGJ1ZmZlcmZiQ29uZmlnKDApCisgICAgLCBtX3N1cmZhY2VDb250
ZXh0ZmJDb25maWcoMCkKK3sKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBTaGFyZWRFR0xEaXNwbGF5
OjpjcmVhdGUoZGlzcGxheSk7Cit9CisKK0VHTENvbmZpZ0hlbHBlcjo6fkVHTENvbmZpZ0hlbHBl
cigpCit7Cit9CisKK1BsYXRmb3JtRGlzcGxheSBFR0xDb25maWdIZWxwZXI6OmRpc3BsYXkoKQor
eworICAgIHJldHVybiBtX3NoYXJlZERpc3BsYXktPnNoYXJlZEVHTERpc3BsYXkoKTsKK30KKwor
RUdMQ29uZmlnIEVHTENvbmZpZ0hlbHBlcjo6cEJ1ZmZlckNvbnRleHRDb25maWcoKQoreworICAg
IGlmICghbV9wYnVmZmVyZmJDb25maWcpIHsKKyAgICAgICAgRUdMaW50IGF0dHJpYnV0ZUxpc3Rb
XSA9IHsKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICBFR0xfUkVOREVSQUJMRV9U
WVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisjZWxzZQorICAgICAgICAgICAgRUdMX1JFTkRFUkFC
TEVfVFlQRSwgRUdMX09QRU5HTF9CSVQsCisjZW5kaWYKKyAgICAgICAgICAgIEVHTF9SRURfU0la
RSwgOCwKKyAgICAgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAgICAgICAgRUdMX0JM
VUVfU0laRSwgOCwKKyAgICAgICAgICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDgsCisgICAgICAgICAg
ICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9Q
SVhNQVBfQklULAorICAgICAgICAgICAgRUdMX05PTkUKKyAgICAgICAgfTsKKyAgICAgICAgbV9w
YnVmZmVyZmJDb25maWcgPSBjcmVhdGVDb25maWcoYXR0cmlidXRlTGlzdCk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1fcGJ1ZmZlcmZiQ29uZmlnOworfQorCitFR0xDb25maWcgRUdMQ29uZmlnSGVs
cGVyOjpzdXJmYWNlQ29udGV4dENvbmZpZygpCit7CisgICAgaWYgKCFtX3N1cmZhY2VDb250ZXh0
ZmJDb25maWcpIHsKKyAgICAgICAgRUdMaW50IGF0dHJpYnV0ZUxpc3RbXSA9IHsKKyAgICAgICAg
ICAgIEVHTF9MRVZFTCwgMCwKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgICAgICAgICBFR0xf
UkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCisjZWxzZQorICAgICAgICAgICAg
RUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9CSVQsCisjZW5kaWYKKyAgICAgICAgICAg
IEVHTF9SRURfU0laRSwgOCwKKyAgICAgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAorICAgICAg
ICAgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICAgICAgICAgIEVHTF9TVEVOQ0lMX1NJWkUsIDgs
CisgICAgICAgICAgICBFR0xfQUxQSEFfU0laRSwgOCwKKyAgICAgICAgICAgIEVHTF9ERVBUSF9T
SVpFLCA4LAorICAgICAgICAgICAgRUdMX1NVUkZBQ0VfVFlQRSwgRUdMX1dJTkRPV19CSVQsCisg
ICAgICAgICAgICBFR0xfTk9ORQorICAgICAgICB9OworICAgICAgICBtX3N1cmZhY2VDb250ZXh0
ZmJDb25maWcgPSBjcmVhdGVDb25maWcoYXR0cmlidXRlTGlzdCk7CisgICAgfQorCisgICAgcmV0
dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKK30KKworRUdMaW50IEVHTENvbmZpZ0hlbHBl
cjo6bmF0aXZlVmlzdWFsSWQoY29uc3QgRUdMQ29uZmlnJiBjb25maWcpCit7CisgICAgaWYgKGRp
c3BsYXkoKSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBFR0xp
bnQgZWdsVmFsdWUgPSAwOworICAgIGVnbEdldENvbmZpZ0F0dHJpYihkaXNwbGF5KCksIGNvbmZp
ZywgRUdMX05BVElWRV9WSVNVQUxfSUQsICZlZ2xWYWx1ZSk7CisKKyAgICByZXR1cm4gZWdsVmFs
dWU7Cit9CisKK3ZvaWQgRUdMQ29uZmlnSGVscGVyOjpyZXNldCgpCit7CisgICAgbV9zdXJmYWNl
Q29udGV4dGZiQ29uZmlnID0gMDsKKyAgICBtX3BidWZmZXJmYkNvbmZpZyA9IDA7Cit9CisKK0VH
TENvbmZpZyBFR0xDb25maWdIZWxwZXI6OmNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRl
c1tdKQoreworICAgIGlmIChkaXNwbGF5KCkgPT0gRUdMX05PX0RJU1BMQVkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaW50IG51bUNvbmZpZ3M7CisgICAgRUdMQ29uZmlnIHJpZ2h0Q29uZmln
ID0gMDsKKworICAgIGlmICghZWdsQ2hvb3NlQ29uZmlnKGRpc3BsYXkoKSwgYXR0cmlidXRlcywg
JnJpZ2h0Q29uZmlnLCAxLCAmbnVtQ29uZmlncykpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVk
IHRvIGdldCBzdXBwb3J0ZWQgY29uZmlnaXJhdGlvbnMuXG4iKTsKKworICAgIGlmIChudW1Db25m
aWdzICE9IDEpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFR0xDaG9vc2VDb25maWcgZGlkbid0IHJl
dHVybiBleGFjdGx5IG9uZSBjb25maWcgYnV0ICglZCkuXG4iLCBudW1Db25maWdzKTsKKyAgICAg
ICAgcmlnaHRDb25maWcgPSAwOworICAgIH0KKworICAgIHJldHVybiByaWdodENvbmZpZzsKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVscGVyLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ0hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmYyY2YxODUKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ0hlbHBlci5oCkBAIC0w
LDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMQ29uZmlnSGVscGVy
X2gKKyNkZWZpbmUgRUdMQ29uZmlnSGVscGVyX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykgJiYgVVNFKEVHTCkKKworI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgRGlzcGxheSBOYXRpdmVTaGFyZWREaXNwbGF5Owor
CitjbGFzcyBTaGFyZWRFR0xEaXNwbGF5IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2Ugewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYXJlZEVHTERpc3BsYXkpOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkRUdMRGlzcGxheT4gY3JlYXRlKE5hdGl2ZVNoYXJl
ZERpc3BsYXkqIGRpc3BsYXkpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkRUdM
RGlzcGxheSkKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSA9IG5ldyBTaGFy
ZWRFR0xEaXNwbGF5KGRpc3BsYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0YXRp
Y1NoYXJlZEVHTERpc3BsYXktPnJlZigpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0
YXRpY1NoYXJlZEVHTERpc3BsYXkpOworICAgIH0KKworICAgIHZvaWQgZGVyZWYoKTsKKyAgICBF
R0xEaXNwbGF5IHNoYXJlZEVHTERpc3BsYXkoKTsKKworcHJvdGVjdGVkOgorICAgIFNoYXJlZEVH
TERpc3BsYXkoTmF0aXZlU2hhcmVkRGlzcGxheSopOworICAgIHZvaWQgY2xlYW51cCgpOworICAg
IHZpcnR1YWwgflNoYXJlZEVHTERpc3BsYXkoKTsKKworICAgIHN0YXRpYyBTaGFyZWRFR0xEaXNw
bGF5KiBtX3N0YXRpY1NoYXJlZEVHTERpc3BsYXk7CisgICAgRUdMRGlzcGxheSBtX2VnbERpc3Bs
YXk7Cit9OworCitjbGFzcyBFR0xDb25maWdIZWxwZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEVHTENvbmZpZ0hlbHBlcik7CisKK3B1YmxpYzoKKyAgICBFR0xDb25maWdIZWxwZXIoTmF0
aXZlU2hhcmVkRGlzcGxheSogPSAwKTsKKyAgICB2aXJ0dWFsIH5FR0xDb25maWdIZWxwZXIoKTsK
KyAgICBQbGF0Zm9ybURpc3BsYXkgZGlzcGxheSgpOworICAgIHZpcnR1YWwgRUdMQ29uZmlnIHBC
dWZmZXJDb250ZXh0Q29uZmlnKCk7CisgICAgdmlydHVhbCBFR0xDb25maWcgc3VyZmFjZUNvbnRl
eHRDb25maWcoKTsKKyAgICBFR0xpbnQgbmF0aXZlVmlzdWFsSWQoY29uc3QgRUdMQ29uZmlnJik7
CisgICAgdm9pZCByZXNldCgpOworCitwcml2YXRlOgorICAgIEVHTENvbmZpZyBjcmVhdGVDb25m
aWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSk7CisKK3Byb3RlY3RlZDoKKyAgICBFR0xDb25maWcg
bV9wYnVmZmVyZmJDb25maWc7CisgICAgRUdMQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZp
ZzsKKyAgICBSZWZQdHI8U2hhcmVkRUdMRGlzcGxheT4gbV9zaGFyZWREaXNwbGF5OworfTsKKwor
fQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yMDYwZTNjCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcApAQCAtMCww
ICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkVHTENvbnRleHQuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykg
JiYgVVNFKEVHTCkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgSEFW
RShHTFgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRleHRBdHRyaWJ1dGVzW10gPSB7CisjaWYgVVNF
KE9QRU5HTF9FU18yKQorICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLAorI2VuZGlm
CisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBjb25zdCBFR0xpbnQgY29udGV4dFJvYnVzdG5l
c3NBdHRyaWJ1dGVzW10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9DT05URVhU
X0NMSUVOVF9WRVJTSU9OLCAyLAorI2VuZGlmCisgICAgRUdMX0NPTlRFWFRfT1BFTkdMX1JFU0VU
X05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQsCisgICAgRUdMX0xPU0VfQ09OVEVYVF9PTl9SRVNF
VF9FWFQsCisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBib29sIGlzUm9idXN0bmVzc0V4dFN1
cHBvcnRlZChFR0xEaXNwbGF5IGRpc3BsYXkpCit7CisgICAgc3RhdGljIGJvb2wgcXVlcnlEb25l
ID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaXNFR0xFWFRzdXBwb3J0ZWQgPSBmYWxzZTsKKwor
ICAgIGlmICghcXVlcnlEb25lKSB7CisgICAgICAgIHF1ZXJ5RG9uZSA9IHRydWU7CisgICAgICAg
IFN0cmluZyBzdXBwb3J0ZWRFeHRlbnNpb25zID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oZWdsUXVlcnlTdHJpbmcoZGlzcGxheSwgRUdMX0VYVEVOU0lPTlMpKTsKKyAgICAgICAgaWYg
KCFzdXBwb3J0ZWRFeHRlbnNpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgc3VwcG9ydGVk
RXh0ZW5zaW9ucy5hcHBlbmQoIiAiKTsKKyAgICAgICAgICAgIGlzRUdMRVhUc3VwcG9ydGVkID0g
c3VwcG9ydGVkRXh0ZW5zaW9ucy5jb250YWlucygiRUdMX0VYVF9jcmVhdGVfY29udGV4dF9yb2J1
c3RuZXNzICIpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGlzRUdMRVhUc3VwcG9y
dGVkOworfQorCitFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OkVHTEN1cnJlbnRDb250ZXh0V3Jh
cHBlcigpCisgICAgOiBHTFBsYXRmb3JtQ29udGV4dCgpCit7Cit9CisKKy8vIEZJWE1FOiBUaGlz
IGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdGlsbCB3ZSBhcmUgYWJsZSB0byBidWlsZCBldmFz
IHdpdGggRUdMIHN1cHBvcnQKK1BsYXRmb3JtQ29udGV4dCBFR0xDdXJyZW50Q29udGV4dFdyYXBw
ZXI6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7
Cit9CisKK0VHTE9mZlNjcmVlbkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNvbnRleHQoKQorICAgIDog
R0xQbGF0Zm9ybUNvbnRleHQoKQorICAgICwgbV9kaXNwbGF5KDApCit7Cit9CisKK2Jvb2wgRUdM
T2ZmU2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkK
K3sKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICgh
ZWdsQmluZEFQSShlZ2xBUElWZXJzaW9uKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIG1fZGlzcGxheSA9IHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKTsK
KyAgICBpZiAoIW1fZGlzcGxheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRUdMQ29u
ZmlnIGNvbmZpZyA9IHN1cmZhY2UtPmNvbmZpZ3VyYXRpb24oKTsKKyAgICBpZiAoIWNvbmZpZykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvbmZpZykgeworICAgICAgICBpZiAo
aXNSb2J1c3RuZXNzRXh0U3VwcG9ydGVkKG1fZGlzcGxheSkpCisgICAgICAgICAgICBtX2NvbnRl
eHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBFR0xfTk9fQ09O
VEVYVCwgY29udGV4dFJvYnVzdG5lc3NBdHRyaWJ1dGVzKTsKKworICAgICAgICBpZiAoIW1fY29u
dGV4dEhhbmRsZSAmJiBtX2NvbnRleHRIYW5kbGUgIT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAg
ICAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHRIYW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBF
R0xfTk9fQ09OVEVYVCwgY29udGV4dEF0dHJpYnV0ZXMpOworCisgICAgICAgIGlmIChtX2NvbnRl
eHRIYW5kbGUgJiYgbV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05URVhUKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitFR0xPZmZT
Y3JlZW5Db250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCgpCit7Cit9CisKK2Jvb2wgRUdMT2Zm
U2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Y29udGV4dEhhbmRsZSA9PSBlZ2xHZXRDdXJyZW50Q29udGV4dCgpOworfQorCitib29sIEVHTE9m
ZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1
cmZhY2UpCit7CisgICAgaWYgKCFlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFlZ2xNYWtlQ3VycmVu
dChtX2Rpc3BsYXksIHN1cmZhY2UtPmRyYXdhYmxlKCksIHN1cmZhY2UtPmRyYXdhYmxlKCksIG1f
Y29udGV4dEhhbmRsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb250
ZXh0IGN1cnJlbnQuKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworCisgICAgICAgIGlmIChtX3Jl
c2V0TG9zdENvbnRleHQgJiYgZWdsR2V0RXJyb3IoKSA9PSBFR0xfQ09OVEVYVF9MT1NUKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkxvc3QgY3VycmVudCBjb250ZXh0LlxuIik7CisgICAgICAg
ICAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5D
b250ZXh0OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKK3sKKyAgICBlZ2xNYWtlQ3VycmVudCht
X2Rpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQp
OworfQorCit2b2lkIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMoKQoreworICAg
IGlmIChtX2NvbnRleHRIYW5kbGUpCisgICAgICAgIGVnbERlc3Ryb3lDb250ZXh0KG1fZGlzcGxh
eSwgbV9jb250ZXh0SGFuZGxlKTsKKworICAgIG1fY29udGV4dEhhbmRsZSA9IDA7CisgICAgbV9k
aXNwbGF5ID0gMDsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KCkKK3sK
KyAgICBHTFBsYXRmb3JtQ29udGV4dDo6ZGVzdHJveSgpOworICAgIGZyZWVSZXNvdXJjZXMoKTsK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTgwNzkzZQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCkBAIC0wLDAgKzEsNjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMQ29udGV4dF9oCisjZGVmaW5lIEVHTENv
bnRleHRfaAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoRUdMKQor
CisjaW5jbHVkZSAiR0xQbGF0Zm9ybUNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIgOiBwdWJsaWMgR0xQbGF0Zm9ybUNvbnRl
eHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik7
CisKK3B1YmxpYzoKKyAgICBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKTsKKyAgICBQbGF0Zm9y
bUNvbnRleHQgaGFuZGxlKCkgY29uc3Q7CisgICAgdmlydHVhbCB+RUdMQ3VycmVudENvbnRleHRX
cmFwcGVyKCkgeyB9Cit9OworCitjbGFzcyBFR0xPZmZTY3JlZW5Db250ZXh0IDogcHVibGljIEdM
UGxhdGZvcm1Db250ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFR0xPZmZTY3JlZW5D
b250ZXh0KTsKKworcHVibGljOgorICAgIEVHTE9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICB2aXJ0
dWFsIH5FR0xPZmZTY3JlZW5Db250ZXh0KCk7CisgICAgYm9vbCBpbml0aWFsaXplKEdMUGxhdGZv
cm1TdXJmYWNlKik7CisgICAgYm9vbCBwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxhdGZvcm1TdXJm
YWNlKik7CisgICAgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCk7CisgICAgdm9pZCBkZXN0
cm95KCk7CisgICAgYm9vbCBpc0N1cnJlbnRDb250ZXh0KCkgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBmcmVlUmVzb3VyY2VzKCk7CisgICAgRUdMRGlzcGxheSBtX2Rpc3BsYXk7Cit9Owor
Cit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYTMwNmEKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwCkBAIC0w
LDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRUdMU3VyZmFjZS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KSAmJiBVU0UoRUdMKSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJm
YWNlKCkKKyAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKK3sKKyAgICBtX25hdGl2ZVJlc291cmNl
ID0gYWRvcHRQdHIobmV3IE5hdGl2ZU9mZlNjcmVlbldpbmRvdygpKTsKKyAgICBtX2VnbENvbmZp
Z0hlbHBlciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdIZWxwZXIobV9uYXRpdmVSZXNvdXJjZS0+
bmF0aXZlU2hhcmVkRGlzcGxheSgpKSk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gbV9lZ2xDb25m
aWdIZWxwZXItPmRpc3BsYXkoKTsKKworICAgIGlmIChtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05P
X0RJU1BMQVkpIHsKKyAgICAgICAgbV9lZ2xDb25maWdIZWxwZXIgPSBudWxscHRyOworICAgICAg
ICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEVHTENvbmZpZyBjb25maWcgPSBtX2VnbENvbmZpZ0hlbHBlci0+c3VyZmFjZUNvbnRleHRD
b25maWcoKTsKKyAgICBpZiAoIWNvbmZpZykgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fbmF0aXZlUmVzb3VyY2UtPnNldFZpc3VhbElk
KG1fZWdsQ29uZmlnSGVscGVyLT5uYXRpdmVWaXN1YWxJZChjb25maWcpKSkgeworICAgICAgICBk
ZXN0cm95KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX25hdGl2ZVJlc291cmNl
LT5jcmVhdGVPZmZzY3JlZW5XaW5kb3coJm1fYnVmZmVySGFuZGxlKTsKKworICAgIGlmICghbV9i
dWZmZXJIYW5kbGUpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9kcmF3YWJsZSA9IGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UobV9zaGFyZWREaXNw
bGF5LCBtX2VnbENvbmZpZ0hlbHBlci0+c3VyZmFjZUNvbnRleHRDb25maWcoKSwgKEVHTE5hdGl2
ZVdpbmRvd1R5cGUpbV9idWZmZXJIYW5kbGUsIDApOworCisgICAgaWYgKG1fZHJhd2FibGUgPT0g
RUdMX05PX1NVUkZBQ0UpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEVH
TCBzdXJmYWNlKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBkZXN0cm95KCk7Cisg
ICAgfQorfQorCitFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjp+RUdMV2luZG93VHJhbnNwb3J0
U3VyZmFjZSgpCit7Cit9CisKK1BsYXRmb3JtU3VyZmFjZUNvbmZpZyBFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9lZ2xDb25maWdIZWxw
ZXItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0
U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmICghbV9kcmF3YWJsZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRUdMQm9vbGVhbiBzdWNjZXNzID0gZWdsQmluZEFQSShlZ2xBUElWZXJz
aW9uKTsKKworICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAg
ICBkZXN0cm95KCk7CisgICAgfQorCisgICAgc3VjY2VzcyA9IGVnbFN3YXBCdWZmZXJzKG1fc2hh
cmVkRGlzcGxheSwgbV9kcmF3YWJsZSk7CisKKyAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkg
eworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBTd2FwQnVmZmVycyglZCkuXG4iLCBlZ2xH
ZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKwordm9pZCBFR0xXaW5k
b3dUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKK3sKKyAgICBtX25hdGl2ZVJlc291cmNlLT5k
ZXN0cm95V2luZG93KG1fYnVmZmVySGFuZGxlKTsKKyAgICBmcmVlRUdMUmVzb3VyY2VzKCk7Cisg
ICAgbV9uYXRpdmVSZXNvdXJjZSA9IG51bGxwdHI7CisgICAgbV9lZ2xDb25maWdIZWxwZXIgPSBu
dWxscHRyOworICAgIG1fYnVmZmVySGFuZGxlID0gMDsKK30KKwordm9pZCBFR0xXaW5kb3dUcmFu
c3BvcnRTdXJmYWNlOjpmcmVlRUdMUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAobV9kcmF3YWJsZSA9
PSBFR0xfTk9fU1VSRkFDRSB8fCBtX3NoYXJlZERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEVHTEJvb2xlYW4gZWdsUmVzdWx0ID0gZWdsQmluZEFQSShl
Z2xBUElWZXJzaW9uKTsKKworICAgIGlmIChlZ2xSZXN1bHQgIT0gRUdMX1RSVUUpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLlxuIiwgZWdsR2V0RXJyb3Io
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlZ2xEZXN0cm95U3VyZmFjZShtX3No
YXJlZERpc3BsYXksIG1fZHJhd2FibGUpOworICAgIG1fZHJhd2FibGUgPSBFR0xfTk9fU1VSRkFD
RTsKK30KKwordm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25z
dCBJbnRSZWN0JiBuZXdSZWN0KQoreworICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRy
eShuZXdSZWN0KTsKKyAgICBtX25hdGl2ZVJlc291cmNlLT5yZVNpemVXaW5kb3cobmV3UmVjdCwg
bV9idWZmZXJIYW5kbGUpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmggU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzhhOWY2Ci0tLSAvZGV2L251bGwKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFR0xTdXJmYWNl
X2gKKyNkZWZpbmUgRUdMU3VyZmFjZV9oCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIFVTRShFR0wpICYmIFVTRShHUkFQSElDU19TVVJGQUNFKQorCisjaW5jbHVkZSAiRUdM
Q29uZmlnSGVscGVyLmgiCisjaW5jbHVkZSAiR0xQbGF0Zm9ybVN1cmZhY2UuaCIKKworI2luY2x1
ZGUgPGdseC9YMTFXaW5kb3dSZXNvdXJjZXMuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3R5cGVkZWYgWDExT2ZmU2NyZWVuV2luZG93IE5hdGl2ZU9mZlNjcmVlbldpbmRvdzsKKworLy8g
Q29udGVudHMgb2YgdGhlIHN1cmZhY2UgYXJlIGJhY2tlZCBieSBuYXRpdmUgd2luZG93LgorY2xh
c3MgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk7CisK
K3B1YmxpYzoKKyAgICBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgdmlydHVhbCB+
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSgpOworICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBj
b25maWd1cmF0aW9uKCk7CisgICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0KTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBkZXN0cm95KCk7CisKK3By
aXZhdGU6CisgICAgdm9pZCBmcmVlRUdMUmVzb3VyY2VzKCk7CisgICAgT3duUHRyPE5hdGl2ZU9m
ZlNjcmVlbldpbmRvdz4gbV9uYXRpdmVSZXNvdXJjZTsKKyAgICBPd25QdHI8RUdMQ29uZmlnSGVs
cGVyPiBtX2VnbENvbmZpZ0hlbHBlcjsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgv
R0xYU3VyZmFjZS5jcHAKaW5kZXggOTZhMGFiOS4uYzljZDhkMiAxMDA2NDQKLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2Uu
Y3BwCkBAIC0zNiw3ICszNiw3IEBAIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNb
XSA9IHsgR0xYX1BCVUZGRVJfV0lEVEgsIDEsIEdMWF9QQlVGRkVSX0hFSUdICiBHTFhUcmFuc3Bv
cnRTdXJmYWNlOjpHTFhUcmFuc3BvcnRTdXJmYWNlKCkKICAgICA6IFgxMU9mZlNjcmVlbldpbmRv
dygpCiB7Ci0gICAgY3JlYXRlT2Zmc2NyZWVuV2luZG93KCk7CisgICAgY3JlYXRlT2Zmc2NyZWVu
V2luZG93KCZtX2J1ZmZlckhhbmRsZSk7CiAgICAgbV9kcmF3YWJsZSA9IG1fYnVmZmVySGFuZGxl
OwogfQogCkBAIC00OSw2ICs0OSwxMiBAQCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNw
b3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCiAgICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2Vz
LT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwogfQogCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6
OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgR0xQbGF0Zm9ybVN1
cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOworICAgIHJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBt
X2RyYXdhYmxlKTsKK30KKwogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygp
CiB7CiAgICAgaWYgKCFtX2RyYXdhYmxlKQpAQCAtNjYsNyArNzIsNyBAQCB2b2lkIEdMWFRyYW5z
cG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKIAogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpk
ZXN0cm95KCkKIHsKLSAgICBkZXN0cm95V2luZG93KCk7CisgICAgZGVzdHJveVdpbmRvdyhtX2J1
ZmZlckhhbmRsZSk7CiAgICAgbV9idWZmZXJIYW5kbGUgPSAwOwogfQogCmRpZmYgLS1naXQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5o
CmluZGV4IDRlODc2ODUuLjBkODRjMzQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCkBAIC00Myw2ICs0Myw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HTFhUcmFuc3BvcnRTdXJmYWNlKCk7CiAgICAgUGxh
dGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKTsKICAgICB2b2lkIHN3YXBCdWZmZXJz
KCk7CisgICAgdm9pZCBzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBkZXN0
cm95KCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaAppbmRleCBj
MTczNTU3Li5jYmZjYzM5IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgKQEAgLTUx
LDYgKzUxLDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFNoYXJlZFgxMVJlc291cmNlczo6
eDExRGlzcGxheSgpOwogICAgIH0KIAorICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9WaXN1YWxJbmZvKQorICAgICAgICAgICAgc3VyZmFjZUNvbnRl
eHRDb25maWcoKTsKKworICAgICAgICByZXR1cm4gbV9WaXN1YWxJbmZvOworICAgIH0KKwogICAg
IHZpcnR1YWwgR0xYRkJDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQogICAgIHsKICAgICAg
ICAgaWYgKCFtX3BidWZmZXJmYkNvbmZpZykgewpAQCAtOTgsMTEgKzEwNiwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CiAgICAgfQogCi1wcml2
YXRlOgorcHJvdGVjdGVkOgogICAgIFNoYXJlZEdMWFJlc291cmNlcygpCiAgICAgICAgIDogU2hh
cmVkWDExUmVzb3VyY2VzKCkKICAgICAgICAgLCBtX3BidWZmZXJmYkNvbmZpZygwKQogICAgICAg
ICAsIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZygwKQorICAgICAgICAsIG1fVmlzdWFsSW5mbygw
KQogICAgIHsKICAgICB9CiAKQEAgLTE2MCwxMCArMTY5LDE2IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgaWYgKG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykKICAgICAgICAgICAgIG1fc3VyZmFjZUNv
bnRleHRmYkNvbmZpZyA9IDA7CisKKyAgICAgICAgaWYgKG1fVmlzdWFsSW5mbykgeworICAgICAg
ICAgICAgWEZyZWUobV9WaXN1YWxJbmZvKTsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IDA7
CisgICAgICAgIH0KICAgICB9CiAKICAgICBHTFhGQkNvbmZpZyBtX3BidWZmZXJmYkNvbmZpZzsK
ICAgICBHTFhGQkNvbmZpZyBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CisgICAgWFZpc3VhbElu
Zm8qIG1fVmlzdWFsSW5mbzsKIH07CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2Vz
LmNwcAppbmRleCA2MDI5M2U3Li5jYWIyMmZiIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNv
dXJjZXMuY3BwCkBAIC0yOCw3ICsyOCw5IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCiAKKyNpZiBVU0UoR0xYKQogI2luY2x1ZGUgIkdMWFdpbmRvd1Jlc291cmNlcy5oIgor
I2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMjYgKzM5LDMwIEBAIFBsYXRm
b3JtU2hhcmVkUmVzb3VyY2VzKiBTaGFyZWRYMTFSZXNvdXJjZXM6Om1fc3RhdGljU2hhcmVkUmVz
b3VyY2UgPSAwOwogWDExT2ZmU2NyZWVuV2luZG93OjpYMTFPZmZTY3JlZW5XaW5kb3coKQogICAg
IDogR0xQbGF0Zm9ybVN1cmZhY2UoKQogICAgICwgbV9zaGFyZWRSZXNvdXJjZXMoMCkKKyAgICAs
IG1fY29uZmlnVmlzdWFsSW5mbygwKQogewogICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gUGxhdGZv
cm1TaGFyZWRSZXNvdXJjZXM6OmNyZWF0ZSgpOwogCiAgICAgaWYgKCFtX3NoYXJlZFJlc291cmNl
cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9zaGFyZWREaXNwbGF5ID0gbV9zaGFyZWRSZXNv
dXJjZXMtPm5hdGl2ZURpc3BsYXkoKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJl
c291cmNlcy0+eDExRGlzcGxheSgpOwogfQogCiBYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFPZmZT
Y3JlZW5XaW5kb3coKQogeworICAgIGlmIChtX2NvbmZpZ1Zpc3VhbEluZm8pIHsKKyAgICAgICAg
WEZyZWUobV9jb25maWdWaXN1YWxJbmZvKTsKKyAgICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0g
MDsKKyAgICB9CiB9CiAKLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpzZXRHZW9tZXRyeShjb25z
dCBJbnRSZWN0JiBuZXdSZWN0KQordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnJlU2l6ZVdpbmRv
dyhjb25zdCBJbnRSZWN0JiBuZXdSZWN0LCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB3aW5kb3dJZCkK
IHsKLSAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7Ci0gICAgWFJl
c2l6ZVdpbmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCBtX2J1ZmZlckhhbmRs
ZSwgbmV3UmVjdC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKKyAgICBYUmVzaXplV2luZG93
KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIHdpbmRvd0lkLCBuZXdSZWN0LndpZHRo
KCksIG5ld1JlY3QuaGVpZ2h0KCkpOwogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3Jl
YXRlT2Zmc2NyZWVuV2luZG93KCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZz
Y3JlZW5XaW5kb3coUGxhdGZvcm1CdWZmZXJIYW5kbGUqIGhhbmRsZUlkKQogewogICAgIGlmICgh
bV9zaGFyZWRSZXNvdXJjZXMpCiAgICAgICAgIHJldHVybjsKQEAgLTY1LDE0ICs3MSwxMSBAQCB2
b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCkKICAgICBpZiAo
IWRpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBj
b25maWcgPSBtX3NoYXJlZFJlc291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKLQotICAg
IGlmICghY29uZmlnKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGEg
dmFsaWQgY29uZmlnaXJhdGlvbi4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQorI2lmIFVT
RShHTFgpCiAgICAgWFZpc3VhbEluZm8qIHZpc0luZm8gPSBtX3NoYXJlZFJlc291cmNlcy0+dmlz
dWFsSW5mbygpOworI2Vsc2UKKyAgICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9IG1fY29uZmlnVmlz
dWFsSW5mbzsKKyNlbmRpZgogCiAgICAgaWYgKCF2aXNJbmZvKSB7CiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGZpbmQgdmFsaWQgWFZpc3VhbCIpOwpAQCAtODgsMjQgKzkxLDI3IEBAIHZv
aWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3coKQogICAgIGF0dHJp
YnV0ZS5iYWNrZ3JvdW5kX3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKICAgICBhdHRy
aWJ1dGUuYm9yZGVyX3BpeGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKICAgICBhdHRyaWJ1
dGUuY29sb3JtYXAgPSBjbWFwOwotICAgIG1fYnVmZmVySGFuZGxlID0gWENyZWF0ZVdpbmRvdyhk
aXNwbGF5LCB4V2luZG93LCAwLCAwLCAxLCAxLCAwLCB2aXNJbmZvLT5kZXB0aCwgSW5wdXRPdXRw
dXQsIHZpc0luZm8tPnZpc3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xv
cm1hcCwgJmF0dHJpYnV0ZSk7CisgICAgUGxhdGZvcm1CdWZmZXJIYW5kbGUgdGVtcEhhbmRsZUlk
OworICAgIHRlbXBIYW5kbGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwg
MCwgMSwgMSwgMCwgdmlzSW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXNJbmZvLT52aXN1YWws
IENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOwog
Ci0gICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgeworICAgIGlmICghdGVtcEhhbmRsZUlkKSB7CiAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93Iik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBYU2V0V2luZG93QmFja2dyb3VuZFBpeG1hcChk
aXNwbGF5LCBtX2J1ZmZlckhhbmRsZSwgMCk7Ci0gICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93
KGRpc3BsYXksIG1fYnVmZmVySGFuZGxlLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisgICAg
WFNldFdpbmRvd0JhY2tncm91bmRQaXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKKyAg
ICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkLCBDb21wb3Np
dGVSZWRpcmVjdE1hbnVhbCk7CisgICAgKmhhbmRsZUlkID0gdGVtcEhhbmRsZUlkOworICAgIG1f
YnVmZmVySGFuZGxlID0gdGVtcEhhbmRsZUlkOwogCiAgICAgaWYgKG1fc2hhcmVkUmVzb3VyY2Vz
LT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkKLSAgICAgICAgWE1hcFdpbmRvdyhkaXNw
bGF5LCBtX2J1ZmZlckhhbmRsZSk7CisgICAgICAgIFhNYXBXaW5kb3coZGlzcGxheSwgdGVtcEhh
bmRsZUlkKTsKIAogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdygp
Cit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdyhQbGF0Zm9ybUJ1ZmZlckhh
bmRsZSB3aW5kb3dJZCkKIHsKLSAgICBpZiAoIW1fYnVmZmVySGFuZGxlKQorICAgIGlmICghd2lu
ZG93SWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95
KCk7CkBAIC0xMTMsOSArMTE5LDY3IEBAIHZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95
V2luZG93KCkKICAgICBpZiAoIWRpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFhEZXN0
cm95V2luZG93KGRpc3BsYXksIG1fYnVmZmVySGFuZGxlKTsKLSAgICBtX2J1ZmZlckhhbmRsZSA9
IDA7CisgICAgWERlc3Ryb3lXaW5kb3coZGlzcGxheSwgd2luZG93SWQpOworfQorCitEaXNwbGF5
KiBYMTFPZmZTY3JlZW5XaW5kb3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkoKQoreworICAgIHJldHVy
biBtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpOworfQorCisjaWYgVVNFKEVHTCkKK2Jv
b2wgWDExT2ZmU2NyZWVuV2luZG93OjpzZXRWaXN1YWxJZChjb25zdCBFR0xpbnQgaWQpCit7Cisg
ICAgVmlzdWFsSUQgdmlzdWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1YWxJRD4oaWQpOworCisgICAg
aWYgKCF2aXN1YWxJZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRUdMIGhhcyBz
dWdnZXN0ZWQgYSB2aXN1YWwgaWQsIHNvIGdldCB0aGUgcmVzdCBvZiB0aGUgdmlzdWFsIGluZm8g
Zm9yIHRoYXQgaWQuCisgICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOworICAgIG1l
bXNldCgmdmlzdWFsSW5mb1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKKyAgICB2
aXN1YWxJbmZvVGVtcGxhdGUudmlzdWFsaWQgPSB2aXN1YWxJZDsKKworICAgIFhWaXN1YWxJbmZv
KiBjaG9zZW5WaXN1YWxJbmZvOworICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKKyAgICBjaG9z
ZW5WaXN1YWxJbmZvID0gWEdldFZpc3VhbEluZm8obV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3Bs
YXkoKSwgVmlzdWFsSURNYXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7
CisgICAgaWYgKGNob3NlblZpc3VhbEluZm8pIHsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
KyAgICAgICAgaWYgKG1fc2hhcmVkUmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0
ZWQoKSkgeworICAgICAgICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJG
aW5kVmlzdWFsRm9ybWF0KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIGNob3NlblZp
c3VhbEluZm8tPnZpc3VhbCk7CisgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGly
ZWN0LmFscGhhTWFzayA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbmZpZ1Zpc3VhbEluZm8g
PSBjaG9zZW5WaXN1YWxJbmZvOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKGNob3NlblZpc3VhbEluZm8t
PmRlcHRoID09IDMyKSB7CisgICAgICAgICAgICBtX2NvbmZpZ1Zpc3VhbEluZm8gPSBjaG9zZW5W
aXN1YWxJbmZvOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIW1fY29uZmlnVmlzdWFsSW5mbykgeworICAgICAgICBtZW1zZXQoJnZpc3VhbElu
Zm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7CisgICAgICAgIFhWaXN1YWxJbmZv
KiBtYXRjaGluZ1Zpc3VhbHM7CisgICAgICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKKworICAg
ICAgICB2aXN1YWxJbmZvVGVtcGxhdGUuZGVwdGggPSBjaG9zZW5WaXN1YWxJbmZvLT5kZXB0aDsK
KyAgICAgICAgbWF0Y2hpbmdWaXN1YWxzID0gWEdldFZpc3VhbEluZm8obV9zaGFyZWRSZXNvdXJj
ZXMtPngxMURpc3BsYXkoKSwgVmlzdWFsRGVwdGhNYXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAm
bWF0Y2hpbmdDb3VudCk7CisKKyAgICAgICAgaWYgKG1hdGNoaW5nVmlzdWFscykgeworICAgICAg
ICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0gJm1hdGNoaW5nVmlzdWFsc1swXTsKKyAgICAgICAg
ICAgIFhGcmVlKG1hdGNoaW5nVmlzdWFscyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9jb25maWdWaXN1YWxJbmZvKQorICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBYVmlzdWFsIEluZm8uXG4iKTsKKworICAgIHJl
dHVybiBmYWxzZTsKIH0KKyNlbmRpZgogCiB9CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmggU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNl
cy5oCmluZGV4IGIyNWIyYWMuLjljMDgwYzMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJj
ZXMuaApAQCAtNDAsMTMgKzQwLDMwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIFVT
RShHTFgpCiBjbGFzcyBTaGFyZWRHTFhSZXNvdXJjZXM7CiB0eXBlZGVmIFNoYXJlZEdMWFJlc291
cmNlcyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlczsKKyNlbGlmIFVTRShFR0wpCitjbGFzcyBTaGFy
ZWRYMTFSZXNvdXJjZXM7Cit0eXBlZGVmIFNoYXJlZFgxMVJlc291cmNlcyBQbGF0Zm9ybVNoYXJl
ZFJlc291cmNlczsKKyNlbmRpZgogCiBjbGFzcyBTaGFyZWRYMTFSZXNvdXJjZXMgOiBwdWJsaWMg
V1RGOjpSZWZDb3VudGVkQmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhcmVkWDEx
UmVzb3VyY2VzKTsKIAogcHVibGljOgorI2lmIFVTRShFR0wpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBpZiAo
IW1fc3RhdGljU2hhcmVkUmVzb3VyY2UpCisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291
cmNlID0gbmV3IFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UtPnJlZigpOworCisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihtX3N0YXRpY1NoYXJlZFJlc291cmNlKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHZv
aWQgZGVyZWYoKQogICAgIHsKICAgICAgICAgaWYgKGRlcmVmQmFzZSgpKSB7CkBAIC05NCwyOSAr
MTExLDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fd2luZG93OwogICAgIH0KIAotICAg
IFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9WaXN1YWxJ
bmZvKQotICAgICAgICAgICAgc3VyZmFjZUNvbnRleHRDb25maWcoKTsKLQotICAgICAgICByZXR1
cm4gbV9WaXN1YWxJbmZvOwotICAgIH0KLQogICAgIGJvb2wgaXNYUmVuZGVyRXh0ZW5zaW9uU3Vw
cG9ydGVkKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lv
bjsKICAgICB9CiAKLSAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBwQnVmZmVyQ29u
dGV4dENvbmZpZygpID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBzdXJm
YWNlQ29udGV4dENvbmZpZygpID0gMDsKLSAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheSBuYXRp
dmVEaXNwbGF5KCkgPSAwOwotCiBwcm90ZWN0ZWQ6CiAgICAgU2hhcmVkWDExUmVzb3VyY2VzKCkK
ICAgICAgICAgOiBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbihmYWxzZSkKICAgICAgICAgLCBt
X3dpbmRvdygwKQogICAgICAgICAsIG1fZGlzcGxheSgwKQotICAgICAgICAsIG1fVmlzdWFsSW5m
bygwKQogICAgIHsKICAgICB9CiAKQEAgLTEzMSwxMSArMTM1LDYgQEAgcHJvdGVjdGVkOgogICAg
ICAgICAgICAgbV93aW5kb3cgPSAwOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fVmlzdWFs
SW5mbykgewotICAgICAgICAgICAgWEZyZWUobV9WaXN1YWxJbmZvKTsKLSAgICAgICAgICAgIG1f
VmlzdWFsSW5mbyA9IDA7Ci0gICAgICAgIH0KLQogICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlz
cGxheSk7CiAgICAgICAgIG1fZGlzcGxheSA9IDA7CiAgICAgfQpAQCAtMTQ0LDcgKzE0Myw2IEBA
IHByb3RlY3RlZDoKICAgICBib29sIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwogICAgIFdp
bmRvdyBtX3dpbmRvdzsKICAgICBEaXNwbGF5KiBtX2Rpc3BsYXk7Ci0gICAgWFZpc3VhbEluZm8q
IG1fVmlzdWFsSW5mbzsKIH07CiAKIGNsYXNzIFgxMU9mZlNjcmVlbldpbmRvdyA6IHB1YmxpYyBH
TFBsYXRmb3JtU3VyZmFjZSB7CkBAIC0xNTMsMTIgKzE1MSwxNyBAQCBjbGFzcyBYMTFPZmZTY3Jl
ZW5XaW5kb3cgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewogcHVibGljOgogICAgIFgxMU9m
ZlNjcmVlbldpbmRvdygpOwogICAgIHZpcnR1YWwgflgxMU9mZlNjcmVlbldpbmRvdygpOwotICAg
IHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgY3JlYXRlT2Zmc2Ny
ZWVuV2luZG93KCk7Ci0gICAgdm9pZCBkZXN0cm95V2luZG93KCk7CisgICAgdm9pZCBjcmVhdGVP
ZmZzY3JlZW5XaW5kb3coUGxhdGZvcm1CdWZmZXJIYW5kbGUqKTsKKyAgICB2b2lkIGRlc3Ryb3lX
aW5kb3coUGxhdGZvcm1CdWZmZXJIYW5kbGUpOworICAgIHZvaWQgcmVTaXplV2luZG93KGNvbnN0
IEludFJlY3QmLCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSk7CisgICAgRGlzcGxheSogbmF0aXZlU2hh
cmVkRGlzcGxheSgpOworI2lmIFVTRShFR0wpCisgICAgYm9vbCBzZXRWaXN1YWxJZChjb25zdCBF
R0xpbnQpOworI2VuZGlmCiAKIHByb3RlY3RlZDoKICAgICBSZWZQdHI8UGxhdGZvcm1TaGFyZWRS
ZXNvdXJjZXM+IG1fc2hhcmVkUmVzb3VyY2VzOworICAgIFhWaXN1YWxJbmZvKiBtX2NvbmZpZ1Zp
c3VhbEluZm87CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21h
a2UgU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKaW5kZXggODAwYTcwOS4uZmUyMDJlZiAx
MDA2NDQKLS0tIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCisrKyBTb3VyY2UvY21ha2Uv
T3B0aW9uc0VmbC5jbWFrZQpAQCAtMTc1LDEyICsxNzUsMjUgQEAgaWYgKEVOQUJMRV9XRUJHTCBP
UiBXVEZfVVNFX1RJTEVEX0JBQ0tJTkdfU1RPUkUpCiAKICAgICBpZiAoT1BFTkdMWF9GT1VORCkK
ICAgICAgICAgYWRkX2RlZmluaXRpb25zKC1ESEFWRV9HTFgpCi0gICAgICAgIGFkZF9kZWZpbml0
aW9ucygtRFdURl9VU0VfR0xYPTEpCisgICAgZW5kaWYgKCkKKworICAgIG9wdGlvbihFTkFCTEVf
RUdMIE9OKQogCi0gICAgICAgIGlmIChYMTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQgWDExX1hyZW5k
ZXJfRk9VTkQpCi0gICAgICAgICAgIHNldChVU0VfR1JBUEhJQ1NfU1VSRkFDRSAxKQotICAgICAg
ICBlbmRpZiAoKQorICAgIGlmIChFTkFCTEVfRUdMKQorICAgICAgICBmaW5kX3BhY2thZ2UoRUdM
IFJFUVVJUkVEKQogICAgIGVuZGlmICgpCisKKyAgICBpZiAoRUdMX0ZPVU5EKQorICAgICAgICBz
ZXQoV1RGX1VTRV9FR0wgMSkKKyAgICAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9FR0w9
MSkKKyAgICAgZWxzZWlmIChPUEVOR0xYX0ZPVU5EKQorICAgICAgICAgc2V0KFdURl9VU0VfR0xY
IDEpCisgICAgICAgICBhZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0dMWD0xKQorICAgIGVuZGlm
ICgpCisKKyAgICAgaWYgKChPUEVOR0xYX0ZPVU5EIE9SIEVHTF9GT1VORCkgQU5EIFgxMV9YY29t
cG9zaXRlX0ZPVU5EIEFORCBYMTFfWHJlbmRlcl9GT1VORCkKKyAgICAgICAgIHNldChVU0VfR1JB
UEhJQ1NfU1VSRkFDRSAxKQorICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9J
TlNQRUNUT1IpCg==
</data>
<flag name="review"
          id="197960"
          type_id="1"
          status="-"
          setter="noam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180664</attachid>
            <date>2012-12-24 05:37:20 -0800</date>
            <delta_ts>2012-12-26 18:10:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>eglcontextchanges.patch</filename>
            <type>text/plain</type>
            <size>47370</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLjUxZDQxZjMgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQgY2FuIGJlIGVuYWJsZWQgZHVy
aW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1ERU5BQkxFX0VHTD1PTiBhcyBj
bWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzgzMzguCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAxYTA0MDRmLi4wNDg3OGJkIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAxMi0x
Mi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTYwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBHTEVTMiBzdXBwb3J0LgorICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJhY2tlbmQuIEVHTCBzdXBwb3J0IGNhbiBi
ZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAgICAgICAgYnkgcGFzc2luZyAtREVOQUJM
RV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRlci4gVGhpcyBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0
ZUNvbnRleHQpOiBBZGRlZCBHTFggY2hlY2tzLgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQpOiBBZGRlZCBzdXBwb3J0IGZvciBjcmVh
dGluZyBFR0xPZmZzY3JlZW4gQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1D
b250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIpOiBBZGRlZCBzdXBwb3J0IGZvciBj
cmVhdGluZyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdM
UGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKTogQWRkZWQgc3VwcG9ydCBm
b3IgY3JlYXRpbmcgRUdMU3VyZmFjZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUm9idXN0bmVzc0V4dFN1cHBvcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OkVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OmhhbmRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6fkVHTE9mZlNjcmVlbkNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1h
a2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRm
b3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4
dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0
OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xDdXJyZW50Q29udGV4
dFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjp+
RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKEVHTE9mZlNjcmVlbkNvbnRleHQp
OgorCisgICAgICAgIEVHTCBpbXBsZW1lbnRhdGlvbiBmb3IgQ29udGV4dCBNYW5hZ2VtZW50Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjp+RUdMV2luZG93VHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpjb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6
OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6ZnJlZUVHTFJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZSk6CisKKyAgICAgICAgRUdMIGltcGxlbWVudGF0aW9uIGZvciBP
ZmZzY3JlZW4gU3VyZmFjZS4gVGhlIHN1cmZhY2UgaXMgYmFja2VkIGJ5IG5hdGl2ZSB3aW5kb3cu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVs
cGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEVHTERpc3BsYXk6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTERpc3Bs
YXk6OnNoYXJlZEVHTERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkRUdMRGlzcGxh
eTo6U2hhcmVkRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xEaXNwbGF5
OjpjbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTERpc3BsYXk6On5TaGFyZWRF
R0xEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6RUdMQ29uZmln
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6fkVHTENvbmZpZ0hl
bHBlcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6OmRpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToK
KyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6bmF0aXZlVmlzdWFsSWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xDb25maWdIZWxwZXI6OmNyZWF0ZUNvbmZpZyk6CisKKyAgICAgICAgSGVscGVyIGNsYXNz
IHRvIGluaXRpYWxpemUgRUdMIHJlc291cmNlcyBhbmQgY2hvb3NlIHJpZ2h0IEVHTCBjb25maWdp
cmF0aW9uLgorCiAyMDEyLTEyLTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVcGRhdGUgbG9jYWxpemFibGUgc3RyaW5ncyBhcyBhIGZvbGxvd3VwIHRvIGh0
dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEzODM4NwpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDU2ZTMwNmMuLmU3ZTQ2OWMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI2NSw2
ICsyNjUsMTQgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgiCiAgICAgICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCiAgICAgKQorCisgICAgaWYgKFdURl9VU0Vf
RUdMKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAgICAgICAgICR7RUdMX0lOQ0xVREVfRElSfQorICAgICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbCIKKyAgICApCisgICAgZW5kaWYgKCkKKwog
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9PcGVuR0xTaGltcy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2lu
Z0J1ZmZlckNhaXJvLmNwcApAQCAtMjc3LDE4ICsyODUsMzYgQEAgaWYgKFdURl9VU0VfM0RfR1JB
UEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9HcmFwaGljc1N1cmZhY2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhTdXJmYWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYQ29udGV4dC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAogICAgICkKKworICAgIGlmIChXVEZf
VVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcAorICAgICAg
ICApCisgICAgZW5kaWYgKCkKKworICAgIGlmIChXVEZfVVNFX0dMWCkKKyAgICAgICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAorICAgICAgICApCisgICAgZW5kaWYgKCkKKwogICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7WDExX1gxMV9MSUJ9CiAg
ICAgICAgICR7WDExX1hjb21wb3NpdGVfTElCfQogICAgICAgICAke1gxMV9YcmVuZGVyX0xJQn0K
ICAgICApCisgICAgaWYgKFdURl9VU0VfRUdMKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0xJQlJBUklFUworICAgICAgICAgICAgJHtFR0xfTElCUkFSWX0KKyAgICAgICAgKQorICAgIGVu
ZGlmICgpCiBlbmRpZiAoKQogCiBhZGRfZGVmaW5pdGlvbnMoLUREQVRBX0RJUj0iJHtDTUFLRV9J
TlNUQUxMX1BSRUZJWH0vJHtEQVRBX0lOU1RBTExfRElSfSIpCmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAppbmRleCAyZGZiNGM5Li5mODIzZGM0IDEw
MDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5o
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZzLmgKQEAg
LTI4LDEyICsyOCwxMiBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0j
aW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLQogI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRl
ICJPcGVuR0xFU1NoaW1zLmgiCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xF
UzIvZ2wyZXh0Lmg+CiAjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSA8
R0wvZ2wuaD4KICNpbmNsdWRlIDxHTC9nbGV4dC5oPgogI2VuZGlmCkBAIC00Miw2ICs0MiwxMiBA
QAogI2luY2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoRUdMKQorI2RlZmluZSBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgMQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxF
R0wvZWdsZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVp
bnQzMl90IFBsYXRmb3JtQnVmZmVySGFuZGxlOwpAQCAtNTEsNiArNTcsMTYgQEAgdHlwZWRlZiBH
TFhDb250ZXh0IFBsYXRmb3JtQ29udGV4dDsKIHR5cGVkZWYgRGlzcGxheSogUGxhdGZvcm1EaXNw
bGF5OwogdHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9ybVN1cmZhY2VDb25maWc7CiB0eXBlZGVm
IEdMWERyYXdhYmxlIFBsYXRmb3JtRHJhd2FibGU7CisjZWxpZiBVU0UoRUdMKQorI2lmIFVTRShP
UEVOR0xfRVNfMikKK3N0YXRpYyBjb25zdCBFR0xlbnVtIGVnbEFQSVZlcnNpb24gPSBFR0xfT1BF
TkdMX0VTX0FQSTsKKyNlbHNlCitzdGF0aWMgY29uc3QgRUdMZW51bSBlZ2xBUElWZXJzaW9uID0g
RUdMX09QRU5HTF9BUEk7CisjZW5kaWYKK3R5cGVkZWYgRUdMQ29udGV4dCBQbGF0Zm9ybUNvbnRl
eHQ7Cit0eXBlZGVmIEVHTERpc3BsYXkgUGxhdGZvcm1EaXNwbGF5OwordHlwZWRlZiBFR0xDb25m
aWcgUGxhdGZvcm1TdXJmYWNlQ29uZmlnOwordHlwZWRlZiBFR0xTdXJmYWNlIFBsYXRmb3JtRHJh
d2FibGU7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbnRleHQ7CiB0eXBlZGVmIHZv
aWQqIFBsYXRmb3JtRGlzcGxheTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKaW5kZXggNzYyMWUyZS4u
Nzk5NTliYSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogI2lm
IFVTRShHTFgpCiAjaW5jbHVkZSAiR0xYQ29udGV4dC5oIgorI2VsaWYgVVNFKEVHTCkKKyNpbmNs
dWRlICJFR0xDb250ZXh0LmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CkBAIC00NCwxMSArNDYsMTEgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0
Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QKICAgICBpZiAoIWlu
aXRpYWxpemVPcGVuR0xTaGltcygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlm
ICghZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7CiAjaWYgVVNFKEdMWCkKKyAgICBpZiAo
IWdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQikgewogICAgICAgICBnbEdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRV
U0FSQlBST0M+KGdsWEdldFByb2NBZGRyZXNzQVJCKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1
Ynl0ZSo+KCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIiKSkpOwotI2VuZGlmCiAgICAgfQor
I2VuZGlmCiAKICAgICBzd2l0Y2ggKHJlbmRlclN0eWxlKSB7CiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgpAQCAtNzAsOCArNzIsOSBAQCBQYXNzT3duUHRyPEdM
UGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGlj
c0NvbnRleHQzRAogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRl
eHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogewogI2lmIFVTRShHTFgpCi0gICAgT3duUHRy
PEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVl
bkNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuQ29udGV4dCgpKTsKKyNlbGlmIFVTRShFR0wpCisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFR0xPZmZTY3JlZW5Db250ZXh0KCkpOwogI2VuZGlmCiAK
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTgwLDggKzgzLDkgQEAgUGFzc093blB0cjxHTFBsYXRm
b3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQog
UGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1
cnJlbnRDb250ZXh0V3JhcHBlcigpCiB7CiAjaWYgVVNFKEdMWCkKLSAgICBPd25QdHI8R0xQbGF0
Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xYQ3VycmVudENvbnRleHRX
cmFwcGVyKCkpOwotICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpKTsKKyNlbGlmIFVTRShFR0wp
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKSk7CiAj
ZW5kaWYKIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oCmluZGV4IDE3MGI3
NmUuLjAzNTNkZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogICAgIC8vIERvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IGlmIHRoaXMgaXMgbm90IHRoZSBjdXJy
ZW50IENvbnRleHQuCiAgICAgdm9pZCByZWxlYXNlQ3VycmVudCgpOwogCi0gICAgUGxhdGZvcm1D
b250ZXh0IGhhbmRsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGxhdGZvcm1Db250ZXh0IGhhbmRs
ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzQ3VycmVudENvbnRleHQoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBs
YXRmb3JtU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMUGxhdGZvcm1TdXJmYWNlLmNwcAppbmRleCA4MzkxZTQ3Li43ZjdhNTY0IDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNl
LmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1TdXJmYWNlLmNwcApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlICJHTFhTdXJmYWNlLmgi
CiAjZW5kaWYKIAorI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiRUdMU3VyZmFjZS5oIgorI2VuZGlm
CisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01MCwxMCArNTQsMTQgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9y
bVN1cmZhY2U6OmNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoKQogCiBQYXNzT3duUHRyPEdMUGxhdGZv
cm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpCiB7
Ci0jaWYgVVNFKEdMWCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCisjaWYgVVNFKEdMWCkKICAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1
cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3VyZmFjZSgpKTsKKyNlbGlmIFVTRShF
R0wpCisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3
IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKSk7CisjZW5kaWYKIAotICAgIGlmIChzdXJmYWNl
LT5oYW5kbGUoKSkKKyAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJm
YWNlLT5kcmF3YWJsZSgpKQogICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdIZWxwZXIuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjI1NGVhNDkKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ0hlbHBlci5jcHAKQEAgLTAsMCAr
MSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJFR0xDb25maWdIZWxwZXIuaCIKKworI2lmIFVTRShFR0wpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU2hhcmVkRUdMRGlzcGxheSogU2hhcmVkRUdMRGlzcGxheTo6bV9zdGF0aWNTaGFy
ZWRFR0xEaXNwbGF5ID0gMDsKKworc3RhdGljIEVHTGludCBjb25maWdBdHRyaWJ1dGVMaXN0W10g
PSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9P
UEVOR0xfRVMyX0JJVCwKKyNlbHNlCisgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9CSVQsCisjZW5kaWYKKyAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgRUdMX0dSRUVOX1NJWkUs
IDgsCisgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICBFR0xfU1RFTkNJTF9TSVpFLCA4LAorICAg
IEVHTF9BTFBIQV9TSVpFLCA4LAorICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9OT05FLAorICAg
IEVHTF9OT05FCit9OworCit2b2lkIFNoYXJlZEVHTERpc3BsYXk6OmRlcmVmKCkKK3sKKyAgICBp
ZiAoZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5ID0gMDsK
KyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorfQorCitFR0xEaXNwbGF5IFNoYXJlZEVHTERp
c3BsYXk6OnNoYXJlZEVHTERpc3BsYXkoKQoreworICAgIHJldHVybiBtX2VnbERpc3BsYXk7Cit9
CisKK1NoYXJlZEVHTERpc3BsYXk6OlNoYXJlZEVHTERpc3BsYXkoTmF0aXZlU2hhcmVkRGlzcGxh
eSogZGlzcGxheSkKKyAgICA6IG1fZWdsRGlzcGxheShFR0xfTk9fRElTUExBWSkKK3sKKyAgICBp
ZiAoZGlzcGxheSkKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShyZWludGVy
cHJldF9jYXN0PEVHTE5hdGl2ZURpc3BsYXlUeXBlPihkaXNwbGF5KSk7CisgICAgZWxzZQorICAg
ICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwor
CisgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICBMT0df
RVJST1IoIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBFR0xCb29sZWFuIHN1Y2Nlc3M7CisgICAgc3VjY2VzcyA9IGVn
bEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAwLCAwKTsKKworICAgIGlmIChzdWNjZXNzICE9IEVH
TF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiRUdMSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxu
Iik7CisgICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgIH0KKworICAg
IHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pOworCisgICAgaWYgKHN1Y2Nlc3Mg
IT0gRUdMX1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IEVHTCBBUEko
JWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19E
SVNQTEFZOworICAgIH0KK30KKwordm9pZCBTaGFyZWRFR0xEaXNwbGF5OjpjbGVhbnVwKCkKK3sK
KyAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm47
CisKKyAgICBlZ2xNYWtlQ3VycmVudChtX2VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xf
Tk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3Bs
YXkpOworICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworfQorCitTaGFyZWRFR0xE
aXNwbGF5Ojp+U2hhcmVkRUdMRGlzcGxheSgpCit7CisgICAgY2xlYW51cCgpOworfQorCitFR0xD
b25maWdIZWxwZXI6OkVHTENvbmZpZ0hlbHBlcihOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5
KQorICAgIDogbV9wYnVmZmVyZmJDb25maWcoMCkKKyAgICAsIG1fc3VyZmFjZUNvbnRleHRmYkNv
bmZpZygwKQoreworICAgIG1fc2hhcmVkRGlzcGxheSA9IFNoYXJlZEVHTERpc3BsYXk6OmNyZWF0
ZShkaXNwbGF5KTsKK30KKworRUdMQ29uZmlnSGVscGVyOjp+RUdMQ29uZmlnSGVscGVyKCkKK3sK
K30KKworUGxhdGZvcm1EaXNwbGF5IEVHTENvbmZpZ0hlbHBlcjo6ZGlzcGxheSgpCit7CisgICAg
cmV0dXJuIG1fc2hhcmVkRGlzcGxheS0+c2hhcmVkRUdMRGlzcGxheSgpOworfQorCitFR0xDb25m
aWcgRUdMQ29uZmlnSGVscGVyOjpwQnVmZmVyQ29udGV4dENvbmZpZygpCit7CisgICAgaWYgKCFt
X3BidWZmZXJmYkNvbmZpZykgeworICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVH
TF9QSVhNQVBfQklUOworICAgICAgICBtX3BidWZmZXJmYkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhj
b25maWdBdHRyaWJ1dGVMaXN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9wYnVmZmVyZmJDb25m
aWc7Cit9CisKK0VHTENvbmZpZyBFR0xDb25maWdIZWxwZXI6OnN1cmZhY2VDb250ZXh0Q29uZmln
KCkKK3sKKyAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZykgeworICAgICAgICBjb25m
aWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9XSU5ET1dfQklUOworICAgICAgICBtX3N1cmZhY2VD
b250ZXh0ZmJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0cmlidXRlTGlzdCk7CisgICAg
fQorCisgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKK30KKworRUdMaW50IEVH
TENvbmZpZ0hlbHBlcjo6bmF0aXZlVmlzdWFsSWQoY29uc3QgRUdMQ29uZmlnJiBjb25maWcpCit7
CisgICAgaWYgKGRpc3BsYXkoKSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgRUdMaW50IGVnbFZhbHVlID0gMDsKKyAgICBlZ2xHZXRDb25maWdBdHRyaWIoZGlz
cGxheSgpLCBjb25maWcsIEVHTF9OQVRJVkVfVklTVUFMX0lELCAmZWdsVmFsdWUpOworCisgICAg
cmV0dXJuIGVnbFZhbHVlOworfQorCit2b2lkIEVHTENvbmZpZ0hlbHBlcjo6cmVzZXQoKQorewor
ICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9IDA7CisgICAgbV9wYnVmZmVyZmJDb25maWcg
PSAwOworfQorCitFR0xDb25maWcgRUdMQ29uZmlnSGVscGVyOjpjcmVhdGVDb25maWcoY29uc3Qg
aW50IGF0dHJpYnV0ZXNbXSkKK3sKKyAgICBpZiAoZGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZ
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBudW1Db25maWdzOworICAgIEVHTENvbmZp
ZyByaWdodENvbmZpZyA9IDA7CisKKyAgICBpZiAoIWVnbENob29zZUNvbmZpZyhkaXNwbGF5KCks
IGF0dHJpYnV0ZXMsICZyaWdodENvbmZpZywgMSwgJm51bUNvbmZpZ3MpKQorICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBnZXQgc3VwcG9ydGVkIGNvbmZpZ2lyYXRpb25zLlxuIik7CisKKyAg
ICBpZiAobnVtQ29uZmlncyAhPSAxKSB7CisgICAgICAgIExPR19FUlJPUigiRUdMQ2hvb3NlQ29u
ZmlnIGRpZG4ndCByZXR1cm4gZXhhY3RseSBvbmUgY29uZmlnIGJ1dCAoJWQpLlxuIiwgbnVtQ29u
Zmlncyk7CisgICAgICAgIHJpZ2h0Q29uZmlnID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcmln
aHRDb25maWc7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ0hlbHBlci5oIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjg2Y2U5Ci0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdI
ZWxwZXIuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVH
TENvbmZpZ0hlbHBlcl9oCisjZGVmaW5lIEVHTENvbmZpZ0hlbHBlcl9oCisKKyNpZiBVU0UoRUdM
KQorCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dHlwZWRlZiBEaXNwbGF5IE5hdGl2ZVNoYXJlZERpc3BsYXk7CisKK2NsYXNzIFNoYXJlZEVHTERp
c3BsYXkgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2hhcmVkRUdMRGlzcGxheSk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTaGFyZWRFR0xEaXNwbGF5PiBjcmVhdGUoTmF0aXZlU2hhcmVkRGlzcGxheSogZGlzcGxheSkK
KyAgICB7CisgICAgICAgIGlmICghbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5KQorICAgICAgICAg
ICAgbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5ID0gbmV3IFNoYXJlZEVHTERpc3BsYXkoZGlzcGxh
eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheS0+
cmVmKCk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkRUdMRGlzcGxh
eSk7CisgICAgfQorCisgICAgdm9pZCBkZXJlZigpOworICAgIEVHTERpc3BsYXkgc2hhcmVkRUdM
RGlzcGxheSgpOworCitwcm90ZWN0ZWQ6CisgICAgU2hhcmVkRUdMRGlzcGxheShOYXRpdmVTaGFy
ZWREaXNwbGF5Kik7CisgICAgdm9pZCBjbGVhbnVwKCk7CisgICAgdmlydHVhbCB+U2hhcmVkRUdM
RGlzcGxheSgpOworCisgICAgc3RhdGljIFNoYXJlZEVHTERpc3BsYXkqIG1fc3RhdGljU2hhcmVk
RUdMRGlzcGxheTsKKyAgICBFR0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKK307CisKK2NsYXNzIEVH
TENvbmZpZ0hlbHBlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMQ29uZmlnSGVscGVy
KTsKKworcHVibGljOgorICAgIEVHTENvbmZpZ0hlbHBlcihOYXRpdmVTaGFyZWREaXNwbGF5KiA9
IDApOworICAgIHZpcnR1YWwgfkVHTENvbmZpZ0hlbHBlcigpOworICAgIFBsYXRmb3JtRGlzcGxh
eSBkaXNwbGF5KCk7CisgICAgdmlydHVhbCBFR0xDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWco
KTsKKyAgICB2aXJ0dWFsIEVHTENvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpOworICAgIEVH
TGludCBuYXRpdmVWaXN1YWxJZChjb25zdCBFR0xDb25maWcmKTsKKyAgICB2b2lkIHJlc2V0KCk7
CisKK3ByaXZhdGU6CisgICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmli
dXRlc1tdKTsKKworcHJvdGVjdGVkOgorICAgIEVHTENvbmZpZyBtX3BidWZmZXJmYkNvbmZpZzsK
KyAgICBFR0xDb25maWcgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOworICAgIFJlZlB0cjxTaGFy
ZWRFR0xEaXNwbGF5PiBtX3NoYXJlZERpc3BsYXk7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5k
aWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
Z2wvRUdMQ29udGV4dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjU2N2Q3MzgKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUdMQ29udGV4dC5o
IgorCisjaWYgVVNFKEVHTCkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisj
aWYgSEFWRShHTFgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRleHRBdHRyaWJ1dGVzW10gPSB7Cisj
aWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLAor
I2VuZGlmCisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBjb25zdCBFR0xpbnQgY29udGV4dFJv
YnVzdG5lc3NBdHRyaWJ1dGVzW10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9D
T05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLAorI2VuZGlmCisgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQsCisgICAgRUdMX0xPU0VfQ09OVEVYVF9P
Tl9SRVNFVF9FWFQsCisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBib29sIGlzUm9idXN0bmVz
c0V4dFN1cHBvcnRlZChFR0xEaXNwbGF5IGRpc3BsYXkpCit7CisgICAgc3RhdGljIGJvb2wgZGlk
UXVlcnlGb3JSb2J1c3RuZXNzRXh0ZW5zaW9uID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaXNS
b2J1c3RuZXNzRXh0ZW5zaW9uU3VwcG9ydGVkID0gZmFsc2U7CisKKyAgICBpZiAoIWRpZFF1ZXJ5
Rm9yUm9idXN0bmVzc0V4dGVuc2lvbikgeworICAgICAgICBkaWRRdWVyeUZvclJvYnVzdG5lc3NF
eHRlbnNpb24gPSB0cnVlOworICAgICAgICBTdHJpbmcgc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGVnbFF1ZXJ5U3RyaW5nKGRpc3BsYXksIEVHTF9F
WFRFTlNJT05TKSk7CisKKyAgICAgICAgaWYgKCFzdXBwb3J0ZWRFeHRlbnNpb25zLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9ucy5hcHBlbmQoIiAiKTsKKyAgICAg
ICAgICAgIGlzUm9idXN0bmVzc0V4dGVuc2lvblN1cHBvcnRlZCA9IHN1cHBvcnRlZEV4dGVuc2lv
bnMuY29udGFpbnMoIkVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyAiKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBpc1JvYnVzdG5lc3NFeHRlbnNpb25TdXBwb3J0ZWQ7
Cit9CisKK0VHTEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVy
KCkKKyAgICA6IEdMUGxhdGZvcm1Db250ZXh0KCkKK3sKK30KKworLy8gRklYTUU6IFRoaXMgaXMg
YSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB1bnRpbCB3ZSBhcmUgYWJsZSB0byBidWlsZCBldmFzIHdp
dGggRUdMIHN1cHBvcnQuCitQbGF0Zm9ybUNvbnRleHQgRUdMQ3VycmVudENvbnRleHRXcmFwcGVy
OjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBnbFhHZXRDdXJyZW50Q29udGV4dCgpOwor
fQorCitFR0xPZmZTY3JlZW5Db250ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0KCkKKyAgICA6IEdM
UGxhdGZvcm1Db250ZXh0KCkKKyAgICAsIG1fZGlzcGxheSgwKQoreworfQorCitib29sIEVHTE9m
ZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7
CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVn
bEJpbmRBUEkoZWdsQVBJVmVyc2lvbikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
c2V0IEVHTCBBUEkoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBtX2Rpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNwbGF5KCk7Cisg
ICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVHTENvbmZp
ZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CisgICAgaWYgKCFjb25maWcpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb25maWcpIHsKKyAgICAgICAgaWYgKGlz
Um9idXN0bmVzc0V4dFN1cHBvcnRlZChtX2Rpc3BsYXkpKQorICAgICAgICAgICAgbV9jb250ZXh0
SGFuZGxlID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRF
WFQsIGNvbnRleHRSb2J1c3RuZXNzQXR0cmlidXRlcyk7CisKKyAgICAgICAgaWYgKG1fY29udGV4
dEhhbmRsZSAhPSBFR0xfTk9fQ09OVEVYVCkKKyAgICAgICAgICAgIG1fcmVzZXRMb3N0Q29udGV4
dCA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dEhhbmRsZSA9IGVn
bENyZWF0ZUNvbnRleHQobV9kaXNwbGF5LCBjb25maWcsIEVHTF9OT19DT05URVhULCBjb250ZXh0
QXR0cmlidXRlcyk7CisKKyAgICAgICAgaWYgKG1fY29udGV4dEhhbmRsZSAhPSBFR0xfTk9fQ09O
VEVYVCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworRUdMT2ZmU2NyZWVuQ29udGV4dDo6fkVHTE9mZlNjcmVlbkNvbnRleHQoKQorewor
fQorCitib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmlzQ3VycmVudENvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2NvbnRleHRIYW5kbGUgPT0gZWdsR2V0Q3VycmVudENvbnRleHQoKTsK
K30KKworYm9vbCBFR0xPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KEdMUGxh
dGZvcm1TdXJmYWNlKiBzdXJmYWNlKQoreworICAgIGlmICghZWdsQmluZEFQSShlZ2xBUElWZXJz
aW9uKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4i
LCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBzdXJmYWNlLT5kcmF3YWJsZSgpLCBzdXJmYWNl
LT5kcmF3YWJsZSgpLCBtX2NvbnRleHRIYW5kbGUpKSB7CisgICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIG1ha2UgY29udGV4dCBjdXJyZW50LiglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKwor
ICAgICAgICBpZiAobV9yZXNldExvc3RDb250ZXh0ICYmIGVnbEdldEVycm9yKCkgPT0gRUdMX0NP
TlRFWFRfTE9TVCkgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJMb3N0IGN1cnJlbnQgY29udGV4
dC5cbiIpOworICAgICAgICAgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgRUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpCit7CisgICAg
ZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0Us
IEVHTF9OT19DT05URVhUKTsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpmcmVlUmVz
b3VyY2VzKCkKK3sKKyAgICBpZiAobV9jb250ZXh0SGFuZGxlID09IEVHTF9OT19DT05URVhUKQor
ICAgICAgICByZXR1cm47CisKKyAgICBlZ2xEZXN0cm95Q29udGV4dChtX2Rpc3BsYXksIG1fY29u
dGV4dEhhbmRsZSk7CisgICAgbV9jb250ZXh0SGFuZGxlID0gRUdMX05PX0NPTlRFWFQ7CisgICAg
bV9kaXNwbGF5ID0gMDsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KCkK
K3sKKyAgICBHTFBsYXRmb3JtQ29udGV4dDo6ZGVzdHJveSgpOworICAgIGZyZWVSZXNvdXJjZXMo
KTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjhhMzIyZQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMQ29udGV4dF9oCisjZGVmaW5lIEVH
TENvbnRleHRfaAorCisjaWYgVVNFKEVHTCkKKworI2luY2x1ZGUgIkdMUGxhdGZvcm1Db250ZXh0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRUdMQ3VycmVudENvbnRleHRXcmFw
cGVyIDogcHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIpOworCitwdWJsaWM6CisgICAgRUdMQ3VycmVudENv
bnRleHRXcmFwcGVyKCk7CisgICAgUGxhdGZvcm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgfkVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcigpIHsgfQorfTsKKwor
Y2xhc3MgRUdMT2ZmU2NyZWVuQ29udGV4dCA6IHB1YmxpYyBHTFBsYXRmb3JtQ29udGV4dCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMT2ZmU2NyZWVuQ29udGV4dCk7CisKK3B1YmxpYzoK
KyAgICBFR0xPZmZTY3JlZW5Db250ZXh0KCk7CisgICAgdmlydHVhbCB+RUdMT2ZmU2NyZWVuQ29u
dGV4dCgpOworICAgIGJvb2wgaW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSopIE9WRVJSSURF
OworICAgIGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3VyZmFjZSopIE9WRVJS
SURFOworICAgIHZvaWQgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpIE9WRVJSSURFOworICAgIHZv
aWQgZGVzdHJveSgpIE9WRVJSSURFOworICAgIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0
IE9WRVJSSURFOworCitwcml2YXRlOgorICAgIHZvaWQgZnJlZVJlc291cmNlcygpOworICAgIEVH
TERpc3BsYXkgbV9kaXNwbGF5OworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1n
aXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZh
Y2UuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xT
dXJmYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM0NDgwCi0t
LSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xTdXJmYWNlLmNwcApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVHTFN1cmZhY2UuaCIKKworI2lmIFVT
RShFR0wpICYmIFVTRShHUkFQSElDU19TVVJGQUNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0VHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQor
ICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoKQoreworICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9w
dFB0cihuZXcgTmF0aXZlT2ZmU2NyZWVuV2luZG93KCkpOworICAgIG1fZWdsQ29uZmlnSGVscGVy
ID0gYWRvcHRQdHIobmV3IEVHTENvbmZpZ0hlbHBlcihtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVT
aGFyZWREaXNwbGF5KCkpKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX2VnbENvbmZpZ0hlbHBl
ci0+ZGlzcGxheSgpOworCisgICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExB
WSkgeworICAgICAgICBtX2VnbENvbmZpZ0hlbHBlciA9IG51bGxwdHI7CisgICAgICAgIG1fbmF0
aXZlUmVzb3VyY2UgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdM
Q29uZmlnIGNvbmZpZyA9IG1fZWdsQ29uZmlnSGVscGVyLT5zdXJmYWNlQ29udGV4dENvbmZpZygp
OworCisgICAgaWYgKCFjb25maWcpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgRUdMaW50IHZpc3VhbElkID0gbV9lZ2xDb25maWdIZWxwZXItPm5h
dGl2ZVZpc3VhbElkKGNvbmZpZyk7CisKKyAgICBpZiAodmlzdWFsSWQgPT0gLTEpIHsKKyAgICAg
ICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX25hdGl2
ZVJlc291cmNlLT5zZXRWaXN1YWxJZCh2aXN1YWxJZCkpIHsKKyAgICAgICAgZGVzdHJveSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9uYXRpdmVSZXNvdXJjZS0+Y3JlYXRlT2Zm
c2NyZWVuV2luZG93KCZtX2J1ZmZlckhhbmRsZSk7CisKKyAgICBpZiAoIW1fYnVmZmVySGFuZGxl
KSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
ZHJhd2FibGUgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9lZ2xD
b25maWdIZWxwZXItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCksIChFR0xOYXRpdmVXaW5kb3dUeXBl
KW1fYnVmZmVySGFuZGxlLCAwKTsKKworICAgIGlmIChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJG
QUNFKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgc3VyZmFjZSgl
ZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKwor
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6fkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQor
eworfQorCitQbGF0Zm9ybVN1cmZhY2VDb25maWcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6
Y29uZmlndXJhdGlvbigpCit7CisgICAgcmV0dXJuIG1fZWdsQ29uZmlnSGVscGVyLT5zdXJmYWNl
Q29udGV4dENvbmZpZygpOworfQorCit2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3
YXBCdWZmZXJzKCkKK3sKKyAgICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEVHTEJvb2xlYW4gc3VjY2VzcyA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7CisKKyAg
ICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBzZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgp
OworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBlZ2xTd2FwQnVmZmVycyhtX3NoYXJlZERpc3BsYXks
IG1fZHJhd2FibGUpOworCisgICAgaWYgKHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gU3dhcEJ1ZmZlcnMoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7
CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICB9Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0
U3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgbV9uYXRpdmVSZXNvdXJjZS0+ZGVzdHJveVdpbmRv
dyhtX2J1ZmZlckhhbmRsZSk7CisgICAgZnJlZUVHTFJlc291cmNlcygpOworICAgIG1fbmF0aXZl
UmVzb3VyY2UgPSBudWxscHRyOworICAgIG1fZWdsQ29uZmlnSGVscGVyID0gbnVsbHB0cjsKKyAg
ICBtX2J1ZmZlckhhbmRsZSA9IDA7Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6ZnJlZUVHTFJlc291cmNlcygpCit7CisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NV
UkZBQ0UgfHwgbV9zaGFyZWREaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1
cm47CisKKyAgICBFR0xCb29sZWFuIGVnbFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lv
bik7CisKKyAgICBpZiAoZWdsUmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgZWdsRGVzdHJveVN1cmZhY2UobV9zaGFyZWREaXNwbGF5
LCBtX2RyYXdhYmxlKTsKKyAgICBtX2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7Cit9CisKK3Zv
aWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYg
bmV3UmVjdCkKK3sKKyAgICBHTFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7
CisgICAgbV9uYXRpdmVSZXNvdXJjZS0+cmVTaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFu
ZGxlKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNmI2OTI0YgotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMU3VyZmFjZV9oCisjZGVmaW5l
IEVHTFN1cmZhY2VfaAorCisjaWYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisK
KyNpbmNsdWRlICJFR0xDb25maWdIZWxwZXIuaCIKKyNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFj
ZS5oIgorCisjaW5jbHVkZSA8Z2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordHlwZWRlZiBYMTFPZmZTY3JlZW5XaW5kb3cgTmF0aXZlT2ZmU2NyZWVu
V2luZG93OworCisvLyBDb250ZW50cyBvZiB0aGUgc3VyZmFjZSBhcmUgYmFja2VkIGJ5IG5hdGl2
ZSB3aW5kb3cuCitjbGFzcyBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMUGxh
dGZvcm1TdXJmYWNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFR0xXaW5kb3dUcmFuc3Bv
cnRTdXJmYWNlKTsKKworcHVibGljOgorICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKTsK
KyAgICB2aXJ0dWFsIH5FR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgUGxhdGZvcm1T
dXJmYWNlQ29uZmlnIGNvbmZpZ3VyYXRpb24oKSBPVkVSUklERTsKKyAgICB2b2lkIHNldEdlb21l
dHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpIE9WRVJSSURFOworICAgIHZvaWQgc3dhcEJ1ZmZl
cnMoKSBPVkVSUklERTsKKyAgICB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKKworcHJpdmF0ZToK
KyAgICB2b2lkIGZyZWVFR0xSZXNvdXJjZXMoKTsKKyAgICBPd25QdHI8TmF0aXZlT2ZmU2NyZWVu
V2luZG93PiBtX25hdGl2ZVJlc291cmNlOworICAgIE93blB0cjxFR0xDb25maWdIZWxwZXI+IG1f
ZWdsQ29uZmlnSGVscGVyOworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2Uu
Y3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJm
YWNlLmNwcAppbmRleCA5NmEwYWI5Li5jOWNkOGQyIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKQEAg
LTM2LDcgKzM2LDcgQEAgc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1tdID0geyBH
TFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0gKIEdMWFRyYW5zcG9ydFN1cmZh
Y2U6OkdMWFRyYW5zcG9ydFN1cmZhY2UoKQogICAgIDogWDExT2ZmU2NyZWVuV2luZG93KCkKIHsK
LSAgICBjcmVhdGVPZmZzY3JlZW5XaW5kb3coKTsKKyAgICBjcmVhdGVPZmZzY3JlZW5XaW5kb3co
Jm1fYnVmZmVySGFuZGxlKTsKICAgICBtX2RyYXdhYmxlID0gbV9idWZmZXJIYW5kbGU7CiB9CiAK
QEAgLTQ5LDYgKzQ5LDEyIEBAIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBHTFhUcmFuc3BvcnRTdXJm
YWNlOjpjb25maWd1cmF0aW9uKCkKICAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPnN1cmZh
Y2VDb250ZXh0Q29uZmlnKCk7CiB9CiAKK3ZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c2V0R2Vv
bWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3sKKyAgICBHTFBsYXRmb3JtU3VyZmFjZTo6
c2V0R2VvbWV0cnkobmV3UmVjdCk7CisgICAgcmVTaXplV2luZG93KG5ld1JlY3QsIG1fZHJhd2Fi
bGUpOworfQorCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKIHsKICAg
ICBpZiAoIW1fZHJhd2FibGUpCkBAIC02Niw3ICs3Miw3IEBAIHZvaWQgR0xYVHJhbnNwb3J0U3Vy
ZmFjZTo6c3dhcEJ1ZmZlcnMoKQogCiB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3ko
KQogewotICAgIGRlc3Ryb3lXaW5kb3coKTsKKyAgICBkZXN0cm95V2luZG93KG1fYnVmZmVySGFu
ZGxlKTsKICAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CiB9CiAKZGlmZiAtLWdpdCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKaW5kZXgg
NGU4NzY4NS4uMGQ4NGMzNCAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmgKQEAgLTQzLDYgKzQzLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkdMWFRyYW5zcG9ydFN1cmZhY2UoKTsKICAgICBQbGF0Zm9ybVN1
cmZhY2VDb25maWcgY29uZmlndXJhdGlvbigpOwogICAgIHZvaWQgc3dhcEJ1ZmZlcnMoKTsKKyAg
ICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIGRlc3Ryb3koKTsK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oCmluZGV4IGMxNzM1NTcu
LmNiZmNjMzkgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaApAQCAtNTEsNiArNTEs
MTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU2hhcmVkWDExUmVzb3VyY2VzOjp4MTFEaXNw
bGF5KCk7CiAgICAgfQogCisgICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8oKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCisgICAgICAgICAgICBzdXJmYWNlQ29udGV4dENvbmZp
ZygpOworCisgICAgICAgIHJldHVybiBtX1Zpc3VhbEluZm87CisgICAgfQorCiAgICAgdmlydHVh
bCBHTFhGQkNvbmZpZyBwQnVmZmVyQ29udGV4dENvbmZpZygpCiAgICAgewogICAgICAgICBpZiAo
IW1fcGJ1ZmZlcmZiQ29uZmlnKSB7CkBAIC05OCwxMSArMTA2LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKICAgICB9CiAKLXByaXZhdGU6Citw
cm90ZWN0ZWQ6CiAgICAgU2hhcmVkR0xYUmVzb3VyY2VzKCkKICAgICAgICAgOiBTaGFyZWRYMTFS
ZXNvdXJjZXMoKQogICAgICAgICAsIG1fcGJ1ZmZlcmZiQ29uZmlnKDApCiAgICAgICAgICwgbV9z
dXJmYWNlQ29udGV4dGZiQ29uZmlnKDApCisgICAgICAgICwgbV9WaXN1YWxJbmZvKDApCiAgICAg
ewogICAgIH0KIApAQCAtMTYwLDEwICsxNjksMTYgQEAgcHJpdmF0ZToKIAogICAgICAgICBpZiAo
bV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnKQogICAgICAgICAgICAgbV9zdXJmYWNlQ29udGV4dGZi
Q29uZmlnID0gMDsKKworICAgICAgICBpZiAobV9WaXN1YWxJbmZvKSB7CisgICAgICAgICAgICBY
RnJlZShtX1Zpc3VhbEluZm8pOworICAgICAgICAgICAgbV9WaXN1YWxJbmZvID0gMDsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIEdMWEZCQ29uZmlnIG1fcGJ1ZmZlcmZiQ29uZmlnOwogICAgIEdM
WEZCQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZzsKKyAgICBYVmlzdWFsSW5mbyogbV9W
aXN1YWxJbmZvOwogfTsKIAogfQpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCmlu
ZGV4IDYwMjkzZTcuLmNhYjIyZmIgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5j
cHAKQEAgLTI4LDcgKzI4LDkgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
IAorI2lmIFVTRShHTFgpCiAjaW5jbHVkZSAiR0xYV2luZG93UmVzb3VyY2VzLmgiCisjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNywyNiArMzksMzAgQEAgUGxhdGZvcm1TaGFy
ZWRSZXNvdXJjZXMqIFNoYXJlZFgxMVJlc291cmNlczo6bV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9
IDA7CiBYMTFPZmZTY3JlZW5XaW5kb3c6OlgxMU9mZlNjcmVlbldpbmRvdygpCiAgICAgOiBHTFBs
YXRmb3JtU3VyZmFjZSgpCiAgICAgLCBtX3NoYXJlZFJlc291cmNlcygwKQorICAgICwgbV9jb25m
aWdWaXN1YWxJbmZvKDApCiB7CiAgICAgbV9zaGFyZWRSZXNvdXJjZXMgPSBQbGF0Zm9ybVNoYXJl
ZFJlc291cmNlczo6Y3JlYXRlKCk7CiAKICAgICBpZiAoIW1fc2hhcmVkUmVzb3VyY2VzKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+
bmF0aXZlRGlzcGxheSgpOworICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fc2hhcmVkUmVzb3VyY2Vz
LT54MTFEaXNwbGF5KCk7CiB9CiAKIFgxMU9mZlNjcmVlbldpbmRvdzo6flgxMU9mZlNjcmVlbldp
bmRvdygpCiB7CisgICAgaWYgKG1fY29uZmlnVmlzdWFsSW5mbykgeworICAgICAgICBYRnJlZSht
X2NvbmZpZ1Zpc3VhbEluZm8pOworICAgICAgICBtX2NvbmZpZ1Zpc3VhbEluZm8gPSAwOworICAg
IH0KIH0KIAotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnNldEdlb21ldHJ5KGNvbnN0IEludFJl
Y3QmIG5ld1JlY3QpCit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6cmVTaXplV2luZG93KGNvbnN0
IEludFJlY3QmIG5ld1JlY3QsIFBsYXRmb3JtQnVmZmVySGFuZGxlIHdpbmRvd0lkKQogewotICAg
IEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRyeShuZXdSZWN0KTsKLSAgICBYUmVzaXplV2lu
ZG93KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIG1fYnVmZmVySGFuZGxlLCBuZXdS
ZWN0LndpZHRoKCksIG5ld1JlY3QuaGVpZ2h0KCkpOworICAgIFhSZXNpemVXaW5kb3cobV9zaGFy
ZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgd2luZG93SWQsIG5ld1JlY3Qud2lkdGgoKSwgbmV3
UmVjdC5oZWlnaHQoKSk7CiB9CiAKLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZz
Y3JlZW5XaW5kb3coKQordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZnNjcmVlbldp
bmRvdyhQbGF0Zm9ybUJ1ZmZlckhhbmRsZSogaGFuZGxlSWQpCiB7CiAgICAgaWYgKCFtX3NoYXJl
ZFJlc291cmNlcykKICAgICAgICAgcmV0dXJuOwpAQCAtNjUsMTQgKzcxLDExIEBAIHZvaWQgWDEx
T2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3coKQogICAgIGlmICghZGlzcGxh
eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIGNvbmZpZyA9
IG1fc2hhcmVkUmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwotCi0gICAgaWYgKCFj
b25maWcpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgYSB2YWxpZCBj
b25maWdpcmF0aW9uLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCisjaWYgVVNFKEdMWCkK
ICAgICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9IG1fc2hhcmVkUmVzb3VyY2VzLT52aXN1YWxJbmZv
KCk7CisjZWxzZQorICAgIFhWaXN1YWxJbmZvKiB2aXNJbmZvID0gbV9jb25maWdWaXN1YWxJbmZv
OworI2VuZGlmCiAKICAgICBpZiAoIXZpc0luZm8pIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWls
ZWQgdG8gZmluZCB2YWxpZCBYVmlzdWFsIik7CkBAIC04OCwyNCArOTEsMjcgQEAgdm9pZCBYMTFP
ZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZnNjcmVlbldpbmRvdygpCiAgICAgYXR0cmlidXRlLmJh
Y2tncm91bmRfcGl4ZWwgPSBXaGl0ZVBpeGVsKGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0ZS5i
b3JkZXJfcGl4ZWwgPSBCbGFja1BpeGVsKGRpc3BsYXksIDApOwogICAgIGF0dHJpYnV0ZS5jb2xv
cm1hcCA9IGNtYXA7Ci0gICAgbV9idWZmZXJIYW5kbGUgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXks
IHhXaW5kb3csIDAsIDAsIDEsIDEsIDAsIHZpc0luZm8tPmRlcHRoLCBJbnB1dE91dHB1dCwgdmlz
SW5mby0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAm
YXR0cmlidXRlKTsKKyAgICBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB0ZW1wSGFuZGxlSWQ7CisgICAg
dGVtcEhhbmRsZUlkID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LCB4V2luZG93LCAwLCAwLCAxLCAx
LCAwLCB2aXNJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8tPnZpc3VhbCwgQ1dCYWNr
UGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwgJmF0dHJpYnV0ZSk7CiAKLSAgICBp
ZiAoIW1fYnVmZmVySGFuZGxlKSB7CisgICAgaWYgKCF0ZW1wSGFuZGxlSWQpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIG9mZnNjcmVlbiB3aW5kb3ciKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXks
IG1fYnVmZmVySGFuZGxlLCAwKTsKLSAgICBYQ29tcG9zaXRlUmVkaXJlY3RXaW5kb3coZGlzcGxh
eSwgbV9idWZmZXJIYW5kbGUsIENvbXBvc2l0ZVJlZGlyZWN0TWFudWFsKTsKKyAgICBYU2V0V2lu
ZG93QmFja2dyb3VuZFBpeG1hcChkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIDApOworICAgIFhDb21w
b3NpdGVSZWRpcmVjdFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQsIENvbXBvc2l0ZVJlZGly
ZWN0TWFudWFsKTsKKyAgICAqaGFuZGxlSWQgPSB0ZW1wSGFuZGxlSWQ7CisgICAgbV9idWZmZXJI
YW5kbGUgPSB0ZW1wSGFuZGxlSWQ7CiAKICAgICBpZiAobV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJl
bmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKQotICAgICAgICBYTWFwV2luZG93KGRpc3BsYXksIG1f
YnVmZmVySGFuZGxlKTsKKyAgICAgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCB0ZW1wSGFuZGxlSWQp
OwogCiB9CiAKLXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KCkKK3ZvaWQg
WDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlIHdp
bmRvd0lkKQogewotICAgIGlmICghbV9idWZmZXJIYW5kbGUpCisgICAgaWYgKCF3aW5kb3dJZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OmRlc3Ryb3koKTsKQEAg
LTExMyw5ICsxMTksNjcgQEAgdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3co
KQogICAgIGlmICghZGlzcGxheSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWERlc3Ryb3lXaW5k
b3coZGlzcGxheSwgbV9idWZmZXJIYW5kbGUpOwotICAgIG1fYnVmZmVySGFuZGxlID0gMDsKKyAg
ICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCB3aW5kb3dJZCk7Cit9CisKK0Rpc3BsYXkqIFgxMU9m
ZlNjcmVlbldpbmRvdzo6bmF0aXZlU2hhcmVkRGlzcGxheSgpCit7CisgICAgcmV0dXJuIG1fc2hh
cmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCk7Cit9CisKKyNpZiBVU0UoRUdMKQorYm9vbCBYMTFP
ZmZTY3JlZW5XaW5kb3c6OnNldFZpc3VhbElkKGNvbnN0IEVHTGludCBpZCkKK3sKKyAgICBWaXN1
YWxJRCB2aXN1YWxJZCA9IHN0YXRpY19jYXN0PFZpc3VhbElEPihpZCk7CisKKyAgICBpZiAoIXZp
c3VhbElkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBFR0wgaGFzIHN1Z2dlc3Rl
ZCBhIHZpc3VhbCBpZCwgc28gZ2V0IHRoZSByZXN0IG9mIHRoZSB2aXN1YWwgaW5mbyBmb3IgdGhh
dCBpZC4KKyAgICBYVmlzdWFsSW5mbyB2aXN1YWxJbmZvVGVtcGxhdGU7CisgICAgbWVtc2V0KCZ2
aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFsSW5mbykpOworICAgIHZpc3VhbElu
Zm9UZW1wbGF0ZS52aXN1YWxpZCA9IHZpc3VhbElkOworCisgICAgWFZpc3VhbEluZm8qIGNob3Nl
blZpc3VhbEluZm87CisgICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOworICAgIGNob3NlblZpc3Vh
bEluZm8gPSBYR2V0VmlzdWFsSW5mbyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCBW
aXN1YWxJRE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGluZ0NvdW50KTsKKyAgICBp
ZiAoY2hvc2VuVmlzdWFsSW5mbykgeworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgICAg
ICBpZiAobV9zaGFyZWRSZXNvdXJjZXMtPmlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpKSB7
CisgICAgICAgICAgICBYUmVuZGVyUGljdEZvcm1hdCogZm9ybWF0ID0gWFJlbmRlckZpbmRWaXN1
YWxGb3JtYXQobV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgY2hvc2VuVmlzdWFsSW5m
by0+dmlzdWFsKTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgJiYgZm9ybWF0LT5kaXJlY3QuYWxw
aGFNYXNrID4gMCkgeworICAgICAgICAgICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9IGNob3Nl
blZpc3VhbEluZm87CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBpZiAoY2hvc2VuVmlzdWFsSW5mby0+ZGVwdGgg
PT0gMzIpIHsKKyAgICAgICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9IGNob3NlblZpc3VhbElu
Zm87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
ICghbV9jb25maWdWaXN1YWxJbmZvKSB7CisgICAgICAgIG1lbXNldCgmdmlzdWFsSW5mb1RlbXBs
YXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKKyAgICAgICAgWFZpc3VhbEluZm8qIG1hdGNo
aW5nVmlzdWFsczsKKyAgICAgICAgaW50IG1hdGNoaW5nQ291bnQgPSAwOworCisgICAgICAgIHZp
c3VhbEluZm9UZW1wbGF0ZS5kZXB0aCA9IGNob3NlblZpc3VhbEluZm8tPmRlcHRoOworICAgICAg
ICBtYXRjaGluZ1Zpc3VhbHMgPSBYR2V0VmlzdWFsSW5mbyhtX3NoYXJlZFJlc291cmNlcy0+eDEx
RGlzcGxheSgpLCBWaXN1YWxEZXB0aE1hc2ssICZ2aXN1YWxJbmZvVGVtcGxhdGUsICZtYXRjaGlu
Z0NvdW50KTsKKworICAgICAgICBpZiAobWF0Y2hpbmdWaXN1YWxzKSB7CisgICAgICAgICAgICBt
X2NvbmZpZ1Zpc3VhbEluZm8gPSAmbWF0Y2hpbmdWaXN1YWxzWzBdOworICAgICAgICAgICAgWEZy
ZWUobWF0Y2hpbmdWaXN1YWxzKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFtX2NvbmZpZ1Zpc3VhbEluZm8pCisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIHJldHJpZXZlIFhWaXN1YWwgSW5mby5cbiIpOworCisgICAgcmV0dXJuIGZh
bHNlOwogfQorI2VuZGlmCiAKIH0KIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKaW5k
ZXggYjI1YjJhYy4uOWMwODBjMyAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaAorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCkBA
IC00MCwxMyArNDAsMzAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKEdMWCkK
IGNsYXNzIFNoYXJlZEdMWFJlc291cmNlczsKIHR5cGVkZWYgU2hhcmVkR0xYUmVzb3VyY2VzIFBs
YXRmb3JtU2hhcmVkUmVzb3VyY2VzOworI2VsaWYgVVNFKEVHTCkKK2NsYXNzIFNoYXJlZFgxMVJl
c291cmNlczsKK3R5cGVkZWYgU2hhcmVkWDExUmVzb3VyY2VzIFBsYXRmb3JtU2hhcmVkUmVzb3Vy
Y2VzOworI2VuZGlmCiAKIGNsYXNzIFNoYXJlZFgxMVJlc291cmNlcyA6IHB1YmxpYyBXVEY6OlJl
ZkNvdW50ZWRCYXNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFyZWRYMTFSZXNvdXJj
ZXMpOwogCiBwdWJsaWM6CisjaWYgVVNFKEVHTCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0
Zm9ybVNoYXJlZFJlc291cmNlcz4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zdGF0
aWNTaGFyZWRSZXNvdXJjZSkKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSBu
ZXcgUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bV9zdGF0aWNTaGFyZWRSZXNvdXJjZS0+cmVmKCk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG1fc3RhdGljU2hhcmVkUmVzb3VyY2UpOworICAgIH0KKyNlbmRpZgorCiAgICAgdm9pZCBkZXJl
ZigpCiAgICAgewogICAgICAgICBpZiAoZGVyZWZCYXNlKCkpIHsKQEAgLTk0LDI5ICsxMTEsMTYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV93aW5kb3c7CiAgICAgfQogCi0gICAgWFZpc3Vh
bEluZm8qIHZpc3VhbEluZm8oKQotICAgIHsKLSAgICAgICAgaWYgKCFtX1Zpc3VhbEluZm8pCi0g
ICAgICAgICAgICBzdXJmYWNlQ29udGV4dENvbmZpZygpOwotCi0gICAgICAgIHJldHVybiBtX1Zp
c3VhbEluZm87Ci0gICAgfQotCiAgICAgYm9vbCBpc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uOwogICAg
IH0KIAotICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29u
ZmlnKCkgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIHN1cmZhY2VDb250
ZXh0Q29uZmlnKCkgPSAwOwotICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5IG5hdGl2ZURpc3Bs
YXkoKSA9IDA7Ci0KIHByb3RlY3RlZDoKICAgICBTaGFyZWRYMTFSZXNvdXJjZXMoKQogICAgICAg
ICA6IG1fc3VwcG9ydHNYUmVuZGVyRXh0ZW5zaW9uKGZhbHNlKQogICAgICAgICAsIG1fd2luZG93
KDApCiAgICAgICAgICwgbV9kaXNwbGF5KDApCi0gICAgICAgICwgbV9WaXN1YWxJbmZvKDApCiAg
ICAgewogICAgIH0KIApAQCAtMTMxLDExICsxMzUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAg
ICBtX3dpbmRvdyA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9WaXN1YWxJbmZvKSB7
Ci0gICAgICAgICAgICBYRnJlZShtX1Zpc3VhbEluZm8pOwotICAgICAgICAgICAgbV9WaXN1YWxJ
bmZvID0gMDsKLSAgICAgICAgfQotCiAgICAgICAgIFhDbG9zZURpc3BsYXkobV9kaXNwbGF5KTsK
ICAgICAgICAgbV9kaXNwbGF5ID0gMDsKICAgICB9CkBAIC0xNDQsNyArMTQzLDYgQEAgcHJvdGVj
dGVkOgogICAgIGJvb2wgbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247CiAgICAgV2luZG93IG1f
d2luZG93OwogICAgIERpc3BsYXkqIG1fZGlzcGxheTsKLSAgICBYVmlzdWFsSW5mbyogbV9WaXN1
YWxJbmZvOwogfTsKIAogY2xhc3MgWDExT2ZmU2NyZWVuV2luZG93IDogcHVibGljIEdMUGxhdGZv
cm1TdXJmYWNlIHsKQEAgLTE1MywxMiArMTUxLDE3IEBAIGNsYXNzIFgxMU9mZlNjcmVlbldpbmRv
dyA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7CiBwdWJsaWM6CiAgICAgWDExT2ZmU2NyZWVu
V2luZG93KCk7CiAgICAgdmlydHVhbCB+WDExT2ZmU2NyZWVuV2luZG93KCk7Ci0gICAgdm9pZCBz
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7Ci0gICAgdm9pZCBjcmVhdGVPZmZzY3JlZW5XaW5k
b3coKTsKLSAgICB2b2lkIGRlc3Ryb3lXaW5kb3coKTsKKyAgICB2b2lkIGNyZWF0ZU9mZnNjcmVl
bldpbmRvdyhQbGF0Zm9ybUJ1ZmZlckhhbmRsZSopOworICAgIHZvaWQgZGVzdHJveVdpbmRvdyhQ
bGF0Zm9ybUJ1ZmZlckhhbmRsZSk7CisgICAgdm9pZCByZVNpemVXaW5kb3coY29uc3QgSW50UmVj
dCYsIFBsYXRmb3JtQnVmZmVySGFuZGxlKTsKKyAgICBEaXNwbGF5KiBuYXRpdmVTaGFyZWREaXNw
bGF5KCk7CisjaWYgVVNFKEVHTCkKKyAgICBib29sIHNldFZpc3VhbElkKGNvbnN0IEVHTGludCk7
CisjZW5kaWYKIAogcHJvdGVjdGVkOgogICAgIFJlZlB0cjxQbGF0Zm9ybVNoYXJlZFJlc291cmNl
cz4gbV9zaGFyZWRSZXNvdXJjZXM7CisgICAgWFZpc3VhbEluZm8qIG1fY29uZmlnVmlzdWFsSW5m
bzsKIH07CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZSBTb3Vy
Y2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQppbmRleCA4MDBhNzA5Li5mZTIwMmVmIDEwMDY0NAot
LS0gU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKKysrIFNvdXJjZS9jbWFrZS9PcHRpb25z
RWZsLmNtYWtlCkBAIC0xNzUsMTIgKzE3NSwyNSBAQCBpZiAoRU5BQkxFX1dFQkdMIE9SIFdURl9V
U0VfVElMRURfQkFDS0lOR19TVE9SRSkKIAogICAgIGlmIChPUEVOR0xYX0ZPVU5EKQogICAgICAg
ICBhZGRfZGVmaW5pdGlvbnMoLURIQVZFX0dMWCkKLSAgICAgICAgYWRkX2RlZmluaXRpb25zKC1E
V1RGX1VTRV9HTFg9MSkKKyAgICBlbmRpZiAoKQorCisgICAgb3B0aW9uKEVOQUJMRV9FR0wgT04p
CiAKLSAgICAgICAgaWYgKFgxMV9YY29tcG9zaXRlX0ZPVU5EIEFORCBYMTFfWHJlbmRlcl9GT1VO
RCkKLSAgICAgICAgICAgc2V0KFVTRV9HUkFQSElDU19TVVJGQUNFIDEpCi0gICAgICAgIGVuZGlm
ICgpCisgICAgaWYgKEVOQUJMRV9FR0wpCisgICAgICAgIGZpbmRfcGFja2FnZShFR0wgUkVRVUlS
RUQpCiAgICAgZW5kaWYgKCkKKworICAgIGlmIChFR0xfRk9VTkQpCisgICAgICAgIHNldChXVEZf
VVNFX0VHTCAxKQorICAgICAgICBhZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0VHTD0xKQorICAg
ICBlbHNlaWYgKE9QRU5HTFhfRk9VTkQpCisgICAgICAgICBzZXQoV1RGX1VTRV9HTFggMSkKKyAg
ICAgICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfR0xYPTEpCisgICAgZW5kaWYgKCkKKwor
ICAgICBpZiAoKE9QRU5HTFhfRk9VTkQgT1IgRUdMX0ZPVU5EKSBBTkQgWDExX1hjb21wb3NpdGVf
Rk9VTkQgQU5EIFgxMV9YcmVuZGVyX0ZPVU5EKQorICAgICAgICAgc2V0KFVTRV9HUkFQSElDU19T
VVJGQUNFIDEpCisgICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX0lOU1BFQ1RP
UikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180772</attachid>
            <date>2012-12-26 18:10:09 -0800</date>
            <delta_ts>2012-12-27 10:05:50 -0800</delta_ts>
            <desc>patch</desc>
            <filename>reviewchanges.patch</filename>
            <type>text/plain</type>
            <size>47156</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLjUxZDQxZjMgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQgY2FuIGJlIGVuYWJsZWQgZHVy
aW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1ERU5BQkxFX0VHTD1PTiBhcyBj
bWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNF
ZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RA
Z21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzgzMzguCmRp
ZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCAxYTA0MDRmLi4wNDg3OGJkIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAxMi0x
Mi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3aXRoIEdMWC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTYwMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgaW4g
cHJlcGFyYXRpb24gZm9yIGFkZGluZyBHTEVTMiBzdXBwb3J0LgorICAgICAgICBUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJhY2tlbmQuIEVHTCBzdXBwb3J0IGNhbiBi
ZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAgICAgICAgYnkgcGFzc2luZyAtREVOQUJM
RV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRlci4gVGhpcyBpcyBkaXNhYmxlZCBieSBk
ZWZhdWx0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0
ZUNvbnRleHQpOiBBZGRlZCBHTFggY2hlY2tzLgorICAgICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9y
bUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQpOiBBZGRlZCBzdXBwb3J0IGZvciBjcmVh
dGluZyBFR0xPZmZzY3JlZW4gQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1D
b250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBwZXIpOiBBZGRlZCBzdXBwb3J0IGZvciBj
cmVhdGluZyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdM
UGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKTogQWRkZWQgc3VwcG9ydCBm
b3IgY3JlYXRpbmcgRUdMU3VyZmFjZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmlzUm9idXN0bmVzc0V4dFN1cHBvcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OkVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OmhhbmRsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6fkVHTE9mZlNjcmVlbkNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1h
a2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRm
b3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4
dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0
OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFR0xDdXJyZW50Q29udGV4
dFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjp+
RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAgICAgKEVHTE9mZlNjcmVlbkNvbnRleHQp
OgorCisgICAgICAgIEVHTCBpbXBsZW1lbnRhdGlvbiBmb3IgQ29udGV4dCBNYW5hZ2VtZW50Lgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjp+RUdMV2luZG93VHJhbnNwb3J0U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpjb25m
aWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6
OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZh
Y2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFj
ZTo6ZnJlZUVHTFJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTFN1cmZhY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRUdMV2lu
ZG93VHJhbnNwb3J0U3VyZmFjZSk6CisKKyAgICAgICAgRUdMIGltcGxlbWVudGF0aW9uIGZvciBP
ZmZzY3JlZW4gU3VyZmFjZS4gVGhlIHN1cmZhY2UgaXMgYmFja2VkIGJ5IG5hdGl2ZSB3aW5kb3cu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVs
cGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEVHTERpc3BsYXk6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTERpc3Bs
YXk6OnNoYXJlZEVHTERpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkRUdMRGlzcGxh
eTo6U2hhcmVkRUdMRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRFR0xEaXNwbGF5
OjpjbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTERpc3BsYXk6On5TaGFyZWRF
R0xEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6RUdMQ29uZmln
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6fkVHTENvbmZpZ0hl
bHBlcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6OmRpc3BsYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpwQnVmZmVyQ29udGV4dENvbmZpZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6OnN1cmZhY2VDb250ZXh0Q29uZmlnKToK
KyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBlcjo6bmF0aXZlVmlzdWFsSWQpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpyZXNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpFR0xDb25maWdIZWxwZXI6OmNyZWF0ZUNvbmZpZyk6CisKKyAgICAgICAgSGVscGVyIGNsYXNz
IHRvIGluaXRpYWxpemUgRUdMIHJlc291cmNlcyBhbmQgY2hvb3NlIHJpZ2h0IEVHTCBjb25maWd1
cmF0aW9uLgorCiAyMDEyLTEyLTIxICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4K
IAogICAgICAgICBVcGRhdGUgbG9jYWxpemFibGUgc3RyaW5ncyBhcyBhIGZvbGxvd3VwIHRvIGh0
dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEzODM4NwpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDU2ZTMwNmMuLmU3ZTQ2OWMgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUVmbC5jbWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI2NSw2
ICsyNjUsMTQgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgiCiAgICAgICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCiAgICAgKQorCisgICAgaWYgKFdURl9VU0Vf
RUdMKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAgICAgICAgICR7RUdMX0lOQ0xVREVfRElSfQorICAgICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbCIKKyAgICApCisgICAgZW5kaWYgKCkKKwog
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9PcGVuR0xTaGltcy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2lu
Z0J1ZmZlckNhaXJvLmNwcApAQCAtMjc3LDE4ICsyODUsMzYgQEAgaWYgKFdURl9VU0VfM0RfR1JB
UEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMQ29tbW9uLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9HcmFwaGljc1N1cmZhY2UuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9HTFhTdXJmYWNlLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYQ29udGV4dC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAogICAgICkKKworICAgIGlmIChXVEZf
VVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcAorICAgICAg
ICApCisgICAgZW5kaWYgKCkKKworICAgIGlmIChXVEZfVVNFX0dMWCkKKyAgICAgICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAorICAgICAgICApCisgICAgZW5kaWYgKCkKKwogICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAgICAgICAgICR7WDExX1gxMV9MSUJ9CiAg
ICAgICAgICR7WDExX1hjb21wb3NpdGVfTElCfQogICAgICAgICAke1gxMV9YcmVuZGVyX0xJQn0K
ICAgICApCisgICAgaWYgKFdURl9VU0VfRUdMKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0xJQlJBUklFUworICAgICAgICAgICAgJHtFR0xfTElCUkFSWX0KKyAgICAgICAgKQorICAgIGVu
ZGlmICgpCiBlbmRpZiAoKQogCiBhZGRfZGVmaW5pdGlvbnMoLUREQVRBX0RJUj0iJHtDTUFLRV9J
TlNUQUxMX1BSRUZJWH0vJHtEQVRBX0lOU1RBTExfRElSfSIpCmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaAppbmRleCAyZGZiNGM5Li5mODIzZGM0IDEw
MDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5o
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xEZWZzLmgKQEAg
LTI4LDEyICsyOCwxMiBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0j
aW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLQogI2lmIFVTRShPUEVOR0xfRVNfMikKKyNpbmNsdWRl
ICJPcGVuR0xFU1NoaW1zLmgiCiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xF
UzIvZ2wyZXh0Lmg+CiAjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSA8
R0wvZ2wuaD4KICNpbmNsdWRlIDxHTC9nbGV4dC5oPgogI2VuZGlmCkBAIC00Miw2ICs0MiwxMiBA
QAogI2luY2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAKKyNpZiBVU0UoRUdMKQorI2RlZmluZSBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgMQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxF
R0wvZWdsZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVp
bnQzMl90IFBsYXRmb3JtQnVmZmVySGFuZGxlOwpAQCAtNTEsNiArNTcsMTYgQEAgdHlwZWRlZiBH
TFhDb250ZXh0IFBsYXRmb3JtQ29udGV4dDsKIHR5cGVkZWYgRGlzcGxheSogUGxhdGZvcm1EaXNw
bGF5OwogdHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9ybVN1cmZhY2VDb25maWc7CiB0eXBlZGVm
IEdMWERyYXdhYmxlIFBsYXRmb3JtRHJhd2FibGU7CisjZWxpZiBVU0UoRUdMKQorI2lmIFVTRShP
UEVOR0xfRVNfMikKK3N0YXRpYyBjb25zdCBFR0xlbnVtIGVnbEFQSVZlcnNpb24gPSBFR0xfT1BF
TkdMX0VTX0FQSTsKKyNlbHNlCitzdGF0aWMgY29uc3QgRUdMZW51bSBlZ2xBUElWZXJzaW9uID0g
RUdMX09QRU5HTF9BUEk7CisjZW5kaWYKK3R5cGVkZWYgRUdMQ29udGV4dCBQbGF0Zm9ybUNvbnRl
eHQ7Cit0eXBlZGVmIEVHTERpc3BsYXkgUGxhdGZvcm1EaXNwbGF5OwordHlwZWRlZiBFR0xDb25m
aWcgUGxhdGZvcm1TdXJmYWNlQ29uZmlnOwordHlwZWRlZiBFR0xTdXJmYWNlIFBsYXRmb3JtRHJh
d2FibGU7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUNvbnRleHQ7CiB0eXBlZGVmIHZv
aWQqIFBsYXRmb3JtRGlzcGxheTsKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKaW5kZXggNzYyMWUyZS4u
Nzk5NTliYSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKQEAgLTMwLDYgKzMwLDggQEAKIAogI2lm
IFVTRShHTFgpCiAjaW5jbHVkZSAiR0xYQ29udGV4dC5oIgorI2VsaWYgVVNFKEVHTCkKKyNpbmNs
dWRlICJFR0xDb250ZXh0LmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CkBAIC00NCwxMSArNDYsMTEgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0
Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QKICAgICBpZiAoIWlu
aXRpYWxpemVPcGVuR0xTaGltcygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlm
ICghZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7CiAjaWYgVVNFKEdMWCkKKyAgICBpZiAo
IWdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQikgewogICAgICAgICBnbEdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIgPSByZWludGVycHJldF9jYXN0PFBGTkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRV
U0FSQlBST0M+KGdsWEdldFByb2NBZGRyZXNzQVJCKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1
Ynl0ZSo+KCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIiKSkpOwotI2VuZGlmCiAgICAgfQor
I2VuZGlmCiAKICAgICBzd2l0Y2ggKHJlbmRlclN0eWxlKSB7CiAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgpAQCAtNzAsOCArNzIsOSBAQCBQYXNzT3duUHRyPEdM
UGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4dDo6Y3JlYXRlQ29udGV4dChHcmFwaGlj
c0NvbnRleHQzRAogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRl
eHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogewogI2lmIFVTRShHTFgpCi0gICAgT3duUHRy
PEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0gYWRvcHRQdHIobmV3IEdMWE9mZlNjcmVl
bkNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGdseENvbnRleHQucmVsZWFzZSgpOworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuQ29udGV4dCgpKTsKKyNlbGlmIFVTRShFR0wpCisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFR0xPZmZTY3JlZW5Db250ZXh0KCkpOwogI2VuZGlmCiAK
ICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTgwLDggKzgzLDkgQEAgUGFzc093blB0cjxHTFBsYXRm
b3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQog
UGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1
cnJlbnRDb250ZXh0V3JhcHBlcigpCiB7CiAjaWYgVVNFKEdMWCkKLSAgICBPd25QdHI8R0xQbGF0
Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0cihuZXcgR0xYQ3VycmVudENvbnRleHRX
cmFwcGVyKCkpOwotICAgIHJldHVybiBnbHhDb250ZXh0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEdMWEN1cnJlbnRDb250ZXh0V3JhcHBlcigpKTsKKyNlbGlmIFVTRShFR0wp
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKSk7CiAj
ZW5kaWYKIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5oCmluZGV4IDE3MGI3
NmUuLjAzNTNkZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGlj
OgogICAgIC8vIERvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0IGlmIHRoaXMgaXMgbm90IHRoZSBjdXJy
ZW50IENvbnRleHQuCiAgICAgdm9pZCByZWxlYXNlQ3VycmVudCgpOwogCi0gICAgUGxhdGZvcm1D
b250ZXh0IGhhbmRsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUGxhdGZvcm1Db250ZXh0IGhhbmRs
ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzQ3VycmVudENvbnRleHQoKSBjb25zdDsK
IApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBs
YXRmb3JtU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dMUGxhdGZvcm1TdXJmYWNlLmNwcAppbmRleCA4MzkxZTQ3Li43ZjdhNTY0IDEwMDY0NAotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNl
LmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZv
cm1TdXJmYWNlLmNwcApAQCAtMzIsNiArMzIsMTAgQEAKICNpbmNsdWRlICJHTFhTdXJmYWNlLmgi
CiAjZW5kaWYKIAorI2lmIFVTRShFR0wpCisjaW5jbHVkZSAiRUdMU3VyZmFjZS5oIgorI2VuZGlm
CisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01MCwxMCArNTQsMTQgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9y
bVN1cmZhY2U6OmNyZWF0ZU9mZnNjcmVlblN1cmZhY2UoKQogCiBQYXNzT3duUHRyPEdMUGxhdGZv
cm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZSgpCiB7
Ci0jaWYgVVNFKEdMWCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCisjaWYgVVNFKEdMWCkKICAgICBPd25QdHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1
cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3VyZmFjZSgpKTsKKyNlbGlmIFVTRShF
R0wpCisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBzdXJmYWNlID0gYWRvcHRQdHIobmV3
IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKSk7CisjZW5kaWYKIAotICAgIGlmIChzdXJmYWNl
LT5oYW5kbGUoKSkKKyAgICBpZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJm
YWNlLT5kcmF3YWJsZSgpKQogICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CiAjZW5k
aWYKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb25maWdIZWxwZXIuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjdlMjMwNDMKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ0hlbHBlci5jcHAKQEAgLTAsMCAr
MSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJFR0xDb25maWdIZWxwZXIuaCIKKworI2lmIFVTRShFR0wpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU2hhcmVkRUdMRGlzcGxheSogU2hhcmVkRUdMRGlzcGxheTo6bV9zdGF0aWNTaGFy
ZWRFR0xEaXNwbGF5ID0gMDsKKworc3RhdGljIEVHTGludCBjb25maWdBdHRyaWJ1dGVMaXN0W10g
PSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9P
UEVOR0xfRVMyX0JJVCwKKyNlbHNlCisgICAgRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9CSVQsCisjZW5kaWYKKyAgICBFR0xfUkVEX1NJWkUsIDgsCisgICAgRUdMX0dSRUVOX1NJWkUs
IDgsCisgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICBFR0xfU1RFTkNJTF9TSVpFLCA4LAorICAg
IEVHTF9BTFBIQV9TSVpFLCA4LAorICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9OT05FLAorICAg
IEVHTF9OT05FCit9OworCit2b2lkIFNoYXJlZEVHTERpc3BsYXk6OmRlcmVmKCkKK3sKKyAgICBp
ZiAoZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5ID0gMDsK
KyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorfQorCitFR0xEaXNwbGF5IFNoYXJlZEVHTERp
c3BsYXk6OnNoYXJlZEVHTERpc3BsYXkoKQoreworICAgIHJldHVybiBtX2VnbERpc3BsYXk7Cit9
CisKK1NoYXJlZEVHTERpc3BsYXk6OlNoYXJlZEVHTERpc3BsYXkoTmF0aXZlU2hhcmVkRGlzcGxh
eSogZGlzcGxheSkKKyAgICA6IG1fZWdsRGlzcGxheShFR0xfTk9fRElTUExBWSkKK3sKKyAgICBp
ZiAoZGlzcGxheSkKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gZWdsR2V0RGlzcGxheShyZWludGVy
cHJldF9jYXN0PEVHTE5hdGl2ZURpc3BsYXlUeXBlPihkaXNwbGF5KSk7CisgICAgZWxzZQorICAg
ICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwor
CisgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICBMT0df
RVJST1IoIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBFR0xCb29sZWFuIHN1Y2Nlc3M7CisgICAgc3VjY2VzcyA9IGVn
bEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAwLCAwKTsKKworICAgIGlmIChzdWNjZXNzICE9IEVH
TF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiRUdMSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxu
Iik7CisgICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgIH0KKworICAg
IHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNpb24pOworCisgICAgaWYgKHN1Y2Nlc3Mg
IT0gRUdMX1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IEVHTCBBUEko
JWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19E
SVNQTEFZOworICAgIH0KK30KKwordm9pZCBTaGFyZWRFR0xEaXNwbGF5OjpjbGVhbnVwKCkKK3sK
KyAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm47
CisKKyAgICBlZ2xNYWtlQ3VycmVudChtX2VnbERpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xf
Tk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAgIGVnbFRlcm1pbmF0ZShtX2VnbERpc3Bs
YXkpOworICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworfQorCitTaGFyZWRFR0xE
aXNwbGF5Ojp+U2hhcmVkRUdMRGlzcGxheSgpCit7CisgICAgY2xlYW51cCgpOworfQorCitFR0xD
b25maWdIZWxwZXI6OkVHTENvbmZpZ0hlbHBlcihOYXRpdmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5
KQorICAgIDogbV9wYnVmZmVyRkJDb25maWcoMCkKKyAgICAsIG1fc3VyZmFjZUNvbnRleHRGQkNv
bmZpZygwKQoreworICAgIG1fc2hhcmVkRGlzcGxheSA9IFNoYXJlZEVHTERpc3BsYXk6OmNyZWF0
ZShkaXNwbGF5KTsKK30KKworRUdMQ29uZmlnSGVscGVyOjp+RUdMQ29uZmlnSGVscGVyKCkKK3sK
K30KKworUGxhdGZvcm1EaXNwbGF5IEVHTENvbmZpZ0hlbHBlcjo6ZGlzcGxheSgpCit7CisgICAg
cmV0dXJuIG1fc2hhcmVkRGlzcGxheS0+c2hhcmVkRUdMRGlzcGxheSgpOworfQorCitFR0xDb25m
aWcgRUdMQ29uZmlnSGVscGVyOjpwQnVmZmVyQ29udGV4dENvbmZpZygpCit7CisgICAgaWYgKCFt
X3BidWZmZXJGQkNvbmZpZykgeworICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVH
TF9QSVhNQVBfQklUOworICAgICAgICBtX3BidWZmZXJGQkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhj
b25maWdBdHRyaWJ1dGVMaXN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9wYnVmZmVyRkJDb25m
aWc7Cit9CisKK0VHTENvbmZpZyBFR0xDb25maWdIZWxwZXI6OnN1cmZhY2VDb250ZXh0Q29uZmln
KCkKK3sKKyAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZykgeworICAgICAgICBjb25m
aWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9XSU5ET1dfQklUOworICAgICAgICBtX3N1cmZhY2VD
b250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0cmlidXRlTGlzdCk7CisgICAg
fQorCisgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKK30KKworRUdMaW50IEVH
TENvbmZpZ0hlbHBlcjo6bmF0aXZlVmlzdWFsSWQoY29uc3QgRUdMQ29uZmlnJiBjb25maWcpCit7
CisgICAgaWYgKGRpc3BsYXkoKSA9PSBFR0xfTk9fRElTUExBWSkKKyAgICAgICAgcmV0dXJuIC0x
OworCisgICAgRUdMaW50IGVnbFZhbHVlID0gMDsKKyAgICBlZ2xHZXRDb25maWdBdHRyaWIoZGlz
cGxheSgpLCBjb25maWcsIEVHTF9OQVRJVkVfVklTVUFMX0lELCAmZWdsVmFsdWUpOworCisgICAg
cmV0dXJuIGVnbFZhbHVlOworfQorCit2b2lkIEVHTENvbmZpZ0hlbHBlcjo6cmVzZXQoKQorewor
ICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7CisgICAgbV9wYnVmZmVyRkJDb25maWcg
PSAwOworfQorCitFR0xDb25maWcgRUdMQ29uZmlnSGVscGVyOjpjcmVhdGVDb25maWcoY29uc3Qg
aW50IGF0dHJpYnV0ZXNbXSkKK3sKKyAgICBpZiAoZGlzcGxheSgpID09IEVHTF9OT19ESVNQTEFZ
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBudW1Db25maWdzOworICAgIEVHTENvbmZp
ZyByaWdodENvbmZpZyA9IDA7CisKKyAgICBpZiAoIWVnbENob29zZUNvbmZpZyhkaXNwbGF5KCks
IGF0dHJpYnV0ZXMsICZyaWdodENvbmZpZywgMSwgJm51bUNvbmZpZ3MpKQorICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBnZXQgc3VwcG9ydGVkIGNvbmZpZ2lyYXRpb25zLlxuIik7CisKKyAg
ICBpZiAobnVtQ29uZmlncyAhPSAxKSB7CisgICAgICAgIExPR19FUlJPUigiRUdMQ2hvb3NlQ29u
ZmlnIGRpZG4ndCByZXR1cm4gZXhhY3RseSBvbmUgY29uZmlnIGJ1dCAoJWQpLlxuIiwgbnVtQ29u
Zmlncyk7CisgICAgICAgIHJpZ2h0Q29uZmlnID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcmln
aHRDb25maWc7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ0hlbHBlci5oIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTg3MDExCi0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdI
ZWxwZXIuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVH
TENvbmZpZ0hlbHBlcl9oCisjZGVmaW5lIEVHTENvbmZpZ0hlbHBlcl9oCisKKyNpZiBVU0UoRUdM
KQorCisjaW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dHlwZWRlZiBEaXNwbGF5IE5hdGl2ZVNoYXJlZERpc3BsYXk7CisKK2NsYXNzIFNoYXJlZEVHTERp
c3BsYXkgOiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2hhcmVkRUdMRGlzcGxheSk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTaGFyZWRFR0xEaXNwbGF5PiBjcmVhdGUoTmF0aXZlU2hhcmVkRGlzcGxheSogZGlzcGxheSkK
KyAgICB7CisgICAgICAgIGlmICghbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5KQorICAgICAgICAg
ICAgbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5ID0gbmV3IFNoYXJlZEVHTERpc3BsYXkoZGlzcGxh
eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheS0+
cmVmKCk7CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkRUdMRGlzcGxh
eSk7CisgICAgfQorCisgICAgdm9pZCBkZXJlZigpOworICAgIEVHTERpc3BsYXkgc2hhcmVkRUdM
RGlzcGxheSgpOworCitwcm90ZWN0ZWQ6CisgICAgU2hhcmVkRUdMRGlzcGxheShOYXRpdmVTaGFy
ZWREaXNwbGF5Kik7CisgICAgdm9pZCBjbGVhbnVwKCk7CisgICAgdmlydHVhbCB+U2hhcmVkRUdM
RGlzcGxheSgpOworCisgICAgc3RhdGljIFNoYXJlZEVHTERpc3BsYXkqIG1fc3RhdGljU2hhcmVk
RUdMRGlzcGxheTsKKyAgICBFR0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKK307CisKK2NsYXNzIEVH
TENvbmZpZ0hlbHBlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMQ29uZmlnSGVscGVy
KTsKKworcHVibGljOgorICAgIEVHTENvbmZpZ0hlbHBlcihOYXRpdmVTaGFyZWREaXNwbGF5KiA9
IDApOworICAgIHZpcnR1YWwgfkVHTENvbmZpZ0hlbHBlcigpOworICAgIFBsYXRmb3JtRGlzcGxh
eSBkaXNwbGF5KCk7CisgICAgdmlydHVhbCBFR0xDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWco
KTsKKyAgICB2aXJ0dWFsIEVHTENvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpOworICAgIEVH
TGludCBuYXRpdmVWaXN1YWxJZChjb25zdCBFR0xDb25maWcmKTsKKyAgICB2b2lkIHJlc2V0KCk7
CisKK3ByaXZhdGU6CisgICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmli
dXRlc1tdKTsKKworcHJvdGVjdGVkOgorICAgIEVHTENvbmZpZyBtX3BidWZmZXJGQkNvbmZpZzsK
KyAgICBFR0xDb25maWcgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOworICAgIFJlZlB0cjxTaGFy
ZWRFR0xEaXNwbGF5PiBtX3NoYXJlZERpc3BsYXk7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5k
aWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
Z2wvRUdMQ29udGV4dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjAyYmFhZjMKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc3VyZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUdMQ29udGV4dC5o
IgorCisjaWYgVVNFKEVHTCkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisj
aWYgSEFWRShHTFgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRleHRBdHRyaWJ1dGVzW10gPSB7Cisj
aWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLAor
I2VuZGlmCisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBjb25zdCBFR0xpbnQgY29udGV4dFJv
YnVzdG5lc3NBdHRyaWJ1dGVzW10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9D
T05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLAorI2VuZGlmCisgICAgRUdMX0NPTlRFWFRfT1BFTkdM
X1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQsCisgICAgRUdMX0xPU0VfQ09OVEVYVF9P
Tl9SRVNFVF9FWFQsCisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBib29sIGlzUm9idXN0bmVz
c0V4dFN1cHBvcnRlZChFR0xEaXNwbGF5IGRpc3BsYXkpCit7CisgICAgc3RhdGljIGJvb2wgZGlk
UXVlcnlGb3JSb2J1c3RuZXNzRXh0ZW5zaW9uID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaXNS
b2J1c3RuZXNzRXh0ZW5zaW9uU3VwcG9ydGVkID0gZmFsc2U7CisKKyAgICBpZiAoIWRpZFF1ZXJ5
Rm9yUm9idXN0bmVzc0V4dGVuc2lvbikgeworICAgICAgICBkaWRRdWVyeUZvclJvYnVzdG5lc3NF
eHRlbnNpb24gPSB0cnVlOworICAgICAgICBTdHJpbmcgc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGVnbFF1ZXJ5U3RyaW5nKGRpc3BsYXksIEVHTF9F
WFRFTlNJT05TKSk7CisKKyAgICAgICAgaWYgKCFzdXBwb3J0ZWRFeHRlbnNpb25zLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9ucy5hcHBlbmQoIiAiKTsKKyAgICAg
ICAgICAgIGlzUm9idXN0bmVzc0V4dGVuc2lvblN1cHBvcnRlZCA9IHN1cHBvcnRlZEV4dGVuc2lv
bnMuY29udGFpbnMoIkVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGlzUm9idXN0bmVzc0V4dGVuc2lvblN1cHBvcnRlZDsK
K30KKworRUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIo
KQorICAgIDogR0xQbGF0Zm9ybUNvbnRleHQoKQoreworfQorCisvLyBGSVhNRTogVGhpcyBpcyBh
IHRlbXBvcmFyeSB3b3JrYXJvdW5kIHVudGlsIHdlIGFyZSBhYmxlIHRvIGJ1aWxkIGV2YXMgd2l0
aCBFR0wgc3VwcG9ydC4KK1BsYXRmb3JtQ29udGV4dCBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6
OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7Cit9
CisKK0VHTE9mZlNjcmVlbkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNvbnRleHQoKQorICAgIDogR0xQ
bGF0Zm9ybUNvbnRleHQoKQorICAgICwgbV9kaXNwbGF5KDApCit7Cit9CisKK2Jvb2wgRUdMT2Zm
U2NyZWVuQ29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKK3sK
KyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZWds
QmluZEFQSShlZ2xBUElWZXJzaW9uKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBz
ZXQgRUdMIEFQSSglZCkuXG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIG1fZGlzcGxheSA9IHN1cmZhY2UtPnNoYXJlZERpc3BsYXkoKTsKKyAg
ICBpZiAoIW1fZGlzcGxheSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRUdMQ29uZmln
IGNvbmZpZyA9IHN1cmZhY2UtPmNvbmZpZ3VyYXRpb24oKTsKKyAgICBpZiAoIWNvbmZpZykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvbmZpZykgeworICAgICAgICBpZiAoaXNS
b2J1c3RuZXNzRXh0U3VwcG9ydGVkKG1fZGlzcGxheSkpCisgICAgICAgICAgICBtX2NvbnRleHRI
YW5kbGUgPSBlZ2xDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgY29uZmlnLCBFR0xfTk9fQ09OVEVY
VCwgY29udGV4dFJvYnVzdG5lc3NBdHRyaWJ1dGVzKTsKKworICAgICAgICBpZiAobV9jb250ZXh0
SGFuZGxlICE9IEVHTF9OT19DT05URVhUKQorICAgICAgICAgICAgbV9yZXNldExvc3RDb250ZXh0
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWds
Q3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRB
dHRyaWJ1dGVzKTsKKworICAgICAgICBpZiAobV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05U
RVhUKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitFR0xPZmZTY3JlZW5Db250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCgpCit7Cit9
CisKK2Jvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZSA9PSBlZ2xHZXRDdXJyZW50Q29udGV4dCgpOwor
fQorCitib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0
Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgaWYgKCFlZ2xNYWtlQ3VycmVudChtX2Rpc3Bs
YXksIHN1cmZhY2UtPmRyYXdhYmxlKCksIHN1cmZhY2UtPmRyYXdhYmxlKCksIG1fY29udGV4dEhh
bmRsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb250ZXh0IGN1cnJl
bnQuKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworCisgICAgICAgIGlmIChtX3Jlc2V0TG9zdENv
bnRleHQgJiYgZWdsR2V0RXJyb3IoKSA9PSBFR0xfQ09OVEVYVF9MT1NUKSB7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIkxvc3QgY3VycmVudCBjb250ZXh0LlxuIik7CisgICAgICAgICAgICBtX2Nv
bnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0Ojpw
bGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKK3sKKyAgICBlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXks
IEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworfQorCit2
b2lkIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2Nv
bnRleHRIYW5kbGUgPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJldHVybjsKKworICAgIGVn
bERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKKyAgICBtX2NvbnRl
eHRIYW5kbGUgPSBFR0xfTk9fQ09OVEVYVDsKKyAgICBtX2Rpc3BsYXkgPSAwOworfQorCit2b2lk
IEVHTE9mZlNjcmVlbkNvbnRleHQ6OmRlc3Ryb3koKQoreworICAgIEdMUGxhdGZvcm1Db250ZXh0
OjpkZXN0cm95KCk7CisgICAgZnJlZVJlc291cmNlcygpOworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xD
b250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VH
TENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTk1YTE4Ci0t
LSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xDb250ZXh0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBFR0xDb250ZXh0X2gKKyNkZWZpbmUgRUdMQ29udGV4dF9oCisKKyNpZiBVU0UoRUdM
KQorCisjaW5jbHVkZSAiR0xQbGF0Zm9ybUNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIgOiBwdWJsaWMgR0xQbGF0Zm9ybUNv
bnRleHQgeworCitwdWJsaWM6CisgICAgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCk7CisgICAg
dmlydHVhbCBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB+RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCkgeyB9Cit9OworCitjbGFzcyBFR0xPZmZT
Y3JlZW5Db250ZXh0IDogcHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsKKworcHVibGljOgorICAg
IEVHTE9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5FR0xPZmZTY3JlZW5Db250ZXh0
KCk7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3JtU3Vy
ZmFjZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJyZW50
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRl
OgorICAgIHZvaWQgZnJlZVJlc291cmNlcygpOworICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5Owor
fTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM0NDgwCi0tLSAvZGV2L251bGwKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApA
QCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkVHTFN1cmZhY2UuaCIKKworI2lmIFVTRShFR0wpICYmIFVTRShHUkFQSElD
U19TVVJGQUNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VHTFdpbmRvd1RyYW5zcG9ydFN1
cmZhY2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQorICAgIDogR0xQbGF0Zm9ybVN1cmZh
Y2UoKQoreworICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgTmF0aXZlT2ZmU2Ny
ZWVuV2luZG93KCkpOworICAgIG1fZWdsQ29uZmlnSGVscGVyID0gYWRvcHRQdHIobmV3IEVHTENv
bmZpZ0hlbHBlcihtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCkpKTsKKyAg
ICBtX3NoYXJlZERpc3BsYXkgPSBtX2VnbENvbmZpZ0hlbHBlci0+ZGlzcGxheSgpOworCisgICAg
aWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICBtX2VnbENv
bmZpZ0hlbHBlciA9IG51bGxwdHI7CisgICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRy
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdMQ29uZmlnIGNvbmZpZyA9IG1fZWds
Q29uZmlnSGVscGVyLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOworCisgICAgaWYgKCFjb25maWcp
IHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdM
aW50IHZpc3VhbElkID0gbV9lZ2xDb25maWdIZWxwZXItPm5hdGl2ZVZpc3VhbElkKGNvbmZpZyk7
CisKKyAgICBpZiAodmlzdWFsSWQgPT0gLTEpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX25hdGl2ZVJlc291cmNlLT5zZXRWaXN1YWxJ
ZCh2aXN1YWxJZCkpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9uYXRpdmVSZXNvdXJjZS0+Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCZtX2J1ZmZl
ckhhbmRsZSk7CisKKyAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CisgICAgICAgIGRlc3Ryb3ko
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVhdGVX
aW5kb3dTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9lZ2xDb25maWdIZWxwZXItPnN1cmZhY2VD
b250ZXh0Q29uZmlnKCksIChFR0xOYXRpdmVXaW5kb3dUeXBlKW1fYnVmZmVySGFuZGxlLCAwKTsK
KworICAgIGlmIChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKSB7CisgICAgICAgIExPR19F
UlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgc3VyZmFjZSglZCkuXG4iLCBlZ2xHZXRFcnJvcigp
KTsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKworRUdMV2luZG93VHJhbnNwb3J0U3Vy
ZmFjZTo6fkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQoreworfQorCitQbGF0Zm9ybVN1cmZh
Y2VDb25maWcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCit7Cisg
ICAgcmV0dXJuIG1fZWdsQ29uZmlnSGVscGVyLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOworfQor
Cit2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAgICBp
ZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIEVHTEJvb2xlYW4gc3VjY2Vz
cyA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7CisKKyAgICBpZiAoc3VjY2VzcyAhPSBFR0xf
VFJVRSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuXG4i
LCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KKworICAgIHN1Y2Nl
c3MgPSBlZ2xTd2FwQnVmZmVycyhtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpOworCisgICAg
aWYgKHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8g
U3dhcEJ1ZmZlcnMoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIGRlc3Ryb3koKTsK
KyAgICB9Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgpCit7
CisgICAgbV9uYXRpdmVSZXNvdXJjZS0+ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7Cisg
ICAgZnJlZUVHTFJlc291cmNlcygpOworICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRyOwor
ICAgIG1fZWdsQ29uZmlnSGVscGVyID0gbnVsbHB0cjsKKyAgICBtX2J1ZmZlckhhbmRsZSA9IDA7
Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcygp
Cit7CisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UgfHwgbV9zaGFyZWREaXNw
bGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm47CisKKyAgICBFR0xCb29sZWFu
IGVnbFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7CisKKyAgICBpZiAoZWdsUmVz
dWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wg
QVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZWdsRGVzdHJveVN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2RyYXdhYmxlKTsKKyAgICBt
X2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0
U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3sKKyAgICBHTFBs
YXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7CisgICAgbV9uYXRpdmVSZXNvdXJj
ZS0+cmVTaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9l
Z2wvRUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2VnbC9FR0xTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg4
NjNkYwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgRUdMU3VyZmFjZV9oCisjZGVmaW5lIEVHTFN1cmZhY2VfaAorCisjaWYg
VVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNpbmNsdWRlICJFR0xDb25maWdI
ZWxwZXIuaCIKKyNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgorCisjaW5jbHVkZSA8Z2x4
L1gxMVdpbmRvd1Jlc291cmNlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRl
ZiBYMTFPZmZTY3JlZW5XaW5kb3cgTmF0aXZlT2ZmU2NyZWVuV2luZG93OworCisvLyBDb250ZW50
cyBvZiB0aGUgc3VyZmFjZSBhcmUgYmFja2VkIGJ5IG5hdGl2ZSB3aW5kb3cuCitjbGFzcyBFR0xX
aW5kb3dUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKKworcHVi
bGljOgorICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5FR0xX
aW5kb3dUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25m
aWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9tZXRy
eShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3dh
cEJ1ZmZlcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJSSURF
OworCitwcml2YXRlOgorICAgIHZvaWQgZnJlZUVHTFJlc291cmNlcygpOworICAgIE93blB0cjxO
YXRpdmVPZmZTY3JlZW5XaW5kb3c+IG1fbmF0aXZlUmVzb3VyY2U7CisgICAgT3duUHRyPEVHTENv
bmZpZ0hlbHBlcj4gbV9lZ2xDb25maWdIZWxwZXI7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5k
aWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IDk2YTBhYjkuLmM5Y2Q4ZDIgMTAwNjQ0Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5j
cHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmNwcApAQCAtMzYsNyArMzYsNyBAQCBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRy
aWJ1dGVzW10gPSB7IEdMWF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSAogR0xY
VHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSgpCiAgICAgOiBYMTFPZmZTY3Jl
ZW5XaW5kb3coKQogewotICAgIGNyZWF0ZU9mZnNjcmVlbldpbmRvdygpOworICAgIGNyZWF0ZU9m
ZnNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUpOwogICAgIG1fZHJhd2FibGUgPSBtX2J1ZmZl
ckhhbmRsZTsKIH0KIApAQCAtNDksNiArNDksMTIgQEAgUGxhdGZvcm1TdXJmYWNlQ29uZmlnIEdM
WFRyYW5zcG9ydFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQogICAgIHJldHVybiBtX3NoYXJlZFJl
c291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKIH0KIAordm9pZCBHTFhUcmFuc3BvcnRT
dXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQoreworICAgIEdMUGxh
dGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRyeShuZXdSZWN0KTsKKyAgICByZVNpemVXaW5kb3cobmV3
UmVjdCwgbV9kcmF3YWJsZSk7Cit9CisKIHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1
ZmZlcnMoKQogewogICAgIGlmICghbV9kcmF3YWJsZSkKQEAgLTY2LDcgKzcyLDcgQEAgdm9pZCBH
TFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCiAKIHZvaWQgR0xYVHJhbnNwb3J0U3Vy
ZmFjZTo6ZGVzdHJveSgpCiB7Ci0gICAgZGVzdHJveVdpbmRvdygpOworICAgIGRlc3Ryb3lXaW5k
b3cobV9idWZmZXJIYW5kbGUpOwogICAgIG1fYnVmZmVySGFuZGxlID0gMDsKIH0KIApkaWZmIC0t
Z2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJm
YWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1
cmZhY2UuaAppbmRleCA0ZTg3Njg1Li4wZDg0YzM0IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaApAQCAtNDMs
NiArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+R0xYVHJhbnNwb3J0U3VyZmFjZSgpOwog
ICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCk7CiAgICAgdm9pZCBzd2Fw
QnVmZmVycygpOworICAgIHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOwogICAgIHZv
aWQgZGVzdHJveSgpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgK
aW5kZXggYzE3MzU1Ny4uY2JmY2MzOSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaAorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNlcy5o
CkBAIC01MSw2ICs1MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTaGFyZWRYMTFSZXNv
dXJjZXM6OngxMURpc3BsYXkoKTsKICAgICB9CiAKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5m
bygpCisgICAgeworICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAgICAgICAgICAgIHN1cmZh
Y2VDb250ZXh0Q29uZmlnKCk7CisKKyAgICAgICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsKKyAgICB9
CisKICAgICB2aXJ0dWFsIEdMWEZCQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCkKICAgICB7
CiAgICAgICAgIGlmICghbV9wYnVmZmVyZmJDb25maWcpIHsKQEAgLTk4LDExICsxMDYsMTIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOwogICAgIH0K
IAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBTaGFyZWRHTFhSZXNvdXJjZXMoKQogICAgICAg
ICA6IFNoYXJlZFgxMVJlc291cmNlcygpCiAgICAgICAgICwgbV9wYnVmZmVyZmJDb25maWcoMCkK
ICAgICAgICAgLCBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcoMCkKKyAgICAgICAgLCBtX1Zpc3Vh
bEluZm8oMCkKICAgICB7CiAgICAgfQogCkBAIC0xNjAsMTAgKzE2OSwxNiBAQCBwcml2YXRlOgog
CiAgICAgICAgIGlmIChtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpCiAgICAgICAgICAgICBtX3N1
cmZhY2VDb250ZXh0ZmJDb25maWcgPSAwOworCisgICAgICAgIGlmIChtX1Zpc3VhbEluZm8pIHsK
KyAgICAgICAgICAgIFhGcmVlKG1fVmlzdWFsSW5mbyk7CisgICAgICAgICAgICBtX1Zpc3VhbElu
Zm8gPSAwOworICAgICAgICB9CiAgICAgfQogCiAgICAgR0xYRkJDb25maWcgbV9wYnVmZmVyZmJD
b25maWc7CiAgICAgR0xYRkJDb25maWcgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOworICAgIFhW
aXN1YWxJbmZvKiBtX1Zpc3VhbEluZm87CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jl
c291cmNlcy5jcHAKaW5kZXggNjAyOTNlNy4uY2FiMjJmYiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3Bw
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2lu
ZG93UmVzb3VyY2VzLmNwcApAQCAtMjgsNyArMjgsOSBAQAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQogCisjaWYgVVNFKEdMWCkKICNpbmNsdWRlICJHTFhXaW5kb3dSZXNvdXJj
ZXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDI2ICszOSwzMCBA
QCBQbGF0Zm9ybVNoYXJlZFJlc291cmNlcyogU2hhcmVkWDExUmVzb3VyY2VzOjptX3N0YXRpY1No
YXJlZFJlc291cmNlID0gMDsKIFgxMU9mZlNjcmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2luZG93
KCkKICAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKICAgICAsIG1fc2hhcmVkUmVzb3VyY2VzKDAp
CisgICAgLCBtX2NvbmZpZ1Zpc3VhbEluZm8oMCkKIHsKICAgICBtX3NoYXJlZFJlc291cmNlcyA9
IFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzOjpjcmVhdGUoKTsKIAogICAgIGlmICghbV9zaGFyZWRS
ZXNvdXJjZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1fc2hh
cmVkUmVzb3VyY2VzLT5uYXRpdmVEaXNwbGF5KCk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0gbV9z
aGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKIH0KIAogWDExT2ZmU2NyZWVuV2luZG93Ojp+
WDExT2ZmU2NyZWVuV2luZG93KCkKIHsKKyAgICBpZiAobV9jb25maWdWaXN1YWxJbmZvKSB7Cisg
ICAgICAgIFhGcmVlKG1fY29uZmlnVmlzdWFsSW5mbyk7CisgICAgICAgIG1fY29uZmlnVmlzdWFs
SW5mbyA9IDA7CisgICAgfQogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0R2VvbWV0
cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpyZVNp
emVXaW5kb3coY29uc3QgSW50UmVjdCYgbmV3UmVjdCwgUGxhdGZvcm1CdWZmZXJIYW5kbGUgd2lu
ZG93SWQpCiB7Ci0gICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3QpOwot
ICAgIFhSZXNpemVXaW5kb3cobV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgbV9idWZm
ZXJIYW5kbGUsIG5ld1JlY3Qud2lkdGgoKSwgbmV3UmVjdC5oZWlnaHQoKSk7CisgICAgWFJlc2l6
ZVdpbmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCB3aW5kb3dJZCwgbmV3UmVj
dC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBYMTFPZmZTY3JlZW5XaW5k
b3c6OmNyZWF0ZU9mZnNjcmVlbldpbmRvdygpCit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3Jl
YXRlT2Zmc2NyZWVuV2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKiBoYW5kbGVJZCkKIHsKICAg
ICBpZiAoIW1fc2hhcmVkUmVzb3VyY2VzKQogICAgICAgICByZXR1cm47CkBAIC02NSwxNCArNzEs
MTEgQEAgdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZnNjcmVlbldpbmRvdygpCiAg
ICAgaWYgKCFkaXNwbGF5KQogICAgICAgICByZXR1cm47CiAKLSAgICBQbGF0Zm9ybVN1cmZhY2VD
b25maWcgY29uZmlnID0gbV9zaGFyZWRSZXNvdXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7
Ci0KLSAgICBpZiAoIWNvbmZpZykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZXRy
aWV2ZSBhIHZhbGlkIGNvbmZpZ2lyYXRpb24uIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
KyNpZiBVU0UoR0xYKQogICAgIFhWaXN1YWxJbmZvKiB2aXNJbmZvID0gbV9zaGFyZWRSZXNvdXJj
ZXMtPnZpc3VhbEluZm8oKTsKKyNlbHNlCisgICAgWFZpc3VhbEluZm8qIHZpc0luZm8gPSBtX2Nv
bmZpZ1Zpc3VhbEluZm87CisjZW5kaWYKIAogICAgIGlmICghdmlzSW5mbykgewogICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwiKTsKQEAgLTg4LDI0ICs5MSwy
NyBAQCB2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCkKICAg
ICBhdHRyaWJ1dGUuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRlUGl4ZWwoZGlzcGxheSwgMCk7CiAg
ICAgYXR0cmlidXRlLmJvcmRlcl9waXhlbCA9IEJsYWNrUGl4ZWwoZGlzcGxheSwgMCk7CiAgICAg
YXR0cmlidXRlLmNvbG9ybWFwID0gY21hcDsKLSAgICBtX2J1ZmZlckhhbmRsZSA9IFhDcmVhdGVX
aW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgMSwgMSwgMCwgdmlzSW5mby0+ZGVwdGgsIElu
cHV0T3V0cHV0LCB2aXNJbmZvLT52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhlbCB8
IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOworICAgIFBsYXRmb3JtQnVmZmVySGFuZGxlIHRlbXBI
YW5kbGVJZDsKKyAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhXaW5k
b3csIDAsIDAsIDEsIDEsIDAsIHZpc0luZm8tPmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5mby0+
dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0cmli
dXRlKTsKIAotICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKKyAgICBpZiAoIXRlbXBIYW5kbGVJ
ZCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHdpbmRv
dyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgWFNldFdpbmRvd0JhY2tncm91bmRQ
aXhtYXAoZGlzcGxheSwgbV9idWZmZXJIYW5kbGUsIDApOwotICAgIFhDb21wb3NpdGVSZWRpcmVj
dFdpbmRvdyhkaXNwbGF5LCBtX2J1ZmZlckhhbmRsZSwgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwp
OworICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIHRlbXBIYW5kbGVJZCwg
MCk7CisgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJZCwg
Q29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOworICAgICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJZDsK
KyAgICBtX2J1ZmZlckhhbmRsZSA9IHRlbXBIYW5kbGVJZDsKIAogICAgIGlmIChtX3NoYXJlZFJl
c291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpCi0gICAgICAgIFhNYXBXaW5k
b3coZGlzcGxheSwgbV9idWZmZXJIYW5kbGUpOworICAgICAgICBYTWFwV2luZG93KGRpc3BsYXks
IHRlbXBIYW5kbGVJZCk7CiAKIH0KIAotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lX
aW5kb3coKQordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coUGxhdGZvcm1C
dWZmZXJIYW5kbGUgd2luZG93SWQpCiB7Ci0gICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkKKyAgICBp
ZiAoIXdpbmRvd0lkKQogICAgICAgICByZXR1cm47CiAKICAgICBHTFBsYXRmb3JtU3VyZmFjZTo6
ZGVzdHJveSgpOwpAQCAtMTEzLDkgKzExOSw2NyBAQCB2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6
ZGVzdHJveVdpbmRvdygpCiAgICAgaWYgKCFkaXNwbGF5KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX2J1ZmZlckhhbmRsZSk7Ci0gICAgbV9idWZmZXJI
YW5kbGUgPSAwOworICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIHdpbmRvd0lkKTsKK30KKwor
RGlzcGxheSogWDExT2ZmU2NyZWVuV2luZG93OjpuYXRpdmVTaGFyZWREaXNwbGF5KCkKK3sKKyAg
ICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKK30KKworI2lmIFVTRShF
R0wpCitib29sIFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0VmlzdWFsSWQoY29uc3QgRUdMaW50IGlk
KQoreworICAgIFZpc3VhbElEIHZpc3VhbElkID0gc3RhdGljX2Nhc3Q8VmlzdWFsSUQ+KGlkKTsK
KworICAgIGlmICghdmlzdWFsSWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEVH
TCBoYXMgc3VnZ2VzdGVkIGEgdmlzdWFsIGlkLCBzbyBnZXQgdGhlIHJlc3Qgb2YgdGhlIHZpc3Vh
bCBpbmZvIGZvciB0aGF0IGlkLgorICAgIFhWaXN1YWxJbmZvIHZpc3VhbEluZm9UZW1wbGF0ZTsK
KyAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZvKSk7
CisgICAgdmlzdWFsSW5mb1RlbXBsYXRlLnZpc3VhbGlkID0gdmlzdWFsSWQ7CisKKyAgICBYVmlz
dWFsSW5mbyogY2hvc2VuVmlzdWFsSW5mbzsKKyAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7Cisg
ICAgY2hvc2VuVmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJbmZvKG1fc2hhcmVkUmVzb3VyY2VzLT54
MTFEaXNwbGF5KCksIFZpc3VhbElETWFzaywgJnZpc3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNoaW5n
Q291bnQpOworICAgIGlmIChjaG9zZW5WaXN1YWxJbmZvKSB7CisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgICAgIGlmIChtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9u
U3VwcG9ydGVkKCkpIHsKKyAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQgPSBY
UmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCBj
aG9zZW5WaXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBmb3Jt
YXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7CisgICAgICAgICAgICAgICAgbV9jb25maWdWaXN1
YWxJbmZvID0gY2hvc2VuVmlzdWFsSW5mbzsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChjaG9zZW5WaXN1
YWxJbmZvLT5kZXB0aCA9PSAzMikgeworICAgICAgICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0g
Y2hvc2VuVmlzdWFsSW5mbzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCFtX2NvbmZpZ1Zpc3VhbEluZm8pIHsKKyAgICAgICAgbWVtc2V0KCZ2
aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFsSW5mbykpOworICAgICAgICBYVmlz
dWFsSW5mbyogbWF0Y2hpbmdWaXN1YWxzOworICAgICAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7
CisKKyAgICAgICAgdmlzdWFsSW5mb1RlbXBsYXRlLmRlcHRoID0gY2hvc2VuVmlzdWFsSW5mby0+
ZGVwdGg7CisgICAgICAgIG1hdGNoaW5nVmlzdWFscyA9IFhHZXRWaXN1YWxJbmZvKG1fc2hhcmVk
UmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIFZpc3VhbERlcHRoTWFzaywgJnZpc3VhbEluZm9UZW1w
bGF0ZSwgJm1hdGNoaW5nQ291bnQpOworCisgICAgICAgIGlmIChtYXRjaGluZ1Zpc3VhbHMpIHsK
KyAgICAgICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9ICZtYXRjaGluZ1Zpc3VhbHNbMF07Cisg
ICAgICAgICAgICBYRnJlZShtYXRjaGluZ1Zpc3VhbHMpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fY29uZmlnVmlzdWFsSW5mbykKKyAg
ICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgWFZpc3VhbCBJbmZvLlxuIik7CisK
KyAgICByZXR1cm4gZmFsc2U7CiB9CisjZW5kaWYKIAogfQogCmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5o
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dS
ZXNvdXJjZXMuaAppbmRleCBiMjViMmFjLi45YzA4MGMzIDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93
UmVzb3VyY2VzLmgKQEAgLTQwLDEzICs0MCwzMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
KyNpZiBVU0UoR0xYKQogY2xhc3MgU2hhcmVkR0xYUmVzb3VyY2VzOwogdHlwZWRlZiBTaGFyZWRH
TFhSZXNvdXJjZXMgUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM7CisjZWxpZiBVU0UoRUdMKQorY2xh
c3MgU2hhcmVkWDExUmVzb3VyY2VzOwordHlwZWRlZiBTaGFyZWRYMTFSZXNvdXJjZXMgUGxhdGZv
cm1TaGFyZWRSZXNvdXJjZXM7CisjZW5kaWYKIAogY2xhc3MgU2hhcmVkWDExUmVzb3VyY2VzIDog
cHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNo
YXJlZFgxMVJlc291cmNlcyk7CiAKIHB1YmxpYzoKKyNpZiBVU0UoRUdMKQorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQorICAgICAgICAgICAgbV9zdGF0aWNTaGFy
ZWRSZXNvdXJjZSA9IG5ldyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlcygpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlLT5yZWYoKTsKKworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRSZXNvdXJjZSk7CisgICAgfQorI2VuZGlmCisK
ICAgICB2b2lkIGRlcmVmKCkKICAgICB7CiAgICAgICAgIGlmIChkZXJlZkJhc2UoKSkgewpAQCAt
OTQsMjkgKzExMSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3dpbmRvdzsKICAgICB9
CiAKLSAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbygpCi0gICAgewotICAgICAgICBpZiAoIW1f
VmlzdWFsSW5mbykKLSAgICAgICAgICAgIHN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Ci0KLSAgICAg
ICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsKLSAgICB9Ci0KICAgICBib29sIGlzWFJlbmRlckV4dGVu
c2lvblN1cHBvcnRlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdXBwb3J0c1hSZW5kZXJF
eHRlbnNpb247CiAgICAgfQogCi0gICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgcEJ1
ZmZlckNvbnRleHRDb25maWcoKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25m
aWcgc3VyZmFjZUNvbnRleHRDb25maWcoKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybURpc3Bs
YXkgbmF0aXZlRGlzcGxheSgpID0gMDsKLQogcHJvdGVjdGVkOgogICAgIFNoYXJlZFgxMVJlc291
cmNlcygpCiAgICAgICAgIDogbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24oZmFsc2UpCiAgICAg
ICAgICwgbV93aW5kb3coMCkKICAgICAgICAgLCBtX2Rpc3BsYXkoMCkKLSAgICAgICAgLCBtX1Zp
c3VhbEluZm8oMCkKICAgICB7CiAgICAgfQogCkBAIC0xMzEsMTEgKzEzNSw2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgICAgIG1fd2luZG93ID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIGlmICht
X1Zpc3VhbEluZm8pIHsKLSAgICAgICAgICAgIFhGcmVlKG1fVmlzdWFsSW5mbyk7Ci0gICAgICAg
ICAgICBtX1Zpc3VhbEluZm8gPSAwOwotICAgICAgICB9Ci0KICAgICAgICAgWENsb3NlRGlzcGxh
eShtX2Rpc3BsYXkpOwogICAgICAgICBtX2Rpc3BsYXkgPSAwOwogICAgIH0KQEAgLTE0NCw3ICsx
NDMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsK
ICAgICBXaW5kb3cgbV93aW5kb3c7CiAgICAgRGlzcGxheSogbV9kaXNwbGF5OwotICAgIFhWaXN1
YWxJbmZvKiBtX1Zpc3VhbEluZm87CiB9OwogCiBjbGFzcyBYMTFPZmZTY3JlZW5XaW5kb3cgOiBw
dWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewpAQCAtMTUzLDEyICsxNTEsMTcgQEAgY2xhc3MgWDEx
T2ZmU2NyZWVuV2luZG93IDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKIHB1YmxpYzoKICAg
ICBYMTFPZmZTY3JlZW5XaW5kb3coKTsKICAgICB2aXJ0dWFsIH5YMTFPZmZTY3JlZW5XaW5kb3co
KTsKLSAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNyZWF0
ZU9mZnNjcmVlbldpbmRvdygpOwotICAgIHZvaWQgZGVzdHJveVdpbmRvdygpOworICAgIHZvaWQg
Y3JlYXRlT2Zmc2NyZWVuV2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKik7CisgICAgdm9pZCBk
ZXN0cm95V2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKTsKKyAgICB2b2lkIHJlU2l6ZVdpbmRv
dyhjb25zdCBJbnRSZWN0JiwgUGxhdGZvcm1CdWZmZXJIYW5kbGUpOworICAgIERpc3BsYXkqIG5h
dGl2ZVNoYXJlZERpc3BsYXkoKTsKKyNpZiBVU0UoRUdMKQorICAgIGJvb2wgc2V0VmlzdWFsSWQo
Y29uc3QgRUdMaW50KTsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFBsYXRmb3Jt
U2hhcmVkUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsKKyAgICBYVmlzdWFsSW5mbyogbV9j
b25maWdWaXN1YWxJbmZvOwogfTsKIAogfQpkaWZmIC0tZ2l0IFNvdXJjZS9jbWFrZS9PcHRpb25z
RWZsLmNtYWtlIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IDgwMGE3MDkuLmZl
MjAyZWYgMTAwNjQ0Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgU291cmNl
L2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTE3NSwxMiArMTc1LDI1IEBAIGlmIChFTkFCTEVf
V0VCR0wgT1IgV1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFKQogCiAgICAgaWYgKE9QRU5HTFhf
Rk9VTkQpCiAgICAgICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfR0xYKQotICAgICAgICBhZGRf
ZGVmaW5pdGlvbnMoLURXVEZfVVNFX0dMWD0xKQorICAgIGVuZGlmICgpCisKKyAgICBvcHRpb24o
RU5BQkxFX0VHTCBPTikKIAotICAgICAgICBpZiAoWDExX1hjb21wb3NpdGVfRk9VTkQgQU5EIFgx
MV9YcmVuZGVyX0ZPVU5EKQotICAgICAgICAgICBzZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkK
LSAgICAgICAgZW5kaWYgKCkKKyAgICBpZiAoRU5BQkxFX0VHTCkKKyAgICAgICAgZmluZF9wYWNr
YWdlKEVHTCBSRVFVSVJFRCkKICAgICBlbmRpZiAoKQorCisgICAgaWYgKEVHTF9GT1VORCkKKyAg
ICAgICAgc2V0KFdURl9VU0VfRUdMIDEpCisgICAgICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9V
U0VfRUdMPTEpCisgICAgIGVsc2VpZiAoT1BFTkdMWF9GT1VORCkKKyAgICAgICAgIHNldChXVEZf
VVNFX0dMWCAxKQorICAgICAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9HTFg9MSkKKyAg
ICBlbmRpZiAoKQorCisgICAgIGlmICgoT1BFTkdMWF9GT1VORCBPUiBFR0xfRk9VTkQpIEFORCBY
MTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQgWDExX1hyZW5kZXJfRk9VTkQpCisgICAgICAgICBzZXQo
VVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkKKyAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKIGlmIChF
TkFCTEVfSU5TUEVDVE9SKQo=
</data>
<flag name="review"
          id="198164"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="198213"
          type_id="3"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180806</attachid>
            <date>2012-12-27 10:05:50 -0800</date>
            <delta_ts>2012-12-27 12:02:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>finalreviewpatch.patch</filename>
            <type>text/plain</type>
            <size>47102</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLmY4NDU2YTIgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAg
QWRkcyBzdXBwb3J0IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQgY2FuIGJl
IGVuYWJsZWQgZHVyaW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1ERU5BQkxF
X0VHTD1PTiBhcyBjbWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgICogU291cmNlL2Nt
YWtlL09wdGlvbnNFZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMzgzMzguCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAxYTA0MDRmLi5iNDBjZWUwIDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
OSBAQAorMjAxMi0xMi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBp
bnRlbC5jb20+CisKKyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3
aXRoIEdMWC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNTYwMgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBHTEVTMiBzdXBw
b3J0LgorICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJh
Y2tlbmQuIEVHTCBzdXBwb3J0IGNhbiBiZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAg
ICAgICAgYnkgcGFzc2luZyAtREVOQUJMRV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRl
ci4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwu
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxh
dGZvcm1Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQpOiBBZGRlZCBHTFggY2hlY2tzLgorICAg
ICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQp
OiBBZGRlZCBzdXBwb3J0IGZvciBjcmVhdGluZyBFR0xPZmZzY3JlZW4gQ29udGV4dC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBw
ZXIpOiBBZGRlZCBzdXBwb3J0IGZvciBjcmVhdGluZyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRT
dXJmYWNlKTogQWRkZWQgc3VwcG9ydCBmb3IgY3JlYXRpbmcgRUdMU3VyZmFjZS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUm9idXN0bmVzc0V4dFN1
cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OkVH
TEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDdXJyZW50Q29u
dGV4dFdyYXBwZXI6OmhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250
ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
bkNvbnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29u
dGV4dDo6fkVHTE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2Ny
ZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZT
Y3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RUdM
Q3VycmVudENvbnRleHRXcmFwcGVyOjp+RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAg
ICAgKEVHTE9mZlNjcmVlbkNvbnRleHQpOgorCisgICAgICAgIEVHTCBpbXBsZW1lbnRhdGlvbiBm
b3IgQ29udGV4dCBNYW5hZ2VtZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNw
b3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
Ojp+RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5k
b3dUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisKKyAgICAgICAg
RUdMIGltcGxlbWVudGF0aW9uIGZvciBPZmZzY3JlZW4gU3VyZmFjZS4gVGhlIHN1cmZhY2UgaXMg
YmFja2VkIGJ5IG5hdGl2ZSB3aW5kb3cuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVscGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTERpc3BsYXk6OmRlcmVmKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEVHTERpc3BsYXk6OnNoYXJlZEVHTERpc3BsYXkpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkRUdMRGlzcGxheTo6U2hhcmVkRUdMRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRFR0xEaXNwbGF5OjpjbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEVHTERpc3BsYXk6On5TaGFyZWRFR0xEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TENvbmZpZ0hlbHBlcjo6RUdMQ29uZmlnSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENv
bmZpZ0hlbHBlcjo6fkVHTENvbmZpZ0hlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25m
aWdIZWxwZXI6OmRpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpw
QnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6
OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBl
cjo6bmF0aXZlVmlzdWFsSWQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpy
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6OmNyZWF0ZUNvbmZpZyk6
CisKKyAgICAgICAgSGVscGVyIGNsYXNzIHRvIGluaXRpYWxpemUgRUdMIHJlc291cmNlcyBhbmQg
Y2hvb3NlIHJpZ2h0IEVHTCBjb25maWd1cmF0aW9uLgorCiAyMDEyLTEyLTIxICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgbG9jYWxpemFibGUgc3Ry
aW5ncyBhcyBhIGZvbGxvd3VwIHRvIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEz
ODM4NwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDU2ZTMwNmMuLmU3ZTQ2OWMgMTAwNjQ0Ci0t
LSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTI2NSw2ICsyNjUsMTQgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJ
Q1MpCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCiAg
ICAgKQorCisgICAgaWYgKFdURl9VU0VfRUdMKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgICAgICR7RUdMX0lOQ0xVREVfRElSfQorICAg
ICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbCIK
KyAgICApCisgICAgZW5kaWYgKCkKKwogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2luZ0J1ZmZlckNhaXJvLmNwcApAQCAtMjc3LDE4ICsyODUs
MzYgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cAogICAgICkKKworICAgIGlmIChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xDb250ZXh0LmNwcAorICAgICAgICApCisgICAgZW5kaWYgKCkKKworICAgIGlmIChXVEZf
VVNFX0dMWCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAorICAgICAg
ICApCisgICAgZW5kaWYgKCkKKwogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAg
ICAgICAgICR7WDExX1gxMV9MSUJ9CiAgICAgICAgICR7WDExX1hjb21wb3NpdGVfTElCfQogICAg
ICAgICAke1gxMV9YcmVuZGVyX0xJQn0KICAgICApCisgICAgaWYgKFdURl9VU0VfRUdMKQorICAg
ICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAgICAgJHtFR0xfTElC
UkFSWX0KKyAgICAgICAgKQorICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCiBhZGRfZGVmaW5pdGlv
bnMoLUREQVRBX0RJUj0iJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtEQVRBX0lOU1RBTExfRElS
fSIpCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
RGVmcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaApp
bmRleCAyZGZiNGM5Li5mODIzZGM0IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xEZWZzLmgKQEAgLTI4LDEyICsyOCwxMiBAQAogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLQogI2lmIFVT
RShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCiAjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAjZWxzZQorI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSA8R0wvZ2wuaD4KICNpbmNsdWRlIDxHTC9nbGV4dC5oPgog
I2VuZGlmCkBAIC00Miw2ICs0MiwxMiBAQAogI2luY2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAK
KyNpZiBVU0UoRUdMKQorI2RlZmluZSBFR0xfRUdMRVhUX1BST1RPVFlQRVMgMQorI2luY2x1ZGUg
PEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB0eXBlZGVmIHVpbnQzMl90IFBsYXRmb3JtQnVmZmVySGFuZGxlOwpAQCAt
NTEsNiArNTcsMTYgQEAgdHlwZWRlZiBHTFhDb250ZXh0IFBsYXRmb3JtQ29udGV4dDsKIHR5cGVk
ZWYgRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5OwogdHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9y
bVN1cmZhY2VDb25maWc7CiB0eXBlZGVmIEdMWERyYXdhYmxlIFBsYXRmb3JtRHJhd2FibGU7Cisj
ZWxpZiBVU0UoRUdMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0YXRpYyBjb25zdCBFR0xlbnVt
IGVnbEFQSVZlcnNpb24gPSBFR0xfT1BFTkdMX0VTX0FQSTsKKyNlbHNlCitzdGF0aWMgY29uc3Qg
RUdMZW51bSBlZ2xBUElWZXJzaW9uID0gRUdMX09QRU5HTF9BUEk7CisjZW5kaWYKK3R5cGVkZWYg
RUdMQ29udGV4dCBQbGF0Zm9ybUNvbnRleHQ7Cit0eXBlZGVmIEVHTERpc3BsYXkgUGxhdGZvcm1E
aXNwbGF5OwordHlwZWRlZiBFR0xDb25maWcgUGxhdGZvcm1TdXJmYWNlQ29uZmlnOwordHlwZWRl
ZiBFR0xTdXJmYWNlIFBsYXRmb3JtRHJhd2FibGU7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUNvbnRleHQ7CiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtRGlzcGxheTsKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQu
Y3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29u
dGV4dC5jcHAKaW5kZXggNzYyMWUyZS4uNzk5NTliYSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAK
QEAgLTMwLDYgKzMwLDggQEAKIAogI2lmIFVTRShHTFgpCiAjaW5jbHVkZSAiR0xYQ29udGV4dC5o
IgorI2VsaWYgVVNFKEVHTCkKKyNpbmNsdWRlICJFR0xDb250ZXh0LmgiCiAjZW5kaWYKIAogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC00NCwxMSArNDYsMTEgQEAgUGFzc093blB0cjxH
TFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0QKICAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7
CiAjaWYgVVNFKEdMWCkKKyAgICBpZiAoIWdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQikgewog
ICAgICAgICBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIgPSByZWludGVycHJldF9jYXN0PFBG
TkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0FSQlBST0M+KGdsWEdldFByb2NBZGRyZXNzQVJCKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIiKSkpOwotI2VuZGlmCiAgICAgfQorI2VuZGlmCiAKICAgICBzd2l0Y2ggKHJlbmRlclN0eWxl
KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgpAQCAtNzAs
OCArNzIsOSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4
dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRAogUGFzc093blB0cjxHTFBsYXRmb3Jt
Q29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogewog
I2lmIFVTRShHTFgpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0g
YWRvcHRQdHIobmV3IEdMWE9mZlNjcmVlbkNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGdseENvbnRl
eHQucmVsZWFzZSgpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuQ29udGV4
dCgpKTsKKyNlbGlmIFVTRShFR0wpCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFR0xPZmZTY3Jl
ZW5Db250ZXh0KCkpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTgwLDggKzgz
LDkgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNy
ZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQ
bGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcigpCiB7CiAjaWYgVVNF
KEdMWCkKLSAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0
cihuZXcgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOwotICAgIHJldHVybiBnbHhDb250ZXh0
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdMWEN1cnJlbnRDb250ZXh0V3Jh
cHBlcigpKTsKKyNlbGlmIFVTRShFR0wpCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFR0xDdXJy
ZW50Q29udGV4dFdyYXBwZXIoKSk7CiAjZW5kaWYKIAogICAgIHJldHVybiBudWxscHRyOwpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
Q29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRm
b3JtQ29udGV4dC5oCmluZGV4IDE3MGI3NmUuLjAzNTNkZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIC8vIERvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0
IGlmIHRoaXMgaXMgbm90IHRoZSBjdXJyZW50IENvbnRleHQuCiAgICAgdm9pZCByZWxlYXNlQ3Vy
cmVudCgpOwogCi0gICAgUGxhdGZvcm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgUGxhdGZvcm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlz
Q3VycmVudENvbnRleHQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAppbmRleCA4Mzkx
ZTQ3Li43ZjdhNTY0IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcApAQCAtMzIsNiArMzIsMTAgQEAK
ICNpbmNsdWRlICJHTFhTdXJmYWNlLmgiCiAjZW5kaWYKIAorI2lmIFVTRShFR0wpCisjaW5jbHVk
ZSAiRUdMU3VyZmFjZS5oIgorI2VuZGlmCisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCwxMCArNTQsMTQgQEAgUGFzc093blB0cjxHTFBs
YXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZU9mZnNjcmVlblN1cmZhY2Uo
KQogCiBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3Jl
YXRlVHJhbnNwb3J0U3VyZmFjZSgpCiB7Ci0jaWYgVVNFKEdMWCkgJiYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaWYgVVNFKEdMWCkKICAgICBPd25Q
dHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0
U3VyZmFjZSgpKTsKKyNlbGlmIFVTRShFR0wpCisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNl
PiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKSk7Cisj
ZW5kaWYKIAotICAgIGlmIChzdXJmYWNlLT5oYW5kbGUoKSkKKyAgICBpZiAoc3VyZmFjZSAmJiBz
dXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQogICAgICAgICByZXR1cm4g
c3VyZmFjZS5yZWxlYXNlKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuY3BwIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MDM5MDUKLS0tIC9kZXYvbnVs
bAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENv
bmZpZ0hlbHBlci5jcHAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFR0xDb25maWdIZWxwZXIuaCIKKworI2lmIFVT
RShFR0wpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2hhcmVkRUdMRGlzcGxheSogU2hhcmVk
RUdMRGlzcGxheTo6bV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5ID0gMDsKKworc3RhdGljIEVHTGlu
dCBjb25maWdBdHRyaWJ1dGVMaXN0W10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVH
TF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyNlbHNlCisgICAgRUdMX1JF
TkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9CSVQsCisjZW5kaWYKKyAgICBFR0xfUkVEX1NJWkUs
IDgsCisgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICBF
R0xfU1RFTkNJTF9TSVpFLCA4LAorICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgIEVHTF9TVVJG
QUNFX1RZUEUsIEVHTF9OT05FLAorICAgIEVHTF9OT05FCit9OworCit2b2lkIFNoYXJlZEVHTERp
c3BsYXk6OmRlcmVmKCkKK3sKKyAgICBpZiAoZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgbV9zdGF0
aWNTaGFyZWRFR0xEaXNwbGF5ID0gMDsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorfQor
CitFR0xEaXNwbGF5IFNoYXJlZEVHTERpc3BsYXk6OnNoYXJlZEVHTERpc3BsYXkoKQoreworICAg
IHJldHVybiBtX2VnbERpc3BsYXk7Cit9CisKK1NoYXJlZEVHTERpc3BsYXk6OlNoYXJlZEVHTERp
c3BsYXkoTmF0aXZlU2hhcmVkRGlzcGxheSogZGlzcGxheSkKKyAgICA6IG1fZWdsRGlzcGxheShF
R0xfTk9fRElTUExBWSkKK3sKKyAgICBpZiAoZGlzcGxheSkKKyAgICAgICAgbV9lZ2xEaXNwbGF5
ID0gZWdsR2V0RGlzcGxheShyZWludGVycHJldF9jYXN0PEVHTE5hdGl2ZURpc3BsYXlUeXBlPihk
aXNwbGF5KSk7CisgICAgZWxzZQorICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5
KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworCisgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9f
RElTUExBWSkgeworICAgICAgICBMT0dfRVJST1IoIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24g
ZmFpbGVkLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFR0xCb29sZWFuIHN1
Y2Nlc3M7CisgICAgc3VjY2VzcyA9IGVnbEluaXRpYWxpemUobV9lZ2xEaXNwbGF5LCAwLCAwKTsK
KworICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiRUdM
SW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisgICAgICAgIG1fZWdsRGlzcGxheSA9IEVHTF9O
T19ESVNQTEFZOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBlZ2xCaW5kQVBJKGVnbEFQSVZlcnNp
b24pOworCisgICAgaWYgKHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJGYWlsZWQgdG8gc2V0IEVHTCBBUEkoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAg
IG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgIH0KK30KKwordm9pZCBTaGFyZWRF
R0xEaXNwbGF5OjpjbGVhbnVwKCkKK3sKKyAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19E
SVNQTEFZKQorICAgICAgICByZXR1cm47CisKKyAgICBlZ2xNYWtlQ3VycmVudChtX2VnbERpc3Bs
YXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAg
IGVnbFRlcm1pbmF0ZShtX2VnbERpc3BsYXkpOworICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19E
SVNQTEFZOworfQorCitTaGFyZWRFR0xEaXNwbGF5Ojp+U2hhcmVkRUdMRGlzcGxheSgpCit7Cisg
ICAgY2xlYW51cCgpOworfQorCitFR0xDb25maWdIZWxwZXI6OkVHTENvbmZpZ0hlbHBlcihOYXRp
dmVTaGFyZWREaXNwbGF5KiBkaXNwbGF5KQorICAgIDogbV9wYnVmZmVyRkJDb25maWcoMCkKKyAg
ICAsIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZygwKQoreworICAgIG1fc2hhcmVkRGlzcGxheSA9
IFNoYXJlZEVHTERpc3BsYXk6OmNyZWF0ZShkaXNwbGF5KTsKK30KKworRUdMQ29uZmlnSGVscGVy
Ojp+RUdMQ29uZmlnSGVscGVyKCkKK3sKK30KKworUGxhdGZvcm1EaXNwbGF5IEVHTENvbmZpZ0hl
bHBlcjo6ZGlzcGxheSgpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkRGlzcGxheS0+c2hhcmVkRUdM
RGlzcGxheSgpOworfQorCitFR0xDb25maWcgRUdMQ29uZmlnSGVscGVyOjpwQnVmZmVyQ29udGV4
dENvbmZpZygpCit7CisgICAgaWYgKCFtX3BidWZmZXJGQkNvbmZpZykgeworICAgICAgICBjb25m
aWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9QSVhNQVBfQklUOworICAgICAgICBtX3BidWZmZXJG
QkNvbmZpZyA9IGNyZWF0ZUNvbmZpZyhjb25maWdBdHRyaWJ1dGVMaXN0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbV9wYnVmZmVyRkJDb25maWc7Cit9CisKK0VHTENvbmZpZyBFR0xDb25maWdIZWxw
ZXI6OnN1cmZhY2VDb250ZXh0Q29uZmlnKCkKK3sKKyAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRG
QkNvbmZpZykgeworICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9XSU5ET1df
QklUOworICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoY29u
ZmlnQXR0cmlidXRlTGlzdCk7CisgICAgfQorCisgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRG
QkNvbmZpZzsKK30KKworRUdMaW50IEVHTENvbmZpZ0hlbHBlcjo6bmF0aXZlVmlzdWFsSWQoY29u
c3QgRUdMQ29uZmlnJiBjb25maWcpCit7CisgICAgaWYgKGRpc3BsYXkoKSA9PSBFR0xfTk9fRElT
UExBWSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgRUdMaW50IGVnbFZhbHVlID0gMDsKKyAg
ICBlZ2xHZXRDb25maWdBdHRyaWIoZGlzcGxheSgpLCBjb25maWcsIEVHTF9OQVRJVkVfVklTVUFM
X0lELCAmZWdsVmFsdWUpOworCisgICAgcmV0dXJuIGVnbFZhbHVlOworfQorCit2b2lkIEVHTENv
bmZpZ0hlbHBlcjo6cmVzZXQoKQoreworICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7
CisgICAgbV9wYnVmZmVyRkJDb25maWcgPSAwOworfQorCitFR0xDb25maWcgRUdMQ29uZmlnSGVs
cGVyOjpjcmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkKK3sKKyAgICBpZiAoZGlz
cGxheSgpID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBu
dW1Db25maWdzOworICAgIEVHTENvbmZpZyBjb25maWcgPSAwOworCisgICAgaWYgKCFlZ2xDaG9v
c2VDb25maWcoZGlzcGxheSgpLCBhdHRyaWJ1dGVzLCAmY29uZmlnLCAxLCAmbnVtQ29uZmlncykp
CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBzdXBwb3J0ZWQgY29uZmlnaXJhdGlv
bnMuXG4iKTsKKworICAgIGlmIChudW1Db25maWdzICE9IDEpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJFR0xDaG9vc2VDb25maWcgZGlkbid0IHJldHVybiBleGFjdGx5IG9uZSBjb25maWcgYnV0ICgl
ZCkuXG4iLCBudW1Db25maWdzKTsKKyAgICAgICAgY29uZmlnID0gMDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gY29uZmlnOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuaCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVscGVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4NzAxMQotLS0gL2Rldi9udWxs
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29u
ZmlnSGVscGVyLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBFR0xDb25maWdIZWxwZXJfaAorI2RlZmluZSBFR0xDb25maWdIZWxwZXJfaAorCisjaWYgVVNF
KEVHTCkKKworI2luY2x1ZGUgPG9wZW5nbC9HTERlZnMuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3R5cGVkZWYgRGlzcGxheSBOYXRpdmVTaGFyZWREaXNwbGF5OworCitjbGFzcyBTaGFyZWRF
R0xEaXNwbGF5IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFNoYXJlZEVHTERpc3BsYXkpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVkRUdMRGlzcGxheT4gY3JlYXRlKE5hdGl2ZVNoYXJlZERpc3BsYXkqIGRpc3Bs
YXkpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSkKKyAgICAg
ICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSA9IG5ldyBTaGFyZWRFR0xEaXNwbGF5KGRp
c3BsYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZEVHTERpc3Bs
YXktPnJlZigpOworCisgICAgICAgIHJldHVybiBhZG9wdFJlZihtX3N0YXRpY1NoYXJlZEVHTERp
c3BsYXkpOworICAgIH0KKworICAgIHZvaWQgZGVyZWYoKTsKKyAgICBFR0xEaXNwbGF5IHNoYXJl
ZEVHTERpc3BsYXkoKTsKKworcHJvdGVjdGVkOgorICAgIFNoYXJlZEVHTERpc3BsYXkoTmF0aXZl
U2hhcmVkRGlzcGxheSopOworICAgIHZvaWQgY2xlYW51cCgpOworICAgIHZpcnR1YWwgflNoYXJl
ZEVHTERpc3BsYXkoKTsKKworICAgIHN0YXRpYyBTaGFyZWRFR0xEaXNwbGF5KiBtX3N0YXRpY1No
YXJlZEVHTERpc3BsYXk7CisgICAgRUdMRGlzcGxheSBtX2VnbERpc3BsYXk7Cit9OworCitjbGFz
cyBFR0xDb25maWdIZWxwZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEVHTENvbmZpZ0hl
bHBlcik7CisKK3B1YmxpYzoKKyAgICBFR0xDb25maWdIZWxwZXIoTmF0aXZlU2hhcmVkRGlzcGxh
eSogPSAwKTsKKyAgICB2aXJ0dWFsIH5FR0xDb25maWdIZWxwZXIoKTsKKyAgICBQbGF0Zm9ybURp
c3BsYXkgZGlzcGxheSgpOworICAgIHZpcnR1YWwgRUdMQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29u
ZmlnKCk7CisgICAgdmlydHVhbCBFR0xDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKTsKKyAg
ICBFR0xpbnQgbmF0aXZlVmlzdWFsSWQoY29uc3QgRUdMQ29uZmlnJik7CisgICAgdm9pZCByZXNl
dCgpOworCitwcml2YXRlOgorICAgIEVHTENvbmZpZyBjcmVhdGVDb25maWcoY29uc3QgaW50IGF0
dHJpYnV0ZXNbXSk7CisKK3Byb3RlY3RlZDoKKyAgICBFR0xDb25maWcgbV9wYnVmZmVyRkJDb25m
aWc7CisgICAgRUdMQ29uZmlnIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZzsKKyAgICBSZWZQdHI8
U2hhcmVkRUdMRGlzcGxheT4gbV9zaGFyZWREaXNwbGF5OworfTsKKworfQorCisjZW5kaWYKKwor
I2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvZWdsL0VHTENvbnRleHQuY3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1
cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44YTMxOTZiCi0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcApAQCAtMCwwICsxLDE3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVHTENvbnRl
eHQuaCIKKworI2lmIFVTRShFR0wpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworI2lmIEhBVkUoR0xYKQorI2luY2x1ZGUgPEdML2dseC5oPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IEVHTGludCBjb250ZXh0QXR0cmlidXRlc1tdID0g
eworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwg
MiwKKyNlbmRpZgorICAgIEVHTF9OT05FCit9OworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRl
eHRSb2J1c3RuZXNzQXR0cmlidXRlc1tdID0geworI2lmIFVTRShPUEVOR0xfRVNfMikKKyAgICBF
R0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgMiwKKyNlbmRpZgorICAgIEVHTF9DT05URVhUX09Q
RU5HTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhULAorICAgIEVHTF9MT1NFX0NPTlRF
WFRfT05fUkVTRVRfRVhULAorICAgIEVHTF9OT05FCit9OworCitzdGF0aWMgYm9vbCBpc1JvYnVz
dG5lc3NFeHRTdXBwb3J0ZWQoRUdMRGlzcGxheSBkaXNwbGF5KQoreworICAgIHN0YXRpYyBib29s
IGRpZFF1ZXJ5Rm9yUm9idXN0bmVzc0V4dGVuc2lvbiA9IGZhbHNlOworICAgIHN0YXRpYyBib29s
IGlzUm9idXN0bmVzc0V4dGVuc2lvblN1cHBvcnRlZCA9IGZhbHNlOworCisgICAgaWYgKCFkaWRR
dWVyeUZvclJvYnVzdG5lc3NFeHRlbnNpb24pIHsKKyAgICAgICAgZGlkUXVlcnlGb3JSb2J1c3Ru
ZXNzRXh0ZW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgU3RyaW5nIHN1cHBvcnRlZEV4dGVuc2lvbnMg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihlZ2xRdWVyeVN0cmluZyhkaXNwbGF5LCBF
R0xfRVhURU5TSU9OUykpOworCisgICAgICAgIGlmICghc3VwcG9ydGVkRXh0ZW5zaW9ucy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbnMuYXBwZW5kKCIgIik7Cisg
ICAgICAgICAgICBpc1JvYnVzdG5lc3NFeHRlbnNpb25TdXBwb3J0ZWQgPSBzdXBwb3J0ZWRFeHRl
bnNpb25zLmNvbnRhaW5zKCJFR0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MiKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpc1JvYnVzdG5lc3NFeHRlbnNpb25TdXBwb3J0
ZWQ7Cit9CisKK0VHTEN1cnJlbnRDb250ZXh0V3JhcHBlcjo6RUdMQ3VycmVudENvbnRleHRXcmFw
cGVyKCkKKyAgICA6IEdMUGxhdGZvcm1Db250ZXh0KCkKK3sKK30KKworLy8gRklYTUU6IFRoaXMg
aXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB1bnRpbCB3ZSBhcmUgYWJsZSB0byBidWlsZCBldmFz
IHdpdGggRUdMIHN1cHBvcnQuCitQbGF0Zm9ybUNvbnRleHQgRUdMQ3VycmVudENvbnRleHRXcmFw
cGVyOjpoYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBnbFhHZXRDdXJyZW50Q29udGV4dCgp
OworfQorCitFR0xPZmZTY3JlZW5Db250ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0KCkKKyAgICA6
IEdMUGxhdGZvcm1Db250ZXh0KCkKKyAgICAsIG1fZGlzcGxheSgwKQoreworfQorCitib29sIEVH
TE9mZlNjcmVlbkNvbnRleHQ6OmluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2Up
Cit7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
IWVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gc2V0IEVHTCBBUEkoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBtX2Rpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNwbGF5KCk7
CisgICAgaWYgKCFtX2Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVHTENv
bmZpZyBjb25maWcgPSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CisgICAgaWYgKCFjb25maWcp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChpc1JvYnVzdG5lc3NFeHRTdXBwb3J0
ZWQobV9kaXNwbGF5KSkKKyAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWdsQ3JlYXRlQ29udGV4
dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRSb2J1c3RuZXNzQXR0
cmlidXRlcyk7CisKKyAgICBpZiAobV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05URVhUKQor
ICAgICAgICBtX3Jlc2V0TG9zdENvbnRleHQgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV9j
b250ZXh0SGFuZGxlID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05P
X0NPTlRFWFQsIGNvbnRleHRBdHRyaWJ1dGVzKTsKKworICAgIGlmIChtX2NvbnRleHRIYW5kbGUg
IT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitFR0xPZmZTY3JlZW5Db250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCgpCit7
Cit9CisKK2Jvb2wgRUdMT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fY29udGV4dEhhbmRsZSA9PSBlZ2xHZXRDdXJyZW50Q29udGV4dCgp
OworfQorCitib29sIEVHTE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQ
bGF0Zm9ybVN1cmZhY2UqIHN1cmZhY2UpCit7CisgICAgaWYgKCFlZ2xNYWtlQ3VycmVudChtX2Rp
c3BsYXksIHN1cmZhY2UtPmRyYXdhYmxlKCksIHN1cmZhY2UtPmRyYXdhYmxlKCksIG1fY29udGV4
dEhhbmRsZSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb250ZXh0IGN1
cnJlbnQuKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworCisgICAgICAgIGlmIChtX3Jlc2V0TG9z
dENvbnRleHQgJiYgZWdsR2V0RXJyb3IoKSA9PSBFR0xfQ09OVEVYVF9MT1NUKSB7CisgICAgICAg
ICAgICBMT0dfRVJST1IoIkxvc3QgY3VycmVudCBjb250ZXh0LlxuIik7CisgICAgICAgICAgICBt
X2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5Db250ZXh0
OjpwbGF0Zm9ybVJlbGVhc2VDdXJyZW50KCkKK3sKKyAgICBlZ2xNYWtlQ3VycmVudChtX2Rpc3Bs
YXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworfQor
Cit2b2lkIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmZyZWVSZXNvdXJjZXMoKQoreworICAgIGlmICht
X2NvbnRleHRIYW5kbGUgPT0gRUdMX05PX0NPTlRFWFQpCisgICAgICAgIHJldHVybjsKKworICAg
IGVnbERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0SGFuZGxlKTsKKyAgICBtX2Nv
bnRleHRIYW5kbGUgPSBFR0xfTk9fQ09OVEVYVDsKKyAgICBtX2Rpc3BsYXkgPSAwOworfQorCit2
b2lkIEVHTE9mZlNjcmVlbkNvbnRleHQ6OmRlc3Ryb3koKQoreworICAgIEdMUGxhdGZvcm1Db250
ZXh0OjpkZXN0cm95KCk7CisgICAgZnJlZVJlc291cmNlcygpOworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9F
R0xDb250ZXh0LmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWds
L0VHTENvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTk1YTE4
Ci0tLSAvZGV2L251bGwKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xDb250ZXh0LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBFR0xDb250ZXh0X2gKKyNkZWZpbmUgRUdMQ29udGV4dF9oCisKKyNpZiBVU0Uo
RUdMKQorCisjaW5jbHVkZSAiR0xQbGF0Zm9ybUNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIgOiBwdWJsaWMgR0xQbGF0Zm9y
bUNvbnRleHQgeworCitwdWJsaWM6CisgICAgRUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCk7Cisg
ICAgdmlydHVhbCBQbGF0Zm9ybUNvbnRleHQgaGFuZGxlKCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB+RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKCkgeyB9Cit9OworCitjbGFzcyBFR0xP
ZmZTY3JlZW5Db250ZXh0IDogcHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsKKworcHVibGljOgor
ICAgIEVHTE9mZlNjcmVlbkNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIH5FR0xPZmZTY3JlZW5Db250
ZXh0KCk7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemUoR0xQbGF0Zm9ybVN1cmZhY2UqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1NYWtlQ3VycmVudChHTFBsYXRmb3Jt
U3VyZmFjZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVJlbGVhc2VDdXJy
ZW50KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNDdXJyZW50Q29udGV4dCgpIGNvbnN0IE9WRVJSSURFOworCitwcml2
YXRlOgorICAgIHZvaWQgZnJlZVJlc291cmNlcygpOworICAgIEVHTERpc3BsYXkgbV9kaXNwbGF5
OworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTM0NDgwCi0tLSAvZGV2L251bGwKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNw
cApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkVHTFN1cmZhY2UuaCIKKworI2lmIFVTRShFR0wpICYmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VHTFdpbmRvd1RyYW5zcG9y
dFN1cmZhY2U6OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQorICAgIDogR0xQbGF0Zm9ybVN1
cmZhY2UoKQoreworICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBhZG9wdFB0cihuZXcgTmF0aXZlT2Zm
U2NyZWVuV2luZG93KCkpOworICAgIG1fZWdsQ29uZmlnSGVscGVyID0gYWRvcHRQdHIobmV3IEVH
TENvbmZpZ0hlbHBlcihtX25hdGl2ZVJlc291cmNlLT5uYXRpdmVTaGFyZWREaXNwbGF5KCkpKTsK
KyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX2VnbENvbmZpZ0hlbHBlci0+ZGlzcGxheSgpOworCisg
ICAgaWYgKG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExBWSkgeworICAgICAgICBtX2Vn
bENvbmZpZ0hlbHBlciA9IG51bGxwdHI7CisgICAgICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxs
cHRyOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdMQ29uZmlnIGNvbmZpZyA9IG1f
ZWdsQ29uZmlnSGVscGVyLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOworCisgICAgaWYgKCFjb25m
aWcpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
RUdMaW50IHZpc3VhbElkID0gbV9lZ2xDb25maWdIZWxwZXItPm5hdGl2ZVZpc3VhbElkKGNvbmZp
Zyk7CisKKyAgICBpZiAodmlzdWFsSWQgPT0gLTEpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX25hdGl2ZVJlc291cmNlLT5zZXRWaXN1
YWxJZCh2aXN1YWxJZCkpIHsKKyAgICAgICAgZGVzdHJveSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9uYXRpdmVSZXNvdXJjZS0+Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCZtX2J1
ZmZlckhhbmRsZSk7CisKKyAgICBpZiAoIW1fYnVmZmVySGFuZGxlKSB7CisgICAgICAgIGRlc3Ry
b3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fZHJhd2FibGUgPSBlZ2xDcmVh
dGVXaW5kb3dTdXJmYWNlKG1fc2hhcmVkRGlzcGxheSwgbV9lZ2xDb25maWdIZWxwZXItPnN1cmZh
Y2VDb250ZXh0Q29uZmlnKCksIChFR0xOYXRpdmVXaW5kb3dUeXBlKW1fYnVmZmVySGFuZGxlLCAw
KTsKKworICAgIGlmIChtX2RyYXdhYmxlID09IEVHTF9OT19TVVJGQUNFKSB7CisgICAgICAgIExP
R19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgc3VyZmFjZSglZCkuXG4iLCBlZ2xHZXRFcnJv
cigpKTsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KK30KKworRUdMV2luZG93VHJhbnNwb3J0
U3VyZmFjZTo6fkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKQoreworfQorCitQbGF0Zm9ybVN1
cmZhY2VDb25maWcgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6Y29uZmlndXJhdGlvbigpCit7
CisgICAgcmV0dXJuIG1fZWdsQ29uZmlnSGVscGVyLT5zdXJmYWNlQ29udGV4dENvbmZpZygpOwor
fQorCit2b2lkIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKCkKK3sKKyAg
ICBpZiAoIW1fZHJhd2FibGUpCisgICAgICAgIHJldHVybjsKKworICAgIEVHTEJvb2xlYW4gc3Vj
Y2VzcyA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7CisKKyAgICBpZiAoc3VjY2VzcyAhPSBF
R0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCku
XG4iLCBlZ2xHZXRFcnJvcigpKTsKKyAgICAgICAgZGVzdHJveSgpOworICAgIH0KKworICAgIHN1
Y2Nlc3MgPSBlZ2xTd2FwQnVmZmVycyhtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpOworCisg
ICAgaWYgKHN1Y2Nlc3MgIT0gRUdMX1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQg
dG8gU3dhcEJ1ZmZlcnMoJWQpLlxuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIGRlc3Ryb3ko
KTsKKyAgICB9Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZGVzdHJveSgp
Cit7CisgICAgbV9uYXRpdmVSZXNvdXJjZS0+ZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7
CisgICAgZnJlZUVHTFJlc291cmNlcygpOworICAgIG1fbmF0aXZlUmVzb3VyY2UgPSBudWxscHRy
OworICAgIG1fZWdsQ29uZmlnSGVscGVyID0gbnVsbHB0cjsKKyAgICBtX2J1ZmZlckhhbmRsZSA9
IDA7Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNl
cygpCit7CisgICAgaWYgKG1fZHJhd2FibGUgPT0gRUdMX05PX1NVUkZBQ0UgfHwgbV9zaGFyZWRE
aXNwbGF5ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm47CisKKyAgICBFR0xCb29s
ZWFuIGVnbFJlc3VsdCA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7CisKKyAgICBpZiAoZWds
UmVzdWx0ICE9IEVHTF9UUlVFKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBF
R0wgQVBJKCVkKS5cbiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZWdsRGVzdHJveVN1cmZhY2UobV9zaGFyZWREaXNwbGF5LCBtX2RyYXdhYmxlKTsKKyAg
ICBtX2RyYXdhYmxlID0gRUdMX05PX1NVUkZBQ0U7Cit9CisKK3ZvaWQgRUdMV2luZG93VHJhbnNw
b3J0U3VyZmFjZTo6c2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3sKKyAgICBH
TFBsYXRmb3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7CisgICAgbV9uYXRpdmVSZXNv
dXJjZS0+cmVTaXplV2luZG93KG5ld1JlY3QsIG1fYnVmZmVySGFuZGxlKTsKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9lZ2wvRUdMU3VyZmFjZS5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZh
Y2VzL2VnbC9FR0xTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Nzg4NjNkYwotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRUdMU3VyZmFjZV9oCisjZGVmaW5lIEVHTFN1cmZhY2VfaAorCisj
aWYgVVNFKEVHTCkgJiYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisKKyNpbmNsdWRlICJFR0xDb25m
aWdIZWxwZXIuaCIKKyNpbmNsdWRlICJHTFBsYXRmb3JtU3VyZmFjZS5oIgorCisjaW5jbHVkZSA8
Z2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlw
ZWRlZiBYMTFPZmZTY3JlZW5XaW5kb3cgTmF0aXZlT2ZmU2NyZWVuV2luZG93OworCisvLyBDb250
ZW50cyBvZiB0aGUgc3VyZmFjZSBhcmUgYmFja2VkIGJ5IG5hdGl2ZSB3aW5kb3cuCitjbGFzcyBF
R0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlIDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKKwor
cHVibGljOgorICAgIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5F
R0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlKCk7CisgICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VD
b25maWcgY29uZmlndXJhdGlvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRHZW9t
ZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3dhcEJ1ZmZlcnMoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpIE9WRVJS
SURFOworCitwcml2YXRlOgorICAgIHZvaWQgZnJlZUVHTFJlc291cmNlcygpOworICAgIE93blB0
cjxOYXRpdmVPZmZTY3JlZW5XaW5kb3c+IG1fbmF0aXZlUmVzb3VyY2U7CisgICAgT3duUHRyPEVH
TENvbmZpZ0hlbHBlcj4gbV9lZ2xDb25maWdIZWxwZXI7Cit9OworCit9CisKKyNlbmRpZgorCisj
ZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9nbHgvR0xYU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCmluZGV4IDk2YTBhYjkuLmM5Y2Q4ZDIgMTAwNjQ0Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFj
ZS5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9H
TFhTdXJmYWNlLmNwcApAQCAtMzYsNyArMzYsNyBAQCBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJB
dHRyaWJ1dGVzW10gPSB7IEdMWF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSAog
R0xYVHJhbnNwb3J0U3VyZmFjZTo6R0xYVHJhbnNwb3J0U3VyZmFjZSgpCiAgICAgOiBYMTFPZmZT
Y3JlZW5XaW5kb3coKQogewotICAgIGNyZWF0ZU9mZnNjcmVlbldpbmRvdygpOworICAgIGNyZWF0
ZU9mZnNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUpOwogICAgIG1fZHJhd2FibGUgPSBtX2J1
ZmZlckhhbmRsZTsKIH0KIApAQCAtNDksNiArNDksMTIgQEAgUGxhdGZvcm1TdXJmYWNlQ29uZmln
IEdMWFRyYW5zcG9ydFN1cmZhY2U6OmNvbmZpZ3VyYXRpb24oKQogICAgIHJldHVybiBtX3NoYXJl
ZFJlc291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKIH0KIAordm9pZCBHTFhUcmFuc3Bv
cnRTdXJmYWNlOjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQoreworICAgIEdM
UGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9tZXRyeShuZXdSZWN0KTsKKyAgICByZVNpemVXaW5kb3co
bmV3UmVjdCwgbV9kcmF3YWJsZSk7Cit9CisKIHZvaWQgR0xYVHJhbnNwb3J0U3VyZmFjZTo6c3dh
cEJ1ZmZlcnMoKQogewogICAgIGlmICghbV9kcmF3YWJsZSkKQEAgLTY2LDcgKzcyLDcgQEAgdm9p
ZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCiAKIHZvaWQgR0xYVHJhbnNwb3J0
U3VyZmFjZTo6ZGVzdHJveSgpCiB7Ci0gICAgZGVzdHJveVdpbmRvdygpOworICAgIGRlc3Ryb3lX
aW5kb3cobV9idWZmZXJIYW5kbGUpOwogICAgIG1fYnVmZmVySGFuZGxlID0gMDsKIH0KIApkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhT
dXJmYWNlLmggU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dM
WFN1cmZhY2UuaAppbmRleCA0ZTg3Njg1Li4wZDg0YzM0IDEwMDY0NAotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaApAQCAt
NDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+R0xYVHJhbnNwb3J0U3VyZmFjZSgp
OwogICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCk7CiAgICAgdm9pZCBz
d2FwQnVmZmVycygpOworICAgIHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOwogICAg
IHZvaWQgZGVzdHJveSgpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2Vz
LmgKaW5kZXggYzE3MzU1Ny4uY2JmY2MzOSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaAorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFdpbmRvd1Jlc291cmNl
cy5oCkBAIC01MSw2ICs1MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTaGFyZWRYMTFS
ZXNvdXJjZXM6OngxMURpc3BsYXkoKTsKICAgICB9CiAKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFs
SW5mbygpCisgICAgeworICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKKyAgICAgICAgICAgIHN1
cmZhY2VDb250ZXh0Q29uZmlnKCk7CisKKyAgICAgICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsKKyAg
ICB9CisKICAgICB2aXJ0dWFsIEdMWEZCQ29uZmlnIHBCdWZmZXJDb250ZXh0Q29uZmlnKCkKICAg
ICB7CiAgICAgICAgIGlmICghbV9wYnVmZmVyZmJDb25maWcpIHsKQEAgLTk4LDExICsxMDYsMTIg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOwogICAg
IH0KIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBTaGFyZWRHTFhSZXNvdXJjZXMoKQogICAg
ICAgICA6IFNoYXJlZFgxMVJlc291cmNlcygpCiAgICAgICAgICwgbV9wYnVmZmVyZmJDb25maWco
MCkKICAgICAgICAgLCBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcoMCkKKyAgICAgICAgLCBtX1Zp
c3VhbEluZm8oMCkKICAgICB7CiAgICAgfQogCkBAIC0xNjAsMTAgKzE2OSwxNiBAQCBwcml2YXRl
OgogCiAgICAgICAgIGlmIChtX3N1cmZhY2VDb250ZXh0ZmJDb25maWcpCiAgICAgICAgICAgICBt
X3N1cmZhY2VDb250ZXh0ZmJDb25maWcgPSAwOworCisgICAgICAgIGlmIChtX1Zpc3VhbEluZm8p
IHsKKyAgICAgICAgICAgIFhGcmVlKG1fVmlzdWFsSW5mbyk7CisgICAgICAgICAgICBtX1Zpc3Vh
bEluZm8gPSAwOworICAgICAgICB9CiAgICAgfQogCiAgICAgR0xYRkJDb25maWcgbV9wYnVmZmVy
ZmJDb25maWc7CiAgICAgR0xYRkJDb25maWcgbV9zdXJmYWNlQ29udGV4dGZiQ29uZmlnOworICAg
IFhWaXN1YWxJbmZvKiBtX1Zpc3VhbEluZm87CiB9OwogCiB9CmRpZmYgLS1naXQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5j
cHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRv
d1Jlc291cmNlcy5jcHAKaW5kZXggNjAyOTNlNy4uY2FiMjJmYiAxMDA2NDQKLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMu
Y3BwCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDEx
V2luZG93UmVzb3VyY2VzLmNwcApAQCAtMjgsNyArMjgsOSBAQAogCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogCisjaWYgVVNFKEdMWCkKICNpbmNsdWRlICJHTFhXaW5kb3dSZXNv
dXJjZXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDI2ICszOSwz
MCBAQCBQbGF0Zm9ybVNoYXJlZFJlc291cmNlcyogU2hhcmVkWDExUmVzb3VyY2VzOjptX3N0YXRp
Y1NoYXJlZFJlc291cmNlID0gMDsKIFgxMU9mZlNjcmVlbldpbmRvdzo6WDExT2ZmU2NyZWVuV2lu
ZG93KCkKICAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKICAgICAsIG1fc2hhcmVkUmVzb3VyY2Vz
KDApCisgICAgLCBtX2NvbmZpZ1Zpc3VhbEluZm8oMCkKIHsKICAgICBtX3NoYXJlZFJlc291cmNl
cyA9IFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzOjpjcmVhdGUoKTsKIAogICAgIGlmICghbV9zaGFy
ZWRSZXNvdXJjZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fc2hhcmVkRGlzcGxheSA9IG1f
c2hhcmVkUmVzb3VyY2VzLT5uYXRpdmVEaXNwbGF5KCk7CisgICAgbV9zaGFyZWREaXNwbGF5ID0g
bV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKIH0KIAogWDExT2ZmU2NyZWVuV2luZG93
Ojp+WDExT2ZmU2NyZWVuV2luZG93KCkKIHsKKyAgICBpZiAobV9jb25maWdWaXN1YWxJbmZvKSB7
CisgICAgICAgIFhGcmVlKG1fY29uZmlnVmlzdWFsSW5mbyk7CisgICAgICAgIG1fY29uZmlnVmlz
dWFsSW5mbyA9IDA7CisgICAgfQogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0R2Vv
bWV0cnkoY29uc3QgSW50UmVjdCYgbmV3UmVjdCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93Ojpy
ZVNpemVXaW5kb3coY29uc3QgSW50UmVjdCYgbmV3UmVjdCwgUGxhdGZvcm1CdWZmZXJIYW5kbGUg
d2luZG93SWQpCiB7Ci0gICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21ldHJ5KG5ld1JlY3Qp
OwotICAgIFhSZXNpemVXaW5kb3cobV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgbV9i
dWZmZXJIYW5kbGUsIG5ld1JlY3Qud2lkdGgoKSwgbmV3UmVjdC5oZWlnaHQoKSk7CisgICAgWFJl
c2l6ZVdpbmRvdyhtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCB3aW5kb3dJZCwgbmV3
UmVjdC53aWR0aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKIH0KIAotdm9pZCBYMTFPZmZTY3JlZW5X
aW5kb3c6OmNyZWF0ZU9mZnNjcmVlbldpbmRvdygpCit2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6
Y3JlYXRlT2Zmc2NyZWVuV2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKiBoYW5kbGVJZCkKIHsK
ICAgICBpZiAoIW1fc2hhcmVkUmVzb3VyY2VzKQogICAgICAgICByZXR1cm47CkBAIC02NSwxNCAr
NzEsMTEgQEAgdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmNyZWF0ZU9mZnNjcmVlbldpbmRvdygp
CiAgICAgaWYgKCFkaXNwbGF5KQogICAgICAgICByZXR1cm47CiAKLSAgICBQbGF0Zm9ybVN1cmZh
Y2VDb25maWcgY29uZmlnID0gbV9zaGFyZWRSZXNvdXJjZXMtPnN1cmZhY2VDb250ZXh0Q29uZmln
KCk7Ci0KLSAgICBpZiAoIWNvbmZpZykgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBy
ZXRyaWV2ZSBhIHZhbGlkIGNvbmZpZ2lyYXRpb24uIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KKyNpZiBVU0UoR0xYKQogICAgIFhWaXN1YWxJbmZvKiB2aXNJbmZvID0gbV9zaGFyZWRSZXNv
dXJjZXMtPnZpc3VhbEluZm8oKTsKKyNlbHNlCisgICAgWFZpc3VhbEluZm8qIHZpc0luZm8gPSBt
X2NvbmZpZ1Zpc3VhbEluZm87CisjZW5kaWYKIAogICAgIGlmICghdmlzSW5mbykgewogICAgICAg
ICBMT0dfRVJST1IoIkZhaWxlZCB0byBmaW5kIHZhbGlkIFhWaXN1YWwiKTsKQEAgLTg4LDI0ICs5
MSwyNyBAQCB2b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCkK
ICAgICBhdHRyaWJ1dGUuYmFja2dyb3VuZF9waXhlbCA9IFdoaXRlUGl4ZWwoZGlzcGxheSwgMCk7
CiAgICAgYXR0cmlidXRlLmJvcmRlcl9waXhlbCA9IEJsYWNrUGl4ZWwoZGlzcGxheSwgMCk7CiAg
ICAgYXR0cmlidXRlLmNvbG9ybWFwID0gY21hcDsKLSAgICBtX2J1ZmZlckhhbmRsZSA9IFhDcmVh
dGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgMSwgMSwgMCwgdmlzSW5mby0+ZGVwdGgs
IElucHV0T3V0cHV0LCB2aXNJbmZvLT52aXN1YWwsIENXQmFja1BpeGVsIHwgQ1dCb3JkZXJQaXhl
bCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOworICAgIFBsYXRmb3JtQnVmZmVySGFuZGxlIHRl
bXBIYW5kbGVJZDsKKyAgICB0ZW1wSGFuZGxlSWQgPSBYQ3JlYXRlV2luZG93KGRpc3BsYXksIHhX
aW5kb3csIDAsIDAsIDEsIDEsIDAsIHZpc0luZm8tPmRlcHRoLCBJbnB1dE91dHB1dCwgdmlzSW5m
by0+dmlzdWFsLCBDV0JhY2tQaXhlbCB8IENXQm9yZGVyUGl4ZWwgfCBDV0NvbG9ybWFwLCAmYXR0
cmlidXRlKTsKIAotICAgIGlmICghbV9idWZmZXJIYW5kbGUpIHsKKyAgICBpZiAoIXRlbXBIYW5k
bGVJZCkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgb2Zmc2NyZWVuIHdp
bmRvdyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgWFNldFdpbmRvd0JhY2tncm91
bmRQaXhtYXAoZGlzcGxheSwgbV9idWZmZXJIYW5kbGUsIDApOwotICAgIFhDb21wb3NpdGVSZWRp
cmVjdFdpbmRvdyhkaXNwbGF5LCBtX2J1ZmZlckhhbmRsZSwgQ29tcG9zaXRlUmVkaXJlY3RNYW51
YWwpOworICAgIFhTZXRXaW5kb3dCYWNrZ3JvdW5kUGl4bWFwKGRpc3BsYXksIHRlbXBIYW5kbGVJ
ZCwgMCk7CisgICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIHRlbXBIYW5kbGVJ
ZCwgQ29tcG9zaXRlUmVkaXJlY3RNYW51YWwpOworICAgICpoYW5kbGVJZCA9IHRlbXBIYW5kbGVJ
ZDsKKyAgICBtX2J1ZmZlckhhbmRsZSA9IHRlbXBIYW5kbGVJZDsKIAogICAgIGlmIChtX3NoYXJl
ZFJlc291cmNlcy0+aXNYUmVuZGVyRXh0ZW5zaW9uU3VwcG9ydGVkKCkpCi0gICAgICAgIFhNYXBX
aW5kb3coZGlzcGxheSwgbV9idWZmZXJIYW5kbGUpOworICAgICAgICBYTWFwV2luZG93KGRpc3Bs
YXksIHRlbXBIYW5kbGVJZCk7CiAKIH0KIAotdm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ry
b3lXaW5kb3coKQordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OmRlc3Ryb3lXaW5kb3coUGxhdGZv
cm1CdWZmZXJIYW5kbGUgd2luZG93SWQpCiB7Ci0gICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkKKyAg
ICBpZiAoIXdpbmRvd0lkKQogICAgICAgICByZXR1cm47CiAKICAgICBHTFBsYXRmb3JtU3VyZmFj
ZTo6ZGVzdHJveSgpOwpAQCAtMTEzLDkgKzExOSw2NyBAQCB2b2lkIFgxMU9mZlNjcmVlbldpbmRv
dzo6ZGVzdHJveVdpbmRvdygpCiAgICAgaWYgKCFkaXNwbGF5KQogICAgICAgICByZXR1cm47CiAK
LSAgICBYRGVzdHJveVdpbmRvdyhkaXNwbGF5LCBtX2J1ZmZlckhhbmRsZSk7Ci0gICAgbV9idWZm
ZXJIYW5kbGUgPSAwOworICAgIFhEZXN0cm95V2luZG93KGRpc3BsYXksIHdpbmRvd0lkKTsKK30K
KworRGlzcGxheSogWDExT2ZmU2NyZWVuV2luZG93OjpuYXRpdmVTaGFyZWREaXNwbGF5KCkKK3sK
KyAgICByZXR1cm4gbV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKTsKK30KKworI2lmIFVT
RShFR0wpCitib29sIFgxMU9mZlNjcmVlbldpbmRvdzo6c2V0VmlzdWFsSWQoY29uc3QgRUdMaW50
IGlkKQoreworICAgIFZpc3VhbElEIHZpc3VhbElkID0gc3RhdGljX2Nhc3Q8VmlzdWFsSUQ+KGlk
KTsKKworICAgIGlmICghdmlzdWFsSWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IEVHTCBoYXMgc3VnZ2VzdGVkIGEgdmlzdWFsIGlkLCBzbyBnZXQgdGhlIHJlc3Qgb2YgdGhlIHZp
c3VhbCBpbmZvIGZvciB0aGF0IGlkLgorICAgIFhWaXN1YWxJbmZvIHZpc3VhbEluZm9UZW1wbGF0
ZTsKKyAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwgc2l6ZW9mKFhWaXN1YWxJbmZv
KSk7CisgICAgdmlzdWFsSW5mb1RlbXBsYXRlLnZpc3VhbGlkID0gdmlzdWFsSWQ7CisKKyAgICBY
VmlzdWFsSW5mbyogY2hvc2VuVmlzdWFsSW5mbzsKKyAgICBpbnQgbWF0Y2hpbmdDb3VudCA9IDA7
CisgICAgY2hvc2VuVmlzdWFsSW5mbyA9IFhHZXRWaXN1YWxJbmZvKG1fc2hhcmVkUmVzb3VyY2Vz
LT54MTFEaXNwbGF5KCksIFZpc3VhbElETWFzaywgJnZpc3VhbEluZm9UZW1wbGF0ZSwgJm1hdGNo
aW5nQ291bnQpOworICAgIGlmIChjaG9zZW5WaXN1YWxJbmZvKSB7CisjaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCisgICAgICAgIGlmIChtX3NoYXJlZFJlc291cmNlcy0+aXNYUmVuZGVyRXh0ZW5z
aW9uU3VwcG9ydGVkKCkpIHsKKyAgICAgICAgICAgIFhSZW5kZXJQaWN0Rm9ybWF0KiBmb3JtYXQg
PSBYUmVuZGVyRmluZFZpc3VhbEZvcm1hdChtX3NoYXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgp
LCBjaG9zZW5WaXN1YWxJbmZvLT52aXN1YWwpOworICAgICAgICAgICAgaWYgKGZvcm1hdCAmJiBm
b3JtYXQtPmRpcmVjdC5hbHBoYU1hc2sgPiAwKSB7CisgICAgICAgICAgICAgICAgbV9jb25maWdW
aXN1YWxJbmZvID0gY2hvc2VuVmlzdWFsSW5mbzsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChjaG9zZW5W
aXN1YWxJbmZvLT5kZXB0aCA9PSAzMikgeworICAgICAgICAgICAgbV9jb25maWdWaXN1YWxJbmZv
ID0gY2hvc2VuVmlzdWFsSW5mbzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFtX2NvbmZpZ1Zpc3VhbEluZm8pIHsKKyAgICAgICAgbWVtc2V0
KCZ2aXN1YWxJbmZvVGVtcGxhdGUsIDAsIHNpemVvZihYVmlzdWFsSW5mbykpOworICAgICAgICBY
VmlzdWFsSW5mbyogbWF0Y2hpbmdWaXN1YWxzOworICAgICAgICBpbnQgbWF0Y2hpbmdDb3VudCA9
IDA7CisKKyAgICAgICAgdmlzdWFsSW5mb1RlbXBsYXRlLmRlcHRoID0gY2hvc2VuVmlzdWFsSW5m
by0+ZGVwdGg7CisgICAgICAgIG1hdGNoaW5nVmlzdWFscyA9IFhHZXRWaXN1YWxJbmZvKG1fc2hh
cmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIFZpc3VhbERlcHRoTWFzaywgJnZpc3VhbEluZm9U
ZW1wbGF0ZSwgJm1hdGNoaW5nQ291bnQpOworCisgICAgICAgIGlmIChtYXRjaGluZ1Zpc3VhbHMp
IHsKKyAgICAgICAgICAgIG1fY29uZmlnVmlzdWFsSW5mbyA9ICZtYXRjaGluZ1Zpc3VhbHNbMF07
CisgICAgICAgICAgICBYRnJlZShtYXRjaGluZ1Zpc3VhbHMpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fY29uZmlnVmlzdWFsSW5mbykK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgWFZpc3VhbCBJbmZvLlxuIik7
CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CisjZW5kaWYKIAogfQogCmRpZmYgLS1naXQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNl
cy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5k
b3dSZXNvdXJjZXMuaAppbmRleCBiMjViMmFjLi45YzA4MGMzIDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5o
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2lu
ZG93UmVzb3VyY2VzLmgKQEAgLTQwLDEzICs0MCwzMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyNpZiBVU0UoR0xYKQogY2xhc3MgU2hhcmVkR0xYUmVzb3VyY2VzOwogdHlwZWRlZiBTaGFy
ZWRHTFhSZXNvdXJjZXMgUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM7CisjZWxpZiBVU0UoRUdMKQor
Y2xhc3MgU2hhcmVkWDExUmVzb3VyY2VzOwordHlwZWRlZiBTaGFyZWRYMTFSZXNvdXJjZXMgUGxh
dGZvcm1TaGFyZWRSZXNvdXJjZXM7CisjZW5kaWYKIAogY2xhc3MgU2hhcmVkWDExUmVzb3VyY2Vz
IDogcHVibGljIFdURjo6UmVmQ291bnRlZEJhc2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNoYXJlZFgxMVJlc291cmNlcyk7CiAKIHB1YmxpYzoKKyNpZiBVU0UoRUdMKQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJlc291cmNlKQorICAgICAgICAgICAgbV9zdGF0aWNT
aGFyZWRSZXNvdXJjZSA9IG5ldyBQbGF0Zm9ybVNoYXJlZFJlc291cmNlcygpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3N0YXRpY1NoYXJlZFJlc291cmNlLT5yZWYoKTsKKworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNTaGFyZWRSZXNvdXJjZSk7CisgICAgfQorI2VuZGlm
CisKICAgICB2b2lkIGRlcmVmKCkKICAgICB7CiAgICAgICAgIGlmIChkZXJlZkJhc2UoKSkgewpA
QCAtOTQsMjkgKzExMSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3dpbmRvdzsKICAg
ICB9CiAKLSAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbygpCi0gICAgewotICAgICAgICBpZiAo
IW1fVmlzdWFsSW5mbykKLSAgICAgICAgICAgIHN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Ci0KLSAg
ICAgICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsKLSAgICB9Ci0KICAgICBib29sIGlzWFJlbmRlckV4
dGVuc2lvblN1cHBvcnRlZCgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zdXBwb3J0c1hSZW5k
ZXJFeHRlbnNpb247CiAgICAgfQogCi0gICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcg
cEJ1ZmZlckNvbnRleHRDb25maWcoKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VD
b25maWcgc3VyZmFjZUNvbnRleHRDb25maWcoKSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybURp
c3BsYXkgbmF0aXZlRGlzcGxheSgpID0gMDsKLQogcHJvdGVjdGVkOgogICAgIFNoYXJlZFgxMVJl
c291cmNlcygpCiAgICAgICAgIDogbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb24oZmFsc2UpCiAg
ICAgICAgICwgbV93aW5kb3coMCkKICAgICAgICAgLCBtX2Rpc3BsYXkoMCkKLSAgICAgICAgLCBt
X1Zpc3VhbEluZm8oMCkKICAgICB7CiAgICAgfQogCkBAIC0xMzEsMTEgKzEzNSw2IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgICAgIG1fd2luZG93ID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtX1Zpc3VhbEluZm8pIHsKLSAgICAgICAgICAgIFhGcmVlKG1fVmlzdWFsSW5mbyk7Ci0gICAg
ICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOwotICAgICAgICB9Ci0KICAgICAgICAgWENsb3NlRGlz
cGxheShtX2Rpc3BsYXkpOwogICAgICAgICBtX2Rpc3BsYXkgPSAwOwogICAgIH0KQEAgLTE0NCw3
ICsxNDMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lv
bjsKICAgICBXaW5kb3cgbV93aW5kb3c7CiAgICAgRGlzcGxheSogbV9kaXNwbGF5OwotICAgIFhW
aXN1YWxJbmZvKiBtX1Zpc3VhbEluZm87CiB9OwogCiBjbGFzcyBYMTFPZmZTY3JlZW5XaW5kb3cg
OiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewpAQCAtMTUzLDEyICsxNTEsMTcgQEAgY2xhc3Mg
WDExT2ZmU2NyZWVuV2luZG93IDogcHVibGljIEdMUGxhdGZvcm1TdXJmYWNlIHsKIHB1YmxpYzoK
ICAgICBYMTFPZmZTY3JlZW5XaW5kb3coKTsKICAgICB2aXJ0dWFsIH5YMTFPZmZTY3JlZW5XaW5k
b3coKTsKLSAgICB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNy
ZWF0ZU9mZnNjcmVlbldpbmRvdygpOwotICAgIHZvaWQgZGVzdHJveVdpbmRvdygpOworICAgIHZv
aWQgY3JlYXRlT2Zmc2NyZWVuV2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKik7CisgICAgdm9p
ZCBkZXN0cm95V2luZG93KFBsYXRmb3JtQnVmZmVySGFuZGxlKTsKKyAgICB2b2lkIHJlU2l6ZVdp
bmRvdyhjb25zdCBJbnRSZWN0JiwgUGxhdGZvcm1CdWZmZXJIYW5kbGUpOworICAgIERpc3BsYXkq
IG5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKKyNpZiBVU0UoRUdMKQorICAgIGJvb2wgc2V0VmlzdWFs
SWQoY29uc3QgRUdMaW50KTsKKyNlbmRpZgogCiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFBsYXRm
b3JtU2hhcmVkUmVzb3VyY2VzPiBtX3NoYXJlZFJlc291cmNlczsKKyAgICBYVmlzdWFsSW5mbyog
bV9jb25maWdWaXN1YWxJbmZvOwogfTsKIAogfQpkaWZmIC0tZ2l0IFNvdXJjZS9jbWFrZS9PcHRp
b25zRWZsLmNtYWtlIFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlCmluZGV4IDgwMGE3MDku
LmZlMjAyZWYgMTAwNjQ0Ci0tLSBTb3VyY2UvY21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgU291
cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UKQEAgLTE3NSwxMiArMTc1LDI1IEBAIGlmIChFTkFC
TEVfV0VCR0wgT1IgV1RGX1VTRV9USUxFRF9CQUNLSU5HX1NUT1JFKQogCiAgICAgaWYgKE9QRU5H
TFhfRk9VTkQpCiAgICAgICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfR0xYKQotICAgICAgICBh
ZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0dMWD0xKQorICAgIGVuZGlmICgpCisKKyAgICBvcHRp
b24oRU5BQkxFX0VHTCBPTikKIAotICAgICAgICBpZiAoWDExX1hjb21wb3NpdGVfRk9VTkQgQU5E
IFgxMV9YcmVuZGVyX0ZPVU5EKQotICAgICAgICAgICBzZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0Ug
MSkKLSAgICAgICAgZW5kaWYgKCkKKyAgICBpZiAoRU5BQkxFX0VHTCkKKyAgICAgICAgZmluZF9w
YWNrYWdlKEVHTCBSRVFVSVJFRCkKICAgICBlbmRpZiAoKQorCisgICAgaWYgKEVHTF9GT1VORCkK
KyAgICAgICAgc2V0KFdURl9VU0VfRUdMIDEpCisgICAgICAgIGFkZF9kZWZpbml0aW9ucygtRFdU
Rl9VU0VfRUdMPTEpCisgICAgIGVsc2VpZiAoT1BFTkdMWF9GT1VORCkKKyAgICAgICAgIHNldChX
VEZfVVNFX0dMWCAxKQorICAgICAgICAgYWRkX2RlZmluaXRpb25zKC1EV1RGX1VTRV9HTFg9MSkK
KyAgICBlbmRpZiAoKQorCisgICAgIGlmICgoT1BFTkdMWF9GT1VORCBPUiBFR0xfRk9VTkQpIEFO
RCBYMTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQgWDExX1hyZW5kZXJfRk9VTkQpCisgICAgICAgICBz
ZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkKKyAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKIGlm
IChFTkFCTEVfSU5TUEVDVE9SKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180814</attachid>
            <date>2012-12-27 12:36:38 -0800</date>
            <delta_ts>2012-12-27 13:17:12 -0800</delta_ts>
            <desc>patch</desc>
            <filename>commitPatch.patch</filename>
            <type>text/plain</type>
            <size>47075</size>
            <attacher name="Kalyan">kalyan.kondapally</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBDaGFuZ2VMb2cgQ2hhbmdlTG9nCmluZGV4IGZiYWY0ZGMuLmY4NDU2YTIgMTAw
NjQ0Ci0tLSBDaGFuZ2VMb2cKKysrIENoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEy
LTIxICBLb25kYXBhbGx5IEthbHlhbiAgPGthbHlhbi5rb25kYXBhbGx5QGludGVsLmNvbT4KKwor
ICAgICAgICBbRUZMXVtXZWJHTF0gSW1wbGVtZW50IEVHTCBzdXBwb3J0IHdpdGggR0xYLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1NjAyCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAg
QWRkcyBzdXBwb3J0IGZvciBFR0wgd2l0aCBHTFggYmFja2VuZC4gRUdMIHN1cHBvcnQgY2FuIGJl
IGVuYWJsZWQgZHVyaW5nIGNvbXBpbGUgdGltZQorICAgICAgICBieSBwYXNzaW5nIC1ERU5BQkxF
X0VHTD1PTiBhcyBjbWFrZSBjb25maWcgcGFyYW1ldGVyLgorCisgICAgICAgICogU291cmNlL2Nt
YWtlL09wdGlvbnNFZmwuY21ha2U6CisKIDIwMTItMTItMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIxMzgzMzguCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCAxYTA0MDRmLi5iNDBjZWUwIDEwMDY0NAotLS0gU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3
OSBAQAorMjAxMi0xMi0yMSAgS29uZGFwYWxseSBLYWx5YW4gIDxrYWx5YW4ua29uZGFwYWxseUBp
bnRlbC5jb20+CisKKyAgICAgICAgW0VGTF1bV2ViR0xdIEltcGxlbWVudCBFR0wgc3VwcG9ydCB3
aXRoIEdMWC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNTYwMgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgorCisgICAgICAgIFRoaXMgaXMgaW4gcHJlcGFyYXRpb24gZm9yIGFkZGluZyBHTEVTMiBzdXBw
b3J0LgorICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgRUdMIHdpdGggR0xYIGJh
Y2tlbmQuIEVHTCBzdXBwb3J0IGNhbiBiZSBlbmFibGVkIGR1cmluZyBjb21waWxlIHRpbWUKKyAg
ICAgICAgYnkgcGFzc2luZyAtREVOQUJMRV9FR0w9T04gYXMgY21ha2UgY29uZmlnIHBhcmFtZXRl
ci4gVGhpcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LgorCisgICAgICAgICogUGxhdGZvcm1FZmwu
Y21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxh
dGZvcm1Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQpOiBBZGRlZCBHTFggY2hlY2tzLgorICAg
ICAgICAoV2ViQ29yZTo6R0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQp
OiBBZGRlZCBzdXBwb3J0IGZvciBjcmVhdGluZyBFR0xPZmZzY3JlZW4gQ29udGV4dC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1Db250ZXh0OjpjcmVhdGVDdXJyZW50Q29udGV4dFdyYXBw
ZXIpOiBBZGRlZCBzdXBwb3J0IGZvciBjcmVhdGluZyBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdMUGxhdGZvcm1TdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRT
dXJmYWNlKTogQWRkZWQgc3VwcG9ydCBmb3IgY3JlYXRpbmcgRUdMU3VyZmFjZS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUm9idXN0bmVzc0V4dFN1
cHBvcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OkVH
TEN1cnJlbnRDb250ZXh0V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDdXJyZW50Q29u
dGV4dFdyYXBwZXI6OmhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZTY3JlZW5Db250
ZXh0OjpFR0xPZmZTY3JlZW5Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkVHTE9mZlNjcmVl
bkNvbnRleHQ6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2NyZWVuQ29u
dGV4dDo6fkVHTE9mZlNjcmVlbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMT2ZmU2Ny
ZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xPZmZT
Y3JlZW5Db250ZXh0OjpwbGF0Zm9ybU1ha2VDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtUmVsZWFzZUN1cnJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RUdMT2ZmU2NyZWVuQ29udGV4dDo6ZnJlZVJlc291cmNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpFR0xPZmZTY3JlZW5Db250ZXh0OjpkZXN0cm95KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6RUdM
Q3VycmVudENvbnRleHRXcmFwcGVyOjp+RUdMQ3VycmVudENvbnRleHRXcmFwcGVyKToKKyAgICAg
ICAgKEVHTE9mZlNjcmVlbkNvbnRleHQpOgorCisgICAgICAgIEVHTCBpbXBsZW1lbnRhdGlvbiBm
b3IgQ29udGV4dCBNYW5hZ2VtZW50LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTFN1cmZhY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6RUdMV2luZG93VHJhbnNw
b3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNl
Ojp+RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpFR0xXaW5k
b3dUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OnN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6
RUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZTo6ZnJlZUVHTFJlc291cmNlcyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoRUdMV2luZG93VHJhbnNwb3J0U3VyZmFjZSk6CisKKyAgICAgICAg
RUdMIGltcGxlbWVudGF0aW9uIGZvciBPZmZzY3JlZW4gU3VyZmFjZS4gVGhlIHN1cmZhY2UgaXMg
YmFja2VkIGJ5IG5hdGl2ZSB3aW5kb3cuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9lZ2wvRUdMQ29uZmlnSGVscGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEVHTERpc3BsYXk6OmRlcmVmKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEVHTERpc3BsYXk6OnNoYXJlZEVHTERpc3BsYXkpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkRUdMRGlzcGxheTo6U2hhcmVkRUdMRGlzcGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFyZWRFR0xEaXNwbGF5OjpjbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEVHTERpc3BsYXk6On5TaGFyZWRFR0xEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVH
TENvbmZpZ0hlbHBlcjo6RUdMQ29uZmlnSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENv
bmZpZ0hlbHBlcjo6fkVHTENvbmZpZ0hlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25m
aWdIZWxwZXI6OmRpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpw
QnVmZmVyQ29udGV4dENvbmZpZyk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6
OnN1cmZhY2VDb250ZXh0Q29uZmlnKToKKyAgICAgICAgKFdlYkNvcmU6OkVHTENvbmZpZ0hlbHBl
cjo6bmF0aXZlVmlzdWFsSWQpOgorICAgICAgICAoV2ViQ29yZTo6RUdMQ29uZmlnSGVscGVyOjpy
ZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpFR0xDb25maWdIZWxwZXI6OmNyZWF0ZUNvbmZpZyk6
CisKKyAgICAgICAgSGVscGVyIGNsYXNzIHRvIGluaXRpYWxpemUgRUdMIHJlc291cmNlcyBhbmQg
Y2hvb3NlIHJpZ2h0IEVHTCBjb25maWd1cmF0aW9uLgorCiAyMDEyLTEyLTIxICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgbG9jYWxpemFibGUgc3Ry
aW5ncyBhcyBhIGZvbGxvd3VwIHRvIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzEz
ODM4NwpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDU2ZTMwNmMuLmU3ZTQ2OWMgMTAwNjQ0Ci0t
LSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQorKysgU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTI2NSw2ICsyNjUsMTQgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJ
Q1MpCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9n
bHgiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAiCiAg
ICAgKQorCisgICAgaWYgKFdURl9VU0VfRUdMKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgICAgICR7RUdMX0lOQ0xVREVfRElSfQorICAg
ICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbCIK
KyAgICApCisgICAgZW5kaWYgKCkKKwogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVuR0xTaGltcy5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2luZ0J1ZmZlckNhaXJvLmNwcApAQCAtMjc3LDE4ICsyODUs
MzYgQEAgaWYgKFdURl9VU0VfM0RfR1JBUEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuY3BwCi0gICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYQ29udGV4dC5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dyYXBoaWNzU3VyZmFjZUdMWC5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cAogICAgICkKKworICAgIGlmIChXVEZfVVNFX0VHTCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wv
RUdMU3VyZmFjZS5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2Vn
bC9FR0xDb250ZXh0LmNwcAorICAgICAgICApCisgICAgZW5kaWYgKCkKKworICAgIGlmIChXVEZf
VVNFX0dMWCkKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhDb250ZXh0LmNwcAorICAgICAg
ICApCisgICAgZW5kaWYgKCkKKwogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiAg
ICAgICAgICR7WDExX1gxMV9MSUJ9CiAgICAgICAgICR7WDExX1hjb21wb3NpdGVfTElCfQogICAg
ICAgICAke1gxMV9YcmVuZGVyX0xJQn0KICAgICApCisgICAgaWYgKFdURl9VU0VfRUdMKQorICAg
ICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAgICAgJHtFR0xfTElC
UkFSWX0KKyAgICAgICAgKQorICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCiBhZGRfZGVmaW5pdGlv
bnMoLUREQVRBX0RJUj0iJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vJHtEQVRBX0lOU1RBTExfRElS
fSIpCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dM
RGVmcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTERlZnMuaApp
bmRleCAyZGZiNGM5Li5mODIzZGM0IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMRGVmcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR0xEZWZzLmgKQEAgLTI4LDEyICsyOCwxMiBAQAogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLQogI2lmIFVT
RShPUEVOR0xfRVNfMikKKyNpbmNsdWRlICJPcGVuR0xFU1NoaW1zLmgiCiAjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAjZWxzZQorI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCiAjaW5jbHVkZSA8R0wvZ2wuaD4KICNpbmNsdWRlIDxHTC9nbGV4dC5oPgog
I2VuZGlmCkBAIC00Miw2ICs0MiwxMiBAQAogI2luY2x1ZGUgPEdML2dseC5oPgogI2VuZGlmCiAK
KyNpZiBVU0UoRUdMKQorI2RlZmluZSBFR0xfRUdMRVhUX1BST1RPVFlQRVMgMQorI2luY2x1ZGUg
PEVHTC9lZ2wuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB0eXBlZGVmIHVpbnQzMl90IFBsYXRmb3JtQnVmZmVySGFuZGxlOwpAQCAt
NTEsNiArNTcsMTYgQEAgdHlwZWRlZiBHTFhDb250ZXh0IFBsYXRmb3JtQ29udGV4dDsKIHR5cGVk
ZWYgRGlzcGxheSogUGxhdGZvcm1EaXNwbGF5OwogdHlwZWRlZiBHTFhGQkNvbmZpZyBQbGF0Zm9y
bVN1cmZhY2VDb25maWc7CiB0eXBlZGVmIEdMWERyYXdhYmxlIFBsYXRmb3JtRHJhd2FibGU7Cisj
ZWxpZiBVU0UoRUdMKQorI2lmIFVTRShPUEVOR0xfRVNfMikKK3N0YXRpYyBjb25zdCBFR0xlbnVt
IGVnbEFQSVZlcnNpb24gPSBFR0xfT1BFTkdMX0VTX0FQSTsKKyNlbHNlCitzdGF0aWMgY29uc3Qg
RUdMZW51bSBlZ2xBUElWZXJzaW9uID0gRUdMX09QRU5HTF9BUEk7CisjZW5kaWYKK3R5cGVkZWYg
RUdMQ29udGV4dCBQbGF0Zm9ybUNvbnRleHQ7Cit0eXBlZGVmIEVHTERpc3BsYXkgUGxhdGZvcm1E
aXNwbGF5OwordHlwZWRlZiBFR0xDb25maWcgUGxhdGZvcm1TdXJmYWNlQ29uZmlnOwordHlwZWRl
ZiBFR0xTdXJmYWNlIFBsYXRmb3JtRHJhd2FibGU7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0
Zm9ybUNvbnRleHQ7CiB0eXBlZGVmIHZvaWQqIFBsYXRmb3JtRGlzcGxheTsKZGlmZiAtLWdpdCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQu
Y3BwIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29u
dGV4dC5jcHAKaW5kZXggNzYyMWUyZS4uNzk5NTliYSAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtQ29udGV4dC5jcHAK
QEAgLTMwLDYgKzMwLDggQEAKIAogI2lmIFVTRShHTFgpCiAjaW5jbHVkZSAiR0xYQ29udGV4dC5o
IgorI2VsaWYgVVNFKEVHTCkKKyNpbmNsdWRlICJFR0xDb250ZXh0LmgiCiAjZW5kaWYKIAogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCkBAIC00NCwxMSArNDYsMTEgQEAgUGFzc093blB0cjxH
TFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUNvbnRleHQoR3JhcGhp
Y3NDb250ZXh0M0QKICAgICBpZiAoIWluaXRpYWxpemVPcGVuR0xTaGltcygpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGlmICghZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKSB7
CiAjaWYgVVNFKEdMWCkKKyAgICBpZiAoIWdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQikgewog
ICAgICAgICBnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIgPSByZWludGVycHJldF9jYXN0PFBG
TkdMR0VUR1JBUEhJQ1NSRVNFVFNUQVRVU0FSQlBST0M+KGdsWEdldFByb2NBZGRyZXNzQVJCKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KCJnbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNB
UkIiKSkpOwotI2VuZGlmCiAgICAgfQorI2VuZGlmCiAKICAgICBzd2l0Y2ggKHJlbmRlclN0eWxl
KSB7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuOgpAQCAtNzAs
OCArNzIsOSBAQCBQYXNzT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBHTFBsYXRmb3JtQ29udGV4
dDo6Y3JlYXRlQ29udGV4dChHcmFwaGljc0NvbnRleHQzRAogUGFzc093blB0cjxHTFBsYXRmb3Jt
Q29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogewog
I2lmIFVTRShHTFgpCi0gICAgT3duUHRyPEdMUGxhdGZvcm1Db250ZXh0PiBnbHhDb250ZXh0ID0g
YWRvcHRQdHIobmV3IEdMWE9mZlNjcmVlbkNvbnRleHQoKSk7Ci0gICAgcmV0dXJuIGdseENvbnRl
eHQucmVsZWFzZSgpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgR0xYT2ZmU2NyZWVuQ29udGV4
dCgpKTsKKyNlbGlmIFVTRShFR0wpCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFR0xPZmZTY3Jl
ZW5Db250ZXh0KCkpOwogI2VuZGlmCiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTgwLDggKzgz
LDkgQEAgUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQbGF0Zm9ybUNvbnRleHQ6OmNy
ZWF0ZU9mZlNjcmVlbkNvbnRleHQoKQogUGFzc093blB0cjxHTFBsYXRmb3JtQ29udGV4dD4gR0xQ
bGF0Zm9ybUNvbnRleHQ6OmNyZWF0ZUN1cnJlbnRDb250ZXh0V3JhcHBlcigpCiB7CiAjaWYgVVNF
KEdMWCkKLSAgICBPd25QdHI8R0xQbGF0Zm9ybUNvbnRleHQ+IGdseENvbnRleHQgPSBhZG9wdFB0
cihuZXcgR0xYQ3VycmVudENvbnRleHRXcmFwcGVyKCkpOwotICAgIHJldHVybiBnbHhDb250ZXh0
LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEdMWEN1cnJlbnRDb250ZXh0V3Jh
cHBlcigpKTsKKyNlbGlmIFVTRShFR0wpCisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFR0xDdXJy
ZW50Q29udGV4dFdyYXBwZXIoKSk7CiAjZW5kaWYKIAogICAgIHJldHVybiBudWxscHRyOwpkaWZm
IC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3Jt
Q29udGV4dC5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRm
b3JtQ29udGV4dC5oCmluZGV4IDE3MGI3NmUuLjAzNTNkZjggMTAwNjQ0Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybUNvbnRleHQuaAorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1Db250ZXh0LmgK
QEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIC8vIERvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0
IGlmIHRoaXMgaXMgbm90IHRoZSBjdXJyZW50IENvbnRleHQuCiAgICAgdm9pZCByZWxlYXNlQ3Vy
cmVudCgpOwogCi0gICAgUGxhdGZvcm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgUGxhdGZvcm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlz
Q3VycmVudENvbnRleHQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HTFBsYXRmb3JtU3VyZmFjZS5jcHAgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAppbmRleCA4Mzkx
ZTQ3Li43ZjdhNTY0IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dMUGxhdGZvcm1TdXJmYWNlLmNwcApAQCAtMzIsNiArMzIsMTAgQEAK
ICNpbmNsdWRlICJHTFhTdXJmYWNlLmgiCiAjZW5kaWYKIAorI2lmIFVTRShFR0wpCisjaW5jbHVk
ZSAiRUdMU3VyZmFjZS5oIgorI2VuZGlmCisKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCwxMCArNTQsMTQgQEAgUGFzc093blB0cjxHTFBs
YXRmb3JtU3VyZmFjZT4gR0xQbGF0Zm9ybVN1cmZhY2U6OmNyZWF0ZU9mZnNjcmVlblN1cmZhY2Uo
KQogCiBQYXNzT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNlPiBHTFBsYXRmb3JtU3VyZmFjZTo6Y3Jl
YXRlVHJhbnNwb3J0U3VyZmFjZSgpCiB7Ci0jaWYgVVNFKEdMWCkgJiYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisjaWYgVVNFKEdMWCkKICAgICBPd25Q
dHI8R0xQbGF0Zm9ybVN1cmZhY2U+IHN1cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0
U3VyZmFjZSgpKTsKKyNlbGlmIFVTRShFR0wpCisgICAgT3duUHRyPEdMUGxhdGZvcm1TdXJmYWNl
PiBzdXJmYWNlID0gYWRvcHRQdHIobmV3IEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2UoKSk7Cisj
ZW5kaWYKIAotICAgIGlmIChzdXJmYWNlLT5oYW5kbGUoKSkKKyAgICBpZiAoc3VyZmFjZSAmJiBz
dXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQogICAgICAgICByZXR1cm4g
c3VyZmFjZS5yZWxlYXNlKCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuY3BwIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOGViYWEKLS0tIC9kZXYvbnVs
bAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENv
bmZpZ0hlbHBlci5jcHAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFR0xDb25maWdIZWxwZXIuaCIKKworI2lmIFVT
RShFR0wpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2hhcmVkRUdMRGlzcGxheSogU2hhcmVk
RUdMRGlzcGxheTo6bV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5ID0gMDsKKworc3RhdGljIEVHTGlu
dCBjb25maWdBdHRyaWJ1dGVMaXN0W10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVH
TF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKKyNlbHNlCisgICAgRUdMX1JF
TkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9CSVQsCisjZW5kaWYKKyAgICBFR0xfUkVEX1NJWkUs
IDgsCisgICAgRUdMX0dSRUVOX1NJWkUsIDgsCisgICAgRUdMX0JMVUVfU0laRSwgOCwKKyAgICBF
R0xfU1RFTkNJTF9TSVpFLCA4LAorICAgIEVHTF9BTFBIQV9TSVpFLCA4LAorICAgIEVHTF9TVVJG
QUNFX1RZUEUsIEVHTF9OT05FLAorICAgIEVHTF9OT05FCit9OworCit2b2lkIFNoYXJlZEVHTERp
c3BsYXk6OmRlcmVmKCkKK3sKKyAgICBpZiAoZGVyZWZCYXNlKCkpIHsKKyAgICAgICAgbV9zdGF0
aWNTaGFyZWRFR0xEaXNwbGF5ID0gMDsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorfQor
CitFR0xEaXNwbGF5IFNoYXJlZEVHTERpc3BsYXk6OnNoYXJlZEVHTERpc3BsYXkoKQoreworICAg
IHJldHVybiBtX2VnbERpc3BsYXk7Cit9CisKK1NoYXJlZEVHTERpc3BsYXk6OlNoYXJlZEVHTERp
c3BsYXkoTmF0aXZlU2hhcmVkRGlzcGxheSogZGlzcGxheSkKKyAgICA6IG1fZWdsRGlzcGxheShF
R0xfTk9fRElTUExBWSkKK3sKKyAgICBpZiAoZGlzcGxheSkKKyAgICAgICAgbV9lZ2xEaXNwbGF5
ID0gZWdsR2V0RGlzcGxheShyZWludGVycHJldF9jYXN0PEVHTE5hdGl2ZURpc3BsYXlUeXBlPihk
aXNwbGF5KSk7CisgICAgZWxzZQorICAgICAgICBtX2VnbERpc3BsYXkgPSBlZ2xHZXREaXNwbGF5
KEVHTF9ERUZBVUxUX0RJU1BMQVkpOworCisgICAgaWYgKG1fZWdsRGlzcGxheSA9PSBFR0xfTk9f
RElTUExBWSkgeworICAgICAgICBMT0dfRVJST1IoIkVHTERpc3BsYXkgSW5pdGlhbGl6YXRpb24g
ZmFpbGVkLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRUdMQm9vbGVhbiBzdWNj
ZXNzOworICAgIHN1Y2Nlc3MgPSBlZ2xJbml0aWFsaXplKG1fZWdsRGlzcGxheSwgMCwgMCk7CisK
KyAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1IoIkVHTElu
aXRpYWxpemF0aW9uIGZhaWxlZC4iKTsKKyAgICAgICAgbV9lZ2xEaXNwbGF5ID0gRUdMX05PX0RJ
U1BMQVk7CisgICAgfQorCisgICAgc3VjY2VzcyA9IGVnbEJpbmRBUEkoZWdsQVBJVmVyc2lvbik7
CisKKyAgICBpZiAoc3VjY2VzcyAhPSBFR0xfVFJVRSkgeworICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIG1fZWds
RGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOworICAgIH0KK30KKwordm9pZCBTaGFyZWRFR0xEaXNw
bGF5OjpjbGVhbnVwKCkKK3sKKyAgICBpZiAobV9lZ2xEaXNwbGF5ID09IEVHTF9OT19ESVNQTEFZ
KQorICAgICAgICByZXR1cm47CisKKyAgICBlZ2xNYWtlQ3VycmVudChtX2VnbERpc3BsYXksIEVH
TF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRFWFQpOworICAgIGVnbFRl
cm1pbmF0ZShtX2VnbERpc3BsYXkpOworICAgIG1fZWdsRGlzcGxheSA9IEVHTF9OT19ESVNQTEFZ
OworfQorCitTaGFyZWRFR0xEaXNwbGF5Ojp+U2hhcmVkRUdMRGlzcGxheSgpCit7CisgICAgY2xl
YW51cCgpOworfQorCitFR0xDb25maWdIZWxwZXI6OkVHTENvbmZpZ0hlbHBlcihOYXRpdmVTaGFy
ZWREaXNwbGF5KiBkaXNwbGF5KQorICAgIDogbV9wYnVmZmVyRkJDb25maWcoMCkKKyAgICAsIG1f
c3VyZmFjZUNvbnRleHRGQkNvbmZpZygwKQoreworICAgIG1fc2hhcmVkRGlzcGxheSA9IFNoYXJl
ZEVHTERpc3BsYXk6OmNyZWF0ZShkaXNwbGF5KTsKK30KKworRUdMQ29uZmlnSGVscGVyOjp+RUdM
Q29uZmlnSGVscGVyKCkKK3sKK30KKworUGxhdGZvcm1EaXNwbGF5IEVHTENvbmZpZ0hlbHBlcjo6
ZGlzcGxheSgpCit7CisgICAgcmV0dXJuIG1fc2hhcmVkRGlzcGxheS0+c2hhcmVkRUdMRGlzcGxh
eSgpOworfQorCitFR0xDb25maWcgRUdMQ29uZmlnSGVscGVyOjpwQnVmZmVyQ29udGV4dENvbmZp
ZygpCit7CisgICAgaWYgKCFtX3BidWZmZXJGQkNvbmZpZykgeworICAgICAgICBjb25maWdBdHRy
aWJ1dGVMaXN0WzEzXSA9IEVHTF9QSVhNQVBfQklUOworICAgICAgICBtX3BidWZmZXJGQkNvbmZp
ZyA9IGNyZWF0ZUNvbmZpZyhjb25maWdBdHRyaWJ1dGVMaXN0KTsKKyAgICB9CisKKyAgICByZXR1
cm4gbV9wYnVmZmVyRkJDb25maWc7Cit9CisKK0VHTENvbmZpZyBFR0xDb25maWdIZWxwZXI6OnN1
cmZhY2VDb250ZXh0Q29uZmlnKCkKK3sKKyAgICBpZiAoIW1fc3VyZmFjZUNvbnRleHRGQkNvbmZp
ZykgeworICAgICAgICBjb25maWdBdHRyaWJ1dGVMaXN0WzEzXSA9IEVHTF9XSU5ET1dfQklUOwor
ICAgICAgICBtX3N1cmZhY2VDb250ZXh0RkJDb25maWcgPSBjcmVhdGVDb25maWcoY29uZmlnQXR0
cmlidXRlTGlzdCk7CisgICAgfQorCisgICAgcmV0dXJuIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZp
ZzsKK30KKworRUdMaW50IEVHTENvbmZpZ0hlbHBlcjo6bmF0aXZlVmlzdWFsSWQoY29uc3QgRUdM
Q29uZmlnJiBjb25maWcpCit7CisgICAgaWYgKGRpc3BsYXkoKSA9PSBFR0xfTk9fRElTUExBWSkK
KyAgICAgICAgcmV0dXJuIC0xOworCisgICAgRUdMaW50IGVnbFZhbHVlID0gMDsKKyAgICBlZ2xH
ZXRDb25maWdBdHRyaWIoZGlzcGxheSgpLCBjb25maWcsIEVHTF9OQVRJVkVfVklTVUFMX0lELCAm
ZWdsVmFsdWUpOworCisgICAgcmV0dXJuIGVnbFZhbHVlOworfQorCit2b2lkIEVHTENvbmZpZ0hl
bHBlcjo6cmVzZXQoKQoreworICAgIG1fc3VyZmFjZUNvbnRleHRGQkNvbmZpZyA9IDA7CisgICAg
bV9wYnVmZmVyRkJDb25maWcgPSAwOworfQorCitFR0xDb25maWcgRUdMQ29uZmlnSGVscGVyOjpj
cmVhdGVDb25maWcoY29uc3QgaW50IGF0dHJpYnV0ZXNbXSkKK3sKKyAgICBpZiAoZGlzcGxheSgp
ID09IEVHTF9OT19ESVNQTEFZKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGludCBudW1Db25m
aWdzOworICAgIEVHTENvbmZpZyBjb25maWcgPSAwOworCisgICAgaWYgKCFlZ2xDaG9vc2VDb25m
aWcoZGlzcGxheSgpLCBhdHRyaWJ1dGVzLCAmY29uZmlnLCAxLCAmbnVtQ29uZmlncykpCisgICAg
ICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldCBzdXBwb3J0ZWQgY29uZmlnaXJhdGlvbnMuIik7
CisKKyAgICBpZiAobnVtQ29uZmlncyAhPSAxKSB7CisgICAgICAgIExPR19FUlJPUigiRUdMQ2hv
b3NlQ29uZmlnIGRpZG4ndCByZXR1cm4gZXhhY3RseSBvbmUgY29uZmlnIGJ1dCAoJWQpLiIsIG51
bUNvbmZpZ3MpOworICAgICAgICBjb25maWcgPSAwOworICAgIH0KKworICAgIHJldHVybiBjb25m
aWc7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTENvbmZpZ0hlbHBlci5oIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTg3MDExCi0tLSAvZGV2L251bGwKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb25maWdIZWxwZXIu
aApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEVHTENvbmZp
Z0hlbHBlcl9oCisjZGVmaW5lIEVHTENvbmZpZ0hlbHBlcl9oCisKKyNpZiBVU0UoRUdMKQorCisj
aW5jbHVkZSA8b3BlbmdsL0dMRGVmcy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRl
ZiBEaXNwbGF5IE5hdGl2ZVNoYXJlZERpc3BsYXk7CisKK2NsYXNzIFNoYXJlZEVHTERpc3BsYXkg
OiBwdWJsaWMgV1RGOjpSZWZDb3VudGVkQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2hhcmVkRUdMRGlzcGxheSk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFy
ZWRFR0xEaXNwbGF5PiBjcmVhdGUoTmF0aXZlU2hhcmVkRGlzcGxheSogZGlzcGxheSkKKyAgICB7
CisgICAgICAgIGlmICghbV9zdGF0aWNTaGFyZWRFR0xEaXNwbGF5KQorICAgICAgICAgICAgbV9z
dGF0aWNTaGFyZWRFR0xEaXNwbGF5ID0gbmV3IFNoYXJlZEVHTERpc3BsYXkoZGlzcGxheSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheS0+cmVmKCk7
CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG1fc3RhdGljU2hhcmVkRUdMRGlzcGxheSk7Cisg
ICAgfQorCisgICAgdm9pZCBkZXJlZigpOworICAgIEVHTERpc3BsYXkgc2hhcmVkRUdMRGlzcGxh
eSgpOworCitwcm90ZWN0ZWQ6CisgICAgU2hhcmVkRUdMRGlzcGxheShOYXRpdmVTaGFyZWREaXNw
bGF5Kik7CisgICAgdm9pZCBjbGVhbnVwKCk7CisgICAgdmlydHVhbCB+U2hhcmVkRUdMRGlzcGxh
eSgpOworCisgICAgc3RhdGljIFNoYXJlZEVHTERpc3BsYXkqIG1fc3RhdGljU2hhcmVkRUdMRGlz
cGxheTsKKyAgICBFR0xEaXNwbGF5IG1fZWdsRGlzcGxheTsKK307CisKK2NsYXNzIEVHTENvbmZp
Z0hlbHBlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRUdMQ29uZmlnSGVscGVyKTsKKwor
cHVibGljOgorICAgIEVHTENvbmZpZ0hlbHBlcihOYXRpdmVTaGFyZWREaXNwbGF5KiA9IDApOwor
ICAgIHZpcnR1YWwgfkVHTENvbmZpZ0hlbHBlcigpOworICAgIFBsYXRmb3JtRGlzcGxheSBkaXNw
bGF5KCk7CisgICAgdmlydHVhbCBFR0xDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKTsKKyAg
ICB2aXJ0dWFsIEVHTENvbmZpZyBzdXJmYWNlQ29udGV4dENvbmZpZygpOworICAgIEVHTGludCBu
YXRpdmVWaXN1YWxJZChjb25zdCBFR0xDb25maWcmKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKK3By
aXZhdGU6CisgICAgRUdMQ29uZmlnIGNyZWF0ZUNvbmZpZyhjb25zdCBpbnQgYXR0cmlidXRlc1td
KTsKKworcHJvdGVjdGVkOgorICAgIEVHTENvbmZpZyBtX3BidWZmZXJGQkNvbmZpZzsKKyAgICBF
R0xDb25maWcgbV9zdXJmYWNlQ29udGV4dEZCQ29uZmlnOworICAgIFJlZlB0cjxTaGFyZWRFR0xE
aXNwbGF5PiBtX3NoYXJlZERpc3BsYXk7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlm
ZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdM
Q29udGV4dC5jcHAgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWds
L0VHTENvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlM2I5
OWEKLS0tIC9kZXYvbnVsbAorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWdsL0VHTENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUdMQ29udGV4dC5oIgorCisj
aWYgVVNFKEVHTCkKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgSEFW
RShHTFgpCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgY29uc3QgRUdMaW50IGNvbnRleHRBdHRyaWJ1dGVzW10gPSB7CisjaWYgVVNF
KE9QRU5HTF9FU18yKQorICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLAorI2VuZGlm
CisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBjb25zdCBFR0xpbnQgY29udGV4dFJvYnVzdG5l
c3NBdHRyaWJ1dGVzW10gPSB7CisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEVHTF9DT05URVhU
X0NMSUVOVF9WRVJTSU9OLCAyLAorI2VuZGlmCisgICAgRUdMX0NPTlRFWFRfT1BFTkdMX1JFU0VU
X05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQsCisgICAgRUdMX0xPU0VfQ09OVEVYVF9PTl9SRVNF
VF9FWFQsCisgICAgRUdMX05PTkUKK307CisKK3N0YXRpYyBib29sIGlzUm9idXN0bmVzc0V4dFN1
cHBvcnRlZChFR0xEaXNwbGF5IGRpc3BsYXkpCit7CisgICAgc3RhdGljIGJvb2wgZGlkUXVlcnlG
b3JSb2J1c3RuZXNzRXh0ZW5zaW9uID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgaXNSb2J1c3Ru
ZXNzRXh0ZW5zaW9uU3VwcG9ydGVkID0gZmFsc2U7CisKKyAgICBpZiAoIWRpZFF1ZXJ5Rm9yUm9i
dXN0bmVzc0V4dGVuc2lvbikgeworICAgICAgICBkaWRRdWVyeUZvclJvYnVzdG5lc3NFeHRlbnNp
b24gPSB0cnVlOworICAgICAgICBTdHJpbmcgc3VwcG9ydGVkRXh0ZW5zaW9ucyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGVnbFF1ZXJ5U3RyaW5nKGRpc3BsYXksIEVHTF9FWFRFTlNJ
T05TKSk7CisKKyAgICAgICAgaWYgKCFzdXBwb3J0ZWRFeHRlbnNpb25zLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgc3VwcG9ydGVkRXh0ZW5zaW9ucy5hcHBlbmQoIiAiKTsKKyAgICAgICAgICAg
IGlzUm9idXN0bmVzc0V4dGVuc2lvblN1cHBvcnRlZCA9IHN1cHBvcnRlZEV4dGVuc2lvbnMuY29u
dGFpbnMoIkVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcyIpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGlzUm9idXN0bmVzc0V4dGVuc2lvblN1cHBvcnRlZDsKK30KKwor
RUdMQ3VycmVudENvbnRleHRXcmFwcGVyOjpFR0xDdXJyZW50Q29udGV4dFdyYXBwZXIoKQorICAg
IDogR0xQbGF0Zm9ybUNvbnRleHQoKQoreworfQorCisvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBv
cmFyeSB3b3JrYXJvdW5kIHVudGlsIHdlIGFyZSBhYmxlIHRvIGJ1aWxkIGV2YXMgd2l0aCBFR0wg
c3VwcG9ydC4KK1BsYXRmb3JtQ29udGV4dCBFR0xDdXJyZW50Q29udGV4dFdyYXBwZXI6OmhhbmRs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsWEdldEN1cnJlbnRDb250ZXh0KCk7Cit9CisKK0VH
TE9mZlNjcmVlbkNvbnRleHQ6OkVHTE9mZlNjcmVlbkNvbnRleHQoKQorICAgIDogR0xQbGF0Zm9y
bUNvbnRleHQoKQorICAgICwgbV9kaXNwbGF5KDApCit7Cit9CisKK2Jvb2wgRUdMT2ZmU2NyZWVu
Q29udGV4dDo6aW5pdGlhbGl6ZShHTFBsYXRmb3JtU3VyZmFjZSogc3VyZmFjZSkKK3sKKyAgICBp
ZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZWdsQmluZEFQ
SShlZ2xBUElWZXJzaW9uKSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdM
IEFQSSglZCkuIiwgZWdsR2V0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBtX2Rpc3BsYXkgPSBzdXJmYWNlLT5zaGFyZWREaXNwbGF5KCk7CisgICAgaWYgKCFt
X2Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVHTENvbmZpZyBjb25maWcg
PSBzdXJmYWNlLT5jb25maWd1cmF0aW9uKCk7CisgICAgaWYgKCFjb25maWcpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChpc1JvYnVzdG5lc3NFeHRTdXBwb3J0ZWQobV9kaXNwbGF5
KSkKKyAgICAgICAgbV9jb250ZXh0SGFuZGxlID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXks
IGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNvbnRleHRSb2J1c3RuZXNzQXR0cmlidXRlcyk7CisK
KyAgICBpZiAobV9jb250ZXh0SGFuZGxlICE9IEVHTF9OT19DT05URVhUKQorICAgICAgICBtX3Jl
c2V0TG9zdENvbnRleHQgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0SGFuZGxl
ID0gZWdsQ3JlYXRlQ29udGV4dChtX2Rpc3BsYXksIGNvbmZpZywgRUdMX05PX0NPTlRFWFQsIGNv
bnRleHRBdHRyaWJ1dGVzKTsKKworICAgIGlmIChtX2NvbnRleHRIYW5kbGUgIT0gRUdMX05PX0NP
TlRFWFQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitF
R0xPZmZTY3JlZW5Db250ZXh0Ojp+RUdMT2ZmU2NyZWVuQ29udGV4dCgpCit7Cit9CisKK2Jvb2wg
RUdMT2ZmU2NyZWVuQ29udGV4dDo6aXNDdXJyZW50Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fY29udGV4dEhhbmRsZSA9PSBlZ2xHZXRDdXJyZW50Q29udGV4dCgpOworfQorCitib29s
IEVHTE9mZlNjcmVlbkNvbnRleHQ6OnBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZh
Y2UqIHN1cmZhY2UpCit7CisgICAgaWYgKCFlZ2xNYWtlQ3VycmVudChtX2Rpc3BsYXksIHN1cmZh
Y2UtPmRyYXdhYmxlKCksIHN1cmZhY2UtPmRyYXdhYmxlKCksIG1fY29udGV4dEhhbmRsZSkpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gbWFrZSBjb250ZXh0IGN1cnJlbnQoJWQpLiIs
IGVnbEdldEVycm9yKCkpOworCisgICAgICAgIGlmIChtX3Jlc2V0TG9zdENvbnRleHQgJiYgZWds
R2V0RXJyb3IoKSA9PSBFR0xfQ09OVEVYVF9MT1NUKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
Ikxvc3QgY3VycmVudCBjb250ZXh0LiIpOworICAgICAgICAgICAgbV9jb250ZXh0TG9zdCA9IHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgRUdMT2ZmU2NyZWVuQ29udGV4dDo6cGxhdGZvcm1SZWxlYXNl
Q3VycmVudCgpCit7CisgICAgZWdsTWFrZUN1cnJlbnQobV9kaXNwbGF5LCBFR0xfTk9fU1VSRkFD
RSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKK30KKwordm9pZCBFR0xPZmZTY3Jl
ZW5Db250ZXh0OjpmcmVlUmVzb3VyY2VzKCkKK3sKKyAgICBpZiAobV9jb250ZXh0SGFuZGxlID09
IEVHTF9OT19DT05URVhUKQorICAgICAgICByZXR1cm47CisKKyAgICBlZ2xEZXN0cm95Q29udGV4
dChtX2Rpc3BsYXksIG1fY29udGV4dEhhbmRsZSk7CisgICAgbV9jb250ZXh0SGFuZGxlID0gRUdM
X05PX0NPTlRFWFQ7CisgICAgbV9kaXNwbGF5ID0gMDsKK30KKwordm9pZCBFR0xPZmZTY3JlZW5D
b250ZXh0OjpkZXN0cm95KCkKK3sKKyAgICBHTFBsYXRmb3JtQ29udGV4dDo6ZGVzdHJveSgpOwor
ICAgIGZyZWVSZXNvdXJjZXMoKTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4dC5oIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xDb250ZXh0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5NWExOAotLS0gL2Rldi9udWxsCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMQ29udGV4
dC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRUdMQ29u
dGV4dF9oCisjZGVmaW5lIEVHTENvbnRleHRfaAorCisjaWYgVVNFKEVHTCkKKworI2luY2x1ZGUg
IkdMUGxhdGZvcm1Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRUdM
Q3VycmVudENvbnRleHRXcmFwcGVyIDogcHVibGljIEdMUGxhdGZvcm1Db250ZXh0IHsKKworcHVi
bGljOgorICAgIEVHTEN1cnJlbnRDb250ZXh0V3JhcHBlcigpOworICAgIHZpcnR1YWwgUGxhdGZv
cm1Db250ZXh0IGhhbmRsZSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgfkVHTEN1cnJl
bnRDb250ZXh0V3JhcHBlcigpIHsgfQorfTsKKworY2xhc3MgRUdMT2ZmU2NyZWVuQ29udGV4dCA6
IHB1YmxpYyBHTFBsYXRmb3JtQ29udGV4dCB7CisKK3B1YmxpYzoKKyAgICBFR0xPZmZTY3JlZW5D
b250ZXh0KCk7CisgICAgdmlydHVhbCB+RUdMT2ZmU2NyZWVuQ29udGV4dCgpOworICAgIHZpcnR1
YWwgYm9vbCBpbml0aWFsaXplKEdMUGxhdGZvcm1TdXJmYWNlKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIHBsYXRmb3JtTWFrZUN1cnJlbnQoR0xQbGF0Zm9ybVN1cmZhY2UqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1SZWxlYXNlQ3VycmVudCgpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGlz
Q3VycmVudENvbnRleHQoKSBjb25zdCBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGZy
ZWVSZXNvdXJjZXMoKTsKKyAgICBFR0xEaXNwbGF5IG1fZGlzcGxheTsKK307CisKK30KKworI2Vu
ZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZmM5NDBkZQotLS0gL2Rldi9udWxsCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5jcHAKQEAgLTAsMCArMSwxNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJF
R0xTdXJmYWNlLmgiCisKKyNpZiBVU0UoRUdMKSAmJiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpFR0xXaW5k
b3dUcmFuc3BvcnRTdXJmYWNlKCkKKyAgICA6IEdMUGxhdGZvcm1TdXJmYWNlKCkKK3sKKyAgICBt
X25hdGl2ZVJlc291cmNlID0gYWRvcHRQdHIobmV3IE5hdGl2ZU9mZlNjcmVlbldpbmRvdygpKTsK
KyAgICBtX2VnbENvbmZpZ0hlbHBlciA9IGFkb3B0UHRyKG5ldyBFR0xDb25maWdIZWxwZXIobV9u
YXRpdmVSZXNvdXJjZS0+bmF0aXZlU2hhcmVkRGlzcGxheSgpKSk7CisgICAgbV9zaGFyZWREaXNw
bGF5ID0gbV9lZ2xDb25maWdIZWxwZXItPmRpc3BsYXkoKTsKKworICAgIGlmIChtX3NoYXJlZERp
c3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpIHsKKyAgICAgICAgbV9lZ2xDb25maWdIZWxwZXIgPSBu
dWxscHRyOworICAgICAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEVHTENvbmZpZyBjb25maWcgPSBtX2VnbENvbmZpZ0hlbHBlci0+
c3VyZmFjZUNvbnRleHRDb25maWcoKTsKKworICAgIGlmICghY29uZmlnKSB7CisgICAgICAgIGRl
c3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVHTGludCB2aXN1YWxJZCA9
IG1fZWdsQ29uZmlnSGVscGVyLT5uYXRpdmVWaXN1YWxJZChjb25maWcpOworCisgICAgaWYgKHZp
c3VhbElkID09IC0xKSB7CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9uYXRpdmVSZXNvdXJjZS0+c2V0VmlzdWFsSWQodmlzdWFsSWQpKSB7
CisgICAgICAgIGRlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fbmF0
aXZlUmVzb3VyY2UtPmNyZWF0ZU9mZnNjcmVlbldpbmRvdygmbV9idWZmZXJIYW5kbGUpOworCisg
ICAgaWYgKCFtX2J1ZmZlckhhbmRsZSkgeworICAgICAgICBkZXN0cm95KCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2RyYXdhYmxlID0gZWdsQ3JlYXRlV2luZG93U3VyZmFjZSht
X3NoYXJlZERpc3BsYXksIG1fZWdsQ29uZmlnSGVscGVyLT5zdXJmYWNlQ29udGV4dENvbmZpZygp
LCAoRUdMTmF0aXZlV2luZG93VHlwZSltX2J1ZmZlckhhbmRsZSwgMCk7CisKKyAgICBpZiAobV9k
cmF3YWJsZSA9PSBFR0xfTk9fU1VSRkFDRSkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0
byBjcmVhdGUgRUdMIHN1cmZhY2UoJWQpLiIsIGVnbEdldEVycm9yKCkpOworICAgICAgICBkZXN0
cm95KCk7CisgICAgfQorfQorCitFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjp+RUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZSgpCit7Cit9CisKK1BsYXRmb3JtU3VyZmFjZUNvbmZpZyBFR0xXaW5k
b3dUcmFuc3BvcnRTdXJmYWNlOjpjb25maWd1cmF0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9lZ2xD
b25maWdIZWxwZXItPnN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Cit9CisKK3ZvaWQgRUdMV2luZG93
VHJhbnNwb3J0U3VyZmFjZTo6c3dhcEJ1ZmZlcnMoKQoreworICAgIGlmICghbV9kcmF3YWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRUdMQm9vbGVhbiBzdWNjZXNzID0gZWdsQmluZEFQSShl
Z2xBUElWZXJzaW9uKTsKKworICAgIGlmIChzdWNjZXNzICE9IEVHTF9UUlVFKSB7CisgICAgICAg
IExPR19FUlJPUigiRmFpbGVkIHRvIHNldCBFR0wgQVBJKCVkKS4iLCBlZ2xHZXRFcnJvcigpKTsK
KyAgICAgICAgZGVzdHJveSgpOworICAgIH0KKworICAgIHN1Y2Nlc3MgPSBlZ2xTd2FwQnVmZmVy
cyhtX3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpOworCisgICAgaWYgKHN1Y2Nlc3MgIT0gRUdM
X1RSVUUpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gU3dhcEJ1ZmZlcnMoJWQpLiIs
IGVnbEdldEVycm9yKCkpOworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorfQorCit2b2lkIEVH
TFdpbmRvd1RyYW5zcG9ydFN1cmZhY2U6OmRlc3Ryb3koKQoreworICAgIG1fbmF0aXZlUmVzb3Vy
Y2UtPmRlc3Ryb3lXaW5kb3cobV9idWZmZXJIYW5kbGUpOworICAgIGZyZWVFR0xSZXNvdXJjZXMo
KTsKKyAgICBtX25hdGl2ZVJlc291cmNlID0gbnVsbHB0cjsKKyAgICBtX2VnbENvbmZpZ0hlbHBl
ciA9IG51bGxwdHI7CisgICAgbV9idWZmZXJIYW5kbGUgPSAwOworfQorCit2b2lkIEVHTFdpbmRv
d1RyYW5zcG9ydFN1cmZhY2U6OmZyZWVFR0xSZXNvdXJjZXMoKQoreworICAgIGlmIChtX2RyYXdh
YmxlID09IEVHTF9OT19TVVJGQUNFIHx8IG1fc2hhcmVkRGlzcGxheSA9PSBFR0xfTk9fRElTUExB
WSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRUdMQm9vbGVhbiBlZ2xSZXN1bHQgPSBlZ2xCaW5k
QVBJKGVnbEFQSVZlcnNpb24pOworCisgICAgaWYgKGVnbFJlc3VsdCAhPSBFR0xfVFJVRSkgewor
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgRUdMIEFQSSglZCkuIiwgZWdsR2V0RXJy
b3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlZ2xEZXN0cm95U3VyZmFjZSht
X3NoYXJlZERpc3BsYXksIG1fZHJhd2FibGUpOworICAgIG1fZHJhd2FibGUgPSBFR0xfTk9fU1VS
RkFDRTsKK30KKwordm9pZCBFR0xXaW5kb3dUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRyeShj
b25zdCBJbnRSZWN0JiBuZXdSZWN0KQoreworICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpzZXRHZW9t
ZXRyeShuZXdSZWN0KTsKKyAgICBtX25hdGl2ZVJlc291cmNlLT5yZVNpemVXaW5kb3cobmV3UmVj
dCwgbV9idWZmZXJIYW5kbGUpOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmggU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWdsL0VHTFN1cmZhY2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODg2M2RjCi0tLSAvZGV2L251bGwKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNl
LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBFR0xTdXJm
YWNlX2gKKyNkZWZpbmUgRUdMU3VyZmFjZV9oCisKKyNpZiBVU0UoRUdMKSAmJiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKKworI2luY2x1ZGUgIkVHTENvbmZpZ0hlbHBlci5oIgorI2luY2x1ZGUgIkdM
UGxhdGZvcm1TdXJmYWNlLmgiCisKKyNpbmNsdWRlIDxnbHgvWDExV2luZG93UmVzb3VyY2VzLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIFgxMU9mZlNjcmVlbldpbmRvdyBO
YXRpdmVPZmZTY3JlZW5XaW5kb3c7CisKKy8vIENvbnRlbnRzIG9mIHRoZSBzdXJmYWNlIGFyZSBi
YWNrZWQgYnkgbmF0aXZlIHdpbmRvdy4KK2NsYXNzIEVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2Ug
OiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgeworCitwdWJsaWM6CisgICAgRUdMV2luZG93VHJh
bnNwb3J0U3VyZmFjZSgpOworICAgIHZpcnR1YWwgfkVHTFdpbmRvd1RyYW5zcG9ydFN1cmZhY2Uo
KTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWd1cmF0aW9uKCkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1Jl
Y3QpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzd2FwQnVmZmVycygpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBmcmVlRUdMUmVzb3VyY2VzKCk7CisgICAgT3duUHRyPE5hdGl2ZU9mZlNjcmVlbldpbmRvdz4g
bV9uYXRpdmVSZXNvdXJjZTsKKyAgICBPd25QdHI8RUdMQ29uZmlnSGVscGVyPiBtX2VnbENvbmZp
Z0hlbHBlcjsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5jcHAK
aW5kZXggOTZhMGFiOS4uYzljZDhkMiAxMDA2NDQKLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9HTFhTdXJmYWNlLmNwcAorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuY3BwCkBAIC0zNiw3ICsz
Niw3IEBAIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0ZXNbXSA9IHsgR0xYX1BCVUZG
RVJfV0lEVEgsIDEsIEdMWF9QQlVGRkVSX0hFSUdICiBHTFhUcmFuc3BvcnRTdXJmYWNlOjpHTFhU
cmFuc3BvcnRTdXJmYWNlKCkKICAgICA6IFgxMU9mZlNjcmVlbldpbmRvdygpCiB7Ci0gICAgY3Jl
YXRlT2Zmc2NyZWVuV2luZG93KCk7CisgICAgY3JlYXRlT2Zmc2NyZWVuV2luZG93KCZtX2J1ZmZl
ckhhbmRsZSk7CiAgICAgbV9kcmF3YWJsZSA9IG1fYnVmZmVySGFuZGxlOwogfQogCkBAIC00OSw2
ICs0OSwxMiBAQCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgR0xYVHJhbnNwb3J0U3VyZmFjZTo6Y29u
ZmlndXJhdGlvbigpCiAgICAgcmV0dXJuIG1fc2hhcmVkUmVzb3VyY2VzLT5zdXJmYWNlQ29udGV4
dENvbmZpZygpOwogfQogCit2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnNldEdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgR0xQbGF0Zm9ybVN1cmZhY2U6OnNldEdlb21l
dHJ5KG5ld1JlY3QpOworICAgIHJlU2l6ZVdpbmRvdyhuZXdSZWN0LCBtX2RyYXdhYmxlKTsKK30K
Kwogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpzd2FwQnVmZmVycygpCiB7CiAgICAgaWYgKCFt
X2RyYXdhYmxlKQpAQCAtNjYsNyArNzIsNyBAQCB2b2lkIEdMWFRyYW5zcG9ydFN1cmZhY2U6OnN3
YXBCdWZmZXJzKCkKIAogdm9pZCBHTFhUcmFuc3BvcnRTdXJmYWNlOjpkZXN0cm95KCkKIHsKLSAg
ICBkZXN0cm95V2luZG93KCk7CisgICAgZGVzdHJveVdpbmRvdyhtX2J1ZmZlckhhbmRsZSk7CiAg
ICAgbV9idWZmZXJIYW5kbGUgPSAwOwogfQogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4L0dMWFN1cmZhY2UuaCBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCmluZGV4IDRlODc2ODUu
LjBkODRjMzQgMTAwNjQ0Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9nbHgvR0xYU3VyZmFjZS5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYU3VyZmFjZS5oCkBAIC00Myw2ICs0Myw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5HTFhUcmFuc3BvcnRTdXJmYWNlKCk7CiAgICAgUGxhdGZvcm1TdXJmYWNlQ29u
ZmlnIGNvbmZpZ3VyYXRpb24oKTsKICAgICB2b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgdm9pZCBz
ZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9pZCBkZXN0cm95KCk7CiAKIHByaXZh
dGU6CmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMv
Z2x4L0dMWFdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3N1cmZhY2VzL2dseC9HTFhXaW5kb3dSZXNvdXJjZXMuaAppbmRleCBjMTczNTU3Li5jYmZjYzM5
IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZ2x4
L0dMWFdpbmRvd1Jlc291cmNlcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9zdXJmYWNlcy9nbHgvR0xYV2luZG93UmVzb3VyY2VzLmgKQEAgLTUxLDYgKzUxLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIFNoYXJlZFgxMVJlc291cmNlczo6eDExRGlzcGxheSgpOwog
ICAgIH0KIAorICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvKCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9WaXN1YWxJbmZvKQorICAgICAgICAgICAgc3VyZmFjZUNvbnRleHRDb25maWcoKTsKKwor
ICAgICAgICByZXR1cm4gbV9WaXN1YWxJbmZvOworICAgIH0KKwogICAgIHZpcnR1YWwgR0xYRkJD
b25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKQogICAgIHsKICAgICAgICAgaWYgKCFtX3BidWZm
ZXJmYkNvbmZpZykgewpAQCAtOTgsMTEgKzEwNiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVk
OgogICAgIFNoYXJlZEdMWFJlc291cmNlcygpCiAgICAgICAgIDogU2hhcmVkWDExUmVzb3VyY2Vz
KCkKICAgICAgICAgLCBtX3BidWZmZXJmYkNvbmZpZygwKQogICAgICAgICAsIG1fc3VyZmFjZUNv
bnRleHRmYkNvbmZpZygwKQorICAgICAgICAsIG1fVmlzdWFsSW5mbygwKQogICAgIHsKICAgICB9
CiAKQEAgLTE2MCwxMCArMTY5LDE2IEBAIHByaXZhdGU6CiAKICAgICAgICAgaWYgKG1fc3VyZmFj
ZUNvbnRleHRmYkNvbmZpZykKICAgICAgICAgICAgIG1fc3VyZmFjZUNvbnRleHRmYkNvbmZpZyA9
IDA7CisKKyAgICAgICAgaWYgKG1fVmlzdWFsSW5mbykgeworICAgICAgICAgICAgWEZyZWUobV9W
aXN1YWxJbmZvKTsKKyAgICAgICAgICAgIG1fVmlzdWFsSW5mbyA9IDA7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICBHTFhGQkNvbmZpZyBtX3BidWZmZXJmYkNvbmZpZzsKICAgICBHTFhGQkNvbmZp
ZyBtX3N1cmZhY2VDb250ZXh0ZmJDb25maWc7CisgICAgWFZpc3VhbEluZm8qIG1fVmlzdWFsSW5m
bzsKIH07CiAKIH0KZGlmZiAtLWdpdCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmNwcAppbmRleCA2MDI5
M2U3Li41OGY3NTU4IDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5jcHAKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuY3BwCkBAIC0y
OCw3ICsyOCw5IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAKKyNpZiBV
U0UoR0xYKQogI2luY2x1ZGUgIkdMWFdpbmRvd1Jlc291cmNlcy5oIgorI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMjYgKzM5LDMwIEBAIFBsYXRmb3JtU2hhcmVkUmVzb3Vy
Y2VzKiBTaGFyZWRYMTFSZXNvdXJjZXM6Om1fc3RhdGljU2hhcmVkUmVzb3VyY2UgPSAwOwogWDEx
T2ZmU2NyZWVuV2luZG93OjpYMTFPZmZTY3JlZW5XaW5kb3coKQogICAgIDogR0xQbGF0Zm9ybVN1
cmZhY2UoKQogICAgICwgbV9zaGFyZWRSZXNvdXJjZXMoMCkKKyAgICAsIG1fY29uZmlnVmlzdWFs
SW5mbygwKQogewogICAgIG1fc2hhcmVkUmVzb3VyY2VzID0gUGxhdGZvcm1TaGFyZWRSZXNvdXJj
ZXM6OmNyZWF0ZSgpOwogCiAgICAgaWYgKCFtX3NoYXJlZFJlc291cmNlcykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9zaGFyZWREaXNwbGF5ID0gbV9zaGFyZWRSZXNvdXJjZXMtPm5hdGl2ZURp
c3BsYXkoKTsKKyAgICBtX3NoYXJlZERpc3BsYXkgPSBtX3NoYXJlZFJlc291cmNlcy0+eDExRGlz
cGxheSgpOwogfQogCiBYMTFPZmZTY3JlZW5XaW5kb3c6On5YMTFPZmZTY3JlZW5XaW5kb3coKQog
eworICAgIGlmIChtX2NvbmZpZ1Zpc3VhbEluZm8pIHsKKyAgICAgICAgWEZyZWUobV9jb25maWdW
aXN1YWxJbmZvKTsKKyAgICAgICAgbV9jb25maWdWaXN1YWxJbmZvID0gMDsKKyAgICB9CiB9CiAK
LXZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpzZXRHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdS
ZWN0KQordm9pZCBYMTFPZmZTY3JlZW5XaW5kb3c6OnJlU2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0
JiBuZXdSZWN0LCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB3aW5kb3dJZCkKIHsKLSAgICBHTFBsYXRm
b3JtU3VyZmFjZTo6c2V0R2VvbWV0cnkobmV3UmVjdCk7Ci0gICAgWFJlc2l6ZVdpbmRvdyhtX3No
YXJlZFJlc291cmNlcy0+eDExRGlzcGxheSgpLCBtX2J1ZmZlckhhbmRsZSwgbmV3UmVjdC53aWR0
aCgpLCBuZXdSZWN0LmhlaWdodCgpKTsKKyAgICBYUmVzaXplV2luZG93KG1fc2hhcmVkUmVzb3Vy
Y2VzLT54MTFEaXNwbGF5KCksIHdpbmRvd0lkLCBuZXdSZWN0LndpZHRoKCksIG5ld1JlY3QuaGVp
Z2h0KCkpOwogfQogCi12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2lu
ZG93KCkKK3ZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3coUGxh
dGZvcm1CdWZmZXJIYW5kbGUqIGhhbmRsZUlkKQogewogICAgIGlmICghbV9zaGFyZWRSZXNvdXJj
ZXMpCiAgICAgICAgIHJldHVybjsKQEAgLTY1LDE0ICs3MSwxMSBAQCB2b2lkIFgxMU9mZlNjcmVl
bldpbmRvdzo6Y3JlYXRlT2Zmc2NyZWVuV2luZG93KCkKICAgICBpZiAoIWRpc3BsYXkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFBsYXRmb3JtU3VyZmFjZUNvbmZpZyBjb25maWcgPSBtX3NoYXJl
ZFJlc291cmNlcy0+c3VyZmFjZUNvbnRleHRDb25maWcoKTsKLQotICAgIGlmICghY29uZmlnKSB7
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIGEgdmFsaWQgY29uZmlnaXJh
dGlvbi4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQorI2lmIFVTRShHTFgpCiAgICAgWFZp
c3VhbEluZm8qIHZpc0luZm8gPSBtX3NoYXJlZFJlc291cmNlcy0+dmlzdWFsSW5mbygpOworI2Vs
c2UKKyAgICBYVmlzdWFsSW5mbyogdmlzSW5mbyA9IG1fY29uZmlnVmlzdWFsSW5mbzsKKyNlbmRp
ZgogCiAgICAgaWYgKCF2aXNJbmZvKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGZp
bmQgdmFsaWQgWFZpc3VhbCIpOwpAQCAtODgsMjQgKzkxLDI3IEBAIHZvaWQgWDExT2ZmU2NyZWVu
V2luZG93OjpjcmVhdGVPZmZzY3JlZW5XaW5kb3coKQogICAgIGF0dHJpYnV0ZS5iYWNrZ3JvdW5k
X3BpeGVsID0gV2hpdGVQaXhlbChkaXNwbGF5LCAwKTsKICAgICBhdHRyaWJ1dGUuYm9yZGVyX3Bp
eGVsID0gQmxhY2tQaXhlbChkaXNwbGF5LCAwKTsKICAgICBhdHRyaWJ1dGUuY29sb3JtYXAgPSBj
bWFwOwotICAgIG1fYnVmZmVySGFuZGxlID0gWENyZWF0ZVdpbmRvdyhkaXNwbGF5LCB4V2luZG93
LCAwLCAwLCAxLCAxLCAwLCB2aXNJbmZvLT5kZXB0aCwgSW5wdXRPdXRwdXQsIHZpc0luZm8tPnZp
c3VhbCwgQ1dCYWNrUGl4ZWwgfCBDV0JvcmRlclBpeGVsIHwgQ1dDb2xvcm1hcCwgJmF0dHJpYnV0
ZSk7CisgICAgUGxhdGZvcm1CdWZmZXJIYW5kbGUgdGVtcEhhbmRsZUlkOworICAgIHRlbXBIYW5k
bGVJZCA9IFhDcmVhdGVXaW5kb3coZGlzcGxheSwgeFdpbmRvdywgMCwgMCwgMSwgMSwgMCwgdmlz
SW5mby0+ZGVwdGgsIElucHV0T3V0cHV0LCB2aXNJbmZvLT52aXN1YWwsIENXQmFja1BpeGVsIHwg
Q1dCb3JkZXJQaXhlbCB8IENXQ29sb3JtYXAsICZhdHRyaWJ1dGUpOwogCi0gICAgaWYgKCFtX2J1
ZmZlckhhbmRsZSkgeworICAgIGlmICghdGVtcEhhbmRsZUlkKSB7CiAgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNyZWF0ZSBvZmZzY3JlZW4gd2luZG93Iik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBYU2V0V2luZG93QmFja2dyb3VuZFBpeG1hcChkaXNwbGF5LCBtX2J1ZmZl
ckhhbmRsZSwgMCk7Ci0gICAgWENvbXBvc2l0ZVJlZGlyZWN0V2luZG93KGRpc3BsYXksIG1fYnVm
ZmVySGFuZGxlLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVhbCk7CisgICAgWFNldFdpbmRvd0JhY2tn
cm91bmRQaXhtYXAoZGlzcGxheSwgdGVtcEhhbmRsZUlkLCAwKTsKKyAgICBYQ29tcG9zaXRlUmVk
aXJlY3RXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkLCBDb21wb3NpdGVSZWRpcmVjdE1hbnVh
bCk7CisgICAgKmhhbmRsZUlkID0gdGVtcEhhbmRsZUlkOworICAgIG1fYnVmZmVySGFuZGxlID0g
dGVtcEhhbmRsZUlkOwogCiAgICAgaWYgKG1fc2hhcmVkUmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRl
bnNpb25TdXBwb3J0ZWQoKSkKLSAgICAgICAgWE1hcFdpbmRvdyhkaXNwbGF5LCBtX2J1ZmZlckhh
bmRsZSk7CisgICAgICAgIFhNYXBXaW5kb3coZGlzcGxheSwgdGVtcEhhbmRsZUlkKTsKIAogfQog
Ci12b2lkIFgxMU9mZlNjcmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdygpCit2b2lkIFgxMU9mZlNj
cmVlbldpbmRvdzo6ZGVzdHJveVdpbmRvdyhQbGF0Zm9ybUJ1ZmZlckhhbmRsZSB3aW5kb3dJZCkK
IHsKLSAgICBpZiAoIW1fYnVmZmVySGFuZGxlKQorICAgIGlmICghd2luZG93SWQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEdMUGxhdGZvcm1TdXJmYWNlOjpkZXN0cm95KCk7CkBAIC0xMTMsOSAr
MTE5LDY3IEBAIHZvaWQgWDExT2ZmU2NyZWVuV2luZG93OjpkZXN0cm95V2luZG93KCkKICAgICBp
ZiAoIWRpc3BsYXkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFhEZXN0cm95V2luZG93KGRpc3Bs
YXksIG1fYnVmZmVySGFuZGxlKTsKLSAgICBtX2J1ZmZlckhhbmRsZSA9IDA7CisgICAgWERlc3Ry
b3lXaW5kb3coZGlzcGxheSwgd2luZG93SWQpOworfQorCitEaXNwbGF5KiBYMTFPZmZTY3JlZW5X
aW5kb3c6Om5hdGl2ZVNoYXJlZERpc3BsYXkoKQoreworICAgIHJldHVybiBtX3NoYXJlZFJlc291
cmNlcy0+eDExRGlzcGxheSgpOworfQorCisjaWYgVVNFKEVHTCkKK2Jvb2wgWDExT2ZmU2NyZWVu
V2luZG93OjpzZXRWaXN1YWxJZChjb25zdCBFR0xpbnQgaWQpCit7CisgICAgVmlzdWFsSUQgdmlz
dWFsSWQgPSBzdGF0aWNfY2FzdDxWaXN1YWxJRD4oaWQpOworCisgICAgaWYgKCF2aXN1YWxJZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRUdMIGhhcyBzdWdnZXN0ZWQgYSB2aXN1
YWwgaWQsIHNvIGdldCB0aGUgcmVzdCBvZiB0aGUgdmlzdWFsIGluZm8gZm9yIHRoYXQgaWQuCisg
ICAgWFZpc3VhbEluZm8gdmlzdWFsSW5mb1RlbXBsYXRlOworICAgIG1lbXNldCgmdmlzdWFsSW5m
b1RlbXBsYXRlLCAwLCBzaXplb2YoWFZpc3VhbEluZm8pKTsKKyAgICB2aXN1YWxJbmZvVGVtcGxh
dGUudmlzdWFsaWQgPSB2aXN1YWxJZDsKKworICAgIFhWaXN1YWxJbmZvKiBjaG9zZW5WaXN1YWxJ
bmZvOworICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKKyAgICBjaG9zZW5WaXN1YWxJbmZvID0g
WEdldFZpc3VhbEluZm8obV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXkoKSwgVmlzdWFsSURN
YXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7CisgICAgaWYgKGNob3Nl
blZpc3VhbEluZm8pIHsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICAgICAgaWYgKG1f
c2hhcmVkUmVzb3VyY2VzLT5pc1hSZW5kZXJFeHRlbnNpb25TdXBwb3J0ZWQoKSkgeworICAgICAg
ICAgICAgWFJlbmRlclBpY3RGb3JtYXQqIGZvcm1hdCA9IFhSZW5kZXJGaW5kVmlzdWFsRm9ybWF0
KG1fc2hhcmVkUmVzb3VyY2VzLT54MTFEaXNwbGF5KCksIGNob3NlblZpc3VhbEluZm8tPnZpc3Vh
bCk7CisgICAgICAgICAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdC0+ZGlyZWN0LmFscGhhTWFzayA+
IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbmZpZ1Zpc3VhbEluZm8gPSBjaG9zZW5WaXN1YWxJ
bmZvOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisjZW5kaWYKKyAgICAgICAgaWYgKGNob3NlblZpc3VhbEluZm8tPmRlcHRoID09IDMyKSB7
CisgICAgICAgICAgICBtX2NvbmZpZ1Zpc3VhbEluZm8gPSBjaG9zZW5WaXN1YWxJbmZvOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1fY29u
ZmlnVmlzdWFsSW5mbykgeworICAgICAgICBtZW1zZXQoJnZpc3VhbEluZm9UZW1wbGF0ZSwgMCwg
c2l6ZW9mKFhWaXN1YWxJbmZvKSk7CisgICAgICAgIFhWaXN1YWxJbmZvKiBtYXRjaGluZ1Zpc3Vh
bHM7CisgICAgICAgIGludCBtYXRjaGluZ0NvdW50ID0gMDsKKworICAgICAgICB2aXN1YWxJbmZv
VGVtcGxhdGUuZGVwdGggPSBjaG9zZW5WaXN1YWxJbmZvLT5kZXB0aDsKKyAgICAgICAgbWF0Y2hp
bmdWaXN1YWxzID0gWEdldFZpc3VhbEluZm8obV9zaGFyZWRSZXNvdXJjZXMtPngxMURpc3BsYXko
KSwgVmlzdWFsRGVwdGhNYXNrLCAmdmlzdWFsSW5mb1RlbXBsYXRlLCAmbWF0Y2hpbmdDb3VudCk7
CisKKyAgICAgICAgaWYgKG1hdGNoaW5nVmlzdWFscykgeworICAgICAgICAgICAgbV9jb25maWdW
aXN1YWxJbmZvID0gJm1hdGNoaW5nVmlzdWFsc1swXTsKKyAgICAgICAgICAgIFhGcmVlKG1hdGNo
aW5nVmlzdWFscyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICghbV9jb25maWdWaXN1YWxJbmZvKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxl
ZCB0byByZXRyaWV2ZSBYVmlzdWFsIEluZm8uIik7CisKKyAgICByZXR1cm4gZmFsc2U7CiB9Cisj
ZW5kaWYKIAogfQogCmRpZmYgLS1naXQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL2dseC9YMTFXaW5kb3dSZXNvdXJjZXMuaAppbmRleCBiMjViMmFj
Li45YzA4MGMzIDEwMDY0NAotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZ2x4L1gxMVdpbmRvd1Jlc291cmNlcy5oCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9nbHgvWDExV2luZG93UmVzb3VyY2VzLmgKQEAgLTQwLDEzICs0
MCwzMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBVU0UoR0xYKQogY2xhc3MgU2hh
cmVkR0xYUmVzb3VyY2VzOwogdHlwZWRlZiBTaGFyZWRHTFhSZXNvdXJjZXMgUGxhdGZvcm1TaGFy
ZWRSZXNvdXJjZXM7CisjZWxpZiBVU0UoRUdMKQorY2xhc3MgU2hhcmVkWDExUmVzb3VyY2VzOwor
dHlwZWRlZiBTaGFyZWRYMTFSZXNvdXJjZXMgUGxhdGZvcm1TaGFyZWRSZXNvdXJjZXM7CisjZW5k
aWYKIAogY2xhc3MgU2hhcmVkWDExUmVzb3VyY2VzIDogcHVibGljIFdURjo6UmVmQ291bnRlZEJh
c2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYXJlZFgxMVJlc291cmNlcyk7CiAKIHB1
YmxpYzoKKyNpZiBVU0UoRUdMKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtU2hhcmVk
UmVzb3VyY2VzPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpY1NoYXJlZFJl
c291cmNlKQorICAgICAgICAgICAgbV9zdGF0aWNTaGFyZWRSZXNvdXJjZSA9IG5ldyBQbGF0Zm9y
bVNoYXJlZFJlc291cmNlcygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0YXRpY1No
YXJlZFJlc291cmNlLT5yZWYoKTsKKworICAgICAgICByZXR1cm4gYWRvcHRSZWYobV9zdGF0aWNT
aGFyZWRSZXNvdXJjZSk7CisgICAgfQorI2VuZGlmCisKICAgICB2b2lkIGRlcmVmKCkKICAgICB7
CiAgICAgICAgIGlmIChkZXJlZkJhc2UoKSkgewpAQCAtOTQsMjkgKzExMSwxNiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX3dpbmRvdzsKICAgICB9CiAKLSAgICBYVmlzdWFsSW5mbyogdmlz
dWFsSW5mbygpCi0gICAgewotICAgICAgICBpZiAoIW1fVmlzdWFsSW5mbykKLSAgICAgICAgICAg
IHN1cmZhY2VDb250ZXh0Q29uZmlnKCk7Ci0KLSAgICAgICAgcmV0dXJuIG1fVmlzdWFsSW5mbzsK
LSAgICB9Ci0KICAgICBib29sIGlzWFJlbmRlckV4dGVuc2lvblN1cHBvcnRlZCgpCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9zdXBwb3J0c1hSZW5kZXJFeHRlbnNpb247CiAgICAgfQogCi0gICAg
dmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgcEJ1ZmZlckNvbnRleHRDb25maWcoKSA9IDA7
Ci0gICAgdmlydHVhbCBQbGF0Zm9ybVN1cmZhY2VDb25maWcgc3VyZmFjZUNvbnRleHRDb25maWco
KSA9IDA7Ci0gICAgdmlydHVhbCBQbGF0Zm9ybURpc3BsYXkgbmF0aXZlRGlzcGxheSgpID0gMDsK
LQogcHJvdGVjdGVkOgogICAgIFNoYXJlZFgxMVJlc291cmNlcygpCiAgICAgICAgIDogbV9zdXBw
b3J0c1hSZW5kZXJFeHRlbnNpb24oZmFsc2UpCiAgICAgICAgICwgbV93aW5kb3coMCkKICAgICAg
ICAgLCBtX2Rpc3BsYXkoMCkKLSAgICAgICAgLCBtX1Zpc3VhbEluZm8oMCkKICAgICB7CiAgICAg
fQogCkBAIC0xMzEsMTEgKzEzNSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIG1fd2luZG93
ID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX1Zpc3VhbEluZm8pIHsKLSAgICAgICAg
ICAgIFhGcmVlKG1fVmlzdWFsSW5mbyk7Ci0gICAgICAgICAgICBtX1Zpc3VhbEluZm8gPSAwOwot
ICAgICAgICB9Ci0KICAgICAgICAgWENsb3NlRGlzcGxheShtX2Rpc3BsYXkpOwogICAgICAgICBt
X2Rpc3BsYXkgPSAwOwogICAgIH0KQEAgLTE0NCw3ICsxNDMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ym9vbCBtX3N1cHBvcnRzWFJlbmRlckV4dGVuc2lvbjsKICAgICBXaW5kb3cgbV93aW5kb3c7CiAg
ICAgRGlzcGxheSogbV9kaXNwbGF5OwotICAgIFhWaXN1YWxJbmZvKiBtX1Zpc3VhbEluZm87CiB9
OwogCiBjbGFzcyBYMTFPZmZTY3JlZW5XaW5kb3cgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2Ug
ewpAQCAtMTUzLDEyICsxNTEsMTcgQEAgY2xhc3MgWDExT2ZmU2NyZWVuV2luZG93IDogcHVibGlj
IEdMUGxhdGZvcm1TdXJmYWNlIHsKIHB1YmxpYzoKICAgICBYMTFPZmZTY3JlZW5XaW5kb3coKTsK
ICAgICB2aXJ0dWFsIH5YMTFPZmZTY3JlZW5XaW5kb3coKTsKLSAgICB2b2lkIHNldEdlb21ldHJ5
KGNvbnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGNyZWF0ZU9mZnNjcmVlbldpbmRvdygpOwotICAg
IHZvaWQgZGVzdHJveVdpbmRvdygpOworICAgIHZvaWQgY3JlYXRlT2Zmc2NyZWVuV2luZG93KFBs
YXRmb3JtQnVmZmVySGFuZGxlKik7CisgICAgdm9pZCBkZXN0cm95V2luZG93KFBsYXRmb3JtQnVm
ZmVySGFuZGxlKTsKKyAgICB2b2lkIHJlU2l6ZVdpbmRvdyhjb25zdCBJbnRSZWN0JiwgUGxhdGZv
cm1CdWZmZXJIYW5kbGUpOworICAgIERpc3BsYXkqIG5hdGl2ZVNoYXJlZERpc3BsYXkoKTsKKyNp
ZiBVU0UoRUdMKQorICAgIGJvb2wgc2V0VmlzdWFsSWQoY29uc3QgRUdMaW50KTsKKyNlbmRpZgog
CiBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFBsYXRmb3JtU2hhcmVkUmVzb3VyY2VzPiBtX3NoYXJl
ZFJlc291cmNlczsKKyAgICBYVmlzdWFsSW5mbyogbV9jb25maWdWaXN1YWxJbmZvOwogfTsKIAog
fQpkaWZmIC0tZ2l0IFNvdXJjZS9jbWFrZS9PcHRpb25zRWZsLmNtYWtlIFNvdXJjZS9jbWFrZS9P
cHRpb25zRWZsLmNtYWtlCmluZGV4IDgwMGE3MDkuLmZlMjAyZWYgMTAwNjQ0Ci0tLSBTb3VyY2Uv
Y21ha2UvT3B0aW9uc0VmbC5jbWFrZQorKysgU291cmNlL2NtYWtlL09wdGlvbnNFZmwuY21ha2UK
QEAgLTE3NSwxMiArMTc1LDI1IEBAIGlmIChFTkFCTEVfV0VCR0wgT1IgV1RGX1VTRV9USUxFRF9C
QUNLSU5HX1NUT1JFKQogCiAgICAgaWYgKE9QRU5HTFhfRk9VTkQpCiAgICAgICAgIGFkZF9kZWZp
bml0aW9ucygtREhBVkVfR0xYKQotICAgICAgICBhZGRfZGVmaW5pdGlvbnMoLURXVEZfVVNFX0dM
WD0xKQorICAgIGVuZGlmICgpCisKKyAgICBvcHRpb24oRU5BQkxFX0VHTCBPTikKIAotICAgICAg
ICBpZiAoWDExX1hjb21wb3NpdGVfRk9VTkQgQU5EIFgxMV9YcmVuZGVyX0ZPVU5EKQotICAgICAg
ICAgICBzZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkKLSAgICAgICAgZW5kaWYgKCkKKyAgICBp
ZiAoRU5BQkxFX0VHTCkKKyAgICAgICAgZmluZF9wYWNrYWdlKEVHTCBSRVFVSVJFRCkKICAgICBl
bmRpZiAoKQorCisgICAgaWYgKEVHTF9GT1VORCkKKyAgICAgICAgc2V0KFdURl9VU0VfRUdMIDEp
CisgICAgICAgIGFkZF9kZWZpbml0aW9ucygtRFdURl9VU0VfRUdMPTEpCisgICAgIGVsc2VpZiAo
T1BFTkdMWF9GT1VORCkKKyAgICAgICAgIHNldChXVEZfVVNFX0dMWCAxKQorICAgICAgICAgYWRk
X2RlZmluaXRpb25zKC1EV1RGX1VTRV9HTFg9MSkKKyAgICBlbmRpZiAoKQorCisgICAgIGlmICgo
T1BFTkdMWF9GT1VORCBPUiBFR0xfRk9VTkQpIEFORCBYMTFfWGNvbXBvc2l0ZV9GT1VORCBBTkQg
WDExX1hyZW5kZXJfRk9VTkQpCisgICAgICAgICBzZXQoVVNFX0dSQVBISUNTX1NVUkZBQ0UgMSkK
KyAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfSU5TUEVDVE9SKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>