<?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>10467</bug_id>
          
          <creation_ts>2006-08-17 13:08:11 -0700</creation_ts>
          <short_desc>WebKit should have Qt platform support (Part II)</short_desc>
          <delta_ts>2006-08-24 15:11:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>420+</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.4</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52856</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-17 13:08:11 -0700</bug_when>
    <thetext>It would be nice to have Qt support in WebKit :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52867</commentid>
    <comment_count>1</comment_count>
      <attachid>10106</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-17 13:22:36 -0700</bug_when>
    <thetext>Created attachment 10106
Initial patch

This contains the whole platform/qt stuff. Amazing ChangeLog diff :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52907</commentid>
    <comment_count>2</comment_count>
      <attachid>10106</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-18 03:17:10 -0700</bug_when>
    <thetext>Comment on attachment 10106
Initial patch

I&apos;m going to leave this one to darin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52913</commentid>
    <comment_count>3</comment_count>
      <attachid>10122</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-18 04:25:18 -0700</bug_when>
    <thetext>Created attachment 10122
Corrected patch

Eric advised me to change the coding style to confirm to the WebKit style guide. This time it should be correct :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52958</commentid>
    <comment_count>4</comment_count>
      <attachid>10122</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-18 14:26:33 -0700</bug_when>
    <thetext>Comment on attachment 10122
Corrected patch

FontCache probably needs your copyright as well:

--- qt/FontCacheQt.cpp	(Revision 0)
+++ qt/FontCacheQt.cpp	(Revision 0)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2006 Dirk Mueller &lt;mueller@kde.org&gt;
+ *

likewise for PlatformTextEdit
and ImageSourceQt

normally webkit doesn&apos;t have {} around one line ifs
+    if (length &lt; 4) {
+        return 0;
+    }

Um, these really should be part of the individual decoders:

+    if (strncmp(contents, &quot;GIF8&quot;, 4) == 0) {
+        return new GIFImageDecoder();
+    }
+

GiffImageDecoder::isGif(char*)

Seems silly for all the platforms to have to write the same length if checks.

Even better would be an ImageDecoder class method which just new&apos;d the right one. (even though that would be a layering violation)

This seems to be indented &quot;wrong&quot;:

+    : m_x(p.x())
+      , m_y(p.y())

the , and : should line up.

No breaks are need here:

+        return QPainter::CompositionMode_Clear;
+        break;

likewise:

+    case ButtCap:
+        return Qt::FlatCap;
+        break;

They just double the length of the source files for no good reason.

This should probably use the normal constructor initializers:

+    TransparencyLayer(const QPainter&amp; p, int width, int height)
+    {
+        pixmap = QPixmap(width, height);
+
+        painter = new QPainter(&amp;pixmap);

: pixmap(width, height), etc

Short one-liners can be written on one line if you choose:

+    bool isNull()
+    {
+        return !x &amp;&amp; !y &amp;&amp; !blur;
+    }

it&apos;s your call there.

I&apos;m not sure you always want antialiasing on:

+    // Good looking SVGs please...
+    painter-&gt;setRenderHint(QPainter::Antialiasing);

I feel like I remember webkit turning it on/off at times, but I&apos;m not sure.

return should have it&apos;s own line:

+    if (m_data-&gt;shadow.isNull()) return;

I&apos;ve seen this type of naming avoided in WebKit, probably because it can be confused with obj-c private member variables:

+        Pen _pen = pen();

Hum... I can&apos;t remember seeing alloca ever used anywhere else in WebKit:

+        float *bmap = (float*)alloca(sizeof(float)*(md+1));

That also seems like a bad idea, as thickness is defined by the user and could cause that to crash.

Generally we use spaces between operators:

n=-thickness
int d = n*n+m*m;
etc.

Personally I find multi-line blocks less confusing if they have an extra {} here:

+        for (int n=-thickness; n&lt;=thickness; n++)
+            for (int m=-thickness; m&lt;=thickness; m++) {
+                int d = n*n+m*m;
+                if (d&lt;=md)
+                    factor += bmap[d];
+            }

even though for () for() doesn&apos;t really need the extra outside block for the compiler&apos;s sake.

Looks like another crash possibility:
+        float* amap = (float*)alloca(sizeof(float)*(h*w));
+        memset(amap, 0, h*w*(sizeof(float)));

Hum, where is the corresponding save() to this end()?

+void GraphicsContext::endTransparencyLayer()

+    TransparencyLayer layer = m_data-&gt;layers.pop();
+    layer.painter-&gt;end();

There *has* to be a cleaner way (like using well named local variables?) to simplify this:

+    path.addRect(QRectF(rect.x() + qMax(topLeft.width(), bottomLeft.width()),
+                        rect.y() + qMax(topLeft.height(), topRight.height()),
+                        rect.width() - qMax(topLeft.width(), bottomLeft.width()) - qMax(topRight.width(), bottomRight.width()),
+                        rect.height() - qMax(topLeft.height(), topRight.height()) - qMax(bottomLeft.height(),
+                                                                                         bottomRight.height())));

More missing copyright:
qt/FontPlatformDataQt.cpp

With a const QString&amp;() operator, I wouldn&apos;t think this would be necessary:

font.setFamily(toQString(familyName));

These should use the constructor form:

+FontPlatformData::FontPlatformData(const FontPlatformData&amp; other)
+{
+    m_font = other.m_font;
+}

m_font(other.m_font)

more copyright:

qt/FontPlatformData.h

* in the &quot;wrong&quot; place:

+    static Cursors *self();
+    static Cursors *s_self;

spacing:
+    for(unsigned i = 0; i &lt; bufferLength; i++) {

{ takes a separate line in function declarations:
+void setSharedTimerFiredFunction(void (*f)()) {

Hum, generally this either shouldn&apos;t be commited, or should be in WebKitTools:

+++ qt/test/testunity.cpp	(Revision 0)

Eventually this will all need to be wired into the KPart/khtml API:

+    Settings* settings = new Settings;
+    settings-&gt;setAutoLoadImages(true);
+    settings-&gt;setMinFontSize(5);


More copyright:
 qt/PathQt.cpp


Should use constructor initializers:

+void FontData::platformInit()
+{
+    QFontMetrics metrics(m_font.font());
+    m_ascent = metrics.ascent();
+    m_descent = metrics.descent();


Ok, I was only able to stomach about 75% if the patch ;)

My #1 suggestion: Break this up in to pieces.  Even if that means landing &quot;non-functional&quot; pieces of Qt.  An example would be to get all of the fundamental classes like FloatPoint, Size, etc. landed, then come back to more complicated ones like FrameQt.

There are lots of style nits, not all of which need to be resolved to land, but the more like the rest of webkit this code is, the easier it will be for someone to read.

There are also some alloca uses which could result in crashes, which should be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52963</commentid>
    <comment_count>5</comment_count>
      <attachid>10136</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-18 16:27:00 -0700</bug_when>
    <thetext>Created attachment 10136
Remaining bits

Eric already went through a lot of this code. These are the remaining
bits we didn&apos;t manage to go through. If anyone already wants to review it... :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52967</commentid>
    <comment_count>6</comment_count>
      <attachid>10136</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-08-18 21:09:02 -0700</bug_when>
    <thetext>Comment on attachment 10136
Remaining bits

I have some questions and comments:

1) Does CanvasQt really below in the platform directory?

If Canvas is specific to Qt, then I don&apos;t think it should be in the platform directory. The equivalent to this on Macintosh is in WebKit, not WebCore. And canvas already has a meaning in WebCore (the canvas element).

If we do want to have CanvasQt in WebCore, I think it belongs in bridge rather than platform. The platform directory is for things &quot;below&quot; WebCore, not &quot;above&quot; WebCore.

2) I&apos;d prefer not to have a file named &quot;helper&quot;. We went out of our way and worked hard to get rid of &quot;misc&quot; files in WebCore. The functions for converting strings would be fine to put into PlatformString.h itself, I think, and similarly it&apos;s fine to have the conversion to QFont in Font.h.

Does Qt really need its own notImplemented macro? Given our experience with bring-up on the original Macintosh platform, we found that having a central &quot;link stubs&quot; location (used for more recent porting efforts) worked way better for us than notImplemented() calls sprinkled all around the code (which is what we did for the original port to OS X). Can I convince you to take this approach?

3) Do we really want a header SharedTimerLinux.h as well as the implementation file? Does more than one file include this header? If not, then maybe this should all be in SharedTimerLinux.cpp. Also, this is named &quot;Linux&quot; but it has &lt;QTimer&gt; in it, so I think it&apos;s SharedTimerQt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52993</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-21 10:11:15 -0700</bug_when>
    <thetext>Hi Darin,

thanks for the reply :-)
 
&gt; 1) Does CanvasQt really below in the platform directory?
&gt; 
&gt; If Canvas is specific to Qt, then I don&apos;t think it should be in the platform
&gt; directory. The equivalent to this on Macintosh is in WebKit, not WebCore. And
&gt; canvas already has a meaning in WebCore (the canvas element).
&gt; 
&gt; If we do want to have CanvasQt in WebCore, I think it belongs in bridge rather
&gt; than platform. The platform directory is for things &quot;below&quot; WebCore, not
&gt; &quot;above&quot; WebCore.

I am not sure about that, maybe it&apos;s just the name which is misleading.
It&apos;s only used from ScrollViewQt, to seperate the Qt specific widget
drawing and event handling. But it&apos;s definately not meant for external
usage - so I actually think this belongs into WebCore/platform/qt, but
maybe with a better (non-misleading) name. Suggestions?
 
&gt; 2) I&apos;d prefer not to have a file named &quot;helper&quot;. We went out of our way and
&gt; worked hard to get rid of &quot;misc&quot; files in WebCore. The functions for converting
&gt; strings would be fine to put into PlatformString.h itself, I think, and
&gt; similarly it&apos;s fine to have the conversion to QFont in Font.h.

Definately a much better approach - already prepared a patch yesterday, and
it got reviewed by Maciej &amp; landed by Rob. Thanks for the suggestion!
&gt; 
&gt; Does Qt really need its own notImplemented macro? Given our experience with
&gt; bring-up on the original Macintosh platform, we found that having a central
&gt; &quot;link stubs&quot; location (used for more recent porting efforts) worked way better
&gt; for us than notImplemented() calls sprinkled all around the code (which is what
&gt; we did for the original port to OS X). Can I convince you to take this
&gt; approach?

I could be convinced to use that for sure, but I actually like it a lot:
* I think if there&apos;s an unimplemented function - for instance in WidgetQt -
  I think it&apos;s a good idea to keep it in WidgetQt.cpp, for stuff we don&apos;t
  have a seperated file TemporaryLinkStubs.cpp is good

* pragmatic reason:
  As our notImplemented() macro prints file &amp; line to stdout it&apos;s very
  easy to see in which are this missing function lives, otherwhise I have
  to open TemporaryLinkStubs.cpp everytime to check what it was...

These are my reasons for this behaviour. Do you think it would be okay?
(I moved the notImplemented() macro in the respective files and removed
HelperQt.h completly...)
 
&gt; 3) Do we really want a header SharedTimerLinux.h as well as the implementation
&gt; file? Does more than one file include this header? If not, then maybe this
&gt; should all be in SharedTimerLinux.cpp. Also, this is named &quot;Linux&quot; but it has
&gt; &lt;QTimer&gt; in it, so I think it&apos;s SharedTimerQt.

Good one, changed. I think it was based on ideas from the gdk code, they
named it like this IIRC.

Thanks for the good suggestions!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53005</commentid>
    <comment_count>8</comment_count>
      <attachid>10149</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-21 12:37:28 -0700</bug_when>
    <thetext>Created attachment 10149
Patch chunk: graphics related stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53006</commentid>
    <comment_count>9</comment_count>
      <attachid>10150</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-21 12:38:21 -0700</bug_when>
    <thetext>Created attachment 10150
Patch chunk: timer/system time related stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53007</commentid>
    <comment_count>10</comment_count>
      <attachid>10151</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-21 12:53:11 -0700</bug_when>
    <thetext>Created attachment 10151
Patch chunk: fonts related stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53008</commentid>
    <comment_count>11</comment_count>
      <attachid>10152</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-21 12:54:31 -0700</bug_when>
    <thetext>Created attachment 10152
Patch chunk: resource loader related stuff

Beware: The libcurl usage is meant temporarily. It should use KIO soon.
(the libcurl part is directly taken from gdk platform code)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53010</commentid>
    <comment_count>12</comment_count>
      <attachid>10154</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-21 13:26:36 -0700</bug_when>
    <thetext>Created attachment 10154
Patch chunk: theme/cursor related stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53020</commentid>
    <comment_count>13</comment_count>
      <attachid>10155</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-21 13:47:17 -0700</bug_when>
    <thetext>Created attachment 10155
Patch chunk: canvas/frame related stuff

Incorporated Darin&apos;s suggestion and renamed CanvasQt to ScrollViewCanvasQt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53021</commentid>
    <comment_count>14</comment_count>
      <attachid>10156</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-21 13:54:05 -0700</bug_when>
    <thetext>Created attachment 10156
Patch chunk: link stubs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53022</commentid>
    <comment_count>15</comment_count>
      <attachid>10150</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-08-21 15:10:07 -0700</bug_when>
    <thetext>Comment on attachment 10150
Patch chunk: timer/system time related stuff

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53023</commentid>
    <comment_count>16</comment_count>
      <attachid>10154</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-08-21 15:36:26 -0700</bug_when>
    <thetext>Comment on attachment 10154
Patch chunk: theme/cursor related stuff

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53028</commentid>
    <comment_count>17</comment_count>
      <attachid>10156</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-21 16:07:27 -0700</bug_when>
    <thetext>Comment on attachment 10156
Patch chunk: link stubs

Not much to review here.  rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53029</commentid>
    <comment_count>18</comment_count>
      <attachid>10150</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-08-21 16:11:07 -0700</bug_when>
    <thetext>Comment on attachment 10150
Patch chunk: timer/system time related stuff

Landed in r15954, removing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53031</commentid>
    <comment_count>19</comment_count>
      <attachid>10154</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-08-21 16:11:48 -0700</bug_when>
    <thetext>Comment on attachment 10154
Patch chunk: theme/cursor related stuff

Landed in r15955.  Removing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53033</commentid>
    <comment_count>20</comment_count>
      <attachid>10156</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-08-21 16:20:32 -0700</bug_when>
    <thetext>Comment on attachment 10156
Patch chunk: link stubs

Landed in r15956.  Removing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53119</commentid>
    <comment_count>21</comment_count>
      <attachid>10152</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-08-23 03:33:42 -0700</bug_when>
    <thetext>Comment on attachment 10152
Patch chunk: resource loader related stuff

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53138</commentid>
    <comment_count>22</comment_count>
      <attachid>10152</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-23 09:20:12 -0700</bug_when>
    <thetext>Comment on attachment 10152
Patch chunk: resource loader related stuff

Landed in r15989. Removing the review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53220</commentid>
    <comment_count>23</comment_count>
      <attachid>10154</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2006-08-23 13:24:42 -0700</bug_when>
    <thetext>Comment on attachment 10154
Patch chunk: theme/cursor related stuff

Comments:

+class Cursors {

Classes should be declared in .h files, not .cpp files

+public:
+    static Cursors *self();
+    static Cursors *s_self;

Stars should be next to the type, not the identifier (Cursors* self())

+    if (!s_self) {
+        s_self = new Cursors;
+    }

Shouldn&apos;t use braces here

+
+// vim: ts=4 sw=4 et

We don&apos;t have modelines in our files

+#include &lt;QStyle&gt;
+#include &lt;QWidget&gt;
+#include &lt;QPainter&gt;
+#include &lt;QStyleOptionButton&gt;
+
+#include &quot;config.h&quot;
+
+#include &quot;RenderTheme.h&quot;
+#include &quot;GraphicsContext.h&quot;

Is there a reason config.h is not the first #include? The convention for #includes is to first have config.h, then the .h file specific to this implementation, then any other includes in alphabetical order.

+class RenderThemeQt : public RenderTheme

Again, classes should be declared in .h files (in this case, RenderThemeQt.h)

+    bool stylePainterAndWidgetForPaintInfo(const RenderObject::PaintInfo&amp;, QStyle*&amp;, QPainter*&amp;, QWidget*&amp;) const;

The name of this method is a bit unclear. Perhaps &quot;getStylePainterAndWidgetFromPaintInfo&quot;?

+        option.state |= QStyle::State_ReadOnly; // Readonly is supported on textfields.

Put this comment above the line instead of next to it.

+    // TODO: this is not enough for sure! (use &apos;option&apos;...)

Might want to use a FIXME instead of TODO, since that&apos;s the convention used through most of WebKit

+// vim: ts=4 sw=4 et

Again, no modelines, please.


   Overall, this looks pretty solid. As you can see, the comments above are mostly style-related, so it should be pretty easy to clean it up. The biggest thing is to move those class declarations into .h files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53221</commentid>
    <comment_count>24</comment_count>
      <attachid>10149</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-08-23 13:30:38 -0700</bug_when>
    <thetext>Comment on attachment 10149
Patch chunk: graphics related stuff

r=me. There are a number of minor formatting/coding style nitpicks still left (discussed on IRC). The only more or less substantial pick is that TransparencyLayer should have a proper destructor, rather than a dangerous cleanup() method.

This all can go in a follow-up patch, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53222</commentid>
    <comment_count>25</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-23 13:30:57 -0700</bug_when>
    <thetext>(In reply to comment #23) 
&gt;    Overall, this looks pretty solid. As you can see, the comments above are
&gt; mostly style-related, so it should be pretty easy to clean it up. The biggest
&gt; thing is to move those class declarations into .h files.
&gt; 

Thanks a lot, will upload a clean-the-mess-up patch soon!

Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53223</commentid>
    <comment_count>26</comment_count>
      <attachid>10154</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2006-08-23 14:25:42 -0700</bug_when>
    <thetext>Comment on attachment 10154
Patch chunk: theme/cursor related stuff

Removed review flag because patch is already landed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53224</commentid>
    <comment_count>27</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-23 14:57:52 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; 
&gt; Thanks a lot, will upload a clean-the-mess-up patch soon!

Here lives an initial cleanup patch (only for already commited files):
http://ktown.kde.org/~wildfox/ktown/WebKit-PatchFlood/platform-qt-cleanup.diff

Once the fonts/frame/canvas stuff is in, I&apos;ll attach a completly patch
fixing the style, modelines, comments etc in all files in platform/qt.

Hope that pleases everyone,
Niko
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53255</commentid>
    <comment_count>28</comment_count>
      <attachid>10149</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-24 02:49:01 -0700</bug_when>
    <thetext>Comment on attachment 10149
Patch chunk: graphics related stuff

Landed in r15994, clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53257</commentid>
    <comment_count>29</comment_count>
      <attachid>10155</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-08-24 06:48:22 -0700</bug_when>
    <thetext>Comment on attachment 10155
Patch chunk: canvas/frame related stuff

Just two comments:

1) There should not be a page object for every frame, all frames on a web page should share the page object.

2) In FrameQt.h, there are two functions at the bottom called &quot;Win&quot;. These are used to cast easily between Frame and the Frame subclass (which is FrameQt in this case). This function should be renamed to Qt (or something like that). Win() is used for the windows port and we have Mac() for the mac port.

I&apos;ve discussed #1 with Nikolas Zimmermann and he will fix this when the Unity KPart is written. 

Regarding #2. I see that the Win() casting function isn&apos;t used anywhere (it could be in some places, such as ScrollViewCanvasQt::handleKeyEvent) so you could either remove it or rename it and start using it.

Either way, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53259</commentid>
    <comment_count>30</comment_count>
      <attachid>10195</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-24 07:48:44 -0700</bug_when>
    <thetext>Created attachment 10195
Fix build for Qt platform. See ChangeLog for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53260</commentid>
    <comment_count>31</comment_count>
      <attachid>10196</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-24 07:49:27 -0700</bug_when>
    <thetext>Created attachment 10196
Make Qt kcanvas device build again, after KCanvasMatrix removal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53261</commentid>
    <comment_count>32</comment_count>
      <attachid>10195</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-08-24 09:04:43 -0700</bug_when>
    <thetext>Comment on attachment 10195
Fix build for Qt platform. See ChangeLog for details.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53262</commentid>
    <comment_count>33</comment_count>
      <attachid>10195</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-08-24 09:12:46 -0700</bug_when>
    <thetext>Comment on attachment 10195
Fix build for Qt platform. See ChangeLog for details.

Clearing review flag for a committed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53263</commentid>
    <comment_count>34</comment_count>
      <attachid>10196</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-08-24 09:16:13 -0700</bug_when>
    <thetext>Comment on attachment 10196
Make Qt kcanvas device build again, after KCanvasMatrix removal.

r=me, and clearing the review flag to commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53264</commentid>
    <comment_count>35</comment_count>
      <attachid>10151</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-08-24 09:37:58 -0700</bug_when>
    <thetext>Comment on attachment 10151
Patch chunk: fonts related stuff

+FontPlatformData* FontCache::createFontPlatformData(const FontDescription&amp; fontDescription, const AtomicString&amp; family)
+{
+    return new FontPlatformData(fontDescription, family);
+}

This leaks; will change to &quot;return 0;&quot; when landing.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53266</commentid>
    <comment_count>36</comment_count>
      <attachid>10155</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-24 09:58:23 -0700</bug_when>
    <thetext>Comment on attachment 10155
Patch chunk: canvas/frame related stuff

Landed by Anders in r16013.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53267</commentid>
    <comment_count>37</comment_count>
      <attachid>10197</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-24 10:04:55 -0700</bug_when>
    <thetext>Created attachment 10197
Final style cleanup patch, as promised.

Removes modelines, fixes placing of comments, unneeded braces etc...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53270</commentid>
    <comment_count>38</comment_count>
      <attachid>10198</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-24 10:17:46 -0700</bug_when>
    <thetext>Created attachment 10198
Last things required for a working Qt build!

We are really getting there! Thanks again to all the reviewers!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53271</commentid>
    <comment_count>39</comment_count>
      <attachid>10199</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-08-24 10:20:13 -0700</bug_when>
    <thetext>Created attachment 10199
Offer a standalone testing tool for Qt platform.

I hope WebKitTools/QtLauncher is fine, as there&apos;s also a GdkLauncher.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53297</commentid>
    <comment_count>40</comment_count>
      <attachid>10197</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2006-08-24 10:36:29 -0700</bug_when>
    <thetext>Comment on attachment 10197
Final style cleanup patch, as promised.

This all looks great! Since discussion on modelines is ongoing, I will leave out the modeline deletions when I land this, as they are easier to take out later than to put back in. Thanks for doing this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53308</commentid>
    <comment_count>41</comment_count>
      <attachid>10197</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2006-08-24 11:30:30 -0700</bug_when>
    <thetext>Comment on attachment 10197
Final style cleanup patch, as promised.

Landed as r16014. Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53309</commentid>
    <comment_count>42</comment_count>
      <attachid>10198</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2006-08-24 11:37:57 -0700</bug_when>
    <thetext>Comment on attachment 10198
Last things required for a working Qt build!

This looks good, although I&apos;m going to reformat the ChangeLog entry just slightly. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53310</commentid>
    <comment_count>43</comment_count>
      <attachid>10198</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2006-08-24 11:44:31 -0700</bug_when>
    <thetext>Comment on attachment 10198
Last things required for a working Qt build!

Landed as r16016. Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53323</commentid>
    <comment_count>44</comment_count>
      <attachid>10199</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-24 12:19:49 -0700</bug_when>
    <thetext>Comment on attachment 10199
Offer a standalone testing tool for Qt platform.

Looks fine.  r=me.

You could come up with a more creative name though. ;)  Although QtLauncher does make it clear that it&apos;s for Qt and not any other platform/toolkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53378</commentid>
    <comment_count>45</comment_count>
      <attachid>10199</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-24 13:17:47 -0700</bug_when>
    <thetext>Comment on attachment 10199
Offer a standalone testing tool for Qt platform.

Landed in r16022, clearing review flag.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10106</attachid>
            <date>2006-08-17 13:22:36 -0700</date>
            <delta_ts>2006-08-18 04:25:18 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>platform-qt.diff</filename>
            <type>text/plain</type>
            <size>261590</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTkyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsNjIyIEBACisyMDA2LTA4LTE4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4ZWQ6IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA0NjcKKyAgICAgICAgV2ViS2l0IHNob3VsZCBoYXZlIFF0IHBsYXRmb3JtIHN1cHBvcnQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9BZmZpbmVUcmFuc2Zvcm1RdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzZXRNYXRyaXgpOgorICAgICAgICAoV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtOjptYXApOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtOjptYXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6aXNJ
ZGVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om0xMSk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om0xMik6CisgICAgICAgIChXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm06Om0yMSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
Om0yMik6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmR4KToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZHkpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6cm90YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybTo6c2hlYXIpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtOjpkZXQpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjppbnZlcnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBRTWF0cml4KToK
KyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKj0pOgorICAgICAgICAoV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciopOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Jy
b3dzZXJFeHRlbnNpb25RdC5jcHA6IEFkZGVkLgorICAgICAgICAoQnJvd3NlckV4dGVuc2lvblF0
OjpCcm93c2VyRXh0ZW5zaW9uUXQpOgorICAgICAgICAoQnJvd3NlckV4dGVuc2lvblF0OjpjYW5S
dW5Nb2RhbCk6CisgICAgICAgIChCcm93c2VyRXh0ZW5zaW9uUXQ6OmNyZWF0ZU5ld1dpbmRvdyk6
CisgICAgICAgIChCcm93c2VyRXh0ZW5zaW9uUXQ6OmNhblJ1bk1vZGFsTm93KToKKyAgICAgICAg
KEJyb3dzZXJFeHRlbnNpb25RdDo6cnVuTW9kYWwpOgorICAgICAgICAoQnJvd3NlckV4dGVuc2lv
blF0Ojpnb0JhY2tPckZvcndhcmQpOgorICAgICAgICAoQnJvd3NlckV4dGVuc2lvblF0OjpoaXN0
b3J5VVJMKToKKyAgICAgICAgKEJyb3dzZXJFeHRlbnNpb25RdDo6c2V0VHlwZWRJY29uVVJMKToK
KyAgICAgICAgKEJyb3dzZXJFeHRlbnNpb25RdDo6c2V0SWNvblVSTCk6CisgICAgICAgIChCcm93
c2VyRXh0ZW5zaW9uUXQ6OmdldEhpc3RvcnlMZW5ndGgpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L0Jyb3dzZXJFeHRlbnNpb25RdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DYW52
YXNRdC5jcHA6IEFkZGVkLgorICAgICAgICAoQ2FudmFzUXQ6OkNhbnZhc1F0KToKKyAgICAgICAg
KENhbnZhc1F0OjpwYWludEV2ZW50KToKKyAgICAgICAgKENhbnZhc1F0OjpzaXplSGludCk6Cisg
ICAgICAgIChDYW52YXNRdDo6bW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoQ2FudmFzUXQ6Om1v
dXNlUHJlc3NFdmVudCk6CisgICAgICAgIChDYW52YXNRdDo6bW91c2VSZWxlYXNlRXZlbnQpOgor
ICAgICAgICAoQ2FudmFzUXQ6OmtleVByZXNzRXZlbnQpOgorICAgICAgICAoQ2FudmFzUXQ6Omtl
eVJlbGVhc2VFdmVudCk6CisgICAgICAgIChDYW52YXNRdDo6aGFuZGxlS2V5RXZlbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L0NhbnZhc1F0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L0NvbG9yUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgUUNvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9Db21ib0JveFF0LmNwcDogQWRkZWQuCisgICAgICAgIChQbGF0Zm9ybUNvbWJv
Qm94OjpQbGF0Zm9ybUNvbWJvQm94KToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6On5QbGF0
Zm9ybUNvbWJvQm94KToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OnNldFBhcmVudFdpZGdl
dCk6CisgICAgICAgIChQbGF0Zm9ybUNvbWJvQm94OjpjbGVhcik6CisgICAgICAgIChQbGF0Zm9y
bUNvbWJvQm94OjphcHBlbmRJdGVtKToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OmFwcGVu
ZEdyb3VwTGFiZWwpOgorICAgICAgICAoUGxhdGZvcm1Db21ib0JveDo6YXBwZW5kU2VwYXJhdG9y
KToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OnNldEN1cnJlbnRJdGVtKToKKyAgICAgICAg
KFBsYXRmb3JtQ29tYm9Cb3g6OnNpemVIaW50KToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6
OmZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoUGxhdGZvcm1Db21ib0JveDo6c2V0RnJhbWVHZW9t
ZXRyeSk6CisgICAgICAgIChQbGF0Zm9ybUNvbWJvQm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAg
ICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OnNldEZvbnQpOgorICAgICAgICAoUGxhdGZvcm1Db21i
b0JveDo6Zm9jdXNQb2xpY3kpOgorICAgICAgICAoUGxhdGZvcm1Db21ib0JveDo6aXRlbVNlbGVj
dGVkKToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OnNldFdyaXRpbmdEaXJlY3Rpb24pOgor
ICAgICAgICAoUGxhdGZvcm1Db21ib0JveDo6cG9wdWxhdGUpOgorICAgICAgICAoUGxhdGZvcm1D
b21ib0JveDo6cG9wdWxhdGVNZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJR
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAgICAgIChX
ZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3Vyc29yOjpDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjp+Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cnNvcnM6OkN1cnNvcnM6OnNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6bW92ZUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpjcm9zc0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpoYW5k
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmlCZWFtQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OndhaXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6aGVscEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjplYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoUmVz
aXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoRWFzdFJlc2l6ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpub3J0aFdlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c291dGhSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6c291dGhFYXN0UmVzaXpl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OnNvdXRoV2VzdFJlc2l6ZUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjp3ZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRo
U291dGhSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6ZWFzdFdlc3RSZXNpemVDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6Om5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpjb2x1bW5SZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6cm93
UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GbG9hdFBvaW50UXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6b3BlcmF0b3IgUVBvaW50Rik6CisgICAgICAgICogcGxh
dGZvcm0vcXQvRmxvYXRSZWN0UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6b3BlcmF0b3Ig
UVJlY3RGKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Gb250Q2FjaGVRdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9Gb250RGF0YVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvRm9u
dFBsYXRmb3JtRGF0YVF0LmNwcDogQWRkZWQuCisgICAgICAgIChGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6
CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
IChGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoRm9udFBsYXRmb3Jt
RGF0YTo6c2V0Rm9udCk6CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhOjpmb250KToKKyAgICAg
ICAgKEZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvRm9udFF0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZyYW1lUXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6aXNGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6RnJhbWVRdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lUXQ6On5GcmFtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om9wZW5VUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVF0Ojp1cmxTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojp1c2Vy
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cnVuSmF2YVNjcmlwdEFsZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmxvY2F0aW9uYmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjcmVh
dGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpwYXNzV2hlZWxFdmVudFRvQ2hp
bGRXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cGFzc1N1YmZyYW1lRXZlbnRU
b1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om9iamVjdENvbnRlbnRUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVF0OjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVF0OjptZW51YmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVF0OjpwZXJzb25hbGJhclZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c3Rh
dHVzYmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojp0b29sYmFyVmlzaWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjcmVhdGVFbXB0eURvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om1hcmtlZFRleHRSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjppbmNvbWluZ1JlZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
UXQ6Om1pbWVUeXBlRm9yRmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6bWFy
a01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0
OjptYXJrTWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omxhc3RFdmVu
dElzTW91c2VVcCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpzYXZlRG9jdW1lbnRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpvcGVuVVJMUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjpzY2hlZHVsZUNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OnVuZm9jdXNXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Zm9jdXNXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6b3ZlcnJpZGVNZWRpYVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lUXQ6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6Z2V0T2JqZWN0SW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0
OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmNs
ZWFyVW5kb1JlZG9PcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omlzc3Vl
VW5kb0NvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6aXNzdWVSZWRvQ29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojppc3N1ZUN1dENvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6aXNzdWVDb3B5Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVF0Ojppc3N1ZVBhc3RlQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0
Ojppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnNo
b3VsZENoYW5nZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpwYXJ0Q2xl
YXJlZEluQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Y2FuR29CYWNrT3JGb3J3
YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmhhbmRsZWRPbmxvYWRFdmVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Y2FuUGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVRdDo6Y2FuUmVkbyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjYW5VbmRvKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnByaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lUXQ6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6a2V5RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cmVjZWl2ZWRSZXNw
b25zZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZWNlaXZlZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6cmVjZWl2ZWRBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lUXQ6OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZyYW1l
UXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaW4pOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L0dseXBoTWFwUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoTWFwOjpm
aWxsUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUXRDb21wb3NpdGlvbk1vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6dG9RdExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9RdExpbmVKb2luKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyOjpUcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllcjo6Y2xlYW51cCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0U2hhZG93OjpUZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRTaGFkb3c6OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kZXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0FyYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZvY3VzUmluZ0NsaXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhckZvY3VzUmluZ0NsaXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvSGVscGVyUXQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjp0b1FTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVFTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6dG9RRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
SW1hZ2VRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6aW5pdE5hdGl2ZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRlc3Ryb3lOYXRpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjppbnZhbGlkYXRlTmF0aXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdU
aWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9JbWFnZVNvdXJjZVF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJ
bWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6fkltYWdlU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9JbnRQb2ludFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6
SW50UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6Om9wZXJhdG9yIFFQb2ludCk6
CisgICAgICAgICogcGxhdGZvcm0vcXQvSW50UmVjdFF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRSZWN0OjpJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6Om9w
ZXJhdG9yIFFSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9JbnRTaXplUXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OkludFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50U2l6ZTo6b3BlcmF0b3IgUVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0tleWJv
YXJkQ29kZXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvTGluZUVkaXRRdC5jcHA6
IEFkZGVkLgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6UGxhdGZvcm1MaW5lRWRpdCk6Cisg
ICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0Ojp+UGxhdGZvcm1MaW5lRWRpdCk6CisgICAgICAgIChQ
bGF0Zm9ybUxpbmVFZGl0OjpzZXRQYXJlbnRXaWRnZXQpOgorICAgICAgICAoUGxhdGZvcm1MaW5l
RWRpdDo6c2V0Q29sb3JzKToKKyAgICAgICAgKFBsYXRmb3JtTGluZUVkaXQ6OnNldEFsaWdubWVu
dCk6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpzZXRDdXJzb3JQb3NpdGlvbik6CisgICAg
ICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpjdXJzb3JQb3NpdGlvbik6CisgICAgICAgIChQbGF0Zm9y
bUxpbmVFZGl0OjpzZXRFZGl0ZWQpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6ZWRpdGVk
KToKKyAgICAgICAgKFBsYXRmb3JtTGluZUVkaXQ6OnNldEZvbnQpOgorICAgICAgICAoUGxhdGZv
cm1MaW5lRWRpdDo6c2V0TWF4TGVuZ3RoKToKKyAgICAgICAgKFBsYXRmb3JtTGluZUVkaXQ6Om1h
eExlbmd0aCk6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpzZXRSZWFkT25seSk6CisgICAg
ICAgIChQbGF0Zm9ybUxpbmVFZGl0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFBsYXRmb3JtTGlu
ZUVkaXQ6OnNldFRleHQpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6dGV4dCk6CisgICAg
ICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpzZXRXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFBs
YXRmb3JtTGluZUVkaXQ6OnNlbGVjdEFsbCk6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0Ojpo
YXNTZWxlY3RlZFRleHQpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6c2VsZWN0aW9uU3Rh
cnQpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6c2VsZWN0ZWRUZXh0KToKKyAgICAgICAg
KFBsYXRmb3JtTGluZUVkaXQ6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChQbGF0Zm9ybUxpbmVF
ZGl0OjpzaXplRm9yQ2hhcmFjdGVyV2lkdGgpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6
YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0Ojpmb2N1c1BvbGlj
eSk6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3Vz
KToKKyAgICAgICAgKFBsYXRmb3JtTGluZUVkaXQ6OnNldExpdmVTZWFyY2gpOgorICAgICAgICAo
UGxhdGZvcm1MaW5lRWRpdDo6c2V0QXV0b1NhdmVOYW1lKToKKyAgICAgICAgKFBsYXRmb3JtTGlu
ZUVkaXQ6OnNldE1heFJlc3VsdHMpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6c2V0UGxh
Y2Vob2xkZXJTdHJpbmcpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6YWRkU2VhcmNoUmVz
dWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9MaXN0Qm94UXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okxpc3RCb3g6Okxpc3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJv
eDo6fkxpc3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJveDo6c2V0UGFyZW50V2lkZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OnNpemVGb3JOdW1iZXJPZkxpbmVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OnNldFNlbGVjdGlvbk1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGlzdEJveDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJveDo6ZG9uZUFw
cGVuZGluZ0l0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OnNldFNlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGlzdEJveDo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpMaXN0Qm94Ojppc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJveDo6c2V0V3JpdGluZ0RpcmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpMaXN0Qm94Ojpmb2N1c1BvbGljeSk6CisgICAgICAgIChXZWJD
b3JlOjpMaXN0Qm94OjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKToKKyAgICAgICAgKFdlYkNv
cmU6Okxpc3RCb3g6OmNsZWFyQ2FjaGVkVGV4dFJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpMaXN0Qm94OjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OmFwcGVuZEl0
ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1BhZ2VRdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6cm9vdFdpbmRvd0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6Ondp
bmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0V2luZG93UmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvUGF0aFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjb250YWlu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGF0aDo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om1vdmVUbyk6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRMaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVy
Q3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRBcmNUbyk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRk
QXJjKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGF0aDo6YWRkRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbGVhcik6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvUGxhdGZvcm1LZXlib2FyZEV2ZW50UXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJGb3JRdEtleUNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6d2luZG93c0tleUNvZGVGb3JLZXlFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvUGxhdGZvcm1Nb3VzZUV2ZW50UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3Jt
TW91c2VFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6UmVuZGVyVGhlbWVRdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjp0aGVtZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojppc0NvbnRyb2xTdHlsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y29udHJvbFN1cHBvcnRzVGludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjpjcmVhdGVQb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6YWRkSW50cmluc2ljTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpzdHlsZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWludEluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OmFwcGx5VGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRq
dXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZpZWxk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRUZXh0RmllbGQp
OgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyQ3VybC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJJbnRlcm5hbDo6flJlc291cmNlTG9hZGVy
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6On5SZXNvdXJjZUxv
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlcjo6YXNzZW1ibGVSZXNwb25zZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2hhcnNldCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlcjo6cmVjZWl2ZWRSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
UmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlck1hbmFnZXI6OlJlc291cmNlTG9hZGVyTWFuYWdlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlck1hbmFnZXI6OnVzZVNpbXBsZVRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6aGVhZGVyQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpyZW1vdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjphZGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpjYW5jZWwpOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L1Jlc291cmNlTG9hZGVyTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9TY3JlZW5RdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjp1c2Fi
bGVTY3JlZW5SZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6flNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0UGFyZW50V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2li
bGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzZXRDb250ZW50c1Bvcyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3Ojpjb250ZW50c1gpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVu
dHNZKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNIZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dmlld3BvcnRUb0NvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXc6OmNvbnRlbnRzVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3OjpzY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6aFNjcm9sbEJhck1vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dlNjcm9sbEJhck1vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxCYXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldEhTY3JvbGxCYXJNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXc6OnNldFZTY3JvbGxCYXJNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OnNldFNjcm9sbEJhcnNNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNl
dFN0YXRpY0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6YWRkQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUG9pbnRSZWN1cnNpdmVseSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjppbldpbmRvdyk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
U2hhcmVkVGltZXJMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRpbWVyRmly
ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcFNoYXJlZFRpbWVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9TaGFyZWRUaW1lckxpbnV4Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2hhcmVkVGltZXI6OlNoYXJlZFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVy
Ojp+U2hhcmVkVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXI6Omluc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXI6OmZpcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1N5c3RlbVRpbWVMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVu
dFRpbWUpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSmF2YUFwcGxldFdpZGdldDo6SmF2YUFwcGxldFdpZGdldCk6CisgICAg
ICAgIChGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoRm9udDo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpyZWZy
ZXNoUGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcik6CisgICAgICAg
IChJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2VsZWN0
QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6YWRkU2VhcmNoUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkOjpzZWxlY3RlZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRB
dXRvU2F2ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpjaGVja3NEZXNjZW5k
YW50c0ZvckZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0TWF4UmVzdWx0cyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGQ6OmVkaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Rmll
bGQ6OmZvY3VzUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6VGV4dEZpZWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6flRleHRGaWVsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0RmllbGQ6OnNldEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxk
OjpzZXRBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRXcml0aW5n
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6bWF4TGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0TWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRGaWVsZDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldFRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpjdXJzb3JQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZDo6c2V0RWRpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVs
ZDo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRQbGFjZWhv
bGRlclN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldENvbG9ycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNpemVGb3JDaGFyYWN0ZXJXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEZpZWxkOjpzZXRMaXZlU2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRl
cjo6U2xpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6c2l6ZUhpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2xpZGVyOjp+U2xpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6
c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyOjpzZXRNYXhWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTbGlkZXI6OnNldE1pblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNs
aWRlcjo6c2V0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXI6OnZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNsaWRlcjo6Zm9jdXNQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQmFyOjpTY3JvbGxCYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQmFyOjpzZXRTdGVw
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxCYXI6OnNjcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxCYXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEJhcjo6
c2V0S25vYlByb3BvcnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6
OlBsYXRmb3JtU2Nyb2xsQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsQmFy
Ojp+UGxhdGZvcm1TY3JvbGxCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxC
YXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsQmFyOjpoZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnNldEVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtU2Nyb2xsQmFyOjpzZXRTY3JvbGxCYXJWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVNjcm9sbEJhcjo6c2V0S25vYlByb3BvcnRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnNldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hlY2tDYWNoZU9iamVjdFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja0lmUmVsb2Fk
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJtaXRC
dXR0b25EZWZhdWx0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCk6CisgICAgICAg
IChXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5leHRT
ZW50ZW5jZUZyb21JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2VudGVuY2VCb3VuZGFy
eSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6CisgICAgICAgIChGcmFtZTo6c2V0TmVlZHNSZWFw
cGx5U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24pOgorICAgICAgICAoS0pTOjpVU3RyaW5nOjpV
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rp
b24pOgorICAgICAgICAoRnJhbWVWaWV3Ojp1cGRhdGVCb3JkZXIpOgorICAgICAgICAobG9hZFJl
c291cmNlSW50b0FycmF5KToKKyAgICAgICAgKFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2lu
SW5mb0ZvclBsdWdpbkF0SW5kZXgpOgorICAgICAgICAoUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5D
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5
cGUpOgorICAgICAgICAoRmlsZUJ1dHRvbjo6RmlsZUJ1dHRvbik6CisgICAgICAgIChGaWxlQnV0
dG9uOjpjbGljayk6CisgICAgICAgIChGaWxlQnV0dG9uOjpzaXplRm9yQ2hhcmFjdGVyV2lkdGgp
OgorICAgICAgICAoRmlsZUJ1dHRvbjo6Zm9jdXNQb2xpY3kpOgorICAgICAgICAoRmlsZUJ1dHRv
bjo6ZnJhbWVHZW9tZXRyeSk6CisgICAgICAgIChGaWxlQnV0dG9uOjpzZXRGaWxlbmFtZSk6Cisg
ICAgICAgIChGaWxlQnV0dG9uOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKEZpbGVCdXR0
b246OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoRmlsZUJ1dHRvbjo6c2V0RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydGVkS2V5U2l6ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9UZXh0RWRpdFF0LmNwcDogQWRkZWQuCisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0OjpQ
bGF0Zm9ybVRleHRFZGl0KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6On5QbGF0Zm9ybVRl
eHRFZGl0KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldFBhcmVudFdpZGdldCk6Cisg
ICAgICAgIChQbGF0Zm9ybVRleHRFZGl0OjpzZXRDb2xvcnMpOgorICAgICAgICAoUGxhdGZvcm1U
ZXh0RWRpdDo6c2V0QWxpZ25tZW50KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldExp
bmVIZWlnaHQpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2V0Q3Vyc29yUG9zaXRpb24p
OgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6Z2V0Q3Vyc29yUG9zaXRpb24pOgorICAgICAg
ICAoUGxhdGZvcm1UZXh0RWRpdDo6c2V0Rm9udCk6CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0
OjpzZXRSZWFkT25seSk6CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0Ojppc1JlYWRPbmx5KToK
KyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldERpc2FibGVkKToKKyAgICAgICAgKFBsYXRm
b3JtVGV4dEVkaXQ6OmlzRGlzYWJsZWQpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6aGFz
U2VsZWN0ZWRUZXh0KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldFRleHQpOgorICAg
ICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6dGV4dCk6CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0
Ojp0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OmZv
Y3VzUG9saWN5KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldFdvcmRXcmFwKToKKyAg
ICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OndvcmRXcmFwKToKKyAgICAgICAgKFBsYXRmb3JtVGV4
dEVkaXQ6OnNldFNjcm9sbEJhck1vZGVzKToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNl
dFdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2VsZWN0aW9u
U3RhcnQpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2VsZWN0aW9uRW5kKToKKyAgICAg
ICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFBsYXRm
b3JtVGV4dEVkaXQ6OnNldFNlbGVjdGlvbkVuZCk6CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0
OjpzZWxlY3RBbGwpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2V0U2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2l6ZVdpdGhDb2x1bW5zQW5kUm93cyk6
CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0OjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0UHJpdmF0ZTo6V2lkZ2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
aWRnZXRQcml2YXRlOjp+V2lkZ2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6V2lkZ2V0OjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpj
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpmcmFtZUdlb21ldHJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OldpZGdldDo6aGFzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
OjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNsZWFyRm9jdXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2V0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpoaWRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0UVdpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OnF3aWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRQYXJl
bnRXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYXJlbnRXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OldpZGdldDo6bWFwRnJvbUdsb2JhbCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6bG9ja0RyYXdpbmdGb2N1cyk6
CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnVubG9ja0RyYXdpbmdGb2N1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6ZW5h
YmxlRmx1c2hEcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6aXNFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0SXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OmRpc2FibGVGbHVzaERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0OjpzZXRFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Zm9jdXNQb2xpY3kp
OgorICAgICAgICAqIHBsYXRmb3JtL3F0L3F0LWVuY29kaW5ncy50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L3Rlc3QvQ01ha2VMaXN0cy50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3F0L3Rlc3QvdGVzdHVuaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKwog
MjAwNi0wOC0xNyAgRGF2aWQgSGFycmlzb24gIDxoYXJyaXNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogcXQvRm9udENhY2hlUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHF0L0ZvbnRDYWNoZVF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0ZvbnRDYWNoZVF0
LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKwor
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCit7CisJLy8g
bm8tb3AKK30KKworY29uc3QgRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoKQoreworICAgIHJldHVybiBuZXcgRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250LmZv
bnREZXNjcmlwdGlvbigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKSk7Cit9CisKK0ZvbnRQbGF0
Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dCYgZm9udCkKK3sKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVz
Y3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250JiBmb250
KQoreworICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdldCB0
aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLgorICAgIC8vIEZvciBub3cgd2UnbGwgcGljayB0
aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFueSBw
cmVmcy4KKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJUaW1lcyBOZXcgUm9tYW4i
KTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlw
dGlvbigpLCB0aW1lc1N0cik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKworfQorCisvLyB2aW06IHRz
PTQgc3c9NCBldApJbmRleDogcXQvVGV4dEVkaXRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvVGV4
dEVkaXRRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9UZXh0RWRpdFF0LmNwcAkoUmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVk
ZSA8UVRleHRFZGl0PgorCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAiR3JhcGhpY3NU
eXBlcy5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJUZXh0RGlyZWN0aW9u
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1UZXh0RWRpdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTog
VU5JTVBMRU1FTlRFRDogJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkK
KworUGxhdGZvcm1UZXh0RWRpdDo6UGxhdGZvcm1UZXh0RWRpdChXZWJDb3JlOjpXaWRnZXQqIHBh
cmVudCkKKyAgICA6IFdlYkNvcmU6OlNjcm9sbFZpZXcoKQoreworICAgIHFEZWJ1ZygiUGxhdGZv
cm1UZXh0RWRpdDo6UGxhdGZvcm1UZXh0RWRpdCgpLCB0aGlzPSVwIiwgdGhpcyk7Cit9CisKK1Bs
YXRmb3JtVGV4dEVkaXQ6On5QbGF0Zm9ybVRleHRFZGl0KCkKK3sKKyAgICBxRGVidWcoIlBsYXRm
b3JtVGV4dEVkaXQ6On5QbGF0Zm9ybVRleHRFZGl0KCkiKTsKK30KKwordm9pZCBQbGF0Zm9ybVRl
eHRFZGl0OjpzZXRQYXJlbnRXaWRnZXQoUVdpZGdldCogcGFyZW50KQoreworICAgIHFEZWJ1Zygi
UGxhdGZvcm1UZXh0RWRpdDo6c2V0UGFyZW50V2lkZ2V0KCksIHBhcmVudD0lcCIsIHBhcmVudCk7
CisgICAgV2lkZ2V0OjpzZXRQYXJlbnRXaWRnZXQocGFyZW50KTsKKworICAgIFFUZXh0RWRpdCAq
d2lkZ2V0ID0gbmV3IFFUZXh0RWRpdChwYXJlbnQsICIiKTsKKyAgICBzZXRRV2lkZ2V0KHdpZGdl
dCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1UZXh0RWRpdDo6c2V0Q29sb3JzKGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiBiYWNrZ3JvdW5kLCBjb25zdCBXZWJDb3JlOjpDb2xvciYgZm9yZWdyb3VuZCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNldEFs
aWdubWVudChXZWJDb3JlOjpIb3Jpem9udGFsQWxpZ25tZW50KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1UZXh0RWRpdDo6c2V0TGluZUhlaWdodChpbnQgbGlu
ZUhlaWdodCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtVGV4
dEVkaXQ6OnNldEN1cnNvclBvc2l0aW9uKGludCwgaW50KQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1UZXh0RWRpdDo6Z2V0Q3Vyc29yUG9zaXRpb24oaW50ICos
IGludCAqKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1UZXh0RWRpdDo6c2V0Rm9udChjb25zdCBXZWJDb3JlOjpGb250JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNldFJlYWRPbmx5KGJvb2wp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBQbGF0Zm9ybVRleHRFZGl0Ojpp
c1JlYWRPbmx5KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBQbGF0Zm9ybVRleHRFZGl0OjpzZXREaXNhYmxlZChib29sKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1UZXh0RWRpdDo6aXNEaXNh
YmxlZCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUGxhdGZvcm1UZXh0RWRpdDo6aGFzU2VsZWN0ZWRUZXh0KCkgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBQbGF0
Zm9ybVRleHRFZGl0OjpzZXRUZXh0KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworV2ViQ29yZTo6U3RyaW5nIFBsYXRmb3JtVGV4dEVkaXQ6OnRl
eHQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1dlYkNvcmU6OlN0cmlu
ZyBQbGF0Zm9ybVRleHRFZGl0Ojp0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitXaWRnZXQ6OkZvY3VzUG9saWN5IFBsYXRmb3JtVGV4
dEVkaXQ6OmZvY3VzUG9saWN5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2lkZ2V0Ojpmb2N1c1Bv
bGljeSgpOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNldFdvcmRXcmFwKFBsYXRmb3Jt
VGV4dEVkaXQ6OldyYXBTdHlsZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQbGF0
Zm9ybVRleHRFZGl0OjpXcmFwU3R5bGUgUGxhdGZvcm1UZXh0RWRpdDo6d29yZFdyYXAoKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1UZXh0RWRpdDo6
c2V0U2Nyb2xsQmFyTW9kZXMoV2ViQ29yZTo6U2Nyb2xsQmFyTW9kZSBoTW9kZSwgV2ViQ29yZTo6
U2Nyb2xsQmFyTW9kZSB2TW9kZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBsYXRmb3JtVGV4dEVkaXQ6OnNldFdyaXRpbmdEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dERpcmVj
dGlvbikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitpbnQgUGxhdGZvcm1UZXh0RWRp
dDo6c2VsZWN0aW9uU3RhcnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2ludCBQbGF0Zm9ybVRleHRFZGl0OjpzZWxlY3Rpb25FbmQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGxhdGZvcm1UZXh0RWRp
dDo6c2V0U2VsZWN0aW9uU3RhcnQoaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUGxhdGZvcm1UZXh0RWRpdDo6c2V0U2VsZWN0aW9uRW5kKGludCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNlbGVjdEFsbCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVRleHRFZGl0OjpzZXRT
ZWxlY3Rpb25SYW5nZShpbnQsIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitJ
bnRTaXplIFBsYXRmb3JtVGV4dEVkaXQ6OnNpemVXaXRoQ29sdW1uc0FuZFJvd3MoaW50IG51bUNv
bHVtbnMsIGludCBudW1Sb3dzKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K2Jvb2wgUGxhdGZvcm1UZXh0RWRpdDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIHZp
bTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9GcmFtZVF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvRnJh
bWVRdC5oCShSZXZpc2lvbiAwKQorKysgcXQvRnJhbWVRdC5oCShSZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhbWVRdF9IXwor
I2RlZmluZSBGcmFtZVF0X0hfCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZGVyQ2xpZW50LmgiCisKKyNpbmNsdWRlIDxxd2lkZ2V0Lmg+CisKK2NsYXNzIFFQYWlu
dEV2ZW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lUXRDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkZyYW1lUXRDbGllbnQoKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBvcGVuVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHN1Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBjb25zdCBGb3Jt
RGF0YSopID0gMDsKK307CisKK2NsYXNzIEZyYW1lUXQgOiBwdWJsaWMgRnJhbWUsIHB1YmxpYyBS
ZXNvdXJjZUxvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAgRnJhbWVRdChRV2lkZ2V0KiBwYXJl
bnQpOworICAgIEZyYW1lUXQoKTsKKyAgICB+RnJhbWVRdCgpOworCisgICAgdmlydHVhbCBib29s
IG9wZW5VUkwoY29uc3QgS1VSTCYpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJMUmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXJsU2VsZWN0ZWQoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3Ry
aW5nJik7CisKKyAgICB2aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBl
KGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICB2aXJ0dWFsIFBsdWdp
biogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwg
RnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1l
bnQqLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsKKwkKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVDbG9zZSgpOworCisgICAgdmlydHVhbCB2b2lkIHVuZm9jdXNXaW5kb3coKTsKKworICAgIHZp
cnR1YWwgdm9pZCBmb2N1c1dpbmRvdygpOworCisgICAgdmlydHVhbCB2b2lkIHNhdmVEb2N1bWVu
dFN0YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVEb2N1bWVudFN0YXRlKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOworCisgICAgdmly
dHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAg
IHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29uZmlybShjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OworICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgbG9jYXRpb25iYXJWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIG1lbnVi
YXJWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIHBlcnNvbmFsYmFyVmlzaWJsZSgpOworICAg
IHZpcnR1YWwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIHRvb2xi
YXJWaXNpYmxlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlRW1wdHlEb2N1bWVudCgpOwor
ICAgIHZpcnR1YWwgUmFuZ2UqIG1hcmtlZFRleHRSYW5nZSgpIGNvbnN0OworCisgICAgdmlydHVh
bCBTdHJpbmcgaW5jb21pbmdSZWZlcnJlcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHVz
ZXJBZ2VudCgpIGNvbnN0OworCisgICAgdmlydHVhbCBTdHJpbmcgbWltZVR5cGVGb3JGaWxlTmFt
ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzSW5BZGphY2VudFdvcmRzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOworICAgIHZpcnR1YWwg
dm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImKTsKKworICAg
IHZpcnR1YWwgYm9vbCBsYXN0RXZlbnRJc01vdXNlVXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwg
Ym9vbCBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyAmLCBGcmFtZSogc3ViZnJhbWUgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFzc1doZWVs
RXZlbnRUb0NoaWxkV2lkZ2V0KE5vZGUqKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJyaWRl
TWVkaWFUeXBlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEtKUzo6QmluZGluZ3M6Okluc3RhbmNl
KiBnZXRFbWJlZEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopOworICAgIHZpcnR1YWwgS0pTOjpC
aW5kaW5nczo6SW5zdGFuY2UqIGdldE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopOwor
ICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdldEFwcGxldEluc3RhbmNlRm9y
V2lkZ2V0KFdpZGdldCopOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQ29tbWFuZEZvclVu
ZG8oY29uc3QgRWRpdENvbW1hbmRQdHImKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21t
YW5kRm9yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciYpOworICAgIHZpcnR1YWwgdm9pZCBjbGVh
clVuZG9SZWRvT3BlcmF0aW9ucygpOworICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVVuZG9Db21tYW5k
KCk7CisgICAgdmlydHVhbCB2b2lkIGlzc3VlUmVkb0NvbW1hbmQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgaXNzdWVDdXRDb21tYW5kKCk7CisgICAgdmlydHVhbCB2b2lkIGlzc3VlQ29weUNvbW1hbmQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUNvbW1hbmQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgaXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCk7CisgICAgdmlydHVhbCB2b2lkIGlz
c3VlVHJhbnNwb3NlQ29tbWFuZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXNwb25kVG9DaGFuZ2Vk
U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImIG9sZFNlbGVjdGlvbiwgYm9vbCBj
bG9zZVR5cGluZyk7CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygp
OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9u
Q29udHJvbGxlciYgb2xkU2VsZWN0aW9uLCBjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBuZXdT
ZWxlY3Rpb24sIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIHBhcnRDbGVhcmVkSW5CZWdpbigpOworCisgICAgdmlydHVhbCBi
b29sIGNhbkdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVkT25sb2FkRXZlbnRzKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUGFzdGUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVkbygpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBjYW5VbmRvKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHByaW50KCk7CisgICAgdmly
dHVhbCBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsKKworICAgIGJvb2wga2V5RXZl
bnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50ICZrZXlFdmVudCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcmVjZWl2ZWRSZXNwb25zZShSZXNvdXJjZUxvYWRlciosIFBsYXRmb3JtUmVzcG9uc2Up
OworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZERhdGEoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBj
aGFyKiwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9h
ZGVyKixQbGF0Zm9ybURhdGEpOworCisgICAgdm9pZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IElu
dFJlY3QmKTsKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0KCk7CisgICAgdmlydHVhbCBib29sIHBh
c3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCopOworICAgIEZyYW1lUXRDbGllbnQqIG1f
Y2xpZW50OworICAgIAorfTsKKworaW5saW5lIEZyYW1lUXQqIFdpbihGcmFtZSogZnJhbWUpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lUXQqPihmcmFtZSk7IH0KK2lubGluZSBjb25zdCBGcmFt
ZVF0KiBXaW4oY29uc3QgRnJhbWUqIGZyYW1lKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBG
cmFtZVF0Kj4oZnJhbWUpOyB9CisKK30KKworI2VuZGlmCisKKy8vIHZpbTogdHM9NCBzdz00IGV0
CkluZGV4OiBxdC9JbWFnZVNvdXJjZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9JbWFnZVNvdXJj
ZVF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0ltYWdlU291cmNlUXQuY3BwCShSZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxs
ZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6
YWNrQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCisKKyNpbmNsdWRlICJHSUZJbWFn
ZURlY29kZXIuaCIKKyNpbmNsdWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiUE5H
SW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAi
SUNPSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiWEJNSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNs
dWRlIDxRSW1hZ2U+CisjaW5jbHVkZSA8UURlYnVnPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlRGVjb2RlciogY3JlYXRlRGVjb2Rlcihjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7
CisgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5k
IG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcgd2l0aC4KKyAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXpl
KCk7CisgICAgaWYgKGxlbmd0aCA8IDQpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogdUNvbnRlbnRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKWRhdGEuZGF0
YSgpOworICAgIGNvbnN0IGNoYXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBH
SUZzIGJlZ2luIHdpdGggR0lGOCg3IG9yIDkpLgorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAi
R0lGOCIsIDQpID09IDApCisgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7CisK
KyAgICAvLyBUZXN0IGZvciBQTkcuCisgICAgaWYgKHVDb250ZW50c1swXT09MHg4OSAmJgorICAg
ICAgICB1Q29udGVudHNbMV09PTB4NTAgJiYKKyAgICAgICAgdUNvbnRlbnRzWzJdPT0weDRFICYm
CisgICAgICAgIHVDb250ZW50c1szXT09MHg0NykKKyAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFn
ZURlY29kZXIoKTsKKworICAgIC8vIEpQRUcKKyAgICBpZiAodUNvbnRlbnRzWzBdPT0weEZGICYm
CisgICAgICAgIHVDb250ZW50c1sxXT09MHhEOCAmJgorICAgICAgICB1Q29udGVudHNbMl09PTB4
RkYpCisgICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcigpOworCisgICAgLy8gQk1Q
CisgICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJCTSIsIDIpID09IDApCisgICAgICAgIHJldHVy
biBuZXcgQk1QSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRo
IGEgMi1ieXRlIDAgZm9sbG93ZWQgYnkgYSAyLWJ5dGUgMS4KKyAgICAvLyBDVVJzIGJlZ2luIHdp
dGggMi1ieXRlIDAgZm9sbG93ZWQgYnkgMi1ieXRlIDIuCisgICAgaWYgKCFtZW1jbXAoY29udGVu
dHMsICJcMDAwXDAwMFwwMDFcMDAwIiwgNCkgfHwKKyAgICAgICAgIW1lbWNtcChjb250ZW50cywg
IlwwMDBcMDAwXDAwMlwwMDAiLCA0KSkKKyAgICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29k
ZXIoKTsKKworICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCisgICAgaWYgKGxl
bmd0aCA+PSA4ICYmIHN0cm5jbXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09IDApCisgICAg
ICAgIHJldHVybiBuZXcgWEJNSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBHaXZlIHVwLiBXZSBk
b24ndCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KKyAgICByZXR1cm4gMDsKK30KKworSW1h
Z2VTb3VyY2U6OkltYWdlU291cmNlKCkKKyAgOiBtX2RlY29kZXIoMCkKK3t9CisKK0ltYWdlU291
cmNlOjp+SW1hZ2VTb3VyY2UoKQoreworICAgIGRlbGV0ZSBtX2RlY29kZXI7Cit9CisKK2Jvb2wg
SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVy
OworfQorCit2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiogZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgLy8gTWFrZSB0aGUgZGVjb2RlciBieSBz
bmlmZmluZyB0aGUgYnl0ZXMuCisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBleGFtaW5lIHRoZSBk
YXRhIGFuZCBpbnN0YW50aWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYXBwcm9wcmlhdGUgZGVjb2Rl
ciBwbHVnaW4uCisgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8g
ZGV0ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCisgICAg
Ly8gbWFkZS4KKyAgICBtX2RlY29kZXIgPSBjcmVhdGVEZWNvZGVyKCpkYXRhKTsKKyAgICBpZiAo
IW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGVjb2Rlci0+c2V0RGF0YSgqZGF0
YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxh
YmxlKCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxlKCk7Cit9CisKK0ludFNpemUgSW1h
Z2VTb3VyY2U6OnNpemUoKSBjb25zdAoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+c2l6ZSgpOworfQorCitp
bnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCit7CisgICAgaWYgKCFtX2RlY29kZXIp
CisgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKworICAgIHJldHVybiBtX2RlY29kZXIt
PnJlcGV0aXRpb25Db3VudCgpOworfQorCitzaXplX3QgSW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2RlY29kZXIgPyBtX2RlY29kZXItPmZyYW1lQ291bnQo
KSA6IDA7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUF0SW5k
ZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0
SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdC
QTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFFJbWFnZSAq
aW1nID0gIG5ldyBRSW1hZ2UoKHVuc2lnbmVkIGNoYXIqKWJ1ZmZlci0+Ynl0ZXMoKS5kYXRhKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKCkud2lkdGgoKSwgYnVmZmVyLT5o
ZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMik7CisgICAgcmV0dXJuIGltZzsKK30KKworZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJh
bWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1
cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICByZXR1cm4gYnVmZmVyLT5kdXJhdGlvbigpIC8gMTAwMC4wZjsKK30KKworYm9vbCBJbWFnZVNv
dXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9k
ZWNvZGVyIHx8ICFtX2RlY29kZXItPnN1cHBvcnRzQWxwaGEoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVy
QXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBS
R0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBidWZmZXItPmhhc0FscGhhKCk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
SW5kZXg6IHF0L0ludFBvaW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0ludFBvaW50UXQuY3Bw
CShSZXZpc2lvbiAwKQorKysgcXQvSW50UG9pbnRRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUu
b3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCisKKyNpbmNsdWRlIDxRUG9pbnQ+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW50UG9pbnQ6OkludFBvaW50KGNvbnN0IFFQb2ludCYgcCkgOiBt
X3gocC54KCkpLCBtX3kocC55KCkpCit7Cit9CisKK0ludFBvaW50OjpvcGVyYXRvciBRUG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBRUG9pbnQobV94LCBtX3kpOworfQorCit9CisKKy8vIHZp
bTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gPHNhbmRmZWxkQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiUGF0aC5oIgorCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8
UVBhaW50ZXJQYXRoPgorI2luY2x1ZGUgPFFQYWludERldmljZT4KKyNpbmNsdWRlIDxRU3RhY2s+
CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAi
SGVscGVyUXQuaCIKKworI2lmbmRlZiBNX1BJCisjZGVmaW5lIE1fUEkgMy4xNDE1OTI2NTM1ODk3
OTMyMzg0NgorI2VuZGlmCisKKyNpZiBTVkdfU1VQUE9SVAorI2luY2x1ZGUgIktSZW5kZXJpbmdE
ZXZpY2VRdC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGUgdG9RdENvbXBvc2l0aW9uTW9kZShDb21wb3NpdGVPcGVyYXRv
ciBvcCkKK3sKKyAgICBzd2l0Y2gob3ApIHsKKyAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgorICAg
ICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9DbGVhcjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb21wb3NpdGVDb3B5OgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZV9Tb3VyY2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRl
U291cmNlT3ZlcjoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291
cmNlT3ZlcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKKyAg
ICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlSW47CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3V0OgorICAgICAgICByZXR1cm4gUVBh
aW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdXQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ29tcG9zaXRlU291cmNlQXRvcDoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3Np
dGlvbk1vZGVfU291cmNlQXRvcDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVE
ZXN0aW5hdGlvbk92ZXI6CisgICAgICAgIHJldHVybiBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2Rl
X0Rlc3RpbmF0aW9uT3ZlcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0
aW5hdGlvbkluOgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0
aW5hdGlvbkluOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9u
T3V0OgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlv
bk91dDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkF0b3A6
CisgICAgICAgIHJldHVybiBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uQXRv
cDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVYT1I6CisgICAgICAgIHJldHVy
biBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1hvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBDb21wb3NpdGVQbHVzRGFya2VyOgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9Tb3VyY2VPdmVyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZUhp
Z2hsaWdodDoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNl
T3ZlcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVQbHVzTGlnaHRlcjoKKyAg
ICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3ZlcjsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVf
U291cmNlT3ZlcjsKK30KKworc3RhdGljIFF0OjpQZW5DYXBTdHlsZSB0b1F0TGluZUNhcChMaW5l
Q2FwIGxjKQoreworICAgIHN3aXRjaChsYykgeworICAgIGNhc2UgQnV0dENhcDoKKyAgICAgICAg
cmV0dXJuIFF0OjpGbGF0Q2FwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJvdW5kQ2FwOgor
ICAgICAgICByZXR1cm4gUXQ6OlJvdW5kQ2FwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNx
dWFyZUNhcDoKKyAgICAgICAgcmV0dXJuIFF0OjpTcXVhcmVDYXA7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICByZXR1cm4gUXQ6OkZsYXRDYXA7Cit9CisKK3N0YXRpYyBRdDo6UGVuSm9pblN0
eWxlIHRvUXRMaW5lSm9pbihMaW5lSm9pbiBsaikKK3sKKyAgICBzd2l0Y2gobGopIHsKKyAgICBj
YXNlIE1pdGVySm9pbjoKKyAgICAgICAgcmV0dXJuIFF0OjpTdmdNaXRlckpvaW47CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUm91bmRKb2luOgorICAgICAgICByZXR1cm4gUXQ6OlJvdW5kSm9p
bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCZXZlbEpvaW46CisgICAgICAgIHJldHVybiBR
dDo6QmV2ZWxKb2luOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFF0OjpNaXRl
ckpvaW47Cit9CisKK3N0cnVjdCBUcmFuc3BhcmVuY3lMYXllcgoreworICAgIFRyYW5zcGFyZW5j
eUxheWVyKGNvbnN0IFFQYWludGVyICZwLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgewor
ICAgICAgICBwaXhtYXAgPSBRUGl4bWFwKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBwYWludGVy
ID0gbmV3IFFQYWludGVyKCZwaXhtYXApOworICAgICAgICBwYWludGVyLT5zZXRQZW4ocC5wZW4o
KSk7CisgICAgICAgIHBhaW50ZXItPnNldEJydXNoKHAuYnJ1c2goKSk7CisgICAgICAgIHBhaW50
ZXItPnNldE1hdHJpeChwLm1hdHJpeCgpKTsKKyAgICB9CisgICAgVHJhbnNwYXJlbmN5TGF5ZXIo
KQorICAgICAgICA6IHBhaW50ZXIoMCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjbGVhbnVw
KCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBwYWludGVyOworICAgIH0KKworICAgIFFQaXhtYXAg
ICBwaXhtYXA7CisgICAgUVBhaW50ZXIgKnBhaW50ZXI7CisgICAgcXJlYWwgICAgIG9wYWNpdHk7
Cit9OworCitzdHJ1Y3QgVGV4dFNoYWRvdworeworICAgIFRleHRTaGFkb3coKSA6IHgoMCksIHko
MCksIGJsdXIoMCkge307CisgICAgYm9vbCBpc051bGwoKSB7IHJldHVybiAheCAmJiAheSAmJiAh
Ymx1cjsgfQorICAgIGludCB4OworICAgIGludCB5OworICAgIGludCBibHVyOworICAgIENvbG9y
IGNvbG9yOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlIHsKK3B1
YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIgKnBhaW50
ZXIpOworICAgIH5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKTsKKworICAgIGlubGlu
ZSBRUGFpbnRlciAmcCgpCisgICAgeworICAgICAgICBpZiAobGF5ZXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGlmIChyZWRpcmVjdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKnJlZGlyZWN0
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAqcGFpbnRlcjsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICpsYXllcnMudG9wKCkucGFpbnRlcjsKKyAg
ICB9CisKKyAgICBRUGFpbnREZXZpY2UgKmRldmljZTsKKworICAgIFFTdGFjazxUcmFuc3BhcmVu
Y3lMYXllcj4gbGF5ZXJzOworICAgIFFQYWludGVyICpyZWRpcmVjdDsKKworICAgIEludFJlY3Qg
ICAgICAgZm9jdXNSaW5nQ2xpcDsKKyAgICBUZXh0U2hhZG93ICAgIHNoYWRvdzsKK3ByaXZhdGU6
CisgICAgUVBhaW50ZXIgICAgICAqcGFpbnRlcjsKK307CisKKworR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIgKnAp
CisgICAgOiBkZXZpY2UocC0+ZGV2aWNlKCkpCit7CisgICAgcGFpbnRlciA9IHA7CisgICAgcmVk
aXJlY3QgPSAwOworCisgICAgLy8gR29vZCBsb29raW5nIFNWR3MgcGxlYXNlLi4uCisgICAgcGFp
bnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKK30KKworR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRl
eHRQcml2YXRlKCkpLAorICAgICAgbV9kYXRhKG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoY29udGV4dCkpCit7CisgICAgc2V0UGFpbnRpbmdEaXNhYmxlZCghY29udGV4dCk7Cit9
CisKK0dyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCit7CisgICAgIHdoaWxlICgh
bV9kYXRhLT5sYXllcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CisgICAgfQorCisgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9jb21tb24p
OworICAgIGRlbGV0ZSBtX2RhdGE7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICZtX2Rh
dGEtPnAoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkK
K3sKKyAgICBtX2RhdGEtPnAoKS5zYXZlKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCit7CisgICAgbV9kYXRhLT5wKCkucmVzdG9yZSgpOworfQor
CisvKiBGSVhNRTogRElTQUJMRUQgV0hJTEUgTUVSR0lORyBCQUNLIEZST00gVU5JVHkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dFNoYWRvdyhjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEludFBvaW50JiBwb2ludCwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9kYXRhLT5zaGFk
b3cuaXNOdWxsKCkpIHJldHVybjsKKworICAgIFRleHRTaGFkb3cgKnNoYWRvdyA9ICZtX2RhdGEt
PnNoYWRvdzsKKworICAgIGlmIChzaGFkb3ctPmJsdXIgPD0gMCkgeworICAgICAgICBQZW4gcCA9
IHBlbigpOworICAgICAgICBzZXRQZW4oc2hhZG93LT5jb2xvcik7CisgICAgICAgIGZvbnQoKS5k
cmF3VGV4dCh0aGlzLCBydW4sIHN0eWxlLCBJbnRQb2ludChwb2ludC54KCkgKyBzaGFkb3ctPngs
IHBvaW50LnkoKSArIHNoYWRvdy0+eSkpOworICAgICAgICBzZXRQZW4ocCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgY29uc3QgaW50IHRoaWNrbmVzcyA9IHNoYWRvdy0+Ymx1cjsKKyAgICAgICAg
Ly8gIyMjIE9QVElNSVpFOiBsaW1pdCB0aGUgYXJlYSB0byBvbmx5IHRoZSBhY3R1YWxseSBwYWlu
dGVkIGFyZWEgKyAyKnRoaWNrbmVzcworICAgICAgICBjb25zdCBpbnQgdyA9IG1fZGF0YS0+cCgp
LmRldmljZSgpLT53aWR0aCgpOworICAgICAgICBjb25zdCBpbnQgaCA9IG1fZGF0YS0+cCgpLmRl
dmljZSgpLT5oZWlnaHQoKTsKKyAgICAgICAgY29uc3QgUVJnYiBjb2xvciA9IHFSZ2IoMjU1LDI1
NSwyNTUpOworICAgICAgICBjb25zdCBRUmdiIGJnQ29sb3IgPSBxUmdiKDAsMCwwKTsKKyAgICAg
ICAgUUltYWdlIGltYWdlKFFTaXplKHcsIGgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAg
ICAgICBpbWFnZS5maWxsKGJnQ29sb3IpOworICAgICAgICBRUGFpbnRlciBwOworCisgICAgICAg
IFBlbiBfcGVuID0gcGVuKCk7CisgICAgICAgIHAuYmVnaW4oJmltYWdlKTsKKyAgICAgICAgc2V0
UGVuKGNvbG9yKTsKKyAgICAgICAgbV9kYXRhLT5yZWRpcmVjdCA9ICZwOworICAgICAgICBmb250
KCkuZHJhd1RleHQodGhpcywgcnVuLCBzdHlsZSwgSW50UG9pbnQocG9pbnQueCgpICsgc2hhZG93
LT54LCBwb2ludC55KCkgKyBzaGFkb3ctPnkpKTsKKyAgICAgICAgbV9kYXRhLT5yZWRpcmVjdCA9
IDA7CisgICAgICAgIHAuZW5kKCk7CisgICAgICAgIHNldFBlbihfcGVuKTsKKworICAgICAgICBp
bnQgbWQgPSB0aGlja25lc3MqdGhpY2tuZXNzOyAvLyBtYXgtZGlzdF4yCisKKyAgICAgICAgLy8g
Ymx1ciBtYXAvcHJlY2FsY3VsYXRlZCBzaGFkb3ctZGVjYXkKKyAgICAgICAgZmxvYXQgKmJtYXAg
PSAoZmxvYXQqKWFsbG9jYShzaXplb2YoZmxvYXQpKihtZCsxKSk7CisgICAgICAgIGZvcihpbnQg
bj0wOyBuPD1tZDsgbisrKSB7CisgICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgZiA9
IG4vKGZsb2F0KShtZCsxKTsKKyAgICAgICAgICAgIGYgPSAxLjAgLSBmKmY7CisgICAgICAgICAg
ICBibWFwW25dID0gZjsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGZhY3RvciA9IDAuMDsg
Ly8gbWF4aW1hbCBwb3RlbnRpYWwgb3BhY2l0eS1zdW0KKyAgICAgICAgZm9yKGludCBuPS10aGlj
a25lc3M7IG48PXRoaWNrbmVzczsgbisrKQorICAgICAgICAgICAgZm9yKGludCBtPS10aGlja25l
c3M7IG08PXRoaWNrbmVzczsgbSsrKSB7CisgICAgICAgICAgICAgICAgaW50IGQgPSBuKm4rbSpt
OworICAgICAgICAgICAgICAgIGlmIChkPD1tZCkKKyAgICAgICAgICAgICAgICAgICAgZmFjdG9y
ICs9IGJtYXBbZF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgLy8gYWxwaGEgbWFwCisgICAg
ICAgIGZsb2F0KiBhbWFwID0gKGZsb2F0KilhbGxvY2Eoc2l6ZW9mKGZsb2F0KSooaCp3KSk7Cisg
ICAgICAgIG1lbXNldChhbWFwLCAwLCBoKncqKHNpemVvZihmbG9hdCkpKTsKKyAgICAgICAgZm9y
KGludCBqPXRoaWNrbmVzczsgajxoLXRoaWNrbmVzczsgaisrKSB7CisgICAgICAgICAgICBmb3Io
aW50IGk9dGhpY2tuZXNzOyBpPHctdGhpY2tuZXNzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBR
UmdiIGNvbD0gaW1hZ2UucGl4ZWwoaSxqKTsKKyAgICAgICAgICAgICAgICBpZiAoY29sID09IGJn
Q29sb3IpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZsb2F0IGcgPSBxQWxwaGEoY29sKTsK
KyAgICAgICAgICAgICAgICBnID0gZy8yNTU7CisgICAgICAgICAgICAgICAgZm9yKGludCBuPS10
aGlja25lc3M7IG48PXRoaWNrbmVzczsgbisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcihp
bnQgbT0tdGhpY2tuZXNzOyBtPD10aGlja25lc3M7IG0rKykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGQgPSBuKm4rbSptOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQ+bWQp
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZiA9IGJtYXBbZF07Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhbWFwWyhpK20pKyhqK24pKnddICs9IChnKmYpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgUUltYWdlIHJlcyhRU2l6ZSh3LGgpLFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMik7CisgICAgICAgIGludCByID0gc2hhZG93LT5jb2xvci5yZWQoKTsKKyAgICAgICAgaW50
IGcgPSBzaGFkb3ctPmNvbG9yLmdyZWVuKCk7CisgICAgICAgIGludCBiID0gc2hhZG93LT5jb2xv
ci5ibHVlKCk7CisgICAgICAgIGludCBhMSA9IHNoYWRvdy0+Y29sb3IuYWxwaGEoKTsKKworICAg
ICAgICAvLyBhcmJpdHJhdHJ5IGZhY3RvciBhZGp1c3RtZW50IHRvIG1ha2Ugc2hhZG93cyBtb3Jl
IHNvbGlkLgorICAgICAgICBmYWN0b3IgPSAxLjMzMy9mYWN0b3I7CisKKyAgICAgICAgZm9yKGlu
dCBqPTA7IGo8aDsgaisrKSB7CisgICAgICAgICAgICBmb3IoaW50IGk9MDsgaTx3OyBpKyspIHsK
KyAgICAgICAgICAgICAgICBpbnQgYSA9IChpbnQpKGFtYXBbaStqKnddICogZmFjdG9yICogYTEp
OworICAgICAgICAgICAgICAgIGlmIChhID4gMjU1KSBhID0gMjU1OworICAgICAgICAgICAgICAg
IHJlcy5zZXRQaXhlbChpLGosIHFSZ2JhKHIsZyxiLGEpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIG1fZGF0YS0+cCgpLmRyYXdJbWFnZSgwLCAwLCByZXMsIDAsIDAsIC0x
LCAtMSwgUXQ6OkRpZmZ1c2VBbHBoYURpdGhlciB8IFF0OjpDb2xvck9ubHkgfCBRdDo6UHJlZmVy
RGl0aGVyKTsKKyAgICB9Cit9CisqLworCisvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0
aCBhIHN0cm9rZWQgYm9yZGVyLgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fZGF0YS0+cCgpLmRyYXdSZWN0KHJlY3QpOworfQorCisvLyBGSVhNRTog
Tm93IHRoYXQgdGhpcyBpcyByZWZhY3RvcmVkLCBpdCBzaG91bGQgYmUgc2hhcmVkIGJ5IGFsbCBj
b250ZXh0cy4KK3N0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRlcmllcyhGbG9hdFBv
aW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlbjo6UGVuU3R5bGUmIHBlblN0eWxl
KQoreworICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRoZSBhcHByb3By
aWF0ZSB4L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRpYworICAgIC8vIHdvcmtzIG91dC4g
IEZvciBleGFtcGxlLCB3aXRoIGEgYm9yZGVyIHdpZHRoIG9mIDMsIEtIVE1MIHdpbGwgcGFzcyB1
cyAoeTEreTIpLzIsIGUuZy4sCisgICAgLy8gKDUwKzUzKS8yID0gMTAzLzIgPSA1MSB3aGVuIHdl
IHdhbnQgNTEuNS4gIEl0IGlzIGFsd2F5cyB0cnVlIHRoYXQgYW4gZXZlbiB3aWR0aCBnYXZlCisg
ICAgLy8gdXMgYSBwZXJmZWN0IHBvc2l0aW9uLCBidXQgYW4gb2RkIHdpZHRoIGdhdmUgdXMgYSBw
b3NpdGlvbiB0aGF0IGlzIG9mZiBieSBleGFjdGx5IDAuNS4KKyAgICBpZiAocGVuU3R5bGUgPT0g
UGVuOjpEb3RMaW5lIHx8IHBlblN0eWxlID09IFBlbjo6RGFzaExpbmUpIHsKKyAgICAgICAgaWYg
KHAxLngoKSA9PSBwMi54KCkpIHsKKyAgICAgICAgICAgIHAxLnNldFkocDEueSgpICsgc3Ryb2tl
V2lkdGgpOworICAgICAgICAgICAgcDIuc2V0WShwMi55KCkgLSBzdHJva2VXaWR0aCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBwMS5zZXRYKHAxLngoKSArIHN0cm9r
ZVdpZHRoKTsKKyAgICAgICAgICAgIHAyLnNldFgocDIueCgpIC0gc3Ryb2tlV2lkdGgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCgoaW50KXN0cm9rZVdpZHRoKSUyKSB7CisgICAgICAg
IGlmIChwMS54KCkgPT0gcDIueCgpKSB7CisgICAgICAgICAgICAvLyBXZSdyZSBhIHZlcnRpY2Fs
IGxpbmUuICBBZGp1c3Qgb3VyIHguCisgICAgICAgICAgICBwMS5zZXRYKHAxLngoKSArIDAuNSk7
CisgICAgICAgICAgICBwMi5zZXRYKHAyLngoKSArIDAuNSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvLyBXZSdyZSBhIGhvcml6b250YWwgbGluZS4gQWRqdXN0IG91
ciB5LgorICAgICAgICAgICAgcDEuc2V0WShwMS55KCkgKyAwLjUpOworICAgICAgICAgICAgcDIu
c2V0WShwMi55KCkgKyAwLjUpOworICAgICAgICB9CisgICAgfQorfQorCisvLyBUaGlzIGlzIG9u
bHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUo
Y29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgRmxvYXRQb2ludCBw
MSA9IHBvaW50MTsKKyAgICBGbG9hdFBvaW50IHAyID0gcG9pbnQyOworICAgIGFkanVzdExpbmVU
b1BpeGVsQm91bmRlcmllcyhwMSwgcDIsIHBlbigpLndpZHRoKCksIHBlbigpLnN0eWxlKCkpOwor
ICAgIG1fZGF0YS0+cCgpLmRyYXdMaW5lKHAxLCBwMik7Cit9CisKKy8vIFRoaXMgbWV0aG9kIGlz
IG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fZGF0YS0+
cCgpLmRyYXdFbGxpcHNlKHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Fy
Yyhjb25zdCBJbnRSZWN0JiByZWN0LCBmbG9hdCB0aGlja25lc3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgY29uc3QgUVBlbiBvbGRQ
ZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAgICBRUGVuIG5QZW4gPSBvbGRQZW47CisgICAgblBl
bi5zZXRXaWR0aEYodGhpY2tuZXNzKTsKKyAgICBtX2RhdGEtPnAoKS5zZXRQZW4oblBlbik7Cisg
ICAgbV9kYXRhLT5wKCkuZHJhd0FyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4pOworICAg
IG1fZGF0YS0+cCgpLnNldFBlbihvbGRQZW4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEludFBvaW50KiBwb2ludHMp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
ZGF0YS0+cCgpLmRyYXdDb252ZXhQb2x5Z29uKChRUG9pbnQqKXBvaW50cywgbnBvaW50cyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgYykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9kYXRhLT5wKCkuZmlsbFJlY3QocmVjdCwgUUNvbG9yKGMucmVkKCksIGMu
Z3JlZW4oKSwgYy5ibHVlKCksIGMuYWxwaGEoKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYykKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9kYXRhLT5w
KCkuZmlsbFJlY3QocmVjdCwgUUNvbG9yKGMucmVkKCksIGMuZ3JlZW4oKSwgYy5ibHVlKCksIGMu
YWxwaGEoKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkQ2xpcChjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBRUGFpbnRlclBhdGggcGF0aDsKKyAgICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3Qp
KTsKKyAgICBtX2RhdGEtPnAoKS5zZXRDbGlwUGF0aChwYXRoLCBRdDo6VW5pdGVDbGlwKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgQ29sb3ImIGNvbG9y
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rm9jdXNSaW5n
Q2xpcChjb25zdCBJbnRSZWN0ICZyKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2RhdGEtPmZvY3VzUmluZ0NsaXAgPSByOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJGb2N1c1JpbmdDbGlwKCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9kYXRhLT5mb2N1c1JpbmdDbGlw
ID0gSW50UmVjdCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0
KGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHlPZmZzZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgYm9vbCBwcmludGluZykKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBvcmln
aW4gPSBwb2ludCArIEludFNpemUoMCwgeU9mZnNldCArIDEpOworICAgIEludFBvaW50IGVuZFBv
aW50ID0gb3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCk7CisgICAgZHJhd0xpbmUob3JpZ2luLCBl
bmRQb2ludCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxs
aW5nKGNvbnN0IEludFBvaW50JiBwb2ludCwgaW50IHdpZHRoKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYgZnJlY3QpCit7CisgICAgUVJlY3RGIHJlY3QoZnJlY3QpOworICAgIHJlY3QgPSBt
X2RhdGEtPnAoKS5kZXZpY2VNYXRyaXgoKS5tYXBSZWN0KHJlY3QpOworICAgIFFSZWN0IHJlc3Vs
dCA9IHJlY3QudG9SZWN0KCk7Ly9yb3VuZCBpdAorICAgIHJldHVybiBGbG9hdFJlY3QoUVJlY3RG
KHJlc3VsdCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IElu
dFNpemUgJnBvcywgaW50IGJsdXIsIGNvbnN0IENvbG9yICZjb2xvcikKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9kYXRhLT5zaGFkb3cueCA9
IHBvcy53aWR0aCgpOworICAgIG1fZGF0YS0+c2hhZG93LnkgPSBwb3MuaGVpZ2h0KCk7CisgICAg
bV9kYXRhLT5zaGFkb3cuYmx1ciA9IGJsdXI7CisgICAgbV9kYXRhLT5zaGFkb3cuY29sb3IgPSBj
b2xvcjsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9kYXRhLT5zaGFk
b3cgPSBUZXh0U2hhZG93KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIFRyYW5zcGFyZW5jeUxheWVyIGxheWVyKG1fZGF0YS0+
cCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+ZGV2aWNlLT53aWR0aCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+ZGV2aWNlLT5oZWlnaHQoKSk7
CisgICAgbGF5ZXIub3BhY2l0eSA9IG9wYWNpdHk7CisgICAgbV9kYXRhLT5sYXllcnMucHVzaChs
YXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFRy
YW5zcGFyZW5jeUxheWVyIGxheWVyID0gbV9kYXRhLT5sYXllcnMucG9wKCk7CisgICAgbGF5ZXIu
cGFpbnRlci0+ZW5kKCk7CisKKyAgICBtX2RhdGEtPnAoKS5zYXZlKCk7CisgICAgbV9kYXRhLT5w
KCkuc2V0T3BhY2l0eShsYXllci5vcGFjaXR5KTsKKyAgICBtX2RhdGEtPnAoKS5kcmF3UGl4bWFw
KDAsIDAsIGxheWVyLnBpeG1hcCk7CisgICAgbV9kYXRhLT5wKCkuZW5kKCk7CisKKyAgICBsYXll
ci5jbGVhbnVwKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2RhdGEtPnAoKS5lcmFzZVJlY3QocmVjdCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCAmcmVjdCwgZmxvYXQgd2lk
dGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IFFQYWludGVyUGF0aCBwYXRoOyBwYXRoLmFkZFJlY3QocmVjdCk7CisgICAgUVBlbiBuUGVuID0g
bV9kYXRhLT5wKCkucGVuKCk7CisgICAgblBlbi5zZXRXaWR0aEYod2lkdGgpOworICAgIG1fZGF0
YS0+cCgpLnN0cm9rZVBhdGgocGF0aCwgblBlbik7Cit9Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZVdpZHRoKGZsb2F0IHdpZHRoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBRUGVuIG5QZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAg
ICBuUGVuLnNldFdpZHRoRih3aWR0aCk7CisgICAgbV9kYXRhLT5wKCkuc2V0UGVuKG5QZW4pOwor
fQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsYykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgUVBlbiBuUGVuID0g
bV9kYXRhLT5wKCkucGVuKCk7CisgICAgblBlbi5zZXRDYXBTdHlsZSh0b1F0TGluZUNhcChsYykp
OworICAgIG1fZGF0YS0+cCgpLnNldFBlbihuUGVuKTsKK30KK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisgICAgUVBlbiBuUGVuID0gbV9kYXRhLT5wKCkucGVuKCk7Cisg
ICAgblBlbi5zZXRKb2luU3R5bGUodG9RdExpbmVKb2luKGxqKSk7CisgICAgbV9kYXRhLT5wKCku
c2V0UGVuKG5QZW4pOworfQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbGltaXQpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIFFQZW4gblBlbiA9IG1fZGF0YS0+cCgpLnBlbigpOworICAgIG5QZW4uc2V0TWl0ZXJM
aW1pdChsaW1pdCk7CisgICAgbV9kYXRhLT5wKCkuc2V0UGVuKG5QZW4pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9kYXRhLT5wKCkuc2V0T3BhY2l0
eShvcGFjaXR5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisgICAgbV9kYXRhLT5wKCkuc2V0Q29tcG9zaXRpb25Nb2RlKHRv
UXRDb21wb3NpdGlvbk1vZGUob3ApKTsKKworfQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAo
Y29uc3QgUGF0aCAmcGF0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9kYXRhLT5wKCkuc2V0Q2xpcFBhdGgoKnBhdGgucGxhdGZvcm1QYXRo
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9kYXRhLT5wKCkuc2NhbGUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RhdGEtPnAoKS5yb3RhdGUocmFk
aWFucyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUg
JnMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZGF0YS0+cCgpLnNjYWxlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aGlj
a25lc3MpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYWRkQ2xpcChyZWN0KTsKKyAgICBRUGFpbnRlclBhdGggcGF0aDsKKworICAgIC8vIEFk
ZCBvdXRlciBlbGxpcHNlCisgICAgcGF0aC5hZGRFbGxpcHNlKFFSZWN0RihyZWN0LngoKSwgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOworICAgIC8vIEFkZCBpbm5lciBl
bGxpcHNlLgorICAgIHBhdGguYWRkRWxsaXBzZShRUmVjdEYocmVjdC54KCkgKyB0aGlja25lc3Ms
IHJlY3QueSgpICsgdGhpY2tuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53
aWR0aCgpIC0gKHRoaWNrbmVzcyAqIDIpLCByZWN0LmhlaWdodCgpIC0gKHRoaWNrbmVzcyAqIDIp
KSk7CisgICAgcGF0aC5zZXRGaWxsUnVsZShRdDo6T2RkRXZlbkZpbGwpOworICAgIG1fZGF0YS0+
cCgpLnNldENsaXBQYXRoKHBhdGgsIFF0OjpJbnRlcnNlY3RDbGlwKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
dCBJbnRTaXplJiB0b3BMZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYg
Ym90dG9tUmlnaHQpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gTmVlZCBzdWZmaWNpZW50IHdpZHRoIGFuZCBoZWlnaHQgdG8gY29udGFp
biB0aGVzZSBjdXJ2ZXMuICBTYW5pdHkgY2hlY2sgb3VyIHRvcC9ib3R0b20KKyAgICAvLyB2YWx1
ZXMgYW5kIG91ciB3aWR0aC9oZWlnaHQgdmFsdWVzIHRvIG1ha2Ugc3VyZSB0aGUgY3VydmVzIGNh
biBhbGwgZml0LgorICAgIGludCByZXF1aXJlZFdpZHRoID0gcU1heCh0b3BMZWZ0LndpZHRoKCkg
KyB0b3BSaWdodC53aWR0aCgpLCBib3R0b21MZWZ0LndpZHRoKCkgKyBib3R0b21SaWdodC53aWR0
aCgpKTsKKyAgICBpZiAocmVxdWlyZWRXaWR0aCA+IHJlY3Qud2lkdGgoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGludCByZXF1aXJlZEhlaWdodCA9IHFNYXgodG9wTGVmdC5oZWlnaHQoKSArIGJv
dHRvbUxlZnQuaGVpZ2h0KCksIHRvcFJpZ2h0LmhlaWdodCgpICsgYm90dG9tUmlnaHQuaGVpZ2h0
KCkpOworICAgIGlmIChyZXF1aXJlZEhlaWdodCA+IHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIENsaXAgdG8gb3VyIHJlY3QuCisgICAgYWRkQ2xpcChyZWN0KTsKKwor
ICAgIC8vIE9LLCB0aGUgY3VydmVzIGNhbiBmaXQuCisgICAgUVBhaW50ZXJQYXRoIHBhdGg7CisK
KyAgICAvLyBBZGQgdGhlIGZvdXIgZWxsaXBzZXMgdG8gdGhlIHBhdGguICBUZWNobmljYWxseSB0
aGlzIHJlYWxseSBpc24ndCBnb29kIGVub3VnaCwgc2luY2Ugd2UgY291bGQgZW5kIHVwCisgICAg
Ly8gbm90IGNsaXBwaW5nIHRoZSBvdGhlciAzLzQgb2YgdGhlIGVsbGlwc2Ugd2UgZG9uJ3QgY2Fy
ZSBhYm91dC4gIFdlJ3JlIHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCBmb3IKKyAgICAvLyBub3Jt
YWwgdXNlIGNhc2VzIHRoZXNlIGVsbGlwc2VzIHdvbid0IG92ZXJsYXAgb25lIGFub3RoZXIgKG9y
IHdoZW4gdGhleSBkbyB0aGUgY3VydmF0dXJlIG9mIG9uZSB3aWxsCisgICAgLy8gYmUgc3Vic3Vt
ZWQgYnkgdGhlIG90aGVyKS4KKyAgICBwYXRoLmFkZEVsbGlwc2UoUVJlY3RGKHJlY3QueCgpLCBy
ZWN0LnkoKSwgdG9wTGVmdC53aWR0aCgpICogMiwgdG9wTGVmdC5oZWlnaHQoKSAqIDIpKTsKKyAg
ICBwYXRoLmFkZEVsbGlwc2UoUVJlY3RGKHJlY3QucmlnaHQoKSAtIHRvcFJpZ2h0LndpZHRoKCkg
KiAyLCByZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0LndpZHRo
KCkgKiAyLCB0b3BSaWdodC5oZWlnaHQoKSAqIDIpKTsKKyAgICBwYXRoLmFkZEVsbGlwc2UoUVJl
Y3RGKHJlY3QueCgpLCByZWN0LmJvdHRvbSgpIC0gYm90dG9tTGVmdC5oZWlnaHQoKSAqIDIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21MZWZ0LndpZHRoKCkgKiAyLCBib3R0b21M
ZWZ0LmhlaWdodCgpICogMikpOworICAgIHBhdGguYWRkRWxsaXBzZShRUmVjdEYocmVjdC5yaWdo
dCgpIC0gYm90dG9tUmlnaHQud2lkdGgoKSAqIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LmJvdHRvbSgpIC0gYm90dG9tUmlnaHQuaGVpZ2h0KCkgKiAyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm90dG9tUmlnaHQud2lkdGgoKSAqIDIsIGJvdHRvbVJpZ2h0LmhlaWdo
dCgpICogMikpOworCisgICAgLy8gTm93IGFkZCBmaXZlIHJlY3RzIChvbmUgZm9yIGVhY2ggZWRn
ZSByZWN0IGluIGJldHdlZW4gdGhlIHJvdW5kZWQgY29ybmVycyBhbmQgb25lIGZvciB0aGUgaW50
ZXJpb3IpLgorICAgIHBhdGguYWRkUmVjdChRUmVjdEYocmVjdC54KCkgKyB0b3BMZWZ0LndpZHRo
KCksIHJlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gdG9w
TGVmdC53aWR0aCgpIC0gdG9wUmlnaHQud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHFNYXgodG9wTGVmdC5oZWlnaHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkpKSk7CisgICAgcGF0aC5h
ZGRSZWN0KFFSZWN0RihyZWN0LngoKSArIGJvdHRvbUxlZnQud2lkdGgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlY3QuYm90dG9tKCkgLSBxTWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCksIGJv
dHRvbVJpZ2h0LmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgo
KSAtIGJvdHRvbUxlZnQud2lkdGgoKSAtIGJvdHRvbVJpZ2h0LndpZHRoKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICBxTWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCksIGJvdHRvbVJpZ2h0LmhlaWdo
dCgpKSkpOworICAgIHBhdGguYWRkUmVjdChRUmVjdEYocmVjdC54KCksIHJlY3QueSgpICsgdG9w
TGVmdC5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHFNYXgodG9wTGVmdC53aWR0
aCgpLCBib3R0b21MZWZ0LndpZHRoKCkpLCByZWN0LmhlaWdodCgpIC0gdG9wTGVmdC5oZWlnaHQo
KSAtIGJvdHRvbUxlZnQuaGVpZ2h0KCkpKTsKKyAgICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3Qu
cmlnaHQoKSAtIHFNYXgodG9wUmlnaHQud2lkdGgoKSwgYm90dG9tUmlnaHQud2lkdGgoKSksCisg
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSArIHRvcFJpZ2h0LmhlaWdodCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcU1heCh0b3BSaWdodC53aWR0aCgpLCBib3R0b21SaWdodC53
aWR0aCgpKSwgcmVjdC5oZWlnaHQoKSAtIHRvcFJpZ2h0LmhlaWdodCgpIC0gYm90dG9tUmlnaHQu
aGVpZ2h0KCkpKTsKKyAgICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3QueCgpICsgcU1heCh0b3BM
ZWZ0LndpZHRoKCksIGJvdHRvbUxlZnQud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LnkoKSArIHFNYXgodG9wTGVmdC5oZWlnaHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gcU1heCh0b3BMZWZ0LndpZHRo
KCksIGJvdHRvbUxlZnQud2lkdGgoKSkgLSBxTWF4KHRvcFJpZ2h0LndpZHRoKCksIGJvdHRvbVJp
Z2h0LndpZHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIHFN
YXgodG9wTGVmdC5oZWlnaHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkpIC0gcU1heChib3R0b21MZWZ0
LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21SaWdodC5o
ZWlnaHQoKSkpKTsKKyAgICBwYXRoLnNldEZpbGxSdWxlKFF0OjpXaW5kaW5nRmlsbCk7CisgICAg
bV9kYXRhLT5wKCkuc2V0Q2xpcFBhdGgocGF0aCwgUXQ6OkludGVyc2VjdENsaXApOworfQorCisK
KyNpZiBTVkdfU1VQUE9SVAorS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKkdyYXBoaWNzQ29udGV4
dDo6Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG5ldyBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF0KHBsYXRmb3JtQ29udGV4dCgpKTsKK30KKyNlbmRpZgorCit9
CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9Gb250UGxhdGZvcm1EYXRhUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHF0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAJKFJldmlzaW9uIDApCisr
KyBxdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBA
QAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVu
dGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgor
ICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBH
ZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sg
UnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFu
biA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVscGVyUXQuaCIKKyNpbmNsdWRlICJGb250UGxhdGZv
cm1EYXRhLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxRSGFzaD4K
KyNpbmNsdWRlIDxRRm9udEluZm8+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0
ZGxpYi5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YSgpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoRGVsZXRlZCkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lKQoreworICAgIFFGb250IGZvbnQoIlRpbWVzIE5ldyBSb21hbiIsIDEy
KTsKKyAgICBmb250LnNldEZhbWlseSh0b1FTdHJpbmcoZmFtaWx5TmFtZSkpOworICAgIGZvbnQu
c2V0UGl4ZWxTaXplKGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CisgICAgZm9udC5z
ZXRJdGFsaWMoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKTsKKyAgICBmb250LnNldFdlaWdodChm
b250RGVzY3JpcHRpb24ud2VpZ2h0KCkpOworICAgIHNldEZvbnQoZm9udCk7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3Ro
ZXIpCit7CisgICAgbV9mb250ID0gb3RoZXIubV9mb250OworfQorCitGb250UGxhdGZvcm1EYXRh
JiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3Ro
ZXIpCit7CisgICAgbV9mb250ID0gb3RoZXIubV9mb250OworICAgIHJldHVybiAqdGhpczsKK30K
KworRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworfQorCitib29sIEZv
bnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCit7CisgICAgcmV0dXJuIFFGb250SW5mbyht
X2ZvbnQpLmZpeGVkUGl0Y2goKTsKK30KKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250
KGNvbnN0IFFGb250JiBvdGhlcikKK3sKKyAgICBtX2ZvbnQgPSBvdGhlcjsKK30KKworUUZvbnQg
Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udDsKK30K
KwordW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHFIYXNoKCZtX2ZvbnQpOworfQorCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0o
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChvdGhl
ci5tX2ZvbnQgPT0gbV9mb250KTsKK30KKworCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
cXQvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0ZvbnRQbGF0Zm9ybURhdGEu
aAkoUmV2aXNpb24gMCkKKysrIHF0L0ZvbnRQbGF0Zm9ybURhdGEuaAkoUmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBm
b250IGltcGxlbWVudGF0aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUg
b3RoZXIgdGhhbgorICogRm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiAKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YV9ICisjZGVmaW5lIEZvbnRQbGF0Zm9ybURh
dGFfSAorCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKworI2luY2x1ZGUgPFFGb250PgorI2luY2x1ZGUgPFFTdHJpbmc+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CitwdWJsaWM6CisgICAgRm9u
dFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcik7CisgICAgRm9udFBs
YXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKTsKKwor
ICAgIGNsYXNzIERlbGV0ZWQge307CisgICAgRm9udFBsYXRmb3JtRGF0YShEZWxldGVkKTsKKwor
ICAgIEZvbnRQbGF0Zm9ybURhdGEoKTsKKyAgICAKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0
IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsKKyAgICB+Rm9u
dFBsYXRmb3JtRGF0YSgpOworCisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKKworICAgIHZvaWQg
c2V0Rm9udChjb25zdCBRRm9udCYpOworICAgIFFGb250IGZvbnQoKSBjb25zdDsKKworICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUUZvbnQgbV9mb250Owor
fTsKKworfQorCisjZW5kaWYKKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0Nvb2tp
ZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9Db29raWVKYXJRdC5jcHAJKFJldmlzaW9uIDAp
CisrKyBxdC9Db29raWVKYXJRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsKKwor
dm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypwb2xpY3lVUkwq
LywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjb29raWVKYXIuc2V0KHVybC51cmwoKSwg
dmFsdWUpOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0
dXJuIGNvb2tpZUphci5nZXQodXJsLnVybCgpKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxlZCgp
Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5k
ZXg6IHF0L1BsYXRmb3JtS2V5Ym9hcmRFdmVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9QbGF0
Zm9ybUtleWJvYXJkRXZlbnRRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9QbGF0Zm9ybUtleWJv
YXJkRXZlbnRRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkhlbHBlclF0LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSA8UUtleUV2ZW50PgorCitu
YW1lc3BhY2UgV2ViQ29yZQoreworCitzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JRdEtl
eUNvZGUoaW50IGtleUNvZGUpCit7CisgICAgc3dpdGNoIChrZXlDb2RlKSB7CisgICAgICAgIGNh
c2UgUXQ6OktleV9NZW51OgorICAgICAgICBjYXNlIFF0OjpLZXlfQWx0OgorICAgICAgICAgICAg
cmV0dXJuICJBbHQiOworICAgICAgICBjYXNlIFF0OjpLZXlfQ2xlYXI6CisgICAgICAgICAgICBy
ZXR1cm4gIkNsZWFyIjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0Rvd246CisgICAgICAgICAgICBy
ZXR1cm4gIkRvd24iOworICAgICAgICBjYXNlIFF0OjpLZXlfRW5kOgorICAgICAgICAgICAgcmV0
dXJuICJFbmQiOworICAgICAgICBjYXNlIFF0OjpLZXlfRW50ZXI6CisgICAgICAgICAgICByZXR1
cm4gIkVudGVyIjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0V4ZWN1dGU6CisgICAgICAgICAgICBy
ZXR1cm4gIkV4ZWN1dGUiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjE6CisgICAgICAgICAgICBy
ZXR1cm4gIkYxIjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0YyOgorICAgICAgICAgICAgcmV0dXJu
ICJGMiI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMzoKKyAgICAgICAgICAgIHJldHVybiAiRjMi
OworICAgICAgICBjYXNlIFF0OjpLZXlfRjQ6CisgICAgICAgICAgICByZXR1cm4gIkY0IjsKKyAg
ICAgICAgY2FzZSBRdDo6S2V5X0Y1OgorICAgICAgICAgICAgcmV0dXJuICJGNSI7CisgICAgICAg
IGNhc2UgUXQ6OktleV9GNjoKKyAgICAgICAgICAgIHJldHVybiAiRjYiOworICAgICAgICBjYXNl
IFF0OjpLZXlfRjc6CisgICAgICAgICAgICByZXR1cm4gIkY3IjsKKyAgICAgICAgY2FzZSBRdDo6
S2V5X0Y4OgorICAgICAgICAgICAgcmV0dXJuICJGOCI7CisgICAgICAgIGNhc2UgUXQ6OktleV9G
OToKKyAgICAgICAgICAgIHJldHVybiAiRjkiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjEwOgor
ICAgICAgICAgICAgcmV0dXJuICJGMTAiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjExOgorICAg
ICAgICAgICAgcmV0dXJuICJGMTEiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjEyOgorICAgICAg
ICAgICAgcmV0dXJuICJGMTIiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjEzOgorICAgICAgICAg
ICAgcmV0dXJuICJGMTMiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjE0OgorICAgICAgICAgICAg
cmV0dXJuICJGMTQiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjE1OgorICAgICAgICAgICAgcmV0
dXJuICJGMTUiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjE2OgorICAgICAgICAgICAgcmV0dXJu
ICJGMTYiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjE3OgorICAgICAgICAgICAgcmV0dXJuICJG
MTciOworICAgICAgICBjYXNlIFF0OjpLZXlfRjE4OgorICAgICAgICAgICAgcmV0dXJuICJGMTgi
OworICAgICAgICBjYXNlIFF0OjpLZXlfRjE5OgorICAgICAgICAgICAgcmV0dXJuICJGMTkiOwor
ICAgICAgICBjYXNlIFF0OjpLZXlfRjIwOgorICAgICAgICAgICAgcmV0dXJuICJGMjAiOworICAg
ICAgICBjYXNlIFF0OjpLZXlfRjIxOgorICAgICAgICAgICAgcmV0dXJuICJGMjEiOworICAgICAg
ICBjYXNlIFF0OjpLZXlfRjIyOgorICAgICAgICAgICAgcmV0dXJuICJGMjIiOworICAgICAgICBj
YXNlIFF0OjpLZXlfRjIzOgorICAgICAgICAgICAgcmV0dXJuICJGMjMiOworICAgICAgICBjYXNl
IFF0OjpLZXlfRjI0OgorICAgICAgICAgICAgcmV0dXJuICJGMjQiOworICAgICAgICBjYXNlIFF0
OjpLZXlfSGVscDoKKyAgICAgICAgICAgIHJldHVybiAiSGVscCI7CisgICAgICAgIGNhc2UgUXQ6
OktleV9Ib21lOgorICAgICAgICAgICAgcmV0dXJuICJIb21lIjsKKyAgICAgICAgY2FzZSBRdDo6
S2V5X0luc2VydDoKKyAgICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKKyAgICAgICAgY2FzZSBR
dDo6S2V5X0xlZnQ6CisgICAgICAgICAgICByZXR1cm4gIkxlZnQiOworICAgICAgICBjYXNlIFF0
OjpLZXlfUGFnZURvd246CisgICAgICAgICAgICByZXR1cm4gIlBhZ2VEb3duIjsKKyAgICAgICAg
Y2FzZSBRdDo6S2V5X1BhZ2VVcDoKKyAgICAgICAgICAgIHJldHVybiAiUGFnZVVwIjsKKyAgICAg
ICAgY2FzZSBRdDo6S2V5X1BhdXNlOgorICAgICAgICAgICAgcmV0dXJuICJQYXVzZSI7CisgICAg
ICAgIGNhc2UgUXQ6OktleV9QcmludDoKKyAgICAgICAgICAgIHJldHVybiAiUHJpbnRTY3JlZW4i
OworICAgICAgICBjYXNlIFF0OjpLZXlfUmlnaHQ6CisgICAgICAgICAgICByZXR1cm4gIlJpZ2h0
IjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1NlbGVjdDoKKyAgICAgICAgICAgIHJldHVybiAiU2Vs
ZWN0IjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1VwOgorICAgICAgICAgICAgcmV0dXJuICJVcCI7
CisgICAgICAgICAgICAvLyBTdGFuZGFyZCBzYXlzIHRoYXQgREVMIGJlY29tZXMgVSswMDAwN0Yu
CisgICAgICAgIGNhc2UgUXQ6OktleV9EZWxldGU6CisgICAgICAgICAgICByZXR1cm4gIlUrMDAw
MDdGIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OnNwcmlu
dGYoIlUrJTA2WCIsIHRvdXBwZXIoa2V5Q29kZSkpOworICAgIH0KK30KKworc3RhdGljIGludCB3
aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXljb2RlKQoreworICAgIHN3
aXRjaCAoa2V5Y29kZSkgeworICAgICAgICAvKiBGSVhNRTogTmVlZCB0byBzdXBwbHkgYSBib29s
IGluIHRoaXMgZnVuYywgdG8gZGV0ZXJtaW5lIHdoZXRlciB0aGUgZXZlbnQgY29tZXMgZnJvbSB0
aGUga2V5cGFkCisgICAgICAgIGNhc2UgUXQ6OktleV8wOgorICAgICAgICAgICAgcmV0dXJuIFZL
X05VTVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorICAgICAgICBjYXNlIFF0OjpL
ZXlfMToKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQxOy8vICg2MSkgTnVtZXJpYyBrZXlw
YWQgMSBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5XzI6CisgICAgICAgICAgICByZXR1cm4gIFZL
X05VTVBBRDI7IC8vICg2MikgTnVtZXJpYyBrZXlwYWQgMiBrZXkKKyAgICAgICAgY2FzZSBRdDo6
S2V5XzM6CisgICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtl
eXBhZCAzIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfNDoKKyAgICAgICAgICAgIHJldHVybiBW
S19OVU1QQUQ0OyAvLyAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5CisgICAgICAgIGNhc2UgUXQ6
OktleV81OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDU7IC8vKDY1KSBOdW1lcmljIGtl
eXBhZCA1IGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfNjoKKyAgICAgICAgICAgIHJldHVybiBW
S19OVU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5CisgICAgICAgIGNhc2UgUXQ6
OktleV83OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDc7IC8vICg2NykgTnVtZXJpYyBr
ZXlwYWQgNyBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5Xzg6CisgICAgICAgICAgICByZXR1cm4g
VktfTlVNUEFEODsgLy8gKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorICAgICAgICBjYXNlIFF0
OjpLZXlfOToKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMg
a2V5cGFkIDkga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9Bc3RlcmlzazoKKyAgICAgICAgICAg
IHJldHVybiBWS19NVUxUSVBMWTsgLy8gKDZBKSBNdWx0aXBseSBrZXkKKyAgICAgICAgY2FzZSBR
dDo6S2V5X1BsdXM6CisgICAgICAgICAgICByZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkK
KyAgICAgICAgY2FzZSBRdDo6S2V5X01pbnVzOgorICAgICAgICAgICAgcmV0dXJuIFZLX1NVQlRS
QUNUOyAvLyAoNkQpIFN1YnRyYWN0IGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfUGVyaW9kOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0RFQ0lNQUw7IC8vICg2RSkgRGVjaW1hbCBrZXkKKyAgICAg
ICAgY2FzZSBRdDo6S2V5X1NsYXNoOgorICAgICAgICAgICAgcmV0dXJuIFZLX0RJVklERTsgLy8g
KDZGKSBEaXZpZGUga2V5CisKKyAgICAgICAgKi8KKyAgICAgICAgY2FzZSBRdDo6S2V5X0JhY2tT
cGFjZToKKyAgICAgICAgICAgIHJldHVybiBWS19CQUNLOyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkK
KyAgICAgICAgY2FzZSBRdDo6S2V5X1RhYjoKKyAgICAgICAgICAgIHJldHVybiBWS19UQUI7IC8v
ICgwOSkgVEFCIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfQ2xlYXI6CisgICAgICAgICAgICBy
ZXR1cm4gVktfQ0xFQVI7IC8vICgwQykgQ0xFQVIga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9S
ZXR1cm46CisgICAgICAgICAgICByZXR1cm4gVktfUkVUVVJOOyAvLygwRCkgUmV0dXJuIGtleQor
ICAgICAgICBjYXNlIFF0OjpLZXlfU2hpZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfU0hJRlQ7
IC8vICgxMCkgU0hJRlQga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9Db250cm9sOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0NPTlRST0w7IC8vICgxMSkgQ1RSTCBrZXkKKyAgICAgICAgY2FzZSBR
dDo6S2V5X01lbnU6CisgICAgICAgIGNhc2UgUXQ6OktleV9BbHQ6CisgICAgICAgICAgICByZXR1
cm4gVktfTUVOVTsgLy8gKDEyKSBBTFQga2V5CisKKyAgICAgICAgY2FzZSBRdDo6S2V5X1BhdXNl
OgorICAgICAgICAgICAgcmV0dXJuIFZLX1BBVVNFOyAvLyAoMTMpIFBBVVNFIGtleQorICAgICAg
ICBjYXNlIFF0OjpLZXlfQ2Fwc0xvY2s6CisgICAgICAgICAgICByZXR1cm4gVktfQ0FQSVRBTDsg
Ly8gKDE0KSBDQVBTIExPQ0sga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9LYW5hX0xvY2s6Cisg
ICAgICAgIGNhc2UgUXQ6OktleV9LYW5hX1NoaWZ0OgorICAgICAgICAgICAgcmV0dXJuIFZLX0tB
TkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKKyAgICAgICAg
Y2FzZSBRdDo6S2V5X0hhbmd1bDoKKyAgICAgICAgICAgIHJldHVybiBWS19IQU5HVUw7IC8vIFZL
X0hBTkdVTCAoMTUpIElNRSBIYW5ndWwgbW9kZQorICAgICAgICAgICAgLy8gVktfSlVOSkEgKDE3
KSBJTUUgSnVuamEgbW9kZQorICAgICAgICAgICAgLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwg
bW9kZQorICAgICAgICBjYXNlIFF0OjpLZXlfSGFuZ3VsX0hhbmphOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0hBTkpBOyAvLyAoMTkpIElNRSBIYW5qYSBtb2RlCisgICAgICAgIGNhc2UgUXQ6Oktl
eV9LYW5qaToKKyAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2Fuamkg
bW9kZQorICAgICAgICBjYXNlIFF0OjpLZXlfRXNjYXBlOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0VTQ0FQRTsgLy8gKDFCKSBFU0Mga2V5CisgICAgICAgICAgICAvLyBWS19DT05WRVJUICgxQykg
SU1FIGNvbnZlcnQKKyAgICAgICAgICAgIC8vIFZLX05PTkNPTlZFUlQgKDFEKSBJTUUgbm9uY29u
dmVydAorICAgICAgICAgICAgLy8gVktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAorICAgICAgICAg
ICAgLy8gVktfTU9ERUNIQU5HRSAoMUYpIElNRSBtb2RlIGNoYW5nZSByZXF1ZXN0CisgICAgICAg
IGNhc2UgUXQ6OktleV9TcGFjZToKKyAgICAgICAgICAgIHJldHVybiBWS19TUEFDRTsgLy8gKDIw
KSBTUEFDRUJBUgorICAgICAgICBjYXNlIFF0OjpLZXlfUGFnZVVwOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9Q
YWdlRG93bjoKKyAgICAgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBr
ZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X0VuZDoKKyAgICAgICAgICAgIHJldHVybiBWS19FTkQ7
IC8vICgyMykgRU5EIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfSG9tZToKKyAgICAgICAgICAg
IHJldHVybiBWS19IT01FOyAvLyAoMjQpIEhPTUUga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9M
ZWZ0OgorICAgICAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkK
KyAgICAgICAgY2FzZSBRdDo6S2V5X1VwOgorICAgICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAo
MjYpIFVQIEFSUk9XIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfUmlnaHQ6CisgICAgICAgICAg
ICByZXR1cm4gVktfUklHSFQ7IC8vICgyNykgUklHSFQgQVJST1cga2V5CisgICAgICAgIGNhc2Ug
UXQ6OktleV9Eb3duOgorICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBB
UlJPVyBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X1NlbGVjdDoKKyAgICAgICAgICAgIHJldHVy
biBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfUHJp
bnQ6CisgICAgICAgICAgICByZXR1cm4gVktfUFJJTlQ7IC8vICgyQSkgUFJJTlQga2V5CisgICAg
ICAgIGNhc2UgUXQ6OktleV9FeGVjdXRlOgorICAgICAgICAgICAgcmV0dXJuIFZLX0VYRUNVVEU7
Ly8gKDJCKSBFWEVDVVRFIGtleQorICAgICAgICAgICAgLy9kdW5ubyBvbiB0aGlzCisgICAgICAg
ICAgICAvL2Nhc2UgUXQ6OktleV9QcmludFNjcmVlbjoKKyAgICAgICAgICAgIC8vICAgICAgcmV0
dXJuIFZLX1NOQVBTSE9UOyAvLyAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKKyAgICAgICAgY2FzZSBR
dDo6S2V5X0luc2VydDoKKyAgICAgICAgICAgIHJldHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5T
IGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfRGVsZXRlOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0RFTEVURTsgLy8gKDJFKSBERUwga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9IZWxwOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0hFTFA7IC8vICgyRikgSEVMUCBrZXkKKyAgICAgICAgY2FzZSBR
dDo6S2V5XzA6CisgICAgICAgIGNhc2UgUXQ6OktleV9QYXJlbkxlZnQ6CisgICAgICAgICAgICBy
ZXR1cm4gVktfMDsgICAgLy8gICgzMCkgMCkga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV8xOgor
ICAgICAgICAgICAgcmV0dXJuIFZLXzE7IC8vICAoMzEpIDEgISBrZXkKKyAgICAgICAgY2FzZSBR
dDo6S2V5XzI6CisgICAgICAgIGNhc2UgUXQ6OktleV9BdDoKKyAgICAgICAgICAgIHJldHVybiBW
S18yOyAvLyAgKDMyKSAyICYga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV8zOgorICAgICAgICBj
YXNlIFF0OjpLZXlfTnVtYmVyU2lnbjoKKyAgICAgICAgICAgIHJldHVybiBWS18zOyAvL2Nhc2Ug
JzMnOiBjYXNlICcjJzsKKyAgICAgICAgY2FzZSBRdDo6S2V5XzQ6CisgICAgICAgIGNhc2UgUXQ6
OktleV9Eb2xsYXI6IC8vICAoMzQpIDQga2V5ICckJzsKKyAgICAgICAgICAgIHJldHVybiBWS180
OworICAgICAgICBjYXNlIFF0OjpLZXlfNToKKyAgICAgICAgY2FzZSBRdDo6S2V5X1BlcmNlbnQ6
CisgICAgICAgICAgICByZXR1cm4gVktfNTsgLy8gICgzNSkgNSBrZXkgICclJworICAgICAgICBj
YXNlIFF0OjpLZXlfNjoKKyAgICAgICAgY2FzZSBRdDo6S2V5X0FzY2lpQ2lyY3VtOgorICAgICAg
ICAgICAgcmV0dXJuIFZLXzY7IC8vICAoMzYpIDYga2V5ICAnXicKKyAgICAgICAgY2FzZSBRdDo6
S2V5Xzc6CisgICAgICAgIGNhc2UgUXQ6OktleV9BbXBlcnNhbmQ6CisgICAgICAgICAgICByZXR1
cm4gVktfNzsgLy8gICgzNykgNyBrZXkgIGNhc2UgJyYnCisgICAgICAgIGNhc2UgUXQ6OktleV84
OgorICAgICAgICBjYXNlIFF0OjpLZXlfQXN0ZXJpc2s6CisgICAgICAgICAgICByZXR1cm4gVktf
ODsgLy8gICgzOCkgOCBrZXkgICcqJworICAgICAgICBjYXNlIFF0OjpLZXlfOToKKyAgICAgICAg
Y2FzZSBRdDo6S2V5X1BhcmVuUmlnaHQ6CisgICAgICAgICAgICByZXR1cm4gVktfOTsgLy8gICgz
OSkgOSBrZXkgJygnCisgICAgICAgIGNhc2UgUXQ6OktleV9BOgorICAgICAgICAgICAgcmV0dXJu
IFZLX0E7IC8vICAoNDEpIEEga2V5IGNhc2UgJ2EnOiBjYXNlICdBJzogcmV0dXJuIDB4NDE7Cisg
ICAgICAgIGNhc2UgUXQ6OktleV9COgorICAgICAgICAgICAgcmV0dXJuIFZLX0I7IC8vICAoNDIp
IEIga2V5IGNhc2UgJ2InOiBjYXNlICdCJzogcmV0dXJuIDB4NDI7CisgICAgICAgIGNhc2UgUXQ6
OktleV9DOgorICAgICAgICAgICAgcmV0dXJuIFZLX0M7IC8vICAoNDMpIEMga2V5IGNhc2UgJ2Mn
OiBjYXNlICdDJzogcmV0dXJuIDB4NDM7CisgICAgICAgIGNhc2UgUXQ6OktleV9EOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0Q7IC8vICAoNDQpIEQga2V5IGNhc2UgJ2QnOiBjYXNlICdEJzogcmV0
dXJuIDB4NDQ7CisgICAgICAgIGNhc2UgUXQ6OktleV9FOgorICAgICAgICAgICAgcmV0dXJuIFZL
X0U7IC8vICAoNDUpIEUga2V5IGNhc2UgJ2UnOiBjYXNlICdFJzogcmV0dXJuIDB4NDU7CisgICAg
ICAgIGNhc2UgUXQ6OktleV9GOgorICAgICAgICAgICAgcmV0dXJuIFZLX0Y7IC8vICAoNDYpIEYg
a2V5IGNhc2UgJ2YnOiBjYXNlICdGJzogcmV0dXJuIDB4NDY7CisgICAgICAgIGNhc2UgUXQ6Oktl
eV9HOgorICAgICAgICAgICAgcmV0dXJuIFZLX0c7IC8vICAoNDcpIEcga2V5IGNhc2UgJ2cnOiBj
YXNlICdHJzogcmV0dXJuIDB4NDc7CisgICAgICAgIGNhc2UgUXQ6OktleV9IOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0g7IC8vICAoNDgpIEgga2V5IGNhc2UgJ2gnOiBjYXNlICdIJzogcmV0dXJu
IDB4NDg7CisgICAgICAgIGNhc2UgUXQ6OktleV9JOgorICAgICAgICAgICAgcmV0dXJuIFZLX0k7
IC8vICAoNDkpIEkga2V5IGNhc2UgJ2knOiBjYXNlICdJJzogcmV0dXJuIDB4NDk7CisgICAgICAg
IGNhc2UgUXQ6OktleV9KOgorICAgICAgICAgICAgcmV0dXJuIFZLX0o7IC8vICAoNEEpIEoga2V5
IGNhc2UgJ2onOiBjYXNlICdKJzogcmV0dXJuIDB4NEE7CisgICAgICAgIGNhc2UgUXQ6OktleV9L
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0s7IC8vICAoNEIpIEsga2V5IGNhc2UgJ2snOiBjYXNl
ICdLJzogcmV0dXJuIDB4NEI7CisgICAgICAgIGNhc2UgUXQ6OktleV9MOgorICAgICAgICAgICAg
cmV0dXJuIFZLX0w7IC8vICAoNEMpIEwga2V5IGNhc2UgJ2wnOiBjYXNlICdMJzogcmV0dXJuIDB4
NEM7CisgICAgICAgIGNhc2UgUXQ6OktleV9NOgorICAgICAgICAgICAgcmV0dXJuIFZLX007IC8v
ICAoNEQpIE0ga2V5IGNhc2UgJ20nOiBjYXNlICdNJzogcmV0dXJuIDB4NEQ7CisgICAgICAgIGNh
c2UgUXQ6OktleV9OOgorICAgICAgICAgICAgcmV0dXJuIFZLX047IC8vICAoNEUpIE4ga2V5IGNh
c2UgJ24nOiBjYXNlICdOJzogcmV0dXJuIDB4NEU7CisgICAgICAgIGNhc2UgUXQ6OktleV9POgor
ICAgICAgICAgICAgcmV0dXJuIFZLX087IC8vICAoNEYpIE8ga2V5IGNhc2UgJ28nOiBjYXNlICdP
JzogcmV0dXJuIDB4NEY7CisgICAgICAgIGNhc2UgUXQ6OktleV9QOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1A7IC8vICAoNTApIFAga2V5IGNhc2UgJ3AnOiBjYXNlICdQJzogcmV0dXJuIDB4NTA7
CisgICAgICAgIGNhc2UgUXQ6OktleV9ROgorICAgICAgICAgICAgcmV0dXJuIFZLX1E7IC8vICAo
NTEpIFEga2V5IGNhc2UgJ3EnOiBjYXNlICdRJzogcmV0dXJuIDB4NTE7CisgICAgICAgIGNhc2Ug
UXQ6OktleV9SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1I7IC8vICAoNTIpIFIga2V5IGNhc2Ug
J3InOiBjYXNlICdSJzogcmV0dXJuIDB4NTI7CisgICAgICAgIGNhc2UgUXQ6OktleV9TOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX1M7IC8vICAoNTMpIFMga2V5IGNhc2UgJ3MnOiBjYXNlICdTJzog
cmV0dXJuIDB4NTM7CisgICAgICAgIGNhc2UgUXQ6OktleV9UOgorICAgICAgICAgICAgcmV0dXJu
IFZLX1Q7IC8vICAoNTQpIFQga2V5IGNhc2UgJ3QnOiBjYXNlICdUJzogcmV0dXJuIDB4NTQ7Cisg
ICAgICAgIGNhc2UgUXQ6OktleV9VOgorICAgICAgICAgICAgcmV0dXJuIFZLX1U7IC8vICAoNTUp
IFUga2V5IGNhc2UgJ3UnOiBjYXNlICdVJzogcmV0dXJuIDB4NTU7CisgICAgICAgIGNhc2UgUXQ6
OktleV9WOgorICAgICAgICAgICAgcmV0dXJuIFZLX1Y7IC8vICAoNTYpIFYga2V5IGNhc2UgJ3Yn
OiBjYXNlICdWJzogcmV0dXJuIDB4NTY7CisgICAgICAgIGNhc2UgUXQ6OktleV9XOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX1c7IC8vICAoNTcpIFcga2V5IGNhc2UgJ3cnOiBjYXNlICdXJzogcmV0
dXJuIDB4NTc7CisgICAgICAgIGNhc2UgUXQ6OktleV9YOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1g7IC8vICAoNTgpIFgga2V5IGNhc2UgJ3gnOiBjYXNlICdYJzogcmV0dXJuIDB4NTg7CisgICAg
ICAgIGNhc2UgUXQ6OktleV9ZOgorICAgICAgICAgICAgcmV0dXJuIFZLX1k7IC8vICAoNTkpIFkg
a2V5IGNhc2UgJ3knOiBjYXNlICdZJzogcmV0dXJuIDB4NTk7CisgICAgICAgIGNhc2UgUXQ6Oktl
eV9aOgorICAgICAgICAgICAgcmV0dXJuIFZLX1o7IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBj
YXNlICdaJzogcmV0dXJuIDB4NUE7CisgICAgICAgIGNhc2UgUXQ6OktleV9NZXRhOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0xXSU47IC8vICg1QikgTGVmdCBXaW5kb3dzIGtleSAoTWljcm9zb2Z0
IE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgIC8vY2FzZSBRdDo6S2V5X01ldGFfUjogVE9ETzog
V2hhdCB0byBkbyBoZXJlPworICAgICAgICAvLyAgICByZXR1cm4gVktfUldJTjsgLy8gKDVDKSBS
aWdodCBXaW5kb3dzIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKKyAgICAgICAgICAgIC8vIFZLX0FQ
UFMgKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgICAgICAgICAg
Ly8gVktfU0xFRVAgKDVGKSBDb21wdXRlciBTbGVlcCBrZXkKKyAgICAgICAgICAgIC8vIFZLX1NF
UEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkKKyAgICAgICAgICAgIC8vIFZLX1NVQlRSQUNUICg2
RCkgU3VidHJhY3Qga2V5CisgICAgICAgICAgICAvLyBWS19ERUNJTUFMICg2RSkgRGVjaW1hbCBr
ZXkKKyAgICAgICAgICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKKyAgICAgICAgICAg
IC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKKworICAgICAgICBjYXNlIFF0OjpLZXlfTnVt
TG9jazoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1MT0NLOyAvLyAoOTApIE5VTSBMT0NLIGtl
eQorCisgICAgICAgIGNhc2UgUXQ6OktleV9TY3JvbGxMb2NrOgorICAgICAgICAgICAgcmV0dXJu
IFZLX1NDUk9MTDsgLy8gKDkxKSBTQ1JPTEwgTE9DSyBrZXkKKworICAgICAgICAgICAgLy8gVktf
TFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKKyAgICAgICAgICAgIC8vIFZLX1JTSElGVCAoQTEp
IFJpZ2h0IFNISUZUIGtleQorICAgICAgICAgICAgLy8gVktfTENPTlRST0wgKEEyKSBMZWZ0IENP
TlRST0wga2V5CisgICAgICAgICAgICAvLyBWS19SQ09OVFJPTCAoQTMpIFJpZ2h0IENPTlRST0wg
a2V5CisgICAgICAgICAgICAvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX1JNRU5VIChBNSkgUmlnaHQgTUVOVSBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JS
T1dTRVJfQkFDSyAoQTYpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBCYWNrIGtleQorICAgICAg
ICAgICAgLy8gVktfQlJPV1NFUl9GT1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2Vy
IEZvcndhcmQga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4KSBXaW5k
b3dzIDIwMDAvWFA6IEJyb3dzZXIgUmVmcmVzaCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dT
RVJfU1RPUCAoQTkpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdG9wIGtleQorICAgICAgICAg
ICAgLy8gVktfQlJPV1NFUl9TRUFSQ0ggKEFBKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU2Vh
cmNoIGtleQorICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dz
IDIwMDAvWFA6IEJyb3dzZXIgRmF2b3JpdGVzIGtleQorICAgICAgICAgICAgLy8gVktfQlJPV1NF
Ul9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtleQor
ICAgICAgICAgICAgLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVt
ZSBNdXRlIGtleQorICAgICAgICAgICAgLy8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIw
MDAvWFA6IFZvbHVtZSBEb3duIGtleQorICAgICAgICAgICAgLy8gVktfVk9MVU1FX1VQIChBRikg
V2luZG93cyAyMDAwL1hQOiBWb2x1bWUgVXAga2V5CisgICAgICAgICAgICAvLyBWS19NRURJQV9O
RVhUX1RSQUNLIChCMCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQorICAgICAgICAg
ICAgLy8gVktfTUVESUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMg
VHJhY2sga2V5CisgICAgICAgICAgICAvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAw
L1hQOiBTdG9wIE1lZGlhIGtleQorICAgICAgICAgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAo
QjMpIFdpbmRvd3MgMjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKKyAgICAgICAgICAgIC8v
IFZLX0xBVU5DSF9NQUlMIChCNCkgV2luZG93cyAyMDAwL1hQOiBTdGFydCBNYWlsIGtleQorICAg
ICAgICAgICAgLy8gVktfTEFVTkNIX01FRElBX1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDog
U2VsZWN0IE1lZGlhIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5k
b3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDEga2V5CisgICAgICAgICAgICAvLyBWS19M
QVVOQ0hfQVBQMiAoQjcpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkK
KworICAgICAgICAgICAgLy8gVktfT0VNXzEgKEJBKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNo
YXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0
aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnOzonIGtleQorICAgICAgICBjYXNlIFF0OjpL
ZXlfU2VtaWNvbG9uOgorICAgICAgICBjYXNlIFF0OjpLZXlfQ29sb246CisgICAgICAgICAgICBy
ZXR1cm4gVktfT0VNXzE7IC8vY2FzZSAnOyc6IGNhc2UgJzonOiByZXR1cm4gMHhCQTsKKyAgICAg
ICAgICAgIC8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50
cnkvcmVnaW9uLCB0aGUgJysnIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfUGx1czoKKyAgICAg
ICAgY2FzZSBRdDo6S2V5X0VxdWFsOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9QTFVTOyAv
L2Nhc2UgJz0nOiBjYXNlICcrJzogcmV0dXJuIDB4QkI7CisgICAgICAgICAgICAvLyBWS19PRU1f
Q09NTUEgKEJDKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAn
LCcga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9Db21tYToKKyAgICAgICAgY2FzZSBRdDo6S2V5
X0xlc3M6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNX0NPTU1BOyAvL2Nhc2UgJywnOiBjYXNl
ICc8JzogcmV0dXJuIDB4QkM7CisgICAgICAgICAgICAvLyBWS19PRU1fTUlOVVMgKEJEKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLScga2V5CisgICAgICAg
IGNhc2UgUXQ6OktleV9NaW51czoKKyAgICAgICAgY2FzZSBRdDo6S2V5X1VuZGVyc2NvcmU6Cisg
ICAgICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOyAvL2Nhc2UgJy0nOiBjYXNlICdfJzogcmV0
dXJuIDB4QkQ7CisgICAgICAgICAgICAvLyBWS19PRU1fUEVSSU9EIChCRSkgV2luZG93cyAyMDAw
L1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy4nIGtleQorICAgICAgICBjYXNlIFF0
OjpLZXlfUGVyaW9kOgorICAgICAgICBjYXNlIFF0OjpLZXlfR3JlYXRlcjoKKyAgICAgICAgICAg
IHJldHVybiBWS19PRU1fUEVSSU9EOyAvL2Nhc2UgJy4nOiBjYXNlICc+JzogcmV0dXJuIDB4QkU7
CisgICAgICAgICAgICAvLyBWS19PRU1fMiAoQkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hh
cmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRo
ZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICcvPycga2V5CisgICAgICAgIGNhc2UgUXQ6Oktl
eV9TbGFzaDoKKyAgICAgICAgY2FzZSBRdDo6S2V5X1F1ZXN0aW9uOgorICAgICAgICAgICAgcmV0
dXJuIFZLX09FTV8yOyAvL2Nhc2UgJy8nOiBjYXNlICc/JzogcmV0dXJuIDB4QkY7CisgICAgICAg
ICAgICAvLyBWS19PRU1fMyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsg
aXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFu
ZGFyZCBrZXlib2FyZCwgdGhlICdgficga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9Bc2NpaVRp
bGRlOgorICAgICAgICBjYXNlIFF0OjpLZXlfUXVvdGVMZWZ0OgorICAgICAgICAgICAgcmV0dXJu
IFZLX09FTV8zOyAvL2Nhc2UgJ2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7CisgICAgICAgICAg
ICAvLyBWS19PRU1fNCAoREIpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICdbeycga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9CcmFja2V0TGVm
dDoKKyAgICAgICAgY2FzZSBRdDo6S2V5X0JyYWNlTGVmdDoKKyAgICAgICAgICAgIHJldHVybiBW
S19PRU1fNDsgLy9jYXNlICdbJzogY2FzZSAneyc6IHJldHVybiAweERCOworICAgICAgICAgICAg
Ly8gVktfT0VNXzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNh
biB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQg
a2V5Ym9hcmQsIHRoZSAnXHwnIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfQmFja3NsYXNoOgor
ICAgICAgICBjYXNlIFF0OjpLZXlfQmFyOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV81OyAv
L2Nhc2UgJ1xcJzogY2FzZSAnfCc6IHJldHVybiAweERDOworICAgICAgICAgICAgLy8gVktfT0VN
XzYgKEREKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5
IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQs
IHRoZSAnXX0nIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfQnJhY2tldFJpZ2h0OgorICAgICAg
ICBjYXNlIFF0OjpLZXlfQnJhY2VSaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNjsg
Ly8gY2FzZSAnXSc6IGNhc2UgJ30nOiByZXR1cm4gMHhERDsKKyAgICAgICAgICAgIC8vIFZLX09F
TV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBi
eSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJk
LCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtleQorICAgICAgICBjYXNlIFF0OjpL
ZXlfUXVvdGVEYmw6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzc7IC8vIGNhc2UgJ1wnJzog
Y2FzZSAnIic6IHJldHVybiAweERFOworICAgICAgICAgICAgLy8gVktfT0VNXzggKERGKSBVc2Vk
IGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgor
ICAgICAgICAgICAgLy8gVktfT0VNXzEwMiAoRTIpIFdpbmRvd3MgMjAwMC9YUDogRWl0aGVyIHRo
ZSBhbmdsZSBicmFja2V0IGtleSBvciB0aGUgYmFja3NsYXNoIGtleSBvbiB0aGUgUlQgMTAyLWtl
eSBrZXlib2FyZAorICAgICAgICAgICAgLy8gVktfUFJPQ0VTU0tFWSAoRTUpIFdpbmRvd3MgOTUv
OTgvTWUsIFdpbmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQUk9DRVNTIGtleQor
ICAgICAgICAgICAgLy8gVktfUEFDS0VUIChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBh
c3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFzIGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktf
UEFDS0VUIGtleSBpcyB0aGUgbG93IHdvcmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUg
dXNlZCBmb3Igbm9uLWtleWJvYXJkIGlucHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9u
LCBzZWUgUmVtYXJrIGluIEtFWUJESU5QVVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01f
S0VZVVAKKyAgICAgICAgICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtleQorICAgICAgICAgICAg
Ly8gVktfQ1JTRUwgKEY3KSBDclNlbCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0VYU0VMIChGOCkg
RXhTZWwga2V5CisgICAgICAgICAgICAvLyBWS19FUkVPRiAoRjkpIEVyYXNlIEVPRiBrZXkKKyAg
ICAgICAgICAgIC8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQorICAgICAgICAgICAgLy8gVktfWk9P
TSAoRkIpIFpvb20ga2V5CisgICAgICAgICAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBm
b3IgZnV0dXJlIHVzZQorICAgICAgICAgICAgLy8gVktfUEExIChGRCkgUEExIGtleQorICAgICAg
ICAgICAgLy8gVktfT0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKK30KKworCitQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChRS2V5RXZlbnQqIGV2ZW50LCBib29sIGlzS2V5VXAp
Cit7CisgICAgbV90ZXh0ID0gZnJvbVFTdHJpbmcoZXZlbnQtPnRleHQoKSk7CisgICAgbV91bm1v
ZGlmaWVkVGV4dCA9IGZyb21RU3RyaW5nKGV2ZW50LT50ZXh0KCkpOyAvLyBUT0RPOiBub3QgY29y
cmVjdAorICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JRdEtleUNvZGUoZXZl
bnQtPmtleSgpKTsKKyAgICBtX2lzS2V5VXAgPSBpc0tleVVwOworICAgIG1fYXV0b1JlcGVhdCA9
IGV2ZW50LT5pc0F1dG9SZXBlYXQoKTsKKyAgICBtX1dpbmRvd3NLZXlDb2RlID0gd2luZG93c0tl
eUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5KCkpOworICAgIG1faXNLZXlwYWQgPSAoZXZlbnQt
Pm1vZGlmaWVycygpICYgUXQ6OktleXBhZE1vZGlmaWVyKSAhPSAwOworICAgIG1fc2hpZnRLZXkg
PSAoZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6OlNoaWZ0TW9kaWZpZXIpICE9IDA7CisgICAgbV9j
dHJsS2V5ID0gKGV2ZW50LT5tb2RpZmllcnMoKSAmIFF0OjpDb250cm9sTW9kaWZpZXIpICE9IDA7
CisgICAgbV9hbHRLZXkgPSAoZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6OkFsdE1vZGlmaWVyKSAh
PSAwOworICAgIG1fbWV0YUtleSA9IChldmVudC0+bW9kaWZpZXJzKCkgJiBRdDo6TWV0YU1vZGlm
aWVyKSAhPSAwOyAgICAKK30KKworfQpJbmRleDogcXQvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcXQvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgJKFJldmlzaW9uIDApCisr
KyBxdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBSZXNvdXJjZUxvYWRlck1hbmFnZXJfSF8KKyNkZWZpbmUgUmVzb3VyY2VMb2FkZXJNYW5hZ2Vy
X0hfCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZUxvYWRlck1hbmFnZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRlck1hbmFnZXIqIGdldCgpOworICAgIHZvaWQgYWRkKFJl
c291cmNlTG9hZGVyKik7CisgICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VMb2FkZXIqKTsKKworICAg
IC8vIElmIHRydWUsIGRvbid0IG11bHRpcGxleCBkb3dubG9hZHM6IGRvd25sb2FkIGNvbXBsZXRl
bHkgb25lIGF0IGEgdGltZS4KKyAgICB2b2lkIHVzZVNpbXBsZVRyYW5zZmVyKGJvb2wgdXNlU2lt
cGxlKTsKKworcHJpdmF0ZToKKyAgICBSZXNvdXJjZUxvYWRlck1hbmFnZXIoKTsKKyAgICB2b2lk
IGRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUxvYWRlck1hbmFnZXI+Kik7Cisg
ICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsKKworICAgIGJvb2wgbV91c2VTaW1wbGU7
CisgICAgSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+KiBqb2JzOworICAgIFRpbWVyPFJlc291cmNl
TG9hZGVyTWFuYWdlcj4gbV9kb3dubG9hZFRpbWVyOworICAgIENVUkxNKiBjdXJsTXVsdGlIYW5k
bGU7IC8vIG5vdCBmcmVlZAorCisgICAgLy8gY3VybCBmaWxlaGFuZGxlcyB0byBwb2xsIHdpdGgg
c2VsZWN0CisgICAgZmRfc2V0IGZkcmVhZDsKKyAgICBmZF9zZXQgZmR3cml0ZTsKKyAgICBmZF9z
ZXQgZmRleGNlcDsKKworICAgIGludCBtYXhmZDsKKyAgICBjaGFyIGVycm9yX2J1ZmZlcltDVVJM
X0VSUk9SX1NJWkVdOworCisgICAgLy8gTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2Ygc3VwcG9ydGVk
IHByb3RvY29scworICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjdXJsX3Byb3RvY29sczsgLy8gbm90
IGZyZWVkCit9OworCit9CisKKyNlbmRpZgorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
cXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9UZW1wb3JhcnlMaW5r
U3R1YnMuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkoUmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChD
KSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGaWxlQnV0dG9uLmgiCisj
aW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0RmllbGQuaCIKKyNpbmNsdWRlICJTbGlkZXIu
aCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJG
cmFtZVZpZXcuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2Nyb2xsQmFyLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJKYXZhQXBwbGV0V2lkZ2V0
LmgiCisjaW5jbHVkZSAiU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUg
IlNjcmVlbi5oIgorI2luY2x1ZGUgIkhpc3RvcnkuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgor
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUu
aCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgi
CisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTog
VU5JTVBMRU1FTlRFRDogJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkK
KworSmF2YUFwcGxldFdpZGdldDo6SmF2YUFwcGxldFdpZGdldChJbnRTaXplIGNvbnN0JiwgRWxl
bWVudCosIFdURjo6SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gY29uc3QmKSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KKworRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgSW50UG9pbnQmLCBpbnQpIGNv
bnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEZsb2F0UmVjdCgpOyB9CitpbnQgRm9udDo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4
dFN0eWxlJiwgaW50LCBib29sKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9
CisKKwordm9pZCBXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KKworQ29sb3IgV2ViQ29yZTo6Zm9jdXNSaW5nQ29sb3IoKSB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiAweEZGMDAwMEZGOyB9CisKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBUaWxlUnVsZSwg
VGlsZVJ1bGUsIENvbXBvc2l0ZU9wZXJhdG9yKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKworbmFt
ZXNwYWNlIFdlYkNvcmUgewkKKwordm9pZCBUZXh0RmllbGQ6OnNlbGVjdEFsbCgpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQordm9pZCBUZXh0RmllbGQ6OmFkZFNlYXJjaFJlc3VsdCgpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQoraW50IFRleHRGaWVsZDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7IG5v
dEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Citib29sIFRleHRGaWVsZDo6aGFzU2VsZWN0ZWRU
ZXh0KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorU3RyaW5nIFRleHRG
aWVsZDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3Ry
aW5nKCk7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRBdXRvU2F2ZU5hbWUoU3RyaW5nIGNvbnN0Jikg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Citib29sIFRleHRGaWVsZDo6Y2hlY2tzRGVzY2VuZGFudHNG
b3JGb2N1cygpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Cit2b2lk
IFRleHRGaWVsZDo6c2V0U2VsZWN0aW9uKGludCxpbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQor
dm9pZCBUZXh0RmllbGQ6OnNldE1heFJlc3VsdHMoaW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
K2Jvb2wgVGV4dEZpZWxkOjplZGl0ZWQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9CitXaWRnZXQ6OkZvY3VzUG9saWN5IFRleHRGaWVsZDo6Zm9jdXNQb2xpY3koKSBjb25z
dCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBOb0ZvY3VzOyB9CitUZXh0RmllbGQ6OlRleHRG
aWVsZChUZXh0RmllbGQ6OlR5cGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorVGV4dEZpZWxkOjp+
VGV4dEZpZWxkKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0Rm9u
dChXZWJDb3JlOjpGb250IGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFRleHRG
aWVsZDo6c2V0QWxpZ25tZW50KEhvcml6b250YWxBbGlnbm1lbnQpIHsgbm90SW1wbGVtZW50ZWQo
KTsgfQordm9pZCBUZXh0RmllbGQ6OnNldFdyaXRpbmdEaXJlY3Rpb24oVGV4dERpcmVjdGlvbikg
eyBub3RJbXBsZW1lbnRlZCgpOyB9CitpbnQgVGV4dEZpZWxkOjptYXhMZW5ndGgoKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0TWF4TGVu
Z3RoKGludCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitTdHJpbmcgVGV4dEZpZWxkOjp0ZXh0KCkg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KK3ZvaWQgVGV4dEZp
ZWxkOjpzZXRUZXh0KFN0cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQoraW50IFRl
eHRGaWVsZDo6Y3Vyc29yUG9zaXRpb24oKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0Q3Vyc29yUG9zaXRpb24oaW50KSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRFZGl0ZWQoYm9vbCkgeyBub3RJbXBsZW1l
bnRlZCgpOyAgfQordm9pZCBUZXh0RmllbGQ6OnNldFJlYWRPbmx5KGJvb2wpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQordm9pZCBUZXh0RmllbGQ6OnNldFBsYWNlaG9sZGVyU3RyaW5nKFN0cmluZyBj
b25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgIH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRDb2xvcnMo
Q29sb3IgY29uc3QmLENvbG9yIGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyAgfQorSW50U2l6
ZSBUZXh0RmllbGQ6OnNpemVGb3JDaGFyYWN0ZXJXaWR0aChpbnQpIGNvbnN0IHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsgfQoraW50IFRleHRGaWVsZDo6YmFzZWxpbmVQb3Np
dGlvbihpbnQpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQgVGV4
dEZpZWxkOjpzZXRMaXZlU2VhcmNoKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCitTbGlk
ZXI6OlNsaWRlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorSW50U2l6ZSBTbGlkZXI6OnNpemVI
aW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9CitTbGlk
ZXI6On5TbGlkZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgU2xpZGVyOjpzZXRWYWx1
ZShkb3VibGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBTbGlkZXI6OnNldE1heFZhbHVl
KGRvdWJsZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFNsaWRlcjo6c2V0TWluVmFsdWUo
ZG91YmxlKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgU2xpZGVyOjpzZXRGb250KFdlYkNv
cmU6OkZvbnQgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2RvdWJsZSBTbGlkZXI6OnZh
bHVlKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorV2lkZ2V0OjpGb2N1
c1BvbGljeSBTbGlkZXI6OmZvY3VzUG9saWN5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gTm9Gb2N1czsgfQorCitTY3JvbGxCYXI6OlNjcm9sbEJhcihTY3JvbGxCYXJDbGllbnQg
KiwgU2Nyb2xsQmFyT3JpZW50YXRpb24pIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBTY3Jv
bGxCYXI6OnNldFN0ZXBzKGludCwgaW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2Jvb2wgU2Ny
b2xsQmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQp
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Jvb2wgU2Nyb2xsQmFyOjpzZXRWYWx1
ZShpbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQgU2Nyb2xsQmFyOjpz
ZXRLbm9iUHJvcG9ydGlvbihpbnQsIGludCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK1BsYXRm
b3JtU2Nyb2xsQmFyOjpQbGF0Zm9ybVNjcm9sbEJhcihTY3JvbGxCYXJDbGllbnQqIGNsaWVudCwg
U2Nyb2xsQmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIDogU2Nyb2xsQmFyKGNsaWVudCwgb3Jp
ZW50YXRpb24pIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorUGxhdGZvcm1TY3JvbGxCYXI6On5QbGF0
Zm9ybVNjcm9sbEJhcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQoraW50IFBsYXRmb3JtU2Nyb2xs
QmFyOjp3aWR0aCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2ludCBQ
bGF0Zm9ybVNjcm9sbEJhcjo6aGVpZ2h0KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQordm9pZCBQbGF0Zm9ybVNjcm9sbEJhcjo6c2V0RW5hYmxlZChib29sKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KK3ZvaWQgUGxhdGZvcm1TY3JvbGxCYXI6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQor
dm9pZCBQbGF0Zm9ybVNjcm9sbEJhcjo6c2V0U2Nyb2xsQmFyVmFsdWUoaW50IHYpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQordm9pZCBQbGF0Zm9ybVNjcm9sbEJhcjo6c2V0S25vYlByb3BvcnRpb24o
aW50IHZpc2libGVTaXplLCBpbnQgdG90YWxTaXplKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3Zv
aWQgUGxhdGZvcm1TY3JvbGxCYXI6OnNldFJlY3QoY29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQorCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25z
dCBDdXJyZW50RXZlbnRUYWcmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwordm9pZCBDaGVja0Nh
Y2hlT2JqZWN0U3RhdHVzKERvY0xvYWRlciosIENhY2hlZFJlc291cmNlKikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Citib29sIENoZWNrSWZSZWxvYWRpbmcoV2ViQ29yZTo6RG9jTG9hZGVyKikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK1ZlY3RvcjxjaGFyPiBTZXJ2ZVN5bmNo
cm9ub3VzUmVxdWVzdChMb2FkZXIqLCBEb2NMb2FkZXIqLCBSZXNvdXJjZUxvYWRlciosIEtVUkwm
LCBEZXByZWNhdGVkU3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPGNo
YXI+KCk7IH0KK30KKworYm9vbCBXZWJDb3JlOjpoaXN0b3J5Q29udGFpbnMoRGVwcmVjYXRlZFN0
cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CitTdHJpbmcg
V2ViQ29yZTo6c3VibWl0QnV0dG9uRGVmYXVsdExhYmVsKCkgeyByZXR1cm4gIlN1Ym1pdCI7IH0K
K1N0cmluZyBXZWJDb3JlOjppbnB1dEVsZW1lbnRBbHRUZXh0KCkgeyByZXR1cm4gRGVwcmVjYXRl
ZFN0cmluZygpOyB9CitTdHJpbmcgV2ViQ29yZTo6cmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKSB7
IHJldHVybiAiUmVzZXQiOyB9CitTdHJpbmcgV2ViQ29yZTo6ZGVmYXVsdExhbmd1YWdlKCkgeyBy
ZXR1cm4gImVuIjsgfQorCisKK2ludCBXZWJDb3JlOjpmaW5kTmV4dFNlbnRlbmNlRnJvbUluZGV4
KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQsIGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KK3ZvaWQgV2ViQ29yZTo6ZmluZFNlbnRlbmNlQm91bmRhcnkoVUNoYXIgY29uc3QqLCBp
bnQsIGludCwgaW50KiwgaW50KikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitpbnQgV2ViQ29yZTo6
ZmluZE5leHRXb3JkRnJvbUluZGV4KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQsIGJvb2wpIHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQgV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFy
eShVQ2hhciBjb25zdCogc3RyLCBpbnQgbGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGlu
dCogZW5kKSB7KnN0YXJ0ID0gcG9zaXRpb247ICplbmQgPSBwb3NpdGlvbjsgbm90SW1wbGVtZW50
ZWQoKTsgfQorCit2b2lkIEZyYW1lOjpzZXROZWVkc1JlYXBwbHlTdHlsZXMoKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KKworaW50IFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdl
dCopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Jvb2wgV2ViQ29yZTo6c2NyZWVu
SXNNb25vY2hyb21lKFdpZGdldCopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9
CisKK1N0cmluZyBXZWJDb3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQorCitLSlM6OlVTdHJpbmc6OlVTdHJpbmco
Y29uc3QgUVN0cmluZyYgcykgeworICAgICp0aGlzID0gVVN0cmluZyhyZWludGVycHJldF9jYXN0
PGNvbnN0IFVDaGFyKj4ocy5kYXRhKCkpLCBzLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJDb3Jl
OjpzZXRGb2N1c1JpbmdDb2xvckNoYW5nZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQorCit2b2lkIEZyYW1lVmlldzo6dXBkYXRlQm9yZGVyKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CisKK2Jvb2wgQVhPYmplY3RDYWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0g
ZmFsc2U7CisKK1ZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QgY2hhciog
KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8Y2hhcj4oKTsgfQorCitQbHVnaW5J
bmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNyZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVu
c2lnbmVkKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Cit1bnNpZ25lZCBQbHVnSW5J
bmZvU3RvcmU6OnBsdWdpbkNvdW50KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQorYm9vbCBXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0K
KworRmlsZUJ1dHRvbjo6RmlsZUJ1dHRvbihGcmFtZSopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQor
dm9pZCBGaWxlQnV0dG9uOjpjbGljayhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK0ludFNp
emUgRmlsZUJ1dHRvbjo6c2l6ZUZvckNoYXJhY3RlcldpZHRoKGludCkgY29uc3QgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9CitXaWRnZXQ6OkZvY3VzUG9saWN5IEZpbGVC
dXR0b246OmZvY3VzUG9saWN5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9G
b2N1czsgfQorV2ViQ29yZTo6SW50UmVjdCBGaWxlQnV0dG9uOjpmcmFtZUdlb21ldHJ5KCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gSW50UmVjdCgpOyB9Cit2b2lkIEZpbGVCdXR0
b246OnNldEZpbGVuYW1lKERlcHJlY2F0ZWRTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KK2ludCBGaWxlQnV0dG9uOjpiYXNlbGluZVBvc2l0aW9uKGludCkgY29uc3QgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQordm9pZCBGaWxlQnV0dG9uOjpzZXRGcmFtZUdlb21l
dHJ5KFdlYkNvcmU6OkludFJlY3QgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQg
RmlsZUJ1dHRvbjo6c2V0RGlzYWJsZWQoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwkKK0RlcHJlY2F0ZWRTdHJpbmdMaXN0IHN1cHBvcnRlZEtleVNp
emVzKCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZ0xpc3QoKTsg
fQorRGVwcmVjYXRlZFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5z
aWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBEZXByZWNhdGVkU3RyaW5nICZjaGFsbGVuZ2VTdHJp
bmcsIGNvbnN0IEtVUkwgJnVybCkgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOyB9CisKK30K
KworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0N1cnNvclF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBxdC9DdXJzb3JRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9DdXJzb3JRdC5jcHAJKFJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3Jn
ZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hhcmxl
cyBTYW11ZWxzIDxjaGFybGVzQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorCisjaW5j
bHVkZSAiSGVscGVyUXQuaCIKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk
bGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3Vyc29yOjpDdXJzb3IoUGxhdGZvcm1D
dXJzb3IgcCkKKyAgICA6IG1faW1wbChwKQoreworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBD
dXJzb3ImIG90aGVyKQorICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKK3sKK30KKworQ3Vyc29y
Ojp+Q3Vyc29yKCkKK3sKK30KKworQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqKSB7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNv
ciYgb3RoZXIpCit7CisgICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIHJldHVybiAqdGhp
czsKK30KKworbmFtZXNwYWNlIHsKKyAgICAvLyBGSVhNRTogc3RhdGljIGRlbGV0ZXIKKyAgICBj
bGFzcyBDdXJzb3JzIHsKKyAgICAgICAgcHJvdGVjdGVkOgorICAgICAgICAgICAgQ3Vyc29ycygp
CisgICAgICAgICAgICA6IENyb3NzQ3Vyc29yKFFDdXJzb3IoUXQ6OkNyb3NzQ3Vyc29yKSksCisg
ICAgICAgICAgICAgIE1vdmVDdXJzb3IoUUN1cnNvcihRdDo6U2l6ZUFsbEN1cnNvcikpLAorICAg
ICAgICAgICAgICBQb2ludGluZ0hhbmRDdXJzb3IoUUN1cnNvcihRdDo6UG9pbnRpbmdIYW5kQ3Vy
c29yKSksCisgICAgICAgICAgICAgIElCZWFtQ3Vyc29yKFFDdXJzb3IoUXQ6OklCZWFtQ3Vyc29y
KSksCisgICAgICAgICAgICAgIFdhaXRDdXJzb3IoUUN1cnNvcihRdDo6V2FpdEN1cnNvcikpLAor
ICAgICAgICAgICAgICBXaGF0c1RoaXNDdXJzb3IoUUN1cnNvcihRdDo6V2hhdHNUaGlzQ3Vyc29y
KSksCisgICAgICAgICAgICAgIFNpemVIb3JDdXJzb3IoUUN1cnNvcihRdDo6U2l6ZUhvckN1cnNv
cikpLAorICAgICAgICAgICAgICBTaXplVmVyQ3Vyc29yKFFDdXJzb3IoUXQ6OlNpemVWZXJDdXJz
b3IpKSwKKyAgICAgICAgICAgICAgU2l6ZUZEaWFnQ3Vyc29yKFFDdXJzb3IoUXQ6OlNpemVGRGlh
Z0N1cnNvcikpLAorICAgICAgICAgICAgICBTaXplQkRpYWdDdXJzb3IoUUN1cnNvcihRdDo6U2l6
ZUJEaWFnQ3Vyc29yKSksCisgICAgICAgICAgICAgIFNwbGl0SEN1cnNvcihRQ3Vyc29yKFF0OjpT
cGxpdEhDdXJzb3IpKSwKKyAgICAgICAgICAgICAgU3BsaXRWQ3Vyc29yKFFDdXJzb3IoUXQ6OlNw
bGl0VkN1cnNvcikpCisgICAgICAgICAgICB7fQorICAgICAgICAgICAgfkN1cnNvcnMoKSB7fQor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBzdGF0aWMgQ3Vyc29ycyAqc2VsZigpOworICAg
ICAgICAgICAgc3RhdGljIEN1cnNvcnMgKl9zZWxmOworICAgICAgICAgICAgQ3Vyc29yIENyb3Nz
Q3Vyc29yOworICAgICAgICAgICAgQ3Vyc29yIE1vdmVDdXJzb3I7CisgICAgICAgICAgICBDdXJz
b3IgUG9pbnRpbmdIYW5kQ3Vyc29yOworICAgICAgICAgICAgQ3Vyc29yIElCZWFtQ3Vyc29yOwor
ICAgICAgICAgICAgQ3Vyc29yIFdhaXRDdXJzb3I7CisgICAgICAgICAgICBDdXJzb3IgV2hhdHNU
aGlzQ3Vyc29yOworICAgICAgICAgICAgQ3Vyc29yIFNpemVIb3JDdXJzb3I7CisgICAgICAgICAg
ICBDdXJzb3IgU2l6ZVZlckN1cnNvcjsKKyAgICAgICAgICAgIEN1cnNvciBTaXplRkRpYWdDdXJz
b3I7CisgICAgICAgICAgICBDdXJzb3IgU2l6ZUJEaWFnQ3Vyc29yOworICAgICAgICAgICAgQ3Vy
c29yIFNwbGl0SEN1cnNvcjsKKyAgICAgICAgICAgIEN1cnNvciBTcGxpdFZDdXJzb3I7CisgICAg
fTsKKworICAgIEN1cnNvcnMgKkN1cnNvcnM6Ol9zZWxmID0gMDsKKyAgICBDdXJzb3JzICpDdXJz
b3JzOjpzZWxmKCkgeworICAgICAgICBpZiAoIV9zZWxmKSB7CisgICAgICAgICAgICBfc2VsZiA9
IG5ldyBDdXJzb3JzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBfc2VsZjsKKyAgICB9Cit9
CisKK2NvbnN0IEN1cnNvciYgbW92ZUN1cnNvcigpIHsKKyAgICByZXR1cm4gQ3Vyc29yczo6c2Vs
ZigpLT5Nb3ZlQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGNyb3NzQ3Vyc29yKCkKK3sKKyAg
ICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Dcm9zc0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29y
JiBoYW5kQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Qb2ludGluZ0hh
bmRDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaUJlYW1DdXJzb3IoKQoreworICAgIHJldHVy
biBDdXJzb3JzOjpzZWxmKCktPklCZWFtQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHdhaXRD
dXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPldhaXRDdXJzb3I7Cit9CisK
K2NvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYo
KS0+V2hhdHNUaGlzQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3Io
KQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVIb3JDdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpz
ZWxmKCktPlNpemVWZXJDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0UmVzaXpl
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplQkRpYWdDdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1
cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplRkRpYWdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
c291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVW
ZXJDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplRkRpYWdDdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgc291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6
c2VsZigpLT5TaXplQkRpYWdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2VzdFJlc2l6ZUN1
cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U2l6ZUhvckN1cnNvcjsKK30K
KworY29uc3QgQ3Vyc29yJiBub3J0aFNvdXRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4g
Q3Vyc29yczo6c2VsZigpLT5TaXplVmVyQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RX
ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplSG9y
Q3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U2l6ZUJEaWFnQ3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U2l6ZUZEaWFnQ3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+
U3BsaXRIQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHJvd1Jlc2l6ZUN1cnNvcigpCit7Cisg
ICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U3BsaXRWQ3Vyc29yOworfQorCit9CisKKy8vIHZp
bTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9Db2xvclF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9D
b2xvclF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0NvbG9yUXQuY3BwCShSZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHph
Y2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorCisjaW5jbHVkZSA8UUNvbG9yPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbG9yOjpDb2xvcihjb25zdCBRQ29sb3IgJmMpCisgICAg
OiBtX2NvbG9yKG1ha2VSR0JBKGMucmVkKCksIGMuZ3JlZW4oKSwgYy5ibHVlKCksIGMuYWxwaGEo
KSkpCit7CisgICAgbV92YWxpZCA9IGMuaXNWYWxpZCgpOworfQorCitDb2xvcjo6b3BlcmF0b3Ig
UUNvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUUNvbG9yKHJlZCgpLCBncmVlbigpLCBibHVl
KCksIGFscGhhKCkpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9T
eXN0ZW1UaW1lTGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L1N5c3RlbVRpbWVMaW51eC5jcHAJ
KFJldmlzaW9uIDApCisrKyBxdC9TeXN0ZW1UaW1lTGludXguY3BwCShSZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVl
bGxlckBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKworI2luY2x1ZGUgPHRpbWUu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitkb3VibGUgY3VycmVudFRpbWUoKQoreworICAg
IHRpbWVfdCB0dGltZTsKKyAgICB0aW1lKCZ0dGltZSk7CisgICAgcmV0dXJuIChkb3VibGUpdHRp
bWU7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0Zsb2F0UG9pbnRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcXQvRmxvYXRQb2ludFF0LmNwcAkoUmV2aXNpb24gMCkKKysr
IHF0L0Zsb2F0UG9pbnRRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKKworI2luY2x1ZGUgPFFQb2ludEY+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBRUG9pbnRGJiBwKSA6IG1feChwLngo
KSksIG1feShwLnkoKSkKK3sKK30KKworRmxvYXRQb2ludDo6b3BlcmF0b3IgUVBvaW50RigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFFQb2ludEYobV94LCBtX3kpOworfQorCisKK30KKworLy8gdmlt
OiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0NhbnZhc1F0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvQ2Fu
dmFzUXQuaAkoUmV2aXNpb24gMCkKKysrIHF0L0NhbnZhc1F0LmgJKFJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFjbEBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIENBTlZBU1FUX0gKKyNk
ZWZpbmUgQ0FOVkFTUVRfSAorCisjaW5jbHVkZSA8UVdpZGdldD4KKworY2xhc3MgUVBhaW50RXZl
bnQ7CitjbGFzcyBRTW91c2VFdmVudDsKK2NsYXNzIFFLZXlFdmVudDsKK25hbWVzcGFjZSBXZWJD
b3JlCit7CisgICAgY2xhc3MgU2Nyb2xsVmlldzsKK30KKworY2xhc3MgQ2FudmFzUXQgOiBwdWJs
aWMgUVdpZGdldAoreworICAgIFFfT0JKRUNUCitwdWJsaWM6CisgICAgQ2FudmFzUXQoV2ViQ29y
ZTo6U2Nyb2xsVmlldyAqZnJhbWVWaWV3LCBRV2lkZ2V0ICpwYXJlbnQ9MCk7CisKKyAgICB2aXJ0
dWFsIFFTaXplIHNpemVIaW50KCkgY29uc3Q7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IHBhaW50RXZlbnQoUVBhaW50RXZlbnQgKmV2KTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VNb3Zl
RXZlbnQoUU1vdXNlRXZlbnQgKmV2KTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VQcmVzc0V2ZW50
KFFNb3VzZUV2ZW50ICpldik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KFFN
b3VzZUV2ZW50ICpldik7CisgICAgdmlydHVhbCB2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50
ICpldik7CisgICAgdmlydHVhbCB2b2lkIGtleVJlbGVhc2VFdmVudChRS2V5RXZlbnQgKmV2KTsK
K3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGVLZXlFdmVudChRS2V5RXZlbnQgKmV2LCBib29sIGlz
S2V5VXApOworCisgICAgV2ViQ29yZTo6U2Nyb2xsVmlldyAqbV9mcmFtZVZpZXc7Cit9OworCisj
ZW5kaWYKKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0Jyb3dzZXJFeHRlbnNpb25R
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcXQvQnJvd3NlckV4dGVuc2lvblF0LmNwcAkoUmV2aXNpb24g
MCkKKysrIHF0L0Jyb3dzZXJFeHRlbnNpb25RdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2Rl
Lm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJIZWxw
ZXJRdC5oIgorI2luY2x1ZGUgIkJyb3dzZXJFeHRlbnNpb25RdC5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworQnJvd3NlckV4dGVuc2lvblF0OjpCcm93c2VyRXh0ZW5zaW9uUXQoV2Vi
Q29yZTo6RnJhbWUgKmZyYW1lKSA6IG1fZnJhbWUoZnJhbWUpIAoreworfQorCitib29sIEJyb3dz
ZXJFeHRlbnNpb25RdDo6Y2FuUnVuTW9kYWwoKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCcm93c2VyRXh0ZW5zaW9uUXQ6OmNyZWF0ZU5l
d1dpbmRvdyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgV2ViQ29yZTo6
V2luZG93QXJncyBhcmdzOworfQorCit2b2lkIEJyb3dzZXJFeHRlbnNpb25RdDo6Y3JlYXRlTmV3
V2luZG93KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2luZG93QXJncyYg
YXJncywgRnJhbWUqJiBmcmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29s
IEJyb3dzZXJFeHRlbnNpb25RdDo6Y2FuUnVuTW9kYWxOb3coKSAKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCcm93c2VyRXh0ZW5zaW9uUXQ6
OnJ1bk1vZGFsKCkgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBCcm93c2Vy
RXh0ZW5zaW9uUXQ6OmdvQmFja09yRm9yd2FyZChpbnQpIAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0tVUkwgQnJvd3NlckV4dGVuc2lvblF0OjpoaXN0b3J5VVJMKGludCBkaXN0YW5j
ZSkgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gS1VSTCgpOworfQorCit2
b2lkIEJyb3dzZXJFeHRlbnNpb25RdDo6c2V0VHlwZWRJY29uVVJMKEtVUkwgY29uc3QmLCBjb25z
dCBTdHJpbmcmKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEJyb3dzZXJF
eHRlbnNpb25RdDo6c2V0SWNvblVSTChLVVJMIGNvbnN0JikgCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworaW50IEJyb3dzZXJFeHRlbnNpb25RdDo6Z2V0SGlzdG9yeUxlbmd0aCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworLy8gdmltOiB0cz00
IHN3PTQgZXQKSW5kZXg6IHF0L0dseXBoTWFwUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0dseXBo
TWFwUXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvR2x5cGhNYXBRdC5jcHAJKFJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlr
b3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIg
PG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNr
QGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhNYXAuaCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2UoR2x5cGhQ
YWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZv
bnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVy
TGVuZ3RoOyBpKyspCisgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4KGksIGJ1ZmZl
cltpXSwgZm9udERhdGEpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKKy8vIHZpbTogdHM9
NCBzdz00IGV0CkluZGV4OiBxdC9TaGFyZWRUaW1lckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBx
dC9TaGFyZWRUaW1lckxpbnV4LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L1NoYXJlZFRpbWVyTGlu
dXguY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIlNoYXJlZFRpbWVyTGludXguaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitTaGFyZWRUaW1lciAqU2hhcmVkVGltZXI6Ol9zZWxmID0gMDsgLy8g
RklYTUU6IHN0YXRpY2RlbGV0ZXIKKwordm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24o
dm9pZCAoKmYpKCkpIHsKKyAgICBTaGFyZWRUaW1lcjo6aW5zdCgpLT5fdGltZXJGdW5jdGlvbiA9
IGY7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpIHsK
KyAgICBTaGFyZWRUaW1lcjo6aW5zdCgpLT5zdGFydChxTWF4KDAsIGludChmaXJlVGltZSAtIGN1
cnJlbnRUaW1lKCkpKSk7Cit9CisKKwordm9pZCBzdG9wU2hhcmVkVGltZXIoKSB7CisgICAgU2hh
cmVkVGltZXI6Omluc3QoKS0+c3RvcCgpOworfQorCit9CisKKyNpbmNsdWRlICJTaGFyZWRUaW1l
ckxpbnV4Lm1vYyIKKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0Zsb2F0UmVjdFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBxdC9GbG9hdFJlY3RRdC5jcHAJKFJldmlzaW9uIDApCisrKyBx
dC9GbG9hdFJlY3RRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorCisjaW5jbHVkZSA8UVJlY3RGPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0Zsb2F0UmVjdDo6RmxvYXRSZWN0KGNvbnN0IFFSZWN0RiYgcikgOiBtX2xvY2F0aW9uKHIudG9w
TGVmdCgpKSwgbV9zaXplKHIud2lkdGgoKSwgci5oZWlnaHQoKSkKK3sKK30KKworRmxvYXRSZWN0
OjpvcGVyYXRvciBRUmVjdEYoKSBjb25zdAoreworICAgIHJldHVybiBRUmVjdEYoeCgpLCB5KCks
IHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0FmZmluZVRyYW5z
Zm9ybVF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0FmZmluZVRyYW5zZm9ybVF0LmNwcAkoUmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKworI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitB
ZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybSgpCisgICAgOiBtX3RyYW5zZm9ybSgpCit7
Cit9CisKK0FmZmluZVRyYW5zZm9ybTo6QWZmaW5lVHJhbnNmb3JtKGRvdWJsZSBhLCBkb3VibGUg
YiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKKyAgICA6IG1fdHJh
bnNmb3JtKGEsIGIsIGMsIGQsIHR4LCB0eSkKK3sKK30KKworQWZmaW5lVHJhbnNmb3JtOjpBZmZp
bmVUcmFuc2Zvcm0oY29uc3QgUU1hdHJpeCYgbWF0cml4KQorICAgIDogbV90cmFuc2Zvcm0obWF0
cml4KQoreworfQorCit2b2lkIEFmZmluZVRyYW5zZm9ybTo6c2V0TWF0cml4KGRvdWJsZSBhLCBk
b3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgdHgsIGRvdWJsZSB0eSkKK3sKKyAg
ICBtX3RyYW5zZm9ybS5zZXRNYXRyaXgoYSwgYiwgYywgZCwgdHgsIHR5KTsKK30KKwordm9pZCBB
ZmZpbmVUcmFuc2Zvcm06Om1hcChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSogeDIsIGRvdWJs
ZSogeTIpIGNvbnN0Cit7CisgICAgbV90cmFuc2Zvcm0ubWFwKHgsIHksIHgyLCB5Mik7Cit9CisK
K0ludFJlY3QgQWZmaW5lVHJhbnNmb3JtOjptYXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7Cit9CisKK0Zsb2F0
UmVjdCBBZmZpbmVUcmFuc2Zvcm06Om1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25z
dAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS5tYXBSZWN0KHJlY3QpOworfQorCitib29sIEFm
ZmluZVRyYW5zZm9ybTo6aXNJZGVudGl0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNm
b3JtLmlzSWRlbnRpdHkoKTsKK30KKworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6bTExKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0ubTExKCk7Cit9CisKK2RvdWJsZSBBZmZpbmVU
cmFuc2Zvcm06Om0xMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm0xMigpOwor
fQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjptMjEoKSBjb25zdAoreworICAgIHJldHVybiBt
X3RyYW5zZm9ybS5tMjEoKTsKK30KKworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6bTIyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0ubTIyKCk7Cit9CisKK2RvdWJsZSBBZmZpbmVU
cmFuc2Zvcm06OmR4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0uZHgoKTsKK30K
KworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6ZHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3Ry
YW5zZm9ybS5keSgpOworfQorCit2b2lkIEFmZmluZVRyYW5zZm9ybTo6cmVzZXQoKQoreworICAg
IG1fdHJhbnNmb3JtLnJlc2V0KCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSAmQWZmaW5lVHJhbnNm
b3JtOjpzY2FsZShkb3VibGUgc3gsIGRvdWJsZSBzeSkKK3sKKyAgICBtX3RyYW5zZm9ybS5zY2Fs
ZShzeCwgc3kpOworICAgIHJldHVybiAqdGhpczsKK30KKworQWZmaW5lVHJhbnNmb3JtICZBZmZp
bmVUcmFuc2Zvcm06OnJvdGF0ZShkb3VibGUgZCkKK3sKKyAgICBtX3RyYW5zZm9ybS5yb3RhdGUo
ZCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0gJkFmZmluZVRyYW5z
Zm9ybTo6dHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIG1fdHJhbnNmb3Jt
LnRyYW5zbGF0ZSh0eCwgdHkpOworICAgIHJldHVybiAqdGhpczsKK30KKworQWZmaW5lVHJhbnNm
b3JtICZBZmZpbmVUcmFuc2Zvcm06OnNoZWFyKGRvdWJsZSBzeCwgZG91YmxlIHN5KQoreworICAg
IG1fdHJhbnNmb3JtLnNoZWFyKHN4LCBzeSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitkb3Vi
bGUgQWZmaW5lVHJhbnNmb3JtOjpkZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9y
bS5kZXQoKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIEFmZmluZVRyYW5zZm9ybTo6aW52ZXJ0KCkg
Y29uc3QKK3sKKyAgICBpZighaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsKKworICAgIHJldHVybiBtX3RyYW5zZm9ybS5pbnZlcnRlZCgpOworfQorCitB
ZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yIFFNYXRyaXgoKSBjb25zdAoreworICAgIHJldHVybiBt
X3RyYW5zZm9ybTsKK30KKworYm9vbCBBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yPT0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0g
PT0gb3RoZXIubV90cmFuc2Zvcm07Cit9CisKK0FmZmluZVRyYW5zZm9ybSYgQWZmaW5lVHJhbnNm
b3JtOjpvcGVyYXRvcio9KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgb3RoZXIpCit7CisgICAgbV90
cmFuc2Zvcm0gKj0gb3RoZXIubV90cmFuc2Zvcm07CisgICAgcmV0dXJuICp0aGlzOworfQorCitB
ZmZpbmVUcmFuc2Zvcm0gQWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciooY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0gKiBvdGhlci5tX3RyYW5z
Zm9ybTsKK30KKworfQpJbmRleDogcXQvTGlzdEJveFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9M
aXN0Qm94UXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvTGlzdEJveFF0LmNwcAkoUmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiAgICAgICAgICAgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgPFFTY3JvbGxCYXI+CisjaW5jbHVkZSA8UUxpc3RXaWRnZXQ+CisK
KyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSGVscGVyUXQuaCIKKyNpbmNsdWRlICJM
aXN0Qm94LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGlzdEJveDo6TGlzdEJveCgpIDog
V2ViQ29yZTo6U2Nyb2xsVmlldygpLCBtX2xpc3RXaWRnZXQoMCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25Nb2RlKFNpbmdsZSksIF93aWR0aCgwLjAp
LCBfd2lkdGhHb29kKGZhbHNlKQoreworICAgIHFEZWJ1ZygiTGlzdEJveDo6TGlzdEJveCgpLCB0
aGlzPSVwIiwgdGhpcyk7Cit9CisKK0xpc3RCb3g6On5MaXN0Qm94KCkKK3sKKyAgICBxRGVidWco
Ikxpc3RCb3g6On5MaXN0Qm94KCksIHRoaXM9JXAiLCB0aGlzKTsKK30KKwordm9pZCBMaXN0Qm94
OjpzZXRQYXJlbnRXaWRnZXQoUVdpZGdldCogcGFyZW50KQoreworICAgIHFEZWJ1ZygiTGlzdEJv
eDo6c2V0UGFyZW50V2lkZ2V0KCksIHBhcmVudD0lcCIsIHBhcmVudCk7CisgICAgU2Nyb2xsVmll
dzo6c2V0UGFyZW50V2lkZ2V0KHBhcmVudCk7CisKKyAgICBRX0FTU0VSVChtX2xpc3RXaWRnZXQg
PT0gMCk7CisgICAgbV9saXN0V2lkZ2V0ID0gbmV3IFFMaXN0V2lkZ2V0KHBhcmVudCk7CisKKyAg
ICBpZihtX3NlbGVjdGlvbk1vZGUgPT0gU2luZ2xlKQorICAgICAgICBtX2xpc3RXaWRnZXQtPnNl
dFNlbGVjdGlvbk1vZGUoUUFic3RyYWN0SXRlbVZpZXc6OlNpbmdsZVNlbGVjdGlvbik7CisgICAg
ZWxzZQorICAgICAgICBtX2xpc3RXaWRnZXQtPnNldFNlbGVjdGlvbk1vZGUoUUFic3RyYWN0SXRl
bVZpZXc6OkV4dGVuZGVkU2VsZWN0aW9uKTsKKworICAgIHNldFFXaWRnZXQobV9saXN0V2lkZ2V0
KTsKK30KKworSW50U2l6ZSBMaXN0Qm94OjpzaXplRm9yTnVtYmVyT2ZMaW5lcyhpbnQgbnVtTGlu
ZXMpIGNvbnN0Cit7CisgICAgUVNpemUgc2l6ZSgwLCAwKTsKKworICAgIGZvcihpbnQgaSA9IDA7
IGkgPD0gbnVtTGluZXM7IGkrKykgeworICAgICAgICBRTGlzdFdpZGdldEl0ZW0gKml0ZW0gPSBt
X2xpc3RXaWRnZXQtPml0ZW0oaSk7CisgICAgICAgIFFfQVNTRVJUKGl0ZW0gIT0gMCk7CisKKyAg
ICAgICAgUVJlY3QgdmlzdWFsID0gbV9saXN0V2lkZ2V0LT52aXN1YWxJdGVtUmVjdChpdGVtKTsK
KworICAgICAgICBzaXplLnNldFdpZHRoKHFNYXgoc2l6ZS53aWR0aCgpLCB2aXN1YWwud2lkdGgo
KSkpOworICAgICAgICBzaXplLnNldEhlaWdodChxTWF4KHNpemUuaGVpZ2h0KCksIHZpc3VhbC5o
ZWlnaHQoKSkpOworICAgIH0KKworICAgIC8vIExvZ2ljIHRha2VuIGZyb20gb3VyIGtodG1sIDot
KQorICAgIHNpemUuc2V0V2lkdGgoc2l6ZS53aWR0aCgpICsgMiAqIG1fbGlzdFdpZGdldC0+ZnJh
bWVXaWR0aCgpICsgbV9saXN0V2lkZ2V0LT52ZXJ0aWNhbFNjcm9sbEJhcigpLT5zaXplSGludCgp
LndpZHRoKCkpOworICAgIHNpemUuc2V0SGVpZ2h0KG51bUxpbmVzICogc2l6ZS5oZWlnaHQoKSAr
IDIgKiBtX2xpc3RXaWRnZXQtPmZyYW1lV2lkdGgoKSk7CisKKyAgICByZXR1cm4gc2l6ZTsKK30K
Kwordm9pZCBMaXN0Qm94OjpzZXRTZWxlY3Rpb25Nb2RlKFNlbGVjdGlvbk1vZGUgbW9kZSkKK3sK
KyAgICAvLyBXZSBjYW4gbm90IGRpcmVjdGx5IGFzc2lnbiB0byBtX2xpc3RXaWRnZXQgaGVyZSwg
YXMKKyAgICAvLyBzZXRTZWxlY3Rpb25Nb2RlKCkgaXMgY2FsbGVkIGZyb20gRGVwcmVjYXRlZFJl
bmRlclNlbGVjdCBiZWZvcmUKKyAgICAvLyBzZXRXaWRnZXQoKSBhbmQgb3VyIHNldFBhcmVudFdp
ZGdldCgpIGZ1bmN0aW9ucyBoYXZlIGJlZW4gY2FsbGVkLi4uCisgICAgbV9zZWxlY3Rpb25Nb2Rl
ID0gbW9kZTsKK30KKwordm9pZCBMaXN0Qm94OjpjbGVhcigpCit7CisgICAgbV9saXN0V2lkZ2V0
LT5jbGVhcigpOworfQorCit2b2lkIExpc3RCb3g6OmRvbmVBcHBlbmRpbmdJdGVtcygpCit7Cisg
ICAgLy8gbm8tb3AKK30KKwordm9pZCBMaXN0Qm94OjpzZXRTZWxlY3RlZChpbnQgcm93LCBib29s
IHNlbGVjdGVkKQoreworICAgIFFMaXN0V2lkZ2V0SXRlbSAqaXRlbSA9IG1fbGlzdFdpZGdldC0+
aXRlbShyb3cpOworICAgIGlmKCFpdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2xpc3RX
aWRnZXQtPnNldEl0ZW1TZWxlY3RlZChpdGVtLCBzZWxlY3RlZCk7Cit9CisKK2Jvb2wgTGlzdEJv
eDo6aXNTZWxlY3RlZChpbnQgcm93KSBjb25zdAoreworICAgIFFMaXN0V2lkZ2V0SXRlbSAqaXRl
bSA9IG1fbGlzdFdpZGdldC0+aXRlbShyb3cpOworICAgIGlmKCFpdGVtKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9saXN0V2lkZ2V0LT5pc0l0ZW1TZWxlY3RlZChpdGVt
KTsKK30KKwordm9pZCBMaXN0Qm94OjpzZXRFbmFibGVkKGJvb2wgdmFsdWUpCit7CisgICAgbV9s
aXN0V2lkZ2V0LT5zZXRFbmFibGVkKHZhbHVlKTsKK30KKworYm9vbCBMaXN0Qm94Ojppc0VuYWJs
ZWQoKQoreworICAgIHJldHVybiBtX2xpc3RXaWRnZXQtPmlzRW5hYmxlZCgpOworfQorCit2b2lk
IExpc3RCb3g6OnNldFdyaXRpbmdEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBkaXIp
Cit7CisgICAgUXQ6OkxheW91dERpcmVjdGlvbiBxRGlyOworCisgICAgc3dpdGNoKGRpcikKKyAg
ICB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgTFRSOiBxRGlyID0gUXQ6OkxlZnRU
b1JpZ2h0OyBicmVhazsKKyAgICAgICAgY2FzZSBSVEw6IHFEaXIgPSBRdDo6UmlnaHRUb0xlZnQ7
IGJyZWFrOworICAgIH0KKworICAgIG1fbGlzdFdpZGdldC0+c2V0TGF5b3V0RGlyZWN0aW9uKHFE
aXIpOworfQorCitXaWRnZXQ6OkZvY3VzUG9saWN5IExpc3RCb3g6OmZvY3VzUG9saWN5KCkgY29u
c3QKK3sKKwlyZXR1cm4gV2lkZ2V0Ojpmb2N1c1BvbGljeSgpOworfQorCitib29sIExpc3RCb3g6
OmNoZWNrc0Rlc2NlbmRhbnRzRm9yRm9jdXMoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIExpc3RCb3g6OmNsZWFyQ2FjaGVkVGV4dFJlbmRlcmVycygpCit7CisgICAgLy8g
bm8tb3AKK30KKwordm9pZCBMaXN0Qm94OjpzZXRGb250KGNvbnN0IFdlYkNvcmU6OkZvbnQmIGZv
bnQpCit7CisgICAgbV9saXN0V2lkZ2V0LT5zZXRGb250KHRvUUZvbnQoZm9udCkpOworfQorCit2
b2lkIExpc3RCb3g6OmFwcGVuZEl0ZW0oY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgc3RyaW5nLCBM
aXN0Qm94SXRlbVR5cGUgdHlwZSwgYm9vbCBlbmFibGVkKQoreworICAgICh2b2lkKSBuZXcgUUxp
c3RXaWRnZXRJdGVtKHRvUVN0cmluZyhzdHJpbmcpLCBtX2xpc3RXaWRnZXQpOworfQorCit9Owor
CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvdGVzdC90ZXN0dW5pdHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHF0L3Rlc3QvdGVzdHVuaXR5LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L3Rlc3Qv
dGVzdHVuaXR5LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGthcHBs
aWNhdGlvbi5oPgorI2luY2x1ZGUgPGtjbWRsaW5lYXJncy5oPgorI2luY2x1ZGUgPGtkZWJ1Zy5o
PgorCisjaW5jbHVkZSA8RG9jdW1lbnQuaD4KKworI2luY2x1ZGUgPEZyYW1lUXQuaD4KKyNpbmNs
dWRlIDxwYWdlL1BhZ2UuaD4KKworI2luY2x1ZGUgPFFWQm94TGF5b3V0PgorI2luY2x1ZGUgPFFE
aXI+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisKK3N0YXRpYyBLQ21kTGluZU9wdGlv
bnMgb3B0aW9uc1tdID0KK3sKKyAgICB7ICIrZmlsZSIsCQkiRmlsZSB0byBsb2FkIiwgMCB9LAor
ICAgIEtDbWRMaW5lTGFzdE9wdGlvbgorfTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph
cmd2KQoreworICAgIEtDbWRMaW5lQXJnczo6aW5pdChhcmdjLCBhcmd2LCAidGVzdHVuaXR5Iiwg
InRlc3R1bml0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICJ1bml0eSB0ZXN0Y2FzZSBhcHAi
LCAiMC4xIik7CisgICAgS0NtZExpbmVBcmdzOjphZGRDbWRMaW5lT3B0aW9ucyhvcHRpb25zKTsK
KyAgICBLQXBwbGljYXRpb24gYXBwOworICAgIEtDbWRMaW5lQXJncyAqYXJncyA9IEtDbWRMaW5l
QXJnczo6cGFyc2VkQXJncygpOworICAgICAKKyAgICBRV2lkZ2V0IHRvcExldmVsOworICAgIFFC
b3hMYXlvdXQgKmwgPSBuZXcgUVZCb3hMYXlvdXQoJnRvcExldmVsKTsKKyAgICAgICAgCisgICAg
RnJhbWVRdCAqZiA9IG5ldyBGcmFtZVF0KCZ0b3BMZXZlbCk7CisKKyAgICBsLT5hZGRXaWRnZXQo
Zi0+dmlldygpLT5xd2lkZ2V0KCkpOworICAgIGwtPmFjdGl2YXRlKCk7CisgICAgZi0+dmlldygp
LT5xd2lkZ2V0KCktPnNob3coKTsKKyAgICAvL3RvcGxldmVsLnJlc2l6ZSg0MDAsIDMwMCk7Cisg
ICAgdG9wTGV2ZWwuc2hvdygpOworCisgICAgUVN0cmluZyB1cmw7CisKKyAgICBpZiAoYXJncy0+
Y291bnQoKSA9PSAwKQorICAgICAgICB1cmwgPSBRU3RyaW5nKCIlMS8lMiIpLmFyZyhRRGlyOjpo
b21lUGF0aCgpKQorICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoImluZGV4Lmh0bWwi
KSk7CisgICAgZWxzZQorICAgICAgICB1cmwgPSBhcmdzLT5hcmcoMCk7CisgICAgZi0+b3BlblVS
TChLVVJMKHVybC50b0xhdGluMSgpKSk7CisKKyAgICAvL2YtPmNyZWF0ZUVtcHR5RG9jdW1lbnQo
KTsKKyAgICAvL2YtPmRvY3VtZW50KCktPm9wZW4oKTsKKworI2lmIDAKKyAgICBmLT5iZWdpbigp
OworICAgIGYtPndyaXRlKCI8aHRtbD48Ym9keSBiZ2NvbG9yPWJsdWU+PGJyPjw8YnI+PGJyPjxi
cj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJy
Pjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+
PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48
YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxi
cj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJy
Pjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+
PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48
YnI+PGJyPjxicj48YnI+PGJyPjxicj4vaHRtbD4iKTsKKworICAgIC8vZi0+ZG9jdW1lbnQoKS0+
Y2xvc2UoKTsKKyAgICBmLT5lbmQoKTsKKyNlbmRpZgorCisgICAgCisgICAgLy90b3BsZXZlbC5k
dW1wT2JqZWN0VHJlZSgpOworICAgIGFwcC5leGVjKCk7CisgICAgZGVsZXRlIGY7CisgICAgcmV0
dXJuIDA7Cit9CisKKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L3Rlc3QvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcXQvdGVzdC9DTWFrZUxpc3RzLnR4dAkoUmV2aXNpb24g
MCkKKysrIHF0L3Rlc3QvQ01ha2VMaXN0cy50eHQJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcg
QEAKK2luY2x1ZGVfZGlyZWN0b3JpZXMoCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9Ly4uLy4uLy4uLworICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8u
Li8uLi8uLi8uLi9KYXZhU2NyaXB0Q29yZQorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS8uLi8uLi8uLi9icmlkZ2UKKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09VUkNF
X0RJUn0vLi4vLi4vLi4vcGFnZQorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS8uLi8uLi8uLi9sb2FkZXIKKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
Li4vLi4vLi4vcGxhdGZvcm0KKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
Li4vLi4vLi4vcGxhdGZvcm0vcXQKKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vLi4vLi4vLi4va3dxCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4u
Ly4uLy4uL3JlbmRlcmluZworICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8u
Li8uLi8uLi9lZGl0aW5nCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4u
Ly4uLy4uL2h0bWwKKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vLi4v
Li4vY3NzCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uLy4uLy4uL2Rv
bQorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi8uLi8uLi94bWwKKyAg
IEJFRk9SRSAke0NNQUtFX1NPVVJDRV9ESVJ9L2tkZWNvcmUKKykKK3NldCh0ZXN0dW5pdHlfU1JD
UworICB0ZXN0dW5pdHkuY3BwCisgICkKKwora2RlNF9hdXRvbW9jKCR7dGVzdHVuaXR5X1NSQ1N9
KQorCitrZGU0X2FkZF9leGVjdXRhYmxlKHRlc3R1bml0eSBSVU5fVU5JTlNUQUxMRUQgJHt0ZXN0
dW5pdHlfU1JDU30pCisKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0dW5pdHkgICR7S0RFNF9L
REVDT1JFX0xJQlN9IFdlYkNvcmUtdW5pdHkgKQorCkluZGV4OiBxdC9TY3JvbGxWaWV3UXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHF0L1Njcm9sbFZpZXdRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9T
Y3JvbGxWaWV3UXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
SW50UG9pbnQuaCIKKworI2luY2x1ZGUgIkZyYW1lUXQuaCIKKyNpbmNsdWRlICJDYW52YXNRdC5o
IgorI2luY2x1ZGUgIkhlbHBlclF0LmgiCisKKyNpbmNsdWRlIDxRU2Nyb2xsQmFyPgorI2luY2x1
ZGUgPFFTY3JvbGxBcmVhPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbFZpZXc6OlNj
cm9sbFZpZXcoKSA6IG1fYXJlYShuZXcgUVNjcm9sbEFyZWEoMCkpCit7CisgICAgcURlYnVnKCJT
Y3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkiKTsKK30KKworU2Nyb2xsVmlldzo6flNjcm9sbFZpZXco
KQoreworICAgIHFEZWJ1ZygiU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKSIpOworfQorCit2b2lk
IFNjcm9sbFZpZXc6OnNldFBhcmVudFdpZGdldChRV2lkZ2V0KiBwYXJlbnQpCit7CisgICAgcURl
YnVnKCJTY3JvbGxWaWV3OjpzZXRQYXJlbnRXaWRnZXQoKSwgcGFyZW50PSVwIiwgcGFyZW50KTsK
KyAgICBXaWRnZXQ6OnNldFBhcmVudFdpZGdldChwYXJlbnQpOworCisgICAgLy8gJ2lzRnJhbWVW
aWV3KCknIGNhbiBub3QgYmUgY2FsbGVkIHlldCBpbiB0aGUgY29uc3RydWN0b3IhCisgICAgaWYg
KGlzRnJhbWVWaWV3KCkpIHsKKyAgICAgICAgQ2FudmFzUXQgKmNhbnZhcyA9IG5ldyBDYW52YXNR
dCh0aGlzLCBtX2FyZWEpOworCisgICAgICAgIHNldFFXaWRnZXQobV9hcmVhKTsKKyAgICAgICAg
bV9hcmVhLT5zZXRXaWRnZXQoY2FudmFzKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
dXBkYXRlQ29udGVudHMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBub3cpCit7Cisg
ICAgaWYgKG1fYXJlYS0+d2lkZ2V0KCkpCisgICAgICAgIG1fYXJlYS0+d2lkZ2V0KCktPnVwZGF0
ZSh1cGRhdGVSZWN0KTsKK30KKworaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fYXJlYS0+bWF4aW11bVZpZXdwb3J0U2l6ZSgpLndpZHRoKCk7Cit9
CisKK2ludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9hcmVhLT5tYXhpbXVtVmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7Cit9CisKK0Zsb2F0UmVjdCBT
Y3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoKSBjb25zdAoreworICAgIGNvbnN0IFFTaXpl
IHMobV9hcmVhLT5tYXhpbXVtVmlld3BvcnRTaXplKCkpOworCisgICAgcmV0dXJuIEZsb2F0UmVj
dChtX2FyZWEtPmhvcml6b250YWxTY3JvbGxCYXIoKS0+dmFsdWUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgIG1fYXJlYS0+dmVydGljYWxTY3JvbGxCYXIoKS0+dmFsdWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgIHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
c2V0Q29udGVudHNQb3MoaW50IG5ld1gsIGludCBuZXdZKQoreworICAgIG1fYXJlYS0+aG9yaXpv
bnRhbFNjcm9sbEJhcigpLT5zZXRWYWx1ZShuZXdYKTsKKyAgICBtX2FyZWEtPnZlcnRpY2FsU2Ny
b2xsQmFyKCktPnNldFZhbHVlKG5ld1kpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNv
bnRlbnRzKGludCB3LCBpbnQgaCkKK3sKKyAgICBpZiAobV9hcmVhLT53aWRnZXQoKSkKKyAgICAg
ICAgbV9hcmVhLT53aWRnZXQoKS0+cmVzaXplKHcsIGgpOworfQorCitpbnQgU2Nyb2xsVmlldzo6
Y29udGVudHNYKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hcmVhLT5ob3Jpem9udGFsU2Nyb2xs
QmFyKCktPnZhbHVlKCk7Cit9CisKK2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1koKSBjb25zdAor
eworICAgIHJldHVybiBtX2FyZWEtPnZlcnRpY2FsU2Nyb2xsQmFyKCktPnZhbHVlKCk7Cit9CisK
K2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1dpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fYXJl
YS0+d2lkZ2V0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fYXJlYS0+d2lk
Z2V0KCktPndpZHRoKCk7Cit9CisKK2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c0hlaWdodCgpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2FyZWEtPndpZGdldCgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBtX2FyZWEtPndpZGdldCgpLT5oZWlnaHQoKTsKK30KKworSW50UG9pbnQgU2Ny
b2xsVmlldzo6dmlld3BvcnRUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50
KQoreworICAgIC8vIFF0IGFscmVhZHkgaGFuZGxlcyB0aGlzIGluIHRoZSBjb29yZGluYXRlcyB3
ZSBnZXQgZnJvbSB0aGUgbW91c2UgZXZlbnRzLi4uCisgICAgcmV0dXJuIHZpZXdwb3J0UG9pbnQ7
Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9WaWV3cG9ydChjb25zdCBJbnRQ
b2ludCYgY29udGVudHNQb2ludCkKK3sKKyAgICAvLyBRdCBhbHJlYWR5IGhhbmRsZXMgdGhpcyBp
biB0aGUgY29vcmRpbmF0ZXMgd2UgZ2V0IGZyb20gdGhlIG1vdXNlIGV2ZW50cy4uLgorICAgIHJl
dHVybiBjb250ZW50c1BvaW50OworfQorCitJbnRTaXplIFNjcm9sbFZpZXc6OnNjcm9sbE9mZnNl
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludFNpemUobV9hcmVhLT5ob3Jpem9udGFsU2Nyb2xs
QmFyKCktPnZhbHVlKCksIG1fYXJlYS0+dmVydGljYWxTY3JvbGxCYXIoKS0+dmFsdWUoKSk7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQnkoaW50IGR4LCBpbnQgZHkpCit7CisgICAgbV9h
cmVhLT5ob3Jpem9udGFsU2Nyb2xsQmFyKCktPnNldFZhbHVlKG1fYXJlYS0+aG9yaXpvbnRhbFNj
cm9sbEJhcigpLT52YWx1ZSgpICsgZHgpOworICAgIG1fYXJlYS0+dmVydGljYWxTY3JvbGxCYXIo
KS0+c2V0VmFsdWUobV9hcmVhLT52ZXJ0aWNhbFNjcm9sbEJhcigpLT52YWx1ZSgpICsgZHkpOwor
fQorCitTY3JvbGxCYXJNb2RlIFNjcm9sbFZpZXc6OmhTY3JvbGxCYXJNb2RlKCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fYXJlYS0+aG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeSgpKQorICAgIHsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBRdDo6U2Nyb2xsQmFyQXNOZWVkZWQ6Cisg
ICAgICAgICAgICByZXR1cm4gU2Nyb2xsQmFyQXV0bzsKKyAgICAgICAgY2FzZSBRdDo6U2Nyb2xs
QmFyQWx3YXlzT2ZmOgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEJhckFsd2F5c09mZjsKKyAg
ICAgICAgY2FzZSBRdDo6U2Nyb2xsQmFyQWx3YXlzT246CisgICAgICAgICAgICByZXR1cm4gU2Ny
b2xsQmFyQWx3YXlzT247CisgICAgfQorfQorCitTY3JvbGxCYXJNb2RlIFNjcm9sbFZpZXc6OnZT
Y3JvbGxCYXJNb2RlKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fYXJlYS0+dmVydGljYWxTY3Jv
bGxCYXJQb2xpY3koKSkKKyAgICB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgUXQ6
OlNjcm9sbEJhckFzTmVlZGVkOgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEJhckF1dG87Cisg
ICAgICAgIGNhc2UgUXQ6OlNjcm9sbEJhckFsd2F5c09mZjoKKyAgICAgICAgICAgIHJldHVybiBT
Y3JvbGxCYXJBbHdheXNPZmY7CisgICAgICAgIGNhc2UgUXQ6OlNjcm9sbEJhckFsd2F5c09uOgor
ICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEJhckFsd2F5c09uOworICAgIH0KK30KKwordm9pZCBT
Y3JvbGxWaWV3OjpzdXBwcmVzc1Njcm9sbEJhcnMoYm9vbCBzdXBwcmVzc2VkLCBib29sIHJlcGFp
bnRPblN1cHByZXNzKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xs
Vmlldzo6c2V0SFNjcm9sbEJhck1vZGUoU2Nyb2xsQmFyTW9kZSBuZXdNb2RlKQoreworICAgIHN3
aXRjaCAobmV3TW9kZSkKKyAgICB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgU2Ny
b2xsQmFyQXV0bzoKKyAgICAgICAgICAgIG1fYXJlYS0+c2V0SG9yaXpvbnRhbFNjcm9sbEJhclBv
bGljeShRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpOworICAgICAgICBjYXNlIFNjcm9sbEJhckFsd2F5
c09mZjoKKyAgICAgICAgICAgIG1fYXJlYS0+c2V0SG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeShR
dDo6U2Nyb2xsQmFyQWx3YXlzT2ZmKTsKKyAgICAgICAgY2FzZSBTY3JvbGxCYXJBbHdheXNPbjoK
KyAgICAgICAgICAgIG1fYXJlYS0+c2V0SG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeShRdDo6U2Ny
b2xsQmFyQWx3YXlzT24pOworICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRWU2Nyb2xs
QmFyTW9kZShTY3JvbGxCYXJNb2RlIG5ld01vZGUpCit7CisgICAgc3dpdGNoIChuZXdNb2RlKQor
ICAgIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBTY3JvbGxCYXJBdXRvOgorICAg
ICAgICAgICAgbV9hcmVhLT5zZXRWZXJ0aWNhbFNjcm9sbEJhclBvbGljeShRdDo6U2Nyb2xsQmFy
QXNOZWVkZWQpOworICAgICAgICBjYXNlIFNjcm9sbEJhckFsd2F5c09mZjoKKyAgICAgICAgICAg
IG1fYXJlYS0+c2V0VmVydGljYWxTY3JvbGxCYXJQb2xpY3koUXQ6OlNjcm9sbEJhckFsd2F5c09m
Zik7CisgICAgICAgIGNhc2UgU2Nyb2xsQmFyQWx3YXlzT246CisgICAgICAgICAgICBtX2FyZWEt
PnNldFZlcnRpY2FsU2Nyb2xsQmFyUG9saWN5KFF0OjpTY3JvbGxCYXJBbHdheXNPbik7CisgICAg
fQorfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbEJhcnNNb2RlKFNjcm9sbEJhck1vZGUg
bmV3TW9kZSkKK3sKKyAgICBzZXRIU2Nyb2xsQmFyTW9kZShuZXdNb2RlKTsKKyAgICBzZXRWU2Ny
b2xsQmFyTW9kZShuZXdNb2RlKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRTdGF0aWNCYWNr
Z3JvdW5kKGJvb2wgZmxhZykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNj
cm9sbFZpZXc6OmFkZENoaWxkKFdpZGdldCogY2hpbGQsIGludCB4LCBpbnQgeSkKK3sKKyAgICBx
RGVidWcoIlNjcm9sbFZpZXc6OmFkZENoaWxkKCksIGNoaWxkPSVwLCB4PSVpLCB5PSVpIiwgY2hp
bGQsIHgsIHkpOworICAgIFFfQVNTRVJUKGNoaWxkICE9IDApOworICAgIFFfQVNTRVJUKG1fYXJl
YSAmJiBtX2FyZWEtPndpZGdldCgpKTsKKworLy8gIGNoaWxkLT5tb3ZlKHgsIHkpOworICAgIGNo
aWxkLT5zZXRQYXJlbnRXaWRnZXQobV9hcmVhLT53aWRnZXQoKSk7Cit9CisKK3ZvaWQgU2Nyb2xs
Vmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0KikKK3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxQb2ludFJlY3Vyc2l2ZWx5KGludCB4LCBpbnQgeSkK
K3sgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBTY3JvbGxWaWV3OjppbldpbmRv
dygpIGNvbnN0IHsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9
NCBldApJbmRleDogcXQvRnJhbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvRnJhbWVRdC5jcHAJ
KFJldmlzaW9uIDApCisrKyBxdC9GcmFtZVF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGcmFtZVF0LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
SFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJET01JbXBs
ZW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkJyb3dzZXJFeHRlbnNpb25RdC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIK
KyNpbmNsdWRlICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVl
bEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorI2lu
Y2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgi
CisKKyNpbmNsdWRlIDxRU2Nyb2xsQXJlYT4KKyNpbmNsdWRlIDxRTWVzc2FnZUJveD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgdm9pZCBkb1Njcm9sbChjb25zdCBSZW5kZXJPYmpl
Y3QqIHIsIGJvb2wgaXNIb3Jpem9udGFsLCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICAvLyBGSVhN
RTogVGhlIHNjcm9sbGluZyBkb25lIGhlcmUgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQg
aGFuZGxlcnMKKyAgICAvLyBvZiB0aGUgZWxlbWVudHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUg
cGFydC4KKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vYnJva2VuIHNpbmNl
IGl0IGNhbGxzIHNjcm9sbCBvbiBzY3JvbGxiYXJzCisgICAgLy9hbmQgd2UgaGF2ZSBub25lIG5v
dworICAgIC8vci0+c2Nyb2xsKGRpcmVjdGlvbiwgS1dRU2Nyb2xsV2hlZWwsIG11bHRpcGxpZXIp
OworICAgIGlmICghci0+bGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGludCB4ID0gci0+
bGF5ZXIoKS0+c2Nyb2xsWE9mZnNldCgpOworICAgIGludCB5ID0gci0+bGF5ZXIoKS0+c2Nyb2xs
WU9mZnNldCgpOworICAgIGlmIChpc0hvcml6b250YWwpCisgICAgICAgIHggKz0gbXVsdGlwbGll
cjsKKyAgICBlbHNlCisgICAgICAgIHkgKz0gbXVsdGlwbGllcjsKKyAgICByLT5sYXllcigpLT5z
Y3JvbGxUb09mZnNldCh4LCB5LCB0cnVlLCB0cnVlKTsKK30KKworYm9vbCBGcmFtZVZpZXc6Omlz
RnJhbWVWaWV3KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRnJhbWVRdDo6RnJh
bWVRdCgpCisgICAgOiBGcmFtZShuZXcgUGFnZSwgMCkKK3sKKyAgICBxRGVidWcoIkZyYW1lUXQ6
OkZyYW1lUXQiKTsKKyAgICBpbml0KCk7CisKKyAgICBwYWdlKCktPnNldE1haW5GcmFtZSh0aGlz
KTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBuZXcgRnJhbWVWaWV3KHRoaXMpOworICAgIHNldFZp
ZXcodmlldyk7CisKKyAgICB2aWV3LT5zZXRQYXJlbnRXaWRnZXQoMCk7Cit9CisKK0ZyYW1lUXQ6
OkZyYW1lUXQoUVdpZGdldCogcGFyZW50KQorICAgICA6IEZyYW1lKG5ldyBQYWdlLCAwKQorewor
ICAgIGluaXQoKTsKKyAgICBwYWdlKCktPnNldE1haW5GcmFtZSh0aGlzKTsKKyAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBuZXcgRnJhbWVWaWV3KHRoaXMpOworICAgIHNldFZpZXcodmlldyk7CisKKyAg
ICB2aWV3LT5zZXRQYXJlbnRXaWRnZXQocGFyZW50KTsKK30KKwordm9pZCBGcmFtZVF0Ojppbml0
KCkKK3sKKyAgICBkLT5tX2V4dGVuc2lvbiA9IG5ldyBCcm93c2VyRXh0ZW5zaW9uUXQodGhpcyk7
CisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gbmV3IFNldHRpbmdzOworICAgIHNldHRpbmdzLT5z
ZXRBdXRvTG9hZEltYWdlcyh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0TWluRm9udFNpemUoNSk7
CisgICAgc2V0dGluZ3MtPnNldE1pbkxvZ2ljYWxGb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+
c2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0SXNKYXZh
U2NyaXB0RW5hYmxlZCh0cnVlKTsKKyAKKyAgICBzZXR0aW5ncy0+c2V0TWVkaXVtRml4ZWRGb250
U2l6ZSgxNCk7CisgICAgc2V0dGluZ3MtPnNldE1lZGl1bUZvbnRTaXplKDE0KTsKKyAgICBzZXR0
aW5ncy0+c2V0U2VyaWZGb250TmFtZSgiVGltZXMgTmV3IFJvbWFuIik7CisgICAgc2V0dGluZ3Mt
PnNldFNhbnNTZXJpZkZvbnROYW1lKCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRGaXhlZEZv
bnROYW1lKCJDb3VyaWVyIik7CisgICAgc2V0dGluZ3MtPnNldFN0ZEZvbnROYW1lKCJBcmlhbCIp
OworICAgIHNldFNldHRpbmdzKHNldHRpbmdzKTsKK30KKworRnJhbWVRdDo6fkZyYW1lUXQoKQor
eworICAgIGNsb3NlVVJMKCk7IC8vIGhhY2sgdG8gYXZvaWQgY3Jhc2guICBtdXN0IGZpeCBpbiB3
ZWJraXQgKEZyYW1lKS4gIEZJWE1FCit9CisKK2Jvb2wgRnJhbWVRdDo6b3BlblVSTChjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgcURlYnVnKCJvcGVuVVJMKCVzKSIsIHVybC51cmwoKS5sYXRpbjEo
KSk7CisgICAgZGlkT3BlblVSTCh1cmwpOworICAgIAorICAgIFJlc291cmNlUmVxdWVzdCByZXF1
ZXN0KHJlc291cmNlUmVxdWVzdCgpKTsKKyAgICByZXF1ZXN0Lm1fcmVzcG9uc2VNSU1FVHlwZSA9
ICJpbWFnZS9zdmcreG1sIjsKKyAgICBzZXRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7CisKKyAg
ICBiZWdpbih1cmwpOworICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBuZXcgUmVzb3VyY2VMb2Fk
ZXIodGhpcywgIkdFVCIsIHVybCk7CisgICAgam9iLT5zdGFydChkb2N1bWVudCgpLT5kb2NMb2Fk
ZXIoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnJhbWVRdDo6c3VibWl0Rm9ybShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcURlYnVnKCJGcmFtZVF0Ojpz
dWJtaXRGb3JtKCkiKTsKKworICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgaGFjayBpbmhlcml0ZWQg
ZnJvbSBGcmFtZU1hYywgYW5kIHNob3VsZCBiZSBwdXNoZWQgaW50byBGcmFtZQorICAgIGlmIChk
LT5tX3N1Ym1pdHRlZEZvcm1VUkwgPT0gcmVxdWVzdC51cmwoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZC0+bV9zdWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC51cmwoKTsKKworICAgIC8qIFRP
RE86IE9uY2Ugd2UgaGF2ZSBhIEtQYXJ0IC0gbmFtZWQgIkZyYW1lUGFydFF0IiAtIHdlIGNhbiBs
ZXQgdGhhdCBpbmhlcml0IGZyb20gRnJhbWVRdENsaWVudCBhbmQgaW1wbGVtZW50IHRoZSBmdW5j
dGlvbnMuLi4pCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c3VibWl0Rm9y
bShyZXF1ZXN0LmRvUG9zdCgpID8gIlBPU1QiIDogIkdFVCIsIHJlcXVlc3QudXJsKCksICZyZXF1
ZXN0LnBvc3REYXRhKTsKKyAgICAqLworCisgICAgYmVnaW4ocmVxdWVzdC51cmwoKSk7CisKKyAg
ICBSZXNvdXJjZUxvYWRlciogam9iID0gbmV3IFJlc291cmNlTG9hZGVyKHRoaXMsIHJlcXVlc3Qu
ZG9Qb3N0KCkgPyAiUE9TVCIgOiAiR0VUIiwgcmVxdWVzdC51cmwoKSwgcmVxdWVzdC5wb3N0RGF0
YSk7CisgICAgam9iLT5zdGFydChkb2N1bWVudCgpLT5kb2NMb2FkZXIoKSk7CisgICAgCisgICAg
Y2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKK30KKwordm9pZCBGcmFtZVF0Ojp1cmxTZWxlY3Rl
ZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy9uZWVkIHRvIHBvdGVu
dGlhbGx5IHVwZGF0ZUxvY2F0aW9uQmFyKHN0ci5hc2NpaSgpKTsgb3Igbm90aWZ5IHN5cyBvZiBu
ZXcgdXJsIG15YmUgZXZlbnQgb3IgY2FsbGJhY2sKKyAgICBjb25zdCBLVVJMIHVybCA9IHJlcXVl
c3QudXJsKCk7CisgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0+IExPQURJTkcgTkVXIFVS
TCAlcyBcbiIsIHVybC51cmwoKS5hc2NpaSgpKTsKKyAgICBkaWRPcGVuVVJMKHVybCk7CisgICAg
YmVnaW4odXJsKTsKKyAgICBSZXNvdXJjZUxvYWRlciogam9iID0gbmV3IFJlc291cmNlTG9hZGVy
KHRoaXMsICJHRVQiLCB1cmwpOworICAgIGpvYi0+c3RhcnQoZG9jdW1lbnQoKS0+ZG9jTG9hZGVy
KCkpOworfQorCitTdHJpbmcgRnJhbWVRdDo6dXNlckFnZW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIk1vemlsbGEvNS4wIChQQzsgVTsgSW50ZWw7IExpbnV4OyBlbikgQXBwbGVXZWJLaXQvNDIw
KyAoS0hUTUwsIGxpa2UgR2Vja28pIjsKK30KKwordm9pZCBGcmFtZVF0OjpydW5KYXZhU2NyaXB0
QWxlcnQoU3RyaW5nIGNvbnN0JiBtZXNzYWdlKQoreworICAgIFFNZXNzYWdlQm94OjppbmZvcm1h
dGlvbih2aWV3KCktPnF3aWRnZXQoKSwgIkphdmFTY3JpcHQiLCB0b1FTdHJpbmcobWVzc2FnZSkp
OworfQorCitib29sIEZyYW1lUXQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKFN0cmluZyBjb25zdCYg
bWVzc2FnZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEZyYW1lUXQ6OmxvY2F0aW9uYmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGcmFtZVF0OjpzZXRUaXRsZShjb25z
dCBTdHJpbmcgJnRpdGxlKQoreworICAgIGlmKHZpZXcoKSAmJiB2aWV3KCktPnBhcmVudFdpZGdl
dCgpKQorICAgICAgICB2aWV3KCktPnBhcmVudFdpZGdldCgpLT5zZXRXaW5kb3dUaXRsZSh0b1FT
dHJpbmcodGl0bGUpKTsKK30KKworRnJhbWUqIEZyYW1lUXQ6OmNyZWF0ZUZyYW1lKGNvbnN0IEtV
UkwmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHJlZmVycmVy
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgRnJh
bWVRdDo6cGFzc1doZWVsRXZlbnRUb0NoaWxkV2lkZ2V0KE5vZGUqKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZyYW1lUXQ6OnBhc3NTdWJm
cmFtZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZy
YW1lKikKK3sKKyAgICBpZiAobWV2LnRhcmdldE5vZGUoKSA9PSAwKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK09iamVjdENvbnRlbnRUeXBlIEZyYW1l
UXQ6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBl
KCk7Cit9CisKK1BsdWdpbiogRnJhbWVRdDo6Y3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBGcmFtZVF0OjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZyYW1lUXQ6
Om1lbnViYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEZyYW1lUXQ6OnBlcnNvbmFsYmFyVmlzaWJsZSgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmFtZVF0OjpzdGF0
dXNiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEZyYW1lUXQ6OnRvb2xiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEZyYW1lUXQ6OmNyZWF0ZUVtcHR5
RG9jdW1lbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1JhbmdlKiBGcmFtZVF0
OjptYXJrZWRUZXh0UmFuZ2UoKSBjb25zdAoreworICAgIC8vIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK1N0cmluZyBGcmFtZVF0OjppbmNvbWluZ1JlZmVycmVyKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
U3RyaW5nIEZyYW1lUXQ6Om1pbWVUeXBlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJikgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9p
ZCBGcmFtZVF0OjptYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojpt
YXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVRdDo6bGFzdEV2ZW50SXNNb3VzZVVwKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBGcmFtZVF0OjpzYXZlRG9jdW1lbnRTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBGcmFtZVF0OjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0OjpvcGVuVVJMUmVxdWVzdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVR
dDo6c2NoZWR1bGVDbG9zZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBG
cmFtZVF0Ojp1bmZvY3VzV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEZyYW1lUXQ6OmZvY3VzV2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitTdHJpbmcgRnJhbWVRdDo6b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAoreworICAgIHJldHVy
biBTdHJpbmcoKTsKK30KKwordm9pZCBGcmFtZVF0OjphZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VJRCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lUXQ6OnJ1bkph
dmFTY3JpcHRQcm9tcHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1
bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZVF0OjpnZXRF
bWJlZEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lUXQ6Omdl
dE9iamVjdEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lUXQ6
OmdldEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBGcmFtZVF0OjpyZWdpc3RlckNvbW1hbmRG
b3JVbmRvKGNvbnN0IEVkaXRDb21tYW5kUHRyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZyYW1lUXQ6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oY29uc3QgRWRpdENvbW1h
bmRQdHImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6Y2xl
YXJVbmRvUmVkb09wZXJhdGlvbnMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRnJhbWVRdDo6aXNzdWVVbmRvQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBGcmFtZVF0Ojppc3N1ZVJlZG9Db21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6Omlzc3VlQ3V0Q29tbWFuZCgpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojppc3N1ZUNvcHlDb21tYW5kKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6Omlzc3VlUGFzdGVDb21t
YW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6Omlzc3Vl
UGFzdGVBbmRNYXRjaFN0eWxlQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBGcmFtZVF0Ojppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihj
b25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0OjpyZXNwb25kVG9D
aGFuZ2VkQ29udGVudHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJh
bWVRdDo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImIG9s
ZFNlbGVjdGlvbiwgY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciYgbmV3U2VsZWN0aW9uLCBFQWZm
aW5pdHkgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGcmFtZVF0OjpwYXJ0Q2xl
YXJlZEluQmVnaW4oKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVR
dDo6Y2FuR29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBGcmFtZVF0OjpoYW5kbGVk
T25sb2FkRXZlbnRzKCkKK3sKKyAgICAvLyBuby1vcAorfQorCitib29sIEZyYW1lUXQ6OmNhblBh
c3RlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBGcmFtZVF0OjpjYW5SZWRvKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGcmFtZVF0OjpjYW5VbmRvKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBGcmFtZVF0OjpwcmludCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBG
cmFtZVF0OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGcmFtZVF0OjprZXlFdmVudChjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgJmtleUV2ZW50KQoreworICAgIGJvb2wgcmVzdWx0Owor
CisgICAgLy8gQ2hlY2sgZm9yIGNhc2VzIHdoZXJlIHdlIGFyZSB0b28gZWFybHkgZm9yIGV2ZW50
cyAtLSBwb3NzaWJsZSB1bm1hdGNoZWQga2V5IHVwCisgICAgLy8gZnJvbSBwcmVzc2luZyByZXR1
cm4gaW4gdGhlIGxvY2F0aW9uIGJhci4KKyAgICBEb2N1bWVudCAqZG9jID0gZG9jdW1lbnQoKTsK
KyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSAqbm9kZSA9
IGRvYy0+Zm9jdXNOb2RlKCk7CisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIGlmIChkb2MtPmlz
SFRNTERvY3VtZW50KCkpCisgICAgICAgICAgICBub2RlID0gZG9jLT5ib2R5KCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG5vZGUgPSBkb2MtPmRvY3VtZW50RWxlbWVudCgpOworCisgICAg
ICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIWtleUV2ZW50LmlzS2V5VXAoKSkKKyAgICAgICAgcHJlcGFyZUZvclVzZXJBY3Rpb24oKTsK
KworICAgIHJlc3VsdCA9ICFFdmVudFRhcmdldE5vZGVDYXN0KG5vZGUpLT5kaXNwYXRjaEtleUV2
ZW50KGtleUV2ZW50KTsKKworICAgIC8vIEZJWE1FOiBGcmFtZU1hYyBoYXMgYSBrZXlEb3duL2tl
eVByZXNzIGhhY2sgaGVyZSB3aGljaCB3ZSBhcmUgbm90IGNvcHlpbmcuCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBGcmFtZVF0OjpyZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVy
KiwgUGxhdGZvcm1SZXNwb25zZSkKK3sKKyAgICAvLyBuby1vcAorfQorCit2b2lkIEZyYW1lUXQ6
OnJlY2VpdmVkRGF0YShSZXNvdXJjZUxvYWRlciogam9iLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQoreworICAgIHdyaXRlKGRhdGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6
cmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9hZGVyKiBqb2IsIFBsYXRmb3JtRGF0YSBkYXRhKQor
eworICAgIGVuZCgpOworfQorCit2b2lkIEZyYW1lUXQ6OnNldEZyYW1lR2VvbWV0cnkoY29uc3Qg
SW50UmVjdCAmcikKK3sKKyAgICBzZXRGcmFtZUdlb21ldHJ5KChRUmVjdCkgcik7Cit9CisKK30K
KworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L1BhdGhRdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcXQvUGF0aFF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L1BhdGhRdC5jcHAJKFJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVz
aW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CisjaW5jbHVkZSA8UU1hdHJpeD4KKworI2lu
Y2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXRoOjpQYXRoKCkKKyAg
ICA6IG1fcGF0aChuZXcgUVBhaW50ZXJQYXRoKQoreworfQorCitQYXRoOjp+UGF0aCgpCit7Cisg
ICAgZGVsZXRlIG1fcGF0aDsKKyAgICBtX3BhdGggPSAwOworfQorCitQYXRoOjpQYXRoKGNvbnN0
IFBhdGgmIG90aGVyKQorICAgIDogbV9wYXRoKG5ldyBRUGFpbnRlclBhdGgoKm90aGVyLnBsYXRm
b3JtUGF0aCgpKSkKK3sKK30KKworUGF0aCYgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBhdGgmIG90
aGVyKQoreworICAgIGlmICgmb3RoZXIgIT0gdGhpcykgeworICAgICAgICBkZWxldGUgbV9wYXRo
OworICAgICAgICBtX3BhdGggPSAwOworICAgICAgICBtX3BhdGggPSBuZXcgUVBhaW50ZXJQYXRo
KCpvdGhlci5wbGF0Zm9ybVBhdGgoKSk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KKwor
Ym9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wYXRoLT5jb250YWlucyhwb2ludCk7Cit9CisKK3ZvaWQgUGF0aDo6dHJhbnNs
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBRTWF0cml4IG1hdHJpeDsKKyAgICBt
YXRyaXgudHJhbnNsYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgKm1fcGF0
aCA9ICgqbV9wYXRoKSAqIG1hdHJpeDsKK30KKworRmxvYXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVj
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+Ym91bmRpbmdSZWN0KCk7Cit9CisKK3Zv
aWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQoreworICAgIG1fcGF0aC0+
bW92ZVRvKHBvaW50KTsKK30KKwordm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2lu
dCYgcCkKK3sKKyAgICBtX3BhdGgtPmxpbmVUbyhwKTsKK30KKwordm9pZCBQYXRoOjphZGRRdWFk
Q3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAg
ICBtX3BhdGgtPnF1YWRUbyhjcCwgcCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVU
byhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxv
YXRQb2ludCYgcCkKK3sKKyAgICBtX3BhdGgtPmN1YmljVG8oY3AxLCBjcDIsIHApOworfQorCit2
b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50
JiBwMiwgZmxvYXQgcmFkaXVzKQoreworICAgIC8vRklYTUU6IGJ1c3RlZAorICAgIHFXYXJuaW5n
KCJhcmNUbyBpcyBidXN0ZWQiKTsKKyAgICBtX3BhdGgtPmFyY1RvKHAxLngoKSwgcDEueSgpLCBw
Mi54KCksIHAyLnkoKSwgcmFkaXVzLCA5MCk7Cit9CisKK3ZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRo
KCkKK3sKKyAgICBtX3BhdGgtPmNsb3NlU3VicGF0aCgpOworfQorCisjZGVmaW5lIERFR1JFRVMo
dCkgKCh0KSAqIDE4MC4wIC8gTV9QSSkKK3ZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9p
bnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2Up
Cit7CisgICAgcXJlYWwgeGMgPSBwLngoKTsKKyAgICBxcmVhbCB5YyA9IHAueSgpOworICAgIHFy
ZWFsIHJhZGl1cyA9IHI7CisKKworICAgIC8vIyMjIEhBQ0sKKyAgICAvLyBJbiBRdCB3ZSBkb24n
dCBzd2l0Y2ggdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGZvciBkZWdyZWVzCisgICAgLy8gYW5kIHN0
aWxsIHVzZSB0aGUgMCwwIGFzIGJvdHRvbSBsZWZ0IGZvciBkZWdyZWVzIHNvIHdlIG5lZWQKKyAg
ICAvLyB0byBzd2l0Y2gKKyAgICBzYXIgPSAtc2FyOworICAgIGVhciA9IC1lYXI7CisgICAgYW50
aWNsb2Nrd2lzZSA9ICFhbnRpY2xvY2t3aXNlOworICAgIC8vZW5kIGhhY2sKKworICAgIGZsb2F0
IHNhID0gREVHUkVFUyhzYXIpOworICAgIGZsb2F0IGVhID0gREVHUkVFUyhlYXIpOworCisgICAg
ZG91YmxlIHNwYW4gPSAwOworCisgICAgZG91YmxlIHhzICAgICA9IHhjIC0gcmFkaXVzOworICAg
IGRvdWJsZSB5cyAgICAgPSB5YyAtIHJhZGl1czsKKyAgICBkb3VibGUgd2lkdGggID0gcmFkaXVz
KjI7CisgICAgZG91YmxlIGhlaWdodCA9IHJhZGl1cyoyOworCisgICAgaWYgKCFhbnRpY2xvY2t3
aXNlICYmIChlYSA8IHNhKSkgeworICAgICAgICBzcGFuICs9IDM2MDsKKyAgICB9IGVsc2UgaWYg
KGFudGljbG9ja3dpc2UgJiYgKHNhIDwgZWEpKSB7CisgICAgICAgIHNwYW4gLT0gMzYwOworICAg
IH0KKworICAgIC8vIyMjIHRoaXMgaXMgYWxzbyBkdWUgdG8gc3dpdGNoZWQgY29vcmRpbmF0ZSBz
eXN0ZW0KKyAgICAvLyB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIDAgc3BhbiBpbnN0ZWFkIG9mIDM2
MAorICAgIGlmICghKHFGdXp6eUNvbXBhcmUoc3BhbiArIChlYSAtIHNhKSwgMC4wKSAmJgorICAg
ICAgICAgIHFGdXp6eUNvbXBhcmUoYWJzKHNwYW4pLCAzNjAuMCkpKSB7CisgICAgICAgIHNwYW4g
ICArPSBlYSAtIHNhOworICAgIH0KKworICAgIG1fcGF0aC0+bW92ZVRvKFFQb2ludEYoeGMgKyBy
YWRpdXMgICogY29zKHNhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHljIC0gcmFkaXVz
ICAqIHNpbihzYXIpKSk7CisgICAgbV9wYXRoLT5hcmNUbyh4cywgeXMsIHdpZHRoLCBoZWlnaHQs
IHNhLCBzcGFuKTsKK30KKwordm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikK
K3sKKyAgICBtX3BhdGgtPmFkZFJlY3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0
KCkpOworfQorCit2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQorewor
ICAgIG1fcGF0aC0+YWRkRWxsaXBzZShyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQo
KSk7Cit9CisKK3ZvaWQgUGF0aDo6Y2xlYXIoKQoreworICAgICptX3BhdGggPSBRUGFpbnRlclBh
dGgoKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvTGluZUVkaXRR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcXQvTGluZUVkaXRRdC5jcHAJKFJldmlzaW9uIDApCisrKyBx
dC9MaW5lRWRpdFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiAgICAg
ICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFMgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5j
bHVkZSA8UUxpbmVFZGl0PgorCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgorI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJXaWRnZXQu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxpbmVFZGl0LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSGVscGVyUXQuaCIKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1BsYXRmb3JtTGluZUVkaXQ6OlBsYXRmb3JtTGluZUVkaXQoUGxhdGZv
cm1MaW5lRWRpdDo6VHlwZSB0eXBlKSA6IG1fbGluZUVkaXQoMCksIG1fdHlwZSh0eXBlKQorewor
ICAgIHFEZWJ1ZygiUGxhdGZvcm1MaW5lRWRpdDo6UGxhdGZvcm1MaW5lRWRpdCgpLCB0aGlzPSVw
IiwgdGhpcyk7Cit9CisKK1BsYXRmb3JtTGluZUVkaXQ6On5QbGF0Zm9ybUxpbmVFZGl0KCkKK3sK
KyAgICBxRGVidWcoIlBsYXRmb3JtTGluZUVkaXQ6On5QbGF0Zm9ybUxpbmVFZGl0KCkiKTsKK30K
Kwordm9pZCBQbGF0Zm9ybUxpbmVFZGl0OjpzZXRQYXJlbnRXaWRnZXQoUVdpZGdldCogcGFyZW50
KQoreworICAgIHFEZWJ1ZygiUGxhdGZvcm1MaW5lRWRpdDo6c2V0UGFyZW50V2lkZ2V0KCksIHBh
cmVudD0lcCIsIHBhcmVudCk7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnRXaWRnZXQocGFyZW50KTsK
KworICAgIFFfQVNTRVJUKG1fbGluZUVkaXQgPT0gMCk7CisgICAgbV9saW5lRWRpdCA9IG5ldyBR
TGluZUVkaXQocGFyZW50KTsKKworICAgIGlmKG1fdHlwZSA9PSBQYXNzd29yZCkKKyAgICAgICAg
bV9saW5lRWRpdC0+c2V0RWNob01vZGUoUUxpbmVFZGl0OjpQYXNzd29yZCk7CisKKyAgICBzZXRR
V2lkZ2V0KG1fbGluZUVkaXQpOworfQorCit2b2lkIFBsYXRmb3JtTGluZUVkaXQ6OnNldENvbG9y
cyhjb25zdCBXZWJDb3JlOjpDb2xvciYgYmFja2dyb3VuZCwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
IGZvcmVncm91bmQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9y
bUxpbmVFZGl0OjpzZXRBbGlnbm1lbnQoV2ViQ29yZTo6SG9yaXpvbnRhbEFsaWdubWVudCBhbGln
bikKK3sKKyAgICBRdDo6QWxpZ25tZW50IHF0QWxpZ247CisKKyAgICBzd2l0Y2goYWxpZ24pCisg
ICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIEFsaWduTGVmdDogcXRBbGlnbiA9
IFF0OjpBbGlnbkxlZnQ7IGJyZWFrOworICAgICAgICBjYXNlIEFsaWduUmlnaHQ6IHF0QWxpZ24g
PSBRdDo6QWxpZ25SaWdodDsgYnJlYWs7CisgICAgICAgIGNhc2UgQWxpZ25IQ2VudGVyOiBxdEFs
aWduID0gUXQ6OkFsaWduSENlbnRlcjsgYnJlYWs7CisgICAgfQorCisgICAgbV9saW5lRWRpdC0+
c2V0QWxpZ25tZW50KHF0QWxpZ24pOworfQorCit2b2lkIFBsYXRmb3JtTGluZUVkaXQ6OnNldEN1
cnNvclBvc2l0aW9uKGludCBwb3MpCit7CisgICAgbV9saW5lRWRpdC0+c2V0Q3Vyc29yUG9zaXRp
b24ocG9zKTsKK30KKworaW50IFBsYXRmb3JtTGluZUVkaXQ6OmN1cnNvclBvc2l0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9saW5lRWRpdC0+Y3Vyc29yUG9zaXRpb24oKTsKK30KKwordm9p
ZCBQbGF0Zm9ybUxpbmVFZGl0OjpzZXRFZGl0ZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIFBsYXRmb3JtTGluZUVkaXQ6OmVkaXRlZCgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGxhdGZvcm1M
aW5lRWRpdDo6c2V0Rm9udChjb25zdCBXZWJDb3JlOjpGb250JiBmb250KQoreworICAgIG1fbGlu
ZUVkaXQtPnNldEZvbnQodG9RRm9udChmb250KSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1MaW5lRWRp
dDo6c2V0TWF4TGVuZ3RoKGludCBsZW5ndGgpCit7CisgICAgbV9saW5lRWRpdC0+c2V0TWF4TGVu
Z3RoKGxlbmd0aCk7Cit9CisKK2ludCBQbGF0Zm9ybUxpbmVFZGl0OjptYXhMZW5ndGgoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xpbmVFZGl0LT5tYXhMZW5ndGgoKTsKK30KKwordm9pZCBQbGF0
Zm9ybUxpbmVFZGl0OjpzZXRSZWFkT25seShib29sIHZhbHVlKQoreworICAgIG1fbGluZUVkaXQt
PnNldFJlYWRPbmx5KHZhbHVlKTsKK30KKworYm9vbCBQbGF0Zm9ybUxpbmVFZGl0Ojppc1JlYWRP
bmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saW5lRWRpdC0+aXNSZWFkT25seSgpOworfQor
Cit2b2lkIFBsYXRmb3JtTGluZUVkaXQ6OnNldFRleHQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBz
dHIpCit7CisgICAgbV9saW5lRWRpdC0+c2V0VGV4dCh0b1FTdHJpbmcoc3RyKSk7Cit9CisKK1dl
YkNvcmU6OlN0cmluZyBQbGF0Zm9ybUxpbmVFZGl0Ojp0ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZnJvbVFTdHJpbmcobV9saW5lRWRpdC0+dGV4dCgpKTsKK30KKwordm9pZCBQbGF0Zm9ybUxp
bmVFZGl0OjpzZXRXcml0aW5nRGlyZWN0aW9uKFdlYkNvcmU6OlRleHREaXJlY3Rpb24gZGlyKQor
eworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gcURpcjsKKworICAgIHN3aXRjaChkaXIpCisgICAg
eworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIExUUjogcURpciA9IFF0OjpMZWZ0VG9S
aWdodDsgYnJlYWs7CisgICAgICAgIGNhc2UgUlRMOiBxRGlyID0gUXQ6OlJpZ2h0VG9MZWZ0OyBi
cmVhazsKKyAgICB9CisKKyAgICBtX2xpbmVFZGl0LT5zZXRMYXlvdXREaXJlY3Rpb24ocURpcik7
Cit9CisKK3ZvaWQgUGxhdGZvcm1MaW5lRWRpdDo6c2VsZWN0QWxsKCkKK3sKKyAgICBtX2xpbmVF
ZGl0LT5zZWxlY3RBbGwoKTsKK30KKworYm9vbCBQbGF0Zm9ybUxpbmVFZGl0OjpoYXNTZWxlY3Rl
ZFRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xpbmVFZGl0LT5oYXNTZWxlY3RlZFRleHQo
KTsKK30KKworaW50IFBsYXRmb3JtTGluZUVkaXQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9saW5lRWRpdC0+c2VsZWN0aW9uU3RhcnQoKTsKK30KKworV2ViQ29yZTo6
U3RyaW5nIFBsYXRmb3JtTGluZUVkaXQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZyb21RU3RyaW5nKG1fbGluZUVkaXQtPnNlbGVjdGVkVGV4dCgpKTsKK30KKwordm9pZCBQ
bGF0Zm9ybUxpbmVFZGl0OjpzZXRTZWxlY3Rpb24oaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKQorewor
ICAgIG1fbGluZUVkaXQtPnNldFNlbGVjdGlvbihzdGFydCwgbGVuZ3RoKTsKK30KKworSW50U2l6
ZSBQbGF0Zm9ybUxpbmVFZGl0OjpzaXplRm9yQ2hhcmFjdGVyV2lkdGgoaW50IG51bUNoYXJhY3Rl
cnMpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50U2l6ZSgp
OworfQorCitpbnQgUGxhdGZvcm1MaW5lRWRpdDo6YmFzZWxpbmVQb3NpdGlvbihpbnQgaGVpZ2h0
KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1dp
ZGdldDo6Rm9jdXNQb2xpY3kgUGxhdGZvcm1MaW5lRWRpdDo6Zm9jdXNQb2xpY3koKSBjb25zdAor
eworCXJldHVybiBXaWRnZXQ6OmZvY3VzUG9saWN5KCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1MaW5l
RWRpdDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgUGxhdGZvcm1MaW5lRWRpdDo6c2V0TGl2ZVNlYXJjaChib29sIGxpdmVT
ZWFyY2gpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUxpbmVF
ZGl0OjpzZXRBdXRvU2F2ZU5hbWUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuYW1lKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1MaW5lRWRpdDo6c2V0TWF4UmVz
dWx0cyhpbnQgbWF4UmVzdWx0cykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFBsYXRmb3JtTGluZUVkaXQ6OnNldFBsYWNlaG9sZGVyU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlN0
cmluZyYgcGxhY2Vob2xkZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
bGF0Zm9ybUxpbmVFZGl0OjphZGRTZWFyY2hSZXN1bHQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9SZXNvdXJjZUxvYWRlckN1
cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHF0L1Jlc291cmNlTG9hZGVyQ3VybC5jcHAJKFJldmlzaW9u
IDApCisrKyBxdC9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSGVscGVyUXQuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgorCisjaW5jbHVkZSAi
RG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJJbnRlcm5hbC5oIgorI2luY2x1
ZGUgIlJlc291cmNlTG9hZGVyTWFuYWdlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Jl
c291cmNlTG9hZGVySW50ZXJuYWw6On5SZXNvdXJjZUxvYWRlckludGVybmFsKCkKK3sKK30KKwor
UmVzb3VyY2VMb2FkZXI6On5SZXNvdXJjZUxvYWRlcigpCit7CisgICAgY2FuY2VsKCk7Cit9CisK
K2Jvb2wgUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KERvY0xvYWRlciogZG9jTG9hZGVyKQoreworICAg
IFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0KCktPmFkZCh0aGlzKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlcjo6Y2FuY2VsKCkKK3sKKyAgICBSZXNvdXJjZUxv
YWRlck1hbmFnZXI6OmdldCgpLT5jYW5jZWwodGhpcyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
ZXI6OmFzc2VtYmxlUmVzcG9uc2VIZWFkZXJzKCkgY29uc3QKK3sKKyAgICBpZiAoIWQtPmFzc2Vt
YmxlZFJlc3BvbnNlSGVhZGVycykgeworICAgICAgICBkLT5yZXNwb25zZUhlYWRlcnMgPSBEZXBy
ZWNhdGVkU3RyaW5nOjpmcm9tVXRmOChkLT5yZXNwb25zZS50b1V0ZjgoKSwgZC0+cmVzcG9uc2Uu
bGVuZ3RoKCkpOworICAgICAgICBkLT5hc3NlbWJsZWRSZXNwb25zZUhlYWRlcnMgPSB0cnVlOwor
IAorICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoZSBjbGllbnQgYWN0aXZhdGlvbiB0byByZWNlaXZl
ZFJlc3BvbnNlKCksIG9uY2UKKyAgICAgICAgLy8gd2UgdXNlIEtJTywgYW5kIHJlY2VpdmVkUmVz
cG9uc2UoKSBpcyBjYWxsZWQgb25seSBvbmNlLgorICAgICAgICBpZiAoZC0+Y2xpZW50KQorICAg
ICAgICAgICAgZC0+Y2xpZW50LT5yZWNlaXZlZFJlc3BvbnNlKGNvbnN0X2Nhc3Q8UmVzb3VyY2VM
b2FkZXIgKj4odGhpcyksIChjaGFyICopIGQtPnJlc3BvbnNlLmRhdGEoKSk7CisKKyAgICAgICAg
ZC0+cmVzcG9uc2UgPSBRU3RyaW5nKCk7IC8vIFJlc2V0CisgICAgfQorfQorCit2b2lkIFJlc291
cmNlTG9hZGVyOjpyZXRyaWV2ZUNoYXJzZXQoKSBjb25zdAoreworICAgIGlmICghZC0+cmV0cmll
dmVkQ2hhcnNldCkgeworICAgICAgICBkLT5yZXRyaWV2ZWRDaGFyc2V0ID0gdHJ1ZTsKKyAgICB9
CisKKyAgICAvLyBUT0RPOiBXZSBjYW4ganVzdCBwYXJzZSB0aGUgaGVhZGVycyBoZXJlLCBidXQg
b25jZSB3ZSB1c2UgS0lPCisgICAgLy8gd2UgY2FuIHNldCB0aGUgcmVzcG9uc2UgcGFyYW1ldGVy
IHRvIHN0aC4gZWxzZSB0aGFuIGEgImNoYXIqIi4KKyAgICAvLyBJIHNhdmUgbXkgdGltZSBidXQg
bm90IGltcGxlbWVudGluZyBpdCBmb3Igbm93IDotKQorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkUmVzcG9uc2UoY2hhciogcmVzcG9uc2Up
Cit7CisgICAgUV9BU1NFUlQobWV0aG9kKCkgPT0gIlBPU1QiKTsKKworICAgIGQtPmFzc2VtYmxl
ZFJlc3BvbnNlSGVhZGVycyA9IGZhbHNlOworICAgIGQtPnJldHJpZXZlZENoYXJzZXQgPSBmYWxz
ZTsKKworICAgIC8vIFRPRE86IFRoaXMgaXMgZmxhd2VkOgorICAgIC8vIC0gdXN1YWxseSByZWNl
aXZlZFJlc3BvbnNlKCkgc2hvdWxkIGJlIGNhbGxlZCBfb25jZV8sIHdoZW4gdGhlCisgICAgLy8g
ICByZXNwb25zZSBpcyBhdmFpbGFibGUgLSBzZWVtcyB2ZXJ5IHVuZmxleGlibGUgdG8gZG8gdGhh
dCB3aXRoIGxpYmN1cmwKKyAgICAvLyAgIChzbyBsZXQncyB3YWl0IHVudGlsIGl0IGRpZXMgYW5k
IGRvIGl0IHByb3Blcmx5IHdpdGggS0lPIHRoZW4uKQorICAgIC8vIC0gUVN0cmluZzo6ZnJvbUxh
dGluMSgpIGlzIGFsc28gd3JvbmcsIG9mIGNvdXJzZS4KKyAgICAvLworICAgIC8vIEFueXdheSwg
bGV0J3MgY29sbGVjdCB0aGUgcmVzcG9uc2UgZGF0YSBoZXJlLCBhcyB0aGUgUmVzb3VyY2VMb2Fk
ZXJNYW5hZ2VyCisgICAgLy8gY2FsbHMgdXMgZm9yIGV2ZXJ5IGxpbmUgb2YgdGhlIGhlYWRlciBp
dCByZWNlaXZlcy4KKyAgICBkLT5yZXNwb25zZSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKHJlc3Bv
bnNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyB2aW06IHRzPTQgc3c9NCBl
dApJbmRleDogcXQvUGxhdGZvcm1Nb3VzZUV2ZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L1Bs
YXRmb3JtTW91c2VFdmVudFF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L1BsYXRmb3JtTW91c2VF
dmVudFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCisKKyNpbmNsdWRlIDxRTW91c2VFdmVudD4KKworbmFtZXNwYWNlIFdlYkNv
cmUKK3sKKworY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50OjpDdXJyZW50RXZlbnRUYWcgUGxhdGZv
cm1Nb3VzZUV2ZW50OjpjdXJyZW50RXZlbnQgPSB7fTsKKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2ZW50LCBpbnQgY2xpY2tDb3VudCkKK3sK
KyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoZXZlbnQtPnBvcygpKTsKKyAgICBtX2dsb2JhbFBv
c2l0aW9uID0gSW50UG9pbnQoZXZlbnQtPmdsb2JhbFBvcygpKTsKKyAgICBpZiAoZXZlbnQtPmJ1
dHRvbigpID09IFF0OjpMZWZ0QnV0dG9uIHx8CisgICAgICAgIChldmVudC0+YnV0dG9ucygpICYg
UXQ6OkxlZnRCdXR0b24pKQorICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247CisgICAgZWxz
ZSBpZiAoZXZlbnQtPmJ1dHRvbigpID09IFF0OjpSaWdodEJ1dHRvbiB8fAorICAgICAgICAgICAg
IChldmVudC0+YnV0dG9ucygpICYgUXQ6OlJpZ2h0QnV0dG9uKSkKKyAgICAgICAgbV9idXR0b24g
PSBSaWdodEJ1dHRvbjsKKyAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uKCkgPT0gUXQ6Ok1pZEJ1
dHRvbiB8fAorICAgICAgICAgICAgIChldmVudC0+YnV0dG9ucygpICYgUXQ6Ok1pZEJ1dHRvbikp
CisgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOworICAgIG1fY2xpY2tDb3VudCA9IGNs
aWNrQ291bnQ7CisgICAgbV9zaGlmdEtleSA9ICAoZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6OlNo
aWZ0TW9kaWZpZXIpICE9IDA7CisgICAgbV9jdHJsS2V5ID0gKGV2ZW50LT5tb2RpZmllcnMoKSAm
IFF0OjpDb250cm9sTW9kaWZpZXIpICE9IDA7CisgICAgbV9hbHRLZXkgPSAgKGV2ZW50LT5tb2Rp
ZmllcnMoKSAmIFF0OjpBbHRNb2RpZmllcikgIT0gMDsKKyAgICBtX21ldGFLZXkgPSAoZXZlbnQt
Pm1vZGlmaWVycygpICYgUXQ6Ok1ldGFNb2RpZmllcikgIT0gMDsgICAgCit9CisKK30KSW5kZXg6
IHF0L0ZvbnREYXRhUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0ZvbnREYXRhUXQuY3BwCShSZXZp
c2lvbiAwKQorKysgcXQvRm9udERhdGFRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9y
Zz4gCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRm9udERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkZvbnQuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIu
aD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlIDxRRm9udE1ldHJpY3M+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBRRm9udE1ldHJpY3MgbWV0cmljcyht
X2ZvbnQuZm9udCgpKTsKKyAgICBtX2FzY2VudCA9IG1ldHJpY3MuYXNjZW50KCk7CisgICAgbV9k
ZXNjZW50ID0gbWV0cmljcy5kZXNjZW50KCk7CisgICAgbV9saW5lU3BhY2luZyA9IG1ldHJpY3Mu
bGluZVNwYWNpbmcoKTsKKyAgICBtX2xpbmVHYXAgPSBtZXRyaWNzLmxlYWRpbmcoKTsKKyAgICBt
X3hIZWlnaHQgPSBtZXRyaWNzLnhIZWlnaHQoKTsKKyAgICBtX2xpbmVTcGFjaW5nID0gbV9hc2Nl
bnQgKyBtX2Rlc2NlbnQgKyBtX2xpbmVHYXA7Cit9CisKK3ZvaWQgRm9udERhdGE6OnBsYXRmb3Jt
RGVzdHJveSgpCit7Cit9CisKK0ZvbnREYXRhKiBGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9CisKK2Jvb2wgRm9udERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQoreworfQorCitmbG9hdCBGb250RGF0
YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIHJldHVy
biBRRm9udE1ldHJpY3NGKG1fZm9udC5mb250KCkpLndpZHRoKFFDaGFyKHVzaG9ydChnbHlwaCkp
KTsKK30KKworCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9SZW5kZXJUaGVt
ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9SZW5kZXJUaGVtZVF0LmNwcAkoUmV2aXNpb24gMCkK
KysrIHF0L1JlbmRlclRoZW1lUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3NSBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiAgICAg
ICAgICAgICAgIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPFFTdHlsZT4KKyNpbmNsdWRlIDxR
V2lkZ2V0PgorI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkJ1dHRv
bj4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSGVscGVyUXQuaCIKKyNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclRoZW1lUXQgOiBwdWJsaWMgUmVuZGVyVGhl
bWUKK3sKK3B1YmxpYzoKKyAgICBSZW5kZXJUaGVtZVF0KCkgOiBSZW5kZXJUaGVtZSgpIHsgfQor
CisgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJvbHMgYWN0dWFsbHkg
Y2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgorICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKKyAgICB7IHJl
dHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2Jv
eFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpCisgICAgeyByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIGlzQ29udHJv
bFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhY2tncm91bmRMYXll
ciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBv
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlclBv
cHVwTWVudSogY3JlYXRlUG9wdXBNZW51KFJlbmRlckFyZW5hKiwgRG9jdW1lbnQqLCBSZW5kZXJN
ZW51TGlzdCopOworCQorcHJpdmF0ZToKKyAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICBib29sIHN1cHBvcnRz
Rm9jdXMoRUFwcGVhcmFuY2UpIGNvbnN0OworCisgICAgYm9vbCBzdHlsZVBhaW50ZXJBbmRXaWRn
ZXRGb3JQYWludEluZm8oY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIFFTdHlsZSom
IHN0eWxlLCBRUGFpbnRlciomIHBhaW50ZXIsIFFXaWRnZXQqJiB3aWRnZXQpIGNvbnN0OworCisg
ICAgRUFwcGVhcmFuY2UgYXBwbHlUaGVtZShRU3R5bGVPcHRpb24mIG9wdGlvbiwgUmVuZGVyT2Jq
ZWN0KiBvKSBjb25zdDsKK307CisKK1JlbmRlclRoZW1lKiB0aGVtZSgpCit7CisgICAgc3RhdGlj
IFJlbmRlclRoZW1lUXQgcnQ7CisgICAgcmV0dXJuICZydDsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZVF0Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3Jk
ZXJEYXRhJiBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQmFja2dyb3VuZExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yKSBjb25zdAoreworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZEFw
cGVhcmFuY2UgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYUFwcGVhcmFuY2UpCisg
ICAgICAgIHJldHVybiBzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyOworCisgICAgcmV0dXJuIFJl
bmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFj
a2dyb3VuZENvbG9yKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0Ojpjb250cm9sU3VwcG9ydHNU
aW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgaWYgKCFpc0VuYWJsZWQo
bykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrYm94ZXMgb25seSBoYXZl
IHRpbnQgd2hlbiBjaGVja2VkLgorICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0g
Q2hlY2tib3hBcHBlYXJhbmNlKQorICAgICAgICByZXR1cm4gaXNDaGVja2VkKG8pOworCisgICAg
Ly8gRm9yIG5vdyBhc3N1bWUgb3RoZXIgY29udHJvbHMgaGF2ZSB0aW50IGlmIGVuYWJsZWQuCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udChpbnQg
cHJvcElkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitSZW5kZXJQb3B1cE1lbnUqIFJlbmRlclRoZW1lUXQ6OmNy
ZWF0ZVBvcHVwTWVudShSZW5kZXJBcmVuYSosIERvY3VtZW50KiwgUmVuZGVyTWVudUxpc3QqKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRdDo6YWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7
CisgICAgLy8gQ3V0IG91dCB0aGUgaW50cmluc2ljIG1hcmdpbnMgY29tcGxldGVseSBpZiB3ZSBl
bmQgdXAgdXNpbmcgYSBzbWFsbCBmb250IHNpemUKKyAgICBpZiAoc3R5bGUtPmZvbnRTaXplKCkg
PCAxMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW50cmluc2ljIG1hcmdpbiB2YWx1ZS4K
KyAgICBjb25zdCBpbnQgbSA9IDI7CisKKyAgICAvLyBGSVhNRTogVXNpbmcgd2lkdGgvaGVpZ2h0
IGFsb25lIGFuZCBub3QgYWxzbyBkZWFsaW5nIHdpdGggbWluLXdpZHRoL21heC13aWR0aCBpcyBm
bGF3ZWQuCisgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKKyAg
ICAgICAgaWYgKHN0eWxlLT5tYXJnaW5MZWZ0KCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxl
LT5zZXRNYXJnaW5MZWZ0KExlbmd0aChtLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUtPm1h
cmdpblJpZ2h0KCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5SaWdodChM
ZW5ndGgobSwgRml4ZWQpKTsKKyAgICB9CisKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0
bygpKSB7CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luVG9wKCkucXVpcmsoKSkKKyAgICAgICAg
ICAgIHN0eWxlLT5zZXRNYXJnaW5Ub3AoTGVuZ3RoKG0sIEZpeGVkKSk7CisgICAgICAgIGlmIChz
dHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmsoKSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJn
aW5Cb3R0b20oTGVuZ3RoKG0sIEZpeGVkKSk7CisgICAgfQorfQorCitib29sIFJlbmRlclRoZW1l
UXQ6OnN0eWxlUGFpbnRlckFuZFdpZGdldEZvclBhaW50SW5mbyhjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgUVN0eWxlKiYgc3R5bGUsIFFQYWludGVyKiYgcGFpbnRlciwgUVdpZGdl
dComIHdpZGdldCkgY29uc3QKK3sKKyAgICBwYWludGVyID0gKGkucCA/IHN0YXRpY19jYXN0PFFQ
YWludGVyICo+KGkucC0+cGxhdGZvcm1Db250ZXh0KCkpIDogMCk7CisgICAgd2lkZ2V0ID0gKHBh
aW50ZXIgPyBzdGF0aWNfY2FzdDxRV2lkZ2V0ICo+KHBhaW50ZXItPmRldmljZSgpKSA6IDApOwor
ICAgIHN0eWxlID0gKHdpZGdldCA/IHdpZGdldC0+c3R5bGUoKSA6IDApOworCisgICAgaWYgKHBh
aW50ZXIgJiYgd2lkZ2V0ICYmIHN0eWxlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRDaGVja2JveFNpemUoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0
IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYg
KCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiAgQSBoYXJkLWNvZGVk
IHNpemUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2FyeSBmb3Igbm93
LiAgSXQgbWF0Y2hlcyBGaXJlZm94LgorICAgIC8vIEF0IGRpZmZlcmVudCBEUEkgc2V0dGluZ3Mg
b24gV2luZG93cywgcXVlcnlpbmcgdGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdlciBzaXplIHRo
YXQgYWNjb3VudHMgZm9yCisgICAgLy8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBvdXIgZW50aXJl
IGVuZ2luZSBob25vcnMgYSBEUEkgc2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBjYW4ndCByZWx5
IG9uIHRoZSB0aGVtZSdzCisgICAgLy8gbWV0cmljcy4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCku
aXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxMywg
Rml4ZWQpKTsKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICBzdHls
ZS0+c2V0SGVpZ2h0KExlbmd0aCgxMywgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0
OjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIFRoaXMg
aXMgdGhlIHNhbWUgYXMgY2hlY2tib3hlcy4KKyAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOwor
fQorCitib29sIFJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzRm9jdXMoRUFwcGVhcmFuY2UgYXBwZWFy
YW5jZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICAgICAgY2FzZSBQ
dXNoQnV0dG9uQXBwZWFyYW5jZToKKyAgICAgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgorICAg
ICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0VBcHBlYXJhbmNlIFJlbmRlclRoZW1lUXQ6OmFwcGx5VGhl
bWUoUVN0eWxlT3B0aW9uJiBvcHRpb24sIFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICAv
LyBEZWZhdWx0IGJpdHM6IG5vIGZvY3VzLCBubyBtb3VzZSBvdmVyCisgICAgb3B0aW9uLnN0YXRl
ICY9IH4oUVN0eWxlOjpTdGF0ZV9IYXNGb2N1cyB8IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyKTsK
KworICAgIGlmICghaXNFbmFibGVkKG8pKQorICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHls
ZTo6U3RhdGVfRW5hYmxlZDsKKyAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykpCisgICAgICAg
IG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1JlYWRPbmx5OyAvLyBSZWFkb25seSBpcyBz
dXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KKyAgICBpZiAoc3VwcG9ydHNGb2N1cyhvLT5zdHlsZSgp
LT5hcHBlYXJhbmNlKCkpICYmIGlzRm9jdXNlZChvKSkKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9
IFFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7CisgICAgaWYgKGlzSG92ZXJlZChvKSkKKyAgICAgICAg
b3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyOworICAgIGlmIChpc1ByZXNz
ZWQobykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKwor
ICAgIEVBcHBlYXJhbmNlIHJlc3VsdCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBp
ZihyZXN1bHQgPT0gUmFkaW9BcHBlYXJhbmNlIHx8IHJlc3VsdCA9PSBDaGVja2JveEFwcGVhcmFu
Y2UpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxlOjpTdGF0
ZV9PbiA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0
Cit7CisgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVRdDo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBRU3R5bGUgKnN0eWxlID0gMDsK
KyAgICBRUGFpbnRlciAqcGFpbnRlciA9IDA7CisgICAgUVdpZGdldCAqd2lkZ2V0ID0gMDsKKyAg
ICAKKyAgICBpZiAoIXN0eWxlUGFpbnRlckFuZFdpZGdldEZvclBhaW50SW5mbyhpLCBzdHlsZSwg
cGFpbnRlciwgd2lkZ2V0KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgUVN0eWxl
T3B0aW9uQnV0dG9uIG9wdGlvbjsKKyAgICBvcHRpb24uaW5pdEZyb20od2lkZ2V0KTsKKyAgICBv
cHRpb24ucmVjdCA9IHI7CisKKyAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3Ig
YSBidXR0b24KKyAgICBFQXBwZWFyYW5jZSBhcHBlYXJhbmNlID0gYXBwbHlUaGVtZShvcHRpb24s
IG8pOworICAKKyAgICBpZihhcHBlYXJhbmNlID09IFB1c2hCdXR0b25BcHBlYXJhbmNlIHx8IGFw
cGVhcmFuY2UgPT0gQnV0dG9uQXBwZWFyYW5jZSkKKyAgICAgICAgc3R5bGUtPmRyYXdDb250cm9s
KFFTdHlsZTo6Q0VfUHVzaEJ1dHRvbiwgJm9wdGlvbiwgcGFpbnRlcik7CisgICAgZWxzZSBpZihh
cHBlYXJhbmNlID09IFJhZGlvQXBwZWFyYW5jZSkKKyAgICAgICAgc3R5bGUtPmRyYXdDb250cm9s
KFFTdHlsZTo6Q0VfUmFkaW9CdXR0b24sICZvcHRpb24sIHBhaW50ZXIpOworICAgIGVsc2UgaWYo
YXBwZWFyYW5jZSA9PSBDaGVja2JveEFwcGVhcmFuY2UpCisgICAgICAgIHN0eWxlLT5kcmF3Q29u
dHJvbChRU3R5bGU6OkNFX0NoZWNrQm94LCAmb3B0aW9uLCBwYWludGVyKTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0RmllbGRTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sK
KyAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0
OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFFTdHlsZSAqc3R5bGUgPSAwOwor
ICAgIFFQYWludGVyICpwYWludGVyID0gMDsKKyAgICBRV2lkZ2V0ICp3aWRnZXQgPSAwOworICAg
IAorICAgIGlmICghc3R5bGVQYWludGVyQW5kV2lkZ2V0Rm9yUGFpbnRJbmZvKGksIHN0eWxlLCBw
YWludGVyLCB3aWRnZXQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgCisgICAgUVN0eWxlT3B0
aW9uIG9wdGlvbjsKKworICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIGJ1
dHRvbgorICAgIEVBcHBlYXJhbmNlIGFwcGVhcmFuY2UgPSBhcHBseVRoZW1lKG9wdGlvbiwgbyk7
CisgICAgUV9BU1NFUlQoYXBwZWFyYW5jZSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlKTsKKworICAg
IC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KKyAgICAvLyBUT0RPOiB0aGlzIGlzIG5vdCBl
bm91Z2ggZm9yIHN1cmUhICh1c2UgJ29wdGlvbicuLi4pCisgICAgcGFpbnRlci0+ZHJhd1JlY3Qo
cik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
SW5kZXg6IHF0L1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvUmVz
b3VyY2VMb2FkZXJNYW5hZ2VyLmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L1Jlc291cmNlTG9hZGVy
TWFuYWdlci5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJSZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVySW50ZXJuYWwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQgc2VsZWN0VGltZW91dE1TID0gNTsKK2NvbnN0
IGRvdWJsZSBwb2xsVGltZVNlY29uZHMgPSAwLjA1OworCitSZXNvdXJjZUxvYWRlck1hbmFnZXI6
OlJlc291cmNlTG9hZGVyTWFuYWdlcigpCisgICAgOiBtX3VzZVNpbXBsZShmYWxzZSkKKyAgICAs
IGpvYnMobmV3IEhhc2hTZXQ8UmVzb3VyY2VMb2FkZXIqPikKKyAgICAsIG1fZG93bmxvYWRUaW1l
cih0aGlzLCAmUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2spCit7
CisgICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dMT0JBTF9BTEwpOworICAgIGN1cmxNdWx0aUhh
bmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworfQorCitSZXNvdXJjZUxvYWRlck1hbmFnZXIqIFJl
c291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0KCkKK3sKKyAgICBzdGF0aWMgUmVzb3VyY2VMb2FkZXJN
YW5hZ2VyKiBzaW5nbGV0b247CisgICAgaWYgKCFzaW5nbGV0b24pCisgICAgICAgIHNpbmdsZXRv
biA9IG5ldyBSZXNvdXJjZUxvYWRlck1hbmFnZXI7CisgICAgcmV0dXJuIHNpbmdsZXRvbjsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnVzZVNpbXBsZVRyYW5zZmVyKGJvb2wgdXNl
U2ltcGxlKQoreworICAgIG1fdXNlU2ltcGxlID0gdXNlU2ltcGxlOworfQorCitzdGF0aWMgc2l6
ZV90IHdyaXRlQ2FsbGJhY2sodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2
b2lkKiBvYmopCit7CisgICAgUmVzb3VyY2VMb2FkZXIqIGpvYiA9IHN0YXRpY19jYXN0PFJlc291
cmNlTG9hZGVyKj4ob2JqKTsKKyAgICBSZXNvdXJjZUxvYWRlckludGVybmFsKiBkID0gam9iLT5n
ZXRJbnRlcm5hbCgpOworICAgIGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7CisgICAgZC0+
Y2xpZW50LT5yZWNlaXZlZERhdGEoam9iLCBzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90YWxT
aXplKTsKKyAgICByZXR1cm4gdG90YWxTaXplOworfQorCitzdGF0aWMgc2l6ZV90IGhlYWRlckNh
bGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogb2JqKQor
eworICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRlcio+
KG9iaik7CisgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwo
KTsKKyAKKyAgICBpZiAoam9iLT5tZXRob2QoKSA9PSAiUE9TVCIpIHsKKyAgICAgICAgam9iLT5y
ZWNlaXZlZFJlc3BvbnNlKHB0cik7CisgICAgfQorICAgIAorICAgIGludCB0b3RhbFNpemUgPSBz
aXplICogbm1lbWI7CisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRlck1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUxvYWRlck1h
bmFnZXI+KiB0aW1lcikKK3sKKyAgICBpZiAoam9icy0+aXNFbXB0eSgpKSB7CisgICAgICAgIG1f
ZG93bmxvYWRUaW1lci5zdG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1f
dXNlU2ltcGxlKSB7CisgICAgICAgIGZvciAoSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+OjppdGVy
YXRvciBpdCA9IGpvYnMtPmJlZ2luKCk7IGl0ICE9IGpvYnMtPmVuZCgpOyArK2l0KSB7CisgICAg
ICAgICAgICBSZXNvdXJjZUxvYWRlciogam9iID0gKml0OworICAgICAgICAgICAgUmVzb3VyY2VM
b2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICAgICAgICAgIENVUkxj
b2RlIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGQtPm1faGFuZGxlKTsKKyAgICAgICAgICAgIGlm
IChyZXMgIT0gQ1VSTEVfT0spCisgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBXSVRIIEpP
QiAlZFxuIiwgcmVzKTsKKyAgICAgICAgICAgIGQtPmNsaWVudC0+cmVjZWl2ZWRBbGxEYXRhKGpv
YiwgMCk7CisgICAgICAgICAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IpOworICAg
ICAgICAgICAgY3VybF9lYXN5X2NsZWFudXAoZC0+bV9oYW5kbGUpOworICAgICAgICAgICAgZC0+
bV9oYW5kbGUgPSAwOworICAgICAgICB9CisgICAgICAgIGpvYnMtPmNsZWFyKCk7CisgICAgICAg
IG1fZG93bmxvYWRUaW1lci5zdG9wKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRkRfWkVSTygm
ZmRyZWFkKTsKKyAgICAgICAgRkRfWkVSTygmZmR3cml0ZSk7CisgICAgICAgIEZEX1pFUk8oJmZk
ZXhjZXApOworICAgICAgICBjdXJsX211bHRpX2Zkc2V0KGN1cmxNdWx0aUhhbmRsZSwgJmZkcmVh
ZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmbWF4ZmQpOworICAgICAgICBpbnQgbnJ1bm5pbmc7Cisg
ICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgICAgIGludCByZXR2YWw7CisgICAg
ICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICAgICAgdGltZW91dC50dl91c2VjID0gc2VsZWN0
VGltZW91dE1TICogMTAwMDsgICAgICAgLy8gc2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcworICAg
ICAgICByZXR2YWwgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsICZmZHdyaXRlLCAmZmRl
eGNlcCwgJnRpbWVvdXQpOworICAgICAgICBzd2l0Y2ggKHJldHZhbCkgeworICAgICAgICAgICAg
Y2FzZSAtMTogICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3QgZXJyb3IKKyNpZm5kZWYg
TkRFQlVHCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlcywgc2VsZWN0IGVycm9yKCVkKVxuIiwg
X19QUkVUVFlfRlVOQ1RJT05fXyxyZXR2YWwpOworI2VuZGlmCisgICAgICAgICAgICAgICAgLyog
ZmFsbHRocm91Z2gqLworICAgICAgICAgICAgY2FzZSAwOiAgICAgICAgICAgICAgICAgLy8gc2Vs
ZWN0IHRpbWVvdXQKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlcywg
c2VsZWN0IHRpbWVvdXQgJWRcbiIsIF9fUFJFVFRZX0ZVTkNUSU9OX18scmV0dmFsKTsKKyNlbmRp
ZgorICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoLiB0aGlzIGNhbiBiZSB0aGUgZmlyc3Qg
cGVyZm9ybSB0byBiZSBtYWRlICovCisgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIDErIGRlc2NyaXB0b3JzIGhhdmUgZGF0YQorICAgICAgICAgICAgICAgIHdo
aWxlIChDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gPT0gY3VybF9tdWx0aV9wZXJmb3JtKGN1cmxN
dWx0aUhhbmRsZSwgJm5ydW5uaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgeyB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBjaGVjayB0aGUgY3VybCBtZXNzYWdlcyBpbmRpY2F0aW5nIGNvbXBs
ZXRlZCB0cmFuc2ZlcnMKKyAgICAgICAgLy8gYW5kIGZyZWUgdGhlaXIgcmVzb3VyY2VzCisgICAg
ICAgIFJlc291cmNlTG9hZGVyKiBqb2I7CisgICAgICAgIGludCBubXNnczsKKyAgICAgICAgd2hp
bGUgKENVUkxNc2cqIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmxNdWx0aUhhbmRsZSwg
Jm5tc2dzKSkgeworICAgICAgICAgICAgaWYgKG1zZy0+bXNnID09IENVUkxNU0dfRE9ORSkgewor
ICAgICAgICAgICAgICAgIC8vIGZpbmQgdGhlIG5vZGUgd2hpY2ggaGFzIHNhbWUgZC0+bV9oYW5k
bGUgYXMgY29tcGxldGVkIHRyYW5zZmVyCisgICAgICAgICAgICAgICAgQ1VSTCogY2hhbmRsZSA9
IG1zZy0+ZWFzeV9oYW5kbGU7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGNoYW5kbGUpOworICAg
ICAgICAgICAgICAgIFJlc291cmNlTG9hZGVyICpqb2I7CisgICAgICAgICAgICAgICAgY3VybF9l
YXN5X2dldGluZm8oY2hhbmRsZSwgQ1VSTElORk9fUFJJVkFURSwgJmpvYik7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0KGpvYik7IC8vZml4bWU6IGFzc2VydC0+aWYgPworICAgICAgICAgICAgICAg
IC8vIGlmIGZvdW5kLCBkZWxldGUgaXQKKyAgICAgICAgICAgICAgICBpZiAoam9iKSB7CisgICAg
ICAgICAgICAgICAgICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwgKmQgPSBqb2ItPmdldEludGVy
bmFsKCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobXNnLT5kYXRhLnJlc3VsdCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDVVJMRV9PSzogeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHVzZSB0aGlzIHRvIGF1dGhlbnRpY2F0ZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgcmVzcENvZGUgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRsZSwgQ1VSTElORk9fUkVTUE9OU0VfQ09E
RSwgJnJlc3BDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoam9iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpbnRmKCJDdXJsIEVSUk9SICVzXG4iLCBjdXJsX2Vhc3lfc3RyZXJyb3Io
bXNnLT5kYXRhLnJlc3VsdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYi0+c2V0
RXJyb3IobXNnLT5kYXRhLnJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVt
b3ZlKGpvYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBwcmludGYoIkN1cmxSZXF1ZXN0IG5vdCBmb3VuZCwgZXZlbnRob3VnaCBjdXJsIGQtPm1faGFu
ZGxlIGZpbmlzaGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorICAgIGlmICgh
am9icy0+aXNFbXB0eSgpKQorICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RhcnRPbmVTaG90KHBv
bGxUaW1lU2Vjb25kcyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpyZW1vdmUo
UmVzb3VyY2VMb2FkZXIqIGpvYikKK3sKKyAgICBSZXNvdXJjZUxvYWRlckludGVybmFsKiBkID0g
am9iLT5nZXRJbnRlcm5hbCgpOworICAgIGlmICghZC0+bV9oYW5kbGUpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoam9icy0+Y29udGFpbnMoam9iKSkKKyAgICAgICAgam9icy0+cmVtb3ZlKGpv
Yik7CisgICAgaWYgKGpvYnMtPmlzRW1wdHkoKSkKKyAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0
b3AoKTsKKyAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IsIDApOworICAgIGQtPmNs
aWVudC0+cmVjZWl2ZWRBbGxEYXRhKGpvYik7CisgICAgaWYgKGQtPm1faGFuZGxlKSB7CisgICAg
ICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUsIGQtPm1faGFuZGxl
KTsKKyAgICAgICAgY3VybF9lYXN5X2NsZWFudXAoZC0+bV9oYW5kbGUpOworICAgICAgICBkLT5t
X2hhbmRsZSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6
YWRkKFJlc291cmNlTG9hZGVyKiBqb2IpCit7CisgICAgYm9vbCBzdGFydFRpbWVyID0gam9icy0+
aXNFbXB0eSgpOworICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVy
bmFsKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyB1cmwgPSBkLT5VUkwudXJsKCk7CisgICAgZC0+
bV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfUFJJVkFURSwgam9iKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBlcnJvcl9idWZmZXIpOworICAgIGN1cmxfZWFz
eV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVDYWxsYmFj
ayk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEs
IGpvYik7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IRUFERVJG
VU5DVElPTiwgaGVhZGVyQ2FsbGJhY2spOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5k
bGUsIENVUkxPUFRfV1JJVEVIRUFERVIsIGpvYik7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7CisgICAgY3VybF9lYXN5X3NldG9w
dChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9NQVhSRURJUlMsIDEwKTsKKyAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9BTlkpOworICAgIC8v
IHVybCBwdHIgbXVzdCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUgcmVxdWVzdAorICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVJMLCB1cmwuYXNjaWkoKSk7CisKKyAg
ICBpZihqb2ItPm1ldGhvZCgpID09ICJQT1NUIikgeworICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IHBvc3REYXRhID0gam9iLT5wb3N0RGF0YSgpLmZsYXR0ZW5Ub1N0cmluZygpOworCisgICAgICAg
IGNoYXIgKnBvc3REYXRhU3RyaW5nID0gKGNoYXIgKikgbWFsbG9jKHBvc3REYXRhLmxlbmd0aCgp
ICsgMSk7CisgICAgICAgIHN0cm5jcHkocG9zdERhdGFTdHJpbmcsIHBvc3REYXRhLmFzY2lpKCks
IHBvc3REYXRhLmxlbmd0aCgpKTsKKyAgICAgICAgcG9zdERhdGFTdHJpbmdbcG9zdERhdGEubGVu
Z3RoKCldID0gJ1wwJzsKKworICAgICAgICAvLyBUT0RPOiBEbyBpdCBwcm9wZXJseSBhZnRlciB3
ZSBnb3QgcmlkIG9mIGxpYmN1cmwhIChhbHNvIGxlYWtzIHRoZSBoZWFkZXJsaXN0LiBobXBmLikK
KyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERT
LCBwb3N0RGF0YVN0cmluZyk7CisgICAgfQorCisgICAgaWYgKG1fdXNlU2ltcGxlKQorICAgICAg
ICBqb2JzLT5hZGQoam9iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQ1VSTE1jb2RlIHJldCA9IGN1
cmxfbXVsdGlfYWRkX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUsIGQtPm1faGFuZGxlKTsKKyAgICAg
ICAgLy8gZG9uJ3QgY2FsbCBwZXJmb3JtLCBiZWNhdXNlIGV2ZW50cyBtdXN0IGJlIGFzeW5jCisg
ICAgICAgIC8vIHRpbWVvdXQgd2lsbCBvY2N1ciBhbmQgZG8gY3VybF9tdWx0aV9wZXJmb3JtCisg
ICAgICAgIGlmIChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeworICAg
ICAgICAgICAgcHJpbnRmKCJFcnJvciAlZCBzdGFydGluZyBqb2IgJXNcbiIsIHJldCwgZC0+VVJM
LnVybCgpLmFzY2lpKCkpOworICAgICAgICAgICAgam9iLT5zZXRFcnJvcigxKTsKKyAgICAgICAg
ICAgIHN0YXJ0VGltZXIgPWZhbHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGpvYnMt
PmFkZChqb2IpOworICAgIH0KKyAgICBpZiAoc3RhcnRUaW1lcikKKyAgICAgICAgbV9kb3dubG9h
ZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGltZVNlY29uZHMpOworfQorCit2b2lkIFJlc291cmNl
TG9hZGVyTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlTG9hZGVyKiBqb2IpCit7CisgICAgcmVtb3Zl
KGpvYik7CisgICAgam9iLT5zZXRFcnJvcigxKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvRm9udFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBxdC9Gb250UXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvRm9udFF0LmNwcAkoUmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11
ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhh
dXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuIDxzYW5kZmVsZEBrZGUub3JnPgorICogCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJG
b250RGF0YS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCisjaW5jbHVkZSA8UVBh
aW50ZXI+CisjaW5jbHVkZSA8UURlYnVnPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
Rm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
Rm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0Cit7CisgICAgLy9xRGVidWcoIkZvbnREYXRhOjpkcmF3R2x5cGhzIik7Cisg
ICAgUVBhaW50ZXIgJnAgPSAqZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAg
ICAvL3Auc2V0UGVuKGdyYXBoaWNzQ29udGV4dC0+cGVuKCkpOworICAgIENvbG9yIGNvbG9yID0g
Z3JhcGhpY3NDb250ZXh0LT5wZW4oKS5jb2xvcigpOworICAgIHAuc2V0UGVuKFFDb2xvcihjb2xv
ci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpKSk7CisgICAgcC5zZXRGb250KGZv
bnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CisgICAgUUNoYXIgKmJ1ZmZlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UUNoYXIqPihnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSkpOworICAgIFFTdHJpbmcg
c3RyID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEoYnVmZmVyLCBudW1HbHlwaHMpOworICAgIC8vIHFE
ZWJ1ZygpIDw8ICJGb250OjpkcmF3R2x5cGhzOiIgPDwgc3RyOworICAgIHAuZHJhd1RleHQoUVBv
aW50Rihwb2ludC54KCkscG9pbnQueSgpKSwgc3RyKTsKK30KKwordm9pZCBGb250OjpkcmF3Q29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
VGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gIyMj
IHN0eWxlLCBydW4uZnJvbSgpL2xlbmd0aCgpIGN1dC1vZmYKKyAgICBjdHgtPnBsYXRmb3JtQ29u
dGV4dCgpLT5kcmF3VGV4dChwb2ludC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcG9pbnQueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFFTdHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIgKj4ocnVu
LmNoYXJhY3RlcnMoKSArIHJ1bi5mcm9tKCkpLCBydW4ubGVuZ3RoKCkpKTsKK30KKworZmxvYXQg
Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
VGV4dFN0eWxlJikgY29uc3QKK3sKKyAgICAvLyAjIyMgc3R5bGUKKyAgICBRRm9udE1ldHJpY3NG
IG1ldHJpY3MocHJpbWFyeUZvbnQoKS0+bV9mb250LmZvbnQoKSk7CisgICAgcmV0dXJuIG1ldHJp
Y3Mud2lkdGgoUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hh
ciAqPihydW4uY2hhcmFjdGVycygpICsgcnVuLmZyb20oKSksIHJ1bi5sZW5ndGgoKSkpOworfQor
Cit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9JbnRSZWN0UXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHF0L0ludFJlY3RRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9JbnRSZWN0UXQu
Y3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKKyNp
bmNsdWRlIDxRUmVjdD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRSZWN0OjpJbnRSZWN0
KGNvbnN0IFFSZWN0JiByKSA6IG1fbG9jYXRpb24oci50b3BMZWZ0KCkpLCBtX3NpemUoci53aWR0
aCgpLCByLmhlaWdodCgpKQoreworfQorCitJbnRSZWN0OjpvcGVyYXRvciBRUmVjdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFFSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7Cit9CisK
K30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0NvbWJvQm94UXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHF0L0NvbWJvQm94UXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvQ29tYm9Cb3hR
dC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlIDxRQ29tYm9Cb3g+CisKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNvbWJvQm94LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworUGxhdGZvcm1Db21ib0JveDo6UGxhdGZvcm1Db21ib0JveCgpIDogV2lkZ2V0KCksIG1f
Y29tYm9Cb3goMCkKK3sKKyAgICBxRGVidWcoIlBsYXRmb3JtQ29tYm9Cb3g6OlBsYXRmb3JtQ29t
Ym9Cb3goKSwgdGhpcz0lcCIsIHRoaXMpOworfQorCitQbGF0Zm9ybUNvbWJvQm94Ojp+UGxhdGZv
cm1Db21ib0JveCgpCit7CisgICAgcURlYnVnKCJQbGF0Zm9ybUNvbWJvQm94Ojp+UGxhdGZvcm1D
b21ib0JveCgpLCB0aGlzPSVwIiwgdGhpcyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db21ib0JveDo6
c2V0UGFyZW50V2lkZ2V0KFFXaWRnZXQqIHBhcmVudCkKK3sKKyAgICBxRGVidWcoIlBsYXRmb3Jt
Q29tYm9Cb3g6OnNldFBhcmVudFdpZGdldCgpLCBwYXJlbnQ9JXAiLCBwYXJlbnQpOworICAgIFdp
ZGdldDo6c2V0UGFyZW50V2lkZ2V0KHBhcmVudCk7CisKKyAgICBRX0FTU0VSVChtX2NvbWJvQm94
ID09IDApOworICAgIG1fY29tYm9Cb3ggPSBuZXcgUUNvbWJvQm94KHBhcmVudCk7CisKKyAgICBz
ZXRRV2lkZ2V0KG1fY29tYm9Cb3gpOworfQorCit2b2lkIFBsYXRmb3JtQ29tYm9Cb3g6OmNsZWFy
KCkKK3sKKyAgICBtX2NvbWJvQm94LT5jbGVhcigpOworfQorCit2b2lkIFBsYXRmb3JtQ29tYm9C
b3g6OmFwcGVuZEl0ZW0oY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdGV4dCwgYm9vbCBlbmFibGVk
KQoreworICAgIG1fY29tYm9Cb3gtPmFkZEl0ZW0odG9RU3RyaW5nKHRleHQpKTsKK30KKwordm9p
ZCBQbGF0Zm9ybUNvbWJvQm94OjphcHBlbmRHcm91cExhYmVsKGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcgJnRleHQpCit7CisgICAgLy8gVE9ETzogR3JvdXAgbGFiZWw/CisgICAgbV9jb21ib0JveC0+
YWRkSXRlbSh0b1FTdHJpbmcodGV4dCkpOworfQorCit2b2lkIFBsYXRmb3JtQ29tYm9Cb3g6OmFw
cGVuZFNlcGFyYXRvcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0
Zm9ybUNvbWJvQm94OjpzZXRDdXJyZW50SXRlbShpbnQgaW5kZXgpCit7CisgICAgbV9jb21ib0Jv
eC0+c2V0Q3VycmVudEluZGV4KGluZGV4KTsKK30KKworSW50U2l6ZSBQbGF0Zm9ybUNvbWJvQm94
OjpzaXplSGludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29tYm9Cb3gtPnNpemVIaW50KCk7
Cit9CisKK0ludFJlY3QgUGxhdGZvcm1Db21ib0JveDo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdpZGdldDo6ZnJhbWVHZW9tZXRyeSgpOworfQorCit2b2lkIFBsYXRmb3Jt
Q29tYm9Cb3g6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1
cm4gV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KHIpOworfQorCitpbnQgUGxhdGZvcm1Db21ib0Jv
eDo6YmFzZWxpbmVQb3NpdGlvbihpbnQgaGVpZ2h0KSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db21ib0JveDo6c2V0Rm9u
dChjb25zdCBXZWJDb3JlOjpGb250JiBmb250KQoreworICAgIG1fY29tYm9Cb3gtPnNldEZvbnQo
dG9RRm9udChmb250KSk7Cit9CisKK1dpZGdldDo6Rm9jdXNQb2xpY3kgUGxhdGZvcm1Db21ib0Jv
eDo6Zm9jdXNQb2xpY3koKSBjb25zdAoreworCXJldHVybiBXaWRnZXQ6OmZvY3VzUG9saWN5KCk7
Cit9CisKK3ZvaWQgUGxhdGZvcm1Db21ib0JveDo6aXRlbVNlbGVjdGVkKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtQ29tYm9Cb3g6OnNldFdyaXRpbmdEaXJl
Y3Rpb24oV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBkaXIpCit7CisgICAgUXQ6OkxheW91dERpcmVj
dGlvbiBxRGlyOworCisgICAgc3dpdGNoKGRpcikKKyAgICB7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGNhc2UgTFRSOiBxRGlyID0gUXQ6OkxlZnRUb1JpZ2h0OyBicmVhazsKKyAgICAgICAg
Y2FzZSBSVEw6IHFEaXIgPSBRdDo6UmlnaHRUb0xlZnQ7IGJyZWFrOworICAgIH0KKworICAgIG1f
Y29tYm9Cb3gtPnNldExheW91dERpcmVjdGlvbihxRGlyKTsKK30KKwordm9pZCBQbGF0Zm9ybUNv
bWJvQm94Ojpwb3B1bGF0ZSgpCit7CisgICAgcG9wdWxhdGVNZW51KCk7Cit9CisKK3ZvaWQgUGxh
dGZvcm1Db21ib0JveDo6cG9wdWxhdGVNZW51KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvQ2FudmFzUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHF0L0NhbnZhc1F0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0NhbnZhc1F0LmNwcAko
UmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFjbEBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBT
dGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVs
bGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21h
bm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworI2luY2x1ZGUgIkNhbnZhc1F0LmgiCisjaW5jbHVkZSAiQ2FudmFzUXQubW9jIgorCisj
aW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiRnJh
bWVRdC5oIgorI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKKyNpbmNsdWRlICJLZXlib2FyZENv
ZGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU2VsZWN0aW9u
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUg
PFFQYWludGVyPgorI2luY2x1ZGUgPFFQYWludEV2ZW50PgorI2luY2x1ZGUgPFFNb3VzZUV2ZW50
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQ2FudmFzUXQ6OkNhbnZhc1F0KFdlYkNv
cmU6OlNjcm9sbFZpZXcgKmZyYW1lVmlldywgUVdpZGdldCAqcGFyZW50KQorICAgIDogUVdpZGdl
dChwYXJlbnQpLCBtX2ZyYW1lVmlldyhmcmFtZVZpZXcpCit7CisgICAgc2V0TW91c2VUcmFja2lu
Zyh0cnVlKTsKKyAgICBzZXRGb2N1c1BvbGljeShRdDo6U3Ryb25nRm9jdXMpOworfQorCit2b2lk
IENhbnZhc1F0OjpwYWludEV2ZW50KFFQYWludEV2ZW50ICpldikKK3sKKyAgICBGcmFtZVZpZXcg
KmZ2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV9mcmFtZVZpZXcpOworICAgIGlmICghZnYg
fHwgIWZ2LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUmVjdCBjbGlwID0gZXYt
PnJlY3QoKTsKKyAgICBRUGFpbnRlciBwKHRoaXMpOworICAgIEdyYXBoaWNzQ29udGV4dCBjdHgo
JnApOworICAgIGZ2LT5mcmFtZSgpLT5wYWludCgmY3R4LCBjbGlwKTsKK30KKworUVNpemUgQ2Fu
dmFzUXQ6OnNpemVIaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUVNpemUoMTAyNCwgNzY4KTsK
K30KKwordm9pZCBDYW52YXNRdDo6bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQgKmV2KQorewor
ICAgIEZyYW1lVmlldyAqZnYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX2ZyYW1lVmlldyk7
CisgICAgaWYgKCFmdiB8fCAhZnYtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZ2
LT5oYW5kbGVNb3VzZU1vdmVFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXYsIDApKTsKK30KKwor
dm9pZCBDYW52YXNRdDo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICpldikKK3sKKyAgICBG
cmFtZVZpZXcgKmZ2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV9mcmFtZVZpZXcpOworICAg
IGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmdi0+aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldiwgMSkpOworfQorCit2b2lk
IENhbnZhc1F0Ojptb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCAqZXYpCit7CisgICAgRnJh
bWVWaWV3ICpmdiA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fZnJhbWVWaWV3KTsKKyAgICBp
ZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnYtPmhhbmRs
ZU1vdXNlUmVsZWFzZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldiwgMCkpOworfQorCit2b2lk
IENhbnZhc1F0OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCAqZXYpCit7CisgICAgaGFuZGxlS2V5
RXZlbnQoZXYsIGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNRdDo6a2V5UmVsZWFzZUV2ZW50KFFL
ZXlFdmVudCAqZXYpCit7CisgICAgaGFuZGxlS2V5RXZlbnQoZXYsIHRydWUpOworfQorCit2b2lk
IENhbnZhc1F0OjpoYW5kbGVLZXlFdmVudChRS2V5RXZlbnQgKmV2LCBib29sIGlzS2V5VXApCit7
CisgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtldmVudChldiwgaXNLZXlVcCk7CisKKyAgICBG
cmFtZVZpZXcgKmZ2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV9mcmFtZVZpZXcpOworICAg
IEZyYW1lUXQgKmZyYW1lID0gKGZ2ID8gc3RhdGljX2Nhc3Q8RnJhbWVRdCo+KGZ2LT5mcmFtZSgp
KSA6IDApOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgaGFu
ZGxlZCA9IGZyYW1lLT5rZXlFdmVudChrZXZlbnQpOworCisgICAgaWYgKCFoYW5kbGVkICYmICFr
ZXZlbnQuaXNLZXlVcCgpKSB7CisgICAgICAgIE5vZGUqIHN0YXJ0ID0gZnJhbWUtPnNlbGVjdGlv
bigpLnN0YXJ0KCkubm9kZSgpOworICAgICAgICBpZiAoc3RhcnQgJiYgc3RhcnQtPmlzQ29udGVu
dEVkaXRhYmxlKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaChrZXZlbnQuV2luZG93c0tleUNvZGUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgVktfQkFDSzoKKyAgICAgICAgICAgICAgICAgICAg
VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfREVMRVRFOgor
ICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3Nl
ZChmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgVktfTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVj
dGlvbigpLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25Db250cm9s
bGVyOjpMRUZULCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfUklHSFQ6CisgICAgICAgICAgICAgICAgICAg
IGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6UklHSFQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19VUDoKKyAgICAgICAg
ICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVy
OjpNT1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpCQUNLV0FSRCwgUGFyYWdyYXBoR3JhbnVsYXJp
dHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZL
X0RPV046CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoU2Vs
ZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6Rk9SV0FSRCwgUGFy
YWdyYXBoR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNl
cnRUZXh0KGZyYW1lLT5kb2N1bWVudCgpLCBrZXZlbnQudGV4dCgpLCBmYWxzZSk7CisKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAvLyBUT0RPOiBkb1Njcm9sbCBzdHVmZigpIQorICAgIH0KK30KKworLy8gdmlt
OiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L1BhZ2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvUGFn
ZVF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L1BhZ2VRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
IDxRRGVidWc+CisjaW5jbHVkZSA8UVdpZGdldD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIFFXaWRnZXQgKnJvb3RXaW5kb3dGb3JGcmFtZShjb25zdCBGcmFtZSogZnJhbWUpCit7Cisg
ICAgRnJhbWVWaWV3ICpmcmFtZVZpZXcgPSAoZnJhbWUgPyBmcmFtZS0+dmlldygpIDogMCk7Cisg
ICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGZyYW1l
Vmlldy0+cXdpZGdldCgpOworfQorCitGbG9hdFJlY3QgUGFnZTo6d2luZG93UmVjdCgpIGNvbnN0
Cit7CisgICAgUVdpZGdldCAqd2lkZ2V0ID0gcm9vdFdpbmRvd0ZvckZyYW1lKG1haW5GcmFtZSgp
KTsKKyAgICBpZiAoIXdpZGdldCkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAg
cURlYnVnKCkgPDwgIiBQYWdlOjp3aW5kb3dSZWN0KCkgLT4gIiA8PCAoUVJlY3RGKSB3aWRnZXQt
Pmdlb21ldHJ5KCk7CisgICAgcmV0dXJuIChRUmVjdEYpIHdpZGdldC0+Z2VvbWV0cnkoKTsKK30K
Kwordm9pZCBQYWdlOjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBx
RGVidWcoKSA8PCAiIFBhZ2U6OnNldFdpbmRvd1JlY3QoKSAtPiAiIDw8IChRUmVjdEYpIHI7CisK
KyAgICBRV2lkZ2V0ICp3aWRnZXQgPSByb290V2luZG93Rm9yRnJhbWUobWFpbkZyYW1lKCkpOwor
ICAgIGlmICh3aWRnZXQpCisgICAgICAgIHdpZGdldC0+c2V0R2VvbWV0cnkoUVJlY3QocVJvdW5k
KHIueCgpKSwgcVJvdW5kKHIueSgpKSwgcVJvdW5kKHIud2lkdGgoKSksIHFSb3VuZChyLmhlaWdo
dCgpKSkpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9LZXlib2Fy
ZENvZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcXQvS2V5Ym9hcmRDb2Rlcy5oCShSZXZpc2lvbiAwKQor
KysgcXQvS2V5Ym9hcmRDb2Rlcy5oCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgS2V5Ym9hcmRD
b2Rlc19ICisjZGVmaW5lIEtleWJvYXJkQ29kZXNfSAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIFZLX0xCVVRUT04gKDAxKSBMZWZ0IG1vdXNlIGJ1dHRvbgorLy8gVktfUkJVVFRPTiAoMDIp
IFJpZ2h0IG1vdXNlIGJ1dHRvbgorLy8gVktfQ0FOQ0VMICgwMykgQ29udHJvbC1icmVhayBwcm9j
ZXNzaW5nCisvLyBWS19NQlVUVE9OICgwNCkgTWlkZGxlIG1vdXNlIGJ1dHRvbiAodGhyZWUtYnV0
dG9uIG1vdXNlKQorLy8gVktfWEJVVFRPTjEgKDA1KQorLy8gVktfWEJVVFRPTjIgKDA2KQorCisv
LyBWS19CQUNLICgwOCkgQkFDS1NQQUNFIGtleQorY29uc3QgaW50IFZLX0JBQ0sgPSAweDA4Owor
CisvLyBWS19UQUIgKDA5KSBUQUIga2V5Citjb25zdCBpbnQgVktfVEFCID0gMHgwOTsKKworLy8g
VktfQ0xFQVIgKDBDKSBDTEVBUiBrZXkKK2NvbnN0IGludCBWS19DTEVBUiA9IDB4MEM7CisKKy8v
IFZLX1JFVFVSTiAoMEQpCitjb25zdCBpbnQgVktfUkVUVVJOID0gMHgwRDsKKworLy8gVktfU0hJ
RlQgKDEwKSBTSElGVCBrZXkKK2NvbnN0IGludCBWS19TSElGVCA9IDB4MTA7CisKKy8vIFZLX0NP
TlRST0wgKDExKSBDVFJMIGtleQorY29uc3QgaW50IFZLX0NPTlRST0wgPSAweDExOworCisvLyBW
S19NRU5VICgxMikgQUxUIGtleQorY29uc3QgaW50IFZLX01FTlUgPSAweDEyOworCisvLyBWS19Q
QVVTRSAoMTMpIFBBVVNFIGtleQorY29uc3QgaW50IFZLX1BBVVNFID0gMHgxMzsKKworLy8gVktf
Q0FQSVRBTCAoMTQpIENBUFMgTE9DSyBrZXkKK2NvbnN0IGludCBWS19DQVBJVEFMID0gMHgxNDsK
KworLy8gVktfS0FOQSAoMTUpIElucHV0IE1ldGhvZCBFZGl0b3IgKElNRSkgS2FuYSBtb2RlCitj
b25zdCBpbnQgVktfS0FOQSA9IDB4MTU7CisKKy8vIFZLX0hBTkdVRUwgKDE1KSBJTUUgSGFuZ3Vl
bCBtb2RlIChtYWludGFpbmVkIGZvciBjb21wYXRpYmlsaXR5OyB1c2UgVktfSEFOR1VMKQorLy8g
VktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCitjb25zdCBpbnQgVktfSEFOR1VMID0gMHgx
NTsKKworLy8gVktfSlVOSkEgKDE3KSBJTUUgSnVuamEgbW9kZQorY29uc3QgaW50IFZLX0pVTkpB
ID0gMHgxNzsKKworLy8gVktfRklOQUwgKDE4KSBJTUUgZmluYWwgbW9kZQorY29uc3QgaW50IFZL
X0ZJTkFMID0gMHgxODsKKworLy8gVktfSEFOSkEgKDE5KSBJTUUgSGFuamEgbW9kZQorY29uc3Qg
aW50IFZLX0hBTkpBID0gMHgxOTsKKworLy8gVktfS0FOSkkgKDE5KSBJTUUgS2FuamkgbW9kZQor
Y29uc3QgaW50IFZLX0tBTkpJID0gMHgxOTsKKworLy8gVktfRVNDQVBFICgxQikgRVNDIGtleQor
Y29uc3QgaW50IFZLX0VTQ0FQRSA9IDB4MUI7CisKKy8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29u
dmVydAorY29uc3QgaW50IFZLX0NPTlZFUlQgPSAweDFDOworCisvLyBWS19OT05DT05WRVJUICgx
RCkgSU1FIG5vbmNvbnZlcnQKK2NvbnN0IGludCBWS19OT05DT05WRVJUID0gMHgxRDsKKworLy8g
VktfQUNDRVBUICgxRSkgSU1FIGFjY2VwdAorY29uc3QgaW50IFZLX0FDQ0VQVCA9IDB4MUU7CisK
Ky8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAorY29uc3QgaW50
IFZLX01PREVDSEFOR0UgPSAweDFGOworCisvLyBWS19TUEFDRSAoMjApIFNQQUNFQkFSCitjb25z
dCBpbnQgVktfU1BBQ0UgPSAweDIwOworCisvLyBWS19QUklPUiAoMjEpIFBBR0UgVVAga2V5Citj
b25zdCBpbnQgVktfUFJJT1IgPSAweDIxOworCisvLyBWS19ORVhUICgyMikgUEFHRSBET1dOIGtl
eQorY29uc3QgaW50IFZLX05FWFQgPSAweDIyOworCisvLyBWS19FTkQgKDIzKSBFTkQga2V5Citj
b25zdCBpbnQgVktfRU5EID0gMHgyMzsKKworLy8gVktfSE9NRSAoMjQpIEhPTUUga2V5Citjb25z
dCBpbnQgVktfSE9NRSA9IDB4MjQ7CisKKy8vIFZLX0xFRlQgKDI1KSBMRUZUIEFSUk9XIGtleQor
Y29uc3QgaW50IFZLX0xFRlQgPSAweDI1OworCisvLyBWS19VUCAoMjYpIFVQIEFSUk9XIGtleQor
Y29uc3QgaW50IFZLX1VQID0gMHgyNjsKKworLy8gVktfUklHSFQgKDI3KSBSSUdIVCBBUlJPVyBr
ZXkKK2NvbnN0IGludCBWS19SSUdIVCA9IDB4Mjc7CisKKy8vIFZLX0RPV04gKDI4KSBET1dOIEFS
Uk9XIGtleQorY29uc3QgaW50IFZLX0RPV04gPSAweDI4OworCisvLyBWS19TRUxFQ1QgKDI5KSBT
RUxFQ1Qga2V5Citjb25zdCBpbnQgVktfU0VMRUNUID0gMHgyOTsKKworLy8gVktfUFJJTlQgKDJB
KSBQUklOVCBrZXkKK2NvbnN0IGludCBWS19QUklOVCA9IDB4MkE7CisKKy8vIFZLX0VYRUNVVEUg
KDJCKSBFWEVDVVRFIGtleQorY29uc3QgaW50IFZLX0VYRUNVVEUgPSAweDJCOworCisvLyBWS19T
TkFQU0hPVCAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKK2NvbnN0IGludCBWS19TTkFQU0hPVCA9IDB4
MkM7CisKKy8vIFZLX0lOU0VSVCAoMkQpIElOUyBrZXkKK2NvbnN0IGludCBWS19JTlNFUlQgPSAw
eDJEOworCisvLyBWS19ERUxFVEUgKDJFKSBERUwga2V5Citjb25zdCBpbnQgVktfREVMRVRFID0g
MHgyRTsKKworLy8gVktfSEVMUCAoMkYpIEhFTFAga2V5Citjb25zdCBpbnQgVktfSEVMUCA9IDB4
MkY7CisKKy8vICgzMCkgMCBrZXkKK2NvbnN0IGludCBWS18wID0gMHgzMDsKKworLy8gKDMxKSAx
IGtleQorY29uc3QgaW50IFZLXzEgPSAweDMxOworCisvLyAoMzIpIDIga2V5Citjb25zdCBpbnQg
VktfMiA9IDB4MzI7CisKKy8vICgzMykgMyBrZXkKK2NvbnN0IGludCBWS18zID0gMHgzMzsKKwor
Ly8gKDM0KSA0IGtleQorY29uc3QgaW50IFZLXzQgPSAweDM0OworCisvLyAoMzUpIDUga2V5Owor
Citjb25zdCBpbnQgVktfNSA9IDB4MzU7CisKKy8vICgzNikgNiBrZXkKK2NvbnN0IGludCBWS182
ID0gMHgzNjsKKworLy8gKDM3KSA3IGtleQorY29uc3QgaW50IFZLXzcgPSAweDM3OworCisvLyAo
MzgpIDgga2V5Citjb25zdCBpbnQgVktfOCA9IDB4Mzg7CisKKy8vICgzOSkgOSBrZXkKK2NvbnN0
IGludCBWS185ID0gMHgzOTsKKworLy8gKDQxKSBBIGtleQorY29uc3QgaW50IFZLX0EgPSAweDQx
OworCisvLyAoNDIpIEIga2V5Citjb25zdCBpbnQgVktfQiA9IDB4NDI7CisKKy8vICg0MykgQyBr
ZXkKK2NvbnN0IGludCBWS19DID0gMHg0MzsKKworLy8gKDQ0KSBEIGtleQorY29uc3QgaW50IFZL
X0QgPSAweDQ0OworCisvLyAoNDUpIEUga2V5Citjb25zdCBpbnQgVktfRSA9IDB4NDU7CisKKy8v
ICg0NikgRiBrZXkKK2NvbnN0IGludCBWS19GID0gMHg0NjsKKworLy8gKDQ3KSBHIGtleQorY29u
c3QgaW50IFZLX0cgPSAweDQ3OworCisvLyAoNDgpIEgga2V5Citjb25zdCBpbnQgVktfSCA9IDB4
NDg7CisKKy8vICg0OSkgSSBrZXkKK2NvbnN0IGludCBWS19JID0gMHg0OTsKKworLy8gKDRBKSBK
IGtleQorY29uc3QgaW50IFZLX0ogPSAweDRBOworCisvLyAoNEIpIEsga2V5Citjb25zdCBpbnQg
VktfSyA9IDB4NEI7CisKKy8vICg0QykgTCBrZXkKK2NvbnN0IGludCBWS19MID0gMHg0QzsKKwor
Ly8gKDREKSBNIGtleQorY29uc3QgaW50IFZLX00gPSAweDREOworCisvLyAoNEUpIE4ga2V5Citj
b25zdCBpbnQgVktfTiA9IDB4NEU7CisKKy8vICg0RikgTyBrZXkKK2NvbnN0IGludCBWS19PID0g
MHg0RjsKKworLy8gKDUwKSBQIGtleQorY29uc3QgaW50IFZLX1AgPSAweDUwOworCisvLyAoNTEp
IFEga2V5Citjb25zdCBpbnQgVktfUSA9IDB4NTE7CisKKy8vICg1MikgUiBrZXkKK2NvbnN0IGlu
dCBWS19SID0gMHg1MjsKKworLy8gKDUzKSBTIGtleQorY29uc3QgaW50IFZLX1MgPSAweDUzOwor
CisvLyAoNTQpIFQga2V5Citjb25zdCBpbnQgVktfVCA9IDB4NTQ7CisKKy8vICg1NSkgVSBrZXkK
K2NvbnN0IGludCBWS19VID0gMHg1NTsKKworLy8gKDU2KSBWIGtleQorY29uc3QgaW50IFZLX1Yg
PSAweDU2OworCisvLyAoNTcpIFcga2V5Citjb25zdCBpbnQgVktfVyA9IDB4NTc7CisKKy8vICg1
OCkgWCBrZXkKK2NvbnN0IGludCBWS19YID0gMHg1ODsKKworLy8gKDU5KSBZIGtleQorY29uc3Qg
aW50IFZLX1kgPSAweDU5OworCisvLyAoNUEpIFoga2V5Citjb25zdCBpbnQgVktfWiA9IDB4NUE7
CisKKy8vIFZLX0xXSU4gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChNaWNyb3NvZnQgTmF0dXJhbCBr
ZXlib2FyZCkKK2NvbnN0IGludCBWS19MV0lOID0gMHg1QjsKKworLy8gVktfUldJTiAoNUMpIFJp
Z2h0IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQorY29uc3QgaW50IFZLX1JXSU4gPSAw
eDVDOworCisvLyBWS19BUFBTICg1RCkgQXBwbGljYXRpb25zIGtleSAoTmF0dXJhbCBrZXlib2Fy
ZCkKK2NvbnN0IGludCBWS19BUFBTID0gMHg1RDsKKworLy8gVktfU0xFRVAgKDVGKSBDb21wdXRl
ciBTbGVlcCBrZXkKK2NvbnN0IGludCBWS19TTEVFUCA9IDB4NUY7CisKKy8vIFZLX05VTVBBRDAg
KDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQorY29uc3QgaW50IFZLX05VTVBBRDAgPSAweDYwOwor
CisvLyBWS19OVU1QQUQxICg2MSkgTnVtZXJpYyBrZXlwYWQgMSBrZXkKK2NvbnN0IGludCBWS19O
VU1QQUQxID0gMHg2MTsKKworLy8gVktfTlVNUEFEMiAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5
Citjb25zdCBpbnQgVktfTlVNUEFEMiA9IDB4NjI7CisKKy8vIFZLX05VTVBBRDMgKDYzKSBOdW1l
cmljIGtleXBhZCAzIGtleQorY29uc3QgaW50IFZLX05VTVBBRDMgPSAweDYzOworCisvLyBWS19O
VU1QQUQ0ICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ0ID0g
MHg2NDsKKworLy8gVktfTlVNUEFENSAoNjUpIE51bWVyaWMga2V5cGFkIDUga2V5Citjb25zdCBp
bnQgVktfTlVNUEFENSA9IDB4NjU7CisKKy8vIFZLX05VTVBBRDYgKDY2KSBOdW1lcmljIGtleXBh
ZCA2IGtleQorY29uc3QgaW50IFZLX05VTVBBRDYgPSAweDY2OworCisvLyBWS19OVU1QQUQ3ICg2
NykgTnVtZXJpYyBrZXlwYWQgNyBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ3ID0gMHg2NzsKKwor
Ly8gVktfTlVNUEFEOCAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5Citjb25zdCBpbnQgVktfTlVN
UEFEOCA9IDB4Njg7CisKKy8vIFZLX05VTVBBRDkgKDY5KSBOdW1lcmljIGtleXBhZCA5IGtleQor
Y29uc3QgaW50IFZLX05VTVBBRDkgPSAweDY5OworCisvLyBWS19NVUxUSVBMWSAoNkEpIE11bHRp
cGx5IGtleQorY29uc3QgaW50IFZLX01VTFRJUExZID0gMHg2QTsKKworLy8gVktfQUREICg2Qikg
QWRkIGtleQorY29uc3QgaW50IFZLX0FERCA9IDB4NkI7CisKKy8vIFZLX1NFUEFSQVRPUiAoNkMp
IFNlcGFyYXRvciBrZXkKK2NvbnN0IGludCBWS19TRVBBUkFUT1IgPSAweDZDOworCisvLyBWS19T
VUJUUkFDVCAoNkQpIFN1YnRyYWN0IGtleQorY29uc3QgaW50IFZLX1NVQlRSQUNUID0gMHg2RDsK
KworLy8gVktfREVDSU1BTCAoNkUpIERlY2ltYWwga2V5Citjb25zdCBpbnQgVktfREVDSU1BTCA9
IDB4NkU7CisKKy8vIFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKK2NvbnN0IGludCBWS19ESVZJ
REUgPSAweDZGOworCisvLyBWS19GMSAoNzApIEYxIGtleQorY29uc3QgaW50IFZLX0YxID0gMHg3
MDsKKworLy8gVktfRjIgKDcxKSBGMiBrZXkKK2NvbnN0IGludCBWS19GMiA9IDB4NzE7CisKKy8v
IFZLX0YzICg3MikgRjMga2V5Citjb25zdCBpbnQgVktfRjMgPSAweDcyOworCisvLyBWS19GNCAo
NzMpIEY0IGtleQorY29uc3QgaW50IFZLX0Y0ID0gMHg3MzsKKworLy8gVktfRjUgKDc0KSBGNSBr
ZXkKK2NvbnN0IGludCBWS19GNSA9IDB4NzQ7CisKKy8vIFZLX0Y2ICg3NSkgRjYga2V5Citjb25z
dCBpbnQgVktfRjYgPSAweDc1OworCisvLyBWS19GNyAoNzYpIEY3IGtleQorY29uc3QgaW50IFZL
X0Y3ID0gMHg3NjsKKworLy8gVktfRjggKDc3KSBGOCBrZXkKK2NvbnN0IGludCBWS19GOCA9IDB4
Nzc7CisKKy8vIFZLX0Y5ICg3OCkgRjkga2V5Citjb25zdCBpbnQgVktfRjkgPSAweDc4OworCisv
LyBWS19GMTAgKDc5KSBGMTAga2V5Citjb25zdCBpbnQgVktfRjEwID0gMHg3OTsKKworLy8gVktf
RjExICg3QSkgRjExIGtleQorY29uc3QgaW50IFZLX0YxMSA9IDB4N0E7CisKKy8vIFZLX0YxMiAo
N0IpIEYxMiBrZXkKK2NvbnN0IGludCBWS19GMTIgPSAweDdCOworCisvLyBWS19GMTMgKDdDKSBG
MTMga2V5Citjb25zdCBpbnQgVktfRjEzID0gMHg3QzsKKworLy8gVktfRjE0ICg3RCkgRjE0IGtl
eQorY29uc3QgaW50IFZLX0YxNCA9IDB4N0Q7CisKKy8vIFZLX0YxNSAoN0UpIEYxNSBrZXkKK2Nv
bnN0IGludCBWS19GMTUgPSAweDdFOworCisvLyBWS19GMTYgKDdGKSBGMTYga2V5Citjb25zdCBp
bnQgVktfRjE2ID0gMHg3RjsKKworLy8gVktfRjE3ICg4MEgpIEYxNyBrZXkKK2NvbnN0IGludCBW
S19GMTcgPSAweDgwOworCisvLyBWS19GMTggKDgxSCkgRjE4IGtleQorY29uc3QgaW50IFZLX0Yx
OCA9IDB4ODE7CisKKy8vIFZLX0YxOSAoODJIKSBGMTkga2V5Citjb25zdCBpbnQgVktfRjE5ID0g
MHg4MjsKKworLy8gVktfRjIwICg4M0gpIEYyMCBrZXkKK2NvbnN0IGludCBWS19GMjAgPSAweDgz
OworCisvLyBWS19GMjEgKDg0SCkgRjIxIGtleQorY29uc3QgaW50IFZLX0YyMSA9IDB4ODQ7CisK
Ky8vIFZLX0YyMiAoODVIKSBGMjIga2V5Citjb25zdCBpbnQgVktfRjIyID0gMHg4NTsKKworLy8g
VktfRjIzICg4NkgpIEYyMyBrZXkKK2NvbnN0IGludCBWS19GMjMgPSAweDg2OworCisvLyBWS19G
MjQgKDg3SCkgRjI0IGtleQorY29uc3QgaW50IFZLX0YyNCA9IDB4ODc7CisKKy8vIFZLX05VTUxP
Q0sgKDkwKSBOVU0gTE9DSyBrZXkKK2NvbnN0IGludCBWS19OVU1MT0NLID0gMHg5MDsKKworLy8g
VktfU0NST0xMICg5MSkgU0NST0xMIExPQ0sga2V5Citjb25zdCBpbnQgVktfU0NST0xMID0gMHg5
MTsKKworLy8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKK2NvbnN0IGludCBWS19MU0hJ
RlQgPSAweEEwOworCisvLyBWS19SU0hJRlQgKEExKSBSaWdodCBTSElGVCBrZXkKK2NvbnN0IGlu
dCBWS19SU0hJRlQgPSAweEExOworCisvLyBWS19MQ09OVFJPTCAoQTIpIExlZnQgQ09OVFJPTCBr
ZXkKK2NvbnN0IGludCBWS19MQ09OVFJPTCA9IDB4QTI7CisKKy8vIFZLX1JDT05UUk9MIChBMykg
UmlnaHQgQ09OVFJPTCBrZXkKK2NvbnN0IGludCBWS19SQ09OVFJPTCA9IDB4QTM7CisKKy8vIFZL
X0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQorY29uc3QgaW50IFZLX0xNRU5VID0gMHhBNDsKKwor
Ly8gVktfUk1FTlUgKEE1KSBSaWdodCBNRU5VIGtleQorY29uc3QgaW50IFZLX1JNRU5VID0gMHhB
NTsKKworLy8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJh
Y2sga2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9CQUNLID0gMHhBNjsKKworLy8gVktfQlJPV1NF
Ul9GT1JXQVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5Citjb25z
dCBpbnQgVktfQlJPV1NFUl9GT1JXQVJEID0gMHhBNzsKKworLy8gVktfQlJPV1NFUl9SRUZSRVNI
IChBOCkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFJlZnJlc2gga2V5Citjb25zdCBpbnQgVktf
QlJPV1NFUl9SRUZSRVNIID0gMHhBODsKKworLy8gVktfQlJPV1NFUl9TVE9QIChBOSkgV2luZG93
cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5Citjb25zdCBpbnQgVktfQlJPV1NFUl9TVE9QID0g
MHhBOTsKKworLy8gVktfQlJPV1NFUl9TRUFSQ0ggKEFBKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dz
ZXIgU2VhcmNoIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfU0VBUkNIID0gMHhBQTsKKworLy8g
VktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRmF2b3Jp
dGVzIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfRkFWT1JJVEVTID0gMHhBQjsKKworLy8gVktf
QlJPV1NFUl9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21l
IGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfSE9NRSA9IDB4QUM7CisKKy8vIFZLX1ZPTFVNRV9N
VVRFIChBRCkgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgTXV0ZSBrZXkKK2NvbnN0IGludCBWS19W
T0xVTUVfTVVURSA9IDB4QUQ7CisKKy8vIFZLX1ZPTFVNRV9ET1dOIChBRSkgV2luZG93cyAyMDAw
L1hQOiBWb2x1bWUgRG93biBrZXkKK2NvbnN0IGludCBWS19WT0xVTUVfRE9XTiA9IDB4QUU7CisK
Ky8vIFZLX1ZPTFVNRV9VUCAoQUYpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIFVwIGtleQorY29u
c3QgaW50IFZLX1ZPTFVNRV9VUCA9IDB4QUY7CisKKy8vIFZLX01FRElBX05FWFRfVFJBQ0sgKEIw
KSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5Citjb25zdCBpbnQgVktfTUVESUFfTkVY
VF9UUkFDSyA9IDB4QjA7CisKKy8vIFZLX01FRElBX1BSRVZfVFJBQ0sgKEIxKSBXaW5kb3dzIDIw
MDAvWFA6IFByZXZpb3VzIFRyYWNrIGtleQorY29uc3QgaW50IFZLX01FRElBX1BSRVZfVFJBQ0sg
PSAweEIxOworCisvLyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1l
ZGlhIGtleQorY29uc3QgaW50IFZLX01FRElBX1NUT1AgPSAweEIyOworCisvLyBWS19NRURJQV9Q
TEFZX1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQbGF5L1BhdXNlIE1lZGlhIGtleQorY29u
c3QgaW50IFZLX01FRElBX1BMQVlfUEFVU0UgPSAweEIzOworCisvLyBWS19MQVVOQ0hfTUFJTCAo
QjQpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgTWFpbCBrZXkKK2NvbnN0IGludCBWS19NRURJQV9M
QVVOQ0hfTUFJTCA9IDB4QjQ7CisKKy8vIFZLX0xBVU5DSF9NRURJQV9TRUxFQ1QgKEI1KSBXaW5k
b3dzIDIwMDAvWFA6IFNlbGVjdCBNZWRpYSBrZXkKK2NvbnN0IGludCBWS19NRURJQV9MQVVOQ0hf
TUVESUFfU0VMRUNUID0gMHhCNTsKKworLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIw
MDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDEga2V5Citjb25zdCBpbnQgVktfTUVESUFfTEFVTkNI
X0FQUDEgPSAweEI2OworCisvLyBWS19MQVVOQ0hfQVBQMiAoQjcpIFdpbmRvd3MgMjAwMC9YUDog
U3RhcnQgQXBwbGljYXRpb24gMiBrZXkKK2NvbnN0IGludCBWS19NRURJQV9MQVVOQ0hfQVBQMiA9
IDB4Qjc7CisKKy8vIFZLX09FTV8xIChCQSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0
ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVT
IHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJzs6JyBrZXkKK2NvbnN0IGludCBWS19PRU1fMSA9IDB4
QkE7CisKKy8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50
cnkvcmVnaW9uLCB0aGUgJysnIGtleQorY29uc3QgaW50IFZLX09FTV9QTFVTID0gMHhCQjsKKwor
Ly8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVn
aW9uLCB0aGUgJywnIGtleQorY29uc3QgaW50IFZLX09FTV9DT01NQSA9IDB4QkM7CisKKy8vIFZL
X09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwg
dGhlICctJyBrZXkKK2NvbnN0IGludCBWS19PRU1fTUlOVVMgPSAweEJEOworCisvLyBWS19PRU1f
UEVSSU9EIChCRSkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUg
Jy4nIGtleQorY29uc3QgaW50IFZLX09FTV9QRVJJT0QgPSAweEJFOworCisvLyBWS19PRU1fMiAo
QkYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5
Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhl
ICcvPycga2V5Citjb25zdCBpbnQgVktfT0VNXzIgPSAweEJGOworCisvLyBWS19PRU1fMyAoQzAp
IFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9h
cmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdg
ficga2V5Citjb25zdCBpbnQgVktfT0VNXzMgPSAweEMwOworCisvLyBWS19PRU1fNCAoREIpIFVz
ZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQu
IFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdbeycg
a2V5Citjb25zdCBpbnQgVktfT0VNXzQgPSAweERCOworCisvLyBWS19PRU1fNSAoREMpIFVzZWQg
Zm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdp
bmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5
Citjb25zdCBpbnQgVktfT0VNXzUgPSAweERDOworCisvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9y
IG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRv
d3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5Citj
b25zdCBpbnQgVktfT0VNXzYgPSAweEREOworCisvLyBWS19PRU1fNyAoREUpIFVzZWQgZm9yIG1p
c2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3Mg
MjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdzaW5nbGUtcXVvdGUv
ZG91YmxlLXF1b3RlJyBrZXkKK2NvbnN0IGludCBWS19PRU1fNyA9IDB4REU7CisKKy8vIFZLX09F
TV84IChERikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBi
eSBrZXlib2FyZC4KK2NvbnN0IGludCBWS19PRU1fOCA9IDB4REY7CisKKy8vIFZLX09FTV8xMDIg
KEUyKSBXaW5kb3dzIDIwMDAvWFA6IEVpdGhlciB0aGUgYW5nbGUgYnJhY2tldCBrZXkgb3IgdGhl
IGJhY2tzbGFzaCBrZXkgb24gdGhlIFJUIDEwMi1rZXkga2V5Ym9hcmQKK2NvbnN0IGludCBWS19P
RU1fMTAyID0gMHhFMjsKKworLy8gVktfUFJPQ0VTU0tFWSAoRTUpIFdpbmRvd3MgOTUvOTgvTWUs
IFdpbmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQUk9DRVNTIGtleQorY29uc3Qg
aW50IFZLX1BST0NFU1NLRVkgPSAweEU1OworCisvLyBWS19QQUNLRVQgKEU3KSBXaW5kb3dzIDIw
MDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMgaWYgdGhleSB3ZXJlIGtl
eXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29yZCBvZiBhIDMyLWJpdCBW
aXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5wdXQgbWV0aG9kcy4gRm9y
IG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBVVCxTZW5kSW5wdXQsIFdN
X0tFWURPV04sIGFuZCBXTV9LRVlVUAorY29uc3QgaW50IFZLX1BBQ0tFVCA9IDB4RTc7CisKKy8v
IFZLX0FUVE4gKEY2KSBBdHRuIGtleQorY29uc3QgaW50IFZLX0FUVE4gPSAweEY2OworCisvLyBW
S19DUlNFTCAoRjcpIENyU2VsIGtleQorY29uc3QgaW50IFZLX0NSU0VMID0gMHhGNzsKKworLy8g
VktfRVhTRUwgKEY4KSBFeFNlbCBrZXkKK2NvbnN0IGludCBWS19FWFNFTCA9IDB4Rjg7CisKKy8v
IFZLX0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQorY29uc3QgaW50IFZLX0VSRU9GID0gMHhGOTsK
KworLy8gVktfUExBWSAoRkEpIFBsYXkga2V5Citjb25zdCBpbnQgVktfUExBWSA9IDB4RkE7CisK
Ky8vIFZLX1pPT00gKEZCKSBab29tIGtleQorY29uc3QgaW50IFZLX1pPT00gPSAweEZCOworCisv
LyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorY29uc3QgaW50IFZLX05P
TkFNRSA9IDB4RkM7CisKKy8vIFZLX1BBMSAoRkQpIFBBMSBrZXkKK2NvbnN0IGludCBWS19QQTEg
PSAweEZEOworCisvLyBWS19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkKK2NvbnN0IGludCBWS19P
RU1fQ0xFQVIgPSAweEZFOworCitjb25zdCBpbnQgVktfVU5LTk9XTiA9IDA7CisKK30KKworI2Vu
ZGlmCkluZGV4OiBxdC9TY3JlZW5RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvU2NyZWVuUXQuY3Bw
CShSZXZpc2lvbiAwKQorKysgcXQvU2NyZWVuUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgorICogICAgICAgICAgIChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JlZW4uaCIKKworI2luY2x1ZGUgIldpZGdldC5o
IgorI2luY2x1ZGUgIkhlbHBlclF0LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNs
dWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UURlc2t0b3BXaWRnZXQ+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCit7Cisg
ICAgUVdpZGdldCAqcXcgPSB3aWRnZXQtPnF3aWRnZXQoKTsKKyAgICBpZiAoIXF3KQorICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICAvLyBUYWtlbiBmcm9tIEtHbG9iYWxTZXR0aW5n
czo6ZGVza3RvcEdlb21ldHJ5ICAgIAorICAgIFFEZXNrdG9wV2lkZ2V0ICpkdyA9IFFBcHBsaWNh
dGlvbjo6ZGVza3RvcCgpOworICAgIGlmICghZHcpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKworICAgIHJldHVybiAoUVJlY3RGKSBkdy0+c2NyZWVuR2VvbWV0cnkocXcpOworfQorCitp
bnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgUVdpZGdldCAqcXcgPSB3aWRn
ZXQtPnF3aWRnZXQoKTsKKyAgICBpZiAoIXF3KQorICAgICAgICByZXR1cm4gMzI7CisKKyAgICBy
ZXR1cm4gcXctPmRlcHRoKCk7Cit9CisKK0Zsb2F0UmVjdCB1c2FibGVTY3JlZW5SZWN0KFdpZGdl
dCogd2lkZ2V0KQoreworICAgIFFXaWRnZXQgKnF3ID0gd2lkZ2V0LT5xd2lkZ2V0KCk7CisgICAg
aWYgKCFxdykKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgLy8gVGFrZW4gZnJv
bSBLR2xvYmFsU2V0dGluZ3M6OmRlc2t0b3BHZW9tZXRyeSAgICAKKyAgICBRRGVza3RvcFdpZGdl
dCAqZHcgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKTsKKyAgICBpZiAoIWR3KQorICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICByZXR1cm4gKFFSZWN0RikgZHctPmF2YWlsYWJsZUdl
b21ldHJ5KHF3KTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvSW1h
Z2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcXQvSW1hZ2VRdC5jcHAJKFJldmlzaW9uIDApCisrKyBx
dC9JbWFnZVF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlLmgi
CisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KworI2luY2x1ZGUgPFFQaXhtYXA+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UUlt
YWdlPgorI2luY2x1ZGUgPFFJbWFnZVJlYWRlcj4KKworI2luY2x1ZGUgPFF0RGVidWc+CisKKyNp
bmNsdWRlIDxtYXRoLmg+CisKKy8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20g
V2ViS2l0CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZyYW1lRGF0YTo6Y2xlYXIoKQoreworICAg
IGlmIChtX2ZyYW1lKSB7CisgICAgICAgIG1fZnJhbWUgPSAwOworICAgICAgICBtX2R1cmF0aW9u
ID0gMC47CisgICAgICAgIG1faGFzQWxwaGEgPSB0cnVlOworICAgIH0KK30KKworLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBJbWFnZSBDbGFz
cworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisK
K3ZvaWQgSW1hZ2U6OmluaXROYXRpdmVEYXRhKCkKK3sKK30KKwordm9pZCBJbWFnZTo6ZGVzdHJv
eU5hdGl2ZURhdGEoKQoreworfQorCit2b2lkIEltYWdlOjppbnZhbGlkYXRlTmF0aXZlRGF0YSgp
Cit7Cit9CisKK0ltYWdlKiBJbWFnZTo6bG9hZFJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCit7
CisgICAgVmVjdG9yPGNoYXI+IGFyciA9IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKKyAg
ICBJbWFnZSogaW1nID0gbmV3IEltYWdlOworICAgIGltZy0+c2V0TmF0aXZlRGF0YSgmYXJyLCB0
cnVlKTsKKyAgICByZXR1cm4gaW1nOworfQorCitib29sIEltYWdlOjpzdXBwb3J0c1R5cGUoY29u
c3QgU3RyaW5nJiB0eXBlKQoreworICAgIHFEZWJ1ZygpPDwiZG9lcyBzdXBwb3J0IGltYWdlIGZv
cm1hdCAiPDx0eXBlLmNoYXJhY3RlcnMoKTsKKyAgICBRTGlzdDxRQnl0ZUFycmF5PiBmb3JtYXRz
ID0gUUltYWdlUmVhZGVyOjpzdXBwb3J0ZWRJbWFnZUZvcm1hdHMoKTsKKyAgICBmb3JlYWNoKFFC
eXRlQXJyYXkgZm9ybWF0LCBmb3JtYXRzKSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gRHJhd2luZyBSb3V0aW5lcwordm9pZCBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAorICAgICAgICAgICAgICAgICBjb25zdCBGbG9h
dFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKCFtX3NvdXJjZS5p
bml0aWFsaXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRSW1hZ2UqIGltYWdlID0gZnJh
bWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRv
byBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIEludFNpemUgc2VsZlNpemUgPSBzaXplKCk7CisgICAgRmxvYXRSZWN0IHNyY1JlY3Qo
c3JjKTsKKyAgICBGbG9hdFJlY3QgZHN0UmVjdChkc3QpOworCisgICAgY3R4dC0+c2F2ZSgpOwor
ICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgorICAgIGN0eHQtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihvcCk7CisKKyAgICBRUGFpbnRlciAqcGFpbnRlcihjdHh0LT5wbGF0Zm9y
bUNvbnRleHQoKSk7CisKKyAgICAvLyBUZXN0IHVzaW5nIGV4YW1wbGUgc2l0ZSBhdAorICAgIC8v
IGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3NzL2VkZ2UvY29tcGxleHNwaXJhbC9kZW1v
Lmh0bWwgICAgCisgICAgcGFpbnRlci0+ZHJhd0ltYWdlKGRzdCwgKmltYWdlLCBzcmMpOworCisg
ICAgY3R4dC0+cmVzdG9yZSgpOworCisgICAgc3RhcnRBbmltYXRpb24oKTsKK30KKwordm9pZCBJ
bWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2ludCwKKyAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAg
ICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBRSW1hZ2UqIGltYWdlID0gZnJhbWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKKyAgICBRUGl4
bWFwIHBpeDsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworCisgICAgSW50U2l6ZSBpbnRyaW5z
aWNJbWFnZVNpemUgPSBzaXplKCk7CisKKyAgICBpZiAoIXFGdXp6eUNvbXBhcmUodGlsZVNpemUu
d2lkdGgoKSwgaW50cmluc2ljSW1hZ2VTaXplLndpZHRoKCkpIHx8CisgICAgICAgICFxRnV6enlD
b21wYXJlKHRpbGVTaXplLmhlaWdodCgpLCBpbnRyaW5zaWNJbWFnZVNpemUuaGVpZ2h0KCkpKSB7
CisKKyAgICAgICAgUUltYWdlIGltZygoaW50KXRpbGVTaXplLndpZHRoKCksIChpbnQpdGlsZVNp
emUuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1By
ZW11bHRpcGxpZWQpOworICAgICAgICBRUGFpbnRlciBwKCZpbWcpOworICAgICAgICBwLmRyYXdJ
bWFnZShRUmVjdEYoMCwgMCwgdGlsZVNpemUud2lkdGgoKSwgdGlsZVNpemUuaGVpZ2h0KCkpLAor
ICAgICAgICAgICAgICAgICAgICAqaW1hZ2UsIFFSZWN0RihzcmNQb2ludC54KCksIHNyY1BvaW50
LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVNpemUud2lkdGgo
KSAtIHNyY1BvaW50LngoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bGVTaXplLmhlaWdodCgpLSBzcmNQb2ludC55KCkpKTsKKyAgICAgICAgcC5lbmQoKTsKKyAgICAg
ICAgcGl4ID0gUVBpeG1hcDo6ZnJvbUltYWdlKGltZyk7CisgICAgfSBlbHNlCisgICAgICAgIHBp
eCA9IFFQaXhtYXA6OmZyb21JbWFnZSgqaW1hZ2UpOworCisgICAgY3R4dC0+c2F2ZSgpOworICAg
IC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgorICAgIGN0eHQtPnNldENvbXBvc2l0
ZU9wZXJhdGlvbihvcCk7CisgICAgUVBhaW50ZXIgKnAgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBwLT5kcmF3VGlsZWRQaXhtYXAoZHN0UmVjdCwgcGl4KTsKKyAgICBjdHh0LT5yZXN0
b3JlKCk7CisgICAgCisgICAgc3RhcnRBbmltYXRpb24oKTsKK30KKwordm9pZCBJbWFnZTo6Y2hl
Y2tGb3JTb2xpZENvbG9yKCkKK3sKKyAgICAvLyBGSVhNRTogSXQncyBlYXN5IHRvIGltcGxlbWVu
dCB0aGlzIG9wdGltaXphdGlvbi4gSnVzdCBuZWVkIHRvIGNoZWNrIHRoZSBSR0JBMzIgYnVmZmVy
IHRvIHNlZSBpZiBpdCBpcyAxeDEuCisgICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKK30KKwor
fQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvV2lkZ2V0UXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHF0L1dpZGdldFF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L1dpZGdldFF0LmNwcAko
UmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
RGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2Vv
cmdlIFN0aWFrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNr
IFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNs
dWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSA8UVdp
ZGdldD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgV2lkZ2V0UHJpdmF0ZQorewor
ICAgIFdpZGdldFByaXZhdGUoKSA6IG1fcGFyZW50KDApLCBtX3dpZGdldCgwKSB7IH0KKyAgICB+
V2lkZ2V0UHJpdmF0ZSgpIHsgZGVsZXRlIG1fd2lkZ2V0OyB9CisKKyAgICBRV2lkZ2V0KiBtX3Bh
cmVudDsKKyAgICBRV2lkZ2V0KiBtX3dpZGdldDsKKyAgICBGb250ICAgICBtX2ZvbnQ7Cit9Owor
CitXaWRnZXQ6OldpZGdldCgpCisgICAgOiBkYXRhKG5ldyBXaWRnZXRQcml2YXRlKQoreworfQor
CitXaWRnZXQ6On5XaWRnZXQoKQoreworICAgIGRlbGV0ZSBkYXRhOworICAgIGRhdGEgPSAwOwor
fQorCit2b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitXaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xpZW50KCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitJbnRSZWN0IFdp
ZGdldDo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0Cit7CisgICAgaWYgKCFkYXRhLT5tX3dpZGdldCkK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIHJldHVybiBkYXRhLT5tX3dpZGdldC0+
Z2VvbWV0cnkoKTsKK30KKworYm9vbCBXaWRnZXQ6Omhhc0ZvY3VzKCkgY29uc3QKK3sKKyAgICBp
ZiAoIWRhdGEtPm1fd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
ZGF0YS0+bV93aWRnZXQtPmhhc0ZvY3VzKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cygp
Cit7CisgICAgaWYgKGRhdGEtPm1fd2lkZ2V0KQorICAgICAgICBkYXRhLT5tX3dpZGdldC0+c2V0
Rm9jdXMoKTsKK30KKwordm9pZCBXaWRnZXQ6OmNsZWFyRm9jdXMoKQoreworICAgIGlmIChkYXRh
LT5tX3dpZGdldCkKKyAgICAgICAgZGF0YS0+bV93aWRnZXQtPmNsZWFyRm9jdXMoKTsKK30KKwor
Y29uc3QgRm9udCYgV2lkZ2V0Ojpmb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0YS0+bV9m
b250OworfQorCit2b2lkIFdpZGdldDo6c2V0Rm9udChjb25zdCBGb250JiBmb250KQoreworICAg
IGlmIChkYXRhLT5tX3dpZGdldCkKKyAgICAgICAgZGF0YS0+bV93aWRnZXQtPnNldEZvbnQodG9R
Rm9udChmb250KSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBj
dXJzb3IpCit7CisgICAgaWYgKGRhdGEtPm1fd2lkZ2V0KQorICAgICAgICBkYXRhLT5tX3dpZGdl
dC0+c2V0Q3Vyc29yKGN1cnNvci5pbXBsKCkpOworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7
CisgICAgaWYgKGRhdGEtPm1fd2lkZ2V0KQorICAgICAgICBkYXRhLT5tX3dpZGdldC0+c2hvdygp
OworfQorCit2b2lkIFdpZGdldDo6aGlkZSgpCit7CisgICAgaWYgKGRhdGEtPm1fd2lkZ2V0KQor
ICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5oaWRlKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRRV2lk
Z2V0KFFXaWRnZXQgKmNoaWxkKQoreworICAgIGRlbGV0ZSBkYXRhLT5tX3dpZGdldDsKKyAgICBk
YXRhLT5tX3dpZGdldCA9IGNoaWxkOworfQorCitRV2lkZ2V0KiBXaWRnZXQ6OnF3aWRnZXQoKQor
eworICAgIHJldHVybiBkYXRhLT5tX3dpZGdldDsKK30KKwordm9pZCBXaWRnZXQ6OnNldFBhcmVu
dFdpZGdldChRV2lkZ2V0KiBwYXJlbnQpCit7CisgICAgZGF0YS0+bV9wYXJlbnQgPSBwYXJlbnQ7
Cit9CisKK1FXaWRnZXQqIFdpZGdldDo6cGFyZW50V2lkZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZGF0YS0+bV9wYXJlbnQ7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KGNv
bnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKCFkYXRhLT5tX3dpZGdldCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZGF0YS0+bV93aWRnZXQtPnNldEdlb21ldHJ5KHIpOworfQorCitJbnRQb2lu
dCBXaWRnZXQ6Om1hcEZyb21HbG9iYWwoY29uc3QgSW50UG9pbnQmIHApIGNvbnN0Cit7CisgICAg
aWYgKCFkYXRhLT5tX3dpZGdldCkKKyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisKKyAgICBy
ZXR1cm4gZGF0YS0+bV93aWRnZXQtPm1hcEZyb21HbG9iYWwocCk7Cit9CisKK2Zsb2F0IFdpZGdl
dDo6c2NhbGVGYWN0b3IoKSBjb25zdAoreworICAgIHJldHVybiAxLjBmOworfQorCitHcmFwaGlj
c0NvbnRleHQqIFdpZGdldDo6bG9ja0RyYXdpbmdGb2N1cygpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXaWRnZXQ6OnVubG9ja0RyYXdpbmdGb2N1
cyhHcmFwaGljc0NvbnRleHQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqLCBJbnRSZWN0IGNvbnN0JikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdldDo6ZW5hYmxlRmx1c2hEcmF3aW5nKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdpZGdldDo6aXNFbmFibGVkKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWRhdGEtPm1fd2lkZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gZGF0YS0+bV93aWRnZXQtPmlzRW5hYmxlZCgpOworfQorCit2b2lkIFdp
ZGdldDo6c2V0SXNTZWxlY3RlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2lkZ2V0OjpkaXNhYmxlRmx1c2hEcmF3aW5nKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdpZGdldDo6c2V0RW5hYmxlZChib29sIGVuKQoreworICAgIGlmIChk
YXRhLT5tX3dpZGdldCkKKyAgICAgICAgZGF0YS0+bV93aWRnZXQtPnNldEVuYWJsZWQoZW4pOwor
fQorCitXaWRnZXQ6OkZvY3VzUG9saWN5IFdpZGdldDo6Zm9jdXNQb2xpY3koKSBjb25zdAorewor
ICAgIGlmICghZGF0YS0+bV93aWRnZXQpCisgICAgICAgIHJldHVybiBOb0ZvY3VzOworCisgICAg
c3dpdGNoIChkYXRhLT5tX3dpZGdldC0+Zm9jdXNQb2xpY3koKSkKKyAgICB7CisgICAgICAgIGNh
c2UgUXQ6OlRhYkZvY3VzOgorICAgICAgICAgICAgcmV0dXJuIFRhYkZvY3VzOworICAgICAgICBj
YXNlIFF0OjpDbGlja0ZvY3VzOgorICAgICAgICAgICAgcmV0dXJuIENsaWNrRm9jdXM7CisgICAg
ICAgIGNhc2UgUXQ6OlN0cm9uZ0ZvY3VzOgorICAgICAgICAgICAgcmV0dXJuIFN0cm9uZ0ZvY3Vz
OworICAgICAgICBjYXNlIFF0OjpXaGVlbEZvY3VzOgorICAgICAgICAgICAgcmV0dXJuIFdoZWVs
Rm9jdXM7CisgICAgICAgIGNhc2UgUXQ6Ok5vRm9jdXM6CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gTm9Gb2N1czsgICAgCisgICAgfQorfQorCit9CisKKy8vIHZpbTogdHM9
NCBzdz00IGV0CkluZGV4OiBxdC9xdC1lbmNvZGluZ3MudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L3F0
LWVuY29kaW5ncy50eHQJKFJldmlzaW9uIDApCisrKyBxdC9xdC1lbmNvZGluZ3MudHh0CShSZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACisjIFRoZSBpdGVtcyBvbiB0aGUgbGVmdCBhcmUgbmFt
ZXMgb2YgVGV4dEVuY29kaW5nSUQgdmFsdWVzCisjIFRoZSBpdGVtcyBvbiB0aGUgcmlnaHQgYXJl
IElBTkEgY2hhcmFjdGVyIHNldCBuYW1lcy4gTmFtZXMgbGlzdGVkIGluIGNoYXJhY3Rlci1zZXRz
LnR4dCBhcmUgbm90CisjIHJlcGVhdGVkIGhlcmU7IG1lbnRpb25pbmcgYW55IG9uZSBjaGFyYWN0
ZXIgc2V0IGZyb20gYSBncm91cCBpbiB0aGVyZSBwdWxscyBpbiBhbGwgdGhlIGFsaWFzZXMgaW4K
KyMgdGhhdCBncm91cC4KKworV2luTGF0aW4xRW5jb2Rpbmc6IHdpbmRvd3MtMTI1Miwgd2lubGF0
aW4xLCB4YW5zaQorTGF0aW4xRW5jb2Rpbmc6IElTTy04ODU5LTEsIDg4NTkxCitBU0NJSUVuY29k
aW5nOiBVUy1BU0NJSSwgaXNvaXI2dXMKK1VURjE2RW5jb2Rpbmc6IElTTy0xMDY0Ni1VQ1MtMiwg
dWNzMiwgdW5pY29kZSwgdXRmMTYKK1VURjE2RW5jb2RpbmcsIEJpZ0VuZGlhbjogVVRGLTE2QkUs
IHVuaWNvZGVmZmZlCitVVEYxNkVuY29kaW5nLCBMaXR0bGVFbmRpYW46IFVURi0xNkxFLCB1bmlj
b2RlZmVmZgorVVRGOEVuY29kaW5nOiBVVEYtOCwgdW5pY29kZTExdXRmOCwgdW5pY29kZTIwdXRm
OCwgeHVuaWNvZGUyMHV0ZjgKSW5kZXg6IHF0L0hlbHBlclF0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQv
SGVscGVyUXQuaAkoUmV2aXNpb24gMCkKKysrIHF0L0hlbHBlclF0LmgJKFJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSA8UUZvbnQ+CisKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiQXRv
bWljU3RyaW5nLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJEZXBy
ZWNhdGVkU3RyaW5nLmgiCisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYo
c3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5F
X18pOyB9IHdoaWxlKDApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIC8vIFN0cmluZyB0
b29scyAKKyAgICBpbmxpbmUgUVN0cmluZyB0b1FTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCisg
ICAgeworICAgICAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFy
ICo+KHN0ci5jaGFyYWN0ZXJzKCkpLCBzdHIubGVuZ3RoKCkpOworICAgIH0KKyAgICAKKwlpbmxp
bmUgUVN0cmluZyB0b1FTdHJpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBzdHIpCisgICAgeworICAg
ICAgICByZXR1cm4gUVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyICo+KHN0ci5j
aGFyYWN0ZXJzKCkpLCBzdHIubGVuZ3RoKCkpOworICAgIH0KKworICAgIGlubGluZSBRU3RyaW5n
IHRvUVN0cmluZyhjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBzdHIpCisgICAgeworCQlyZXR1cm4g
UVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyICo+KHN0ci51bmljb2RlKCkpLCBz
dHIubGVuZ3RoKCkpOworICAgIH0KKworICAgIGlubGluZSBTdHJpbmcgZnJvbVFTdHJpbmcoY29u
c3QgUVN0cmluZyYgc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IFVDaGFyICo+KHN0ci5jb25zdERhdGEoKSksIHN0ci5sZW5ndGgoKSk7Cisg
ICAgfQorCisgICAgLy8gRm9udCB0b29scworICAgIGlubGluZSBRRm9udCB0b1FGb250KGNvbnN0
IFdlYkNvcmU6OkZvbnQmIGZvbnQpCisgICAgeworICAgICAgICBRX0FTU0VSVChmb250LnByaW1h
cnlGb250KCkgIT0gMCk7CisgICAgICAgIHJldHVybiBmb250LnByaW1hcnlGb250KCktPnBsYXRm
b3JtRGF0YSgpLmZvbnQoKTsKKyAgICB9CisgICAgCit9OworCisvLyB2aW06IHRzPTQgc3c9NCBl
dApJbmRleDogcXQvSW50U2l6ZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9JbnRTaXplUXQuY3Bw
CShSZXZpc2lvbiAwKQorKysgcXQvSW50U2l6ZVF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlIDxRU2l6ZT4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkludFNpemUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplOjpJbnRTaXplKGNvbnN0IFFTaXpl
JiByKSA6IG1fd2lkdGgoci53aWR0aCgpKSwgbV9oZWlnaHQoci5oZWlnaHQoKSkKK3sKK30KKwor
SW50U2l6ZTo6b3BlcmF0b3IgUVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBRU2l6ZSh3aWR0
aCgpLCBoZWlnaHQoKSk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0
L0Jyb3dzZXJFeHRlbnNpb25RdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0Jyb3dzZXJFeHRlbnNpb25R
dC5oCShSZXZpc2lvbiAwKQorKysgcXQvQnJvd3NlckV4dGVuc2lvblF0LmgJKFJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlj
aGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQnJvd3NlckV4dGVuc2lvblF0X0hfCisjZGVmaW5lIEJyb3dzZXJF
eHRlbnNpb25RdF9IXworCisjaW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVRdDsKKworY2xhc3MgQnJv
d3NlckV4dGVuc2lvblF0IDogcHVibGljIEJyb3dzZXJFeHRlbnNpb24geworcHVibGljOgorICAg
IEJyb3dzZXJFeHRlbnNpb25RdChGcmFtZSopOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZU5l
d1dpbmRvdyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
TmV3V2luZG93KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdpbmRvd0FyZ3MmLCBGcmFt
ZSomKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uVVJMKGNvbnN0IEtVUkwmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0VHlwZWRJY29uVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHR5
cGUpOworCisgICAgdmlydHVhbCBpbnQgZ2V0SGlzdG9yeUxlbmd0aCgpOworICAgIHZpcnR1YWwg
dm9pZCBnb0JhY2tPckZvcndhcmQoaW50IGRpc3RhbmNlKTsKKyAgICB2aXJ0dWFsIEtVUkwgaGlz
dG9yeVVSTChpbnQgZGlzdGFuY2UpOworCisgICAgdmlydHVhbCBib29sIGNhblJ1bk1vZGFsKCk7
CisgICAgdmlydHVhbCBib29sIGNhblJ1bk1vZGFsTm93KCk7CisgICAgdmlydHVhbCB2b2lkIHJ1
bk1vZGFsKCk7CisKK3ByaXZhdGU6CisgICAgRnJhbWUqIG1fZnJhbWU7Cit9OworCit9CisKKyNl
bmRpZgorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvU2hhcmVkVGltZXJMaW51eC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHF0L1NoYXJlZFRpbWVyTGludXguaAkoUmV2aXNpb24gMCkKKysrIHF0
L1NoYXJlZFRpbWVyTGludXguaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaWZuZGVmIFNIQVJFRFRJTUVSTElOVVhf
SAorI2RlZmluZSBTSEFSRURUSU1FUkxJTlVYX0gKKworI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgi
CisKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPFFUaW1l
cj4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaGFyZWRUaW1lciA6IHB1YmxpYyBR
VGltZXIgeworICAgIFFfT0JKRUNUCisgICAgcHJvdGVjdGVkOgorICAgICAgICBTaGFyZWRUaW1l
cigpIDogUVRpbWVyKCkgeworICAgICAgICAgICAgY29ubmVjdCh0aGlzLCBTSUdOQUwodGltZW91
dCgpKSwgdGhpcywgU0xPVChmaXJlKCkpKTsKKyAgICAgICAgICAgIHNldFNpbmdsZVNob3QodHJ1
ZSk7CisgICAgICAgICAgICBfdGltZXJGdW5jdGlvbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
flNoYXJlZFRpbWVyKCkgeworICAgICAgICB9CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
U2hhcmVkVGltZXIgKmluc3QoKSB7CisgICAgICAgICAgICBpZiAoIV9zZWxmKSB7CisgICAgICAg
ICAgICAgICAgX3NlbGYgPSBuZXcgU2hhcmVkVGltZXI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gX3NlbGY7CisgICAgICAgIH0KKworICAgICAgICB2b2lkICgqX3RpbWVyRnVu
Y3Rpb24pKCk7CisKKyAgICBwdWJsaWMgc2xvdHM6CisgICAgICAgIHZvaWQgZmlyZSgpIHsKKyAg
ICAgICAgICAgIGlmIChfdGltZXJGdW5jdGlvbikgeworICAgICAgICAgICAgICAgIChfdGltZXJG
dW5jdGlvbikoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgc3RhdGljIFNoYXJlZFRpbWVyICpfc2VsZjsKK307Cit9CisKKyNlbmRpZgorCisvLyB2
aW06IHRzPTQgc3c9NCBldAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10122</attachid>
            <date>2006-08-18 04:25:18 -0700</date>
            <delta_ts>2006-08-18 16:27:00 -0700</delta_ts>
            <desc>Corrected patch</desc>
            <filename>platform-qt.diff</filename>
            <type>text/plain</type>
            <size>262423</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTkyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsNjIyIEBACisyMDA2LTA4LTE4ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4ZWQ6IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA0NjcKKyAgICAgICAgV2ViS2l0IHNob3VsZCBoYXZlIFF0IHBsYXRmb3JtIHN1cHBvcnQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9BZmZpbmVUcmFuc2Zvcm1RdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpBZmZpbmVUcmFuc2Zvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpzZXRNYXRyaXgpOgorICAgICAgICAoV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtOjptYXApOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtOjptYXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6aXNJ
ZGVudGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om0xMSk6CisgICAg
ICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om0xMik6CisgICAgICAgIChXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm06Om0yMSk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06
Om0yMik6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OmR4KToKKyAgICAgICAg
KFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6ZHkpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5l
VHJhbnNmb3JtOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06OnNj
YWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6cm90YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFmZmluZVRyYW5zZm9ybTo6c2hlYXIpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtOjpkZXQpOgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjppbnZlcnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciBRTWF0cml4KToK
KyAgICAgICAgKFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKj0pOgorICAgICAgICAoV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtOjpvcGVyYXRvciopOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Jy
b3dzZXJFeHRlbnNpb25RdC5jcHA6IEFkZGVkLgorICAgICAgICAoQnJvd3NlckV4dGVuc2lvblF0
OjpCcm93c2VyRXh0ZW5zaW9uUXQpOgorICAgICAgICAoQnJvd3NlckV4dGVuc2lvblF0OjpjYW5S
dW5Nb2RhbCk6CisgICAgICAgIChCcm93c2VyRXh0ZW5zaW9uUXQ6OmNyZWF0ZU5ld1dpbmRvdyk6
CisgICAgICAgIChCcm93c2VyRXh0ZW5zaW9uUXQ6OmNhblJ1bk1vZGFsTm93KToKKyAgICAgICAg
KEJyb3dzZXJFeHRlbnNpb25RdDo6cnVuTW9kYWwpOgorICAgICAgICAoQnJvd3NlckV4dGVuc2lv
blF0Ojpnb0JhY2tPckZvcndhcmQpOgorICAgICAgICAoQnJvd3NlckV4dGVuc2lvblF0OjpoaXN0
b3J5VVJMKToKKyAgICAgICAgKEJyb3dzZXJFeHRlbnNpb25RdDo6c2V0VHlwZWRJY29uVVJMKToK
KyAgICAgICAgKEJyb3dzZXJFeHRlbnNpb25RdDo6c2V0SWNvblVSTCk6CisgICAgICAgIChCcm93
c2VyRXh0ZW5zaW9uUXQ6OmdldEhpc3RvcnlMZW5ndGgpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L0Jyb3dzZXJFeHRlbnNpb25RdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9DYW52
YXNRdC5jcHA6IEFkZGVkLgorICAgICAgICAoQ2FudmFzUXQ6OkNhbnZhc1F0KToKKyAgICAgICAg
KENhbnZhc1F0OjpwYWludEV2ZW50KToKKyAgICAgICAgKENhbnZhc1F0OjpzaXplSGludCk6Cisg
ICAgICAgIChDYW52YXNRdDo6bW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoQ2FudmFzUXQ6Om1v
dXNlUHJlc3NFdmVudCk6CisgICAgICAgIChDYW52YXNRdDo6bW91c2VSZWxlYXNlRXZlbnQpOgor
ICAgICAgICAoQ2FudmFzUXQ6OmtleVByZXNzRXZlbnQpOgorICAgICAgICAoQ2FudmFzUXQ6Omtl
eVJlbGVhc2VFdmVudCk6CisgICAgICAgIChDYW52YXNRdDo6aGFuZGxlS2V5RXZlbnQpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L0NhbnZhc1F0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L0NvbG9yUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0b3IgUUNvbG9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9Db21ib0JveFF0LmNwcDogQWRkZWQuCisgICAgICAgIChQbGF0Zm9ybUNvbWJv
Qm94OjpQbGF0Zm9ybUNvbWJvQm94KToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6On5QbGF0
Zm9ybUNvbWJvQm94KToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OnNldFBhcmVudFdpZGdl
dCk6CisgICAgICAgIChQbGF0Zm9ybUNvbWJvQm94OjpjbGVhcik6CisgICAgICAgIChQbGF0Zm9y
bUNvbWJvQm94OjphcHBlbmRJdGVtKToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OmFwcGVu
ZEdyb3VwTGFiZWwpOgorICAgICAgICAoUGxhdGZvcm1Db21ib0JveDo6YXBwZW5kU2VwYXJhdG9y
KToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OnNldEN1cnJlbnRJdGVtKToKKyAgICAgICAg
KFBsYXRmb3JtQ29tYm9Cb3g6OnNpemVIaW50KToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6
OmZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoUGxhdGZvcm1Db21ib0JveDo6c2V0RnJhbWVHZW9t
ZXRyeSk6CisgICAgICAgIChQbGF0Zm9ybUNvbWJvQm94OjpiYXNlbGluZVBvc2l0aW9uKToKKyAg
ICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OnNldEZvbnQpOgorICAgICAgICAoUGxhdGZvcm1Db21i
b0JveDo6Zm9jdXNQb2xpY3kpOgorICAgICAgICAoUGxhdGZvcm1Db21ib0JveDo6aXRlbVNlbGVj
dGVkKToKKyAgICAgICAgKFBsYXRmb3JtQ29tYm9Cb3g6OnNldFdyaXRpbmdEaXJlY3Rpb24pOgor
ICAgICAgICAoUGxhdGZvcm1Db21ib0JveDo6cG9wdWxhdGUpOgorICAgICAgICAoUGxhdGZvcm1D
b21ib0JveDo6cG9wdWxhdGVNZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Db29raWVKYXJR
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAgICAgIChX
ZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q3Vyc29yOjpDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjp+Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6
OkN1cnNvcnM6OkN1cnNvcnM6OnNlbGYpOgorICAgICAgICAoV2ViQ29yZTo6bW92ZUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpjcm9zc0N1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpoYW5k
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmlCZWFtQ3Vyc29yKToKKyAgICAgICAgKFdlYkNv
cmU6OndhaXRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6aGVscEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjplYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoUmVz
aXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoRWFzdFJlc2l6ZUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpub3J0aFdlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6c291dGhSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6c291dGhFYXN0UmVzaXpl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OnNvdXRoV2VzdFJlc2l6ZUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjp3ZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRo
U291dGhSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6ZWFzdFdlc3RSZXNpemVDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6Om5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcik6CisgICAg
ICAgIChXZWJDb3JlOjpjb2x1bW5SZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6cm93
UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9GbG9hdFBvaW50UXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UG9pbnQ6OkZsb2F0UG9pbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRQb2ludDo6b3BlcmF0b3IgUVBvaW50Rik6CisgICAgICAgICogcGxh
dGZvcm0vcXQvRmxvYXRSZWN0UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0
UmVjdDo6RmxvYXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZsb2F0UmVjdDo6b3BlcmF0b3Ig
UVJlY3RGKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Gb250Q2FjaGVRdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9Gb250RGF0YVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
RGF0YTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpwbGF0Zm9y
bURlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L0ZvbnRQbGF0Zm9ybURhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvRm9u
dFBsYXRmb3JtRGF0YVF0LmNwcDogQWRkZWQuCisgICAgICAgIChGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6
CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAg
IChGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoRm9udFBsYXRmb3Jt
RGF0YTo6c2V0Rm9udCk6CisgICAgICAgIChGb250UGxhdGZvcm1EYXRhOjpmb250KToKKyAgICAg
ICAgKEZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvRm9udFF0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpmbG9hdFdpZHRo
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZyYW1lUXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
Vmlldzo6aXNGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6RnJhbWVRdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lUXQ6On5GcmFtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om9wZW5VUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c3VibWl0Rm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVF0Ojp1cmxTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojp1c2Vy
QWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cnVuSmF2YVNjcmlwdEFsZXJ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmxvY2F0aW9uYmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjpzZXRUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjcmVh
dGVGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpwYXNzV2hlZWxFdmVudFRvQ2hp
bGRXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cGFzc1N1YmZyYW1lRXZlbnRU
b1N1YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om9iamVjdENvbnRlbnRUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmNyZWF0ZVBsdWdpbik6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVF0OjpwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVF0OjptZW51YmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVF0OjpwZXJzb25hbGJhclZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c3Rh
dHVzYmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojp0b29sYmFyVmlzaWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjcmVhdGVFbXB0eURvY3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om1hcmtlZFRleHRSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjppbmNvbWluZ1JlZmVycmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
UXQ6Om1pbWVUeXBlRm9yRmlsZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6bWFy
a01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0
OjptYXJrTWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omxhc3RFdmVu
dElzTW91c2VVcCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpzYXZlRG9jdW1lbnRTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpvcGVuVVJMUmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjpzY2hlZHVsZUNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OnVuZm9jdXNXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Zm9jdXNXaW5kb3cp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6b3ZlcnJpZGVNZWRpYVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6YWRkTWVzc2FnZVRvQ29uc29sZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lUXQ6OmdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6Z2V0T2JqZWN0SW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6Z2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0
OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmNs
ZWFyVW5kb1JlZG9PcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omlzc3Vl
VW5kb0NvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6aXNzdWVSZWRvQ29tbWFu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojppc3N1ZUN1dENvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6aXNzdWVDb3B5Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVF0Ojppc3N1ZVBhc3RlQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0
Ojppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnNo
b3VsZENoYW5nZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpwYXJ0Q2xl
YXJlZEluQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Y2FuR29CYWNrT3JGb3J3
YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmhhbmRsZWRPbmxvYWRFdmVudHMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Y2FuUGFzdGUpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVRdDo6Y2FuUmVkbyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjYW5VbmRvKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnByaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lUXQ6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVRdDo6a2V5RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cmVjZWl2ZWRSZXNw
b25zZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZWNlaXZlZERhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6cmVjZWl2ZWRBbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lUXQ6OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZyYW1l
UXQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaW4pOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L0dseXBoTWFwUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBoTWFwOjpm
aWxsUGFnZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUXRDb21wb3NpdGlvbk1vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6dG9RdExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9RdExpbmVKb2luKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyOjpUcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllcjo6Y2xlYW51cCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0U2hhZG93OjpUZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRTaGFkb3c6OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kZXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0FyYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZvY3VzUmluZ0NsaXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhckZvY3VzUmluZ0NsaXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvSGVscGVyUXQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjp0b1FTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVFTdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6dG9RRm9udCk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
SW1hZ2VRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6aW5pdE5hdGl2ZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmRlc3Ryb3lOYXRpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjppbnZhbGlkYXRlTmF0aXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpzdXBwb3J0c1R5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdU
aWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9JbWFnZVNvdXJjZVF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJ
bWFnZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6fkltYWdlU291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9JbnRQb2ludFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRQb2ludDo6
SW50UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50UG9pbnQ6Om9wZXJhdG9yIFFQb2ludCk6
CisgICAgICAgICogcGxhdGZvcm0vcXQvSW50UmVjdFF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRSZWN0OjpJbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludFJlY3Q6Om9w
ZXJhdG9yIFFSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9JbnRTaXplUXQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkludFNpemU6OkludFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50U2l6ZTo6b3BlcmF0b3IgUVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0tleWJv
YXJkQ29kZXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvTGluZUVkaXRRdC5jcHA6
IEFkZGVkLgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6UGxhdGZvcm1MaW5lRWRpdCk6Cisg
ICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0Ojp+UGxhdGZvcm1MaW5lRWRpdCk6CisgICAgICAgIChQ
bGF0Zm9ybUxpbmVFZGl0OjpzZXRQYXJlbnRXaWRnZXQpOgorICAgICAgICAoUGxhdGZvcm1MaW5l
RWRpdDo6c2V0Q29sb3JzKToKKyAgICAgICAgKFBsYXRmb3JtTGluZUVkaXQ6OnNldEFsaWdubWVu
dCk6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpzZXRDdXJzb3JQb3NpdGlvbik6CisgICAg
ICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpjdXJzb3JQb3NpdGlvbik6CisgICAgICAgIChQbGF0Zm9y
bUxpbmVFZGl0OjpzZXRFZGl0ZWQpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6ZWRpdGVk
KToKKyAgICAgICAgKFBsYXRmb3JtTGluZUVkaXQ6OnNldEZvbnQpOgorICAgICAgICAoUGxhdGZv
cm1MaW5lRWRpdDo6c2V0TWF4TGVuZ3RoKToKKyAgICAgICAgKFBsYXRmb3JtTGluZUVkaXQ6Om1h
eExlbmd0aCk6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpzZXRSZWFkT25seSk6CisgICAg
ICAgIChQbGF0Zm9ybUxpbmVFZGl0Ojppc1JlYWRPbmx5KToKKyAgICAgICAgKFBsYXRmb3JtTGlu
ZUVkaXQ6OnNldFRleHQpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6dGV4dCk6CisgICAg
ICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpzZXRXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFBs
YXRmb3JtTGluZUVkaXQ6OnNlbGVjdEFsbCk6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0Ojpo
YXNTZWxlY3RlZFRleHQpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6c2VsZWN0aW9uU3Rh
cnQpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6c2VsZWN0ZWRUZXh0KToKKyAgICAgICAg
KFBsYXRmb3JtTGluZUVkaXQ6OnNldFNlbGVjdGlvbik6CisgICAgICAgIChQbGF0Zm9ybUxpbmVF
ZGl0OjpzaXplRm9yQ2hhcmFjdGVyV2lkdGgpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6
YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0Ojpmb2N1c1BvbGlj
eSk6CisgICAgICAgIChQbGF0Zm9ybUxpbmVFZGl0OjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3Vz
KToKKyAgICAgICAgKFBsYXRmb3JtTGluZUVkaXQ6OnNldExpdmVTZWFyY2gpOgorICAgICAgICAo
UGxhdGZvcm1MaW5lRWRpdDo6c2V0QXV0b1NhdmVOYW1lKToKKyAgICAgICAgKFBsYXRmb3JtTGlu
ZUVkaXQ6OnNldE1heFJlc3VsdHMpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6c2V0UGxh
Y2Vob2xkZXJTdHJpbmcpOgorICAgICAgICAoUGxhdGZvcm1MaW5lRWRpdDo6YWRkU2VhcmNoUmVz
dWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9MaXN0Qm94UXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okxpc3RCb3g6Okxpc3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJv
eDo6fkxpc3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJveDo6c2V0UGFyZW50V2lkZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OnNpemVGb3JOdW1iZXJPZkxpbmVzKToKKyAg
ICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OnNldFNlbGVjdGlvbk1vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGlzdEJveDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJveDo6ZG9uZUFw
cGVuZGluZ0l0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OnNldFNlbGVjdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGlzdEJveDo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpMaXN0Qm94Ojppc0Vu
YWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJveDo6c2V0V3JpdGluZ0RpcmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpMaXN0Qm94Ojpmb2N1c1BvbGljeSk6CisgICAgICAgIChXZWJD
b3JlOjpMaXN0Qm94OjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKToKKyAgICAgICAgKFdlYkNv
cmU6Okxpc3RCb3g6OmNsZWFyQ2FjaGVkVGV4dFJlbmRlcmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpMaXN0Qm94OjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6Okxpc3RCb3g6OmFwcGVuZEl0
ZW0pOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1BhZ2VRdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6cm9vdFdpbmRvd0ZvckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6Ondp
bmRvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0V2luZG93UmVjdCk6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvUGF0aFF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjpQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6On5QYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjb250YWlu
cyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGF0aDo6Ym91bmRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Om1vdmVUbyk6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRMaW5lVG8pOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6YWRkUXVhZEN1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkQmV6aWVy
Q3VydmVUbyk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRBcmNUbyk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoOjpjbG9zZVN1YnBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRk
QXJjKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UGF0aDo6YWRkRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjbGVhcik6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvUGxhdGZvcm1LZXlib2FyZEV2ZW50UXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJGb3JRdEtleUNvZGUpOgorICAgICAgICAo
V2ViQ29yZTo6d2luZG93c0tleUNvZGVGb3JLZXlFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvUGxhdGZvcm1Nb3VzZUV2ZW50UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3Jt
TW91c2VFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6UmVuZGVyVGhlbWVRdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjp0aGVtZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojppc0NvbnRyb2xTdHlsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y29udHJvbFN1cHBvcnRzVGludHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjpjcmVhdGVQb3B1cE1lbnUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6YWRkSW50cmluc2ljTWFyZ2lucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpzdHlsZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWludEluZm8pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OmFwcGx5VGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRq
dXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZpZWxk
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRUZXh0RmllbGQp
OgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyQ3VybC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJJbnRlcm5hbDo6flJlc291cmNlTG9hZGVy
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6On5SZXNvdXJjZUxv
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmNhbmNlbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlcjo6YXNzZW1ibGVSZXNwb25zZUhlYWRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2hhcnNldCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRlcjo6cmVjZWl2ZWRSZXNwb25zZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
UmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlck1hbmFnZXI6OlJlc291cmNlTG9hZGVyTWFuYWdlcik6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUxvYWRlck1hbmFnZXI6OnVzZVNpbXBsZVRyYW5zZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6aGVhZGVyQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpyZW1vdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjphZGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpjYW5jZWwpOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L1Jlc291cmNlTG9hZGVyTWFuYWdlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9TY3JlZW5RdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjp1c2Fi
bGVTY3JlZW5SZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6flNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0UGFyZW50V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2li
bGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzZXRDb250ZW50c1Bvcyk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3Ojpjb250ZW50c1gpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVu
dHNZKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNIZWlnaHQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6dmlld3BvcnRUb0NvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbFZpZXc6OmNvbnRlbnRzVG9WaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3OjpzY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6aFNjcm9sbEJhck1vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dlNjcm9sbEJhck1vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxCYXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldEhTY3JvbGxCYXJNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXc6OnNldFZTY3JvbGxCYXJNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OnNldFNjcm9sbEJhcnNNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNl
dFN0YXRpY0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6YWRkQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUG9pbnRSZWN1cnNpdmVseSk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxWaWV3OjppbldpbmRvdyk6CisgICAgICAgICogcGxhdGZvcm0vcXQv
U2hhcmVkVGltZXJMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2V0U2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRpbWVyRmly
ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcFNoYXJlZFRpbWVyKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9TaGFyZWRUaW1lckxpbnV4Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
U2hhcmVkVGltZXI6OlNoYXJlZFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVy
Ojp+U2hhcmVkVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXI6Omluc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXI6OmZpcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1N5c3RlbVRpbWVMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3VycmVu
dFRpbWUpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSmF2YUFwcGxldFdpZGdldDo6SmF2YUFwcGxldFdpZGdldCk6CisgICAg
ICAgIChGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoRm9udDo6
b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpyZWZy
ZXNoUGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcik6CisgICAgICAg
IChJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2VsZWN0
QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6YWRkU2VhcmNoUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkOjpzZWxlY3RlZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRB
dXRvU2F2ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpjaGVja3NEZXNjZW5k
YW50c0ZvckZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0TWF4UmVzdWx0cyk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGQ6OmVkaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Rmll
bGQ6OmZvY3VzUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6VGV4dEZpZWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6flRleHRGaWVsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0RmllbGQ6OnNldEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxk
OjpzZXRBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRXcml0aW5n
RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6bWF4TGVuZ3RoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0TWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRGaWVsZDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldFRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpjdXJzb3JQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZDo6c2V0RWRpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVs
ZDo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRQbGFjZWhv
bGRlclN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldENvbG9ycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNpemVGb3JDaGFyYWN0ZXJXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEZpZWxkOjpzZXRMaXZlU2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRl
cjo6U2xpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6c2l6ZUhpbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2xpZGVyOjp+U2xpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6
c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyOjpzZXRNYXhWYWx1ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTbGlkZXI6OnNldE1pblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNs
aWRlcjo6c2V0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXI6OnZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNsaWRlcjo6Zm9jdXNQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsQmFyOjpTY3JvbGxCYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQmFyOjpzZXRTdGVw
cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxCYXI6OnNjcm9sbCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxCYXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEJhcjo6
c2V0S25vYlByb3BvcnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6
OlBsYXRmb3JtU2Nyb2xsQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsQmFy
Ojp+UGxhdGZvcm1TY3JvbGxCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxC
YXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsQmFyOjpoZWlnaHQp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnNldEVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtU2Nyb2xsQmFyOjpzZXRTY3JvbGxCYXJWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVNjcm9sbEJhcjo6c2V0S25vYlByb3BvcnRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnNldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q2hlY2tDYWNoZU9iamVjdFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja0lmUmVsb2Fk
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJtaXRC
dXR0b25EZWZhdWx0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCk6CisgICAgICAg
IChXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5leHRT
ZW50ZW5jZUZyb21JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2VudGVuY2VCb3VuZGFy
eSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6CisgICAgICAgIChGcmFtZTo6c2V0TmVlZHNSZWFw
cGx5U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24pOgorICAgICAgICAoS0pTOjpVU3RyaW5nOjpV
U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmluZ0NvbG9yQ2hhbmdlRnVuY3Rp
b24pOgorICAgICAgICAoRnJhbWVWaWV3Ojp1cGRhdGVCb3JkZXIpOgorICAgICAgICAobG9hZFJl
c291cmNlSW50b0FycmF5KToKKyAgICAgICAgKFBsdWdJbkluZm9TdG9yZTo6Y3JlYXRlUGx1Z2lu
SW5mb0ZvclBsdWdpbkF0SW5kZXgpOgorICAgICAgICAoUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5D
b3VudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnSW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5
cGUpOgorICAgICAgICAoRmlsZUJ1dHRvbjo6RmlsZUJ1dHRvbik6CisgICAgICAgIChGaWxlQnV0
dG9uOjpjbGljayk6CisgICAgICAgIChGaWxlQnV0dG9uOjpzaXplRm9yQ2hhcmFjdGVyV2lkdGgp
OgorICAgICAgICAoRmlsZUJ1dHRvbjo6Zm9jdXNQb2xpY3kpOgorICAgICAgICAoRmlsZUJ1dHRv
bjo6ZnJhbWVHZW9tZXRyeSk6CisgICAgICAgIChGaWxlQnV0dG9uOjpzZXRGaWxlbmFtZSk6Cisg
ICAgICAgIChGaWxlQnV0dG9uOjpiYXNlbGluZVBvc2l0aW9uKToKKyAgICAgICAgKEZpbGVCdXR0
b246OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoRmlsZUJ1dHRvbjo6c2V0RGlzYWJsZWQp
OgorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydGVkS2V5U2l6ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9UZXh0RWRpdFF0LmNwcDogQWRkZWQuCisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0OjpQ
bGF0Zm9ybVRleHRFZGl0KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6On5QbGF0Zm9ybVRl
eHRFZGl0KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldFBhcmVudFdpZGdldCk6Cisg
ICAgICAgIChQbGF0Zm9ybVRleHRFZGl0OjpzZXRDb2xvcnMpOgorICAgICAgICAoUGxhdGZvcm1U
ZXh0RWRpdDo6c2V0QWxpZ25tZW50KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldExp
bmVIZWlnaHQpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2V0Q3Vyc29yUG9zaXRpb24p
OgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6Z2V0Q3Vyc29yUG9zaXRpb24pOgorICAgICAg
ICAoUGxhdGZvcm1UZXh0RWRpdDo6c2V0Rm9udCk6CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0
OjpzZXRSZWFkT25seSk6CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0Ojppc1JlYWRPbmx5KToK
KyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldERpc2FibGVkKToKKyAgICAgICAgKFBsYXRm
b3JtVGV4dEVkaXQ6OmlzRGlzYWJsZWQpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6aGFz
U2VsZWN0ZWRUZXh0KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldFRleHQpOgorICAg
ICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6dGV4dCk6CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0
Ojp0ZXh0V2l0aEhhcmRMaW5lQnJlYWtzKToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OmZv
Y3VzUG9saWN5KToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldFdvcmRXcmFwKToKKyAg
ICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OndvcmRXcmFwKToKKyAgICAgICAgKFBsYXRmb3JtVGV4
dEVkaXQ6OnNldFNjcm9sbEJhck1vZGVzKToKKyAgICAgICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNl
dFdyaXRpbmdEaXJlY3Rpb24pOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2VsZWN0aW9u
U3RhcnQpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2VsZWN0aW9uRW5kKToKKyAgICAg
ICAgKFBsYXRmb3JtVGV4dEVkaXQ6OnNldFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFBsYXRm
b3JtVGV4dEVkaXQ6OnNldFNlbGVjdGlvbkVuZCk6CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0
OjpzZWxlY3RBbGwpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2V0U2VsZWN0aW9uUmFu
Z2UpOgorICAgICAgICAoUGxhdGZvcm1UZXh0RWRpdDo6c2l6ZVdpdGhDb2x1bW5zQW5kUm93cyk6
CisgICAgICAgIChQbGF0Zm9ybVRleHRFZGl0OjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9XaWRnZXRRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0UHJpdmF0ZTo6V2lkZ2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpX
aWRnZXRQcml2YXRlOjp+V2lkZ2V0UHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6V2lkZ2V0OjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpj
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpmcmFtZUdlb21ldHJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OldpZGdldDo6aGFzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0
OjpzZXRGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNsZWFyRm9jdXMpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpmb250KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2V0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEN1cnNvcik6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNob3cpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpoaWRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0UVdpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OnF3aWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRQYXJl
bnRXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpwYXJlbnRXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OldpZGdldDo6bWFwRnJvbUdsb2JhbCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNj
YWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6bG9ja0RyYXdpbmdGb2N1cyk6
CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnVubG9ja0RyYXdpbmdGb2N1cyk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6ZW5h
YmxlRmx1c2hEcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6aXNFbmFibGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0SXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OmRpc2FibGVGbHVzaERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0OjpzZXRFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Zm9jdXNQb2xpY3kp
OgorICAgICAgICAqIHBsYXRmb3JtL3F0L3F0LWVuY29kaW5ncy50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L3Rlc3QvQ01ha2VMaXN0cy50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL3F0L3Rlc3QvdGVzdHVuaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKwog
MjAwNi0wOC0xNyAgRGF2aWQgSGFycmlzb24gIDxoYXJyaXNvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogcXQvRm9udENhY2hlUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHF0L0ZvbnRDYWNoZVF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0ZvbnRDYWNoZVF0
LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKwor
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCit7CisgICAg
Ly8gbm8tb3AKK30KKworY29uc3QgRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKQoreworICAgIHJldHVybiBuZXcgRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShmb250
LmZvbnREZXNjcmlwdGlvbigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKSk7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udCYgZm9udCkKK3sKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250
RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7Cit9CisKK0ZvbnRQbGF0Zm9y
bURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250JiBm
b250KQoreworICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdl
dCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLgorICAgIC8vIEZvciBub3cgd2UnbGwgcGlj
ayB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFu
eSBwcmVmcy4KKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHNfdGltZXNTdHIoIlRpbWVzIE5ldyBS
b21hbiIpOworICAgIHJldHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERl
c2NyaXB0aW9uKCksIHNfdGltZXNTdHIpOworfQorCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQoreworICAgIHJldHVybiBuZXcg
Rm9udFBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWlseSk7Cit9CisKK30KKworLy8g
dmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L1RleHRFZGl0UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHF0L1RleHRFZGl0UXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvVGV4dEVkaXRRdC5jcHAJKFJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSA8UURlYnVnPgor
I2luY2x1ZGUgPFFUZXh0RWRpdD4KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCisjaW5jbHVkZSAiVGV4dERp
cmVjdGlvbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVGV4dEVkaXQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJIZWxwZXJRdC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtVGV4dEVkaXQ6OlBsYXRmb3JtVGV4
dEVkaXQoV2lkZ2V0KiBwYXJlbnQpCisgICAgOiBTY3JvbGxWaWV3KCkKK3sKKyAgICBxRGVidWco
IlBsYXRmb3JtVGV4dEVkaXQ6OlBsYXRmb3JtVGV4dEVkaXQoKSwgdGhpcz0lcCIsIHRoaXMpOwor
fQorCitQbGF0Zm9ybVRleHRFZGl0Ojp+UGxhdGZvcm1UZXh0RWRpdCgpCit7CisgICAgcURlYnVn
KCJQbGF0Zm9ybVRleHRFZGl0Ojp+UGxhdGZvcm1UZXh0RWRpdCgpIik7Cit9CisKK3ZvaWQgUGxh
dGZvcm1UZXh0RWRpdDo6c2V0UGFyZW50V2lkZ2V0KFFXaWRnZXQqIHBhcmVudCkKK3sKKyAgICBx
RGVidWcoIlBsYXRmb3JtVGV4dEVkaXQ6OnNldFBhcmVudFdpZGdldCgpLCBwYXJlbnQ9JXAiLCBw
YXJlbnQpOworICAgIFdpZGdldDo6c2V0UGFyZW50V2lkZ2V0KHBhcmVudCk7CisKKyAgICBRVGV4
dEVkaXQgKndpZGdldCA9IG5ldyBRVGV4dEVkaXQocGFyZW50LCAiIik7CisgICAgc2V0UVdpZGdl
dCh3aWRnZXQpOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNldENvbG9ycyhjb25zdCBD
b2xvciYgYmFja2dyb3VuZCwgY29uc3QgQ29sb3ImIGZvcmVncm91bmQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVRleHRFZGl0OjpzZXRBbGlnbm1lbnQoSG9y
aXpvbnRhbEFsaWdubWVudCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBs
YXRmb3JtVGV4dEVkaXQ6OnNldExpbmVIZWlnaHQoaW50IGxpbmVIZWlnaHQpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVRleHRFZGl0OjpzZXRDdXJzb3JQb3Np
dGlvbihpbnQsIGludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRm
b3JtVGV4dEVkaXQ6OmdldEN1cnNvclBvc2l0aW9uKGludCAqLCBpbnQgKikgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNldEZvbnQo
Y29uc3QgRm9udCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9y
bVRleHRFZGl0OjpzZXRSZWFkT25seShib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK2Jvb2wgUGxhdGZvcm1UZXh0RWRpdDo6aXNSZWFkT25seSgpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGxhdGZvcm1UZXh0
RWRpdDo6c2V0RGlzYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiti
b29sIFBsYXRmb3JtVGV4dEVkaXQ6OmlzRGlzYWJsZWQoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFBsYXRmb3JtVGV4dEVkaXQ6
Omhhc1NlbGVjdGVkVGV4dCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUGxhdGZvcm1UZXh0RWRpdDo6c2V0VGV4dChjb25zdCBT
dHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBQbGF0Zm9ybVRl
eHRFZGl0Ojp0ZXh0KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJp
bmcgUGxhdGZvcm1UZXh0RWRpdDo6dGV4dFdpdGhIYXJkTGluZUJyZWFrcygpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworV2lkZ2V0OjpGb2N1c1BvbGljeSBQbGF0Zm9ybVRl
eHRFZGl0Ojpmb2N1c1BvbGljeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFdpZGdldDo6Zm9jdXNQ
b2xpY3koKTsKK30KKwordm9pZCBQbGF0Zm9ybVRleHRFZGl0OjpzZXRXb3JkV3JhcChQbGF0Zm9y
bVRleHRFZGl0OjpXcmFwU3R5bGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGxh
dGZvcm1UZXh0RWRpdDo6V3JhcFN0eWxlIFBsYXRmb3JtVGV4dEVkaXQ6OndvcmRXcmFwKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6
OnNldFNjcm9sbEJhck1vZGVzKFNjcm9sbEJhck1vZGUgaE1vZGUsIFNjcm9sbEJhck1vZGUgdk1v
ZGUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVRleHRFZGl0
OjpzZXRXcml0aW5nRGlyZWN0aW9uKFRleHREaXJlY3Rpb24pCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworaW50IFBsYXRmb3JtVGV4dEVkaXQ6OnNlbGVjdGlvblN0YXJ0KCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgUGxhdGZvcm1UZXh0
RWRpdDo6c2VsZWN0aW9uRW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNldFNlbGVjdGlvblN0YXJ0KGludCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNl
dFNlbGVjdGlvbkVuZChpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
bGF0Zm9ybVRleHRFZGl0OjpzZWxlY3RBbGwoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1UZXh0RWRpdDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50LCBpbnQpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworSW50U2l6ZSBQbGF0Zm9ybVRleHRFZGl0Ojpz
aXplV2l0aENvbHVtbnNBbmRSb3dzKGludCBudW1Db2x1bW5zLCBpbnQgbnVtUm93cykgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFBsYXRmb3JtVGV4dEVkaXQ6OmNo
ZWNrc0Rlc2NlbmRhbnRzRm9yRm9jdXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4
OiBxdC9GcmFtZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvRnJhbWVRdC5oCShSZXZpc2lvbiAwKQor
KysgcXQvRnJhbWVRdC5oCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhbWVRdF9IXworI2RlZmluZSBGcmFtZVF0X0hfCisK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisK
KyNpbmNsdWRlIDxxd2lkZ2V0Lmg+CisKK2NsYXNzIFFQYWludEV2ZW50OworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEZyYW1lUXRDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwg
fkZyYW1lUXRDbGllbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJMKGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgU3Ry
aW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBjb25zdCBGb3JtRGF0YSopID0gMDsKK307CisKK2Ns
YXNzIEZyYW1lUXQgOiBwdWJsaWMgRnJhbWUsIHB1YmxpYyBSZXNvdXJjZUxvYWRlckNsaWVudCB7
CitwdWJsaWM6CisgICAgRnJhbWVRdChRV2lkZ2V0KiBwYXJlbnQpOworICAgIEZyYW1lUXQoKTsK
KyAgICB+RnJhbWVRdCgpOworCisgICAgdmlydHVhbCBib29sIG9wZW5VUkwoY29uc3QgS1VSTCYp
OworICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJMUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXJsU2VsZWN0ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFs
IE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKKyAgICB2aXJ0dWFsIFBsdWdpbiogY3JlYXRlUGx1Z2luKEVsZW1l
bnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHJl
ZmVycmVyKTsKKyAKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDbG9zZSgpOworCisgICAgdmly
dHVhbCB2b2lkIHVuZm9jdXNXaW5kb3coKTsKKworICAgIHZpcnR1YWwgdm9pZCBmb2N1c1dpbmRv
dygpOworCisgICAgdmlydHVhbCB2b2lkIHNhdmVEb2N1bWVudFN0YXRlKCk7CisgICAgdmlydHVh
bCB2b2lkIHJlc3RvcmVEb2N1bWVudFN0YXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVz
c2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgc291cmNlSUQpOworCisgICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3Jp
cHRBbGVydChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZpcnR1YWwgYm9vbCBydW5KYXZh
U2NyaXB0Q29uZmlybShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZpcnR1YWwgYm9vbCBy
dW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBk
ZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIGJvb2wgbG9jYXRpb25i
YXJWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIG1lbnViYXJWaXNpYmxlKCk7CisgICAgdmly
dHVhbCBib29sIHBlcnNvbmFsYmFyVmlzaWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBzdGF0dXNi
YXJWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29sIHRvb2xiYXJWaXNpYmxlKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlRW1wdHlEb2N1bWVudCgpOworICAgIHZpcnR1YWwgUmFuZ2UqIG1h
cmtlZFRleHRSYW5nZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBTdHJpbmcgaW5jb21pbmdSZWZl
cnJlcigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0OworCisg
ICAgdmlydHVhbCBTdHJpbmcgbWltZVR5cGVGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBtYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrTWlzc3BlbGxpbmdz
KGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImKTsKKworICAgIHZpcnR1YWwgYm9vbCBsYXN0RXZl
bnRJc01vdXNlVXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYXNzU3ViZnJhbWVFdmVu
dFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIEZyYW1lKiBzdWJmcmFt
ZSA9IDApOworICAgIHZpcnR1YWwgYm9vbCBwYXNzV2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoTm9k
ZSopOworCisgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdldEVtYmVkSW5zdGFuY2VGb3JX
aWRnZXQoV2lkZ2V0Kik7CisgICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0
T2JqZWN0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7CisgICAgdmlydHVhbCBLSlM6OkJpbmRp
bmdzOjpJbnN0YW5jZSogZ2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjb25zdCBFZGl0Q29tbWFuZFB0
ciYpOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JSZWRvKGNvbnN0IEVkaXRD
b21tYW5kUHRyJik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7
CisgICAgdmlydHVhbCB2b2lkIGlzc3VlVW5kb0NvbW1hbmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
aXNzdWVSZWRvQ29tbWFuZCgpOworICAgIHZpcnR1YWwgdm9pZCBpc3N1ZUN1dENvbW1hbmQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaXNzdWVDb3B5Q29tbWFuZCgpOworICAgIHZpcnR1YWwgdm9pZCBp
c3N1ZVBhc3RlQ29tbWFuZCgpOworICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBhc3RlQW5kTWF0Y2hT
dHlsZUNvbW1hbmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaXNzdWVUcmFuc3Bvc2VDb21tYW5kKCk7
CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0
aW9uQ29udHJvbGxlciYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CisgICAgdmlydHVhbCBib29sIHNo
b3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBvbGRTZWxlY3Rp
b24sIGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFm
ZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFy
dENsZWFyZWRJbkJlZ2luKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuR29CYWNrT3JGb3J3YXJk
KGludCBkaXN0YW5jZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZWRPbmxvYWRFdmVu
dHMoKTsKKworICAgIHZpcnR1YWwgYm9vbCBjYW5QYXN0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBjYW5SZWRvKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNhblVuZG8oKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJy
dXB0SmF2YVNjcmlwdCgpOworCisgICAgYm9vbCBrZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQmIGtleUV2ZW50KTsKKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNl
KFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSk7CisgICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVkRGF0YShSZXNvdXJjZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgIHZpcnR1
YWwgdm9pZCByZWNlaXZlZEFsbERhdGEoUmVzb3VyY2VMb2FkZXIqLFBsYXRmb3JtRGF0YSk7CisK
KyAgICB2b2lkIHNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworCitwcml2YXRlOgor
ICAgIHZvaWQgaW5pdCgpOworICAgIHZpcnR1YWwgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRUb1dp
ZGdldChXaWRnZXQqKTsKKyAgICBGcmFtZVF0Q2xpZW50KiBtX2NsaWVudDsKKyAgICAKK307CisK
K2lubGluZSBGcmFtZVF0KiBXaW4oRnJhbWUqIGZyYW1lKSB7IHJldHVybiBzdGF0aWNfY2FzdDxG
cmFtZVF0Kj4oZnJhbWUpOyB9CitpbmxpbmUgY29uc3QgRnJhbWVRdCogV2luKGNvbnN0IEZyYW1l
KiBmcmFtZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVRdCo+KGZyYW1lKTsgfQor
Cit9CisKKyNlbmRpZgorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvSW1hZ2VTb3Vy
Y2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcXQvSW1hZ2VTb3VyY2VRdC5jcHAJKFJldmlzaW9uIDAp
CisrKyBxdC9JbWFnZVNvdXJjZVF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlU291cmNlLmgiCisKKyNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKKyNpbmNs
dWRlICJKUEVHSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiUE5HSW1hZ2VEZWNvZGVyLmgiCisj
aW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiSUNPSW1hZ2VEZWNvZGVyLmgi
CisjaW5jbHVkZSAiWEJNSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlIDxRSW1hZ2U+CisjaW5j
bHVkZSA8UURlYnVnPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlRGVjb2RlciogY3Jl
YXRlRGVjb2Rlcihjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAgLy8gV2UgbmVlZCBh
dCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRl
YWxpbmcgd2l0aC4KKyAgICBpbnQgbGVuZ3RoID0gZGF0YS5zaXplKCk7CisgICAgaWYgKGxlbmd0
aCA8IDQpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogdUNvbnRlbnRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBkYXRhLmRhdGEoKTsKKyAg
ICBjb25zdCBjaGFyKiBjb250ZW50cyA9IGRhdGEuZGF0YSgpOworCisgICAgLy8gR0lGcyBiZWdp
biB3aXRoIEdJRjgoNyBvciA5KS4KKyAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0
KSA9PSAwKSB7CisgICAgICAgIHJldHVybiBuZXcgR0lGSW1hZ2VEZWNvZGVyKCk7CisgICAgfQor
CisgICAgLy8gVGVzdCBmb3IgUE5HLgorICAgIGlmICh1Q29udGVudHNbMF0gPT0gMHg4OSAmJgor
ICAgICAgICB1Q29udGVudHNbMV0gPT0gMHg1MCAmJgorICAgICAgICB1Q29udGVudHNbMl0gPT0g
MHg0RSAmJgorICAgICAgICB1Q29udGVudHNbM10gPT0gMHg0NykgeworICAgICAgICByZXR1cm4g
bmV3IFBOR0ltYWdlRGVjb2RlcigpOworICAgIH0KKworICAgIC8vIEpQRUcKKyAgICBpZiAodUNv
bnRlbnRzWzBdID09IDB4RkYgJiYKKyAgICAgICAgdUNvbnRlbnRzWzFdID09IDB4RDggJiYKKyAg
ICAgICAgdUNvbnRlbnRzWzJdID09IDB4RkYpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBKUEVHSW1h
Z2VEZWNvZGVyKCk7CisgICAgfQorCisgICAgLy8gQk1QCisgICAgaWYgKHN0cm5jbXAoY29udGVu
dHMsICJCTSIsIDIpID09IDApIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIo
KTsKKyAgICB9CisKKyAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9s
bG93ZWQgYnkgYSAyLWJ5dGUgMS4KKyAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9s
bG93ZWQgYnkgMi1ieXRlIDIuCisgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJcMDAwXDAwMFww
MDFcMDAwIiwgNCkgfHwKKyAgICAgICAgIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMlww
MDAiLCA0KSkgeworICAgICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcigpOworICAgIH0K
KworICAgIC8vIFhCTXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCisgICAgaWYgKGxlbmd0aCA+
PSA4ICYmIHN0cm5jbXAoY29udGVudHMsICIjZGVmaW5lICIsIDgpID09IDApIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBYQk1JbWFnZURlY29kZXIoKTsKKyAgICB9CisKKyAgICAvLyBHaXZlIHVwLiBX
ZSBkb24ndCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KKyAgICByZXR1cm4gMDsKK30KKwor
SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKCkKKyAgICA6IG1fZGVjb2RlcigwKQoreworfQorCitJ
bWFnZVNvdXJjZTo6fkltYWdlU291cmNlKCkKK3sKKyAgICBkZWxldGUgbV9kZWNvZGVyOworfQor
Citib29sIEltYWdlU291cmNlOjppbml0aWFsaXplZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
ZGVjb2RlcjsKK30KKwordm9pZCBJbWFnZVNvdXJjZTo6c2V0RGF0YShjb25zdCBWZWN0b3I8Y2hh
cj4qIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQoreworICAgIC8vIE1ha2UgdGhlIGRlY29k
ZXIgYnkgc25pZmZpbmcgdGhlIGJ5dGVzLgorICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgZXhhbWlu
ZSB0aGUgZGF0YSBhbmQgaW5zdGFudGlhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGFwcHJvcHJpYXRl
IGRlY29kZXIgcGx1Z2luLgorICAgIC8vIElmIGluc3VmZmljaWVudCBieXRlcyBhcmUgYXZhaWxh
YmxlIHRvIGRldGVybWluZSB0aGUgaW1hZ2UgdHlwZSwgbm8gZGVjb2RlciBwbHVnaW4gd2lsbCBi
ZQorICAgIC8vIG1hZGUuCisgICAgbV9kZWNvZGVyID0gY3JlYXRlRGVjb2RlcigqZGF0YSk7CisK
KyAgICBpZiAoIW1fZGVjb2RlcikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9k
ZWNvZGVyLT5zZXREYXRhKCpkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworfQorCitib29sIEltYWdl
U291cmNlOjppc1NpemVBdmFpbGFibGUoKQoreworICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5pc1NpemVB
dmFpbGFibGUoKTsKK30KKworSW50U2l6ZSBJbWFnZVNvdXJjZTo6c2l6ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAgcmV0dXJuIEludFNpemUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbV9kZWNvZGVyLT5zaXplKCk7Cit9CisKK2ludCBJbWFnZVNvdXJjZTo6cmVw
ZXRpdGlvbkNvdW50KCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikgeworICAgICAgICByZXR1cm4g
Y0FuaW1hdGlvbk5vbmU7CisgICAgfQorCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+cmVwZXRpdGlv
bkNvdW50KCk7Cit9CisKK3NpemVfdCBJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIG1fZGVjb2Rlci0+ZnJhbWVDb3VudCgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFn
ZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAoIW1f
ZGVjb2RlcikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSR0JBMzJCdWZmZXIq
IGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAo
IWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBRSW1hZ2UgKmltZyA9ICBuZXcgUUlt
YWdlKCh1bnNpZ25lZCBjaGFyKilidWZmZXItPmJ5dGVzKCkuZGF0YSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZSgpLndpZHRoKCksIGJ1ZmZlci0+aGVpZ2h0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIHJl
dHVybiBpbWc7Cit9CisKK2Zsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9
PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgcmV0dXJuIGJ1ZmZlci0+ZHVyYXRpb24oKSAvIDEwMDAuMGY7Cit9CisKK2Jvb2wgSW1h
Z2VTb3VyY2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICBpZiAo
IW1fZGVjb2RlciB8fCAhbV9kZWNvZGVyLT5zdXBwb3J0c0FscGhhKCkpIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVy
LT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+
c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVmZmVyLT5oYXNBbHBoYSgpOworfQorCit9CisK
Ky8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9JbnRQb2ludFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBxdC9JbnRQb2ludFF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0ludFBvaW50UXQuY3Bw
CShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorCisjaW5j
bHVkZSA8UVBvaW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFBvaW50OjpJbnRQb2lu
dChjb25zdCBRUG9pbnQmIHApCisgICAgOiBtX3gocC54KCkpCisgICAgICAsIG1feShwLnkoKSkK
K3sKK30KKworSW50UG9pbnQ6Om9wZXJhdG9yIFFQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFFQb2ludChtX3gsIG1feSk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6
IHF0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKFJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsg
TXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVz
aW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8
c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxo
YXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsbGFuIFNhbmRmZWxkIEpl
bnNlbiA8c2FuZGZlbGRAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXRoLmgi
CisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+CisjaW5jbHVk
ZSA8UVBhaW50RGV2aWNlPgorI2luY2x1ZGUgPFFTdGFjaz4KKworI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorCisjaWZuZGVm
IE1fUEkKKyNkZWZpbmUgTV9QSSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2CisjZW5kaWYKKworI2lm
IFNWR19TVVBQT1JUCisjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZSB0
b1F0Q29tcG9zaXRpb25Nb2RlKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6
OkNvbXBvc2l0aW9uTW9kZV9DbGVhcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3Np
dGVDb3B5OgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2U7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3ZlcjoKKyAgICAgICAg
cmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3ZlcjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKKyAgICAgICAgcmV0dXJuIFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlSW47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29t
cG9zaXRlU291cmNlT3V0OgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9k
ZV9Tb3VyY2VPdXQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlQXRv
cDoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlQXRvcDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk92ZXI6CisgICAg
ICAgIHJldHVybiBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uT3ZlcjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkluOgorICAgICAgICBy
ZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbkluOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0OgorICAgICAgICByZXR1cm4g
UVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9EZXN0aW5hdGlvbk91dDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkF0b3A6CisgICAgICAgIHJldHVybiBRUGFp
bnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uQXRvcDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb21wb3NpdGVYT1I6CisgICAgICAgIHJldHVybiBRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX1hvcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21wb3NpdGVQbHVzRGFya2Vy
OgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoKKyAgICAgICAgcmV0
dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3ZlcjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDb21wb3NpdGVQbHVzTGlnaHRlcjoKKyAgICAgICAgcmV0dXJuIFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3ZlcjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3ZlcjsKK30KKworc3Rh
dGljIFF0OjpQZW5DYXBTdHlsZSB0b1F0TGluZUNhcChMaW5lQ2FwIGxjKQoreworICAgIHN3aXRj
aCAobGMpIHsKKyAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAgIHJldHVybiBRdDo6RmxhdENhcDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAgICAgcmV0dXJuIFF0OjpS
b3VuZENhcDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTcXVhcmVDYXA6CisgICAgICAgIHJl
dHVybiBRdDo6U3F1YXJlQ2FwOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
UXQ6OkZsYXRDYXA7Cit9CisKK3N0YXRpYyBRdDo6UGVuSm9pblN0eWxlIHRvUXRMaW5lSm9pbihM
aW5lSm9pbiBsaikKK3sKKyAgICBzd2l0Y2ggKGxqKSB7CisgICAgY2FzZSBNaXRlckpvaW46Cisg
ICAgICAgIHJldHVybiBRdDo6U3ZnTWl0ZXJKb2luOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFJvdW5kSm9pbjoKKyAgICAgICAgcmV0dXJuIFF0OjpSb3VuZEpvaW47CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQmV2ZWxKb2luOgorICAgICAgICByZXR1cm4gUXQ6OkJldmVsSm9pbjsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFF0OjpNaXRlckpvaW47Cit9CisKK3N0
cnVjdCBUcmFuc3BhcmVuY3lMYXllcgoreworICAgIFRyYW5zcGFyZW5jeUxheWVyKGNvbnN0IFFQ
YWludGVyJiBwLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgeworICAgICAgICBwaXhtYXAg
PSBRUGl4bWFwKHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIHBhaW50ZXIgPSBuZXcgUVBhaW50
ZXIoJnBpeG1hcCk7CisgICAgICAgIHBhaW50ZXItPnNldFBlbihwLnBlbigpKTsKKyAgICAgICAg
cGFpbnRlci0+c2V0QnJ1c2gocC5icnVzaCgpKTsKKyAgICAgICAgcGFpbnRlci0+c2V0TWF0cml4
KHAubWF0cml4KCkpOworICAgIH0KKworICAgIFRyYW5zcGFyZW5jeUxheWVyKCkKKyAgICAgICAg
OiBwYWludGVyKDApCisgICAgeworICAgIH0KKworICAgIHZvaWQgY2xlYW51cCgpCisgICAgewor
ICAgICAgICBkZWxldGUgcGFpbnRlcjsKKyAgICB9CisKKyAgICBRUGl4bWFwICAgcGl4bWFwOwor
ICAgIFFQYWludGVyICpwYWludGVyOworICAgIHFyZWFsICAgICBvcGFjaXR5OworfTsKKworc3Ry
dWN0IFRleHRTaGFkb3cKK3sKKyAgICBUZXh0U2hhZG93KCkKKyAgICA6IHgoMCkKKyAgICAgICwg
eSgwKQorICAgICAgLCBibHVyKDApCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNOdWxsKCkK
KyAgICB7CisgICAgICAgIHJldHVybiAheCAmJiAheSAmJiAhYmx1cjsKKyAgICB9CisKKyAgICBp
bnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgYmx1cjsKKworICAgIENvbG9yIGNvbG9yOworfTsK
KworY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlCit7CitwdWJsaWM6CisgICAg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFFQYWludGVyKiBwYWludGVyKTsKKyAgICB+
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CisKKyAgICBpbmxpbmUgUVBhaW50ZXIm
IHAoKQorICAgIHsKKyAgICAgICAgaWYgKGxheWVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGlmIChyZWRpcmVjdCkgeworICAgICAgICAgICAgICAgIHJldHVybiAqcmVkaXJlY3Q7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAqcGFpbnRlcjsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIHJldHVybiAqbGF5ZXJzLnRvcCgpLnBhaW50ZXI7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBRUGFpbnREZXZpY2UqIGRldmljZTsKKworICAgIFFTdGFjazxUcmFuc3Bh
cmVuY3lMYXllcj4gbGF5ZXJzOworICAgIFFQYWludGVyKiByZWRpcmVjdDsKKworICAgIEludFJl
Y3QgZm9jdXNSaW5nQ2xpcDsKKyAgICBUZXh0U2hhZG93IHNoYWRvdzsKKworcHJpdmF0ZToKKyAg
ICBRUGFpbnRlciogcGFpbnRlcjsKK307CisKKworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIqIHApCisgICAgOiBk
ZXZpY2UocC0+ZGV2aWNlKCkpCit7CisgICAgcGFpbnRlciA9IHA7CisgICAgcmVkaXJlY3QgPSAw
OworCisgICAgLy8gR29vZCBsb29raW5nIFNWR3MgcGxlYXNlLi4uCisgICAgcGFpbnRlci0+c2V0
UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKK30KKworR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKK3sKK30K
KworR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCisgICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRl
KCkpCisgICAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNv
bnRleHQpKQoreworICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOworfQorCitHcmFw
aGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQoreworICAgIHdoaWxlKCFtX2RhdGEtPmxh
eWVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICB9
CisKKyAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2NvbW1vbik7CisgICAgZGVs
ZXRlIG1fZGF0YTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1fZGF0YS0+cCgpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQoreworICAgIG1f
ZGF0YS0+cCgpLnNhdmUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0
Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEtPnAoKS5yZXN0b3JlKCk7Cit9CisKKy8qIEZJWE1F
OiBESVNBQkxFRCBXSElMRSBNRVJHSU5HIEJBQ0sgRlJPTSBVTklUWQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUZXh0U2hhZG93KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQm
IHBvaW50LCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2RhdGEtPnNoYWRvdy5pc051bGwo
KSkgcmV0dXJuOworCisgICAgVGV4dFNoYWRvdyAqc2hhZG93ID0gJm1fZGF0YS0+c2hhZG93Owor
CisgICAgaWYgKHNoYWRvdy0+Ymx1ciA8PSAwKSB7CisgICAgICAgIFBlbiBwID0gcGVuKCk7Cisg
ICAgICAgIHNldFBlbihzaGFkb3ctPmNvbG9yKTsKKyAgICAgICAgZm9udCgpLmRyYXdUZXh0KHRo
aXMsIHJ1biwgc3R5bGUsIEludFBvaW50KHBvaW50LngoKSArIHNoYWRvdy0+eCwgcG9pbnQueSgp
ICsgc2hhZG93LT55KSk7CisgICAgICAgIHNldFBlbihwKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBjb25zdCBpbnQgdGhpY2tuZXNzID0gc2hhZG93LT5ibHVyOworICAgICAgICAvLyAjIyMgT1BU
SU1JWkU6IGxpbWl0IHRoZSBhcmVhIHRvIG9ubHkgdGhlIGFjdHVhbGx5IHBhaW50ZWQgYXJlYSAr
IDIqdGhpY2tuZXNzCisgICAgICAgIGNvbnN0IGludCB3ID0gbV9kYXRhLT5wKCkuZGV2aWNlKCkt
PndpZHRoKCk7CisgICAgICAgIGNvbnN0IGludCBoID0gbV9kYXRhLT5wKCkuZGV2aWNlKCktPmhl
aWdodCgpOworICAgICAgICBjb25zdCBRUmdiIGNvbG9yID0gcVJnYigyNTUsMjU1LDI1NSk7Cisg
ICAgICAgIGNvbnN0IFFSZ2IgYmdDb2xvciA9IHFSZ2IoMCwwLDApOworICAgICAgICBRSW1hZ2Ug
aW1hZ2UoUVNpemUodywgaCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAgICAgIGltYWdl
LmZpbGwoYmdDb2xvcik7CisgICAgICAgIFFQYWludGVyIHA7CisKKyAgICAgICAgUGVuIF9wZW4g
PSBwZW4oKTsKKyAgICAgICAgcC5iZWdpbigmaW1hZ2UpOworICAgICAgICBzZXRQZW4oY29sb3Ip
OworICAgICAgICBtX2RhdGEtPnJlZGlyZWN0ID0gJnA7CisgICAgICAgIGZvbnQoKS5kcmF3VGV4
dCh0aGlzLCBydW4sIHN0eWxlLCBJbnRQb2ludChwb2ludC54KCkgKyBzaGFkb3ctPngsIHBvaW50
LnkoKSArIHNoYWRvdy0+eSkpOworICAgICAgICBtX2RhdGEtPnJlZGlyZWN0ID0gMDsKKyAgICAg
ICAgcC5lbmQoKTsKKyAgICAgICAgc2V0UGVuKF9wZW4pOworCisgICAgICAgIGludCBtZCA9IHRo
aWNrbmVzcyp0aGlja25lc3M7IC8vIG1heC1kaXN0XjIKKworICAgICAgICAvLyBibHVyIG1hcC9w
cmVjYWxjdWxhdGVkIHNoYWRvdy1kZWNheQorICAgICAgICBmbG9hdCAqYm1hcCA9IChmbG9hdCop
YWxsb2NhKHNpemVvZihmbG9hdCkqKG1kKzEpKTsKKyAgICAgICAgZm9yIChpbnQgbj0wOyBuPD1t
ZDsgbisrKSB7CisgICAgICAgICAgICBmbG9hdCBmOworICAgICAgICAgICAgZiA9IG4vKGZsb2F0
KShtZCsxKTsKKyAgICAgICAgICAgIGYgPSAxLjAgLSBmKmY7CisgICAgICAgICAgICBibWFwW25d
ID0gZjsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGZhY3RvciA9IDAuMDsgLy8gbWF4aW1h
bCBwb3RlbnRpYWwgb3BhY2l0eS1zdW0KKyAgICAgICAgZm9yIChpbnQgbj0tdGhpY2tuZXNzOyBu
PD10aGlja25lc3M7IG4rKykKKyAgICAgICAgICAgIGZvciAoaW50IG09LXRoaWNrbmVzczsgbTw9
dGhpY2tuZXNzOyBtKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgZCA9IG4qbittKm07CisgICAg
ICAgICAgICAgICAgaWYgKGQ8PW1kKQorICAgICAgICAgICAgICAgICAgICBmYWN0b3IgKz0gYm1h
cFtkXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAvLyBhbHBoYSBtYXAKKyAgICAgICAgZmxv
YXQqIGFtYXAgPSAoZmxvYXQqKWFsbG9jYShzaXplb2YoZmxvYXQpKihoKncpKTsKKyAgICAgICAg
bWVtc2V0KGFtYXAsIDAsIGgqdyooc2l6ZW9mKGZsb2F0KSkpOworICAgICAgICBmb3IgKGludCBq
PXRoaWNrbmVzczsgajxoLXRoaWNrbmVzczsgaisrKSB7CisgICAgICAgICAgICBmb3IgKGludCBp
PXRoaWNrbmVzczsgaTx3LXRoaWNrbmVzczsgaSsrKSB7CisgICAgICAgICAgICAgICAgUVJnYiBj
b2w9IGltYWdlLnBpeGVsKGksaik7CisgICAgICAgICAgICAgICAgaWYgKGNvbCA9PSBiZ0NvbG9y
KSBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmbG9hdCBnID0gcUFscGhhKGNvbCk7CisgICAg
ICAgICAgICAgICAgZyA9IGcvMjU1OworICAgICAgICAgICAgICAgIGZvciAoaW50IG49LXRoaWNr
bmVzczsgbjw9dGhpY2tuZXNzOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
bT0tdGhpY2tuZXNzOyBtPD10aGlja25lc3M7IG0rKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGQgPSBuKm4rbSptOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQ+bWQpIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZiA9IGJtYXBbZF07CisgICAg
ICAgICAgICAgICAgICAgICAgICBhbWFwWyhpK20pKyhqK24pKnddICs9IChnKmYpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgUUltYWdlIHJlcyhRU2l6ZSh3LGgpLFFJbWFnZTo6Rm9ybWF0X0FSR0Iz
Mik7CisgICAgICAgIGludCByID0gc2hhZG93LT5jb2xvci5yZWQoKTsKKyAgICAgICAgaW50IGcg
PSBzaGFkb3ctPmNvbG9yLmdyZWVuKCk7CisgICAgICAgIGludCBiID0gc2hhZG93LT5jb2xvci5i
bHVlKCk7CisgICAgICAgIGludCBhMSA9IHNoYWRvdy0+Y29sb3IuYWxwaGEoKTsKKworICAgICAg
ICAvLyBhcmJpdHJhdHJ5IGZhY3RvciBhZGp1c3RtZW50IHRvIG1ha2Ugc2hhZG93cyBtb3JlIHNv
bGlkLgorICAgICAgICBmYWN0b3IgPSAxLjMzMy9mYWN0b3I7CisKKyAgICAgICAgZm9yIChpbnQg
aj0wOyBqPGg7IGorKykgeworICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPHc7IGkrKykgewor
ICAgICAgICAgICAgICAgIGludCBhID0gKGludCkoYW1hcFtpK2oqd10gKiBmYWN0b3IgKiBhMSk7
CisgICAgICAgICAgICAgICAgaWYgKGEgPiAyNTUpIGEgPSAyNTU7CisgICAgICAgICAgICAgICAg
cmVzLnNldFBpeGVsKGksaiwgcVJnYmEocixnLGIsYSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgbV9kYXRhLT5wKCkuZHJhd0ltYWdlKDAsIDAsIHJlcywgMCwgMCwgLTEs
IC0xLCBRdDo6RGlmZnVzZUFscGhhRGl0aGVyIHwgUXQ6OkNvbG9yT25seSB8IFF0OjpQcmVmZXJE
aXRoZXIpOworICAgIH0KK30KKyovCisKKy8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRo
IGEgc3Ryb2tlZCBib3JkZXIuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKSB7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX2RhdGEtPnAoKS5kcmF3UmVjdChyZWN0KTsKK30KKwor
Ly8gRklYTUU6IE5vdyB0aGF0IHRoaXMgaXMgcmVmYWN0b3JlZCwgaXQgc2hvdWxkIGJlIHNoYXJl
ZCBieSBhbGwgY29udGV4dHMuCitzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kZXJp
ZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQZW46OlBlblN0eWxl
JiBwZW5TdHlsZSkKK3sKKyAgICAvLyBGb3Igb2RkIHdpZHRocywgd2UgYWRkIGluIDAuNSB0byB0
aGUgYXBwcm9wcmlhdGUgeC95IHNvIHRoYXQgdGhlIGZsb2F0IGFyaXRobWV0aWMKKyAgICAvLyB3
b3JrcyBvdXQuICBGb3IgZXhhbXBsZSwgd2l0aCBhIGJvcmRlciB3aWR0aCBvZiAzLCBLSFRNTCB3
aWxsIHBhc3MgdXMgKHkxK3kyKS8yLCBlLmcuLAorICAgIC8vICg1MCs1MykvMiA9IDEwMy8yID0g
NTEgd2hlbiB3ZSB3YW50IDUxLjUuICBJdCBpcyBhbHdheXMgdHJ1ZSB0aGF0IGFuIGV2ZW4gd2lk
dGggZ2F2ZQorICAgIC8vIHVzIGEgcGVyZmVjdCBwb3NpdGlvbiwgYnV0IGFuIG9kZCB3aWR0aCBn
YXZlIHVzIGEgcG9zaXRpb24gdGhhdCBpcyBvZmYgYnkgZXhhY3RseSAwLjUuCisgICAgaWYgKHBl
blN0eWxlID09IFBlbjo6RG90TGluZSB8fCBwZW5TdHlsZSA9PSBQZW46OkRhc2hMaW5lKSB7Cisg
ICAgICAgIGlmIChwMS54KCkgPT0gcDIueCgpKSB7CisgICAgICAgICAgICBwMS5zZXRZKHAxLnko
KSArIHN0cm9rZVdpZHRoKTsKKyAgICAgICAgICAgIHAyLnNldFkocDIueSgpIC0gc3Ryb2tlV2lk
dGgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcDEuc2V0WChwMS54
KCkgKyBzdHJva2VXaWR0aCk7CisgICAgICAgICAgICBwMi5zZXRYKHAyLngoKSAtIHN0cm9rZVdp
ZHRoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoKGludClzdHJva2VXaWR0aCklMikg
eworICAgICAgICBpZiAocDEueCgpID09IHAyLngoKSkgeworICAgICAgICAgICAgLy8gV2UncmUg
YSB2ZXJ0aWNhbCBsaW5lLiAgQWRqdXN0IG91ciB4LgorICAgICAgICAgICAgcDEuc2V0WChwMS54
KCkgKyAwLjUpOworICAgICAgICAgICAgcDIuc2V0WChwMi54KCkgKyAwLjUpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gV2UncmUgYSBob3Jpem9udGFsIGxpbmUu
IEFkanVzdCBvdXIgeS4KKyAgICAgICAgICAgIHAxLnNldFkocDEueSgpICsgMC41KTsKKyAgICAg
ICAgICAgIHAyLnNldFkocDIueSgpICsgMC41KTsKKyAgICAgICAgfQorICAgIH0KK30KKworLy8g
VGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgordm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNvbnN0IEludFBvaW50JiBwb2ludDIp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgRmxvYXRQb2ludCBwMSA9IHBvaW50MTsKKyAgICBGbG9hdFBvaW50IHAyID0gcG9p
bnQyOworCisgICAgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGVyaWVzKHAxLCBwMiwgcGVuKCkud2lk
dGgoKSwgcGVuKCkuc3R5bGUoKSk7CisgICAgbV9kYXRhLT5wKCkuZHJhd0xpbmUocDEsIHAyKTsK
K30KKworLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJj
bGVzIHVzZWQgaW4gbGlzdHMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKSB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RhdGEtPnAoKS5kcmF3RWxsaXBzZShyZWN0KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwg
ZmxvYXQgdGhpY2tuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0
QW5nbGUsIGludCBhbmdsZVNwYW4pCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgUVBlbiBvbGRQZW4gPSBtX2RhdGEt
PnAoKS5wZW4oKTsKKyAgICBRUGVuIG5QZW4gPSBvbGRQZW47CisgICAgblBlbi5zZXRXaWR0aEYo
dGhpY2tuZXNzKTsKKyAgICBtX2RhdGEtPnAoKS5zZXRQZW4oblBlbik7CisgICAgbV9kYXRhLT5w
KCkuZHJhd0FyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4pOworICAgIG1fZGF0YS0+cCgp
LnNldFBlbihvbGRQZW4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEludFBvaW50KiBwb2ludHMpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9k
YXRhLT5wKCkuZHJhd0NvbnZleFBvbHlnb24oKFFQb2ludCopcG9pbnRzLCBucG9pbnRzKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fZGF0YS0+cCgpLmZpbGxSZWN0KHJlY3QsIFFDb2xvcihj
LnJlZCgpLCBjLmdyZWVuKCksIGMuYmx1ZSgpLCBjLmFscGhhKCkpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbV9kYXRhLT5wKCkuZmlsbFJlY3QocmVjdCwgUUNvbG9yKGMucmVkKCksIGMu
Z3JlZW4oKSwgYy5ibHVlKCksIGMuYWxwaGEoKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6YWRkQ2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFFQYWludGVyUGF0aCBwYXRo
OworICAgIHBhdGguYWRkUmVjdChRUmVjdEYocmVjdCkpOworICAgIG1fZGF0YS0+cCgpLnNldENs
aXBQYXRoKHBhdGgsIFF0OjpVbml0ZUNsaXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZvY3VzUmluZ0NsaXAoY29uc3QgSW50
UmVjdCAmcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX2RhdGEtPmZvY3VzUmluZ0NsaXAgPSByZWN0OworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJGb2N1c1JpbmdDbGlwKCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RhdGEt
PmZvY3VzUmluZ0NsaXAgPSBJbnRSZWN0KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHQoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgeU9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBib29sIHByaW50aW5n
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEludFBvaW50IG9yaWdpbiA9IHBvaW50ICsgSW50U2l6ZSgwLCB5T2Zmc2V0ICsg
MSk7CisgICAgSW50UG9pbnQgZW5kUG9pbnQgPSBvcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKTsK
KyAgICBkcmF3TGluZShvcmlnaW4sIGVuZFBvaW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmcoY29uc3QgSW50UG9pbnQmIHBvaW50LCBpbnQgd2lk
dGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0KQoreworICAg
IFFSZWN0RiByZWN0KGZyZWN0KTsKKyAgICByZWN0ID0gbV9kYXRhLT5wKCkuZGV2aWNlTWF0cml4
KCkubWFwUmVjdChyZWN0KTsKKworICAgIFFSZWN0IHJlc3VsdCA9IHJlY3QudG9SZWN0KCk7IC8v
cm91bmQgaXQKKyAgICByZXR1cm4gRmxvYXRSZWN0KFFSZWN0RihyZXN1bHQpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBJbnRTaXplJiBwb3MsIGludCBibHVy
LCBjb25zdCBDb2xvciAmY29sb3IpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kYXRhLT5zaGFkb3cueCA9IHBvcy53aWR0
aCgpOworICAgIG1fZGF0YS0+c2hhZG93LnkgPSBwb3MuaGVpZ2h0KCk7CisgICAgbV9kYXRhLT5z
aGFkb3cuYmx1ciA9IGJsdXI7CisgICAgbV9kYXRhLT5zaGFkb3cuY29sb3IgPSBjb2xvcjsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RhdGEtPnNo
YWRvdyA9IFRleHRTaGFkb3coKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUcmFuc3BhcmVuY3lMYXllciBs
YXllcihtX2RhdGEtPnAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtPmRl
dmljZS0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtPmRldmlj
ZS0+aGVpZ2h0KCkpOworCisgICAgbGF5ZXIub3BhY2l0eSA9IG9wYWNpdHk7CisgICAgbV9kYXRh
LT5sYXllcnMucHVzaChsYXllcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgVHJhbnNwYXJlbmN5TGF5ZXIgbGF5ZXIgPSBtX2RhdGEt
PmxheWVycy5wb3AoKTsKKyAgICBsYXllci5wYWludGVyLT5lbmQoKTsKKworICAgIG1fZGF0YS0+
cCgpLnNhdmUoKTsKKyAgICBtX2RhdGEtPnAoKS5zZXRPcGFjaXR5KGxheWVyLm9wYWNpdHkpOwor
ICAgIG1fZGF0YS0+cCgpLmRyYXdQaXhtYXAoMCwgMCwgbGF5ZXIucGl4bWFwKTsKKyAgICBtX2Rh
dGEtPnAoKS5lbmQoKTsKKworICAgIGxheWVyLmNsZWFudXAoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kYXRh
LT5wKCkuZXJhc2VSZWN0KHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFFQYWludGVy
UGF0aCBwYXRoOyBwYXRoLmFkZFJlY3QocmVjdCk7CisgICAgUVBlbiBuUGVuID0gbV9kYXRhLT5w
KCkucGVuKCk7CisgICAgblBlbi5zZXRXaWR0aEYod2lkdGgpOworICAgIG1fZGF0YS0+cCgpLnN0
cm9rZVBhdGgocGF0aCwgblBlbik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
V2lkdGgoZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgUVBlbiBuUGVuID0gbV9kYXRhLT5wKCkucGVuKCk7
CisgICAgblBlbi5zZXRXaWR0aEYod2lkdGgpOworICAgIG1fZGF0YS0+cCgpLnNldFBlbihuUGVu
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsYykKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBRUGVuIG5QZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAgICBuUGVuLnNldENhcFN0eWxl
KHRvUXRMaW5lQ2FwKGxjKSk7CisgICAgbV9kYXRhLT5wKCkuc2V0UGVuKG5QZW4pOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUVBl
biBuUGVuID0gbV9kYXRhLT5wKCkucGVuKCk7CisgICAgblBlbi5zZXRKb2luU3R5bGUodG9RdExp
bmVKb2luKGxqKSk7CisgICAgbV9kYXRhLT5wKCkuc2V0UGVuKG5QZW4pOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRUGVuIG5Q
ZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAgICBuUGVuLnNldE1pdGVyTGltaXQobGltaXQpOwor
ICAgIG1fZGF0YS0+cCgpLnNldFBlbihuUGVuKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEFscGhhKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kYXRhLT5wKCkuc2V0T3BhY2l0eShv
cGFjaXR5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKSB7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RhdGEtPnAoKS5zZXRDb21wb3NpdGlv
bk1vZGUodG9RdENvbXBvc2l0aW9uTW9kZShvcCkpOworCit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwKGNvbnN0IFBhdGggJnBhdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9kYXRhLT5wKCkuc2V0Q2xpcFBh
dGgoKnBhdGgucGxhdGZvcm1QYXRoKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJh
bnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RhdGEtPnAoKS5zY2FsZShzLndp
ZHRoKCksIHMuaGVpZ2h0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZs
b2F0IHJhZGlhbnMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9kYXRhLT5wKCkucm90YXRlKHJhZGlhbnMpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
ZGF0YS0+cCgpLnNjYWxlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aGlja25l
c3MpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYWRkQ2xpcChyZWN0KTsKKyAgICBRUGFpbnRlclBhdGggcGF0aDsKKworICAg
IC8vIEFkZCBvdXRlciBlbGxpcHNlCisgICAgcGF0aC5hZGRFbGxpcHNlKFFSZWN0RihyZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOworCisgICAgLy8gQWRk
IGlubmVyIGVsbGlwc2UuCisgICAgcGF0aC5hZGRFbGxpcHNlKFFSZWN0RihyZWN0LngoKSArIHRo
aWNrbmVzcywgcmVjdC55KCkgKyB0aGlja25lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LndpZHRoKCkgLSAodGhpY2tuZXNzICogMiksIHJlY3QuaGVpZ2h0KCkgLSAodGhpY2tu
ZXNzICogMikpKTsKKworICAgIHBhdGguc2V0RmlsbFJ1bGUoUXQ6Ok9kZEV2ZW5GaWxsKTsKKyAg
ICBtX2RhdGEtPnAoKS5zZXRDbGlwUGF0aChwYXRoLCBRdDo6SW50ZXJzZWN0Q2xpcCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJv
dHRvbUxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIGJvdHRvbVJpZ2h0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5lZWQgc3VmZmljaWVudCB3aWR0aCBh
bmQgaGVpZ2h0IHRvIGNvbnRhaW4gdGhlc2UgY3VydmVzLiAgU2FuaXR5IGNoZWNrIG91ciB0b3Av
Ym90dG9tCisgICAgLy8gdmFsdWVzIGFuZCBvdXIgd2lkdGgvaGVpZ2h0IHZhbHVlcyB0byBtYWtl
IHN1cmUgdGhlIGN1cnZlcyBjYW4gYWxsIGZpdC4KKyAgICBpbnQgcmVxdWlyZWRXaWR0aCA9IHFN
YXgodG9wTGVmdC53aWR0aCgpICsgdG9wUmlnaHQud2lkdGgoKSwgYm90dG9tTGVmdC53aWR0aCgp
ICsgYm90dG9tUmlnaHQud2lkdGgoKSk7CisgICAgaWYgKHJlcXVpcmVkV2lkdGggPiByZWN0Lndp
ZHRoKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCByZXF1aXJlZEhlaWdo
dCA9IHFNYXgodG9wTGVmdC5oZWlnaHQoKSArIGJvdHRvbUxlZnQuaGVpZ2h0KCksIHRvcFJpZ2h0
LmhlaWdodCgpICsgYm90dG9tUmlnaHQuaGVpZ2h0KCkpOworICAgIGlmIChyZXF1aXJlZEhlaWdo
dCA+IHJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIENs
aXAgdG8gb3VyIHJlY3QuCisgICAgYWRkQ2xpcChyZWN0KTsKKworICAgIC8vIE9LLCB0aGUgY3Vy
dmVzIGNhbiBmaXQuCisgICAgUVBhaW50ZXJQYXRoIHBhdGg7CisKKyAgICAvLyBBZGQgdGhlIGZv
dXIgZWxsaXBzZXMgdG8gdGhlIHBhdGguICBUZWNobmljYWxseSB0aGlzIHJlYWxseSBpc24ndCBn
b29kIGVub3VnaCwgc2luY2Ugd2UgY291bGQgZW5kIHVwCisgICAgLy8gbm90IGNsaXBwaW5nIHRo
ZSBvdGhlciAzLzQgb2YgdGhlIGVsbGlwc2Ugd2UgZG9uJ3QgY2FyZSBhYm91dC4gIFdlJ3JlIHJl
bHlpbmcgb24gdGhlIGZhY3QgdGhhdCBmb3IKKyAgICAvLyBub3JtYWwgdXNlIGNhc2VzIHRoZXNl
IGVsbGlwc2VzIHdvbid0IG92ZXJsYXAgb25lIGFub3RoZXIgKG9yIHdoZW4gdGhleSBkbyB0aGUg
Y3VydmF0dXJlIG9mIG9uZSB3aWxsCisgICAgLy8gYmUgc3Vic3VtZWQgYnkgdGhlIG90aGVyKS4K
KyAgICBwYXRoLmFkZEVsbGlwc2UoUVJlY3RGKHJlY3QueCgpLCByZWN0LnkoKSwgdG9wTGVmdC53
aWR0aCgpICogMiwgdG9wTGVmdC5oZWlnaHQoKSAqIDIpKTsKKyAgICBwYXRoLmFkZEVsbGlwc2Uo
UVJlY3RGKHJlY3QucmlnaHQoKSAtIHRvcFJpZ2h0LndpZHRoKCkgKiAyLCByZWN0LnkoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0LndpZHRoKCkgKiAyLCB0b3BSaWdodC5o
ZWlnaHQoKSAqIDIpKTsKKyAgICBwYXRoLmFkZEVsbGlwc2UoUVJlY3RGKHJlY3QueCgpLCByZWN0
LmJvdHRvbSgpIC0gYm90dG9tTGVmdC5oZWlnaHQoKSAqIDIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib3R0b21MZWZ0LndpZHRoKCkgKiAyLCBib3R0b21MZWZ0LmhlaWdodCgpICogMikp
OworICAgIHBhdGguYWRkRWxsaXBzZShRUmVjdEYocmVjdC5yaWdodCgpIC0gYm90dG9tUmlnaHQu
d2lkdGgoKSAqIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSgpIC0g
Ym90dG9tUmlnaHQuaGVpZ2h0KCkgKiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90
dG9tUmlnaHQud2lkdGgoKSAqIDIsIGJvdHRvbVJpZ2h0LmhlaWdodCgpICogMikpOworCisgICAg
Ly8gTm93IGFkZCBmaXZlIHJlY3RzIChvbmUgZm9yIGVhY2ggZWRnZSByZWN0IGluIGJldHdlZW4g
dGhlIHJvdW5kZWQgY29ybmVycyBhbmQgb25lIGZvciB0aGUgaW50ZXJpb3IpLgorICAgIHBhdGgu
YWRkUmVjdChRUmVjdEYocmVjdC54KCkgKyB0b3BMZWZ0LndpZHRoKCksIHJlY3QueSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gdG9wTGVmdC53aWR0aCgpIC0gdG9w
UmlnaHQud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHFNYXgodG9wTGVmdC5oZWln
aHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkpKSk7CisgICAgcGF0aC5hZGRSZWN0KFFSZWN0RihyZWN0
LngoKSArIGJvdHRvbUxlZnQud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
Ym90dG9tKCkgLSBxTWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCksIGJvdHRvbVJpZ2h0LmhlaWdodCgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIGJvdHRvbUxlZnQud2lk
dGgoKSAtIGJvdHRvbVJpZ2h0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICBxTWF4
KGJvdHRvbUxlZnQuaGVpZ2h0KCksIGJvdHRvbVJpZ2h0LmhlaWdodCgpKSkpOworICAgIHBhdGgu
YWRkUmVjdChRUmVjdEYocmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdC5oZWlnaHQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHFNYXgodG9wTGVmdC53aWR0aCgpLCBib3R0b21MZWZ0Lndp
ZHRoKCkpLCByZWN0LmhlaWdodCgpIC0gdG9wTGVmdC5oZWlnaHQoKSAtIGJvdHRvbUxlZnQuaGVp
Z2h0KCkpKTsKKyAgICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3QucmlnaHQoKSAtIHFNYXgodG9w
UmlnaHQud2lkdGgoKSwgYm90dG9tUmlnaHQud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LnkoKSArIHRvcFJpZ2h0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgcU1heCh0b3BSaWdodC53aWR0aCgpLCBib3R0b21SaWdodC53aWR0aCgpKSwgcmVjdC5oZWln
aHQoKSAtIHRvcFJpZ2h0LmhlaWdodCgpIC0gYm90dG9tUmlnaHQuaGVpZ2h0KCkpKTsKKyAgICBw
YXRoLmFkZFJlY3QoUVJlY3RGKHJlY3QueCgpICsgcU1heCh0b3BMZWZ0LndpZHRoKCksIGJvdHRv
bUxlZnQud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSArIHFNYXgo
dG9wTGVmdC5oZWlnaHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdC53aWR0aCgpIC0gcU1heCh0b3BMZWZ0LndpZHRoKCksIGJvdHRvbUxlZnQud2lk
dGgoKSkgLSBxTWF4KHRvcFJpZ2h0LndpZHRoKCksIGJvdHRvbVJpZ2h0LndpZHRoKCkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQoKSAtIHFNYXgodG9wTGVmdC5oZWlnaHQo
KSwgdG9wUmlnaHQuaGVpZ2h0KCkpIC0gcU1heChib3R0b21MZWZ0LmhlaWdodCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21SaWdodC5oZWlnaHQoKSkpKTsKKyAgICBw
YXRoLnNldEZpbGxSdWxlKFF0OjpXaW5kaW5nRmlsbCk7CisgICAgbV9kYXRhLT5wKCkuc2V0Q2xp
cFBhdGgocGF0aCwgUXQ6OkludGVyc2VjdENsaXApOworfQorCisjaWYgU1ZHX1NVUFBPUlQKK0tS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmluZ0Rl
dmljZUNvbnRleHQoKQoreworICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dChwbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisjZW5kaWYKKworfQorCisvLyB2aW06IHRzPTQgc3c9
NCBldApJbmRleDogcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9G
b250UGxhdGZvcm1EYXRhUXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvRm9udFBsYXRmb3JtRGF0
YVF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBUaGlzIGZpbGUg
aXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBu
b3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250
V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlr
b3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkhlbHBlclF0LmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVk
ZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorCisj
aW5jbHVkZSA8UUhhc2g+CisjaW5jbHVkZSA8UUZvbnRJbmZvPgorCisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKCkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YShEZWxldGVkKQoreworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25z
dCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCit7CisgICAgUUZvbnQgZm9udCgiVGltZXMgTmV3
IFJvbWFuIiwgMTIpOworICAgIGZvbnQuc2V0RmFtaWx5KHRvUVN0cmluZyhmYW1pbHlOYW1lKSk7
CisgICAgZm9udC5zZXRQaXhlbFNpemUoZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKTsK
KyAgICBmb250LnNldEl0YWxpYyhmb250RGVzY3JpcHRpb24uaXRhbGljKCkpOworICAgIGZvbnQu
c2V0V2VpZ2h0KGZvbnREZXNjcmlwdGlvbi53ZWlnaHQoKSk7CisgICAgc2V0Rm9udChmb250KTsK
K30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBvdGhlcikKK3sKKyAgICBtX2ZvbnQgPSBvdGhlci5tX2ZvbnQ7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBvdGhlcikKK3sKKyAgICBtX2ZvbnQgPSBvdGhlci5tX2ZvbnQ7CisgICAgcmV0dXJu
ICp0aGlzOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7Cit9
CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKK3sKKyAgICByZXR1cm4g
UUZvbnRJbmZvKG1fZm9udCkuZml4ZWRQaXRjaCgpOworfQorCit2b2lkIEZvbnRQbGF0Zm9ybURh
dGE6OnNldEZvbnQoY29uc3QgUUZvbnQmIG90aGVyKQoreworICAgIG1fZm9udCA9IG90aGVyOwor
fQorCitRRm9udCBGb250UGxhdGZvcm1EYXRhOjpmb250KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9mb250OworfQorCit1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gcUhhc2goJm1fZm9udCk7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKG90aGVyLm1fZm9udCA9PSBtX2ZvbnQpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBz
dz00IGV0CkluZGV4OiBxdC9Gb250UGxhdGZvcm1EYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvRm9u
dFBsYXRmb3JtRGF0YS5oCShSZXZpc2lvbiAwKQorKysgcXQvRm9udFBsYXRmb3JtRGF0YS5oCShS
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1
ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5k
IEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIAorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRhX0gKKyNkZWZpbmUg
Rm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUg
IkZvbnREZXNjcmlwdGlvbi5oIgorCisjaW5jbHVkZSA8UUZvbnQ+CisjaW5jbHVkZSA8UVN0cmlu
Zz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZvcm1EYXRhIHsKK3B1
YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVy
KTsKKyAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgb3RoZXIpOworCisgICAgY2xhc3MgRGVsZXRlZCB7IH07CisgICAgRm9udFBsYXRmb3JtRGF0
YShEZWxldGVkKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEoKTsKKyAgICBGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KTsK
KyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKTsKKwor
ICAgIHZvaWQgc2V0Rm9udChjb25zdCBRRm9udCYpOworICAgIFFGb250IGZvbnQoKSBjb25zdDsK
KworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgUUZvbnQg
bV9mb250OworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6
IHF0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9Db29raWVKYXJRdC5jcHAJKFJl
dmlzaW9uIDApCisrKyBxdC9Db29raWVKYXJRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NA
a2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVk
U3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tp
ZUphcjsKKwordm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypw
b2xpY3lVUkwqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjb29raWVKYXIuc2V0KHVy
bC51cmwoKSwgdmFsdWUpOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBLVVJMJiB1cmwpCit7
CisgICAgcmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnVybCgpKTsKK30KKworYm9vbCBjb29raWVz
RW5hYmxlZCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3
PTQgZXQKSW5kZXg6IHF0L1BsYXRmb3JtS2V5Ym9hcmRFdmVudFF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBxdC9QbGF0Zm9ybUtleWJvYXJkRXZlbnRRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9QbGF0
Zm9ybUtleWJvYXJkRXZlbnRRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkhlbHBlclF0LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSA8UUtleUV2
ZW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcga2V5SWRlbnRpZmll
ckZvclF0S2V5Q29kZShpbnQga2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKyAg
ICAgICAgY2FzZSBRdDo6S2V5X01lbnU6CisgICAgICAgIGNhc2UgUXQ6OktleV9BbHQ6CisgICAg
ICAgICAgICByZXR1cm4gIkFsdCI7CisgICAgICAgIGNhc2UgUXQ6OktleV9DbGVhcjoKKyAgICAg
ICAgICAgIHJldHVybiAiQ2xlYXIiOworICAgICAgICBjYXNlIFF0OjpLZXlfRG93bjoKKyAgICAg
ICAgICAgIHJldHVybiAiRG93biI7CisgICAgICAgIGNhc2UgUXQ6OktleV9FbmQ6CisgICAgICAg
ICAgICByZXR1cm4gIkVuZCI7CisgICAgICAgIGNhc2UgUXQ6OktleV9FbnRlcjoKKyAgICAgICAg
ICAgIHJldHVybiAiRW50ZXIiOworICAgICAgICBjYXNlIFF0OjpLZXlfRXhlY3V0ZToKKyAgICAg
ICAgICAgIHJldHVybiAiRXhlY3V0ZSI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMToKKyAgICAg
ICAgICAgIHJldHVybiAiRjEiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjI6CisgICAgICAgICAg
ICByZXR1cm4gIkYyIjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0YzOgorICAgICAgICAgICAgcmV0
dXJuICJGMyI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GNDoKKyAgICAgICAgICAgIHJldHVybiAi
RjQiOworICAgICAgICBjYXNlIFF0OjpLZXlfRjU6CisgICAgICAgICAgICByZXR1cm4gIkY1IjsK
KyAgICAgICAgY2FzZSBRdDo6S2V5X0Y2OgorICAgICAgICAgICAgcmV0dXJuICJGNiI7CisgICAg
ICAgIGNhc2UgUXQ6OktleV9GNzoKKyAgICAgICAgICAgIHJldHVybiAiRjciOworICAgICAgICBj
YXNlIFF0OjpLZXlfRjg6CisgICAgICAgICAgICByZXR1cm4gIkY4IjsKKyAgICAgICAgY2FzZSBR
dDo6S2V5X0Y5OgorICAgICAgICAgICAgcmV0dXJuICJGOSI7CisgICAgICAgIGNhc2UgUXQ6Oktl
eV9GMTA6CisgICAgICAgICAgICByZXR1cm4gIkYxMCI7CisgICAgICAgIGNhc2UgUXQ6OktleV9G
MTE6CisgICAgICAgICAgICByZXR1cm4gIkYxMSI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMTI6
CisgICAgICAgICAgICByZXR1cm4gIkYxMiI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMTM6Cisg
ICAgICAgICAgICByZXR1cm4gIkYxMyI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMTQ6CisgICAg
ICAgICAgICByZXR1cm4gIkYxNCI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMTU6CisgICAgICAg
ICAgICByZXR1cm4gIkYxNSI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMTY6CisgICAgICAgICAg
ICByZXR1cm4gIkYxNiI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMTc6CisgICAgICAgICAgICBy
ZXR1cm4gIkYxNyI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMTg6CisgICAgICAgICAgICByZXR1
cm4gIkYxOCI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMTk6CisgICAgICAgICAgICByZXR1cm4g
IkYxOSI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMjA6CisgICAgICAgICAgICByZXR1cm4gIkYy
MCI7CisgICAgICAgIGNhc2UgUXQ6OktleV9GMjE6CisgICAgICAgICAgICByZXR1cm4gIkYyMSI7
CisgICAgICAgIGNhc2UgUXQ6OktleV9GMjI6CisgICAgICAgICAgICByZXR1cm4gIkYyMiI7Cisg
ICAgICAgIGNhc2UgUXQ6OktleV9GMjM6CisgICAgICAgICAgICByZXR1cm4gIkYyMyI7CisgICAg
ICAgIGNhc2UgUXQ6OktleV9GMjQ6CisgICAgICAgICAgICByZXR1cm4gIkYyNCI7CisgICAgICAg
IGNhc2UgUXQ6OktleV9IZWxwOgorICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKKyAgICAgICAg
Y2FzZSBRdDo6S2V5X0hvbWU6CisgICAgICAgICAgICByZXR1cm4gIkhvbWUiOworICAgICAgICBj
YXNlIFF0OjpLZXlfSW5zZXJ0OgorICAgICAgICAgICAgcmV0dXJuICJJbnNlcnQiOworICAgICAg
ICBjYXNlIFF0OjpLZXlfTGVmdDoKKyAgICAgICAgICAgIHJldHVybiAiTGVmdCI7CisgICAgICAg
IGNhc2UgUXQ6OktleV9QYWdlRG93bjoKKyAgICAgICAgICAgIHJldHVybiAiUGFnZURvd24iOwor
ICAgICAgICBjYXNlIFF0OjpLZXlfUGFnZVVwOgorICAgICAgICAgICAgcmV0dXJuICJQYWdlVXAi
OworICAgICAgICBjYXNlIFF0OjpLZXlfUGF1c2U6CisgICAgICAgICAgICByZXR1cm4gIlBhdXNl
IjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1ByaW50OgorICAgICAgICAgICAgcmV0dXJuICJQcmlu
dFNjcmVlbiI7CisgICAgICAgIGNhc2UgUXQ6OktleV9SaWdodDoKKyAgICAgICAgICAgIHJldHVy
biAiUmlnaHQiOworICAgICAgICBjYXNlIFF0OjpLZXlfU2VsZWN0OgorICAgICAgICAgICAgcmV0
dXJuICJTZWxlY3QiOworICAgICAgICBjYXNlIFF0OjpLZXlfVXA6CisgICAgICAgICAgICByZXR1
cm4gIlVwIjsKKyAgICAgICAgICAgIC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwgYmVjb21lcyBV
KzAwMDA3Ri4KKyAgICAgICAgY2FzZSBRdDo6S2V5X0RlbGV0ZToKKyAgICAgICAgICAgIHJldHVy
biAiVSswMDAwN0YiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6c3ByaW50ZigiVSslMDZYIiwgdG91cHBlcihrZXlDb2RlKSk7CisgICAgfQorfQorCitzdGF0
aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleWNvZGUpCit7
CisgICAgc3dpdGNoIChrZXljb2RlKSB7CisgICAgICAgIC8qIEZJWE1FOiBOZWVkIHRvIHN1cHBs
eSBhIGJvb2wgaW4gdGhpcyBmdW5jLCB0byBkZXRlcm1pbmUgd2hldGVyIHRoZSBldmVudCBjb21l
cyBmcm9tIHRoZSBrZXlwYWQKKyAgICAgICAgY2FzZSBRdDo6S2V5XzA6CisgICAgICAgICAgICBy
ZXR1cm4gVktfTlVNUEFEMDsvLyAoNjApIE51bWVyaWMga2V5cGFkIDAga2V5CisgICAgICAgIGNh
c2UgUXQ6OktleV8xOgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1l
cmljIGtleXBhZCAxIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfMjoKKyAgICAgICAgICAgIHJl
dHVybiAgVktfTlVNUEFEMjsgLy8gKDYyKSBOdW1lcmljIGtleXBhZCAyIGtleQorICAgICAgICBj
YXNlIFF0OjpLZXlfMzoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQzOyAvLyAoNjMpIE51
bWVyaWMga2V5cGFkIDMga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV80OgorICAgICAgICAgICAg
cmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKKyAgICAgICAg
Y2FzZSBRdDo6S2V5XzU6CisgICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENTsgLy8oNjUpIE51
bWVyaWMga2V5cGFkIDUga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV82OgorICAgICAgICAgICAg
cmV0dXJuIFZLX05VTVBBRDY7IC8vICg2NikgTnVtZXJpYyBrZXlwYWQgNiBrZXkKKyAgICAgICAg
Y2FzZSBRdDo6S2V5Xzc6CisgICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBO
dW1lcmljIGtleXBhZCA3IGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfODoKKyAgICAgICAgICAg
IHJldHVybiBWS19OVU1QQUQ4OyAvLyAoNjgpIE51bWVyaWMga2V5cGFkIDgga2V5CisgICAgICAg
IGNhc2UgUXQ6OktleV85OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDk7IC8vICg2OSkg
TnVtZXJpYyBrZXlwYWQgOSBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X0FzdGVyaXNrOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQorICAgICAg
ICBjYXNlIFF0OjpLZXlfUGx1czoKKyAgICAgICAgICAgIHJldHVybiBWS19BREQ7IC8vICg2Qikg
QWRkIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfTWludXM6CisgICAgICAgICAgICByZXR1cm4g
VktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9Q
ZXJpb2Q6CisgICAgICAgICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtl
eQorICAgICAgICBjYXNlIFF0OjpLZXlfU2xhc2g6CisgICAgICAgICAgICByZXR1cm4gVktfRElW
SURFOyAvLyAoNkYpIERpdmlkZSBrZXkKKworICAgICAgICAqLworICAgICAgICBjYXNlIFF0OjpL
ZXlfQmFja1NwYWNlOgorICAgICAgICAgICAgcmV0dXJuIFZLX0JBQ0s7IC8vICgwOCkgQkFDS1NQ
QUNFIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfVGFiOgorICAgICAgICAgICAgcmV0dXJuIFZL
X1RBQjsgLy8gKDA5KSBUQUIga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9DbGVhcjoKKyAgICAg
ICAgICAgIHJldHVybiBWS19DTEVBUjsgLy8gKDBDKSBDTEVBUiBrZXkKKyAgICAgICAgY2FzZSBR
dDo6S2V5X1JldHVybjoKKyAgICAgICAgICAgIHJldHVybiBWS19SRVRVUk47IC8vKDBEKSBSZXR1
cm4ga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9TaGlmdDoKKyAgICAgICAgICAgIHJldHVybiBW
S19TSElGVDsgLy8gKDEwKSBTSElGVCBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X0NvbnRyb2w6
CisgICAgICAgICAgICByZXR1cm4gVktfQ09OVFJPTDsgLy8gKDExKSBDVFJMIGtleQorICAgICAg
ICBjYXNlIFF0OjpLZXlfTWVudToKKyAgICAgICAgY2FzZSBRdDo6S2V5X0FsdDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19NRU5VOyAvLyAoMTIpIEFMVCBrZXkKKworICAgICAgICBjYXNlIFF0OjpL
ZXlfUGF1c2U6CisgICAgICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5
CisgICAgICAgIGNhc2UgUXQ6OktleV9DYXBzTG9jazoKKyAgICAgICAgICAgIHJldHVybiBWS19D
QVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X0thbmFf
TG9jazoKKyAgICAgICAgY2FzZSBRdDo6S2V5X0thbmFfU2hpZnQ6CisgICAgICAgICAgICByZXR1
cm4gVktfS0FOQTsgLy8gKDE1KSBJbnB1dCBNZXRob2QgRWRpdG9yIChJTUUpIEthbmEgbW9kZQor
ICAgICAgICBjYXNlIFF0OjpLZXlfSGFuZ3VsOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkdV
TDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCisgICAgICAgICAgICAvLyBWS19K
VU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCisgICAgICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElN
RSBmaW5hbCBtb2RlCisgICAgICAgIGNhc2UgUXQ6OktleV9IYW5ndWxfSGFuamE6CisgICAgICAg
ICAgICByZXR1cm4gVktfSEFOSkE7IC8vICgxOSkgSU1FIEhhbmphIG1vZGUKKyAgICAgICAgY2Fz
ZSBRdDo6S2V5X0thbmppOgorICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkpJOyAvLyAoMTkpIElN
RSBLYW5qaSBtb2RlCisgICAgICAgIGNhc2UgUXQ6OktleV9Fc2NhcGU6CisgICAgICAgICAgICBy
ZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkKKyAgICAgICAgICAgIC8vIFZLX0NPTlZF
UlQgKDFDKSBJTUUgY29udmVydAorICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElN
RSBub25jb252ZXJ0CisgICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0Cisg
ICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QK
KyAgICAgICAgY2FzZSBRdDo6S2V5X1NwYWNlOgorICAgICAgICAgICAgcmV0dXJuIFZLX1NQQUNF
OyAvLyAoMjApIFNQQUNFQkFSCisgICAgICAgIGNhc2UgUXQ6OktleV9QYWdlVXA6CisgICAgICAg
ICAgICByZXR1cm4gVktfUFJJT1I7IC8vICgyMSkgUEFHRSBVUCBrZXkKKyAgICAgICAgY2FzZSBR
dDo6S2V5X1BhZ2VEb3duOgorICAgICAgICAgICAgcmV0dXJuIFZLX05FWFQ7IC8vICgyMikgUEFH
RSBET1dOIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfRW5kOgorICAgICAgICAgICAgcmV0dXJu
IFZLX0VORDsgLy8gKDIzKSBFTkQga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9Ib21lOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKKyAgICAgICAgY2FzZSBR
dDo6S2V5X0xlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfTEVGVDsgLy8gKDI1KSBMRUZUIEFS
Uk9XIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfVXA6CisgICAgICAgICAgICByZXR1cm4gVktf
VVA7IC8vICgyNikgVVAgQVJST1cga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9SaWdodDoKKyAg
ICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICAg
ICAgY2FzZSBRdDo6S2V5X0Rvd246CisgICAgICAgICAgICByZXR1cm4gVktfRE9XTjsgLy8gKDI4
KSBET1dOIEFSUk9XIGtleQorICAgICAgICBjYXNlIFF0OjpLZXlfU2VsZWN0OgorICAgICAgICAg
ICAgcmV0dXJuIFZLX1NFTEVDVDsgLy8gKDI5KSBTRUxFQ1Qga2V5CisgICAgICAgIGNhc2UgUXQ6
OktleV9QcmludDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUklOVDsgLy8gKDJBKSBQUklOVCBr
ZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X0V4ZWN1dGU6CisgICAgICAgICAgICByZXR1cm4gVktf
RVhFQ1VURTsvLyAoMkIpIEVYRUNVVEUga2V5CisgICAgICAgICAgICAvL2R1bm5vIG9uIHRoaXMK
KyAgICAgICAgICAgIC8vY2FzZSBRdDo6S2V5X1ByaW50U2NyZWVuOgorICAgICAgICAgICAgLy8g
ICAgICByZXR1cm4gVktfU05BUFNIT1Q7IC8vICgyQykgUFJJTlQgU0NSRUVOIGtleQorICAgICAg
ICBjYXNlIFF0OjpLZXlfSW5zZXJ0OgorICAgICAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8g
KDJEKSBJTlMga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9EZWxldGU6CisgICAgICAgICAgICBy
ZXR1cm4gVktfREVMRVRFOyAvLyAoMkUpIERFTCBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X0hl
bHA6CisgICAgICAgICAgICByZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQorICAgICAg
ICBjYXNlIFF0OjpLZXlfMDoKKyAgICAgICAgY2FzZSBRdDo6S2V5X1BhcmVuTGVmdDoKKyAgICAg
ICAgICAgIHJldHVybiBWS18wOyAgICAvLyAgKDMwKSAwKSBrZXkKKyAgICAgICAgY2FzZSBRdDo6
S2V5XzE6CisgICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQorICAgICAg
ICBjYXNlIFF0OjpLZXlfMjoKKyAgICAgICAgY2FzZSBRdDo6S2V5X0F0OgorICAgICAgICAgICAg
cmV0dXJuIFZLXzI7IC8vICAoMzIpIDIgJiBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5XzM6Cisg
ICAgICAgIGNhc2UgUXQ6OktleV9OdW1iZXJTaWduOgorICAgICAgICAgICAgcmV0dXJuIFZLXzM7
IC8vY2FzZSAnMyc6IGNhc2UgJyMnOworICAgICAgICBjYXNlIFF0OjpLZXlfNDoKKyAgICAgICAg
Y2FzZSBRdDo6S2V5X0RvbGxhcjogLy8gICgzNCkgNCBrZXkgJyQnOworICAgICAgICAgICAgcmV0
dXJuIFZLXzQ7CisgICAgICAgIGNhc2UgUXQ6OktleV81OgorICAgICAgICBjYXNlIFF0OjpLZXlf
UGVyY2VudDoKKyAgICAgICAgICAgIHJldHVybiBWS181OyAvLyAgKDM1KSA1IGtleSAgJyUnCisg
ICAgICAgIGNhc2UgUXQ6OktleV82OgorICAgICAgICBjYXNlIFF0OjpLZXlfQXNjaWlDaXJjdW06
CisgICAgICAgICAgICByZXR1cm4gVktfNjsgLy8gICgzNikgNiBrZXkgICdeJworICAgICAgICBj
YXNlIFF0OjpLZXlfNzoKKyAgICAgICAgY2FzZSBRdDo6S2V5X0FtcGVyc2FuZDoKKyAgICAgICAg
ICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKKyAgICAgICAgY2FzZSBR
dDo6S2V5Xzg6CisgICAgICAgIGNhc2UgUXQ6OktleV9Bc3RlcmlzazoKKyAgICAgICAgICAgIHJl
dHVybiBWS184OyAvLyAgKDM4KSA4IGtleSAgJyonCisgICAgICAgIGNhc2UgUXQ6OktleV85Ogor
ICAgICAgICBjYXNlIFF0OjpLZXlfUGFyZW5SaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS185
OyAvLyAgKDM5KSA5IGtleSAnKCcKKyAgICAgICAgY2FzZSBRdDo6S2V5X0E6CisgICAgICAgICAg
ICByZXR1cm4gVktfQTsgLy8gICg0MSkgQSBrZXkgY2FzZSAnYSc6IGNhc2UgJ0EnOiByZXR1cm4g
MHg0MTsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0I6CisgICAgICAgICAgICByZXR1cm4gVktfQjsg
Ly8gICg0MikgQiBrZXkgY2FzZSAnYic6IGNhc2UgJ0InOiByZXR1cm4gMHg0MjsKKyAgICAgICAg
Y2FzZSBRdDo6S2V5X0M6CisgICAgICAgICAgICByZXR1cm4gVktfQzsgLy8gICg0MykgQyBrZXkg
Y2FzZSAnYyc6IGNhc2UgJ0MnOiByZXR1cm4gMHg0MzsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0Q6
CisgICAgICAgICAgICByZXR1cm4gVktfRDsgLy8gICg0NCkgRCBrZXkgY2FzZSAnZCc6IGNhc2Ug
J0QnOiByZXR1cm4gMHg0NDsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0U6CisgICAgICAgICAgICBy
ZXR1cm4gVktfRTsgLy8gICg0NSkgRSBrZXkgY2FzZSAnZSc6IGNhc2UgJ0UnOiByZXR1cm4gMHg0
NTsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0Y6CisgICAgICAgICAgICByZXR1cm4gVktfRjsgLy8g
ICg0NikgRiBrZXkgY2FzZSAnZic6IGNhc2UgJ0YnOiByZXR1cm4gMHg0NjsKKyAgICAgICAgY2Fz
ZSBRdDo6S2V5X0c6CisgICAgICAgICAgICByZXR1cm4gVktfRzsgLy8gICg0NykgRyBrZXkgY2Fz
ZSAnZyc6IGNhc2UgJ0cnOiByZXR1cm4gMHg0NzsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0g6Cisg
ICAgICAgICAgICByZXR1cm4gVktfSDsgLy8gICg0OCkgSCBrZXkgY2FzZSAnaCc6IGNhc2UgJ0gn
OiByZXR1cm4gMHg0ODsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0k6CisgICAgICAgICAgICByZXR1
cm4gVktfSTsgLy8gICg0OSkgSSBrZXkgY2FzZSAnaSc6IGNhc2UgJ0knOiByZXR1cm4gMHg0OTsK
KyAgICAgICAgY2FzZSBRdDo6S2V5X0o6CisgICAgICAgICAgICByZXR1cm4gVktfSjsgLy8gICg0
QSkgSiBrZXkgY2FzZSAnaic6IGNhc2UgJ0onOiByZXR1cm4gMHg0QTsKKyAgICAgICAgY2FzZSBR
dDo6S2V5X0s6CisgICAgICAgICAgICByZXR1cm4gVktfSzsgLy8gICg0QikgSyBrZXkgY2FzZSAn
ayc6IGNhc2UgJ0snOiByZXR1cm4gMHg0QjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X0w6CisgICAg
ICAgICAgICByZXR1cm4gVktfTDsgLy8gICg0QykgTCBrZXkgY2FzZSAnbCc6IGNhc2UgJ0wnOiBy
ZXR1cm4gMHg0QzsKKyAgICAgICAgY2FzZSBRdDo6S2V5X006CisgICAgICAgICAgICByZXR1cm4g
VktfTTsgLy8gICg0RCkgTSBrZXkgY2FzZSAnbSc6IGNhc2UgJ00nOiByZXR1cm4gMHg0RDsKKyAg
ICAgICAgY2FzZSBRdDo6S2V5X046CisgICAgICAgICAgICByZXR1cm4gVktfTjsgLy8gICg0RSkg
TiBrZXkgY2FzZSAnbic6IGNhc2UgJ04nOiByZXR1cm4gMHg0RTsKKyAgICAgICAgY2FzZSBRdDo6
S2V5X086CisgICAgICAgICAgICByZXR1cm4gVktfTzsgLy8gICg0RikgTyBrZXkgY2FzZSAnbyc6
IGNhc2UgJ08nOiByZXR1cm4gMHg0RjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1A6CisgICAgICAg
ICAgICByZXR1cm4gVktfUDsgLy8gICg1MCkgUCBrZXkgY2FzZSAncCc6IGNhc2UgJ1AnOiByZXR1
cm4gMHg1MDsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1E6CisgICAgICAgICAgICByZXR1cm4gVktf
UTsgLy8gICg1MSkgUSBrZXkgY2FzZSAncSc6IGNhc2UgJ1EnOiByZXR1cm4gMHg1MTsKKyAgICAg
ICAgY2FzZSBRdDo6S2V5X1I6CisgICAgICAgICAgICByZXR1cm4gVktfUjsgLy8gICg1MikgUiBr
ZXkgY2FzZSAncic6IGNhc2UgJ1InOiByZXR1cm4gMHg1MjsKKyAgICAgICAgY2FzZSBRdDo6S2V5
X1M6CisgICAgICAgICAgICByZXR1cm4gVktfUzsgLy8gICg1MykgUyBrZXkgY2FzZSAncyc6IGNh
c2UgJ1MnOiByZXR1cm4gMHg1MzsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1Q6CisgICAgICAgICAg
ICByZXR1cm4gVktfVDsgLy8gICg1NCkgVCBrZXkgY2FzZSAndCc6IGNhc2UgJ1QnOiByZXR1cm4g
MHg1NDsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1U6CisgICAgICAgICAgICByZXR1cm4gVktfVTsg
Ly8gICg1NSkgVSBrZXkgY2FzZSAndSc6IGNhc2UgJ1UnOiByZXR1cm4gMHg1NTsKKyAgICAgICAg
Y2FzZSBRdDo6S2V5X1Y6CisgICAgICAgICAgICByZXR1cm4gVktfVjsgLy8gICg1NikgViBrZXkg
Y2FzZSAndic6IGNhc2UgJ1YnOiByZXR1cm4gMHg1NjsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1c6
CisgICAgICAgICAgICByZXR1cm4gVktfVzsgLy8gICg1NykgVyBrZXkgY2FzZSAndyc6IGNhc2Ug
J1cnOiByZXR1cm4gMHg1NzsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1g6CisgICAgICAgICAgICBy
ZXR1cm4gVktfWDsgLy8gICg1OCkgWCBrZXkgY2FzZSAneCc6IGNhc2UgJ1gnOiByZXR1cm4gMHg1
ODsKKyAgICAgICAgY2FzZSBRdDo6S2V5X1k6CisgICAgICAgICAgICByZXR1cm4gVktfWTsgLy8g
ICg1OSkgWSBrZXkgY2FzZSAneSc6IGNhc2UgJ1knOiByZXR1cm4gMHg1OTsKKyAgICAgICAgY2Fz
ZSBRdDo6S2V5X1o6CisgICAgICAgICAgICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBrZXkgY2Fz
ZSAneic6IGNhc2UgJ1onOiByZXR1cm4gMHg1QTsKKyAgICAgICAgY2FzZSBRdDo6S2V5X01ldGE6
CisgICAgICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5IChN
aWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKKyAgICAgICAgLy9jYXNlIFF0OjpLZXlfTWV0YV9S
OiBUT0RPOiBXaGF0IHRvIGRvIGhlcmU/CisgICAgICAgIC8vICAgIHJldHVybiBWS19SV0lOOyAv
LyAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgICAgICAgICAg
Ly8gVktfQVBQUyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAg
ICAgICAgICAvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorICAgICAgICAgICAg
Ly8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQorICAgICAgICAgICAgLy8gVktfU1VC
VFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBE
ZWNpbWFsIGtleQorICAgICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQorICAg
ICAgICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBhYm92ZQorCisgICAgICAgIGNhc2UgUXQ6
OktleV9OdW1Mb2NrOgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVN
IExPQ0sga2V5CisKKyAgICAgICAgY2FzZSBRdDo6S2V5X1Njcm9sbExvY2s6CisgICAgICAgICAg
ICByZXR1cm4gVktfU0NST0xMOyAvLyAoOTEpIFNDUk9MTCBMT0NLIGtleQorCisgICAgICAgICAg
ICAvLyBWS19MU0hJRlQgKEEwKSBMZWZ0IFNISUZUIGtleQorICAgICAgICAgICAgLy8gVktfUlNI
SUZUIChBMSkgUmlnaHQgU0hJRlQga2V5CisgICAgICAgICAgICAvLyBWS19MQ09OVFJPTCAoQTIp
IExlZnQgQ09OVFJPTCBrZXkKKyAgICAgICAgICAgIC8vIFZLX1JDT05UUk9MIChBMykgUmlnaHQg
Q09OVFJPTCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQor
ICAgICAgICAgICAgLy8gVktfUk1FTlUgKEE1KSBSaWdodCBNRU5VIGtleQorICAgICAgICAgICAg
Ly8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5
CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0ZPUldBUkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgRm9yd2FyZCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfUkVGUkVTSCAo
QTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZyZXNoIGtleQorICAgICAgICAgICAgLy8g
VktfQlJPV1NFUl9TVE9QIChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5Cisg
ICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBTZWFyY2gga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0ZBVk9SSVRFUyAoQUIp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMga2V5CisgICAgICAgICAgICAvLyBW
S19CUk9XU0VSX0hPTUUgKEFDKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhv
bWUga2V5CisgICAgICAgICAgICAvLyBWS19WT0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9Y
UDogVm9sdW1lIE11dGUga2V5CisgICAgICAgICAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdp
bmRvd3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5CisgICAgICAgICAgICAvLyBWS19WT0xVTUVf
VVAgKEFGKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBVcCBrZXkKKyAgICAgICAgICAgIC8vIFZL
X01FRElBX05FWFRfVFJBQ0sgKEIwKSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5Cisg
ICAgICAgICAgICAvLyBWS19NRURJQV9QUkVWX1RSQUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQ
cmV2aW91cyBUcmFjayBrZXkKKyAgICAgICAgICAgIC8vIFZLX01FRElBX1NUT1AgKEIyKSBXaW5k
b3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5CisgICAgICAgICAgICAvLyBWS19NRURJQV9QTEFZ
X1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQbGF5L1BhdXNlIE1lZGlhIGtleQorICAgICAg
ICAgICAgLy8gVktfTEFVTkNIX01BSUwgKEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwg
a2V5CisgICAgICAgICAgICAvLyBWS19MQVVOQ0hfTUVESUFfU0VMRUNUIChCNSkgV2luZG93cyAy
MDAwL1hQOiBTZWxlY3QgTWVkaWEga2V5CisgICAgICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMSAo
QjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkKKyAgICAgICAgICAg
IC8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlv
biAyIGtleQorCisgICAgICAgICAgICAvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxh
bmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9Y
UDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5CisgICAgICAgIGNh
c2UgUXQ6OktleV9TZW1pY29sb246CisgICAgICAgIGNhc2UgUXQ6OktleV9Db2xvbjoKKyAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fMTsgLy9jYXNlICc7JzogY2FzZSAnOic6IHJldHVybiAweEJB
OworICAgICAgICAgICAgLy8gVktfT0VNX1BMVVMgKEJCKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBh
bnkgY291bnRyeS9yZWdpb24sIHRoZSAnKycga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9QbHVz
OgorICAgICAgICBjYXNlIFF0OjpLZXlfRXF1YWw6CisgICAgICAgICAgICByZXR1cm4gVktfT0VN
X1BMVVM7IC8vY2FzZSAnPSc6IGNhc2UgJysnOiByZXR1cm4gMHhCQjsKKyAgICAgICAgICAgIC8v
IFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lv
biwgdGhlICcsJyBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X0NvbW1hOgorICAgICAgICBjYXNl
IFF0OjpLZXlfTGVzczoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fQ09NTUE7IC8vY2FzZSAn
LCc6IGNhc2UgJzwnOiByZXR1cm4gMHhCQzsKKyAgICAgICAgICAgIC8vIFZLX09FTV9NSU5VUyAo
QkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkK
KyAgICAgICAgY2FzZSBRdDo6S2V5X01pbnVzOgorICAgICAgICBjYXNlIFF0OjpLZXlfVW5kZXJz
Y29yZToKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fTUlOVVM7IC8vY2FzZSAnLSc6IGNhc2Ug
J18nOiByZXR1cm4gMHhCRDsKKyAgICAgICAgICAgIC8vIFZLX09FTV9QRVJJT0QgKEJFKSBXaW5k
b3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLicga2V5CisgICAgICAg
IGNhc2UgUXQ6OktleV9QZXJpb2Q6CisgICAgICAgIGNhc2UgUXQ6OktleV9HcmVhdGVyOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX09FTV9QRVJJT0Q7IC8vY2FzZSAnLic6IGNhc2UgJz4nOiByZXR1
cm4gMHhCRTsKKyAgICAgICAgICAgIC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKKyAgICAgICAgY2Fz
ZSBRdDo6S2V5X1NsYXNoOgorICAgICAgICBjYXNlIFF0OjpLZXlfUXVlc3Rpb246CisgICAgICAg
ICAgICByZXR1cm4gVktfT0VNXzI7IC8vY2FzZSAnLyc6IGNhc2UgJz8nOiByZXR1cm4gMHhCRjsK
KyAgICAgICAgICAgIC8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFy
YWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhl
IFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5
X0FzY2lpVGlsZGU6CisgICAgICAgIGNhc2UgUXQ6OktleV9RdW90ZUxlZnQ6CisgICAgICAgICAg
ICByZXR1cm4gVktfT0VNXzM7IC8vY2FzZSAnYCc6IGNhc2UgJ34nOiByZXR1cm4gMHhDMDsKKyAg
ICAgICAgICAgIC8vIFZLX09FTV80IChEQikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0
ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVT
IHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1t7JyBrZXkKKyAgICAgICAgY2FzZSBRdDo6S2V5X0Jy
YWNrZXRMZWZ0OgorICAgICAgICBjYXNlIFF0OjpLZXlfQnJhY2VMZWZ0OgorICAgICAgICAgICAg
cmV0dXJuIFZLX09FTV80OyAvL2Nhc2UgJ1snOiBjYXNlICd7JzogcmV0dXJuIDB4REI7CisgICAg
ICAgICAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVy
czsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBz
dGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9CYWNr
c2xhc2g6CisgICAgICAgIGNhc2UgUXQ6OktleV9CYXI6CisgICAgICAgICAgICByZXR1cm4gVktf
T0VNXzU7IC8vY2FzZSAnXFwnOiBjYXNlICd8JzogcmV0dXJuIDB4REM7CisgICAgICAgICAgICAv
LyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2Fu
IHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBr
ZXlib2FyZCwgdGhlICddfScga2V5CisgICAgICAgIGNhc2UgUXQ6OktleV9CcmFja2V0UmlnaHQ6
CisgICAgICAgIGNhc2UgUXQ6OktleV9CcmFjZVJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZL
X09FTV82OyAvLyBjYXNlICddJzogY2FzZSAnfSc6IHJldHVybiAweEREOworICAgICAgICAgICAg
Ly8gVktfT0VNXzcgKERFKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNh
biB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQg
a2V5Ym9hcmQsIHRoZSAnc2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5CisgICAgICAgIGNh
c2UgUXQ6OktleV9RdW90ZURibDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNzsgLy8gY2Fz
ZSAnXCcnOiBjYXNlICciJzogcmV0dXJuIDB4REU7CisgICAgICAgICAgICAvLyBWS19PRU1fOCAo
REYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5
Ym9hcmQuCisgICAgICAgICAgICAvLyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBF
aXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBS
VCAxMDIta2V5IGtleWJvYXJkCisgICAgICAgICAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkgV2lu
ZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NF
U1Mga2V5CisgICAgICAgICAgICAvLyBWS19QQUNLRVQgKEU3KSBXaW5kb3dzIDIwMDAvWFA6IFVz
ZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMgaWYgdGhleSB3ZXJlIGtleXN0cm9rZXMu
IFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29yZCBvZiBhIDMyLWJpdCBWaXJ0dWFsIEtl
eSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5wdXQgbWV0aG9kcy4gRm9yIG1vcmUgaW5m
b3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBVVCxTZW5kSW5wdXQsIFdNX0tFWURPV04s
IGFuZCBXTV9LRVlVUAorICAgICAgICAgICAgLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5CisgICAg
ICAgICAgICAvLyBWS19DUlNFTCAoRjcpIENyU2VsIGtleQorICAgICAgICAgICAgLy8gVktfRVhT
RUwgKEY4KSBFeFNlbCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0VSRU9GIChGOSkgRXJhc2UgRU9G
IGtleQorICAgICAgICAgICAgLy8gVktfUExBWSAoRkEpIFBsYXkga2V5CisgICAgICAgICAgICAv
LyBWS19aT09NIChGQikgWm9vbSBrZXkKKyAgICAgICAgICAgIC8vIFZLX05PTkFNRSAoRkMpIFJl
c2VydmVkIGZvciBmdXR1cmUgdXNlCisgICAgICAgICAgICAvLyBWS19QQTEgKEZEKSBQQTEga2V5
CisgICAgICAgICAgICAvLyBWS19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworfQorCitQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChRS2V5RXZlbnQqIGV2ZW50LCBib29sIGlz
S2V5VXApCit7CisgICAgbV90ZXh0ID0gZnJvbVFTdHJpbmcoZXZlbnQtPnRleHQoKSk7CisgICAg
bV91bm1vZGlmaWVkVGV4dCA9IGZyb21RU3RyaW5nKGV2ZW50LT50ZXh0KCkpOyAvLyBUT0RPOiBu
b3QgY29ycmVjdAorICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JRdEtleUNv
ZGUoZXZlbnQtPmtleSgpKTsKKyAgICBtX2lzS2V5VXAgPSBpc0tleVVwOworICAgIG1fYXV0b1Jl
cGVhdCA9IGV2ZW50LT5pc0F1dG9SZXBlYXQoKTsKKyAgICBtX1dpbmRvd3NLZXlDb2RlID0gd2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5KCkpOworICAgIG1faXNLZXlwYWQgPSAo
ZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6OktleXBhZE1vZGlmaWVyKSAhPSAwOworICAgIG1fc2hp
ZnRLZXkgPSAoZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6OlNoaWZ0TW9kaWZpZXIpICE9IDA7Cisg
ICAgbV9jdHJsS2V5ID0gKGV2ZW50LT5tb2RpZmllcnMoKSAmIFF0OjpDb250cm9sTW9kaWZpZXIp
ICE9IDA7CisgICAgbV9hbHRLZXkgPSAoZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6OkFsdE1vZGlm
aWVyKSAhPSAwOworICAgIG1fbWV0YUtleSA9IChldmVudC0+bW9kaWZpZXJzKCkgJiBRdDo6TWV0
YU1vZGlmaWVyKSAhPSAwOyAgICAKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogcXQvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvUmVzb3VyY2VM
b2FkZXJNYW5hZ2VyLmgJKFJldmlzaW9uIDApCisrKyBxdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIu
aAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUxvYWRlck1hbmFnZXJfSF8K
KyNkZWZpbmUgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyX0hfCisKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNp
bmNsdWRlIDxjdXJsL2N1cmwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNv
dXJjZUxvYWRlck1hbmFnZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRlck1h
bmFnZXIqIGdldCgpOworICAgIHZvaWQgYWRkKFJlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBj
YW5jZWwoUmVzb3VyY2VMb2FkZXIqKTsKKworICAgIC8vIElmIHRydWUsIGRvbid0IG11bHRpcGxl
eCBkb3dubG9hZHM6IGRvd25sb2FkIGNvbXBsZXRlbHkgb25lIGF0IGEgdGltZS4KKyAgICB2b2lk
IHVzZVNpbXBsZVRyYW5zZmVyKGJvb2wgdXNlU2ltcGxlKTsKKworcHJpdmF0ZToKKyAgICBSZXNv
dXJjZUxvYWRlck1hbmFnZXIoKTsKKyAgICB2b2lkIGRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1l
cjxSZXNvdXJjZUxvYWRlck1hbmFnZXI+Kik7CisgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2Fk
ZXIqKTsKKworICAgIGJvb2wgbV91c2VTaW1wbGU7CisgICAgSGFzaFNldDxSZXNvdXJjZUxvYWRl
cio+KiBqb2JzOworICAgIFRpbWVyPFJlc291cmNlTG9hZGVyTWFuYWdlcj4gbV9kb3dubG9hZFRp
bWVyOworICAgIENVUkxNKiBjdXJsTXVsdGlIYW5kbGU7IC8vIG5vdCBmcmVlZAorCisgICAgLy8g
Y3VybCBmaWxlaGFuZGxlcyB0byBwb2xsIHdpdGggc2VsZWN0CisgICAgZmRfc2V0IGZkcmVhZDsK
KyAgICBmZF9zZXQgZmR3cml0ZTsKKyAgICBmZF9zZXQgZmRleGNlcDsKKworICAgIGludCBtYXhm
ZDsKKyAgICBjaGFyIGVycm9yX2J1ZmZlcltDVVJMX0VSUk9SX1NJWkVdOworCisgICAgLy8gTlVM
TC10ZXJtaW5hdGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29scworICAgIGNvbnN0IGNoYXIq
IGNvbnN0KiBjdXJsX3Byb3RvY29sczsgLy8gbm90IGZyZWVkCit9OworCit9CisKKyNlbmRpZgor
CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBxdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShSZXZpc2lvbiAwKQorKysg
cXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFp
a29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVy
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZvbnQu
aCIKKyNpbmNsdWRlICJGaWxlQnV0dG9uLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNs
dWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJU
ZXh0RmllbGQuaCIKKyNpbmNsdWRlICJTbGlkZXIuaCIKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNp
bmNsdWRlICJsb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJLVVJM
LmgiCisjaW5jbHVkZSAiU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIu
aCIKKyNpbmNsdWRlICJKYXZhQXBwbGV0V2lkZ2V0LmgiCisjaW5jbHVkZSAiU2Nyb2xsQmFyLmgi
CisjaW5jbHVkZSAiUGF0aC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIlNjcmVlbi5oIgorI2luY2x1ZGUgIkhpc3Rv
cnkuaCIKKyNpbmNsdWRlICJMYW5ndWFnZS5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3Mu
aCIKKyNpbmNsdWRlICJQbHVnSW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgorI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCisjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2RlZmluZSBub3RJbXBsZW1lbnRlZCgp
IGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBMRU1FTlRFRDogJXM6JWRcbiIsIF9f
RklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKKworSmF2YUFwcGxldFdpZGdldDo6SmF2YUFw
cGxldFdpZGdldChJbnRTaXplIGNvbnN0JiwgRWxlbWVudCosIFdURjo6SGFzaE1hcDxTdHJpbmcs
IFN0cmluZz4gY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKworRmxvYXRSZWN0IEZvbnQ6
OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0
eWxlJiwgY29uc3QgSW50UG9pbnQmLCBpbnQpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIEZsb2F0UmVjdCgpOyB9CitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgaW50LCBib29sKSBjb25zdCB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CisKKwordm9pZCBXZWJDb3JlOjpyZWZyZXNo
UGx1Z2lucyhib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKworQ29sb3IgV2ViQ29yZTo6Zm9j
dXNSaW5nQ29sb3IoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAweEZGMDAwMEZGOyB9CisK
K3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBUaWxlUnVsZSwgVGlsZVJ1bGUsIENvbXBvc2l0ZU9wZXJhdG9y
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKworbmFtZXNwYWNlIFdlYkNvcmUgeyAgICAKKwordm9p
ZCBUZXh0RmllbGQ6OnNlbGVjdEFsbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBUZXh0
RmllbGQ6OmFkZFNlYXJjaFJlc3VsdCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQoraW50IFRleHRG
aWVsZDo6c2VsZWN0aW9uU3RhcnQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAw
OyB9Citib29sIFRleHRGaWVsZDo6aGFzU2VsZWN0ZWRUZXh0KCkgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMDsgfQorU3RyaW5nIFRleHRGaWVsZDo6c2VsZWN0ZWRUZXh0KCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KK3ZvaWQgVGV4dEZpZWxk
OjpzZXRBdXRvU2F2ZU5hbWUoU3RyaW5nIGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Citi
b29sIFRleHRGaWVsZDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0IHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0U2VsZWN0aW9u
KGludCxpbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBUZXh0RmllbGQ6OnNldE1heFJl
c3VsdHMoaW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2Jvb2wgVGV4dEZpZWxkOjplZGl0ZWQo
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CitXaWRnZXQ6OkZvY3VzUG9s
aWN5IFRleHRGaWVsZDo6Zm9jdXNQb2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiBOb0ZvY3VzOyB9CitUZXh0RmllbGQ6OlRleHRGaWVsZChUZXh0RmllbGQ6OlR5cGUpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQorVGV4dEZpZWxkOjp+VGV4dEZpZWxkKCkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0Rm9udChXZWJDb3JlOjpGb250IGNvbnN0Jikg
eyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0QWxpZ25tZW50KEhvcml6
b250YWxBbGlnbm1lbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBUZXh0RmllbGQ6OnNl
dFdyaXRpbmdEaXJlY3Rpb24oVGV4dERpcmVjdGlvbikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Citp
bnQgVGV4dEZpZWxkOjptYXhMZW5ndGgoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biAwOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0TWF4TGVuZ3RoKGludCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9CitTdHJpbmcgVGV4dEZpZWxkOjp0ZXh0KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gU3RyaW5nKCk7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRUZXh0KFN0cmluZyBjb25z
dCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQoraW50IFRleHRGaWVsZDo6Y3Vyc29yUG9zaXRpb24o
KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Cit2b2lkIFRleHRGaWVsZDo6
c2V0Q3Vyc29yUG9zaXRpb24oaW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgVGV4dEZp
ZWxkOjpzZXRFZGl0ZWQoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyAgfQordm9pZCBUZXh0Rmll
bGQ6OnNldFJlYWRPbmx5KGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBUZXh0Rmll
bGQ6OnNldFBsYWNlaG9sZGVyU3RyaW5nKFN0cmluZyBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQo
KTsgIH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRDb2xvcnMoQ29sb3IgY29uc3QmLENvbG9yIGNvbnN0
JikgeyBub3RJbXBsZW1lbnRlZCgpOyAgfQorSW50U2l6ZSBUZXh0RmllbGQ6OnNpemVGb3JDaGFy
YWN0ZXJXaWR0aChpbnQpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUo
KTsgfQoraW50IFRleHRGaWVsZDo6YmFzZWxpbmVQb3NpdGlvbihpbnQpIGNvbnN0IHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRMaXZlU2VhcmNoKGJv
b2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCitTbGlkZXI6OlNsaWRlcigpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgfQorSW50U2l6ZSBTbGlkZXI6OnNpemVIaW50KCkgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gSW50U2l6ZSgpOyB9CitTbGlkZXI6On5TbGlkZXIoKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KK3ZvaWQgU2xpZGVyOjpzZXRWYWx1ZShkb3VibGUpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQordm9pZCBTbGlkZXI6OnNldE1heFZhbHVlKGRvdWJsZSkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9Cit2b2lkIFNsaWRlcjo6c2V0TWluVmFsdWUoZG91YmxlKSB7IG5vdEltcGxlbWVudGVk
KCk7IH0KK3ZvaWQgU2xpZGVyOjpzZXRGb250KFdlYkNvcmU6OkZvbnQgY29uc3QmKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KK2RvdWJsZSBTbGlkZXI6OnZhbHVlKCkgY29uc3QgeyBub3RJbXBsZW1l
bnRlZCgpOyByZXR1cm4gMDsgfQorV2lkZ2V0OjpGb2N1c1BvbGljeSBTbGlkZXI6OmZvY3VzUG9s
aWN5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsgfQorCitTY3Jv
bGxCYXI6OlNjcm9sbEJhcihTY3JvbGxCYXJDbGllbnQgKiwgU2Nyb2xsQmFyT3JpZW50YXRpb24p
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBTY3JvbGxCYXI6OnNldFN0ZXBzKGludCwgaW50
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2Jvb2wgU2Nyb2xsQmFyOjpzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIDA7IH0KK2Jvb2wgU2Nyb2xsQmFyOjpzZXRWYWx1ZShpbnQpIHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KK3ZvaWQgU2Nyb2xsQmFyOjpzZXRLbm9iUHJvcG9ydGlvbihpbnQsIGlu
dCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK1BsYXRmb3JtU2Nyb2xsQmFyOjpQbGF0Zm9ybVNj
cm9sbEJhcihTY3JvbGxCYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsQmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIDogU2Nyb2xsQmFyKGNsaWVudCwgb3JpZW50YXRpb24pIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQorUGxhdGZvcm1TY3JvbGxCYXI6On5QbGF0Zm9ybVNjcm9sbEJhcigpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQoraW50IFBsYXRmb3JtU2Nyb2xsQmFyOjp3aWR0aCgpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2ludCBQbGF0Zm9ybVNjcm9sbEJhcjo6aGVpZ2h0
KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQordm9pZCBQbGF0Zm9ybVNj
cm9sbEJhcjo6c2V0RW5hYmxlZChib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgUGxh
dGZvcm1TY3JvbGxCYXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRh
bWFnZVJlY3QpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBQbGF0Zm9ybVNjcm9sbEJhcjo6
c2V0U2Nyb2xsQmFyVmFsdWUoaW50IHYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBQbGF0
Zm9ybVNjcm9sbEJhcjo6c2V0S25vYlByb3BvcnRpb24oaW50IHZpc2libGVTaXplLCBpbnQgdG90
YWxTaXplKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgUGxhdGZvcm1TY3JvbGxCYXI6OnNl
dFJlY3QoY29uc3QgSW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCitQbGF0Zm9ybU1v
dXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChjb25zdCBDdXJyZW50RXZlbnRUYWcmKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KKwordm9pZCBDaGVja0NhY2hlT2JqZWN0U3RhdHVzKERvY0xvYWRl
ciosIENhY2hlZFJlc291cmNlKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Citib29sIENoZWNrSWZS
ZWxvYWRpbmcoV2ViQ29yZTo6RG9jTG9hZGVyKikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
ZmFsc2U7IH0KK1ZlY3RvcjxjaGFyPiBTZXJ2ZVN5bmNocm9ub3VzUmVxdWVzdChMb2FkZXIqLCBE
b2NMb2FkZXIqLCBSZXNvdXJjZUxvYWRlciosIEtVUkwmLCBEZXByZWNhdGVkU3RyaW5nJikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPGNoYXI+KCk7IH0KK30KKworYm9vbCBXZWJD
b3JlOjpoaXN0b3J5Q29udGFpbnMoRGVwcmVjYXRlZFN0cmluZyBjb25zdCYpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CitTdHJpbmcgV2ViQ29yZTo6c3VibWl0QnV0dG9uRGVm
YXVsdExhYmVsKCkgeyByZXR1cm4gIlN1Ym1pdCI7IH0KK1N0cmluZyBXZWJDb3JlOjppbnB1dEVs
ZW1lbnRBbHRUZXh0KCkgeyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOyB9CitTdHJpbmcgV2Vi
Q29yZTo6cmVzZXRCdXR0b25EZWZhdWx0TGFiZWwoKSB7IHJldHVybiAiUmVzZXQiOyB9CitTdHJp
bmcgV2ViQ29yZTo6ZGVmYXVsdExhbmd1YWdlKCkgeyByZXR1cm4gImVuIjsgfQorCisKK2ludCBX
ZWJDb3JlOjpmaW5kTmV4dFNlbnRlbmNlRnJvbUluZGV4KFVDaGFyIGNvbnN0KiwgaW50LCBpbnQs
IGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQgV2ViQ29yZTo6Zmlu
ZFNlbnRlbmNlQm91bmRhcnkoVUNoYXIgY29uc3QqLCBpbnQsIGludCwgaW50KiwgaW50KikgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9CitpbnQgV2ViQ29yZTo6ZmluZE5leHRXb3JkRnJvbUluZGV4KFVD
aGFyIGNvbnN0KiwgaW50LCBpbnQsIGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7
IH0KK3ZvaWQgV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeShVQ2hhciBjb25zdCogc3RyLCBpbnQg
bGVuLCBpbnQgcG9zaXRpb24sIGludCogc3RhcnQsIGludCogZW5kKSB7KnN0YXJ0ID0gcG9zaXRp
b247ICplbmQgPSBwb3NpdGlvbjsgbm90SW1wbGVtZW50ZWQoKTsgfQorCit2b2lkIEZyYW1lOjpz
ZXROZWVkc1JlYXBwbHlTdHlsZXMoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKworaW50IFdlYkNv
cmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopIHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KK2Jvb2wgV2ViQ29yZTo6c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CisKK1N0cmluZyBXZWJDb3JlOjpzZWFy
Y2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24oKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJp
bmcoKTsgfQorCitLSlM6OlVTdHJpbmc6OlVTdHJpbmcoY29uc3QgUVN0cmluZyYgcykgeworICAg
ICp0aGlzID0gVVN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4ocy5kYXRhKCkp
LCBzLmxlbmd0aCgpKTsKK30KKwordm9pZCBXZWJDb3JlOjpzZXRGb2N1c1JpbmdDb2xvckNoYW5n
ZUZ1bmN0aW9uKHZvaWQgKCopKCkpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCit2b2lkIEZyYW1l
Vmlldzo6dXBkYXRlQm9yZGVyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK2Jvb2wgQVhPYmpl
Y3RDYWNoZTo6Z0FjY2Vzc2liaWxpdHlFbmFibGVkID0gZmFsc2U7CisKK1ZlY3RvcjxjaGFyPiBs
b2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QgY2hhciogKSB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiBWZWN0b3I8Y2hhcj4oKTsgfQorCitQbHVnaW5JbmZvKiBQbHVnSW5JbmZvU3RvcmU6OmNy
ZWF0ZVBsdWdpbkluZm9Gb3JQbHVnaW5BdEluZGV4KHVuc2lnbmVkKSB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiAwOyB9Cit1bnNpZ25lZCBQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KCkg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorYm9vbCBXZWJDb3JlOjpQbHVn
SW5JbmZvU3RvcmU6OnN1cHBvcnRzTUlNRVR5cGUoY29uc3QgV2ViQ29yZTo6U3RyaW5nJikgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KKworRmlsZUJ1dHRvbjo6RmlsZUJ1dHRv
bihGcmFtZSopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBGaWxlQnV0dG9uOjpjbGljayhi
b29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK0ludFNpemUgRmlsZUJ1dHRvbjo6c2l6ZUZvckNo
YXJhY3RlcldpZHRoKGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gSW50U2l6
ZSgpOyB9CitXaWRnZXQ6OkZvY3VzUG9saWN5IEZpbGVCdXR0b246OmZvY3VzUG9saWN5KCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsgfQorV2ViQ29yZTo6SW50UmVj
dCBGaWxlQnV0dG9uOjpmcmFtZUdlb21ldHJ5KCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gSW50UmVjdCgpOyB9Cit2b2lkIEZpbGVCdXR0b246OnNldEZpbGVuYW1lKERlcHJlY2F0
ZWRTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2ludCBGaWxlQnV0dG9uOjpi
YXNlbGluZVBvc2l0aW9uKGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsg
fQordm9pZCBGaWxlQnV0dG9uOjpzZXRGcmFtZUdlb21ldHJ5KFdlYkNvcmU6OkludFJlY3QgY29u
c3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgRmlsZUJ1dHRvbjo6c2V0RGlzYWJsZWQo
Ym9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
K0RlcHJlY2F0ZWRTdHJpbmdMaXN0IHN1cHBvcnRlZEtleVNpemVzKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZ0xpc3QoKTsgfQorRGVwcmVjYXRlZFN0cmluZyBz
aWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBj
b25zdCBEZXByZWNhdGVkU3RyaW5nICZjaGFsbGVuZ2VTdHJpbmcsIGNvbnN0IEtVUkwgJnVybCkg
eyByZXR1cm4gRGVwcmVjYXRlZFN0cmluZygpOyB9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQg
ZXQKSW5kZXg6IHF0L0N1cnNvclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9DdXJzb3JRdC5jcHAJ
KFJldmlzaW9uIDApCisrKyBxdC9DdXJzb3JRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQ2hhcmxlcyBTYW11ZWxzIDxjaGFybGVzQGtk
ZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgorCisjaW5jbHVkZSAiSGVscGVyUXQuaCIKKyNp
bmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1cnNvcjo6Q3Vyc29yKFBs
YXRmb3JtQ3Vyc29yIHApCisgICAgOiBtX2ltcGwocCkKK3sKK30KKworQ3Vyc29yOjpDdXJzb3Io
Y29uc3QgQ3Vyc29yJiBvdGhlcikKKyAgICA6IG1faW1wbChvdGhlci5tX2ltcGwpCit7Cit9CisK
K0N1cnNvcjo6fkN1cnNvcigpCit7Cit9CisKK0N1cnNvcjo6Q3Vyc29yKEltYWdlKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0
IEN1cnNvciYgb3RoZXIpCit7CisgICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIHJldHVy
biAqdGhpczsKK30KKworbmFtZXNwYWNlIHsKKworLy8gRklYTUU6IHN0YXRpYyBkZWxldGVyCitj
bGFzcyBDdXJzb3JzIHsKK3Byb3RlY3RlZDoKKyAgICBDdXJzb3JzKCkKKyAgICAgICAgOiBDcm9z
c0N1cnNvcihRQ3Vyc29yKFF0OjpDcm9zc0N1cnNvcikpCisgICAgICAgICwgTW92ZUN1cnNvcihR
Q3Vyc29yKFF0OjpTaXplQWxsQ3Vyc29yKSkKKyAgICAgICAgLCBQb2ludGluZ0hhbmRDdXJzb3Io
UUN1cnNvcihRdDo6UG9pbnRpbmdIYW5kQ3Vyc29yKSkKKyAgICAgICAgLCBJQmVhbUN1cnNvcihR
Q3Vyc29yKFF0OjpJQmVhbUN1cnNvcikpCisgICAgICAgICwgV2FpdEN1cnNvcihRQ3Vyc29yKFF0
OjpXYWl0Q3Vyc29yKSkKKyAgICAgICAgLCBXaGF0c1RoaXNDdXJzb3IoUUN1cnNvcihRdDo6V2hh
dHNUaGlzQ3Vyc29yKSkKKyAgICAgICAgLCBTaXplSG9yQ3Vyc29yKFFDdXJzb3IoUXQ6OlNpemVI
b3JDdXJzb3IpKQorICAgICAgICAsIFNpemVWZXJDdXJzb3IoUUN1cnNvcihRdDo6U2l6ZVZlckN1
cnNvcikpCisgICAgICAgICwgU2l6ZUZEaWFnQ3Vyc29yKFFDdXJzb3IoUXQ6OlNpemVGRGlhZ0N1
cnNvcikpCisgICAgICAgICwgU2l6ZUJEaWFnQ3Vyc29yKFFDdXJzb3IoUXQ6OlNpemVCRGlhZ0N1
cnNvcikpCisgICAgICAgICwgU3BsaXRIQ3Vyc29yKFFDdXJzb3IoUXQ6OlNwbGl0SEN1cnNvcikp
CisgICAgICAgICwgU3BsaXRWQ3Vyc29yKFFDdXJzb3IoUXQ6OlNwbGl0VkN1cnNvcikpCisgICAg
eworICAgIH0KKworICAgIH5DdXJzb3JzKCkKKyAgICB7CisgICAgfQorCitwdWJsaWM6CisgICAg
c3RhdGljIEN1cnNvcnMgKnNlbGYoKTsKKyAgICBzdGF0aWMgQ3Vyc29ycyAqc19zZWxmOworCisg
ICAgQ3Vyc29yIENyb3NzQ3Vyc29yOworICAgIEN1cnNvciBNb3ZlQ3Vyc29yOworICAgIEN1cnNv
ciBQb2ludGluZ0hhbmRDdXJzb3I7CisgICAgQ3Vyc29yIElCZWFtQ3Vyc29yOworICAgIEN1cnNv
ciBXYWl0Q3Vyc29yOworICAgIEN1cnNvciBXaGF0c1RoaXNDdXJzb3I7CisgICAgQ3Vyc29yIFNp
emVIb3JDdXJzb3I7CisgICAgQ3Vyc29yIFNpemVWZXJDdXJzb3I7CisgICAgQ3Vyc29yIFNpemVG
RGlhZ0N1cnNvcjsKKyAgICBDdXJzb3IgU2l6ZUJEaWFnQ3Vyc29yOworICAgIEN1cnNvciBTcGxp
dEhDdXJzb3I7CisgICAgQ3Vyc29yIFNwbGl0VkN1cnNvcjsKK307CisKK0N1cnNvcnMqIEN1cnNv
cnM6OnNfc2VsZiA9IDA7CisKK0N1cnNvcnMqIEN1cnNvcnM6OnNlbGYoKQoreworICAgIGlmICgh
c19zZWxmKSB7CisgICAgICAgIHNfc2VsZiA9IG5ldyBDdXJzb3JzOworICAgIH0KKworICAgIHJl
dHVybiBzX3NlbGY7Cit9CisKK30KKworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkKK3sKKyAg
ICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Nb3ZlQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3Im
IGNyb3NzQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5Dcm9zc0N1cnNv
cjsKK30KKworY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29y
czo6c2VsZigpLT5Qb2ludGluZ0hhbmRDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaUJlYW1D
dXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPklCZWFtQ3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIHdhaXRDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxm
KCktPldhaXRDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgaGVscEN1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+V2hhdHNUaGlzQ3Vyc29yOworfQorCitjb25zdCBDdXJz
b3ImIGVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNp
emVIb3JDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhSZXNpemVDdXJzb3IoKQorewor
ICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVWZXJDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgbm9ydGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2Vs
ZigpLT5TaXplQkRpYWdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0UmVzaXpl
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplRkRpYWdDdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBD
dXJzb3JzOjpzZWxmKCktPlNpemVWZXJDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhF
YXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplRkRp
YWdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplQkRpYWdDdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgd2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYo
KS0+U2l6ZUhvckN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFNvdXRoUmVzaXplQ3Vy
c29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplVmVyQ3Vyc29yOworfQor
Citjb25zdCBDdXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vy
c29yczo6c2VsZigpLT5TaXplSG9yQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFz
dFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+
U2l6ZUJEaWFnQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJl
c2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U2l6ZUZEaWFnQ3Vy
c29yOworfQorCitjb25zdCBDdXJzb3ImIGNvbHVtblJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0
dXJuIEN1cnNvcnM6OnNlbGYoKS0+U3BsaXRIQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIHJv
d1Jlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U3BsaXRWQ3Vy
c29yOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9Db2xvclF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBxdC9Db2xvclF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0NvbG9y
UXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorCisj
aW5jbHVkZSA8UUNvbG9yPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NvbG9yOjpDb2xvcihj
b25zdCBRQ29sb3IgJmMpCisgICAgOiBtX2NvbG9yKG1ha2VSR0JBKGMucmVkKCksIGMuZ3JlZW4o
KSwgYy5ibHVlKCksIGMuYWxwaGEoKSkpCit7CisgICAgbV92YWxpZCA9IGMuaXNWYWxpZCgpOwor
fQorCitDb2xvcjo6b3BlcmF0b3IgUUNvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUUNvbG9y
KHJlZCgpLCBncmVlbigpLCBibHVlKCksIGFscGhhKCkpOworfQorCit9CisKKy8vIHZpbTogdHM9
NCBzdz00IGV0CkluZGV4OiBxdC9TeXN0ZW1UaW1lTGludXguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0
L1N5c3RlbVRpbWVMaW51eC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9TeXN0ZW1UaW1lTGludXgu
Y3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN5c3RlbVRpbWUu
aCIKKworI2luY2x1ZGUgPHRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitkb3VibGUg
Y3VycmVudFRpbWUoKQoreworICAgIHRpbWVfdCB0dGltZTsKKyAgICB0aW1lKCZ0dGltZSk7Cisg
ICAgcmV0dXJuIChkb3VibGUpdHRpbWU7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
SW5kZXg6IHF0L0Zsb2F0UG9pbnRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvRmxvYXRQb2ludFF0
LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L0Zsb2F0UG9pbnRRdC5jcHAJKFJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFj
a0BrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKworI2luY2x1ZGUgPFFQb2ludEY+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRmxvYXRQb2ludDo6RmxvYXRQb2ludChjb25zdCBR
UG9pbnRGJiBwKQorICAgIDogbV94KHAueCgpKQorICAgICAgLCBtX3kocC55KCkpCit7Cit9CisK
K0Zsb2F0UG9pbnQ6Om9wZXJhdG9yIFFQb2ludEYoKSBjb25zdAoreworICAgIHJldHVybiBRUG9p
bnRGKG1feCwgbV95KTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQv
Q2FudmFzUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9DYW52YXNRdC5oCShSZXZpc2lvbiAwKQorKysg
cXQvQ2FudmFzUXQuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgQ0FOVkFTUVRfSAorI2RlZmluZSBDQU5WQVNRVF9ICisK
KyNpbmNsdWRlIDxRV2lkZ2V0PgorCitjbGFzcyBRS2V5RXZlbnQ7CitjbGFzcyBRUGFpbnRFdmVu
dDsKK2NsYXNzIFFNb3VzZUV2ZW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNj
cm9sbFZpZXc7CisKK2NsYXNzIENhbnZhc1F0IDogcHVibGljIFFXaWRnZXQgeworUV9PQkpFQ1QK
K3B1YmxpYzoKKyAgICBDYW52YXNRdChTY3JvbGxWaWV3KiwgUVdpZGdldCogcGFyZW50ID0gMCk7
CisKKyAgICB2aXJ0dWFsIFFTaXplIHNpemVIaW50KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRFdmVudChRUGFpbnRFdmVudCopOworICAgIHZpcnR1YWwgdm9p
ZCBtb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZVBy
ZXNzRXZlbnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgbW91c2VSZWxlYXNlRXZl
bnQoUU1vdXNlRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZl
bnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQga2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCopOworCitw
cml2YXRlOgorICAgIHZvaWQgaGFuZGxlS2V5RXZlbnQoUUtleUV2ZW50KiwgYm9vbCBpc0tleVVw
KTsKKworICAgIFNjcm9sbFZpZXcgKm1fZnJhbWVWaWV3OworfTsKKworfQorCisjZW5kaWYKKwor
Ly8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0Jyb3dzZXJFeHRlbnNpb25RdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcXQvQnJvd3NlckV4dGVuc2lvblF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0
L0Jyb3dzZXJFeHRlbnNpb25RdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgor
I2luY2x1ZGUgIkJyb3dzZXJFeHRlbnNpb25RdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0Jyb3dzZXJFeHRlbnNpb25RdDo6QnJvd3NlckV4dGVuc2lvblF0KEZyYW1lKiBmcmFtZSkgOiBt
X2ZyYW1lKGZyYW1lKSAKK3sKK30KKworYm9vbCBCcm93c2VyRXh0ZW5zaW9uUXQ6OmNhblJ1bk1v
ZGFsKCkgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgQnJvd3NlckV4dGVuc2lvblF0OjpjcmVhdGVOZXdXaW5kb3coY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQoreworfQorCit2b2lkIEJyb3dzZXJFeHRlbnNpb25RdDo6Y3JlYXRl
TmV3V2luZG93KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2luZG93QXJn
cyYgYXJncywgRnJhbWUqJiBmcmFtZSkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiti
b29sIEJyb3dzZXJFeHRlbnNpb25RdDo6Y2FuUnVuTW9kYWxOb3coKSAKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCcm93c2VyRXh0ZW5zaW9u
UXQ6OnJ1bk1vZGFsKCkgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBCcm93
c2VyRXh0ZW5zaW9uUXQ6OmdvQmFja09yRm9yd2FyZChpbnQpIAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK0tVUkwgQnJvd3NlckV4dGVuc2lvblF0OjpoaXN0b3J5VVJMKGludCBkaXN0
YW5jZSkgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gS1VSTCgpOworfQor
Cit2b2lkIEJyb3dzZXJFeHRlbnNpb25RdDo6c2V0VHlwZWRJY29uVVJMKEtVUkwgY29uc3QmLCBj
b25zdCBTdHJpbmcmKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEJyb3dz
ZXJFeHRlbnNpb25RdDo6c2V0SWNvblVSTChLVVJMIGNvbnN0JikgCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworaW50IEJyb3dzZXJFeHRlbnNpb25RdDo6Z2V0SGlzdG9yeUxlbmd0aCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworfQorCisvLyB2
aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvR2x5cGhNYXBRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cXQvR2x5cGhNYXBRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9HbHlwaE1hcFF0LmNwcAkoUmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9y
Z2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsg
TXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVz
aW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaE1hcC5oIgorCisjaW5jbHVkZSAiRm9u
dERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIEdseXBoTWFwOjpmaWxsUGFn
ZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwg
Y29uc3QgRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8
IGJ1ZmZlckxlbmd0aDsgaSsrKSB7CisgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckluZGV4
KGksIGJ1ZmZlcltpXSwgZm9udERhdGEpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Cit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9TaGFyZWRUaW1lckxpbnV4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBxdC9TaGFyZWRUaW1lckxpbnV4LmNwcAkoUmV2aXNpb24gMCkKKysr
IHF0L1NoYXJlZFRpbWVyTGludXguY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIlNoYXJlZFRpbWVy
TGludXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTaGFyZWRUaW1lciogU2hhcmVkVGlt
ZXI6OnNfc2VsZiA9IDA7IC8vIEZJWE1FOiBzdGF0aWNkZWxldGVyCisKK3ZvaWQgc2V0U2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmKSgpKSB7CisgICAgU2hhcmVkVGltZXI6Omluc3Qo
KS0+X3RpbWVyRnVuY3Rpb24gPSBmOworfQorCit2b2lkIHNldFNoYXJlZFRpbWVyRmlyZVRpbWUo
ZG91YmxlIGZpcmVUaW1lKSB7CisgICAgU2hhcmVkVGltZXI6Omluc3QoKS0+c3RhcnQocU1heCgw
LCBpbnQoZmlyZVRpbWUgLSBjdXJyZW50VGltZSgpKSkpOworfQorCit2b2lkIHN0b3BTaGFyZWRU
aW1lcigpIHsKKyAgICBTaGFyZWRUaW1lcjo6aW5zdCgpLT5zdG9wKCk7Cit9CisKK30KKworI2lu
Y2x1ZGUgIlNoYXJlZFRpbWVyTGludXgubW9jIgorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogcXQvRmxvYXRSZWN0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0Zsb2F0UmVjdFF0LmNwcAko
UmV2aXNpb24gMCkKKysrIHF0L0Zsb2F0UmVjdFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNpbmNsdWRlIDxRUmVjdEY+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRmxvYXRSZWN0OjpGbG9hdFJlY3QoY29uc3QgUVJlY3RGJiByKQor
ICAgIDogbV9sb2NhdGlvbihyLnRvcExlZnQoKSkKKyAgICAgICwgbV9zaXplKHIud2lkdGgoKQor
ICAgICAgLCByLmhlaWdodCgpKQoreworfQorCitGbG9hdFJlY3Q6Om9wZXJhdG9yIFFSZWN0Rigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFFSZWN0Rih4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkp
OworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9BZmZpbmVUcmFuc2Zv
cm1RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwCShSZXZpc2lv
biAwKQorKysgcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FmZmluZVRyYW5zZm9ybTo6QWZm
aW5lVHJhbnNmb3JtKCkKKyAgICA6IG1fdHJhbnNmb3JtKCkKK3sKK30KKworQWZmaW5lVHJhbnNm
b3JtOjpBZmZpbmVUcmFuc2Zvcm0oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91Ymxl
IGQsIGRvdWJsZSB0eCwgZG91YmxlIHR5KQorICAgIDogbV90cmFuc2Zvcm0oYSwgYiwgYywgZCwg
dHgsIHR5KQoreworfQorCitBZmZpbmVUcmFuc2Zvcm06OkFmZmluZVRyYW5zZm9ybShjb25zdCBR
TWF0cml4JiBtYXRyaXgpCisgICAgOiBtX3RyYW5zZm9ybShtYXRyaXgpCit7Cit9CisKK3ZvaWQg
QWZmaW5lVHJhbnNmb3JtOjpzZXRNYXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywg
ZG91YmxlIGQsIGRvdWJsZSB0eCwgZG91YmxlIHR5KQoreworICAgIG1fdHJhbnNmb3JtLnNldE1h
dHJpeChhLCBiLCBjLCBkLCB0eCwgdHkpOworfQorCit2b2lkIEFmZmluZVRyYW5zZm9ybTo6bWFw
KGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlKiB4MiwgZG91YmxlKiB5MikgY29uc3QKK3sKKyAg
ICBtX3RyYW5zZm9ybS5tYXAoeCwgeSwgeDIsIHkyKTsKK30KKworSW50UmVjdCBBZmZpbmVUcmFu
c2Zvcm06Om1hcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV90cmFuc2Zvcm0ubWFwUmVjdChyZWN0KTsKK30KKworRmxvYXRSZWN0IEFmZmluZVRyYW5zZm9y
bTo6bWFwUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
dHJhbnNmb3JtLm1hcFJlY3QocmVjdCk7Cit9CisKK2Jvb2wgQWZmaW5lVHJhbnNmb3JtOjppc0lk
ZW50aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0uaXNJZGVudGl0eSgpOwor
fQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjptMTEoKSBjb25zdAoreworICAgIHJldHVybiBt
X3RyYW5zZm9ybS5tMTEoKTsKK30KKworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6bTEyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV90cmFuc2Zvcm0ubTEyKCk7Cit9CisKK2RvdWJsZSBBZmZpbmVU
cmFuc2Zvcm06Om0yMSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLm0yMSgpOwor
fQorCitkb3VibGUgQWZmaW5lVHJhbnNmb3JtOjptMjIoKSBjb25zdAoreworICAgIHJldHVybiBt
X3RyYW5zZm9ybS5tMjIoKTsKK30KKworZG91YmxlIEFmZmluZVRyYW5zZm9ybTo6ZHgoKSBjb25z
dAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybS5keCgpOworfQorCitkb3VibGUgQWZmaW5lVHJh
bnNmb3JtOjpkeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLmR5KCk7Cit9CisK
K3ZvaWQgQWZmaW5lVHJhbnNmb3JtOjpyZXNldCgpCit7CisgICAgbV90cmFuc2Zvcm0ucmVzZXQo
KTsKK30KKworQWZmaW5lVHJhbnNmb3JtICZBZmZpbmVUcmFuc2Zvcm06OnNjYWxlKGRvdWJsZSBz
eCwgZG91YmxlIHN5KQoreworICAgIG1fdHJhbnNmb3JtLnNjYWxlKHN4LCBzeSk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0gJkFmZmluZVRyYW5zZm9ybTo6cm90YXRl
KGRvdWJsZSBkKQoreworICAgIG1fdHJhbnNmb3JtLnJvdGF0ZShkKTsKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK0FmZmluZVRyYW5zZm9ybSAmQWZmaW5lVHJhbnNmb3JtOjp0cmFuc2xhdGUoZG91
YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgbV90cmFuc2Zvcm0udHJhbnNsYXRlKHR4LCB0eSk7
CisgICAgcmV0dXJuICp0aGlzOworfQorCitBZmZpbmVUcmFuc2Zvcm0gJkFmZmluZVRyYW5zZm9y
bTo6c2hlYXIoZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgbV90cmFuc2Zvcm0uc2hlYXIo
c3gsIHN5KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2RvdWJsZSBBZmZpbmVUcmFuc2Zvcm06
OmRldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtLmRldCgpOworfQorCitBZmZp
bmVUcmFuc2Zvcm0gQWZmaW5lVHJhbnNmb3JtOjppbnZlcnQoKSBjb25zdAoreworICAgIGlmKCFp
c0ludmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOworCisgICAg
cmV0dXJuIG1fdHJhbnNmb3JtLmludmVydGVkKCk7Cit9CisKK0FmZmluZVRyYW5zZm9ybTo6b3Bl
cmF0b3IgUU1hdHJpeCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdHJhbnNmb3JtOworfQorCiti
b29sIEFmZmluZVRyYW5zZm9ybTo6b3BlcmF0b3I9PShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG90
aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX3RyYW5zZm9ybSA9PSBvdGhlci5tX3RyYW5zZm9y
bTsKK30KKworQWZmaW5lVHJhbnNmb3JtJiBBZmZpbmVUcmFuc2Zvcm06Om9wZXJhdG9yKj0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBvdGhlcikKK3sKKyAgICBtX3RyYW5zZm9ybSAqPSBvdGhlci5t
X3RyYW5zZm9ybTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBBZmZp
bmVUcmFuc2Zvcm06Om9wZXJhdG9yKihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG90aGVyKQorewor
ICAgIHJldHVybiBtX3RyYW5zZm9ybSAqIG90aGVyLm1fdHJhbnNmb3JtOworfQorCit9CisKKy8v
IHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9MaXN0Qm94UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHF0L0xpc3RCb3hRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9MaXN0Qm94UXQuY3BwCShSZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJr
IE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqICAgICAgICAgICAoQykgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSA8UVNjcm9sbEJhcj4KKyNpbmNsdWRlIDxRTGlzdFdpZGdl
dD4KKworI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorI2luY2x1
ZGUgIkxpc3RCb3guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitMaXN0Qm94OjpMaXN0Qm94
KCkKKyAgICA6IFNjcm9sbFZpZXcoKQorICAgICAgLCBtX2xpc3RXaWRnZXQoMCkKKyAgICAgICwg
bV9zZWxlY3Rpb25Nb2RlKFNpbmdsZSkKKyAgICAgICwgX3dpZHRoKDAuMCkKKyAgICAgICwgX3dp
ZHRoR29vZChmYWxzZSkKK3sKKyAgICBxRGVidWcoIkxpc3RCb3g6Okxpc3RCb3goKSwgdGhpcz0l
cCIsIHRoaXMpOworfQorCitMaXN0Qm94Ojp+TGlzdEJveCgpCit7CisgICAgcURlYnVnKCJMaXN0
Qm94Ojp+TGlzdEJveCgpLCB0aGlzPSVwIiwgdGhpcyk7Cit9CisKK3ZvaWQgTGlzdEJveDo6c2V0
UGFyZW50V2lkZ2V0KFFXaWRnZXQqIHBhcmVudCkKK3sKKyAgICBxRGVidWcoIkxpc3RCb3g6OnNl
dFBhcmVudFdpZGdldCgpLCBwYXJlbnQ9JXAiLCBwYXJlbnQpOworICAgIFNjcm9sbFZpZXc6OnNl
dFBhcmVudFdpZGdldChwYXJlbnQpOworCisgICAgUV9BU1NFUlQobV9saXN0V2lkZ2V0ID09IDAp
OworICAgIG1fbGlzdFdpZGdldCA9IG5ldyBRTGlzdFdpZGdldChwYXJlbnQpOworCisgICAgaWYo
bV9zZWxlY3Rpb25Nb2RlID09IFNpbmdsZSkgeworICAgICAgICBtX2xpc3RXaWRnZXQtPnNldFNl
bGVjdGlvbk1vZGUoUUFic3RyYWN0SXRlbVZpZXc6OlNpbmdsZVNlbGVjdGlvbik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9saXN0V2lkZ2V0LT5zZXRTZWxlY3Rpb25Nb2RlKFFBYnN0cmFjdEl0
ZW1WaWV3OjpFeHRlbmRlZFNlbGVjdGlvbik7CisgICAgfQorCisgICAgc2V0UVdpZGdldChtX2xp
c3RXaWRnZXQpOworfQorCitJbnRTaXplIExpc3RCb3g6OnNpemVGb3JOdW1iZXJPZkxpbmVzKGlu
dCBudW1MaW5lcykgY29uc3QKK3sKKyAgICBRU2l6ZSBzaXplKDAsIDApOworCisgICAgZm9yKGlu
dCBpID0gMDsgaSA8PSBudW1MaW5lczsgaSsrKSB7CisgICAgICAgIFFMaXN0V2lkZ2V0SXRlbSAq
aXRlbSA9IG1fbGlzdFdpZGdldC0+aXRlbShpKTsKKyAgICAgICAgUV9BU1NFUlQoaXRlbSAhPSAw
KTsKKworICAgICAgICBRUmVjdCB2aXN1YWwgPSBtX2xpc3RXaWRnZXQtPnZpc3VhbEl0ZW1SZWN0
KGl0ZW0pOworCisgICAgICAgIHNpemUuc2V0V2lkdGgocU1heChzaXplLndpZHRoKCksIHZpc3Vh
bC53aWR0aCgpKSk7CisgICAgICAgIHNpemUuc2V0SGVpZ2h0KHFNYXgoc2l6ZS5oZWlnaHQoKSwg
dmlzdWFsLmhlaWdodCgpKSk7CisgICAgfQorCisgICAgLy8gTG9naWMgdGFrZW4gZnJvbSBvdXIg
a2h0bWwgOi0pCisgICAgc2l6ZS5zZXRXaWR0aChzaXplLndpZHRoKCkgKyAyICogbV9saXN0V2lk
Z2V0LT5mcmFtZVdpZHRoKCkgKyBtX2xpc3RXaWRnZXQtPnZlcnRpY2FsU2Nyb2xsQmFyKCktPnNp
emVIaW50KCkud2lkdGgoKSk7CisgICAgc2l6ZS5zZXRIZWlnaHQobnVtTGluZXMgKiBzaXplLmhl
aWdodCgpICsgMiAqIG1fbGlzdFdpZGdldC0+ZnJhbWVXaWR0aCgpKTsKKworICAgIHJldHVybiBz
aXplOworfQorCit2b2lkIExpc3RCb3g6OnNldFNlbGVjdGlvbk1vZGUoU2VsZWN0aW9uTW9kZSBt
b2RlKQoreworICAgIC8vIFdlIGNhbiBub3QgZGlyZWN0bHkgYXNzaWduIHRvIG1fbGlzdFdpZGdl
dCBoZXJlLCBhcworICAgIC8vIHNldFNlbGVjdGlvbk1vZGUoKSBpcyBjYWxsZWQgZnJvbSBEZXBy
ZWNhdGVkUmVuZGVyU2VsZWN0IGJlZm9yZQorICAgIC8vIHNldFdpZGdldCgpIGFuZCBvdXIgc2V0
UGFyZW50V2lkZ2V0KCkgZnVuY3Rpb25zIGhhdmUgYmVlbiBjYWxsZWQuLi4KKyAgICBtX3NlbGVj
dGlvbk1vZGUgPSBtb2RlOworfQorCit2b2lkIExpc3RCb3g6OmNsZWFyKCkKK3sKKyAgICBtX2xp
c3RXaWRnZXQtPmNsZWFyKCk7Cit9CisKK3ZvaWQgTGlzdEJveDo6ZG9uZUFwcGVuZGluZ0l0ZW1z
KCkKK3sKKyAgICAvLyBuby1vcAorfQorCit2b2lkIExpc3RCb3g6OnNldFNlbGVjdGVkKGludCBy
b3csIGJvb2wgc2VsZWN0ZWQpCit7CisgICAgUUxpc3RXaWRnZXRJdGVtICppdGVtID0gbV9saXN0
V2lkZ2V0LT5pdGVtKHJvdyk7CisgICAgaWYgKCFpdGVtKSB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX2xpc3RXaWRnZXQtPnNldEl0ZW1TZWxlY3RlZChpdGVtLCBzZWxlY3RlZCk7
Cit9CisKK2Jvb2wgTGlzdEJveDo6aXNTZWxlY3RlZChpbnQgcm93KSBjb25zdAoreworICAgIFFM
aXN0V2lkZ2V0SXRlbSAqaXRlbSA9IG1fbGlzdFdpZGdldC0+aXRlbShyb3cpOworICAgIGlmICgh
aXRlbSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIG1fbGlz
dFdpZGdldC0+aXNJdGVtU2VsZWN0ZWQoaXRlbSk7Cit9CisKK3ZvaWQgTGlzdEJveDo6c2V0RW5h
YmxlZChib29sIHZhbHVlKQoreworICAgIG1fbGlzdFdpZGdldC0+c2V0RW5hYmxlZCh2YWx1ZSk7
Cit9CisKK2Jvb2wgTGlzdEJveDo6aXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9saXN0V2lk
Z2V0LT5pc0VuYWJsZWQoKTsKK30KKwordm9pZCBMaXN0Qm94OjpzZXRXcml0aW5nRGlyZWN0aW9u
KFRleHREaXJlY3Rpb24gZGlyKQoreworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gcURpcjsKKwor
ICAgIHN3aXRjaChkaXIpCisgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIExU
UjoKKyAgICAgICAgICAgIHFEaXIgPSBRdDo6TGVmdFRvUmlnaHQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSVEw6CisgICAgICAgICAgICBxRGlyID0gUXQ6OlJpZ2h0VG9MZWZ0
OworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9saXN0V2lkZ2V0LT5zZXRMYXlv
dXREaXJlY3Rpb24ocURpcik7Cit9CisKK1dpZGdldDo6Rm9jdXNQb2xpY3kgTGlzdEJveDo6Zm9j
dXNQb2xpY3koKSBjb25zdAoreworICAgIHJldHVybiBXaWRnZXQ6OmZvY3VzUG9saWN5KCk7Cit9
CisKK2Jvb2wgTGlzdEJveDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgTGlzdEJveDo6Y2xlYXJDYWNoZWRUZXh0UmVuZGVy
ZXJzKCkKK3sKKyAgICAvLyBuby1vcAorfQorCit2b2lkIExpc3RCb3g6OnNldEZvbnQoY29uc3Qg
Rm9udCYgZm9udCkKK3sKKyAgICBtX2xpc3RXaWRnZXQtPnNldEZvbnQodG9RRm9udChmb250KSk7
Cit9CisKK3ZvaWQgTGlzdEJveDo6YXBwZW5kSXRlbShjb25zdCBEZXByZWNhdGVkU3RyaW5nJiBz
dHJpbmcsIExpc3RCb3hJdGVtVHlwZSB0eXBlLCBib29sIGVuYWJsZWQpCit7CisgICAgKHZvaWQp
IG5ldyBRTGlzdFdpZGdldEl0ZW0odG9RU3RyaW5nKHN0cmluZyksIG1fbGlzdFdpZGdldCk7Cit9
CisKK307CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC90ZXN0L3Rlc3R1bml0eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcXQvdGVzdC90ZXN0dW5pdHkuY3BwCShSZXZpc2lvbiAwKQorKysg
cXQvdGVzdC90ZXN0dW5pdHkuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpbmNsdWRl
IDxrYXBwbGljYXRpb24uaD4KKyNpbmNsdWRlIDxrY21kbGluZWFyZ3MuaD4KKyNpbmNsdWRlIDxr
ZGVidWcuaD4KKworI2luY2x1ZGUgPERvY3VtZW50Lmg+CisKKyNpbmNsdWRlIDxGcmFtZVF0Lmg+
CisjaW5jbHVkZSA8cGFnZS9QYWdlLmg+CisKKyNpbmNsdWRlIDxRVkJveExheW91dD4KKyNpbmNs
dWRlIDxRRGlyPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworCitzdGF0aWMgS0NtZExp
bmVPcHRpb25zIG9wdGlvbnNbXSA9Cit7CisgICAgeyAiK2ZpbGUiLCAgICAgICAgIkZpbGUgdG8g
bG9hZCIsIDAgfSwKKyAgICBLQ21kTGluZUxhc3RPcHRpb24KK307CisKK2ludCBtYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBLQ21kTGluZUFyZ3M6OmluaXQoYXJnYywgYXJndiwg
InRlc3R1bml0eSIsICJ0ZXN0dW5pdHkiLAorICAgICAgICAgICAgICAgICAgICAgICAidW5pdHkg
dGVzdGNhc2UgYXBwIiwgIjAuMSIpOworICAgIEtDbWRMaW5lQXJnczo6YWRkQ21kTGluZU9wdGlv
bnMob3B0aW9ucyk7CisgICAgS0FwcGxpY2F0aW9uIGFwcDsKKyAgICBLQ21kTGluZUFyZ3MgKmFy
Z3MgPSBLQ21kTGluZUFyZ3M6OnBhcnNlZEFyZ3MoKTsKKyAgICAgCisgICAgUVdpZGdldCB0b3BM
ZXZlbDsKKyAgICBRQm94TGF5b3V0ICpsID0gbmV3IFFWQm94TGF5b3V0KCZ0b3BMZXZlbCk7Cisg
ICAgICAgIAorICAgIEZyYW1lUXQgKmYgPSBuZXcgRnJhbWVRdCgmdG9wTGV2ZWwpOworCisgICAg
bC0+YWRkV2lkZ2V0KGYtPnZpZXcoKS0+cXdpZGdldCgpKTsKKyAgICBsLT5hY3RpdmF0ZSgpOwor
ICAgIGYtPnZpZXcoKS0+cXdpZGdldCgpLT5zaG93KCk7CisgICAgLy90b3BsZXZlbC5yZXNpemUo
NDAwLCAzMDApOworICAgIHRvcExldmVsLnNob3coKTsKKworICAgIFFTdHJpbmcgdXJsOworCisg
ICAgaWYgKGFyZ3MtPmNvdW50KCkgPT0gMCkKKyAgICAgICAgdXJsID0gUVN0cmluZygiJTEvJTIi
KS5hcmcoUURpcjo6aG9tZVBhdGgoKSkKKyAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5n
KCJpbmRleC5odG1sIikpOworICAgIGVsc2UKKyAgICAgICAgdXJsID0gYXJncy0+YXJnKDApOwor
ICAgIGYtPm9wZW5VUkwoS1VSTCh1cmwudG9MYXRpbjEoKSkpOworCisgICAgLy9mLT5jcmVhdGVF
bXB0eURvY3VtZW50KCk7CisgICAgLy9mLT5kb2N1bWVudCgpLT5vcGVuKCk7CisKKyNpZiAwCisg
ICAgZi0+YmVnaW4oKTsKKyAgICBmLT53cml0ZSgiPGh0bWw+PGJvZHkgYmdjb2xvcj1ibHVlPjxi
cj48PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxi
cj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJy
Pjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+
PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48
YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxi
cj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJy
Pjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+
PGJyPjxicj48YnI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+L2h0bWw+Iik7CisKKyAgICAvL2Yt
PmRvY3VtZW50KCktPmNsb3NlKCk7CisgICAgZi0+ZW5kKCk7CisjZW5kaWYKKworICAgIAorICAg
IC8vdG9wbGV2ZWwuZHVtcE9iamVjdFRyZWUoKTsKKyAgICBhcHAuZXhlYygpOworICAgIGRlbGV0
ZSBmOworICAgIHJldHVybiAwOworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQv
dGVzdC9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC90ZXN0L0NNYWtlTGlzdHMudHh0
CShSZXZpc2lvbiAwKQorKysgcXQvdGVzdC9DTWFrZUxpc3RzLnR4dAkoUmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyNyBAQAoraW5jbHVkZV9kaXJlY3RvcmllcygKKyAgIEJFRk9SRSAke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vLi4vLi4vLi4vCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9Ly4uLy4uLy4uLy4uL0phdmFTY3JpcHRDb3JlCisgICBCRUZPUkUgJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9Ly4uLy4uLy4uL2JyaWRnZQorICAgQkVGT1JFICR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS8uLi8uLi8uLi9wYWdlCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9Ly4uLy4uLy4uL2xvYWRlcgorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS8uLi8uLi8uLi9wbGF0Zm9ybQorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS8uLi8uLi8uLi9wbGF0Zm9ybS9xdAorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS8uLi8uLi8uLi9rd3EKKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vLi4vLi4vLi4vcmVuZGVyaW5nCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9Ly4uLy4uLy4uL2VkaXRpbmcKKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vLi4vLi4vLi4vaHRtbAorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS8uLi8uLi8uLi9jc3MKKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
Li4vLi4vLi4vZG9tCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uLy4u
Ly4uL3htbAorICAgQkVGT1JFICR7Q01BS0VfU09VUkNFX0RJUn0va2RlY29yZQorKQorc2V0KHRl
c3R1bml0eV9TUkNTCisgIHRlc3R1bml0eS5jcHAKKyAgKQorCitrZGU0X2F1dG9tb2MoJHt0ZXN0
dW5pdHlfU1JDU30pCisKK2tkZTRfYWRkX2V4ZWN1dGFibGUodGVzdHVuaXR5IFJVTl9VTklOU1RB
TExFRCAke3Rlc3R1bml0eV9TUkNTfSkKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3R1bml0
eSAgJHtLREU0X0tERUNPUkVfTElCU30gV2ViQ29yZS11bml0eSApCisKSW5kZXg6IHF0L1Njcm9s
bFZpZXdRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvU2Nyb2xsVmlld1F0LmNwcAkoUmV2aXNpb24g
MCkKKysrIHF0L1Njcm9sbFZpZXdRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJJbnRQb2ludC5oIgorCisjaW5jbHVkZSAiRnJhbWVRdC5oIgorI2luY2x1ZGUg
IkNhbnZhc1F0LmgiCisjaW5jbHVkZSAiSGVscGVyUXQuaCIKKworI2luY2x1ZGUgPFFTY3JvbGxC
YXI+CisjaW5jbHVkZSA8UVNjcm9sbEFyZWE+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Ny
b2xsVmlldzo6U2Nyb2xsVmlldygpIDogbV9hcmVhKG5ldyBRU2Nyb2xsQXJlYSgwKSkKK3sKKyAg
ICBxRGVidWcoIlNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKSIpOworfQorCitTY3JvbGxWaWV3Ojp+
U2Nyb2xsVmlldygpCit7CisgICAgcURlYnVnKCJTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpIik7
Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0UGFyZW50V2lkZ2V0KFFXaWRnZXQqIHBhcmVudCkK
K3sKKyAgICBxRGVidWcoIlNjcm9sbFZpZXc6OnNldFBhcmVudFdpZGdldCgpLCBwYXJlbnQ9JXAi
LCBwYXJlbnQpOworICAgIFdpZGdldDo6c2V0UGFyZW50V2lkZ2V0KHBhcmVudCk7CisKKyAgICAv
LyAnaXNGcmFtZVZpZXcoKScgY2FuIG5vdCBiZSBjYWxsZWQgeWV0IGluIHRoZSBjb25zdHJ1Y3Rv
ciEKKyAgICBpZiAoaXNGcmFtZVZpZXcoKSkgeworICAgICAgICBDYW52YXNRdCAqY2FudmFzID0g
bmV3IENhbnZhc1F0KHRoaXMsIG1fYXJlYSk7CisKKyAgICAgICAgc2V0UVdpZGdldChtX2FyZWEp
OworICAgICAgICBtX2FyZWEtPnNldFdpZGdldChjYW52YXMpOworICAgIH0KK30KKwordm9pZCBT
Y3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29s
IG5vdykKK3sKKyAgICBpZiAobV9hcmVhLT53aWRnZXQoKSkgeworICAgICAgICBtX2FyZWEtPndp
ZGdldCgpLT51cGRhdGUodXBkYXRlUmVjdCk7CisgICAgfQorfQorCitpbnQgU2Nyb2xsVmlldzo6
dmlzaWJsZVdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9hcmVhLT5tYXhpbXVtVmlld3Bv
cnRTaXplKCkud2lkdGgoKTsKK30KKworaW50IFNjcm9sbFZpZXc6OnZpc2libGVIZWlnaHQoKSBj
b25zdAoreworICAgIHJldHVybiBtX2FyZWEtPm1heGltdW1WaWV3cG9ydFNpemUoKS5oZWlnaHQo
KTsKK30KKworRmxvYXRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdCgpIGNvbnN0
Cit7CisgICAgY29uc3QgUVNpemUgcyhtX2FyZWEtPm1heGltdW1WaWV3cG9ydFNpemUoKSk7CisK
KyAgICByZXR1cm4gRmxvYXRSZWN0KG1fYXJlYS0+aG9yaXpvbnRhbFNjcm9sbEJhcigpLT52YWx1
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgbV9hcmVhLT52ZXJ0aWNhbFNjcm9sbEJhcigpLT52
YWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgcy53aWR0aCgpLCBzLmhlaWdodCgpKTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpzZXRDb250ZW50c1BvcyhpbnQgbmV3WCwgaW50IG5ld1kpCit7
CisgICAgbV9hcmVhLT5ob3Jpem9udGFsU2Nyb2xsQmFyKCktPnNldFZhbHVlKG5ld1gpOworICAg
IG1fYXJlYS0+dmVydGljYWxTY3JvbGxCYXIoKS0+c2V0VmFsdWUobmV3WSk7Cit9CisKK3ZvaWQg
U2Nyb2xsVmlldzo6cmVzaXplQ29udGVudHMoaW50IHcsIGludCBoKQoreworICAgIGlmIChtX2Fy
ZWEtPndpZGdldCgpKSB7CisgICAgICAgIG1fYXJlYS0+d2lkZ2V0KCktPnJlc2l6ZSh3LCBoKTsK
KyAgICB9Cit9CisKK2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1goKSBjb25zdAoreworICAgIHJl
dHVybiBtX2FyZWEtPmhvcml6b250YWxTY3JvbGxCYXIoKS0+dmFsdWUoKTsKK30KKworaW50IFNj
cm9sbFZpZXc6OmNvbnRlbnRzWSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYXJlYS0+dmVydGlj
YWxTY3JvbGxCYXIoKS0+dmFsdWUoKTsKK30KKworaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lk
dGgoKSBjb25zdAoreworICAgIGlmICghbV9hcmVhLT53aWRnZXQoKSkgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV9hcmVhLT53aWRnZXQoKS0+d2lkdGgoKTsKK30K
KworaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
YXJlYS0+d2lkZ2V0KCkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJu
IG1fYXJlYS0+d2lkZ2V0KCktPmhlaWdodCgpOworfQorCitJbnRQb2ludCBTY3JvbGxWaWV3Ojp2
aWV3cG9ydFRvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQpCit7CisgICAg
Ly8gUXQgYWxyZWFkeSBoYW5kbGVzIHRoaXMgaW4gdGhlIGNvb3JkaW5hdGVzIHdlIGdldCBmcm9t
IHRoZSBtb3VzZSBldmVudHMuLi4KKyAgICByZXR1cm4gdmlld3BvcnRQb2ludDsKK30KKworSW50
UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1ZpZXdwb3J0KGNvbnN0IEludFBvaW50JiBjb250
ZW50c1BvaW50KQoreworICAgIC8vIFF0IGFscmVhZHkgaGFuZGxlcyB0aGlzIGluIHRoZSBjb29y
ZGluYXRlcyB3ZSBnZXQgZnJvbSB0aGUgbW91c2UgZXZlbnRzLi4uCisgICAgcmV0dXJuIGNvbnRl
bnRzUG9pbnQ7Cit9CisKK0ludFNpemUgU2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2FyZWEtPmhvcml6b250YWxTY3JvbGxCYXIoKS0+dmFs
dWUoKSwgbV9hcmVhLT52ZXJ0aWNhbFNjcm9sbEJhcigpLT52YWx1ZSgpKTsKK30KKwordm9pZCBT
Y3JvbGxWaWV3OjpzY3JvbGxCeShpbnQgZHgsIGludCBkeSkKK3sKKyAgICBtX2FyZWEtPmhvcml6
b250YWxTY3JvbGxCYXIoKS0+c2V0VmFsdWUobV9hcmVhLT5ob3Jpem9udGFsU2Nyb2xsQmFyKCkt
PnZhbHVlKCkgKyBkeCk7CisgICAgbV9hcmVhLT52ZXJ0aWNhbFNjcm9sbEJhcigpLT5zZXRWYWx1
ZShtX2FyZWEtPnZlcnRpY2FsU2Nyb2xsQmFyKCktPnZhbHVlKCkgKyBkeSk7Cit9CisKK1Njcm9s
bEJhck1vZGUgU2Nyb2xsVmlldzo6aFNjcm9sbEJhck1vZGUoKSBjb25zdAoreworICAgIHN3aXRj
aCAobV9hcmVhLT5ob3Jpem9udGFsU2Nyb2xsQmFyUG9saWN5KCkpCisgICAgeworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICBjYXNlIFF0OjpTY3JvbGxCYXJBc05lZWRlZDoKKyAgICAgICAgICAg
IHJldHVybiBTY3JvbGxCYXJBdXRvOworICAgICAgICBjYXNlIFF0OjpTY3JvbGxCYXJBbHdheXNP
ZmY6CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQmFyQWx3YXlzT2ZmOworICAgICAgICBjYXNl
IFF0OjpTY3JvbGxCYXJBbHdheXNPbjoKKyAgICAgICAgICAgIHJldHVybiBTY3JvbGxCYXJBbHdh
eXNPbjsKKyAgICB9Cit9CisKK1Njcm9sbEJhck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbEJhck1v
ZGUoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9hcmVhLT52ZXJ0aWNhbFNjcm9sbEJhclBvbGlj
eSgpKQorICAgIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBRdDo6U2Nyb2xsQmFy
QXNOZWVkZWQ6CisgICAgICAgICAgICByZXR1cm4gU2Nyb2xsQmFyQXV0bzsKKyAgICAgICAgY2Fz
ZSBRdDo6U2Nyb2xsQmFyQWx3YXlzT2ZmOgorICAgICAgICAgICAgcmV0dXJuIFNjcm9sbEJhckFs
d2F5c09mZjsKKyAgICAgICAgY2FzZSBRdDo6U2Nyb2xsQmFyQWx3YXlzT246CisgICAgICAgICAg
ICByZXR1cm4gU2Nyb2xsQmFyQWx3YXlzT247CisgICAgfQorfQorCit2b2lkIFNjcm9sbFZpZXc6
OnN1cHByZXNzU2Nyb2xsQmFycyhib29sIHN1cHByZXNzZWQsIGJvb2wgcmVwYWludE9uU3VwcHJl
c3MpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRI
U2Nyb2xsQmFyTW9kZShTY3JvbGxCYXJNb2RlIG5ld01vZGUpCit7CisgICAgc3dpdGNoIChuZXdN
b2RlKQorICAgIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBTY3JvbGxCYXJBdXRv
OgorICAgICAgICAgICAgbV9hcmVhLT5zZXRIb3Jpem9udGFsU2Nyb2xsQmFyUG9saWN5KFF0OjpT
Y3JvbGxCYXJBc05lZWRlZCk7CisgICAgICAgIGNhc2UgU2Nyb2xsQmFyQWx3YXlzT2ZmOgorICAg
ICAgICAgICAgbV9hcmVhLT5zZXRIb3Jpem9udGFsU2Nyb2xsQmFyUG9saWN5KFF0OjpTY3JvbGxC
YXJBbHdheXNPZmYpOworICAgICAgICBjYXNlIFNjcm9sbEJhckFsd2F5c09uOgorICAgICAgICAg
ICAgbV9hcmVhLT5zZXRIb3Jpem9udGFsU2Nyb2xsQmFyUG9saWN5KFF0OjpTY3JvbGxCYXJBbHdh
eXNPbik7CisgICAgfQorfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldFZTY3JvbGxCYXJNb2RlKFNj
cm9sbEJhck1vZGUgbmV3TW9kZSkKK3sKKyAgICBzd2l0Y2ggKG5ld01vZGUpCisgICAgeworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIFNjcm9sbEJhckF1dG86CisgICAgICAgICAgICBt
X2FyZWEtPnNldFZlcnRpY2FsU2Nyb2xsQmFyUG9saWN5KFF0OjpTY3JvbGxCYXJBc05lZWRlZCk7
CisgICAgICAgIGNhc2UgU2Nyb2xsQmFyQWx3YXlzT2ZmOgorICAgICAgICAgICAgbV9hcmVhLT5z
ZXRWZXJ0aWNhbFNjcm9sbEJhclBvbGljeShRdDo6U2Nyb2xsQmFyQWx3YXlzT2ZmKTsKKyAgICAg
ICAgY2FzZSBTY3JvbGxCYXJBbHdheXNPbjoKKyAgICAgICAgICAgIG1fYXJlYS0+c2V0VmVydGlj
YWxTY3JvbGxCYXJQb2xpY3koUXQ6OlNjcm9sbEJhckFsd2F5c09uKTsKKyAgICB9Cit9CisKK3Zv
aWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsQmFyc01vZGUoU2Nyb2xsQmFyTW9kZSBuZXdNb2RlKQor
eworICAgIHNldEhTY3JvbGxCYXJNb2RlKG5ld01vZGUpOworICAgIHNldFZTY3JvbGxCYXJNb2Rl
KG5ld01vZGUpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldFN0YXRpY0JhY2tncm91bmQoYm9v
bCBmbGFnKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCwgaW50IHgsIGludCB5KQoreworICAgIHFEZWJ1ZygiU2Ny
b2xsVmlldzo6YWRkQ2hpbGQoKSwgY2hpbGQ9JXAsIHg9JWksIHk9JWkiLCBjaGlsZCwgeCwgeSk7
CisgICAgUV9BU1NFUlQoY2hpbGQgIT0gMCk7CisgICAgUV9BU1NFUlQobV9hcmVhICYmIG1fYXJl
YS0+d2lkZ2V0KCkpOworCisvLyAgY2hpbGQtPm1vdmUoeCwgeSk7CisgICAgY2hpbGQtPnNldFBh
cmVudFdpZGdldChtX2FyZWEtPndpZGdldCgpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpyZW1v
dmVDaGlsZChXaWRnZXQqKQoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFNj
cm9sbFZpZXc6OnNjcm9sbFBvaW50UmVjdXJzaXZlbHkoaW50IHgsIGludCB5KQoreyAKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogcXQvRnJhbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvRnJhbWVRdC5jcHAJKFJldmlzaW9u
IDApCisrKyBxdC9GcmFtZVF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFt
ZVF0LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlv
bi5oIgorI2luY2x1ZGUgIkJyb3dzZXJFeHRlbnNpb25RdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRl
ICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CisjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgorI2luY2x1ZGUgIlNl
bGVjdGlvbkNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCisKKyNpbmNs
dWRlIDxRU2Nyb2xsQXJlYT4KKyNpbmNsdWRlIDxRTWVzc2FnZUJveD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgdm9pZCBkb1Njcm9sbChjb25zdCBSZW5kZXJPYmplY3QqIHIsIGJv
b2wgaXNIb3Jpem9udGFsLCBpbnQgbXVsdGlwbGllcikKK3sKKyAgICAvLyBGSVhNRTogVGhlIHNj
cm9sbGluZyBkb25lIGhlcmUgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGRlZmF1bHQgaGFuZGxlcnMK
KyAgICAvLyBvZiB0aGUgZWxlbWVudHMgcmF0aGVyIHRoYW4gaGVyZSBpbiB0aGUgcGFydC4KKyAg
ICBpZighcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy9icm9rZW4gc2luY2UgaXQgY2FsbHMg
c2Nyb2xsIG9uIHNjcm9sbGJhcnMKKyAgICAvL2FuZCB3ZSBoYXZlIG5vbmUgbm93CisgICAgLy9y
LT5zY3JvbGwoZGlyZWN0aW9uLCBLV1FTY3JvbGxXaGVlbCwgbXVsdGlwbGllcik7CisgICAgaWYo
IXItPmxheWVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4ID0gci0+bGF5ZXIoKS0+
c2Nyb2xsWE9mZnNldCgpOworICAgIGludCB5ID0gci0+bGF5ZXIoKS0+c2Nyb2xsWU9mZnNldCgp
OworICAgIGlmKGlzSG9yaXpvbnRhbCkKKyAgICAgICAgeCArPSBtdWx0aXBsaWVyOworICAgIGVs
c2UKKyAgICAgICAgeSArPSBtdWx0aXBsaWVyOworCisgICAgci0+bGF5ZXIoKS0+c2Nyb2xsVG9P
ZmZzZXQoeCwgeSwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK2Jvb2wgRnJhbWVWaWV3Ojppc0ZyYW1lVmll
dygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZyYW1lUXQ6OkZyYW1lUXQoKQor
ICAgIDogRnJhbWUobmV3IFBhZ2UsIDApCit7CisgICAgcURlYnVnKCJGcmFtZVF0OjpGcmFtZVF0
Iik7CisgICAgaW5pdCgpOworCisgICAgcGFnZSgpLT5zZXRNYWluRnJhbWUodGhpcyk7CisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gbmV3IEZyYW1lVmlldyh0aGlzKTsKKyAgICBzZXRWaWV3KHZpZXcp
OworCisgICAgdmlldy0+c2V0UGFyZW50V2lkZ2V0KDApOworfQorCitGcmFtZVF0OjpGcmFtZVF0
KFFXaWRnZXQqIHBhcmVudCkKKyAgICAgOiBGcmFtZShuZXcgUGFnZSwgMCkKK3sKKyAgICBpbml0
KCk7CisgICAgcGFnZSgpLT5zZXRNYWluRnJhbWUodGhpcyk7CisgICAgRnJhbWVWaWV3KiB2aWV3
ID0gbmV3IEZyYW1lVmlldyh0aGlzKTsKKyAgICBzZXRWaWV3KHZpZXcpOworCisgICAgdmlldy0+
c2V0UGFyZW50V2lkZ2V0KHBhcmVudCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6aW5pdCgpCit7Cisg
ICAgZC0+bV9leHRlbnNpb24gPSBuZXcgQnJvd3NlckV4dGVuc2lvblF0KHRoaXMpOworICAgIFNl
dHRpbmdzKiBzZXR0aW5ncyA9IG5ldyBTZXR0aW5nczsKKyAgICBzZXR0aW5ncy0+c2V0QXV0b0xv
YWRJbWFnZXModHJ1ZSk7CisgICAgc2V0dGluZ3MtPnNldE1pbkZvbnRTaXplKDUpOworICAgIHNl
dHRpbmdzLT5zZXRNaW5Mb2dpY2FsRm9udFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldFNob3Vs
ZFByaW50QmFja2dyb3VuZHModHJ1ZSk7CisgICAgc2V0dGluZ3MtPnNldElzSmF2YVNjcmlwdEVu
YWJsZWQodHJ1ZSk7CisgCisgICAgc2V0dGluZ3MtPnNldE1lZGl1bUZpeGVkRm9udFNpemUoMTQp
OworICAgIHNldHRpbmdzLT5zZXRNZWRpdW1Gb250U2l6ZSgxNCk7CisgICAgc2V0dGluZ3MtPnNl
dFNlcmlmRm9udE5hbWUoIlRpbWVzIE5ldyBSb21hbiIpOworICAgIHNldHRpbmdzLT5zZXRTYW5z
U2VyaWZGb250TmFtZSgiQXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250TmFtZSgi
Q291cmllciIpOworICAgIHNldHRpbmdzLT5zZXRTdGRGb250TmFtZSgiQXJpYWwiKTsKKyAgICBz
ZXRTZXR0aW5ncyhzZXR0aW5ncyk7Cit9CisKK0ZyYW1lUXQ6On5GcmFtZVF0KCkKK3sKKyAgICBj
bG9zZVVSTCgpOyAvLyBoYWNrIHRvIGF2b2lkIGNyYXNoLiAgbXVzdCBmaXggaW4gd2Via2l0IChG
cmFtZSkuICBGSVhNRQorfQorCitib29sIEZyYW1lUXQ6Om9wZW5VUkwoY29uc3QgS1VSTCYgdXJs
KQoreworICAgIHFEZWJ1Zygib3BlblVSTCglcykiLCB1cmwudXJsKCkubGF0aW4xKCkpOworICAg
IGRpZE9wZW5VUkwodXJsKTsKKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChyZXNv
dXJjZVJlcXVlc3QoKSk7CisgICAgcmVxdWVzdC5tX3Jlc3BvbnNlTUlNRVR5cGUgPSAiaW1hZ2Uv
c3ZnK3htbCI7CisgICAgc2V0UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpOworCisgICAgYmVnaW4o
dXJsKTsKKyAgICBSZXNvdXJjZUxvYWRlciogam9iID0gbmV3IFJlc291cmNlTG9hZGVyKHRoaXMs
ICJHRVQiLCB1cmwpOworICAgIGpvYi0+c3RhcnQoZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEZyYW1lUXQ6OnN1Ym1pdEZvcm0oY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHFEZWJ1ZygiRnJhbWVRdDo6c3VibWl0Rm9y
bSgpIik7CisKKyAgICAvLyBGSVhNRTogdGhpcyBpcyBhIGhhY2sgaW5oZXJpdGVkIGZyb20gRnJh
bWVNYWMsIGFuZCBzaG91bGQgYmUgcHVzaGVkIGludG8gRnJhbWUKKyAgICBpZihkLT5tX3N1Ym1p
dHRlZEZvcm1VUkwgPT0gcmVxdWVzdC51cmwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZC0+
bV9zdWJtaXR0ZWRGb3JtVVJMID0gcmVxdWVzdC51cmwoKTsKKworICAgIC8qIFRPRE86IE9uY2Ug
d2UgaGF2ZSBhIEtQYXJ0IC0gbmFtZWQgIkZyYW1lUGFydFF0IiAtIHdlIGNhbiBsZXQgdGhhdCBp
bmhlcml0IGZyb20gRnJhbWVRdENsaWVudCBhbmQgaW1wbGVtZW50IHRoZSBmdW5jdGlvbnMuLi4p
CisgICAgaWYobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5zdWJtaXRGb3JtKHJlcXVlc3Qu
ZG9Qb3N0KCkgPyAiUE9TVCIgOiAiR0VUIiwgcmVxdWVzdC51cmwoKSwgJnJlcXVlc3QucG9zdERh
dGEpOworICAgICovCisKKyAgICBiZWdpbihyZXF1ZXN0LnVybCgpKTsKKworICAgIFJlc291cmNl
TG9hZGVyKiBqb2IgPSBuZXcgUmVzb3VyY2VMb2FkZXIodGhpcywgcmVxdWVzdC5kb1Bvc3QoKSA/
ICJQT1NUIiA6ICJHRVQiLCByZXF1ZXN0LnVybCgpLCByZXF1ZXN0LnBvc3REYXRhKTsKKyAgICBq
b2ItPnN0YXJ0KGRvY3VtZW50KCktPmRvY0xvYWRlcigpKTsKKyAgICAKKyAgICBjbGVhclJlY29y
ZGVkRm9ybVZhbHVlcygpOworfQorCit2b2lkIEZyYW1lUXQ6OnVybFNlbGVjdGVkKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICAvL25lZWQgdG8gcG90ZW50aWFsbHkgdXBk
YXRlTG9jYXRpb25CYXIoc3RyLmFzY2lpKCkpOyBvciBub3RpZnkgc3lzIG9mIG5ldyB1cmwgbXli
ZSBldmVudCBvciBjYWxsYmFjaworICAgIGNvbnN0IEtVUkwgdXJsID0gcmVxdWVzdC51cmwoKTsK
KyAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLT4gTE9BRElORyBORVcgVVJMICVzIFxuIiwg
dXJsLnVybCgpLmFzY2lpKCkpOworICAgIGRpZE9wZW5VUkwodXJsKTsKKyAgICBiZWdpbih1cmwp
OworICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBuZXcgUmVzb3VyY2VMb2FkZXIodGhpcywgIkdF
VCIsIHVybCk7CisgICAgam9iLT5zdGFydChkb2N1bWVudCgpLT5kb2NMb2FkZXIoKSk7Cit9CisK
K1N0cmluZyBGcmFtZVF0Ojp1c2VyQWdlbnQoKSBjb25zdAoreworICAgIHJldHVybiAiTW96aWxs
YS81LjAgKFBDOyBVOyBJbnRlbDsgTGludXg7IGVuKSBBcHBsZVdlYktpdC80MjArIChLSFRNTCwg
bGlrZSBHZWNrbykiOworfQorCit2b2lkIEZyYW1lUXQ6OnJ1bkphdmFTY3JpcHRBbGVydChTdHJp
bmcgY29uc3QmIG1lc3NhZ2UpCit7CisgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHZpZXco
KS0+cXdpZGdldCgpLCAiSmF2YVNjcmlwdCIsIHRvUVN0cmluZyhtZXNzYWdlKSk7Cit9CisKK2Jv
b2wgRnJhbWVRdDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oU3RyaW5nIGNvbnN0JiBtZXNzYWdlKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJh
bWVRdDo6bG9jYXRpb25iYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEZyYW1lUXQ6OnNldFRpdGxlKGNvbnN0IFN0cmluZyYg
dGl0bGUpCit7CisgICAgaWYodmlldygpICYmIHZpZXcoKS0+cGFyZW50V2lkZ2V0KCkpCisgICAg
ICAgIHZpZXcoKS0+cGFyZW50V2lkZ2V0KCktPnNldFdpbmRvd1RpdGxlKHRvUVN0cmluZyh0aXRs
ZSkpOworfQorCitGcmFtZSogRnJhbWVRdDo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgbmFtZSwgRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBGcmFtZVF0OjpwYXNz
V2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoTm9kZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVRdDo6cGFzc1N1YmZyYW1lRXZlbnRU
b1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqKQorewor
ICAgIGlmKG1ldi50YXJnZXROb2RlKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitPYmplY3RDb250ZW50VHlwZSBGcmFtZVF0OjpvYmplY3RD
b250ZW50VHlwZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBPYmplY3RDb250ZW50VHlwZSgpOworfQorCitQ
bHVnaW4qIEZyYW1lUXQ6OmNyZWF0ZVBsdWdpbihFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgRnJhbWVR
dDo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGcmFtZVF0OjptZW51YmFyVmlz
aWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBGcmFtZVF0OjpwZXJzb25hbGJhclZpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJhbWVRdDo6c3RhdHVzYmFyVmlzaWJs
ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBGcmFtZVF0Ojp0b29sYmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGcmFtZVF0OjpjcmVhdGVFbXB0eURvY3VtZW50KCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitSYW5nZSogRnJhbWVRdDo6bWFya2VkVGV4
dFJhbmdlKCkgY29uc3QKK3sKKyAgICAvLyBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OworfQorCitTdHJpbmcgRnJhbWVRdDo6aW5jb21pbmdSZWZlcnJlcigpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBGcmFt
ZVF0OjptaW1lVHlwZUZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6
bWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6bWFya01pc3NwZWxs
aW5ncyhjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitib29sIEZyYW1lUXQ6Omxhc3RFdmVudElzTW91c2VVcCgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVRdDo6
c2F2ZURvY3VtZW50U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
RnJhbWVRdDo6cmVzdG9yZURvY3VtZW50U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgRnJhbWVRdDo6b3BlblVSTFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6OnNjaGVkdWxl
Q2xvc2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6dW5m
b2N1c1dpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0
Ojpmb2N1c1dpbmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEZy
YW1lUXQ6Om92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKK3ZvaWQgRnJhbWVRdDo6YWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBGcmFtZVF0OjpydW5KYXZhU2NyaXB0UHJv
bXB0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0
cmluZyYgcmVzdWx0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWVRdDo6Z2V0RW1iZWRJbnN0YW5j
ZUZvcldpZGdldChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZVF0OjpnZXRPYmplY3RJbnN0
YW5jZUZvcldpZGdldChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZVF0OjpnZXRBcHBsZXRJ
bnN0YW5jZUZvcldpZGdldChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjb25z
dCBFZGl0Q29tbWFuZFB0ciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBG
cmFtZVF0OjpyZWdpc3RlckNvbW1hbmRGb3JSZWRvKGNvbnN0IEVkaXRDb21tYW5kUHRyJikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6OmNsZWFyVW5kb1JlZG9P
cGVyYXRpb25zKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6
Omlzc3VlVW5kb0NvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
RnJhbWVRdDo6aXNzdWVSZWRvQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBGcmFtZVF0Ojppc3N1ZUN1dENvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6aXNzdWVDb3B5Q29tbWFuZCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojppc3N1ZVBhc3RlQ29tbWFuZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojppc3N1ZVBhc3RlQW5kTWF0
Y2hTdHlsZUNvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWVRdDo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZyYW1lUXQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0
aW9uQ29udHJvbGxlciYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRl
bnRzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lUXQ6OnNob3Vs
ZENoYW5nZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBvbGRTZWxlY3Rpb24s
IGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmlu
aXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cGFydENsZWFyZWRJbkJlZ2lu
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lUXQ6OmNhbkdvQmFj
a09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVRdDo6aGFuZGxlZE9ubG9hZEV2ZW50
cygpCit7CisgICAgLy8gbm8tb3AKK30KKworYm9vbCBGcmFtZVF0OjpjYW5QYXN0ZSgpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
RnJhbWVRdDo6Y2FuUmVkbygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVRdDo6Y2FuVW5kbygpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVRdDo6
cHJpbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVRdDo6c2hv
dWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVRdDo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50JiBrZXlFdmVudCkKK3sKKyAgICBib29sIHJlc3VsdDsKKworICAgIC8vIENo
ZWNrIGZvciBjYXNlcyB3aGVyZSB3ZSBhcmUgdG9vIGVhcmx5IGZvciBldmVudHMgLS0gcG9zc2li
bGUgdW5tYXRjaGVkIGtleSB1cAorICAgIC8vIGZyb20gcHJlc3NpbmcgcmV0dXJuIGluIHRoZSBs
b2NhdGlvbiBiYXIuCisgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3VtZW50KCk7CisgICAgaWYoIWRv
YykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSAqbm9kZSA9IGRvYy0+Zm9jdXNO
b2RlKCk7CisgICAgaWYoIW5vZGUpIHsKKyAgICAgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQo
KSkgeworICAgICAgICAgICAgbm9kZSA9IGRvYy0+Ym9keSgpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgbm9kZSA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZighbm9kZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYoIWtleUV2ZW50LmlzS2V5VXAoKSkgeworICAgICAgICBwcmVwYXJl
Rm9yVXNlckFjdGlvbigpOworICAgIH0KKworICAgIHJlc3VsdCA9ICFFdmVudFRhcmdldE5vZGVD
YXN0KG5vZGUpLT5kaXNwYXRjaEtleUV2ZW50KGtleUV2ZW50KTsKKworICAgIC8vIEZJWE1FOiBG
cmFtZU1hYyBoYXMgYSBrZXlEb3duL2tleVByZXNzIGhhY2sgaGVyZSB3aGljaCB3ZSBhcmUgbm90
IGNvcHlpbmcuCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBGcmFtZVF0OjpyZWNlaXZl
ZFJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSkKK3sKKyAgICAvLyBu
by1vcAorfQorCit2b2lkIEZyYW1lUXQ6OnJlY2VpdmVkRGF0YShSZXNvdXJjZUxvYWRlciogam9i
LCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIHdyaXRlKGRhdGEsIGxlbmd0
aCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9hZGVyKiBq
b2IsIFBsYXRmb3JtRGF0YSBkYXRhKQoreworICAgIGVuZCgpOworfQorCit2b2lkIEZyYW1lUXQ6
OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBzZXRGcmFtZUdlb21l
dHJ5KChRUmVjdCkgcik7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0
L1BhdGhRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvUGF0aFF0LmNwcAkoUmV2aXNpb24gMCkKKysr
IHF0L1BhdGhRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXRo
LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlIDxRUGFpbnRlclBhdGg+Cisj
aW5jbHVkZSA8UU1hdHJpeD4KKworI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQYXRoOjpQYXRoKCkKKyAgICA6IG1fcGF0aChuZXcgUVBhaW50ZXJQYXRoKCkpCit7
Cit9CisKK1BhdGg6On5QYXRoKCkKK3sKKyAgICBkZWxldGUgbV9wYXRoOworICAgIG1fcGF0aCA9
IDA7Cit9CisKK1BhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCisgICAgOiBtX3BhdGgobmV3
IFFQYWludGVyUGF0aCgqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQoreworfQorCitQYXRoJiBQYXRo
OjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIpCit7CisgICAgaWYoJm90aGVyICE9IHRoaXMp
CisgICAgeworICAgICAgICBkZWxldGUgbV9wYXRoOworICAgICAgICBtX3BhdGggPSBuZXcgUVBh
aW50ZXJQYXRoKCpvdGhlci5wbGF0Zm9ybVBhdGgoKSk7CisgICAgfQorCisgICAgcmV0dXJuICp0
aGlzOworfQorCitib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAoreworICAgIHJldHVybiBtX3BhdGgtPmNvbnRhaW5zKHBvaW50KTsKK30KKwordm9pZCBQ
YXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQoreworICAgIFFNYXRyaXggbWF0
cml4OworICAgIG1hdHJpeC50cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
KyAgICAqbV9wYXRoID0gKCptX3BhdGgpICogbWF0cml4OworfQorCitGbG9hdFJlY3QgUGF0aDo6
Ym91bmRpbmdSZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wYXRoLT5ib3VuZGluZ1JlY3Qo
KTsKK30KKwordm9pZCBQYXRoOjptb3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCit7Cisg
ICAgbV9wYXRoLT5tb3ZlVG8ocG9pbnQpOworfQorCit2b2lkIFBhdGg6OmFkZExpbmVUbyhjb25z
dCBGbG9hdFBvaW50JiBwKQoreworICAgIG1fcGF0aC0+bGluZVRvKHApOworfQorCit2b2lkIFBh
dGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50
JiBwKQoreworICAgIG1fcGF0aC0+cXVhZFRvKGNwLCBwKTsKK30KKwordm9pZCBQYXRoOjphZGRC
ZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxvYXRQb2ludCYgY3Ay
LCBjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIG1fcGF0aC0+Y3ViaWNUbyhjcDEsIGNwMiwg
cCk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCit7CisgICAgLy9GSVhNRTogYnVzdGVkCisg
ICAgcVdhcm5pbmcoImFyY1RvIGlzIGJ1c3RlZCIpOworICAgIG1fcGF0aC0+YXJjVG8ocDEueCgp
LCBwMS55KCksIHAyLngoKSwgcDIueSgpLCByYWRpdXMsIDkwKTsKK30KKwordm9pZCBQYXRoOjpj
bG9zZVN1YnBhdGgoKQoreworICAgIG1fcGF0aC0+Y2xvc2VTdWJwYXRoKCk7Cit9CisKKyNkZWZp
bmUgREVHUkVFUyh0KSAoKHQpICogMTgwLjAgLyBNX1BJKQordm9pZCBQYXRoOjphZGRBcmMoY29u
c3QgRmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50
aWNsb2Nrd2lzZSkKK3sKKyAgICBxcmVhbCB4YyA9IHAueCgpOworICAgIHFyZWFsIHljID0gcC55
KCk7CisgICAgcXJlYWwgcmFkaXVzID0gcjsKKworCisgICAgLy8jIyMgSEFDSworICAgIC8vIElu
IFF0IHdlIGRvbid0IHN3aXRjaCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZm9yIGRlZ3JlZXMKKyAg
ICAvLyBhbmQgc3RpbGwgdXNlIHRoZSAwLDAgYXMgYm90dG9tIGxlZnQgZm9yIGRlZ3JlZXMgc28g
d2UgbmVlZAorICAgIC8vIHRvIHN3aXRjaAorICAgIHNhciA9IC1zYXI7CisgICAgZWFyID0gLWVh
cjsKKyAgICBhbnRpY2xvY2t3aXNlID0gIWFudGljbG9ja3dpc2U7CisgICAgLy9lbmQgaGFjawor
CisgICAgZmxvYXQgc2EgPSBERUdSRUVTKHNhcik7CisgICAgZmxvYXQgZWEgPSBERUdSRUVTKGVh
cik7CisKKyAgICBkb3VibGUgc3BhbiA9IDA7CisKKyAgICBkb3VibGUgeHMgICAgID0geGMgLSBy
YWRpdXM7CisgICAgZG91YmxlIHlzICAgICA9IHljIC0gcmFkaXVzOworICAgIGRvdWJsZSB3aWR0
aCAgPSByYWRpdXMqMjsKKyAgICBkb3VibGUgaGVpZ2h0ID0gcmFkaXVzKjI7CisKKyAgICBpZiAo
IWFudGljbG9ja3dpc2UgJiYgKGVhIDwgc2EpKSB7CisgICAgICAgIHNwYW4gKz0gMzYwOworICAg
IH0gZWxzZSBpZiAoYW50aWNsb2Nrd2lzZSAmJiAoc2EgPCBlYSkpIHsKKyAgICAgICAgc3BhbiAt
PSAzNjA7CisgICAgfQorCisgICAgLy8jIyMgdGhpcyBpcyBhbHNvIGR1ZSB0byBzd2l0Y2hlZCBj
b29yZGluYXRlIHN5c3RlbQorICAgIC8vIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGEgMCBzcGFuIGlu
c3RlYWQgb2YgMzYwCisgICAgaWYgKCEocUZ1enp5Q29tcGFyZShzcGFuICsgKGVhIC0gc2EpLCAw
LjApICYmCisgICAgICAgICAgcUZ1enp5Q29tcGFyZShhYnMoc3BhbiksIDM2MC4wKSkpIHsKKyAg
ICAgICAgc3BhbiAgICs9IGVhIC0gc2E7CisgICAgfQorCisgICAgbV9wYXRoLT5tb3ZlVG8oUVBv
aW50Rih4YyArIHJhZGl1cyAgKiBjb3Moc2FyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
eWMgLSByYWRpdXMgICogc2luKHNhcikpKTsKKyAgICBtX3BhdGgtPmFyY1RvKHhzLCB5cywgd2lk
dGgsIGhlaWdodCwgc2EsIHNwYW4pOworfQorCit2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByKQoreworICAgIG1fcGF0aC0+YWRkUmVjdChyLngoKSwgci55KCksIHIud2lkdGgo
KSwgci5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHIpCit7CisgICAgbV9wYXRoLT5hZGRFbGxpcHNlKHIueCgpLCByLnkoKSwgci53aWR0aCgp
LCByLmhlaWdodCgpKTsKK30KKwordm9pZCBQYXRoOjpjbGVhcigpCit7CisgICAgKm1fcGF0aCA9
IFFQYWludGVyUGF0aCgpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBx
dC9MaW5lRWRpdFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9MaW5lRWRpdFF0LmNwcAkoUmV2aXNp
b24gMCkKKysrIHF0L0xpbmVFZGl0UXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9y
Zz4KKyAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTIExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgPFFE
ZWJ1Zz4KKyNpbmNsdWRlIDxRTGluZUVkaXQ+CisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNs
dWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1
ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGluZUVkaXQuaCIKKyNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtTGluZUVkaXQ6OlBsYXRmb3JtTGluZUVkaXQo
UGxhdGZvcm1MaW5lRWRpdDo6VHlwZSB0eXBlKSA6IG1fbGluZUVkaXQoMCksIG1fdHlwZSh0eXBl
KQoreworICAgIHFEZWJ1ZygiUGxhdGZvcm1MaW5lRWRpdDo6UGxhdGZvcm1MaW5lRWRpdCgpLCB0
aGlzPSVwIiwgdGhpcyk7Cit9CisKK1BsYXRmb3JtTGluZUVkaXQ6On5QbGF0Zm9ybUxpbmVFZGl0
KCkKK3sKKyAgICBxRGVidWcoIlBsYXRmb3JtTGluZUVkaXQ6On5QbGF0Zm9ybUxpbmVFZGl0KCki
KTsKK30KKwordm9pZCBQbGF0Zm9ybUxpbmVFZGl0OjpzZXRQYXJlbnRXaWRnZXQoUVdpZGdldCog
cGFyZW50KQoreworICAgIHFEZWJ1ZygiUGxhdGZvcm1MaW5lRWRpdDo6c2V0UGFyZW50V2lkZ2V0
KCksIHBhcmVudD0lcCIsIHBhcmVudCk7CisgICAgV2lkZ2V0OjpzZXRQYXJlbnRXaWRnZXQocGFy
ZW50KTsKKworICAgIFFfQVNTRVJUKG1fbGluZUVkaXQgPT0gMCk7CisgICAgbV9saW5lRWRpdCA9
IG5ldyBRTGluZUVkaXQocGFyZW50KTsKKworICAgIGlmIChtX3R5cGUgPT0gUGFzc3dvcmQpIHsK
KyAgICAgICAgbV9saW5lRWRpdC0+c2V0RWNob01vZGUoUUxpbmVFZGl0OjpQYXNzd29yZCk7Cisg
ICAgfQorCisgICAgc2V0UVdpZGdldChtX2xpbmVFZGl0KTsKK30KKwordm9pZCBQbGF0Zm9ybUxp
bmVFZGl0OjpzZXRDb2xvcnMoY29uc3QgQ29sb3ImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBm
b3JlZ3JvdW5kKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1M
aW5lRWRpdDo6c2V0QWxpZ25tZW50KEhvcml6b250YWxBbGlnbm1lbnQgYWxpZ24pCit7CisgICAg
UXQ6OkFsaWdubWVudCBxdEFsaWduOworCisgICAgc3dpdGNoIChhbGlnbikKKyAgICB7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgQWxpZ25MZWZ0OgorICAgICAgICAgICAgcXRBbGln
biA9IFF0OjpBbGlnbkxlZnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBbGln
blJpZ2h0OgorICAgICAgICAgICAgcXRBbGlnbiA9IFF0OjpBbGlnblJpZ2h0OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWxpZ25IQ2VudGVyOgorICAgICAgICAgICAgcXRBbGln
biA9IFF0OjpBbGlnbkhDZW50ZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBt
X2xpbmVFZGl0LT5zZXRBbGlnbm1lbnQocXRBbGlnbik7Cit9CisKK3ZvaWQgUGxhdGZvcm1MaW5l
RWRpdDo6c2V0Q3Vyc29yUG9zaXRpb24oaW50IHBvcykKK3sKKyAgICBtX2xpbmVFZGl0LT5zZXRD
dXJzb3JQb3NpdGlvbihwb3MpOworfQorCitpbnQgUGxhdGZvcm1MaW5lRWRpdDo6Y3Vyc29yUG9z
aXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBtX2xpbmVFZGl0LT5jdXJzb3JQb3NpdGlvbigp
OworfQorCit2b2lkIFBsYXRmb3JtTGluZUVkaXQ6OnNldEVkaXRlZChib29sKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1MaW5lRWRpdDo6ZWRpdGVkKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBQbGF0Zm9ybUxpbmVFZGl0OjpzZXRGb250KGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgbV9s
aW5lRWRpdC0+c2V0Rm9udCh0b1FGb250KGZvbnQpKTsKK30KKwordm9pZCBQbGF0Zm9ybUxpbmVF
ZGl0OjpzZXRNYXhMZW5ndGgoaW50IGxlbmd0aCkKK3sKKyAgICBtX2xpbmVFZGl0LT5zZXRNYXhM
ZW5ndGgobGVuZ3RoKTsKK30KKworaW50IFBsYXRmb3JtTGluZUVkaXQ6Om1heExlbmd0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbGluZUVkaXQtPm1heExlbmd0aCgpOworfQorCit2b2lkIFBs
YXRmb3JtTGluZUVkaXQ6OnNldFJlYWRPbmx5KGJvb2wgdmFsdWUpCit7CisgICAgbV9saW5lRWRp
dC0+c2V0UmVhZE9ubHkodmFsdWUpOworfQorCitib29sIFBsYXRmb3JtTGluZUVkaXQ6OmlzUmVh
ZE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2xpbmVFZGl0LT5pc1JlYWRPbmx5KCk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1MaW5lRWRpdDo6c2V0VGV4dChjb25zdCBTdHJpbmcmIHN0cikKK3sK
KyAgICBtX2xpbmVFZGl0LT5zZXRUZXh0KHRvUVN0cmluZyhzdHIpKTsKK30KKworU3RyaW5nIFBs
YXRmb3JtTGluZUVkaXQ6OnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBmcm9tUVN0cmluZyht
X2xpbmVFZGl0LT50ZXh0KCkpOworfQorCit2b2lkIFBsYXRmb3JtTGluZUVkaXQ6OnNldFdyaXRp
bmdEaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXIpCit7CisgICAgUXQ6OkxheW91dERpcmVjdGlv
biBxRGlyOworCisgICAgc3dpdGNoKGRpcikKKyAgICB7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIGNhc2UgTFRSOgorICAgICAgICAgICAgcURpciA9IFF0OjpMZWZ0VG9SaWdodDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUTDoKKyAgICAgICAgICAgIHFEaXIgPSBRdDo6
UmlnaHRUb0xlZnQ7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX2xpbmVFZGl0
LT5zZXRMYXlvdXREaXJlY3Rpb24ocURpcik7Cit9CisKK3ZvaWQgUGxhdGZvcm1MaW5lRWRpdDo6
c2VsZWN0QWxsKCkKK3sKKyAgICBtX2xpbmVFZGl0LT5zZWxlY3RBbGwoKTsKK30KKworYm9vbCBQ
bGF0Zm9ybUxpbmVFZGl0OjpoYXNTZWxlY3RlZFRleHQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2xpbmVFZGl0LT5oYXNTZWxlY3RlZFRleHQoKTsKK30KKworaW50IFBsYXRmb3JtTGluZUVkaXQ6
OnNlbGVjdGlvblN0YXJ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saW5lRWRpdC0+c2VsZWN0
aW9uU3RhcnQoKTsKK30KKworU3RyaW5nIFBsYXRmb3JtTGluZUVkaXQ6OnNlbGVjdGVkVGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZyb21RU3RyaW5nKG1fbGluZUVkaXQtPnNlbGVjdGVkVGV4
dCgpKTsKK30KKwordm9pZCBQbGF0Zm9ybUxpbmVFZGl0OjpzZXRTZWxlY3Rpb24oaW50IHN0YXJ0
LCBpbnQgbGVuZ3RoKQoreworICAgIG1fbGluZUVkaXQtPnNldFNlbGVjdGlvbihzdGFydCwgbGVu
Z3RoKTsKK30KKworSW50U2l6ZSBQbGF0Zm9ybUxpbmVFZGl0OjpzaXplRm9yQ2hhcmFjdGVyV2lk
dGgoaW50IG51bUNoYXJhY3RlcnMpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSW50U2l6ZSgpOworfQorCitpbnQgUGxhdGZvcm1MaW5lRWRpdDo6YmFzZWxpbmVQ
b3NpdGlvbihpbnQgaGVpZ2h0KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK1dpZGdldDo6Rm9jdXNQb2xpY3kgUGxhdGZvcm1MaW5lRWRpdDo6Zm9j
dXNQb2xpY3koKSBjb25zdAoreworICAgIHJldHVybiBXaWRnZXQ6OmZvY3VzUG9saWN5KCk7Cit9
CisKK2Jvb2wgUGxhdGZvcm1MaW5lRWRpdDo6Y2hlY2tzRGVzY2VuZGFudHNGb3JGb2N1cygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUGxhdGZvcm1MaW5lRWRpdDo6c2V0
TGl2ZVNlYXJjaChib29sIGxpdmVTZWFyY2gpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBQbGF0Zm9ybUxpbmVFZGl0OjpzZXRBdXRvU2F2ZU5hbWUoY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1MaW5lRWRp
dDo6c2V0TWF4UmVzdWx0cyhpbnQgbWF4UmVzdWx0cykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFBsYXRmb3JtTGluZUVkaXQ6OnNldFBsYWNlaG9sZGVyU3RyaW5nKGNvbnN0
IFN0cmluZyYgcGxhY2Vob2xkZXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBQbGF0Zm9ybUxpbmVFZGl0OjphZGRTZWFyY2hSZXN1bHQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9SZXNvdXJjZUxvYWRl
ckN1cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L1Jlc291cmNlTG9hZGVyQ3VybC5jcHAJKFJldmlz
aW9uIDApCisrKyBxdC9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorIAorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyLmgi
CisKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckludGVy
bmFsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVzb3VyY2VMb2FkZXJJbnRlcm5hbDo6flJlc291cmNlTG9hZGVySW50ZXJu
YWwoKQoreworfQorCitSZXNvdXJjZUxvYWRlcjo6flJlc291cmNlTG9hZGVyKCkKK3sKKyAgICBj
YW5jZWwoKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRlcjo6c3RhcnQoRG9jTG9hZGVyKiBkb2NM
b2FkZXIpCit7CisgICAgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpnZXQoKS0+YWRkKHRoaXMpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlc291cmNlTG9hZGVyOjpjYW5jZWwoKQorewor
ICAgIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0KCktPmNhbmNlbCh0aGlzKTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRlcjo6YXNzZW1ibGVSZXNwb25zZUhlYWRlcnMoKSBjb25zdAoreworICAg
IGlmICghZC0+YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzKSB7CisgICAgICAgIGQtPnJlc3BvbnNl
SGVhZGVycyA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21VdGY4KGQtPnJlc3BvbnNlLnRvVXRmOCgp
LCBkLT5yZXNwb25zZS5sZW5ndGgoKSk7CisgICAgICAgIGQtPmFzc2VtYmxlZFJlc3BvbnNlSGVh
ZGVycyA9IHRydWU7CisgCisgICAgICAgIC8vIFRPRE86IE1vdmUgdGhlIGNsaWVudCBhY3RpdmF0
aW9uIHRvIHJlY2VpdmVkUmVzcG9uc2UoKSwgb25jZQorICAgICAgICAvLyB3ZSB1c2UgS0lPLCBh
bmQgcmVjZWl2ZWRSZXNwb25zZSgpIGlzIGNhbGxlZCBvbmx5IG9uY2UuCisgICAgICAgIGlmIChk
LT5jbGllbnQpIHsKKyAgICAgICAgICAgIGQtPmNsaWVudC0+cmVjZWl2ZWRSZXNwb25zZShjb25z
dF9jYXN0PFJlc291cmNlTG9hZGVyICo+KHRoaXMpLCAoY2hhciAqKSBkLT5yZXNwb25zZS5kYXRh
KCkpOworICAgICAgICB9CisKKyAgICAgICAgZC0+cmVzcG9uc2UgPSBRU3RyaW5nKCk7IC8vIFJl
c2V0CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNoYXJzZXQoKSBj
b25zdAoreworICAgIGlmICghZC0+cmV0cmlldmVkQ2hhcnNldCkgeworICAgICAgICBkLT5yZXRy
aWV2ZWRDaGFyc2V0ID0gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBUT0RPOiBXZSBjYW4ganVzdCBw
YXJzZSB0aGUgaGVhZGVycyBoZXJlLCBidXQgb25jZSB3ZSB1c2UgS0lPCisgICAgLy8gd2UgY2Fu
IHNldCB0aGUgcmVzcG9uc2UgcGFyYW1ldGVyIHRvIHN0aC4gZWxzZSB0aGFuIGEgImNoYXIqIi4K
KyAgICAvLyBJIHNhdmUgbXkgdGltZSBidXQgbm90IGltcGxlbWVudGluZyBpdCBmb3Igbm93IDot
KQorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnJlY2Vp
dmVkUmVzcG9uc2UoY2hhciogcmVzcG9uc2UpCit7CisgICAgUV9BU1NFUlQobWV0aG9kKCkgPT0g
IlBPU1QiKTsKKworICAgIGQtPmFzc2VtYmxlZFJlc3BvbnNlSGVhZGVycyA9IGZhbHNlOworICAg
IGQtPnJldHJpZXZlZENoYXJzZXQgPSBmYWxzZTsKKworICAgIC8vIFRPRE86IFRoaXMgaXMgZmxh
d2VkOgorICAgIC8vIC0gdXN1YWxseSByZWNlaXZlZFJlc3BvbnNlKCkgc2hvdWxkIGJlIGNhbGxl
ZCBfb25jZV8sIHdoZW4gdGhlCisgICAgLy8gICByZXNwb25zZSBpcyBhdmFpbGFibGUgLSBzZWVt
cyB2ZXJ5IHVuZmxleGlibGUgdG8gZG8gdGhhdCB3aXRoIGxpYmN1cmwKKyAgICAvLyAgIChzbyBs
ZXQncyB3YWl0IHVudGlsIGl0IGRpZXMgYW5kIGRvIGl0IHByb3Blcmx5IHdpdGggS0lPIHRoZW4u
KQorICAgIC8vIC0gUVN0cmluZzo6ZnJvbUxhdGluMSgpIGlzIGFsc28gd3JvbmcsIG9mIGNvdXJz
ZS4KKyAgICAvLworICAgIC8vIEFueXdheSwgbGV0J3MgY29sbGVjdCB0aGUgcmVzcG9uc2UgZGF0
YSBoZXJlLCBhcyB0aGUgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyCisgICAgLy8gY2FsbHMgdXMgZm9y
IGV2ZXJ5IGxpbmUgb2YgdGhlIGhlYWRlciBpdCByZWNlaXZlcy4KKyAgICBkLT5yZXNwb25zZSAr
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKHJlc3BvbnNlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvUGxhdGZvcm1Nb3VzZUV2ZW50
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHF0L1BsYXRmb3JtTW91c2VFdmVudFF0LmNwcAkoUmV2aXNp
b24gMCkKKysrIHF0L1BsYXRmb3JtTW91c2VFdmVudFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtk
ZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisKKyNpbmNsdWRlIDxRTW91
c2VFdmVudD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQ6OkN1cnJlbnRFdmVudFRhZyBQbGF0Zm9ybU1vdXNlRXZlbnQ6OmN1cnJlbnRFdmVudCA9IHsg
fTsKKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoUU1vdXNlRXZlbnQq
IGV2ZW50LCBpbnQgY2xpY2tDb3VudCkKK3sKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoZXZl
bnQtPnBvcygpKTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoZXZlbnQtPmdsb2Jh
bFBvcygpKTsKKyAgICBpZiAoZXZlbnQtPmJ1dHRvbigpID09IFF0OjpMZWZ0QnV0dG9uIHx8IChl
dmVudC0+YnV0dG9ucygpICYgUXQ6OkxlZnRCdXR0b24pKSB7CisgICAgICAgIG1fYnV0dG9uID0g
TGVmdEJ1dHRvbjsKKyAgICB9IGVsc2UgaWYgKGV2ZW50LT5idXR0b24oKSA9PSBRdDo6UmlnaHRC
dXR0b24gfHwgKGV2ZW50LT5idXR0b25zKCkgJiBRdDo6UmlnaHRCdXR0b24pKSB7CisgICAgICAg
IG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAgfSBlbHNlIGlmIChldmVudC0+YnV0dG9uKCkg
PT0gUXQ6Ok1pZEJ1dHRvbiB8fCAoZXZlbnQtPmJ1dHRvbnMoKSAmIFF0OjpNaWRCdXR0b24pKSB7
CisgICAgICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOworICAgIH0KKworICAgIG1fY2xpY2tD
b3VudCA9IGNsaWNrQ291bnQ7CisgICAgbV9zaGlmdEtleSA9ICAoZXZlbnQtPm1vZGlmaWVycygp
ICYgUXQ6OlNoaWZ0TW9kaWZpZXIpICE9IDA7CisgICAgbV9jdHJsS2V5ID0gKGV2ZW50LT5tb2Rp
ZmllcnMoKSAmIFF0OjpDb250cm9sTW9kaWZpZXIpICE9IDA7CisgICAgbV9hbHRLZXkgPSAgKGV2
ZW50LT5tb2RpZmllcnMoKSAmIFF0OjpBbHRNb2RpZmllcikgIT0gMDsKKyAgICBtX21ldGFLZXkg
PSAoZXZlbnQtPm1vZGlmaWVycygpICYgUXQ6Ok1ldGFNb2RpZmllcikgIT0gMDsgICAgCit9CisK
K30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0ZvbnREYXRhUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHF0L0ZvbnREYXRhUXQuY3BwCShSZXZpc2lvbiAwKQorKysgcXQvRm9udERhdGFR
dC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4gCisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKwor
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGb250
Q2FjaGUuaCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlw
dGlvbi5oIgorCisjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgRm9udERhdGE6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgUUZvbnRNZXRyaWNzIG1l
dHJpY3MobV9mb250LmZvbnQoKSk7CisgICAgbV9hc2NlbnQgPSBtZXRyaWNzLmFzY2VudCgpOwor
ICAgIG1fZGVzY2VudCA9IG1ldHJpY3MuZGVzY2VudCgpOworICAgIG1fbGluZVNwYWNpbmcgPSBt
ZXRyaWNzLmxpbmVTcGFjaW5nKCk7CisgICAgbV9saW5lR2FwID0gbWV0cmljcy5sZWFkaW5nKCk7
CisgICAgbV94SGVpZ2h0ID0gbWV0cmljcy54SGVpZ2h0KCk7CisgICAgbV9saW5lU3BhY2luZyA9
IG1fYXNjZW50ICsgbV9kZXNjZW50ICsgbV9saW5lR2FwOworfQorCit2b2lkIEZvbnREYXRhOjpw
bGF0Zm9ybURlc3Ryb3koKQoreworfQorCitGb250RGF0YSogRm9udERhdGE6OnNtYWxsQ2Fwc0Zv
bnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAorewor
ICAgIHJldHVybiAwOworfQorCitib29sIEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKK30KKworZmxvYXQg
Rm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gUUZvbnRNZXRyaWNzRihtX2ZvbnQuZm9udCgpKS53aWR0aChRQ2hhcih1c2hvcnQo
Z2x5cGgpKSk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L1JlbmRl
clRoZW1lUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L1JlbmRlclRoZW1lUXQuY3BwCShSZXZpc2lv
biAwKQorKysgcXQvUmVuZGVyVGhlbWVRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzA5
IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAq
ICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8UVN0eWxlPgorI2luY2x1
ZGUgPFFXaWRnZXQ+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVN0eWxlT3B0aW9u
QnV0dG9uPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgor
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyVGhlbWVRdCA6IHB1YmxpYyBSZW5k
ZXJUaGVtZQoreworcHVibGljOgorICAgIFJlbmRlclRoZW1lUXQoKSA6IFJlbmRlclRoZW1lKCkg
eyB9CisKKyAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBhY3R1
YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCisgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworICAgIH0KKyAKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQmFja2dyb3VuZExheWVyJiBiYWNrZ3JvdW5kLCBjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBjb250
cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyUG9wdXBNZW51KiBjcmVhdGVQb3B1
cE1lbnUoUmVuZGVyQXJlbmEqLCBEb2N1bWVudCosIFJlbmRlck1lbnVMaXN0Kik7CisgICAgCitw
cml2YXRlOgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSopIGNvbnN0
OworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhFQXBwZWFyYW5j
ZSkgY29uc3Q7CisKKyAgICBib29sIHN0eWxlUGFpbnRlckFuZFdpZGdldEZvclBhaW50SW5mbyhj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgUVN0eWxlKiYgc3R5bGUsIFFQYWludGVy
KiYgcGFpbnRlciwgUVdpZGdldComIHdpZGdldCkgY29uc3Q7CisKKyAgICBFQXBwZWFyYW5jZSBh
cHBseVRoZW1lKFFTdHlsZU9wdGlvbiYgb3B0aW9uLCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Owor
fTsKKworUmVuZGVyVGhlbWUqIHRoZW1lKCkKK3sKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWVRdCBy
dDsKKyAgICByZXR1cm4gJnJ0OworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYWNrZ3JvdW5kTGF5
ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Cit7Cisg
ICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkQXBwZWFyYW5jZSB8fCBzdHls
ZS0+YXBwZWFyYW5jZSgpID09IFRleHRBcmVhQXBwZWFyYW5jZSkgeworICAgICAgICByZXR1cm4g
c3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcjsKKyAgICB9CisKKyAgICByZXR1cm4gUmVuZGVyVGhl
bWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5k
Q29sb3IpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNv
bnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICBpZiAoIWlzRW5hYmxlZChvKSkgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gQ2hlY2tib3hlcyBvbmx5IGhh
dmUgdGludCB3aGVuIGNoZWNrZWQuCisgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBDaGVja2JveEFwcGVhcmFuY2UpIHsKKyAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZChvKTsKKyAg
ICB9CisKKyAgICAvLyBGb3Igbm93IGFzc3VtZSBvdGhlciBjb250cm9scyBoYXZlIHRpbnQgaWYg
ZW5hYmxlZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjpzeXN0
ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1JlbmRlclBvcHVwTWVudSogUmVuZGVy
VGhlbWVRdDo6Y3JlYXRlUG9wdXBNZW51KFJlbmRlckFyZW5hKiwgRG9jdW1lbnQqLCBSZW5kZXJN
ZW51TGlzdCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZVF0OjphZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3sKKyAgICAvLyBDdXQgb3V0IHRoZSBpbnRyaW5zaWMgbWFyZ2lucyBjb21wbGV0
ZWx5IGlmIHdlIGVuZCB1cCB1c2luZyBhIHNtYWxsIGZvbnQgc2l6ZQorICAgIGlmIChzdHlsZS0+
Zm9udFNpemUoKSA8IDExKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJbnRy
aW5zaWMgbWFyZ2luIHZhbHVlLgorICAgIGNvbnN0IGludCBtID0gMjsKKworICAgIC8vIEZJWE1F
OiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4t
d2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQoKS5xdWlyaygp
KSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luTGVmdChMZW5ndGgobSwgRml4ZWQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luUmlnaHQoKS5xdWlyaygpKSB7
CisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luUmlnaHQoTGVuZ3RoKG0sIEZpeGVkKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7Cisg
ICAgICAgIGlmIChzdHlsZS0+bWFyZ2luVG9wKCkucXVpcmsoKSkgeworICAgICAgICAgICAgc3R5
bGUtPnNldE1hcmdpblRvcChMZW5ndGgobSwgRml4ZWQpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzdHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmsoKSkgeworICAgICAgICAgICAgc3R5bGUt
PnNldE1hcmdpbkJvdHRvbShMZW5ndGgobSwgRml4ZWQpKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworYm9vbCBSZW5kZXJUaGVtZVF0OjpzdHlsZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWludEluZm8o
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIFFTdHlsZSomIHN0eWxlLCBRUGFpbnRl
ciomIHBhaW50ZXIsIFFXaWRnZXQqJiB3aWRnZXQpIGNvbnN0Cit7CisgICAgcGFpbnRlciA9IChp
LnAgPyBzdGF0aWNfY2FzdDxRUGFpbnRlciAqPihpLnAtPnBsYXRmb3JtQ29udGV4dCgpKSA6IDAp
OworICAgIHdpZGdldCA9IChwYWludGVyID8gc3RhdGljX2Nhc3Q8UVdpZGdldCAqPihwYWludGVy
LT5kZXZpY2UoKSkgOiAwKTsKKyAgICBzdHlsZSA9ICh3aWRnZXQgPyB3aWRnZXQtPnN0eWxlKCkg
OiAwKTsKKworICAgIGlmIChwYWludGVyICYmIHdpZGdldCAmJiBzdHlsZSkgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRdDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAg
ICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2Ug
aGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNP
ckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2RlZCBzaXplIG9mIDEzIGlzIHVzZWQu
ICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkgZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZv
eC4KKyAgICAvLyBBdCBkaWZmZXJlbnQgRFBJIHNldHRpbmdzIG9uIFdpbmRvd3MsIHF1ZXJ5aW5n
IHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0aGF0IGFjY291bnRzIGZvcgorICAg
IC8vIHRoZSBoaWdoZXIgRFBJLiAgVW50aWwgb3VyIGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJ
IHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UgY2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncworICAg
IC8vIG1ldHJpY3MuCisgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkp
IHsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgxMywgRml4ZWQpKTsKKyAgICB9CisK
KyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7CisgICAgICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKDEzLCBGaXhlZCkpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJUaGVtZVF0
OjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIFRoaXMg
aXMgdGhlIHNhbWUgYXMgY2hlY2tib3hlcy4KKyAgICBzZXRDaGVja2JveFNpemUoc3R5bGUpOwor
fQorCitib29sIFJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzRm9jdXMoRUFwcGVhcmFuY2UgYXBwZWFy
YW5jZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICAgICAgY2FzZSBQ
dXNoQnV0dG9uQXBwZWFyYW5jZToKKyAgICAgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgorICAg
ICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0VBcHBlYXJhbmNlIFJlbmRlclRoZW1lUXQ6OmFwcGx5VGhl
bWUoUVN0eWxlT3B0aW9uJiBvcHRpb24sIFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICAv
LyBEZWZhdWx0IGJpdHM6IG5vIGZvY3VzLCBubyBtb3VzZSBvdmVyCisgICAgb3B0aW9uLnN0YXRl
ICY9IH4oUVN0eWxlOjpTdGF0ZV9IYXNGb2N1cyB8IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyKTsK
KworICAgIGlmICghaXNFbmFibGVkKG8pKSB7CisgICAgICAgIG9wdGlvbi5zdGF0ZSAmPSB+UVN0
eWxlOjpTdGF0ZV9FbmFibGVkOworICAgIH0KKworICAgIGlmIChpc1JlYWRPbmx5Q29udHJvbChv
KSkgeworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SZWFkT25seTsgLy8g
UmVhZG9ubHkgaXMgc3VwcG9ydGVkIG9uIHRleHRmaWVsZHMuCisgICAgfQorCisgICAgaWYgKHN1
cHBvcnRzRm9jdXMoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQobykpIHsK
KyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7CisgICAgfQor
CisgICAgaWYgKGlzSG92ZXJlZChvKSkgeworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxl
OjpTdGF0ZV9Nb3VzZU92ZXI7CisgICAgfQorCisgICAgaWYgKGlzUHJlc3NlZChvKSkgeworICAg
ICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisgICAgfQorCisgICAg
RUFwcGVhcmFuY2UgcmVzdWx0ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIGlmKHJl
c3VsdCA9PSBSYWRpb0FwcGVhcmFuY2UgfHwgcmVzdWx0ID09IENoZWNrYm94QXBwZWFyYW5jZSkg
eworICAgICAgICBvcHRpb24uc3RhdGUgfD0gKGlzQ2hlY2tlZChvKSA/IFFTdHlsZTo6U3RhdGVf
T24gOiBRU3R5bGU6OlN0YXRlX09mZik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAg
IGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBh
aW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgUVN0eWxlICpzdHlsZSA9IDA7CisgICAgUVBh
aW50ZXIgKnBhaW50ZXIgPSAwOworICAgIFFXaWRnZXQgKndpZGdldCA9IDA7CisgICAgCisgICAg
aWYgKCFzdHlsZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWludEluZm8oaSwgc3R5bGUsIHBhaW50ZXIs
IHdpZGdldCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIFFTdHls
ZU9wdGlvbkJ1dHRvbiBvcHRpb247CisgICAgb3B0aW9uLmluaXRGcm9tKHdpZGdldCk7CisgICAg
b3B0aW9uLnJlY3QgPSByOworCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9y
IGEgYnV0dG9uCisgICAgRUFwcGVhcmFuY2UgYXBwZWFyYW5jZSA9IGFwcGx5VGhlbWUob3B0aW9u
LCBvKTsKKyAgCisgICAgaWYoYXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uQXBwZWFyYW5jZSB8fCBh
cHBlYXJhbmNlID09IEJ1dHRvbkFwcGVhcmFuY2UpIHsKKyAgICAgICAgc3R5bGUtPmRyYXdDb250
cm9sKFFTdHlsZTo6Q0VfUHVzaEJ1dHRvbiwgJm9wdGlvbiwgcGFpbnRlcik7CisgICAgfSBlbHNl
IGlmKGFwcGVhcmFuY2UgPT0gUmFkaW9BcHBlYXJhbmNlKSB7CisgICAgICAgIHN0eWxlLT5kcmF3
Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCAmb3B0aW9uLCBwYWludGVyKTsKKyAgICB9
IGVsc2UgaWYoYXBwZWFyYW5jZSA9PSBDaGVja2JveEFwcGVhcmFuY2UpIHsKKyAgICAgICAgc3R5
bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfQ2hlY2tCb3gsICZvcHRpb24sIHBhaW50ZXIpOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1
c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3sKKyAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFFT
dHlsZSAqc3R5bGUgPSAwOworICAgIFFQYWludGVyICpwYWludGVyID0gMDsKKyAgICBRV2lkZ2V0
ICp3aWRnZXQgPSAwOworICAgIAorICAgIGlmICghc3R5bGVQYWludGVyQW5kV2lkZ2V0Rm9yUGFp
bnRJbmZvKGksIHN0eWxlLCBwYWludGVyLCB3aWRnZXQpKSB7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgCisgICAgUVN0eWxlT3B0aW9uIG9wdGlvbjsKKworICAgIC8vIEdldCB0aGUg
Y29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIGJ1dHRvbgorICAgIEVBcHBlYXJhbmNlIGFwcGVhcmFu
Y2UgPSBhcHBseVRoZW1lKG9wdGlvbiwgbyk7CisgICAgUV9BU1NFUlQoYXBwZWFyYW5jZSA9PSBU
ZXh0RmllbGRBcHBlYXJhbmNlKTsKKworICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4K
KyAgICAvLyBUT0RPOiB0aGlzIGlzIG5vdCBlbm91Z2ggZm9yIHN1cmUhICh1c2UgJ29wdGlvbicu
Li4pCisgICAgcGFpbnRlci0+ZHJhd1JlY3Qocik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L1Jlc291cmNlTG9hZGVyTWFuYWdl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcXQvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmNwcAkoUmV2aXNp
b24gMCkKKysrIHF0L1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAJKFJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJN
YW5hZ2VyLmgiCisKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZGVySW50ZXJuYWwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBpbnQg
c2VsZWN0VGltZW91dE1TID0gNTsKK2NvbnN0IGRvdWJsZSBwb2xsVGltZVNlY29uZHMgPSAwLjA1
OworCitSZXNvdXJjZUxvYWRlck1hbmFnZXI6OlJlc291cmNlTG9hZGVyTWFuYWdlcigpCisgICAg
OiBtX3VzZVNpbXBsZShmYWxzZSkKKyAgICAsIGpvYnMobmV3IEhhc2hTZXQ8UmVzb3VyY2VMb2Fk
ZXIqPikKKyAgICAsIG1fZG93bmxvYWRUaW1lcih0aGlzLCAmUmVzb3VyY2VMb2FkZXJNYW5hZ2Vy
Ojpkb3dubG9hZFRpbWVyQ2FsbGJhY2spCit7CisgICAgY3VybF9nbG9iYWxfaW5pdChDVVJMX0dM
T0JBTF9BTEwpOworICAgIGN1cmxNdWx0aUhhbmRsZSA9IGN1cmxfbXVsdGlfaW5pdCgpOworfQor
CitSZXNvdXJjZUxvYWRlck1hbmFnZXIqIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0KCkKK3sK
KyAgICBzdGF0aWMgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyKiBzX3NpbmdsZXRvbjsKKworICAgIGlm
ICghc19zaW5nbGV0b24pCisgICAgICAgIHNfc2luZ2xldG9uID0gbmV3IFJlc291cmNlTG9hZGVy
TWFuYWdlcjsKKworICAgIHJldHVybiBzX3NpbmdsZXRvbjsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRlck1hbmFnZXI6OnVzZVNpbXBsZVRyYW5zZmVyKGJvb2wgdXNlU2ltcGxlKQoreworICAgIG1f
dXNlU2ltcGxlID0gdXNlU2ltcGxlOworfQorCitzdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJhY2so
dm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBvYmopCit7CisgICAg
UmVzb3VyY2VMb2FkZXIqIGpvYiA9IHN0YXRpY19jYXN0PFJlc291cmNlTG9hZGVyKj4ob2JqKTsK
KyAgICBSZXNvdXJjZUxvYWRlckludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAg
IGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7CisgICAgZC0+Y2xpZW50LT5yZWNlaXZlZERh
dGEoam9iLCBzdGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKKyAgICByZXR1cm4g
dG90YWxTaXplOworfQorCitzdGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwg
c2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogb2JqKQoreworICAgIFJlc291cmNlTG9h
ZGVyKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRlcio+KG9iaik7CisgICAgUmVzb3Vy
Y2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAKKyAgICBpZiAoam9i
LT5tZXRob2QoKSA9PSAiUE9TVCIpIHsKKyAgICAgICAgam9iLT5yZWNlaXZlZFJlc3BvbnNlKHB0
cik7CisgICAgfQorICAgIAorICAgIGludCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7CisgICAg
cmV0dXJuIHRvdGFsU2l6ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmRvd25s
b2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUxvYWRlck1hbmFnZXI+KiB0aW1lcikKK3sK
KyAgICBpZiAoam9icy0+aXNFbXB0eSgpKSB7CisgICAgICAgIG1fZG93bmxvYWRUaW1lci5zdG9w
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV91c2VTaW1wbGUpIHsKKyAg
ICAgICAgZm9yIChIYXNoU2V0PFJlc291cmNlTG9hZGVyKj46Oml0ZXJhdG9yIGl0ID0gam9icy0+
YmVnaW4oKTsgaXQgIT0gam9icy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIFJlc291cmNl
TG9hZGVyKiBqb2IgPSAqaXQ7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRlckludGVybmFsKiBk
ID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAgICAgICAgICAgQ1VSTGNvZGUgcmVzID0gY3VybF9l
YXN5X3BlcmZvcm0oZC0+bV9oYW5kbGUpOworICAgICAgICAgICAgaWYgKHJlcyAhPSBDVVJMRV9P
SykKKyAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yIFdJVEggSk9CICVkXG4iLCByZXMpOwor
ICAgICAgICAgICAgZC0+Y2xpZW50LT5yZWNlaXZlZEFsbERhdGEoam9iLCAwKTsKKyAgICAgICAg
ICAgIGQtPmNsaWVudC0+cmVjZWl2ZWRBbGxEYXRhKGpvYik7CisgICAgICAgICAgICBjdXJsX2Vh
c3lfY2xlYW51cChkLT5tX2hhbmRsZSk7CisgICAgICAgICAgICBkLT5tX2hhbmRsZSA9IDA7Cisg
ICAgICAgIH0KKworICAgICAgICBqb2JzLT5jbGVhcigpOworICAgICAgICBtX2Rvd25sb2FkVGlt
ZXIuc3RvcCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7CisgICAg
ICAgIEZEX1pFUk8oJmZkd3JpdGUpOworICAgICAgICBGRF9aRVJPKCZmZGV4Y2VwKTsKKyAgICAg
ICAgY3VybF9tdWx0aV9mZHNldChjdXJsTXVsdGlIYW5kbGUsICZmZHJlYWQsICZmZHdyaXRlLCAm
ZmRleGNlcCwgJm1heGZkKTsKKyAgICAgICAgaW50IG5ydW5uaW5nOworICAgICAgICBzdHJ1Y3Qg
dGltZXZhbCB0aW1lb3V0OworICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICB0aW1lb3V0LnR2
X3NlYyA9IDA7CisgICAgICAgIHRpbWVvdXQudHZfdXNlYyA9IHNlbGVjdFRpbWVvdXRNUyAqIDEw
MDA7ICAgICAgIC8vIHNlbGVjdCB3YWl0cyBtaWNyb3NlY29uZHMKKyAgICAgICAgcmV0dmFsID0g
OjpzZWxlY3QobWF4ZmQgKyAxLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZ0aW1lb3V0
KTsKKyAgICAgICAgc3dpdGNoIChyZXR2YWwpIHsKKyAgICAgICAgICAgIGNhc2UgLTE6ICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0IGVycm9yCisjaWZuZGVmIE5ERUJVRworICAgICAg
ICAgICAgICAgIHByaW50ZigiJXMsIHNlbGVjdCBlcnJvciglZClcbiIsIF9fUFJFVFRZX0ZVTkNU
SU9OX18scmV0dmFsKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoKi8K
KyAgICAgICAgICAgIGNhc2UgMDogICAgICAgICAgICAgICAgIC8vIHNlbGVjdCB0aW1lb3V0Cisj
aWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgIHByaW50ZigiJXMsIHNlbGVjdCB0aW1lb3V0
ICVkXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLHJldHZhbCk7CisjZW5kaWYKKyAgICAgICAgICAg
ICAgICAvKiBmYWxsdGhyb3VnaC4gdGhpcyBjYW4gYmUgdGhlIGZpcnN0IHBlcmZvcm0gdG8gYmUg
bWFkZSAqLworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAvLyAx
KyBkZXNjcmlwdG9ycyBoYXZlIGRhdGEKKyAgICAgICAgICAgICAgICB3aGlsZSAoQ1VSTE1fQ0FM
TF9NVUxUSV9QRVJGT1JNID09IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsTXVsdGlIYW5kbGUsICZu
cnVubmluZykpCisgICAgICAgICAgICAgICAgICAgIHsgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gY2hlY2sgdGhlIGN1cmwgbWVzc2FnZXMgaW5kaWNhdGluZyBjb21wbGV0ZWQgdHJhbnNmZXJz
CisgICAgICAgIC8vIGFuZCBmcmVlIHRoZWlyIHJlc291cmNlcworICAgICAgICBSZXNvdXJjZUxv
YWRlciogam9iOworICAgICAgICBpbnQgbm1zZ3M7CisgICAgICAgIHdoaWxlIChDVVJMTXNnKiBt
c2cgPSBjdXJsX211bHRpX2luZm9fcmVhZChjdXJsTXVsdGlIYW5kbGUsICZubXNncykpIHsKKyAg
ICAgICAgICAgIGlmIChtc2ctPm1zZyA9PSBDVVJMTVNHX0RPTkUpIHsKKyAgICAgICAgICAgICAg
ICAvLyBmaW5kIHRoZSBub2RlIHdoaWNoIGhhcyBzYW1lIGQtPm1faGFuZGxlIGFzIGNvbXBsZXRl
ZCB0cmFuc2ZlcgorICAgICAgICAgICAgICAgIENVUkwqIGNoYW5kbGUgPSBtc2ctPmVhc3lfaGFu
ZGxlOworICAgICAgICAgICAgICAgIGFzc2VydChjaGFuZGxlKTsKKyAgICAgICAgICAgICAgICBS
ZXNvdXJjZUxvYWRlciAqam9iOworICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGNo
YW5kbGUsIENVUkxJTkZPX1BSSVZBVEUsICZqb2IpOworICAgICAgICAgICAgICAgIGFzc2VydChq
b2IpOyAvL2ZpeG1lOiBhc3NlcnQtPmlmID8KKyAgICAgICAgICAgICAgICAvLyBpZiBmb3VuZCwg
ZGVsZXRlIGl0CisgICAgICAgICAgICAgICAgaWYgKGpvYikgeworICAgICAgICAgICAgICAgICAg
ICBSZXNvdXJjZUxvYWRlckludGVybmFsICpkID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG1zZy0+ZGF0YS5yZXN1bHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ1VSTEVfT0s6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB1c2UgdGhpcyB0byBhdXRoZW50aWNhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b25nIHJlc3BDb2RlID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VybF9lYXN5
X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZyZXNwQ29kZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKGpvYik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
aW50ZigiQ3VybCBFUlJPUiAlc1xuIiwgY3VybF9lYXN5X3N0cmVycm9yKG1zZy0+ZGF0YS5yZXN1
bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ItPnNldEVycm9yKG1zZy0+ZGF0
YS5yZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZShqb2IpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJDdXJs
UmVxdWVzdCBub3QgZm91bmQsIGV2ZW50aG91Z2ggY3VybCBkLT5tX2hhbmRsZSBmaW5pc2hlZFxu
Iik7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWpvYnMtPmlzRW1wdHko
KSkKKyAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGltZVNlY29uZHMp
OworfQorCit2b2lkIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6cmVtb3ZlKFJlc291cmNlTG9hZGVy
KiBqb2IpCit7CisgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJu
YWwoKTsKKyAgICBpZiAoIWQtPm1faGFuZGxlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGpv
YnMtPmNvbnRhaW5zKGpvYikpCisgICAgICAgIGpvYnMtPnJlbW92ZShqb2IpOworICAgIGlmIChq
b2JzLT5pc0VtcHR5KCkpCisgICAgICAgIG1fZG93bmxvYWRUaW1lci5zdG9wKCk7CisgICAgZC0+
Y2xpZW50LT5yZWNlaXZlZEFsbERhdGEoam9iLCAwKTsKKyAgICBkLT5jbGllbnQtPnJlY2VpdmVk
QWxsRGF0YShqb2IpOworICAgIGlmIChkLT5tX2hhbmRsZSkgeworICAgICAgICBjdXJsX211bHRp
X3JlbW92ZV9oYW5kbGUoY3VybE11bHRpSGFuZGxlLCBkLT5tX2hhbmRsZSk7CisgICAgICAgIGN1
cmxfZWFzeV9jbGVhbnVwKGQtPm1faGFuZGxlKTsKKyAgICAgICAgZC0+bV9oYW5kbGUgPSBOVUxM
OworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmFkZChSZXNvdXJjZUxv
YWRlciogam9iKQoreworICAgIGJvb2wgc3RhcnRUaW1lciA9IGpvYnMtPmlzRW1wdHkoKTsKKyAg
ICBSZXNvdXJjZUxvYWRlckludGVybmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAgIERl
cHJlY2F0ZWRTdHJpbmcgdXJsID0gZC0+VVJMLnVybCgpOworICAgIGQtPm1faGFuZGxlID0gY3Vy
bF9lYXN5X2luaXQoKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BU
X1BSSVZBVEUsIGpvYik7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9Q
VF9FUlJPUkJVRkZFUiwgZXJyb3JfYnVmZmVyKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIHdyaXRlQ2FsbGJhY2spOworICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfV1JJVEVEQVRBLCBqb2IpOworICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSEVBREVSRlVOQ1RJT04sIGhlYWRl
ckNhbGxiYWNrKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dS
SVRFSEVBREVSLCBqb2IpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxP
UFRfRk9MTE9XTE9DQVRJT04sIDEpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUs
IENVUkxPUFRfTUFYUkVESVJTLCAxMCk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRs
ZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKyAgICAvLyB1cmwgcHRyIG11c3Qg
cmVtYWluIHZhbGlkIHRocm91Z2ggdGhlIHJlcXVlc3QKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQt
Pm1faGFuZGxlLCBDVVJMT1BUX1VSTCwgdXJsLmFzY2lpKCkpOworCisgICAgaWYgKGpvYi0+bWV0
aG9kKCkgPT0gIlBPU1QiKSB7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcG9zdERhdGEgPSBq
b2ItPnBvc3REYXRhKCkuZmxhdHRlblRvU3RyaW5nKCk7CisKKyAgICAgICAgY2hhciAqcG9zdERh
dGFTdHJpbmcgPSAoY2hhciAqKSBtYWxsb2MocG9zdERhdGEubGVuZ3RoKCkgKyAxKTsKKyAgICAg
ICAgc3RybmNweShwb3N0RGF0YVN0cmluZywgcG9zdERhdGEuYXNjaWkoKSwgcG9zdERhdGEubGVu
Z3RoKCkpOworICAgICAgICBwb3N0RGF0YVN0cmluZ1twb3N0RGF0YS5sZW5ndGgoKV0gPSAnXDAn
OworCisgICAgICAgIC8vIFRPRE86IERvIGl0IHByb3Blcmx5IGFmdGVyIHdlIGdvdCByaWQgb2Yg
bGliY3VybCEgKGFsc28gbGVha3MgdGhlIGhlYWRlcmxpc3QuIGhtcGYuKQorICAgICAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFMsIHBvc3REYXRhU3Ry
aW5nKTsKKyAgICB9CisKKyAgICBpZiAobV91c2VTaW1wbGUpCisgICAgICAgIGpvYnMtPmFkZChq
b2IpOworICAgIGVsc2UgeworICAgICAgICBDVVJMTWNvZGUgcmV0ID0gY3VybF9tdWx0aV9hZGRf
aGFuZGxlKGN1cmxNdWx0aUhhbmRsZSwgZC0+bV9oYW5kbGUpOworICAgICAgICAvLyBkb24ndCBj
YWxsIHBlcmZvcm0sIGJlY2F1c2UgZXZlbnRzIG11c3QgYmUgYXN5bmMKKyAgICAgICAgLy8gdGlt
ZW91dCB3aWxsIG9jY3VyIGFuZCBkbyBjdXJsX211bHRpX3BlcmZvcm0KKyAgICAgICAgaWYgKHJl
dCAmJiByZXQgIT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKSB7CisgICAgICAgICAgICBwcmlu
dGYoIkVycm9yICVkIHN0YXJ0aW5nIGpvYiAlc1xuIiwgcmV0LCBkLT5VUkwudXJsKCkuYXNjaWko
KSk7CisgICAgICAgICAgICBqb2ItPnNldEVycm9yKDEpOworICAgICAgICAgICAgc3RhcnRUaW1l
ciA9ZmFsc2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgam9icy0+YWRkKGpvYik7Cisg
ICAgfQorICAgIGlmIChzdGFydFRpbWVyKQorICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RhcnRP
bmVTaG90KHBvbGxUaW1lU2Vjb25kcyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2Vy
OjpjYW5jZWwoUmVzb3VyY2VMb2FkZXIqIGpvYikKK3sKKyAgICByZW1vdmUoam9iKTsKKyAgICBq
b2ItPnNldEVycm9yKDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKy8vIHZpbTog
dHM9NCBzdz00IGV0CkluZGV4OiBxdC9Gb250UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0ZvbnRR
dC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9Gb250UXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxl
ckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gPHNhbmRmZWxk
QGtkZS5vcmc+CisgKiAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKworI2luY2x1ZGUgIkZvbnREYXRhLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNs
dWRlIDxRRGVidWc+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250OjpkcmF3R2x5
cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250RGF0YSogZm9u
dCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
IGludCBmcm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
K3sKKyAgICBRUGFpbnRlciYgcCA9ICpncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OworCisgICAgQ29sb3IgY29sb3IgPSBncmFwaGljc0NvbnRleHQtPnBlbigpLmNvbG9yKCk7Cisg
ICAgcC5zZXRQZW4oUUNvbG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVl
KCkpKTsKKyAgICBwLnNldEZvbnQoZm9udC0+cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsKKworICAg
IFFDaGFyKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PFFDaGFyKj4oZ2x5cGhCdWZmZXIuZ2x5
cGhzKGZyb20pKTsKKyAgICBRU3RyaW5nIHN0ciA9IFFTdHJpbmc6OmZyb21SYXdEYXRhKGJ1ZmZl
ciwgbnVtR2x5cGhzKTsKKworICAgIHAuZHJhd1RleHQoUVBvaW50Rihwb2ludC54KCkscG9pbnQu
eSgpKSwgc3RyKTsKK30KKwordm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgLy8gIyMjIHN0eWxlLCBydW4uZnJvbSgpL2xl
bmd0aCgpIGN1dC1vZmYKKyAgICBjdHgtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3VGV4dChwb2lu
dC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQueSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmc6OmZyb21SYXdEYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihydW4uY2hhcmFjdGVycygpICsgcnVuLmZy
b20oKSksIHJ1bi5sZW5ndGgoKSkpOworfQorCitmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmKSBjb25zdAorewor
ICAgIC8vICMjIyBzdHlsZQorICAgIFFGb250TWV0cmljc0YgbWV0cmljcyhwcmltYXJ5Rm9udCgp
LT5tX2ZvbnQuZm9udCgpKTsKKyAgICByZXR1cm4gbWV0cmljcy53aWR0aChRU3RyaW5nOjpmcm9t
UmF3RGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IFFDaGFyKj4ocnVuLmNoYXJhY3RlcnMoKSAr
IHJ1bi5mcm9tKCkpLCBydW4ubGVuZ3RoKCkpKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9
NCBldApJbmRleDogcXQvSW50UmVjdFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9JbnRSZWN0UXQu
Y3BwCShSZXZpc2lvbiAwKQorKysgcXQvSW50UmVjdFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtk
ZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCisjaW5jbHVkZSA8UVJlY3Q+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworSW50UmVjdDo6SW50UmVjdChjb25zdCBRUmVjdCYgcikKKyAgICA6
IG1fbG9jYXRpb24oci50b3BMZWZ0KCkpCisgICAgICAsIG1fc2l6ZShyLndpZHRoKCksIHIuaGVp
Z2h0KCkpCit7Cit9CisKK0ludFJlY3Q6Om9wZXJhdG9yIFFSZWN0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gUVJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsKK30KKworfQorCisvLyB2
aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvQ29tYm9Cb3hRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cXQvQ29tYm9Cb3hRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9Db21ib0JveFF0LmNwcAkoUmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgPFFDb21ib0JveD4KKworI2luY2x1ZGUgIlBsYXRmb3Jt
Q29tYm9Cb3guaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgIkhlbHBlclF0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGxhdGZvcm1D
b21ib0JveDo6UGxhdGZvcm1Db21ib0JveCgpCisgICAgOiBXaWRnZXQoKQorICAgICAgLCBtX2Nv
bWJvQm94KDApCit7CisgICAgcURlYnVnKCJQbGF0Zm9ybUNvbWJvQm94OjpQbGF0Zm9ybUNvbWJv
Qm94KCksIHRoaXM9JXAiLCB0aGlzKTsKK30KKworUGxhdGZvcm1Db21ib0JveDo6flBsYXRmb3Jt
Q29tYm9Cb3goKQoreworICAgIHFEZWJ1ZygiUGxhdGZvcm1Db21ib0JveDo6flBsYXRmb3JtQ29t
Ym9Cb3goKSwgdGhpcz0lcCIsIHRoaXMpOworfQorCit2b2lkIFBsYXRmb3JtQ29tYm9Cb3g6OnNl
dFBhcmVudFdpZGdldChRV2lkZ2V0KiBwYXJlbnQpCit7CisgICAgcURlYnVnKCJQbGF0Zm9ybUNv
bWJvQm94OjpzZXRQYXJlbnRXaWRnZXQoKSwgcGFyZW50PSVwIiwgcGFyZW50KTsKKyAgICBXaWRn
ZXQ6OnNldFBhcmVudFdpZGdldChwYXJlbnQpOworCisgICAgUV9BU1NFUlQobV9jb21ib0JveCA9
PSAwKTsKKyAgICBtX2NvbWJvQm94ID0gbmV3IFFDb21ib0JveChwYXJlbnQpOworCisgICAgc2V0
UVdpZGdldChtX2NvbWJvQm94KTsKK30KKwordm9pZCBQbGF0Zm9ybUNvbWJvQm94OjpjbGVhcigp
Cit7CisgICAgbV9jb21ib0JveC0+Y2xlYXIoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNvbWJvQm94
OjphcHBlbmRJdGVtKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHRleHQsIGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBtX2NvbWJvQm94LT5hZGRJdGVtKHRvUVN0cmluZyh0ZXh0KSk7Cit9CisKK3ZvaWQg
UGxhdGZvcm1Db21ib0JveDo6YXBwZW5kR3JvdXBMYWJlbChjb25zdCBEZXByZWNhdGVkU3RyaW5n
JiB0ZXh0KQoreworICAgIC8vIFRPRE86IEdyb3VwIGxhYmVsPworICAgIG1fY29tYm9Cb3gtPmFk
ZEl0ZW0odG9RU3RyaW5nKHRleHQpKTsKK30KKwordm9pZCBQbGF0Zm9ybUNvbWJvQm94OjphcHBl
bmRTZXBhcmF0b3IoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1Db21ib0JveDo6c2V0Q3VycmVudEl0ZW0oaW50IGluZGV4KQoreworICAgIG1fY29tYm9Cb3gt
PnNldEN1cnJlbnRJbmRleChpbmRleCk7Cit9CisKK0ludFNpemUgUGxhdGZvcm1Db21ib0JveDo6
c2l6ZUhpbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbWJvQm94LT5zaXplSGludCgpOwor
fQorCitJbnRSZWN0IFBsYXRmb3JtQ29tYm9Cb3g6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAorewor
ICAgIHJldHVybiBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNv
bWJvQm94OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJu
IFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyKTsKK30KKworaW50IFBsYXRmb3JtQ29tYm9Cb3g6
OmJhc2VsaW5lUG9zaXRpb24oaW50IGhlaWdodCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFBsYXRmb3JtQ29tYm9Cb3g6OnNldEZvbnQo
Y29uc3QgRm9udCYgZm9udCkKK3sKKyAgICBtX2NvbWJvQm94LT5zZXRGb250KHRvUUZvbnQoZm9u
dCkpOworfQorCitXaWRnZXQ6OkZvY3VzUG9saWN5IFBsYXRmb3JtQ29tYm9Cb3g6OmZvY3VzUG9s
aWN5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2lkZ2V0Ojpmb2N1c1BvbGljeSgpOworfQorCit2
b2lkIFBsYXRmb3JtQ29tYm9Cb3g6Oml0ZW1TZWxlY3RlZCgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNvbWJvQm94OjpzZXRXcml0aW5nRGlyZWN0aW9uKFRl
eHREaXJlY3Rpb24gZGlyKQoreworICAgIFF0OjpMYXlvdXREaXJlY3Rpb24gcURpcjsKKworICAg
IHN3aXRjaChkaXIpCisgICAgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIExUUjoK
KyAgICAgICAgICAgIHFEaXIgPSBRdDo6TGVmdFRvUmlnaHQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBSVEw6CisgICAgICAgICAgICBxRGlyID0gUXQ6OlJpZ2h0VG9MZWZ0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jb21ib0JveC0+c2V0TGF5b3V0RGly
ZWN0aW9uKHFEaXIpOworfQorCit2b2lkIFBsYXRmb3JtQ29tYm9Cb3g6OnBvcHVsYXRlKCkKK3sK
KyAgICBwb3B1bGF0ZU1lbnUoKTsKK30KKwordm9pZCBQbGF0Zm9ybUNvbWJvQm94Ojpwb3B1bGF0
ZU1lbnUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KKworLy8gdmltOiB0cz00
IHN3PTQgZXQKSW5kZXg6IHF0L0NhbnZhc1F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9DYW52YXNR
dC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9DYW52YXNRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0Br
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
IkNhbnZhc1F0LmgiCisjaW5jbHVkZSAiQ2FudmFzUXQubW9jIgorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRnJhbWVRdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIlR5cGluZ0NvbW1hbmQuaCIKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgorCisjaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2lu
Y2x1ZGUgPFFQYWludEV2ZW50PgorI2luY2x1ZGUgPFFNb3VzZUV2ZW50PgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0NhbnZhc1F0OjpDYW52YXNRdChTY3JvbGxWaWV3KiBmcmFtZVZpZXcsIFFX
aWRnZXQqIHBhcmVudCkKKyAgICA6IFFXaWRnZXQocGFyZW50KQorICAgICAgLCBtX2ZyYW1lVmll
dyhmcmFtZVZpZXcpCit7CisgICAgc2V0TW91c2VUcmFja2luZyh0cnVlKTsKKyAgICBzZXRGb2N1
c1BvbGljeShRdDo6U3Ryb25nRm9jdXMpOworfQorCit2b2lkIENhbnZhc1F0OjpwYWludEV2ZW50
KFFQYWludEV2ZW50KiBldikKK3sKKyAgICBGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4obV9mcmFtZVZpZXcpOworICAgIGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBRUmVjdCBjbGlwID0gZXYtPnJlY3QoKTsKKworICAgIFFQYWlu
dGVyIHAodGhpcyk7CisgICAgR3JhcGhpY3NDb250ZXh0IGN0eCgmcCk7CisgICAgZnYtPmZyYW1l
KCktPnBhaW50KCZjdHgsIGNsaXApOworfQorCitRU2l6ZSBDYW52YXNRdDo6c2l6ZUhpbnQoKSBj
b25zdAoreworICAgIHJldHVybiBRU2l6ZSgxMDI0LCA3NjgpOworfQorCit2b2lkIENhbnZhc1F0
Ojptb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCogZXYpCit7CisgICAgRnJhbWVWaWV3KiBmdiA9
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fZnJhbWVWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFm
di0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnYtPmhhbmRsZU1vdXNlTW92ZUV2
ZW50KFBsYXRmb3JtTW91c2VFdmVudChldiwgMCkpOworfQorCit2b2lkIENhbnZhc1F0Ojptb3Vz
ZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQoreworICAgIEZyYW1lVmlldyogZnYgPSBzdGF0
aWNfY2FzdDxGcmFtZVZpZXcqPihtX2ZyYW1lVmlldyk7CisgICAgaWYgKCFmdiB8fCAhZnYtPmZy
YW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZ2LT5oYW5kbGVNb3VzZVByZXNzRXZlbnQo
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2LCAxKSk7Cit9CisKK3ZvaWQgQ2FudmFzUXQ6Om1vdXNlUmVs
ZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiBldikKK3sKKyAgICBGcmFtZVZpZXcqIGZ2ID0gc3RhdGlj
X2Nhc3Q8RnJhbWVWaWV3Kj4obV9mcmFtZVZpZXcpOworICAgIGlmICghZnYgfHwgIWZ2LT5mcmFt
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmdi0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQo
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2LCAwKSk7Cit9CisKK3ZvaWQgQ2FudmFzUXQ6OmtleVByZXNz
RXZlbnQoUUtleUV2ZW50KiBldikKK3sKKyAgICBoYW5kbGVLZXlFdmVudChldiwgZmFsc2UpOwor
fQorCit2b2lkIENhbnZhc1F0OjprZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50KiBldikKK3sKKyAg
ICBoYW5kbGVLZXlFdmVudChldiwgdHJ1ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUXQ6OmhhbmRsZUtl
eUV2ZW50KFFLZXlFdmVudCogZXYsIGJvb2wgaXNLZXlVcCkKK3sKKyAgICBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQga2V2ZW50KGV2LCBpc0tleVVwKTsKKworICAgIEZyYW1lVmlldyogZnYgPSBzdGF0
aWNfY2FzdDxGcmFtZVZpZXcqPihtX2ZyYW1lVmlldyk7CisgICAgRnJhbWVRdCogZnJhbWUgPSAo
ZnYgPyBzdGF0aWNfY2FzdDxGcmFtZVF0Kj4oZnYtPmZyYW1lKCkpIDogMCk7CisgICAgaWYgKCFm
cmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBoYW5kbGVkID0gZnJhbWUtPmtleUV2
ZW50KGtldmVudCk7CisKKyAgICBpZiAoIWhhbmRsZWQgJiYgIWtldmVudC5pc0tleVVwKCkpIHsK
KyAgICAgICAgTm9kZSogc3RhcnQgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7
CisgICAgICAgIGlmIChzdGFydCAmJiBzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgeworICAg
ICAgICAgICAgc3dpdGNoKGtldmVudC5XaW5kb3dzS2V5Q29kZSgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBWS19CQUNLOgorICAgICAgICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxl
dGVLZXlQcmVzc2VkKGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19ERUxFVEU6CisgICAgICAgICAgICAgICAgICAg
IFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKGZyYW1lLT5kb2N1bWVudCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19M
RUZUOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KFNlbGVj
dGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkxFRlQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigp
Lm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpS
SUdIVCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIFZLX1VQOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCkubW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkJBQ0tXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVktfRE9XTjoKKyAgICAgICAgICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpN
T1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJELCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZnJhbWUtPmRvY3Vt
ZW50KCksIGtldmVudC50ZXh0KCksIGZhbHNlKTsKKworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRPRE86
IGRvU2Nyb2xsIHN0dWZmKCkhCisgICAgfQorfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0
CkluZGV4OiBxdC9QYWdlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L1BhZ2VRdC5jcHAJKFJldmlz
aW9uIDApCisrKyBxdC9QYWdlUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSA8UURlYnVnPgorI2lu
Y2x1ZGUgPFFXaWRnZXQ+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBRV2lkZ2V0ICpy
b290V2luZG93Rm9yRnJhbWUoY29uc3QgRnJhbWUqIGZyYW1lKQoreworICAgIEZyYW1lVmlldyAq
ZnJhbWVWaWV3ID0gKGZyYW1lID8gZnJhbWUtPnZpZXcoKSA6IDApOworICAgIGlmICghZnJhbWVW
aWV3KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBmcmFtZVZpZXct
PnF3aWRnZXQoKTsKK30KKworRmxvYXRSZWN0IFBhZ2U6OndpbmRvd1JlY3QoKSBjb25zdAorewor
ICAgIFFXaWRnZXQqIHdpZGdldCA9IHJvb3RXaW5kb3dGb3JGcmFtZShtYWluRnJhbWUoKSk7Cisg
ICAgaWYgKCF3aWRnZXQpIHsKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIH0KKwor
ICAgIHFEZWJ1ZygpIDw8ICIgUGFnZTo6d2luZG93UmVjdCgpIC0+ICIgPDwgKFFSZWN0Rikgd2lk
Z2V0LT5nZW9tZXRyeSgpOworICAgIHJldHVybiAoUVJlY3RGKSB3aWRnZXQtPmdlb21ldHJ5KCk7
Cit9CisKK3ZvaWQgUGFnZTo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit7Cisg
ICAgcURlYnVnKCkgPDwgIiBQYWdlOjpzZXRXaW5kb3dSZWN0KCkgLT4gIiA8PCAoUVJlY3RGKSBy
OworCisgICAgUVdpZGdldCogd2lkZ2V0ID0gcm9vdFdpbmRvd0ZvckZyYW1lKG1haW5GcmFtZSgp
KTsKKyAgICBpZiAod2lkZ2V0KSB7CisgICAgICAgIHdpZGdldC0+c2V0R2VvbWV0cnkoUVJlY3Qo
cVJvdW5kKHIueCgpKSwgcVJvdW5kKHIueSgpKSwgcVJvdW5kKHIud2lkdGgoKSksIHFSb3VuZChy
LmhlaWdodCgpKSkpOworICAgIH0KK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRl
eDogcXQvS2V5Ym9hcmRDb2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0tleWJvYXJkQ29kZXMuaAko
UmV2aXNpb24gMCkKKysrIHF0L0tleWJvYXJkQ29kZXMuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbSAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEtleWJvYXJkQ29kZXNfSAorI2RlZmluZSBLZXlib2FyZENvZGVzX0gKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBWS19MQlVUVE9OICgwMSkgTGVmdCBtb3VzZSBidXR0b24KKy8vIFZL
X1JCVVRUT04gKDAyKSBSaWdodCBtb3VzZSBidXR0b24KKy8vIFZLX0NBTkNFTCAoMDMpIENvbnRy
b2wtYnJlYWsgcHJvY2Vzc2luZworLy8gVktfTUJVVFRPTiAoMDQpIE1pZGRsZSBtb3VzZSBidXR0
b24gKHRocmVlLWJ1dHRvbiBtb3VzZSkKKy8vIFZLX1hCVVRUT04xICgwNSkKKy8vIFZLX1hCVVRU
T04yICgwNikKKworLy8gVktfQkFDSyAoMDgpIEJBQ0tTUEFDRSBrZXkKK2NvbnN0IGludCBWS19C
QUNLID0gMHgwODsKKworLy8gVktfVEFCICgwOSkgVEFCIGtleQorY29uc3QgaW50IFZLX1RBQiA9
IDB4MDk7CisKKy8vIFZLX0NMRUFSICgwQykgQ0xFQVIga2V5Citjb25zdCBpbnQgVktfQ0xFQVIg
PSAweDBDOworCisvLyBWS19SRVRVUk4gKDBEKQorY29uc3QgaW50IFZLX1JFVFVSTiA9IDB4MEQ7
CisKKy8vIFZLX1NISUZUICgxMCkgU0hJRlQga2V5Citjb25zdCBpbnQgVktfU0hJRlQgPSAweDEw
OworCisvLyBWS19DT05UUk9MICgxMSkgQ1RSTCBrZXkKK2NvbnN0IGludCBWS19DT05UUk9MID0g
MHgxMTsKKworLy8gVktfTUVOVSAoMTIpIEFMVCBrZXkKK2NvbnN0IGludCBWS19NRU5VID0gMHgx
MjsKKworLy8gVktfUEFVU0UgKDEzKSBQQVVTRSBrZXkKK2NvbnN0IGludCBWS19QQVVTRSA9IDB4
MTM7CisKKy8vIFZLX0NBUElUQUwgKDE0KSBDQVBTIExPQ0sga2V5Citjb25zdCBpbnQgVktfQ0FQ
SVRBTCA9IDB4MTQ7CisKKy8vIFZLX0tBTkEgKDE1KSBJbnB1dCBNZXRob2QgRWRpdG9yIChJTUUp
IEthbmEgbW9kZQorY29uc3QgaW50IFZLX0tBTkEgPSAweDE1OworCisvLyBWS19IQU5HVUVMICgx
NSkgSU1FIEhhbmd1ZWwgbW9kZSAobWFpbnRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eTsgdXNlIFZL
X0hBTkdVTCkKKy8vIFZLX0hBTkdVTCAoMTUpIElNRSBIYW5ndWwgbW9kZQorY29uc3QgaW50IFZL
X0hBTkdVTCA9IDB4MTU7CisKKy8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUKK2NvbnN0
IGludCBWS19KVU5KQSA9IDB4MTc7CisKKy8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUK
K2NvbnN0IGludCBWS19GSU5BTCA9IDB4MTg7CisKKy8vIFZLX0hBTkpBICgxOSkgSU1FIEhhbmph
IG1vZGUKK2NvbnN0IGludCBWS19IQU5KQSA9IDB4MTk7CisKKy8vIFZLX0tBTkpJICgxOSkgSU1F
IEthbmppIG1vZGUKK2NvbnN0IGludCBWS19LQU5KSSA9IDB4MTk7CisKKy8vIFZLX0VTQ0FQRSAo
MUIpIEVTQyBrZXkKK2NvbnN0IGludCBWS19FU0NBUEUgPSAweDFCOworCisvLyBWS19DT05WRVJU
ICgxQykgSU1FIGNvbnZlcnQKK2NvbnN0IGludCBWS19DT05WRVJUID0gMHgxQzsKKworLy8gVktf
Tk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0Citjb25zdCBpbnQgVktfTk9OQ09OVkVSVCA9
IDB4MUQ7CisKKy8vIFZLX0FDQ0VQVCAoMUUpIElNRSBhY2NlcHQKK2NvbnN0IGludCBWS19BQ0NF
UFQgPSAweDFFOworCisvLyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVl
c3QKK2NvbnN0IGludCBWS19NT0RFQ0hBTkdFID0gMHgxRjsKKworLy8gVktfU1BBQ0UgKDIwKSBT
UEFDRUJBUgorY29uc3QgaW50IFZLX1NQQUNFID0gMHgyMDsKKworLy8gVktfUFJJT1IgKDIxKSBQ
QUdFIFVQIGtleQorY29uc3QgaW50IFZLX1BSSU9SID0gMHgyMTsKKworLy8gVktfTkVYVCAoMjIp
IFBBR0UgRE9XTiBrZXkKK2NvbnN0IGludCBWS19ORVhUID0gMHgyMjsKKworLy8gVktfRU5EICgy
MykgRU5EIGtleQorY29uc3QgaW50IFZLX0VORCA9IDB4MjM7CisKKy8vIFZLX0hPTUUgKDI0KSBI
T01FIGtleQorY29uc3QgaW50IFZLX0hPTUUgPSAweDI0OworCisvLyBWS19MRUZUICgyNSkgTEVG
VCBBUlJPVyBrZXkKK2NvbnN0IGludCBWS19MRUZUID0gMHgyNTsKKworLy8gVktfVVAgKDI2KSBV
UCBBUlJPVyBrZXkKK2NvbnN0IGludCBWS19VUCA9IDB4MjY7CisKKy8vIFZLX1JJR0hUICgyNykg
UklHSFQgQVJST1cga2V5Citjb25zdCBpbnQgVktfUklHSFQgPSAweDI3OworCisvLyBWS19ET1dO
ICgyOCkgRE9XTiBBUlJPVyBrZXkKK2NvbnN0IGludCBWS19ET1dOID0gMHgyODsKKworLy8gVktf
U0VMRUNUICgyOSkgU0VMRUNUIGtleQorY29uc3QgaW50IFZLX1NFTEVDVCA9IDB4Mjk7CisKKy8v
IFZLX1BSSU5UICgyQSkgUFJJTlQga2V5Citjb25zdCBpbnQgVktfUFJJTlQgPSAweDJBOworCisv
LyBWS19FWEVDVVRFICgyQikgRVhFQ1VURSBrZXkKK2NvbnN0IGludCBWS19FWEVDVVRFID0gMHgy
QjsKKworLy8gVktfU05BUFNIT1QgKDJDKSBQUklOVCBTQ1JFRU4ga2V5Citjb25zdCBpbnQgVktf
U05BUFNIT1QgPSAweDJDOworCisvLyBWS19JTlNFUlQgKDJEKSBJTlMga2V5Citjb25zdCBpbnQg
VktfSU5TRVJUID0gMHgyRDsKKworLy8gVktfREVMRVRFICgyRSkgREVMIGtleQorY29uc3QgaW50
IFZLX0RFTEVURSA9IDB4MkU7CisKKy8vIFZLX0hFTFAgKDJGKSBIRUxQIGtleQorY29uc3QgaW50
IFZLX0hFTFAgPSAweDJGOworCisvLyAoMzApIDAga2V5Citjb25zdCBpbnQgVktfMCA9IDB4MzA7
CisKKy8vICgzMSkgMSBrZXkKK2NvbnN0IGludCBWS18xID0gMHgzMTsKKworLy8gKDMyKSAyIGtl
eQorY29uc3QgaW50IFZLXzIgPSAweDMyOworCisvLyAoMzMpIDMga2V5Citjb25zdCBpbnQgVktf
MyA9IDB4MzM7CisKKy8vICgzNCkgNCBrZXkKK2NvbnN0IGludCBWS180ID0gMHgzNDsKKworLy8g
KDM1KSA1IGtleTsKKworY29uc3QgaW50IFZLXzUgPSAweDM1OworCisvLyAoMzYpIDYga2V5Citj
b25zdCBpbnQgVktfNiA9IDB4MzY7CisKKy8vICgzNykgNyBrZXkKK2NvbnN0IGludCBWS183ID0g
MHgzNzsKKworLy8gKDM4KSA4IGtleQorY29uc3QgaW50IFZLXzggPSAweDM4OworCisvLyAoMzkp
IDkga2V5Citjb25zdCBpbnQgVktfOSA9IDB4Mzk7CisKKy8vICg0MSkgQSBrZXkKK2NvbnN0IGlu
dCBWS19BID0gMHg0MTsKKworLy8gKDQyKSBCIGtleQorY29uc3QgaW50IFZLX0IgPSAweDQyOwor
CisvLyAoNDMpIEMga2V5Citjb25zdCBpbnQgVktfQyA9IDB4NDM7CisKKy8vICg0NCkgRCBrZXkK
K2NvbnN0IGludCBWS19EID0gMHg0NDsKKworLy8gKDQ1KSBFIGtleQorY29uc3QgaW50IFZLX0Ug
PSAweDQ1OworCisvLyAoNDYpIEYga2V5Citjb25zdCBpbnQgVktfRiA9IDB4NDY7CisKKy8vICg0
NykgRyBrZXkKK2NvbnN0IGludCBWS19HID0gMHg0NzsKKworLy8gKDQ4KSBIIGtleQorY29uc3Qg
aW50IFZLX0ggPSAweDQ4OworCisvLyAoNDkpIEkga2V5Citjb25zdCBpbnQgVktfSSA9IDB4NDk7
CisKKy8vICg0QSkgSiBrZXkKK2NvbnN0IGludCBWS19KID0gMHg0QTsKKworLy8gKDRCKSBLIGtl
eQorY29uc3QgaW50IFZLX0sgPSAweDRCOworCisvLyAoNEMpIEwga2V5Citjb25zdCBpbnQgVktf
TCA9IDB4NEM7CisKKy8vICg0RCkgTSBrZXkKK2NvbnN0IGludCBWS19NID0gMHg0RDsKKworLy8g
KDRFKSBOIGtleQorY29uc3QgaW50IFZLX04gPSAweDRFOworCisvLyAoNEYpIE8ga2V5Citjb25z
dCBpbnQgVktfTyA9IDB4NEY7CisKKy8vICg1MCkgUCBrZXkKK2NvbnN0IGludCBWS19QID0gMHg1
MDsKKworLy8gKDUxKSBRIGtleQorY29uc3QgaW50IFZLX1EgPSAweDUxOworCisvLyAoNTIpIFIg
a2V5Citjb25zdCBpbnQgVktfUiA9IDB4NTI7CisKKy8vICg1MykgUyBrZXkKK2NvbnN0IGludCBW
S19TID0gMHg1MzsKKworLy8gKDU0KSBUIGtleQorY29uc3QgaW50IFZLX1QgPSAweDU0OworCisv
LyAoNTUpIFUga2V5Citjb25zdCBpbnQgVktfVSA9IDB4NTU7CisKKy8vICg1NikgViBrZXkKK2Nv
bnN0IGludCBWS19WID0gMHg1NjsKKworLy8gKDU3KSBXIGtleQorY29uc3QgaW50IFZLX1cgPSAw
eDU3OworCisvLyAoNTgpIFgga2V5Citjb25zdCBpbnQgVktfWCA9IDB4NTg7CisKKy8vICg1OSkg
WSBrZXkKK2NvbnN0IGludCBWS19ZID0gMHg1OTsKKworLy8gKDVBKSBaIGtleQorY29uc3QgaW50
IFZLX1ogPSAweDVBOworCisvLyBWS19MV0lOICg1QikgTGVmdCBXaW5kb3dzIGtleSAoTWljcm9z
b2Z0IE5hdHVyYWwga2V5Ym9hcmQpCitjb25zdCBpbnQgVktfTFdJTiA9IDB4NUI7CisKKy8vIFZL
X1JXSU4gKDVDKSBSaWdodCBXaW5kb3dzIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKK2NvbnN0IGlu
dCBWS19SV0lOID0gMHg1QzsKKworLy8gVktfQVBQUyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5h
dHVyYWwga2V5Ym9hcmQpCitjb25zdCBpbnQgVktfQVBQUyA9IDB4NUQ7CisKKy8vIFZLX1NMRUVQ
ICg1RikgQ29tcHV0ZXIgU2xlZXAga2V5Citjb25zdCBpbnQgVktfU0xFRVAgPSAweDVGOworCisv
LyBWS19OVU1QQUQwICg2MCkgTnVtZXJpYyBrZXlwYWQgMCBrZXkKK2NvbnN0IGludCBWS19OVU1Q
QUQwID0gMHg2MDsKKworLy8gVktfTlVNUEFEMSAoNjEpIE51bWVyaWMga2V5cGFkIDEga2V5Citj
b25zdCBpbnQgVktfTlVNUEFEMSA9IDB4NjE7CisKKy8vIFZLX05VTVBBRDIgKDYyKSBOdW1lcmlj
IGtleXBhZCAyIGtleQorY29uc3QgaW50IFZLX05VTVBBRDIgPSAweDYyOworCisvLyBWS19OVU1Q
QUQzICg2MykgTnVtZXJpYyBrZXlwYWQgMyBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQzID0gMHg2
MzsKKworLy8gVktfTlVNUEFENCAoNjQpIE51bWVyaWMga2V5cGFkIDQga2V5Citjb25zdCBpbnQg
VktfTlVNUEFENCA9IDB4NjQ7CisKKy8vIFZLX05VTVBBRDUgKDY1KSBOdW1lcmljIGtleXBhZCA1
IGtleQorY29uc3QgaW50IFZLX05VTVBBRDUgPSAweDY1OworCisvLyBWS19OVU1QQUQ2ICg2Nikg
TnVtZXJpYyBrZXlwYWQgNiBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ2ID0gMHg2NjsKKworLy8g
VktfTlVNUEFENyAoNjcpIE51bWVyaWMga2V5cGFkIDcga2V5Citjb25zdCBpbnQgVktfTlVNUEFE
NyA9IDB4Njc7CisKKy8vIFZLX05VTVBBRDggKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorY29u
c3QgaW50IFZLX05VTVBBRDggPSAweDY4OworCisvLyBWS19OVU1QQUQ5ICg2OSkgTnVtZXJpYyBr
ZXlwYWQgOSBrZXkKK2NvbnN0IGludCBWS19OVU1QQUQ5ID0gMHg2OTsKKworLy8gVktfTVVMVElQ
TFkgKDZBKSBNdWx0aXBseSBrZXkKK2NvbnN0IGludCBWS19NVUxUSVBMWSA9IDB4NkE7CisKKy8v
IFZLX0FERCAoNkIpIEFkZCBrZXkKK2NvbnN0IGludCBWS19BREQgPSAweDZCOworCisvLyBWS19T
RVBBUkFUT1IgKDZDKSBTZXBhcmF0b3Iga2V5Citjb25zdCBpbnQgVktfU0VQQVJBVE9SID0gMHg2
QzsKKworLy8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKK2NvbnN0IGludCBWS19TVUJU
UkFDVCA9IDB4NkQ7CisKKy8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorY29uc3QgaW50
IFZLX0RFQ0lNQUwgPSAweDZFOworCisvLyBWS19ESVZJREUgKDZGKSBEaXZpZGUga2V5Citjb25z
dCBpbnQgVktfRElWSURFID0gMHg2RjsKKworLy8gVktfRjEgKDcwKSBGMSBrZXkKK2NvbnN0IGlu
dCBWS19GMSA9IDB4NzA7CisKKy8vIFZLX0YyICg3MSkgRjIga2V5Citjb25zdCBpbnQgVktfRjIg
PSAweDcxOworCisvLyBWS19GMyAoNzIpIEYzIGtleQorY29uc3QgaW50IFZLX0YzID0gMHg3MjsK
KworLy8gVktfRjQgKDczKSBGNCBrZXkKK2NvbnN0IGludCBWS19GNCA9IDB4NzM7CisKKy8vIFZL
X0Y1ICg3NCkgRjUga2V5Citjb25zdCBpbnQgVktfRjUgPSAweDc0OworCisvLyBWS19GNiAoNzUp
IEY2IGtleQorY29uc3QgaW50IFZLX0Y2ID0gMHg3NTsKKworLy8gVktfRjcgKDc2KSBGNyBrZXkK
K2NvbnN0IGludCBWS19GNyA9IDB4NzY7CisKKy8vIFZLX0Y4ICg3NykgRjgga2V5Citjb25zdCBp
bnQgVktfRjggPSAweDc3OworCisvLyBWS19GOSAoNzgpIEY5IGtleQorY29uc3QgaW50IFZLX0Y5
ID0gMHg3ODsKKworLy8gVktfRjEwICg3OSkgRjEwIGtleQorY29uc3QgaW50IFZLX0YxMCA9IDB4
Nzk7CisKKy8vIFZLX0YxMSAoN0EpIEYxMSBrZXkKK2NvbnN0IGludCBWS19GMTEgPSAweDdBOwor
CisvLyBWS19GMTIgKDdCKSBGMTIga2V5Citjb25zdCBpbnQgVktfRjEyID0gMHg3QjsKKworLy8g
VktfRjEzICg3QykgRjEzIGtleQorY29uc3QgaW50IFZLX0YxMyA9IDB4N0M7CisKKy8vIFZLX0Yx
NCAoN0QpIEYxNCBrZXkKK2NvbnN0IGludCBWS19GMTQgPSAweDdEOworCisvLyBWS19GMTUgKDdF
KSBGMTUga2V5Citjb25zdCBpbnQgVktfRjE1ID0gMHg3RTsKKworLy8gVktfRjE2ICg3RikgRjE2
IGtleQorY29uc3QgaW50IFZLX0YxNiA9IDB4N0Y7CisKKy8vIFZLX0YxNyAoODBIKSBGMTcga2V5
Citjb25zdCBpbnQgVktfRjE3ID0gMHg4MDsKKworLy8gVktfRjE4ICg4MUgpIEYxOCBrZXkKK2Nv
bnN0IGludCBWS19GMTggPSAweDgxOworCisvLyBWS19GMTkgKDgySCkgRjE5IGtleQorY29uc3Qg
aW50IFZLX0YxOSA9IDB4ODI7CisKKy8vIFZLX0YyMCAoODNIKSBGMjAga2V5Citjb25zdCBpbnQg
VktfRjIwID0gMHg4MzsKKworLy8gVktfRjIxICg4NEgpIEYyMSBrZXkKK2NvbnN0IGludCBWS19G
MjEgPSAweDg0OworCisvLyBWS19GMjIgKDg1SCkgRjIyIGtleQorY29uc3QgaW50IFZLX0YyMiA9
IDB4ODU7CisKKy8vIFZLX0YyMyAoODZIKSBGMjMga2V5Citjb25zdCBpbnQgVktfRjIzID0gMHg4
NjsKKworLy8gVktfRjI0ICg4N0gpIEYyNCBrZXkKK2NvbnN0IGludCBWS19GMjQgPSAweDg3Owor
CisvLyBWS19OVU1MT0NLICg5MCkgTlVNIExPQ0sga2V5Citjb25zdCBpbnQgVktfTlVNTE9DSyA9
IDB4OTA7CisKKy8vIFZLX1NDUk9MTCAoOTEpIFNDUk9MTCBMT0NLIGtleQorY29uc3QgaW50IFZL
X1NDUk9MTCA9IDB4OTE7CisKKy8vIFZLX0xTSElGVCAoQTApIExlZnQgU0hJRlQga2V5Citjb25z
dCBpbnQgVktfTFNISUZUID0gMHhBMDsKKworLy8gVktfUlNISUZUIChBMSkgUmlnaHQgU0hJRlQg
a2V5Citjb25zdCBpbnQgVktfUlNISUZUID0gMHhBMTsKKworLy8gVktfTENPTlRST0wgKEEyKSBM
ZWZ0IENPTlRST0wga2V5Citjb25zdCBpbnQgVktfTENPTlRST0wgPSAweEEyOworCisvLyBWS19S
Q09OVFJPTCAoQTMpIFJpZ2h0IENPTlRST0wga2V5Citjb25zdCBpbnQgVktfUkNPTlRST0wgPSAw
eEEzOworCisvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKK2NvbnN0IGludCBWS19MTUVO
VSA9IDB4QTQ7CisKKy8vIFZLX1JNRU5VIChBNSkgUmlnaHQgTUVOVSBrZXkKK2NvbnN0IGludCBW
S19STUVOVSA9IDB4QTU7CisKKy8vIFZLX0JST1dTRVJfQkFDSyAoQTYpIFdpbmRvd3MgMjAwMC9Y
UDogQnJvd3NlciBCYWNrIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfQkFDSyA9IDB4QTY7CisK
Ky8vIFZLX0JST1dTRVJfRk9SV0FSRCAoQTcpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGb3J3
YXJkIGtleQorY29uc3QgaW50IFZLX0JST1dTRVJfRk9SV0FSRCA9IDB4QTc7CisKKy8vIFZLX0JS
T1dTRVJfUkVGUkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZyZXNoIGtleQor
Y29uc3QgaW50IFZLX0JST1dTRVJfUkVGUkVTSCA9IDB4QTg7CisKKy8vIFZLX0JST1dTRVJfU1RP
UCAoQTkpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdG9wIGtleQorY29uc3QgaW50IFZLX0JS
T1dTRVJfU1RPUCA9IDB4QTk7CisKKy8vIFZLX0JST1dTRVJfU0VBUkNIIChBQSkgV2luZG93cyAy
MDAwL1hQOiBCcm93c2VyIFNlYXJjaCBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX1NFQVJDSCA9
IDB4QUE7CisKKy8vIFZLX0JST1dTRVJfRkFWT1JJVEVTIChBQikgV2luZG93cyAyMDAwL1hQOiBC
cm93c2VyIEZhdm9yaXRlcyBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX0ZBVk9SSVRFUyA9IDB4
QUI7CisKKy8vIFZLX0JST1dTRVJfSE9NRSAoQUMpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBT
dGFydCBhbmQgSG9tZSBrZXkKK2NvbnN0IGludCBWS19CUk9XU0VSX0hPTUUgPSAweEFDOworCisv
LyBWS19WT0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIE11dGUga2V5Citj
b25zdCBpbnQgVktfVk9MVU1FX01VVEUgPSAweEFEOworCisvLyBWS19WT0xVTUVfRE9XTiAoQUUp
IFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5Citjb25zdCBpbnQgVktfVk9MVU1FX0RP
V04gPSAweEFFOworCisvLyBWS19WT0xVTUVfVVAgKEFGKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVt
ZSBVcCBrZXkKK2NvbnN0IGludCBWS19WT0xVTUVfVVAgPSAweEFGOworCisvLyBWS19NRURJQV9O
RVhUX1RSQUNLIChCMCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtleQorY29uc3QgaW50
IFZLX01FRElBX05FWFRfVFJBQ0sgPSAweEIwOworCisvLyBWS19NRURJQV9QUkVWX1RSQUNLIChC
MSkgV2luZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFjayBrZXkKK2NvbnN0IGludCBWS19NRURJ
QV9QUkVWX1RSQUNLID0gMHhCMTsKKworLy8gVktfTUVESUFfU1RPUCAoQjIpIFdpbmRvd3MgMjAw
MC9YUDogU3RvcCBNZWRpYSBrZXkKK2NvbnN0IGludCBWS19NRURJQV9TVE9QID0gMHhCMjsKKwor
Ly8gVktfTUVESUFfUExBWV9QQVVTRSAoQjMpIFdpbmRvd3MgMjAwMC9YUDogUGxheS9QYXVzZSBN
ZWRpYSBrZXkKK2NvbnN0IGludCBWS19NRURJQV9QTEFZX1BBVVNFID0gMHhCMzsKKworLy8gVktf
TEFVTkNIX01BSUwgKEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwga2V5Citjb25zdCBp
bnQgVktfTUVESUFfTEFVTkNIX01BSUwgPSAweEI0OworCisvLyBWS19MQVVOQ0hfTUVESUFfU0VM
RUNUIChCNSkgV2luZG93cyAyMDAwL1hQOiBTZWxlY3QgTWVkaWEga2V5Citjb25zdCBpbnQgVktf
TUVESUFfTEFVTkNIX01FRElBX1NFTEVDVCA9IDB4QjU7CisKKy8vIFZLX0xBVU5DSF9BUFAxIChC
NikgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAxIGtleQorY29uc3QgaW50IFZL
X01FRElBX0xBVU5DSF9BUFAxID0gMHhCNjsKKworLy8gVktfTEFVTkNIX0FQUDIgKEI3KSBXaW5k
b3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDIga2V5Citjb25zdCBpbnQgVktfTUVESUFf
TEFVTkNIX0FQUDIgPSAweEI3OworCisvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxh
bmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9Y
UDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5Citjb25zdCBpbnQg
VktfT0VNXzEgPSAweEJBOworCisvLyBWS19PRU1fUExVUyAoQkIpIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcrJyBrZXkKK2NvbnN0IGludCBWS19PRU1fUExV
UyA9IDB4QkI7CisKKy8vIFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFu
eSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKK2NvbnN0IGludCBWS19PRU1fQ09NTUEgPSAw
eEJDOworCisvLyBWS19PRU1fTUlOVVMgKEJEKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291
bnRyeS9yZWdpb24sIHRoZSAnLScga2V5Citjb25zdCBpbnQgVktfT0VNX01JTlVTID0gMHhCRDsK
KworLy8gVktfT0VNX1BFUklPRCAoQkUpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5
L3JlZ2lvbiwgdGhlICcuJyBrZXkKK2NvbnN0IGludCBWS19PRU1fUEVSSU9EID0gMHhCRTsKKwor
Ly8gVktfT0VNXzIgKEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNh
biB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQg
a2V5Ym9hcmQsIHRoZSAnLz8nIGtleQorY29uc3QgaW50IFZLX09FTV8yID0gMHhCRjsKKworLy8g
VktfT0VNXzMgKEMwKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2
YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5
Ym9hcmQsIHRoZSAnYH4nIGtleQorY29uc3QgaW50IFZLX09FTV8zID0gMHhDMDsKKworLy8gVktf
T0VNXzQgKERCKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5
IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9h
cmQsIHRoZSAnW3snIGtleQorY29uc3QgaW50IFZLX09FTV80ID0gMHhEQjsKKworLy8gVktfT0VN
XzUgKERDKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5
IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQs
IHRoZSAnXHwnIGtleQorY29uc3QgaW50IFZLX09FTV81ID0gMHhEQzsKKworLy8gVktfT0VNXzYg
KEREKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtl
eWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRo
ZSAnXX0nIGtleQorY29uc3QgaW50IFZLX09FTV82ID0gMHhERDsKKworLy8gVktfT0VNXzcgKERF
KSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJv
YXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAn
c2luZ2xlLXF1b3RlL2RvdWJsZS1xdW90ZScga2V5Citjb25zdCBpbnQgVktfT0VNXzcgPSAweERF
OworCisvLyBWS19PRU1fOCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsg
aXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuCitjb25zdCBpbnQgVktfT0VNXzggPSAweERGOworCisv
LyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNr
ZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJvYXJkCitj
b25zdCBpbnQgVktfT0VNXzEwMiA9IDB4RTI7CisKKy8vIFZLX1BST0NFU1NLRVkgKEU1KSBXaW5k
b3dzIDk1Lzk4L01lLCBXaW5kb3dzIE5UIDQuMCwgV2luZG93cyAyMDAwL1hQOiBJTUUgUFJPQ0VT
UyBrZXkKK2NvbnN0IGludCBWS19QUk9DRVNTS0VZID0gMHhFNTsKKworLy8gVktfUEFDS0VUIChF
NykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFzIGlm
IHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93IHdvcmQg
b2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJkIGlucHV0
IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJESU5QVVQs
U2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKK2NvbnN0IGludCBWS19QQUNLRVQg
PSAweEU3OworCisvLyBWS19BVFROIChGNikgQXR0biBrZXkKK2NvbnN0IGludCBWS19BVFROID0g
MHhGNjsKKworLy8gVktfQ1JTRUwgKEY3KSBDclNlbCBrZXkKK2NvbnN0IGludCBWS19DUlNFTCA9
IDB4Rjc7CisKKy8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5Citjb25zdCBpbnQgVktfRVhTRUwg
PSAweEY4OworCisvLyBWS19FUkVPRiAoRjkpIEVyYXNlIEVPRiBrZXkKK2NvbnN0IGludCBWS19F
UkVPRiA9IDB4Rjk7CisKKy8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQorY29uc3QgaW50IFZLX1BM
QVkgPSAweEZBOworCisvLyBWS19aT09NIChGQikgWm9vbSBrZXkKK2NvbnN0IGludCBWS19aT09N
ID0gMHhGQjsKKworLy8gVktfTk9OQU1FIChGQykgUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKK2Nv
bnN0IGludCBWS19OT05BTUUgPSAweEZDOworCisvLyBWS19QQTEgKEZEKSBQQTEga2V5Citjb25z
dCBpbnQgVktfUEExID0gMHhGRDsKKworLy8gVktfT0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5Citj
b25zdCBpbnQgVktfT0VNX0NMRUFSID0gMHhGRTsKKworY29uc3QgaW50IFZLX1VOS05PV04gPSAw
OworCit9CisKKyNlbmRpZgpJbmRleDogcXQvU2NyZWVuUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0
L1NjcmVlblF0LmNwcAkoUmV2aXNpb24gMCkKKysrIHF0L1NjcmVlblF0LmNwcAkoUmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxs
ZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqICAgICAgICAgICAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2NyZWVuLmgiCisKKyNpbmNs
dWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFEZXNrdG9wV2lkZ2V0
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCog
d2lkZ2V0KQoreworICAgIFFXaWRnZXQgKnF3ID0gd2lkZ2V0LT5xd2lkZ2V0KCk7CisgICAgaWYg
KCFxdykgeworICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgfQorCisgICAgLy8gVGFr
ZW4gZnJvbSBLR2xvYmFsU2V0dGluZ3M6OmRlc2t0b3BHZW9tZXRyeSAgICAKKyAgICBRRGVza3Rv
cFdpZGdldCAqZHcgPSBRQXBwbGljYXRpb246OmRlc2t0b3AoKTsKKyAgICBpZiAoIWR3KSB7Cisg
ICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICB9CisKKyAgICByZXR1cm4gKFFSZWN0Rikg
ZHctPnNjcmVlbkdlb21ldHJ5KHF3KTsKK30KKworaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lk
Z2V0KQoreworICAgIFFXaWRnZXQgKnF3ID0gd2lkZ2V0LT5xd2lkZ2V0KCk7CisgICAgaWYgKCFx
dykgeworICAgICAgICByZXR1cm4gMzI7CisgICAgfQorCisgICAgcmV0dXJuIHF3LT5kZXB0aCgp
OworfQorCitGbG9hdFJlY3QgdXNhYmxlU2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBRV2lkZ2V0ICpxdyA9IHdpZGdldC0+cXdpZGdldCgpOworICAgIGlmICghcXcpIHsKKyAgICAg
ICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIH0KKworICAgIC8vIFRha2VuIGZyb20gS0dsb2Jh
bFNldHRpbmdzOjpkZXNrdG9wR2VvbWV0cnkgICAgCisgICAgUURlc2t0b3BXaWRnZXQgKmR3ID0g
UUFwcGxpY2F0aW9uOjpkZXNrdG9wKCk7CisgICAgaWYgKCFkdykgeworICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIChRUmVjdEYpIGR3LT5hdmFpbGFibGVH
ZW9tZXRyeShxdyk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0lt
YWdlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0ltYWdlUXQuY3BwCShSZXZpc2lvbiAwKQorKysg
cXQvSW1hZ2VRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIkhlbHBlclF0LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworI2luY2x1ZGUgPFFQaXhtYXA+CisjaW5jbHVkZSA8
UVBhaW50ZXI+CisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFJbWFnZVJlYWRlcj4KKwor
I2luY2x1ZGUgPFF0RGVidWc+CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8vIFRoaXMgZnVuY3Rp
b24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNl
SW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZy
YW1lRGF0YTo6Y2xlYXIoKQoreworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIG1fZnJhbWUg
PSAwOworICAgICAgICBtX2R1cmF0aW9uID0gMC47CisgICAgICAgIG1faGFzQWxwaGEgPSB0cnVl
OworICAgIH0KK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisvLyBJbWFnZSBDbGFzcworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisKK3ZvaWQgSW1hZ2U6OmluaXROYXRpdmVEYXRhKCkKK3sK
K30KKwordm9pZCBJbWFnZTo6ZGVzdHJveU5hdGl2ZURhdGEoKQoreworfQorCit2b2lkIEltYWdl
OjppbnZhbGlkYXRlTmF0aXZlRGF0YSgpCit7Cit9CisKK0ltYWdlKiBJbWFnZTo6bG9hZFJlc291
cmNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGFyciA9IGxvYWRSZXNv
dXJjZUludG9BcnJheShuYW1lKTsKKyAgICBJbWFnZSogaW1nID0gbmV3IEltYWdlKCk7CisgICAg
aW1nLT5zZXROYXRpdmVEYXRhKCZhcnIsIHRydWUpOworICAgIHJldHVybiBpbWc7Cit9CisKK2Jv
b2wgSW1hZ2U6OnN1cHBvcnRzVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcURlYnVn
KCkgPDwgImRvZXMgc3VwcG9ydCBpbWFnZSBmb3JtYXQ/ICI8PCB0b1FTdHJpbmcodHlwZSk7CisK
KyAgICBRTGlzdDxRQnl0ZUFycmF5PiBmb3JtYXRzID0gUUltYWdlUmVhZGVyOjpzdXBwb3J0ZWRJ
bWFnZUZvcm1hdHMoKTsKKyAgICBmb3JlYWNoKFFCeXRlQXJyYXkgZm9ybWF0LCBmb3JtYXRzKSB7
CisgICAgICAgIGlmIChmb3JtYXQgPT0gdHlwZSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIERyYXdpbmcg
Um91dGluZXMKK3ZvaWQgSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdCwKKyAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkg
eworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUUltYWdlKiBpbWFnZSA9IGZyYW1lQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSk7CisgICAgaWYgKCFpbWFnZSkgeyAvLyBJZiBpdCdzIHRvbyBl
YXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEludFNpemUgc2VsZlNpemUgPSBzaXplKCk7CisgICAgRmxvYXRSZWN0IHNyY1JlY3Qo
c3JjKTsKKyAgICBGbG9hdFJlY3QgZHN0UmVjdChkc3QpOworCisgICAgY3R4dC0+c2F2ZSgpOwor
CisgICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgY3R4dC0+c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG9wKTsKKworICAgIFFQYWludGVyICpwYWludGVyKGN0eHQtPnBsYXRm
b3JtQ29udGV4dCgpKTsKKworICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRlIGF0CisgICAg
Ly8gaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4c3BpcmFsL2Rl
bW8uaHRtbCAgICAKKyAgICBwYWludGVyLT5kcmF3SW1hZ2UoZHN0LCAqaW1hZ2UsIHNyYyk7CisK
KyAgICBjdHh0LT5yZXN0b3JlKCk7CisKKyAgICBzdGFydEFuaW1hdGlvbigpOworfQorCit2b2lk
IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRzdFJlY3QsIGNvbnN0IEZsb2F0UG9pbnQmIHNyY1BvaW50LAorICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQorewor
ICAgIGlmICghbV9zb3VyY2UuaW5pdGlhbGl6ZWQoKSkgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUUltYWdlKiBpbWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Cisg
ICAgUVBpeG1hcCBwaXg7CisgICAgaWYgKCFpbWFnZSkgeyAvLyBJZiBpdCdzIHRvbyBlYXJseSB3
ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEludFNpemUgaW50cmluc2ljSW1hZ2VTaXplID0gc2l6ZSgpOworCisgICAgaWYgKCFxRnV6enlD
b21wYXJlKHRpbGVTaXplLndpZHRoKCksIGludHJpbnNpY0ltYWdlU2l6ZS53aWR0aCgpKSB8fAor
ICAgICAgICAhcUZ1enp5Q29tcGFyZSh0aWxlU2l6ZS5oZWlnaHQoKSwgaW50cmluc2ljSW1hZ2VT
aXplLmhlaWdodCgpKSkgeworCisgICAgICAgIFFJbWFnZSBpbWcoKGludCl0aWxlU2l6ZS53aWR0
aCgpLCAoaW50KXRpbGVTaXplLmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgIFFJbWFnZTo6
Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKKworICAgICAgICBRUGFpbnRlciBwKCZpbWcp
OworICAgICAgICBwLmRyYXdJbWFnZShRUmVjdEYoMCwgMCwgdGlsZVNpemUud2lkdGgoKSwgdGls
ZVNpemUuaGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgICAqaW1hZ2UsIFFSZWN0RihzcmNQ
b2ludC54KCksIHNyY1BvaW50LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGlsZVNpemUud2lkdGgoKSAtIHNyY1BvaW50LngoKSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbGVTaXplLmhlaWdodCgpLSBzcmNQb2ludC55KCkpKTsKKyAgICAg
ICAgcC5lbmQoKTsKKworICAgICAgICBwaXggPSBRUGl4bWFwOjpmcm9tSW1hZ2UoaW1nKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBwaXggPSBRUGl4bWFwOjpmcm9tSW1hZ2UoKmltYWdlKTsKKyAg
ICB9CisKKyAgICBjdHh0LT5zYXZlKCk7CisKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9w
ZXJhdGlvbi4KKyAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworICAgIFFQYWlu
dGVyICpwID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgcC0+ZHJhd1RpbGVkUGl4bWFw
KGRzdFJlY3QsIHBpeCk7CisKKyAgICBjdHh0LT5yZXN0b3JlKCk7CisgICAgCisgICAgc3RhcnRB
bmltYXRpb24oKTsKK30KKwordm9pZCBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKK3sKKyAg
ICAvLyBGSVhNRTogSXQncyBlYXN5IHRvIGltcGxlbWVudCB0aGlzIG9wdGltaXphdGlvbi4gSnVz
dCBuZWVkIHRvIGNoZWNrIHRoZSBSR0JBMzIgYnVmZmVyIHRvIHNlZSBpZiBpdCBpcyAxeDEuCisg
ICAgbV9pc1NvbGlkQ29sb3IgPSBmYWxzZTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBl
dApJbmRleDogcXQvV2lkZ2V0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L1dpZGdldFF0LmNwcAko
UmV2aXNpb24gMCkKKysrIHF0L1dpZGdldFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0aWFrb3MgPHN0YWlrb3NAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRl
ICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisK
KyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdHJ1Y3QgV2lkZ2V0UHJpdmF0ZQoreworICAgIFdpZGdldFByaXZhdGUoKSA6IG1f
cGFyZW50KDApLCBtX3dpZGdldCgwKSB7IH0KKyAgICB+V2lkZ2V0UHJpdmF0ZSgpIHsgZGVsZXRl
IG1fd2lkZ2V0OyB9CisKKyAgICBRV2lkZ2V0KiBtX3BhcmVudDsKKyAgICBRV2lkZ2V0KiBtX3dp
ZGdldDsKKyAgICBGb250IG1fZm9udDsKK307CisKK1dpZGdldDo6V2lkZ2V0KCkKKyAgICA6IGRh
dGEobmV3IFdpZGdldFByaXZhdGUoKSkKK3sKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKKyAg
ICBkZWxldGUgZGF0YTsKKyAgICBkYXRhID0gMDsKK30KKwordm9pZCBXaWRnZXQ6OnNldENsaWVu
dChXaWRnZXRDbGllbnQqIGMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworV2lkZ2V0
Q2xpZW50KiBXaWRnZXQ6OmNsaWVudCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworSW50UmVjdCBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25z
dAoreworICAgIGlmICghZGF0YS0+bV93aWRnZXQpIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3Qo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YS0+bV93aWRnZXQtPmdlb21ldHJ5KCk7Cit9CisK
K2Jvb2wgV2lkZ2V0OjpoYXNGb2N1cygpIGNvbnN0Cit7CisgICAgaWYgKCFkYXRhLT5tX3dpZGdl
dCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGEtPm1f
d2lkZ2V0LT5oYXNGb2N1cygpOworfQorCit2b2lkIFdpZGdldDo6c2V0Rm9jdXMoKQoreworICAg
IGlmIChkYXRhLT5tX3dpZGdldCkgeworICAgICAgICBkYXRhLT5tX3dpZGdldC0+c2V0Rm9jdXMo
KTsKKyAgICB9Cit9CisKK3ZvaWQgV2lkZ2V0OjpjbGVhckZvY3VzKCkKK3sKKyAgICBpZiAoZGF0
YS0+bV93aWRnZXQpIHsKKyAgICAgICAgZGF0YS0+bV93aWRnZXQtPmNsZWFyRm9jdXMoKTsKKyAg
ICB9Cit9CisKK2NvbnN0IEZvbnQmIFdpZGdldDo6Zm9udCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGRhdGEtPm1fZm9udDsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZvbnQoY29uc3QgRm9udCYgZm9u
dCkKK3sKKyAgICBpZiAoZGF0YS0+bV93aWRnZXQpIHsKKyAgICAgICAgZGF0YS0+bV93aWRnZXQt
PnNldEZvbnQodG9RRm9udChmb250KSk7CisgICAgfQorfQorCit2b2lkIFdpZGdldDo6c2V0Q3Vy
c29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQoreworICAgIGlmIChkYXRhLT5tX3dpZGdldCkgewor
ICAgICAgICBkYXRhLT5tX3dpZGdldC0+c2V0Q3Vyc29yKGN1cnNvci5pbXBsKCkpOworICAgIH0K
K30KKwordm9pZCBXaWRnZXQ6OnNob3coKQoreworICAgIGlmIChkYXRhLT5tX3dpZGdldCkgewor
ICAgICAgICBkYXRhLT5tX3dpZGdldC0+c2hvdygpOworICAgIH0KK30KKwordm9pZCBXaWRnZXQ6
OmhpZGUoKQoreworICAgIGlmIChkYXRhLT5tX3dpZGdldCkgeworICAgICAgICBkYXRhLT5tX3dp
ZGdldC0+aGlkZSgpOworICAgIH0KK30KKwordm9pZCBXaWRnZXQ6OnNldFFXaWRnZXQoUVdpZGdl
dCpjaGlsZCkKK3sKKyAgICBkZWxldGUgZGF0YS0+bV93aWRnZXQ7CisgICAgZGF0YS0+bV93aWRn
ZXQgPSBjaGlsZDsKK30KKworUVdpZGdldCogV2lkZ2V0Ojpxd2lkZ2V0KCkKK3sKKyAgICByZXR1
cm4gZGF0YS0+bV93aWRnZXQ7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQYXJlbnRXaWRnZXQoUVdp
ZGdldCogcGFyZW50KQoreworICAgIGRhdGEtPm1fcGFyZW50ID0gcGFyZW50OworfQorCitRV2lk
Z2V0KiBXaWRnZXQ6OnBhcmVudFdpZGdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPm1f
cGFyZW50OworfQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0
JiByKQoreworICAgIGlmICghZGF0YS0+bV93aWRnZXQpIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGRhdGEtPm1fd2lkZ2V0LT5zZXRHZW9tZXRyeShyKTsKK30KKworSW50UG9pbnQg
V2lkZ2V0OjptYXBGcm9tR2xvYmFsKGNvbnN0IEludFBvaW50JiBwKSBjb25zdAoreworICAgIGlm
ICghZGF0YS0+bV93aWRnZXQpIHsKKyAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisgICAgfQor
CisgICAgcmV0dXJuIGRhdGEtPm1fd2lkZ2V0LT5tYXBGcm9tR2xvYmFsKHApOworfQorCitmbG9h
dCBXaWRnZXQ6OnNjYWxlRmFjdG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMS4wZjsKK30KKwor
R3JhcGhpY3NDb250ZXh0KiBXaWRnZXQ6OmxvY2tEcmF3aW5nRm9jdXMoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgV2lkZ2V0Ojp1bmxvY2tEcmF3
aW5nRm9jdXMoR3JhcGhpY3NDb250ZXh0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgSW50UmVjdCBjb25zdCYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OmVuYWJsZUZsdXNoRHJh
d2luZygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXaWRnZXQ6OmlzRW5h
YmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFkYXRhLT5tX3dpZGdldCkgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIGRhdGEtPm1fd2lkZ2V0LT5pc0VuYWJsZWQo
KTsKK30KKwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdldDo6ZGlzYWJsZUZsdXNoRHJhd2luZygpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCBl
bikKK3sKKyAgICBpZiAoZGF0YS0+bV93aWRnZXQpIHsKKyAgICAgICAgZGF0YS0+bV93aWRnZXQt
PnNldEVuYWJsZWQoZW4pOworICAgIH0KK30KKworV2lkZ2V0OjpGb2N1c1BvbGljeSBXaWRnZXQ6
OmZvY3VzUG9saWN5KCkgY29uc3QKK3sKKyAgICBpZiAoIWRhdGEtPm1fd2lkZ2V0KSB7CisgICAg
ICAgIHJldHVybiBOb0ZvY3VzOworICAgIH0KKworICAgIHN3aXRjaCAoZGF0YS0+bV93aWRnZXQt
PmZvY3VzUG9saWN5KCkpCisgICAgeworICAgICAgICBjYXNlIFF0OjpUYWJGb2N1czoKKyAgICAg
ICAgICAgIHJldHVybiBUYWJGb2N1czsKKyAgICAgICAgY2FzZSBRdDo6Q2xpY2tGb2N1czoKKyAg
ICAgICAgICAgIHJldHVybiBDbGlja0ZvY3VzOworICAgICAgICBjYXNlIFF0OjpTdHJvbmdGb2N1
czoKKyAgICAgICAgICAgIHJldHVybiBTdHJvbmdGb2N1czsKKyAgICAgICAgY2FzZSBRdDo6V2hl
ZWxGb2N1czoKKyAgICAgICAgICAgIHJldHVybiBXaGVlbEZvY3VzOworICAgICAgICBjYXNlIFF0
OjpOb0ZvY3VzOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5vRm9jdXM7
ICAgIAorICAgIH0KK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogcXQvcXQt
ZW5jb2RpbmdzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBxdC9xdC1lbmNvZGluZ3MudHh0CShSZXZpc2lv
biAwKQorKysgcXQvcXQtZW5jb2RpbmdzLnR4dAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBA
QAorIyBUaGUgaXRlbXMgb24gdGhlIGxlZnQgYXJlIG5hbWVzIG9mIFRleHRFbmNvZGluZ0lEIHZh
bHVlcworIyBUaGUgaXRlbXMgb24gdGhlIHJpZ2h0IGFyZSBJQU5BIGNoYXJhY3RlciBzZXQgbmFt
ZXMuIE5hbWVzIGxpc3RlZCBpbiBjaGFyYWN0ZXItc2V0cy50eHQgYXJlIG5vdAorIyByZXBlYXRl
ZCBoZXJlOyBtZW50aW9uaW5nIGFueSBvbmUgY2hhcmFjdGVyIHNldCBmcm9tIGEgZ3JvdXAgaW4g
dGhlcmUgcHVsbHMgaW4gYWxsIHRoZSBhbGlhc2VzIGluCisjIHRoYXQgZ3JvdXAuCisKK1dpbkxh
dGluMUVuY29kaW5nOiB3aW5kb3dzLTEyNTIsIHdpbmxhdGluMSwgeGFuc2kKK0xhdGluMUVuY29k
aW5nOiBJU08tODg1OS0xLCA4ODU5MQorQVNDSUlFbmNvZGluZzogVVMtQVNDSUksIGlzb2lyNnVz
CitVVEYxNkVuY29kaW5nOiBJU08tMTA2NDYtVUNTLTIsIHVjczIsIHVuaWNvZGUsIHV0ZjE2CitV
VEYxNkVuY29kaW5nLCBCaWdFbmRpYW46IFVURi0xNkJFLCB1bmljb2RlZmZmZQorVVRGMTZFbmNv
ZGluZywgTGl0dGxlRW5kaWFuOiBVVEYtMTZMRSwgdW5pY29kZWZlZmYKK1VURjhFbmNvZGluZzog
VVRGLTgsIHVuaWNvZGUxMXV0ZjgsIHVuaWNvZGUyMHV0ZjgsIHh1bmljb2RlMjB1dGY4CkluZGV4
OiBxdC9IZWxwZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHF0L0hlbHBlclF0LmgJKFJldmlzaW9uIDAp
CisrKyBxdC9IZWxwZXJRdC5oCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPFFGb250Pgor
CisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorCisjZGVm
aW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExF
TUVOVEVEOiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgLy8gU3RyaW5nIHRvb2xzIAorICAgIGlubGluZSBRU3RyaW5n
IHRvUVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBRU3Ry
aW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIgKj4oc3RyLmNoYXJhY3RlcnMoKSksIHN0
ci5sZW5ndGgoKSk7CisgICAgfQorICAgIAorICAgIGlubGluZSBRU3RyaW5nIHRvUVN0cmluZyhj
b25zdCBBdG9taWNTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBRU3RyaW5nKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIgKj4oc3RyLmNoYXJhY3RlcnMoKSksIHN0ci5sZW5n
dGgoKSk7CisgICAgfQorCisgICAgaW5saW5lIFFTdHJpbmcgdG9RU3RyaW5nKGNvbnN0IERlcHJl
Y2F0ZWRTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBRU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgUUNoYXIgKj4oc3RyLnVuaWNvZGUoKSksIHN0ci5sZW5ndGgoKSk7Cisg
ICAgfQorCisgICAgaW5saW5lIFN0cmluZyBmcm9tUVN0cmluZyhjb25zdCBRU3RyaW5nJiBzdHIp
CisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNo
YXIgKj4oc3RyLmNvbnN0RGF0YSgpKSwgc3RyLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICAvLyBG
b250IHRvb2xzCisgICAgaW5saW5lIFFGb250IHRvUUZvbnQoY29uc3QgRm9udCYgZm9udCkKKyAg
ICB7CisgICAgICAgIFFfQVNTRVJUKGZvbnQucHJpbWFyeUZvbnQoKSAhPSAwKTsKKyAgICAgICAg
cmV0dXJuIGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpOworICAgIH0K
K307CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBxdC9JbnRTaXplUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHF0L0ludFNpemVRdC5jcHAJKFJldmlzaW9uIDApCisrKyBxdC9JbnRTaXplUXQu
Y3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPFFTaXplPgorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lu
dFNpemU6OkludFNpemUoY29uc3QgUVNpemUmIHIpCisgICAgOiBtX3dpZHRoKHIud2lkdGgoKSkK
KyAgICAgICwgbV9oZWlnaHQoci5oZWlnaHQoKSkKK3sKK30KKworSW50U2l6ZTo6b3BlcmF0b3Ig
UVNpemUoKSBjb25zdAoreworICAgIHJldHVybiBRU2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSk7Cit9
CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IHF0L0Jyb3dzZXJFeHRlbnNpb25R
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHF0L0Jyb3dzZXJFeHRlbnNpb25RdC5oCShSZXZpc2lvbiAwKQor
KysgcXQvQnJvd3NlckV4dGVuc2lvblF0LmgJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbSAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QnJvd3NlckV4dGVuc2lvblF0X0hfCisjZGVmaW5lIEJyb3dzZXJFeHRlbnNpb25RdF9IXworCisj
aW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEZyYW1lOworCitjbGFzcyBCcm93c2VyRXh0ZW5zaW9uUXQgOiBwdWJsaWMgQnJvd3NlckV4
dGVuc2lvbiB7CitwdWJsaWM6CisgICAgQnJvd3NlckV4dGVuc2lvblF0KEZyYW1lKik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlTmV3V2luZG93KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVOZXdXaW5kb3coY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgV2luZG93QXJncyYsIEZyYW1lKiYpOworCisgICAgdmlydHVhbCB2b2lkIHNldEljb25V
UkwoY29uc3QgS1VSTCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRUeXBlZEljb25VUkwoY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYgdHlwZSk7CisKKyAgICB2aXJ0dWFsIGludCBnZXRIaXN0b3J5
TGVuZ3RoKCk7CisgICAgdmlydHVhbCB2b2lkIGdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2Up
OworICAgIHZpcnR1YWwgS1VSTCBoaXN0b3J5VVJMKGludCBkaXN0YW5jZSk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgY2FuUnVuTW9kYWwoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuTW9kYWxOb3co
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVuTW9kYWwoKTsKKworcHJpdmF0ZToKKyAgICBGcmFtZSog
bV9mcmFtZTsKK307CisKK30KKworI2VuZGlmCisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4
OiBxdC9TaGFyZWRUaW1lckxpbnV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcXQvU2hhcmVkVGltZXJMaW51
eC5oCShSZXZpc2lvbiAwKQorKysgcXQvU2hhcmVkVGltZXJMaW51eC5oCShSZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29z
IDxzdGFpa29zQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyNp
Zm5kZWYgU0hBUkVEVElNRVJMSU5VWF9ICisjZGVmaW5lIFNIQVJFRFRJTUVSTElOVVhfSAorCisj
aW5jbHVkZSAiU2hhcmVkVGltZXIuaCIKKworI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk
bGliLmg+CisjaW5jbHVkZSA8UVRpbWVyPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFNoYXJlZFRpbWVyIDogcHVibGljIFFUaW1lciB7CitRX09CSkVDVAorcHJvdGVjdGVkOgorICAg
IFNoYXJlZFRpbWVyKCkgOiBRVGltZXIoKQorICAgIHsKKyAgICAgICAgY29ubmVjdCh0aGlzLCBT
SUdOQUwodGltZW91dCgpKSwgdGhpcywgU0xPVChmaXJlKCkpKTsKKyAgICAgICAgc2V0U2luZ2xl
U2hvdCh0cnVlKTsKKyAgICAgICAgX3RpbWVyRnVuY3Rpb24gPSAwOworICAgIH0KKworICAgIH5T
aGFyZWRUaW1lcigpCisgICAgeworICAgIH0KKworcHVibGljOgorICAgIHN0YXRpYyBTaGFyZWRU
aW1lciAqaW5zdCgpIHsKKyAgICAgICAgaWYgKCFzX3NlbGYpIHsKKyAgICAgICAgICAgIHNfc2Vs
ZiA9IG5ldyBTaGFyZWRUaW1lcjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzX3NlbGY7
CisgICAgfQorCisgICAgdm9pZCAoKl90aW1lckZ1bmN0aW9uKSgpOworCisgICAgcHVibGljIHNs
b3RzOgorICAgICAgICB2b2lkIGZpcmUoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoX3Rp
bWVyRnVuY3Rpb24pIHsKKyAgICAgICAgICAgICAgICAoX3RpbWVyRnVuY3Rpb24pKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgU2hhcmVkVGltZXIg
KnNfc2VsZjsKK307CisKK30KKworI2VuZGlmCisKKy8vIHZpbTogdHM9NCBzdz00IGV0Cg==
</data>
<flag name="review"
          id="3154"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10136</attachid>
            <date>2006-08-18 16:27:00 -0700</date>
            <delta_ts>2006-08-21 12:37:28 -0700</delta_ts>
            <desc>Remaining bits</desc>
            <filename>platform-qt.diff</filename>
            <type>text/plain</type>
            <size>145650</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTk0NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDUgKzEsMzcxIEBACiAyMDA2LTA4LTE5ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRmlyc3QgY2h1bmsgb2YgdGhlIGltcGxlbWVudGF0aW9uIGZvcjoKKyAgICAgICAgaHR0
cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ2NworCisgICAg
ICAgIFdlYktpdCBzaG91bGQgaGF2ZSBRdCBwbGF0Zm9ybSBzdXBwb3J0CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9DYW52YXNRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UXQ6OkNhbnZhc1F0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1F0OjpwYWludEV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1F0OjpzaXplSGludCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNRdDo6bW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUXQ6
Om1vdXNlUHJlc3NFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNRdDo6bW91c2VSZWxl
YXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUXQ6OmtleVByZXNzRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUXQ6OmtleVJlbGVhc2VFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNRdDo6aGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L0NhbnZhc1F0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0N1cnNvclF0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6OkN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpDdXJzb3I6On5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV2ViQ29yZTo6Q3Vyc29yczo6Q3Vyc29yczo6c2VsZik6CisgICAgICAg
IChXZWJDb3JlOjptb3ZlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNyb3NzQ3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OmhhbmRDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6aUJlYW1D
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6d2FpdEN1cnNvcik6CisgICAgICAgIChXZWJDb3Jl
OjpoZWxwQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmVhc3RSZXNpemVDdXJzb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6bm9ydGhSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9y
dGhFYXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoV2VzdFJlc2l6ZUN1
cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpzb3V0aEVhc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6c291dGhX
ZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Ondlc3RSZXNpemVDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6bm9ydGhTb3V0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjplYXN0V2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aEVhc3RT
b3V0aFdlc3RSZXNpemVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0U291dGhF
YXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbHVtblJlc2l6ZUN1cnNvcik6
CisgICAgICAgIChXZWJDb3JlOjpyb3dSZXNpemVDdXJzb3IpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L0ZvbnRDYWNoZVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRh
Rm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJG
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZvbnREYXRhUXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERh
dGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YTo6ZGV0
ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERhdGE6OnBsYXRmb3JtV2lkdGhG
b3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OmZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Gb250UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBs
ZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4
dCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvRnJhbWVRdC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZG9TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojppc0ZyYW1l
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpGcmFtZVF0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lUXQ6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6fkZyYW1l
UXQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6b3BlblVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjpzdWJtaXRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnVy
bFNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnVzZXJBZ2VudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVF0OjpydW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVRdDo6cnVuSmF2YVNjcmlwdENvbmZpcm0pOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVRdDo6bG9jYXRpb25iYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OnNldFRpdGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmNyZWF0ZUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnBhc3NXaGVlbEV2ZW50VG9DaGlsZFdpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6b2JqZWN0Q29udGVudFR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVRdDo6Y3JlYXRlUGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
UXQ6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
UXQ6Om1lbnViYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnBlcnNvbmFs
YmFyVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpzdGF0dXNiYXJWaXNpYmxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnRvb2xiYXJWaXNpYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lUXQ6OmNyZWF0ZUVtcHR5RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVRdDo6bWFya2VkVGV4dFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OmluY29taW5nUmVmZXJyZXIpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6bWltZVR5cGVG
b3JGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjptYXJrTWlzc3BlbGxpbmdz
SW5BZGphY2VudFdvcmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om1hcmtNaXNzcGVs
bGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6bGFzdEV2ZW50SXNNb3VzZVVwKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnNhdmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lUXQ6OnJlc3RvcmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lUXQ6Om9wZW5VUkxSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OnNjaGVkdWxlQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6dW5mb2N1c1dpbmRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojpmb2N1c1dpbmRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVF0OjpvdmVycmlkZU1lZGlhVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVF0OjphZGRNZXNzYWdlVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Z2V0RW1i
ZWRJbnN0YW5jZUZvcldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpnZXRPYmpl
Y3RJbnN0YW5jZUZvcldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpnZXRBcHBs
ZXRJbnN0YW5jZUZvcldpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZWdpc3Rl
ckNvbW1hbmRGb3JVbmRvKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnJlZ2lzdGVyQ29t
bWFuZEZvclJlZG8pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Y2xlYXJVbmRvUmVkb09w
ZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6aXNzdWVVbmRvQ29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojppc3N1ZVJlZG9Db21tYW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lUXQ6Omlzc3VlQ3V0Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVF0Ojppc3N1ZUNvcHlDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omlz
c3VlUGFzdGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omlzc3VlUGFzdGVB
bmRNYXRjaFN0eWxlQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojppc3N1ZVRy
YW5zcG9zZUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cmVzcG9uZFRvQ2hh
bmdlZFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZXNwb25kVG9DaGFu
Z2VkQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c2hvdWxkQ2hhbmdlU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnBhcnRDbGVhcmVkSW5CZWdpbik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjYW5Hb0JhY2tPckZvcndhcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6aGFuZGxlZE9ubG9hZEV2ZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZVF0OjpjYW5QYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjYW5S
ZWRvKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmNhblVuZG8pOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVRdDo6cHJpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c2hvdWxk
SW50ZXJydXB0SmF2YVNjcmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjprZXlFdmVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZWNlaXZlZFJlc3BvbnNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnJlY2VpdmVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVF0OjpyZWNlaXZlZEFsbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c2V0
RnJhbWVHZW9tZXRyeSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvRnJhbWVRdC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6Oldpbik6CisgICAgICAgICogcGxhdGZvcm0vcXQvR2x5cGhNYXBR
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhNYXA6OmZpbGxQYWdlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9RdENvbXBvc2l0aW9uTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1F0
TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjp0b1F0TGluZUpvaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6VHJhbnNwYXJlbmN5TGF5ZXI6OlRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyOjpjbGVhbnVwKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRTaGFkb3c6OlRleHRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFNoYWRvdzo6aXNO
dWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmFkanVzdExpbmVUb1BpeGVsQm91bmRlcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
QXJjKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHln
b24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZENsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0Rm9jdXNSaW5nQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNsZWFyRm9jdXNSaW5nQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZVdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRy
YW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9IZWxwZXJRdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OnRvUVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tUVN0cmluZyk6CisgICAgICAg
IChXZWJDb3JlOjp0b1FGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9JbWFnZVF0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjppbml0TmF0aXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
ZGVzdHJveU5hdGl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmludmFsaWRhdGVO
YXRpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpsb2FkUmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2U6OnN1cHBvcnRzVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L0ltYWdlU291cmNlUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjp+SW1hZ2VTb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjppc1Np
emVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZVNvdXJjZTo6Y3JlYXRlRnJhbWVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OlJlbmRl
clRoZW1lUXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNIb3Zl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludENoZWNrYm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6dGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6aXNDb250cm9s
U3R5bGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmNvbnRyb2xTdXBwb3J0
c1RpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnN5c3RlbUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y3JlYXRlUG9wdXBNZW51KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkZEludHJpbnNpY01hcmdpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3R5bGVQYWludGVyQW5kV2lkZ2V0Rm9yUGFpbnRJ
bmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldENoZWNrYm94U2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRSYWRpb1NpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjphcHBseVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFk
anVzdFRleHRGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBh
aW50VGV4dEZpZWxkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRlckN1cmwu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVySW50ZXJuYWw6On5S
ZXNvdXJjZUxvYWRlckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVy
Ojp+UmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpjYW5jZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmFzc2VtYmxlUmVzcG9uc2VIZWFkZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpyZXRyaWV2ZUNoYXJzZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OnJlY2VpdmVkUmVzcG9uc2UpOgorICAgICAgICAq
IHBsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpSZXNvdXJjZUxvYWRlck1hbmFnZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpnZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjp1c2VTaW1wbGVUcmFuc2Zlcik6CisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmhlYWRlckNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyTWFuYWdlcjo6ZG93bmxv
YWRUaW1lckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyTWFuYWdl
cjo6cmVtb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyTWFuYWdlcjo6YWRk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyTWFuYWdlcjo6Y2FuY2VsKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vcXQvU2hhcmVkVGltZXJMaW51eC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldFNoYXJlZFRpbWVyRmlyZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcFNoYXJlZFRp
bWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TaGFyZWRUaW1lckxpbnV4Lmg6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXI6OlNoYXJlZFRpbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZFRpbWVyOjp+U2hhcmVkVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkVGltZXI6Omluc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkVGltZXI6OmZpcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L1N5c3RlbVRpbWVMaW51eC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Y3VycmVudFRpbWUpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFy
eUxpbmtTdHVicy5jcHA6IEFkZGVkLgorICAgICAgICAoSmF2YUFwcGxldFdpZGdldDo6SmF2YUFw
cGxldFdpZGdldCk6CisgICAgICAgIChGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQp
OgorICAgICAgICAoRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpyZWZyZXNoUGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpmb2N1c1Jp
bmdDb2xvcik6CisgICAgICAgIChJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRGaWVsZDo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6YWRk
U2VhcmNoUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2VsZWN0aW9uU3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZWxlY3RlZFRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dEZpZWxkOjpzZXRBdXRvU2F2ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZp
ZWxkOjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRG
aWVsZDo6c2V0U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0TWF4
UmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OmVkaXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGQ6OmZvY3VzUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRGaWVsZDo6VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6flRleHRG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldEZvbnQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkOjpzZXRXcml0aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVs
ZDo6bWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0TWF4TGVuZ3Ro
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6dGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0RmllbGQ6OnNldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpjdXJz
b3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0RWRpdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEZpZWxkOjpzZXRQbGFjZWhvbGRlclN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Rmll
bGQ6OnNldENvbG9ycyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNpemVGb3JDaGFy
YWN0ZXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OmJhc2VsaW5lUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRMaXZlU2VhcmNoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNsaWRlcjo6U2xpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6
c2l6ZUhpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyOjp+U2xpZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNsaWRlcjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyOjpz
ZXRNYXhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXI6OnNldE1pblZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6c2V0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlk
ZXI6OnZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6Zm9jdXNQb2xpY3kpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQmFyOjpTY3JvbGxCYXIpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQmFyOjpzZXRTdGVwcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxCYXI6OnNjcm9s
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxCYXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbEJhcjo6c2V0S25vYlByb3BvcnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1TY3JvbGxCYXI6OlBsYXRmb3JtU2Nyb2xsQmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtU2Nyb2xsQmFyOjp+UGxhdGZvcm1TY3JvbGxCYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1TY3JvbGxCYXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
U2Nyb2xsQmFyOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6
OnNldEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsQmFyOjpzZXRTY3JvbGxCYXJWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNjcm9sbEJhcjo6c2V0S25vYlByb3BvcnRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnNldFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hlY2tDYWNoZU9iamVjdFN0YXR1cyk6CisgICAgICAgIChXZWJD
b3JlOjpDaGVja0lmUmVsb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZlU3luY2hyb25v
dXNSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyk6CisgICAgICAg
IChXZWJDb3JlOjpzdWJtaXRCdXR0b25EZWZhdWx0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6
aW5wdXRFbGVtZW50QWx0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1
bHRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZE5leHRTZW50ZW5jZUZyb21JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpm
aW5kU2VudGVuY2VCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9t
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6CisgICAgICAgIChG
cmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZSk6
CisgICAgICAgIChXZWJDb3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24pOgorICAgICAg
ICAoS0pTOjpVU3RyaW5nOjpVU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEZvY3VzUmlu
Z0NvbG9yQ2hhbmdlRnVuY3Rpb24pOgorICAgICAgICAoRnJhbWVWaWV3Ojp1cGRhdGVCb3JkZXIp
OgorICAgICAgICAobG9hZFJlc291cmNlSW50b0FycmF5KToKKyAgICAgICAgKFBsdWdJbkluZm9T
dG9yZTo6Y3JlYXRlUGx1Z2luSW5mb0ZvclBsdWdpbkF0SW5kZXgpOgorICAgICAgICAoUGx1Z0lu
SW5mb1N0b3JlOjpwbHVnaW5Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnSW5JbmZvU3Rv
cmU6OnN1cHBvcnRzTUlNRVR5cGUpOgorICAgICAgICAoRmlsZUJ1dHRvbjo6RmlsZUJ1dHRvbik6
CisgICAgICAgIChGaWxlQnV0dG9uOjpjbGljayk6CisgICAgICAgIChGaWxlQnV0dG9uOjpzaXpl
Rm9yQ2hhcmFjdGVyV2lkdGgpOgorICAgICAgICAoRmlsZUJ1dHRvbjo6Zm9jdXNQb2xpY3kpOgor
ICAgICAgICAoRmlsZUJ1dHRvbjo6ZnJhbWVHZW9tZXRyeSk6CisgICAgICAgIChGaWxlQnV0dG9u
OjpzZXRGaWxlbmFtZSk6CisgICAgICAgIChGaWxlQnV0dG9uOjpiYXNlbGluZVBvc2l0aW9uKToK
KyAgICAgICAgKEZpbGVCdXR0b246OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoRmlsZUJ1
dHRvbjo6c2V0RGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6c3VwcG9ydGVkS2V5U2l6ZXMp
OgorICAgICAgICAoV2ViQ29yZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToK
KworMjAwNi0wOC0xOSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8emltbWVybWFubkBrZGUub3JnPgor
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMuIExhbmRlZCBieSByd2xidWlzLgogCiAgICAgICAg
IE5leHQgY2h1bmsgb2YgdGhlIGltcGxlbWVudGF0aW9uIGZvcjoKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vcXQvQ2FudmFzUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQv
Q2FudmFzUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9DYW52YXNR
dC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBH
ZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERp
cmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9u
IEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkNhbnZhc1F0LmgiCisjaW5jbHVkZSAiQ2FudmFzUXQu
bW9jIgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJhbWVRdC5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKKyNpbmNsdWRlICJL
ZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
U2VsZWN0aW9uQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorCisjaW5jbHVkZSA8UURlYnVnPgor
I2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFQYWludEV2ZW50PgorI2luY2x1ZGUgPFFN
b3VzZUV2ZW50PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbnZhc1F0OjpDYW52YXNRdChT
Y3JvbGxWaWV3KiBmcmFtZVZpZXcsIFFXaWRnZXQqIHBhcmVudCkKKyAgICA6IFFXaWRnZXQocGFy
ZW50KQorICAgICAgLCBtX2ZyYW1lVmlldyhmcmFtZVZpZXcpCit7CisgICAgc2V0TW91c2VUcmFj
a2luZyh0cnVlKTsKKyAgICBzZXRGb2N1c1BvbGljeShRdDo6U3Ryb25nRm9jdXMpOworfQorCit2
b2lkIENhbnZhc1F0OjpwYWludEV2ZW50KFFQYWludEV2ZW50KiBldikKK3sKKyAgICBGcmFtZVZp
ZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV9mcmFtZVZpZXcpOworICAgIGlmICgh
ZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUmVjdCBjbGlwID0g
ZXYtPnJlY3QoKTsKKworICAgIFFQYWludGVyIHAodGhpcyk7CisgICAgR3JhcGhpY3NDb250ZXh0
IGN0eCgmcCk7CisgICAgZnYtPmZyYW1lKCktPnBhaW50KCZjdHgsIGNsaXApOworfQorCitRU2l6
ZSBDYW52YXNRdDo6c2l6ZUhpbnQoKSBjb25zdAoreworICAgIHJldHVybiBRU2l6ZSgxMDI0LCA3
NjgpOworfQorCit2b2lkIENhbnZhc1F0Ojptb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCogZXYp
Cit7CisgICAgRnJhbWVWaWV3KiBmdiA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fZnJhbWVW
aWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZnYtPmhhbmRsZU1vdXNlTW92ZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldiwgMCkpOwor
fQorCit2b2lkIENhbnZhc1F0Ojptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQorewor
ICAgIEZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX2ZyYW1lVmlldyk7
CisgICAgaWYgKCFmdiB8fCAhZnYtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZ2
LT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2LCAxKSk7Cit9CisK
K3ZvaWQgQ2FudmFzUXQ6Om1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiBldikKK3sKKyAg
ICBGcmFtZVZpZXcqIGZ2ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV9mcmFtZVZpZXcpOwor
ICAgIGlmICghZnYgfHwgIWZ2LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmdi0+
aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2LCAwKSk7Cit9CisK
K3ZvaWQgQ2FudmFzUXQ6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldikKK3sKKyAgICBoYW5k
bGVLZXlFdmVudChldiwgZmFsc2UpOworfQorCit2b2lkIENhbnZhc1F0OjprZXlSZWxlYXNlRXZl
bnQoUUtleUV2ZW50KiBldikKK3sKKyAgICBoYW5kbGVLZXlFdmVudChldiwgdHJ1ZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUXQ6OmhhbmRsZUtleUV2ZW50KFFLZXlFdmVudCogZXYsIGJvb2wgaXNLZXlV
cCkKK3sKKyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQga2V2ZW50KGV2LCBpc0tleVVwKTsKKwor
ICAgIEZyYW1lVmlldyogZnYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX2ZyYW1lVmlldyk7
CisgICAgRnJhbWVRdCogZnJhbWUgPSAoZnYgPyBzdGF0aWNfY2FzdDxGcmFtZVF0Kj4oZnYtPmZy
YW1lKCkpIDogMCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9v
bCBoYW5kbGVkID0gZnJhbWUtPmtleUV2ZW50KGtldmVudCk7CisKKyAgICBpZiAoIWhhbmRsZWQg
JiYgIWtldmVudC5pc0tleVVwKCkpIHsKKyAgICAgICAgTm9kZSogc3RhcnQgPSBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc3RhcnQoKS5ub2RlKCk7CisgICAgICAgIGlmIChzdGFydCAmJiBzdGFydC0+aXND
b250ZW50RWRpdGFibGUoKSkgeworICAgICAgICAgICAgc3dpdGNoKGtldmVudC5XaW5kb3dzS2V5
Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBWS19CQUNLOgorICAgICAgICAgICAgICAg
ICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGZyYW1lLT5kb2N1bWVudCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19ERUxF
VEU6CisgICAgICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQ
cmVzc2VkKGZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBWS19MRUZUOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCkubW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkxFRlQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19SSUdIVDoKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlmeShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZF
LCBTZWxlY3Rpb25Db250cm9sbGVyOjpSSUdIVCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX1VQOgorICAg
ICAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KFNlbGVjdGlvbkNvbnRy
b2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OkJBQ0tXQVJELCBQYXJhZ3JhcGhHcmFu
dWxhcml0eSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgVktfRE9XTjoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLm1vZGlm
eShTZWxlY3Rpb25Db250cm9sbGVyOjpNT1ZFLCBTZWxlY3Rpb25Db250cm9sbGVyOjpGT1JXQVJE
LCBQYXJhZ3JhcGhHcmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6
Omluc2VydFRleHQoZnJhbWUtPmRvY3VtZW50KCksIGtldmVudC50ZXh0KCksIGZhbHNlKTsKKwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIFRPRE86IGRvU2Nyb2xsIHN0dWZmKCkhCisgICAgfQorfQorCit9
CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0NhbnZh
c1F0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9DYW52YXNRdC5oCShSZXZp
c2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9DYW52YXNRdC5oCShSZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHph
Y2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtv
c0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBr
ZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQU5W
QVNRVF9ICisjZGVmaW5lIENBTlZBU1FUX0gKKworI2luY2x1ZGUgPFFXaWRnZXQ+CisKK2NsYXNz
IFFLZXlFdmVudDsKK2NsYXNzIFFQYWludEV2ZW50OworY2xhc3MgUU1vdXNlRXZlbnQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsVmlldzsKKworY2xhc3MgQ2FudmFzUXQg
OiBwdWJsaWMgUVdpZGdldCB7CitRX09CSkVDVAorcHVibGljOgorICAgIENhbnZhc1F0KFNjcm9s
bFZpZXcqLCBRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKKworICAgIHZpcnR1YWwgUVNpemUgc2l6ZUhp
bnQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50KFFQ
YWludEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50
Kik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAg
IHZpcnR1YWwgdm9pZCBtb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCopOworICAgIHZpcnR1
YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBrZXlS
ZWxlYXNlRXZlbnQoUUtleUV2ZW50Kik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGVLZXlF
dmVudChRS2V5RXZlbnQqLCBib29sIGlzS2V5VXApOworCisgICAgU2Nyb2xsVmlldyAqbV9mcmFt
ZVZpZXc7Cit9OworCit9CisKKyNlbmRpZgorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9xdC9DdXJzb3JRdC5jcHAJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0N1cnNvclF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBDaGFybGVzIFNhbXVlbHMgPGNoYXJsZXNAa2RlLm9yZz4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ3Vyc29yLmgiCisKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIkRlcHJlY2F0
ZWRTdHJpbmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3Vyc29yOjpDdXJzb3IoUGxhdGZvcm1DdXJzb3IgcCkK
KyAgICA6IG1faW1wbChwKQoreworfQorCitDdXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90
aGVyKQorICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKK3sKK30KKworQ3Vyc29yOjp+Q3Vyc29y
KCkKK3sKK30KKworQ3Vyc29yOjpDdXJzb3IoSW1hZ2UqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRvcj0oY29uc3QgQ3Vyc29yJiBvdGhlcikK
K3sKKyAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7CisgICAgcmV0dXJuICp0aGlzOworfQorCitu
YW1lc3BhY2UgeworCisvLyBGSVhNRTogc3RhdGljIGRlbGV0ZXIKK2NsYXNzIEN1cnNvcnMgewor
cHJvdGVjdGVkOgorICAgIEN1cnNvcnMoKQorICAgICAgICA6IENyb3NzQ3Vyc29yKFFDdXJzb3Io
UXQ6OkNyb3NzQ3Vyc29yKSkKKyAgICAgICAgLCBNb3ZlQ3Vyc29yKFFDdXJzb3IoUXQ6OlNpemVB
bGxDdXJzb3IpKQorICAgICAgICAsIFBvaW50aW5nSGFuZEN1cnNvcihRQ3Vyc29yKFF0OjpQb2lu
dGluZ0hhbmRDdXJzb3IpKQorICAgICAgICAsIElCZWFtQ3Vyc29yKFFDdXJzb3IoUXQ6OklCZWFt
Q3Vyc29yKSkKKyAgICAgICAgLCBXYWl0Q3Vyc29yKFFDdXJzb3IoUXQ6OldhaXRDdXJzb3IpKQor
ICAgICAgICAsIFdoYXRzVGhpc0N1cnNvcihRQ3Vyc29yKFF0OjpXaGF0c1RoaXNDdXJzb3IpKQor
ICAgICAgICAsIFNpemVIb3JDdXJzb3IoUUN1cnNvcihRdDo6U2l6ZUhvckN1cnNvcikpCisgICAg
ICAgICwgU2l6ZVZlckN1cnNvcihRQ3Vyc29yKFF0OjpTaXplVmVyQ3Vyc29yKSkKKyAgICAgICAg
LCBTaXplRkRpYWdDdXJzb3IoUUN1cnNvcihRdDo6U2l6ZUZEaWFnQ3Vyc29yKSkKKyAgICAgICAg
LCBTaXplQkRpYWdDdXJzb3IoUUN1cnNvcihRdDo6U2l6ZUJEaWFnQ3Vyc29yKSkKKyAgICAgICAg
LCBTcGxpdEhDdXJzb3IoUUN1cnNvcihRdDo6U3BsaXRIQ3Vyc29yKSkKKyAgICAgICAgLCBTcGxp
dFZDdXJzb3IoUUN1cnNvcihRdDo6U3BsaXRWQ3Vyc29yKSkKKyAgICB7CisgICAgfQorCisgICAg
fkN1cnNvcnMoKQorICAgIHsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ3Vyc29ycyAq
c2VsZigpOworICAgIHN0YXRpYyBDdXJzb3JzICpzX3NlbGY7CisKKyAgICBDdXJzb3IgQ3Jvc3ND
dXJzb3I7CisgICAgQ3Vyc29yIE1vdmVDdXJzb3I7CisgICAgQ3Vyc29yIFBvaW50aW5nSGFuZEN1
cnNvcjsKKyAgICBDdXJzb3IgSUJlYW1DdXJzb3I7CisgICAgQ3Vyc29yIFdhaXRDdXJzb3I7Cisg
ICAgQ3Vyc29yIFdoYXRzVGhpc0N1cnNvcjsKKyAgICBDdXJzb3IgU2l6ZUhvckN1cnNvcjsKKyAg
ICBDdXJzb3IgU2l6ZVZlckN1cnNvcjsKKyAgICBDdXJzb3IgU2l6ZUZEaWFnQ3Vyc29yOworICAg
IEN1cnNvciBTaXplQkRpYWdDdXJzb3I7CisgICAgQ3Vyc29yIFNwbGl0SEN1cnNvcjsKKyAgICBD
dXJzb3IgU3BsaXRWQ3Vyc29yOworfTsKKworQ3Vyc29ycyogQ3Vyc29yczo6c19zZWxmID0gMDsK
KworQ3Vyc29ycyogQ3Vyc29yczo6c2VsZigpCit7CisgICAgaWYgKCFzX3NlbGYpIHsKKyAgICAg
ICAgc19zZWxmID0gbmV3IEN1cnNvcnM7CisgICAgfQorCisgICAgcmV0dXJuIHNfc2VsZjsKK30K
KworfQorCitjb25zdCBDdXJzb3ImIG1vdmVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3Jz
OjpzZWxmKCktPk1vdmVDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQor
eworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNyb3NzQ3Vyc29yOworfQorCitjb25zdCBD
dXJzb3ImIGhhbmRDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlBvaW50
aW5nSGFuZEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+SUJlYW1DdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
d2FpdEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+V2FpdEN1cnNvcjsK
K30KKworY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6
c2VsZigpLT5XaGF0c1RoaXNDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFJlc2l6ZUN1
cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U2l6ZUhvckN1cnNvcjsKK30K
KworY29uc3QgQ3Vyc29yJiBub3J0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNv
cnM6OnNlbGYoKS0+U2l6ZVZlckN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RS
ZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVCRGlhZ0N1
cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAg
IHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVGRGlhZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vy
c29yJiBzb3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+
U2l6ZVZlckN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aEVhc3RSZXNpemVDdXJzb3Io
KQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVGRGlhZ0N1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJz
b3JzOjpzZWxmKCktPlNpemVCRGlhZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0UmVz
aXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplSG9yQ3Vyc29y
OworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHJl
dHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVWZXJDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
ZWFzdFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNp
emVIb3JDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhFYXN0U291dGhXZXN0UmVzaXpl
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplQkRpYWdDdXJzb3I7
Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXplRkRpYWdDdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2Vs
ZigpLT5TcGxpdEhDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgcm93UmVzaXplQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TcGxpdFZDdXJzb3I7Cit9CisKK30KKwor
Ly8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udENhY2hl
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udENhY2hlUXQuY3Bw
CShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9Gb250Q2FjaGVRdC5jcHAJKFJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGly
ayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisKKyNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQoreworICAgIC8vIG5vLW9w
Cit9CisKK2NvbnN0IEZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkK
K3sKKyAgICByZXR1cm4gbmV3IEZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVz
Y3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSkpOworfQorCitGb250UGxhdGZvcm1E
YXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZv
bnQpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0
aW9uKCksIGZvbnQuZmFtaWx5KCkuZmFtaWx5KCkpOworfQorCitGb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udCYgZm9udCkKK3sK
KyAgICAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gc29tZWhvdyBnZXQgdGhlIHVz
ZXIncyBkZWZhdWx0IGZvbnQgaGVyZS4KKyAgICAvLyBGb3Igbm93IHdlJ2xsIHBpY2sgdGhlIGRl
ZmF1bHQgdGhhdCB0aGUgdXNlciB3b3VsZCBnZXQgd2l0aG91dCBjaGFuZ2luZyBhbnkgcHJlZnMu
CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBzX3RpbWVzU3RyKCJUaW1lcyBOZXcgUm9tYW4iKTsK
KyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlwdGlv
bigpLCBzX3RpbWVzU3RyKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKK3sKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0
Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOworfQorCit9CisKKy8vIHZpbTogdHM9
NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnREYXRhUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udERhdGFRdC5jcHAJKFJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnREYXRhUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVl
bGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVz
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFp
a29zQGtkZS5vcmc+IAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJGb250LmgiCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKworI2luY2x1ZGUgPFFG
b250TWV0cmljcz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnREYXRhOjpwbGF0
Zm9ybUluaXQoKQoreworICAgIFFGb250TWV0cmljcyBtZXRyaWNzKG1fZm9udC5mb250KCkpOwor
ICAgIG1fYXNjZW50ID0gbWV0cmljcy5hc2NlbnQoKTsKKyAgICBtX2Rlc2NlbnQgPSBtZXRyaWNz
LmRlc2NlbnQoKTsKKyAgICBtX2xpbmVTcGFjaW5nID0gbWV0cmljcy5saW5lU3BhY2luZygpOwor
ICAgIG1fbGluZUdhcCA9IG1ldHJpY3MubGVhZGluZygpOworICAgIG1feEhlaWdodCA9IG1ldHJp
Y3MueEhlaWdodCgpOworICAgIG1fbGluZVNwYWNpbmcgPSBtX2FzY2VudCArIG1fZGVzY2VudCAr
IG1fbGluZUdhcDsKK30KKwordm9pZCBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKK3sKK30K
KworRm9udERhdGEqIEZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEZvbnREYXRh
OjpkZXRlcm1pbmVQaXRjaCgpCit7Cit9CisKK2Zsb2F0IEZvbnREYXRhOjpwbGF0Zm9ybVdpZHRo
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFFGb250TWV0cmljc0Yo
bV9mb250LmZvbnQoKSkud2lkdGgoUUNoYXIodXNob3J0KGdseXBoKSkpOworfQorCit9CisKKy8v
IHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnRQbGF0Zm9y
bURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnRQbGF0Zm9ybURh
dGEuaAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0
YS5oCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJl
IGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5j
cHAgYW5kIEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBGb250UGxhdGZvcm1EYXRh
X0gKKyNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YV9ICisKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorCisjaW5jbHVkZSA8UUZvbnQ+CisjaW5j
bHVkZSA8UVN0cmluZz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGb250UGxhdGZv
cm1EYXRhIHsKK3B1YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIG90aGVyKTsKKyAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgb3RoZXIpOworCisgICAgY2xhc3MgRGVsZXRlZCB7IH07CisgICAgRm9u
dFBsYXRmb3JtRGF0YShEZWxldGVkKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEoKTsKKyAgICBG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5KTsKKyAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOworCisgICAgYm9vbCBpc0ZpeGVk
UGl0Y2goKTsKKworICAgIHZvaWQgc2V0Rm9udChjb25zdCBRRm9udCYpOworICAgIFFGb250IGZv
bnQoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgUUZvbnQgbV9mb250OworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOiB0cz00IHN3
PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAJ
KFJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5j
cHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIGludGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJl
IGluY2x1ZGVkIGJ5IGFueW9uZSBvdGhlciB0aGFuCisgKiBGb250TWFjLmNwcCwgRm9udFdpbi5j
cHAgYW5kIEZvbnQuY3BwLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1
ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKwor
I2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlIDxRRm9udEluZm8+CisKKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoKQoreworfQorCitGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKERlbGV0ZWQpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKK3sKKyAgICBRRm9udCBmb250KCJUaW1lcyBO
ZXcgUm9tYW4iLCAxMik7CisgICAgZm9udC5zZXRGYW1pbHkodG9RU3RyaW5nKGZhbWlseU5hbWUp
KTsKKyAgICBmb250LnNldFBpeGVsU2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkp
OworICAgIGZvbnQuc2V0SXRhbGljKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSk7CisgICAgZm9u
dC5zZXRXZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpKTsKKyAgICBzZXRGb250KGZvbnQp
OworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIG90aGVyKQorICAgIDogbV9mb250KG90aGVyLm1fZm9udCkKK3sKK30KKworRm9u
dFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIG90aGVyKQoreworICAgIG1fZm9udCA9IG90aGVyLm1fZm9udDsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sK
K30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIHJldHVy
biBRRm9udEluZm8obV9mb250KS5maXhlZFBpdGNoKCk7Cit9CisKK3ZvaWQgRm9udFBsYXRmb3Jt
RGF0YTo6c2V0Rm9udChjb25zdCBRRm9udCYgb3RoZXIpCit7CisgICAgbV9mb250ID0gb3RoZXI7
Cit9CisKK1FGb250IEZvbnRQbGF0Zm9ybURhdGE6OmZvbnQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2ZvbnQ7Cit9CisKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAor
eworICAgIHJldHVybiBxSGFzaCgmbV9mb250KTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRh
OjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiAob3RoZXIubV9mb250ID09IG1fZm9udCk7Cit9CisKK30KKworLy8gdmltOiB0cz00
IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnRRdC5jcHAJKFJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L0ZvbnRRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFsbGFuIFNhbmRmZWxkIEplbnNlbiA8c2FuZGZlbGRAa2RlLm9yZz4K
KyAqIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKworI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFEZWJ1
Zz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZvbnREYXRhKiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20s
IGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIFFQ
YWludGVyJiBwID0gKmdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBD
b2xvciBjb2xvciA9IGdyYXBoaWNzQ29udGV4dC0+cGVuKCkuY29sb3IoKTsKKyAgICBwLnNldFBl
bihRQ29sb3IoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSkpOworICAg
IHAuc2V0Rm9udChmb250LT5wbGF0Zm9ybURhdGEoKS5mb250KCkpOworCisgICAgUUNoYXIqIGJ1
ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPihnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSkp
OworICAgIFFTdHJpbmcgc3RyID0gUVN0cmluZzo6ZnJvbVJhd0RhdGEoYnVmZmVyLCBudW1HbHlw
aHMpOworCisgICAgcC5kcmF3VGV4dChRUG9pbnRGKHBvaW50LngoKSxwb2ludC55KCkpLCBzdHIp
OworfQorCit2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGN0eCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyAgICAvLyAjIyMgc3R5bGUsIHJ1bi5mcm9tKCkvbGVuZ3RoKCkgY3V0
LW9mZgorICAgIGN0eC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdUZXh0KHBvaW50LngoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC55KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBRQ2hhcio+KHJ1bi5jaGFyYWN0ZXJzKCkgKyBydW4uZnJvbSgpKSwgcnVu
Lmxlbmd0aCgpKSk7Cit9CisKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYpIGNvbnN0Cit7CisgICAgLy8gIyMj
IHN0eWxlCisgICAgUUZvbnRNZXRyaWNzRiBtZXRyaWNzKHByaW1hcnlGb250KCktPm1fZm9udC5m
b250KCkpOworICAgIHJldHVybiBtZXRyaWNzLndpZHRoKFFTdHJpbmc6OmZyb21SYXdEYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIqPihydW4uY2hhcmFjdGVycygpICsgcnVuLmZyb20o
KSksIHJ1bi5sZW5ndGgoKSkpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZyYW1lUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vcXQvRnJhbWVRdC5jcHAJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0ZyYW1lUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYW1lUXQuaCIK
KyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyV2lkZ2V0LmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgor
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRPTUltcGxlbWVudGF0aW9uLmgiCisj
aW5jbHVkZSAiQnJvd3NlckV4dGVuc2lvblF0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlBsdWdpbi5oIgorI2luY2x1ZGUgIkhlbHBl
clF0LmgiCisjaW5jbHVkZSAiRnJhbWVQcml2YXRlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNs
dWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW5jbHVkZSAiU2VsZWN0aW9u
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlR5cGluZ0NvbW1hbmQuaCIKKworI2luY2x1ZGUgPFFT
Y3JvbGxBcmVhPgorI2luY2x1ZGUgPFFNZXNzYWdlQm94PgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyB2b2lkIGRvU2Nyb2xsKGNvbnN0IFJlbmRlck9iamVjdCogciwgYm9vbCBpc0hv
cml6b250YWwsIGludCBtdWx0aXBsaWVyKQoreworICAgIC8vIEZJWE1FOiBUaGUgc2Nyb2xsaW5n
IGRvbmUgaGVyZSBzaG91bGQgYmUgZG9uZSBpbiB0aGUgZGVmYXVsdCBoYW5kbGVycworICAgIC8v
IG9mIHRoZSBlbGVtZW50cyByYXRoZXIgdGhhbiBoZXJlIGluIHRoZSBwYXJ0LgorICAgIGlmKCFy
KQorICAgICAgICByZXR1cm47CisKKyAgICAvL2Jyb2tlbiBzaW5jZSBpdCBjYWxscyBzY3JvbGwg
b24gc2Nyb2xsYmFycworICAgIC8vYW5kIHdlIGhhdmUgbm9uZSBub3cKKyAgICAvL3ItPnNjcm9s
bChkaXJlY3Rpb24sIEtXUVNjcm9sbFdoZWVsLCBtdWx0aXBsaWVyKTsKKyAgICBpZighci0+bGF5
ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHggPSByLT5sYXllcigpLT5zY3JvbGxY
T2Zmc2V0KCk7CisgICAgaW50IHkgPSByLT5sYXllcigpLT5zY3JvbGxZT2Zmc2V0KCk7CisgICAg
aWYoaXNIb3Jpem9udGFsKQorICAgICAgICB4ICs9IG11bHRpcGxpZXI7CisgICAgZWxzZQorICAg
ICAgICB5ICs9IG11bHRpcGxpZXI7CisKKyAgICByLT5sYXllcigpLT5zY3JvbGxUb09mZnNldCh4
LCB5LCB0cnVlLCB0cnVlKTsKK30KKworYm9vbCBGcmFtZVZpZXc6OmlzRnJhbWVWaWV3KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworRnJhbWVRdDo6RnJhbWVRdCgpCisgICAgOiBG
cmFtZShuZXcgUGFnZSwgMCkKK3sKKyAgICBxRGVidWcoIkZyYW1lUXQ6OkZyYW1lUXQiKTsKKyAg
ICBpbml0KCk7CisKKyAgICBwYWdlKCktPnNldE1haW5GcmFtZSh0aGlzKTsKKyAgICBGcmFtZVZp
ZXcqIHZpZXcgPSBuZXcgRnJhbWVWaWV3KHRoaXMpOworICAgIHNldFZpZXcodmlldyk7CisKKyAg
ICB2aWV3LT5zZXRQYXJlbnRXaWRnZXQoMCk7Cit9CisKK0ZyYW1lUXQ6OkZyYW1lUXQoUVdpZGdl
dCogcGFyZW50KQorICAgICA6IEZyYW1lKG5ldyBQYWdlLCAwKQoreworICAgIGluaXQoKTsKKyAg
ICBwYWdlKCktPnNldE1haW5GcmFtZSh0aGlzKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBuZXcg
RnJhbWVWaWV3KHRoaXMpOworICAgIHNldFZpZXcodmlldyk7CisKKyAgICB2aWV3LT5zZXRQYXJl
bnRXaWRnZXQocGFyZW50KTsKK30KKwordm9pZCBGcmFtZVF0Ojppbml0KCkKK3sKKyAgICBkLT5t
X2V4dGVuc2lvbiA9IG5ldyBCcm93c2VyRXh0ZW5zaW9uUXQodGhpcyk7CisgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gbmV3IFNldHRpbmdzOworICAgIHNldHRpbmdzLT5zZXRBdXRvTG9hZEltYWdl
cyh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0TWluRm9udFNpemUoNSk7CisgICAgc2V0dGluZ3Mt
PnNldE1pbkxvZ2ljYWxGb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0U2hvdWxkUHJpbnRC
YWNrZ3JvdW5kcyh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0SXNKYXZhU2NyaXB0RW5hYmxlZCh0
cnVlKTsKKyAKKyAgICBzZXR0aW5ncy0+c2V0TWVkaXVtRml4ZWRGb250U2l6ZSgxNCk7CisgICAg
c2V0dGluZ3MtPnNldE1lZGl1bUZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0U2VyaWZG
b250TmFtZSgiVGltZXMgTmV3IFJvbWFuIik7CisgICAgc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZv
bnROYW1lKCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRGaXhlZEZvbnROYW1lKCJDb3VyaWVy
Iik7CisgICAgc2V0dGluZ3MtPnNldFN0ZEZvbnROYW1lKCJBcmlhbCIpOworICAgIHNldFNldHRp
bmdzKHNldHRpbmdzKTsKK30KKworRnJhbWVRdDo6fkZyYW1lUXQoKQoreworICAgIGNsb3NlVVJM
KCk7IC8vIGhhY2sgdG8gYXZvaWQgY3Jhc2guICBtdXN0IGZpeCBpbiB3ZWJraXQgKEZyYW1lKS4g
IEZJWE1FCit9CisKK2Jvb2wgRnJhbWVRdDo6b3BlblVSTChjb25zdCBLVVJMJiB1cmwpCit7Cisg
ICAgcURlYnVnKCJvcGVuVVJMKCVzKSIsIHVybC51cmwoKS5sYXRpbjEoKSk7CisgICAgZGlkT3Bl
blVSTCh1cmwpOworICAgIAorICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHJlc291cmNlUmVx
dWVzdCgpKTsKKyAgICByZXF1ZXN0Lm1fcmVzcG9uc2VNSU1FVHlwZSA9ICJpbWFnZS9zdmcreG1s
IjsKKyAgICBzZXRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCk7CisKKyAgICBiZWdpbih1cmwpOwor
ICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBuZXcgUmVzb3VyY2VMb2FkZXIodGhpcywgIkdFVCIs
IHVybCk7CisgICAgam9iLT5zdGFydChkb2N1bWVudCgpLT5kb2NMb2FkZXIoKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgRnJhbWVRdDo6c3VibWl0Rm9ybShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpCit7CisgICAgcURlYnVnKCJGcmFtZVF0OjpzdWJtaXRGb3JtKCkiKTsK
KworICAgIC8vIEZJWE1FOiB0aGlzIGlzIGEgaGFjayBpbmhlcml0ZWQgZnJvbSBGcmFtZU1hYywg
YW5kIHNob3VsZCBiZSBwdXNoZWQgaW50byBGcmFtZQorICAgIGlmKGQtPm1fc3VibWl0dGVkRm9y
bVVSTCA9PSByZXF1ZXN0LnVybCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkLT5tX3N1Ym1p
dHRlZEZvcm1VUkwgPSByZXF1ZXN0LnVybCgpOworCisgICAgLyogVE9ETzogT25jZSB3ZSBoYXZl
IGEgS1BhcnQgLSBuYW1lZCAiRnJhbWVQYXJ0UXQiIC0gd2UgY2FuIGxldCB0aGF0IGluaGVyaXQg
ZnJvbSBGcmFtZVF0Q2xpZW50IGFuZCBpbXBsZW1lbnQgdGhlIGZ1bmN0aW9ucy4uLikKKyAgICBp
ZihtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnN1Ym1pdEZvcm0ocmVxdWVzdC5kb1Bvc3Qo
KSA/ICJQT1NUIiA6ICJHRVQiLCByZXF1ZXN0LnVybCgpLCAmcmVxdWVzdC5wb3N0RGF0YSk7Cisg
ICAgKi8KKworICAgIGJlZ2luKHJlcXVlc3QudXJsKCkpOworCisgICAgUmVzb3VyY2VMb2FkZXIq
IGpvYiA9IG5ldyBSZXNvdXJjZUxvYWRlcih0aGlzLCByZXF1ZXN0LmRvUG9zdCgpID8gIlBPU1Qi
IDogIkdFVCIsIHJlcXVlc3QudXJsKCksIHJlcXVlc3QucG9zdERhdGEpOworICAgIGpvYi0+c3Rh
cnQoZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCkpOworICAgIAorICAgIGNsZWFyUmVjb3JkZWRGb3Jt
VmFsdWVzKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6dXJsU2VsZWN0ZWQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vbmVlZCB0byBwb3RlbnRpYWxseSB1cGRhdGVMb2Nh
dGlvbkJhcihzdHIuYXNjaWkoKSk7IG9yIG5vdGlmeSBzeXMgb2YgbmV3IHVybCBteWJlIGV2ZW50
IG9yIGNhbGxiYWNrCisgICAgY29uc3QgS1VSTCB1cmwgPSByZXF1ZXN0LnVybCgpOworICAgIHBy
aW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tPiBMT0FESU5HIE5FVyBVUkwgJXMgXG4iLCB1cmwudXJs
KCkuYXNjaWkoKSk7CisgICAgZGlkT3BlblVSTCh1cmwpOworICAgIGJlZ2luKHVybCk7CisgICAg
UmVzb3VyY2VMb2FkZXIqIGpvYiA9IG5ldyBSZXNvdXJjZUxvYWRlcih0aGlzLCAiR0VUIiwgdXJs
KTsKKyAgICBqb2ItPnN0YXJ0KGRvY3VtZW50KCktPmRvY0xvYWRlcigpKTsKK30KKworU3RyaW5n
IEZyYW1lUXQ6OnVzZXJBZ2VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICJNb3ppbGxhLzUuMCAo
UEM7IFU7IEludGVsOyBMaW51eDsgZW4pIEFwcGxlV2ViS2l0LzQyMCsgKEtIVE1MLCBsaWtlIEdl
Y2tvKSI7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cnVuSmF2YVNjcmlwdEFsZXJ0KFN0cmluZyBjb25z
dCYgbWVzc2FnZSkKK3sKKyAgICBRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odmlldygpLT5xd2lk
Z2V0KCksICJKYXZhU2NyaXB0IiwgdG9RU3RyaW5nKG1lc3NhZ2UpKTsKK30KKworYm9vbCBGcmFt
ZVF0OjpydW5KYXZhU2NyaXB0Q29uZmlybShTdHJpbmcgY29uc3QmIG1lc3NhZ2UpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmFtZVF0Ojps
b2NhdGlvbmJhclZpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgRnJhbWVRdDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkK
K3sKKyAgICBpZih2aWV3KCkgJiYgdmlldygpLT5wYXJlbnRXaWRnZXQoKSkKKyAgICAgICAgdmll
dygpLT5wYXJlbnRXaWRnZXQoKS0+c2V0V2luZG93VGl0bGUodG9RU3RyaW5nKHRpdGxlKSk7Cit9
CisKK0ZyYW1lKiBGcmFtZVF0OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJiByZWZlcnJlcikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitib29sIEZyYW1lUXQ6OnBhc3NXaGVlbEV2
ZW50VG9DaGlsZFdpZGdldChOb2RlKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBGcmFtZVF0OjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJh
bWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSopCit7CisgICAgaWYo
bWV2LnRhcmdldE5vZGUoKSA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK09iamVjdENvbnRlbnRUeXBlIEZyYW1lUXQ6Om9iamVjdENvbnRlbnRU
eXBlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBlKCk7Cit9CisKK1BsdWdpbiog
RnJhbWVRdDo6Y3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBGcmFtZVF0OjpwYXNz
TW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEZyYW1lUXQ6Om1lbnViYXJWaXNpYmxlKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZy
YW1lUXQ6OnBlcnNvbmFsYmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmFtZVF0OjpzdGF0dXNiYXJWaXNpYmxlKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyYW1l
UXQ6OnRvb2xiYXJWaXNpYmxlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEZyYW1lUXQ6OmNyZWF0ZUVtcHR5RG9jdW1lbnQoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1JhbmdlKiBGcmFtZVF0OjptYXJrZWRUZXh0UmFuZ2Uo
KSBjb25zdAoreworICAgIC8vIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K1N0cmluZyBGcmFtZVF0OjppbmNvbWluZ1JlZmVycmVyKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworU3RyaW5nIEZyYW1lUXQ6Om1p
bWVUeXBlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBGcmFtZVF0OjptYXJrTWlz
c3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKGNvbnN0IFZpc2libGVQb3NpdGlvbiYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0OjptYXJrTWlzc3BlbGxpbmdzKGNv
bnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K2Jvb2wgRnJhbWVRdDo6bGFzdEV2ZW50SXNNb3VzZVVwKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBGcmFtZVF0OjpzYXZlRG9j
dW1lbnRTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0
OjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZVF0OjpvcGVuVVJMUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6c2NoZWR1bGVDbG9zZSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojp1bmZvY3VzV2lu
ZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6OmZvY3Vz
V2luZG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgRnJhbWVRdDo6
b3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwor
dm9pZCBGcmFtZVF0OjphZGRNZXNzYWdlVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
dW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lUXQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiBy
ZXN1bHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZVF0OjpnZXRFbWJlZEluc3RhbmNlRm9yV2lk
Z2V0KFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lUXQ6OmdldE9iamVjdEluc3RhbmNlRm9y
V2lkZ2V0KFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIEZyYW1lUXQ6OmdldEFwcGxldEluc3RhbmNl
Rm9yV2lkZ2V0KFdpZGdldCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBGcmFtZVF0OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKGNvbnN0IEVkaXRD
b21tYW5kUHRyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6
OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8oY29uc3QgRWRpdENvbW1hbmRQdHImKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6Y2xlYXJVbmRvUmVkb09wZXJhdGlv
bnMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6aXNzdWVV
bmRvQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0
Ojppc3N1ZVJlZG9Db21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEZyYW1lUXQ6Omlzc3VlQ3V0Q29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBGcmFtZVF0Ojppc3N1ZUNvcHlDb21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lUXQ6Omlzc3VlUGFzdGVDb21tYW5kKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6Omlzc3VlUGFzdGVBbmRNYXRjaFN0eWxl
Q29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojpp
c3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRnJhbWVRdDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250
cm9sbGVyJiBvbGRTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBpbmcpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVRdDo6c2hvdWxkQ2hhbmdl
U2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImIG9sZFNlbGVjdGlvbiwgY29uc3Qg
U2VsZWN0aW9uQ29udHJvbGxlciYgbmV3U2VsZWN0aW9uLCBFQWZmaW5pdHkgYWZmaW5pdHksIGJv
b2wgc3RpbGxTZWxlY3RpbmcpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGcmFtZVF0OjpwYXJ0Q2xlYXJlZEluQmVnaW4oKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVRdDo6Y2FuR29CYWNrT3JGb3J3
YXJkKGludCBkaXN0YW5jZSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBGcmFtZVF0OjpoYW5kbGVkT25sb2FkRXZlbnRzKCkKK3sK
KyAgICAvLyBuby1vcAorfQorCitib29sIEZyYW1lUXQ6OmNhblBhc3RlKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGcmFtZVF0
OjpjYW5SZWRvKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBGcmFtZVF0OjpjYW5VbmRvKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBGcmFtZVF0OjpwcmludCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBGcmFtZVF0OjpzaG91bGRJbnRl
cnJ1cHRKYXZhU2NyaXB0KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBGcmFtZVF0OjprZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQmIGtleUV2ZW50KQoreworICAgIGJvb2wgcmVzdWx0OworCisgICAgLy8gQ2hlY2sgZm9y
IGNhc2VzIHdoZXJlIHdlIGFyZSB0b28gZWFybHkgZm9yIGV2ZW50cyAtLSBwb3NzaWJsZSB1bm1h
dGNoZWQga2V5IHVwCisgICAgLy8gZnJvbSBwcmVzc2luZyByZXR1cm4gaW4gdGhlIGxvY2F0aW9u
IGJhci4KKyAgICBEb2N1bWVudCAqZG9jID0gZG9jdW1lbnQoKTsKKyAgICBpZighZG9jKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlICpub2RlID0gZG9jLT5mb2N1c05vZGUoKTsK
KyAgICBpZighbm9kZSkgeworICAgICAgICBpZiAoZG9jLT5pc0hUTUxEb2N1bWVudCgpKSB7Cisg
ICAgICAgICAgICBub2RlID0gZG9jLT5ib2R5KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBub2RlID0gZG9jLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmKCFub2RlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZigha2V5RXZlbnQuaXNLZXlVcCgpKSB7CisgICAgICAgIHByZXBhcmVGb3JVc2Vy
QWN0aW9uKCk7CisgICAgfQorCisgICAgcmVzdWx0ID0gIUV2ZW50VGFyZ2V0Tm9kZUNhc3Qobm9k
ZSktPmRpc3BhdGNoS2V5RXZlbnQoa2V5RXZlbnQpOworCisgICAgLy8gRklYTUU6IEZyYW1lTWFj
IGhhcyBhIGtleURvd24va2V5UHJlc3MgaGFjayBoZXJlIHdoaWNoIHdlIGFyZSBub3QgY29weWlu
Zy4KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEZyYW1lUXQ6OnJlY2VpdmVkUmVzcG9u
c2UoUmVzb3VyY2VMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNlKQoreworICAgIC8vIG5vLW9wCit9
CisKK3ZvaWQgRnJhbWVRdDo6cmVjZWl2ZWREYXRhKFJlc291cmNlTG9hZGVyKiBqb2IsIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgd3JpdGUoZGF0YSwgbGVuZ3RoKTsKK30K
Kwordm9pZCBGcmFtZVF0OjpyZWNlaXZlZEFsbERhdGEoUmVzb3VyY2VMb2FkZXIqIGpvYiwgUGxh
dGZvcm1EYXRhIGRhdGEpCit7CisgICAgZW5kKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6c2V0RnJh
bWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQoreworICAgIHNldEZyYW1lR2VvbWV0cnkoKFFS
ZWN0KSByKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9GcmFtZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9G
cmFtZVF0LmgJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZyYW1lUXQuaAko
UmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
RGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFj
ayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFp
a29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21h
bm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUm9iIEJ1aXMgPGJ1
aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEZyYW1lUXRfSF8KKyNkZWZpbmUgRnJhbWVRdF9IXworCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckNsaWVudC5oIgorCisjaW5jbHVkZSA8cXdpZGdl
dC5oPgorCitjbGFzcyBRUGFpbnRFdmVudDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBGcmFtZVF0Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5GcmFtZVF0Q2xpZW50KCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgb3BlblVSTChjb25zdCBEZXByZWNhdGVkU3RyaW5nJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzdWJtaXRGb3JtKGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25z
dCBLVVJMJiwgY29uc3QgRm9ybURhdGEqKSA9IDA7Cit9OworCitjbGFzcyBGcmFtZVF0IDogcHVi
bGljIEZyYW1lLCBwdWJsaWMgUmVzb3VyY2VMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIEZy
YW1lUXQoUVdpZGdldCogcGFyZW50KTsKKyAgICBGcmFtZVF0KCk7CisgICAgfkZyYW1lUXQoKTsK
KworICAgIHZpcnR1YWwgYm9vbCBvcGVuVVJMKGNvbnN0IEtVUkwmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgb3BlblVSTFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCB2
b2lkIHN1Ym1pdEZvcm0oY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCB2b2lk
IHVybFNlbGVjdGVkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworCisgICAgdmlydHVhbCB2b2lk
IHNldFRpdGxlKGNvbnN0IFN0cmluZyYpOworCisgICAgdmlydHVhbCBPYmplY3RDb250ZW50VHlw
ZSBvYmplY3RDb250ZW50VHlwZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
CisgICAgdmlydHVhbCBQbHVnaW4qIGNyZWF0ZVBsdWdpbihFbGVtZW50KiwgY29uc3QgS1VSTCYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJp
bmcmKTsKKyAgICB2aXJ0dWFsIEZyYW1lKiBjcmVhdGVGcmFtZShjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJiByZWZlcnJlcik7CisgCisgICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlQ2xvc2UoKTsKKworICAgIHZpcnR1YWwgdm9pZCB1bmZvY3Vz
V2luZG93KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9jdXNXaW5kb3coKTsKKworICAgIHZpcnR1
YWwgdm9pZCBzYXZlRG9jdW1lbnRTdGF0ZSgpOworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlRG9j
dW1lbnRTdGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGFkZE1lc3NhZ2VUb0NvbnNvbGUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZUlEKTsKKworICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcnVuSmF2YVNjcmlwdFByb21w
dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlLCBTdHJp
bmcmIHJlc3VsdCk7CisgICAgdmlydHVhbCBib29sIGxvY2F0aW9uYmFyVmlzaWJsZSgpOworICAg
IHZpcnR1YWwgYm9vbCBtZW51YmFyVmlzaWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBwZXJzb25h
bGJhclZpc2libGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpOworICAg
IHZpcnR1YWwgYm9vbCB0b29sYmFyVmlzaWJsZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZUVtcHR5RG9jdW1lbnQoKTsKKyAgICB2aXJ0dWFsIFJhbmdlKiBtYXJrZWRUZXh0UmFuZ2UoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGluY29taW5nUmVmZXJyZXIoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgU3RyaW5n
IG1pbWVUeXBlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IHZvaWQgbWFya01pc3NwZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyhjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBTZWxlY3Rpb25D
b250cm9sbGVyJik7CisKKyAgICB2aXJ0dWFsIGJvb2wgbGFzdEV2ZW50SXNNb3VzZVVwKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBGcmFtZSogc3ViZnJhbWUgPSAwKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFzc1doZWVsRXZlbnRUb0NoaWxkV2lkZ2V0KE5vZGUqKTsKKworICAgIHZpcnR1
YWwgU3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEtKUzo6
QmluZGluZ3M6Okluc3RhbmNlKiBnZXRFbWJlZEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopOwor
ICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdldE9iamVjdEluc3RhbmNlRm9y
V2lkZ2V0KFdpZGdldCopOworICAgIHZpcnR1YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdl
dEFwcGxldEluc3RhbmNlRm9yV2lkZ2V0KFdpZGdldCopOworCisgICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQ29tbWFuZEZvclVuZG8oY29uc3QgRWRpdENvbW1hbmRQdHImKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yUmVkbyhjb25zdCBFZGl0Q29tbWFuZFB0ciYpOworICAg
IHZpcnR1YWwgdm9pZCBjbGVhclVuZG9SZWRvT3BlcmF0aW9ucygpOworICAgIHZpcnR1YWwgdm9p
ZCBpc3N1ZVVuZG9Db21tYW5kKCk7CisgICAgdmlydHVhbCB2b2lkIGlzc3VlUmVkb0NvbW1hbmQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaXNzdWVDdXRDb21tYW5kKCk7CisgICAgdmlydHVhbCB2b2lk
IGlzc3VlQ29weUNvbW1hbmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUNvbW1hbmQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaXNzdWVQYXN0ZUFuZE1hdGNoU3R5bGVDb21tYW5kKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpOworICAgIHZpcnR1YWwgdm9p
ZCByZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFNlbGVjdGlvbkNvbnRyb2xsZXImIG9s
ZFNlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZyk7CisgICAgdmlydHVhbCB2b2lkIHJlc3BvbmRU
b0NoYW5nZWRDb250ZW50cygpOworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rp
b24oY29uc3QgU2VsZWN0aW9uQ29udHJvbGxlciYgb2xkU2VsZWN0aW9uLCBjb25zdCBTZWxlY3Rp
b25Db250cm9sbGVyJiBuZXdTZWxlY3Rpb24sIEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBzdGls
bFNlbGVjdGluZykgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhcnRDbGVhcmVkSW5CZWdpbigp
OworCisgICAgdmlydHVhbCBib29sIGNhbkdvQmFja09yRm9yd2FyZChpbnQgZGlzdGFuY2UpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVkT25sb2FkRXZlbnRzKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgY2FuUGFzdGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVkbygpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBjYW5VbmRvKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHByaW50KCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsK
KworICAgIGJvb2wga2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50JiBrZXlFdmVu
dCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRSZXNwb25zZShSZXNvdXJjZUxvYWRlcios
IFBsYXRmb3JtUmVzcG9uc2UpOworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZERhdGEoUmVzb3Vy
Y2VMb2FkZXIqLCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRB
bGxEYXRhKFJlc291cmNlTG9hZGVyKixQbGF0Zm9ybURhdGEpOworCisgICAgdm9pZCBzZXRGcmFt
ZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIGluaXQoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0Kik7Cisg
ICAgRnJhbWVRdENsaWVudCogbV9jbGllbnQ7CisgICAgCit9OworCitpbmxpbmUgRnJhbWVRdCog
V2luKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhbWVRdCo+KGZyYW1lKTsg
fQoraW5saW5lIGNvbnN0IEZyYW1lUXQqIFdpbihjb25zdCBGcmFtZSogZnJhbWUpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lUXQqPihmcmFtZSk7IH0KKworfQorCisjZW5kaWYKKwor
Ly8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhNYXBR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlwaE1hcFF0LmNwcAko
UmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhNYXBRdC5jcHAJKFJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2Vvcmdl
IFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11
ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhNYXAuaCIKKworI2luY2x1ZGUgIkZvbnRE
YXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlwaE1hcDo6ZmlsbFBhZ2Uo
R2x5cGhQYWdlKiBwYWdlLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YnVmZmVyTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9ySW5kZXgo
aSwgYnVmZmVyW2ldLCBmb250RGF0YSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvR3Jh
cGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvR3Jh
cGhpY3NDb250ZXh0UXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFsbGFuIFNhbmRmZWxkIEplbnNlbiA8c2FuZGZlbGRAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNs
dWRlIDxRUGFpbnRlclBhdGg+CisjaW5jbHVkZSA8UVBhaW50RGV2aWNlPgorI2luY2x1ZGUgPFFT
dGFjaz4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNs
dWRlICJIZWxwZXJRdC5oIgorCisjaWZuZGVmIE1fUEkKKyNkZWZpbmUgTV9QSSAzLjE0MTU5MjY1
MzU4OTc5MzIzODQ2CisjZW5kaWYKKworI2lmIFNWR19TVVBQT1JUCisjaW5jbHVkZSAiS1JlbmRl
cmluZ0RldmljZVF0LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
UVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZSB0b1F0Q29tcG9zaXRpb25Nb2RlKENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIENvbXBvc2l0ZUNsZWFy
OgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9DbGVhcjsKKyAgICBj
YXNlIENvbXBvc2l0ZUNvcHk6CisgICAgICAgIHJldHVybiBRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX1NvdXJjZTsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU92ZXI6CisgICAgICAgIHJldHVy
biBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZU92ZXI7CisgICAgY2FzZSBDb21wb3Np
dGVTb3VyY2VJbjoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291
cmNlSW47CisgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6CisgICAgICAgIHJldHVybiBRUGFp
bnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZU91dDsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJj
ZUF0b3A6CisgICAgICAgIHJldHVybiBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUF0
b3A7CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk92ZXI6CisgICAgICAgIHJldHVybiBR
UGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uT3ZlcjsKKyAgICBjYXNlIENvbXBv
c2l0ZURlc3RpbmF0aW9uSW46CisgICAgICAgIHJldHVybiBRUGFpbnRlcjo6Q29tcG9zaXRpb25N
b2RlX0Rlc3RpbmF0aW9uSW47CisgICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91dDoKKyAg
ICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25PdXQ7Cisg
ICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkF0b3A6CisgICAgICAgIHJldHVybiBRUGFpbnRl
cjo6Q29tcG9zaXRpb25Nb2RlX0Rlc3RpbmF0aW9uQXRvcDsKKyAgICBjYXNlIENvbXBvc2l0ZVhP
UjoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfWG9yOworICAgIGNh
c2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3Np
dGlvbk1vZGVfU291cmNlT3ZlcjsKKyAgICBjYXNlIENvbXBvc2l0ZUhpZ2hsaWdodDoKKyAgICAg
ICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3ZlcjsKKyAgICBjYXNl
IENvbXBvc2l0ZVBsdXNMaWdodGVyOgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9Tb3VyY2VPdmVyOworICAgIH0KKworICAgIHJldHVybiBRUGFpbnRlcjo6Q29tcG9z
aXRpb25Nb2RlX1NvdXJjZU92ZXI7Cit9CisKK3N0YXRpYyBRdDo6UGVuQ2FwU3R5bGUgdG9RdExp
bmVDYXAoTGluZUNhcCBsYykKK3sKKyAgICBzd2l0Y2ggKGxjKSB7CisgICAgY2FzZSBCdXR0Q2Fw
OgorICAgICAgICByZXR1cm4gUXQ6OkZsYXRDYXA7CisgICAgY2FzZSBSb3VuZENhcDoKKyAgICAg
ICAgcmV0dXJuIFF0OjpSb3VuZENhcDsKKyAgICBjYXNlIFNxdWFyZUNhcDoKKyAgICAgICAgcmV0
dXJuIFF0OjpTcXVhcmVDYXA7CisgICAgfQorCisgICAgcmV0dXJuIFF0OjpGbGF0Q2FwOworfQor
CitzdGF0aWMgUXQ6OlBlbkpvaW5TdHlsZSB0b1F0TGluZUpvaW4oTGluZUpvaW4gbGopCit7Cisg
ICAgc3dpdGNoIChsaikgeworICAgIGNhc2UgTWl0ZXJKb2luOgorICAgICAgICByZXR1cm4gUXQ6
OlN2Z01pdGVySm9pbjsKKyAgICBjYXNlIFJvdW5kSm9pbjoKKyAgICAgICAgcmV0dXJuIFF0OjpS
b3VuZEpvaW47CisgICAgY2FzZSBCZXZlbEpvaW46CisgICAgICAgIHJldHVybiBRdDo6QmV2ZWxK
b2luOworICAgIH0KKworICAgIHJldHVybiBRdDo6TWl0ZXJKb2luOworfQorCitzdHJ1Y3QgVHJh
bnNwYXJlbmN5TGF5ZXIKK3sKKyAgICBUcmFuc3BhcmVuY3lMYXllcihjb25zdCBRUGFpbnRlciYg
cCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgcGl4bWFwID0gUVBpeG1h
cCh3aWR0aCwgaGVpZ2h0KTsKKworICAgICAgICBwYWludGVyID0gbmV3IFFQYWludGVyKCZwaXht
YXApOworICAgICAgICBwYWludGVyLT5zZXRQZW4ocC5wZW4oKSk7CisgICAgICAgIHBhaW50ZXIt
PnNldEJydXNoKHAuYnJ1c2goKSk7CisgICAgICAgIHBhaW50ZXItPnNldE1hdHJpeChwLm1hdHJp
eCgpKTsKKyAgICB9CisKKyAgICBUcmFuc3BhcmVuY3lMYXllcigpCisgICAgICAgIDogcGFpbnRl
cigwKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFudXAoKQorICAgIHsKKyAgICAgICAg
ZGVsZXRlIHBhaW50ZXI7CisgICAgfQorCisgICAgUVBpeG1hcCAgIHBpeG1hcDsKKyAgICBRUGFp
bnRlciAqcGFpbnRlcjsKKyAgICBxcmVhbCAgICAgb3BhY2l0eTsKK307CisKK3N0cnVjdCBUZXh0
U2hhZG93Cit7CisgICAgVGV4dFNoYWRvdygpCisgICAgOiB4KDApCisgICAgICAsIHkoMCkKKyAg
ICAgICwgYmx1cigwKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzTnVsbCgpIHsgcmV0dXJu
ICF4ICYmICF5ICYmICFibHVyOyB9CisKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQg
Ymx1cjsKKworICAgIENvbG9yIGNvbG9yOworfTsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlCit7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKFFQYWludGVyKiBwYWludGVyKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKCk7CisKKyAgICBpbmxpbmUgUVBhaW50ZXImIHAoKQorICAgIHsKKyAgICAgICAgaWYgKGxh
eWVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChyZWRpcmVjdCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiAqcmVkaXJlY3Q7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJl
dHVybiAqcGFpbnRlcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAqbGF5
ZXJzLnRvcCgpLnBhaW50ZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBRUGFpbnREZXZpY2Uq
IGRldmljZTsKKworICAgIFFTdGFjazxUcmFuc3BhcmVuY3lMYXllcj4gbGF5ZXJzOworICAgIFFQ
YWludGVyKiByZWRpcmVjdDsKKworICAgIEludFJlY3QgZm9jdXNSaW5nQ2xpcDsKKyAgICBUZXh0
U2hhZG93IHNoYWRvdzsKKworcHJpdmF0ZToKKyAgICBRUGFpbnRlciogcGFpbnRlcjsKK307CisK
KworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUoUVBhaW50ZXIqIHApCisgICAgOiBkZXZpY2UocC0+ZGV2aWNlKCkpCit7CisgICAg
cGFpbnRlciA9IHA7CisgICAgcmVkaXJlY3QgPSAwOworCisgICAgLy8gR29vZCBsb29raW5nIFNW
R3MgcGxlYXNlLi4uCisgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFs
aWFzaW5nKTsKK30KKworR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0OjpHcmFwaGlj
c0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCisgICAgOiBtX2NvbW1v
bihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCisgICAgICAsIG1fZGF0YShuZXcgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNvbnRleHQpKQoreworICAgIHNldFBhaW50aW5n
RGlzYWJsZWQoIWNvbnRleHQpOworfQorCitHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRl
eHQoKQoreworICAgIHdoaWxlKCFtX2RhdGEtPmxheWVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICB9CisKKyAgICBkZXN0cm95R3JhcGhpY3NDb250
ZXh0UHJpdmF0ZShtX2NvbW1vbik7CisgICAgZGVsZXRlIG1fZGF0YTsKK30KKworUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gJm1fZGF0YS0+cCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2F2ZVBsYXRmb3JtU3RhdGUoKQoreworICAgIG1fZGF0YS0+cCgpLnNhdmUoKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3sKKyAgICBtX2RhdGEt
PnAoKS5yZXN0b3JlKCk7Cit9CisKKy8qIEZJWE1FOiBESVNBQkxFRCBXSElMRSBNRVJHSU5HIEJB
Q0sgRlJPTSBVTklUWQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0U2hhZG93KGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25zdCBUZXh0U3R5bGUmIHN0
eWxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX2RhdGEtPnNoYWRvdy5pc051bGwoKSkKKwkgICAgcmV0dXJuOworCisgICAgVGV4
dFNoYWRvdyAqc2hhZG93ID0gJm1fZGF0YS0+c2hhZG93OworCisgICAgaWYgKHNoYWRvdy0+Ymx1
ciA8PSAwKSB7CisgICAgICAgIFBlbiBwID0gcGVuKCk7CisgICAgICAgIHNldFBlbihzaGFkb3ct
PmNvbG9yKTsKKyAgICAgICAgZm9udCgpLmRyYXdUZXh0KHRoaXMsIHJ1biwgc3R5bGUsIEludFBv
aW50KHBvaW50LngoKSArIHNoYWRvdy0+eCwgcG9pbnQueSgpICsgc2hhZG93LT55KSk7CisgICAg
ICAgIHNldFBlbihwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBpbnQgdGhpY2tuZXNz
ID0gc2hhZG93LT5ibHVyOworICAgICAgICAvLyAjIyMgT1BUSU1JWkU6IGxpbWl0IHRoZSBhcmVh
IHRvIG9ubHkgdGhlIGFjdHVhbGx5IHBhaW50ZWQgYXJlYSArIDIqdGhpY2tuZXNzCisgICAgICAg
IGNvbnN0IGludCB3ID0gbV9kYXRhLT5wKCkuZGV2aWNlKCktPndpZHRoKCk7CisgICAgICAgIGNv
bnN0IGludCBoID0gbV9kYXRhLT5wKCkuZGV2aWNlKCktPmhlaWdodCgpOworICAgICAgICBjb25z
dCBRUmdiIGNvbG9yID0gcVJnYigyNTUsIDI1NSwgMjU1KTsKKyAgICAgICAgY29uc3QgUVJnYiBi
Z0NvbG9yID0gcVJnYigwLCAwLCAwKTsKKyAgICAgICAgUUltYWdlIGltYWdlKFFTaXplKHcsIGgp
LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgICAgICBpbWFnZS5maWxsKGJnQ29sb3IpOwor
ICAgICAgICBRUGFpbnRlciBwOworCisgICAgICAgIFBlbiBjdXJQZW4gPSBwZW4oKTsKKyAgICAg
ICAgcC5iZWdpbigmaW1hZ2UpOworICAgICAgICBzZXRQZW4oY29sb3IpOworICAgICAgICBtX2Rh
dGEtPnJlZGlyZWN0ID0gJnA7CisgICAgICAgIGZvbnQoKS5kcmF3VGV4dCh0aGlzLCBydW4sIHN0
eWxlLCBJbnRQb2ludChwb2ludC54KCkgKyBzaGFkb3ctPngsIHBvaW50LnkoKSArIHNoYWRvdy0+
eSkpOworICAgICAgICBtX2RhdGEtPnJlZGlyZWN0ID0gMDsKKyAgICAgICAgcC5lbmQoKTsKKyAg
ICAgICAgc2V0UGVuKGN1clBlbik7CisKKyAgICAgICAgaW50IG1kID0gdGhpY2tuZXNzICogdGhp
Y2tuZXNzOyAvLyBtYXgtZGlzdF4yCisKKyAgICAgICAgLy8gYmx1ciBtYXAvcHJlY2FsY3VsYXRl
ZCBzaGFkb3ctZGVjYXkKKyAgICAgICAgZmxvYXQqIGJtYXAgPSAoZmxvYXQqKSBhbGxvY2Eoc2l6
ZW9mKGZsb2F0KSAqIChtZCArIDEpKTsKKyAgICAgICAgZm9yIChpbnQgbiA9IDA7IG4gPD0gbWQ7
IG4rKykgeworICAgICAgICAgICAgZmxvYXQgZjsKKyAgICAgICAgICAgIGYgPSBuIC8gKGZsb2F0
KSAobWQgKyAxKTsKKyAgICAgICAgICAgIGYgPSAxLjAgLSBmICogZjsKKyAgICAgICAgICAgIGJt
YXBbbl0gPSBmOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgZmFjdG9yID0gMC4wOyAvLyBt
YXhpbWFsIHBvdGVudGlhbCBvcGFjaXR5LXN1bQorICAgICAgICBmb3IgKGludCBuID0gLXRoaWNr
bmVzczsgbiA8PSB0aGlja25lc3M7IG4rKykgeworICAgICAgICAgICAgZm9yIChpbnQgbSA9IC10
aGlja25lc3M7IG0gPD0gdGhpY2tuZXNzOyBtKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgZCA9
IG4gKiBuICsgbSAqIG07CisgICAgICAgICAgICAgICAgaWYgKGQgPD0gbWQpCisgICAgICAgICAg
ICAgICAgICAgIGZhY3RvciArPSBibWFwW2RdOworICAgICAgICAgICAgfQorCQl9CisKKyAgICAg
ICAgLy8gYWxwaGEgbWFwCisgICAgICAgIGZsb2F0KiBhbWFwID0gKGZsb2F0KikgYWxsb2NhKHNp
emVvZihmbG9hdCkgKiAoaCAqIHcpKTsKKyAgICAgICAgbWVtc2V0KGFtYXAsIDAsIGggKiB3ICog
KHNpemVvZihmbG9hdCkpKTsKKworICAgICAgICBmb3IgKGludCBqID0gdGhpY2tuZXNzOyBqPGgt
dGhpY2tuZXNzOyBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSB0aGlja25lc3M7IGk8
dy10aGlja25lc3M7IGkrKykgeworICAgICAgICAgICAgICAgIFFSZ2IgY29sID0gaW1hZ2UucGl4
ZWwoaSxqKTsKKyAgICAgICAgICAgICAgICBpZiAoY29sID09IGJnQ29sb3IpCisJCQkJICAgIGNv
bnRpbnVlOworCisgICAgICAgICAgICAgICAgZmxvYXQgZyA9IHFBbHBoYShjb2wpOworICAgICAg
ICAgICAgICAgIGcgPSBnIC8gMjU1OworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgbiA9IC10
aGlja25lc3M7IG4gPD0gdGhpY2tuZXNzOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgbSA9IC10aGlja25lc3M7IG0gPD0gdGhpY2tuZXNzOyBtKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBkID0gbiAqIG4gKyBtICogbTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChkID4gbWQpCisJCQkJCQkgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGYgPSBibWFwW2RdOworICAgICAgICAgICAgICAgICAgICAgICAgYW1hcFso
aSArIG0pICsgKGogKyBuKSAqIHddICs9IChnICogZik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBR
SW1hZ2UgcmVzKFFTaXplKHcsaCksUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICAgICAgaW50
IHIgPSBzaGFkb3ctPmNvbG9yLnJlZCgpOworICAgICAgICBpbnQgZyA9IHNoYWRvdy0+Y29sb3Iu
Z3JlZW4oKTsKKyAgICAgICAgaW50IGIgPSBzaGFkb3ctPmNvbG9yLmJsdWUoKTsKKyAgICAgICAg
aW50IGExID0gc2hhZG93LT5jb2xvci5hbHBoYSgpOworCisgICAgICAgIC8vIGFyYml0cmF0cnkg
ZmFjdG9yIGFkanVzdG1lbnQgdG8gbWFrZSBzaGFkb3dzIG1vcmUgc29saWQuCisgICAgICAgIGZh
Y3RvciA9IDEuMzMzIC8gZmFjdG9yOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaDsg
aisrKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHc7IGkrKykgeworICAgICAg
ICAgICAgICAgIGludCBhID0gKGludCkgKGFtYXBbaSArIGogKiB3XSAqIGZhY3RvciAqIGExKTsK
KyAgICAgICAgICAgICAgICBpZiAoYSA+IDI1NSkKKwkJCQkJYSA9IDI1NTsKKworICAgICAgICAg
ICAgICAgIHJlcy5zZXRQaXhlbChpLGosIHFSZ2JhKHIsIGcsIGIsIGEpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIG1fZGF0YS0+cCgpLmRyYXdJbWFnZSgwLCAwLCByZXMs
IDAsIDAsIC0xLCAtMSwgUXQ6OkRpZmZ1c2VBbHBoYURpdGhlciB8IFF0OjpDb2xvck9ubHkgfCBR
dDo6UHJlZmVyRGl0aGVyKTsKKyAgICB9Cit9CisqLworCisvLyBEcmF3cyBhIGZpbGxlZCByZWN0
YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5wKCkuZHJhd1JlY3QocmVjdCk7Cit9CisK
Ky8vIEZJWE1FOiBOb3cgdGhhdCB0aGlzIGlzIHJlZmFjdG9yZWQsIGl0IHNob3VsZCBiZSBzaGFy
ZWQgYnkgYWxsIGNvbnRleHRzLgorc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGVy
aWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGVuOjpQZW5TdHls
ZSYgcGVuU3R5bGUpCit7CisgICAgLy8gRm9yIG9kZCB3aWR0aHMsIHdlIGFkZCBpbiAwLjUgdG8g
dGhlIGFwcHJvcHJpYXRlIHgveSBzbyB0aGF0IHRoZSBmbG9hdCBhcml0aG1ldGljCisgICAgLy8g
d29ya3Mgb3V0LiAgRm9yIGV4YW1wbGUsIHdpdGggYSBib3JkZXIgd2lkdGggb2YgMywgS0hUTUwg
d2lsbCBwYXNzIHVzICh5MSt5MikvMiwgZS5nLiwKKyAgICAvLyAoNTArNTMpLzIgPSAxMDMvMiA9
IDUxIHdoZW4gd2Ugd2FudCA1MS41LiAgSXQgaXMgYWx3YXlzIHRydWUgdGhhdCBhbiBldmVuIHdp
ZHRoIGdhdmUKKyAgICAvLyB1cyBhIHBlcmZlY3QgcG9zaXRpb24sIGJ1dCBhbiBvZGQgd2lkdGgg
Z2F2ZSB1cyBhIHBvc2l0aW9uIHRoYXQgaXMgb2ZmIGJ5IGV4YWN0bHkgMC41LgorICAgIGlmIChw
ZW5TdHlsZSA9PSBQZW46OkRvdExpbmUgfHwgcGVuU3R5bGUgPT0gUGVuOjpEYXNoTGluZSkgewor
ICAgICAgICBpZiAocDEueCgpID09IHAyLngoKSkgeworICAgICAgICAgICAgcDEuc2V0WShwMS55
KCkgKyBzdHJva2VXaWR0aCk7CisgICAgICAgICAgICBwMi5zZXRZKHAyLnkoKSAtIHN0cm9rZVdp
ZHRoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHAxLnNldFgocDEu
eCgpICsgc3Ryb2tlV2lkdGgpOworICAgICAgICAgICAgcDIuc2V0WChwMi54KCkgLSBzdHJva2VX
aWR0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKChpbnQpc3Ryb2tlV2lkdGgpJTIp
IHsKKyAgICAgICAgaWYgKHAxLngoKSA9PSBwMi54KCkpIHsKKyAgICAgICAgICAgIC8vIFdlJ3Jl
IGEgdmVydGljYWwgbGluZS4gIEFkanVzdCBvdXIgeC4KKyAgICAgICAgICAgIHAxLnNldFgocDEu
eCgpICsgMC41KTsKKyAgICAgICAgICAgIHAyLnNldFgocDIueCgpICsgMC41KTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGEgaG9yaXpvbnRhbCBsaW5l
LiBBZGp1c3Qgb3VyIHkuCisgICAgICAgICAgICBwMS5zZXRZKHAxLnkoKSArIDAuNSk7CisgICAg
ICAgICAgICBwMi5zZXRZKHAyLnkoKSArIDAuNSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8v
IFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQy
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEZsb2F0UG9pbnQgcDEgPSBwb2ludDE7CisgICAgRmxvYXRQb2ludCBwMiA9IHBvaW50MjsKKwor
ICAgIGFkanVzdExpbmVUb1BpeGVsQm91bmRlcmllcyhwMSwgcDIsIHBlbigpLndpZHRoKCksIHBl
bigpLnN0eWxlKCkpOworICAgIG1fZGF0YS0+cCgpLmRyYXdMaW5lKHAxLCBwMik7Cit9CisKKy8v
IFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2Vk
IGluIGxpc3RzLgordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9kYXRhLT5wKCkuZHJhd0VsbGlwc2UocmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QXJjKGNvbnN0IEludFJlY3QmIHJlY3QsIGZsb2F0IHRoaWNrbmVzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVT
cGFuKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNvbnN0IFFQZW4gb2xkUGVuID0gbV9kYXRhLT5wKCkucGVuKCk7CisgICAgUVBlbiBuUGVu
ID0gb2xkUGVuOworICAgIG5QZW4uc2V0V2lkdGhGKHRoaWNrbmVzcyk7CisgICAgbV9kYXRhLT5w
KCkuc2V0UGVuKG5QZW4pOworICAgIG1fZGF0YS0+cCgpLmRyYXdBcmMocmVjdCwgc3RhcnRBbmds
ZSwgYW5nbGVTcGFuKTsKKyAgICBtX2RhdGEtPnAoKS5zZXRQZW4ob2xkUGVuKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25z
dCBJbnRQb2ludCogcG9pbnRzKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+cCgpLmRyYXdDb252ZXhQb2x5Z29uKChRUG9pbnQq
KXBvaW50cywgbnBvaW50cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYykKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS5maWxsUmVjdChy
ZWN0LCBRQ29sb3IoYy5yZWQoKSwgYy5ncmVlbigpLCBjLmJsdWUoKSwgYy5hbHBoYSgpKSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZGF0YS0+cCgpLmZpbGxSZWN0KHJlY3QsIFFDb2xvcihjLnJlZCgp
LCBjLmdyZWVuKCksIGMuYmx1ZSgpLCBjLmFscGhhKCkpKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFkZENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGFpbnRlclBhdGggcGF0aDsKKyAg
ICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3QpKTsKKyAgICBtX2RhdGEtPnAoKS5zZXRDbGlwUGF0
aChwYXRoLCBRdDo6VW5pdGVDbGlwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRGb2N1c1JpbmdDbGlwKGNvbnN0IEludFJlY3QgJnJlY3QpCit7
CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9k
YXRhLT5mb2N1c1JpbmdDbGlwID0gcmVjdDsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
ZWFyRm9jdXNSaW5nQ2xpcCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5mb2N1c1JpbmdDbGlwID0gSW50UmVjdCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEludFBvaW50JiBw
b2ludCwgaW50IHlPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCB3aWR0aCwgYm9vbCBwcmludGluZykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBvcmlnaW4gPSBwb2ludCArIEludFNp
emUoMCwgeU9mZnNldCArIDEpOworICAgIEludFBvaW50IGVuZFBvaW50ID0gb3JpZ2luICsgSW50
U2l6ZSh3aWR0aCwgMCk7CisgICAgZHJhd0xpbmUob3JpZ2luLCBlbmRQb2ludCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nKGNvbnN0IEludFBvaW50
JiBwb2ludCwgaW50IHdpZHRoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0Zsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVjdCkK
K3sKKyAgICBRUmVjdEYgcmVjdChmcmVjdCk7CisgICAgcmVjdCA9IG1fZGF0YS0+cCgpLmRldmlj
ZU1hdHJpeCgpLm1hcFJlY3QocmVjdCk7CisKKyAgICBRUmVjdCByZXN1bHQgPSByZWN0LnRvUmVj
dCgpOyAvL3JvdW5kIGl0CisgICAgcmV0dXJuIEZsb2F0UmVjdChRUmVjdEYocmVzdWx0KSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgSW50U2l6ZSYgcG9zLCBp
bnQgYmx1ciwgY29uc3QgQ29sb3IgJmNvbG9yKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+c2hhZG93LnggPSBwb3Mud2lkdGgo
KTsKKyAgICBtX2RhdGEtPnNoYWRvdy55ID0gcG9zLmhlaWdodCgpOworICAgIG1fZGF0YS0+c2hh
ZG93LmJsdXIgPSBibHVyOworICAgIG1fZGF0YS0+c2hhZG93LmNvbG9yID0gY29sb3I7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5zaGFkb3cgPSBUZXh0
U2hhZG93KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgVHJhbnNwYXJlbmN5TGF5ZXIgbGF5ZXIobV9kYXRhLT5wKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT5kZXZpY2UtPndpZHRoKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT5kZXZpY2UtPmhlaWdodCgpKTsKKworICAg
IGxheWVyLm9wYWNpdHkgPSBvcGFjaXR5OworICAgIG1fZGF0YS0+bGF5ZXJzLnB1c2gobGF5ZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRyYW5z
cGFyZW5jeUxheWVyIGxheWVyID0gbV9kYXRhLT5sYXllcnMucG9wKCk7CisgICAgbGF5ZXIucGFp
bnRlci0+ZW5kKCk7CisKKyAgICBtX2RhdGEtPnAoKS5zYXZlKCk7CisgICAgbV9kYXRhLT5wKCku
c2V0T3BhY2l0eShsYXllci5vcGFjaXR5KTsKKyAgICBtX2RhdGEtPnAoKS5kcmF3UGl4bWFwKDAs
IDAsIGxheWVyLnBpeG1hcCk7CisJbV9kYXRhLT5wKCkucmVzdG9yZSgpOworICAgIG1fZGF0YS0+
cCgpLmVuZCgpOworCisgICAgbGF5ZXIuY2xlYW51cCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS5lcmFzZVJl
Y3QocmVjdCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBhaW50ZXJQYXRoIHBhdGg7IHBhdGguYWRkUmVj
dChyZWN0KTsKKyAgICBRUGVuIG5QZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAgICBuUGVuLnNl
dFdpZHRoRih3aWR0aCk7CisgICAgbV9kYXRhLT5wKCkuc3Ryb2tlUGF0aChwYXRoLCBuUGVuKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVXaWR0aChmbG9hdCB3aWR0aCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGVu
IG5QZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAgICBuUGVuLnNldFdpZHRoRih3aWR0aCk7Cisg
ICAgbV9kYXRhLT5wKCkuc2V0UGVuKG5QZW4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUNhcChMaW5lQ2FwIGxjKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIFFQZW4gblBlbiA9IG1fZGF0YS0+cCgpLnBlbigpOworICAg
IG5QZW4uc2V0Q2FwU3R5bGUodG9RdExpbmVDYXAobGMpKTsKKyAgICBtX2RhdGEtPnAoKS5zZXRQ
ZW4oblBlbik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBRUGVuIG5QZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAgICBuUGVuLnNldEpvaW5TdHls
ZSh0b1F0TGluZUpvaW4obGopKTsKKyAgICBtX2RhdGEtPnAoKS5zZXRQZW4oblBlbik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFQZW4gblBl
biA9IG1fZGF0YS0+cCgpLnBlbigpOworICAgIG5QZW4uc2V0TWl0ZXJMaW1pdChsaW1pdCk7Cisg
ICAgbV9kYXRhLT5wKCkuc2V0UGVuKG5QZW4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0QWxwaGEoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS5zZXRPcGFjaXR5KG9wYWNpdHkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZU9wZXJhdG9yIG9wKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZGF0YS0+cCgpLnNldENvbXBvc2l0aW9uTW9kZSh0b1F0Q29tcG9zaXRp
b25Nb2RlKG9wKSk7CisKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0
aCAmcGF0aCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2RhdGEtPnAoKS5zZXRDbGlwUGF0aCgqcGF0aC5wbGF0Zm9ybVBhdGgoKSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
ZGF0YS0+cCgpLnNjYWxlKHMud2lkdGgoKSwgcy5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS5yb3RhdGUocmFkaWFu
cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHMp
Cit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9kYXRhLT5wKCkuc2NhbGUocy53aWR0aCgpLCBzLmhlaWdodCgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRoaWNr
bmVzcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBhZGRDbGlwKHJlY3QpOworICAgIFFQYWludGVyUGF0aCBwYXRoOworCisgICAgLy8gQWRk
IG91dGVyIGVsbGlwc2UKKyAgICBwYXRoLmFkZEVsbGlwc2UoUVJlY3RGKHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7CisKKyAgICAvLyBBZGQgaW5uZXIg
ZWxsaXBzZS4KKyAgICBwYXRoLmFkZEVsbGlwc2UoUVJlY3RGKHJlY3QueCgpICsgdGhpY2tuZXNz
LCByZWN0LnkoKSArIHRoaWNrbmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qu
d2lkdGgoKSAtICh0aGlja25lc3MgKiAyKSwgcmVjdC5oZWlnaHQoKSAtICh0aGlja25lc3MgKiAy
KSkpOworCisgICAgcGF0aC5zZXRGaWxsUnVsZShRdDo6T2RkRXZlbkZpbGwpOworICAgIG1fZGF0
YS0+cCgpLnNldENsaXBQYXRoKHBhdGgsIFF0OjpJbnRlcnNlY3RDbGlwKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRTaXplJiB0b3BMZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVm
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50U2l6
ZSYgYm90dG9tUmlnaHQpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gTmVlZCBzdWZmaWNpZW50IHdpZHRoIGFuZCBoZWlnaHQgdG8gY29u
dGFpbiB0aGVzZSBjdXJ2ZXMuICBTYW5pdHkgY2hlY2sgb3VyIHRvcC9ib3R0b20KKyAgICAvLyB2
YWx1ZXMgYW5kIG91ciB3aWR0aC9oZWlnaHQgdmFsdWVzIHRvIG1ha2Ugc3VyZSB0aGUgY3VydmVz
IGNhbiBhbGwgZml0LgorICAgIGludCByZXF1aXJlZFdpZHRoID0gcU1heCh0b3BMZWZ0LndpZHRo
KCkgKyB0b3BSaWdodC53aWR0aCgpLCBib3R0b21MZWZ0LndpZHRoKCkgKyBib3R0b21SaWdodC53
aWR0aCgpKTsKKyAgICBpZiAocmVxdWlyZWRXaWR0aCA+IHJlY3Qud2lkdGgoKSkgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaW50IHJlcXVpcmVkSGVpZ2h0ID0gcU1heCh0b3BMZWZ0
LmhlaWdodCgpICsgYm90dG9tTGVmdC5oZWlnaHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkgKyBib3R0
b21SaWdodC5oZWlnaHQoKSk7CisgICAgaWYgKHJlcXVpcmVkSGVpZ2h0ID4gcmVjdC5oZWlnaHQo
KSkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ2xpcCB0byBvdXIgcmVjdC4K
KyAgICBhZGRDbGlwKHJlY3QpOworCisgICAgLy8gT0ssIHRoZSBjdXJ2ZXMgY2FuIGZpdC4KKyAg
ICBRUGFpbnRlclBhdGggcGF0aDsKKworICAgIC8vIEFkZCB0aGUgZm91ciBlbGxpcHNlcyB0byB0
aGUgcGF0aC4gIFRlY2huaWNhbGx5IHRoaXMgcmVhbGx5IGlzbid0IGdvb2QgZW5vdWdoLCBzaW5j
ZSB3ZSBjb3VsZCBlbmQgdXAKKyAgICAvLyBub3QgY2xpcHBpbmcgdGhlIG90aGVyIDMvNCBvZiB0
aGUgZWxsaXBzZSB3ZSBkb24ndCBjYXJlIGFib3V0LiAgV2UncmUgcmVseWluZyBvbiB0aGUgZmFj
dCB0aGF0IGZvcgorICAgIC8vIG5vcm1hbCB1c2UgY2FzZXMgdGhlc2UgZWxsaXBzZXMgd29uJ3Qg
b3ZlcmxhcCBvbmUgYW5vdGhlciAob3Igd2hlbiB0aGV5IGRvIHRoZSBjdXJ2YXR1cmUgb2Ygb25l
IHdpbGwKKyAgICAvLyBiZSBzdWJzdW1lZCBieSB0aGUgb3RoZXIpLgorICAgIHBhdGguYWRkRWxs
aXBzZShRUmVjdEYocmVjdC54KCksIHJlY3QueSgpLCB0b3BMZWZ0LndpZHRoKCkgKiAyLCB0b3BM
ZWZ0LmhlaWdodCgpICogMikpOworICAgIHBhdGguYWRkRWxsaXBzZShRUmVjdEYocmVjdC5yaWdo
dCgpIC0gdG9wUmlnaHQud2lkdGgoKSAqIDIsIHJlY3QueSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9wUmlnaHQud2lkdGgoKSAqIDIsIHRvcFJpZ2h0LmhlaWdodCgpICogMikpOwor
ICAgIHBhdGguYWRkRWxsaXBzZShRUmVjdEYocmVjdC54KCksIHJlY3QuYm90dG9tKCkgLSBib3R0
b21MZWZ0LmhlaWdodCgpICogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbUxl
ZnQud2lkdGgoKSAqIDIsIGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyKSk7CisgICAgcGF0aC5hZGRF
bGxpcHNlKFFSZWN0RihyZWN0LnJpZ2h0KCkgLSBib3R0b21SaWdodC53aWR0aCgpICogMiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tKCkgLSBib3R0b21SaWdodC5oZWln
aHQoKSAqIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b21SaWdodC53aWR0aCgp
ICogMiwgYm90dG9tUmlnaHQuaGVpZ2h0KCkgKiAyKSk7CisKKyAgICAvLyBOb3cgYWRkIGZpdmUg
cmVjdHMgKG9uZSBmb3IgZWFjaCBlZGdlIHJlY3QgaW4gYmV0d2VlbiB0aGUgcm91bmRlZCBjb3Ju
ZXJzIGFuZCBvbmUgZm9yIHRoZSBpbnRlcmlvcikuCisgICAgcGF0aC5hZGRSZWN0KFFSZWN0Rihy
ZWN0LngoKSArIHRvcExlZnQud2lkdGgoKSwgcmVjdC55KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LndpZHRoKCkgLSB0b3BMZWZ0LndpZHRoKCkgLSB0b3BSaWdodC53aWR0aCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcU1heCh0b3BMZWZ0LmhlaWdodCgpLCB0b3BSaWdodC5o
ZWlnaHQoKSkpKTsKKyAgICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3QueCgpICsgYm90dG9tTGVm
dC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b20oKSAtIHFNYXgo
Ym90dG9tTGVmdC5oZWlnaHQoKSwgYm90dG9tUmlnaHQuaGVpZ2h0KCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gYm90dG9tTGVmdC53aWR0aCgpIC0gYm90dG9tUmln
aHQud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHFNYXgoYm90dG9tTGVmdC5oZWln
aHQoKSwgYm90dG9tUmlnaHQuaGVpZ2h0KCkpKSk7CisgICAgcGF0aC5hZGRSZWN0KFFSZWN0Rihy
ZWN0LngoKSwgcmVjdC55KCkgKyB0b3BMZWZ0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgcU1heCh0b3BMZWZ0LndpZHRoKCksIGJvdHRvbUxlZnQud2lkdGgoKSksIHJlY3QuaGVp
Z2h0KCkgLSB0b3BMZWZ0LmhlaWdodCgpIC0gYm90dG9tTGVmdC5oZWlnaHQoKSkpOworICAgIHBh
dGguYWRkUmVjdChRUmVjdEYocmVjdC5yaWdodCgpIC0gcU1heCh0b3BSaWdodC53aWR0aCgpLCBi
b3R0b21SaWdodC53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsg
dG9wUmlnaHQuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICBxTWF4KHRvcFJpZ2h0
LndpZHRoKCksIGJvdHRvbVJpZ2h0LndpZHRoKCkpLCByZWN0LmhlaWdodCgpIC0gdG9wUmlnaHQu
aGVpZ2h0KCkgLSBib3R0b21SaWdodC5oZWlnaHQoKSkpOworICAgIHBhdGguYWRkUmVjdChRUmVj
dEYocmVjdC54KCkgKyBxTWF4KHRvcExlZnQud2lkdGgoKSwgYm90dG9tTGVmdC53aWR0aCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgcU1heCh0b3BMZWZ0LmhlaWdodCgp
LCB0b3BSaWdodC5oZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRo
KCkgLSBxTWF4KHRvcExlZnQud2lkdGgoKSwgYm90dG9tTGVmdC53aWR0aCgpKSAtIHFNYXgodG9w
UmlnaHQud2lkdGgoKSwgYm90dG9tUmlnaHQud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LmhlaWdodCgpIC0gcU1heCh0b3BMZWZ0LmhlaWdodCgpLCB0b3BSaWdodC5oZWln
aHQoKSkgLSBxTWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvdHRvbVJpZ2h0LmhlaWdodCgpKSkpOworICAgIHBhdGguc2V0RmlsbFJ1bGUo
UXQ6OldpbmRpbmdGaWxsKTsKKyAgICBtX2RhdGEtPnAoKS5zZXRDbGlwUGF0aChwYXRoLCBRdDo6
SW50ZXJzZWN0Q2xpcCk7Cit9CisKKyNpZiBTVkdfU1VQUE9SVAorS1JlbmRlcmluZ0RldmljZUNv
bnRleHQqIEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpCit7
CisgICAgcmV0dXJuIG5ldyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KHBsYXRmb3JtQ29udGV4
dCgpKTsKK30KKyNlbmRpZgorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3F0L0hlbHBlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9xdC9IZWxwZXJRdC5oCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9IZWxw
ZXJRdC5oCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPFFGb250PgorCisjaW5jbHVkZSAi
Rm9udC5oIgorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorCisjZGVmaW5lIG5vdEltcGxl
bWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczol
ZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgLy8gU3RyaW5nIHRvb2xzIAorICAgIGlubGluZSBRU3RyaW5nIHRvUVN0cmluZyhj
b25zdCBTdHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBRU3RyaW5nKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgUUNoYXIgKj4oc3RyLmNoYXJhY3RlcnMoKSksIHN0ci5sZW5ndGgoKSk7
CisgICAgfQorICAgIAorICAgIGlubGluZSBRU3RyaW5nIHRvUVN0cmluZyhjb25zdCBBdG9taWNT
dHJpbmcmIHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgUUNoYXIgKj4oc3RyLmNoYXJhY3RlcnMoKSksIHN0ci5sZW5ndGgoKSk7CisgICAg
fQorCisgICAgaW5saW5lIFFTdHJpbmcgdG9RU3RyaW5nKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcm
IHN0cikKKyAgICB7CisgICAgICAgIHJldHVybiBRU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgUUNoYXIgKj4oc3RyLnVuaWNvZGUoKSksIHN0ci5sZW5ndGgoKSk7CisgICAgfQorCisgICAg
aW5saW5lIFN0cmluZyBmcm9tUVN0cmluZyhjb25zdCBRU3RyaW5nJiBzdHIpCisgICAgeworICAg
ICAgICByZXR1cm4gU3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIgKj4oc3RyLmNv
bnN0RGF0YSgpKSwgc3RyLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICAvLyBGb250IHRvb2xzCisg
ICAgaW5saW5lIFFGb250IHRvUUZvbnQoY29uc3QgRm9udCYgZm9udCkKKyAgICB7CisgICAgICAg
IFFfQVNTRVJUKGZvbnQucHJpbWFyeUZvbnQoKSAhPSAwKTsKKyAgICAgICAgcmV0dXJuIGZvbnQu
cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpOworICAgIH0KK307CisKKy8vIHZp
bTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ltYWdlUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvSW1hZ2VRdC5jcHAJKFJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0ltYWdlUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5v
cmc+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJIZWxwZXJRdC5oIgorCisjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNpbmNsdWRl
IDxRUGl4bWFwPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNs
dWRlIDxRSW1hZ2VSZWFkZXI+CisKKyNpbmNsdWRlIDxRdERlYnVnPgorCisjaW5jbHVkZSA8bWF0
aC5oPgorCisvLyBUaGlzIGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAorVmVj
dG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFyKik7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBGcmFtZURhdGE6OmNsZWFyKCkKK3sKKyAgICBpZiAobV9mcmFt
ZSkgeworICAgICAgICBtX2ZyYW1lID0gMDsKKyAgICAgICAgbV9kdXJhdGlvbiA9IDAuOworICAg
ICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSW1hZ2UgQ2xhc3MKKy8vID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit2b2lkIEltYWdl
Ojppbml0TmF0aXZlRGF0YSgpCit7Cit9CisKK3ZvaWQgSW1hZ2U6OmRlc3Ryb3lOYXRpdmVEYXRh
KCkKK3sKK30KKwordm9pZCBJbWFnZTo6aW52YWxpZGF0ZU5hdGl2ZURhdGEoKQoreworfQorCitJ
bWFnZSogSW1hZ2U6OmxvYWRSZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQoreworICAgIFZlY3Rv
cjxjaGFyPiBhcnIgPSBsb2FkUmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7CisgICAgSW1hZ2UqIGlt
ZyA9IG5ldyBJbWFnZSgpOworICAgIGltZy0+c2V0TmF0aXZlRGF0YSgmYXJyLCB0cnVlKTsKKyAg
ICByZXR1cm4gaW1nOworfQorCitib29sIEltYWdlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5n
JiB0eXBlKQoreworICAgIHFEZWJ1ZygpIDw8ICJkb2VzIHN1cHBvcnQgaW1hZ2UgZm9ybWF0PyAi
PDwgdG9RU3RyaW5nKHR5cGUpOworCisgICAgUUxpc3Q8UUJ5dGVBcnJheT4gZm9ybWF0cyA9IFFJ
bWFnZVJlYWRlcjo6c3VwcG9ydGVkSW1hZ2VGb3JtYXRzKCk7CisgICAgZm9yZWFjaChRQnl0ZUFy
cmF5IGZvcm1hdCwgZm9ybWF0cykgeworICAgICAgICBpZiAoZm9ybWF0ID09IHR5cGUpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLyBEcmF3aW5nIFJvdXRpbmVzCit2b2lkIEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCisgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBpZiAoIW1f
c291cmNlLmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFFJ
bWFnZSogaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIGlmICghaW1h
Z2UpIHsgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbnRTaXplIHNlbGZTaXplID0gc2l6ZSgpOwor
ICAgIEZsb2F0UmVjdCBzcmNSZWN0KHNyYyk7CisgICAgRmxvYXRSZWN0IGRzdFJlY3QoZHN0KTsK
KworICAgIGN0eHQtPnNhdmUoKTsKKworICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0
aW9uLgorICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CisKKyAgICBRUGFpbnRl
ciAqcGFpbnRlcihjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisKKyAgICAvLyBUZXN0IHVzaW5n
IGV4YW1wbGUgc2l0ZSBhdAorICAgIC8vIGh0dHA6Ly93d3cubWV5ZXJ3ZWIuY29tL2VyaWMvY3Nz
L2VkZ2UvY29tcGxleHNwaXJhbC9kZW1vLmh0bWwgICAgCisgICAgcGFpbnRlci0+ZHJhd0ltYWdl
KGRzdCwgKmltYWdlLCBzcmMpOworCisgICAgY3R4dC0+cmVzdG9yZSgpOworCisgICAgc3RhcnRB
bmltYXRpb24oKTsKK30KKwordm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFBvaW50JiBzcmNQb2lu
dCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBDb21w
b3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBpZiAoIW1fc291cmNlLmluaXRpYWxpemVkKCkpIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFFJbWFnZSogaW1hZ2UgPSBmcmFtZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIFFQaXhtYXAgcGl4OworICAgIGlmICghaW1hZ2UpIHsg
Ly8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBJbnRTaXplIGludHJpbnNpY0ltYWdlU2l6ZSA9IHNpemUo
KTsKKworICAgIGlmICghcUZ1enp5Q29tcGFyZSh0aWxlU2l6ZS53aWR0aCgpLCBpbnRyaW5zaWNJ
bWFnZVNpemUud2lkdGgoKSkgfHwKKyAgICAgICAgIXFGdXp6eUNvbXBhcmUodGlsZVNpemUuaGVp
Z2h0KCksIGludHJpbnNpY0ltYWdlU2l6ZS5oZWlnaHQoKSkpIHsKKworICAgICAgICBRSW1hZ2Ug
aW1nKChpbnQpdGlsZVNpemUud2lkdGgoKSwgKGludCl0aWxlU2l6ZS5oZWlnaHQoKSwKKyAgICAg
ICAgICAgICAgICAgICBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7CisKKyAg
ICAgICAgUVBhaW50ZXIgcCgmaW1nKTsKKyAgICAgICAgcC5kcmF3SW1hZ2UoUVJlY3RGKDAsIDAs
IHRpbGVTaXplLndpZHRoKCksIHRpbGVTaXplLmhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgKmltYWdlLCBRUmVjdEYoc3JjUG9pbnQueCgpLCBzcmNQb2ludC55KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVTaXplLndpZHRoKCkgLSBzcmNQb2ludC54KCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlU2l6ZS5oZWlnaHQoKS0g
c3JjUG9pbnQueSgpKSk7CisgICAgICAgIHAuZW5kKCk7CisKKyAgICAgICAgcGl4ID0gUVBpeG1h
cDo6ZnJvbUltYWdlKGltZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcGl4ID0gUVBpeG1hcDo6
ZnJvbUltYWdlKCppbWFnZSk7CisgICAgfQorCisgICAgY3R4dC0+c2F2ZSgpOworCisgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG9wKTsKKyAgICBRUGFpbnRlciAqcCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwor
ICAgIHAtPmRyYXdUaWxlZFBpeG1hcChkc3RSZWN0LCBwaXgpOworCisgICAgY3R4dC0+cmVzdG9y
ZSgpOworICAgIAorICAgIHN0YXJ0QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgSW1hZ2U6OmNoZWNr
Rm9yU29saWRDb2xvcigpCit7CisgICAgLy8gRklYTUU6IEl0J3MgZWFzeSB0byBpbXBsZW1lbnQg
dGhpcyBvcHRpbWl6YXRpb24uIEp1c3QgbmVlZCB0byBjaGVjayB0aGUgUkdCQTMyIGJ1ZmZlciB0
byBzZWUgaWYgaXQgaXMgMXgxLgorICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7Cit9CisKK30K
KworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvSW1hZ2VT
b3VyY2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9JbWFnZVNvdXJj
ZVF0LmNwcAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvSW1hZ2VTb3VyY2VR
dC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VT
b3VyY2UuaCIKKworI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIkpQRUdJ
bWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJQTkdJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJC
TVBJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIuaCIKKyNpbmNsdWRl
ICJYQk1JbWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRRGVi
dWc+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VEZWNvZGVyKiBjcmVhdGVEZWNvZGVy
KGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDQg
Ynl0ZXMgdG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZyB3aXRo
LgorICAgIGludCBsZW5ndGggPSBkYXRhLnNpemUoKTsKKyAgICBpZiAobGVuZ3RoIDwgNCkgewor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiB1Q29u
dGVudHMgPSAoY29uc3QgdW5zaWduZWQgY2hhciopIGRhdGEuZGF0YSgpOworICAgIGNvbnN0IGNo
YXIqIGNvbnRlbnRzID0gZGF0YS5kYXRhKCk7CisKKyAgICAvLyBHSUZzIGJlZ2luIHdpdGggR0lG
OCg3IG9yIDkpLgorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiR0lGOCIsIDQpID09IDApIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsKKyAgICB9CisKKyAgICAvLyBU
ZXN0IGZvciBQTkcuCisgICAgaWYgKHVDb250ZW50c1swXSA9PSAweDg5ICYmCisgICAgICAgIHVD
b250ZW50c1sxXSA9PSAweDUwICYmCisgICAgICAgIHVDb250ZW50c1syXSA9PSAweDRFICYmCisg
ICAgICAgIHVDb250ZW50c1szXSA9PSAweDQ3KSB7CisgICAgICAgIHJldHVybiBuZXcgUE5HSW1h
Z2VEZWNvZGVyKCk7CisgICAgfQorCisgICAgLy8gSlBFRworICAgIGlmICh1Q29udGVudHNbMF0g
PT0gMHhGRiAmJgorICAgICAgICB1Q29udGVudHNbMV0gPT0gMHhEOCAmJgorICAgICAgICB1Q29u
dGVudHNbMl0gPT0gMHhGRikgeworICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIo
KTsKKyAgICB9CisKKyAgICAvLyBCTVAKKyAgICBpZiAoc3RybmNtcChjb250ZW50cywgIkJNIiwg
MikgPT0gMCkgeworICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2RlcigpOworICAgIH0K
KworICAgIC8vIElDT3MgYWx3YXlzIGJlZ2luIHdpdGggYSAyLWJ5dGUgMCBmb2xsb3dlZCBieSBh
IDItYnl0ZSAxLgorICAgIC8vIENVUnMgYmVnaW4gd2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBieSAy
LWJ5dGUgMi4KKyAgICBpZiAoIW1lbWNtcChjb250ZW50cywgIlwwMDBcMDAwXDAwMVwwMDAiLCA0
KSB8fAorICAgICAgICAhbWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAyXDAwMCIsIDQpKSB7
CisgICAgICAgIHJldHVybiBuZXcgSUNPSW1hZ2VEZWNvZGVyKCk7CisgICAgfQorCisgICAgLy8g
WEJNcyByZXF1aXJlIDggYnl0ZXMgb2YgaW5mby4KKyAgICBpZiAobGVuZ3RoID49IDggJiYgc3Ry
bmNtcChjb250ZW50cywgIiNkZWZpbmUgIiwgOCkgPT0gMCkgeworICAgICAgICByZXR1cm4gbmV3
IFhCTUltYWdlRGVjb2RlcigpOworICAgIH0KKworICAgIC8vIEdpdmUgdXAuIFdlIGRvbid0IGtu
b3cgd2hhdCB0aGUgaGVjayB0aGlzIGlzLgorICAgIHJldHVybiAwOworfQorCitJbWFnZVNvdXJj
ZTo6SW1hZ2VTb3VyY2UoKQorICAgIDogbV9kZWNvZGVyKDApCit7Cit9CisKK0ltYWdlU291cmNl
Ojp+SW1hZ2VTb3VyY2UoKQoreworICAgIGRlbGV0ZSBtX2RlY29kZXI7Cit9CisKK2Jvb2wgSW1h
Z2VTb3VyY2U6OmluaXRpYWxpemVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kZWNvZGVyOwor
fQorCit2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiogZGF0YSwg
Ym9vbCBhbGxEYXRhUmVjZWl2ZWQpCit7CisgICAgLy8gTWFrZSB0aGUgZGVjb2RlciBieSBzbmlm
ZmluZyB0aGUgYnl0ZXMuCisgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBleGFtaW5lIHRoZSBkYXRh
IGFuZCBpbnN0YW50aWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgYXBwcm9wcmlhdGUgZGVjb2RlciBw
bHVnaW4uCisgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0
ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCisgICAgLy8g
bWFkZS4KKyAgICBtX2RlY29kZXIgPSBjcmVhdGVEZWNvZGVyKCpkYXRhKTsKKworICAgIGlmICgh
bV9kZWNvZGVyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2RlY29kZXItPnNl
dERhdGEoKmRhdGEsIGFsbERhdGFSZWNlaXZlZCk7Cit9CisKK2Jvb2wgSW1hZ2VTb3VyY2U6Omlz
U2l6ZUF2YWlsYWJsZSgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBtX2RlY29kZXItPmlzU2l6ZUF2YWlsYWJsZSgp
OworfQorCitJbnRTaXplIEltYWdlU291cmNlOjpzaXplKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
ZGVjb2RlcikgeworICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworICAgIH0KKworICAgIHJldHVy
biBtX2RlY29kZXItPnNpemUoKTsKK30KKworaW50IEltYWdlU291cmNlOjpyZXBldGl0aW9uQ291
bnQoKQoreworICAgIGlmICghbV9kZWNvZGVyKSB7CisgICAgICAgIHJldHVybiBjQW5pbWF0aW9u
Tm9uZTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKTsK
K30KKworc2l6ZV90IEltYWdlU291cmNlOjpmcmFtZUNvdW50KCkgY29uc3QKK3sKKyAgICBpZiAo
IW1fZGVjb2RlcikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gbV9k
ZWNvZGVyLT5mcmFtZUNvdW50KCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpj
cmVhdGVGcmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyKSB7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0g
bV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVmZmVyIHx8
IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIFFJbWFnZSAqaW1nID0gIG5ldyBRSW1hZ2UoKHVuc2ln
bmVkIGNoYXIqKWJ1ZmZlci0+Ynl0ZXMoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplKCkud2lkdGgoKSwgYnVmZmVyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAgcmV0dXJuIGltZzsK
K30KKworZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRl
eCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVFbXB0eSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4gYnVmZmVyLT5kdXJhdGlvbigpIC8gMTAwMC4wZjsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6
ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVy
IHx8ICFtX2RlY29kZXItPnN1cHBvcnRzQWxwaGEoKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9
PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiBidWZmZXItPmhhc0FscGhhKCk7Cit9CisKK30KKworLy8gdmltOiB0
cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAkoUmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKFJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIg
PG11ZWxsZXJAa2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSA8UVN0eWxlPgorI2luY2x1ZGUgPFFXaWRnZXQ+CisjaW5jbHVkZSA8UVBhaW50ZXI+Cisj
aW5jbHVkZSA8UVN0eWxlT3B0aW9uQnV0dG9uPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJIZWxwZXJRdC5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVy
VGhlbWVRdCA6IHB1YmxpYyBSZW5kZXJUaGVtZQoreworcHVibGljOgorICAgIFJlbmRlclRoZW1l
UXQoKSA6IFJlbmRlclRoZW1lKCkgeyB9CisKKyAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUg
dGhlbWUncyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVy
ZWQuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVj
a2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGks
IHIpOworICAgIH0KKyAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250
cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9y
ZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFja2dyb3VuZExh
eWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVy
UG9wdXBNZW51KiBjcmVhdGVQb3B1cE1lbnUoUmVuZGVyQXJlbmEqLCBEb2N1bWVudCosIFJlbmRl
ck1lbnVMaXN0Kik7CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lu
cyhSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIGJvb2wgc3Vw
cG9ydHNGb2N1cyhFQXBwZWFyYW5jZSkgY29uc3Q7CisKKyAgICBib29sIHN0eWxlUGFpbnRlckFu
ZFdpZGdldEZvclBhaW50SW5mbyhjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgUVN0
eWxlKiYgc3R5bGUsIFFQYWludGVyKiYgcGFpbnRlciwgUVdpZGdldComIHdpZGdldCkgY29uc3Q7
CisKKyAgICBFQXBwZWFyYW5jZSBhcHBseVRoZW1lKFFTdHlsZU9wdGlvbiYgb3B0aW9uLCBSZW5k
ZXJPYmplY3QqIG8pIGNvbnN0OworfTsKKworUmVuZGVyVGhlbWUqIHRoZW1lKCkKK3sKKyAgICBz
dGF0aWMgUmVuZGVyVGhlbWVRdCBydDsKKyAgICByZXR1cm4gJnJ0OworfQorCitib29sIFJlbmRl
clRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IEJvcmRlckRhdGEmIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBCYWNrZ3JvdW5kTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3Jv
dW5kQ29sb3IpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZp
ZWxkQXBwZWFyYW5jZSB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRBcmVhQXBwZWFyYW5j
ZSkgeworICAgICAgICByZXR1cm4gc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcjsKKyAgICB9CisK
KyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBi
YWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OmNv
bnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICBp
ZiAoIWlzRW5hYmxlZChvKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gQ2hlY2tib3hlcyBvbmx5IGhhdmUgdGludCB3aGVuIGNoZWNrZWQuCisgICAgaWYgKG8tPnN0
eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveEFwcGVhcmFuY2UpIHsKKyAgICAgICAgcmV0
dXJuIGlzQ2hlY2tlZChvKTsKKyAgICB9CisKKyAgICAvLyBGb3Igbm93IGFzc3VtZSBvdGhlciBj
b250cm9scyBoYXZlIHRpbnQgaWYgZW5hYmxlZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVF0OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYg
Zm9udERlc2NyaXB0aW9uKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1Jl
bmRlclBvcHVwTWVudSogUmVuZGVyVGhlbWVRdDo6Y3JlYXRlUG9wdXBNZW51KFJlbmRlckFyZW5h
KiwgRG9jdW1lbnQqLCBSZW5kZXJNZW51TGlzdCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjphZGRJbnRyaW5zaWNNYXJn
aW5zKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBDdXQgb3V0IHRoZSBpbnRy
aW5zaWMgbWFyZ2lucyBjb21wbGV0ZWx5IGlmIHdlIGVuZCB1cCB1c2luZyBhIHNtYWxsIGZvbnQg
c2l6ZQorICAgIGlmIChzdHlsZS0+Zm9udFNpemUoKSA8IDExKSB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBJbnRyaW5zaWMgbWFyZ2luIHZhbHVlLgorICAgIGNvbnN0IGludCBt
ID0gMjsKKworICAgIC8vIEZJWE1FOiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBh
bHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KKyAgICBpZiAo
c3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUt
Pm1hcmdpbkxlZnQoKS5xdWlyaygpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luTGVm
dChMZW5ndGgobSwgRml4ZWQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHlsZS0+bWFy
Z2luUmlnaHQoKS5xdWlyaygpKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luUmlnaHQo
TGVuZ3RoKG0sIEZpeGVkKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKSB7CisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luVG9wKCkucXVpcmso
KSkgeworICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5ndGgobSwgRml4ZWQpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmsoKSkg
eworICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkJvdHRvbShMZW5ndGgobSwgRml4ZWQpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpzdHlsZVBhaW50ZXJB
bmRXaWRnZXRGb3JQYWludEluZm8oY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIFFT
dHlsZSomIHN0eWxlLCBRUGFpbnRlciomIHBhaW50ZXIsIFFXaWRnZXQqJiB3aWRnZXQpIGNvbnN0
Cit7CisgICAgcGFpbnRlciA9IChpLnAgPyBzdGF0aWNfY2FzdDxRUGFpbnRlciAqPihpLnAtPnBs
YXRmb3JtQ29udGV4dCgpKSA6IDApOworICAgIHdpZGdldCA9IChwYWludGVyID8gc3RhdGljX2Nh
c3Q8UVdpZGdldCAqPihwYWludGVyLT5kZXZpY2UoKSkgOiAwKTsKKyAgICBzdHlsZSA9ICh3aWRn
ZXQgPyB3aWRnZXQtPnN0eWxlKCkgOiAwKTsKKworICAgIGlmIChwYWludGVyICYmIHdpZGdldCAm
JiBzdHlsZSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90
aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghc3R5bGUt
PndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygp
KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2Rl
ZCBzaXplIG9mIDEzIGlzIHVzZWQuICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkgZm9yIG5v
dy4gIEl0IG1hdGNoZXMgRmlyZWZveC4KKyAgICAvLyBBdCBkaWZmZXJlbnQgRFBJIHNldHRpbmdz
IG9uIFdpbmRvd3MsIHF1ZXJ5aW5nIHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0
aGF0IGFjY291bnRzIGZvcgorICAgIC8vIHRoZSBoaWdoZXIgRFBJLiAgVW50aWwgb3VyIGVudGly
ZSBlbmdpbmUgaG9ub3JzIGEgRFBJIHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UgY2FuJ3QgcmVs
eSBvbiB0aGUgdGhlbWUncworICAgIC8vIG1ldHJpY3MuCisgICAgaWYgKHN0eWxlLT53aWR0aCgp
LmlzSW50cmluc2ljT3JBdXRvKCkpIHsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCgx
MywgRml4ZWQpKTsKKyAgICB9CisKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7
CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKDEzLCBGaXhlZCkpOworICAgIH0KK30K
Kwordm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAoreworICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2hlY2tib3hlcy4KKyAgICBzZXRD
aGVja2JveFNpemUoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzRm9j
dXMoRUFwcGVhcmFuY2UgYXBwZWFyYW5jZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFu
Y2UpIHsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uQXBwZWFyYW5jZToKKyAgICAgICAgY2FzZSBC
dXR0b25BcHBlYXJhbmNlOgorICAgICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0VBcHBlYXJhbmNlIFJl
bmRlclRoZW1lUXQ6OmFwcGx5VGhlbWUoUVN0eWxlT3B0aW9uJiBvcHRpb24sIFJlbmRlck9iamVj
dCogbykgY29uc3QKK3sKKyAgICAvLyBEZWZhdWx0IGJpdHM6IG5vIGZvY3VzLCBubyBtb3VzZSBv
dmVyCisgICAgb3B0aW9uLnN0YXRlICY9IH4oUVN0eWxlOjpTdGF0ZV9IYXNGb2N1cyB8IFFTdHls
ZTo6U3RhdGVfTW91c2VPdmVyKTsKKworICAgIGlmICghaXNFbmFibGVkKG8pKSB7CisgICAgICAg
IG9wdGlvbi5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9FbmFibGVkOworICAgIH0KKworICAgIGlm
IChpc1JlYWRPbmx5Q29udHJvbChvKSkgeworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxl
OjpTdGF0ZV9SZWFkT25seTsgLy8gUmVhZG9ubHkgaXMgc3VwcG9ydGVkIG9uIHRleHRmaWVsZHMu
CisgICAgfQorCisgICAgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
KSAmJiBpc0ZvY3VzZWQobykpIHsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3Rh
dGVfSGFzRm9jdXM7CisgICAgfQorCisgICAgaWYgKGlzSG92ZXJlZChvKSkgeworICAgICAgICBv
cHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7CisgICAgfQorCisgICAgaWYg
KGlzUHJlc3NlZChvKSkgeworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9T
dW5rZW47CisgICAgfQorCisgICAgRUFwcGVhcmFuY2UgcmVzdWx0ID0gby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpOworICAgIGlmKHJlc3VsdCA9PSBSYWRpb0FwcGVhcmFuY2UgfHwgcmVzdWx0ID09
IENoZWNrYm94QXBwZWFyYW5jZSkgeworICAgICAgICBvcHRpb24uc3RhdGUgfD0gKGlzQ2hlY2tl
ZChvKSA/IFFTdHlsZTo6U3RhdGVfT24gOiBRU3R5bGU6OlN0YXRlX09mZik7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAoreworICAgIGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOworfQorCiti
b29sIFJlbmRlclRoZW1lUXQ6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgUVN0eWxl
ICpzdHlsZSA9IDA7CisgICAgUVBhaW50ZXIgKnBhaW50ZXIgPSAwOworICAgIFFXaWRnZXQgKndp
ZGdldCA9IDA7CisgICAgCisgICAgaWYgKCFzdHlsZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWludElu
Zm8oaSwgc3R5bGUsIHBhaW50ZXIsIHdpZGdldCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247CisgICAgb3B0aW9uLmlu
aXRGcm9tKHdpZGdldCk7CisgICAgb3B0aW9uLnJlY3QgPSByOworCisgICAgLy8gR2V0IHRoZSBj
b3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgYnV0dG9uCisgICAgRUFwcGVhcmFuY2UgYXBwZWFyYW5j
ZSA9IGFwcGx5VGhlbWUob3B0aW9uLCBvKTsKKyAgCisgICAgaWYoYXBwZWFyYW5jZSA9PSBQdXNo
QnV0dG9uQXBwZWFyYW5jZSB8fCBhcHBlYXJhbmNlID09IEJ1dHRvbkFwcGVhcmFuY2UpIHsKKyAg
ICAgICAgc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHVzaEJ1dHRvbiwgJm9wdGlvbiwg
cGFpbnRlcik7CisgICAgfSBlbHNlIGlmKGFwcGVhcmFuY2UgPT0gUmFkaW9BcHBlYXJhbmNlKSB7
CisgICAgICAgIHN0eWxlLT5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCAmb3B0
aW9uLCBwYWludGVyKTsKKyAgICB9IGVsc2UgaWYoYXBwZWFyYW5jZSA9PSBDaGVja2JveEFwcGVh
cmFuY2UpIHsKKyAgICAgICAgc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfQ2hlY2tCb3gs
ICZvcHRpb24sIHBhaW50ZXIpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBhZGRJbnRyaW5zaWNN
YXJnaW5zKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFRleHRGaWVsZChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQoreworICAgIFFTdHlsZSAqc3R5bGUgPSAwOworICAgIFFQYWludGVyICpwYWlu
dGVyID0gMDsKKyAgICBRV2lkZ2V0ICp3aWRnZXQgPSAwOworICAgIAorICAgIGlmICghc3R5bGVQ
YWludGVyQW5kV2lkZ2V0Rm9yUGFpbnRJbmZvKGksIHN0eWxlLCBwYWludGVyLCB3aWRnZXQpKSB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgCisgICAgUVN0eWxlT3B0aW9uIG9wdGlv
bjsKKworICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIGJ1dHRvbgorICAg
IEVBcHBlYXJhbmNlIGFwcGVhcmFuY2UgPSBhcHBseVRoZW1lKG9wdGlvbiwgbyk7CisgICAgUV9B
U1NFUlQoYXBwZWFyYW5jZSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlKTsKKworICAgIC8vIE5vdyBw
YWludCB0aGUgdGV4dCBmaWVsZC4KKyAgICAvLyBUT0RPOiB0aGlzIGlzIG5vdCBlbm91Z2ggZm9y
IHN1cmUhICh1c2UgJ29wdGlvbicuLi4pCisgICAgcGFpbnRlci0+ZHJhd1JlY3Qocik7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vcXQvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyQ3VybC5jcHAJKFJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyQ3VybC5jcHAJKFJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA1LCAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSA8UURlYnVnPgorI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlbHBlclF0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXIuaCIKKworI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZGVySW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck1hbmFnZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZXNvdXJjZUxvYWRlckludGVybmFsOjp+UmVzb3VyY2VMb2Fk
ZXJJbnRlcm5hbCgpCit7Cit9CisKK1Jlc291cmNlTG9hZGVyOjp+UmVzb3VyY2VMb2FkZXIoKQor
eworICAgIGNhbmNlbCgpOworfQorCitib29sIFJlc291cmNlTG9hZGVyOjpzdGFydChEb2NMb2Fk
ZXIqIGRvY0xvYWRlcikKK3sKKyAgICBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmdldCgpLT5hZGQo
dGhpcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmNhbmNl
bCgpCit7CisgICAgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpnZXQoKS0+Y2FuY2VsKHRoaXMpOwor
fQorCit2b2lkIFJlc291cmNlTG9hZGVyOjphc3NlbWJsZVJlc3BvbnNlSGVhZGVycygpIGNvbnN0
Cit7CisgICAgaWYgKCFkLT5hc3NlbWJsZWRSZXNwb25zZUhlYWRlcnMpIHsKKyAgICAgICAgZC0+
cmVzcG9uc2VIZWFkZXJzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbVV0ZjgoZC0+cmVzcG9uc2Uu
dG9VdGY4KCksIGQtPnJlc3BvbnNlLmxlbmd0aCgpKTsKKyAgICAgICAgZC0+YXNzZW1ibGVkUmVz
cG9uc2VIZWFkZXJzID0gdHJ1ZTsKKyAKKyAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgY2xpZW50
IGFjdGl2YXRpb24gdG8gcmVjZWl2ZWRSZXNwb25zZSgpLCBvbmNlCisgICAgICAgIC8vIHdlIHVz
ZSBLSU8sIGFuZCByZWNlaXZlZFJlc3BvbnNlKCkgaXMgY2FsbGVkIG9ubHkgb25jZS4KKyAgICAg
ICAgaWYgKGQtPmNsaWVudCkgeworICAgICAgICAgICAgZC0+Y2xpZW50LT5yZWNlaXZlZFJlc3Bv
bnNlKGNvbnN0X2Nhc3Q8UmVzb3VyY2VMb2FkZXIgKj4odGhpcyksIChjaGFyICopIGQtPnJlc3Bv
bnNlLmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBkLT5yZXNwb25zZSA9IFFTdHJpbmco
KTsgLy8gUmVzZXQKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2hh
cnNldCgpIGNvbnN0Cit7CisgICAgaWYgKCFkLT5yZXRyaWV2ZWRDaGFyc2V0KSB7CisgICAgICAg
IGQtPnJldHJpZXZlZENoYXJzZXQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFRPRE86IFdlIGNh
biBqdXN0IHBhcnNlIHRoZSBoZWFkZXJzIGhlcmUsIGJ1dCBvbmNlIHdlIHVzZSBLSU8KKyAgICAv
LyB3ZSBjYW4gc2V0IHRoZSByZXNwb25zZSBwYXJhbWV0ZXIgdG8gc3RoLiBlbHNlIHRoYW4gYSAi
Y2hhcioiLgorICAgIC8vIEkgc2F2ZSBteSB0aW1lIGJ1dCBub3QgaW1wbGVtZW50aW5nIGl0IGZv
ciBub3cgOi0pCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRl
cjo6cmVjZWl2ZWRSZXNwb25zZShjaGFyKiByZXNwb25zZSkKK3sKKyAgICBRX0FTU0VSVChtZXRo
b2QoKSA9PSAiUE9TVCIpOworCisgICAgZC0+YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzID0gZmFs
c2U7CisgICAgZC0+cmV0cmlldmVkQ2hhcnNldCA9IGZhbHNlOworCisgICAgLy8gVE9ETzogVGhp
cyBpcyBmbGF3ZWQ6CisgICAgLy8gLSB1c3VhbGx5IHJlY2VpdmVkUmVzcG9uc2UoKSBzaG91bGQg
YmUgY2FsbGVkIF9vbmNlXywgd2hlbiB0aGUKKyAgICAvLyAgIHJlc3BvbnNlIGlzIGF2YWlsYWJs
ZSAtIHNlZW1zIHZlcnkgdW5mbGV4aWJsZSB0byBkbyB0aGF0IHdpdGggbGliY3VybAorICAgIC8v
ICAgKHNvIGxldCdzIHdhaXQgdW50aWwgaXQgZGllcyBhbmQgZG8gaXQgcHJvcGVybHkgd2l0aCBL
SU8gdGhlbi4pCisgICAgLy8gLSBRU3RyaW5nOjpmcm9tTGF0aW4xKCkgaXMgYWxzbyB3cm9uZywg
b2YgY291cnNlLgorICAgIC8vCisgICAgLy8gQW55d2F5LCBsZXQncyBjb2xsZWN0IHRoZSByZXNw
b25zZSBkYXRhIGhlcmUsIGFzIHRoZSBSZXNvdXJjZUxvYWRlck1hbmFnZXIKKyAgICAvLyBjYWxs
cyB1cyBmb3IgZXZlcnkgbGluZSBvZiB0aGUgaGVhZGVyIGl0IHJlY2VpdmVzLgorICAgIGQtPnJl
c3BvbnNlICs9IFFTdHJpbmc6OmZyb21MYXRpbjEocmVzcG9uc2UpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3F0L1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuY3BwCShSZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuY3BwCShSZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZGVyTWFuYWdlci5oIgorCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJS
ZXNvdXJjZUxvYWRlckludGVybmFsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3Qg
aW50IHNlbGVjdFRpbWVvdXRNUyA9IDU7Citjb25zdCBkb3VibGUgcG9sbFRpbWVTZWNvbmRzID0g
MC4wNTsKKworUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpSZXNvdXJjZUxvYWRlck1hbmFnZXIoKQor
ICAgIDogbV91c2VTaW1wbGUoZmFsc2UpCisgICAgLCBqb2JzKG5ldyBIYXNoU2V0PFJlc291cmNl
TG9hZGVyKj4pCisgICAgLCBtX2Rvd25sb2FkVGltZXIodGhpcywgJlJlc291cmNlTG9hZGVyTWFu
YWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKQoreworICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VS
TF9HTE9CQUxfQUxMKTsKKyAgICBjdXJsTXVsdGlIYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsK
K30KKworUmVzb3VyY2VMb2FkZXJNYW5hZ2VyKiBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmdldCgp
Cit7CisgICAgc3RhdGljIFJlc291cmNlTG9hZGVyTWFuYWdlciogc19zaW5nbGV0b247CisKKyAg
ICBpZiAoIXNfc2luZ2xldG9uKQorICAgICAgICBzX3NpbmdsZXRvbiA9IG5ldyBSZXNvdXJjZUxv
YWRlck1hbmFnZXI7CisKKyAgICByZXR1cm4gc19zaW5nbGV0b247Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkZXJNYW5hZ2VyOjp1c2VTaW1wbGVUcmFuc2Zlcihib29sIHVzZVNpbXBsZSkKK3sKKyAg
ICBtX3VzZVNpbXBsZSA9IHVzZVNpbXBsZTsKK30KKworc3RhdGljIHNpemVfdCB3cml0ZUNhbGxi
YWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogb2JqKQorewor
ICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRlcio+KG9i
aik7CisgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsK
KyAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOworICAgIGQtPmNsaWVudC0+cmVjZWl2
ZWREYXRhKGpvYiwgc3RhdGljX2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisgICAgcmV0
dXJuIHRvdGFsU2l6ZTsKK30KKworc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBw
dHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIG9iaikKK3sKKyAgICBSZXNvdXJj
ZUxvYWRlciogam9iID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VMb2FkZXIqPihvYmopOworICAgIFJl
c291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgCisgICAgaWYg
KGpvYi0+bWV0aG9kKCkgPT0gIlBPU1QiKSB7CisgICAgICAgIGpvYi0+cmVjZWl2ZWRSZXNwb25z
ZShwdHIpOworICAgIH0KKyAgICAKKyAgICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOwor
ICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpk
b3dubG9hZFRpbWVyQ2FsbGJhY2soVGltZXI8UmVzb3VyY2VMb2FkZXJNYW5hZ2VyPiogdGltZXIp
Cit7CisgICAgaWYgKGpvYnMtPmlzRW1wdHkoKSkgeworICAgICAgICBtX2Rvd25sb2FkVGltZXIu
c3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fdXNlU2ltcGxlKSB7
CisgICAgICAgIGZvciAoSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+OjppdGVyYXRvciBpdCA9IGpv
YnMtPmJlZ2luKCk7IGl0ICE9IGpvYnMtPmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBSZXNv
dXJjZUxvYWRlciogam9iID0gKml0OworICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5h
bCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICAgICAgICAgIENVUkxjb2RlIHJlcyA9IGN1
cmxfZWFzeV9wZXJmb3JtKGQtPm1faGFuZGxlKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gQ1VS
TEVfT0spCisgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBXSVRIIEpPQiAlZFxuIiwgcmVz
KTsKKyAgICAgICAgICAgIGQtPmNsaWVudC0+cmVjZWl2ZWRBbGxEYXRhKGpvYiwgMCk7CisgICAg
ICAgICAgICBkLT5jbGllbnQtPnJlY2VpdmVkQWxsRGF0YShqb2IpOworICAgICAgICAgICAgY3Vy
bF9lYXN5X2NsZWFudXAoZC0+bV9oYW5kbGUpOworICAgICAgICAgICAgZC0+bV9oYW5kbGUgPSAw
OworICAgICAgICB9CisKKyAgICAgICAgam9icy0+Y2xlYXIoKTsKKyAgICAgICAgbV9kb3dubG9h
ZFRpbWVyLnN0b3AoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGRF9aRVJPKCZmZHJlYWQpOwor
ICAgICAgICBGRF9aRVJPKCZmZHdyaXRlKTsKKyAgICAgICAgRkRfWkVSTygmZmRleGNlcCk7Cisg
ICAgICAgIGN1cmxfbXVsdGlfZmRzZXQoY3VybE11bHRpSGFuZGxlLCAmZmRyZWFkLCAmZmR3cml0
ZSwgJmZkZXhjZXAsICZtYXhmZCk7CisgICAgICAgIGludCBucnVubmluZzsKKyAgICAgICAgc3Ry
dWN0IHRpbWV2YWwgdGltZW91dDsKKyAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgdGltZW91
dC50dl9zZWMgPSAwOworICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSBzZWxlY3RUaW1lb3V0TVMg
KiAxMDAwOyAgICAgICAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRzCisgICAgICAgIHJldHZh
bCA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGlt
ZW91dCk7CisgICAgICAgIHN3aXRjaCAocmV0dmFsKSB7CisgICAgICAgICAgICBjYXNlIC0xOiAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdCBlcnJvcgorI2lmbmRlZiBOREVCVUcKKyAg
ICAgICAgICAgICAgICBwcmludGYoIiVzLCBzZWxlY3QgZXJyb3IoJWQpXG4iLCBfX1BSRVRUWV9G
VU5DVElPTl9fLHJldHZhbCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3Vn
aCovCisgICAgICAgICAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAvLyBzZWxlY3QgdGltZW91
dAorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAgICBwcmludGYoIiVzLCBzZWxlY3QgdGlt
ZW91dCAlZFxuIiwgX19QUkVUVFlfRlVOQ1RJT05fXyxyZXR2YWwpOworI2VuZGlmCisgICAgICAg
ICAgICAgICAgLyogZmFsbHRocm91Z2guIHRoaXMgY2FuIGJlIHRoZSBmaXJzdCBwZXJmb3JtIHRv
IGJlIG1hZGUgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gMSsgZGVzY3JpcHRvcnMgaGF2ZSBkYXRhCisgICAgICAgICAgICAgICAgd2hpbGUgKENVUkxN
X0NBTExfTVVMVElfUEVSRk9STSA9PSBjdXJsX211bHRpX3BlcmZvcm0oY3VybE11bHRpSGFuZGxl
LCAmbnJ1bm5pbmcpKQorICAgICAgICAgICAgICAgICAgICB7IH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1lc3NhZ2VzIGluZGljYXRpbmcgY29tcGxldGVkIHRyYW5z
ZmVycworICAgICAgICAvLyBhbmQgZnJlZSB0aGVpciByZXNvdXJjZXMKKyAgICAgICAgUmVzb3Vy
Y2VMb2FkZXIqIGpvYjsKKyAgICAgICAgaW50IG5tc2dzOworICAgICAgICB3aGlsZSAoQ1VSTE1z
ZyogbXNnID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoY3VybE11bHRpSGFuZGxlLCAmbm1zZ3MpKSB7
CisgICAgICAgICAgICBpZiAobXNnLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7CisgICAgICAgICAg
ICAgICAgLy8gZmluZCB0aGUgbm9kZSB3aGljaCBoYXMgc2FtZSBkLT5tX2hhbmRsZSBhcyBjb21w
bGV0ZWQgdHJhbnNmZXIKKyAgICAgICAgICAgICAgICBDVVJMKiBjaGFuZGxlID0gbXNnLT5lYXN5
X2hhbmRsZTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoY2hhbmRsZSk7CisgICAgICAgICAgICAg
ICAgUmVzb3VyY2VMb2FkZXIgKmpvYjsKKyAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5m
byhjaGFuZGxlLCBDVVJMSU5GT19QUklWQVRFLCAmam9iKTsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQoam9iKTsgLy9maXhtZTogYXNzZXJ0LT5pZiA/CisgICAgICAgICAgICAgICAgLy8gaWYgZm91
bmQsIGRlbGV0ZSBpdAorICAgICAgICAgICAgICAgIGlmIChqb2IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCAqZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChtc2ctPmRhdGEucmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIENVUkxFX09LOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdXNlIHRoaXMgdG8gYXV0aGVudGljYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9uZyByZXNwQ29kZSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxf
ZWFzeV9nZXRpbmZvKGQtPm1faGFuZGxlLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLCAmcmVzcENv
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZShqb2IpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcmludGYoIkN1cmwgRVJST1IgJXNcbiIsIGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEu
cmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iLT5zZXRFcnJvcihtc2ct
PmRhdGEucmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoam9iKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi
Q3VybFJlcXVlc3Qgbm90IGZvdW5kLCBldmVudGhvdWdoIGN1cmwgZC0+bV9oYW5kbGUgZmluaXNo
ZWRcbiIpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFqb2JzLT5pc0Vt
cHR5KCkpCisgICAgICAgIG1fZG93bmxvYWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNv
bmRzKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnJlbW92ZShSZXNvdXJjZUxv
YWRlciogam9iKQoreworICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldElu
dGVybmFsKCk7CisgICAgaWYgKCFkLT5tX2hhbmRsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChqb2JzLT5jb250YWlucyhqb2IpKQorICAgICAgICBqb2JzLT5yZW1vdmUoam9iKTsKKyAgICBp
ZiAoam9icy0+aXNFbXB0eSgpKQorICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOworICAg
IGQtPmNsaWVudC0+cmVjZWl2ZWRBbGxEYXRhKGpvYiwgMCk7CisgICAgZC0+Y2xpZW50LT5yZWNl
aXZlZEFsbERhdGEoam9iKTsKKyAgICBpZiAoZC0+bV9oYW5kbGUpIHsKKyAgICAgICAgY3VybF9t
dWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxNdWx0aUhhbmRsZSwgZC0+bV9oYW5kbGUpOworICAgICAg
ICBjdXJsX2Vhc3lfY2xlYW51cChkLT5tX2hhbmRsZSk7CisgICAgICAgIGQtPm1faGFuZGxlID0g
TlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjphZGQoUmVzb3Vy
Y2VMb2FkZXIqIGpvYikKK3sKKyAgICBib29sIHN0YXJ0VGltZXIgPSBqb2JzLT5pc0VtcHR5KCk7
CisgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAg
ICBEZXByZWNhdGVkU3RyaW5nIHVybCA9IGQtPlVSTC51cmwoKTsKKyAgICBkLT5tX2hhbmRsZSA9
IGN1cmxfZWFzeV9pbml0KCk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VS
TE9QVF9QUklWQVRFLCBqb2IpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfRVJST1JCVUZGRVIsIGVycm9yX2J1ZmZlcik7CisgICAgY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZUNhbGxiYWNrKTsKKyAgICBj
dXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFREFUQSwgam9iKTsKKyAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBo
ZWFkZXJDYWxsYmFjayk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9Q
VF9XUklURUhFQURFUiwgam9iKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFu
ZGxlLCBDVVJMT1BUX01BWFJFRElSUywgMTApOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FOWSk7CisgICAgLy8gdXJsIHB0ciBt
dXN0IHJlbWFpbiB2YWxpZCB0aHJvdWdoIHRoZSByZXF1ZXN0CisgICAgY3VybF9lYXN5X3NldG9w
dChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9VUkwsIHVybC5hc2NpaSgpKTsKKworICAgIGlmIChqb2It
Pm1ldGhvZCgpID09ICJQT1NUIikgeworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHBvc3REYXRh
ID0gam9iLT5wb3N0RGF0YSgpLmZsYXR0ZW5Ub1N0cmluZygpOworCisgICAgICAgIGNoYXIgKnBv
c3REYXRhU3RyaW5nID0gKGNoYXIgKikgbWFsbG9jKHBvc3REYXRhLmxlbmd0aCgpICsgMSk7Cisg
ICAgICAgIHN0cm5jcHkocG9zdERhdGFTdHJpbmcsIHBvc3REYXRhLmFzY2lpKCksIHBvc3REYXRh
Lmxlbmd0aCgpKTsKKyAgICAgICAgcG9zdERhdGFTdHJpbmdbcG9zdERhdGEubGVuZ3RoKCldID0g
J1wwJzsKKworICAgICAgICAvLyBUT0RPOiBEbyBpdCBwcm9wZXJseSBhZnRlciB3ZSBnb3Qgcmlk
IG9mIGxpYmN1cmwhIChhbHNvIGxlYWtzIHRoZSBoZWFkZXJsaXN0LiBobXBmLikKKyAgICAgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTLCBwb3N0RGF0
YVN0cmluZyk7CisgICAgfQorCisgICAgaWYgKG1fdXNlU2ltcGxlKQorICAgICAgICBqb2JzLT5h
ZGQoam9iKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQ1VSTE1jb2RlIHJldCA9IGN1cmxfbXVsdGlf
YWRkX2hhbmRsZShjdXJsTXVsdGlIYW5kbGUsIGQtPm1faGFuZGxlKTsKKyAgICAgICAgLy8gZG9u
J3QgY2FsbCBwZXJmb3JtLCBiZWNhdXNlIGV2ZW50cyBtdXN0IGJlIGFzeW5jCisgICAgICAgIC8v
IHRpbWVvdXQgd2lsbCBvY2N1ciBhbmQgZG8gY3VybF9tdWx0aV9wZXJmb3JtCisgICAgICAgIGlm
IChyZXQgJiYgcmV0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeworICAgICAgICAgICAg
cHJpbnRmKCJFcnJvciAlZCBzdGFydGluZyBqb2IgJXNcbiIsIHJldCwgZC0+VVJMLnVybCgpLmFz
Y2lpKCkpOworICAgICAgICAgICAgam9iLT5zZXRFcnJvcigxKTsKKyAgICAgICAgICAgIHN0YXJ0
VGltZXIgPWZhbHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGpvYnMtPmFkZChqb2Ip
OworICAgIH0KKyAgICBpZiAoc3RhcnRUaW1lcikKKyAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0
YXJ0T25lU2hvdChwb2xsVGltZVNlY29uZHMpOworfQorCit2b2lkIFJlc291cmNlTG9hZGVyTWFu
YWdlcjo6Y2FuY2VsKFJlc291cmNlTG9hZGVyKiBqb2IpCit7CisgICAgcmVtb3ZlKGpvYik7Cisg
ICAgam9iLT5zZXRFcnJvcigxKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyB2
aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRl
ck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Jlc291cmNlTG9h
ZGVyTWFuYWdlci5oCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJj
ZUxvYWRlck1hbmFnZXIuaAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwu
Y29tIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUxv
YWRlck1hbmFnZXJfSF8KKyNkZWZpbmUgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyX0hfCisKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
ZXJDbGllbnQuaCIKKyNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZXNvdXJjZUxvYWRlck1hbmFnZXIgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZXNvdXJjZUxvYWRlck1hbmFnZXIqIGdldCgpOworICAgIHZvaWQgYWRkKFJlc291cmNlTG9hZGVy
Kik7CisgICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VMb2FkZXIqKTsKKworICAgIC8vIElmIHRydWUs
IGRvbid0IG11bHRpcGxleCBkb3dubG9hZHM6IGRvd25sb2FkIGNvbXBsZXRlbHkgb25lIGF0IGEg
dGltZS4KKyAgICB2b2lkIHVzZVNpbXBsZVRyYW5zZmVyKGJvb2wgdXNlU2ltcGxlKTsKKworcHJp
dmF0ZToKKyAgICBSZXNvdXJjZUxvYWRlck1hbmFnZXIoKTsKKyAgICB2b2lkIGRvd25sb2FkVGlt
ZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJjZUxvYWRlck1hbmFnZXI+Kik7CisgICAgdm9pZCByZW1v
dmUoUmVzb3VyY2VMb2FkZXIqKTsKKworICAgIGJvb2wgbV91c2VTaW1wbGU7CisgICAgSGFzaFNl
dDxSZXNvdXJjZUxvYWRlcio+KiBqb2JzOworICAgIFRpbWVyPFJlc291cmNlTG9hZGVyTWFuYWdl
cj4gbV9kb3dubG9hZFRpbWVyOworICAgIENVUkxNKiBjdXJsTXVsdGlIYW5kbGU7IC8vIG5vdCBm
cmVlZAorCisgICAgLy8gY3VybCBmaWxlaGFuZGxlcyB0byBwb2xsIHdpdGggc2VsZWN0CisgICAg
ZmRfc2V0IGZkcmVhZDsKKyAgICBmZF9zZXQgZmR3cml0ZTsKKyAgICBmZF9zZXQgZmRleGNlcDsK
KworICAgIGludCBtYXhmZDsKKyAgICBjaGFyIGVycm9yX2J1ZmZlcltDVVJMX0VSUk9SX1NJWkVd
OworCisgICAgLy8gTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29scwor
ICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjdXJsX3Byb3RvY29sczsgLy8gbm90IGZyZWVkCit9Owor
Cit9CisKKyNlbmRpZgorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lckxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3F0L1NoYXJlZFRpbWVyTGludXguY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lckxpbnV4LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3Jn
PgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJTaGFyZWRU
aW1lckxpbnV4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2hhcmVkVGltZXIqIFNoYXJl
ZFRpbWVyOjpzX3NlbGYgPSAwOyAvLyBGSVhNRTogc3RhdGljZGVsZXRlcgorCit2b2lkIHNldFNo
YXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZikoKSkKK3sKKyAgICBTaGFyZWRUaW1lcjo6
aW5zdCgpLT5fdGltZXJGdW5jdGlvbiA9IGY7Cit9CisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJl
VGltZShkb3VibGUgZmlyZVRpbWUpCit7CisgICAgU2hhcmVkVGltZXI6Omluc3QoKS0+c3RhcnQo
cU1heCgwLCBpbnQoZmlyZVRpbWUgLSBjdXJyZW50VGltZSgpKSkpOworfQorCit2b2lkIHN0b3BT
aGFyZWRUaW1lcigpCit7CisgICAgU2hhcmVkVGltZXI6Omluc3QoKS0+c3RvcCgpOworfQorCit9
CisKKyNpbmNsdWRlICJTaGFyZWRUaW1lckxpbnV4Lm1vYyIKKworLy8gdmltOiB0cz00IHN3PTQg
ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2hhcmVkVGltZXJMaW51eC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2hhcmVkVGltZXJMaW51eC5oCShSZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TaGFyZWRUaW1lckxpbnV4LmgJKFJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlr
b3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
I2lmbmRlZiBTSEFSRURUSU1FUkxJTlVYX0gKKyNkZWZpbmUgU0hBUkVEVElNRVJMSU5VWF9ICisK
KyNpbmNsdWRlICJTaGFyZWRUaW1lci5oIgorCisjaW5jbHVkZSAiU3lzdGVtVGltZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxz
dGRsaWIuaD4KKyNpbmNsdWRlIDxRVGltZXI+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgU2hhcmVkVGltZXIgOiBwdWJsaWMgUVRpbWVyIHsKK1FfT0JKRUNUCitwcm90ZWN0ZWQ6Cisg
ICAgU2hhcmVkVGltZXIoKSA6IFFUaW1lcigpCisgICAgeworICAgICAgICBjb25uZWN0KHRoaXMs
IFNJR05BTCh0aW1lb3V0KCkpLCB0aGlzLCBTTE9UKGZpcmUoKSkpOworICAgICAgICBzZXRTaW5n
bGVTaG90KHRydWUpOworICAgICAgICBfdGltZXJGdW5jdGlvbiA9IDA7CisgICAgfQorCisgICAg
flNoYXJlZFRpbWVyKCkKKyAgICB7CisgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGljIFNoYXJl
ZFRpbWVyICppbnN0KCkgeworICAgICAgICBpZiAoIXNfc2VsZikKKyAgICAgICAgICAgIHNfc2Vs
ZiA9IG5ldyBTaGFyZWRUaW1lcjsKKworICAgICAgICByZXR1cm4gc19zZWxmOworICAgIH0KKwor
ICAgIHZvaWQgKCpfdGltZXJGdW5jdGlvbikoKTsKKworcHVibGljIHNsb3RzOgorICAgIHZvaWQg
ZmlyZSgpCisgICAgeworICAgICAgICBpZiAoX3RpbWVyRnVuY3Rpb24pCisgICAgICAgICAgICAo
X3RpbWVyRnVuY3Rpb24pKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBTaGFyZWRU
aW1lciAqc19zZWxmOworfTsKKworfQorCisjZW5kaWYKKworLy8gdmltOiB0cz00IHN3PTQgZXQK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKFJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKFJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRmlsZUJ1dHRvbi5oIgor
I2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiVGV4dEZpZWxkLmgiCisjaW5jbHVkZSAiU2xpZGVy
LmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAibG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlNjcm9sbEJhci5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiSmF2YUFwcGxldFdpZGdl
dC5oIgorI2luY2x1ZGUgIlNjcm9sbEJhci5oIgorI2luY2x1ZGUgIlBhdGguaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRl
ICJTY3JlZW4uaCIKKyNpbmNsdWRlICJIaXN0b3J5LmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIK
KyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiUGx1Z0luSW5mb1N0b3Jl
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJUZXh0Qm91bmRhcmllcy5o
IgorI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6
IFVOSU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdoaWxlKDAp
CisKK0phdmFBcHBsZXRXaWRnZXQ6OkphdmFBcHBsZXRXaWRnZXQoSW50U2l6ZSBjb25zdCYsIEVs
ZW1lbnQqLCBXVEY6Okhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvbnN0JikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CisKK0Zsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEludFBvaW50JiwgaW50KSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBGbG9hdFJlY3QoKTsgfQoraW50IEZvbnQ6
Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IFRl
eHRTdHlsZSYsIGludCwgYm9vbCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsg
fQorCisKK3ZvaWQgV2ViQ29yZTo6cmVmcmVzaFBsdWdpbnMoYm9vbCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyB9CisKK0NvbG9yIFdlYkNvcmU6OmZvY3VzUmluZ0NvbG9yKCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMHhGRjAwMDBGRjsgfQorCit2b2lkIEltYWdlOjpkcmF3VGlsZWQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgVGlsZVJ1bGUs
IFRpbGVSdWxlLCBDb21wb3NpdGVPcGVyYXRvcikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsgICAgCisKK3ZvaWQgVGV4dEZpZWxkOjpzZWxlY3RBbGwoKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgVGV4dEZpZWxkOjphZGRTZWFyY2hSZXN1bHQoKSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KK2ludCBUZXh0RmllbGQ6OnNlbGVjdGlvblN0YXJ0KCkgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQorYm9vbCBUZXh0RmllbGQ6Omhhc1NlbGVj
dGVkVGV4dCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK1N0cmluZyBU
ZXh0RmllbGQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IFN0cmluZygpOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0QXV0b1NhdmVOYW1lKFN0cmluZyBjb25z
dCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorYm9vbCBUZXh0RmllbGQ6OmNoZWNrc0Rlc2NlbmRh
bnRzRm9yRm9jdXMoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQor
dm9pZCBUZXh0RmllbGQ6OnNldFNlbGVjdGlvbihpbnQsaW50KSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRNYXhSZXN1bHRzKGludCkgeyBub3RJbXBsZW1lbnRlZCgp
OyB9Citib29sIFRleHRGaWVsZDo6ZWRpdGVkKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQorV2lkZ2V0OjpGb2N1c1BvbGljeSBUZXh0RmllbGQ6OmZvY3VzUG9saWN5KCkg
Y29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gTm9Gb2N1czsgfQorVGV4dEZpZWxkOjpU
ZXh0RmllbGQoVGV4dEZpZWxkOjpUeXBlKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1RleHRGaWVs
ZDo6flRleHRGaWVsZCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBUZXh0RmllbGQ6OnNl
dEZvbnQoV2ViQ29yZTo6Rm9udCBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBU
ZXh0RmllbGQ6OnNldEFsaWdubWVudChIb3Jpem9udGFsQWxpZ25tZW50KSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRXcml0aW5nRGlyZWN0aW9uKFRleHREaXJlY3Rp
b24pIHsgbm90SW1wbGVtZW50ZWQoKTsgfQoraW50IFRleHRGaWVsZDo6bWF4TGVuZ3RoKCkgY29u
c3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQordm9pZCBUZXh0RmllbGQ6OnNldE1h
eExlbmd0aChpbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorU3RyaW5nIFRleHRGaWVsZDo6dGV4
dCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0cmluZygpOyB9Cit2b2lkIFRl
eHRGaWVsZDo6c2V0VGV4dChTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2lu
dCBUZXh0RmllbGQ6OmN1cnNvclBvc2l0aW9uKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQordm9pZCBUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0aW9uKGludCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0RWRpdGVkKGJvb2wpIHsgbm90SW1w
bGVtZW50ZWQoKTsgIH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRSZWFkT25seShib29sKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRQbGFjZWhvbGRlclN0cmluZyhTdHJp
bmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7ICB9Cit2b2lkIFRleHRGaWVsZDo6c2V0Q29s
b3JzKENvbG9yIGNvbnN0JixDb2xvciBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgIH0KK0lu
dFNpemUgVGV4dEZpZWxkOjpzaXplRm9yQ2hhcmFjdGVyV2lkdGgoaW50KSBjb25zdCB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBJbnRTaXplKCk7IH0KK2ludCBUZXh0RmllbGQ6OmJhc2VsaW5l
UG9zaXRpb24oaW50KSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Cit2b2lk
IFRleHRGaWVsZDo6c2V0TGl2ZVNlYXJjaChib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwor
U2xpZGVyOjpTbGlkZXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK0ludFNpemUgU2xpZGVyOjpz
aXplSGludCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsgfQor
U2xpZGVyOjp+U2xpZGVyKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFNsaWRlcjo6c2V0
VmFsdWUoZG91YmxlKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgU2xpZGVyOjpzZXRNYXhW
YWx1ZShkb3VibGUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBTbGlkZXI6OnNldE1pblZh
bHVlKGRvdWJsZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFNsaWRlcjo6c2V0Rm9udChX
ZWJDb3JlOjpGb250IGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Citkb3VibGUgU2xpZGVy
Ojp2YWx1ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK1dpZGdldDo6
Rm9jdXNQb2xpY3kgU2xpZGVyOjpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIE5vRm9jdXM7IH0KKworU2Nyb2xsQmFyOjpTY3JvbGxCYXIoU2Nyb2xsQmFyQ2xp
ZW50ICosIFNjcm9sbEJhck9yaWVudGF0aW9uKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQg
U2Nyb2xsQmFyOjpzZXRTdGVwcyhpbnQsIGludCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Citib29s
IFNjcm9sbEJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Citib29sIFNjcm9sbEJhcjo6c2V0
VmFsdWUoaW50KSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Cit2b2lkIFNjcm9sbEJh
cjo6c2V0S25vYlByb3BvcnRpb24oaW50LCBpbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCitQ
bGF0Zm9ybVNjcm9sbEJhcjo6UGxhdGZvcm1TY3JvbGxCYXIoU2Nyb2xsQmFyQ2xpZW50KiBjbGll
bnQsIFNjcm9sbEJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSA6IFNjcm9sbEJhcihjbGllbnQs
IG9yaWVudGF0aW9uKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK1BsYXRmb3JtU2Nyb2xsQmFyOjp+
UGxhdGZvcm1TY3JvbGxCYXIoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2ludCBQbGF0Zm9ybVNj
cm9sbEJhcjo6d2lkdGgoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Citp
bnQgUGxhdGZvcm1TY3JvbGxCYXI6OmhlaWdodCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIDA7IH0KK3ZvaWQgUGxhdGZvcm1TY3JvbGxCYXI6OnNldEVuYWJsZWQoYm9vbCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFBsYXRmb3JtU2Nyb2xsQmFyOjpwYWludChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KK3ZvaWQgUGxhdGZvcm1TY3JvbGxCYXI6OnNldFNjcm9sbEJhclZhbHVlKGludCB2KSB7IG5v
dEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgUGxhdGZvcm1TY3JvbGxCYXI6OnNldEtub2JQcm9wb3J0
aW9uKGludCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSkgeyBub3RJbXBsZW1lbnRlZCgpOyB9
Cit2b2lkIFBsYXRmb3JtU2Nyb2xsQmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KKworUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQo
Y29uc3QgQ3VycmVudEV2ZW50VGFnJikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK3ZvaWQgQ2hl
Y2tDYWNoZU9iamVjdFN0YXR1cyhEb2NMb2FkZXIqLCBDYWNoZWRSZXNvdXJjZSopIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQorYm9vbCBDaGVja0lmUmVsb2FkaW5nKFdlYkNvcmU6OkRvY0xvYWRlciop
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CitWZWN0b3I8Y2hhcj4gU2VydmVT
eW5jaHJvbm91c1JlcXVlc3QoTG9hZGVyKiwgRG9jTG9hZGVyKiwgUmVzb3VyY2VMb2FkZXIqLCBL
VVJMJiwgRGVwcmVjYXRlZFN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFZlY3Rv
cjxjaGFyPigpOyB9Cit9CisKK2Jvb2wgV2ViQ29yZTo6aGlzdG9yeUNvbnRhaW5zKERlcHJlY2F0
ZWRTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQorU3Ry
aW5nIFdlYkNvcmU6OnN1Ym1pdEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0dXJuICJTdWJtaXQi
OyB9CitTdHJpbmcgV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0VGV4dCgpIHsgcmV0dXJuIERlcHJl
Y2F0ZWRTdHJpbmcoKTsgfQorU3RyaW5nIFdlYkNvcmU6OnJlc2V0QnV0dG9uRGVmYXVsdExhYmVs
KCkgeyByZXR1cm4gIlJlc2V0IjsgfQorU3RyaW5nIFdlYkNvcmU6OmRlZmF1bHRMYW5ndWFnZSgp
IHsgcmV0dXJuICJlbiI7IH0KKworCitpbnQgV2ViQ29yZTo6ZmluZE5leHRTZW50ZW5jZUZyb21J
bmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IHJl
dHVybiAwOyB9Cit2b2lkIFdlYkNvcmU6OmZpbmRTZW50ZW5jZUJvdW5kYXJ5KFVDaGFyIGNvbnN0
KiwgaW50LCBpbnQsIGludCosIGludCopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQoraW50IFdlYkNv
cmU6OmZpbmROZXh0V29yZEZyb21JbmRleChVQ2hhciBjb25zdCosIGludCwgaW50LCBib29sKSB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Cit2b2lkIFdlYkNvcmU6OmZpbmRXb3JkQm91
bmRhcnkoVUNoYXIgY29uc3QqIHN0ciwgaW50IGxlbiwgaW50IHBvc2l0aW9uLCBpbnQqIHN0YXJ0
LCBpbnQqIGVuZCkgeypzdGFydCA9IHBvc2l0aW9uOyAqZW5kID0gcG9zaXRpb247IG5vdEltcGxl
bWVudGVkKCk7IH0KKwordm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9CisKK2ludCBXZWJDb3JlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudChX
aWRnZXQqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Citib29sIFdlYkNvcmU6OnNj
cmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxz
ZTsgfQorCitTdHJpbmcgV2ViQ29yZTo6c2VhcmNoYWJsZUluZGV4SW50cm9kdWN0aW9uKCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7IH0KKworS0pTOjpVU3RyaW5nOjpVU3Ry
aW5nKGNvbnN0IFFTdHJpbmcmIHMpIHsKKyAgICAqdGhpcyA9IFVTdHJpbmcocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhcio+KHMuZGF0YSgpKSwgcy5sZW5ndGgoKSk7Cit9CisKK3ZvaWQgV2Vi
Q29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IG5vdElt
cGxlbWVudGVkKCk7IH0KKwordm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUJvcmRlcigpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQorCitib29sIEFYT2JqZWN0Q2FjaGU6OmdBY2Nlc3NpYmlsaXR5RW5hYmxl
ZCA9IGZhbHNlOworCitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNo
YXIqICkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVjdG9yPGNoYXI+KCk7IH0KKworUGx1
Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRl
eCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQordW5zaWduZWQgUGx1
Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIDA7IH0KK2Jvb2wgV2ViQ29yZTo6UGx1Z0luSW5mb1N0b3JlOjpzdXBwb3J0c01JTUVUeXBl
KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9CisKK0ZpbGVCdXR0b246OkZpbGVCdXR0b24oRnJhbWUqKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KK3ZvaWQgRmlsZUJ1dHRvbjo6Y2xpY2soYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitJ
bnRTaXplIEZpbGVCdXR0b246OnNpemVGb3JDaGFyYWN0ZXJXaWR0aChpbnQpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsgfQorV2lkZ2V0OjpGb2N1c1BvbGljeSBG
aWxlQnV0dG9uOjpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IE5vRm9jdXM7IH0KK1dlYkNvcmU6OkludFJlY3QgRmlsZUJ1dHRvbjo6ZnJhbWVHZW9tZXRyeSgp
IGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFJlY3QoKTsgfQordm9pZCBGaWxl
QnV0dG9uOjpzZXRGaWxlbmFtZShEZXByZWNhdGVkU3RyaW5nIGNvbnN0JikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CitpbnQgRmlsZUJ1dHRvbjo6YmFzZWxpbmVQb3NpdGlvbihpbnQpIGNvbnN0IHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQgRmlsZUJ1dHRvbjo6c2V0RnJhbWVH
ZW9tZXRyeShXZWJDb3JlOjpJbnRSZWN0IGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2
b2lkIEZpbGVCdXR0b246OnNldERpc2FibGVkKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitEZXByZWNhdGVkU3RyaW5nTGlzdCBzdXBwb3J0
ZWRLZXlTaXplcygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmdM
aXN0KCk7IH0KK0RlcHJlY2F0ZWRTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3Ry
aW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmY2hhbGxl
bmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1cmwpIHsgcmV0dXJuIERlcHJlY2F0ZWRTdHJpbmcoKTsg
fQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0
L1N5c3RlbVRpbWVMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9T
eXN0ZW1UaW1lTGludXguY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9T
eXN0ZW1UaW1lTGludXguY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlN5c3RlbVRpbWUuaCIKKworI2luY2x1ZGUgPHRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitkb3VibGUgY3VycmVudFRpbWUoKQoreworICAgIHRpbWVfdCB0dGltZTsKKyAgICB0
aW1lKCZ0dGltZSk7CisgICAgcmV0dXJuIChkb3VibGUpdHRpbWU7Cit9CisKK30KKworLy8gdmlt
OiB0cz00IHN3PTQgZXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10149</attachid>
            <date>2006-08-21 12:37:28 -0700</date>
            <delta_ts>2006-08-24 02:49:01 -0700</delta_ts>
            <desc>Patch chunk: graphics related stuff</desc>
            <filename>platform-qt-graphics.diff</filename>
            <type>text/plain</type>
            <size>37445</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTk0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMDYtMDgtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlcyBwYXJ0cyBvZjogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDQ2MworICAgICAgICBXZWJLaXQgc2hvdWxkIGhhdmUgUXQgcGxhdGZvcm0g
c3VwcG9ydAorCisgICAgICAgICogcGxhdGZvcm0vcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUXRDb21wb3NpdGlvbk1vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6dG9RdExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6dG9RdExpbmVKb2luKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeUxheWVyOjpUcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lMYXllcjo6Y2xlYW51cCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0U2hhZG93OjpUZXh0U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRTaGFkb3c6OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OnApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNz
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kZXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0FyYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRDbGlwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZvY3VzUmluZ0NsaXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhckZvY3VzUmluZ0NsaXApOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Ojpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvSW1hZ2VRdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZTo6aW5pdE5hdGl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRlc3Ryb3lO
YXRpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjppbnZhbGlkYXRlTmF0aXZlRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFJlc291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpzdXBwb3J0c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRy
YXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9J
bWFnZVNvdXJjZVF0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpJbWFnZVNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6fkltYWdlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlU291cmNlOjppbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6aXNTaXplQXZhaWxh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpzaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VTb3VyY2U6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6
OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJh
bWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1l
SGFzQWxwaGFBdEluZGV4KToKKwogMjAwNi0wOC0xOCAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxr
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IGFkZWxlLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9xdC9JbWFnZVNvdXJjZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3F0L0ltYWdlU291cmNlUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9JbWFnZVNvdXJjZVF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuIAorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8
bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorCisjaW5jbHVkZSAiR0lGSW1hZ2VE
ZWNvZGVyLmgiCisjaW5jbHVkZSAiSlBFR0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlBOR0lt
YWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIkJNUEltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIklD
T0ltYWdlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlhCTUltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVk
ZSA8UUltYWdlPgorI2luY2x1ZGUgPFFEZWJ1Zz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bWFnZURlY29kZXIqIGNyZWF0ZURlY29kZXIoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKQorewor
ICAgIC8vIFdlIG5lZWQgYXQgbGVhc3QgNCBieXRlcyB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBv
ZiBpbWFnZSB3ZSdyZSBkZWFsaW5nIHdpdGguCisgICAgaW50IGxlbmd0aCA9IGRhdGEuc2l6ZSgp
OworICAgIGlmIChsZW5ndGggPCA0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIHVDb250ZW50cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikgZGF0YS5kYXRh
KCk7CisgICAgY29uc3QgY2hhciogY29udGVudHMgPSBkYXRhLmRhdGEoKTsKKworICAgIC8vIEdJ
RnMgYmVnaW4gd2l0aCBHSUY4KDcgb3IgOSkuCisgICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJH
SUY4IiwgNCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsKKwor
ICAgIC8vIFRlc3QgZm9yIFBORy4KKyAgICBpZiAodUNvbnRlbnRzWzBdID09IDB4ODkgJiYKKyAg
ICAgICAgdUNvbnRlbnRzWzFdID09IDB4NTAgJiYKKyAgICAgICAgdUNvbnRlbnRzWzJdID09IDB4
NEUgJiYKKyAgICAgICAgdUNvbnRlbnRzWzNdID09IDB4NDcpCisgICAgICAgIHJldHVybiBuZXcg
UE5HSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBKUEVHCisgICAgaWYgKHVDb250ZW50c1swXSA9
PSAweEZGICYmCisgICAgICAgIHVDb250ZW50c1sxXSA9PSAweEQ4ICYmCisgICAgICAgIHVDb250
ZW50c1syXSA9PSAweEZGKQorICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFnZURlY29kZXIoKTsK
KworICAgIC8vIEJNUAorICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiQk0iLCAyKSA9PSAwKQor
ICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2RlcigpOworCisgICAgLy8gSUNPcyBhbHdh
eXMgYmVnaW4gd2l0aCBhIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IGEgMi1ieXRlIDEuCisgICAgLy8g
Q1VScyBiZWdpbiB3aXRoIDItYnl0ZSAwIGZvbGxvd2VkIGJ5IDItYnl0ZSAyLgorICAgIGlmICgh
bWVtY21wKGNvbnRlbnRzLCAiXDAwMFwwMDBcMDAxXDAwMCIsIDQpIHx8CisgICAgICAgICFtZW1j
bXAoY29udGVudHMsICJcMDAwXDAwMFwwMDJcMDAwIiwgNCkpCisgICAgICAgIHJldHVybiBuZXcg
SUNPSW1hZ2VEZWNvZGVyKCk7CisKKyAgICAvLyBYQk1zIHJlcXVpcmUgOCBieXRlcyBvZiBpbmZv
LgorICAgIGlmIChsZW5ndGggPj0gOCAmJiBzdHJuY21wKGNvbnRlbnRzLCAiI2RlZmluZSAiLCA4
KSA9PSAwKQorICAgICAgICByZXR1cm4gbmV3IFhCTUltYWdlRGVjb2RlcigpOworCisgICAgLy8g
R2l2ZSB1cC4gV2UgZG9uJ3Qga25vdyB3aGF0IHRoZSBoZWNrIHRoaXMgaXMuCisgICAgcmV0dXJu
IDA7Cit9CisKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCisgICAgOiBtX2RlY29kZXIoMCkK
K3sKK30KKworSW1hZ2VTb3VyY2U6On5JbWFnZVNvdXJjZSgpCit7CisgICAgZGVsZXRlIG1fZGVj
b2RlcjsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6aW5pdGlhbGl6ZWQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2RlY29kZXI7Cit9CisKK3ZvaWQgSW1hZ2VTb3VyY2U6OnNldERhdGEoY29uc3Qg
VmVjdG9yPGNoYXI+KiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKK3sKKyAgICAvLyBNYWtl
IHRoZSBkZWNvZGVyIGJ5IHNuaWZmaW5nIHRoZSBieXRlcy4KKyAgICAvLyBUaGlzIG1ldGhvZCB3
aWxsIGV4YW1pbmUgdGhlIGRhdGEgYW5kIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBh
cHByb3ByaWF0ZSBkZWNvZGVyIHBsdWdpbi4KKyAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMg
YXJlIGF2YWlsYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1
Z2luIHdpbGwgYmUKKyAgICAvLyBtYWRlLgorICAgIG1fZGVjb2RlciA9IGNyZWF0ZURlY29kZXIo
KmRhdGEpOworCisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
ZGVjb2Rlci0+c2V0RGF0YSgqZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKK30KKworYm9vbCBJbWFn
ZVNvdXJjZTo6aXNTaXplQXZhaWxhYmxlKCkKK3sKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fZGVjb2Rlci0+aXNTaXplQXZhaWxhYmxl
KCk7Cit9CisKK0ludFNpemUgSW1hZ2VTb3VyY2U6OnNpemUoKSBjb25zdAoreworICAgIGlmICgh
bV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gSW50U2l6ZSgpOworCisgICAgcmV0dXJuIG1fZGVj
b2Rlci0+c2l6ZSgpOworfQorCitpbnQgSW1hZ2VTb3VyY2U6OnJlcGV0aXRpb25Db3VudCgpCit7
CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiBjQW5pbWF0aW9uTm9uZTsKKwor
ICAgIHJldHVybiBtX2RlY29kZXItPnJlcGV0aXRpb25Db3VudCgpOworfQorCitzaXplX3QgSW1h
Z2VTb3VyY2U6OmZyYW1lQ291bnQoKSBjb25zdAoreworICAgIGlmICghbV9kZWNvZGVyKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2RlY29kZXItPmZyYW1lQ291bnQoKTsKK30K
KworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleChzaXplX3Qg
aW5kZXgpCit7CisgICAgaWYgKCFtX2RlY29kZXIpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6
OkZyYW1lRW1wdHkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG5ldyBRSW1hZ2Uo
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oYnVmZmVyLT5ieXRlcygpLmRhdGEoKSks
CisgICAgICAgICAgICAgICAgICAgICAgc2l6ZSgpLndpZHRoKCksIGJ1ZmZlci0+aGVpZ2h0KCks
CisgICAgICAgICAgICAgICAgICAgICAgUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKK30KKworZmxv
YXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAg
ICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSR0JBMzJCdWZmZXIq
IGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKKyAgICBpZiAo
IWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYnVmZmVyLT5kdXJhdGlvbigpIC8gMTAw
MC4wZjsKK30KKworYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90
IGluZGV4KQoreworICAgIGlmICghbV9kZWNvZGVyIHx8ICFtX2RlY29kZXItPnN1cHBvcnRzQWxw
aGEoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIg
PSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFidWZmZXIg
fHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBidWZmZXItPmhhc0FscGhhKCk7Cit9CisKK30K
KworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvSW1hZ2VR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9JbWFnZVF0LmNwcAkoUmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvSW1hZ2VRdC5jcHAJKFJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxl
ciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHph
Y2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21h
bm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKKyNpbmNsdWRlIDxRUGl4bWFwPgorI2lu
Y2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRSW1hZ2VSZWFk
ZXI+CisKKyNpbmNsdWRlIDxRdERlYnVnPgorCisjaW5jbHVkZSA8bWF0aC5oPgorCisvLyBUaGlz
IGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAorVmVjdG9yPGNoYXI+IGxvYWRS
ZXNvdXJjZUludG9BcnJheShjb25zdCBjaGFyKik7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBGcmFtZURhdGE6OmNsZWFyKCkKK3sKKyAgICBpZiAobV9mcmFtZSkgeworICAgICAgICBt
X2ZyYW1lID0gMDsKKyAgICAgICAgbV9kdXJhdGlvbiA9IDAuOworICAgICAgICBtX2hhc0FscGhh
ID0gdHJ1ZTsKKyAgICB9Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorLy8gSW1hZ2UgQ2xhc3MKKy8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit2b2lkIEltYWdlOjppbml0TmF0aXZlRGF0
YSgpCit7Cit9CisKK3ZvaWQgSW1hZ2U6OmRlc3Ryb3lOYXRpdmVEYXRhKCkKK3sKK30KKwordm9p
ZCBJbWFnZTo6aW52YWxpZGF0ZU5hdGl2ZURhdGEoKQoreworfQorCitJbWFnZSogSW1hZ2U6Omxv
YWRSZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQoreworICAgIFZlY3RvcjxjaGFyPiBhcnIgPSBs
b2FkUmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7CisgICAgSW1hZ2UqIGltZyA9IG5ldyBJbWFnZSgp
OworICAgIGltZy0+c2V0TmF0aXZlRGF0YSgmYXJyLCB0cnVlKTsKKyAgICByZXR1cm4gaW1nOwor
fQorCitib29sIEltYWdlOjpzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAg
IHFEZWJ1ZygpIDw8ICJkb2VzIHN1cHBvcnQgaW1hZ2UgZm9ybWF0PyAiPDwgdHlwZTsKKworICAg
IFFMaXN0PFFCeXRlQXJyYXk+IGZvcm1hdHMgPSBRSW1hZ2VSZWFkZXI6OnN1cHBvcnRlZEltYWdl
Rm9ybWF0cygpOworICAgIGZvcmVhY2goUUJ5dGVBcnJheSBmb3JtYXQsIGZvcm1hdHMpIHsKKyAg
ICAgICAgaWYgKGZvcm1hdCA9PSAoUVN0cmluZykgdHlwZSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gRHJhd2luZyBSb3V0aW5l
cwordm9pZCBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0LAorICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRl
T3BlcmF0b3Igb3ApCit7CisgICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBRSW1hZ2UqIGltYWdlID0gZnJhbWVBdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZl
IGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworCisgICAgSW50U2l6ZSBzZWxmU2l6ZSA9
IHNpemUoKTsKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdChzcmMpOworICAgIEZsb2F0UmVjdCBkc3RS
ZWN0KGRzdCk7CisKKyAgICBjdHh0LT5zYXZlKCk7CisKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0
aW5nIG9wZXJhdGlvbi4KKyAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOworCisg
ICAgUVBhaW50ZXIgKnBhaW50ZXIoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworCisgICAgLy8g
VGVzdCB1c2luZyBleGFtcGxlIHNpdGUgYXQKKyAgICAvLyBodHRwOi8vd3d3Lm1leWVyd2ViLmNv
bS9lcmljL2Nzcy9lZGdlL2NvbXBsZXhzcGlyYWwvZGVtby5odG1sICAgIAorICAgIHBhaW50ZXIt
PmRyYXdJbWFnZShkc3QsICppbWFnZSwgc3JjKTsKKworICAgIGN0eHQtPnJlc3RvcmUoKTsKKwor
ICAgIHN0YXJ0QW5pbWF0aW9uKCk7Cit9CisKK3ZvaWQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGlj
c0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRQb2lu
dCYgc3JjUG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRTaXplJiB0aWxl
U2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgaWYgKCFtX3NvdXJjZS5pbml0aWFs
aXplZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRSW1hZ2UqIGltYWdlID0gZnJhbWVBdElu
ZGV4KG1fY3VycmVudEZyYW1lKTsKKyAgICBRUGl4bWFwIHBpeDsKKyAgICBpZiAoIWltYWdlKSAv
LyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAg
cmV0dXJuOworCisgICAgSW50U2l6ZSBpbnRyaW5zaWNJbWFnZVNpemUgPSBzaXplKCk7CisKKyAg
ICBpZiAoIXFGdXp6eUNvbXBhcmUodGlsZVNpemUud2lkdGgoKSwgaW50cmluc2ljSW1hZ2VTaXpl
LndpZHRoKCkpIHx8CisgICAgICAgICFxRnV6enlDb21wYXJlKHRpbGVTaXplLmhlaWdodCgpLCBp
bnRyaW5zaWNJbWFnZVNpemUuaGVpZ2h0KCkpKSB7CisKKyAgICAgICAgUUltYWdlIGltZygoaW50
KXRpbGVTaXplLndpZHRoKCksIChpbnQpdGlsZVNpemUuaGVpZ2h0KCksCisgICAgICAgICAgICAg
ICAgICAgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOworCisgICAgICAgIFFQ
YWludGVyIHAoJmltZyk7CisgICAgICAgIHAuZHJhd0ltYWdlKFFSZWN0RigwLCAwLCB0aWxlU2l6
ZS53aWR0aCgpLCB0aWxlU2l6ZS5oZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICppbWFn
ZSwgUVJlY3RGKHNyY1BvaW50LngoKSwgc3JjUG9pbnQueSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aWxlU2l6ZS53aWR0aCgpIC0gc3JjUG9pbnQueCgpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVNpemUuaGVpZ2h0KCktIHNyY1BvaW50
LnkoKSkpOworICAgICAgICBwLmVuZCgpOworCisgICAgICAgIHBpeCA9IFFQaXhtYXA6OmZyb21J
bWFnZShpbWcpOworICAgIH0gZWxzZQorICAgICAgICBwaXggPSBRUGl4bWFwOjpmcm9tSW1hZ2Uo
KmltYWdlKTsKKworICAgIGN0eHQtPnNhdmUoKTsKKworICAgIC8vIFNldCB0aGUgY29tcG9zaXRp
bmcgb3BlcmF0aW9uLgorICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CisgICAg
UVBhaW50ZXIgKnAgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBwLT5kcmF3VGlsZWRQ
aXhtYXAoZHN0UmVjdCwgcGl4KTsKKworICAgIGN0eHQtPnJlc3RvcmUoKTsKKyAgICAKKyAgICBz
dGFydEFuaW1hdGlvbigpOworfQorCit2b2lkIEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQor
eworICAgIC8vIEZJWE1FOiBJdCdzIGVhc3kgdG8gaW1wbGVtZW50IHRoaXMgb3B0aW1pemF0aW9u
LiBKdXN0IG5lZWQgdG8gY2hlY2sgdGhlIFJHQkEzMiBidWZmZXIgdG8gc2VlIGlmIGl0IGlzIDF4
MS4KKyAgICBtX2lzU29saWRDb2xvciA9IGZhbHNlOworfQorCit9CisKKy8vIHZpbTogdHM9NCBz
dz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAko
UmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
CShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBa
YWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0
YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVz
bWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGxhbiBTYW5k
ZmVsZCBKZW5zZW4gPHNhbmRmZWxkQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
UGF0aC5oIgorCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgor
I2luY2x1ZGUgPFFQYWludERldmljZT4KKyNpbmNsdWRlIDxRU3RhY2s+CisKKyNpZm5kZWYgTV9Q
SQorI2RlZmluZSBNX1BJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKKyNlbmRpZgorCisjaWYgU1ZH
X1NVUFBPUlQKKyNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlUXQuaCIKKyNlbmRpZgorCisjZGVm
aW5lIG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExF
TUVOVEVEOiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlIHRvUXRD
b21wb3NpdGlvbk1vZGUoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkg
eworICAgIGNhc2UgQ29tcG9zaXRlQ2xlYXI6CisgICAgICAgIHJldHVybiBRUGFpbnRlcjo6Q29t
cG9zaXRpb25Nb2RlX0NsZWFyOworICAgIGNhc2UgQ29tcG9zaXRlQ29weToKKyAgICAgICAgcmV0
dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlOworICAgIGNhc2UgQ29tcG9zaXRl
U291cmNlT3ZlcjoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291
cmNlT3ZlcjsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUluOgorICAgICAgICByZXR1cm4gUVBh
aW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VJbjsKKyAgICBjYXNlIENvbXBvc2l0ZVNvdXJj
ZU91dDoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3V0
OworICAgIGNhc2UgQ29tcG9zaXRlU291cmNlQXRvcDoKKyAgICAgICAgcmV0dXJuIFFQYWludGVy
OjpDb21wb3NpdGlvbk1vZGVfU291cmNlQXRvcDsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0
aW9uT3ZlcjoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGlu
YXRpb25PdmVyOworICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25JbjoKKyAgICAgICAgcmV0
dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25JbjsKKyAgICBjYXNlIENv
bXBvc2l0ZURlc3RpbmF0aW9uT3V0OgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9EZXN0aW5hdGlvbk91dDsKKyAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRv
cDoKKyAgICAgICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfRGVzdGluYXRpb25B
dG9wOworICAgIGNhc2UgQ29tcG9zaXRlWE9SOgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZV9Yb3I7CisgICAgY2FzZSBDb21wb3NpdGVQbHVzRGFya2VyOgorICAgICAg
ICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VPdmVyOworICAgIGNhc2Ug
Q29tcG9zaXRlSGlnaGxpZ2h0OgorICAgICAgICByZXR1cm4gUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2VPdmVyOworICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6CisgICAgICAg
IHJldHVybiBRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZU92ZXI7CisgICAgfQorCisg
ICAgcmV0dXJuIFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlT3ZlcjsKK30KKworc3Rh
dGljIFF0OjpQZW5DYXBTdHlsZSB0b1F0TGluZUNhcChMaW5lQ2FwIGxjKQoreworICAgIHN3aXRj
aCAobGMpIHsKKyAgICBjYXNlIEJ1dHRDYXA6CisgICAgICAgIHJldHVybiBRdDo6RmxhdENhcDsK
KyAgICBjYXNlIFJvdW5kQ2FwOgorICAgICAgICByZXR1cm4gUXQ6OlJvdW5kQ2FwOworICAgIGNh
c2UgU3F1YXJlQ2FwOgorICAgICAgICByZXR1cm4gUXQ6OlNxdWFyZUNhcDsKKyAgICB9CisKKyAg
ICByZXR1cm4gUXQ6OkZsYXRDYXA7Cit9CisKK3N0YXRpYyBRdDo6UGVuSm9pblN0eWxlIHRvUXRM
aW5lSm9pbihMaW5lSm9pbiBsaikKK3sKKyAgICBzd2l0Y2ggKGxqKSB7CisgICAgY2FzZSBNaXRl
ckpvaW46CisgICAgICAgIHJldHVybiBRdDo6U3ZnTWl0ZXJKb2luOworICAgIGNhc2UgUm91bmRK
b2luOgorICAgICAgICByZXR1cm4gUXQ6OlJvdW5kSm9pbjsKKyAgICBjYXNlIEJldmVsSm9pbjoK
KyAgICAgICAgcmV0dXJuIFF0OjpCZXZlbEpvaW47CisgICAgfQorCisgICAgcmV0dXJuIFF0OjpN
aXRlckpvaW47Cit9CisKK3N0cnVjdCBUcmFuc3BhcmVuY3lMYXllcgoreworICAgIFRyYW5zcGFy
ZW5jeUxheWVyKGNvbnN0IFFQYWludGVyJiBwLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAg
eworICAgICAgICBwaXhtYXAgPSBRUGl4bWFwKHdpZHRoLCBoZWlnaHQpOworCisgICAgICAgIHBh
aW50ZXIgPSBuZXcgUVBhaW50ZXIoJnBpeG1hcCk7CisgICAgICAgIHBhaW50ZXItPnNldFBlbihw
LnBlbigpKTsKKyAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2gocC5icnVzaCgpKTsKKyAgICAgICAg
cGFpbnRlci0+c2V0TWF0cml4KHAubWF0cml4KCkpOworICAgIH0KKworICAgIFRyYW5zcGFyZW5j
eUxheWVyKCkKKyAgICAgICAgOiBwYWludGVyKDApCisgICAgeworICAgIH0KKworICAgIHZvaWQg
Y2xlYW51cCgpCisgICAgeworICAgICAgICBkZWxldGUgcGFpbnRlcjsKKyAgICB9CisKKyAgICBR
UGl4bWFwIHBpeG1hcDsKKyAgICBRUGFpbnRlciAqcGFpbnRlcjsKKyAgICBxcmVhbCBvcGFjaXR5
OworfTsKKworc3RydWN0IFRleHRTaGFkb3cKK3sKKyAgICBUZXh0U2hhZG93KCkKKyAgICA6IHgo
MCkKKyAgICAsIHkoMCkKKyAgICAsIGJsdXIoMCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBp
c051bGwoKSB7IHJldHVybiAheCAmJiAheSAmJiAhYmx1cjsgfQorCisgICAgaW50IHg7CisgICAg
aW50IHk7CisgICAgaW50IGJsdXI7CisKKyAgICBDb2xvciBjb2xvcjsKK307CisKK2NsYXNzIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZQoreworcHVibGljOgorICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZShRUGFpbnRlciogcGFpbnRlcik7CisgICAgfkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSgpOworCisgICAgaW5saW5lIFFQYWludGVyJiBwKCkKKyAgICB7
CisgICAgICAgIGlmIChsYXllcnMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAocmVkaXJl
Y3QpCisgICAgICAgICAgICAgICAgcmV0dXJuICpyZWRpcmVjdDsKKworICAgICAgICAgICAgcmV0
dXJuICpwYWludGVyOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiAqbGF5ZXJz
LnRvcCgpLnBhaW50ZXI7CisgICAgfQorCisgICAgUVBhaW50RGV2aWNlKiBkZXZpY2U7CisKKyAg
ICBRU3RhY2s8VHJhbnNwYXJlbmN5TGF5ZXI+IGxheWVyczsKKyAgICBRUGFpbnRlciogcmVkaXJl
Y3Q7CisKKyAgICBJbnRSZWN0IGZvY3VzUmluZ0NsaXA7CisgICAgVGV4dFNoYWRvdyBzaGFkb3c7
CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXIqIHBhaW50ZXI7Cit9OworCisKK0dyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFFQYWlu
dGVyKiBwKQorICAgIDogZGV2aWNlKHAtPmRldmljZSgpKQoreworICAgIHBhaW50ZXIgPSBwOwor
ICAgIHJlZGlyZWN0ID0gMDsKKworICAgIC8vIFRPRE86IE1heWJlIG9ubHkgZW5hYmxlIGluIFNW
RyBtb2RlPworICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
Zyk7Cit9CisKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSgpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorICAgIDogbV9jb21tb24oY3Jl
YXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQorICAgICAgLCBtX2RhdGEobmV3IEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0KSkKK3sKKyAgICBzZXRQYWludGluZ0Rpc2Fi
bGVkKCFjb250ZXh0KTsKK30KKworR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkK
K3sKKyAgICB3aGlsZSghbV9kYXRhLT5sYXllcnMuaXNFbXB0eSgpKQorICAgICAgICBlbmRUcmFu
c3BhcmVuY3lMYXllcigpOworCisgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9j
b21tb24pOworICAgIGRlbGV0ZSBtX2RhdGE7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICZtX2RhdGEtPnAoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0
YXRlKCkKK3sKKyAgICBtX2RhdGEtPnAoKS5zYXZlKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCit7CisgICAgbV9kYXRhLT5wKCkucmVzdG9yZSgp
OworfQorCisvKiBGSVhNRTogRElTQUJMRUQgV0hJTEUgTUVSR0lORyBCQUNLIEZST00gVU5JVFkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dFNoYWRvdyhjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSkKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9kYXRh
LT5zaGFkb3cuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRleHRTaGFkb3cgKnNo
YWRvdyA9ICZtX2RhdGEtPnNoYWRvdzsKKworICAgIGlmIChzaGFkb3ctPmJsdXIgPD0gMCkgewor
ICAgICAgICBQZW4gcCA9IHBlbigpOworICAgICAgICBzZXRQZW4oc2hhZG93LT5jb2xvcik7Cisg
ICAgICAgIGZvbnQoKS5kcmF3VGV4dCh0aGlzLCBydW4sIHN0eWxlLCBJbnRQb2ludChwb2ludC54
KCkgKyBzaGFkb3ctPngsIHBvaW50LnkoKSArIHNoYWRvdy0+eSkpOworICAgICAgICBzZXRQZW4o
cCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgaW50IHRoaWNrbmVzcyA9IHNoYWRvdy0+
Ymx1cjsKKyAgICAgICAgLy8gIyMjIE9QVElNSVpFOiBsaW1pdCB0aGUgYXJlYSB0byBvbmx5IHRo
ZSBhY3R1YWxseSBwYWludGVkIGFyZWEgKyAyKnRoaWNrbmVzcworICAgICAgICBjb25zdCBpbnQg
dyA9IG1fZGF0YS0+cCgpLmRldmljZSgpLT53aWR0aCgpOworICAgICAgICBjb25zdCBpbnQgaCA9
IG1fZGF0YS0+cCgpLmRldmljZSgpLT5oZWlnaHQoKTsKKyAgICAgICAgY29uc3QgUVJnYiBjb2xv
ciA9IHFSZ2IoMjU1LCAyNTUsIDI1NSk7CisgICAgICAgIGNvbnN0IFFSZ2IgYmdDb2xvciA9IHFS
Z2IoMCwgMCwgMCk7CisgICAgICAgIFFJbWFnZSBpbWFnZShRU2l6ZSh3LCBoKSwgUUltYWdlOjpG
b3JtYXRfQVJHQjMyKTsKKyAgICAgICAgaW1hZ2UuZmlsbChiZ0NvbG9yKTsKKyAgICAgICAgUVBh
aW50ZXIgcDsKKworICAgICAgICBQZW4gY3VyUGVuID0gcGVuKCk7CisgICAgICAgIHAuYmVnaW4o
JmltYWdlKTsKKyAgICAgICAgc2V0UGVuKGNvbG9yKTsKKyAgICAgICAgbV9kYXRhLT5yZWRpcmVj
dCA9ICZwOworICAgICAgICBmb250KCkuZHJhd1RleHQodGhpcywgcnVuLCBzdHlsZSwgSW50UG9p
bnQocG9pbnQueCgpICsgc2hhZG93LT54LCBwb2ludC55KCkgKyBzaGFkb3ctPnkpKTsKKyAgICAg
ICAgbV9kYXRhLT5yZWRpcmVjdCA9IDA7CisgICAgICAgIHAuZW5kKCk7CisgICAgICAgIHNldFBl
bihjdXJQZW4pOworCisgICAgICAgIGludCBtZCA9IHRoaWNrbmVzcyAqIHRoaWNrbmVzczsgLy8g
bWF4LWRpc3ReMgorCisgICAgICAgIC8vIGJsdXIgbWFwL3ByZWNhbGN1bGF0ZWQgc2hhZG93LWRl
Y2F5CisgICAgICAgIGZsb2F0KiBibWFwID0gKGZsb2F0KikgYWxsb2NhKHNpemVvZihmbG9hdCkg
KiAobWQgKyAxKSk7CisgICAgICAgIGZvciAoaW50IG4gPSAwOyBuIDw9IG1kOyBuKyspIHsKKyAg
ICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBmID0gbiAvIChmbG9hdCkgKG1kICsgMSk7
CisgICAgICAgICAgICBmID0gMS4wIC0gZiAqIGY7CisgICAgICAgICAgICBibWFwW25dID0gZjsK
KyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGZhY3RvciA9IDAuMDsgLy8gbWF4aW1hbCBwb3Rl
bnRpYWwgb3BhY2l0eS1zdW0KKyAgICAgICAgZm9yIChpbnQgbiA9IC10aGlja25lc3M7IG4gPD0g
dGhpY2tuZXNzOyBuKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IG0gPSAtdGhpY2tuZXNzOyBt
IDw9IHRoaWNrbmVzczsgbSsrKSB7CisgICAgICAgICAgICAgICAgaW50IGQgPSBuICogbiArIG0g
KiBtOworICAgICAgICAgICAgICAgIGlmIChkIDw9IG1kKQorICAgICAgICAgICAgICAgICAgICBm
YWN0b3IgKz0gYm1hcFtkXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IGFscGhhIG1hcAorICAgICAgICBmbG9hdCogYW1hcCA9IChmbG9hdCopIGFsbG9jYShzaXplb2Yo
ZmxvYXQpICogKGggKiB3KSk7CisgICAgICAgIG1lbXNldChhbWFwLCAwLCBoICogdyAqIChzaXpl
b2YoZmxvYXQpKSk7CisKKyAgICAgICAgZm9yIChpbnQgaiA9IHRoaWNrbmVzczsgajxoLXRoaWNr
bmVzczsgaisrKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gdGhpY2tuZXNzOyBpPHctdGhp
Y2tuZXNzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBRUmdiIGNvbCA9IGltYWdlLnBpeGVsKGks
aik7CisgICAgICAgICAgICAgICAgaWYgKGNvbCA9PSBiZ0NvbG9yKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGZsb2F0IGcgPSBxQWxwaGEoY29sKTsK
KyAgICAgICAgICAgICAgICBnID0gZyAvIDI1NTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50
IG4gPSAtdGhpY2tuZXNzOyBuIDw9IHRoaWNrbmVzczsgbisrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IG0gPSAtdGhpY2tuZXNzOyBtIDw9IHRoaWNrbmVzczsgbSsrKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZCA9IG4gKiBuICsgbSAqIG07CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZCA+IG1kKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBmID0gYm1hcFtkXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFtYXBbKGkgKyBtKSArIChqICsgbikgKiB3XSArPSAoZyAqIGYp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgUUltYWdlIHJlcyhRU2l6ZSh3LGgpLFFJbWFnZTo6Rm9y
bWF0X0FSR0IzMik7CisgICAgICAgIGludCByID0gc2hhZG93LT5jb2xvci5yZWQoKTsKKyAgICAg
ICAgaW50IGcgPSBzaGFkb3ctPmNvbG9yLmdyZWVuKCk7CisgICAgICAgIGludCBiID0gc2hhZG93
LT5jb2xvci5ibHVlKCk7CisgICAgICAgIGludCBhMSA9IHNoYWRvdy0+Y29sb3IuYWxwaGEoKTsK
KworICAgICAgICAvLyBhcmJpdHJhdHJ5IGZhY3RvciBhZGp1c3RtZW50IHRvIG1ha2Ugc2hhZG93
cyBtb3JlIHNvbGlkLgorICAgICAgICBmYWN0b3IgPSAxLjMzMyAvIGZhY3RvcjsKKworICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IGg7IGorKykgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCB3OyBpKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgYSA9IChpbnQpIChhbWFwW2kg
KyBqICogd10gKiBmYWN0b3IgKiBhMSk7CisgICAgICAgICAgICAgICAgaWYgKGEgPiAyNTUpCisg
ICAgICAgICAgICAgICAgICAgIGEgPSAyNTU7CisKKyAgICAgICAgICAgICAgICByZXMuc2V0UGl4
ZWwoaSxqLCBxUmdiYShyLCBnLCBiLCBhKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBtX2RhdGEtPnAoKS5kcmF3SW1hZ2UoMCwgMCwgcmVzLCAwLCAwLCAtMSwgLTEsIFF0
OjpEaWZmdXNlQWxwaGFEaXRoZXIgfCBRdDo6Q29sb3JPbmx5IHwgUXQ6OlByZWZlckRpdGhlcik7
CisgICAgfQorfQorKi8KKworLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJv
a2VkIGJvcmRlci4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fZGF0YS0+cCgpLmRyYXdSZWN0KHJlY3QpOworfQorCisvLyBGSVhNRTogTm93IHRo
YXQgdGhpcyBpcyByZWZhY3RvcmVkLCBpdCBzaG91bGQgYmUgc2hhcmVkIGJ5IGFsbCBjb250ZXh0
cy4KK3N0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRlcmllcyhGbG9hdFBvaW50JiBw
MSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBlbjo6UGVuU3R5bGUmIHBlblN0eWxlKQorewor
ICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRoZSBhcHByb3ByaWF0ZSB4
L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJpdGhtZXRpYworICAgIC8vIHdvcmtzIG91dC4gIEZvciBl
eGFtcGxlLCB3aXRoIGEgYm9yZGVyIHdpZHRoIG9mIDMsIEtIVE1MIHdpbGwgcGFzcyB1cyAoeTEr
eTIpLzIsIGUuZy4sCisgICAgLy8gKDUwKzUzKS8yID0gMTAzLzIgPSA1MSB3aGVuIHdlIHdhbnQg
NTEuNS4gIEl0IGlzIGFsd2F5cyB0cnVlIHRoYXQgYW4gZXZlbiB3aWR0aCBnYXZlCisgICAgLy8g
dXMgYSBwZXJmZWN0IHBvc2l0aW9uLCBidXQgYW4gb2RkIHdpZHRoIGdhdmUgdXMgYSBwb3NpdGlv
biB0aGF0IGlzIG9mZiBieSBleGFjdGx5IDAuNS4KKyAgICBpZiAocGVuU3R5bGUgPT0gUGVuOjpE
b3RMaW5lIHx8IHBlblN0eWxlID09IFBlbjo6RGFzaExpbmUpIHsKKyAgICAgICAgaWYgKHAxLngo
KSA9PSBwMi54KCkpIHsKKyAgICAgICAgICAgIHAxLnNldFkocDEueSgpICsgc3Ryb2tlV2lkdGgp
OworICAgICAgICAgICAgcDIuc2V0WShwMi55KCkgLSBzdHJva2VXaWR0aCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBwMS5zZXRYKHAxLngoKSArIHN0cm9rZVdpZHRoKTsKKyAgICAg
ICAgICAgIHAyLnNldFgocDIueCgpIC0gc3Ryb2tlV2lkdGgpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKCgoaW50KSBzdHJva2VXaWR0aCkgJSAyKSB7CisgICAgICAgIGlmIChwMS54KCkg
PT0gcDIueCgpKSB7CisgICAgICAgICAgICAvLyBXZSdyZSBhIHZlcnRpY2FsIGxpbmUuICBBZGp1
c3Qgb3VyIHguCisgICAgICAgICAgICBwMS5zZXRYKHAxLngoKSArIDAuNSk7CisgICAgICAgICAg
ICBwMi5zZXRYKHAyLngoKSArIDAuNSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBXZSdyZSBhIGhvcml6b250YWwgbGluZS4gQWRqdXN0IG91ciB5LgorICAgICAgICAgICAgcDEu
c2V0WShwMS55KCkgKyAwLjUpOworICAgICAgICAgICAgcDIuc2V0WShwMi55KCkgKyAwLjUpOwor
ICAgICAgICB9CisgICAgfQorfQorCisvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRl
cnMuCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50
MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOworICAgIEZs
b2F0UG9pbnQgcDIgPSBwb2ludDI7CisKKyAgICBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kZXJpZXMo
cDEsIHAyLCBwZW4oKS53aWR0aCgpLCBwZW4oKS5zdHlsZSgpKTsKKyAgICBtX2RhdGEtPnAoKS5k
cmF3TGluZShwMSwgcDIpOworfQorCisvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJh
dyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+cCgpLmRyYXdFbGxpcHNl
KHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0FyYyhjb25zdCBJbnRSZWN0
JiByZWN0LCBmbG9hdCB0aGlja25lc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBRUGVuIG9sZFBlbiA9IG1fZGF0YS0+
cCgpLnBlbigpOworICAgIFFQZW4gblBlbiA9IG9sZFBlbjsKKyAgICBuUGVuLnNldFdpZHRoRih0
aGlja25lc3MpOworICAgIG1fZGF0YS0+cCgpLnNldFBlbihuUGVuKTsKKyAgICBtX2RhdGEtPnAo
KS5kcmF3QXJjKHJlY3QsIHN0YXJ0QW5nbGUsIGFuZ2xlU3Bhbik7CisgICAgbV9kYXRhLT5wKCku
c2V0UGVuKG9sZFBlbik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9s
eWdvbihzaXplX3QgbnBvaW50cywgY29uc3QgSW50UG9pbnQqIHBvaW50cykKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS5k
cmF3Q29udmV4UG9seWdvbigoUVBvaW50Kilwb2ludHMsIG5wb2ludHMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9kYXRhLT5wKCkuZmlsbFJlY3QocmVjdCwgUUNvbG9yKGMucmVkKCksIGMuZ3JlZW4oKSwg
Yy5ibHVlKCksIGMuYWxwaGEoKSkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYykKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS5maWxs
UmVjdChyZWN0LCBRQ29sb3IoYy5yZWQoKSwgYy5ncmVlbigpLCBjLmJsdWUoKSwgYy5hbHBoYSgp
KSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRDbGlwKGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUVBhaW50ZXJQYXRoIHBhdGg7CisgICAgcGF0aC5hZGRSZWN0KFFSZWN0RihyZWN0KSk7Cisg
ICAgbV9kYXRhLT5wKCkuc2V0Q2xpcFBhdGgocGF0aCwgUXQ6OlVuaXRlQ2xpcCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IENvbG9yJiBjb2xvcikKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rm9jdXNSaW5nQ2xp
cChjb25zdCBJbnRSZWN0ICZyZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+Zm9jdXNSaW5nQ2xpcCA9IHJlY3Q7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhckZvY3VzUmluZ0NsaXAoKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+Zm9jdXNS
aW5nQ2xpcCA9IEludFJlY3QoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dChjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB5T2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGJvb2wgcHJpbnRpbmcpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9p
bnQgb3JpZ2luID0gcG9pbnQgKyBJbnRTaXplKDAsIHlPZmZzZXQgKyAxKTsKKyAgICBJbnRQb2lu
dCBlbmRQb2ludCA9IG9yaWdpbiArIEludFNpemUod2lkdGgsIDApOworICAgIGRyYXdMaW5lKG9y
aWdpbiwgZW5kUG9pbnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JN
aXNzcGVsbGluZyhjb25zdCBJbnRQb2ludCYgcG9pbnQsIGludCB3aWR0aCkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgZnJlY3QpCit7CisgICAgUVJlY3RGIHJlY3QoZnJlY3QpOworICAg
IHJlY3QgPSBtX2RhdGEtPnAoKS5kZXZpY2VNYXRyaXgoKS5tYXBSZWN0KHJlY3QpOworCisgICAg
UVJlY3QgcmVzdWx0ID0gcmVjdC50b1JlY3QoKTsgLy9yb3VuZCBpdAorICAgIHJldHVybiBGbG9h
dFJlY3QoUVJlY3RGKHJlc3VsdCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hh
ZG93KGNvbnN0IEludFNpemUmIHBvcywgaW50IGJsdXIsIGNvbnN0IENvbG9yICZjb2xvcikKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Rh
dGEtPnNoYWRvdy54ID0gcG9zLndpZHRoKCk7CisgICAgbV9kYXRhLT5zaGFkb3cueSA9IHBvcy5o
ZWlnaHQoKTsKKyAgICBtX2RhdGEtPnNoYWRvdy5ibHVyID0gYmx1cjsKKyAgICBtX2RhdGEtPnNo
YWRvdy5jb2xvciA9IGNvbG9yOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFk
b3coKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fZGF0YS0+c2hhZG93ID0gVGV4dFNoYWRvdygpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRyYW5zcGFyZW5jeUxh
eWVyIGxheWVyKG1fZGF0YS0+cCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0
YS0+ZGV2aWNlLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+
ZGV2aWNlLT5oZWlnaHQoKSk7CisKKyAgICBsYXllci5vcGFjaXR5ID0gb3BhY2l0eTsKKyAgICBt
X2RhdGEtPmxheWVycy5wdXNoKGxheWVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBUcmFuc3BhcmVuY3lMYXllciBsYXllciA9IG1fZGF0YS0+bGF5
ZXJzLnBvcCgpOworICAgIGxheWVyLnBhaW50ZXItPmVuZCgpOworCisgICAgbV9kYXRhLT5wKCku
c2F2ZSgpOworICAgIG1fZGF0YS0+cCgpLnNldE9wYWNpdHkobGF5ZXIub3BhY2l0eSk7CisgICAg
bV9kYXRhLT5wKCkuZHJhd1BpeG1hcCgwLCAwLCBsYXllci5waXhtYXApOworICAgIG1fZGF0YS0+
cCgpLnJlc3RvcmUoKTsKKyAgICBtX2RhdGEtPnAoKS5lbmQoKTsKKworICAgIGxheWVyLmNsZWFu
dXAoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9kYXRhLT5wKCkuZXJhc2VSZWN0KHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQor
eworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFFQ
YWludGVyUGF0aCBwYXRoOyBwYXRoLmFkZFJlY3QocmVjdCk7CisgICAgUVBlbiBuUGVuID0gbV9k
YXRhLT5wKCkucGVuKCk7CisgICAgblBlbi5zZXRXaWR0aEYod2lkdGgpOworICAgIG1fZGF0YS0+
cCgpLnN0cm9rZVBhdGgocGF0aCwgblBlbik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lV2lkdGgoZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUVBlbiBuUGVuID0gbV9kYXRhLT5wKCkucGVuKCk7Cisg
ICAgblBlbi5zZXRXaWR0aEYod2lkdGgpOworICAgIG1fZGF0YS0+cCgpLnNldFBlbihuUGVuKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsYykKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGVuIG5Q
ZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAgICBuUGVuLnNldENhcFN0eWxlKHRvUXRMaW5lQ2Fw
KGxjKSk7CisgICAgbV9kYXRhLT5wKCkuc2V0UGVuKG5QZW4pOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGopCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBlbiBuUGVuID0gbV9kYXRhLT5wKCku
cGVuKCk7CisgICAgblBlbi5zZXRKb2luU3R5bGUodG9RdExpbmVKb2luKGxqKSk7CisgICAgbV9k
YXRhLT5wKCkuc2V0UGVuKG5QZW4pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBsaW1pdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBRUGVuIG5QZW4gPSBtX2RhdGEtPnAoKS5wZW4oKTsKKyAgICBu
UGVuLnNldE1pdGVyTGltaXQobGltaXQpOworICAgIG1fZGF0YS0+cCgpLnNldFBlbihuUGVuKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IG9wYWNpdHkpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRh
LT5wKCkuc2V0T3BhY2l0eShvcGFjaXR5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS5zZXRD
b21wb3NpdGlvbk1vZGUodG9RdENvbXBvc2l0aW9uTW9kZShvcCkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoICZwYXRoKQoreworICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+cCgpLnNldENsaXBQYXRo
KCpwYXRoLnBsYXRmb3JtUGF0aCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5z
bGF0ZShjb25zdCBGbG9hdFNpemUmIHMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT5wKCkuc2NhbGUocy53aWR0aCgpLCBzLmhl
aWdodCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5z
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fZGF0YS0+cCgpLnJvdGF0ZShyYWRpYW5zKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgcykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnAoKS5zY2FsZShzLndpZHRoKCksIHMu
aGVpZ2h0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVj
dENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGFkZENsaXAocmVjdCk7CisgICAgUVBhaW50
ZXJQYXRoIHBhdGg7CisKKyAgICAvLyBBZGQgb3V0ZXIgZWxsaXBzZQorICAgIHBhdGguYWRkRWxs
aXBzZShRUmVjdEYocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpKTsKKworICAgIC8vIEFkZCBpbm5lciBlbGxpcHNlLgorICAgIHBhdGguYWRkRWxsaXBzZShR
UmVjdEYocmVjdC54KCkgKyB0aGlja25lc3MsIHJlY3QueSgpICsgdGhpY2tuZXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gKHRoaWNrbmVzcyAqIDIpLCByZWN0
LmhlaWdodCgpIC0gKHRoaWNrbmVzcyAqIDIpKSk7CisKKyAgICBwYXRoLnNldEZpbGxSdWxlKFF0
OjpPZGRFdmVuRmlsbCk7CisgICAgbV9kYXRhLT5wKCkuc2V0Q2xpcFBhdGgocGF0aCwgUXQ6Oklu
dGVyc2VjdENsaXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RD
bGlwKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0
LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBOZWVkIHN1ZmZpY2ll
bnQgd2lkdGggYW5kIGhlaWdodCB0byBjb250YWluIHRoZXNlIGN1cnZlcy4gIFNhbml0eSBjaGVj
ayBvdXIgdG9wL2JvdHRvbQorICAgIC8vIHZhbHVlcyBhbmQgb3VyIHdpZHRoL2hlaWdodCB2YWx1
ZXMgdG8gbWFrZSBzdXJlIHRoZSBjdXJ2ZXMgY2FuIGFsbCBmaXQuCisgICAgaW50IHJlcXVpcmVk
V2lkdGggPSBxTWF4KHRvcExlZnQud2lkdGgoKSArIHRvcFJpZ2h0LndpZHRoKCksIGJvdHRvbUxl
ZnQud2lkdGgoKSArIGJvdHRvbVJpZ2h0LndpZHRoKCkpOworICAgIGlmIChyZXF1aXJlZFdpZHRo
ID4gcmVjdC53aWR0aCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgcmVxdWlyZWRIZWln
aHQgPSBxTWF4KHRvcExlZnQuaGVpZ2h0KCkgKyBib3R0b21MZWZ0LmhlaWdodCgpLCB0b3BSaWdo
dC5oZWlnaHQoKSArIGJvdHRvbVJpZ2h0LmhlaWdodCgpKTsKKyAgICBpZiAocmVxdWlyZWRIZWln
aHQgPiByZWN0LmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDbGlwIHRvIG91
ciByZWN0LgorICAgIGFkZENsaXAocmVjdCk7CisKKyAgICAvLyBPSywgdGhlIGN1cnZlcyBjYW4g
Zml0LgorICAgIFFQYWludGVyUGF0aCBwYXRoOworCisgICAgLy8gQWRkIHRoZSBmb3VyIGVsbGlw
c2VzIHRvIHRoZSBwYXRoLiAgVGVjaG5pY2FsbHkgdGhpcyByZWFsbHkgaXNuJ3QgZ29vZCBlbm91
Z2gsIHNpbmNlIHdlIGNvdWxkIGVuZCB1cAorICAgIC8vIG5vdCBjbGlwcGluZyB0aGUgb3RoZXIg
My80IG9mIHRoZSBlbGxpcHNlIHdlIGRvbid0IGNhcmUgYWJvdXQuICBXZSdyZSByZWx5aW5nIG9u
IHRoZSBmYWN0IHRoYXQgZm9yCisgICAgLy8gbm9ybWFsIHVzZSBjYXNlcyB0aGVzZSBlbGxpcHNl
cyB3b24ndCBvdmVybGFwIG9uZSBhbm90aGVyIChvciB3aGVuIHRoZXkgZG8gdGhlIGN1cnZhdHVy
ZSBvZiBvbmUgd2lsbAorICAgIC8vIGJlIHN1YnN1bWVkIGJ5IHRoZSBvdGhlcikuCisgICAgcGF0
aC5hZGRFbGxpcHNlKFFSZWN0RihyZWN0LngoKSwgcmVjdC55KCksIHRvcExlZnQud2lkdGgoKSAq
IDIsIHRvcExlZnQuaGVpZ2h0KCkgKiAyKSk7CisgICAgcGF0aC5hZGRFbGxpcHNlKFFSZWN0Rihy
ZWN0LnJpZ2h0KCkgLSB0b3BSaWdodC53aWR0aCgpICogMiwgcmVjdC55KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3BSaWdodC53aWR0aCgpICogMiwgdG9wUmlnaHQuaGVpZ2h0KCkg
KiAyKSk7CisgICAgcGF0aC5hZGRFbGxpcHNlKFFSZWN0RihyZWN0LngoKSwgcmVjdC5ib3R0b20o
KSAtIGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym90dG9tTGVmdC53aWR0aCgpICogMiwgYm90dG9tTGVmdC5oZWlnaHQoKSAqIDIpKTsKKyAgICBw
YXRoLmFkZEVsbGlwc2UoUVJlY3RGKHJlY3QucmlnaHQoKSAtIGJvdHRvbVJpZ2h0LndpZHRoKCkg
KiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b20oKSAtIGJvdHRvbVJp
Z2h0LmhlaWdodCgpICogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbVJpZ2h0
LndpZHRoKCkgKiAyLCBib3R0b21SaWdodC5oZWlnaHQoKSAqIDIpKTsKKworICAgIGludCB0b3BM
ZWZ0UmlnaHRIZWlnaHRNYXggPSBxTWF4KHRvcExlZnQuaGVpZ2h0KCksIHRvcFJpZ2h0LmhlaWdo
dCgpKTsKKyAgICBpbnQgYm90dG9tTGVmdFJpZ2h0SGVpZ2h0TWF4ID0gcU1heChib3R0b21MZWZ0
LmhlaWdodCgpLCBib3R0b21SaWdodC5oZWlnaHQoKSk7CisgICAgCisgICAgaW50IHRvcEJvdHRv
bUxlZnRXaWR0aE1heCA9IHFNYXgodG9wTGVmdC53aWR0aCgpLCBib3R0b21MZWZ0LndpZHRoKCkp
OyAgCisgICAgaW50IHRvcEJvdHRvbVJpZ2h0V2lkdGhNYXggPSBxTWF4KHRvcFJpZ2h0LndpZHRo
KCksIGJvdHRvbVJpZ2h0LndpZHRoKCkpOworICAgIAorICAgIC8vIE5vdyBhZGQgZml2ZSByZWN0
cyAob25lIGZvciBlYWNoIGVkZ2UgcmVjdCBpbiBiZXR3ZWVuIHRoZSByb3VuZGVkIGNvcm5lcnMg
YW5kIG9uZSBmb3IgdGhlIGludGVyaW9yKS4KKyAgICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3Qu
eCgpICsgdG9wTGVmdC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCks
CisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLSB0b3BMZWZ0LndpZHRoKCkg
LSB0b3BSaWdodC53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGVmdFJpZ2h0
SGVpZ2h0TWF4KSk7CisKKyAgICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3QueCgpICsgYm90dG9t
TGVmdC53aWR0aCgpLCByZWN0LmJvdHRvbSgpIC0gYm90dG9tTGVmdFJpZ2h0SGVpZ2h0TWF4LAor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpIC0gYm90dG9tTGVmdC53aWR0aCgp
IC0gYm90dG9tUmlnaHQud2lkdGgoKSwgYm90dG9tTGVmdFJpZ2h0SGVpZ2h0TWF4KSk7CisKKyAg
ICBwYXRoLmFkZFJlY3QoUVJlY3RGKHJlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
cmVjdC55KCkgKyB0b3BMZWZ0LmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgdG9w
Qm90dG9tTGVmdFdpZHRoTWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5oZWlnaHQo
KSAtIHRvcExlZnQuaGVpZ2h0KCkgLSBib3R0b21MZWZ0LmhlaWdodCgpKSk7CisgICAgCisgICAg
cGF0aC5hZGRSZWN0KFFSZWN0RihyZWN0LnJpZ2h0KCkgLSB0b3BCb3R0b21SaWdodFdpZHRoTWF4
LAorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyB0b3BSaWdodC5oZWlnaHQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRvcEJvdHRvbVJpZ2h0V2lkdGhNYXgsCisgICAgICAg
ICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpIC0gdG9wUmlnaHQuaGVpZ2h0KCkgLSBib3R0
b21SaWdodC5oZWlnaHQoKSkpOworICAgIAorICAgIHBhdGguYWRkUmVjdChRUmVjdEYocmVjdC54
KCkgKyB0b3BCb3R0b21MZWZ0V2lkdGhNYXgsCisgICAgICAgICAgICAgICAgICAgICAgICByZWN0
LnkoKSArIHRvcExlZnRSaWdodEhlaWdodE1heCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y3Qud2lkdGgoKSAtIHRvcEJvdHRvbUxlZnRXaWR0aE1heCAtIHRvcEJvdHRvbVJpZ2h0V2lkdGhN
YXgsCisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmhlaWdodCgpIC0gdG9wTGVmdFJpZ2h0
SGVpZ2h0TWF4IC0gYm90dG9tTGVmdFJpZ2h0SGVpZ2h0TWF4KSk7CisKKyAgICBwYXRoLnNldEZp
bGxSdWxlKFF0OjpXaW5kaW5nRmlsbCk7CisgICAgbV9kYXRhLT5wKCkuc2V0Q2xpcFBhdGgocGF0
aCwgUXQ6OkludGVyc2VjdENsaXApOworfQorCisjaWYgU1ZHX1NVUFBPUlQKK0tSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRl
eHQoKQoreworICAgIHJldHVybiBuZXcgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdChwbGF0Zm9y
bUNvbnRleHQoKSk7Cit9CisjZW5kaWYKKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10150</attachid>
            <date>2006-08-21 12:38:21 -0700</date>
            <delta_ts>2006-08-21 16:11:07 -0700</delta_ts>
            <desc>Patch chunk: timer/system time related stuff</desc>
            <filename>platform-qt-time.diff</filename>
            <type>text/plain</type>
            <size>7537</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMjIgQEAKKzIwMDYtMDgtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlcyBwYXJ0cyBvZjogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDQ2MworICAgICAgICBXZWJLaXQgc2hvdWxkIGhhdmUgUXQgcGxhdGZvcm0g
c3VwcG9ydAorCisgICAgICAgICogcGxhdGZvcm0vcXQvU2hhcmVkVGltZXJRdC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpz
dG9wU2hhcmVkVGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NoYXJlZFRpbWVyUXQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRUaW1lclF0OjpTaGFyZWRUaW1lclF0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVyUXQ6On5TaGFyZWRUaW1lclF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZFRpbWVyUXQ6Omluc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkVGltZXJRdDo6ZmlyZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvU3lzdGVtVGltZVF0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50VGltZSk6CisKIDIwMDYtMDgtMjEg
IEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBueXBvcC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRXJpYy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2hhcmVkVGltZXJRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcAkoUmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2hhcmVkVGltZXJRdC5jcHAJKFJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0
YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxs
ZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiU2hhcmVkVGltZXJRdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1No
YXJlZFRpbWVyUXQqIFNoYXJlZFRpbWVyUXQ6OnNfc2VsZiA9IDA7IC8vIEZJWE1FOiBzdGF0aWNk
ZWxldGVyCisKK3ZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmKSgpKQor
eworICAgIFNoYXJlZFRpbWVyUXQ6Omluc3QoKS0+X3RpbWVyRnVuY3Rpb24gPSBmOworfQorCit2
b2lkIHNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQoreworICAgIFNoYXJl
ZFRpbWVyUXQ6Omluc3QoKS0+c3RhcnQocU1heCgwLCBpbnQoZmlyZVRpbWUgLSBjdXJyZW50VGlt
ZSgpKSkpOworfQorCit2b2lkIHN0b3BTaGFyZWRUaW1lcigpCit7CisgICAgU2hhcmVkVGltZXJR
dDo6aW5zdCgpLT5zdG9wKCk7Cit9CisKK30KKworI2luY2x1ZGUgIlNoYXJlZFRpbWVyUXQubW9j
IgorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TaGFy
ZWRUaW1lclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9TaGFyZWRUaW1l
clF0LmgJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1NoYXJlZFRpbWVyUXQu
aAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgU2hhcmVkVGltZXJRdFF0X0gKKyNkZWZpbmUgU2hhcmVk
VGltZXJRdFF0X0gKKworI2luY2x1ZGUgIlNoYXJlZFRpbWVyUXQuaCIKKworI2luY2x1ZGUgIlN5
c3RlbVRpbWUuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8UVRpbWVyPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNoYXJlZFRpbWVyUXQgOiBwdWJsaWMgUVRpbWVyIHsKK1FfT0JK
RUNUCitwcm90ZWN0ZWQ6CisgICAgU2hhcmVkVGltZXJRdCgpIDogUVRpbWVyKCkKKyAgICB7Cisg
ICAgICAgIGNvbm5lY3QodGhpcywgU0lHTkFMKHRpbWVvdXQoKSksIHRoaXMsIFNMT1QoZmlyZSgp
KSk7CisgICAgICAgIHNldFNpbmdsZVNob3QodHJ1ZSk7CisgICAgICAgIF90aW1lckZ1bmN0aW9u
ID0gMDsKKyAgICB9CisKKyAgICB+U2hhcmVkVGltZXJRdCgpCisgICAgeworICAgIH0KKworcHVi
bGljOgorICAgIHN0YXRpYyBTaGFyZWRUaW1lclF0ICppbnN0KCkKKyAgICB7CisgICAgICAgIGlm
ICghc19zZWxmKQorICAgICAgICAgICAgc19zZWxmID0gbmV3IFNoYXJlZFRpbWVyUXQoKTsKKwor
ICAgICAgICByZXR1cm4gc19zZWxmOworICAgIH0KKworICAgIHZvaWQgKCpfdGltZXJGdW5jdGlv
bikoKTsKKworcHVibGljIFFfU0xPVFM6CisgICAgdm9pZCBmaXJlKCkKKyAgICB7CisgICAgICAg
IGlmIChfdGltZXJGdW5jdGlvbikKKyAgICAgICAgICAgIChfdGltZXJGdW5jdGlvbikoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFNoYXJlZFRpbWVyUXQqIHNfc2VsZjsKK307CisK
K30KKworI2VuZGlmCisKKy8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL3F0L1N5c3RlbVRpbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9TeXN0ZW1UaW1lUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9T
eXN0ZW1UaW1lUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlN5c3RlbVRpbWUuaCIKKworI2luY2x1ZGUgPHRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitkb3VibGUgY3VycmVudFRpbWUoKQoreworICAgIHRpbWVfdCB0dGltZTsKKyAgICB0aW1l
KCZ0dGltZSk7CisgICAgcmV0dXJuIChkb3VibGUpIHR0aW1lOworfQorCit9CisKKy8vIHZpbTog
dHM9NCBzdz00IGV0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10151</attachid>
            <date>2006-08-21 12:53:11 -0700</date>
            <delta_ts>2006-08-24 09:37:58 -0700</delta_ts>
            <desc>Patch chunk: fonts related stuff</desc>
            <filename>platform-qt-fonts.diff</filename>
            <type>text/plain</type>
            <size>18633</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDYtMDgtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlcyBwYXJ0cyBvZjogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDQ2NworICAgICAgICBXZWJLaXQgc2hvdWxkIGhhdmUgUXQgcGxhdGZvcm0g
c3VwcG9ydAorCisgICAgICAgICogcGxhdGZvcm0vcXQvRm9udENhY2hlUXQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvRm9udERhdGFRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YTo6cGxhdGZv
cm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Gb250UGxhdGZvcm1EYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Zv
bnRQbGF0Zm9ybURhdGFRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
fkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
aXNGaXhlZFBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZvbnRR
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b3BlcmF0b3IgUUZvbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0
aEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9HbHlwaE1hcFF0LmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaE1hcDo6ZmlsbFBhZ2UpOgorCiAyMDA2LTA4
LTIxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnRDYWNoZVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnRDYWNoZVF0LmNwcAkoUmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udENhY2hlUXQuY3BwCShSZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxl
ciA8bXVlbGxlckBrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorCisjaW5jbHVkZSAiRm9udC5o
IgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICAvLyBuby1vcAorfQorCitj
b25zdCBGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIG5ldyBGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9u
KCksIGZvbnQuZmFtaWx5KCkuZmFtaWx5KCkpKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9u
dENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQorewor
ICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBm
b250LmZhbWlseSgpLmZhbWlseSgpKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hl
OjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgLy8g
RklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVm
YXVsdCBmb250IGhlcmUuCisgICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRo
YXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgorICAgIHN0
YXRpYyBBdG9taWNTdHJpbmcgc190aW1lc1N0cigiVGltZXMgTmV3IFJvbWFuIik7CisgICAgcmV0
dXJuIGdldENhY2hlZEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgc190
aW1lc1N0cik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRh
KGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBl
dApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAkoUmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAko
UmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5j
bHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBh
bmQgRm9udC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNp
bmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKworI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRl
IDxRRm9udEluZm8+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRm9udFBsYXRmb3JtRGF0YTo6
Rm9udFBsYXRmb3JtRGF0YSgpCit7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoRGVsZXRlZCkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lKQoreworICAgIFFGb250IGZvbnQoIlRpbWVzIE5ldyBSb21hbiIsIDEy
KTsKKyAgICBmb250LnNldEZhbWlseShmYW1pbHlOYW1lLmRvbVN0cmluZygpKTsKKyAgICBmb250
LnNldFBpeGVsU2l6ZShmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgIGZvbnQu
c2V0SXRhbGljKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSk7CisgICAgZm9udC5zZXRXZWlnaHQo
Zm9udERlc2NyaXB0aW9uLndlaWdodCgpKTsKKyAgICBzZXRGb250KGZvbnQpOworfQorCitGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90
aGVyKQorICAgIDogbV9mb250KG90aGVyLm1fZm9udCkKK3sKK30KKworRm9udFBsYXRmb3JtRGF0
YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90
aGVyKQoreworICAgIG1fZm9udCA9IG90aGVyLm1fZm9udDsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKK30KKworYm9vbCBG
b250UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIHJldHVybiBRRm9udEluZm8o
bV9mb250KS5maXhlZFBpdGNoKCk7Cit9CisKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9u
dChjb25zdCBRRm9udCYgb3RoZXIpCit7CisgICAgbV9mb250ID0gb3RoZXI7Cit9CisKK1FGb250
IEZvbnRQbGF0Zm9ybURhdGE6OmZvbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnQ7Cit9
CisKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAoreworICAgIHJldHVy
biBxSGFzaCgmbV9mb250KTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiAob3Ro
ZXIubV9mb250ID09IG1fZm9udCk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YS5oCShSZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9xdC9Gb250UGxhdGZvcm1EYXRhLmgJKFJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9u
dCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90
aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2
IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFfSAorI2RlZmluZSBGb250UGxhdGZv
cm1EYXRhX0gKKworI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiRm9udERlc2Ny
aXB0aW9uLmgiCisKKyNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRU3RyaW5nPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGEgeworcHVibGljOgorICAg
IEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpOworICAgIEZv
bnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcik7
CisKKyAgICBjbGFzcyBEZWxldGVkIHsgfTsKKyAgICBGb250UGxhdGZvcm1EYXRhKERlbGV0ZWQp
OworCisgICAgRm9udFBsYXRmb3JtRGF0YSgpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpOworICAgIH5Gb250
UGxhdGZvcm1EYXRhKCk7CisKKyAgICBib29sIGlzRml4ZWRQaXRjaCgpOworCisgICAgdm9pZCBz
ZXRGb250KGNvbnN0IFFGb250Jik7CisgICAgUUZvbnQgZm9udCgpIGNvbnN0OworCisgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0OworCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIG90aGVyKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBRRm9udCBtX2ZvbnQ7Cit9
OworCit9CisKKyNlbmRpZgorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9HbHlwaE1hcFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0dseXBoTWFwUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9H
bHlwaE1hcFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaE1hcC5o
IgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IEdseXBoTWFwOjpmaWxsUGFnZShHbHlwaFBhZ2UqIHBhZ2UsIFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykgeworICAgICAgICBwYWdlLT5z
ZXRHbHlwaERhdGFGb3JJbmRleChpLCBidWZmZXJbaV0sIGZvbnREYXRhKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9Gb250RGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3F0L0ZvbnREYXRhUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9Gb250RGF0YVF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPiAKKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
b250RGF0YS5oIgorCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisKKyNpbmNsdWRlIDxRRm9udE1ldHJpY3M+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBR
Rm9udE1ldHJpY3MgbWV0cmljcyhtX2ZvbnQuZm9udCgpKTsKKyAgICBtX2FzY2VudCA9IG1ldHJp
Y3MuYXNjZW50KCk7CisgICAgbV9kZXNjZW50ID0gbWV0cmljcy5kZXNjZW50KCk7CisgICAgbV9s
aW5lU3BhY2luZyA9IG1ldHJpY3MubGluZVNwYWNpbmcoKTsKKyAgICBtX2xpbmVHYXAgPSBtZXRy
aWNzLmxlYWRpbmcoKTsKKyAgICBtX3hIZWlnaHQgPSBtZXRyaWNzLnhIZWlnaHQoKTsKKyAgICBt
X2xpbmVTcGFjaW5nID0gbV9hc2NlbnQgKyBtX2Rlc2NlbnQgKyBtX2xpbmVHYXA7Cit9CisKK3Zv
aWQgRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7Cit9CisKK0ZvbnREYXRhKiBGb250RGF0
YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24pIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQor
eworfQorCitmbG9hdCBGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAoreworICAgIHJldHVybiBRRm9udE1ldHJpY3NGKG1fZm9udC5mb250KCkpLndpZHRo
KFFDaGFyKHVzaG9ydChnbHlwaCkpKTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9Gb250UXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vcXQvRm9udFF0LmNwcAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vcXQvRm9udFF0LmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIDxzYW5kZmVsZEBrZGUub3JnPgorICogCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGb250LmgiCisKKyNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UURlYnVnPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ZvbnQ6Om9wZXJhdG9yIFFGb250KCkgY29uc3QKK3sKKyAgICBR
X0FTU0VSVChwcmltYXJ5Rm9udCgpICE9IDApOworICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5w
bGF0Zm9ybURhdGEoKS5mb250KCk7Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9udERhdGEqIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwg
aW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgUVBh
aW50ZXImIHAgPSAqZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIENv
bG9yIGNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5wZW4oKS5jb2xvcigpOworICAgIHAuc2V0UGVu
KFFDb2xvcihjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpKSk7CisgICAg
cC5zZXRGb250KGZvbnQtPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CisKKyAgICBRQ2hhciogYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxRQ2hhcio+KGdseXBoQnVmZmVyLmdseXBocyhmcm9tKSk7
CisgICAgUVN0cmluZyBzdHIgPSBRU3RyaW5nOjpmcm9tUmF3RGF0YShidWZmZXIsIG51bUdseXBo
cyk7CisKKyAgICBwLmRyYXdUZXh0KFFQb2ludEYocG9pbnQueCgpLHBvaW50LnkoKSksIHN0cik7
Cit9CisKK3ZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50KSBjb25zdAoreworICAgIC8vICMjIyBzdHlsZSwgcnVuLmZyb20oKS9sZW5ndGgoKSBjdXQt
b2ZmCisgICAgY3R4LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1RleHQocG9pbnQueCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nOjpmcm9tUmF3RGF0YShyZWludGVycHJl
dF9jYXN0PGNvbnN0IFFDaGFyKj4ocnVuLmNoYXJhY3RlcnMoKSArIHJ1bi5mcm9tKCkpLCBydW4u
bGVuZ3RoKCkpKTsKK30KKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJikgY29uc3QKK3sKKyAgICAvLyAjIyMg
c3R5bGUKKyAgICBRRm9udE1ldHJpY3NGIG1ldHJpY3MocHJpbWFyeUZvbnQoKS0+bV9mb250LmZv
bnQoKSk7CisgICAgcmV0dXJuIG1ldHJpY3Mud2lkdGgoUVN0cmluZzo6ZnJvbVJhd0RhdGEocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KHJ1bi5jaGFyYWN0ZXJzKCkgKyBydW4uZnJvbSgp
KSwgcnVuLmxlbmd0aCgpKSk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10152</attachid>
            <date>2006-08-21 12:54:31 -0700</date>
            <delta_ts>2006-08-23 09:20:12 -0700</delta_ts>
            <desc>Patch chunk: resource loader related stuff</desc>
            <filename>platform-qt-io.diff</filename>
            <type>text/plain</type>
            <size>17992</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMzAgQEAKKzIwMDYtMDgtMjEgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlcyBwYXJ0cyBvZjogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDQ2NworICAgICAgICBXZWJLaXQgc2hvdWxkIGhhdmUgUXQgcGxhdGZvcm0g
c3VwcG9ydAorCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlckludGVybmFsOjp+UmVzb3Vy
Y2VMb2FkZXJJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6flJl
c291cmNlTG9hZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyOjpzdGFydCk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZGVyOjphc3NlbWJsZVJlc3BvbnNlSGVhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6cmV0cmlldmVDaGFyc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZGVyOjpyZWNlaXZlZFJlc3BvbnNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZGVyTWFuYWdlcjo6UmVzb3VyY2VMb2FkZXJNYW5hZ2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlTG9hZGVyTWFuYWdlcjo6Z2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlTG9hZGVyTWFuYWdlcjo6dXNlU2ltcGxlVHJhbnNmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpoZWFkZXJDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmRvd25sb2FkVGlt
ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck1hbmFnZXI6OnJl
bW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmFkZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmNhbmNlbCk6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmg6IEFkZGVkLgorCiAyMDA2LTA4
LTIxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyTWFu
YWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRl
ck1hbmFnZXIuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJj
ZUxvYWRlck1hbmFnZXIuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1t
ZWxAZ21haWwuY29tIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZGVyTWFuYWdlci5oIgorCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlckludGVybmFsLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgaW50IHNlbGVjdFRpbWVvdXRNUyA9IDU7
Citjb25zdCBkb3VibGUgcG9sbFRpbWVTZWNvbmRzID0gMC4wNTsKKworUmVzb3VyY2VMb2FkZXJN
YW5hZ2VyOjpSZXNvdXJjZUxvYWRlck1hbmFnZXIoKQorICAgIDogbV91c2VTaW1wbGUoZmFsc2Up
CisgICAgLCBqb2JzKG5ldyBIYXNoU2V0PFJlc291cmNlTG9hZGVyKj4pCisgICAgLCBtX2Rvd25s
b2FkVGltZXIodGhpcywgJlJlc291cmNlTG9hZGVyTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxi
YWNrKQoreworICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgICBjdXJs
TXVsdGlIYW5kbGUgPSBjdXJsX211bHRpX2luaXQoKTsKK30KKworUmVzb3VyY2VMb2FkZXJNYW5h
Z2VyKiBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmdldCgpCit7CisgICAgc3RhdGljIFJlc291cmNl
TG9hZGVyTWFuYWdlciogc19zaW5nbGV0b247CisKKyAgICBpZiAoIXNfc2luZ2xldG9uKQorICAg
ICAgICBzX3NpbmdsZXRvbiA9IG5ldyBSZXNvdXJjZUxvYWRlck1hbmFnZXI7CisKKyAgICByZXR1
cm4gc19zaW5nbGV0b247Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjp1c2VTaW1w
bGVUcmFuc2Zlcihib29sIHVzZVNpbXBsZSkKK3sKKyAgICBtX3VzZVNpbXBsZSA9IHVzZVNpbXBs
ZTsKK30KKworc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNp
emUsIHNpemVfdCBubWVtYiwgdm9pZCogb2JqKQoreworICAgIFJlc291cmNlTG9hZGVyKiBqb2Ig
PSBzdGF0aWNfY2FzdDxSZXNvdXJjZUxvYWRlcio+KG9iaik7CisgICAgUmVzb3VyY2VMb2FkZXJJ
bnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBpbnQgdG90YWxTaXplID0gc2l6
ZSAqIG5tZW1iOworICAgIGQtPmNsaWVudC0+cmVjZWl2ZWREYXRhKGpvYiwgc3RhdGljX2Nhc3Q8
Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisgICAgcmV0dXJuIHRvdGFsU2l6ZTsKK30KKworc3Rh
dGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qg
bm1lbWIsIHZvaWQqIG9iaikKK3sKKyAgICBSZXNvdXJjZUxvYWRlciogam9iID0gc3RhdGljX2Nh
c3Q8UmVzb3VyY2VMb2FkZXIqPihvYmopOworICAgIFJlc291cmNlTG9hZGVySW50ZXJuYWwqIGQg
PSBqb2ItPmdldEludGVybmFsKCk7CisgCisgICAgaWYgKGpvYi0+bWV0aG9kKCkgPT0gIlBPU1Qi
KSB7CisgICAgICAgIGpvYi0+cmVjZWl2ZWRSZXNwb25zZShwdHIpOworICAgIH0KKyAgICAKKyAg
ICBpbnQgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOworICAgIHJldHVybiB0b3RhbFNpemU7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soVGlt
ZXI8UmVzb3VyY2VMb2FkZXJNYW5hZ2VyPiogdGltZXIpCit7CisgICAgaWYgKGpvYnMtPmlzRW1w
dHkoKSkgeworICAgICAgICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKG1fdXNlU2ltcGxlKSB7CisgICAgICAgIGZvciAoSGFzaFNldDxS
ZXNvdXJjZUxvYWRlcio+OjppdGVyYXRvciBpdCA9IGpvYnMtPmJlZ2luKCk7IGl0ICE9IGpvYnMt
PmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBSZXNvdXJjZUxvYWRlciogam9iID0gKml0Owor
ICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXJJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwo
KTsKKyAgICAgICAgICAgIENVUkxjb2RlIHJlcyA9IGN1cmxfZWFzeV9wZXJmb3JtKGQtPm1faGFu
ZGxlKTsKKyAgICAgICAgICAgIGlmIChyZXMgIT0gQ1VSTEVfT0spCisgICAgICAgICAgICAgICAg
cHJpbnRmKCJFcnJvciBXSVRIIEpPQiAlZFxuIiwgcmVzKTsKKyAgICAgICAgICAgIGQtPmNsaWVu
dC0+cmVjZWl2ZWRBbGxEYXRhKGpvYiwgMCk7CisgICAgICAgICAgICBkLT5jbGllbnQtPnJlY2Vp
dmVkQWxsRGF0YShqb2IpOworICAgICAgICAgICAgY3VybF9lYXN5X2NsZWFudXAoZC0+bV9oYW5k
bGUpOworICAgICAgICAgICAgZC0+bV9oYW5kbGUgPSAwOworICAgICAgICB9CisKKyAgICAgICAg
am9icy0+Y2xlYXIoKTsKKyAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0b3AoKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgICAgICBGRF9aRVJPKCZmZHdyaXRl
KTsKKyAgICAgICAgRkRfWkVSTygmZmRleGNlcCk7CisgICAgICAgIGN1cmxfbXVsdGlfZmRzZXQo
Y3VybE11bHRpSGFuZGxlLCAmZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7Cisg
ICAgICAgIGludCBucnVubmluZzsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKyAg
ICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgdGltZW91dC50dl9zZWMgPSAwOworICAgICAgICB0
aW1lb3V0LnR2X3VzZWMgPSBzZWxlY3RUaW1lb3V0TVMgKiAxMDAwOyAgICAgICAvLyBzZWxlY3Qg
d2FpdHMgbWljcm9zZWNvbmRzCisgICAgICAgIHJldHZhbCA9IDo6c2VsZWN0KG1heGZkICsgMSwg
JmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4Y2VwLCAmdGltZW91dCk7CisgICAgICAgIHN3aXRjaCAo
cmV0dmFsKSB7CisgICAgICAgICAgICBjYXNlIC0xOiAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHNlbGVjdCBlcnJvcgorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAgICBwcmludGYoIiVz
LCBzZWxlY3QgZXJyb3IoJWQpXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLHJldHZhbCk7CisjZW5k
aWYKKyAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCovCisgICAgICAgICAgICBjYXNlIDA6
ICAgICAgICAgICAgICAgICAvLyBzZWxlY3QgdGltZW91dAorI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgICAgICAgICBwcmludGYoIiVzLCBzZWxlY3QgdGltZW91dCAlZFxuIiwgX19QUkVUVFlfRlVO
Q1RJT05fXyxyZXR2YWwpOworI2VuZGlmCisgICAgICAgICAgICAgICAgLyogZmFsbHRocm91Z2gu
IHRoaXMgY2FuIGJlIHRoZSBmaXJzdCBwZXJmb3JtIHRvIGJlIG1hZGUgKi8KKyAgICAgICAgICAg
IGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgLy8gMSsgZGVzY3JpcHRvcnMgaGF2ZSBk
YXRhCisgICAgICAgICAgICAgICAgd2hpbGUgKENVUkxNX0NBTExfTVVMVElfUEVSRk9STSA9PSBj
dXJsX211bHRpX3BlcmZvcm0oY3VybE11bHRpSGFuZGxlLCAmbnJ1bm5pbmcpKQorICAgICAgICAg
ICAgICAgICAgICB7IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIGNoZWNrIHRoZSBjdXJsIG1l
c3NhZ2VzIGluZGljYXRpbmcgY29tcGxldGVkIHRyYW5zZmVycworICAgICAgICAvLyBhbmQgZnJl
ZSB0aGVpciByZXNvdXJjZXMKKyAgICAgICAgUmVzb3VyY2VMb2FkZXIqIGpvYjsKKyAgICAgICAg
aW50IG5tc2dzOworICAgICAgICB3aGlsZSAoQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0aV9pbmZv
X3JlYWQoY3VybE11bHRpSGFuZGxlLCAmbm1zZ3MpKSB7CisgICAgICAgICAgICBpZiAobXNnLT5t
c2cgPT0gQ1VSTE1TR19ET05FKSB7CisgICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbm9kZSB3
aGljaCBoYXMgc2FtZSBkLT5tX2hhbmRsZSBhcyBjb21wbGV0ZWQgdHJhbnNmZXIKKyAgICAgICAg
ICAgICAgICBDVVJMKiBjaGFuZGxlID0gbXNnLT5lYXN5X2hhbmRsZTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnQoY2hhbmRsZSk7CisgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXIgKmpvYjsK
KyAgICAgICAgICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhjaGFuZGxlLCBDVVJMSU5GT19QUklW
QVRFLCAmam9iKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoam9iKTsgLy9maXhtZTogYXNzZXJ0
LT5pZiA/CisgICAgICAgICAgICAgICAgLy8gaWYgZm91bmQsIGRlbGV0ZSBpdAorICAgICAgICAg
ICAgICAgIGlmIChqb2IpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVzb3VyY2VMb2FkZXJJbnRl
cm5hbCAqZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChtc2ctPmRhdGEucmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENVUkxF
X09LOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRoaXMgdG8gYXV0aGVu
dGljYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyByZXNwQ29kZSA9IC0xOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGQtPm1faGFuZGxl
LCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLCAmcmVzcENvZGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbW92ZShqb2IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIkN1cmwgRVJST1IgJXNc
biIsIGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgam9iLT5zZXRFcnJvcihtc2ctPmRhdGEucmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZW1vdmUoam9iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiQ3VybFJlcXVlc3Qgbm90IGZvdW5kLCBl
dmVudGhvdWdoIGN1cmwgZC0+bV9oYW5kbGUgZmluaXNoZWRcbiIpOworICAgICAgICAgICAgICAg
ICAgICBhc3NlcnQoMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKCFqb2JzLT5pc0VtcHR5KCkpCisgICAgICAgIG1fZG93bmxv
YWRUaW1lci5zdGFydE9uZVNob3QocG9sbFRpbWVTZWNvbmRzKTsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRlck1hbmFnZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRlciogam9iKQoreworICAgIFJlc291
cmNlTG9hZGVySW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CisgICAgaWYgKCFkLT5t
X2hhbmRsZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChqb2JzLT5jb250YWlucyhqb2IpKQor
ICAgICAgICBqb2JzLT5yZW1vdmUoam9iKTsKKyAgICBpZiAoam9icy0+aXNFbXB0eSgpKQorICAg
ICAgICBtX2Rvd25sb2FkVGltZXIuc3RvcCgpOworICAgIGQtPmNsaWVudC0+cmVjZWl2ZWRBbGxE
YXRhKGpvYiwgMCk7CisgICAgZC0+Y2xpZW50LT5yZWNlaXZlZEFsbERhdGEoam9iKTsKKyAgICBp
ZiAoZC0+bV9oYW5kbGUpIHsKKyAgICAgICAgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxN
dWx0aUhhbmRsZSwgZC0+bV9oYW5kbGUpOworICAgICAgICBjdXJsX2Vhc3lfY2xlYW51cChkLT5t
X2hhbmRsZSk7CisgICAgICAgIGQtPm1faGFuZGxlID0gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjphZGQoUmVzb3VyY2VMb2FkZXIqIGpvYikKK3sKKyAgICBi
b29sIHN0YXJ0VGltZXIgPSBqb2JzLT5pc0VtcHR5KCk7CisgICAgUmVzb3VyY2VMb2FkZXJJbnRl
cm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHVybCA9
IGQtPlVSTC51cmwoKTsKKyAgICBkLT5tX2hhbmRsZSA9IGN1cmxfZWFzeV9pbml0KCk7CisgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUklWQVRFLCBqb2IpOworICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfRVJST1JCVUZGRVIsIGVycm9y
X2J1ZmZlcik7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklU
RUZVTkNUSU9OLCB3cml0ZUNhbGxiYWNrKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFu
ZGxlLCBDVVJMT1BUX1dSSVRFREFUQSwgam9iKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBoZWFkZXJDYWxsYmFjayk7CisgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklURUhFQURFUiwgam9iKTsKKyAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAx
KTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX01BWFJFRElSUywg
MTApOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEFVVEgs
IENVUkxBVVRIX0FOWSk7CisgICAgLy8gdXJsIHB0ciBtdXN0IHJlbWFpbiB2YWxpZCB0aHJvdWdo
IHRoZSByZXF1ZXN0CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9V
UkwsIHVybC5hc2NpaSgpKTsKKworICAgIGlmIChqb2ItPm1ldGhvZCgpID09ICJQT1NUIikgewor
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHBvc3REYXRhID0gam9iLT5wb3N0RGF0YSgpLmZsYXR0
ZW5Ub1N0cmluZygpOworCisgICAgICAgIGNoYXIgKnBvc3REYXRhU3RyaW5nID0gKGNoYXIgKikg
bWFsbG9jKHBvc3REYXRhLmxlbmd0aCgpICsgMSk7CisgICAgICAgIHN0cm5jcHkocG9zdERhdGFT
dHJpbmcsIHBvc3REYXRhLmFzY2lpKCksIHBvc3REYXRhLmxlbmd0aCgpKTsKKyAgICAgICAgcG9z
dERhdGFTdHJpbmdbcG9zdERhdGEubGVuZ3RoKCldID0gJ1wwJzsKKworICAgICAgICAvLyBUT0RP
OiBEbyBpdCBwcm9wZXJseSBhZnRlciB3ZSBnb3QgcmlkIG9mIGxpYmN1cmwhIChhbHNvIGxlYWtz
IHRoZSBoZWFkZXJsaXN0LiBobXBmLikKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9QT1NURklFTERTLCBwb3N0RGF0YVN0cmluZyk7CisgICAgfQorCisgICAg
aWYgKG1fdXNlU2ltcGxlKQorICAgICAgICBqb2JzLT5hZGQoam9iKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgQ1VSTE1jb2RlIHJldCA9IGN1cmxfbXVsdGlfYWRkX2hhbmRsZShjdXJsTXVsdGlIYW5k
bGUsIGQtPm1faGFuZGxlKTsKKyAgICAgICAgLy8gZG9uJ3QgY2FsbCBwZXJmb3JtLCBiZWNhdXNl
IGV2ZW50cyBtdXN0IGJlIGFzeW5jCisgICAgICAgIC8vIHRpbWVvdXQgd2lsbCBvY2N1ciBhbmQg
ZG8gY3VybF9tdWx0aV9wZXJmb3JtCisgICAgICAgIGlmIChyZXQgJiYgcmV0ICE9IENVUkxNX0NB
TExfTVVMVElfUEVSRk9STSkgeworICAgICAgICAgICAgcHJpbnRmKCJFcnJvciAlZCBzdGFydGlu
ZyBqb2IgJXNcbiIsIHJldCwgZC0+VVJMLnVybCgpLmFzY2lpKCkpOworICAgICAgICAgICAgam9i
LT5zZXRFcnJvcigxKTsKKyAgICAgICAgICAgIHN0YXJ0VGltZXIgPWZhbHNlOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGpvYnMtPmFkZChqb2IpOworICAgIH0KKyAgICBpZiAoc3RhcnRU
aW1lcikKKyAgICAgICAgbV9kb3dubG9hZFRpbWVyLnN0YXJ0T25lU2hvdChwb2xsVGltZVNlY29u
ZHMpOworfQorCit2b2lkIFJlc291cmNlTG9hZGVyTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlTG9h
ZGVyKiBqb2IpCit7CisgICAgcmVtb3ZlKGpvYik7CisgICAgam9iLT5zZXRFcnJvcigxKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyTWFuYWdlci5oCShSZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuaAkoUmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBSZXNvdXJjZUxvYWRlck1hbmFnZXJfSF8KKyNkZWZpbmUg
UmVzb3VyY2VMb2FkZXJNYW5hZ2VyX0hfCisKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDxj
dXJsL2N1cmwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZXNvdXJjZUxvYWRl
ck1hbmFnZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRlck1hbmFnZXIqIGdl
dCgpOworICAgIHZvaWQgYWRkKFJlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBjYW5jZWwoUmVz
b3VyY2VMb2FkZXIqKTsKKworICAgIC8vIElmIHRydWUsIGRvbid0IG11bHRpcGxleCBkb3dubG9h
ZHM6IGRvd25sb2FkIGNvbXBsZXRlbHkgb25lIGF0IGEgdGltZS4KKyAgICB2b2lkIHVzZVNpbXBs
ZVRyYW5zZmVyKGJvb2wgdXNlU2ltcGxlKTsKKworcHJpdmF0ZToKKyAgICBSZXNvdXJjZUxvYWRl
ck1hbmFnZXIoKTsKKyAgICB2b2lkIGRvd25sb2FkVGltZXJDYWxsYmFjayhUaW1lcjxSZXNvdXJj
ZUxvYWRlck1hbmFnZXI+Kik7CisgICAgdm9pZCByZW1vdmUoUmVzb3VyY2VMb2FkZXIqKTsKKwor
ICAgIGJvb2wgbV91c2VTaW1wbGU7CisgICAgSGFzaFNldDxSZXNvdXJjZUxvYWRlcio+KiBqb2Jz
OworICAgIFRpbWVyPFJlc291cmNlTG9hZGVyTWFuYWdlcj4gbV9kb3dubG9hZFRpbWVyOworICAg
IENVUkxNKiBjdXJsTXVsdGlIYW5kbGU7IC8vIG5vdCBmcmVlZAorCisgICAgLy8gY3VybCBmaWxl
aGFuZGxlcyB0byBwb2xsIHdpdGggc2VsZWN0CisgICAgZmRfc2V0IGZkcmVhZDsKKyAgICBmZF9z
ZXQgZmR3cml0ZTsKKyAgICBmZF9zZXQgZmRleGNlcDsKKworICAgIGludCBtYXhmZDsKKyAgICBj
aGFyIGVycm9yX2J1ZmZlcltDVVJMX0VSUk9SX1NJWkVdOworCisgICAgLy8gTlVMTC10ZXJtaW5h
dGVkIGxpc3Qgb2Ygc3VwcG9ydGVkIHByb3RvY29scworICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBj
dXJsX3Byb3RvY29sczsgLy8gbm90IGZyZWVkCit9OworCit9CisKKyNlbmRpZgorCisvLyB2aW06
IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRlckN1
cmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVzb3VyY2VMb2FkZXJD
dXJsLmNwcAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVzb3VyY2VMb2Fk
ZXJDdXJsLmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkZXIuaCIKKworI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZGVySW50ZXJuYWwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRlck1hbmFnZXIuaCIKKworI2Rl
ZmluZSBub3RJbXBsZW1lbnRlZCgpIGRvIHsgZnByaW50ZihzdGRlcnIsICJGSVhNRTogVU5JTVBM
RU1FTlRFRDogJXM6JWRcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0gd2hpbGUoMCkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZXNvdXJjZUxvYWRlckludGVybmFsOjp+UmVzb3VyY2VMb2Fk
ZXJJbnRlcm5hbCgpCit7Cit9CisKK1Jlc291cmNlTG9hZGVyOjp+UmVzb3VyY2VMb2FkZXIoKQor
eworICAgIGNhbmNlbCgpOworfQorCitib29sIFJlc291cmNlTG9hZGVyOjpzdGFydChEb2NMb2Fk
ZXIqIGRvY0xvYWRlcikKK3sKKyAgICBSZXNvdXJjZUxvYWRlck1hbmFnZXI6OmdldCgpLT5hZGQo
dGhpcyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OmNhbmNl
bCgpCit7CisgICAgUmVzb3VyY2VMb2FkZXJNYW5hZ2VyOjpnZXQoKS0+Y2FuY2VsKHRoaXMpOwor
fQorCit2b2lkIFJlc291cmNlTG9hZGVyOjphc3NlbWJsZVJlc3BvbnNlSGVhZGVycygpIGNvbnN0
Cit7CisgICAgaWYgKCFkLT5hc3NlbWJsZWRSZXNwb25zZUhlYWRlcnMpIHsKKyAgICAgICAgZC0+
cmVzcG9uc2VIZWFkZXJzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbVV0ZjgoZC0+cmVzcG9uc2Uu
dG9VdGY4KCksIGQtPnJlc3BvbnNlLmxlbmd0aCgpKTsKKyAgICAgICAgZC0+YXNzZW1ibGVkUmVz
cG9uc2VIZWFkZXJzID0gdHJ1ZTsKKyAKKyAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgY2xpZW50
IGFjdGl2YXRpb24gdG8gcmVjZWl2ZWRSZXNwb25zZSgpLCBvbmNlCisgICAgICAgIC8vIHdlIHVz
ZSBLSU8sIGFuZCByZWNlaXZlZFJlc3BvbnNlKCkgaXMgY2FsbGVkIG9ubHkgb25jZS4KKyAgICAg
ICAgaWYgKGQtPmNsaWVudCkgeworICAgICAgICAgICAgZC0+Y2xpZW50LT5yZWNlaXZlZFJlc3Bv
bnNlKGNvbnN0X2Nhc3Q8UmVzb3VyY2VMb2FkZXIgKj4odGhpcyksIChjaGFyICopIGQtPnJlc3Bv
bnNlLmRhdGEoKSk7CisgICAgICAgIH0KKworICAgICAgICBkLT5yZXNwb25zZSA9IFFTdHJpbmco
KTsgLy8gUmVzZXQKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkZXI6OnJldHJpZXZlQ2hh
cnNldCgpIGNvbnN0Cit7CisgICAgaWYgKCFkLT5yZXRyaWV2ZWRDaGFyc2V0KSB7CisgICAgICAg
IGQtPnJldHJpZXZlZENoYXJzZXQgPSB0cnVlOworICAgIH0KKworICAgIC8vIFRPRE86IFdlIGNh
biBqdXN0IHBhcnNlIHRoZSBoZWFkZXJzIGhlcmUsIGJ1dCBvbmNlIHdlIHVzZSBLSU8KKyAgICAv
LyB3ZSBjYW4gc2V0IHRoZSByZXNwb25zZSBwYXJhbWV0ZXIgdG8gc3RoLiBlbHNlIHRoYW4gYSAi
Y2hhcioiLgorICAgIC8vIEkgc2F2ZSBteSB0aW1lIGJ1dCBub3QgaW1wbGVtZW50aW5nIGl0IGZv
ciBub3cgOi0pCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRl
cjo6cmVjZWl2ZWRSZXNwb25zZShjaGFyKiByZXNwb25zZSkKK3sKKyAgICBRX0FTU0VSVChtZXRo
b2QoKSA9PSAiUE9TVCIpOworCisgICAgZC0+YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzID0gZmFs
c2U7CisgICAgZC0+cmV0cmlldmVkQ2hhcnNldCA9IGZhbHNlOworCisgICAgLy8gVE9ETzogVGhp
cyBpcyBmbGF3ZWQ6CisgICAgLy8gLSB1c3VhbGx5IHJlY2VpdmVkUmVzcG9uc2UoKSBzaG91bGQg
YmUgY2FsbGVkIF9vbmNlXywgd2hlbiB0aGUKKyAgICAvLyAgIHJlc3BvbnNlIGlzIGF2YWlsYWJs
ZSAtIHNlZW1zIHZlcnkgdW5mbGV4aWJsZSB0byBkbyB0aGF0IHdpdGggbGliY3VybAorICAgIC8v
ICAgKHNvIGxldCdzIHdhaXQgdW50aWwgaXQgZGllcyBhbmQgZG8gaXQgcHJvcGVybHkgd2l0aCBL
SU8gdGhlbi4pCisgICAgLy8gLSBRU3RyaW5nOjpmcm9tTGF0aW4xKCkgaXMgYWxzbyB3cm9uZywg
b2YgY291cnNlLgorICAgIC8vCisgICAgLy8gQW55d2F5LCBsZXQncyBjb2xsZWN0IHRoZSByZXNw
b25zZSBkYXRhIGhlcmUsIGFzIHRoZSBSZXNvdXJjZUxvYWRlck1hbmFnZXIKKyAgICAvLyBjYWxs
cyB1cyBmb3IgZXZlcnkgbGluZSBvZiB0aGUgaGVhZGVyIGl0IHJlY2VpdmVzLgorICAgIGQtPnJl
c3BvbnNlICs9IFFTdHJpbmc6OmZyb21MYXRpbjEocmVzcG9uc2UpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKy8vIHZpbTogdHM9NCBzdz00IGV0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10154</attachid>
            <date>2006-08-21 13:26:36 -0700</date>
            <delta_ts>2006-08-23 14:25:18 -0700</delta_ts>
            <desc>Patch chunk: theme/cursor related stuff</desc>
            <filename>platform-qt-misc.diff</filename>
            <type>text/plain</type>
            <size>17483</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMDYtMDgtMjIgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlcyBwYXJ0cyBvZjogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDQ2NworICAgICAgICBXZWJLaXQgc2hvdWxkIGhhdmUgUXQgcGxhdGZvcm0g
c3VwcG9ydAorCisgICAgICAgICogcGxhdGZvcm0vcXQvQ3Vyc29yUXQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkN1cnNvcjo6Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNv
cjo6fkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJzb3I6Om9wZXJhdG9yPSk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJzb3JzOjpDdXJzb3JzOjpzZWxmKToKKyAgICAgICAgKFdlYkNvcmU6
Om1vdmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y3Jvc3NDdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6aGFuZEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjppQmVhbUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjp3YWl0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmhlbHBDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJD
b3JlOjpub3J0aFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aEVhc3RSZXNp
emVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6bm9ydGhXZXN0UmVzaXplQ3Vyc29yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OnNv
dXRoRWFzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpzb3V0aFdlc3RSZXNpemVD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6d2VzdFJlc2l6ZUN1cnNvcik6CisgICAgICAgIChX
ZWJDb3JlOjpub3J0aFNvdXRoUmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OmVhc3RX
ZXN0UmVzaXplQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6Om5vcnRoRWFzdFNvdXRoV2VzdFJl
c2l6ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpub3J0aFdlc3RTb3V0aEVhc3RSZXNpemVD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sdW1uUmVzaXplQ3Vyc29yKToKKyAgICAgICAg
KFdlYkNvcmU6OnJvd1Jlc2l6ZUN1cnNvcik6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6UmVu
ZGVyVGhlbWVRdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0hv
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50Q2hlY2tib3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRSYWRpbyk6CisgICAgICAgIChX
ZWJDb3JlOjp0aGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojppc0NvbnRy
b2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y29udHJvbFN1cHBv
cnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpjcmVhdGVQb3B1cE1lbnUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRkSW50cmluc2ljTWFyZ2lucyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdHlsZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWlu
dEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c2V0Q2hlY2tib3hTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldFJhZGlvU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFwcGx5VGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdDo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdDo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
cGFpbnRUZXh0RmllbGQpOgorCiAyMDA2LTA4LTIxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
bnlwb3AuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMuCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL3F0L0N1cnNvclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0
L0N1cnNvclF0LmNwcAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvQ3Vyc29y
UXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IENoYXJsZXMgU2FtdWVscyA8Y2hhcmxlc0BrZGUub3JnPgorICoKKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDdXJzb3Iu
aCIKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZw
cmludGYoc3RkZXJyLCAiRklYTUU6IFVOSU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVfXywg
X19MSU5FX18pOyB9IHdoaWxlKDApCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3Vyc29yOjpD
dXJzb3IoUGxhdGZvcm1DdXJzb3IgcCkKKyAgICA6IG1faW1wbChwKQoreworfQorCitDdXJzb3I6
OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQorICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkK
K3sKK30KKworQ3Vyc29yOjp+Q3Vyc29yKCkKK3sKK30KKworQ3Vyc29yOjpDdXJzb3IoSW1hZ2Uq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1cnNvciYgQ3Vyc29yOjpvcGVyYXRv
cj0oY29uc3QgQ3Vyc29yJiBvdGhlcikKK3sKKyAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCituYW1lc3BhY2UgeworCisvLyBGSVhNRTogc3RhdGljIGRl
bGV0ZXIKK2NsYXNzIEN1cnNvcnMgeworcHJvdGVjdGVkOgorICAgIEN1cnNvcnMoKQorICAgICAg
ICA6IENyb3NzQ3Vyc29yKFFDdXJzb3IoUXQ6OkNyb3NzQ3Vyc29yKSkKKyAgICAgICAgLCBNb3Zl
Q3Vyc29yKFFDdXJzb3IoUXQ6OlNpemVBbGxDdXJzb3IpKQorICAgICAgICAsIFBvaW50aW5nSGFu
ZEN1cnNvcihRQ3Vyc29yKFF0OjpQb2ludGluZ0hhbmRDdXJzb3IpKQorICAgICAgICAsIElCZWFt
Q3Vyc29yKFFDdXJzb3IoUXQ6OklCZWFtQ3Vyc29yKSkKKyAgICAgICAgLCBXYWl0Q3Vyc29yKFFD
dXJzb3IoUXQ6OldhaXRDdXJzb3IpKQorICAgICAgICAsIFdoYXRzVGhpc0N1cnNvcihRQ3Vyc29y
KFF0OjpXaGF0c1RoaXNDdXJzb3IpKQorICAgICAgICAsIFNpemVIb3JDdXJzb3IoUUN1cnNvcihR
dDo6U2l6ZUhvckN1cnNvcikpCisgICAgICAgICwgU2l6ZVZlckN1cnNvcihRQ3Vyc29yKFF0OjpT
aXplVmVyQ3Vyc29yKSkKKyAgICAgICAgLCBTaXplRkRpYWdDdXJzb3IoUUN1cnNvcihRdDo6U2l6
ZUZEaWFnQ3Vyc29yKSkKKyAgICAgICAgLCBTaXplQkRpYWdDdXJzb3IoUUN1cnNvcihRdDo6U2l6
ZUJEaWFnQ3Vyc29yKSkKKyAgICAgICAgLCBTcGxpdEhDdXJzb3IoUUN1cnNvcihRdDo6U3BsaXRI
Q3Vyc29yKSkKKyAgICAgICAgLCBTcGxpdFZDdXJzb3IoUUN1cnNvcihRdDo6U3BsaXRWQ3Vyc29y
KSkKKyAgICB7CisgICAgfQorCisgICAgfkN1cnNvcnMoKQorICAgIHsKKyAgICB9CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgQ3Vyc29ycyAqc2VsZigpOworICAgIHN0YXRpYyBDdXJzb3JzICpzX3Nl
bGY7CisKKyAgICBDdXJzb3IgQ3Jvc3NDdXJzb3I7CisgICAgQ3Vyc29yIE1vdmVDdXJzb3I7Cisg
ICAgQ3Vyc29yIFBvaW50aW5nSGFuZEN1cnNvcjsKKyAgICBDdXJzb3IgSUJlYW1DdXJzb3I7Cisg
ICAgQ3Vyc29yIFdhaXRDdXJzb3I7CisgICAgQ3Vyc29yIFdoYXRzVGhpc0N1cnNvcjsKKyAgICBD
dXJzb3IgU2l6ZUhvckN1cnNvcjsKKyAgICBDdXJzb3IgU2l6ZVZlckN1cnNvcjsKKyAgICBDdXJz
b3IgU2l6ZUZEaWFnQ3Vyc29yOworICAgIEN1cnNvciBTaXplQkRpYWdDdXJzb3I7CisgICAgQ3Vy
c29yIFNwbGl0SEN1cnNvcjsKKyAgICBDdXJzb3IgU3BsaXRWQ3Vyc29yOworfTsKKworQ3Vyc29y
cyogQ3Vyc29yczo6c19zZWxmID0gMDsKKworQ3Vyc29ycyogQ3Vyc29yczo6c2VsZigpCit7Cisg
ICAgaWYgKCFzX3NlbGYpIHsKKyAgICAgICAgc19zZWxmID0gbmV3IEN1cnNvcnM7CisgICAgfQor
CisgICAgcmV0dXJuIHNfc2VsZjsKK30KKworfQorCitjb25zdCBDdXJzb3ImIG1vdmVDdXJzb3Io
KQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPk1vdmVDdXJzb3I7Cit9CisKK2NvbnN0
IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPkNy
b3NzQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIGhhbmRDdXJzb3IoKQoreworICAgIHJldHVy
biBDdXJzb3JzOjpzZWxmKCktPlBvaW50aW5nSGFuZEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29y
JiBpQmVhbUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+SUJlYW1DdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNv
cnM6OnNlbGYoKS0+V2FpdEN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkK
K3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5XaGF0c1RoaXNDdXJzb3I7Cit9CisKK2Nv
bnN0IEN1cnNvciYgZWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNl
bGYoKS0+U2l6ZUhvckN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFJlc2l6ZUN1cnNv
cigpCit7CisgICAgcmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U2l6ZVZlckN1cnNvcjsKK30KKwor
Y29uc3QgQ3Vyc29yJiBub3J0aEVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJz
b3JzOjpzZWxmKCktPlNpemVCRGlhZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFdl
c3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVGRGlh
Z0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAg
cmV0dXJuIEN1cnNvcnM6OnNlbGYoKS0+U2l6ZVZlckN1cnNvcjsKK30KKworY29uc3QgQ3Vyc29y
JiBzb3V0aEVhc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCkt
PlNpemVGRGlhZ0N1cnNvcjsKK30KKworY29uc3QgQ3Vyc29yJiBzb3V0aFdlc3RSZXNpemVDdXJz
b3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVCRGlhZ0N1cnNvcjsKK30K
KworY29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29y
czo6c2VsZigpLT5TaXplSG9yQ3Vyc29yOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoU291dGhS
ZXNpemVDdXJzb3IoKQoreworICAgIHJldHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVWZXJDdXJz
b3I7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQoreworICAgIHJl
dHVybiBDdXJzb3JzOjpzZWxmKCktPlNpemVIb3JDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYg
bm9ydGhFYXN0U291dGhXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6
c2VsZigpLT5TaXplQkRpYWdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291
dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TaXpl
RkRpYWdDdXJzb3I7Cit9CisKK2NvbnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5TcGxpdEhDdXJzb3I7Cit9CisKK2NvbnN0IEN1
cnNvciYgcm93UmVzaXplQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gQ3Vyc29yczo6c2VsZigpLT5T
cGxpdFZDdXJzb3I7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjgzIEBA
CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqICAg
ICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8UVN0eWxlPgorI2luY2x1ZGUg
PFFXaWRnZXQ+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVN0eWxlT3B0aW9uQnV0
dG9uPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCisjZGVmaW5lIG5vdEltcGxlbWVudGVkKCkg
ZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZFxuIiwgX19G
SUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFJlbmRlclRoZW1lUXQgOiBwdWJsaWMgUmVuZGVyVGhlbWUKK3sKK3B1YmxpYzoKKyAgICBS
ZW5kZXJUaGVtZVF0KCkgOiBSZW5kZXJUaGVtZSgpIHsgfQorCisgICAgLy8gQSBtZXRob2QgYXNr
aW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5n
IHdoZW4gaG92ZXJlZC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5k
ZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCisgICAgeworICAgICAgICByZXR1cm4gcGFpbnRCdXR0b24o
bywgaSwgcik7CisgICAgfQorIAorICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCisgICAgeworICAgICAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHls
ZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhY2tncm91bmRMYXllciYsIGNvbnN0IENvbG9yJikg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJv
cElkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlclBvcHVwTWVu
dSogY3JlYXRlUG9wdXBNZW51KFJlbmRlckFyZW5hKiwgRG9jdW1lbnQqLCBSZW5kZXJNZW51TGlz
dCopOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKyAgICB2b2lkIGNsb3NlKCk7CisKKyAgICBib29sIHN1cHBvcnRzRm9j
dXMoRUFwcGVhcmFuY2UpIGNvbnN0OworCisgICAgYm9vbCBzdHlsZVBhaW50ZXJBbmRXaWRnZXRG
b3JQYWludEluZm8oY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBRU3R5bGUqJiwgUVBh
aW50ZXIqJiwgUVdpZGdldComKSBjb25zdDsKKyAgICBFQXBwZWFyYW5jZSBhcHBseVRoZW1lKFFT
dHlsZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNvbnN0OworfTsKKworUmVuZGVyVGhlbWUqIHRo
ZW1lKCkKK3sKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWVRdCBydDsKKyAgICByZXR1cm4gJnJ0Owor
fQorCitib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBCYWNrZ3JvdW5kTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Cit7CisgICAgaWYgKHN0eWxlLT5hcHBlYXJh
bmNlKCkgPT0gVGV4dEZpZWxkQXBwZWFyYW5jZSB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRl
eHRBcmVhQXBwZWFyYW5jZSkKKyAgICAgICAgcmV0dXJuIHN0eWxlLT5ib3JkZXIoKSAhPSBib3Jk
ZXI7CisKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9y
ZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOworfQorCitib29sIFJlbmRlclRoZW1l
UXQ6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sK
KyAgICBpZiAoIWlzRW5hYmxlZChvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
Q2hlY2tib3hlcyBvbmx5IGhhdmUgdGludCB3aGVuIGNoZWNrZWQuCisgICAgaWYgKG8tPnN0eWxl
KCktPmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveEFwcGVhcmFuY2UpCisgICAgICAgIHJldHVybiBp
c0NoZWNrZWQobyk7CisKKyAgICAvLyBGb3Igbm93IGFzc3VtZSBvdGhlciBjb250cm9scyBoYXZl
IHRpbnQgaWYgZW5hYmxlZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVF0OjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1JlbmRlclBvcHVwTWVu
dSogUmVuZGVyVGhlbWVRdDo6Y3JlYXRlUG9wdXBNZW51KFJlbmRlckFyZW5hKiwgRG9jdW1lbnQq
LCBSZW5kZXJNZW51TGlzdCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjphZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBDdXQgb3V0IHRoZSBpbnRyaW5zaWMgbWFyZ2lu
cyBjb21wbGV0ZWx5IGlmIHdlIGVuZCB1cCB1c2luZyBhIHNtYWxsIGZvbnQgc2l6ZQorICAgIGlm
IChzdHlsZS0+Zm9udFNpemUoKSA8IDExKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbnRy
aW5zaWMgbWFyZ2luIHZhbHVlLgorICAgIGNvbnN0IGludCBtID0gMjsKKworICAgIC8vIEZJWE1F
OiBVc2luZyB3aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4t
d2lkdGgvbWF4LXdpZHRoIGlzIGZsYXdlZC4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQoKS5xdWlyaygp
KQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpbkxlZnQoTGVuZ3RoKG0sIEZpeGVkKSk7CisK
KyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5SaWdodCgpLnF1aXJrKCkpCisgICAgICAgICAgICBz
dHlsZS0+c2V0TWFyZ2luUmlnaHQoTGVuZ3RoKG0sIEZpeGVkKSk7CisgICAgfQorCisgICAgaWYg
KHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpblRv
cCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luVG9wKExlbmd0aChtLCBG
aXhlZCkpOworCisgICAgICAgIGlmIChzdHlsZS0+bWFyZ2luQm90dG9tKCkucXVpcmsoKSkKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5Cb3R0b20oTGVuZ3RoKG0sIEZpeGVkKSk7CisgICAg
fQorfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnN0eWxlUGFpbnRlckFuZFdpZGdldEZvclBhaW50
SW5mbyhjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgUVN0eWxlKiYgc3R5bGUsIFFQ
YWludGVyKiYgcGFpbnRlciwgUVdpZGdldComIHdpZGdldCkgY29uc3QKK3sKKyAgICBwYWludGVy
ID0gKGkucCA/IHN0YXRpY19jYXN0PFFQYWludGVyKj4oaS5wLT5wbGF0Zm9ybUNvbnRleHQoKSkg
OiAwKTsKKyAgICB3aWRnZXQgPSAocGFpbnRlciA/IHN0YXRpY19jYXN0PFFXaWRnZXQqPihwYWlu
dGVyLT5kZXZpY2UoKSkgOiAwKTsKKyAgICBzdHlsZSA9ICh3aWRnZXQgPyB3aWRnZXQtPnN0eWxl
KCkgOiAwKTsKKworICAgIHJldHVybiAocGFpbnRlciAmJiB3aWRnZXQgJiYgc3R5bGUpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lUXQ6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lm
aWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgp
LmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1
c2VkLiAgVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuICBJdCBtYXRjaGVzIEZp
cmVmb3guCisgICAgLy8gQXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLCBxdWVy
eWluZyB0aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IK
KyAgICAvLyB0aGUgaGlnaGVyIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBh
IERQSSBzZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlIGNhbid0IHJlbHkgb24gdGhlIHRoZW1lJ3MK
KyAgICAvLyBtZXRyaWNzLgorICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKDEzLCBGaXhlZCkpOworCisgICAg
aWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoMTMsIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0UmFkaW9TaXpl
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFz
IGNoZWNrYm94ZXMuCisgICAgc2V0Q2hlY2tib3hTaXplKHN0eWxlKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKEVBcHBlYXJhbmNlIGFwcGVhcmFuY2UpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvbkFwcGVh
cmFuY2U6CisgICAgICAgIGNhc2UgQnV0dG9uQXBwZWFyYW5jZToKKyAgICAgICAgY2FzZSBUZXh0
RmllbGRBcHBlYXJhbmNlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6IC8vIE5vIGZvciBhbGwgb3RoZXJzLi4uCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitFQXBwZWFyYW5jZSBSZW5kZXJUaGVtZVF0OjphcHBseVRoZW1lKFFTdHlsZU9w
dGlvbiYgb3B0aW9uLCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgLy8gRGVmYXVsdCBi
aXRzOiBubyBmb2N1cywgbm8gbW91c2Ugb3ZlcgorICAgIG9wdGlvbi5zdGF0ZSAmPSB+KFFTdHls
ZTo6U3RhdGVfSGFzRm9jdXMgfCBRU3R5bGU6OlN0YXRlX01vdXNlT3Zlcik7CisKKyAgICBpZiAo
IWlzRW5hYmxlZChvKSkKKyAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0Vu
YWJsZWQ7CisKKyAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykpCisgICAgICAgIG9wdGlvbi5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1JlYWRPbmx5OyAvLyBSZWFkb25seSBpcyBzdXBwb3J0ZWQg
b24gdGV4dGZpZWxkcy4KKworICAgIGlmIChzdXBwb3J0c0ZvY3VzKG8tPnN0eWxlKCktPmFwcGVh
cmFuY2UoKSkgJiYgaXNGb2N1c2VkKG8pKQorICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxl
OjpTdGF0ZV9IYXNGb2N1czsKKworICAgIGlmIChpc0hvdmVyZWQobykpCisgICAgICAgIG9wdGlv
bi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01vdXNlT3ZlcjsKKworICAgIGlmIChpc1ByZXNzZWQo
bykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKworICAg
IEVBcHBlYXJhbmNlIHJlc3VsdCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBpZihy
ZXN1bHQgPT0gUmFkaW9BcHBlYXJhbmNlIHx8IHJlc3VsdCA9PSBDaGVja2JveEFwcGVhcmFuY2Up
CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxlOjpTdGF0ZV9P
biA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVRdDo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBhZGRJbnRy
aW5zaWNNYXJnaW5zKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQoreworICAgIFFTdHlsZSogc3R5bGUgPSAwOworICAgIFFQYWludGVyKiBw
YWludGVyID0gMDsKKyAgICBRV2lkZ2V0KiB3aWRnZXQgPSAwOworICAgIAorICAgIGlmICghc3R5
bGVQYWludGVyQW5kV2lkZ2V0Rm9yUGFpbnRJbmZvKGksIHN0eWxlLCBwYWludGVyLCB3aWRnZXQp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0
aW9uOworICAgIG9wdGlvbi5pbml0RnJvbSh3aWRnZXQpOworICAgIG9wdGlvbi5yZWN0ID0gcjsK
KworICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIGJ1dHRvbgorICAgIEVB
cHBlYXJhbmNlIGFwcGVhcmFuY2UgPSBhcHBseVRoZW1lKG9wdGlvbiwgbyk7CisgIAorICAgIGlm
KGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvbkFwcGVhcmFuY2UgfHwgYXBwZWFyYW5jZSA9PSBCdXR0
b25BcHBlYXJhbmNlKQorICAgICAgICBzdHlsZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNo
QnV0dG9uLCAmb3B0aW9uLCBwYWludGVyKTsKKyAgICBlbHNlIGlmKGFwcGVhcmFuY2UgPT0gUmFk
aW9BcHBlYXJhbmNlKQorICAgICAgICBzdHlsZS0+ZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9SYWRp
b0J1dHRvbiwgJm9wdGlvbiwgcGFpbnRlcik7CisgICAgZWxzZSBpZihhcHBlYXJhbmNlID09IENo
ZWNrYm94QXBwZWFyYW5jZSkKKyAgICAgICAgc3R5bGUtPmRyYXdDb250cm9sKFFTdHlsZTo6Q0Vf
Q2hlY2tCb3gsICZvcHRpb24sIHBhaW50ZXIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIGFkZEludHJpbnNp
Y01hcmdpbnMoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50VGV4dEZpZWxk
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgUVN0eWxlKiBzdHlsZSA9IDA7CisgICAgUVBhaW50ZXIqIHBh
aW50ZXIgPSAwOworICAgIFFXaWRnZXQqIHdpZGdldCA9IDA7CisgICAgCisgICAgaWYgKCFzdHls
ZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWludEluZm8oaSwgc3R5bGUsIHBhaW50ZXIsIHdpZGdldCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAKKyAgICBRU3R5bGVPcHRpb24gb3B0aW9uOworCisg
ICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgYnV0dG9uCisgICAgRUFwcGVh
cmFuY2UgYXBwZWFyYW5jZSA9IGFwcGx5VGhlbWUob3B0aW9uLCBvKTsKKyAgICBRX0FTU0VSVChh
cHBlYXJhbmNlID09IFRleHRGaWVsZEFwcGVhcmFuY2UpOworCisgICAgLy8gTm93IHBhaW50IHRo
ZSB0ZXh0IGZpZWxkLgorICAgIC8vIFRPRE86IHRoaXMgaXMgbm90IGVub3VnaCBmb3Igc3VyZSEg
KHVzZSAnb3B0aW9uJy4uLikKKyAgICBwYWludGVyLT5kcmF3UmVjdChyKTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10155</attachid>
            <date>2006-08-21 13:47:17 -0700</date>
            <delta_ts>2006-08-24 09:58:23 -0700</delta_ts>
            <desc>Patch chunk: canvas/frame related stuff</desc>
            <filename>platform-qt-canvas.diff</filename>
            <type>text/plain</type>
            <size>33295</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsOTYgQEAKKzIwMDYtMDgtMjIgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlcyBwYXJ0cyBvZjogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDQ2NworICAgICAgICBXZWJLaXQgc2hvdWxkIGhhdmUgUXQgcGxhdGZvcm0g
c3VwcG9ydAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogcGxhdGZvcm0v
cXQvRnJhbWVRdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZG9TY3JvbGwpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojppc0ZyYW1lVmlldyk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVF0OjpGcmFtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmluaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6fkZyYW1lUXQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVRdDo6b3BlblVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpzdWJtaXRGb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnVybFNlbGVjdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lUXQ6OnVzZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojpy
dW5KYXZhU2NyaXB0QWxlcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cnVuSmF2YVNj
cmlwdENvbmZpcm0pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6bG9jYXRpb25iYXJWaXNp
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnNldFRpdGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lUXQ6OmNyZWF0ZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6
OnBhc3NXaGVlbEV2ZW50VG9DaGlsZFdpZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0
OjpwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVR
dDo6b2JqZWN0Q29udGVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Y3JlYXRl
UGx1Z2luKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnBhc3NNb3VzZURvd25FdmVudFRv
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om1lbnViYXJWaXNpYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnBlcnNvbmFsYmFyVmlzaWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVF0OjpzdGF0dXNiYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lUXQ6OnRvb2xiYXJWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmNyZWF0
ZUVtcHR5RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6bWFya2VkVGV4dFJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OmluY29taW5nUmVmZXJyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6bWltZVR5cGVGb3JGaWxlTmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVF0OjptYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om1hcmtNaXNzcGVsbGluZ3MpOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVRdDo6bGFzdEV2ZW50SXNNb3VzZVVwKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
UXQ6OnNhdmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnJlc3Rv
cmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Om9wZW5VUkxSZXF1
ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnNjaGVkdWxlQ2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6dW5mb2N1c1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVF0Ojpmb2N1c1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpvdmVycmlk
ZU1lZGlhVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjphZGRNZXNzYWdlVG9Db25z
b2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6Z2V0RW1iZWRJbnN0YW5jZUZvcldpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpnZXRPYmplY3RJbnN0YW5jZUZvcldpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpnZXRBcHBsZXRJbnN0YW5jZUZvcldpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZWdpc3RlckNvbW1hbmRGb3JVbmRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVRdDo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVRdDo6aXNzdWVVbmRvQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVF0Ojppc3N1ZVJlZG9Db21tYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omlzc3Vl
Q3V0Q29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojppc3N1ZUNvcHlDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omlzc3VlUGFzdGVDb21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lUXQ6Omlzc3VlUGFzdGVBbmRNYXRjaFN0eWxlQ29tbWFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVF0Ojppc3N1ZVRyYW5zcG9zZUNvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVRdDo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpGcmFtZVF0OjpyZXNwb25kVG9DaGFuZ2VkQ29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVRdDo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lUXQ6OnBhcnRDbGVhcmVkSW5CZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVF0OjpjYW5Hb0JhY2tPckZvcndhcmQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6aGFu
ZGxlZE9ubG9hZEV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjYW5QYXN0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpjYW5SZWRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lUXQ6OmNhblVuZG8pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6cHJpbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjprZXlFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVF0OjpyZWNlaXZlZFJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnJl
Y2VpdmVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpyZWNlaXZlZEFsbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6c2V0RnJhbWVHZW9tZXRyeSk6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvRnJhbWVRdC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldpbik6
CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xsVmlld0NhbnZhc1F0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzUXQ6OlNjcm9sbFZpZXdDYW52YXNRdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzUXQ6OnBhaW50RXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc1F0OjpzaXplSGludCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxWaWV3Q2FudmFzUXQ6Om1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXdDYW52YXNRdDo6bW91c2VQcmVzc0V2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXdDYW52YXNRdDo6bW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsVmlld0NhbnZhc1F0OjprZXlQcmVzc0V2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXdDYW52YXNRdDo6a2V5UmVsZWFzZUV2ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXdDYW52YXNRdDo6aGFuZGxlS2V5RXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL3F0L1Njcm9sbFZpZXdDYW52YXNRdC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9TY3JvbGxWaWV3UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0
UGFyZW50V2lkZ2V0KToKKwogMjAwNi0wOC0yMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQG55
cG9wLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljLgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9GcmFtZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0Zy
YW1lUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9GcmFtZVF0LmNw
cAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
WmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBT
dGFpa29zIDxzdGFpa29zQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1
c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGcmFtZVF0LmgiCisjaW5jbHVkZSAiRWxl
bWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcldpZGdl
dC5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJET01X
aW5kb3cuaCIKKyNpbmNsdWRlICJET01JbXBsZW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkJyb3dz
ZXJFeHRlbnNpb25RdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJQbHVnaW4uaCIKKyNpbmNsdWRlICJGcmFtZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIK
KyNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiVHlwaW5nQ29tbWFu
ZC5oIgorCisjaW5jbHVkZSA8UVNjcm9sbEFyZWE+CisjaW5jbHVkZSA8UU1lc3NhZ2VCb3g+CisK
KyNkZWZpbmUgbm90SW1wbGVtZW50ZWQoKSBkbyB7IGZwcmludGYoc3RkZXJyLCAiRklYTUU6IFVO
SU1QTEVNRU5URUQ6ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IHdoaWxlKDApCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgZG9TY3JvbGwoY29uc3QgUmVuZGVy
T2JqZWN0KiByLCBib29sIGlzSG9yaXpvbnRhbCwgaW50IG11bHRpcGxpZXIpCit7CisgICAgLy8g
RklYTUU6IFRoZSBzY3JvbGxpbmcgZG9uZSBoZXJlIHNob3VsZCBiZSBkb25lIGluIHRoZSBkZWZh
dWx0IGhhbmRsZXJzCisgICAgLy8gb2YgdGhlIGVsZW1lbnRzIHJhdGhlciB0aGFuIGhlcmUgaW4g
dGhlIHBhcnQuCisgICAgaWYoIXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vYnJva2VuIHNp
bmNlIGl0IGNhbGxzIHNjcm9sbCBvbiBzY3JvbGxiYXJzCisgICAgLy9hbmQgd2UgaGF2ZSBub25l
IG5vdworICAgIC8vci0+c2Nyb2xsKGRpcmVjdGlvbiwgS1dRU2Nyb2xsV2hlZWwsIG11bHRpcGxp
ZXIpOworICAgIGlmKCFyLT5sYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeCA9
IHItPmxheWVyKCktPnNjcm9sbFhPZmZzZXQoKTsKKyAgICBpbnQgeSA9IHItPmxheWVyKCktPnNj
cm9sbFlPZmZzZXQoKTsKKyAgICBpZihpc0hvcml6b250YWwpCisgICAgICAgIHggKz0gbXVsdGlw
bGllcjsKKyAgICBlbHNlCisgICAgICAgIHkgKz0gbXVsdGlwbGllcjsKKworICAgIHItPmxheWVy
KCktPnNjcm9sbFRvT2Zmc2V0KHgsIHksIHRydWUsIHRydWUpOworfQorCitib29sIEZyYW1lVmll
dzo6aXNGcmFtZVZpZXcoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitGcmFtZVF0
OjpGcmFtZVF0KCkKKyAgICA6IEZyYW1lKG5ldyBQYWdlLCAwKQoreworICAgIHFEZWJ1ZygiRnJh
bWVRdDo6RnJhbWVRdCIpOworICAgIGluaXQoKTsKKworICAgIHBhZ2UoKS0+c2V0TWFpbkZyYW1l
KHRoaXMpOworICAgIEZyYW1lVmlldyogdmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7CisgICAg
c2V0Vmlldyh2aWV3KTsKKworICAgIHZpZXctPnNldFBhcmVudFdpZGdldCgwKTsKK30KKworRnJh
bWVRdDo6RnJhbWVRdChRV2lkZ2V0KiBwYXJlbnQpCisgICAgIDogRnJhbWUobmV3IFBhZ2UsIDAp
Cit7CisgICAgaW5pdCgpOworICAgIHBhZ2UoKS0+c2V0TWFpbkZyYW1lKHRoaXMpOworICAgIEZy
YW1lVmlldyogdmlldyA9IG5ldyBGcmFtZVZpZXcodGhpcyk7CisgICAgc2V0Vmlldyh2aWV3KTsK
KworICAgIHZpZXctPnNldFBhcmVudFdpZGdldChwYXJlbnQpOworfQorCit2b2lkIEZyYW1lUXQ6
OmluaXQoKQoreworICAgIGQtPm1fZXh0ZW5zaW9uID0gbmV3IEJyb3dzZXJFeHRlbnNpb25RdCh0
aGlzKTsKKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBuZXcgU2V0dGluZ3M7CisgICAgc2V0dGlu
Z3MtPnNldEF1dG9Mb2FkSW1hZ2VzKHRydWUpOworICAgIHNldHRpbmdzLT5zZXRNaW5Gb250U2l6
ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0TWluTG9naWNhbEZvbnRTaXplKDUpOworICAgIHNldHRp
bmdzLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKHRydWUpOworICAgIHNldHRpbmdzLT5zZXRJ
c0phdmFTY3JpcHRFbmFibGVkKHRydWUpOworIAorICAgIHNldHRpbmdzLT5zZXRNZWRpdW1GaXhl
ZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0TWVkaXVtRm9udFNpemUoMTQpOworICAg
IHNldHRpbmdzLT5zZXRTZXJpZkZvbnROYW1lKCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0
aW5ncy0+c2V0U2Fuc1NlcmlmRm9udE5hbWUoIkFyaWFsIik7CisgICAgc2V0dGluZ3MtPnNldEZp
eGVkRm9udE5hbWUoIkNvdXJpZXIiKTsKKyAgICBzZXR0aW5ncy0+c2V0U3RkRm9udE5hbWUoIkFy
aWFsIik7CisgICAgc2V0U2V0dGluZ3Moc2V0dGluZ3MpOworfQorCitGcmFtZVF0Ojp+RnJhbWVR
dCgpCit7CisgICAgY2xvc2VVUkwoKTsgLy8gaGFjayB0byBhdm9pZCBjcmFzaC4gIG11c3QgZml4
IGluIHdlYmtpdCAoRnJhbWUpLiAgRklYTUUKK30KKworYm9vbCBGcmFtZVF0OjpvcGVuVVJMKGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICBxRGVidWcoIm9wZW5VUkwoJXMpIiwgdXJsLnVybCgpLmxh
dGluMSgpKTsKKyAgICBkaWRPcGVuVVJMKHVybCk7CisgICAgCisgICAgUmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KCkpOworICAgIHJlcXVlc3QubV9yZXNwb25zZU1JTUVU
eXBlID0gImltYWdlL3N2Zyt4bWwiOworICAgIHNldFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsK
KworICAgIGJlZ2luKHVybCk7CisgICAgUmVzb3VyY2VMb2FkZXIqIGpvYiA9IG5ldyBSZXNvdXJj
ZUxvYWRlcih0aGlzLCAiR0VUIiwgdXJsKTsKKyAgICBqb2ItPnN0YXJ0KGRvY3VtZW50KCktPmRv
Y0xvYWRlcigpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBGcmFtZVF0OjpzdWJtaXRG
b3JtKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBxRGVidWcoIkZyYW1l
UXQ6OnN1Ym1pdEZvcm0oKSIpOworCisgICAgLy8gRklYTUU6IHRoaXMgaXMgYSBoYWNrIGluaGVy
aXRlZCBmcm9tIEZyYW1lTWFjLCBhbmQgc2hvdWxkIGJlIHB1c2hlZCBpbnRvIEZyYW1lCisgICAg
aWYoZC0+bV9zdWJtaXR0ZWRGb3JtVVJMID09IHJlcXVlc3QudXJsKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGQtPm1fc3VibWl0dGVkRm9ybVVSTCA9IHJlcXVlc3QudXJsKCk7CisKKyAgICAv
KiBUT0RPOiBPbmNlIHdlIGhhdmUgYSBLUGFydCAtIG5hbWVkICJGcmFtZVBhcnRRdCIgLSB3ZSBj
YW4gbGV0IHRoYXQgaW5oZXJpdCBmcm9tIEZyYW1lUXRDbGllbnQgYW5kIGltcGxlbWVudCB0aGUg
ZnVuY3Rpb25zLi4uKQorICAgIGlmKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c3VibWl0
Rm9ybShyZXF1ZXN0LmRvUG9zdCgpID8gIlBPU1QiIDogIkdFVCIsIHJlcXVlc3QudXJsKCksICZy
ZXF1ZXN0LnBvc3REYXRhKTsKKyAgICAqLworCisgICAgYmVnaW4ocmVxdWVzdC51cmwoKSk7CisK
KyAgICBSZXNvdXJjZUxvYWRlciogam9iID0gbmV3IFJlc291cmNlTG9hZGVyKHRoaXMsIHJlcXVl
c3QuZG9Qb3N0KCkgPyAiUE9TVCIgOiAiR0VUIiwgcmVxdWVzdC51cmwoKSwgcmVxdWVzdC5wb3N0
RGF0YSk7CisgICAgam9iLT5zdGFydChkb2N1bWVudCgpLT5kb2NMb2FkZXIoKSk7CisgICAgCisg
ICAgY2xlYXJSZWNvcmRlZEZvcm1WYWx1ZXMoKTsKK30KKwordm9pZCBGcmFtZVF0Ojp1cmxTZWxl
Y3RlZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgLy9uZWVkIHRvIHBv
dGVudGlhbGx5IHVwZGF0ZUxvY2F0aW9uQmFyKHN0ci5hc2NpaSgpKTsgb3Igbm90aWZ5IHN5cyBv
ZiBuZXcgdXJsIG15YmUgZXZlbnQgb3IgY2FsbGJhY2sKKyAgICBjb25zdCBLVVJMIHVybCA9IHJl
cXVlc3QudXJsKCk7CisgICAgcHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0+IExPQURJTkcgTkVX
IFVSTCAlcyBcbiIsIHVybC51cmwoKS5hc2NpaSgpKTsKKyAgICBkaWRPcGVuVVJMKHVybCk7Cisg
ICAgYmVnaW4odXJsKTsKKyAgICBSZXNvdXJjZUxvYWRlciogam9iID0gbmV3IFJlc291cmNlTG9h
ZGVyKHRoaXMsICJHRVQiLCB1cmwpOworICAgIGpvYi0+c3RhcnQoZG9jdW1lbnQoKS0+ZG9jTG9h
ZGVyKCkpOworfQorCitTdHJpbmcgRnJhbWVRdDo6dXNlckFnZW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gIk1vemlsbGEvNS4wIChQQzsgVTsgSW50ZWw7IExpbnV4OyBlbikgQXBwbGVXZWJLaXQv
NDIwKyAoS0hUTUwsIGxpa2UgR2Vja28pIjsKK30KKwordm9pZCBGcmFtZVF0OjpydW5KYXZhU2Ny
aXB0QWxlcnQoU3RyaW5nIGNvbnN0JiBtZXNzYWdlKQoreworICAgIFFNZXNzYWdlQm94OjppbmZv
cm1hdGlvbih2aWV3KCktPnF3aWRnZXQoKSwgIkphdmFTY3JpcHQiLCBtZXNzYWdlKTsKK30KKwor
Ym9vbCBGcmFtZVF0OjpydW5KYXZhU2NyaXB0Q29uZmlybShTdHJpbmcgY29uc3QmIG1lc3NhZ2Up
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBG
cmFtZVF0Ojpsb2NhdGlvbmJhclZpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRnJhbWVRdDo6c2V0VGl0bGUoY29uc3QgU3RyaW5n
JiB0aXRsZSkKK3sKKyAgICBpZih2aWV3KCkgJiYgdmlldygpLT5wYXJlbnRXaWRnZXQoKSkKKyAg
ICAgICAgdmlldygpLT5wYXJlbnRXaWRnZXQoKS0+c2V0V2luZG93VGl0bGUodGl0bGUpOworfQor
CitGcmFtZSogRnJhbWVRdDo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
bmFtZSwgRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBGcmFtZVF0OjpwYXNzV2hlZWxFdmVu
dFRvQ2hpbGRXaWRnZXQoTm9kZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVRdDo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1l
KE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqKQoreworICAgIGlmKG1l
di50YXJnZXROb2RlKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitPYmplY3RDb250ZW50VHlwZSBGcmFtZVF0OjpvYmplY3RDb250ZW50VHlw
ZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBPYmplY3RDb250ZW50VHlwZSgpOworfQorCitQbHVnaW4qIEZy
YW1lUXQ6OmNyZWF0ZVBsdWdpbihFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgRnJhbWVRdDo6cGFzc01v
dXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGcmFtZVF0OjptZW51YmFyVmlzaWJsZSgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmFt
ZVF0OjpwZXJzb25hbGJhclZpc2libGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRnJhbWVRdDo6c3RhdHVzYmFyVmlzaWJsZSgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmFtZVF0
Ojp0b29sYmFyVmlzaWJsZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBGcmFtZVF0OjpjcmVhdGVFbXB0eURvY3VtZW50KCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitSYW5nZSogRnJhbWVRdDo6bWFya2VkVGV4dFJhbmdlKCkg
Y29uc3QKK3sKKyAgICAvLyBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitT
dHJpbmcgRnJhbWVRdDo6aW5jb21pbmdSZWZlcnJlcigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBGcmFtZVF0OjptaW1l
VHlwZUZvckZpbGVOYW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6bWFya01pc3Nw
ZWxsaW5nc0luQWRqYWNlbnRXb3Jkcyhjb25zdCBWaXNpYmxlUG9zaXRpb24mKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6bWFya01pc3NwZWxsaW5ncyhjb25z
dCBTZWxlY3Rpb25Db250cm9sbGVyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiti
b29sIEZyYW1lUXQ6Omxhc3RFdmVudElzTW91c2VVcCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVRdDo6c2F2ZURvY3Vt
ZW50U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6
cmVzdG9yZURvY3VtZW50U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRnJhbWVRdDo6b3BlblVSTFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6OnNjaGVkdWxlQ2xvc2UoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6dW5mb2N1c1dpbmRv
dygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojpmb2N1c1dp
bmRvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEZyYW1lUXQ6Om92
ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Zv
aWQgRnJhbWVRdDo6YWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworYm9vbCBGcmFtZVF0OjpydW5KYXZhU2NyaXB0UHJvbXB0KGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUsIFN0cmluZyYgcmVz
dWx0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitL
SlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogRnJhbWVRdDo6Z2V0RW1iZWRJbnN0YW5jZUZvcldpZGdl
dChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZVF0OjpnZXRPYmplY3RJbnN0YW5jZUZvcldp
ZGdldChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK0tKUzo6QmluZGluZ3M6Okluc3RhbmNlKiBGcmFtZVF0OjpnZXRBcHBsZXRJbnN0YW5jZUZv
cldpZGdldChXaWRnZXQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgRnJhbWVRdDo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjb25zdCBFZGl0Q29t
bWFuZFB0ciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojpy
ZWdpc3RlckNvbW1hbmRGb3JSZWRvKGNvbnN0IEVkaXRDb21tYW5kUHRyJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25z
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lUXQ6Omlzc3VlVW5k
b0NvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6
aXNzdWVSZWRvQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBG
cmFtZVF0Ojppc3N1ZUN1dENvbW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgRnJhbWVRdDo6aXNzdWVDb3B5Q29tbWFuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBGcmFtZVF0Ojppc3N1ZVBhc3RlQ29tbWFuZCgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZVF0Ojppc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNv
bW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6aXNz
dWVUcmFuc3Bvc2VDb21tYW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEZyYW1lUXQ6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJv
bGxlciYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lUXQ6OnNob3VsZENoYW5nZVNl
bGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFNl
bGVjdGlvbkNvbnRyb2xsZXImIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5IGFmZmluaXR5LCBib29s
IHN0aWxsU2VsZWN0aW5nKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cGFydENsZWFyZWRJbkJlZ2luKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEZyYW1lUXQ6OmNhbkdvQmFja09yRm9yd2Fy
ZChpbnQgZGlzdGFuY2UpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVRdDo6aGFuZGxlZE9ubG9hZEV2ZW50cygpCit7Cisg
ICAgLy8gbm8tb3AKK30KKworYm9vbCBGcmFtZVF0OjpjYW5QYXN0ZSgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVRdDo6
Y2FuUmVkbygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgRnJhbWVRdDo6Y2FuVW5kbygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cHJpbnQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgRnJhbWVRdDo6c2hvdWxkSW50ZXJy
dXB0SmF2YVNjcmlwdCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgRnJhbWVRdDo6a2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2
ZW50JiBrZXlFdmVudCkKK3sKKyAgICBib29sIHJlc3VsdDsKKworICAgIC8vIENoZWNrIGZvciBj
YXNlcyB3aGVyZSB3ZSBhcmUgdG9vIGVhcmx5IGZvciBldmVudHMgLS0gcG9zc2libGUgdW5tYXRj
aGVkIGtleSB1cAorICAgIC8vIGZyb20gcHJlc3NpbmcgcmV0dXJuIGluIHRoZSBsb2NhdGlvbiBi
YXIuCisgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3VtZW50KCk7CisgICAgaWYoIWRvYykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSAqbm9kZSA9IGRvYy0+Zm9jdXNOb2RlKCk7Cisg
ICAgaWYoIW5vZGUpIHsKKyAgICAgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAg
ICAgICAgIG5vZGUgPSBkb2MtPmJvZHkoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbm9k
ZSA9IGRvYy0+ZG9jdW1lbnRFbGVtZW50KCk7CisKKyAgICAgICAgaWYoIW5vZGUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYoIWtleUV2ZW50LmlzS2V5VXAoKSkK
KyAgICAgICAgcHJlcGFyZUZvclVzZXJBY3Rpb24oKTsKKworICAgIHJlc3VsdCA9ICFFdmVudFRh
cmdldE5vZGVDYXN0KG5vZGUpLT5kaXNwYXRjaEtleUV2ZW50KGtleUV2ZW50KTsKKworICAgIC8v
IEZJWE1FOiBGcmFtZU1hYyBoYXMgYSBrZXlEb3duL2tleVByZXNzIGhhY2sgaGVyZSB3aGljaCB3
ZSBhcmUgbm90IGNvcHlpbmcuCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBGcmFtZVF0
OjpyZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1SZXNwb25zZSkKK3sK
KyAgICAvLyBuby1vcAorfQorCit2b2lkIEZyYW1lUXQ6OnJlY2VpdmVkRGF0YShSZXNvdXJjZUxv
YWRlciogam9iLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoreworICAgIHdyaXRlKGRh
dGEsIGxlbmd0aCk7Cit9CisKK3ZvaWQgRnJhbWVRdDo6cmVjZWl2ZWRBbGxEYXRhKFJlc291cmNl
TG9hZGVyKiBqb2IsIFBsYXRmb3JtRGF0YSBkYXRhKQoreworICAgIGVuZCgpOworfQorCit2b2lk
IEZyYW1lUXQ6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBzZXRG
cmFtZUdlb21ldHJ5KChRUmVjdCkgcik7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvRnJhbWVRdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vcXQvRnJhbWVRdC5oCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9GcmFtZVF0LmgJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiAKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFtZVF0X0hfCisjZGVmaW5lIEZyYW1lUXRfSF8KKwor
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKwor
Y2xhc3MgUVdpZGdldDsKK2NsYXNzIFFQYWludEV2ZW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZyYW1lUXRDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkZyYW1lUXRD
bGllbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBvcGVuVVJMKGNvbnN0IERlcHJlY2F0ZWRTdHJp
bmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRo
b2QsIGNvbnN0IEtVUkwmLCBjb25zdCBGb3JtRGF0YSopID0gMDsKK307CisKK2NsYXNzIEZyYW1l
UXQgOiBwdWJsaWMgRnJhbWUsIHB1YmxpYyBSZXNvdXJjZUxvYWRlckNsaWVudCB7CitwdWJsaWM6
CisgICAgRnJhbWVRdChRV2lkZ2V0KiBwYXJlbnQpOworICAgIEZyYW1lUXQoKTsKKyAgICB+RnJh
bWVRdCgpOworCisgICAgdmlydHVhbCBib29sIG9wZW5VUkwoY29uc3QgS1VSTCYpOworICAgIHZp
cnR1YWwgdm9pZCBvcGVuVVJMUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3VibWl0Rm9ybShjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdXJsU2VsZWN0ZWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJik7CisKKyAgICB2aXJ0dWFsIE9iamVjdENv
bnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKTsKKyAgICB2aXJ0dWFsIFBsdWdpbiogY3JlYXRlUGx1Z2luKEVsZW1lbnQqLCBjb25z
dCBLVVJMJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNv
bnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgRnJhbWUqIGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyKTsK
KyAKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDbG9zZSgpOworCisgICAgdmlydHVhbCB2b2lk
IHVuZm9jdXNXaW5kb3coKTsKKworICAgIHZpcnR1YWwgdm9pZCBmb2N1c1dpbmRvdygpOworCisg
ICAgdmlydHVhbCB2b2lkIHNhdmVEb2N1bWVudFN0YXRlKCk7CisgICAgdmlydHVhbCB2b2lkIHJl
c3RvcmVEb2N1bWVudFN0YXRlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29u
c29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlSUQpOworCisgICAgdmlydHVhbCB2b2lkIHJ1bkphdmFTY3JpcHRBbGVydChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0Q29u
ZmlybShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2Ny
aXB0UHJvbXB0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFs
dWUsIFN0cmluZyYgcmVzdWx0KTsKKyAgICB2aXJ0dWFsIGJvb2wgbG9jYXRpb25iYXJWaXNpYmxl
KCk7CisgICAgdmlydHVhbCBib29sIG1lbnViYXJWaXNpYmxlKCk7CisgICAgdmlydHVhbCBib29s
IHBlcnNvbmFsYmFyVmlzaWJsZSgpOworICAgIHZpcnR1YWwgYm9vbCBzdGF0dXNiYXJWaXNpYmxl
KCk7CisgICAgdmlydHVhbCBib29sIHRvb2xiYXJWaXNpYmxlKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlRW1wdHlEb2N1bWVudCgpOworICAgIHZpcnR1YWwgUmFuZ2UqIG1hcmtlZFRleHRS
YW5nZSgpIGNvbnN0OworCisgICAgdmlydHVhbCBTdHJpbmcgaW5jb21pbmdSZWZlcnJlcigpIGNv
bnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudCgpIGNvbnN0OworCisgICAgdmlydHVh
bCBTdHJpbmcgbWltZVR5cGVGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBtYXJrTWlzc3BlbGxpbmdzSW5BZGphY2VudFdvcmRzKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFNl
bGVjdGlvbkNvbnRyb2xsZXImKTsKKworICAgIHZpcnR1YWwgYm9vbCBsYXN0RXZlbnRJc01vdXNl
VXAoKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJh
bWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIEZyYW1lKiBzdWJmcmFtZSA9IDApOwor
ICAgIHZpcnR1YWwgYm9vbCBwYXNzV2hlZWxFdmVudFRvQ2hpbGRXaWRnZXQoTm9kZSopOworCisg
ICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdDsKKworICAgIHZpcnR1
YWwgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UqIGdldEVtYmVkSW5zdGFuY2VGb3JXaWRnZXQoV2lk
Z2V0Kik7CisgICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSogZ2V0T2JqZWN0SW5z
dGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7CisgICAgdmlydHVhbCBLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSogZ2V0QXBwbGV0SW5zdGFuY2VGb3JXaWRnZXQoV2lkZ2V0Kik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJDb21tYW5kRm9yVW5kbyhjb25zdCBFZGl0Q29tbWFuZFB0ciYpOworICAg
IHZpcnR1YWwgdm9pZCByZWdpc3RlckNvbW1hbmRGb3JSZWRvKGNvbnN0IEVkaXRDb21tYW5kUHRy
Jik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKCk7CisgICAgdmly
dHVhbCB2b2lkIGlzc3VlVW5kb0NvbW1hbmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaXNzdWVSZWRv
Q29tbWFuZCgpOworICAgIHZpcnR1YWwgdm9pZCBpc3N1ZUN1dENvbW1hbmQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaXNzdWVDb3B5Q29tbWFuZCgpOworICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBhc3Rl
Q29tbWFuZCgpOworICAgIHZpcnR1YWwgdm9pZCBpc3N1ZVBhc3RlQW5kTWF0Y2hTdHlsZUNvbW1h
bmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaXNzdWVUcmFuc3Bvc2VDb21tYW5kKCk7CisgICAgdmly
dHVhbCB2b2lkIHJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uQ29udHJv
bGxlciYgb2xkU2VsZWN0aW9uLCBib29sIGNsb3NlVHlwaW5nKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRzKCk7CisgICAgdmlydHVhbCBib29sIHNob3VsZENoYW5n
ZVNlbGVjdGlvbihjb25zdCBTZWxlY3Rpb25Db250cm9sbGVyJiBvbGRTZWxlY3Rpb24sIGNvbnN0
IFNlbGVjdGlvbkNvbnRyb2xsZXImIG5ld1NlbGVjdGlvbiwgRUFmZmluaXR5LCBib29sIHN0aWxs
U2VsZWN0aW5nKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFydENsZWFyZWRJbkJlZ2luKCk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuR29CYWNrT3JGb3J3YXJkKGludCBkaXN0YW5jZSkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGhhbmRsZWRPbmxvYWRFdmVudHMoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBjYW5QYXN0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjYW5SZWRvKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGNhblVuZG8oKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
cHJpbnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwor
CisgICAgYm9vbCBrZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50
KTsKKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFJlc291cmNlTG9hZGVyKiwg
UGxhdGZvcm1SZXNwb25zZSk7CisgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkRGF0YShSZXNvdXJj
ZUxvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZEFs
bERhdGEoUmVzb3VyY2VMb2FkZXIqLFBsYXRmb3JtRGF0YSk7CisKKyAgICB2b2lkIHNldEZyYW1l
R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpOworCitwcml2YXRlOgorICAgIHZvaWQgaW5pdCgpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKKwor
ICAgIEZyYW1lUXRDbGllbnQqIG1fY2xpZW50OworICAgIAorfTsKKworaW5saW5lIEZyYW1lUXQq
IFdpbihGcmFtZSogZnJhbWUpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lUXQqPihmcmFtZSk7
IH0KK2lubGluZSBjb25zdCBGcmFtZVF0KiBXaW4oY29uc3QgRnJhbWUqIGZyYW1lKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVF0Kj4oZnJhbWUpOyB9CisKK30KKworI2VuZGlmCisK
Ky8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZp
ZXdDYW52YXNRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxW
aWV3Q2FudmFzUXQuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3Jv
bGxWaWV3Q2FudmFzUXQuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJTY3JvbGxWaWV3Q2FudmFzUXQu
aCIKKyNpbmNsdWRlICJTY3JvbGxWaWV3Q2FudmFzUXQubW9jIgorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRnJhbWVRdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1
ZGUgIlR5cGluZ0NvbW1hbmQuaCIKKyNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIgorCisjaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2lu
Y2x1ZGUgPFFQYWludEV2ZW50PgorI2luY2x1ZGUgPFFNb3VzZUV2ZW50PgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Njcm9sbFZpZXdDYW52YXNRdDo6U2Nyb2xsVmlld0NhbnZhc1F0KFNjcm9s
bFZpZXcqIGZyYW1lVmlldywgUVdpZGdldCogcGFyZW50KQorICAgIDogUVdpZGdldChwYXJlbnQp
CisgICAgLCBtX2ZyYW1lVmlldyhmcmFtZVZpZXcpCit7CisgICAgc2V0TW91c2VUcmFja2luZyh0
cnVlKTsKKyAgICBzZXRGb2N1c1BvbGljeShRdDo6U3Ryb25nRm9jdXMpOworfQorCit2b2lkIFNj
cm9sbFZpZXdDYW52YXNRdDo6cGFpbnRFdmVudChRUGFpbnRFdmVudCogZXYpCit7CisgICAgRnJh
bWVWaWV3KiBmdiA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KG1fZnJhbWVWaWV3KTsKKyAgICBp
ZiAoIWZ2IHx8ICFmdi0+ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVJlY3QgY2xp
cCA9IGV2LT5yZWN0KCk7CisKKyAgICBRUGFpbnRlciBwKHRoaXMpOworICAgIEdyYXBoaWNzQ29u
dGV4dCBjdHgoJnApOworICAgIGZ2LT5mcmFtZSgpLT5wYWludCgmY3R4LCBjbGlwKTsKK30KKwor
UVNpemUgU2Nyb2xsVmlld0NhbnZhc1F0OjpzaXplSGludCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFFTaXplKDEwMjQsIDc2OCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld0NhbnZhc1F0Ojptb3VzZU1v
dmVFdmVudChRTW91c2VFdmVudCogZXYpCit7CisgICAgRnJhbWVWaWV3KiBmdiA9IHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KG1fZnJhbWVWaWV3KTsKKyAgICBpZiAoIWZ2IHx8ICFmdi0+ZnJhbWUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnYtPmhhbmRsZU1vdXNlTW92ZUV2ZW50KFBsYXRm
b3JtTW91c2VFdmVudChldiwgMCkpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNRdDo6bW91
c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBldikKK3sKKyAgICBGcmFtZVZpZXcqIGZ2ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4obV9mcmFtZVZpZXcpOworICAgIGlmICghZnYgfHwgIWZ2LT5m
cmFtZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBmdi0+aGFuZGxlTW91c2VQcmVzc0V2ZW50
KFBsYXRmb3JtTW91c2VFdmVudChldiwgMSkpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNR
dDo6bW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqIGV2KQoreworICAgIEZyYW1lVmlldyog
ZnYgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihtX2ZyYW1lVmlldyk7CisgICAgaWYgKCFmdiB8
fCAhZnYtPmZyYW1lKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGZ2LT5oYW5kbGVNb3VzZVJl
bGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXYsIDApKTsKK30KKwordm9pZCBTY3JvbGxW
aWV3Q2FudmFzUXQ6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldikKK3sKKyAgICBoYW5kbGVL
ZXlFdmVudChldiwgZmFsc2UpOworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNRdDo6a2V5UmVs
ZWFzZUV2ZW50KFFLZXlFdmVudCogZXYpCit7CisgICAgaGFuZGxlS2V5RXZlbnQoZXYsIHRydWUp
OworfQorCit2b2lkIFNjcm9sbFZpZXdDYW52YXNRdDo6aGFuZGxlS2V5RXZlbnQoUUtleUV2ZW50
KiBldiwgYm9vbCBpc0tleVVwKQoreworICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXZlbnQo
ZXYsIGlzS2V5VXApOworCisgICAgRnJhbWVWaWV3KiBmdiA9IHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KG1fZnJhbWVWaWV3KTsKKyAgICBGcmFtZVF0KiBmcmFtZSA9IChmdiA/IHN0YXRpY19jYXN0
PEZyYW1lUXQqPihmdi0+ZnJhbWUoKSkgOiAwKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBib29sIGhhbmRsZWQgPSBmcmFtZS0+a2V5RXZlbnQoa2V2ZW50KTsKKwor
ICAgIGlmICghaGFuZGxlZCAmJiAha2V2ZW50LmlzS2V5VXAoKSkgeworICAgICAgICBOb2RlKiBz
dGFydCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zdGFydCgpLm5vZGUoKTsKKyAgICAgICAgaWYgKHN0
YXJ0ICYmIHN0YXJ0LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgICAgICBzd2l0Y2go
a2V2ZW50LldpbmRvd3NLZXlDb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0JBQ0s6
CisgICAgICAgICAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoZnJh
bWUtPmRvY3VtZW50KCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIFZLX0RFTEVURToKKyAgICAgICAgICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6
Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoZnJhbWUtPmRvY3VtZW50KCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0xFRlQ6CisgICAgICAgICAg
ICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2RpZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6
TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6TEVGVCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX1JJR0hU
OgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkubW9kaWZ5KFNlbGVjdGlv
bkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNvbnRyb2xsZXI6OlJJR0hULCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgVktfVVA6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5tb2Rp
ZnkoU2VsZWN0aW9uQ29udHJvbGxlcjo6TU9WRSwgU2VsZWN0aW9uQ29udHJvbGxlcjo6QkFDS1dB
UkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBWS19ET1dOOgorICAgICAgICAgICAgICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCkubW9kaWZ5KFNlbGVjdGlvbkNvbnRyb2xsZXI6Ok1PVkUsIFNlbGVjdGlvbkNv
bnRyb2xsZXI6OkZPUldBUkQsIFBhcmFncmFwaEdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChmcmFtZS0+ZG9jdW1lbnQoKSwga2V2ZW50LnRl
eHQoKSwgZmFsc2UpOworCisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVE9ETzogZG9TY3JvbGwgc3R1ZmYo
KSEKKyAgICB9Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vcXQvU2Nyb2xsVmlld0NhbnZhc1F0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9xdC9TY3JvbGxWaWV3Q2FudmFzUXQuaAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vcXQvU2Nyb2xsVmlld0NhbnZhc1F0LmgJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA2IEdlb3JnZSBTdGFpa29zIDxzdGFpa29zQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgRGlyayBNdWVsbGVyIDxtdWVsbGVyQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+Cisg
KgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNDUk9MTFZJRVdDQU5W
QVNRVF9ICisjZGVmaW5lIFNDUk9MTFZJRVdDQU5WQVNRVF9ICisKKyNpbmNsdWRlIDxRV2lkZ2V0
PgorCitjbGFzcyBRS2V5RXZlbnQ7CitjbGFzcyBRUGFpbnRFdmVudDsKK2NsYXNzIFFNb3VzZUV2
ZW50OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbFZpZXc7CisKK2NsYXNz
IFNjcm9sbFZpZXdDYW52YXNRdCA6IHB1YmxpYyBRV2lkZ2V0IHsKK1FfT0JKRUNUCitwdWJsaWM6
CisgICAgU2Nyb2xsVmlld0NhbnZhc1F0KFNjcm9sbFZpZXcqLCBRV2lkZ2V0KiBwYXJlbnQgPSAw
KTsKKworICAgIHZpcnR1YWwgUVNpemUgc2l6ZUhpbnQoKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBwYWludEV2ZW50KFFQYWludEV2ZW50Kik7CisgICAgdmlydHVhbCB2
b2lkIG1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIG1vdXNl
UHJlc3NFdmVudChRTW91c2VFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBtb3VzZVJlbGVhc2VF
dmVudChRTW91c2VFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlF
dmVudCopOworICAgIHZpcnR1YWwgdm9pZCBrZXlSZWxlYXNlRXZlbnQoUUtleUV2ZW50Kik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGVLZXlFdmVudChRS2V5RXZlbnQqLCBib29sIGlzS2V5
VXApOworCisgICAgU2Nyb2xsVmlldyogbV9mcmFtZVZpZXc7Cit9OworCit9CisKKyNlbmRpZgor
CisvLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxW
aWV3UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0
LmNwcAkoUmV2aXNpb24gMTU5NTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdR
dC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJJbnRQb2lu
dC5oIgogCiAjaW5jbHVkZSAiRnJhbWVRdC5oIgotI2luY2x1ZGUgIkNhbnZhc1F0LmgiCisjaW5j
bHVkZSAiU2Nyb2xsVmlld0NhbnZhc1F0LmgiCiAKICNpbmNsdWRlIDxRU2Nyb2xsQmFyPgogI2lu
Y2x1ZGUgPFFTY3JvbGxBcmVhPgpAQCAtNjIsNyArNjIsNyBAQAogCiAgICAgLy8gJ2lzRnJhbWVW
aWV3KCknIGNhbiBub3QgYmUgY2FsbGVkIHlldCBpbiB0aGUgY29uc3RydWN0b3IhCiAgICAgaWYg
KGlzRnJhbWVWaWV3KCkpIHsKLSAgICAgICAgQ2FudmFzUXQqIGNhbnZhcyA9IG5ldyBDYW52YXNR
dCh0aGlzLCBtX2FyZWEpOworICAgICAgICBTY3JvbGxWaWV3Q2FudmFzUXQqIGNhbnZhcyA9IG5l
dyBTY3JvbGxWaWV3Q2FudmFzUXQodGhpcywgbV9hcmVhKTsKIAogICAgICAgICBzZXRRV2lkZ2V0
KG1fYXJlYSk7CiAgICAgICAgIG1fYXJlYS0+c2V0V2lkZ2V0KGNhbnZhcyk7CkluZGV4OiBXZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KFJldmlzaW9uIDE1OTUxKQorKysgV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkoQXJiZWl0c2tvcGll
KQpAQCAtNjcsNyArNjcsNyBAQAogICBhZGRfZGVmaW5pdGlvbnMgKCAtV25vLXZhcmlhZGljLW1h
Y3JvcyApCiBFTkRJRihfX0tERV9IQVZFX1dWQVJJQURJQ19NQUNST1MpCiAKLWtkZTRfYXV0b21v
YyhwbGF0Zm9ybS9xdC9DYW52YXNRdC5jcHApCitrZGU0X2F1dG9tb2MocGxhdGZvcm0vcXQvU2Ny
b2xsVmlld0NhbnZhc1F0LmNwcCkKIAogIyBydWxlcyBmb3IgZ2VuZXJhdGVkIGZpbGVzCiBJRiAo
VVNFX1dFQktJVF9TVkdfU1VQUE9SVCkKQEAgLTg4NSw3ICs4ODUsNyBAQAogIyAgIHBsYXRmb3Jt
L3F0L0ZpbGVCdXR0b25RdC5jcHAKICAgICBwbGF0Zm9ybS9xdC9GcmFtZVF0LmNwcAogIyAgIHBs
YXRmb3JtL3F0L1RleHRFZGl0UXQuY3BwCi0gICAgcGxhdGZvcm0vcXQvQ2FudmFzUXQuY3BwCisg
ICAgcGxhdGZvcm0vcXQvU2Nyb2xsVmlld0NhbnZhc1F0LmNwcAogICAgIHBsYXRmb3JtL3F0L1Bs
YXRmb3JtTW91c2VFdmVudFF0LmNwcAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtS2V5Ym9hcmRF
dmVudFF0LmNwcAogICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29k
ZXIuY3BwCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10156</attachid>
            <date>2006-08-21 13:54:05 -0700</date>
            <delta_ts>2006-08-21 16:20:32 -0700</delta_ts>
            <desc>Patch chunk: link stubs</desc>
            <filename>platform-qt-stubs.diff</filename>
            <type>text/plain</type>
            <size>14815</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNTk1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMTA0IEBACisyMDA2LTA4LTIyICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4ZXMgcGFydHMgb2Y6IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA0NjcKKyAgICAgICAgV2ViS2l0IHNob3VsZCBoYXZlIFF0IHBsYXRmb3Jt
IHN1cHBvcnQKKworICAgICAgICAqIHBsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6
IEFkZGVkLgorICAgICAgICAoSmF2YUFwcGxldFdpZGdldDo6SmF2YUFwcGxldFdpZGdldCk6Cisg
ICAgICAgIChGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoRm9u
dDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpy
ZWZyZXNoUGx1Z2lucyk6CisgICAgICAgIChXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcik6CisgICAg
ICAgIChJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2Vs
ZWN0QWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6YWRkU2VhcmNoUmVzdWx0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dEZpZWxkOjpzZWxlY3RlZFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpz
ZXRBdXRvU2F2ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpjaGVja3NEZXNj
ZW5kYW50c0ZvckZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0U2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0TWF4UmVzdWx0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OmVkaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
RmllbGQ6OmZvY3VzUG9saWN5KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6VGV4dEZp
ZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6flRleHRGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZp
ZWxkOjpzZXRBbGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRXcml0
aW5nRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6bWF4TGVuZ3RoKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0TWF4TGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRGaWVsZDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNl
dFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpjdXJzb3JQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldEN1cnNvclBvc2l0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRGaWVsZDo6c2V0RWRpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRG
aWVsZDo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRQbGFj
ZWhvbGRlclN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNldENvbG9ycyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OnNpemVGb3JDaGFyYWN0ZXJXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0RmllbGQ6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dEZpZWxkOjpzZXRMaXZlU2VhcmNoKToKKyAgICAgICAgKFdlYkNvcmU6OlNs
aWRlcjo6U2xpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6c2l6ZUhpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2xpZGVyOjp+U2xpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRl
cjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyOjpzZXRNYXhWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTbGlkZXI6OnNldE1pblZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNsaWRlcjo6c2V0Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXI6OnZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNsaWRlcjo6Zm9jdXNQb2xpY3kpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsQmFyOjpTY3JvbGxCYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQmFyOjpzZXRT
dGVwcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxCYXI6OnNjcm9sbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxCYXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEJh
cjo6c2V0S25vYlByb3BvcnRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxC
YXI6OlBsYXRmb3JtU2Nyb2xsQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xs
QmFyOjp+UGxhdGZvcm1TY3JvbGxCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3Jv
bGxCYXI6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU2Nyb2xsQmFyOjpoZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnNldEVuYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtU2Nyb2xsQmFyOjpzZXRTY3JvbGxCYXJWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybVNjcm9sbEJhcjo6c2V0S25vYlByb3BvcnRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1TY3JvbGxCYXI6OnNldFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hlY2tDYWNoZU9iamVjdFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpDaGVja0lmUmVs
b2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6Omhpc3RvcnlDb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpzdWJt
aXRCdXR0b25EZWZhdWx0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6aW5wdXRFbGVtZW50QWx0
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE5l
eHRTZW50ZW5jZUZyb21JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2VudGVuY2VCb3Vu
ZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZFdvcmRCb3VuZGFyeSk6CisgICAgICAgIChGcmFtZTo6c2V0TmVlZHNS
ZWFwcGx5U3R5bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgIChXZWJD
b3JlOjpzZWFyY2hhYmxlSW5kZXhJbnRyb2R1Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2V0
Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbik6CisgICAgICAgIChGcmFtZVZpZXc6OnVwZGF0
ZUJvcmRlcik6CisgICAgICAgIChsb2FkUmVzb3VyY2VJbnRvQXJyYXkpOgorICAgICAgICAoUGx1
Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVnaW5JbmZvRm9yUGx1Z2luQXRJbmRleCk6CisgICAgICAg
IChQbHVnSW5JbmZvU3RvcmU6OnBsdWdpbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdJ
bkluZm9TdG9yZTo6c3VwcG9ydHNNSU1FVHlwZSk6CisgICAgICAgIChGaWxlQnV0dG9uOjpGaWxl
QnV0dG9uKToKKyAgICAgICAgKEZpbGVCdXR0b246OmNsaWNrKToKKyAgICAgICAgKEZpbGVCdXR0
b246OnNpemVGb3JDaGFyYWN0ZXJXaWR0aCk6CisgICAgICAgIChGaWxlQnV0dG9uOjpmb2N1c1Bv
bGljeSk6CisgICAgICAgIChGaWxlQnV0dG9uOjpmcmFtZUdlb21ldHJ5KToKKyAgICAgICAgKEZp
bGVCdXR0b246OnNldEZpbGVuYW1lKToKKyAgICAgICAgKEZpbGVCdXR0b246OmJhc2VsaW5lUG9z
aXRpb24pOgorICAgICAgICAoRmlsZUJ1dHRvbjo6c2V0RnJhbWVHZW9tZXRyeSk6CisgICAgICAg
IChGaWxlQnV0dG9uOjpzZXREaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpzdXBwb3J0ZWRL
ZXlTaXplcyk6CisgICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcpOgorCiAyMDA2LTA4LTIxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShSZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShSZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0
YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxs
ZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRm9u
dC5oIgorI2luY2x1ZGUgIkZpbGVCdXR0b24uaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2lu
Y2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IlRleHRGaWVsZC5oIgorI2luY2x1ZGUgIlNsaWRlci5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgor
I2luY2x1ZGUgImxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJTY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJh
ci5oIgorI2luY2x1ZGUgIkphdmFBcHBsZXRXaWRnZXQuaCIKKyNpbmNsdWRlICJTY3JvbGxCYXIu
aCIKKyNpbmNsdWRlICJQYXRoLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisj
aW5jbHVkZSAiQ29va2llSmFyLmgiCisjaW5jbHVkZSAiU2NyZWVuLmgiCisjaW5jbHVkZSAiSGlz
dG9yeS5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgorI2luY2x1ZGUgIlBsdWdJbkluZm9TdG9yZS5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCisjaW5jbHVkZSAiVGV4dEJvdW5kYXJpZXMuaCIKKyNpbmNsdWRlICJBWE9iamVjdENhY2hl
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisjZGVmaW5lIG5vdEltcGxlbWVudGVk
KCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVOVEVEOiAlczolZFxuIiwg
X19GSUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQorCitKYXZhQXBwbGV0V2lkZ2V0OjpKYXZh
QXBwbGV0V2lkZ2V0KEludFNpemUgY29uc3QmLCBFbGVtZW50KiwgV1RGOjpIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPiBjb25zdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCitGbG9hdFJlY3QgRm9u
dDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0
U3R5bGUmLCBjb25zdCBJbnRQb2ludCYsIGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gRmxvYXRSZWN0KCk7IH0KK2ludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBs
ZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBpbnQsIGJvb2wpIGNvbnN0
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KKworCit2b2lkIFdlYkNvcmU6OnJlZnJl
c2hQbHVnaW5zKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCitDb2xvciBXZWJDb3JlOjpm
b2N1c1JpbmdDb2xvcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDB4RkYwMDAwRkY7IH0K
Kwordm9pZCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIFRpbGVSdWxlLCBUaWxlUnVsZSwgQ29tcG9zaXRlT3BlcmF0
b3IpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCituYW1lc3BhY2UgV2ViQ29yZSB7ICAgIAorCit2
b2lkIFRleHRGaWVsZDo6c2VsZWN0QWxsKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFRl
eHRGaWVsZDo6YWRkU2VhcmNoUmVzdWx0KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitpbnQgVGV4
dEZpZWxkOjpzZWxlY3Rpb25TdGFydCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJu
IDA7IH0KK2Jvb2wgVGV4dEZpZWxkOjpoYXNTZWxlY3RlZFRleHQoKSBjb25zdCB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiAwOyB9CitTdHJpbmcgVGV4dEZpZWxkOjpzZWxlY3RlZFRleHQoKSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQordm9pZCBUZXh0Rmll
bGQ6OnNldEF1dG9TYXZlTmFtZShTdHJpbmcgY29uc3QmKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
K2Jvb2wgVGV4dEZpZWxkOjpjaGVja3NEZXNjZW5kYW50c0ZvckZvY3VzKCkgY29uc3QgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRTZWxlY3Rp
b24oaW50LGludCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFRleHRGaWVsZDo6c2V0TWF4
UmVzdWx0cyhpbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorYm9vbCBUZXh0RmllbGQ6OmVkaXRl
ZCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK1dpZGdldDo6Rm9jdXNQ
b2xpY3kgVGV4dEZpZWxkOjpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsg
cmV0dXJuIE5vRm9jdXM7IH0KK1RleHRGaWVsZDo6VGV4dEZpZWxkKFRleHRGaWVsZDo6VHlwZSkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9CitUZXh0RmllbGQ6On5UZXh0RmllbGQoKSB7IG5vdEltcGxl
bWVudGVkKCk7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRGb250KFdlYkNvcmU6OkZvbnQgY29uc3Qm
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRBbGlnbm1lbnQoSG9y
aXpvbnRhbEFsaWdubWVudCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFRleHRGaWVsZDo6
c2V0V3JpdGluZ0RpcmVjdGlvbihUZXh0RGlyZWN0aW9uKSB7IG5vdEltcGxlbWVudGVkKCk7IH0K
K2ludCBUZXh0RmllbGQ6Om1heExlbmd0aCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIDA7IH0KK3ZvaWQgVGV4dEZpZWxkOjpzZXRNYXhMZW5ndGgoaW50KSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KK1N0cmluZyBUZXh0RmllbGQ6OnRleHQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiBTdHJpbmcoKTsgfQordm9pZCBUZXh0RmllbGQ6OnNldFRleHQoU3RyaW5nIGNv
bnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitpbnQgVGV4dEZpZWxkOjpjdXJzb3JQb3NpdGlv
bigpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQgVGV4dEZpZWxk
OjpzZXRDdXJzb3JQb3NpdGlvbihpbnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBUZXh0
RmllbGQ6OnNldEVkaXRlZChib29sKSB7IG5vdEltcGxlbWVudGVkKCk7ICB9Cit2b2lkIFRleHRG
aWVsZDo6c2V0UmVhZE9ubHkoYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFRleHRG
aWVsZDo6c2V0UGxhY2Vob2xkZXJTdHJpbmcoU3RyaW5nIGNvbnN0JikgeyBub3RJbXBsZW1lbnRl
ZCgpOyAgfQordm9pZCBUZXh0RmllbGQ6OnNldENvbG9ycyhDb2xvciBjb25zdCYsQ29sb3IgY29u
c3QmKSB7IG5vdEltcGxlbWVudGVkKCk7ICB9CitJbnRTaXplIFRleHRGaWVsZDo6c2l6ZUZvckNo
YXJhY3RlcldpZHRoKGludCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gSW50U2l6
ZSgpOyB9CitpbnQgVGV4dEZpZWxkOjpiYXNlbGluZVBvc2l0aW9uKGludCkgY29uc3QgeyBub3RJ
bXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQordm9pZCBUZXh0RmllbGQ6OnNldExpdmVTZWFyY2go
Ym9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK1NsaWRlcjo6U2xpZGVyKCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9CitJbnRTaXplIFNsaWRlcjo6c2l6ZUhpbnQoKSBjb25zdCB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiBJbnRTaXplKCk7IH0KK1NsaWRlcjo6flNsaWRlcigpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQordm9pZCBTbGlkZXI6OnNldFZhbHVlKGRvdWJsZSkgeyBub3RJbXBsZW1l
bnRlZCgpOyB9Cit2b2lkIFNsaWRlcjo6c2V0TWF4VmFsdWUoZG91YmxlKSB7IG5vdEltcGxlbWVu
dGVkKCk7IH0KK3ZvaWQgU2xpZGVyOjpzZXRNaW5WYWx1ZShkb3VibGUpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQordm9pZCBTbGlkZXI6OnNldEZvbnQoV2ViQ29yZTo6Rm9udCBjb25zdCYpIHsgbm90
SW1wbGVtZW50ZWQoKTsgfQorZG91YmxlIFNsaWRlcjo6dmFsdWUoKSBjb25zdCB7IG5vdEltcGxl
bWVudGVkKCk7IHJldHVybiAwOyB9CitXaWRnZXQ6OkZvY3VzUG9saWN5IFNsaWRlcjo6Zm9jdXNQ
b2xpY3koKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBOb0ZvY3VzOyB9CisKK1Nj
cm9sbEJhcjo6U2Nyb2xsQmFyKFNjcm9sbEJhckNsaWVudCAqLCBTY3JvbGxCYXJPcmllbnRhdGlv
bikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFNjcm9sbEJhcjo6c2V0U3RlcHMoaW50LCBp
bnQpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorYm9vbCBTY3JvbGxCYXI6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCkgeyBub3RJbXBsZW1lbnRlZCgpOyBy
ZXR1cm4gMDsgfQorYm9vbCBTY3JvbGxCYXI6OnNldFZhbHVlKGludCkgeyBub3RJbXBsZW1lbnRl
ZCgpOyByZXR1cm4gMDsgfQordm9pZCBTY3JvbGxCYXI6OnNldEtub2JQcm9wb3J0aW9uKGludCwg
aW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKworUGxhdGZvcm1TY3JvbGxCYXI6OlBsYXRmb3Jt
U2Nyb2xsQmFyKFNjcm9sbEJhckNsaWVudCogY2xpZW50LCBTY3JvbGxCYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikgOiBTY3JvbGxCYXIoY2xpZW50LCBvcmllbnRhdGlvbikgeyBub3RJbXBsZW1l
bnRlZCgpOyB9CitQbGF0Zm9ybVNjcm9sbEJhcjo6flBsYXRmb3JtU2Nyb2xsQmFyKCkgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9CitpbnQgUGxhdGZvcm1TY3JvbGxCYXI6OndpZHRoKCkgY29uc3QgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQoraW50IFBsYXRmb3JtU2Nyb2xsQmFyOjpoZWln
aHQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Cit2b2lkIFBsYXRmb3Jt
U2Nyb2xsQmFyOjpzZXRFbmFibGVkKGJvb2wpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBQ
bGF0Zm9ybVNjcm9sbEJhcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYg
ZGFtYWdlUmVjdCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFBsYXRmb3JtU2Nyb2xsQmFy
OjpzZXRTY3JvbGxCYXJWYWx1ZShpbnQgdikgeyBub3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIFBs
YXRmb3JtU2Nyb2xsQmFyOjpzZXRLbm9iUHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0
b3RhbFNpemUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQordm9pZCBQbGF0Zm9ybVNjcm9sbEJhcjo6
c2V0UmVjdChjb25zdCBJbnRSZWN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK1BsYXRmb3Jt
TW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEN1cnJlbnRFdmVudFRhZyYpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQorCit2b2lkIENoZWNrQ2FjaGVPYmplY3RTdGF0dXMoRG9jTG9h
ZGVyKiwgQ2FjaGVkUmVzb3VyY2UqKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK2Jvb2wgQ2hlY2tJ
ZlJlbG9hZGluZyhXZWJDb3JlOjpEb2NMb2FkZXIqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQorVmVjdG9yPGNoYXI+IFNlcnZlU3luY2hyb25vdXNSZXF1ZXN0KExvYWRlcios
IERvY0xvYWRlciosIFJlc291cmNlTG9hZGVyKiwgS1VSTCYsIERlcHJlY2F0ZWRTdHJpbmcmKSB7
IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBWZWN0b3I8Y2hhcj4oKTsgfQorfQorCitib29sIFdl
YkNvcmU6Omhpc3RvcnlDb250YWlucyhEZXByZWNhdGVkU3RyaW5nIGNvbnN0JikgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KK1N0cmluZyBXZWJDb3JlOjpzdWJtaXRCdXR0b25E
ZWZhdWx0TGFiZWwoKSB7IHJldHVybiAiU3VibWl0IjsgfQorU3RyaW5nIFdlYkNvcmU6OmlucHV0
RWxlbWVudEFsdFRleHQoKSB7IHJldHVybiBEZXByZWNhdGVkU3RyaW5nKCk7IH0KK1N0cmluZyBX
ZWJDb3JlOjpyZXNldEJ1dHRvbkRlZmF1bHRMYWJlbCgpIHsgcmV0dXJuICJSZXNldCI7IH0KK1N0
cmluZyBXZWJDb3JlOjpkZWZhdWx0TGFuZ3VhZ2UoKSB7IHJldHVybiAiZW4iOyB9CisKKworaW50
IFdlYkNvcmU6OmZpbmROZXh0U2VudGVuY2VGcm9tSW5kZXgoVUNoYXIgY29uc3QqLCBpbnQsIGlu
dCwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQordm9pZCBXZWJDb3JlOjpm
aW5kU2VudGVuY2VCb3VuZGFyeShVQ2hhciBjb25zdCosIGludCwgaW50LCBpbnQqLCBpbnQqKSB7
IG5vdEltcGxlbWVudGVkKCk7IH0KK2ludCBXZWJDb3JlOjpmaW5kTmV4dFdvcmRGcm9tSW5kZXgo
VUNoYXIgY29uc3QqLCBpbnQsIGludCwgYm9vbCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4g
MDsgfQordm9pZCBXZWJDb3JlOjpmaW5kV29yZEJvdW5kYXJ5KFVDaGFyIGNvbnN0KiBzdHIsIGlu
dCBsZW4sIGludCBwb3NpdGlvbiwgaW50KiBzdGFydCwgaW50KiBlbmQpIHsqc3RhcnQgPSBwb3Np
dGlvbjsgKmVuZCA9IHBvc2l0aW9uOyBub3RJbXBsZW1lbnRlZCgpOyB9CisKK3ZvaWQgRnJhbWU6
OnNldE5lZWRzUmVhcHBseVN0eWxlcygpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCitpbnQgV2Vi
Q29yZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KikgeyBub3RJbXBsZW1lbnRlZCgp
OyByZXR1cm4gMDsgfQorYm9vbCBXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0Kikg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KKworU3RyaW5nIFdlYkNvcmU6OnNl
YXJjaGFibGVJbmRleEludHJvZHVjdGlvbigpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0
cmluZygpOyB9CisKK3ZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlv
bih2b2lkICgqKSgpKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwordm9pZCBGcmFtZVZpZXc6OnVw
ZGF0ZUJvcmRlcigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQorCitib29sIEFYT2JqZWN0Q2FjaGU6
OmdBY2Nlc3NpYmlsaXR5RW5hYmxlZCA9IGZhbHNlOworCitWZWN0b3I8Y2hhcj4gbG9hZFJlc291
cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqICkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gVmVj
dG9yPGNoYXI+KCk7IH0KKworUGx1Z2luSW5mbyogUGx1Z0luSW5mb1N0b3JlOjpjcmVhdGVQbHVn
aW5JbmZvRm9yUGx1Z2luQXRJbmRleCh1bnNpZ25lZCkgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gMDsgfQordW5zaWduZWQgUGx1Z0luSW5mb1N0b3JlOjpwbHVnaW5Db3VudCgpIGNvbnN0IHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK2Jvb2wgV2ViQ29yZTo6UGx1Z0luSW5mb1N0
b3JlOjpzdXBwb3J0c01JTUVUeXBlKGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CisKK0ZpbGVCdXR0b246OkZpbGVCdXR0b24oRnJhbWUq
KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KK3ZvaWQgRmlsZUJ1dHRvbjo6Y2xpY2soYm9vbCkgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9CitJbnRTaXplIEZpbGVCdXR0b246OnNpemVGb3JDaGFyYWN0ZXJX
aWR0aChpbnQpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIEludFNpemUoKTsgfQor
V2lkZ2V0OjpGb2N1c1BvbGljeSBGaWxlQnV0dG9uOjpmb2N1c1BvbGljeSgpIGNvbnN0IHsgbm90
SW1wbGVtZW50ZWQoKTsgcmV0dXJuIE5vRm9jdXM7IH0KK1dlYkNvcmU6OkludFJlY3QgRmlsZUJ1
dHRvbjo6ZnJhbWVHZW9tZXRyeSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIElu
dFJlY3QoKTsgfQordm9pZCBGaWxlQnV0dG9uOjpzZXRGaWxlbmFtZShEZXByZWNhdGVkU3RyaW5n
IGNvbnN0JikgeyBub3RJbXBsZW1lbnRlZCgpOyB9CitpbnQgRmlsZUJ1dHRvbjo6YmFzZWxpbmVQ
b3NpdGlvbihpbnQpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIDA7IH0KK3ZvaWQg
RmlsZUJ1dHRvbjo6c2V0RnJhbWVHZW9tZXRyeShXZWJDb3JlOjpJbnRSZWN0IGNvbnN0JikgeyBu
b3RJbXBsZW1lbnRlZCgpOyB9Cit2b2lkIEZpbGVCdXR0b246OnNldERpc2FibGVkKGJvb2wpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitEZXByZWNh
dGVkU3RyaW5nTGlzdCBzdXBwb3J0ZWRLZXlTaXplcygpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIERlcHJlY2F0ZWRTdHJpbmdMaXN0KCk7IH0KK0RlcHJlY2F0ZWRTdHJpbmcgc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgRGVw
cmVjYXRlZFN0cmluZyAmY2hhbGxlbmdlU3RyaW5nLCBjb25zdCBLVVJMICZ1cmwpIHsgcmV0dXJu
IERlcHJlY2F0ZWRTdHJpbmcoKTsgfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10195</attachid>
            <date>2006-08-24 07:48:44 -0700</date>
            <delta_ts>2006-08-24 09:12:46 -0700</delta_ts>
            <desc>Fix build for Qt platform. See ChangeLog for details.</desc>
            <filename>jsc-build-fixes.diff</filename>
            <type>text/plain</type>
            <size>1913</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKFJldmlzaW9uIDE2MDA4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCShBcmJlaXRza29waWUpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMDYtMDgtMjQgIE5pa29sYXMg
WmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBGaXggUGxhdGZvcm0u
aCBkZWZpbmUgZm9yIHRoZSBRdCBwbGF0Zm9ybSAod2UgZG9uJ3QgdXNlL25lZWQgQ2Fpcm8uKQor
ICAgICAgICBBZGp1c3QgQ01ha2VMaXN0cy50eHQgdG8gQW5kZXJzJyBidWlsZCBmaXhlcy4KKwkK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwog
MjAwNi0wOC0yMyAgRGF2aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgRml4
IFBsYXRmb3JtLmggdG8gaW5jbHVkZSAjZGVmaW5lcyBmb3IgZ3JhcGhpY3MgZmVhdHVyZXMuCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkoUmV2aXNpb24gMTYwMDgpCisrKyBKYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAkoQXJiZWl0c2tvcGllKQpAQCAtMTEsNiArMTEsOCBAQAogCiBpbmNs
dWRlX2RpcmVjdG9yaWVzKAogICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wY3JlCisg
ICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2JpbmRpbmdzCisgICAgJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L2JpbmRpbmdzL2MKICAgICAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJ
Un0va2pzCiAgICAgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L2tqcwogCkBAIC02Myw2ICs2
NSwxNyBAQAogc2V0KGtqcy11bml0eV9MSUJfU1JDUwogICAgICR7a2pzLXVuaXR5X0xJQl9TUkNT
fQogICAgIHd0Zi91bmljb2RlL3F0NC9Vbmljb2RlUXQ0LmNwcAorICAgIGJpbmRpbmdzL05QX2pz
b2JqZWN0LmNwcAorICAgIGJpbmRpbmdzL25wcnVudGltZS5jcHAKKyAgICBiaW5kaW5ncy9ydW50
aW1lX2FycmF5LmNwcAorICAgIGJpbmRpbmdzL3J1bnRpbWUuY3BwCisgICAgYmluZGluZ3MvcnVu
dGltZV9tZXRob2QuY3BwCisgICAgYmluZGluZ3MvcnVudGltZV9vYmplY3QuY3BwCisgICAgYmlu
ZGluZ3MvcnVudGltZV9yb290LmNwcAorICAgIGJpbmRpbmdzL2MvY19jbGFzcy5jcHAKKyAgICBi
aW5kaW5ncy9jL2NfaW5zdGFuY2UuY3BwCisgICAgYmluZGluZ3MvYy9jX3J1bnRpbWUuY3BwCisg
ICAgYmluZGluZ3MvYy9jX3V0aWxpdHkuY3BwCiAgICAga2pzL0pTV3JhcHBlck9iamVjdC5jcHAK
IAlranMvUHJvcGVydHlOYW1lQXJyYXkuY3BwCiAJa2pzL2FycmF5X29iamVjdC5jcHAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3d0Zi9QbGF0Zm9ybS5oCShSZXZpc2lvbiAxNjAwOCkKKysrIEphdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCShBcmJlaXRza29waWUpCkBAIC04NCw3ICs4NCw3IEBACiAvKiBQTEFURk9S
TShDQUlSTykgKi8KICNpZiBQTEFURk9STShNQUMpCiAjZGVmaW5lIEtYTUxDT1JFX1BMQVRGT1JN
X0NHIDEKLSNlbHNlCisjZWxpZiAhZGVmaW5lZChCVUlMRElOR19RVF9fKQogI2RlZmluZSBLWE1M
Q09SRV9QTEFURk9STV9DQUlSTyAxCiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10196</attachid>
            <date>2006-08-24 07:49:27 -0700</date>
            <delta_ts>2006-08-24 09:16:13 -0700</delta_ts>
            <desc>Make Qt kcanvas device build again, after KCanvasMatrix removal.</desc>
            <filename>kcanvas-device-qt-fixes.diff</filename>
            <type>text/plain</type>
            <size>5450</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNjAwOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDYtMDgtMjQgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGFwdCB0aGUgS0NhbnZhcyBRdCBkZXZpY2UgdG8gUm9iJ3MgS0NhbnZhc01hdHJpeCBy
ZW1vdmFsLgorICAgICAgICBVc2UgQWZmaW5lVHJhbnNmb3JtIGV2ZXJ5d2hlcmUgaW5zdGVhZC4K
KworICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dFF0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0
UXQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dFF0OjpjdG0pOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VR
dC5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnRRdDo6c2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnRRdDo6c2V0dXApOgorCiAyMDA2LTA4LTI0ICBSb2IgQnVpcyAg
PGJ1aXNAa2RlLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJHcmFkaWVudFF0LmNwcAkoUmV2aXNpb24gMTYwMDgpCisrKyBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50UXQuY3BwCShBcmJlaXRza29w
aWUpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8UVBvaW50Rj4KIAogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiS0NhbnZhc01hdHJpeC5oIgorI2luY2x1ZGUgIkFmZmlu
ZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2VRdC5oIgogI2luY2x1ZGUg
IktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdGaWxsUGFpbnRl
ci5oIgpAQCAtOTUsMTMgKzk1LDEyIEBACiAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1
c2goUXQ6Ok5vQnJ1c2gpOwogCiAgICAgUUxpbmVhckdyYWRpZW50IGdyYWRpZW50KFFQb2ludEYo
eDEsIHkxKSwgUVBvaW50Rih4MiwgeTIpKTsKLSAgICBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1BS
RUFETUVUSE9EX1JFUEVBVCkgeworICAgIGlmIChzcHJlYWRNZXRob2QoKSA9PSBTUFJFQURNRVRI
T0RfUkVQRUFUKQogICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdyYWRpZW50OjpSZXBlYXRT
cHJlYWQpOwotICAgIH0gZWxzZSBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1BSRUFETUVUSE9EX1JF
RkxFQ1QpIHsKKyAgICBlbHNlIGlmIChzcHJlYWRNZXRob2QoKSA9PSBTUFJFQURNRVRIT0RfUkVG
TEVDVCkKICAgICAgICAgZ3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UmVmbGVjdFNwcmVh
ZCk7Ci0gICAgfSBlbHNlIHsKKyAgICBlbHNlCiAgICAgICAgIGdyYWRpZW50LnNldFNwcmVhZChR
R3JhZGllbnQ6OlBhZFNwcmVhZCk7Ci0gICAgfQogCiAgICAgZG91YmxlIG9wYWNpdHkgPSAxLjA7
CiAKQEAgLTE2NCw3ICsxNjMsNyBAQAogCiAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0UGVu
KFF0OjpOb1Blbik7CiAgICAgcXRDb250ZXh0LT5wYWludGVyKCkuc2V0QnJ1c2goUXQ6Ok5vQnJ1
c2gpOwotICAgIFFNYXRyaXggbWF0ID0gcXRDb250ZXh0LT5jdG0oKS5tYXRyaXgoKTsKKyAgICBR
TWF0cml4IG1hdCA9IHF0Q29udGV4dC0+Y3RtKCk7CiAKICAgICBkb3VibGUgY3gsIGZ4LCBjeSwg
ZnksIHI7CiAgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7CkBAIC0yMDcsMjAgKzIwNiwxOSBA
QAogICAgIH0KIAogICAgIFFSYWRpYWxHcmFkaWVudCBncmFkaWVudChRUG9pbnRGKGN4LCBjeSks
IGdyYWRpZW50UmFkaXVzKCksIFFQb2ludEYoZnggKyBjeCwgZnkgKyBjeSkpOwotICAgIGlmIChz
cHJlYWRNZXRob2QoKSA9PSBTUFJFQURNRVRIT0RfUkVQRUFUKSB7CisgICAgaWYgKHNwcmVhZE1l
dGhvZCgpID09IFNQUkVBRE1FVEhPRF9SRVBFQVQpCiAgICAgICAgIGdyYWRpZW50LnNldFNwcmVh
ZChRR3JhZGllbnQ6OlJlcGVhdFNwcmVhZCk7Ci0gICAgfSBlbHNlIGlmIChzcHJlYWRNZXRob2Qo
KSA9PSBTUFJFQURNRVRIT0RfUkVGTEVDVCkgeworICAgIGVsc2UgaWYgKHNwcmVhZE1ldGhvZCgp
ID09IFNQUkVBRE1FVEhPRF9SRUZMRUNUKQogICAgICAgICBncmFkaWVudC5zZXRTcHJlYWQoUUdy
YWRpZW50OjpSZWZsZWN0U3ByZWFkKTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UKICAgICAgICAg
Z3JhZGllbnQuc2V0U3ByZWFkKFFHcmFkaWVudDo6UGFkU3ByZWFkKTsKLSAgICB9CiAKICAgICBk
b3VibGUgb3BhY2l0eSA9IDEuMDsKIAogICAgIC8vIFRPRE86IEdyYWRpZW50IHRyYW5zZm9ybSAr
IG9wYWNpdHkgZml4ZXMhIAogCi0gICAgLy8gS0NhbnZhc01hdHJpeCBncmFkaWVudFRyYW5zID0g
Z3JhZGllbnRUcmFuc2Zvcm0oKTsKLSAgICAvLyBncmFkaWVudFRyYW5zLnFtYXRyaXgoKS5tYXAo
Y3gsIGN5LCAmY3gsICZjeSk7CisgICAgLy8gQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50VHJhbnMg
PSBncmFkaWVudFRyYW5zZm9ybSgpOworICAgIC8vIGdyYWRpZW50VHJhbnMubWFwKGN4LCBjeSwg
JmN4LCAmY3kpOwogICAgIC8vIHF0Q29udGV4dC0+cGFpbnRlcigpLnNldE1hdHJpeChtYXQpOwog
CiAgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgS1NWR1BhaW50ZXJGYWN0b3J5Ojpp
c0ZpbGxlZChyZW5kZXJTdHlsZSkpIHsKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQv
S1JlbmRlcmluZ0RldmljZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAJKFJldmlzaW9uIDE2MDA4KQorKysgV2ViQ29y
ZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCShBcmJlaXRza29waWUp
CkBAIC0yNCwxMCArMjQsMTAgQEAKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJS
ZW5kZXJQYXRoUXQuaCIKLSNpbmNsdWRlICJLQ2FudmFzTWF0cml4LmgiCiAjaW5jbHVkZSAiS0Nh
bnZhc1BhdGhRdC5oIgorI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktDYW52YXNDbGlwcGVyUXQuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlUXQuaCIKICNp
bmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0LmgiCiAjaW5jbHVkZSAiS1JlbmRl
cmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5oIgpAQCAtMzcsNyArMzcsNyBAQAogCiBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0OjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0KFFQYWludGVyKiBw
YWludGVyKQogICAgIDogbV9wYWludGVyKHBhaW50ZXIpCi0gICAgICAsIG1fcGF0aCgpCisgICAg
LCBtX3BhdGgoKQogewogICAgIFFfQVNTRVJUKG1fcGFpbnRlciAhPSAwKTsKIH0KQEAgLTQ2LDE2
ICs0NiwxNiBAQAogewogfQogCi1LQ2FudmFzTWF0cml4IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
UXQ6OmNvbmNhdENUTShjb25zdCBLQ2FudmFzTWF0cml4JiB3b3JsZE1hdHJpeCkKK0FmZmluZVRy
YW5zZm9ybSBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB3b3JsZE1hdHJpeCkKIHsKLSAgICBLQ2FudmFzTWF0cml4IHJldCA9IGN0bSgp
OwotICAgIG1fcGFpbnRlci0+c2V0TWF0cml4KHdvcmxkTWF0cml4Lm1hdHJpeCgpLCB0cnVlKTsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gcmV0ID0gY3RtKCk7CisgICAgbV9wYWludGVyLT5zZXRNYXRy
aXgod29ybGRNYXRyaXgsIHRydWUpOwogICAgIHJldHVybiByZXQ7CiB9CiAKLUtDYW52YXNNYXRy
aXggS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdDo6Y3RtKCkgY29uc3QKK0FmZmluZVRyYW5zZm9y
bSBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpjdG0oKSBjb25zdAogewotICAgIHJldHVybiBL
Q2FudmFzTWF0cml4KG1fcGFpbnRlci0+bWF0cml4KCkpOworICAgIHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0obV9wYWludGVyLT5tYXRyaXgoKSk7CiB9CiAKIEludFJlY3QgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdDo6bWFwRnJvbVZpc3VhbChjb25zdCBJbnRSZWN0JiByZWN0KQpJbmRleDogV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5oCShSZXZpc2lv
biAxNjAwOCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0
LmgJKEFyYmVpdHNrb3BpZSkKQEAgLTM2LDggKzM2LDggQEAKICAgICBLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF0KFFQYWludGVyKik7CiAgICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdCgpOwogCi0gICAgdmlydHVhbCBLQ2FudmFzTWF0cml4IGNvbmNhdENUTShjb25zdCBLQ2Fu
dmFzTWF0cml4Jik7Ci0gICAgdmlydHVhbCBLQ2FudmFzTWF0cml4IGN0bSgpIGNvbnN0OworICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBjdG0oKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgSW50UmVjdCBtYXBGcm9tVmlzdWFsKGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIElu
dFJlY3QgbWFwVG9WaXN1YWwoY29uc3QgSW50UmVjdCYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10197</attachid>
            <date>2006-08-24 10:04:55 -0700</date>
            <delta_ts>2006-08-24 11:30:30 -0700</delta_ts>
            <desc>Final style cleanup patch, as promised.</desc>
            <filename>style-cleanup.diff</filename>
            <type>text/plain</type>
            <size>46264</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDUgKzEsMTI3IEBACiAyMDA2LTA4LTI0ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRmluYWwgY2xlYW51cCB0byBjb25maXJtIHRvIFdlYktpdCBjb2Rpbmcgc3R5bGUhCisK
KyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LQ2FudmFzQ2xpcHBlclF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OktDYW52YXNDbGlwcGVyUXQ6OmFwcGx5Q2xpcCk6CisgICAgICAgICoga2Nh
bnZhcy9kZXZpY2UvcXQvS0NhbnZhc0NsaXBwZXJRdC5oOgorICAgICAgICAqIGtjYW52YXMvZGV2
aWNlL3F0L0tDYW52YXNQYXRoUXQuY3BwOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tD
YW52YXNQYXRoUXQuaDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2
aWNlUXQuY3BwOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VR
dC5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlckdy
YWRpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnRRdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0OjpL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudFF0KToKKyAgICAgICAgKiBrY2FudmFz
L2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF0Lmg6CisgICAgICAgICog
a2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdDo6S1JlbmRlcmlu
Z1BhaW50U2VydmVyUGF0dGVyblF0KToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdC9LUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuaDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9x
dC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJRdDo6c2V0UGVuUHJvcGVydGllcyk6CisgICAgICAgICoga2NhbnZhcy9k
ZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuaDoKKyAgICAgICAgKiBrY2FudmFzL2Rl
dmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OktSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQ6OktSZW5kZXJpbmdQYWludFNlcnZlclNv
bGlkUXQpOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ1BhaW50U2VydmVyU29saWRRdDo6
cmVuZGVyUGF0aCk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50
U2VydmVyU29saWRRdC5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhR
dC5jcHA6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0Lmg6CisgICAg
ICAgICogcGxhdGZvcm0vcXQvQWZmaW5lVHJhbnNmb3JtUXQuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L0Jyb3dzZXJFeHRlbnNpb25RdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvQnJv
d3NlckV4dGVuc2lvblF0Lmg6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ29sb3JRdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6Q29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Nv
bWJvQm94UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db21ib0JveDo6UGxhdGZv
cm1Db21ib0JveCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbWJvQm94Ojp+UGxhdGZv
cm1Db21ib0JveCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbWJvQm94OjpzZXRQYXJl
bnRXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db21ib0JveDo6YXBwZW5kR3Jv
dXBMYWJlbCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ29va2llSmFyUXQuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL3F0L0N1cnNvclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cnNvcnM6
OkN1cnNvcnM6OnNlbGYpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0Zsb2F0UG9pbnRRdC5jcHA6
CisgICAgICAgICogcGxhdGZvcm0vcXQvRmxvYXRSZWN0UXQuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L0ZvbnRDYWNoZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpj
cmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Gb250RGF0YVF0
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9Gb250UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b3BlcmF0b3IgUUZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZv
cm0vcXQvRnJhbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVF0OjpvcGVuVVJMKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lUXQ6OnN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVRdDo6dXJsU2VsZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVRdDo6a2V5
RXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ZyYW1lUXQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9HbHlwaE1hcFF0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9HcmFwaGljc0Nv
bnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0Rm9jdXNSaW5nQ2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0ltYWdlUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
OmRyYXdUaWxlZCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvSW1hZ2VTb3VyY2VRdC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvSW50UG9pbnRRdC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
cXQvSW50UmVjdFF0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9JbnRTaXplUXQuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L0xpbmVFZGl0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1MaW5lRWRpdDo6UGxhdGZvcm1MaW5lRWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUxpbmVFZGl0Ojp+UGxhdGZvcm1MaW5lRWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUxpbmVFZGl0OjpzZXRQYXJlbnRXaWRnZXQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1MaW5lRWRpdDo6YWRkU2VhcmNoUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9M
aXN0Qm94UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGlzdEJveDo6TGlzdEJveCk6CisgICAg
ICAgIChXZWJDb3JlOjpMaXN0Qm94Ojp+TGlzdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpMaXN0
Qm94OjpzZXRQYXJlbnRXaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1BhZ2VRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBhZ2U6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1BhdGhRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRBcmMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NL
ZXlDb2RlRm9yS2V5RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1BsYXRm
b3JtTW91c2VFdmVudFF0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmdldFN0eWxlUGFpbnRlckFu
ZFdpZGdldEZyb21QYWludEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
YXBwbHlUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludEJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFRleHRGaWVsZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZGVyOjphc3NlbWJsZVJlc3BvbnNlSGVhZGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUxvYWRlcjo6cmV0cmlldmVDaGFyc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlTG9hZGVyOjpyZWNlaXZlZFJlc3BvbnNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VMb2FkZXJNYW5hZ2VyOjphZGQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Jlc291cmNl
TG9hZGVyTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1NjcmVlblF0LmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3Q2FudmFzUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlld0NhbnZhc1F0OjpoYW5kbGVLZXlFdmVudCk6CisgICAgICAgICogcGxh
dGZvcm0vcXQvU2Nyb2xsVmlld0NhbnZhc1F0Lmg6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Ny
b2xsVmlld1F0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRUaW1lclF0OjppbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TdHJpbmdRdC5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vcXQvU3lzdGVtVGltZVF0LmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0
L1RleHRFZGl0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1UZXh0RWRpdDo6UGxh
dGZvcm1UZXh0RWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVRleHRFZGl0Ojp+UGxh
dGZvcm1UZXh0RWRpdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVRleHRFZGl0OjpzZXRQ
YXJlbnRXaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1dpZGdldFF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldpZGdldDo6c2V0UVdpZGdldCk6CisKKzIwMDYtMDgtMjQgIE5pa29sYXMg
WmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBhbmQg
bGFuZGVkIGJ5IEFuZGVycy4KIAogICAgICAgICBGaXhlcyBwYXJ0cyBvZjogaHR0cDovL2J1Z3pp
bGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ2NwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9UZXh0RWRpdFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1RleHRFZGl0UXQuY3BwCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
cXQvVGV4dEVkaXRRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI0LDEwICsyNCwxMCBAQAogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KIAotI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlICJjb25maWcu
aCIKKwogI2luY2x1ZGUgPFFUZXh0RWRpdD4KIAotI2luY2x1ZGUgPGNvbmZpZy5oPgogI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAi
VGV4dERpcmVjdGlvbi5oIgpAQCAtNDIsMTcgKzQyLDE0IEBACiBQbGF0Zm9ybVRleHRFZGl0OjpQ
bGF0Zm9ybVRleHRFZGl0KFdpZGdldCogcGFyZW50KQogICAgIDogU2Nyb2xsVmlldygpCiB7Ci0g
ICAgcURlYnVnKCJQbGF0Zm9ybVRleHRFZGl0OjpQbGF0Zm9ybVRleHRFZGl0KCksIHRoaXM9JXAi
LCB0aGlzKTsKIH0KIAogUGxhdGZvcm1UZXh0RWRpdDo6flBsYXRmb3JtVGV4dEVkaXQoKQogewot
ICAgIHFEZWJ1ZygiUGxhdGZvcm1UZXh0RWRpdDo6flBsYXRmb3JtVGV4dEVkaXQoKSIpOwogfQog
CiB2b2lkIFBsYXRmb3JtVGV4dEVkaXQ6OnNldFBhcmVudFdpZGdldChRV2lkZ2V0KiBwYXJlbnQp
CiB7Ci0gICAgcURlYnVnKCJQbGF0Zm9ybVRleHRFZGl0OjpzZXRQYXJlbnRXaWRnZXQoKSwgcGFy
ZW50PSVwIiwgcGFyZW50KTsKICAgICBXaWRnZXQ6OnNldFBhcmVudFdpZGdldChwYXJlbnQpOwog
CiAgICAgUVRleHRFZGl0ICp3aWRnZXQgPSBuZXcgUVRleHRFZGl0KHBhcmVudCwgIiIpOwpAQCAt
MjAxLDUgKzE5OCwzIEBACiB9CiAKIH0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vcXQvRm9udENhY2hlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vcXQvRm9udENhY2hlUXQuY3BwCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vcXQvRm9udENhY2hlUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC00OCw3ICs0OCw3
IEBACiAKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKLSAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURh
dGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7CisgICAg
cmV0dXJuIDA7CiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250JiBmb250KQpAQCAtNjEsOSArNjEsNyBAQAogCiBGb250
UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
KQogewotICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250
RGVzY3JpcHRpb24sIGZhbWlseSk7CiB9CiAKIH0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvRnJhbWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vcXQvRnJhbWVRdC5oCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vcXQvRnJhbWVRdC5oCShBcmJlaXRza29waWUpCkBAIC00OSw3ICs0OSw4IEBACiAgICAgdmly
dHVhbCB2b2lkIHN1Ym1pdEZvcm0oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmLCBj
b25zdCBGb3JtRGF0YSopID0gMDsKIH07CiAKLWNsYXNzIEZyYW1lUXQgOiBwdWJsaWMgRnJhbWUs
IHB1YmxpYyBSZXNvdXJjZUxvYWRlckNsaWVudCB7CitjbGFzcyBGcmFtZVF0IDogcHVibGljIEZy
YW1lLAorICAgICAgICAgICAgICAgIHB1YmxpYyBSZXNvdXJjZUxvYWRlckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgRnJhbWVRdChRV2lkZ2V0KiBwYXJlbnQpOwogICAgIEZyYW1lUXQoKTsKQEAgLTEz
Niw3ICsxMzcsNyBAQAogCiAgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkUmVzcG9uc2UoUmVzb3Vy
Y2VMb2FkZXIqLCBQbGF0Zm9ybVJlc3BvbnNlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWRE
YXRhKFJlc291cmNlTG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlY2VpdmVkQWxsRGF0YShSZXNvdXJjZUxvYWRlciosUGxhdGZvcm1EYXRhKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVjZWl2ZWRBbGxEYXRhKFJlc291cmNlTG9hZGVyKiwgUGxhdGZvcm1EYXRhKTsK
IAogICAgIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7CiAKQEAgLTE1MSw1
ICsxNTIsMyBAQAogfQogCiAjZW5kaWYKLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vcXQvSW1hZ2VTb3VyY2VRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9JbWFnZVNvdXJjZVF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L0ltYWdlU291cmNlUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC0xODcs
NSArMTg3LDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9JbnRQb2ludFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3F0L0ludFBvaW50UXQuY3BwCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vcXQvSW50UG9pbnRRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTQ0LDUgKzQ0LDMgQEAKIH0K
IAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTEzNyw3ICsxMzcs
NyBAQAogICAgIH0KIAogICAgIFFQaXhtYXAgcGl4bWFwOwotICAgIFFQYWludGVyICpwYWludGVy
OworICAgIFFQYWludGVyKiBwYWludGVyOwogICAgIHFyZWFsIG9wYWNpdHk7CiB9OwogCkBAIC0x
OTUsNyArMTk1LDcgQEAKICAgICBwYWludGVyID0gcDsKICAgICByZWRpcmVjdCA9IDA7CiAKLSAg
ICAvLyBUT0RPOiBNYXliZSBvbmx5IGVuYWJsZSBpbiBTVkcgbW9kZT8KKyAgICAvLyBGSVhNRTog
TWF5YmUgb25seSBlbmFibGUgaW4gU1ZHIG1vZGU/CiAgICAgcGFpbnRlci0+c2V0UmVuZGVySGlu
dChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKIH0KIApAQCAtMjA1LDcgKzIwNSw3IEBACiAKIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0KQogICAgIDogbV9jb21tb24oY3JlYXRlR3JhcGhpY3NDb250ZXh0UHJpdmF0ZSgpKQot
ICAgICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjb250ZXh0
KSkKKyAgICAsIG1fZGF0YShuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNvbnRl
eHQpKQogewogICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNvbnRleHQpOwogfQpAQCAtMjQzLDcg
KzI0Myw3IEBACiAgICAgaWYgKG1fZGF0YS0+c2hhZG93LmlzTnVsbCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBUZXh0U2hhZG93ICpzaGFkb3cgPSAmbV9kYXRhLT5zaGFkb3c7CisgICAgVGV4
dFNoYWRvdyogc2hhZG93ID0gJm1fZGF0YS0+c2hhZG93OwogCiAgICAgaWYgKHNoYWRvdy0+Ymx1
ciA8PSAwKSB7CiAgICAgICAgIFBlbiBwID0gcGVuKCk7CkBAIC0yNTIsNyArMjUyLDcgQEAKICAg
ICAgICAgc2V0UGVuKHApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IGludCB0aGlja25l
c3MgPSBzaGFkb3ctPmJsdXI7Ci0gICAgICAgIC8vICMjIyBPUFRJTUlaRTogbGltaXQgdGhlIGFy
ZWEgdG8gb25seSB0aGUgYWN0dWFsbHkgcGFpbnRlZCBhcmVhICsgMip0aGlja25lc3MKKyAgICAg
ICAgLy8gRklYTUU6IE9QVElNSVpFOiBsaW1pdCB0aGUgYXJlYSB0byBvbmx5IHRoZSBhY3R1YWxs
eSBwYWludGVkIGFyZWEgKyAyKnRoaWNrbmVzcwogICAgICAgICBjb25zdCBpbnQgdyA9IG1fZGF0
YS0+cCgpLmRldmljZSgpLT53aWR0aCgpOwogICAgICAgICBjb25zdCBpbnQgaCA9IG1fZGF0YS0+
cCgpLmRldmljZSgpLT5oZWlnaHQoKTsKICAgICAgICAgY29uc3QgUVJnYiBjb2xvciA9IHFSZ2Io
MjU1LCAyNTUsIDI1NSk7CkBAIC00MjEsNyArNDIxLDcgQEAKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPnAoKS5kcmF3Q29udmV4UG9s
eWdvbigoUVBvaW50Kilwb2ludHMsIG5wb2ludHMpOworICAgIG1fZGF0YS0+cCgpLmRyYXdDb252
ZXhQb2x5Z29uKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUVBvaW50Kj4ocG9pbnRzKSwgbnBvaW50
cyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgYykKQEAgLTQ1OCw3ICs0NTgsNyBAQAogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGb2N1c1JpbmdDbGlwKGNvbnN0
IEludFJlY3QgJnJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rm9jdXNSaW5nQ2xpcChj
b25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTYyNiw3ICs2MjYsNyBAQAogICAgIG1fZGF0YS0+cCgpLnNldENvbXBv
c2l0aW9uTW9kZSh0b1F0Q29tcG9zaXRpb25Nb2RlKG9wKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwKGNvbnN0IFBhdGggJnBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTc1Niw1ICs3NTYsMyBAQAogI2VuZGlmCiAKIH0KLQotLy8gdmltOiB0
cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YS5oCShS
ZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFBsYXRmb3JtRGF0YS5o
CShBcmJlaXRza29waWUpCkBAIC0zOSw4ICszOSw4IEBACiAKIGNsYXNzIEZvbnRQbGF0Zm9ybURh
dGEgewogcHVibGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgb3RoZXIpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBvdGhlcik7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZv
cm1EYXRhJik7CisgICAgRm9udFBsYXRmb3JtRGF0YSYgb3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmKTsKIAogICAgIGNsYXNzIERlbGV0ZWQgeyB9OwogICAgIEZvbnRQbGF0Zm9ybURh
dGEoRGVsZXRlZCk7CkBAIC01Niw3ICs1Niw3IEBACiAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3Q7CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIp
IGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgUUZvbnQgbV9mb250OwpAQCAtNjUsNSArNjUsMyBAQAogfQog
CiAjZW5kaWYKLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
cXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC0zNCw3
ICszNCw3IEBACiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgogCi0jaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPFFIYXNoPgogI2lu
Y2x1ZGUgPFFGb250SW5mbz4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTgsNSArOTgsMyBA
QAogfQogCiB9Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L3F0L0Nvb2tpZUphclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0Nv
b2tpZUphclF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0Nv
b2tpZUphclF0LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtNTQsNSArNTQsMyBAQAogfQogCiB9Ci0K
LS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3Jt
S2V5Ym9hcmRFdmVudFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Bs
YXRmb3JtS2V5Ym9hcmRFdmVudFF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3F0L1BsYXRmb3JtS2V5Ym9hcmRFdmVudFF0LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAt
MzE2LDcgKzMxNiw3IEBACiAgICAgICAgICAgICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBrZXkg
Y2FzZSAneic6IGNhc2UgJ1onOiByZXR1cm4gMHg1QTsKICAgICAgICAgY2FzZSBRdDo6S2V5X01l
dGE6CiAgICAgICAgICAgICByZXR1cm4gVktfTFdJTjsgLy8gKDVCKSBMZWZ0IFdpbmRvd3Mga2V5
IChNaWNyb3NvZnQgTmF0dXJhbCBrZXlib2FyZCkKLSAgICAgICAgLy9jYXNlIFF0OjpLZXlfTWV0
YV9SOiBUT0RPOiBXaGF0IHRvIGRvIGhlcmU/CisgICAgICAgIC8vY2FzZSBRdDo6S2V5X01ldGFf
UjogRklYTUU6IFdoYXQgdG8gZG8gaGVyZT8KICAgICAgICAgLy8gICAgcmV0dXJuIFZLX1JXSU47
IC8vICg1QykgUmlnaHQgV2luZG93cyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCiAgICAgICAgICAg
ICAvLyBWS19BUFBTICg1RCkgQXBwbGljYXRpb25zIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKICAg
ICAgICAgICAgIC8vIFZLX1NMRUVQICg1RikgQ29tcHV0ZXIgU2xlZXAga2V5CkBAIC00MjIsNyAr
NDIyLDcgQEAKIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KFFL
ZXlFdmVudCogZXZlbnQsIGJvb2wgaXNLZXlVcCkKIHsKICAgICBtX3RleHQgPSBldmVudC0+dGV4
dCgpOwotICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVudC0+dGV4dCgpOyAvLyBUT0RPOiBub3Qg
Y29ycmVjdAorICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVudC0+dGV4dCgpOyAvLyBGSVhNRTog
bm90IGNvcnJlY3QKICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yUXRLZXlD
b2RlKGV2ZW50LT5rZXkoKSk7CiAgICAgbV9pc0tleVVwID0gaXNLZXlVcDsKICAgICBtX2F1dG9S
ZXBlYXQgPSBldmVudC0+aXNBdXRvUmVwZWF0KCk7CkBAIC00MzUsNSArNDM1LDMgQEAKIH0KIAog
fQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNv
dXJjZUxvYWRlck1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Jl
c291cmNlTG9hZGVyTWFuYWdlci5oCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZv
cm0vcXQvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmgJKEFyYmVpdHNrb3BpZSkKQEAgLTY5LDUgKzY5
LDMgQEAKIH0KIAogI2VuZGlmCi0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3F0L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShSZXZpc2lvbiAxNjAxMykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vcXQvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkoQXJiZWl0c2tvcGll
KQpAQCAtMTkwLDUgKzE5MCwzIEBACiBEZXByZWNhdGVkU3RyaW5nIHNpZ25lZFB1YmxpY0tleUFu
ZENoYWxsZW5nZVN0cmluZyh1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IERlcHJlY2F0ZWRT
dHJpbmcgJmNoYWxsZW5nZVN0cmluZywgY29uc3QgS1VSTCAmdXJsKSB7IHJldHVybiBEZXByZWNh
dGVkU3RyaW5nKCk7IH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmgJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmgJKEFyYmVpdHNrb3BpZSkKQEAgLTI5LDExICsyOSw4IEBA
CiAjZGVmaW5lIFNoYXJlZFRpbWVyUXRRdF9ICiAKICNpbmNsdWRlICJTaGFyZWRUaW1lclF0Lmgi
Ci0KICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgorCiAjaW5jbHVkZSA8UVRp
bWVyPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Myw3ICs1MCw3IEBACiAgICAgfQogCiBw
dWJsaWM6Ci0gICAgc3RhdGljIFNoYXJlZFRpbWVyUXQgKmluc3QoKQorICAgIHN0YXRpYyBTaGFy
ZWRUaW1lclF0KiBpbnN0KCkKICAgICB7CiAgICAgICAgIGlmICghc19zZWxmKQogICAgICAgICAg
ICAgc19zZWxmID0gbmV3IFNoYXJlZFRpbWVyUXQoKTsKQEAgLTc3LDUgKzc0LDMgQEAKIH0KIAog
I2VuZGlmCi0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0
L0N1cnNvclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0
LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0N1cnNvclF0LmNw
cAkoQXJiZWl0c2tvcGllKQpAQCAtOTAsOCArOTAsOCBAQAogICAgIH0KIAogcHVibGljOgotICAg
IHN0YXRpYyBDdXJzb3JzICpzZWxmKCk7Ci0gICAgc3RhdGljIEN1cnNvcnMgKnNfc2VsZjsKKyAg
ICBzdGF0aWMgQ3Vyc29ycyogc2VsZigpOworICAgIHN0YXRpYyBDdXJzb3JzKiBzX3NlbGY7CiAK
ICAgICBDdXJzb3IgQ3Jvc3NDdXJzb3I7CiAgICAgQ3Vyc29yIE1vdmVDdXJzb3I7CkBAIC0xMTEs
OSArMTExLDggQEAKIAogQ3Vyc29ycyogQ3Vyc29yczo6c2VsZigpCiB7Ci0gICAgaWYgKCFzX3Nl
bGYpIHsKLSAgICAgICAgc19zZWxmID0gbmV3IEN1cnNvcnM7Ci0gICAgfQorICAgIGlmICghc19z
ZWxmKQorICAgICAgICBzX3NlbGYgPSBuZXcgQ3Vyc29ycygpOwogCiAgICAgcmV0dXJuIHNfc2Vs
ZjsKIH0KQEAgLTIyMSw1ICsyMjAsMyBAQAogfQogCiB9Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbG9yUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vcXQvQ29sb3JRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9Db2xvclF0LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzIsNyArMzIsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbG9yOjpDb2xvcihjb25zdCBRQ29sb3IgJmMp
CitDb2xvcjo6Q29sb3IoY29uc3QgUUNvbG9yJiBjKQogICAgIDogbV9jb2xvcihtYWtlUkdCQShj
LnJlZCgpLCBjLmdyZWVuKCksIGMuYmx1ZSgpLCBjLmFscGhhKCkpKQogewogICAgIG1fdmFsaWQg
PSBjLmlzVmFsaWQoKTsKQEAgLTQ0LDUgKzQ0LDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQg
c3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9GbG9hdFBvaW50UXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvRmxvYXRQb2ludFF0LmNwcAkoUmV2aXNpb24g
MTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0Zsb2F0UG9pbnRRdC5jcHAJKEFyYmVpdHNr
b3BpZSkKQEAgLTQ0LDUgKzQ0LDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9Ccm93c2VyRXh0ZW5zaW9uUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvQnJvd3NlckV4dGVuc2lvblF0LmNwcAkoUmV2aXNp
b24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0Jyb3dzZXJFeHRlbnNpb25RdC5jcHAJ
KEFyYmVpdHNrb3BpZSkKQEAgLTkxLDUgKzkxLDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQg
c3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9HbHlwaE1hcFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0dseXBoTWFwUXQuY3BwCShSZXZpc2lvbiAxNjAx
MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvR2x5cGhNYXBRdC5jcHAJKEFyYmVpdHNrb3BpZSkK
QEAgLTQ0LDUgKzQ0LDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9xdC9GbG9hdFJlY3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9GbG9hdFJlY3RRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9GbG9hdFJlY3RRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTQ1LDUgKzQ1
LDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9MaXN0Qm94UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQv
TGlzdEJveFF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0xp
c3RCb3hRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTQyLDE3ICs0MiwxNCBAQAogICAgICwgX3dp
ZHRoKDAuMCkKICAgICAsIF93aWR0aEdvb2QoZmFsc2UpCiB7Ci0gICAgcURlYnVnKCJMaXN0Qm94
OjpMaXN0Qm94KCksIHRoaXM9JXAiLCB0aGlzKTsKIH0KIAogTGlzdEJveDo6fkxpc3RCb3goKQog
ewotICAgIHFEZWJ1ZygiTGlzdEJveDo6fkxpc3RCb3goKSwgdGhpcz0lcCIsIHRoaXMpOwogfQog
CiB2b2lkIExpc3RCb3g6OnNldFBhcmVudFdpZGdldChRV2lkZ2V0KiBwYXJlbnQpCiB7Ci0gICAg
cURlYnVnKCJMaXN0Qm94OjpzZXRQYXJlbnRXaWRnZXQoKSwgcGFyZW50PSVwIiwgcGFyZW50KTsK
ICAgICBTY3JvbGxWaWV3OjpzZXRQYXJlbnRXaWRnZXQocGFyZW50KTsKIAogICAgIFFfQVNTRVJU
KG1fbGlzdFdpZGdldCA9PSAwKTsKQEAgLTE3Nyw2ICsxNzQsNCBAQAogICAgICh2b2lkKSBuZXcg
UUxpc3RXaWRnZXRJdGVtKHN0cmluZywgbV9saXN0V2lkZ2V0KTsgLy8gTm8gdGhpcyBkb2VzIG5v
dCBsZWFrLi4uCiB9CiAKLX07Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0Cit9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3F0L0FmZmluZVRyYW5zZm9ybVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3F0L0FmZmluZVRyYW5zZm9ybVF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3F0L0FmZmluZVRyYW5zZm9ybVF0LmNwcAkoQXJiZWl0c2tvcGll
KQpAQCAtMTY1LDUgKzE2NSwzIEBACiB9CiAKIH0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwCShBcmJlaXRza29waWUpCkBAIC0y
NTIsNSArMjUyLDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3Q2FudmFzUXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdDYW52YXNRdC5oCShSZXZpc2lvbiAxNjAxMykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld0NhbnZhc1F0LmgJKEFyYmVpdHNrb3BpZSkK
QEAgLTY1LDUgKzY1LDMgQEAKIH0KIAogI2VuZGlmCi0KLS8vIHZpbTogdHM9NCBzdz00IGV0Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZyYW1lUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vcXQvRnJhbWVRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9xdC9GcmFtZVF0LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMTQzLDExICsxNDMsMTIg
QEAKIHsKICAgICBxRGVidWcoIm9wZW5VUkwoJXMpIiwgdXJsLnVybCgpLmxhdGluMSgpKTsKICAg
ICBkaWRPcGVuVVJMKHVybCk7Ci0gICAgCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QocmVz
b3VyY2VSZXF1ZXN0KCkpOwotICAgIHJlcXVlc3QubV9yZXNwb25zZU1JTUVUeXBlID0gImltYWdl
L3N2Zyt4bWwiOwotICAgIHNldFJlc291cmNlUmVxdWVzdChyZXF1ZXN0KTsKIAorICAgIC8vIEZJ
WE1FOiBVc2UgbWltZXR5cGUgbG9naWMgZnJvbSBLSU8hCisgICAgLy8gUmVzb3VyY2VSZXF1ZXN0
IHJlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KCkpOworICAgIC8vIHJlcXVlc3QubV9yZXNwb25zZU1J
TUVUeXBlID0gImltYWdlL3N2Zyt4bWwiOworICAgIC8vIHNldFJlc291cmNlUmVxdWVzdChyZXF1
ZXN0KTsKKwogICAgIGJlZ2luKHVybCk7CiAgICAgUmVzb3VyY2VMb2FkZXIqIGpvYiA9IG5ldyBS
ZXNvdXJjZUxvYWRlcih0aGlzLCAiR0VUIiwgdXJsKTsKICAgICBqb2ItPnN0YXJ0KGRvY3VtZW50
KCktPmRvY0xvYWRlcigpKTsKQEAgLTE2NCw3ICsxNjUsNyBAQAogCiAgICAgZC0+bV9zdWJtaXR0
ZWRGb3JtVVJMID0gcmVxdWVzdC51cmwoKTsKIAotICAgIC8qIFRPRE86IE9uY2Ugd2UgaGF2ZSBh
IEtQYXJ0IC0gbmFtZWQgIkZyYW1lUGFydFF0IiAtIHdlIGNhbiBsZXQgdGhhdCBpbmhlcml0IGZy
b20gRnJhbWVRdENsaWVudCBhbmQgaW1wbGVtZW50IHRoZSBmdW5jdGlvbnMuLi4pCisgICAgLyog
RklYTUU6IE9uY2Ugd2UgaGF2ZSBhIEtQYXJ0IC0gbmFtZWQgIkZyYW1lUGFydFF0IiAtIHdlIGNh
biBsZXQgdGhhdCBpbmhlcml0IGZyb20gRnJhbWVRdENsaWVudCBhbmQgaW1wbGVtZW50IHRoZSBm
dW5jdGlvbnMuLi4pCiAgICAgaWYobV9jbGllbnQpCiAgICAgICAgIG1fY2xpZW50LT5zdWJtaXRG
b3JtKHJlcXVlc3QuZG9Qb3N0KCkgPyAiUE9TVCIgOiAiR0VUIiwgcmVxdWVzdC51cmwoKSwgJnJl
cXVlc3QucG9zdERhdGEpOwogICAgICovCkBAIC0xODEsNyArMTgyLDYgQEAKIHsKICAgICAvL25l
ZWQgdG8gcG90ZW50aWFsbHkgdXBkYXRlTG9jYXRpb25CYXIoc3RyLmFzY2lpKCkpOyBvciBub3Rp
Znkgc3lzIG9mIG5ldyB1cmwgbXliZSBldmVudCBvciBjYWxsYmFjawogICAgIGNvbnN0IEtVUkwg
dXJsID0gcmVxdWVzdC51cmwoKTsKLSAgICBwcmludGYoIi0tLS0tLS0tLS0tLS0tLS0tLT4gTE9B
RElORyBORVcgVVJMICVzIFxuIiwgdXJsLnVybCgpLmFzY2lpKCkpOwogICAgIGRpZE9wZW5VUkwo
dXJsKTsKICAgICBiZWdpbih1cmwpOwogICAgIFJlc291cmNlTG9hZGVyKiBqb2IgPSBuZXcgUmVz
b3VyY2VMb2FkZXIodGhpcywgIkdFVCIsIHVybCk7CkBAIC00OTgsMTEgKzQ5OCwxMSBAQAogCiAg
ICAgLy8gQ2hlY2sgZm9yIGNhc2VzIHdoZXJlIHdlIGFyZSB0b28gZWFybHkgZm9yIGV2ZW50cyAt
LSBwb3NzaWJsZSB1bm1hdGNoZWQga2V5IHVwCiAgICAgLy8gZnJvbSBwcmVzc2luZyByZXR1cm4g
aW4gdGhlIGxvY2F0aW9uIGJhci4KLSAgICBEb2N1bWVudCAqZG9jID0gZG9jdW1lbnQoKTsKKyAg
ICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQoKTsKICAgICBpZighZG9jKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBOb2RlICpub2RlID0gZG9jLT5mb2N1c05vZGUoKTsKKyAgICBOb2Rl
KiBub2RlID0gZG9jLT5mb2N1c05vZGUoKTsKICAgICBpZighbm9kZSkgewogICAgICAgICBpZiAo
ZG9jLT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICAgICAgbm9kZSA9IGRvYy0+Ym9keSgpOwpA
QCAtNTQzLDUgKzU0MywzIEBACiB9CiAKIH0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vcXQvUGF0aFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3F0L1BhdGhRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9QYXRoUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC0xMzMsOCArMTMzLDggQEAKIAogICAg
IGRvdWJsZSBzcGFuID0gMDsKIAotICAgIGRvdWJsZSB4cyAgICAgPSB4YyAtIHJhZGl1czsKLSAg
ICBkb3VibGUgeXMgICAgID0geWMgLSByYWRpdXM7CisgICAgZG91YmxlIHhzID0geGMgLSByYWRp
dXM7CisgICAgZG91YmxlIHlzID0geWMgLSByYWRpdXM7CiAgICAgZG91YmxlIHdpZHRoICA9IHJh
ZGl1cyoyOwogICAgIGRvdWJsZSBoZWlnaHQgPSByYWRpdXMqMjsKIApAQCAtMTQzLDcgKzE0Myw3
IEBACiAgICAgZWxzZSBpZiAoYW50aWNsb2Nrd2lzZSAmJiAoc2EgPCBlYSkpCiAgICAgICAgIHNw
YW4gLT0gMzYwOwogCi0gICAgLy8jIyMgdGhpcyBpcyBhbHNvIGR1ZSB0byBzd2l0Y2hlZCBjb29y
ZGluYXRlIHN5c3RlbQorICAgIC8vIHRoaXMgaXMgYWxzbyBkdWUgdG8gc3dpdGNoZWQgY29vcmRp
bmF0ZSBzeXN0ZW0KICAgICAvLyB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIDAgc3BhbiBpbnN0ZWFk
IG9mIDM2MAogICAgIGlmICghKHFGdXp6eUNvbXBhcmUoc3BhbiArIChlYSAtIHNhKSwgMC4wKSAm
JgogICAgICAgICAgIHFGdXp6eUNvbXBhcmUoYWJzKHNwYW4pLCAzNjAuMCkpKSB7CkBAIC0xNTIs
NiArMTUyLDcgQEAKIAogICAgIG1fcGF0aC0+bW92ZVRvKFFQb2ludEYoeGMgKyByYWRpdXMgICog
Y29zKHNhciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHljIC0gcmFkaXVzICAqIHNpbihz
YXIpKSk7CisKICAgICBtX3BhdGgtPmFyY1RvKHhzLCB5cywgd2lkdGgsIGhlaWdodCwgc2EsIHNw
YW4pOwogfQogCkBAIC0xNzEsNSArMTcyLDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9
NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9MaW5lRWRpdFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0xpbmVFZGl0UXQuY3BwCShSZXZpc2lvbiAxNjAxMykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvTGluZUVkaXRRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAg
LTI2LDcgKzI2LDYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbmNsdWRlIDxRRGVidWc+
CiAjaW5jbHVkZSA8UUxpbmVFZGl0PgogCiAjaW5jbHVkZSA8Y29uZmlnLmg+CkBAIC00NSwxNyAr
NDQsMTQgQEAKICAgICA6IG1fbGluZUVkaXQoMCkKICAgICAsIG1fdHlwZSh0eXBlKQogewotICAg
IHFEZWJ1ZygiUGxhdGZvcm1MaW5lRWRpdDo6UGxhdGZvcm1MaW5lRWRpdCgpLCB0aGlzPSVwIiwg
dGhpcyk7CiB9CiAKIFBsYXRmb3JtTGluZUVkaXQ6On5QbGF0Zm9ybUxpbmVFZGl0KCkKIHsKLSAg
ICBxRGVidWcoIlBsYXRmb3JtTGluZUVkaXQ6On5QbGF0Zm9ybUxpbmVFZGl0KCkiKTsKIH0KIAog
dm9pZCBQbGF0Zm9ybUxpbmVFZGl0OjpzZXRQYXJlbnRXaWRnZXQoUVdpZGdldCogcGFyZW50KQog
ewotICAgIHFEZWJ1ZygiUGxhdGZvcm1MaW5lRWRpdDo6c2V0UGFyZW50V2lkZ2V0KCksIHBhcmVu
dD0lcCIsIHBhcmVudCk7CiAgICAgV2lkZ2V0OjpzZXRQYXJlbnRXaWRnZXQocGFyZW50KTsKIAog
ICAgIFFfQVNTRVJUKG1fbGluZUVkaXQgPT0gMCk7CkBAIC0yMzYsNSArMjMyLDMgQEAKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybU1vdXNlRXZlbnRRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybU1vdXNlRXZlbnRRdC5jcHAJKFJldmlzaW9uIDE2
MDEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybU1vdXNlRXZlbnRRdC5jcHAJKEFy
YmVpdHNrb3BpZSkKQEAgLTU0LDUgKzU0LDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9
NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZXNvdXJjZUxvYWRlckN1cmwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVzb3VyY2VMb2FkZXJDdXJsLmNwcAko
UmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyQ3Vy
bC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTY1LDcgKzY1LDcgQEAKICAgICAgICAgZC0+cmVzcG9u
c2VIZWFkZXJzID0gRGVwcmVjYXRlZFN0cmluZzo6ZnJvbVV0ZjgoZC0+cmVzcG9uc2UudG9VdGY4
KCksIGQtPnJlc3BvbnNlLmxlbmd0aCgpKTsKICAgICAgICAgZC0+YXNzZW1ibGVkUmVzcG9uc2VI
ZWFkZXJzID0gdHJ1ZTsKICAKLSAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgY2xpZW50IGFjdGl2
YXRpb24gdG8gcmVjZWl2ZWRSZXNwb25zZSgpLCBvbmNlCisgICAgICAgIC8vIEZJWE1FOiBNb3Zl
IHRoZSBjbGllbnQgYWN0aXZhdGlvbiB0byByZWNlaXZlZFJlc3BvbnNlKCksIG9uY2UKICAgICAg
ICAgLy8gd2UgdXNlIEtJTywgYW5kIHJlY2VpdmVkUmVzcG9uc2UoKSBpcyBjYWxsZWQgb25seSBv
bmNlLgogICAgICAgICBpZiAoZC0+Y2xpZW50KSB7CiAgICAgICAgICAgICBkLT5jbGllbnQtPnJl
Y2VpdmVkUmVzcG9uc2UoY29uc3RfY2FzdDxSZXNvdXJjZUxvYWRlciAqPih0aGlzKSwgKGNoYXIg
KikgZC0+cmVzcG9uc2UuZGF0YSgpKTsKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgZC0+cmV0
cmlldmVkQ2hhcnNldCA9IHRydWU7CiAgICAgfQogCi0gICAgLy8gVE9ETzogV2UgY2FuIGp1c3Qg
cGFyc2UgdGhlIGhlYWRlcnMgaGVyZSwgYnV0IG9uY2Ugd2UgdXNlIEtJTworICAgIC8vIEZJWE1F
OiBXZSBjYW4ganVzdCBwYXJzZSB0aGUgaGVhZGVycyBoZXJlLCBidXQgb25jZSB3ZSB1c2UgS0lP
CiAgICAgLy8gd2UgY2FuIHNldCB0aGUgcmVzcG9uc2UgcGFyYW1ldGVyIHRvIHN0aC4gZWxzZSB0
aGFuIGEgImNoYXIqIi4KICAgICAvLyBJIHNhdmUgbXkgdGltZSBidXQgbm90IGltcGxlbWVudGlu
ZyBpdCBmb3Igbm93IDotKQogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC05NCw3ICs5NCw3IEBA
CiAgICAgZC0+YXNzZW1ibGVkUmVzcG9uc2VIZWFkZXJzID0gZmFsc2U7CiAgICAgZC0+cmV0cmll
dmVkQ2hhcnNldCA9IGZhbHNlOwogCi0gICAgLy8gVE9ETzogVGhpcyBpcyBmbGF3ZWQ6CisgICAg
Ly8gRklYTUU6IFRoaXMgaXMgZmxhd2VkOgogICAgIC8vIC0gdXN1YWxseSByZWNlaXZlZFJlc3Bv
bnNlKCkgc2hvdWxkIGJlIGNhbGxlZCBfb25jZV8sIHdoZW4gdGhlCiAgICAgLy8gICByZXNwb25z
ZSBpcyBhdmFpbGFibGUgLSBzZWVtcyB2ZXJ5IHVuZmxleGlibGUgdG8gZG8gdGhhdCB3aXRoIGxp
YmN1cmwKICAgICAvLyAgIChzbyBsZXQncyB3YWl0IHVudGlsIGl0IGRpZXMgYW5kIGRvIGl0IHBy
b3Blcmx5IHdpdGggS0lPIHRoZW4uKQpAQCAtMTA2LDUgKzEwNiwzIEBACiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vcXQvRm9udERhdGFRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9Gb250RGF0YVF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0
L0ZvbnREYXRhUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC03OCw1ICs3OCwzIEBACiB9CiAKIH0K
LQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC0yMywxMyArMjMsMTMgQEAKICAqCiAgKi8KIAor
I2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVkZSA8UVN0eWxlPgogI2luY2x1ZGUgPFFXaWRn
ZXQ+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVN0eWxlT3B0aW9uQnV0dG9uPgog
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCkBAIC03OSw3ICs3OSw3IEBACiAKICAgICBib29sIHN1
cHBvcnRzRm9jdXMoRUFwcGVhcmFuY2UpIGNvbnN0OwogCi0gICAgYm9vbCBzdHlsZVBhaW50ZXJB
bmRXaWRnZXRGb3JQYWludEluZm8oY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBRU3R5
bGUqJiwgUVBhaW50ZXIqJiwgUVdpZGdldComKSBjb25zdDsKKyAgICBib29sIGdldFN0eWxlUGFp
bnRlckFuZFdpZGdldEZyb21QYWludEluZm8oY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
LCBRU3R5bGUqJiwgUVBhaW50ZXIqJiwgUVdpZGdldComKSBjb25zdDsKICAgICBFQXBwZWFyYW5j
ZSBhcHBseVRoZW1lKFFTdHlsZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNvbnN0OwogfTsKIApA
QCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lUXQ6OnN0eWxl
UGFpbnRlckFuZFdpZGdldEZvclBhaW50SW5mbyhjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgUVN0eWxlKiYgc3R5bGUsIFFQYWludGVyKiYgcGFpbnRlciwgUVdpZGdldComIHdpZGdl
dCkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6Z2V0U3R5bGVQYWludGVyQW5kV2lkZ2V0RnJv
bVBhaW50SW5mbyhjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgUVN0eWxlKiYgc3R5
bGUsIFFQYWludGVyKiYgcGFpbnRlciwgUVdpZGdldComIHdpZGdldCkgY29uc3QKIHsKICAgICBw
YWludGVyID0gKGkucCA/IHN0YXRpY19jYXN0PFFQYWludGVyKj4oaS5wLT5wbGF0Zm9ybUNvbnRl
eHQoKSkgOiAwKTsKICAgICB3aWRnZXQgPSAocGFpbnRlciA/IHN0YXRpY19jYXN0PFFXaWRnZXQq
PihwYWludGVyLT5kZXZpY2UoKSkgOiAwKTsKQEAgLTIwMSw4ICsyMDEsOCBAQAogICAgIGlmICgh
aXNFbmFibGVkKG8pKQogICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHlsZTo6U3RhdGVfRW5h
YmxlZDsKIAotICAgIGlmIChpc1JlYWRPbmx5Q29udHJvbChvKSkKLSAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmVhZE9ubHk7IC8vIFJlYWRvbmx5IGlzIHN1cHBvcnRlZCBv
biB0ZXh0ZmllbGRzLgorICAgIGlmIChpc1JlYWRPbmx5Q29udHJvbChvKSkgLy8gUmVhZG9ubHkg
aXMgc3VwcG9ydGVkIG9uIHRleHRmaWVsZHMuCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1JlYWRPbmx5OwogCiAgICAgaWYgKHN1cHBvcnRzRm9jdXMoby0+c3R5bGUoKS0+
YXBwZWFyYW5jZSgpKSAmJiBpc0ZvY3VzZWQobykpCiAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX0hhc0ZvY3VzOwpAQCAtMjMxLDcgKzIzMSw3IEBACiAgICAgUVBhaW50ZXIq
IHBhaW50ZXIgPSAwOwogICAgIFFXaWRnZXQqIHdpZGdldCA9IDA7CiAgICAgCi0gICAgaWYgKCFz
dHlsZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWludEluZm8oaSwgc3R5bGUsIHBhaW50ZXIsIHdpZGdl
dCkpCisgICAgaWYgKCFnZXRTdHlsZVBhaW50ZXJBbmRXaWRnZXRGcm9tUGFpbnRJbmZvKGksIHN0
eWxlLCBwYWludGVyLCB3aWRnZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBR
U3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwpAQCAtMjYyLDcgKzI2Miw3IEBACiAgICAgUVBhaW50
ZXIqIHBhaW50ZXIgPSAwOwogICAgIFFXaWRnZXQqIHdpZGdldCA9IDA7CiAgICAgCi0gICAgaWYg
KCFzdHlsZVBhaW50ZXJBbmRXaWRnZXRGb3JQYWludEluZm8oaSwgc3R5bGUsIHBhaW50ZXIsIHdp
ZGdldCkpCisgICAgaWYgKCFnZXRTdHlsZVBhaW50ZXJBbmRXaWRnZXRGcm9tUGFpbnRJbmZvKGks
IHN0eWxlLCBwYWludGVyLCB3aWRnZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgCiAgICAg
UVN0eWxlT3B0aW9uIG9wdGlvbjsKQEAgLTI3MiwxMiArMjcyLDEwIEBACiAgICAgUV9BU1NFUlQo
YXBwZWFyYW5jZSA9PSBUZXh0RmllbGRBcHBlYXJhbmNlKTsKIAogICAgIC8vIE5vdyBwYWludCB0
aGUgdGV4dCBmaWVsZC4KLSAgICAvLyBUT0RPOiB0aGlzIGlzIG5vdCBlbm91Z2ggZm9yIHN1cmUh
ICh1c2UgJ29wdGlvbicuLi4pCisgICAgLy8gRklYTUU6IHRoaXMgaXMgbm90IGVub3VnaCBmb3Ig
c3VyZSEgKHVzZSAnb3B0aW9uJy4uLikKICAgICBwYWludGVyLT5kcmF3UmVjdChyKTsKIAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9TeXN0ZW1UaW1lUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vcXQvU3lzdGVtVGltZVF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3F0L1N5c3RlbVRpbWVRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTQwLDUgKzQw
LDMgQEAKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZXNvdXJjZUxvYWRlck1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vcXQvUmVzb3VyY2VMb2FkZXJNYW5hZ2VyLmNwcAkoUmV2aXNpb24gMTYwMTMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL3F0L1Jlc291cmNlTG9hZGVyTWFuYWdlci5jcHAJKEFyYmVpdHNr
b3BpZSkKQEAgLTIxNSw3ICsyMTUsNyBAQAogICAgICAgICBzdHJuY3B5KHBvc3REYXRhU3RyaW5n
LCBwb3N0RGF0YS5hc2NpaSgpLCBwb3N0RGF0YS5sZW5ndGgoKSk7CiAgICAgICAgIHBvc3REYXRh
U3RyaW5nW3Bvc3REYXRhLmxlbmd0aCgpXSA9ICdcMCc7CiAKLSAgICAgICAgLy8gVE9ETzogRG8g
aXQgcHJvcGVybHkgYWZ0ZXIgd2UgZ290IHJpZCBvZiBsaWJjdXJsISAoYWxzbyBsZWFrcyB0aGUg
aGVhZGVybGlzdC4gaG1wZi4pCisgICAgICAgIC8vIEZJWE1FOiBEbyBpdCBwcm9wZXJseSBhZnRl
ciB3ZSBnb3QgcmlkIG9mIGxpYmN1cmwhIChhbHNvIGxlYWtzIHRoZSBoZWFkZXJsaXN0LiBobXBm
LikKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklF
TERTLCBwb3N0RGF0YVN0cmluZyk7CiAgICAgfQogCkBAIC0yNDMsNSArMjQzLDMgQEAKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9TdHJpbmdRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9xdC9TdHJpbmdRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9xdC9TdHJpbmdRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2lu
Y2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKIApAQCAtNTYsNSArNTcsMyBAQAogfQogCiB9Ci0K
LS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ZvbnRRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9Gb250UXQuY3BwCShSZXZpc2lv
biAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvRm9udFF0LmNwcAkoQXJiZWl0c2tvcGll
KQpAQCAtNDEsNyArNDEsNiBAQAogCiBGb250OjpvcGVyYXRvciBRRm9udCgpIGNvbnN0CiB7Ci0g
ICAgUV9BU1NFUlQocHJpbWFyeUZvbnQoKSAhPSAwKTsKICAgICByZXR1cm4gcHJpbWFyeUZvbnQo
KS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpOwogfQogCkBAIC02Miw3ICs2MSw3IEBACiAKIHZvaWQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAog
ewotICAgIC8vICMjIyBzdHlsZSwgcnVuLmZyb20oKS9sZW5ndGgoKSBjdXQtb2ZmCisgICAgLy8g
RklYTUU6IHN0eWxlLCBydW4uZnJvbSgpL2xlbmd0aCgpIGN1dC1vZmYKICAgICBjdHgtPnBsYXRm
b3JtQ29udGV4dCgpLT5kcmF3VGV4dChwb2ludC54KCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9pbnQueSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFFTdHJpbmc6OmZyb21SYXdEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUUNoYXIq
PihydW4uY2hhcmFjdGVycygpICsgcnVuLmZyb20oKSksIHJ1bi5sZW5ndGgoKSkpOwpAQCAtNzAs
MTEgKzY5LDkgQEAKIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJikgY29uc3QKIHsKLSAgICAvLyAjIyMgc3R5
bGUKKyAgICAvLyBGSVhNRTogc3R5bGUKICAgICBRRm9udE1ldHJpY3NGIG1ldHJpY3MocHJpbWFy
eUZvbnQoKS0+bV9mb250LmZvbnQoKSk7CiAgICAgcmV0dXJuIG1ldHJpY3Mud2lkdGgoUVN0cmlu
Zzo6ZnJvbVJhd0RhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBRQ2hhcio+KHJ1bi5jaGFyYWN0
ZXJzKCkgKyBydW4uZnJvbSgpKSwgcnVuLmxlbmd0aCgpKSk7CiB9CiAKIH0KLQotLy8gdmltOiB0
cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2hhcmVkVGltZXJRdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcAkoUmV2
aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L1NoYXJlZFRpbWVyUXQuY3BwCShB
cmJlaXRza29waWUpCkBAIC01MCw1ICs1MCwzIEBACiB9CiAKICNpbmNsdWRlICJTaGFyZWRUaW1l
clF0Lm1vYyIKLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
cXQvQ29tYm9Cb3hRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9Db21i
b0JveFF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L0NvbWJv
Qm94UXQuY3BwCShBcmJlaXRza29waWUpCkBAIC00MCwxNyArNDAsMTQgQEAKICAgICA6IFdpZGdl
dCgpCiAgICAgLCBtX2NvbWJvQm94KDApCiB7Ci0gICAgcURlYnVnKCJQbGF0Zm9ybUNvbWJvQm94
OjpQbGF0Zm9ybUNvbWJvQm94KCksIHRoaXM9JXAiLCB0aGlzKTsKIH0KIAogUGxhdGZvcm1Db21i
b0JveDo6flBsYXRmb3JtQ29tYm9Cb3goKQogewotICAgIHFEZWJ1ZygiUGxhdGZvcm1Db21ib0Jv
eDo6flBsYXRmb3JtQ29tYm9Cb3goKSwgdGhpcz0lcCIsIHRoaXMpOwogfQogCiB2b2lkIFBsYXRm
b3JtQ29tYm9Cb3g6OnNldFBhcmVudFdpZGdldChRV2lkZ2V0KiBwYXJlbnQpCiB7Ci0gICAgcURl
YnVnKCJQbGF0Zm9ybUNvbWJvQm94OjpzZXRQYXJlbnRXaWRnZXQoKSwgcGFyZW50PSVwIiwgcGFy
ZW50KTsKICAgICBXaWRnZXQ6OnNldFBhcmVudFdpZGdldChwYXJlbnQpOwogCiAgICAgUV9BU1NF
UlQobV9jb21ib0JveCA9PSAwKTsKQEAgLTcxLDcgKzY4LDcgQEAKIAogdm9pZCBQbGF0Zm9ybUNv
bWJvQm94OjphcHBlbmRHcm91cExhYmVsKGNvbnN0IERlcHJlY2F0ZWRTdHJpbmcmIHRleHQpCiB7
Ci0gICAgLy8gVE9ETzogR3JvdXAgbGFiZWw/CisgICAgLy8gRklYTUU6IEdyb3VwIGxhYmVsPwog
ICAgIG1fY29tYm9Cb3gtPmFkZEl0ZW0odGV4dCk7CiB9CiAKQEAgLTE0OSw1ICsxNDYsMyBAQAog
fQogCiB9Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0
L0ludFJlY3RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9JbnRSZWN0
UXQuY3BwCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvSW50UmVjdFF0
LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtNDQsNSArNDQsMyBAQAogfQogCiB9Ci0KLS8vIHZpbTog
dHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1BhZ2VRdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYWdlUXQuY3BwCShSZXZpc2lvbiAxNjAxMykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUGFnZVF0LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjcs
NyArMjcsNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2luY2x1ZGUgPFFEZWJ1Zz4KICNp
bmNsdWRlIDxRV2lkZ2V0PgogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC01NSwxOSArNTQsMTQg
QEAKICAgICBpZiAoIXdpZGdldCkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCi0gICAg
cURlYnVnKCkgPDwgIiBQYWdlOjp3aW5kb3dSZWN0KCkgLT4gIiA8PCAoUVJlY3RGKSB3aWRnZXQt
Pmdlb21ldHJ5KCk7CiAgICAgcmV0dXJuIChJbnRSZWN0KSB3aWRnZXQtPmdlb21ldHJ5KCk7CiB9
CiAKIHZvaWQgUGFnZTo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAg
cURlYnVnKCkgPDwgIiBQYWdlOjpzZXRXaW5kb3dSZWN0KCkgLT4gIiA8PCAoUVJlY3RGKSByOwot
CiAgICAgUVdpZGdldCogd2lkZ2V0ID0gcm9vdFdpbmRvd0ZvckZyYW1lKG1haW5GcmFtZSgpKTsK
ICAgICBpZiAod2lkZ2V0KQogICAgICAgICB3aWRnZXQtPnNldEdlb21ldHJ5KFFSZWN0KHFSb3Vu
ZChyLngoKSksIHFSb3VuZChyLnkoKSksIHFSb3VuZChyLndpZHRoKCkpLCBxUm91bmQoci5oZWln
aHQoKSkpKTsKIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9xdC9TY3JlZW5RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9x
dC9TY3JlZW5RdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9T
Y3JlZW5RdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTc2LDUgKzc2LDMgQEAKIH0KIAogfQotCi0v
LyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9JbWFnZVF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L0ltYWdlUXQuY3BwCShSZXZpc2lv
biAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvSW1hZ2VRdC5jcHAJKEFyYmVpdHNrb3Bp
ZSkKQEAgLTExMyw3ICsxMTMsNyBAQAogICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0
aW9uLgogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CiAKLSAgICBRUGFpbnRl
ciAqcGFpbnRlcihjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgUVBhaW50ZXIqIHBhaW50
ZXIoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCkpOwogCiAgICAgLy8gVGVzdCB1c2luZyBleGFtcGxl
IHNpdGUgYXQKICAgICAvLyBodHRwOi8vd3d3Lm1leWVyd2ViLmNvbS9lcmljL2Nzcy9lZGdlL2Nv
bXBsZXhzcGlyYWwvZGVtby5odG1sICAgIApAQCAtMTU4LDcgKzE1OCw3IEBACiAKICAgICAvLyBT
ZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KICAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24ob3ApOwotICAgIFFQYWludGVyICpwID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7Cisg
ICAgUVBhaW50ZXIqIHAgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICBwLT5kcmF3VGls
ZWRQaXhtYXAoZHN0UmVjdCwgcGl4KTsKIAogICAgIGN0eHQtPnJlc3RvcmUoKTsKQEAgLTE3Myw1
ICsxNzMsMyBAQAogfQogCiB9Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3F0L1dpZGdldFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3F0L1dpZGdldFF0LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0
L1dpZGdldFF0LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjksMTUgKzI5LDE0IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldpZGdldC5oIgogCi0jaW5jbHVkZSAiQ3Vy
c29yLmgiCiAjaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgIkN1cnNvci5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKIAotI2luY2x1ZGUgPFFEZWJ1Zz4KICNpbmNsdWRlIDxRV2lkZ2V0PgogCiAjZGVmaW5l
IG5vdEltcGxlbWVudGVkKCkgZG8geyBmcHJpbnRmKHN0ZGVyciwgIkZJWE1FOiBVTklNUExFTUVO
VEVEOiAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgfSB3aGlsZSgwKQpAQCAtMTMzLDcg
KzEzMiw3IEBACiAgICAgICAgIGRhdGEtPm1fd2lkZ2V0LT5oaWRlKCk7CiB9CiAKLXZvaWQgV2lk
Z2V0OjpzZXRRV2lkZ2V0KFFXaWRnZXQqY2hpbGQpCit2b2lkIFdpZGdldDo6c2V0UVdpZGdldChR
V2lkZ2V0KiBjaGlsZCkKIHsKICAgICBkZWxldGUgZGF0YS0+bV93aWRnZXQ7CiAgICAgZGF0YS0+
bV93aWRnZXQgPSBjaGlsZDsKQEAgLTI0Myw1ICsyNDIsMyBAQAogfQogCiB9Ci0KLS8vIHZpbTog
dHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0ludFNpemVRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9JbnRTaXplUXQuY3BwCShSZXZpc2lvbiAx
NjAxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvSW50U2l6ZVF0LmNwcAkoQXJiZWl0c2tvcGll
KQpAQCAtNDQsNSArNDQsMyBAQAogfQogCiB9Ci0KLS8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3F0L0Jyb3dzZXJFeHRlbnNpb25RdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvQnJvd3NlckV4dGVuc2lvblF0LmgJKFJldmlzaW9uIDE2MDEz
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9Ccm93c2VyRXh0ZW5zaW9uUXQuaAkoQXJiZWl0c2tv
cGllKQpAQCAtNTksNSArNTksMyBAQAogfQogCiAjZW5kaWYKLQotLy8gdmltOiB0cz00IHN3PTQg
ZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsVmlld0NhbnZhc1F0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbFZpZXdDYW52YXNRdC5jcHAJKFJl
dmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxWaWV3Q2FudmFzUXQu
Y3BwCShBcmJlaXRza29waWUpCkBAIC0yOSwxMCArMjksMTEgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAorI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5jbHVkZSAiU2Nyb2xsVmlld0NhbnZhc1F0
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlld0NhbnZhc1F0Lm1vYyIKIAotI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkZyYW1lUXQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNs
dWRlICJUeXBpbmdDb21tYW5kLmgiCkBAIC00Miw3ICs0Myw2IEBACiAjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAKLSNp
bmNsdWRlIDxRRGVidWc+CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVBhaW50RXZl
bnQ+CiAjaW5jbHVkZSA8UU1vdXNlRXZlbnQ+CkBAIC0xNDksMTMgKzE0OSwxMiBAQAogICAgICAg
ICAgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KGZyYW1lLT5kb2N1bWVudCgp
LCBrZXZlbnQudGV4dCgpLCBmYWxzZSk7CiAKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIFRPRE86IGRv
U2Nyb2xsIHN0dWZmKCkhCisgICAgICAgIC8vIEZJWE1FOiBkb1Njcm9sbCBzdHVmZigpIQogICAg
IH0KIH0KIAogfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9rY2FudmFz
L2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRp
ZW50UXQuY3BwCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQv
S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTUx
LDcgKzUxLDcgQEAKIC8vIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQKIEtS
ZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50UXQ6OktSZW5kZXJpbmdQYWludFNlcnZl
ckxpbmVhckdyYWRpZW50UXQoKQogICAgIDogS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3Jh
ZGllbnQoKQotICAgICAgLCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdCgpCisgICAgLCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJRdCgpCiB7CiB9CiAKQEAgLTE0OCw2ICsxNDgsNyBAQAogLy8gS1JlbmRl
cmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdAogS1JlbmRlcmluZ1BhaW50U2VydmVyUmFk
aWFsR3JhZGllbnRRdDo6S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnRRdCgpCiAg
ICAgOiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCgpCisgICAgLCBLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJRdCgpCiB7CiB9CiAKQEAgLTI3Myw1ICsyNzQsMyBAQAogfQogCiB9Ci0K
LS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVy
UGF0aFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRl
clBhdGhRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9x
dC9SZW5kZXJQYXRoUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC0yMSwxMSArMjEsMTEgQEAKICAg
ICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICovCiAKLSNpbmNsdWRlIDxRRGVidWc+Ci0K
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoUXQuaCIKIAorI2luY2x1
ZGUgPFFEZWJ1Zz4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogUmVuZGVyUGF0aFF0OjpS
ZW5kZXJQYXRoUXQoUmVuZGVyU3R5bGUqIHN0eWxlLCBTVkdTdHlsZWRFbGVtZW50KiBub2RlKQpA
QCAtMzksNSArMzksMyBAQAogfQogCiB9Ci0KLS8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnRRdC5oCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnRRdC5oCShBcmJlaXRza29waWUpCkBA
IC01OSw1ICs1OSwzIEBACiB9CiAKICNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBX
ZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0LmgJKFJldmlzaW9uIDE2MDEzKQor
KysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuaAkoQXJiZWl0c2tvcGll
KQpAQCAtMzQsMTEgKzM0LDkgQEAKICAgICBSZW5kZXJQYXRoUXQoUmVuZGVyU3R5bGUqLCBTVkdT
dHlsZWRFbGVtZW50Kik7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd01hcmtl
cnNJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBLQ2Fu
dmFzUGF0aCAqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd01hcmtlcnNJZk5lZWRlZChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBLQ2FudmFzUGF0aCopIGNv
bnN0OwogfTsKIAogfQogCiAjZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29y
ZS9rY2FudmFzL2RldmljZS9xdC9LQ2FudmFzUGF0aFF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNQYXRoUXQuY3BwCShSZXZpc2lvbiAxNjAxMykK
KysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc1BhdGhRdC5jcHAJKEFyYmVpdHNr
b3BpZSkKQEAgLTg4LDUgKzg4LDMgQEAKIH0KIAogfQotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4
OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNDbGlwcGVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc0NsaXBwZXJRdC5jcHAJKFJl
dmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LQ2FudmFzQ2xpcHBl
clF0LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzEsOCArMzEsOCBAQAogCiB2b2lkIEtDYW52YXND
bGlwcGVyUXQ6OmFwcGx5Q2xpcChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdAog
ewotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gcmVuZGVyaW5nRGV2aWNl
KCktPmN1cnJlbnRDb250ZXh0KCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCAqcXRD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCAqPihjb250ZXh0
KTsKKyAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IHJlbmRlcmluZ0Rldmlj
ZSgpLT5jdXJyZW50Q29udGV4dCgpOworICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqIHF0
Q29udGV4dCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQqPihjb250ZXh0
KTsKICAgICBpZiAobV9jbGlwRGF0YS5jb3VudCgpIDwgMSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC00OCw3ICs0OCw3IEBACiAgICAgICAgIGlmIChjbGlwRGF0YS53aW5kUnVsZSgpICE9IGNsaXBS
dWxlKQogICAgICAgICAgICAgaGV0ZXJvZ2Vub3VzQ2xpcFJ1bGVzID0gdHJ1ZTsKICAgICAgICAK
LSAgICAgICAgUVBhaW50ZXJQYXRoIHBhdGggPSBzdGF0aWNfY2FzdDxLQ2FudmFzUGF0aFF0ICo+
KGNsaXBEYXRhLnBhdGguZ2V0KCkpLT5xdFBhdGgoKTsgCisgICAgICAgIFFQYWludGVyUGF0aCBw
YXRoID0gc3RhdGljX2Nhc3Q8S0NhbnZhc1BhdGhRdCo+KGNsaXBEYXRhLnBhdGguZ2V0KCkpLT5x
dFBhdGgoKTsgCiAgICAgICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCkBAIC0xMDQsMTEgKzEwNCwxMCBAQAogICAgICAgICAvLyB3ZSB3b3VsZCBoYXZlIHRv
IGRldGVjdCBzdWNoLCBkcmF3IHRvIGEgbWFzaywgYW5kIHRoZW4gY2xpcAogICAgICAgICAvLyB0
byB0aGF0IG1hc2sKICAgICAgICAgLy8gaWYgKCFDR0NvbnRleHRJc1BhdGhFbXB0eShjZ0NvbnRl
eHQpKSB7Ci0gICAgICAgICAgICBpZiAoY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REKSB7CisgICAg
ICAgICAgICBpZiAoY2xpcFJ1bGUgPT0gUlVMRV9FVkVOT0REKQogICAgICAgICAgICAgICAgIG5l
d1BhdGguc2V0RmlsbFJ1bGUoUXQ6Ok9kZEV2ZW5GaWxsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbmV3UGF0aC5zZXRGaWxsUnVsZShR
dDo6V2luZGluZ0ZpbGwpOwotICAgICAgICAgICAgfQogICAgICAgICAvLyB9CiAgICAgfQogCkBA
IC0xMTYsNSArMTE1LDMgQEAKIH0KIAogfQotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2Vy
dmVyU29saWRRdC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAt
MzcsNyArMzcsNyBAQAogCiBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0OjpLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJTb2xpZFF0KCkKICAgICA6IEtSZW5kZXJpbmdQYWludFNlcnZlclNvbGlkKCkK
LSAgICAgICwgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQoKQorICAgICwgS1JlbmRlcmluZ1BhaW50
U2VydmVyUXQoKQogewogfQogCkBAIC05Niw3ICs5Niw3IEBACiB2b2lkIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclNvbGlkUXQ6OnJlbmRlclBhdGgoS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFJlbmRlclBhdGgqIHBhdGgsIEtDUGFpbnRUYXJnZXRUeXBlIHR5cGUpIGNvbnN0
CiB7CiAgICAgUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlID0gcGF0aC0+c3R5bGUoKTsKLSAgICBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0ICpxdENvbnRleHQgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF0Kj4oY29udGV4dCk7CisgICAgS1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdCogcXRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdCo+
KGNvbnRleHQpOwogCiAgICAgaWYgKCh0eXBlICYgQVBQTFlfVE9fRklMTCkgJiYgS1NWR1BhaW50
ZXJGYWN0b3J5Ojppc0ZpbGxlZChyZW5kZXJTdHlsZSkpCiAgICAgICAgIHF0Q29udGV4dC0+Zmls
bFBhdGgoKTsKQEAgLTEwNiw1ICsxMDYsMyBAQAogfQogCiB9Ci0KLS8vIHZpbTp0cz00Om5vZXQK
SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VR
dC5jcHAJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVu
ZGVyaW5nRGV2aWNlUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC0yMTAsNSArMjEwLDMgQEAKIH0K
IAogfQotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0
L0tDYW52YXNQYXRoUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0
L0tDYW52YXNQYXRoUXQuaAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL3F0L0tDYW52YXNQYXRoUXQuaAkoQXJiZWl0c2tvcGllKQpAQCAtNTgsNSArNTgsMyBAQAog
fQogCiAjZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rY2FudmFzL2Rl
dmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0
LmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5k
ZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTQyLDcgKzQy
LDcgQEAKIC8vIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm5RdAogS1JlbmRlcmluZ1BhaW50
U2VydmVyUGF0dGVyblF0OjpLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuUXQoKQogICAgIDog
S1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybigpCi0gICAgICAsIEtSZW5kZXJpbmdQYWludFNl
cnZlclF0KCkKKyAgICAsIEtSZW5kZXJpbmdQYWludFNlcnZlclF0KCkKIHsKIH0KIApAQCAtMTI0
LDYgKzEyNCwzIEBACiB9CiAKIH0KLQotLy8gdmltOnRzPTQ6bm9ldAotCkluZGV4OiBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNDbGlwcGVyUXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNDbGlwcGVyUXQuaAkoUmV2aXNpb24gMTYwMTMp
CisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tDYW52YXNDbGlwcGVyUXQuaAkoQXJiZWl0
c2tvcGllKQpAQCAtNDAsNSArNDAsMyBAQAogfQogCiAjZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9l
dApJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJT
b2xpZFF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJTb2xpZFF0LmgJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9rY2Fu
dmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJTb2xpZFF0LmgJKEFyYmVpdHNrb3Bp
ZSkKQEAgLTQ2LDUgKzQ2LDMgQEAKIH0KIAogI2VuZGlmCi0KLS8vIHZpbTp0cz00Om5vZXQKSW5k
ZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50
U2VydmVyUXQuY3BwCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
cXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUXQuY3BwCShBcmJlaXRza29waWUpCkBAIC00MSwxOCAr
NDEsMTYgQEAKIHZvaWQgS1JlbmRlcmluZ1BhaW50U2VydmVyUXQ6OnNldFBlblByb3BlcnRpZXMo
Y29uc3QgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXImIHN0cm9rZVBhaW50ZXIsIFFQZW4mIHBlbikg
Y29uc3QKIHsKICAgICBwZW4uc2V0V2lkdGhGKHN0cm9rZVBhaW50ZXIuc3Ryb2tlV2lkdGgoKSk7
Ci0gICAgaWYgKHN0cm9rZVBhaW50ZXIuc3Ryb2tlQ2FwU3R5bGUoKSA9PSBDQVBfQlVUVCkgewor
ICAgIGlmIChzdHJva2VQYWludGVyLnN0cm9rZUNhcFN0eWxlKCkgPT0gQ0FQX0JVVFQpCiAgICAg
ICAgIHBlbi5zZXRDYXBTdHlsZShRdDo6RmxhdENhcCk7Ci0gICAgfSBlbHNlIGlmIChzdHJva2VQ
YWludGVyLnN0cm9rZUNhcFN0eWxlKCkgPT0gQ0FQX1JPVU5EKSB7CisgICAgZWxzZSBpZiAoc3Ry
b2tlUGFpbnRlci5zdHJva2VDYXBTdHlsZSgpID09IENBUF9ST1VORCkKICAgICAgICAgcGVuLnNl
dENhcFN0eWxlKFF0OjpSb3VuZENhcCk7Ci0gICAgfQogCiAgICAgaWYoc3Ryb2tlUGFpbnRlci5z
dHJva2VKb2luU3R5bGUoKSA9PSBKT0lOX01JVEVSKSB7CiAgICAgICAgIHBlbi5zZXRKb2luU3R5
bGUoUXQ6Ok1pdGVySm9pbik7CiAgICAgICAgIHBlbi5zZXRNaXRlckxpbWl0KChxcmVhbClzdHJv
a2VQYWludGVyLnN0cm9rZU1pdGVyTGltaXQoKSk7Ci0gICAgfSBlbHNlIGlmKHN0cm9rZVBhaW50
ZXIuc3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9ST1VORCkgeworICAgIGVsc2UgaWYoc3Ryb2tl
UGFpbnRlci5zdHJva2VKb2luU3R5bGUoKSA9PSBKT0lOX1JPVU5EKQogICAgICAgICBwZW4uc2V0
Sm9pblN0eWxlKFF0OjpSb3VuZEpvaW4pOwotICAgIH0KIAogICAgIEtDRGFzaEFycmF5IGRhc2hl
cyA9IHN0cm9rZVBhaW50ZXIuZGFzaEFycmF5KCk7CiAgICAgdW5zaWduZWQgaW50IGRhc2hMZW5n
dGggPSAhZGFzaGVzLmlzRW1wdHkoKSA/IGRhc2hlcy5jb3VudCgpIDogMDsKQEAgLTY5LDUgKzY3
LDMgQEAKIH0KIAogfQotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmgJKFJldmlzaW9uIDE2MDEzKQorKysg
V2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAkoQXJiZWl0c2tv
cGllKQpAQCAtOTEsNSArOTEsMyBAQAogfQogCiAjZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJ
bmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0
ZXJuUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJp
bmdQYWludFNlcnZlclBhdHRlcm5RdC5oCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVyblF0LmgJKEFyYmVpdHNr
b3BpZSkKQEAgLTQ2LDUgKzQ2LDMgQEAKIH0KIAogI2VuZGlmCi0KLS8vIHZpbTp0cz00Om5vZXQK
SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ1BhaW50U2VydmVyUXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdQYWlu
dFNlcnZlclF0LmgJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9x
dC9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdC5oCShBcmJlaXRza29waWUpCkBAIC00NSw1ICs0NSwz
IEBACiB9CiAKICNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10198</attachid>
            <date>2006-08-24 10:17:46 -0700</date>
            <delta_ts>2006-08-24 11:44:31 -0700</delta_ts>
            <desc>Last things required for a working Qt build!</desc>
            <filename>make-it-build.diff</filename>
            <type>text/plain</type>
            <size>6466</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDUgKzEsMjggQEAKIDIwMDYtMDgtMjQgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1h
bm5Aa2RlLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBGaXhlcyBwYXJ0cyBvZjogaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDQ2NworICAgICAgICBXZWJLaXQgc2hvdWxkIGhhdmUgUXQgcGxhdGZvcm0g
c3VwcG9ydAorCisgICAgICAgIEFkZGVkIFBMQVRGT1JNKFFUKSBob29rcyBpbiB0aGUgaW1hZ2Ut
ZGVjb2RlcnMvLCBhcworICAgICAgICB0aGV5IGFsc28gbmVlZCB0byB3b3JrIGZvciBRdCwgbm90
IG9ubHkgZm9yIENhaXJvLgorCisgICAgICAgIEFkZCBtaXNzaW5nIHF0LWVuY29kaW5ncy50eHQg
ZmlsZSwgcmVxdWlyZWQgZm9yIHRoZSBidWlsZC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIHBsYXRmb3JtL0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9xdC1lbmNvZGluZ3MudHh0OiBBZGRlZC4KKworMjAwNi0w
OC0yNCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8emltbWVybWFubkBrZGUub3JnPgorCiAgICAgICAg
IFJldmlld2VkIGFuZCBsYW5kZWQgYnkgQW5kZXJzLgogCiAgICAgICAgIEZpeGVzIHBhcnRzIG9m
OiBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDY3Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vRmxvYXRTaXplLmgJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9GbG9hdFNpemUuaAkoQXJiZWl0c2tvcGllKQpAQCAtMjcsNiArMjcsOCBAQAogI2lmbmRlZiBG
bG9hdFNpemVfaAogI2RlZmluZSBGbG9hdFNpemVfaAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKICNpZiBQTEFURk9STShDRykKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCShBcmJlaXRza29w
aWUpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAicG5nLmgiCiAjaW5jbHVkZSAiYXNzZXJ0
LmgiCiAKLSNpZiBQTEFURk9STShDQUlSTykKKyNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZP
Uk0oUVQpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShSZXZp
c2lvbiAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJHSUZJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlICJHSUZJbWFnZVJlYWRlci5oIgogCi0jaWYg
UExBVEZPUk0oQ0FJUk8pCisjaWYgUExBVEZPUk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFFUKQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJKFJldmlzaW9uIDE2MDEzKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3Bw
CShBcmJlaXRza29waWUpCkBAIC03OCw3ICs3OCw3IEBACiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAj
aW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCiAKLSNpZiBQTEFURk9STShDQUlSTykKKyNpZiBQ
TEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQpCiAKIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdl
RGVjb2RlcjsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJ
KEFyYmVpdHNrb3BpZSkKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRlICJKUEVHSW1hZ2VEZWNv
ZGVyLmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKLSNpZiBQTEFURk9STShDQUlSTykKKyNpZiBQ
TEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQpCiAKIGV4dGVybiAiQyIgewogI2luY2x1ZGUg
ImpwZWdsaWIuaCIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hC
TUltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcAkoUmV2aXNpb24gMTYwMTMpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3BwCShBcmJl
aXRza29waWUpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiWEJNSW1hZ2VEZWNvZGVyLmgiCiAgCi0jaWYgUExBVEZPUk0oQ0FJUk8pCisjaWYgUExBVEZP
Uk0oQ0FJUk8pIHx8IFBMQVRGT1JNKFFUKQogCiBuYW1lc3BhY2UgV2ViQ29yZQogewpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFn
ZURlY29kZXIuY3BwCShSZXZpc2lvbiAxNjAxMykKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJQ09JbWFnZURlY29kZXIu
aCIKIAotI2lmIFBMQVRGT1JNKENBSVJPKQorI2lmIFBMQVRGT1JNKENBSVJPKSB8fCBQTEFURk9S
TShRVCkKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkoUmV2aXNp
b24gMTYwMTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZURlY29kZXIuY3BwCShBcmJlaXRza29waWUpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiQk1QSW1hZ2VEZWNvZGVyLmgiCiAKLSNpZiBQTEFURk9STShD
QUlSTykKKyNpZiBQTEFURk9STShDQUlSTykgfHwgUExBVEZPUk0oUVQpCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlCiB7CkluZGV4OiBXZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkoQXJiZWl0c2tvcGllKQpAQCAtNDQsNyArNDQsNyBAQAogICAgJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcAogICAgJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZwogICAgJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BsYXRmb3JtL3F0Ci0gICAke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vV2ViQ29yZStTVkcgCisgICAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vV2Vi
Q29yZStTVkcKICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9KYXZhU2NyaXB0Q29y
ZS9ranMKICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi9KYXZhU2NyaXB0Q29yZS8K
ICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi8KQEAgLTUxOSw3ICs1MTksNiBAQAog
ICAgIGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5jcHAKICAgICBrY2FudmFzL1JlbmRlclNWR0lt
YWdlLmNwcAogICAgIGtjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKLSAgICBrY2FudmFz
L0tDYW52YXNNYXRyaXguY3BwCiAgKQogRU5ESUYoVVNFX1dFQktJVF9TVkdfU1VQUE9SVCkKIApA
QCAtMTAyNyw1ICsxMDI2LDMgQEAKICAgcGNyZS11bml0eQogCiApCi0KLWFkZF9zdWJkaXJlY3Rv
cnkoIHBsYXRmb3JtL3F0L3Rlc3QgKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9xdC1lbmNv
ZGluZ3MudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvcXQtZW5jb2Rpbmdz
LnR4dAkoUmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvcXQtZW5jb2RpbmdzLnR4
dAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorIyBUaGUgaXRlbXMgb24gdGhlIGxlZnQg
YXJlIG5hbWVzIG9mIFRleHRFbmNvZGluZ0lEIHZhbHVlcworIyBUaGUgaXRlbXMgb24gdGhlIHJp
Z2h0IGFyZSBJQU5BIGNoYXJhY3RlciBzZXQgbmFtZXMuIE5hbWVzIGxpc3RlZCBpbiBjaGFyYWN0
ZXItc2V0cy50eHQgYXJlIG5vdAorIyByZXBlYXRlZCBoZXJlOyBtZW50aW9uaW5nIGFueSBvbmUg
Y2hhcmFjdGVyIHNldCBmcm9tIGEgZ3JvdXAgaW4gdGhlcmUgcHVsbHMgaW4gYWxsIHRoZSBhbGlh
c2VzIGluCisjIHRoYXQgZ3JvdXAuCisKK1dpbkxhdGluMUVuY29kaW5nOiB3aW5kb3dzLTEyNTIs
IHdpbmxhdGluMSwgeGFuc2kKK0xhdGluMUVuY29kaW5nOiBJU08tODg1OS0xLCA4ODU5MQorQVND
SUlFbmNvZGluZzogVVMtQVNDSUksIGlzb2lyNnVzCitVVEYxNkVuY29kaW5nOiBJU08tMTA2NDYt
VUNTLTIsIHVjczIsIHVuaWNvZGUsIHV0ZjE2CitVVEYxNkVuY29kaW5nLCBCaWdFbmRpYW46IFVU
Ri0xNkJFLCB1bmljb2RlZmZmZQorVVRGMTZFbmNvZGluZywgTGl0dGxlRW5kaWFuOiBVVEYtMTZM
RSwgdW5pY29kZWZlZmYKK1VURjhFbmNvZGluZzogVVRGLTgsIHVuaWNvZGUxMXV0ZjgsIHVuaWNv
ZGUyMHV0ZjgsIHh1bmljb2RlMjB1dGY4Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10199</attachid>
            <date>2006-08-24 10:20:13 -0700</date>
            <delta_ts>2006-08-24 13:17:47 -0700</delta_ts>
            <desc>Offer a standalone testing tool for Qt platform.</desc>
            <filename>qt-launcher.diff</filename>
            <type>text/plain</type>
            <size>5258</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKFJldmlzaW9uIDE2MDEzKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShBcmJl
aXRza29waWUpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMDgtMjQgIE5pa29sYXMgWmltbWVybWFu
biAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KKworICAgICAgICBBZGQgUXRMYXVuY2hlciAod2FzIHRl
c3R1bml0eSBiZWZvcmUpLCB3aGljaCBwcm92aWRlcyBhCisgICAgICAgIHN0YW5kYWxvbmUgImJy
b3dzZXIiIHRvIHRlc3QgdGhlIFF0IHBsYXRmb3JtIHN0dWZmLgorCisgICAgICAgICogUXRMYXVu
Y2hlci9DTWFrZUxpc3RzLnR4dDogQWRkZWQuCisgICAgICAgICogUXRMYXVuY2hlci9tYWluLmNw
cDogQWRkZWQuCisgICAgICAgIChtYWluKToKKwogMjAwNi0wOC0yMiAgVHJleSBNYXR0ZXNvbiAg
PHRyZXlAdXNhLm5ldD4KIAogICAgICAgICBSZXZpZXdlZCBieSBnZ2FyZW4uCkluZGV4OiBDTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDTWFrZUxpc3RzLnR4dAkoUmV2aXNpb24gMTYwMTMp
CisrKyBDTWFrZUxpc3RzLnR4dAkoQXJiZWl0c2tvcGllKQpAQCAtNDcsNiArNDcsNyBAQAogCiBh
ZGRfc3ViZGlyZWN0b3J5KCBKYXZhU2NyaXB0Q29yZSApIAogYWRkX3N1YmRpcmVjdG9yeSggV2Vi
Q29yZSApIAorYWRkX3N1YmRpcmVjdG9yeSggV2ViS2l0VG9vbHMvUXRMYXVuY2hlciApCiAKIGlu
Y2x1ZGVfZGlyZWN0b3JpZXMgKCBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9ICkK
IApJbmRleDogV2ViS2l0VG9vbHMvUXRMYXVuY2hlci9tYWluLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9RdExhdW5jaGVyL21haW4uY3BwCShSZXZpc2lvbiAwKQorKysgV2ViS2l0VG9v
bHMvUXRMYXVuY2hlci9tYWluLmNwcAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBHZW9yZ2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lu
Y2x1ZGUgPGthcHBsaWNhdGlvbi5oPgorI2luY2x1ZGUgPGtjbWRsaW5lYXJncy5oPgorI2luY2x1
ZGUgPGtkZWJ1Zy5oPgorCisjaW5jbHVkZSA8RG9jdW1lbnQuaD4KKworI2luY2x1ZGUgPEZyYW1l
UXQuaD4KKyNpbmNsdWRlIDxwYWdlL1BhZ2UuaD4KKworI2luY2x1ZGUgPFFWQm94TGF5b3V0Pgor
I2luY2x1ZGUgPFFEaXI+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgS0Nt
ZExpbmVPcHRpb25zIG9wdGlvbnNbXSA9Cit7CisgICAgeyAiK2ZpbGUiLCAgICAgICAgIkZpbGUg
dG8gbG9hZCIsIDAgfSwKKyAgICBLQ21kTGluZUxhc3RPcHRpb24KK307CisKK2ludCBtYWluKGlu
dCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBLQ21kTGluZUFyZ3M6OmluaXQoYXJnYywgYXJn
diwgInRlc3R1bml0eSIsICJ0ZXN0dW5pdHkiLAorICAgICAgICAgICAgICAgICAgICAgICAidW5p
dHkgdGVzdGNhc2UgYXBwIiwgIjAuMSIpOworICAgIEtDbWRMaW5lQXJnczo6YWRkQ21kTGluZU9w
dGlvbnMob3B0aW9ucyk7CisgICAgS0FwcGxpY2F0aW9uIGFwcDsKKyAgICBLQ21kTGluZUFyZ3Mg
KmFyZ3MgPSBLQ21kTGluZUFyZ3M6OnBhcnNlZEFyZ3MoKTsKKyAgICAgCisgICAgUVdpZGdldCB0
b3BMZXZlbDsKKyAgICBRQm94TGF5b3V0ICpsID0gbmV3IFFWQm94TGF5b3V0KCZ0b3BMZXZlbCk7
CisgICAgICAgIAorICAgIEZyYW1lUXQgKmYgPSBuZXcgRnJhbWVRdCgmdG9wTGV2ZWwpOworCisg
ICAgbC0+YWRkV2lkZ2V0KGYtPnZpZXcoKS0+cXdpZGdldCgpKTsKKyAgICBsLT5hY3RpdmF0ZSgp
OworICAgIGYtPnZpZXcoKS0+cXdpZGdldCgpLT5zaG93KCk7CisKKyAgICB0b3BMZXZlbC5zaG93
KCk7CisKKyAgICBRU3RyaW5nIHVybDsKKworICAgIGlmIChhcmdzLT5jb3VudCgpID09IDApCisg
ICAgICAgIHVybCA9IFFTdHJpbmcoIiUxLyUyIikuYXJnKFFEaXI6OmhvbWVQYXRoKCkpLmFyZyhR
TGF0aW4xU3RyaW5nKCJpbmRleC5odG1sIikpOworICAgIGVsc2UKKyAgICAgICAgdXJsID0gYXJn
cy0+YXJnKDApOworCisgICAgZi0+b3BlblVSTChLVVJMKHVybC50b0xhdGluMSgpKSk7CisgICAg
CisgICAgYXBwLmV4ZWMoKTsKKyAgICBkZWxldGUgZjsKKyAgICByZXR1cm4gMDsKK30KSW5kZXg6
IFdlYktpdFRvb2xzL1F0TGF1bmNoZXIvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvUXRMYXVuY2hlci9DTWFrZUxpc3RzLnR4dAkoUmV2aXNpb24gMCkKKysrIFdlYktp
dFRvb2xzL1F0TGF1bmNoZXIvQ01ha2VMaXN0cy50eHQJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjQgQEAKK2luY2x1ZGVfZGlyZWN0b3JpZXMoCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9Ly4uLy4uL1dlYkNvcmUKKyAgIEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09VUkNF
X0RJUn0vLi4vLi4vL0phdmFTY3JpcHRDb3JlCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9Ly4uLy4uL1dlYkNvcmUvYnJpZGdlCisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9Ly4uLy4uL1dlYkNvcmUvcGFnZQorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVO
VF9TT1VSQ0VfRElSfS8uLi8uLi9XZWJDb3JlL2xvYWRlcgorICAgQkVGT1JFICR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS8uLi8uLi9XZWJDb3JlL3BsYXRmb3JtCisgICBCRUZPUkUgJHtDTUFL
RV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uLy4uL1dlYkNvcmUvcGxhdGZvcm0vcXQKKyAgIEJFRk9S
RSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vLi4vV2ViQ29yZS9rd3EKKyAgIEJFRk9S
RSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vLi4vV2ViQ29yZS9yZW5kZXJpbmcKKyAg
IEJFRk9SRSAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vLi4vLi4vV2ViQ29yZS9lZGl0aW5n
CisgICBCRUZPUkUgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9Ly4uLy4uL1dlYkNvcmUvaHRt
bAorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi8uLi9XZWJDb3JlL2Nz
cworICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi8uLi9XZWJDb3JlL2Rv
bQorICAgQkVGT1JFICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8uLi8uLi9XZWJDb3JlL3ht
bAorICAgQkVGT1JFICR7Q01BS0VfU09VUkNFX0RJUn0va2RlY29yZQorKQorCithZGRfZGVmaW5p
dGlvbnMoLVduby11bmRlZiAtV25vLXVudXNlZC1wYXJhbWV0ZXIpCisKK3NldCh0ZXN0dW5pdHlf
U1JDUyBtYWluLmNwcCkKK2tkZTRfYXV0b21vYygke3Rlc3R1bml0eV9TUkNTfSkKK2tkZTRfYWRk
X2V4ZWN1dGFibGUodGVzdHVuaXR5IFJVTl9VTklOU1RBTExFRCAke3Rlc3R1bml0eV9TUkNTfSkK
K3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0dW5pdHkgICR7S0RFNF9LREVDT1JFX0xJQlN9IFdl
YkNvcmUtdW5pdHkgKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>