<?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>32461</bug_id>
          
          <creation_ts>2009-12-11 22:51:43 -0800</creation_ts>
          <short_desc>[Qt] Adding QPixmap/QImage support for the Qt hybrid layer</short_desc>
          <delta_ts>2010-01-21 15:36:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>33975</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>kent.hansen</cc>
    
    <cc>koivisto</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>171041</commentid>
    <comment_count>0</comment_count>
      <attachid>44725</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-11 22:51:43 -0800</bug_when>
    <thetext>Created attachment 44725
Qt hybrid support for QPixmap/QImage + a test

Attached is a patch that adds support for sending pixmaps/images from Qt to webkit and vise-versa, via QObject signals/slots/properties.
The change is limited to the Qt bridge (qt_runtime.cpp), and also includes a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171053</commentid>
    <comment_count>1</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-11 23:56:23 -0800</bug_when>
    <thetext>Attachment 44725 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/qt/tests/hybridPixmap/widget.cpp:1:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/widget.cpp:3:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/widget.cpp:15:  Missing space after ,  [whitespace/comma] [3]
WebKit/qt/tests/hybridPixmap/widget.cpp:20:  Missing space after ,  [whitespace/comma] [3]
WebKit/qt/tests/hybridPixmap/widget.cpp:21:  Missing space after ,  [whitespace/comma] [3]
WebKit/qt/tests/hybridPixmap/widget.cpp:26:  Missing space after ,  [whitespace/comma] [3]
WebKit/qt/tests/hybridPixmap/widget.cpp:27:  Missing space after ,  [whitespace/comma] [3]
WebKit/qt/tests/hybridPixmap/widget.cpp:31:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/qt/tests/hybridPixmap/widget.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/widget.cpp:45:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/qt/tests/hybridPixmap/widget.cpp:52:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_runtime.cpp:53:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bridge/qt/qt_runtime.cpp:54:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bridge/qt/qt_runtime.cpp:56:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bridge/qt/qt_runtime.cpp:58:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/bridge/qt/qt_runtime.cpp:61:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/widget.h:5:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/widget.h:6:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/widget.h:8:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/qt/tests/hybridPixmap/widget.h:18:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/qt/tests/hybridPixmap/widget.h:20:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/qt/tests/hybridPixmap/main.cpp:1:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/main.cpp:2:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/main.cpp:20:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/qt/tests/hybridPixmap/main.cpp:22:  Declaration has space between type name and * in Widget *wdg  [whitespace/declaration] [3]
WebKit/qt/tests/hybridPixmap/main.cpp:25:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 26</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171056</commentid>
    <comment_count>2</comment_count>
      <attachid>44725</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-11 23:59:30 -0800</bug_when>
    <thetext>Comment on attachment 44725
Qt hybrid support for QPixmap/QImage + a test

widget.cpp seems somewhat drastically out of compliance with the style guide.  Would you be willing to revise your patch to address the style nits?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171060</commentid>
    <comment_count>3</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-12 00:14:59 -0800</bug_when>
    <thetext>Sure, my first patch so please bear with me :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171061</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-12 00:18:17 -0800</bug_when>
    <thetext>Welcome to the project.  Thanks for contributing a patch.  :)

If you like, you can run the style checker locally using the check-webkit-style script in the WebKitTools/Scripts directory.  The checker might have some false positives (it&apos;s new), so feel free to ask questions if you&apos;re not sure what to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171117</commentid>
    <comment_count>5</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-12 12:49:07 -0800</bug_when>
    <thetext>One question about the style checker - it seems to fail on my main.cpp because it doesn&apos;t have a main header it implements (it&apos;s expecting main.h). 

Now my test doesn&apos;t have main.h, and neither does any of the other Qt tests. Do I need to add a dummy file, does the script need to be revised, or is there another trick I&apos;m missing?

Cheers
No&apos;am</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171119</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-12 13:09:11 -0800</bug_when>
    <thetext>I&apos;m not that familiar with the Qt unit testing framework, but I believe this is a false positive in the style checker.  Almost all the source files in the project represent classes, which have a corresponding header file.  Someone who knows more about Qt might have more specific advice, but I think you should ignore this complaint.  We&apos;ll fix the style checker to know not to complain in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171124</commentid>
    <comment_count>7</comment_count>
      <attachid>44745</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-12 13:53:59 -0800</bug_when>
    <thetext>Created attachment 44745
support for QPixmap/QImage handling in QtWebkit hybrid layer, revised with adherence to webkit coding style

New patch, after comment re. coding style.
There are still a couple of false positives but the major coding style issues have been fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171126</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-12 13:55:05 -0800</bug_when>
    <thetext>Attachment 44745 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/qt/tests/hybridPixmap/widget.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/tst_hybridPixmap.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171127</commentid>
    <comment_count>9</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-12 13:58:57 -0800</bug_when>
    <thetext>Note that the above style-checker errors are false positives, as none of the other Qt tests have config.h or a main header file included (a unit-test usually doesn&apos;t have a main header file). These issues should probably be dealt with at the style-checker level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171135</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-12-12 15:54:12 -0800</bug_when>
    <thetext>This appears to be like an extremely convenient feature to have, but I think we have to be very careful if this is exactly what we want.

I&apos;d like to avoid adding feature to the existing qt_runtime bridge. The code is old (as you may have noticed :) and I wish for it disappear as much as possible as part of bug #31863 .

At the same time we are here silently extending the documented DOM interfaces (indirectly appendChild, as the conversion is not visible in the source code). We are extending the interface with an undocumented extension.

I think this feature deserves the input of a wider audience than just the WebKit reviewers, I would like to hear the opinions of the other developers. Given that this is somewhat specific to the Qt port perhaps the webkit-qt mailing list would be a good forum.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171483</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-12-14 11:26:48 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Note that the above style-checker errors are false positives, as none of the
&gt; other Qt tests have config.h or a main header file included (a unit-test
&gt; usually doesn&apos;t have a main header file). These issues should probably be dealt
&gt; with at the style-checker level.

Please file a bug about the false positives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174193</commentid>
    <comment_count>12</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-21 22:59:44 -0800</bug_when>
    <thetext>We didn&apos;t get much input from the mailing list. I think that we should pick a route and go with it - I can implement whatever we decide as long as we decide on something soon :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174556</commentid>
    <comment_count>13</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-12-23 01:41:05 -0800</bug_when>
    <thetext>What is the problem this patch is trying to solve? Why can&apos;t it be solved using the existing mechanisms?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174571</commentid>
    <comment_count>14</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-23 04:23:57 -0800</bug_when>
    <thetext>This tries to solve a big performance issue we&apos;re tackling.

Sometimes we want a native component to handle heavy lifting of image handling - either because it&apos;s complicated, or because it&apos;s the only way. We still, however, want the images to be displayed and laid out in HTML.
A good example is extracting images from a video that has a proprietary C API to get those images.

Currently taking those images from the Qt native layer and displaying them in HTML requires:

- encoding the image in Qt (PNG/BMP)
- sending the image to webkit, either in base64 or in a custom QNetworkReply
- Setting the image source to the base64-encoded string, or to the url that would trigger the custom network reply.

You might imagine how slow this path is. 

Since QtWebkit uses pixmaps internally, it should be relatively smooth and trivial to get those pixmaps to the webkit layer. The problem - there&apos;s no current public API to do that! 

This also opens a possibility to offload some of the more complicated rendering problems to Qt when goings get tough with doing them with HTML, or if the project has no time to make changes to webkit. For example a slot can send a few web-element IDs to Qt, Qt would do the heavy rendering, and will return a QPixmap to the web layer which in turn would decide whether to display it in the DOM or to draw it using canvas.


So, any current mechanism that would allow me to make an existing QPixmap available for the web-dev layer, without encoding/decoding/data-copy would work better than a new one. The problem is that there&apos;s no such mechanism :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>174937</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-26 03:11:13 -0800</bug_when>
    <thetext>Attachment 44745 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/144763</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175206</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-12-28 03:04:13 -0800</bug_when>
    <thetext>Makes sense. A custom QNetworkReply with uncompressed image format would probably not perform much worse but would be clumsier to use. I don&apos;t have any philosophical objections to this patch.

However, I&apos;m not the right person to evaluate the bindings code or API impact. Simon seemed to have some concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175553</commentid>
    <comment_count>17</comment_count>
      <attachid>44745</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-12-29 07:42:34 -0800</bug_when>
    <thetext>Comment on attachment 44745
support for QPixmap/QImage handling in QtWebkit hybrid layer, revised with adherence to webkit coding style

As convenient as it seems, I&apos;m still worried about extending the DOM API in Qt with an implicit conversion from a QPixmap to an automatically created DOM element.

In addition this is limited to HTML image elements, it would not be possible to use application provided pixmaps for backgrounds for example.

It might be easier to be able to bind pixmaps to a central instance in the API and get an URI for it, that could be used in anywhere pixmaps/images are needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175580</commentid>
    <comment_count>18</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-29 09:02:43 -0800</bug_when>
    <thetext>I completely understand the concerns.
Note that the implicity is in webkit and not in Qt: 
var img = new Image;
really creates an image element even when you don&apos;t use the DOM API...

Alternative approaches:
(1)
The returned property/signal-argument doesn&apos;t create an image element implicitly, but rather gives you an option to do so implicitly:

myObject.somePixmapProperty.createImageElement();

it would also allow you to generate a data URL, if you want to use it for a background instead:

myObject.somePixmapProperty.toDataUrl() // or encodeDataUrl()

(2)
We modify CachedImage::createImage(), in a #ifdef PLATFORM(QT), to recognize the url and see that the image really needs to be native and loaded directly.
This is the only place I can see where I can do a direct URL-&gt;WebCore::Image conversion, all the other places require me to translate the pixmap to a QImage and back, which beats the purpose, especially if the pixmap is in video memory.

(3)
Any other option - you choose it, I&apos;ll implement.

I don&apos;t mind implementing either of those, but I wouldn&apos;t want to see them rejected again because of an architectural concern... can we pick an approach and go with it? :) Sometimes perfect is the enemy of good-enough, and in this case we&apos;re really trying to do something rather simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176010</commentid>
    <comment_count>19</comment_count>
      <attachid>45678</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-30 13:06:46 -0800</bug_when>
    <thetext>Created attachment 45678
Refactor of hybrid pixmap transferring, with an intermediate object

Refactored the solution to use an intermediate object (in qt_pixmapruntime.cpp)
- The object has width &amp; height properties, and toHTMLImageElement() and toDataUrl() functions.
- The Qt bridge still accepts HTMLImageElement directly when sending a pixmap to Qt, as there&apos;s no way to construct this intermediate object, and in this case there&apos;s no implicit creation of DOM elements.
- The intermediate object converts to a QImage/QPixmap when the actual data is requested: QImage when dataUrl is requested, QPixmap when HTMLImageElement is requested.

Note that the test still fails the webkit style checker, I already posted a relevant bug about the style-checker tool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176011</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-30 13:09:38 -0800</bug_when>
    <thetext>Attachment 45678 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
mapruntime.cpp:119:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:130:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:133:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:138:  Missing space before {  [whitespace/braces] [5]
WebCore/bridge/qt/qt_pixmapruntime.cpp:187:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:185:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:205:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:215:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:216:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:217:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:218:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:225:  Missing spaces around |  [whitespace/operators] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:227:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:236:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:237:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:242:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:247:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:257:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:267:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:279:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:289:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:312:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:320:  Missing space after ,  [whitespace/comma] [3]
WebCore/bridge/qt/qt_pixmapruntime.cpp:323:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 49</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176013</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-30 13:13:25 -0800</bug_when>
    <thetext>Attachment 45678 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/153325</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176032</commentid>
    <comment_count>22</comment_count>
      <attachid>45684</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2009-12-30 13:38:35 -0800</bug_when>
    <thetext>Created attachment 45684
Had to resubmit due to some build/style failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176035</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-30 13:42:47 -0800</bug_when>
    <thetext>Attachment 45684 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/qt/tests/hybridPixmap/widget.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/tst_hybridPixmap.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181487</commentid>
    <comment_count>24</comment_count>
      <attachid>45684</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-16 00:32:26 -0800</bug_when>
    <thetext>Comment on attachment 45684
Had to resubmit due to some build/style failures


In general your patch looks good to me. I&apos;m sorry it takes so long to review this big patch.

My only criticism left are coding style issues and missing ChangeLog entries before we
can land this. r- because of that.

(Kent, could you have a look at the JS API, too? Thanks!)

&gt; Index: WebKit/qt/tests/hybridPixmap/hybridPixmap.pro
&gt; ===================================================================
&gt; --- WebKit/qt/tests/hybridPixmap/hybridPixmap.pro	(revision 0)
&gt; +++ WebKit/qt/tests/hybridPixmap/hybridPixmap.pro	(revision 0)
&gt; @@ -0,0 +1,15 @@
&gt; +# -------------------------------------------------
&gt; +# Project created by QtCreator 2009-12-10T11:25:02
&gt; +# -------------------------------------------------
&gt; +include(../../../../WebKit.pri)
&gt; +QT += network gui testlib
&gt; +TARGET = hybridPixmap
&gt; +TEMPLATE = app
&gt; +SOURCES += tst_hybridPixmap.cpp \
&gt; +    widget.cpp
&gt; +HEADERS += widget.h
&gt; +FORMS += widget.ui
&gt; +RESOURCES += resources.qrc
&gt; +OTHER_FILES += test.html
&gt; +CONFIG += console
&gt; +QMAKE_RPATH_DIR=$$OUTPUT_DIR/lib $$QMAKE_RPATH_DIR

This could probably be simplified to use ../tests.pri.

&gt; Index: WebKit/qt/tests/hybridPixmap/test.html
&gt; ===================================================================
&gt; --- WebKit/qt/tests/hybridPixmap/test.html	(revision 0)
&gt; +++ WebKit/qt/tests/hybridPixmap/test.html	(revision 0)
&gt; @@ -0,0 +1,35 @@
&gt; +&lt;html&gt;
&gt; +    &lt;head&gt;
&gt; +        &lt;style&gt;
&gt; +            img { display: block; border-style: groove}
&gt; +        &lt;/style&gt;
&gt; +        &lt;script&gt;
&gt; +            function startTest()
&gt; +            {
&gt; +                var obj = myWidget.image;
&gt; +                var pxm = myWidget.pixmap;
&gt; +                var img = obj.toHTMLImageElement();
&gt; +                var img1 = document.getElementById(&quot;img1&quot;);
&gt; +                var img2 = document.getElementById(&quot;img2&quot;);
&gt; +                document.body.appendChild(img);
&gt; +                document.body.appendChild(pxm.toHTMLImageElement());

I wonder if this method should take a document as argument, instead of
always defaulting to the global document. Otherwise it might happen that
the element is created in the &quot;global&quot; document but it is intended to be
inserted into another (local) document. Perhaps even in another frame.

I guess that could be fixed later on though.

The rest of the API looks good to me.

&gt; +Widget::Widget(QWidget *parent) :

Coding style (* placement).

&gt; +void Widget::setPixmap(const QPixmap &amp; p)

Coding style (space before &amp;)

&gt; +void Widget::setImage(const QImage &amp; img)

Coding style (space before &amp;)

&gt; +void Widget::changeEvent(QEvent *e)

Coding style (* placement).

&gt; +    Widget(QWidget *parent = 0);

Coding style (* placement).

&gt; +    ~Widget();
&gt; +    void setPixmap(const QPixmap &amp;);

Ditto.

&gt; +    QPixmap pixmap() const;
&gt; +    void setImage(const QImage &amp;);

Ditto. (there are a few more instances, I believe)

&gt; +    static const char* name() {return &quot;width&quot;; }

Space before &quot;return&quot;;

&gt; +    virtual JSValue valueFromInstance(ExecState* exec, const Instance* pixmap) const
&gt; +    {
&gt; +        return jsNumber(exec, static_cast&lt;const QtPixmapInstance*&gt;(pixmap)-&gt;width());
&gt; +    }
&gt; +    virtual void setValueToInstance(ExecState*, const Instance*, JSValue) const {}
&gt; +};
&gt; +class QtPixmapHeightField : public Field {
&gt; +public:
&gt; +    static const char* name() {return &quot;height&quot;; }

Same here :)

&gt; +        JSDOMGlobalObject* global = (JSDOMGlobalObject*)root-&gt;globalObject();

Any reason for a C style cast here? I think C++ style casts are preferred.

&gt; +        const QString b64 = QString(&quot;data:image/png;base64,&quot;)+ba.toBase64();

Coding style (missing space before and after }).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181565</commentid>
    <comment_count>25</comment_count>
      <attachid>46751</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-16 15:08:36 -0800</bug_when>
    <thetext>Created attachment 46751
Fixed style issues reported by Simon

Mainly made sure that all the * and &amp; are in the right place, and fixed all the other style issues reported by the previous review (e.g. use tests.pri)
I think it should be sufficient by now - unless there are style issues not reported in the previous review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181566</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-16 15:17:14 -0800</bug_when>
    <thetext>Attachment 46751 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/qt/tests/hybridPixmap/widget.cpp:20:  Found header this file implements before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebKit/qt/tests/hybridPixmap/tst_hybridPixmap.cpp:20:  Found other header before WebCore config.h. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
WebCore/bridge/qt/qt_pixmapruntime.cpp:27:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181617</commentid>
    <comment_count>27</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-17 13:08:59 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Attachment 46751 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; WebKit/qt/tests/hybridPixmap/widget.cpp:20:  Found header this file implements
&gt; before WebCore config.h. Should be: config.h, primary header, blank line, and
&gt; then alphabetically sorted.  [build/include_order] [4]
&gt; WebKit/qt/tests/hybridPixmap/tst_hybridPixmap.cpp:20:  Found other header
&gt; before WebCore config.h. Should be: config.h, primary header, blank line, and
&gt; then alphabetically sorted.  [build/include_order] [4]
&gt; WebCore/bridge/qt/qt_pixmapruntime.cpp:27:  Alphabetical sorting problem. 
&gt; [build/include_order] [4]
&gt; Total errors found: 3

You can ignore the first two, but you should probably take a look at the last one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181618</commentid>
    <comment_count>28</comment_count>
      <attachid>46751</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-17 13:28:48 -0800</bug_when>
    <thetext>Comment on attachment 46751
Fixed style issues reported by Simon

I agree with Simon that it looks good, but sometimes you have some weird spacing/newlining.

&gt; +            function startTest()
&gt; +            {
&gt; +                var obj = myWidget.image;
&gt; +                var pxm = myWidget.pixmap;
&gt; +
&gt; +
&gt; +                var img = obj.toHTMLImageElement();

Like above. Why two lines?


&gt; +                var img1 = document.getElementById(&quot;img1&quot;);
&gt; +                var img2 = document.getElementById(&quot;img2&quot;);
&gt; +                document.body.appendChild(img);
&gt; +                document.body.appendChild(pxm.toHTMLImageElement());
&gt; +                function completeIfDone()
&gt; +                {
&gt; +                    if (img1.complete &amp;&amp; img2.complete) {
&gt; +                        myWidget.completeTest();
&gt; +                    }
&gt; +                }
&gt; +                img2.onload = completeIfDone;
&gt; +                img1.onload = completeIfDone;

Why not img1.onload before img2.onload?


In classes like below, we would normally add a new line before public: private slots: etc lines.

&gt; +class Widget : public QWidget {
&gt; +    Q_OBJECT
&gt; +    Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
&gt; +    Q_PROPERTY(QImage image READ image WRITE setImage)
&gt; +public:
&gt; +    Widget(QWidget* parent = 0);
&gt; +    ~Widget();
&gt; +    void setPixmap(const QPixmap&amp;);
&gt; +    QPixmap pixmap() const;
&gt; +    void setImage(const QImage&amp;);
&gt; +    QImage image() const;
&gt; +private slots:
&gt; +    void refreshJS();
&gt; +public slots:
&gt; +    void completeTest();
&gt; +    void start();
&gt; +signals:
&gt; +    void testComplete();
&gt; +protected:
&gt; +    void changeEvent(QEvent* e);
&gt; +
&gt; +private:
&gt; +    Ui::Widget* ui;
&gt; +};

&gt; +    }
&gt; +private:
&gt; +    Widget* wdg;
&gt; +
&gt; +
&gt; +};

Weird extra newline above. Also, we try not to abbreviate things like widget into wdg, pixmap into pxm, etc. Please avoid that.


&gt; +    MethodList ml;
&gt; +    if (identifier == QtPixmapToDataUrlMethod::name())

For instance in the above instead of &apos;ml&apos;, I would prefer &apos;methods&apos;. That makes the below code easier to read.

&gt; +        ml.append(&amp;qt_pixmap_metaData.toDataUrlMethod);
&gt; +    else if (identifier == QtPixmapCreateElementMethod::name())
&gt; +        ml.append(&amp;qt_pixmap_metaData.createElementMethod);
&gt; +    return ml;
&gt; +}

&gt; +int QtPixmapInstance::width() const
&gt; +{
&gt; +    if (data.type() == (QVariant::Type)qMetaTypeId&lt;QPixmap&gt;())
&gt; +        return data.value&lt;QPixmap&gt;().width();
&gt; +    if (data.type() == (QVariant::Type)qMetaTypeId&lt;QImage&gt;())
&gt; +        return data.value&lt;QImage&gt;().width();

We disencourage C style casts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181619</commentid>
    <comment_count>29</comment_count>
      <attachid>46760</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-17 13:59:05 -0800</bug_when>
    <thetext>Created attachment 46760
Fix some extra style issues reported by Kenneth

Note that some of the c-style castings are a style-copy from qt_runtime.cpp, mainly where enums are involved.
However, I changed all of them to c++ style, except for the ones that can only be done c-style, such as (UChar*).

Hope this is stylish enough, sorry to waste your time this coding-style stuff - I come from a more hack-and-run background but it&apos;s getting better :)
N</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181655</commentid>
    <comment_count>30</comment_count>
      <attachid>46773</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-17 17:04:52 -0800</bug_when>
    <thetext>Created attachment 46773
Fix a couple of more c-style casts

Oops, still had a couple of more c-style casts... those are hard to find :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181760</commentid>
    <comment_count>31</comment_count>
      <attachid>46773</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-18 00:31:06 -0800</bug_when>
    <thetext>Comment on attachment 46773
Fix a couple of more c-style casts

Good work! r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181761</commentid>
    <comment_count>32</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-18 00:32:28 -0800</bug_when>
    <thetext>No&apos;am, have you thought about writing documentation about the hybrid layer? Would be good to have that in the Qt documentation, I think, and you know pretty well how that works.

Kenneth</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181770</commentid>
    <comment_count>33</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-18 00:49:04 -0800</bug_when>
    <thetext>Yes, I&apos;ve actually written a draft of that documentation 3 months ago but finalizing it got lost somewhere in the pipeline...
I think one more component is missing in the hybrid layer: transporting QWebElements. With that and the new QPixmap/QImage transporting you can do something like that in Javascript:

var renderedElementImage = QtRenderer.renderElement(document.getElementById(&quot;someElement&quot;)).toHTMLImageElement();

which would allow QGraphicsView-like performance inside a QtWebkit based HTML canvas, for example.

I focused on the QPixmap task first to make it easier to review...

but after the second one is done (and the compositing stuff) I&apos;d be glad to take on the work of documenting the hybrid layer.

Prepare for some more reviews :)
N</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181771</commentid>
    <comment_count>34</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-18 00:50:05 -0800</bug_when>
    <thetext>Great! Looking forward to that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181901</commentid>
    <comment_count>35</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-18 09:36:20 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; Created an attachment (id=46773) [details]
&gt; Fix a couple of more c-style casts
&gt; 
&gt; Oops, still had a couple of more c-style casts... those are hard to find :)

Hi No&apos;am :)

The qt_runtime.cpp part doesn&apos;t apply cleanly for me (against r53396).

Compile issues:

/home/khansen/dev/webkit/WebCore/bridge/qt/qt_pixmapruntime.cpp: In member function &apos;virtual JSC::JSValue JSC::Bindings::QtPixmapCreateElementMethod::invoke(JSC::ExecState*, QVariant&amp;, WTF::PassRefPtr&lt;JSC::Bindings::RootObject&gt;)&apos;:
/home/khansen/dev/webkit/WebCore/bridge/qt/qt_pixmapruntime.cpp:89: error: expected `&gt;&apos; before &apos;)&apos; token

/home/khansen/dev/webkit/WebCore/bridge/qt/qt_pixmapruntime.cpp: In member function &apos;virtual JSC::JSValue JSC::Bindings::QtPixmapInstance::defaultValue(JSC::ExecState*, JSC::PreferredPrimitiveType) const&apos;:
/home/khansen/dev/webkit/WebCore/bridge/qt/qt_pixmapruntime.cpp:222: warning: suggest parentheses around &amp;&amp; within ||

/home/khansen/dev/webkit/WebCore/bridge/qt/qt_pixmapruntime.cpp: In member function &apos;QPixmap JSC::Bindings::QtPixmapInstance::toPixmap()&apos;:
/home/khansen/dev/webkit/WebCore/bridge/qt/qt_pixmapruntime.cpp:262: error: expected `)&apos; before &apos;{&apos; token


The code looks OK to me. It would be nice if the test had QCOMPAREs for the result of toDataUrl() and pixmap.height too. And QtPixmapInstance::valueOf() doesn&apos;t seem to be tested.
Does this test cover all the new paths in convertValueToQVariant() and convertQVariantToValue? And the two cases for QtPixmapInstance::variantFromObject()? E.g., what happens if you call a slot that takes a QPixmap argument and you pass it a JSHTMLImageElement? Should be possible to write tests for that stuff. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181939</commentid>
    <comment_count>36</comment_count>
      <attachid>46835</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-18 11:32:50 -0800</bug_when>
    <thetext>Created attachment 46835
Increased test coverage to Kent&apos;s request - fixed a compilation issue that slipped through...

This should be a pretty straightforward review, as it changes very little from the last patch (which apparently had a compilation issue that I ovelooked). It mainly adds more tests like having a signal with image/pixmap, testing toString for the intermediate object, and sending garbage to a slot that wants an image/pixmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181942</commentid>
    <comment_count>37</comment_count>
      <attachid>46835</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-18 11:36:56 -0800</bug_when>
    <thetext>Comment on attachment 46835
Increased test coverage to Kent&apos;s request - fixed a compilation issue that slipped through...

Do you want this added to the commit-queue? if so set the commit queue to &quot;?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181970</commentid>
    <comment_count>38</comment_count>
      <attachid>46835</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-18 13:28:46 -0800</bug_when>
    <thetext>Comment on attachment 46835
Increased test coverage to Kent&apos;s request - fixed a compilation issue that slipped through...

Rejecting patch 46835 from commit-queue.

Failed to run &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, &apos;--reviewer&apos;, &apos;Kenneth Rohde Christiansen&apos;, &apos;--force&apos;]&quot; exit_code: 2
Last 500 characters of output:
 file WebKit/qt/tests/hybridPixmap/widget.h
patching file WebKit/qt/tests/hybridPixmap/tst_hybridPixmap.cpp
patching file WebKit/qt/tests/hybridPixmap/resources.qrc
patching file WebKit/qt/tests/tests.pro
patching file WebCore/WebCore.pro
patch: **** Only garbage was found in the patch input.
patch: **** Only garbage was found in the patch input.
patching file WebCore/bridge/qt/qt_pixmapruntime.cpp
patching file WebCore/bridge/qt/qt_runtime.cpp
patching file WebCore/bridge/qt/qt_pixmapruntime.h

Full output: http://webkit-commit-queue.appspot.com/results/199125</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181979</commentid>
    <comment_count>39</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-18 13:49:44 -0800</bug_when>
    <thetext>(In reply to comment #38)
&gt; (From update of attachment 46835 [details])
&gt; Rejecting patch 46835 from commit-queue.
&gt; 
&gt; Failed to run
&gt; &quot;[&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;,
&gt; &apos;--reviewer&apos;, &apos;Kenneth Rohde Christiansen&apos;, &apos;--force&apos;]&quot; exit_code: 2
&gt; Last 500 characters of output:
&gt;  file WebKit/qt/tests/hybridPixmap/widget.h
&gt; patching file WebKit/qt/tests/hybridPixmap/tst_hybridPixmap.cpp
&gt; patching file WebKit/qt/tests/hybridPixmap/resources.qrc
&gt; patching file WebKit/qt/tests/tests.pro
&gt; patching file WebCore/WebCore.pro
&gt; patch: **** Only garbage was found in the patch input.
&gt; patch: **** Only garbage was found in the patch input.
&gt; patching file WebCore/bridge/qt/qt_pixmapruntime.cpp
&gt; patching file WebCore/bridge/qt/qt_runtime.cpp
&gt; patching file WebCore/bridge/qt/qt_pixmapruntime.h
&gt; 
&gt; Full output: http://webkit-commit-queue.appspot.com/results/199125

hmm... do I need to do anything special about new files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181986</commentid>
    <comment_count>40</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-18 14:05:13 -0800</bug_when>
    <thetext>Try creating the patch with WebKitTools/Scripts/webkit-patch or bugzilla-tool.

git format-patch -1 should also work.

&gt; hmm... do I need to do anything special about new files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>181990</commentid>
    <comment_count>41</comment_count>
      <attachid>46848</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-18 14:09:07 -0800</bug_when>
    <thetext>Created attachment 46848
Use /dev/null for new files

The only difference between this and the previous patch is that I use /dev/null instead of empty files for the new files.
Should that fix the commit problem? I have no way of testing and this is my first commit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182200</commentid>
    <comment_count>42</comment_count>
    <who name="Kent Hansen">kent.hansen</who>
    <bug_when>2010-01-19 04:04:20 -0800</bug_when>
    <thetext>(In reply to comment #41)
&gt; Created an attachment (id=46848) [details]
&gt; Use /dev/null for new files
&gt; 
&gt; The only difference between this and the previous patch is that I use /dev/null
&gt; instead of empty files for the new files.
&gt; Should that fix the commit problem? I have no way of testing and this is my
&gt; first commit

Well, the first thing to try would be to apply the patch to the master branch of your local clone.
It doesn&apos;t apply for me, I need to add a/ and b/ to the paths in the --- and +++ lines. After that it applies nicely (even the qt_runtime.cpp part this time).

Did you use git-format-patch like Kenneth suggested? (Your patch doesn&apos;t look like git diff output, even)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182379</commentid>
    <comment_count>43</comment_count>
      <attachid>46848</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-19 12:36:52 -0800</bug_when>
    <thetext>Comment on attachment 46848
Use /dev/null for new files

The patch is fine with me, and in fact I can apply it locally with patch -p0. I was about to review and land it, but unfortunately it is missing ChangeLog entries.

Noam, can you add those with explanations of your changes? AFAICS that&apos;s the only thing missing we need to land it.

(If the bots have problems, it&apos;s okay, we can land it manually)

Sorry :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182434</commentid>
    <comment_count>44</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-19 13:51:46 -0800</bug_when>
    <thetext>No problem, this is my newbie fault - I unknowingly skipped a couple of the Webkit contribution guidelines. I&apos;ll clean it up and prepare an applicable patch and a changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182607</commentid>
    <comment_count>45</comment_count>
      <attachid>46974</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-19 21:18:10 -0800</bug_when>
    <thetext>Created attachment 46974
ChangeLog added, created with svn-create-patch

Same patch, just with a ChangeLog and created with svn-create-patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182608</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-19 21:24:07 -0800</bug_when>
    <thetext>Attachment 46974 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Ignoring WebKit/qt/tests/hybridPixmap/widget.cpp; This file is exempt from the style guide.
WebCore/ChangeLog:6:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:7:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:9:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:10:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:19:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:23:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:28:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:31:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:34:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:36:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:39:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:42:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:46:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:49:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:58:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:60:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:62:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:66:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:68:  Line contains tab character.  [whitespace/tab] [5]
Ignoring WebKit/qt/tests/hybridPixmap/tst_hybridPixmap.cpp; This file is exempt from the style guide.
Ignoring WebKit/qt/tests/hybridPixmap/widget.h; This file is exempt from the style guide.
WebKit/qt/ChangeLog:14:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 21


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182615</commentid>
    <comment_count>47</comment_count>
      <attachid>46977</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-19 22:29:25 -0800</bug_when>
    <thetext>Created attachment 46977
oops, some auto-tabs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182646</commentid>
    <comment_count>48</comment_count>
      <attachid>46977</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-20 00:04:51 -0800</bug_when>
    <thetext>Comment on attachment 46977
oops, some auto-tabs

Re-applying earlier r+. Let&apos;s try this on the bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182954</commentid>
    <comment_count>49</comment_count>
      <attachid>46977</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-20 15:53:22 -0800</bug_when>
    <thetext>Comment on attachment 46977
oops, some auto-tabs

Rejecting patch 46977 from commit-queue.

Failed to parse ChangeLog: /Users/eseidel/Projects/CommitQueue/WebCore/ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183058</commentid>
    <comment_count>50</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-20 20:36:34 -0800</bug_when>
    <thetext>what does that mean and how can I fix it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183101</commentid>
    <comment_count>51</comment_count>
      <attachid>46977</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-21 00:13:41 -0800</bug_when>
    <thetext>Comment on attachment 46977
oops, some auto-tabs

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; --- WebCore/ChangeLog	(revision 53519)
&gt; +++ WebCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,72 @@
&gt; +2010-01-19  No&apos;am Rosenthal  &lt;noam.rosenthal@nokia.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [Qt] Adding QPixmap/QImage support for the Qt hybrid layer
&gt; +       Allows accesing QPixmap and QImage based arguments from Qt signals,
&gt; +       slots and properties
&gt; +       This is done by an intermediate object that can be turned into
&gt; +       web-based objects by calling either toHTMLImageElement() or
&gt; +       toDataURL()
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=32461

I&apos;m not sure, but your identation looks wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183102</commentid>
    <comment_count>52</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-21 00:19:15 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; (From update of attachment 46977 [details])
&gt; &gt; Index: WebCore/ChangeLog
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/ChangeLog	(revision 53519)
&gt; &gt; +++ WebCore/ChangeLog	(working copy)
&gt; &gt; @@ -1,3 +1,72 @@
&gt; &gt; +2010-01-19  No&apos;am Rosenthal  &lt;noam.rosenthal@nokia.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        [Qt] Adding QPixmap/QImage support for the Qt hybrid layer
&gt; &gt; +       Allows accesing QPixmap and QImage based arguments from Qt signals,
&gt; &gt; +       slots and properties
&gt; &gt; +       This is done by an intermediate object that can be turned into
&gt; &gt; +       web-based objects by calling either toHTMLImageElement() or
&gt; &gt; +       toDataURL()
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=32461
&gt; 
&gt; I&apos;m not sure, but your identation looks wrong.

Yeah, maybe it was confused by that. I&apos;m landing it manually now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183105</commentid>
    <comment_count>53</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-21 00:25:49 -0800</bug_when>
    <thetext>The patch didn&apos;t build with current ToT, as runtime.h has been renamed to Bridge.h. I&apos;ll fix that when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183106</commentid>
    <comment_count>54</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-21 00:26:44 -0800</bug_when>
    <thetext>Committed r53611: &lt;http://trac.webkit.org/changeset/53611&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183111</commentid>
    <comment_count>55</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-01-21 00:45:01 -0800</bug_when>
    <thetext>I landed http://trac.webkit.org/changeset/53613 on top, to make widget.ui not depend on Qt being built with QtWebKit, as that&apos;s how the Qt bot is configured.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183210</commentid>
    <comment_count>56</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2010-01-21 08:58:40 -0800</bug_when>
    <thetext>wow, this was painful... but I think my next contributions are going to have a lot less overhead :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183350</commentid>
    <comment_count>57</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-21 15:36:49 -0800</bug_when>
    <thetext>Filed bug 33975 about the strange bot failure.  Sorry about the trouble.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44725</attachid>
            <date>2009-12-11 22:51:43 -0800</date>
            <delta_ts>2009-12-12 13:53:59 -0800</delta_ts>
            <desc>Qt hybrid support for QPixmap/QImage + a test</desc>
            <filename>patch-hybrid-pixmap.diff</filename>
            <type>text/plain</type>
            <size>12622</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQor
PHVpIHZlcnNpb249IjQuMCI+DQorIDxjbGFzcz5XaWRnZXQ8L2NsYXNzPg0KKyA8d2lkZ2V0IGNs
YXNzPSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPg0KKyAgPHByb3BlcnR5IG5hbWU9Imdlb21ldHJ5
Ij4NCisgICA8cmVjdD4NCisgICAgPHg+MDwveD4NCisgICAgPHk+MDwveT4NCisgICAgPHdpZHRo
PjYwMDwvd2lkdGg+DQorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+DQorICAgPC9yZWN0Pg0KKyAg
PC9wcm9wZXJ0eT4NCisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+DQorICAgPHN0cmlu
Zz5XaWRnZXQ8L3N0cmluZz4NCisgIDwvcHJvcGVydHk+DQorICA8bGF5b3V0IGNsYXNzPSJRVkJv
eExheW91dCIgbmFtZT0idmVydGljYWxMYXlvdXQiPg0KKyAgIDxpdGVtPg0KKyAgICA8d2lkZ2V0
IGNsYXNzPSJRV2ViVmlldyIgbmFtZT0id2ViVmlldyI+DQorICAgICA8cHJvcGVydHkgbmFtZT0i
dXJsIj4NCisgICAgICA8dXJsPg0KKyAgICAgICA8c3RyaW5nPmFib3V0OmJsYW5rPC9zdHJpbmc+
DQorICAgICAgPC91cmw+DQorICAgICA8L3Byb3BlcnR5Pg0KKyAgICA8L3dpZGdldD4NCisgICA8
L2l0ZW0+DQorICAgPGl0ZW0+DQorICAgIDxsYXlvdXQgY2xhc3M9IlFIQm94TGF5b3V0IiBuYW1l
PSJob3Jpem9udGFsTGF5b3V0Ij4NCisgICAgIDxpdGVtPg0KKyAgICAgIDx3aWRnZXQgY2xhc3M9
IlFMYWJlbCIgbmFtZT0ibGJsMSI+DQorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4NCisg
ICAgICAgIDxzdHJpbmcvPg0KKyAgICAgICA8L3Byb3BlcnR5Pg0KKyAgICAgIDwvd2lkZ2V0Pg0K
KyAgICAgPC9pdGVtPg0KKyAgICAgPGl0ZW0+DQorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVs
IiBuYW1lPSJsYmwyIj4NCisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1pbmltdW1TaXplIj4NCisg
ICAgICAgIDxzaXplPg0KKyAgICAgICAgIDx3aWR0aD4xMjA8L3dpZHRoPg0KKyAgICAgICAgIDxo
ZWlnaHQ+MzA8L2hlaWdodD4NCisgICAgICAgIDwvc2l6ZT4NCisgICAgICAgPC9wcm9wZXJ0eT4N
CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4NCisgICAgICAgIDxzaXplPg0K
KyAgICAgICAgIDx3aWR0aD4xMjA8L3dpZHRoPg0KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdo
dD4NCisgICAgICAgIDwvc2l6ZT4NCisgICAgICAgPC9wcm9wZXJ0eT4NCisgICAgICAgPHByb3Bl
cnR5IG5hbWU9InRleHQiPg0KKyAgICAgICAgPHN0cmluZz5JbWFnZSBmcm9tIFF0IHRvIEhUTUw8
L3N0cmluZz4NCisgICAgICAgPC9wcm9wZXJ0eT4NCisgICAgICA8L3dpZGdldD4NCisgICAgIDwv
aXRlbT4NCisgICAgIDxpdGVtPg0KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0i
bGJsMyI+DQorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4NCisgICAgICAgIDxzdHJpbmc+
UGl4bWFwIGZyb20gUXQgdG8gSFRNTDwvc3RyaW5nPg0KKyAgICAgICA8L3Byb3BlcnR5Pg0KKyAg
ICAgIDwvd2lkZ2V0Pg0KKyAgICAgPC9pdGVtPg0KKyAgICAgPGl0ZW0+DQorICAgICAgPHdpZGdl
dCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmw0Ij4NCisgICAgICAgPHByb3BlcnR5IG5hbWU9InRl
eHQiPg0KKyAgICAgICAgPHN0cmluZy8+DQorICAgICAgIDwvcHJvcGVydHk+DQorICAgICAgPC93
aWRnZXQ+DQorICAgICA8L2l0ZW0+DQorICAgICA8aXRlbT4NCisgICAgICA8c3BhY2VyIG5hbWU9
Imhvcml6b250YWxTcGFjZXIiPg0KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24i
Pg0KKyAgICAgICAgPGVudW0+UXQ6Okhvcml6b250YWw8L2VudW0+DQorICAgICAgIDwvcHJvcGVy
dHk+DQorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4NCisgICAg
ICAgIDxzaXplPg0KKyAgICAgICAgIDx3aWR0aD40MDwvd2lkdGg+DQorICAgICAgICAgPGhlaWdo
dD4yMDwvaGVpZ2h0Pg0KKyAgICAgICAgPC9zaXplPg0KKyAgICAgICA8L3Byb3BlcnR5Pg0KKyAg
ICAgIDwvc3BhY2VyPg0KKyAgICAgPC9pdGVtPg0KKyAgICA8L2xheW91dD4NCisgICA8L2l0ZW0+
DQorICA8L2xheW91dD4NCisgPC93aWRnZXQ+DQorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYi
IG1hcmdpbj0iMTEiLz4NCisgPGN1c3RvbXdpZGdldHM+DQorICA8Y3VzdG9td2lkZ2V0Pg0KKyAg
IDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+DQorICAgPGV4dGVuZHM+UVdpZGdldDwvZXh0ZW5kcz4N
CisgICA8aGVhZGVyPlF0V2ViS2l0L1FXZWJWaWV3PC9oZWFkZXI+DQorICA8L2N1c3RvbXdpZGdl
dD4NCisgPC9jdXN0b213aWRnZXRzPg0KKyA8cmVzb3VyY2VzLz4NCisgPGNvbm5lY3Rpb25zLz4N
Cis8L3VpPg0KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvaHlicmlkUGl4bWFw
LnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL2h5YnJpZFBp
eG1hcC5wcm8JKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL2h5
YnJpZFBpeG1hcC5wcm8JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKyMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgUHJvamVjdCBjcmVh
dGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAyDQorIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoraW5jbHVkZSguLi8uLi8uLi8uLi9X
ZWJLaXQucHJpKQ0KK1FUICs9IG5ldHdvcmsgZ3VpIHRlc3RsaWINCitUQVJHRVQgPSBoeWJyaWRQ
aXhtYXANCitURU1QTEFURSA9IGFwcA0KK1NPVVJDRVMgKz0gbWFpbi5jcHAgXA0KKyAgICB3aWRn
ZXQuY3BwDQorSEVBREVSUyArPSB3aWRnZXQuaA0KK0ZPUk1TICs9IHdpZGdldC51aQ0KK1JFU09V
UkNFUyArPSByZXNvdXJjZXMucXJjDQorT1RIRVJfRklMRVMgKz0gdGVzdC5odG1sDQorQ09ORklH
ICs9IGNvbnNvbGUNCitRTUFLRV9SUEFUSF9ESVI9JCRPVVRQVVRfRElSL2xpYiAkJFFNQUtFX1JQ
QVRIX0RJUg0KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdGVzdC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdGVzdC5odG1sCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90ZXN0Lmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKzxodG1sPg0KKyAgICA8aGVhZD4NCisgICAgICAgIDxz
dHlsZT4NCisgICAgICAgICAgICBpbWcgeyBkaXNwbGF5OiBibG9jazsgYm9yZGVyLXN0eWxlOiBn
cm9vdmV9DQorICAgICAgICA8L3N0eWxlPg0KKyAgICAgICAgPHNjcmlwdD4NCisgICAgICAgICAg
ICBmdW5jdGlvbiBzdGFydFRlc3QoKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAg
dmFyIGltZyA9IG15V2lkZ2V0LmltYWdlOw0KKyAgICAgICAgICAgICAgICB2YXIgcHhtID0gbXlX
aWRnZXQucGl4bWFwOw0KKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGltZyk7DQorICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocHhtKTsN
CisgICAgICAgICAgICAgICAgbXlXaWRnZXQuaW1hZ2UgPSBweG07DQorICAgICAgICAgICAgICAg
IG15V2lkZ2V0LnBpeG1hcCA9IGltZzsNCisgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGxl
dGVUZXN0KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgPC9zY3JpcHQ+DQorICAgIDwvaGVh
ZD4NCisgICAgPGJvZHkgb25sb2FkPSJzdGFydFRlc3QoKSI+DQorICAgIDwvYm9keT4NCis8L2h0
bWw+DQpJbmRleDogV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3NSBAQAorI2luY2x1ZGUgIndpZGdldC5oIg0KKyNpbmNsdWRlICJ1
aV93aWRnZXQuaCINCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiDQorI2luY2x1ZGUgPFF0VGVzdC9R
dFRlc3Q+DQorDQorV2lkZ2V0OjpXaWRnZXQoUVdpZGdldCAqcGFyZW50KSA6DQorICAgIFFXaWRn
ZXQocGFyZW50KSwNCisgICAgdWkobmV3IFVpOjpXaWRnZXQpDQorew0KKyAgICB1aS0+c2V0dXBV
aSh0aGlzKTsNCit9DQorDQordm9pZCBXaWRnZXQ6OnJlZnJlc2hKUygpDQorew0KKyAgICB1aS0+
d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0
KCJteVdpZGdldCIsdGhpcyk7DQorfQ0KK3ZvaWQgV2lkZ2V0OjpzdGFydCgpDQorew0KKyAgICB1
aS0+d2ViVmlldy0+bG9hZChRVXJsKCJxcmM6Ly8vdGVzdC5odG1sIikpOw0KKyAgICBjb25uZWN0
KHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLFNJR05BTChqYXZhU2NyaXB0V2luZG93
T2JqZWN0Q2xlYXJlZCgpKSx0aGlzLFNMT1QocmVmcmVzaEpTKCkpKTsNCisgICAgdWktPndlYlZp
ZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgibXlX
aWRnZXQiLHRoaXMpOw0KK30NCisNCit2b2lkIFdpZGdldDo6Y29tcGxldGVUZXN0KCkNCit7DQor
ICAgIFFDT01QQVJFKHVpLT5sYmwxLT5waXhtYXAoKS0+c2l6ZSgpLHVpLT5sYmwyLT5zaXplKCkp
Ow0KKyAgICBRQ09NUEFSRSh1aS0+bGJsMy0+c2l6ZSgpLHVpLT5sYmw0LT5waXhtYXAoKS0+c2l6
ZSgpKTsNCisgICAgZW1pdCB0ZXN0Q29tcGxldGUoKTsNCit9DQorDQordm9pZCBXaWRnZXQ6OnNl
dFBpeG1hcCAoY29uc3QgUVBpeG1hcCAmIHApDQorew0KKyAgICB1aS0+bGJsMS0+c2V0UGl4bWFw
KHApOw0KK30NCisjaW5jbHVkZSA8UURlYnVnPg0KK1FQaXhtYXAgV2lkZ2V0OjpwaXhtYXAoKSBj
b25zdA0KK3sNCisgICAgUVBpeG1hcCBweCh1aS0+bGJsMy0+c2l6ZSgpKTsNCisgICAgew0KKyAg
ICAgICAgUVBhaW50ZXIgcCgmcHgpOw0KKyAgICAgICAgdWktPmxibDMtPnJlbmRlcigmcCk7DQor
ICAgIH0NCisgICAgcmV0dXJuIHB4Ow0KK30NCit2b2lkIFdpZGdldDo6c2V0SW1hZ2UgKGNvbnN0
IFFJbWFnZSAmIGltZykNCit7DQorICAgIHVpLT5sYmw0LT5zZXRQaXhtYXAoUVBpeG1hcDo6ZnJv
bUltYWdlKGltZykpOw0KK30NCisNCitRSW1hZ2UgV2lkZ2V0OjppbWFnZSgpIGNvbnN0DQorew0K
KyAgICBRSW1hZ2UgaW1nKHVpLT5sYmwyLT5zaXplKCksUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsN
CisgICAgew0KKyAgICAgICAgUVBhaW50ZXIgcCgmaW1nKTsNCisgICAgICAgIHVpLT5sYmwyLT5y
ZW5kZXIoJnApOw0KKyAgICB9DQorICAgIHJldHVybiBpbWc7DQorfQ0KKw0KK1dpZGdldDo6fldp
ZGdldCgpDQorew0KKyAgICBkZWxldGUgdWk7DQorfQ0KKw0KK3ZvaWQgV2lkZ2V0OjpjaGFuZ2VF
dmVudChRRXZlbnQgKmUpDQorew0KKyAgICBRV2lkZ2V0OjpjaGFuZ2VFdmVudChlKTsNCisgICAg
c3dpdGNoIChlLT50eXBlKCkpIHsNCisgICAgY2FzZSBRRXZlbnQ6Okxhbmd1YWdlQ2hhbmdlOg0K
KyAgICAgICAgdWktPnJldHJhbnNsYXRlVWkodGhpcyk7DQorICAgICAgICBicmVhazsNCisgICAg
ZGVmYXVsdDoNCisgICAgICAgIGJyZWFrOw0KKyAgICB9DQorfQ0KSW5kZXg6IFdlYktpdC9xdC90
ZXN0cy9oeWJyaWRQaXhtYXAvbWFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3Rz
L2h5YnJpZFBpeG1hcC9tYWluLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAvbWFpbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKyNpbmNs
dWRlIDxRdEd1aS9RQXBwbGljYXRpb24+DQorI2luY2x1ZGUgIndpZGdldC5oIg0KKyNpbmNsdWRl
IDxRdFRlc3QvUXRUZXN0Pg0KK3N0YXRpYyBib29sIHdhaXRGb3JTaWduYWwoUU9iamVjdCogb2Jq
LCBjb25zdCBjaGFyKiBzaWduYWwsIGludCB0aW1lb3V0ID0gMCkNCit7DQorICAgIFFFdmVudExv
b3AgbG9vcDsNCisgICAgUU9iamVjdDo6Y29ubmVjdChvYmosIHNpZ25hbCwgJmxvb3AsIFNMT1Qo
cXVpdCgpKSk7DQorICAgIFFUaW1lciB0aW1lcjsNCisgICAgUVNpZ25hbFNweSB0aW1lb3V0U3B5
KCZ0aW1lciwgU0lHTkFMKHRpbWVvdXQoKSkpOw0KKyAgICBpZiAodGltZW91dCA+IDApIHsNCisg
ICAgICAgIFFPYmplY3Q6OmNvbm5lY3QoJnRpbWVyLCBTSUdOQUwodGltZW91dCgpKSwgJmxvb3As
IFNMT1QocXVpdCgpKSk7DQorICAgICAgICB0aW1lci5zZXRTaW5nbGVTaG90KHRydWUpOw0KKyAg
ICAgICAgdGltZXIuc3RhcnQodGltZW91dCk7DQorICAgIH0NCisgICAgbG9vcC5leGVjKCk7DQor
ICAgIHJldHVybiB0aW1lb3V0U3B5LmlzRW1wdHkoKTsNCit9DQorDQorY2xhc3MgdHN0X2h5YnJp
ZFBpeG1hcCA6IHB1YmxpYyBRT2JqZWN0DQorew0KKyAgICBRX09CSkVDVA0KKyAgICBXaWRnZXQg
KndkZzsNCisNCitwdWJsaWM6DQorICAgIHRzdF9oeWJyaWRQaXhtYXAoUU9iamVjdCogbyA9IE5V
TEwpIDogUU9iamVjdChvKSB7fQ0KK3B1YmxpYyBzbG90czoNCisgICAgdm9pZCBpbml0KCkNCisg
ICAgew0KKyAgICB9DQorDQorICAgIHZvaWQgY2xlYW51cCgpDQorICAgIHsNCisgICAgfQ0KK3By
aXZhdGUgc2xvdHM6DQorICAgIHZvaWQgaHlicmlkUGl4bWFwKCkNCisgICAgew0KKyAgICAgICAg
V2lkZ2V0IHdkZzsNCisgICAgICAgIHdkZy5zdGFydCgpOw0KKyAgICAgICAgd2FpdEZvclNpZ25h
bCgmIHdkZywgU0lHTkFMKHRlc3RDb21wbGV0ZSgpKSk7DQorICAgIH0NCit9Ow0KKw0KK1FURVNU
X01BSU4odHN0X2h5YnJpZFBpeG1hcCkNCisNCisjaW5jbHVkZSA8bWFpbi5tb2M+DQpJbmRleDog
V2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
NiBAQAorI2lmbmRlZiBXSURHRVRfSA0KKyNkZWZpbmUgV0lER0VUX0gNCisNCisjaW5jbHVkZSA8
UVdpZGdldD4NCisjaW5jbHVkZSA8UVBpeG1hcD4NCisjaW5jbHVkZSA8UUltYWdlPg0KK25hbWVz
cGFjZSBVaSB7DQorICAgIGNsYXNzIFdpZGdldDsNCit9DQorDQorY2xhc3MgV2lkZ2V0IDogcHVi
bGljIFFXaWRnZXQgew0KKyAgICBRX09CSkVDVA0KKyAgICBRX1BST1BFUlRZKFFQaXhtYXAgcGl4
bWFwIFJFQUQgcGl4bWFwIFdSSVRFIHNldFBpeG1hcCkNCisgICAgUV9QUk9QRVJUWShRSW1hZ2Ug
aW1hZ2UgUkVBRCBpbWFnZSBXUklURSBzZXRJbWFnZSkNCitwdWJsaWM6DQorICAgIFdpZGdldChR
V2lkZ2V0ICpwYXJlbnQgPSAwKTsNCisgICAgfldpZGdldCgpOw0KKyAgICB2b2lkIHNldFBpeG1h
cCAoY29uc3QgUVBpeG1hcCAmKTsNCisgICAgUVBpeG1hcCBwaXhtYXAoKSBjb25zdDsNCisgICAg
dm9pZCBzZXRJbWFnZSAoY29uc3QgUUltYWdlICYpOw0KKyAgICBRSW1hZ2UgaW1hZ2UoKSBjb25z
dDsNCitwcml2YXRlIHNsb3RzOg0KKyAgICB2b2lkIHJlZnJlc2hKUygpOw0KK3B1YmxpYyBzbG90
czoNCisgICAgdm9pZCBjb21wbGV0ZVRlc3QoKTsNCisgICAgdm9pZCBzdGFydCgpOw0KK3NpZ25h
bHM6DQorICAgIHZvaWQgdGVzdENvbXBsZXRlKCk7DQorcHJvdGVjdGVkOg0KKyAgICB2b2lkIGNo
YW5nZUV2ZW50KFFFdmVudCAqZSk7DQorDQorcHJpdmF0ZToNCisgICAgVWk6OldpZGdldCAqdWk7
DQorfTsNCisNCisjZW5kaWYgLy8gV0lER0VUX0gNCkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHli
cmlkUGl4bWFwL3Jlc291cmNlcy5xcmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5
YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJjCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3Rz
L2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJjCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAK
KzxSQ0M+CisgICAgPHFyZXNvdXJjZSBwcmVmaXg9Ii8iPgorICAgICAgICA8ZmlsZT50ZXN0Lmh0
bWw8L2ZpbGU+CisgICAgPC9xcmVzb3VyY2U+Cis8L1JDQz4KSW5kZXg6IFdlYktpdC9xdC90ZXN0
cy90ZXN0cy5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwkocmV2
aXNpb24gNTIwMzgpCisrKyBXZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJvCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNCBAQAogCiBURU1QTEFURSA9IHN1YmRpcnMKLVNVQkRJUlMgPSBxd2ViZnJh
bWUgcXdlYnBhZ2UgcXdlYmVsZW1lbnQgcWdyYXBoaWNzd2VidmlldyBxd2ViaGlzdG9yeWludGVy
ZmFjZSBxd2VidmlldyBxd2ViaGlzdG9yeSBxd2ViaW5zcGVjdG9yCitTVUJESVJTID0gcXdlYmZy
YW1lIHF3ZWJwYWdlIHF3ZWJlbGVtZW50IHFncmFwaGljc3dlYnZpZXcgcXdlYmhpc3RvcnlpbnRl
cmZhY2UgcXdlYnZpZXcgcXdlYmhpc3RvcnkgcXdlYmluc3BlY3RvciBoeWJyaWRQaXhtYXAKIGdy
ZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04sIDQpOiBTVUJESVJTICs9IGJlbmNobWFya3MvcGFp
bnRpbmcvdHN0X3BhaW50aW5nLnBybyBiZW5jaG1hcmtzL2xvYWRpbmcvdHN0X2xvYWRpbmcucHJv
CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gNTIwMzgpCisrKyBXZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
MTYgQEAKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZV9hcnJh
eS5oPgogI2luY2x1ZGUgPHJ1bnRpbWVfb2JqZWN0Lmg+CisjaW5jbHVkZSAicXBpeG1hcC5oIgor
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3RpbGxJbWFnZVF0LmgiCisjaW5j
bHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNs
dWRlICJKU0RPTVdpbmRvdy5oIgogCiAvLyBRdFNjcmlwdCBoYXMgdGhlc2UKIFFfREVDTEFSRV9N
RVRBVFlQRShRT2JqZWN0TGlzdCk7CkBAIC03MjAsNiArNzMwLDI2IEBACiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8
UVBpeG1hcCA+KCkKKyAgICAgICAgICAgICAgICB8fCBoaW50ID09IChRTWV0YVR5cGU6OlR5cGUp
cU1ldGFUeXBlSWQ8UUltYWdlPigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG9iamVjdC0+aW5o
ZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkgeworICAgICAgICAgICAgICAgICAg
ICBKU0hUTUxJbWFnZUVsZW1lbnQqIGVsID0gc3RhdGljX2Nhc3Q8SlNIVE1MSW1hZ2VFbGVtZW50
ICo+KG9iamVjdCk7CisgICAgICAgICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbC0+aW1wbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGltYWdlRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQ2FjaGVkSW1hZ2UqIGNJbWcgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY0ltZykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEltYWdlKiBpbWcgPSBjSW1nLT5pbWFnZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpbWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVBpeG1h
cCogcHhtID0gaW1nLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocHhtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxR
UGl4bWFwID4oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g
UVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFwPigqcHhtKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBRVmFyaWFudDo6ZnJvbVZhbHVlPFFJbWFnZT4ocHhtLT50
b0ltYWdlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmICho
aW50ID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGRpc3RhbmNlKQpAQCAtODQ5LDYgKzg3OSwyNSBAQAogICAgICAgICByZXR1
cm4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmosIHJvb3QsIFFTY3JpcHRFbmdpbmU6OlF0
T3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAKKyAgICBpZiAo
dHlwZSA9PSBxTWV0YVR5cGVJZDxRUGl4bWFwPigpIHx8IHR5cGUgPT0gcU1ldGFUeXBlSWQ8UUlt
YWdlPigpKSB7CisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWwgPSAoSlNET01HbG9i
YWxPYmplY3QqKXJvb3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBRUGl4bWFwIHB4bTsKKyAg
ICAgICAgaWYgKHR5cGUgPT0gcU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkKKyAgICAgICAgICAgIHB4
bSA9IHZhcmlhbnQudmFsdWU8UVBpeG1hcD4oKTsKKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBx
TWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgICAgICBweG0gPSBRUGl4bWFwOjpmcm9tSW1h
Z2UodmFyaWFudC52YWx1ZTxRSW1hZ2U+KCkpOworICAgICAgICBQYXNzUmVmUHRyPFN0aWxsSW1h
Z2U+IGJtcEltZyA9IFN0aWxsSW1hZ2U6OmNyZWF0ZShweG0pOworICAgICAgICBET01XaW5kb3cq
IGRXaW5kb3cgPSB0b0RPTVdpbmRvdyhnbG9iYWwpOworICAgICAgICBpZiAoZFdpbmRvdykgewor
ICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZFdpbmRvdy0+ZG9jdW1lbnQoKTsKKyAg
ICAgICAgICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IG5ldyBIVE1MSW1hZ2VF
bGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1bWVudCk7CisgICAgICAgICAgICBpbWFnZS0+
c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZEltYWdlKGJtcEltZy5nZXQoKSkpOworICAgICAgICAg
ICAgdG9KUyhleGVjLCBnbG9iYWwsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmV0
ID0gYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWwsIGltYWdlLnJlbGVhc2UoKSkpOworICAgICAg
ICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICh0eXBlID09IFFN
ZXRhVHlwZTo6UVZhcmlhbnRNYXApIHsKICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IG9iamVjdCwg
YW5kIHN0dWZmIHByb3BlcnRpZXMgaW50byBpdAogICAgICAgICBKU09iamVjdCogcmV0ID0gY29u
c3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Cg==
</data>
<flag name="review"
          id="26629"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44745</attachid>
            <date>2009-12-12 13:53:59 -0800</date>
            <delta_ts>2009-12-30 13:06:46 -0800</delta_ts>
            <desc>support for QPixmap/QImage handling in QtWebkit hybrid layer, revised with adherence to webkit coding style</desc>
            <filename>patch-hybrid-pixmap-2.diff</filename>
            <type>text/plain</type>
            <size>15147</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
dWkgdmVyc2lvbj0iNC4wIj4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4KKyA8d2lkZ2V0IGNsYXNz
PSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgor
ICAgPHJlY3Q+CisgICAgPHg+MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD42MDA8L3dp
ZHRoPgorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3RyaW5nPldpZGdldDwvc3Ry
aW5nPgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0i
dmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVdlYlZpZXci
IG5hbWU9IndlYlZpZXciPgorICAgICA8cHJvcGVydHkgbmFtZT0idXJsIj4KKyAgICAgIDx1cmw+
CisgICAgICAgPHN0cmluZz5hYm91dDpibGFuazwvc3RyaW5nPgorICAgICAgPC91cmw+CisgICAg
IDwvcHJvcGVydHk+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8
bGF5b3V0IGNsYXNzPSJRSEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRhbExheW91dCI+CisgICAg
IDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwxIj4KKyAgICAg
ICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJv
cGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAg
IDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAgICAgPHByb3BlcnR5IG5h
bWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93
aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4KKyAg
ICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWln
aHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPkltYWdlIGZyb20gUXQg
dG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAg
ICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFt
ZT0ibGJsMyI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5n
PlBpeG1hcCBmcm9tIFF0IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNs
YXNzPSJRTGFiZWwiIG5hbWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4K
KyAgICAgICAgPHN0cmluZy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0Pgor
ICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBuYW1lPSJob3Jpem9udGFs
U3BhY2VyIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICA8
ZW51bT5RdDo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAgPHNpemU+CisgICAg
ICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAg
ICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3BhY2VyPgorICAgICA8
L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0PgorIDwvd2lkZ2V0
PgorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKyA8Y3VzdG9td2lk
Z2V0cz4KKyAgPGN1c3RvbXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+CisgICA8
ZXh0ZW5kcz5RV2lkZ2V0PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdlYktpdC9RV2ViVmlldzwv
aGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdldHM+CisgPHJlc291cmNl
cy8+CisgPGNvbm5lY3Rpb25zLz4KKzwvdWk+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5
YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAyCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1
ZGUoLi4vLi4vLi4vLi4vV2ViS2l0LnByaSkKK1FUICs9IG5ldHdvcmsgZ3VpIHRlc3RsaWIKK1RB
UkdFVCA9IGh5YnJpZFBpeG1hcAorVEVNUExBVEUgPSBhcHAKK1NPVVJDRVMgKz0gdHN0X2h5YnJp
ZFBpeG1hcC5jcHAgXAorICAgIHdpZGdldC5jcHAKK0hFQURFUlMgKz0gd2lkZ2V0LmgKK0ZPUk1T
ICs9IHdpZGdldC51aQorUkVTT1VSQ0VTICs9IHJlc291cmNlcy5xcmMKK09USEVSX0ZJTEVTICs9
IHRlc3QuaHRtbAorQ09ORklHICs9IGNvbnNvbGUKK1FNQUtFX1JQQVRIX0RJUj0kJE9VVFBVVF9E
SVIvbGliICQkUU1BS0VfUlBBVEhfRElSCkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4
bWFwL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFw
L3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAv
dGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACis8aHRtbD4KKyAgICA8aGVh
ZD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgaW1nIHsgZGlzcGxheTogYmxvY2s7IGJv
cmRlci1zdHlsZTogZ3Jvb3ZlfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c2NyaXB0Pgor
ICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB2YXIgaW1nID0gbXlXaWRnZXQuaW1hZ2U7CisgICAgICAgICAgICAgICAgdmFyIHB4
bSA9IG15V2lkZ2V0LnBpeG1hcDsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGltZyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChw
eG0pOworICAgICAgICAgICAgICAgIG15V2lkZ2V0LmltYWdlID0gcHhtOworICAgICAgICAgICAg
ICAgIG15V2lkZ2V0LnBpeG1hcCA9IGltZzsKKyAgICAgICAgICAgICAgICBteVdpZGdldC5jb21w
bGV0ZVRlc3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9oZWFk
PgorICAgIDxib2R5IG9ubG9hZD0ic3RhcnRUZXN0KCkiPgorICAgIDwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqCisgKi8KKworI2luY2x1ZGUgIndpZGdldC5oIgorCisjaW5jbHVkZSAicXdlYmZyYW1l
LmgiCisjaW5jbHVkZSAidWlfd2lkZ2V0LmgiCisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKwor
V2lkZ2V0OjpXaWRnZXQoUVdpZGdldCAqcGFyZW50KSA6CisgICAgUVdpZGdldChwYXJlbnQpLAor
ICAgIHVpKG5ldyBVaTo6V2lkZ2V0KQoreworICAgIHVpLT5zZXR1cFVpKHRoaXMpOworfQorCit2
b2lkIFdpZGdldDo6cmVmcmVzaEpTKCkKK3sKKyAgICB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWlu
RnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJteVdpZGdldCIsIHRoaXMpOwor
fQordm9pZCBXaWRnZXQ6OnN0YXJ0KCkKK3sKKyAgICB1aS0+d2ViVmlldy0+bG9hZChRVXJsKCJx
cmM6Ly8vdGVzdC5odG1sIikpOworICAgIGNvbm5lY3QodWktPndlYlZpZXctPnBhZ2UoKS0+bWFp
bkZyYW1lKCksIFNJR05BTChqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpKSwgdGhpcywg
U0xPVChyZWZyZXNoSlMoKSkpOworICAgIHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgp
LT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15V2lkZ2V0IiwgdGhpcyk7Cit9CisKK3Zv
aWQgV2lkZ2V0Ojpjb21wbGV0ZVRlc3QoKQoreworICAgIFFDT01QQVJFKHVpLT5sYmwxLT5waXht
YXAoKS0+c2l6ZSgpLCB1aS0+bGJsMi0+c2l6ZSgpKTsKKyAgICBRQ09NUEFSRSh1aS0+bGJsMy0+
c2l6ZSgpLCB1aS0+bGJsNC0+cGl4bWFwKCktPnNpemUoKSk7CisgICAgZW1pdCB0ZXN0Q29tcGxl
dGUoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldFBpeG1hcChjb25zdCBRUGl4bWFwICYgcCkKK3sK
KyAgICB1aS0+bGJsMS0+c2V0UGl4bWFwKHApOworfQorUVBpeG1hcCBXaWRnZXQ6OnBpeG1hcCgp
IGNvbnN0Cit7CisgICAgUVBpeG1hcCBweCh1aS0+bGJsMy0+c2l6ZSgpKTsKKyAgICB7CisgICAg
ICAgIFFQYWludGVyIHAoJnB4KTsKKyAgICAgICAgdWktPmxibDMtPnJlbmRlcigmcCk7CisgICAg
fQorICAgIHJldHVybiBweDsKK30KK3ZvaWQgV2lkZ2V0OjpzZXRJbWFnZShjb25zdCBRSW1hZ2Ug
JiBpbWcpCit7CisgICAgdWktPmxibDQtPnNldFBpeG1hcChRUGl4bWFwOjpmcm9tSW1hZ2UoaW1n
KSk7Cit9CisKK1FJbWFnZSBXaWRnZXQ6OmltYWdlKCkgY29uc3QKK3sKKyAgICBRSW1hZ2UgaW1n
KHVpLT5sYmwyLT5zaXplKCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAgeworICAgICAg
ICBRUGFpbnRlciBwKCZpbWcpOworICAgICAgICB1aS0+bGJsMi0+cmVuZGVyKCZwKTsKKyAgICB9
CisgICAgcmV0dXJuIGltZzsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKKyAgICBkZWxldGUg
dWk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpjaGFuZ2VFdmVudChRRXZlbnQgKmUpCit7CisgICAgUVdp
ZGdldDo6Y2hhbmdlRXZlbnQoZSk7CisgICAgc3dpdGNoIChlLT50eXBlKCkpIHsKKyAgICBjYXNl
IFFFdmVudDo6TGFuZ3VhZ2VDaGFuZ2U6CisgICAgICAgIHVpLT5yZXRyYW5zbGF0ZVVpKHRoaXMp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9
CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgJKHJldmlzaW9uIDApCisr
KyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
KgorICovCisKKyNpZm5kZWYgV0lER0VUX0gKKyNkZWZpbmUgV0lER0VUX0gKKworI2luY2x1ZGUg
PFFJbWFnZT4KKyNpbmNsdWRlIDxRUGl4bWFwPgorI2luY2x1ZGUgPFFXaWRnZXQ+CisKK25hbWVz
cGFjZSBVaSB7CitjbGFzcyBXaWRnZXQ7Cit9CisKK2NsYXNzIFdpZGdldCA6IHB1YmxpYyBRV2lk
Z2V0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFkoUVBpeG1hcCBwaXhtYXAgUkVBRCBw
aXhtYXAgV1JJVEUgc2V0UGl4bWFwKQorICAgIFFfUFJPUEVSVFkoUUltYWdlIGltYWdlIFJFQUQg
aW1hZ2UgV1JJVEUgc2V0SW1hZ2UpCitwdWJsaWM6CisgICAgV2lkZ2V0KFFXaWRnZXQgKnBhcmVu
dCA9IDApOworICAgIH5XaWRnZXQoKTsKKyAgICB2b2lkIHNldFBpeG1hcChjb25zdCBRUGl4bWFw
ICYpOworICAgIFFQaXhtYXAgcGl4bWFwKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbWFnZShjb25z
dCBRSW1hZ2UgJik7CisgICAgUUltYWdlIGltYWdlKCkgY29uc3Q7Citwcml2YXRlIHNsb3RzOgor
ICAgIHZvaWQgcmVmcmVzaEpTKCk7CitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBjb21wbGV0ZVRl
c3QoKTsKKyAgICB2b2lkIHN0YXJ0KCk7CitzaWduYWxzOgorICAgIHZvaWQgdGVzdENvbXBsZXRl
KCk7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBjaGFuZ2VFdmVudChRRXZlbnQgKmUpOworCitwcml2
YXRlOgorICAgIFVpOjpXaWRnZXQgKnVpOworfTsKKworI2VuZGlmIC8vIFdJREdFVF9ICkluZGV4
OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3RzdF9oeWJyaWRQaXhtYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3RzdF9oeWJy
aWRQaXhtYXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICIuLi91dGls
LmgiCisKKyNpbmNsdWRlICJ3aWRnZXQuaCIKKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgorCitj
bGFzcyB0c3RfaHlicmlkUGl4bWFwIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisK
K3B1YmxpYzoKKyAgICB0c3RfaHlicmlkUGl4bWFwKFFPYmplY3QqIG8gPSAwKSA6IFFPYmplY3Qo
bykge30KK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGluaXQoKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGNsZWFudXAoKQorICAgIHsKKyAgICB9Citwcml2YXRlIHNsb3RzOgorICAgIHZvaWQg
aHlicmlkUGl4bWFwKCkKKyAgICB7CisgICAgICAgIFdpZGdldCB3ZGc7CisgICAgICAgIHdkZy5z
dGFydCgpOworICAgICAgICB3YWl0Rm9yU2lnbmFsKCYgd2RnLCBTSUdOQUwodGVzdENvbXBsZXRl
KCkpKTsKKyAgICB9Citwcml2YXRlOgorICAgIFdpZGdldCogd2RnOworCisKK307CisKK1FURVNU
X01BSU4odHN0X2h5YnJpZFBpeG1hcCkKKworI2luY2x1ZGUgPG1haW4ubW9jPgpJbmRleDogV2Vi
S2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJjCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvcmVzb3VyY2VzLnFyYwkocmV2aXNpb24gMCkKKysr
IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvcmVzb3VyY2VzLnFyYwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1IEBACis8UkNDPgorICAgIDxxcmVzb3VyY2UgcHJlZml4PSIvIj4KKyAgICAg
ICAgPGZpbGU+dGVzdC5odG1sPC9maWxlPgorICAgIDwvcXJlc291cmNlPgorPC9SQ0M+CkluZGV4
OiBXZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0
cy90ZXN0cy5wcm8JKHJldmlzaW9uIDUyMDM4KQorKysgV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKIAogVEVNUExBVEUgPSBzdWJkaXJzCi1T
VUJESVJTID0gcXdlYmZyYW1lIHF3ZWJwYWdlIHF3ZWJlbGVtZW50IHFncmFwaGljc3dlYnZpZXcg
cXdlYmhpc3RvcnlpbnRlcmZhY2UgcXdlYnZpZXcgcXdlYmhpc3RvcnkgcXdlYmluc3BlY3Rvcgor
U1VCRElSUyA9IHF3ZWJmcmFtZSBxd2VicGFnZSBxd2ViZWxlbWVudCBxZ3JhcGhpY3N3ZWJ2aWV3
IHF3ZWJoaXN0b3J5aW50ZXJmYWNlIHF3ZWJ2aWV3IHF3ZWJoaXN0b3J5IHF3ZWJpbnNwZWN0b3Ig
aHlicmlkUGl4bWFwCiBncmVhdGVyVGhhbihRVF9NSU5PUl9WRVJTSU9OLCA0KTogU1VCRElSUyAr
PSBiZW5jaG1hcmtzL3BhaW50aW5nL3RzdF9wYWludGluZy5wcm8gYmVuY2htYXJrcy9sb2FkaW5n
L3RzdF9sb2FkaW5nLnBybwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHJldmlzaW9u
IDUyMDM4KQorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxLDI2ICsyMSwzNiBAQAogI2luY2x1ZGUgInF0X3J1bnRpbWUuaCIKIAogI2luY2x1
ZGUgIkJvb2xlYW5PYmplY3QuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUg
IkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZS5oIgogI2luY2x1ZGUgIkRhdGVN
YXRoLmgiCiAjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uUHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgog
I2luY2x1ZGUgIkpTQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5j
bHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1
ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUg
IkpTTm9kZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRlICJSZWdFeHBD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKICNpbmNsdWRl
ICJxZGF0ZXRpbWUuaCIKICNpbmNsdWRlICJxZGVidWcuaCIKICNpbmNsdWRlICJxbWV0YW9iamVj
dC5oIgogI2luY2x1ZGUgInFtZXRhdHlwZS5oIgogI2luY2x1ZGUgInFvYmplY3QuaCIKKyNpbmNs
dWRlICJxcGl4bWFwLmgiCiAjaW5jbHVkZSAicXN0cmluZ2xpc3QuaCIKICNpbmNsdWRlICJxdF9p
bnN0YW5jZS5oIgogI2luY2x1ZGUgInF2YXJsZW5ndGhhcnJheS5oIgpAQCAtNTEsNiArNjEsNyBA
QAogI2luY2x1ZGUgPHJ1bnRpbWVfYXJyYXkuaD4KICNpbmNsdWRlIDxydW50aW1lX29iamVjdC5o
PgogCisKIC8vIFF0U2NyaXB0IGhhcyB0aGVzZQogUV9ERUNMQVJFX01FVEFUWVBFKFFPYmplY3RM
aXN0KTsKIFFfREVDTEFSRV9NRVRBVFlQRShRTGlzdDxpbnQ+KTsKQEAgLTcyMCw2ICs3MzEsMjYg
QEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpU
eXBlKSBxTWV0YVR5cGVJZDxRUGl4bWFwID4oKQorICAgICAgICAgICAgICAgIHx8IGhpbnQgPT0g
KFFNZXRhVHlwZTo6VHlwZSlxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNIVE1MSW1hZ2VFbGVtZW50OjpzX2luZm8pKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEpTSFRNTEltYWdlRWxlbWVudCogZWwgPSBzdGF0aWNfY2FzdDxK
U0hUTUxJbWFnZUVsZW1lbnQgKj4ob2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+
KGVsLT5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VFbGVtZW50KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBDYWNoZWRJbWFnZSogY0ltZyA9IGltYWdlRWxlbWVudC0+
Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjSW1nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2UqIGltZyA9IGNJbWctPmltYWdlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltZykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBRUGl4bWFwKiBweG0gPSBpbWctPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChweG0pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IChoaW50ID09IChRTWV0YVR5cGU6OlR5
cGUpIHFNZXRhVHlwZUlkPFFQaXhtYXAgPigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KCpweG0pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFs
dWU8UUltYWdlPihweG0tPnRvSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZh
cmlhbnQ+KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UpCkBAIC04NDksNiArODgwLDI1
IEBACiAgICAgICAgIHJldHVybiBRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKG9iaiwgcm9vdCwg
UVNjcmlwdEVuZ2luZTo6UXRPd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwog
ICAgIH0KIAorICAgIGlmICh0eXBlID09IHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkgfHwgdHlwZSA9
PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpIHsKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbCA9IChKU0RPTUdsb2JhbE9iamVjdCopcm9vdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAg
IFFQaXhtYXAgcHhtOworICAgICAgICBpZiAodHlwZSA9PSBxTWV0YVR5cGVJZDxRUGl4bWFwPigp
KQorICAgICAgICAgICAgcHhtID0gdmFyaWFudC52YWx1ZTxRUGl4bWFwPigpOworICAgICAgICBl
bHNlIGlmICh0eXBlID09IHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkKKyAgICAgICAgICAgIHB4bSA9
IFFQaXhtYXA6OmZyb21JbWFnZSh2YXJpYW50LnZhbHVlPFFJbWFnZT4oKSk7CisgICAgICAgIFBh
c3NSZWZQdHI8U3RpbGxJbWFnZT4gYm1wSW1nID0gU3RpbGxJbWFnZTo6Y3JlYXRlKHB4bSk7Cisg
ICAgICAgIERPTVdpbmRvdyogZFdpbmRvdyA9IHRvRE9NV2luZG93KGdsb2JhbCk7CisgICAgICAg
IGlmIChkV2luZG93KSB7CisgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBkV2luZG93
LT5kb2N1bWVudCgpOworICAgICAgICAgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdl
ID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcsIGRvY3VtZW50KTsKKyAg
ICAgICAgICAgIGltYWdlLT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2UoYm1wSW1nLmdl
dCgpKSk7CisgICAgICAgICAgICB0b0pTKGV4ZWMsIGdsb2JhbCwgZG9jdW1lbnQpOworICAgICAg
ICAgICAgSlNWYWx1ZSByZXQgPSBhc09iamVjdCh0b0pTKGV4ZWMsIGdsb2JhbCwgaW1hZ2UucmVs
ZWFzZSgpKSk7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgfQorCiAg
ICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRVmFyaWFudE1hcCkgewogICAgICAgICAvLyBjcmVh
dGUgYSBuZXcgb2JqZWN0LCBhbmQgc3R1ZmYgcHJvcGVydGllcyBpbnRvIGl0CiAgICAgICAgIEpT
T2JqZWN0KiByZXQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsK
</data>
<flag name="review"
          id="26647"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45678</attachid>
            <date>2009-12-30 13:06:46 -0800</date>
            <delta_ts>2009-12-30 13:38:35 -0800</delta_ts>
            <desc>Refactor of hybrid pixmap transferring, with an intermediate object</desc>
            <filename>patch-hybrid-pixmap-3.diff</filename>
            <type>text/plain</type>
            <size>28938</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
dWkgdmVyc2lvbj0iNC4wIj4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4KKyA8d2lkZ2V0IGNsYXNz
PSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgor
ICAgPHJlY3Q+CisgICAgPHg+MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD42MDA8L3dp
ZHRoPgorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3RyaW5nPldpZGdldDwvc3Ry
aW5nPgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0i
dmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVdlYlZpZXci
IG5hbWU9IndlYlZpZXciPgorICAgICA8cHJvcGVydHkgbmFtZT0idXJsIj4KKyAgICAgIDx1cmw+
CisgICAgICAgPHN0cmluZz5hYm91dDpibGFuazwvc3RyaW5nPgorICAgICAgPC91cmw+CisgICAg
IDwvcHJvcGVydHk+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8
bGF5b3V0IGNsYXNzPSJRSEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRhbExheW91dCI+CisgICAg
IDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwxIj4KKyAgICAg
ICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJv
cGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAg
IDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAgICAgPHByb3BlcnR5IG5h
bWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93
aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4KKyAg
ICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWln
aHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPkltYWdlIGZyb20gUXQg
dG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAg
ICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFt
ZT0ibGJsMyI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5n
PlBpeG1hcCBmcm9tIFF0IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNs
YXNzPSJRTGFiZWwiIG5hbWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4K
KyAgICAgICAgPHN0cmluZy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0Pgor
ICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBuYW1lPSJob3Jpem9udGFs
U3BhY2VyIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICA8
ZW51bT5RdDo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAgPHNpemU+CisgICAg
ICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAg
ICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3BhY2VyPgorICAgICA8
L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0PgorIDwvd2lkZ2V0
PgorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKyA8Y3VzdG9td2lk
Z2V0cz4KKyAgPGN1c3RvbXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+CisgICA8
ZXh0ZW5kcz5RV2lkZ2V0PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdlYktpdC9RV2ViVmlldzwv
aGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdldHM+CisgPHJlc291cmNl
cy8+CisgPGNvbm5lY3Rpb25zLz4KKzwvdWk+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5
YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAyCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1
ZGUoLi4vLi4vLi4vLi4vV2ViS2l0LnByaSkKK1FUICs9IG5ldHdvcmsgZ3VpIHRlc3RsaWIKK1RB
UkdFVCA9IGh5YnJpZFBpeG1hcAorVEVNUExBVEUgPSBhcHAKK1NPVVJDRVMgKz0gdHN0X2h5YnJp
ZFBpeG1hcC5jcHAgXAorICAgIHdpZGdldC5jcHAKK0hFQURFUlMgKz0gd2lkZ2V0LmgKK0ZPUk1T
ICs9IHdpZGdldC51aQorUkVTT1VSQ0VTICs9IHJlc291cmNlcy5xcmMKK09USEVSX0ZJTEVTICs9
IHRlc3QuaHRtbAorQ09ORklHICs9IGNvbnNvbGUKK1FNQUtFX1JQQVRIX0RJUj0kJE9VVFBVVF9E
SVIvbGliICQkUU1BS0VfUlBBVEhfRElSCkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4
bWFwL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFw
L3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAv
dGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8aHRtbD4KKyAgICA8aGVh
ZD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgaW1nIHsgZGlzcGxheTogYmxvY2s7IGJv
cmRlci1zdHlsZTogZ3Jvb3ZlfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c2NyaXB0Pgor
ICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CisgICAgICAgICAgICAgICAgdmFyIHB4
bSA9IG15V2lkZ2V0LnBpeG1hcDsKKyAgICAgICAgICAgICAgICB2YXIgaW1nID0gb2JqLnRvSFRN
TEltYWdlRWxlbWVudCgpOworICAgICAgICAgICAgICAgIHZhciBpbWcxID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImltZzEiKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1nMiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJpbWcyIik7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpbWcpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQocHhtLnRvSFRNTEltYWdlRWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBj
b21wbGV0ZUlmRG9uZSgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaW1nMS5jb21wbGV0ZSAmJiBpbWcyLmNvbXBsZXRlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBteVdpZGdldC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbWcyLm9ubG9hZCA9IGNvbXBsZXRlSWZE
b25lOworICAgICAgICAgICAgICAgIGltZzEub25sb2FkID0gY29tcGxldGVJZkRvbmU7CisgICAg
ICAgICAgICAgICAgaW1nMS5zcmMgPSBvYmoudG9EYXRhVXJsKCk7CisgICAgICAgICAgICAgICAg
aW1nMi5zcmMgPSBteVdpZGdldC5waXhtYXAudG9EYXRhVXJsKCk7CisgICAgICAgICAgICAgICAg
bXlXaWRnZXQuaW1hZ2UgPSBweG07CisgICAgICAgICAgICAgICAgbXlXaWRnZXQucGl4bWFwID0g
aW1nOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAg
PGJvZHkgb25sb2FkPSJzdGFydFRlc3QoKSI+CisgICAgICAgIDxpbWcgaWQ9ImltZzEiIC8+Cisg
ICAgICAgIDxpbWcgaWQ9ImltZzIiIC8+CisgICAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogV2Vi
S2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAq
LworCisjaW5jbHVkZSAid2lkZ2V0LmgiCisKKyNpbmNsdWRlICJxd2ViZWxlbWVudC5oIgorI2lu
Y2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUgInVpX3dpZGdldC5oIgorI2luY2x1ZGUgPFF0
VGVzdC9RdFRlc3Q+CisKK1dpZGdldDo6V2lkZ2V0KFFXaWRnZXQgKnBhcmVudCkgOgorICAgIFFX
aWRnZXQocGFyZW50KSwKKyAgICB1aShuZXcgVWk6OldpZGdldCkKK3sKKyAgICB1aS0+c2V0dXBV
aSh0aGlzKTsKK30KKwordm9pZCBXaWRnZXQ6OnJlZnJlc2hKUygpCit7CisgICAgdWktPndlYlZp
ZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgibXlX
aWRnZXQiLCB0aGlzKTsKK30KK3ZvaWQgV2lkZ2V0OjpzdGFydCgpCit7CisgICAgdWktPndlYlZp
ZXctPmxvYWQoUVVybCgicXJjOi8vL3Rlc3QuaHRtbCIpKTsKKyAgICBjb25uZWN0KHVpLT53ZWJW
aWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLCBTSUdOQUwoamF2YVNjcmlwdFdpbmRvd09iamVjdENs
ZWFyZWQoKSksIHRoaXMsIFNMT1QocmVmcmVzaEpTKCkpKTsKKyAgICB1aS0+d2ViVmlldy0+cGFn
ZSgpLT5tYWluRnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJteVdpZGdldCIs
IHRoaXMpOworfQorCit2b2lkIFdpZGdldDo6Y29tcGxldGVUZXN0KCkKK3sKKyAgICBRQ09NUEFS
RSh1aS0+bGJsMS0+cGl4bWFwKCktPnNpemUoKSwgdWktPmxibDItPnNpemUoKSk7CisgICAgUUNP
TVBBUkUodWktPmxibDMtPnNpemUoKSwgdWktPmxibDQtPnBpeG1hcCgpLT5zaXplKCkpOworICAg
IFFDT01QQVJFKHVpLT5sYmwyLT5zaXplKCkud2lkdGgoKSwgdWktPndlYlZpZXctPnBhZ2UoKS0+
bWFpbkZyYW1lKCktPmZpbmRGaXJzdEVsZW1lbnQoIiNpbWcxIikuZXZhbHVhdGVKYXZhU2NyaXB0
KCJ0aGlzLndpZHRoIikudG9JbnQoKSk7CisgICAgUUNPTVBBUkUodWktPmxibDMtPnNpemUoKS53
aWR0aCgpLCB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZmluZEZpcnN0RWxlbWVu
dCgiI2ltZzIiKS5ldmFsdWF0ZUphdmFTY3JpcHQoInRoaXMud2lkdGgiKS50b0ludCgpKTsKKyAg
ICBlbWl0IHRlc3RDb21wbGV0ZSgpOworfQorCit2b2lkIFdpZGdldDo6c2V0UGl4bWFwKGNvbnN0
IFFQaXhtYXAgJiBwKQoreworICAgIHVpLT5sYmwxLT5zZXRQaXhtYXAocCk7Cit9CitRUGl4bWFw
IFdpZGdldDo6cGl4bWFwKCkgY29uc3QKK3sKKyAgICBRUGl4bWFwIHB4KHVpLT5sYmwzLT5zaXpl
KCkpOworICAgIHsKKyAgICAgICAgUVBhaW50ZXIgcCgmcHgpOworICAgICAgICB1aS0+bGJsMy0+
cmVuZGVyKCZwKTsKKyAgICB9CisgICAgcmV0dXJuIHB4OworfQordm9pZCBXaWRnZXQ6OnNldElt
YWdlKGNvbnN0IFFJbWFnZSAmIGltZykKK3sKKyAgICB1aS0+bGJsNC0+c2V0UGl4bWFwKFFQaXht
YXA6OmZyb21JbWFnZShpbWcpKTsKK30KKworUUltYWdlIFdpZGdldDo6aW1hZ2UoKSBjb25zdAor
eworICAgIFFJbWFnZSBpbWcodWktPmxibDItPnNpemUoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMy
KTsKKyAgICB7CisgICAgICAgIFFQYWludGVyIHAoJmltZyk7CisgICAgICAgIHVpLT5sYmwyLT5y
ZW5kZXIoJnApOworICAgIH0KKyAgICByZXR1cm4gaW1nOworfQorCitXaWRnZXQ6On5XaWRnZXQo
KQoreworICAgIGRlbGV0ZSB1aTsKK30KKwordm9pZCBXaWRnZXQ6OmNoYW5nZUV2ZW50KFFFdmVu
dCAqZSkKK3sKKyAgICBRV2lkZ2V0OjpjaGFuZ2VFdmVudChlKTsKKyAgICBzd2l0Y2ggKGUtPnR5
cGUoKSkgeworICAgIGNhc2UgUUV2ZW50OjpMYW5ndWFnZUNoYW5nZToKKyAgICAgICAgdWktPnJl
dHJhbnNsYXRlVWkodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lk
Z2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQu
aAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiB3aWRnZXRfaAorI2RlZmluZSB3aWRn
ZXRfaAorCisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQaXhtYXA+CisjaW5jbHVkZSA8
UVdpZGdldD4KKworbmFtZXNwYWNlIFVpIHsKK2NsYXNzIFdpZGdldDsKK30KKworY2xhc3MgV2lk
Z2V0IDogcHVibGljIFFXaWRnZXQgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRUGl4
bWFwIHBpeG1hcCBSRUFEIHBpeG1hcCBXUklURSBzZXRQaXhtYXApCisgICAgUV9QUk9QRVJUWShR
SW1hZ2UgaW1hZ2UgUkVBRCBpbWFnZSBXUklURSBzZXRJbWFnZSkKK3B1YmxpYzoKKyAgICBXaWRn
ZXQoUVdpZGdldCAqcGFyZW50ID0gMCk7CisgICAgfldpZGdldCgpOworICAgIHZvaWQgc2V0UGl4
bWFwKGNvbnN0IFFQaXhtYXAgJik7CisgICAgUVBpeG1hcCBwaXhtYXAoKSBjb25zdDsKKyAgICB2
b2lkIHNldEltYWdlKGNvbnN0IFFJbWFnZSAmKTsKKyAgICBRSW1hZ2UgaW1hZ2UoKSBjb25zdDsK
K3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCByZWZyZXNoSlMoKTsKK3B1YmxpYyBzbG90czoKKyAg
ICB2b2lkIGNvbXBsZXRlVGVzdCgpOworICAgIHZvaWQgc3RhcnQoKTsKK3NpZ25hbHM6CisgICAg
dm9pZCB0ZXN0Q29tcGxldGUoKTsKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGNoYW5nZUV2ZW50KFFF
dmVudCAqZSk7CisKK3ByaXZhdGU6CisgICAgVWk6OldpZGdldCAqdWk7Cit9OworCisjZW5kaWYg
Ly8gd2lkZ2V0X2gKSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0X2h5YnJp
ZFBpeG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90
c3RfaHlicmlkUGl4bWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJy
aWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKwor
I2luY2x1ZGUgIi4uL3V0aWwuaCIKKworI2luY2x1ZGUgIndpZGdldC5oIgorI2luY2x1ZGUgPFF0
VGVzdC9RdFRlc3Q+CisKK2NsYXNzIHRzdF9oeWJyaWRQaXhtYXAgOiBwdWJsaWMgUU9iamVjdCB7
CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIHRzdF9oeWJyaWRQaXhtYXAoUU9iamVjdCog
byA9IDApIDogUU9iamVjdChvKSB7fQorcHVibGljIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgY2xlYW51cCgpCisgICAgeworICAgIH0KK3ByaXZhdGUg
c2xvdHM6CisgICAgdm9pZCBoeWJyaWRQaXhtYXAoKQorICAgIHsKKyAgICAgICAgV2lkZ2V0IHdk
ZzsKKyAgICAgICAgd2RnLnNob3coKTsKKyAgICAgICAgd2RnLnN0YXJ0KCk7CisgICAgICAgIHdh
aXRGb3JTaWduYWwoJiB3ZGcsIFNJR05BTCh0ZXN0Q29tcGxldGUoKSkpOworICAgIH0KK3ByaXZh
dGU6CisgICAgV2lkZ2V0KiB3ZGc7CisKKworfTsKKworUVRFU1RfTUFJTih0c3RfaHlicmlkUGl4
bWFwKQorCisjaW5jbHVkZSA8dHN0X2h5YnJpZFBpeG1hcC5tb2M+CkluZGV4OiBXZWJLaXQvcXQv
dGVzdHMvaHlicmlkUGl4bWFwL3Jlc291cmNlcy5xcmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJjCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJjCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUgQEAKKzxSQ0M+CisgICAgPHFyZXNvdXJjZSBwcmVmaXg9Ii8iPgorICAgICAgICA8Zmls
ZT50ZXN0Lmh0bWw8L2ZpbGU+CisgICAgPC9xcmVzb3VyY2U+Cis8L1JDQz4KSW5kZXg6IFdlYktp
dC9xdC90ZXN0cy90ZXN0cy5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL3Rlc3Rz
LnBybwkocmV2aXNpb24gNTI2MzgpCisrKyBXZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogCiBURU1QTEFURSA9IHN1YmRpcnMKLVNVQkRJUlMg
PSBxd2ViZnJhbWUgcXdlYnBhZ2UgcXdlYmVsZW1lbnQgcWdyYXBoaWNzd2VidmlldyBxd2ViaGlz
dG9yeWludGVyZmFjZSBxd2VidmlldyBxd2ViaGlzdG9yeSBxd2ViaW5zcGVjdG9yCitTVUJESVJT
ID0gcXdlYmZyYW1lIHF3ZWJwYWdlIHF3ZWJlbGVtZW50IHFncmFwaGljc3dlYnZpZXcgcXdlYmhp
c3RvcnlpbnRlcmZhY2UgcXdlYnZpZXcgcXdlYmhpc3RvcnkgcXdlYmluc3BlY3RvciBoeWJyaWRQ
aXhtYXAKIGdyZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04sIDQpOiBTVUJESVJTICs9IGJlbmNo
bWFya3MvcGFpbnRpbmcgYmVuY2htYXJrcy9sb2FkaW5nCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDUyNjM4KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTQ5Niw2ICsxNDk2LDcg
QEAKICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuaCBcCiAgICAgYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmggXAogICAgIGJyaWRnZS9xdC9xdF9ydW50aW1lLmggXAorICAgIGJyaWRnZS9xdC9xdF9waXht
YXBydW50aW1lLmggXAogICAgIGJyaWRnZS9ydW50aW1lX2FycmF5LmggXAogICAgIGJyaWRnZS9y
dW50aW1lLmggXAogICAgIGJyaWRnZS9ydW50aW1lX21ldGhvZC5oIFwKQEAgLTIzOTIsNiArMjM5
Myw3IEBACiAgICAgYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlclF0LmNwcCBcCiAgICAgYnJp
ZGdlL3F0L3F0X2NsYXNzLmNwcCBcCiAgICAgYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcCBcCisg
ICAgYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwIFwKICAgICBicmlkZ2UvcXQvcXRfcnVu
dGltZS5jcHAgXAogICAgIHBhZ2UvcXQvRHJhZ0NvbnRyb2xsZXJRdC5jcHAgXAogICAgIHBhZ2Uv
cXQvRXZlbnRIYW5kbGVyUXQuY3BwIFwKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1h
cHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1
bnRpbWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVu
dGltZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgorCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisj
aW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgor
I2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlN0
aWxsSW1hZ2VRdC5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiSlNHbG9i
YWxPYmplY3QuaCIKKyNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKKyNpbmNsdWRlIDxRQnVmZmVy
PgorI2luY2x1ZGUgPFFCeXRlQXJyYXk+CisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQ
aXhtYXA+CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVkZSA8cnVudGltZV9vYmplY3QuaD4K
KyNpbmNsdWRlIDxydW50aW1lX3Jvb3QuaD4KKyNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNl
IEJpbmRpbmdzIHsKKworICAgIGNsYXNzIFF0UGl4bWFwQ2xhc3MgOiBwdWJsaWMgQ2xhc3Mgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgUXRQaXhtYXBDbGFzcygpOworICAgICAgICB2aXJ0dWFsIE1l
dGhvZExpc3QgbWV0aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSopIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIEZpZWxkKiBmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJ
bnN0YW5jZSopIGNvbnN0OworICAgIH07CisKKworICAgIGNsYXNzIFF0UGl4bWFwV2lkdGhGaWVs
ZCA6IHB1YmxpYyBGaWVsZAorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBuYW1lKCkge3JldHVybiAid2lkdGgiOyB9CisgICAgICAgIHZpcnR1YWwgSlNWYWx1
ZSB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBwaXht
YXApIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLHN0
YXRpY19jYXN0PGNvbnN0IFF0UGl4bWFwSW5zdGFuY2UqPihwaXhtYXApLT53aWR0aCgpKTsKKyAg
ICAgICAgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0
ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkgY29uc3R7fQorICAgIH07CisgICAgY2xhc3Mg
UXRQaXhtYXBIZWlnaHRGaWVsZCA6IHB1YmxpYyBGaWVsZHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBuYW1lKCkge3JldHVybiAiaGVpZ2h0IjsgfQorICAgICAgICB2
aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJ
bnN0YW5jZSogaW5zdCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGpzTnVt
YmVyKGV4ZWMsc3RhdGljX2Nhc3Q8Y29uc3QgUXRQaXhtYXBJbnN0YW5jZSo+KGluc3QpLT5oZWln
aHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5j
ZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUpIGNvbnN0e30KKyAgICB9Owor
CisgICAgY2xhc3MgUXRQaXhtYXBSdW50aW1lTWV0aG9kIDogcHVibGljIE1ldGhvZCB7CisgICAg
cHVibGljOgorICAgICAgICB2aXJ0dWFsIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBK
U1ZhbHVlIGludm9rZShFeGVjU3RhdGUqIGV4ZWMsIFFWYXJpYW50ICYsUGFzc1JlZlB0cjxSb290
T2JqZWN0PiByb290KSA9IDA7CisKKyAgICB9OworCisgICAgY2xhc3MgUXRQaXhtYXBDcmVhdGVF
bGVtZW50TWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1ldGhvZCB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsgcmV0dXJuICJ0b0hUTUxJbWFn
ZUVsZW1lbnQiOyB9CisgICAgICAgIEpTVmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZh
cmlhbnQgJiB2LFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCkKKyAgICAgICAgeworICAgICAg
ICAgICAgUVBpeG1hcCBweG07CisgICAgICAgICAgICBpZiAodi50eXBlKCkgPT0gKFFWYXJpYW50
OjpUeXBlKShxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKSB7CisgICAgICAgICAgICAgICAgcHhtID0g
UVBpeG1hcDo6ZnJvbUltYWdlKHYudmFsdWU8UUltYWdlPigpKTsKKyAgICAgICAgICAgICAgICB2
ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFwPihweG0pOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgcHhtID0gdi52YWx1ZTxRUGl4bWFwPigpOworCisgICAgICAgICAg
ICBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGltZyA9IFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0
ZShweG0pOworICAgICAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbCA9IChKU0RPTUds
b2JhbE9iamVjdCopcm9vdC0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoZ2xvYmFs
KSB7CisgICAgICAgICAgICAgICAgRE9NV2luZG93KiBkV2luZG93ID0gdG9ET01XaW5kb3coZ2xv
YmFsKTsKKyAgICAgICAgICAgICAgICBpZiAoZFdpbmRvdykgeworICAgICAgICAgICAgICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBkV2luZG93LT5kb2N1bWVudCgpOworICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4gaW1hZ2UgPSBuZXcgSFRNTEltYWdlRWxl
bWVudChIVE1MTmFtZXM6OmltZ1RhZywgZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICBp
bWFnZS0+c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZEltYWdlKGltZy5nZXQoKSkpOworICAgICAg
ICAgICAgICAgICAgICB0b0pTKGV4ZWMsIGdsb2JhbCwgZG9jdW1lbnQpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsLCBpbWFnZS5yZWxlYXNl
KCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgfTsKKworICAgIGNsYXNzIFF0UGl4
bWFwVG9EYXRhVXJsTWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1ldGhvZCB7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsgcmV0dXJuICJ0b0Rh
dGFVcmwiOyB9CisgICAgICAgIEpTVmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlh
bnQgJiB2LFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgUUltYWdlIGltYWdlOworICAgICAgICAgICAgLy8gZm9yIGdldHRpbmcgdGhlIGRhdGEgdXJs
LCB3ZSBhbHdheXMgcHJlZmVyIHRoZSBpbWFnZS4KKyAgICAgICAgICAgIGlmICh2LnR5cGUoKSA9
PSAoUVZhcmlhbnQ6OlR5cGUpcU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkgeworICAgICAgICAgICAg
ICAgIGltYWdlID0gdi52YWx1ZTxRUGl4bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgICAgICAg
ICB2ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KGltYWdlKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGltYWdlID0gdi52YWx1ZTxRSW1hZ2U+KCk7CisgICAgICAg
ICAgICBRQnl0ZUFycmF5IGJhOworICAgICAgICAgICAgUUJ1ZmZlciBiKCZiYSk7CisgICAgICAg
ICAgICBpbWFnZS5zYXZlKCZiLCJQTkciKTsKKyAgICAgICAgICAgIGNvbnN0IFFTdHJpbmcgYjY0
ID0gUVN0cmluZygiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIpK2JhLnRvQmFzZTY0KCk7CisgICAg
ICAgICAgICBjb25zdCBVU3RyaW5nIHVzdHJpbmcoKFVDaGFyKiliNjQudXRmMTYoKSwgYjY0Lmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLHVzdHJpbmcpOworICAg
ICAgICB9CisKKyAgICB9OworCisgICAgICAgIHN0cnVjdCBRdFBpeG1hcE1ldGFEYXRheworICAg
ICAgICAgICAgUXRQaXhtYXBUb0RhdGFVcmxNZXRob2QgdG9EYXRhVXJsTWV0aG9kOworICAgICAg
ICAgICAgUXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0aG9kIGNyZWF0ZUVsZW1lbnRNZXRob2Q7Cisg
ICAgICAgICAgICBRdFBpeG1hcEhlaWdodEZpZWxkIGhlaWdodEZpZWxkOworICAgICAgICAgICAg
UXRQaXhtYXBXaWR0aEZpZWxkIHdpZHRoRmllbGQ7CisgICAgICAgICAgICBRdFBpeG1hcENsYXNz
IGNsczsKKyAgICAgICAgfSBxdF9waXhtYXBfbWV0YURhdGE7CisKKyAgICAvLyBEZXJpdmVkIFJ1
bnRpbWVPYmplY3QKKyAgICBjbGFzcyBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAgOiBwdWJsaWMg
UnVudGltZU9iamVjdEltcCB7CisgICAgcHVibGljOgorICAgICAgICBRdFBpeG1hcFJ1bnRpbWVP
YmplY3RJbXAoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnN0YW5jZT4pOworCisgICAgICAgIHN0
YXRpYyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUgcHJvdG90eXBlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCAgU3RydWN0dXJlRmxhZ3MpKTsKKyAgICAgICAgfQorCisgICAgcHJvdGVj
dGVkOgorICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBSdW50
aW1lT2JqZWN0SW1wOjpTdHJ1Y3R1cmVGbGFncyB8IE92ZXJyaWRlc01hcmtDaGlsZHJlbjsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgfTsKKworICAgIFF0UGl4bWFwUnVudGlt
ZU9iamVjdEltcDo6UXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wKEV4ZWNTdGF0ZSogZXhlYywgUGFz
c1JlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2UpCisgICAgICAgIDogUnVudGltZU9iamVjdEltcChl
eGVjLCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFF0UGl4bWFwUnVudGltZU9i
amVjdEltcD4oZXhlYyksIGluc3RhbmNlKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCBDbGFz
c0luZm8gUXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8gPSB7ICJRdFBpeG1hcFJ1bnRp
bWVPYmplY3QiLCAmUnVudGltZU9iamVjdEltcDo6c19pbmZvLCAwLCAwIH07CisKKworICAgIFF0
UGl4bWFwQ2xhc3M6OlF0UGl4bWFwQ2xhc3MoKQorICAgIHsKKyAgICB9CisKKworICAgIENsYXNz
KiBRdFBpeG1hcEluc3RhbmNlOjpnZXRDbGFzcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gJnF0X3BpeG1hcF9tZXRhRGF0YS5jbHM7CisgICAgfQorCisgICAgSlNWYWx1ZSBRdFBpeG1h
cEluc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0
JiBtZXRob2RzLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorICAgIHsKKyAgICAgICAgaWYgKG1ldGhv
ZHMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgIFF0UGl4bWFwUnVudGltZU1ldGhvZCogbXRk
ID0gc3RhdGljX2Nhc3Q8UXRQaXhtYXBSdW50aW1lTWV0aG9kKj4obWV0aG9kc1swXSk7CisgICAg
ICAgICAgICByZXR1cm4gbXRkLT5pbnZva2UoZXhlYyxkYXRhLHJvb3RPYmplY3QoKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICB9CisK
KyAgICBNZXRob2RMaXN0IFF0UGl4bWFwQ2xhc3M6Om1ldGhvZHNOYW1lZChjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyLCBJbnN0YW5jZSopIGNvbnN0CisgICAgeworICAgICAgICBNZXRob2RM
aXN0IG1sOworICAgICAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFRvRGF0YVVybE1ldGhv
ZDo6bmFtZSgpKQorICAgICAgICAgICAgbWwuYXBwZW5kKCZxdF9waXhtYXBfbWV0YURhdGEudG9E
YXRhVXJsTWV0aG9kKTsKKyAgICAgICAgZWxzZSBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcENy
ZWF0ZUVsZW1lbnRNZXRob2Q6Om5hbWUoKSkKKyAgICAgICAgICAgIG1sLmFwcGVuZCgmcXRfcGl4
bWFwX21ldGFEYXRhLmNyZWF0ZUVsZW1lbnRNZXRob2QpOworICAgICAgICByZXR1cm4gbWw7Cisg
ICAgfQorCisgICAgRmllbGQqIFF0UGl4bWFwQ2xhc3M6OmZpZWxkTmFtZWQoY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllciwgSW5zdGFuY2UqKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlk
ZW50aWZpZXIgPT0gUXRQaXhtYXBXaWR0aEZpZWxkOjpuYW1lKCkpCisgICAgICAgICAgICByZXR1
cm4gJnF0X3BpeG1hcF9tZXRhRGF0YS53aWR0aEZpZWxkOworICAgICAgICBlbHNlIGlmIChpZGVu
dGlmaWVyID09IFF0UGl4bWFwSGVpZ2h0RmllbGQ6Om5hbWUoKSkKKyAgICAgICAgICAgIHJldHVy
biAmcXRfcGl4bWFwX21ldGFEYXRhLmhlaWdodEZpZWxkOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkIFF0UGl4bWFwSW5zdGFuY2U6OmdldFBy
b3BlcnR5TmFtZXMoRXhlY1N0YXRlKmV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnIpCisgICAg
eworICAgICAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYyxVU3RyaW5nKFF0UGl4bWFwVG9EYXRh
VXJsTWV0aG9kOjpuYW1lKCkpKSk7CisgICAgICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLFVT
dHJpbmcoUXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0aG9kOjpuYW1lKCkpKSk7CisgICAgICAgIGFy
ci5hZGQoSWRlbnRpZmllcihleGVjLFVTdHJpbmcoUXRQaXhtYXBXaWR0aEZpZWxkOjpuYW1lKCkp
KSk7CisgICAgICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLFVTdHJpbmcoUXRQaXhtYXBIZWln
aHRGaWVsZDo6bmFtZSgpKSkpOworICAgIH0KKworICAgIEpTVmFsdWUgUXRQaXhtYXBJbnN0YW5j
ZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBw
dHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChwdHlwZSA9PSBQcmVmZXJOdW1iZXIpIHsK
KyAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZGF0YS50eXBlKCkgPT0gKFFWYXJpYW50OjpU
eXBlKXFNZXRhVHlwZUlkPFFJbWFnZT4oKSAmJiAhKGRhdGEudmFsdWU8UUltYWdlPigpKS5pc051
bGwoKQorICAgICAgICAgICAgICAgICAgICB8fChkYXRhLnR5cGUoKSA9PSAoUVZhcmlhbnQ6OlR5
cGUpcU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSAmJiAhZGF0YS52YWx1ZTxRUGl4bWFwPigpLmlzTnVs
bCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHR5cGUgPT0gUHJlZmVyU3RyaW5n
KQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIEpTVmFsdWUgUXRQaXht
YXBJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CisgICAgeworICAgICAg
ICBjb25zdCBRU3RyaW5nIHRvU3RyID0gUVN0cmluZygiW1F0IE5hdGl2ZSBQaXhtYXAgJTEsJTJd
IikuYXJnKHdpZHRoKCkpLmFyZyhoZWlnaHQoKSk7CisgICAgICAgIFVTdHJpbmcgdXN0cmluZygo
VUNoYXIqKXRvU3RyLnV0ZjE2KCksdG9TdHIubGVuZ3RoKCkpOworICAgICAgICByZXR1cm4ganNT
dHJpbmcoZXhlYyx1c3RyaW5nKTsKKyAgICB9CisKKyAgICBRdFBpeG1hcEluc3RhbmNlOjpRdFBp
eG1hcEluc3RhbmNlKFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iaiwgY29uc3QgUVZhcmlh
bnQgJiBkKQorICAgICAgICAgICAgOkluc3RhbmNlKHJvb3RPYmopCisgICAgICAgICAgICAsZGF0
YShkKQorICAgIHsKKyAgICB9CisgICAgaW50IFF0UGl4bWFwSW5zdGFuY2U6OndpZHRoKCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChkYXRhLnR5cGUoKSA9PSAoUVZhcmlhbnQ6OlR5cGUpcU1l
dGFUeXBlSWQ8UVBpeG1hcD4oKSkKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXht
YXA+KCkud2lkdGgoKTsKKyAgICAgICAgZWxzZSBpZiAoZGF0YS50eXBlKCkgPT0gKFFWYXJpYW50
OjpUeXBlKXFNZXRhVHlwZUlkPFFJbWFnZT4oKSkKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnZh
bHVlPFFJbWFnZT4oKS53aWR0aCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBpbnQgUXRQaXhtYXBJbnN0YW5jZTo6aGVpZ2h0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChkYXRhLnR5cGUoKSA9PSAoUVZhcmlhbnQ6OlR5cGUpcU1ldGFUeXBl
SWQ8UVBpeG1hcD4oKSkKKyAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCku
aGVpZ2h0KCk7CisgICAgICAgIGVsc2UgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6VHlw
ZSlxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxR
SW1hZ2U+KCkuaGVpZ2h0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgICAgICBRUGl4bWFwIFF0UGl4bWFwSW5zdGFuY2U6OnRvUGl4bWFwKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlx
TWV0YVR5cGVJZDxRUGl4bWFwPigpKQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVl
PFFQaXhtYXA+KCk7CisgICAgICAgICAgICBlbHNlIGlmIChkYXRhLnR5cGUoKSA9PSAoUVZhcmlh
bnQ6OlR5cGUpcU1ldGFUeXBlSWQ8UUltYWdlPigpKSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
UVBpeG1hcCBweG0gPSBRUGl4bWFwOjpmcm9tSW1hZ2UoZGF0YS52YWx1ZTxRSW1hZ2U+KCkpOwor
ICAgICAgICAgICAgICAgIGRhdGEgPSBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KHB4bSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHB4bTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisKKyAgICAgICAgfQorICAgICAgICBRSW1hZ2Ug
UXRQaXhtYXBJbnN0YW5jZTo6dG9JbWFnZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChk
YXRhLnR5cGUoKSA9PSAoUVZhcmlhbnQ6OlR5cGUpcU1ldGFUeXBlSWQ8UUltYWdlPigpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4oKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRUGl4bWFw
PigpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgUUltYWdlIGltZz0gZGF0YS52YWx1ZTxRUGl4
bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBkYXRhID0gUVZhcmlhbnQ6OmZyb21W
YWx1ZTxRSW1hZ2U+KGltZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGltZzsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBRSW1hZ2UoKTsKKyAgICAgICAgfQor
CisgICAgUVZhcmlhbnQgUXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3QoSlNPYmpl
Y3QqIG9iamVjdCxRTWV0YVR5cGU6OlR5cGUgaGludCkKKyAgICB7CisgICAgICAgIGlmIChvYmpl
Y3QtPmluaGVyaXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpIHsKKyAgICAgICAgICAg
IEpTSFRNTEltYWdlRWxlbWVudCogZWwgPSBzdGF0aWNfY2FzdDxKU0hUTUxJbWFnZUVsZW1lbnQg
Kj4ob2JqZWN0KTsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbC0+aW1wbCgpKTsKKyAgICAgICAgICAg
IGlmIChpbWFnZUVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBDYWNoZWRJbWFnZSogY0ltZyA9
IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoY0ltZykg
eworICAgICAgICAgICAgICAgICAgICBJbWFnZSogaW1nID0gY0ltZy0+aW1hZ2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGltZykgeworICAgICAgICAgICAgICAgICAgICAgICAgUVBpeG1h
cCogcHhtID0gaW1nLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHB4bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRUGl4bWFwID4oKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBp
eG1hcD4oKnB4bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50
Ojpmcm9tVmFsdWU8UUltYWdlPihweG0tPnRvSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmUXRQaXhtYXBSdW50
aW1lT2JqZWN0SW1wOjpzX2luZm8pKSB7CisgICAgICAgICAgICBRdFBpeG1hcFJ1bnRpbWVPYmpl
Y3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFF0UGl4bWFwUnVudGltZU9iamVjdEltcCo+KG9iamVj
dCk7CisgICAgICAgICAgICBRdFBpeG1hcEluc3RhbmNlKiBpbnN0ID0gc3RhdGljX2Nhc3Q8UXRQ
aXhtYXBJbnN0YW5jZSo+KGltcC0+Z2V0SW50ZXJuYWxJbnN0YW5jZSgpKTsKKyAgICAgICAgICAg
IGlmIChpbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGhpbnQgPT0gcU1ldGFUeXBlSWQ8UVBp
eG1hcCA+KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudDo6ZnJvbVZhbHVl
PFFQaXhtYXA+KGluc3QtPnRvUGl4bWFwKCkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhp
bnQgPT0gcU1ldGFUeXBlSWQ8UUltYWdlPigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KGluc3QtPnRvSW1hZ2UoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEpTT2JqZWN0KiBR
dFBpeG1hcEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYyxQYXNz
UmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsY29uc3QgUVZhcmlhbnQmIGRhdGEpCisgICAgeworICAg
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgICAgICByZXR1cm4g
bmV3KGV4ZWMpIFF0UGl4bWFwUnVudGltZU9iamVjdEltcChleGVjLG5ldyBRdFBpeG1hcEluc3Rh
bmNlKHJvb3QsZGF0YSkpOworICAgIH0KKyAgICBib29sIFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhh
bmRsZShRTWV0YVR5cGU6OlR5cGUgaGludCkKKyAgICB7CisgICAgICAgIHJldHVybiBoaW50ID09
IHFNZXRhVHlwZUlkPFFJbWFnZT4oKSB8fCBoaW50ID09IHFNZXRhVHlwZUlkPFFQaXhtYXA+KCk7
CisgICAgfQorCit9CisKK30KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCShyZXZpc2lv
biA1MjYzOCkKKysrIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAicW9iamVjdC5oIgogI2luY2x1ZGUgInFz
dHJpbmdsaXN0LmgiCiAjaW5jbHVkZSAicXRfaW5zdGFuY2UuaCIKKyNpbmNsdWRlICJxdF9waXht
YXBydW50aW1lLmgiCiAjaW5jbHVkZSAicXZhcmxlbmd0aGFycmF5LmgiCiAjaW5jbHVkZSA8SlNG
dW5jdGlvbi5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNzIwLDYgKzcyMSw4IEBACiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZSgo
UU1ldGFUeXBlOjpUeXBlKWhpbnQpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gUXRQaXhtYXBJ
bnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3Qob2JqZWN0LCBoaW50KTsKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRVmFyaWFudD4o
KSkgewogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSkKQEAgLTg0OSw2ICs4NTIsOSBAQAogICAg
ICAgICByZXR1cm4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmosIHJvb3QsIFFTY3JpcHRF
bmdpbmU6OlF0T3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAK
KyAgICBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKChRTWV0YVR5cGU6OlR5cGUpdmFy
aWFudC50eXBlKCkpKQorICAgICAgICByZXR1cm4gUXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUnVu
dGltZU9iamVjdChleGVjLCByb290LCB2YXJpYW50KTsKKwogICAgIGlmICh0eXBlID09IFFNZXRh
VHlwZTo6UVZhcmlhbnRNYXApIHsKICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IG9iamVjdCwgYW5k
IHN0dWZmIHByb3BlcnRpZXMgaW50byBpdAogICAgICAgICBKU09iamVjdCogcmV0ID0gY29uc3Ry
dWN0RW1wdHlPYmplY3QoZXhlYyk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBy
dW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGlt
ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgUVRfUElYTUFQUlVOVElNRV9ICisj
ZGVmaW5lIFFUX1BJWE1BUFJVTlRJTUVfSAorCisjaW5jbHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVk
ZSAicnVudGltZS5oIgorbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisK
K2NsYXNzIFF0UGl4bWFwSW5zdGFuY2UgOiBwdWJsaWMgSW5zdGFuY2UKK3sKKyAgICBRVmFyaWFu
dCBkYXRhOworcHVibGljOgorICAgIFF0UGl4bWFwSW5zdGFuY2UoUGFzc1JlZlB0cjxSb290T2Jq
ZWN0PiByb290T2JqLCBjb25zdCBRVmFyaWFudCAmIG5ld0RhdGEpOworICAgIHZpcnR1YWwgQ2xh
c3MqIGdldENsYXNzKCkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChF
eGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYgYXJncyk7CisgICAg
dmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJy
YXkmKTsKKworICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJl
ZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlT2Yo
RXhlY1N0YXRlKiBleGVjKSBjb25zdDsKKyAgICBpbnQgd2lkdGgoKSBjb25zdDsKKyAgICBpbnQg
aGVpZ2h0KCkgY29uc3Q7CisgICAgUVBpeG1hcCB0b1BpeG1hcCgpOworICAgIFFJbWFnZSB0b0lt
YWdlKCk7CisgICAgc3RhdGljIEpTT2JqZWN0KiBjcmVhdGVSdW50aW1lT2JqZWN0KEV4ZWNTdGF0
ZSosUGFzc1JlZlB0cjxSb290T2JqZWN0Pixjb25zdCBRVmFyaWFudCYpOworICAgIHN0YXRpYyBR
VmFyaWFudCB2YXJpYW50RnJvbU9iamVjdChKU09iamVjdCosUU1ldGFUeXBlOjpUeXBlIGhpbnQp
OworICAgIHN0YXRpYyBib29sIGNhbkhhbmRsZShRTWV0YVR5cGU6OlR5cGUgaGludCk7Cit9Owor
Cit9CisKK30KKyNlbmRpZiAvLyBRVF9QSVhNQVBSVU5USU1FX0gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45684</attachid>
            <date>2009-12-30 13:38:35 -0800</date>
            <delta_ts>2010-01-16 15:08:36 -0800</delta_ts>
            <desc>Had to resubmit due to some build/style failures</desc>
            <filename>patch-hybrid-pixmap-4.diff</filename>
            <type>text/plain</type>
            <size>27674</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
dWkgdmVyc2lvbj0iNC4wIj4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4KKyA8d2lkZ2V0IGNsYXNz
PSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgor
ICAgPHJlY3Q+CisgICAgPHg+MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD42MDA8L3dp
ZHRoPgorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3RyaW5nPldpZGdldDwvc3Ry
aW5nPgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0i
dmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVdlYlZpZXci
IG5hbWU9IndlYlZpZXciPgorICAgICA8cHJvcGVydHkgbmFtZT0idXJsIj4KKyAgICAgIDx1cmw+
CisgICAgICAgPHN0cmluZz5hYm91dDpibGFuazwvc3RyaW5nPgorICAgICAgPC91cmw+CisgICAg
IDwvcHJvcGVydHk+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8
bGF5b3V0IGNsYXNzPSJRSEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRhbExheW91dCI+CisgICAg
IDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwxIj4KKyAgICAg
ICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJv
cGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAg
IDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAgICAgPHByb3BlcnR5IG5h
bWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93
aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4KKyAg
ICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWln
aHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPkltYWdlIGZyb20gUXQg
dG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAg
ICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFt
ZT0ibGJsMyI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5n
PlBpeG1hcCBmcm9tIFF0IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNs
YXNzPSJRTGFiZWwiIG5hbWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4K
KyAgICAgICAgPHN0cmluZy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0Pgor
ICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBuYW1lPSJob3Jpem9udGFs
U3BhY2VyIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICA8
ZW51bT5RdDo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAgPHNpemU+CisgICAg
ICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAg
ICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3BhY2VyPgorICAgICA8
L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0PgorIDwvd2lkZ2V0
PgorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKyA8Y3VzdG9td2lk
Z2V0cz4KKyAgPGN1c3RvbXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+CisgICA8
ZXh0ZW5kcz5RV2lkZ2V0PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdlYktpdC9RV2ViVmlldzwv
aGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdldHM+CisgPHJlc291cmNl
cy8+CisgPGNvbm5lY3Rpb25zLz4KKzwvdWk+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5
YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE1IEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAyCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1
ZGUoLi4vLi4vLi4vLi4vV2ViS2l0LnByaSkKK1FUICs9IG5ldHdvcmsgZ3VpIHRlc3RsaWIKK1RB
UkdFVCA9IGh5YnJpZFBpeG1hcAorVEVNUExBVEUgPSBhcHAKK1NPVVJDRVMgKz0gdHN0X2h5YnJp
ZFBpeG1hcC5jcHAgXAorICAgIHdpZGdldC5jcHAKK0hFQURFUlMgKz0gd2lkZ2V0LmgKK0ZPUk1T
ICs9IHdpZGdldC51aQorUkVTT1VSQ0VTICs9IHJlc291cmNlcy5xcmMKK09USEVSX0ZJTEVTICs9
IHRlc3QuaHRtbAorQ09ORklHICs9IGNvbnNvbGUKK1FNQUtFX1JQQVRIX0RJUj0kJE9VVFBVVF9E
SVIvbGliICQkUU1BS0VfUlBBVEhfRElSCkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4
bWFwL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFw
L3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAv
dGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8aHRtbD4KKyAgICA8aGVh
ZD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgaW1nIHsgZGlzcGxheTogYmxvY2s7IGJv
cmRlci1zdHlsZTogZ3Jvb3ZlfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c2NyaXB0Pgor
ICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CisgICAgICAgICAgICAgICAgdmFyIHB4
bSA9IG15V2lkZ2V0LnBpeG1hcDsKKyAgICAgICAgICAgICAgICB2YXIgaW1nID0gb2JqLnRvSFRN
TEltYWdlRWxlbWVudCgpOworICAgICAgICAgICAgICAgIHZhciBpbWcxID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImltZzEiKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1nMiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJpbWcyIik7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChpbWcpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQocHhtLnRvSFRNTEltYWdlRWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBj
b21wbGV0ZUlmRG9uZSgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoaW1nMS5jb21wbGV0ZSAmJiBpbWcyLmNvbXBsZXRlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBteVdpZGdldC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbWcyLm9ubG9hZCA9IGNvbXBsZXRlSWZE
b25lOworICAgICAgICAgICAgICAgIGltZzEub25sb2FkID0gY29tcGxldGVJZkRvbmU7CisgICAg
ICAgICAgICAgICAgaW1nMS5zcmMgPSBvYmoudG9EYXRhVXJsKCk7CisgICAgICAgICAgICAgICAg
aW1nMi5zcmMgPSBteVdpZGdldC5waXhtYXAudG9EYXRhVXJsKCk7CisgICAgICAgICAgICAgICAg
bXlXaWRnZXQuaW1hZ2UgPSBweG07CisgICAgICAgICAgICAgICAgbXlXaWRnZXQucGl4bWFwID0g
aW1nOworICAgICAgICAgICAgfQorICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAg
PGJvZHkgb25sb2FkPSJzdGFydFRlc3QoKSI+CisgICAgICAgIDxpbWcgaWQ9ImltZzEiIC8+Cisg
ICAgICAgIDxpbWcgaWQ9ImltZzIiIC8+CisgICAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogV2Vi
S2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAq
LworCisjaW5jbHVkZSAid2lkZ2V0LmgiCisKKyNpbmNsdWRlICJxd2ViZWxlbWVudC5oIgorI2lu
Y2x1ZGUgInF3ZWJmcmFtZS5oIgorI2luY2x1ZGUgInVpX3dpZGdldC5oIgorI2luY2x1ZGUgPFFQ
YWludGVyPgorI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CisKK1dpZGdldDo6V2lkZ2V0KFFXaWRn
ZXQgKnBhcmVudCkgOgorICAgIFFXaWRnZXQocGFyZW50KSwKKyAgICB1aShuZXcgVWk6OldpZGdl
dCkKK3sKKyAgICB1aS0+c2V0dXBVaSh0aGlzKTsKK30KKwordm9pZCBXaWRnZXQ6OnJlZnJlc2hK
UygpCit7CisgICAgdWktPndlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmFkZFRvSmF2YVNj
cmlwdFdpbmRvd09iamVjdCgibXlXaWRnZXQiLCB0aGlzKTsKK30KK3ZvaWQgV2lkZ2V0OjpzdGFy
dCgpCit7CisgICAgdWktPndlYlZpZXctPmxvYWQoUVVybCgicXJjOi8vL3Rlc3QuaHRtbCIpKTsK
KyAgICBjb25uZWN0KHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLCBTSUdOQUwoamF2
YVNjcmlwdFdpbmRvd09iamVjdENsZWFyZWQoKSksIHRoaXMsIFNMT1QocmVmcmVzaEpTKCkpKTsK
KyAgICB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2lu
ZG93T2JqZWN0KCJteVdpZGdldCIsIHRoaXMpOworfQorCit2b2lkIFdpZGdldDo6Y29tcGxldGVU
ZXN0KCkKK3sKKyAgICBRQ09NUEFSRSh1aS0+bGJsMS0+cGl4bWFwKCktPnNpemUoKSwgdWktPmxi
bDItPnNpemUoKSk7CisgICAgUUNPTVBBUkUodWktPmxibDMtPnNpemUoKSwgdWktPmxibDQtPnBp
eG1hcCgpLT5zaXplKCkpOworICAgIFFDT01QQVJFKHVpLT5sYmwyLT5zaXplKCkud2lkdGgoKSwg
dWktPndlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmZpbmRGaXJzdEVsZW1lbnQoIiNpbWcx
IikuZXZhbHVhdGVKYXZhU2NyaXB0KCJ0aGlzLndpZHRoIikudG9JbnQoKSk7CisgICAgUUNPTVBB
UkUodWktPmxibDMtPnNpemUoKS53aWR0aCgpLCB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJh
bWUoKS0+ZmluZEZpcnN0RWxlbWVudCgiI2ltZzIiKS5ldmFsdWF0ZUphdmFTY3JpcHQoInRoaXMu
d2lkdGgiKS50b0ludCgpKTsKKyAgICBlbWl0IHRlc3RDb21wbGV0ZSgpOworfQorCit2b2lkIFdp
ZGdldDo6c2V0UGl4bWFwKGNvbnN0IFFQaXhtYXAgJiBwKQoreworICAgIHVpLT5sYmwxLT5zZXRQ
aXhtYXAocCk7Cit9CitRUGl4bWFwIFdpZGdldDo6cGl4bWFwKCkgY29uc3QKK3sKKyAgICBRUGl4
bWFwIHB4KHVpLT5sYmwzLT5zaXplKCkpOworICAgIHsKKyAgICAgICAgUVBhaW50ZXIgcCgmcHgp
OworICAgICAgICB1aS0+bGJsMy0+cmVuZGVyKCZwKTsKKyAgICB9CisgICAgcmV0dXJuIHB4Owor
fQordm9pZCBXaWRnZXQ6OnNldEltYWdlKGNvbnN0IFFJbWFnZSAmIGltZykKK3sKKyAgICB1aS0+
bGJsNC0+c2V0UGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShpbWcpKTsKK30KKworUUltYWdlIFdp
ZGdldDo6aW1hZ2UoKSBjb25zdAoreworICAgIFFJbWFnZSBpbWcodWktPmxibDItPnNpemUoKSwg
UUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICB7CisgICAgICAgIFFQYWludGVyIHAoJmltZyk7
CisgICAgICAgIHVpLT5sYmwyLT5yZW5kZXIoJnApOworICAgIH0KKyAgICByZXR1cm4gaW1nOwor
fQorCitXaWRnZXQ6On5XaWRnZXQoKQoreworICAgIGRlbGV0ZSB1aTsKK30KKwordm9pZCBXaWRn
ZXQ6OmNoYW5nZUV2ZW50KFFFdmVudCAqZSkKK3sKKyAgICBRV2lkZ2V0OjpjaGFuZ2VFdmVudChl
KTsKKyAgICBzd2l0Y2ggKGUtPnR5cGUoKSkgeworICAgIGNhc2UgUUV2ZW50OjpMYW5ndWFnZUNo
YW5nZToKKyAgICAgICAgdWktPnJldHJhbnNsYXRlVWkodGhpcyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KSW5kZXg6IFdlYktpdC9xdC90
ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3Rz
L2h5YnJpZFBpeG1hcC93aWRnZXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAvd2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiB3
aWRnZXRfaAorI2RlZmluZSB3aWRnZXRfaAorCisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUg
PFFQaXhtYXA+CisjaW5jbHVkZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFVpIHsKK2NsYXNzIFdp
ZGdldDsKK30KKworY2xhc3MgV2lkZ2V0IDogcHVibGljIFFXaWRnZXQgeworICAgIFFfT0JKRUNU
CisgICAgUV9QUk9QRVJUWShRUGl4bWFwIHBpeG1hcCBSRUFEIHBpeG1hcCBXUklURSBzZXRQaXht
YXApCisgICAgUV9QUk9QRVJUWShRSW1hZ2UgaW1hZ2UgUkVBRCBpbWFnZSBXUklURSBzZXRJbWFn
ZSkKK3B1YmxpYzoKKyAgICBXaWRnZXQoUVdpZGdldCAqcGFyZW50ID0gMCk7CisgICAgfldpZGdl
dCgpOworICAgIHZvaWQgc2V0UGl4bWFwKGNvbnN0IFFQaXhtYXAgJik7CisgICAgUVBpeG1hcCBw
aXhtYXAoKSBjb25zdDsKKyAgICB2b2lkIHNldEltYWdlKGNvbnN0IFFJbWFnZSAmKTsKKyAgICBR
SW1hZ2UgaW1hZ2UoKSBjb25zdDsKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCByZWZyZXNoSlMo
KTsKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGNvbXBsZXRlVGVzdCgpOworICAgIHZvaWQgc3Rh
cnQoKTsKK3NpZ25hbHM6CisgICAgdm9pZCB0ZXN0Q29tcGxldGUoKTsKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGNoYW5nZUV2ZW50KFFFdmVudCAqZSk7CisKK3ByaXZhdGU6CisgICAgVWk6OldpZGdl
dCAqdWk7Cit9OworCisjZW5kaWYgLy8gd2lkZ2V0X2gKSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC90c3RfaHlicmlkUGl4bWFwLmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIi4uL3V0aWwuaCIKKworI2luY2x1ZGUgIndp
ZGdldC5oIgorI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CisKK2NsYXNzIHRzdF9oeWJyaWRQaXht
YXAgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIHRzdF9o
eWJyaWRQaXhtYXAoUU9iamVjdCogbyA9IDApIDogUU9iamVjdChvKSB7fQorcHVibGljIHNsb3Rz
OgorICAgIHZvaWQgaW5pdCgpCisgICAgeworICAgIH0KKworICAgIHZvaWQgY2xlYW51cCgpCisg
ICAgeworICAgIH0KK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBoeWJyaWRQaXhtYXAoKQorICAg
IHsKKyAgICAgICAgV2lkZ2V0IHdkZzsKKyAgICAgICAgd2RnLnNob3coKTsKKyAgICAgICAgd2Rn
LnN0YXJ0KCk7CisgICAgICAgIHdhaXRGb3JTaWduYWwoJiB3ZGcsIFNJR05BTCh0ZXN0Q29tcGxl
dGUoKSkpOworICAgIH0KK3ByaXZhdGU6CisgICAgV2lkZ2V0KiB3ZGc7CisKKworfTsKKworUVRF
U1RfTUFJTih0c3RfaHlicmlkUGl4bWFwKQorCisjaW5jbHVkZSA8dHN0X2h5YnJpZFBpeG1hcC5t
b2M+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Jlc291cmNlcy5xcmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJjCShy
ZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJj
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzxSQ0M+CisgICAgPHFyZXNvdXJjZSBwcmVm
aXg9Ii8iPgorICAgICAgICA8ZmlsZT50ZXN0Lmh0bWw8L2ZpbGU+CisgICAgPC9xcmVzb3VyY2U+
Cis8L1JDQz4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy90ZXN0cy5wcm8KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwkocmV2aXNpb24gNTI2NzApCisrKyBXZWJLaXQvcXQv
dGVzdHMvdGVzdHMucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogCiBURU1QTEFU
RSA9IHN1YmRpcnMKLVNVQkRJUlMgPSBxd2ViZnJhbWUgcXdlYnBhZ2UgcXdlYmVsZW1lbnQgcWdy
YXBoaWNzd2VidmlldyBxd2ViaGlzdG9yeWludGVyZmFjZSBxd2VidmlldyBxd2ViaGlzdG9yeSBx
d2ViaW5zcGVjdG9yCitTVUJESVJTID0gcXdlYmZyYW1lIHF3ZWJwYWdlIHF3ZWJlbGVtZW50IHFn
cmFwaGljc3dlYnZpZXcgcXdlYmhpc3RvcnlpbnRlcmZhY2UgcXdlYnZpZXcgcXdlYmhpc3Rvcnkg
cXdlYmluc3BlY3RvciBoeWJyaWRQaXhtYXAKIGdyZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04s
IDQpOiBTVUJESVJTICs9IGJlbmNobWFya3MvcGFpbnRpbmcgYmVuY2htYXJrcy9sb2FkaW5nCklu
ZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5w
cm8JKHJldmlzaW9uIDUyNjcwKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5
KQpAQCAtMTQ5Niw2ICsxNDk2LDcgQEAKICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuaCBcCiAgICAg
YnJpZGdlL3F0L3F0X2luc3RhbmNlLmggXAogICAgIGJyaWRnZS9xdC9xdF9ydW50aW1lLmggXAor
ICAgIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmggXAogICAgIGJyaWRnZS9ydW50aW1lX2Fy
cmF5LmggXAogICAgIGJyaWRnZS9ydW50aW1lLmggXAogICAgIGJyaWRnZS9ydW50aW1lX21ldGhv
ZC5oIFwKQEAgLTIzOTIsNiArMjM5Myw3IEBACiAgICAgYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlclF0LmNwcCBcCiAgICAgYnJpZGdlL3F0L3F0X2NsYXNzLmNwcCBcCiAgICAgYnJpZGdlL3F0
L3F0X2luc3RhbmNlLmNwcCBcCisgICAgYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwIFwK
ICAgICBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHAgXAogICAgIHBhZ2UvcXQvRHJhZ0NvbnRyb2xs
ZXJRdC5jcHAgXAogICAgIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIFwKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzIz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgorCisjaW5j
bHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0dsb2Jh
bE9iamVjdC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpT
TG9jay5oIgorI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlN0aWxsSW1h
Z2VRdC5oIgorI2luY2x1ZGUgPFFCdWZmZXI+CisjaW5jbHVkZSA8UUJ5dGVBcnJheT4KKyNpbmNs
dWRlIDxRSW1hZ2U+CisjaW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRVmFyaWFudD4KKyNp
bmNsdWRlIDxydW50aW1lX29iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWVfcm9vdC5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmlu
ZGluZ3MgeworCitjbGFzcyBRdFBpeG1hcENsYXNzIDogcHVibGljIENsYXNzIHsKK3B1YmxpYzoK
KyAgICBRdFBpeG1hcENsYXNzKCk7CisgICAgdmlydHVhbCBNZXRob2RMaXN0IG1ldGhvZHNOYW1l
ZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZpZWxk
KiBmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSopIGNvbnN0OworfTsKKwor
CitjbGFzcyBRdFBpeG1hcFdpZHRoRmllbGQgOiBwdWJsaWMgRmllbGQgeworcHVibGljOgorICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBuYW1lKCkge3JldHVybiAid2lkdGgiOyB9CisgICAgdmlydHVh
bCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFu
Y2UqIHBpeG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBz
dGF0aWNfY2FzdDxjb25zdCBRdFBpeG1hcEluc3RhbmNlKj4ocGl4bWFwKS0+d2lkdGgoKSk7Cisg
ICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29u
c3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdCB7fQorfTsKK2NsYXNzIFF0UGl4bWFwSGVpZ2h0
RmllbGQgOiBwdWJsaWMgRmllbGQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBu
YW1lKCkge3JldHVybiAiaGVpZ2h0IjsgfQorICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21J
bnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGNvbnN0IFF0UGl4
bWFwSW5zdGFuY2UqPihpbnN0KS0+aGVpZ2h0KCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkg
Y29uc3Qge30KK307CisKK2NsYXNzIFF0UGl4bWFwUnVudGltZU1ldGhvZCA6IHB1YmxpYyBNZXRo
b2QgeworcHVibGljOgorICAgIHZpcnR1YWwgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2Uo
RXhlY1N0YXRlKiBleGVjLCBRVmFyaWFudCAmLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3Qp
ID0gMDsKKworfTsKKworY2xhc3MgUXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0aG9kIDogcHVibGlj
IFF0UGl4bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IG5hbWUoKSB7IHJldHVybiAidG9IVE1MSW1hZ2VFbGVtZW50IjsgfQorICAgIEpTVmFsdWUgaW52
b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQgJiB2LCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3QpCisgICAgeworICAgICAgICBRUGl4bWFwIHB4bTsKKyAgICAgICAgaWYgKHYudHlwZSgp
ID09IChRVmFyaWFudDo6VHlwZSkocU1ldGFUeXBlSWQ8UUltYWdlPigpKSkgeworICAgICAgICAg
ICAgcHhtID0gUVBpeG1hcDo6ZnJvbUltYWdlKHYudmFsdWU8UUltYWdlPigpKTsKKyAgICAgICAg
ICAgIHYgPSBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KHB4bSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgcHhtID0gdi52YWx1ZTxRUGl4bWFwPigpOworCisgICAgICAgIFBhc3NS
ZWZQdHI8U3RpbGxJbWFnZT4gaW1nID0gV2ViQ29yZTo6U3RpbGxJbWFnZTo6Y3JlYXRlKHB4bSk7
CisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWwgPSAoSlNET01HbG9iYWxPYmplY3Qq
KXJvb3QtPmdsb2JhbE9iamVjdCgpOworICAgICAgICBpZiAoZ2xvYmFsKSB7CisgICAgICAgICAg
ICBET01XaW5kb3cqIGRXaW5kb3cgPSB0b0RPTVdpbmRvdyhnbG9iYWwpOworICAgICAgICAgICAg
aWYgKGRXaW5kb3cpIHsKKyAgICAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBkV2lu
ZG93LT5kb2N1bWVudCgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50
PiBpbWFnZSA9IG5ldyBIVE1MSW1hZ2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1bWVu
dCk7CisgICAgICAgICAgICAgICAgaW1hZ2UtPnNldENhY2hlZEltYWdlKG5ldyBDYWNoZWRJbWFn
ZShpbWcuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICB0b0pTKGV4ZWMsIGdsb2JhbCwgZG9jdW1l
bnQpOworICAgICAgICAgICAgICAgIHJldHVybiAgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWws
IGltYWdlLnJlbGVhc2UoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworfTsKKworY2xhc3MgUXRQaXhtYXBUb0RhdGFV
cmxNZXRob2QgOiBwdWJsaWMgUXRQaXhtYXBSdW50aW1lTWV0aG9kIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsgcmV0dXJuICJ0b0RhdGFVcmwiOyB9CisgICAgSlNW
YWx1ZSBpbnZva2UoRXhlY1N0YXRlKiBleGVjLCBRVmFyaWFudCAmIHYsIFBhc3NSZWZQdHI8Um9v
dE9iamVjdD4gcm9vdCkKKyAgICB7CisgICAgICAgIFFJbWFnZSBpbWFnZTsKKyAgICAgICAgLy8g
Zm9yIGdldHRpbmcgdGhlIGRhdGEgdXJsLCB3ZSBhbHdheXMgcHJlZmVyIHRoZSBpbWFnZS4KKyAg
ICAgICAgaWYgKHYudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRUGl4bWFw
PigpKSB7CisgICAgICAgICAgICBpbWFnZSA9IHYudmFsdWU8UVBpeG1hcD4oKS50b0ltYWdlKCk7
CisgICAgICAgICAgICB2ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KGltYWdlKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBpbWFnZSA9IHYudmFsdWU8UUltYWdlPigpOworICAg
ICAgICBRQnl0ZUFycmF5IGJhOworICAgICAgICBRQnVmZmVyIGIoJmJhKTsKKyAgICAgICAgaW1h
Z2Uuc2F2ZSgmYiwgIlBORyIpOworICAgICAgICBjb25zdCBRU3RyaW5nIGI2NCA9IFFTdHJpbmco
ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiKStiYS50b0Jhc2U2NCgpOworICAgICAgICBjb25zdCBV
U3RyaW5nIHVzdHJpbmcoKFVDaGFyKiliNjQudXRmMTYoKSwgYjY0Lmxlbmd0aCgpKTsKKyAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVzdHJpbmcpOworICAgIH0KKworfTsKKworc3RydWN0
IFF0UGl4bWFwTWV0YURhdGEgeworICAgIFF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kIHRvRGF0YVVy
bE1ldGhvZDsKKyAgICBRdFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRob2QgY3JlYXRlRWxlbWVudE1l
dGhvZDsKKyAgICBRdFBpeG1hcEhlaWdodEZpZWxkIGhlaWdodEZpZWxkOworICAgIFF0UGl4bWFw
V2lkdGhGaWVsZCB3aWR0aEZpZWxkOworICAgIFF0UGl4bWFwQ2xhc3MgY2xzOworfSBxdF9waXht
YXBfbWV0YURhdGE7CisKKy8vIERlcml2ZWQgUnVudGltZU9iamVjdAorY2xhc3MgUXRQaXhtYXBS
dW50aW1lT2JqZWN0SW1wIDogcHVibGljIFJ1bnRpbWVPYmplY3RJbXAgeworcHVibGljOgorICAg
IFF0UGl4bWFwUnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEluc3RhbmNl
Pik7CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUgcHJvdG90eXBlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUlu
Zm8oT2JqZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gUnVudGltZU9iamVjdElt
cDo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNNYXJrQ2hpbGRyZW47CisKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZz
X2luZm87IH0KK307CisKK1F0UGl4bWFwUnVudGltZU9iamVjdEltcDo6UXRQaXhtYXBSdW50aW1l
T2JqZWN0SW1wKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxJbnN0YW5jZT4gaW5zdGFuY2Up
CisgICAgOiBSdW50aW1lT2JqZWN0SW1wKGV4ZWMsIFdlYkNvcmU6OmRlcHJlY2F0ZWRHZXRET01T
dHJ1Y3R1cmU8UXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wPihleGVjKSwgaW5zdGFuY2UpCit7Cit9
CisKK2NvbnN0IENsYXNzSW5mbyBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXA6OnNfaW5mbyA9IHsg
IlF0UGl4bWFwUnVudGltZU9iamVjdCIsICZSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8sIDAsIDAg
fTsKKworCitRdFBpeG1hcENsYXNzOjpRdFBpeG1hcENsYXNzKCkKK3sKK30KKworCitDbGFzcyog
UXRQaXhtYXBJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAoreworICAgIHJldHVybiAmcXRfcGl4
bWFwX21ldGFEYXRhLmNsczsKK30KKworSlNWYWx1ZSBRdFBpeG1hcEluc3RhbmNlOjppbnZva2VN
ZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RzLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQoreworICAgIGlmIChtZXRob2RzLnNpemUoKSA9PSAxKSB7CisgICAgICAg
IFF0UGl4bWFwUnVudGltZU1ldGhvZCogbXRkID0gc3RhdGljX2Nhc3Q8UXRQaXhtYXBSdW50aW1l
TWV0aG9kKj4obWV0aG9kc1swXSk7CisgICAgICAgIHJldHVybiBtdGQtPmludm9rZShleGVjLCBk
YXRhLCByb290T2JqZWN0KCkpOworICAgIH0KKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30K
KworTWV0aG9kTGlzdCBRdFBpeG1hcENsYXNzOjptZXRob2RzTmFtZWQoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllciwgSW5zdGFuY2UqKSBjb25zdAoreworICAgIE1ldGhvZExpc3QgbWw7Cisg
ICAgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkKKyAg
ICAgICAgbWwuYXBwZW5kKCZxdF9waXhtYXBfbWV0YURhdGEudG9EYXRhVXJsTWV0aG9kKTsKKyAg
ICBlbHNlIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFwQ3JlYXRlRWxlbWVudE1ldGhvZDo6bmFt
ZSgpKQorICAgICAgICBtbC5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS5jcmVhdGVFbGVtZW50
TWV0aG9kKTsKKyAgICByZXR1cm4gbWw7Cit9CisKK0ZpZWxkKiBRdFBpeG1hcENsYXNzOjpmaWVs
ZE5hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEluc3RhbmNlKikgY29uc3QKK3sK
KyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFdpZHRoRmllbGQ6Om5hbWUoKSkKKyAgICAg
ICAgcmV0dXJuICZxdF9waXhtYXBfbWV0YURhdGEud2lkdGhGaWVsZDsKKyAgICBpZiAoaWRlbnRp
ZmllciA9PSBRdFBpeG1hcEhlaWdodEZpZWxkOjpuYW1lKCkpCisgICAgICAgIHJldHVybiAmcXRf
cGl4bWFwX21ldGFEYXRhLmhlaWdodEZpZWxkOworICAgIHJldHVybiAwOworfQorCit2b2lkIFF0
UGl4bWFwSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKmV4ZWMsIFByb3BlcnR5
TmFtZUFycmF5JiBhcnIpCit7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmco
UXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZp
ZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRob2Q6Om5hbWUoKSkpKTsK
KyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFdpZHRoRmllbGQ6
Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1h
cEhlaWdodEZpZWxkOjpuYW1lKCkpKSk7Cit9CisKK0pTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6
ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBwdHlw
ZSkgY29uc3QKK3sKKyAgICBpZiAocHR5cGUgPT0gUHJlZmVyTnVtYmVyKSB7CisgICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oZGF0YS50eXBlKCkgPT0gKFFWYXJpYW50OjpUeXBlKXFNZXRhVHlwZUlk
PFFJbWFnZT4oKSAmJiAhKGRhdGEudmFsdWU8UUltYWdlPigpKS5pc051bGwoKQorICAgICAgICAg
ICAgICAgIHx8IChkYXRhLnR5cGUoKSA9PSAoUVZhcmlhbnQ6OlR5cGUpcU1ldGFUeXBlSWQ8UVBp
eG1hcD4oKSAmJiAhZGF0YS52YWx1ZTxRUGl4bWFwPigpLmlzTnVsbCgpKSk7CisgICAgfQorICAg
IGlmIChwdHlwZSA9PSBQcmVmZXJTdHJpbmcpCisgICAgICAgIHJldHVybiB2YWx1ZU9mKGV4ZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU1ZhbHVlIFF0UGl4bWFwSW5zdGFu
Y2U6OnZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIGNvbnN0IFFTdHJpbmcg
dG9TdHIgPSBRU3RyaW5nKCJbUXQgTmF0aXZlIFBpeG1hcCAlMSwlMl0iKS5hcmcod2lkdGgoKSku
YXJnKGhlaWdodCgpKTsKKyAgICBVU3RyaW5nIHVzdHJpbmcoKFVDaGFyKil0b1N0ci51dGYxNigp
LCB0b1N0ci5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVzdHJpbmcpOwor
fQorCitRdFBpeG1hcEluc3RhbmNlOjpRdFBpeG1hcEluc3RhbmNlKFBhc3NSZWZQdHI8Um9vdE9i
amVjdD4gcm9vdE9iaiwgY29uc3QgUVZhcmlhbnQgJiBkKQorICAgICAgICA6SW5zdGFuY2Uocm9v
dE9iaiksIGRhdGEoZCkKK3sKK30KK2ludCBRdFBpeG1hcEluc3RhbmNlOjp3aWR0aCgpIGNvbnN0
Cit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxR
UGl4bWFwPigpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRUGl4bWFwPigpLndpZHRoKCk7
CisgICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRSW1h
Z2U+KCkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4oKS53aWR0aCgpOworICAg
IHJldHVybiAwOworfQorCitpbnQgUXRQaXhtYXBJbnN0YW5jZTo6aGVpZ2h0KCkgY29uc3QKK3sK
KyAgICBpZiAoZGF0YS50eXBlKCkgPT0gKFFWYXJpYW50OjpUeXBlKXFNZXRhVHlwZUlkPFFQaXht
YXA+KCkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCkuaGVpZ2h0KCk7Cisg
ICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRSW1hZ2U+
KCkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4oKS5oZWlnaHQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworUVBpeG1hcCBRdFBpeG1hcEluc3RhbmNlOjp0b1BpeG1hcCgpCit7Cisg
ICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRUGl4bWFw
PigpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRUGl4bWFwPigpOworICAgIGlmIChkYXRh
LnR5cGUoKSA9PSAoUVZhcmlhbnQ6OlR5cGUpcU1ldGFUeXBlSWQ8UUltYWdlPigpKSB7CisgICAg
ICAgIGNvbnN0IFFQaXhtYXAgcHhtID0gUVBpeG1hcDo6ZnJvbUltYWdlKGRhdGEudmFsdWU8UUlt
YWdlPigpKTsKKyAgICAgICAgZGF0YSA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4ocHht
KTsKKyAgICAgICAgcmV0dXJuIHB4bTsKKyAgICB9CisgICAgcmV0dXJuIFFQaXhtYXAoKTsKKwor
fQorCitRSW1hZ2UgUXRQaXhtYXBJbnN0YW5jZTo6dG9JbWFnZSgpCit7CisgICAgaWYgKGRhdGEu
dHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAg
IHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4oKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gKFFW
YXJpYW50OjpUeXBlKXFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpIHsKKyAgICAgICAgY29uc3QgUUlt
YWdlIGltZz0gZGF0YS52YWx1ZTxRUGl4bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgZGF0YSA9
IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihpbWcpOworICAgICAgICByZXR1cm4gaW1nOwor
ICAgIH0KKyAgICByZXR1cm4gUUltYWdlKCk7Cit9CisKK1FWYXJpYW50IFF0UGl4bWFwSW5zdGFu
Y2U6OnZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QsIFFNZXRhVHlwZTo6VHlwZSBo
aW50KQoreworICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNf
aW5mbykpIHsKKyAgICAgICAgSlNIVE1MSW1hZ2VFbGVtZW50KiBlbCA9IHN0YXRpY19jYXN0PEpT
SFRNTEltYWdlRWxlbWVudCAqPihvYmplY3QpOworICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBp
bWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oZWwtPmltcGwoKSk7
CisgICAgICAgIGlmIChpbWFnZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIENhY2hlZEltYWdlKiBj
SW1nID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpOworICAgICAgICAgICAgaWYgKGNJbWcp
IHsKKyAgICAgICAgICAgICAgICBJbWFnZSogaW1nID0gY0ltZy0+aW1hZ2UoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaW1nKSB7CisgICAgICAgICAgICAgICAgICAgIFFQaXhtYXAqIHB4bSA9IGlt
Zy0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHB4bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChoaW50ID09IChRTWV0YVR5
cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFQaXhtYXAgPigpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KCpweG0pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihweG0tPnRv
SW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlF0
UGl4bWFwUnVudGltZU9iamVjdEltcDo6c19pbmZvKSkgeworICAgICAgICBRdFBpeG1hcFJ1bnRp
bWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFF0UGl4bWFwUnVudGltZU9iamVjdEltcCo+
KG9iamVjdCk7CisgICAgICAgIFF0UGl4bWFwSW5zdGFuY2UqIGluc3QgPSBzdGF0aWNfY2FzdDxR
dFBpeG1hcEluc3RhbmNlKj4oaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOworICAgICAgICBp
ZiAoaW5zdCkgeworICAgICAgICAgICAgaWYgKGhpbnQgPT0gcU1ldGFUeXBlSWQ8UVBpeG1hcCA+
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4o
aW5zdC0+dG9QaXhtYXAoKSk7CisgICAgICAgICAgICBpZiAoaGludCA9PSBxTWV0YVR5cGVJZDxR
SW1hZ2U+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFsdWU8UUlt
YWdlPihpbnN0LT50b0ltYWdlKCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOwor
fQorSlNPYmplY3QqIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoRXhlY1N0
YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIGNvbnN0IFFWYXJpYW50JiBk
YXRhKQoreworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgcmV0
dXJuIG5ldyhleGVjKSBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAoZXhlYywgbmV3IFF0UGl4bWFw
SW5zdGFuY2Uocm9vdCwgZGF0YSkpOworfQorYm9vbCBRdFBpeG1hcEluc3RhbmNlOjpjYW5IYW5k
bGUoUU1ldGFUeXBlOjpUeXBlIGhpbnQpCit7CisgICAgcmV0dXJuIGhpbnQgPT0gcU1ldGFUeXBl
SWQ8UUltYWdlPigpIHx8IGhpbnQgPT0gcU1ldGFUeXBlSWQ8UVBpeG1hcD4oKTsKK30KKworfQor
Cit9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gNTI2NzApCisrKyBX
ZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsNyBAQAogI2luY2x1ZGUgInFvYmplY3QuaCIKICNpbmNsdWRlICJxc3RyaW5nbGlzdC5oIgog
I2luY2x1ZGUgInF0X2luc3RhbmNlLmgiCisjaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgog
I2luY2x1ZGUgInF2YXJsZW5ndGhhcnJheS5oIgogI2luY2x1ZGUgPEpTRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDxsaW1pdHMuaD4KQEAgLTcyMCw2ICs3MjEsOCBAQAogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChRdFBpeG1hcEluc3RhbmNlOjpjYW5IYW5kbGUoKFFNZXRhVHlwZTo6VHlw
ZSloaW50KSkgeworICAgICAgICAgICAgICAgIHJldCA9IFF0UGl4bWFwSW5zdGFuY2U6OnZhcmlh
bnRGcm9tT2JqZWN0KG9iamVjdCwgaGludCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQg
PT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoZGlzdGFuY2UpCkBAIC04NDksNiArODUyLDkgQEAKICAgICAgICAgcmV0dXJuIFF0
SW5zdGFuY2U6OmdldFF0SW5zdGFuY2Uob2JqLCByb290LCBRU2NyaXB0RW5naW5lOjpRdE93bmVy
c2hpcCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgfQogCisgICAgaWYgKFF0UGl4
bWFwSW5zdGFuY2U6OmNhbkhhbmRsZSgoUU1ldGFUeXBlOjpUeXBlKXZhcmlhbnQudHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhl
Yywgcm9vdCwgdmFyaWFudCk7CisKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFWYXJpYW50
TWFwKSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBvYmplY3QsIGFuZCBzdHVmZiBwcm9wZXJ0
aWVzIGludG8gaXQKICAgICAgICAgSlNPYmplY3QqIHJldCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0
KGV4ZWMpOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICoKKyAqLworCisjaWZuZGVmIHF0X3BpeG1hcHJ1bnRpbWVfaAorI2RlZmluZSBxdF9waXht
YXBydW50aW1lX2gKKworI2luY2x1ZGUgInJ1bnRpbWUuaCIKKyNpbmNsdWRlIDxRVmFyaWFudD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKK2NsYXNzIFF0UGl4
bWFwSW5zdGFuY2UgOiBwdWJsaWMgSW5zdGFuY2UgeworICAgIFFWYXJpYW50IGRhdGE7CitwdWJs
aWM6CisgICAgUXRQaXhtYXBJbnN0YW5jZShQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmos
IGNvbnN0IFFWYXJpYW50ICYgbmV3RGF0YSk7CisgICAgdmlydHVhbCBDbGFzcyogZ2V0Q2xhc3Mo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNv
bnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOworCisgICAg
dmlydHVhbCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRp
dmVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVPZihFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0OworICAgIGludCB3aWR0aCgpIGNvbnN0OworICAgIGludCBoZWlnaHQoKSBjb25z
dDsKKyAgICBRUGl4bWFwIHRvUGl4bWFwKCk7CisgICAgUUltYWdlIHRvSW1hZ2UoKTsKKyAgICBz
dGF0aWMgSlNPYmplY3QqIGNyZWF0ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgUGFzc1JlZlB0
cjxSb290T2JqZWN0PiwgY29uc3QgUVZhcmlhbnQmKTsKKyAgICBzdGF0aWMgUVZhcmlhbnQgdmFy
aWFudEZyb21PYmplY3QoSlNPYmplY3QqLCBRTWV0YVR5cGU6OlR5cGUgaGludCk7CisgICAgc3Rh
dGljIGJvb2wgY2FuSGFuZGxlKFFNZXRhVHlwZTo6VHlwZSBoaW50KTsKK307CisKK30KKworfQor
I2VuZGlmIC8vIHF0X3BpeG1hcHJ1bnRpbWVfaAo=
</data>
<flag name="review"
          id="27785"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46751</attachid>
            <date>2010-01-16 15:08:36 -0800</date>
            <delta_ts>2010-01-17 13:59:05 -0800</delta_ts>
            <desc>Fixed style issues reported by Simon</desc>
            <filename>patch-hybrid-pixmap-6.diff</filename>
            <type>text/plain</type>
            <size>27560</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
dWkgdmVyc2lvbj0iNC4wIj4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4KKyA8d2lkZ2V0IGNsYXNz
PSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgor
ICAgPHJlY3Q+CisgICAgPHg+MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD42MDA8L3dp
ZHRoPgorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3RyaW5nPldpZGdldDwvc3Ry
aW5nPgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0i
dmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVdlYlZpZXci
IG5hbWU9IndlYlZpZXciPgorICAgICA8cHJvcGVydHkgbmFtZT0idXJsIj4KKyAgICAgIDx1cmw+
CisgICAgICAgPHN0cmluZz5hYm91dDpibGFuazwvc3RyaW5nPgorICAgICAgPC91cmw+CisgICAg
IDwvcHJvcGVydHk+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8
bGF5b3V0IGNsYXNzPSJRSEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRhbExheW91dCI+CisgICAg
IDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwxIj4KKyAgICAg
ICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJv
cGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAg
IDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAgICAgPHByb3BlcnR5IG5h
bWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93
aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4KKyAg
ICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWln
aHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPkltYWdlIGZyb20gUXQg
dG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAg
ICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFt
ZT0ibGJsMyI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5n
PlBpeG1hcCBmcm9tIFF0IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNs
YXNzPSJRTGFiZWwiIG5hbWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4K
KyAgICAgICAgPHN0cmluZy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0Pgor
ICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBuYW1lPSJob3Jpem9udGFs
U3BhY2VyIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICA8
ZW51bT5RdDo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAgPHNpemU+CisgICAg
ICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAg
ICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3BhY2VyPgorICAgICA8
L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0PgorIDwvd2lkZ2V0
PgorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKyA8Y3VzdG9td2lk
Z2V0cz4KKyAgPGN1c3RvbXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+CisgICA8
ZXh0ZW5kcz5RV2lkZ2V0PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdlYktpdC9RV2ViVmlldzwv
aGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdldHM+CisgPHJlc291cmNl
cy8+CisgPGNvbm5lY3Rpb25zLz4KKzwvdWk+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5
YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAyCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1
ZGUoLi4vdGVzdHMucHJpKQorVEFSR0VUID0gaHlicmlkUGl4bWFwCitTT1VSQ0VTICs9IHdpZGdl
dC5jcHAKK0hFQURFUlMgKz0gd2lkZ2V0LmgKK0ZPUk1TICs9IHdpZGdldC51aQorUkVTT1VSQ0VT
ICs9IHJlc291cmNlcy5xcmMKK0NPTkZJRyArPSBjb25zb2xlCkluZGV4OiBXZWJLaXQvcXQvdGVz
dHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMv
aHlicmlkUGl4bWFwL3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAvdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8aHRt
bD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgaW1nIHsgZGlzcGxh
eTogYmxvY2s7IGJvcmRlci1zdHlsZTogZ3Jvb3ZlfQorICAgICAgICA8L3N0eWxlPgorICAgICAg
ICA8c2NyaXB0PgorICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CisgICAgICAgICAg
ICAgICAgdmFyIHB4bSA9IG15V2lkZ2V0LnBpeG1hcDsKKworCisgICAgICAgICAgICAgICAgdmFy
IGltZyA9IG9iai50b0hUTUxJbWFnZUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1n
MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbWcxIik7CisgICAgICAgICAgICAgICAgdmFy
IGltZzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1nMiIpOworICAgICAgICAgICAgICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHB4bS50b0hUTUxJbWFnZUVsZW1lbnQoKSk7CisgICAgICAgICAg
ICAgICAgZnVuY3Rpb24gY29tcGxldGVJZkRvbmUoKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGltZzEuY29tcGxldGUgJiYgaW1nMi5jb21wbGV0ZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW1nMi5vbmxv
YWQgPSBjb21wbGV0ZUlmRG9uZTsKKyAgICAgICAgICAgICAgICBpbWcxLm9ubG9hZCA9IGNvbXBs
ZXRlSWZEb25lOworICAgICAgICAgICAgICAgIGltZzEuc3JjID0gb2JqLnRvRGF0YVVybCgpOwor
ICAgICAgICAgICAgICAgIGltZzIuc3JjID0gbXlXaWRnZXQucGl4bWFwLnRvRGF0YVVybCgpOwor
ICAgICAgICAgICAgICAgIG15V2lkZ2V0LmltYWdlID0gcHhtOworICAgICAgICAgICAgICAgIG15
V2lkZ2V0LnBpeG1hcCA9IGltZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+Cisg
ICAgPC9oZWFkPgorICAgIDxib2R5IG9ubG9hZD0ic3RhcnRUZXN0KCkiPgorICAgICAgICA8aW1n
IGlkPSJpbWcxIiAvPgorICAgICAgICA8aW1nIGlkPSJpbWcyIiAvPgorICAgIDwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIndpZGdldC5oIgorCisjaW5jbHVkZSAicXdl
YmVsZW1lbnQuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJ1aV93aWRnZXQu
aCIKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgorCitXaWRn
ZXQ6OldpZGdldChRV2lkZ2V0KiBwYXJlbnQpIDoKKyAgICBRV2lkZ2V0KHBhcmVudCksCisgICAg
dWkobmV3IFVpOjpXaWRnZXQpCit7CisgICAgdWktPnNldHVwVWkodGhpcyk7Cit9CisKK3ZvaWQg
V2lkZ2V0OjpyZWZyZXNoSlMoKQoreworICAgIHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFt
ZSgpLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15V2lkZ2V0IiwgdGhpcyk7Cit9Cit2
b2lkIFdpZGdldDo6c3RhcnQoKQoreworICAgIHVpLT53ZWJWaWV3LT5sb2FkKFFVcmwoInFyYzov
Ly90ZXN0Lmh0bWwiKSk7CisgICAgY29ubmVjdCh1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJh
bWUoKSwgU0lHTkFMKGphdmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkpLCB0aGlzLCBTTE9U
KHJlZnJlc2hKUygpKSk7CisgICAgdWktPndlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmFk
ZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgibXlXaWRnZXQiLCB0aGlzKTsKK30KKwordm9pZCBX
aWRnZXQ6OmNvbXBsZXRlVGVzdCgpCit7CisgICAgUUNPTVBBUkUodWktPmxibDEtPnBpeG1hcCgp
LT5zaXplKCksIHVpLT5sYmwyLT5zaXplKCkpOworICAgIFFDT01QQVJFKHVpLT5sYmwzLT5zaXpl
KCksIHVpLT5sYmw0LT5waXhtYXAoKS0+c2l6ZSgpKTsKKyAgICBRQ09NUEFSRSh1aS0+bGJsMi0+
c2l6ZSgpLndpZHRoKCksIHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5maW5kRmly
c3RFbGVtZW50KCIjaW1nMSIpLmV2YWx1YXRlSmF2YVNjcmlwdCgidGhpcy53aWR0aCIpLnRvSW50
KCkpOworICAgIFFDT01QQVJFKHVpLT5sYmwzLT5zaXplKCkud2lkdGgoKSwgdWktPndlYlZpZXct
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPmZpbmRGaXJzdEVsZW1lbnQoIiNpbWcyIikuZXZhbHVhdGVK
YXZhU2NyaXB0KCJ0aGlzLndpZHRoIikudG9JbnQoKSk7CisgICAgZW1pdCB0ZXN0Q29tcGxldGUo
KTsKK30KKwordm9pZCBXaWRnZXQ6OnNldFBpeG1hcChjb25zdCBRUGl4bWFwJiBwKQoreworICAg
IHVpLT5sYmwxLT5zZXRQaXhtYXAocCk7Cit9CitRUGl4bWFwIFdpZGdldDo6cGl4bWFwKCkgY29u
c3QKK3sKKyAgICBRUGl4bWFwIHB4KHVpLT5sYmwzLT5zaXplKCkpOworICAgIHsKKyAgICAgICAg
UVBhaW50ZXIgcCgmcHgpOworICAgICAgICB1aS0+bGJsMy0+cmVuZGVyKCZwKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHB4OworfQordm9pZCBXaWRnZXQ6OnNldEltYWdlKGNvbnN0IFFJbWFnZSYgaW1n
KQoreworICAgIHVpLT5sYmw0LT5zZXRQaXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKGltZykpOwor
fQorCitRSW1hZ2UgV2lkZ2V0OjppbWFnZSgpIGNvbnN0Cit7CisgICAgUUltYWdlIGltZyh1aS0+
bGJsMi0+c2l6ZSgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIHsKKyAgICAgICAgUVBh
aW50ZXIgcCgmaW1nKTsKKyAgICAgICAgdWktPmxibDItPnJlbmRlcigmcCk7CisgICAgfQorICAg
IHJldHVybiBpbWc7Cit9CisKK1dpZGdldDo6fldpZGdldCgpCit7CisgICAgZGVsZXRlIHVpOwor
fQorCit2b2lkIFdpZGdldDo6Y2hhbmdlRXZlbnQoUUV2ZW50KiBlKQoreworICAgIFFXaWRnZXQ6
OmNoYW5nZUV2ZW50KGUpOworICAgIHN3aXRjaCAoZS0+dHlwZSgpKSB7CisgICAgY2FzZSBRRXZl
bnQ6Okxhbmd1YWdlQ2hhbmdlOgorICAgICAgICB1aS0+cmV0cmFuc2xhdGVVaSh0aGlzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQpJbmRl
eDogV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
S2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAq
LworCisjaWZuZGVmIHdpZGdldF9oCisjZGVmaW5lIHdpZGdldF9oCisKKyNpbmNsdWRlIDxRSW1h
Z2U+CisjaW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRV2lkZ2V0PgorCituYW1lc3BhY2Ug
VWkgeworY2xhc3MgV2lkZ2V0OworfQorCitjbGFzcyBXaWRnZXQgOiBwdWJsaWMgUVdpZGdldCB7
CisgICAgUV9PQkpFQ1QKKyAgICBRX1BST1BFUlRZKFFQaXhtYXAgcGl4bWFwIFJFQUQgcGl4bWFw
IFdSSVRFIHNldFBpeG1hcCkKKyAgICBRX1BST1BFUlRZKFFJbWFnZSBpbWFnZSBSRUFEIGltYWdl
IFdSSVRFIHNldEltYWdlKQorcHVibGljOgorICAgIFdpZGdldChRV2lkZ2V0KiBwYXJlbnQgPSAw
KTsKKyAgICB+V2lkZ2V0KCk7CisgICAgdm9pZCBzZXRQaXhtYXAoY29uc3QgUVBpeG1hcCYpOwor
ICAgIFFQaXhtYXAgcGl4bWFwKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbWFnZShjb25zdCBRSW1h
Z2UmKTsKKyAgICBRSW1hZ2UgaW1hZ2UoKSBjb25zdDsKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9p
ZCByZWZyZXNoSlMoKTsKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGNvbXBsZXRlVGVzdCgpOwor
ICAgIHZvaWQgc3RhcnQoKTsKK3NpZ25hbHM6CisgICAgdm9pZCB0ZXN0Q29tcGxldGUoKTsKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGNoYW5nZUV2ZW50KFFFdmVudCogZSk7CisKK3ByaXZhdGU6Cisg
ICAgVWk6OldpZGdldCogdWk7Cit9OworCisjZW5kaWYgLy8gd2lkZ2V0X2gKSW5kZXg6IFdlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90c3RfaHlicmlkUGl4bWFwLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1h
cC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIi4uL3V0aWwuaCIKKwor
I2luY2x1ZGUgIndpZGdldC5oIgorI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CisKK2NsYXNzIHRz
dF9oeWJyaWRQaXhtYXAgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVibGlj
OgorICAgIHRzdF9oeWJyaWRQaXhtYXAoUU9iamVjdCogbyA9IDApIDogUU9iamVjdChvKSB7fQor
cHVibGljIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
Y2xlYW51cCgpCisgICAgeworICAgIH0KK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCBoeWJyaWRQ
aXhtYXAoKQorICAgIHsKKyAgICAgICAgV2lkZ2V0IHdkZzsKKyAgICAgICAgd2RnLnNob3coKTsK
KyAgICAgICAgd2RnLnN0YXJ0KCk7CisgICAgICAgIHdhaXRGb3JTaWduYWwoJndkZywgU0lHTkFM
KHRlc3RDb21wbGV0ZSgpKSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBXaWRnZXQqIHdkZzsKKwor
Cit9OworCitRVEVTVF9NQUlOKHRzdF9oeWJyaWRQaXhtYXApCisKKyNpbmNsdWRlIDx0c3RfaHli
cmlkUGl4bWFwLm1vYz4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvcmVzb3Vy
Y2VzLnFyYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Jlc291
cmNlcy5xcmMJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Jl
c291cmNlcy5xcmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPFJDQz4KKyAgICA8cXJl
c291cmNlIHByZWZpeD0iLyI+CisgICAgICAgIDxmaWxlPnRlc3QuaHRtbDwvZmlsZT4KKyAgICA8
L3FyZXNvdXJjZT4KKzwvUkNDPgpJbmRleDogV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJvCShyZXZpc2lvbiA1MzM2NCkKKysr
IFdlYktpdC9xdC90ZXN0cy90ZXN0cy5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
CiAKIFRFTVBMQVRFID0gc3ViZGlycwotU1VCRElSUyA9IHF3ZWJmcmFtZSBxd2VicGFnZSBxd2Vi
ZWxlbWVudCBxZ3JhcGhpY3N3ZWJ2aWV3IHF3ZWJoaXN0b3J5aW50ZXJmYWNlIHF3ZWJ2aWV3IHF3
ZWJoaXN0b3J5IHF3ZWJpbnNwZWN0b3IKK1NVQkRJUlMgPSBxd2ViZnJhbWUgcXdlYnBhZ2UgcXdl
YmVsZW1lbnQgcWdyYXBoaWNzd2VidmlldyBxd2ViaGlzdG9yeWludGVyZmFjZSBxd2VidmlldyBx
d2ViaGlzdG9yeSBxd2ViaW5zcGVjdG9yIGh5YnJpZFBpeG1hcAogZ3JlYXRlclRoYW4oUVRfTUlO
T1JfVkVSU0lPTiwgNCk6IFNVQkRJUlMgKz0gYmVuY2htYXJrcy9wYWludGluZyBiZW5jaG1hcmtz
L2xvYWRpbmcKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNTMzNjQpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDM2LDYgKzEwMzYsNyBAQAogICAgIGJyaWRnZS9xdC9xdF9jbGFz
cy5oIFwKICAgICBicmlkZ2UvcXQvcXRfaW5zdGFuY2UuaCBcCiAgICAgYnJpZGdlL3F0L3F0X3J1
bnRpbWUuaCBcCisgICAgYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaCBcCiAgICAgYnJpZGdl
L3J1bnRpbWVfYXJyYXkuaCBcCiAgICAgYnJpZGdlL3J1bnRpbWUuaCBcCiAgICAgYnJpZGdlL3J1
bnRpbWVfbWV0aG9kLmggXApAQCAtMTkzNSw2ICsxOTM2LDcgQEAKICAgICBiaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyUXQuY3BwIFwKICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuY3BwIFwKICAg
ICBicmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwIFwKKyAgICBicmlkZ2UvcXQvcXRfcGl4bWFwcnVu
dGltZS5jcHAgXAogICAgIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBcCiAgICAgcGFnZS9xdC9E
cmFnQ29udHJvbGxlclF0LmNwcCBcCiAgICAgcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAgXApJ
bmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxdF9waXhtYXBydW50aW1l
LmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgor
I2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJKU0RvY3VtZW50LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIk9i
amVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgorI2luY2x1ZGUgPFFC
dWZmZXI+CisjaW5jbHVkZSA8UUJ5dGVBcnJheT4KKyNpbmNsdWRlIDxRSW1hZ2U+CisjaW5jbHVk
ZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRVmFyaWFudD4KKyNpbmNsdWRlIDxydW50aW1lX29iamVj
dC5oPgorI2luY2x1ZGUgPHJ1bnRpbWVfcm9vdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFzcyBRdFBp
eG1hcENsYXNzIDogcHVibGljIENsYXNzIHsKK3B1YmxpYzoKKyAgICBRdFBpeG1hcENsYXNzKCk7
CisgICAgdmlydHVhbCBNZXRob2RMaXN0IG1ldGhvZHNOYW1lZChjb25zdCBJZGVudGlmaWVyJiwg
SW5zdGFuY2UqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZpZWxkKiBmaWVsZE5hbWVkKGNvbnN0IElk
ZW50aWZpZXImLCBJbnN0YW5jZSopIGNvbnN0OworfTsKKworCitjbGFzcyBRdFBpeG1hcFdpZHRo
RmllbGQgOiBwdWJsaWMgRmllbGQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBu
YW1lKCkgeyByZXR1cm4gIndpZHRoIjsgfQorICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21J
bnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBwaXhtYXApIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8Y29uc3QgUXRQ
aXhtYXBJbnN0YW5jZSo+KHBpeG1hcCktPndpZHRoKCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1
ZSkgY29uc3Qge30KK307CitjbGFzcyBRdFBpeG1hcEhlaWdodEZpZWxkIDogcHVibGljIEZpZWxk
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsgcmV0dXJuICJoZWln
aHQiOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
anNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8Y29uc3QgUXRQaXhtYXBJbnN0YW5jZSo+KGluc3Qp
LT5oZWlnaHQoKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2Uo
RXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdCB7fQorfTsKKworY2xh
c3MgUXRQaXhtYXBSdW50aW1lTWV0aG9kIDogcHVibGljIE1ldGhvZCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCBpbnQgbnVtUGFyYW1ldGVycygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZShFeGVjU3RhdGUqIGV4ZWMsIFFW
YXJpYW50JiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290KSA9IDA7CisKK307CisKK2NsYXNz
IFF0UGl4bWFwQ3JlYXRlRWxlbWVudE1ldGhvZCA6IHB1YmxpYyBRdFBpeG1hcFJ1bnRpbWVNZXRo
b2QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gInRv
SFRNTEltYWdlRWxlbWVudCI7IH0KKyAgICBKU1ZhbHVlIGludm9rZShFeGVjU3RhdGUqIGV4ZWMs
IFFWYXJpYW50JiB2LCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QpCisgICAgeworICAgICAg
ICBRUGl4bWFwIHB4bTsKKyAgICAgICAgaWYgKHYudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSko
cU1ldGFUeXBlSWQ8UUltYWdlPigpKSkgeworICAgICAgICAgICAgcHhtID0gUVBpeG1hcDo6ZnJv
bUltYWdlKHYudmFsdWU8UUltYWdlPigpKTsKKyAgICAgICAgICAgIHYgPSBRVmFyaWFudDo6ZnJv
bVZhbHVlPFFQaXhtYXA+KHB4bSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcHhtID0g
di52YWx1ZTxRUGl4bWFwPigpOworCisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IDA7Cisg
ICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWwgPSBzdGF0aWNfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHJvb3QtPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgaWYgKGdsb2JhbCkgewor
ICAgICAgICAgICAgRE9NV2luZG93KiBkV2luZG93ID0gdG9ET01XaW5kb3coZ2xvYmFsKTsKKyAg
ICAgICAgICAgIGlmIChkV2luZG93KQorICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZFdpbmRv
dy0+ZG9jdW1lbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkb2N1bWVudCkgeworICAg
ICAgICAgICAgUGFzc1JlZlB0cjxTdGlsbEltYWdlPiBpbWcgPSBXZWJDb3JlOjpTdGlsbEltYWdl
OjpjcmVhdGUocHhtKTsKKyAgICAgICAgICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFn
ZSA9IG5ldyBIVE1MSW1hZ2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2N1bWVudCk7Cisg
ICAgICAgICAgICBpbWFnZS0+c2V0Q2FjaGVkSW1hZ2UobmV3IENhY2hlZEltYWdlKGltZy5nZXQo
KSkpOworICAgICAgICAgICAgdG9KUyhleGVjLCBnbG9iYWwsIGRvY3VtZW50KTsKKyAgICAgICAg
ICAgIHJldHVybiAgYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWwsIGltYWdlLnJlbGVhc2UoKSkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworfTsK
KworY2xhc3MgUXRQaXhtYXBUb0RhdGFVcmxNZXRob2QgOiBwdWJsaWMgUXRQaXhtYXBSdW50aW1l
TWV0aG9kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsgcmV0dXJu
ICJ0b0RhdGFVcmwiOyB9CisgICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0YXRlKiBleGVjLCBRVmFy
aWFudCYgdiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290KQorICAgIHsKKyAgICAgICAgUUlt
YWdlIGltYWdlOworICAgICAgICAvLyBmb3IgZ2V0dGluZyB0aGUgZGF0YSB1cmwsIHdlIGFsd2F5
cyBwcmVmZXIgdGhlIGltYWdlLgorICAgICAgICBpZiAodi50eXBlKCkgPT0gKFFWYXJpYW50OjpU
eXBlKXFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpIHsKKyAgICAgICAgICAgIGltYWdlID0gdi52YWx1
ZTxRUGl4bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgICAgIHYgPSBRVmFyaWFudDo6ZnJvbVZh
bHVlPFFJbWFnZT4oaW1hZ2UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGltYWdlID0g
di52YWx1ZTxRSW1hZ2U+KCk7CisgICAgICAgIFFCeXRlQXJyYXkgYmE7CisgICAgICAgIFFCdWZm
ZXIgYigmYmEpOworICAgICAgICBpbWFnZS5zYXZlKCZiLCAiUE5HIik7CisgICAgICAgIGNvbnN0
IFFTdHJpbmcgYjY0ID0gUVN0cmluZygiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIpICsgYmEudG9C
YXNlNjQoKTsKKyAgICAgICAgY29uc3QgVVN0cmluZyB1c3RyaW5nKChVQ2hhciopYjY0LnV0ZjE2
KCksIGI2NC5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1c3RyaW5n
KTsKKyAgICB9CisKK307CisKK3N0cnVjdCBRdFBpeG1hcE1ldGFEYXRhIHsKKyAgICBRdFBpeG1h
cFRvRGF0YVVybE1ldGhvZCB0b0RhdGFVcmxNZXRob2Q7CisgICAgUXRQaXhtYXBDcmVhdGVFbGVt
ZW50TWV0aG9kIGNyZWF0ZUVsZW1lbnRNZXRob2Q7CisgICAgUXRQaXhtYXBIZWlnaHRGaWVsZCBo
ZWlnaHRGaWVsZDsKKyAgICBRdFBpeG1hcFdpZHRoRmllbGQgd2lkdGhGaWVsZDsKKyAgICBRdFBp
eG1hcENsYXNzIGNsczsKK30gcXRfcGl4bWFwX21ldGFEYXRhOworCisvLyBEZXJpdmVkIFJ1bnRp
bWVPYmplY3QKK2NsYXNzIFF0UGl4bWFwUnVudGltZU9iamVjdEltcCA6IHB1YmxpYyBSdW50aW1l
T2JqZWN0SW1wIHsKK3B1YmxpYzoKKyAgICBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAoRXhlY1N0
YXRlKiwgUGFzc1JlZlB0cjxJbnN0YW5jZT4pOworCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5m
byBzX2luZm87CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVj
dHVyZShKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncykp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1
cmVGbGFncyA9IFJ1bnRpbWVPYmplY3RJbXA6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFy
a0NoaWxkcmVuOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFz
c0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Cit9OworCitRdFBpeG1hcFJ1bnRpbWVP
YmplY3RJbXA6OlF0UGl4bWFwUnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NS
ZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQorICAgIDogUnVudGltZU9iamVjdEltcChleGVjLCBX
ZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFF0UGl4bWFwUnVudGltZU9iamVjdElt
cD4oZXhlYyksIGluc3RhbmNlKQoreworfQorCitjb25zdCBDbGFzc0luZm8gUXRQaXhtYXBSdW50
aW1lT2JqZWN0SW1wOjpzX2luZm8gPSB7ICJRdFBpeG1hcFJ1bnRpbWVPYmplY3QiLCAmUnVudGlt
ZU9iamVjdEltcDo6c19pbmZvLCAwLCAwIH07CisKKworUXRQaXhtYXBDbGFzczo6UXRQaXhtYXBD
bGFzcygpCit7Cit9CisKKworQ2xhc3MqIFF0UGl4bWFwSW5zdGFuY2U6OmdldENsYXNzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gJnF0X3BpeG1hcF9tZXRhRGF0YS5jbHM7Cit9CisKK0pTVmFsdWUg
UXRQaXhtYXBJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0
aG9kTGlzdCYgbWV0aG9kcywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAobWV0aG9k
cy5zaXplKCkgPT0gMSkgeworICAgICAgICBRdFBpeG1hcFJ1bnRpbWVNZXRob2QqIG10ZCA9IHN0
YXRpY19jYXN0PFF0UGl4bWFwUnVudGltZU1ldGhvZCo+KG1ldGhvZHNbMF0pOworICAgICAgICBy
ZXR1cm4gbXRkLT5pbnZva2UoZXhlYywgZGF0YSwgcm9vdE9iamVjdCgpKTsKKyAgICB9CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK01ldGhvZExpc3QgUXRQaXhtYXBDbGFzczo6bWV0
aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEluc3RhbmNlKikgY29uc3QK
K3sKKyAgICBNZXRob2RMaXN0IG1sOworICAgIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFwVG9E
YXRhVXJsTWV0aG9kOjpuYW1lKCkpCisgICAgICAgIG1sLmFwcGVuZCgmcXRfcGl4bWFwX21ldGFE
YXRhLnRvRGF0YVVybE1ldGhvZCk7CisgICAgZWxzZSBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1h
cENyZWF0ZUVsZW1lbnRNZXRob2Q6Om5hbWUoKSkKKyAgICAgICAgbWwuYXBwZW5kKCZxdF9waXht
YXBfbWV0YURhdGEuY3JlYXRlRWxlbWVudE1ldGhvZCk7CisgICAgcmV0dXJuIG1sOworfQorCitG
aWVsZCogUXRQaXhtYXBDbGFzczo6ZmllbGROYW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBJbnN0YW5jZSopIGNvbnN0Cit7CisgICAgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBX
aWR0aEZpZWxkOjpuYW1lKCkpCisgICAgICAgIHJldHVybiAmcXRfcGl4bWFwX21ldGFEYXRhLndp
ZHRoRmllbGQ7CisgICAgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBIZWlnaHRGaWVsZDo6bmFt
ZSgpKQorICAgICAgICByZXR1cm4gJnF0X3BpeG1hcF9tZXRhRGF0YS5oZWlnaHRGaWVsZDsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBRdFBpeG1hcEluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVz
KEV4ZWNTdGF0ZSpleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyKQoreworICAgIGFyci5hZGQo
SWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kOjpuYW1lKCkp
KSk7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBDcmVhdGVF
bGVtZW50TWV0aG9kOjpuYW1lKCkpKSk7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVT
dHJpbmcoUXRQaXhtYXBXaWR0aEZpZWxkOjpuYW1lKCkpKSk7CisgICAgYXJyLmFkZChJZGVudGlm
aWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBIZWlnaHRGaWVsZDo6bmFtZSgpKSkpOworfQorCitK
U1ZhbHVlIFF0UGl4bWFwSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFBy
ZWZlcnJlZFByaW1pdGl2ZVR5cGUgcHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKHB0eXBlID09IFBy
ZWZlck51bWJlcikgeworICAgICAgICByZXR1cm4ganNCb29sZWFuKGRhdGEudHlwZSgpID09IChR
VmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRSW1hZ2U+KCkgJiYgIShkYXRhLnZhbHVlPFFJbWFn
ZT4oKSkuaXNOdWxsKCkKKyAgICAgICAgICAgICAgICB8fCAoZGF0YS50eXBlKCkgPT0gKFFWYXJp
YW50OjpUeXBlKXFNZXRhVHlwZUlkPFFQaXhtYXA+KCkgJiYgIWRhdGEudmFsdWU8UVBpeG1hcD4o
KS5pc051bGwoKSkpOworICAgIH0KKyAgICBpZiAocHR5cGUgPT0gUHJlZmVyU3RyaW5nKQorICAg
ICAgICByZXR1cm4gdmFsdWVPZihleGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30K
KworSlNWYWx1ZSBRdFBpeG1hcEluc3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29u
c3QKK3sKKyAgICBjb25zdCBRU3RyaW5nIHRvU3RyID0gUVN0cmluZygiW1F0IE5hdGl2ZSBQaXht
YXAgJTEsJTJdIikuYXJnKHdpZHRoKCkpLmFyZyhoZWlnaHQoKSk7CisgICAgVVN0cmluZyB1c3Ry
aW5nKChVQ2hhciopdG9TdHIudXRmMTYoKSwgdG9TdHIubGVuZ3RoKCkpOworICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCB1c3RyaW5nKTsKK30KKworUXRQaXhtYXBJbnN0YW5jZTo6UXRQaXhtYXBJ
bnN0YW5jZShQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmosIGNvbnN0IFFWYXJpYW50JiBk
KQorICAgICAgICA6SW5zdGFuY2Uocm9vdE9iaiksIGRhdGEoZCkKK3sKK30KK2ludCBRdFBpeG1h
cEluc3RhbmNlOjp3aWR0aCgpIGNvbnN0Cit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFy
aWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRUGl4bWFwPigpKQorICAgICAgICByZXR1cm4gZGF0YS52
YWx1ZTxRUGl4bWFwPigpLndpZHRoKCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFu
dDo6VHlwZSlxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVl
PFFJbWFnZT4oKS53aWR0aCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgUXRQaXhtYXBJbnN0
YW5jZTo6aGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gKFFWYXJpYW50
OjpUeXBlKXFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVl
PFFQaXhtYXA+KCkuaGVpZ2h0KCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6
VHlwZSlxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJ
bWFnZT4oKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gMDsKK30KKworUVBpeG1hcCBRdFBpeG1hcElu
c3RhbmNlOjp0b1BpeG1hcCgpCit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6
VHlwZSlxTWV0YVR5cGVJZDxRUGl4bWFwPigpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxR
UGl4bWFwPigpOworICAgIGlmIChkYXRhLnR5cGUoKSA9PSAoUVZhcmlhbnQ6OlR5cGUpcU1ldGFU
eXBlSWQ8UUltYWdlPigpKSB7CisgICAgICAgIGNvbnN0IFFQaXhtYXAgcHhtID0gUVBpeG1hcDo6
ZnJvbUltYWdlKGRhdGEudmFsdWU8UUltYWdlPigpKTsKKyAgICAgICAgZGF0YSA9IFFWYXJpYW50
Ojpmcm9tVmFsdWU8UVBpeG1hcD4ocHhtKTsKKyAgICAgICAgcmV0dXJuIHB4bTsKKyAgICB9Cisg
ICAgcmV0dXJuIFFQaXhtYXAoKTsKKworfQorCitRSW1hZ2UgUXRQaXhtYXBJbnN0YW5jZTo6dG9J
bWFnZSgpCit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IChRVmFyaWFudDo6VHlwZSlxTWV0YVR5
cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4oKTsKKyAg
ICBpZiAoZGF0YS50eXBlKCkgPT0gKFFWYXJpYW50OjpUeXBlKXFNZXRhVHlwZUlkPFFQaXhtYXA+
KCkpIHsKKyAgICAgICAgY29uc3QgUUltYWdlIGltZz0gZGF0YS52YWx1ZTxRUGl4bWFwPigpLnRv
SW1hZ2UoKTsKKyAgICAgICAgZGF0YSA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihpbWcp
OworICAgICAgICByZXR1cm4gaW1nOworICAgIH0KKyAgICByZXR1cm4gUUltYWdlKCk7Cit9CisK
K1FWYXJpYW50IFF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBv
YmplY3QsIFFNZXRhVHlwZTo6VHlwZSBoaW50KQoreworICAgIGlmIChvYmplY3QtPmluaGVyaXRz
KCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpIHsKKyAgICAgICAgSlNIVE1MSW1hZ2VFbGVt
ZW50KiBlbCA9IHN0YXRpY19jYXN0PEpTSFRNTEltYWdlRWxlbWVudCo+KG9iamVjdCk7CisgICAg
ICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnQqPihlbC0+aW1wbCgpKTsKKyAgICAgICAgaWYgKGltYWdlRWxlbWVudCkgeworICAg
ICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNJbWcgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCk7
CisgICAgICAgICAgICBpZiAoY0ltZykgeworICAgICAgICAgICAgICAgIEltYWdlKiBpbWcgPSBj
SW1nLT5pbWFnZSgpOworICAgICAgICAgICAgICAgIGlmIChpbWcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUVBpeG1hcCogcHhtID0gaW1nLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocHhtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVBpeG1hcCA+KCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBp
eG1hcD4oKnB4bSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUVZhcmlhbnQ6OmZy
b21WYWx1ZTxRSW1hZ2U+KHB4bS0+dG9JbWFnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAob2JqZWN0LT5pbmhlcml0cygmUXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8pKSB7
CisgICAgICAgIFF0UGl4bWFwUnVudGltZU9iamVjdEltcCogaW1wID0gc3RhdGljX2Nhc3Q8UXRQ
aXhtYXBSdW50aW1lT2JqZWN0SW1wKj4ob2JqZWN0KTsKKyAgICAgICAgUXRQaXhtYXBJbnN0YW5j
ZSogaW5zdCA9IHN0YXRpY19jYXN0PFF0UGl4bWFwSW5zdGFuY2UqPihpbXAtPmdldEludGVybmFs
SW5zdGFuY2UoKSk7CisgICAgICAgIGlmIChpbnN0KSB7CisgICAgICAgICAgICBpZiAoaGludCA9
PSBxTWV0YVR5cGVJZDxRUGl4bWFwID4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlh
bnQ6OmZyb21WYWx1ZTxRUGl4bWFwPihpbnN0LT50b1BpeG1hcCgpKTsKKyAgICAgICAgICAgIGlm
IChoaW50ID09IHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
UVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KGluc3QtPnRvSW1hZ2UoKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitKU09iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6Y3Jl
YXRlUnVudGltZU9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4g
cm9vdCwgY29uc3QgUVZhcmlhbnQmIGRhdGEpCit7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFz
c2VydGlvbnNPbmx5KTsKKyAgICByZXR1cm4gbmV3KGV4ZWMpIFF0UGl4bWFwUnVudGltZU9iamVj
dEltcChleGVjLCBuZXcgUXRQaXhtYXBJbnN0YW5jZShyb290LCBkYXRhKSk7Cit9Citib29sIFF0
UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShRTWV0YVR5cGU6OlR5cGUgaGludCkKK3sKKyAgICBy
ZXR1cm4gaGludCA9PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkgfHwgaGludCA9PSBxTWV0YVR5cGVJ
ZDxRUGl4bWFwPigpOworfQorCit9CisKK30KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
CShyZXZpc2lvbiA1MzM2NCkKKysrIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAicW9iamVjdC5oIgogI2lu
Y2x1ZGUgInFzdHJpbmdsaXN0LmgiCiAjaW5jbHVkZSAicXRfaW5zdGFuY2UuaCIKKyNpbmNsdWRl
ICJxdF9waXhtYXBydW50aW1lLmgiCiAjaW5jbHVkZSAicXZhcmxlbmd0aGFycmF5LmgiCiAjaW5j
bHVkZSA8SlNGdW5jdGlvbi5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNzIwLDYgKzcyMSw4
IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNh
bkhhbmRsZSgoUU1ldGFUeXBlOjpUeXBlKWhpbnQpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0g
UXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3Qob2JqZWN0LCBoaW50KTsKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxR
VmFyaWFudD4oKSkgewogICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSkKQEAgLTg0OSw2ICs4NTIs
OSBAQAogICAgICAgICByZXR1cm4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmosIHJvb3Qs
IFFTY3JpcHRFbmdpbmU6OlF0T3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsK
ICAgICB9CiAKKyAgICBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKChRTWV0YVR5cGU6
OlR5cGUpdmFyaWFudC50eXBlKCkpKQorICAgICAgICByZXR1cm4gUXRQaXhtYXBJbnN0YW5jZTo6
Y3JlYXRlUnVudGltZU9iamVjdChleGVjLCByb290LCB2YXJpYW50KTsKKwogICAgIGlmICh0eXBl
ID09IFFNZXRhVHlwZTo6UVZhcmlhbnRNYXApIHsKICAgICAgICAgLy8gY3JlYXRlIGEgbmV3IG9i
amVjdCwgYW5kIHN0dWZmIHByb3BlcnRpZXMgaW50byBpdAogICAgICAgICBKU09iamVjdCogcmV0
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9x
dF9waXhtYXBydW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4
bWFwcnVudGltZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFw
cnVudGltZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgcXRfcGl4bWFwcnVu
dGltZV9oCisjZGVmaW5lIHF0X3BpeG1hcHJ1bnRpbWVfaAorCisjaW5jbHVkZSAicnVudGltZS5o
IgorI2luY2x1ZGUgPFFWYXJpYW50PgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJp
bmRpbmdzIHsKKworY2xhc3MgUXRQaXhtYXBJbnN0YW5jZSA6IHB1YmxpYyBJbnN0YW5jZSB7Cisg
ICAgUVZhcmlhbnQgZGF0YTsKK3B1YmxpYzoKKyAgICBRdFBpeG1hcEluc3RhbmNlKFBhc3NSZWZQ
dHI8Um9vdE9iamVjdD4gcm9vdE9iaiwgY29uc3QgUVZhcmlhbnQmIG5ld0RhdGEpOworICAgIHZp
cnR1YWwgQ2xhc3MqIGdldENsYXNzKCkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9r
ZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYgYXJn
cyk7CisgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmKTsKKworICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0
YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVl
IHZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdDsKKyAgICBpbnQgd2lkdGgoKSBjb25zdDsK
KyAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgUVBpeG1hcCB0b1BpeG1hcCgpOworICAgIFFJ
bWFnZSB0b0ltYWdlKCk7CisgICAgc3RhdGljIEpTT2JqZWN0KiBjcmVhdGVSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4sIGNvbnN0IFFWYXJpYW50Jik7Cisg
ICAgc3RhdGljIFFWYXJpYW50IHZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiwgUU1ldGFUeXBl
OjpUeXBlIGhpbnQpOworICAgIHN0YXRpYyBib29sIGNhbkhhbmRsZShRTWV0YVR5cGU6OlR5cGUg
aGludCk7Cit9OworCit9CisKK30KKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46760</attachid>
            <date>2010-01-17 13:59:05 -0800</date>
            <delta_ts>2010-01-17 17:04:52 -0800</delta_ts>
            <desc>Fix some extra style issues reported by Kenneth</desc>
            <filename>patch-hybrid-pixmap-7.diff</filename>
            <type>text/plain</type>
            <size>27688</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
dWkgdmVyc2lvbj0iNC4wIj4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4KKyA8d2lkZ2V0IGNsYXNz
PSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgor
ICAgPHJlY3Q+CisgICAgPHg+MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD42MDA8L3dp
ZHRoPgorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3RyaW5nPldpZGdldDwvc3Ry
aW5nPgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0i
dmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVdlYlZpZXci
IG5hbWU9IndlYlZpZXciPgorICAgICA8cHJvcGVydHkgbmFtZT0idXJsIj4KKyAgICAgIDx1cmw+
CisgICAgICAgPHN0cmluZz5hYm91dDpibGFuazwvc3RyaW5nPgorICAgICAgPC91cmw+CisgICAg
IDwvcHJvcGVydHk+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8
bGF5b3V0IGNsYXNzPSJRSEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRhbExheW91dCI+CisgICAg
IDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwxIj4KKyAgICAg
ICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJv
cGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAg
IDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAgICAgPHByb3BlcnR5IG5h
bWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93
aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4KKyAg
ICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWln
aHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPkltYWdlIGZyb20gUXQg
dG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAg
ICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFt
ZT0ibGJsMyI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5n
PlBpeG1hcCBmcm9tIFF0IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNs
YXNzPSJRTGFiZWwiIG5hbWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4K
KyAgICAgICAgPHN0cmluZy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0Pgor
ICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBuYW1lPSJob3Jpem9udGFs
U3BhY2VyIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICA8
ZW51bT5RdDo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAgPHNpemU+CisgICAg
ICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAg
ICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3BhY2VyPgorICAgICA8
L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0PgorIDwvd2lkZ2V0
PgorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKyA8Y3VzdG9td2lk
Z2V0cz4KKyAgPGN1c3RvbXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+CisgICA8
ZXh0ZW5kcz5RV2lkZ2V0PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdlYktpdC9RV2ViVmlldzwv
aGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdldHM+CisgPHJlc291cmNl
cy8+CisgPGNvbm5lY3Rpb25zLz4KKzwvdWk+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5
YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAyCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1
ZGUoLi4vdGVzdHMucHJpKQorVEFSR0VUID0gaHlicmlkUGl4bWFwCitTT1VSQ0VTICs9IHdpZGdl
dC5jcHAKK0hFQURFUlMgKz0gd2lkZ2V0LmgKK0ZPUk1TICs9IHdpZGdldC51aQorUkVTT1VSQ0VT
ICs9IHJlc291cmNlcy5xcmMKK0NPTkZJRyArPSBjb25zb2xlCkluZGV4OiBXZWJLaXQvcXQvdGVz
dHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMv
aHlicmlkUGl4bWFwL3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAvdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACis8aHRt
bD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgaW1nIHsgZGlzcGxh
eTogYmxvY2s7IGJvcmRlci1zdHlsZTogZ3Jvb3ZlfQorICAgICAgICA8L3N0eWxlPgorICAgICAg
ICA8c2NyaXB0PgorICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CisgICAgICAgICAg
ICAgICAgdmFyIHB4bSA9IG15V2lkZ2V0LnBpeG1hcDsKKworICAgICAgICAgICAgICAgIHZhciBp
bWcgPSBvYmoudG9IVE1MSW1hZ2VFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgdmFyIGltZzEg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1nMSIpOworICAgICAgICAgICAgICAgIHZhciBp
bWcyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltZzIiKTsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltZyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChweG0udG9IVE1MSW1hZ2VFbGVtZW50KCkpOworICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIGNvbXBsZXRlSWZEb25lKCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbWcxLmNvbXBsZXRlICYmIGltZzIuY29tcGxldGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGltZzEub25sb2Fk
ID0gY29tcGxldGVJZkRvbmU7CisgICAgICAgICAgICAgICAgaW1nMi5vbmxvYWQgPSBjb21wbGV0
ZUlmRG9uZTsKKyAgICAgICAgICAgICAgICBpbWcxLnNyYyA9IG9iai50b0RhdGFVcmwoKTsKKyAg
ICAgICAgICAgICAgICBpbWcyLnNyYyA9IG15V2lkZ2V0LnBpeG1hcC50b0RhdGFVcmwoKTsKKyAg
ICAgICAgICAgICAgICBteVdpZGdldC5pbWFnZSA9IHB4bTsKKyAgICAgICAgICAgICAgICBteVdp
ZGdldC5waXhtYXAgPSBpbWc7CisgICAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAg
IDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0VGVzdCgpIj4KKyAgICAgICAgPGltZyBp
ZD0iaW1nMSIgLz4KKyAgICAgICAgPGltZyBpZD0iaW1nMiIgLz4KKyAgICA8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3aWRnZXQuaCIKKworI2luY2x1ZGUgInF3ZWJl
bGVtZW50LmgiCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAidWlfd2lkZ2V0Lmgi
CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKworV2lkZ2V0
OjpXaWRnZXQoUVdpZGdldCogcGFyZW50KSA6CisgICAgUVdpZGdldChwYXJlbnQpLAorICAgIHVp
KG5ldyBVaTo6V2lkZ2V0KQoreworICAgIHVpLT5zZXR1cFVpKHRoaXMpOworfQorCit2b2lkIFdp
ZGdldDo6cmVmcmVzaEpTKCkKK3sKKyAgICB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUo
KS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJteVdpZGdldCIsIHRoaXMpOworfQordm9p
ZCBXaWRnZXQ6OnN0YXJ0KCkKK3sKKyAgICB1aS0+d2ViVmlldy0+bG9hZChRVXJsKCJxcmM6Ly8v
dGVzdC5odG1sIikpOworICAgIGNvbm5lY3QodWktPndlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1l
KCksIFNJR05BTChqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpKSwgdGhpcywgU0xPVChy
ZWZyZXNoSlMoKSkpOworICAgIHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5hZGRU
b0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15V2lkZ2V0IiwgdGhpcyk7Cit9CisKK3ZvaWQgV2lk
Z2V0Ojpjb21wbGV0ZVRlc3QoKQoreworICAgIFFDT01QQVJFKHVpLT5sYmwxLT5waXhtYXAoKS0+
c2l6ZSgpLCB1aS0+bGJsMi0+c2l6ZSgpKTsKKyAgICBRQ09NUEFSRSh1aS0+bGJsMy0+c2l6ZSgp
LCB1aS0+bGJsNC0+cGl4bWFwKCktPnNpemUoKSk7CisgICAgUUNPTVBBUkUodWktPmxibDItPnNp
emUoKS53aWR0aCgpLCB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZmluZEZpcnN0
RWxlbWVudCgiI2ltZzEiKS5ldmFsdWF0ZUphdmFTY3JpcHQoInRoaXMud2lkdGgiKS50b0ludCgp
KTsKKyAgICBRQ09NUEFSRSh1aS0+bGJsMy0+c2l6ZSgpLndpZHRoKCksIHVpLT53ZWJWaWV3LT5w
YWdlKCktPm1haW5GcmFtZSgpLT5maW5kRmlyc3RFbGVtZW50KCIjaW1nMiIpLmV2YWx1YXRlSmF2
YVNjcmlwdCgidGhpcy53aWR0aCIpLnRvSW50KCkpOworICAgIGVtaXQgdGVzdENvbXBsZXRlKCk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQaXhtYXAoY29uc3QgUVBpeG1hcCYgcCkKK3sKKyAgICB1
aS0+bGJsMS0+c2V0UGl4bWFwKHApOworfQorUVBpeG1hcCBXaWRnZXQ6OnBpeG1hcCgpIGNvbnN0
Cit7CisgICAgUVBpeG1hcCBweCh1aS0+bGJsMy0+c2l6ZSgpKTsKKyAgICB7CisgICAgICAgIFFQ
YWludGVyIHAoJnB4KTsKKyAgICAgICAgdWktPmxibDMtPnJlbmRlcigmcCk7CisgICAgfQorICAg
IHJldHVybiBweDsKK30KK3ZvaWQgV2lkZ2V0OjpzZXRJbWFnZShjb25zdCBRSW1hZ2UmIGltZykK
K3sKKyAgICB1aS0+bGJsNC0+c2V0UGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShpbWcpKTsKK30K
KworUUltYWdlIFdpZGdldDo6aW1hZ2UoKSBjb25zdAoreworICAgIFFJbWFnZSBpbWcodWktPmxi
bDItPnNpemUoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICB7CisgICAgICAgIFFQYWlu
dGVyIHAoJmltZyk7CisgICAgICAgIHVpLT5sYmwyLT5yZW5kZXIoJnApOworICAgIH0KKyAgICBy
ZXR1cm4gaW1nOworfQorCitXaWRnZXQ6On5XaWRnZXQoKQoreworICAgIGRlbGV0ZSB1aTsKK30K
Kwordm9pZCBXaWRnZXQ6OmNoYW5nZUV2ZW50KFFFdmVudCogZSkKK3sKKyAgICBRV2lkZ2V0Ojpj
aGFuZ2VFdmVudChlKTsKKyAgICBzd2l0Y2ggKGUtPnR5cGUoKSkgeworICAgIGNhc2UgUUV2ZW50
OjpMYW5ndWFnZUNoYW5nZToKKyAgICAgICAgdWktPnJldHJhbnNsYXRlVWkodGhpcyk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KSW5kZXg6
IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiB3aWRnZXRfaAorI2RlZmluZSB3aWRnZXRfaAorCisjaW5jbHVkZSA8UUltYWdl
PgorI2luY2x1ZGUgPFFQaXhtYXA+CisjaW5jbHVkZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFVp
IHsKK2NsYXNzIFdpZGdldDsKK30KKworY2xhc3MgV2lkZ2V0IDogcHVibGljIFFXaWRnZXQgewor
ICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRUGl4bWFwIHBpeG1hcCBSRUFEIHBpeG1hcCBX
UklURSBzZXRQaXhtYXApCisgICAgUV9QUk9QRVJUWShRSW1hZ2UgaW1hZ2UgUkVBRCBpbWFnZSBX
UklURSBzZXRJbWFnZSkKKworcHVibGljOgorICAgIFdpZGdldChRV2lkZ2V0KiBwYXJlbnQgPSAw
KTsKKyAgICB+V2lkZ2V0KCk7CisgICAgdm9pZCBzZXRQaXhtYXAoY29uc3QgUVBpeG1hcCYpOwor
ICAgIFFQaXhtYXAgcGl4bWFwKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbWFnZShjb25zdCBRSW1h
Z2UmKTsKKyAgICBRSW1hZ2UgaW1hZ2UoKSBjb25zdDsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2
b2lkIHJlZnJlc2hKUygpOworCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBjb21wbGV0ZVRlc3Qo
KTsKKyAgICB2b2lkIHN0YXJ0KCk7CisKK3NpZ25hbHM6CisgICAgdm9pZCB0ZXN0Q29tcGxldGUo
KTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgY2hhbmdlRXZlbnQoUUV2ZW50KiBlKTsKKworcHJp
dmF0ZToKKyAgICBVaTo6V2lkZ2V0KiB1aTsKK307CisKKyNlbmRpZiAvLyB3aWRnZXRfaApJbmRl
eDogV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90c3RfaHlicmlkUGl4bWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3RzdF9oeWJyaWRQaXhtYXAu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90c3RfaHli
cmlkUGl4bWFwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiLi4vdXRp
bC5oIgorCisjaW5jbHVkZSAid2lkZ2V0LmgiCisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKwor
Y2xhc3MgdHN0X2h5YnJpZFBpeG1hcCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAor
CitwdWJsaWM6CisgICAgdHN0X2h5YnJpZFBpeG1hcChRT2JqZWN0KiBvID0gMCkgOiBRT2JqZWN0
KG8pIHt9CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGluaXQoKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGNsZWFudXAoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGUgc2xvdHM6CisgICAg
dm9pZCBoeWJyaWRQaXhtYXAoKQorICAgIHsKKyAgICAgICAgV2lkZ2V0IHdpZGdldDsKKyAgICAg
ICAgd2lkZ2V0LnNob3coKTsKKyAgICAgICAgd2lkZ2V0LnN0YXJ0KCk7CisgICAgICAgIHdhaXRG
b3JTaWduYWwoJndpZGdldCwgU0lHTkFMKHRlc3RDb21wbGV0ZSgpKSk7CisgICAgfQorfTsKKwor
UVRFU1RfTUFJTih0c3RfaHlicmlkUGl4bWFwKQorCisjaW5jbHVkZSA8dHN0X2h5YnJpZFBpeG1h
cC5tb2M+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Jlc291cmNlcy5xcmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJj
CShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMu
cXJjCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzxSQ0M+CisgICAgPHFyZXNvdXJjZSBw
cmVmaXg9Ii8iPgorICAgICAgICA8ZmlsZT50ZXN0Lmh0bWw8L2ZpbGU+CisgICAgPC9xcmVzb3Vy
Y2U+Cis8L1JDQz4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy90ZXN0cy5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwkocmV2aXNpb24gNTMzNjQpCisrKyBXZWJLaXQv
cXQvdGVzdHMvdGVzdHMucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogCiBURU1Q
TEFURSA9IHN1YmRpcnMKLVNVQkRJUlMgPSBxd2ViZnJhbWUgcXdlYnBhZ2UgcXdlYmVsZW1lbnQg
cWdyYXBoaWNzd2VidmlldyBxd2ViaGlzdG9yeWludGVyZmFjZSBxd2VidmlldyBxd2ViaGlzdG9y
eSBxd2ViaW5zcGVjdG9yCitTVUJESVJTID0gcXdlYmZyYW1lIHF3ZWJwYWdlIHF3ZWJlbGVtZW50
IHFncmFwaGljc3dlYnZpZXcgcXdlYmhpc3RvcnlpbnRlcmZhY2UgcXdlYnZpZXcgcXdlYmhpc3Rv
cnkgcXdlYmluc3BlY3RvciBoeWJyaWRQaXhtYXAKIGdyZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJ
T04sIDQpOiBTVUJESVJTICs9IGJlbmNobWFya3MvcGFpbnRpbmcgYmVuY2htYXJrcy9sb2FkaW5n
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHJldmlzaW9uIDUzMzY0KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtMTAzNiw2ICsxMDM2LDcgQEAKICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuaCBcCiAg
ICAgYnJpZGdlL3F0L3F0X2luc3RhbmNlLmggXAogICAgIGJyaWRnZS9xdC9xdF9ydW50aW1lLmgg
XAorICAgIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmggXAogICAgIGJyaWRnZS9ydW50aW1l
X2FycmF5LmggXAogICAgIGJyaWRnZS9ydW50aW1lLmggXAogICAgIGJyaWRnZS9ydW50aW1lX21l
dGhvZC5oIFwKQEAgLTE5MzUsNiArMTkzNiw3IEBACiAgICAgYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlclF0LmNwcCBcCiAgICAgYnJpZGdlL3F0L3F0X2NsYXNzLmNwcCBcCiAgICAgYnJpZGdl
L3F0L3F0X2luc3RhbmNlLmNwcCBcCisgICAgYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3Bw
IFwKICAgICBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHAgXAogICAgIHBhZ2UvcXQvRHJhZ0NvbnRy
b2xsZXJRdC5jcHAgXAogICAgIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIFwKSW5kZXg6IFdl
YkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICov
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgorCisj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTTG9jay5oIgorI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlN0aWxs
SW1hZ2VRdC5oIgorI2luY2x1ZGUgPFFCdWZmZXI+CisjaW5jbHVkZSA8UUJ5dGVBcnJheT4KKyNp
bmNsdWRlIDxRSW1hZ2U+CisjaW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRVmFyaWFudD4K
KyNpbmNsdWRlIDxydW50aW1lX29iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWVfcm9vdC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2Ug
QmluZGluZ3MgeworCitjbGFzcyBRdFBpeG1hcENsYXNzIDogcHVibGljIENsYXNzIHsKK3B1Ymxp
YzoKKyAgICBRdFBpeG1hcENsYXNzKCk7CisgICAgdmlydHVhbCBNZXRob2RMaXN0IG1ldGhvZHNO
YW1lZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZp
ZWxkKiBmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSopIGNvbnN0OworfTsK
KworCitjbGFzcyBRdFBpeG1hcFdpZHRoRmllbGQgOiBwdWJsaWMgRmllbGQgeworcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gIndpZHRoIjsgfQorICAgIHZp
cnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElu
c3RhbmNlKiBwaXhtYXApIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhl
Yywgc3RhdGljX2Nhc3Q8Y29uc3QgUXRQaXhtYXBJbnN0YW5jZSo+KHBpeG1hcCktPndpZHRoKCkp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSos
IGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkgY29uc3Qge30KK307CitjbGFzcyBRdFBpeG1hcEhl
aWdodEZpZWxkIDogcHVibGljIEZpZWxkIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogbmFtZSgpIHsgcmV0dXJuICJoZWlnaHQiOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVl
RnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3QpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8Y29uc3Qg
UXRQaXhtYXBJbnN0YW5jZSo+KGluc3QpLT5oZWlnaHQoKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1Zh
bHVlKSBjb25zdCB7fQorfTsKKworY2xhc3MgUXRQaXhtYXBSdW50aW1lTWV0aG9kIDogcHVibGlj
IE1ldGhvZCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBpbnQgbnVtUGFyYW1ldGVycygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdmlydHVhbCBKU1ZhbHVlIGlu
dm9rZShFeGVjU3RhdGUqIGV4ZWMsIFFWYXJpYW50JiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiBy
b290KSA9IDA7CisKK307CisKK2NsYXNzIFF0UGl4bWFwQ3JlYXRlRWxlbWVudE1ldGhvZCA6IHB1
YmxpYyBRdFBpeG1hcFJ1bnRpbWVNZXRob2QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBuYW1lKCkgeyByZXR1cm4gInRvSFRNTEltYWdlRWxlbWVudCI7IH0KKyAgICBKU1ZhbHVl
IGludm9rZShFeGVjU3RhdGUqIGV4ZWMsIFFWYXJpYW50JiB2LCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3QpCisgICAgeworICAgICAgICBRUGl4bWFwIHB4bTsKKyAgICAgICAgaWYgKHYudHlw
ZSgpID09IChRVmFyaWFudDo6VHlwZSkocU1ldGFUeXBlSWQ8UUltYWdlPigpKSkgeworICAgICAg
ICAgICAgcHhtID0gUVBpeG1hcDo6ZnJvbUltYWdlKHYudmFsdWU8UUltYWdlPigpKTsKKyAgICAg
ICAgICAgIHYgPSBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KHB4bSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgcHhtID0gdi52YWx1ZTxRUGl4bWFwPigpOworCisgICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IDA7CisgICAgICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWwg
PSBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHJvb3QtPmdsb2JhbE9iamVjdCgpKTsK
KyAgICAgICAgaWYgKGdsb2JhbCkgeworICAgICAgICAgICAgRE9NV2luZG93KiBkV2luZG93ID0g
dG9ET01XaW5kb3coZ2xvYmFsKTsKKyAgICAgICAgICAgIGlmIChkV2luZG93KQorICAgICAgICAg
ICAgICAgIGRvY3VtZW50ID0gZFdpbmRvdy0+ZG9jdW1lbnQoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChkb2N1bWVudCkgeworICAgICAgICAgICAgUGFzc1JlZlB0cjxTdGlsbEltYWdlPiBp
bWcgPSBXZWJDb3JlOjpTdGlsbEltYWdlOjpjcmVhdGUocHhtKTsKKyAgICAgICAgICAgIFJlZlB0
cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IG5ldyBIVE1MSW1hZ2VFbGVtZW50KEhUTUxOYW1l
czo6aW1nVGFnLCBkb2N1bWVudCk7CisgICAgICAgICAgICBpbWFnZS0+c2V0Q2FjaGVkSW1hZ2Uo
bmV3IENhY2hlZEltYWdlKGltZy5nZXQoKSkpOworICAgICAgICAgICAgdG9KUyhleGVjLCBnbG9i
YWwsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGds
b2JhbCwgaW1hZ2UucmVsZWFzZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgfQorCit9OworCitjbGFzcyBRdFBpeG1hcFRvRGF0YVVybE1ldGhvZCA6
IHB1YmxpYyBRdFBpeG1hcFJ1bnRpbWVNZXRob2QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gInRvRGF0YVVybCI7IH0KKyAgICBKU1ZhbHVlIGludm9r
ZShFeGVjU3RhdGUqIGV4ZWMsIFFWYXJpYW50JiB2LCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3QpCisgICAgeworICAgICAgICBRSW1hZ2UgaW1hZ2U7CisgICAgICAgIC8vIGZvciBnZXR0aW5n
IHRoZSBkYXRhIHVybCwgd2UgYWx3YXlzIHByZWZlciB0aGUgaW1hZ2UuCisgICAgICAgIGlmICh2
LnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1h
cD4oKSkpIHsKKyAgICAgICAgICAgIGltYWdlID0gdi52YWx1ZTxRUGl4bWFwPigpLnRvSW1hZ2Uo
KTsKKyAgICAgICAgICAgIHYgPSBRVmFyaWFudDo6ZnJvbVZhbHVlPFFJbWFnZT4oaW1hZ2UpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGltYWdlID0gdi52YWx1ZTxRSW1hZ2U+KCk7Cisg
ICAgICAgIFFCeXRlQXJyYXkgYmE7CisgICAgICAgIFFCdWZmZXIgYigmYmEpOworICAgICAgICBp
bWFnZS5zYXZlKCZiLCAiUE5HIik7CisgICAgICAgIGNvbnN0IFFTdHJpbmcgYjY0ID0gUVN0cmlu
ZygiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIpICsgYmEudG9CYXNlNjQoKTsKKyAgICAgICAgY29u
c3QgVVN0cmluZyB1c3RyaW5nKChVQ2hhciopYjY0LnV0ZjE2KCksIGI2NC5sZW5ndGgoKSk7Cisg
ICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1c3RyaW5nKTsKKyAgICB9CisKK307CisKK3N0
cnVjdCBRdFBpeG1hcE1ldGFEYXRhIHsKKyAgICBRdFBpeG1hcFRvRGF0YVVybE1ldGhvZCB0b0Rh
dGFVcmxNZXRob2Q7CisgICAgUXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0aG9kIGNyZWF0ZUVsZW1l
bnRNZXRob2Q7CisgICAgUXRQaXhtYXBIZWlnaHRGaWVsZCBoZWlnaHRGaWVsZDsKKyAgICBRdFBp
eG1hcFdpZHRoRmllbGQgd2lkdGhGaWVsZDsKKyAgICBRdFBpeG1hcENsYXNzIGNsczsKK30gcXRf
cGl4bWFwX21ldGFEYXRhOworCisvLyBEZXJpdmVkIFJ1bnRpbWVPYmplY3QKK2NsYXNzIFF0UGl4
bWFwUnVudGltZU9iamVjdEltcCA6IHB1YmxpYyBSdW50aW1lT2JqZWN0SW1wIHsKK3B1YmxpYzoK
KyAgICBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnN0
YW5jZT4pOworCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlw
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5
cGVJbmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncykpOworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFJ1bnRpbWVPYmpl
Y3RJbXA6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFya0NoaWxkcmVuOworCitwcml2YXRl
OgorICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVy
biAmc19pbmZvOyB9Cit9OworCitRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXA6OlF0UGl4bWFwUnVu
dGltZU9iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3Rh
bmNlKQorICAgIDogUnVudGltZU9iamVjdEltcChleGVjLCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0
RE9NU3RydWN0dXJlPFF0UGl4bWFwUnVudGltZU9iamVjdEltcD4oZXhlYyksIGluc3RhbmNlKQor
eworfQorCitjb25zdCBDbGFzc0luZm8gUXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8g
PSB7ICJRdFBpeG1hcFJ1bnRpbWVPYmplY3QiLCAmUnVudGltZU9iamVjdEltcDo6c19pbmZvLCAw
LCAwIH07CisKKworUXRQaXhtYXBDbGFzczo6UXRQaXhtYXBDbGFzcygpCit7Cit9CisKKworQ2xh
c3MqIFF0UGl4bWFwSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJnF0
X3BpeG1hcF9tZXRhRGF0YS5jbHM7Cit9CisKK0pTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6aW52
b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9kcywgY29u
c3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAobWV0aG9kcy5zaXplKCkgPT0gMSkgeworICAg
ICAgICBRdFBpeG1hcFJ1bnRpbWVNZXRob2QqIG10ZCA9IHN0YXRpY19jYXN0PFF0UGl4bWFwUnVu
dGltZU1ldGhvZCo+KG1ldGhvZHNbMF0pOworICAgICAgICByZXR1cm4gbXRkLT5pbnZva2UoZXhl
YywgZGF0YSwgcm9vdE9iamVjdCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Cit9CisKK01ldGhvZExpc3QgUXRQaXhtYXBDbGFzczo6bWV0aG9kc05hbWVkKGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIEluc3RhbmNlKikgY29uc3QKK3sKKyAgICBNZXRob2RMaXN0IG1l
dGhvZHM7CisgICAgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5h
bWUoKSkKKyAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS50b0RhdGFV
cmxNZXRob2QpOworICAgIGVsc2UgaWYgKGlkZW50aWZpZXIgPT0gUXRQaXhtYXBDcmVhdGVFbGVt
ZW50TWV0aG9kOjpuYW1lKCkpCisgICAgICAgIG1ldGhvZHMuYXBwZW5kKCZxdF9waXhtYXBfbWV0
YURhdGEuY3JlYXRlRWxlbWVudE1ldGhvZCk7CisgICAgcmV0dXJuIG1ldGhvZHM7Cit9CisKK0Zp
ZWxkKiBRdFBpeG1hcENsYXNzOjpmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIsIEluc3RhbmNlKikgY29uc3QKK3sKKyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFdp
ZHRoRmllbGQ6Om5hbWUoKSkKKyAgICAgICAgcmV0dXJuICZxdF9waXhtYXBfbWV0YURhdGEud2lk
dGhGaWVsZDsKKyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcEhlaWdodEZpZWxkOjpuYW1l
KCkpCisgICAgICAgIHJldHVybiAmcXRfcGl4bWFwX21ldGFEYXRhLmhlaWdodEZpZWxkOworICAg
IHJldHVybiAwOworfQorCit2b2lkIFF0UGl4bWFwSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMo
RXhlY1N0YXRlKmV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnIpCit7CisgICAgYXJyLmFkZChJ
ZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkp
KTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcENyZWF0ZUVs
ZW1lbnRNZXRob2Q6Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0
cmluZyhRdFBpeG1hcFdpZHRoRmllbGQ6Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZp
ZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcEhlaWdodEZpZWxkOjpuYW1lKCkpKSk7Cit9CisKK0pT
VmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJl
ZmVycmVkUHJpbWl0aXZlVHlwZSBwdHlwZSkgY29uc3QKK3sKKyAgICBpZiAocHR5cGUgPT0gUHJl
ZmVyTnVtYmVyKSB7CisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZGF0YS50eXBlKCkgPT0gc3Rh
dGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkgJiYgIShkYXRh
LnZhbHVlPFFJbWFnZT4oKSkuaXNOdWxsKCkKKyAgICAgICAgICAgICAgICB8fCAoZGF0YS50eXBl
KCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkp
ICYmICFkYXRhLnZhbHVlPFFQaXhtYXA+KCkuaXNOdWxsKCkpKTsKKyAgICB9CisgICAgaWYgKHB0
eXBlID09IFByZWZlclN0cmluZykKKyAgICAgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7CisgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6dmFs
dWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgY29uc3QgUVN0cmluZyB0b1N0ciA9
IFFTdHJpbmcoIltRdCBOYXRpdmUgUGl4bWFwICUxLCUyXSIpLmFyZyh3aWR0aCgpKS5hcmcoaGVp
Z2h0KCkpOworICAgIFVTdHJpbmcgdXN0cmluZygoVUNoYXIqKXRvU3RyLnV0ZjE2KCksIHRvU3Ry
Lmxlbmd0aCgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXN0cmluZyk7Cit9CisKK1F0
UGl4bWFwSW5zdGFuY2U6OlF0UGl4bWFwSW5zdGFuY2UoUGFzc1JlZlB0cjxSb290T2JqZWN0PiBy
b290T2JqLCBjb25zdCBRVmFyaWFudCYgZCkKKyAgICAgICAgOkluc3RhbmNlKHJvb3RPYmopLCBk
YXRhKGQpCit7Cit9CitpbnQgUXRQaXhtYXBJbnN0YW5jZTo6d2lkdGgoKSBjb25zdAoreworICAg
IGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBl
SWQ8UVBpeG1hcD4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCkud2lk
dGgoKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+
KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJbWFn
ZT4oKS53aWR0aCgpOworICAgIHJldHVybiAwOworfQorCitpbnQgUXRQaXhtYXBJbnN0YW5jZTo6
aGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZh
cmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpKQorICAgICAgICByZXR1cm4gZGF0
YS52YWx1ZTxRUGl4bWFwPigpLmhlaWdodCgpOworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0
aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUltYWdlPigpKSkKKyAgICAgICAg
cmV0dXJuIGRhdGEudmFsdWU8UUltYWdlPigpLmhlaWdodCgpOworICAgIHJldHVybiAwOworfQor
CitRUGl4bWFwIFF0UGl4bWFwSW5zdGFuY2U6OnRvUGl4bWFwKCkKK3sKKyAgICBpZiAoZGF0YS50
eXBlKCkgPT0gKFFWYXJpYW50OjpUeXBlKXFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpCisgICAgICAg
IHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IChR
VmFyaWFudDo6VHlwZSlxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpIHsKKyAgICAgICAgY29uc3QgUVBp
eG1hcCBweG0gPSBRUGl4bWFwOjpmcm9tSW1hZ2UoZGF0YS52YWx1ZTxRSW1hZ2U+KCkpOworICAg
ICAgICBkYXRhID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFwPihweG0pOworICAgICAgICBy
ZXR1cm4gcHhtOworICAgIH0KKyAgICByZXR1cm4gUVBpeG1hcCgpOworCit9CisKK1FJbWFnZSBR
dFBpeG1hcEluc3RhbmNlOjp0b0ltYWdlKCkKK3sKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3Rh
dGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkpCisgICAgICAg
IHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4oKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3Rh
dGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpKSB7CisgICAg
ICAgIGNvbnN0IFFJbWFnZSBpbWcgPSBkYXRhLnZhbHVlPFFQaXhtYXA+KCkudG9JbWFnZSgpOwor
ICAgICAgICBkYXRhID0gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KGltZyk7CisgICAgICAg
IHJldHVybiBpbWc7CisgICAgfQorICAgIHJldHVybiBRSW1hZ2UoKTsKK30KKworUVZhcmlhbnQg
UXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3QoSlNPYmplY3QqIG9iamVjdCwgUU1l
dGFUeXBlOjpUeXBlIGhpbnQpCit7CisgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTSFRNTElt
YWdlRWxlbWVudDo6c19pbmZvKSkgeworICAgICAgICBKU0hUTUxJbWFnZUVsZW1lbnQqIGVsID0g
c3RhdGljX2Nhc3Q8SlNIVE1MSW1hZ2VFbGVtZW50Kj4ob2JqZWN0KTsKKyAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+
KGVsLT5pbXBsKCkpOworICAgICAgICBpZiAoaW1hZ2VFbGVtZW50KSB7CisgICAgICAgICAgICBD
YWNoZWRJbWFnZSogY0ltZyA9IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAg
ICAgIGlmIChjSW1nKSB7CisgICAgICAgICAgICAgICAgSW1hZ2UqIGltZyA9IGNJbWctPmltYWdl
KCk7CisgICAgICAgICAgICAgICAgaWYgKGltZykgeworICAgICAgICAgICAgICAgICAgICBRUGl4
bWFwKiBweG0gPSBpbWctPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChweG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaGlu
dCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRUGl4bWFwPigpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KCpweG0p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUlt
YWdlPihweG0tPnRvSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+
aW5oZXJpdHMoJlF0UGl4bWFwUnVudGltZU9iamVjdEltcDo6c19pbmZvKSkgeworICAgICAgICBR
dFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFF0UGl4bWFwUnVudGlt
ZU9iamVjdEltcCo+KG9iamVjdCk7CisgICAgICAgIFF0UGl4bWFwSW5zdGFuY2UqIGluc3QgPSBz
dGF0aWNfY2FzdDxRdFBpeG1hcEluc3RhbmNlKj4oaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkp
OworICAgICAgICBpZiAoaW5zdCkgeworICAgICAgICAgICAgaWYgKGhpbnQgPT0gcU1ldGFUeXBl
SWQ8UVBpeG1hcCA+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFs
dWU8UVBpeG1hcD4oaW5zdC0+dG9QaXhtYXAoKSk7CisgICAgICAgICAgICBpZiAoaGludCA9PSBx
TWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpm
cm9tVmFsdWU8UUltYWdlPihpbnN0LT50b0ltYWdlKCkpOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiAwOworfQorSlNPYmplY3QqIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVP
YmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIGNvbnN0
IFFWYXJpYW50JiBkYXRhKQoreworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgcmV0dXJuIG5ldyhleGVjKSBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAoZXhlYywg
bmV3IFF0UGl4bWFwSW5zdGFuY2Uocm9vdCwgZGF0YSkpOworfQorYm9vbCBRdFBpeG1hcEluc3Rh
bmNlOjpjYW5IYW5kbGUoUU1ldGFUeXBlOjpUeXBlIGhpbnQpCit7CisgICAgcmV0dXJuIGhpbnQg
PT0gcU1ldGFUeXBlSWQ8UUltYWdlPigpIHx8IGhpbnQgPT0gcU1ldGFUeXBlSWQ8UVBpeG1hcD4o
KTsKK30KKworfQorCit9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24g
NTMzNjQpCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInFvYmplY3QuaCIKICNpbmNsdWRlICJxc3Ry
aW5nbGlzdC5oIgogI2luY2x1ZGUgInF0X2luc3RhbmNlLmgiCisjaW5jbHVkZSAicXRfcGl4bWFw
cnVudGltZS5oIgogI2luY2x1ZGUgInF2YXJsZW5ndGhhcnJheS5oIgogI2luY2x1ZGUgPEpTRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTcyMCw2ICs3MjEsOCBAQAogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfSBlbHNlIGlmIChRdFBpeG1hcEluc3RhbmNlOjpjYW5IYW5kbGUoc3Rh
dGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihoaW50KSkpIHsKKyAgICAgICAgICAgICAgICByZXQg
PSBRdFBpeG1hcEluc3RhbmNlOjp2YXJpYW50RnJvbU9iamVjdChvYmplY3QsIGhpbnQpOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4o
cU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQpA
QCAtODQ5LDYgKzg1Miw5IEBACiAgICAgICAgIHJldHVybiBRdEluc3RhbmNlOjpnZXRRdEluc3Rh
bmNlKG9iaiwgcm9vdCwgUVNjcmlwdEVuZ2luZTo6UXRPd25lcnNoaXApLT5jcmVhdGVSdW50aW1l
T2JqZWN0KGV4ZWMpOwogICAgIH0KIAorICAgIGlmIChRdFBpeG1hcEluc3RhbmNlOjpjYW5IYW5k
bGUoKFFNZXRhVHlwZTo6VHlwZSl2YXJpYW50LnR5cGUoKSkpCisgICAgICAgIHJldHVybiBRdFBp
eG1hcEluc3RhbmNlOjpjcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMsIHJvb3QsIHZhcmlhbnQpOwor
CiAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRVmFyaWFudE1hcCkgewogICAgICAgICAvLyBj
cmVhdGUgYSBuZXcgb2JqZWN0LCBhbmQgc3R1ZmYgcHJvcGVydGllcyBpbnRvIGl0CiAgICAgICAg
IEpTT2JqZWN0KiByZXQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JyaWRn
ZS9xdC9xdF9waXhtYXBydW50aW1lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRl
ZiBxdF9waXhtYXBydW50aW1lX2gKKyNkZWZpbmUgcXRfcGl4bWFwcnVudGltZV9oCisKKyNpbmNs
dWRlICJydW50aW1lLmgiCisjaW5jbHVkZSA8UVZhcmlhbnQ+CisKK25hbWVzcGFjZSBKU0Mgewor
CituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFzcyBRdFBpeG1hcEluc3RhbmNlIDogcHVibGlj
IEluc3RhbmNlIHsKKyAgICBRVmFyaWFudCBkYXRhOworcHVibGljOgorICAgIFF0UGl4bWFwSW5z
dGFuY2UoUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqLCBjb25zdCBRVmFyaWFudCYgbmV3
RGF0YSk7CisgICAgdmlydHVhbCBDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25z
dCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOworCisgICAgdmlydHVhbCBKU1ZhbHVlIGRlZmF1
bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEpTVmFsdWUgdmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OworICAgIGludCB3
aWR0aCgpIGNvbnN0OworICAgIGludCBoZWlnaHQoKSBjb25zdDsKKyAgICBRUGl4bWFwIHRvUGl4
bWFwKCk7CisgICAgUUltYWdlIHRvSW1hZ2UoKTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIGNyZWF0
ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiwgY29uc3Qg
UVZhcmlhbnQmKTsKKyAgICBzdGF0aWMgUVZhcmlhbnQgdmFyaWFudEZyb21PYmplY3QoSlNPYmpl
Y3QqLCBRTWV0YVR5cGU6OlR5cGUgaGludCk7CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlKFFN
ZXRhVHlwZTo6VHlwZSBoaW50KTsKK307CisKK30KKworfQorI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46773</attachid>
            <date>2010-01-17 17:04:52 -0800</date>
            <delta_ts>2010-01-18 11:32:50 -0800</delta_ts>
            <desc>Fix a couple of more c-style casts</desc>
            <filename>patch-hybrid-pixmap-7.diff</filename>
            <type>text/plain</type>
            <size>27749</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
dWkgdmVyc2lvbj0iNC4wIj4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4KKyA8d2lkZ2V0IGNsYXNz
PSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgor
ICAgPHJlY3Q+CisgICAgPHg+MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD42MDA8L3dp
ZHRoPgorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3RyaW5nPldpZGdldDwvc3Ry
aW5nPgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0i
dmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVdlYlZpZXci
IG5hbWU9IndlYlZpZXciPgorICAgICA8cHJvcGVydHkgbmFtZT0idXJsIj4KKyAgICAgIDx1cmw+
CisgICAgICAgPHN0cmluZz5hYm91dDpibGFuazwvc3RyaW5nPgorICAgICAgPC91cmw+CisgICAg
IDwvcHJvcGVydHk+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8
bGF5b3V0IGNsYXNzPSJRSEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRhbExheW91dCI+CisgICAg
IDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwxIj4KKyAgICAg
ICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJv
cGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAg
IDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAgICAgPHByb3BlcnR5IG5h
bWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93
aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4KKyAg
ICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWln
aHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPkltYWdlIGZyb20gUXQg
dG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAg
ICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFt
ZT0ibGJsMyI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5n
PlBpeG1hcCBmcm9tIFF0IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNs
YXNzPSJRTGFiZWwiIG5hbWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4K
KyAgICAgICAgPHN0cmluZy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0Pgor
ICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBuYW1lPSJob3Jpem9udGFs
U3BhY2VyIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICA8
ZW51bT5RdDo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAgPHNpemU+CisgICAg
ICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAg
ICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3BhY2VyPgorICAgICA8
L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0PgorIDwvd2lkZ2V0
PgorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKyA8Y3VzdG9td2lk
Z2V0cz4KKyAgPGN1c3RvbXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+CisgICA8
ZXh0ZW5kcz5RV2lkZ2V0PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdlYktpdC9RV2ViVmlldzwv
aGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdldHM+CisgPHJlc291cmNl
cy8+CisgPGNvbm5lY3Rpb25zLz4KKzwvdWk+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5
YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAyCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1
ZGUoLi4vdGVzdHMucHJpKQorVEFSR0VUID0gaHlicmlkUGl4bWFwCitTT1VSQ0VTICs9IHdpZGdl
dC5jcHAKK0hFQURFUlMgKz0gd2lkZ2V0LmgKK0ZPUk1TICs9IHdpZGdldC51aQorUkVTT1VSQ0VT
ICs9IHJlc291cmNlcy5xcmMKK0NPTkZJRyArPSBjb25zb2xlCkluZGV4OiBXZWJLaXQvcXQvdGVz
dHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMv
aHlicmlkUGl4bWFwL3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAvdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACis8aHRt
bD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgaW1nIHsgZGlzcGxh
eTogYmxvY2s7IGJvcmRlci1zdHlsZTogZ3Jvb3ZlfQorICAgICAgICA8L3N0eWxlPgorICAgICAg
ICA8c2NyaXB0PgorICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CisgICAgICAgICAg
ICAgICAgdmFyIHB4bSA9IG15V2lkZ2V0LnBpeG1hcDsKKworICAgICAgICAgICAgICAgIHZhciBp
bWcgPSBvYmoudG9IVE1MSW1hZ2VFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgdmFyIGltZzEg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1nMSIpOworICAgICAgICAgICAgICAgIHZhciBp
bWcyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltZzIiKTsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltZyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChweG0udG9IVE1MSW1hZ2VFbGVtZW50KCkpOworICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uIGNvbXBsZXRlSWZEb25lKCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpbWcxLmNvbXBsZXRlICYmIGltZzIuY29tcGxldGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBsZXRlVGVzdCgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGltZzEub25sb2Fk
ID0gY29tcGxldGVJZkRvbmU7CisgICAgICAgICAgICAgICAgaW1nMi5vbmxvYWQgPSBjb21wbGV0
ZUlmRG9uZTsKKyAgICAgICAgICAgICAgICBpbWcxLnNyYyA9IG9iai50b0RhdGFVcmwoKTsKKyAg
ICAgICAgICAgICAgICBpbWcyLnNyYyA9IG15V2lkZ2V0LnBpeG1hcC50b0RhdGFVcmwoKTsKKyAg
ICAgICAgICAgICAgICBteVdpZGdldC5pbWFnZSA9IHB4bTsKKyAgICAgICAgICAgICAgICBteVdp
ZGdldC5waXhtYXAgPSBpbWc7CisgICAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0PgorICAg
IDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0VGVzdCgpIj4KKyAgICAgICAgPGltZyBp
ZD0iaW1nMSIgLz4KKyAgICAgICAgPGltZyBpZD0iaW1nMiIgLz4KKyAgICA8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3aWRnZXQuaCIKKworI2luY2x1ZGUgInF3ZWJl
bGVtZW50LmgiCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisjaW5jbHVkZSAidWlfd2lkZ2V0Lmgi
CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKworV2lkZ2V0
OjpXaWRnZXQoUVdpZGdldCogcGFyZW50KSA6CisgICAgUVdpZGdldChwYXJlbnQpLAorICAgIHVp
KG5ldyBVaTo6V2lkZ2V0KQoreworICAgIHVpLT5zZXR1cFVpKHRoaXMpOworfQorCit2b2lkIFdp
ZGdldDo6cmVmcmVzaEpTKCkKK3sKKyAgICB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUo
KS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJteVdpZGdldCIsIHRoaXMpOworfQordm9p
ZCBXaWRnZXQ6OnN0YXJ0KCkKK3sKKyAgICB1aS0+d2ViVmlldy0+bG9hZChRVXJsKCJxcmM6Ly8v
dGVzdC5odG1sIikpOworICAgIGNvbm5lY3QodWktPndlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1l
KCksIFNJR05BTChqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJlZCgpKSwgdGhpcywgU0xPVChy
ZWZyZXNoSlMoKSkpOworICAgIHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5hZGRU
b0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15V2lkZ2V0IiwgdGhpcyk7Cit9CisKK3ZvaWQgV2lk
Z2V0Ojpjb21wbGV0ZVRlc3QoKQoreworICAgIFFDT01QQVJFKHVpLT5sYmwxLT5waXhtYXAoKS0+
c2l6ZSgpLCB1aS0+bGJsMi0+c2l6ZSgpKTsKKyAgICBRQ09NUEFSRSh1aS0+bGJsMy0+c2l6ZSgp
LCB1aS0+bGJsNC0+cGl4bWFwKCktPnNpemUoKSk7CisgICAgUUNPTVBBUkUodWktPmxibDItPnNp
emUoKS53aWR0aCgpLCB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZmluZEZpcnN0
RWxlbWVudCgiI2ltZzEiKS5ldmFsdWF0ZUphdmFTY3JpcHQoInRoaXMud2lkdGgiKS50b0ludCgp
KTsKKyAgICBRQ09NUEFSRSh1aS0+bGJsMy0+c2l6ZSgpLndpZHRoKCksIHVpLT53ZWJWaWV3LT5w
YWdlKCktPm1haW5GcmFtZSgpLT5maW5kRmlyc3RFbGVtZW50KCIjaW1nMiIpLmV2YWx1YXRlSmF2
YVNjcmlwdCgidGhpcy53aWR0aCIpLnRvSW50KCkpOworICAgIGVtaXQgdGVzdENvbXBsZXRlKCk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQaXhtYXAoY29uc3QgUVBpeG1hcCYgcCkKK3sKKyAgICB1
aS0+bGJsMS0+c2V0UGl4bWFwKHApOworfQorUVBpeG1hcCBXaWRnZXQ6OnBpeG1hcCgpIGNvbnN0
Cit7CisgICAgUVBpeG1hcCBweCh1aS0+bGJsMy0+c2l6ZSgpKTsKKyAgICB7CisgICAgICAgIFFQ
YWludGVyIHAoJnB4KTsKKyAgICAgICAgdWktPmxibDMtPnJlbmRlcigmcCk7CisgICAgfQorICAg
IHJldHVybiBweDsKK30KK3ZvaWQgV2lkZ2V0OjpzZXRJbWFnZShjb25zdCBRSW1hZ2UmIGltZykK
K3sKKyAgICB1aS0+bGJsNC0+c2V0UGl4bWFwKFFQaXhtYXA6OmZyb21JbWFnZShpbWcpKTsKK30K
KworUUltYWdlIFdpZGdldDo6aW1hZ2UoKSBjb25zdAoreworICAgIFFJbWFnZSBpbWcodWktPmxi
bDItPnNpemUoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICB7CisgICAgICAgIFFQYWlu
dGVyIHAoJmltZyk7CisgICAgICAgIHVpLT5sYmwyLT5yZW5kZXIoJnApOworICAgIH0KKyAgICBy
ZXR1cm4gaW1nOworfQorCitXaWRnZXQ6On5XaWRnZXQoKQoreworICAgIGRlbGV0ZSB1aTsKK30K
Kwordm9pZCBXaWRnZXQ6OmNoYW5nZUV2ZW50KFFFdmVudCogZSkKK3sKKyAgICBRV2lkZ2V0Ojpj
aGFuZ2VFdmVudChlKTsKKyAgICBzd2l0Y2ggKGUtPnR5cGUoKSkgeworICAgIGNhc2UgUUV2ZW50
OjpMYW5ndWFnZUNoYW5nZToKKyAgICAgICAgdWktPnJldHJhbnNsYXRlVWkodGhpcyk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KSW5kZXg6
IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2lmbmRlZiB3aWRnZXRfaAorI2RlZmluZSB3aWRnZXRfaAorCisjaW5jbHVkZSA8UUltYWdl
PgorI2luY2x1ZGUgPFFQaXhtYXA+CisjaW5jbHVkZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFVp
IHsKK2NsYXNzIFdpZGdldDsKK30KKworY2xhc3MgV2lkZ2V0IDogcHVibGljIFFXaWRnZXQgewor
ICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShRUGl4bWFwIHBpeG1hcCBSRUFEIHBpeG1hcCBX
UklURSBzZXRQaXhtYXApCisgICAgUV9QUk9QRVJUWShRSW1hZ2UgaW1hZ2UgUkVBRCBpbWFnZSBX
UklURSBzZXRJbWFnZSkKKworcHVibGljOgorICAgIFdpZGdldChRV2lkZ2V0KiBwYXJlbnQgPSAw
KTsKKyAgICB+V2lkZ2V0KCk7CisgICAgdm9pZCBzZXRQaXhtYXAoY29uc3QgUVBpeG1hcCYpOwor
ICAgIFFQaXhtYXAgcGl4bWFwKCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbWFnZShjb25zdCBRSW1h
Z2UmKTsKKyAgICBRSW1hZ2UgaW1hZ2UoKSBjb25zdDsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2
b2lkIHJlZnJlc2hKUygpOworCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBjb21wbGV0ZVRlc3Qo
KTsKKyAgICB2b2lkIHN0YXJ0KCk7CisKK3NpZ25hbHM6CisgICAgdm9pZCB0ZXN0Q29tcGxldGUo
KTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgY2hhbmdlRXZlbnQoUUV2ZW50KiBlKTsKKworcHJp
dmF0ZToKKyAgICBVaTo6V2lkZ2V0KiB1aTsKK307CisKKyNlbmRpZiAvLyB3aWRnZXRfaApJbmRl
eDogV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90c3RfaHlicmlkUGl4bWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3RzdF9oeWJyaWRQaXhtYXAu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90c3RfaHli
cmlkUGl4bWFwLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiLi4vdXRp
bC5oIgorCisjaW5jbHVkZSAid2lkZ2V0LmgiCisjaW5jbHVkZSA8UXRUZXN0L1F0VGVzdD4KKwor
Y2xhc3MgdHN0X2h5YnJpZFBpeG1hcCA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAor
CitwdWJsaWM6CisgICAgdHN0X2h5YnJpZFBpeG1hcChRT2JqZWN0KiBvID0gMCkgOiBRT2JqZWN0
KG8pIHt9CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGluaXQoKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGNsZWFudXAoKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGUgc2xvdHM6CisgICAg
dm9pZCBoeWJyaWRQaXhtYXAoKQorICAgIHsKKyAgICAgICAgV2lkZ2V0IHdpZGdldDsKKyAgICAg
ICAgd2lkZ2V0LnNob3coKTsKKyAgICAgICAgd2lkZ2V0LnN0YXJ0KCk7CisgICAgICAgIHdhaXRG
b3JTaWduYWwoJndpZGdldCwgU0lHTkFMKHRlc3RDb21wbGV0ZSgpKSk7CisgICAgfQorfTsKKwor
UVRFU1RfTUFJTih0c3RfaHlicmlkUGl4bWFwKQorCisjaW5jbHVkZSA8dHN0X2h5YnJpZFBpeG1h
cC5tb2M+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Jlc291cmNlcy5xcmMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJj
CShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMu
cXJjCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzxSQ0M+CisgICAgPHFyZXNvdXJjZSBw
cmVmaXg9Ii8iPgorICAgICAgICA8ZmlsZT50ZXN0Lmh0bWw8L2ZpbGU+CisgICAgPC9xcmVzb3Vy
Y2U+Cis8L1JDQz4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy90ZXN0cy5wcm8KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwkocmV2aXNpb24gNTMzNjQpCisrKyBXZWJLaXQv
cXQvdGVzdHMvdGVzdHMucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogCiBURU1Q
TEFURSA9IHN1YmRpcnMKLVNVQkRJUlMgPSBxd2ViZnJhbWUgcXdlYnBhZ2UgcXdlYmVsZW1lbnQg
cWdyYXBoaWNzd2VidmlldyBxd2ViaGlzdG9yeWludGVyZmFjZSBxd2VidmlldyBxd2ViaGlzdG9y
eSBxd2ViaW5zcGVjdG9yCitTVUJESVJTID0gcXdlYmZyYW1lIHF3ZWJwYWdlIHF3ZWJlbGVtZW50
IHFncmFwaGljc3dlYnZpZXcgcXdlYmhpc3RvcnlpbnRlcmZhY2UgcXdlYnZpZXcgcXdlYmhpc3Rv
cnkgcXdlYmluc3BlY3RvciBoeWJyaWRQaXhtYXAKIGdyZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJ
T04sIDQpOiBTVUJESVJTICs9IGJlbmNobWFya3MvcGFpbnRpbmcgYmVuY2htYXJrcy9sb2FkaW5n
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHJldmlzaW9uIDUzMzY0KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtMTAzNiw2ICsxMDM2LDcgQEAKICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuaCBcCiAg
ICAgYnJpZGdlL3F0L3F0X2luc3RhbmNlLmggXAogICAgIGJyaWRnZS9xdC9xdF9ydW50aW1lLmgg
XAorICAgIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmggXAogICAgIGJyaWRnZS9ydW50aW1l
X2FycmF5LmggXAogICAgIGJyaWRnZS9ydW50aW1lLmggXAogICAgIGJyaWRnZS9ydW50aW1lX21l
dGhvZC5oIFwKQEAgLTE5MzUsNiArMTkzNiw3IEBACiAgICAgYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlclF0LmNwcCBcCiAgICAgYnJpZGdlL3F0L3F0X2NsYXNzLmNwcCBcCiAgICAgYnJpZGdl
L3F0L3F0X2luc3RhbmNlLmNwcCBcCisgICAgYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3Bw
IFwKICAgICBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHAgXAogICAgIHBhZ2UvcXQvRHJhZ0NvbnRy
b2xsZXJRdC5jcHAgXAogICAgIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwIFwKSW5kZXg6IFdl
YkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICov
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgorCisj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRl
ICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTTG9jay5oIgorI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIlN0aWxs
SW1hZ2VRdC5oIgorI2luY2x1ZGUgPFFCdWZmZXI+CisjaW5jbHVkZSA8UUJ5dGVBcnJheT4KKyNp
bmNsdWRlIDxRSW1hZ2U+CisjaW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRVmFyaWFudD4K
KyNpbmNsdWRlIDxydW50aW1lX29iamVjdC5oPgorI2luY2x1ZGUgPHJ1bnRpbWVfcm9vdC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2Ug
QmluZGluZ3MgeworCitjbGFzcyBRdFBpeG1hcENsYXNzIDogcHVibGljIENsYXNzIHsKK3B1Ymxp
YzoKKyAgICBRdFBpeG1hcENsYXNzKCk7CisgICAgdmlydHVhbCBNZXRob2RMaXN0IG1ldGhvZHNO
YW1lZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UqKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZp
ZWxkKiBmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSopIGNvbnN0OworfTsK
KworCitjbGFzcyBRdFBpeG1hcFdpZHRoRmllbGQgOiBwdWJsaWMgRmllbGQgeworcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gIndpZHRoIjsgfQorICAgIHZp
cnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElu
c3RhbmNlKiBwaXhtYXApIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhl
Yywgc3RhdGljX2Nhc3Q8Y29uc3QgUXRQaXhtYXBJbnN0YW5jZSo+KHBpeG1hcCktPndpZHRoKCkp
OworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSos
IGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkgY29uc3Qge30KK307CitjbGFzcyBRdFBpeG1hcEhl
aWdodEZpZWxkIDogcHVibGljIEZpZWxkIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogbmFtZSgpIHsgcmV0dXJuICJoZWlnaHQiOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVl
RnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3QpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8Y29uc3Qg
UXRQaXhtYXBJbnN0YW5jZSo+KGluc3QpLT5oZWlnaHQoKSk7CisgICAgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1Zh
bHVlKSBjb25zdCB7fQorfTsKKworY2xhc3MgUXRQaXhtYXBSdW50aW1lTWV0aG9kIDogcHVibGlj
IE1ldGhvZCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBpbnQgbnVtUGFyYW1ldGVycygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdmlydHVhbCBKU1ZhbHVlIGlu
dm9rZShFeGVjU3RhdGUqIGV4ZWMsIFFWYXJpYW50JiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiBy
b290KSA9IDA7CisKK307CisKK2NsYXNzIFF0UGl4bWFwQ3JlYXRlRWxlbWVudE1ldGhvZCA6IHB1
YmxpYyBRdFBpeG1hcFJ1bnRpbWVNZXRob2QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBuYW1lKCkgeyByZXR1cm4gInRvSFRNTEltYWdlRWxlbWVudCI7IH0KKyAgICBKU1ZhbHVl
IGludm9rZShFeGVjU3RhdGUqIGV4ZWMsIFFWYXJpYW50JiB2LCBQYXNzUmVmUHRyPFJvb3RPYmpl
Y3Q+IHJvb3QpCisgICAgeworICAgICAgICBRUGl4bWFwIHB4bTsKKyAgICAgICAgaWYgKHYudHlw
ZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlKShxTWV0YVR5cGVJZDxRSW1hZ2U+KCkp
KSB7CisgICAgICAgICAgICBweG0gPSBRUGl4bWFwOjpmcm9tSW1hZ2Uodi52YWx1ZTxRSW1hZ2U+
KCkpOworICAgICAgICAgICAgdiA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4ocHhtKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBweG0gPSB2LnZhbHVlPFFQaXhtYXA+KCk7CisK
KyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gMDsKKyAgICAgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4ocm9vdC0+Z2xvYmFs
T2JqZWN0KCkpOworICAgICAgICBpZiAoZ2xvYmFsKSB7CisgICAgICAgICAgICBET01XaW5kb3cq
IGRXaW5kb3cgPSB0b0RPTVdpbmRvdyhnbG9iYWwpOworICAgICAgICAgICAgaWYgKGRXaW5kb3cp
CisgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBkV2luZG93LT5kb2N1bWVudCgpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGRvY3VtZW50KSB7CisgICAgICAgICAgICBQYXNzUmVmUHRyPFN0
aWxsSW1hZ2U+IGltZyA9IFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZShweG0pOworICAgICAg
ICAgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1l
bnQoSFRNTE5hbWVzOjppbWdUYWcsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGltYWdlLT5zZXRD
YWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2UoaW1nLmdldCgpKSk7CisgICAgICAgICAgICB0b0pT
KGV4ZWMsIGdsb2JhbCwgZG9jdW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIGFzT2JqZWN0KHRv
SlMoZXhlYywgZ2xvYmFsLCBpbWFnZS5yZWxlYXNlKCkpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKK307CisKK2NsYXNzIFF0UGl4bWFwVG9EYXRh
VXJsTWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAidG9EYXRhVXJsIjsgfQorICAgIEpT
VmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQmIHYsIFBhc3NSZWZQdHI8Um9v
dE9iamVjdD4gcm9vdCkKKyAgICB7CisgICAgICAgIFFJbWFnZSBpbWFnZTsKKyAgICAgICAgLy8g
Zm9yIGdldHRpbmcgdGhlIGRhdGEgdXJsLCB3ZSBhbHdheXMgcHJlZmVyIHRoZSBpbWFnZS4KKyAg
ICAgICAgaWYgKHYudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5
cGVJZDxRUGl4bWFwPigpKSkgeworICAgICAgICAgICAgaW1hZ2UgPSB2LnZhbHVlPFFQaXhtYXA+
KCkudG9JbWFnZSgpOworICAgICAgICAgICAgdiA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdl
PihpbWFnZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW1hZ2UgPSB2LnZhbHVlPFFJ
bWFnZT4oKTsKKyAgICAgICAgUUJ5dGVBcnJheSBiYTsKKyAgICAgICAgUUJ1ZmZlciBiKCZiYSk7
CisgICAgICAgIGltYWdlLnNhdmUoJmIsICJQTkciKTsKKyAgICAgICAgY29uc3QgUVN0cmluZyBi
NjQgPSBRU3RyaW5nKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsIikgKyBiYS50b0Jhc2U2NCgpOwor
ICAgICAgICBjb25zdCBVU3RyaW5nIHVzdHJpbmcoKFVDaGFyKiliNjQudXRmMTYoKSwgYjY0Lmxl
bmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVzdHJpbmcpOworICAgIH0K
KworfTsKKworc3RydWN0IFF0UGl4bWFwTWV0YURhdGEgeworICAgIFF0UGl4bWFwVG9EYXRhVXJs
TWV0aG9kIHRvRGF0YVVybE1ldGhvZDsKKyAgICBRdFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRob2Qg
Y3JlYXRlRWxlbWVudE1ldGhvZDsKKyAgICBRdFBpeG1hcEhlaWdodEZpZWxkIGhlaWdodEZpZWxk
OworICAgIFF0UGl4bWFwV2lkdGhGaWVsZCB3aWR0aEZpZWxkOworICAgIFF0UGl4bWFwQ2xhc3Mg
Y2xzOworfSBxdF9waXhtYXBfbWV0YURhdGE7CisKKy8vIERlcml2ZWQgUnVudGltZU9iamVjdAor
Y2xhc3MgUXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wIDogcHVibGljIFJ1bnRpbWVPYmplY3RJbXAg
eworcHVibGljOgorICAgIFF0UGl4bWFwUnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqLCBQYXNz
UmVmUHRyPEluc3RhbmNlPik7CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsK
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHBy
b3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
UnVudGltZU9iamVjdEltcDo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNNYXJrQ2hpbGRyZW47
CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZzX2luZm87IH0KK307CisKK1F0UGl4bWFwUnVudGltZU9iamVjdEltcDo6
UXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxJbnN0
YW5jZT4gaW5zdGFuY2UpCisgICAgOiBSdW50aW1lT2JqZWN0SW1wKGV4ZWMsIFdlYkNvcmU6OmRl
cHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmU8UXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wPihleGVjKSwg
aW5zdGFuY2UpCit7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJ
bXA6OnNfaW5mbyA9IHsgIlF0UGl4bWFwUnVudGltZU9iamVjdCIsICZSdW50aW1lT2JqZWN0SW1w
OjpzX2luZm8sIDAsIDAgfTsKKworCitRdFBpeG1hcENsYXNzOjpRdFBpeG1hcENsYXNzKCkKK3sK
K30KKworCitDbGFzcyogUXRQaXhtYXBJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAoreworICAg
IHJldHVybiAmcXRfcGl4bWFwX21ldGFEYXRhLmNsczsKK30KKworSlNWYWx1ZSBRdFBpeG1hcElu
c3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBt
ZXRob2RzLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChtZXRob2RzLnNpemUoKSA9
PSAxKSB7CisgICAgICAgIFF0UGl4bWFwUnVudGltZU1ldGhvZCogbXRkID0gc3RhdGljX2Nhc3Q8
UXRQaXhtYXBSdW50aW1lTWV0aG9kKj4obWV0aG9kc1swXSk7CisgICAgICAgIHJldHVybiBtdGQt
Pmludm9rZShleGVjLCBkYXRhLCByb290T2JqZWN0KCkpOworICAgIH0KKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworTWV0aG9kTGlzdCBRdFBpeG1hcENsYXNzOjptZXRob2RzTmFtZWQo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSW5zdGFuY2UqKSBjb25zdAoreworICAgIE1l
dGhvZExpc3QgbWV0aG9kczsKKyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFRvRGF0YVVy
bE1ldGhvZDo6bmFtZSgpKQorICAgICAgICBtZXRob2RzLmFwcGVuZCgmcXRfcGl4bWFwX21ldGFE
YXRhLnRvRGF0YVVybE1ldGhvZCk7CisgICAgZWxzZSBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1h
cENyZWF0ZUVsZW1lbnRNZXRob2Q6Om5hbWUoKSkKKyAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0
X3BpeG1hcF9tZXRhRGF0YS5jcmVhdGVFbGVtZW50TWV0aG9kKTsKKyAgICByZXR1cm4gbWV0aG9k
czsKK30KKworRmllbGQqIFF0UGl4bWFwQ2xhc3M6OmZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllciwgSW5zdGFuY2UqKSBjb25zdAoreworICAgIGlmIChpZGVudGlmaWVyID09
IFF0UGl4bWFwV2lkdGhGaWVsZDo6bmFtZSgpKQorICAgICAgICByZXR1cm4gJnF0X3BpeG1hcF9t
ZXRhRGF0YS53aWR0aEZpZWxkOworICAgIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFwSGVpZ2h0
RmllbGQ6Om5hbWUoKSkKKyAgICAgICAgcmV0dXJuICZxdF9waXhtYXBfbWV0YURhdGEuaGVpZ2h0
RmllbGQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUXRQaXhtYXBJbnN0YW5jZTo6Z2V0UHJv
cGVydHlOYW1lcyhFeGVjU3RhdGUqZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFycikKK3sKKyAg
ICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvRGF0YVVybE1ldGhv
ZDo6bmFtZSgpKSkpOworICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4
bWFwQ3JlYXRlRWxlbWVudE1ldGhvZDo6bmFtZSgpKSkpOworICAgIGFyci5hZGQoSWRlbnRpZmll
cihleGVjLCBVU3RyaW5nKFF0UGl4bWFwV2lkdGhGaWVsZDo6bmFtZSgpKSkpOworICAgIGFyci5h
ZGQoSWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4bWFwSGVpZ2h0RmllbGQ6Om5hbWUoKSkp
KTsKK30KKworSlNWYWx1ZSBRdFBpeG1hcEluc3RhbmNlOjpkZWZhdWx0VmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIHB0eXBlKSBjb25zdAoreworICAgIGlmIChw
dHlwZSA9PSBQcmVmZXJOdW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihkYXRhLnR5
cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUltYWdlPigp
KSAmJiAhKGRhdGEudmFsdWU8UUltYWdlPigpKS5pc051bGwoKQorICAgICAgICAgICAgICAgIHx8
IChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8
UVBpeG1hcD4oKSkgJiYgIWRhdGEudmFsdWU8UVBpeG1hcD4oKS5pc051bGwoKSkpOworICAgIH0K
KyAgICBpZiAocHR5cGUgPT0gUHJlZmVyU3RyaW5nKQorICAgICAgICByZXR1cm4gdmFsdWVPZihl
eGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBRdFBpeG1hcElu
c3RhbmNlOjp2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBjb25zdCBRU3Ry
aW5nIHRvU3RyID0gUVN0cmluZygiW1F0IE5hdGl2ZSBQaXhtYXAgJTEsJTJdIikuYXJnKHdpZHRo
KCkpLmFyZyhoZWlnaHQoKSk7CisgICAgVVN0cmluZyB1c3RyaW5nKChVQ2hhciopdG9TdHIudXRm
MTYoKSwgdG9TdHIubGVuZ3RoKCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1c3RyaW5n
KTsKK30KKworUXRQaXhtYXBJbnN0YW5jZTo6UXRQaXhtYXBJbnN0YW5jZShQYXNzUmVmUHRyPFJv
b3RPYmplY3Q+IHJvb3RPYmosIGNvbnN0IFFWYXJpYW50JiBkKQorICAgICAgICA6SW5zdGFuY2Uo
cm9vdE9iaiksIGRhdGEoZCkKK3sKK30KK2ludCBRdFBpeG1hcEluc3RhbmNlOjp3aWR0aCgpIGNv
bnN0Cit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBl
PihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU8UVBp
eG1hcD4oKS53aWR0aCgpOworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFy
aWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUltYWdlPigpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEu
dmFsdWU8UUltYWdlPigpLndpZHRoKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBRdFBpeG1h
cEluc3RhbmNlOjpoZWlnaHQoKSBjb25zdAoreworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0
aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpCisgICAgICAg
IHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCkuaGVpZ2h0KCk7CisgICAgaWYgKGRhdGEudHlw
ZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkp
KQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRSW1hZ2U+KCkuaGVpZ2h0KCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK1FQaXhtYXAgUXRQaXhtYXBJbnN0YW5jZTo6dG9QaXhtYXAoKQoreworICAg
IGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBl
SWQ8UVBpeG1hcD4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCk7Cisg
ICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5
cGVJZDxRSW1hZ2U+KCkpIHsKKyAgICAgICAgY29uc3QgUVBpeG1hcCBweG0gPSBRUGl4bWFwOjpm
cm9tSW1hZ2UoZGF0YS52YWx1ZTxRSW1hZ2U+KCkpOworICAgICAgICBkYXRhID0gUVZhcmlhbnQ6
OmZyb21WYWx1ZTxRUGl4bWFwPihweG0pOworICAgICAgICByZXR1cm4gcHhtOworICAgIH0KKyAg
ICByZXR1cm4gUVBpeG1hcCgpOworCit9CisKK1FJbWFnZSBRdFBpeG1hcEluc3RhbmNlOjp0b0lt
YWdlKCkKK3sKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5
cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJ
bWFnZT4oKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5
cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpKSB7CisgICAgICAgIGNvbnN0IFFJbWFnZSBpbWcg
PSBkYXRhLnZhbHVlPFFQaXhtYXA+KCkudG9JbWFnZSgpOworICAgICAgICBkYXRhID0gUVZhcmlh
bnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KGltZyk7CisgICAgICAgIHJldHVybiBpbWc7CisgICAgfQor
ICAgIHJldHVybiBRSW1hZ2UoKTsKK30KKworUVZhcmlhbnQgUXRQaXhtYXBJbnN0YW5jZTo6dmFy
aWFudEZyb21PYmplY3QoSlNPYmplY3QqIG9iamVjdCwgUU1ldGFUeXBlOjpUeXBlIGhpbnQpCit7
CisgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkg
eworICAgICAgICBKU0hUTUxJbWFnZUVsZW1lbnQqIGVsID0gc3RhdGljX2Nhc3Q8SlNIVE1MSW1h
Z2VFbGVtZW50Kj4ob2JqZWN0KTsKKyAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGVsLT5pbXBsKCkpOworICAgICAg
ICBpZiAoaW1hZ2VFbGVtZW50KSB7CisgICAgICAgICAgICBDYWNoZWRJbWFnZSogY0ltZyA9IGlt
YWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAgICAgIGlmIChjSW1nKSB7CisgICAg
ICAgICAgICAgICAgSW1hZ2UqIGltZyA9IGNJbWctPmltYWdlKCk7CisgICAgICAgICAgICAgICAg
aWYgKGltZykgeworICAgICAgICAgICAgICAgICAgICBRUGl4bWFwKiBweG0gPSBpbWctPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChweG0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaGludCA9PSBzdGF0aWNfY2FzdDxRTWV0
YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KCpweG0pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihweG0t
PnRvSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMo
JlF0UGl4bWFwUnVudGltZU9iamVjdEltcDo6c19pbmZvKSkgeworICAgICAgICBRdFBpeG1hcFJ1
bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFF0UGl4bWFwUnVudGltZU9iamVjdElt
cCo+KG9iamVjdCk7CisgICAgICAgIFF0UGl4bWFwSW5zdGFuY2UqIGluc3QgPSBzdGF0aWNfY2Fz
dDxRdFBpeG1hcEluc3RhbmNlKj4oaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOworICAgICAg
ICBpZiAoaW5zdCkgeworICAgICAgICAgICAgaWYgKGhpbnQgPT0gcU1ldGFUeXBlSWQ8UVBpeG1h
cCA+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1h
cD4oaW5zdC0+dG9QaXhtYXAoKSk7CisgICAgICAgICAgICBpZiAoaGludCA9PSBxTWV0YVR5cGVJ
ZDxRSW1hZ2U+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFsdWU8
UUltYWdlPihpbnN0LT50b0ltYWdlKCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAw
OworfQorSlNPYmplY3QqIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIGNvbnN0IFFWYXJpYW50
JiBkYXRhKQoreworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
cmV0dXJuIG5ldyhleGVjKSBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAoZXhlYywgbmV3IFF0UGl4
bWFwSW5zdGFuY2Uocm9vdCwgZGF0YSkpOworfQorYm9vbCBRdFBpeG1hcEluc3RhbmNlOjpjYW5I
YW5kbGUoUU1ldGFUeXBlOjpUeXBlIGhpbnQpCit7CisgICAgcmV0dXJuIGhpbnQgPT0gcU1ldGFU
eXBlSWQ8UUltYWdlPigpIHx8IGhpbnQgPT0gcU1ldGFUeXBlSWQ8UVBpeG1hcD4oKTsKK30KKwor
fQorCit9CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gNTMzNjQpCisr
KyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
NiArNDMsNyBAQAogI2luY2x1ZGUgInFvYmplY3QuaCIKICNpbmNsdWRlICJxc3RyaW5nbGlzdC5o
IgogI2luY2x1ZGUgInF0X2luc3RhbmNlLmgiCisjaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5o
IgogI2luY2x1ZGUgInF2YXJsZW5ndGhhcnJheS5oIgogI2luY2x1ZGUgPEpTRnVuY3Rpb24uaD4K
ICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTcyMCw2ICs3MjEsOCBAQAogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChRdFBpeG1hcEluc3RhbmNlOjpjYW5IYW5kbGUoc3RhdGljX2Nhc3Q8
UU1ldGFUeXBlOjpUeXBlPihoaW50KSkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBRdFBpeG1h
cEluc3RhbmNlOjp2YXJpYW50RnJvbU9iamVjdChvYmplY3QsIGhpbnQpOwogICAgICAgICAgICAg
fSBlbHNlIGlmIChoaW50ID09IHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4ocU1ldGFUeXBl
SWQ8UVZhcmlhbnQ+KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQpAQCAtODQ5LDYg
Kzg1Miw5IEBACiAgICAgICAgIHJldHVybiBRdEluc3RhbmNlOjpnZXRRdEluc3RhbmNlKG9iaiwg
cm9vdCwgUVNjcmlwdEVuZ2luZTo6UXRPd25lcnNoaXApLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4
ZWMpOwogICAgIH0KIAorICAgIGlmIChRdFBpeG1hcEluc3RhbmNlOjpjYW5IYW5kbGUoc3RhdGlj
X2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPih2YXJpYW50LnR5cGUoKSkpKQorICAgICAgICByZXR1cm4g
UXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChleGVjLCByb290LCB2YXJpYW50
KTsKKwogICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6UVZhcmlhbnRNYXApIHsKICAgICAgICAg
Ly8gY3JlYXRlIGEgbmV3IG9iamVjdCwgYW5kIHN0dWZmIHByb3BlcnRpZXMgaW50byBpdAogICAg
ICAgICBKU09iamVjdCogcmV0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CkluZGV4OiBX
ZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNp
Zm5kZWYgcXRfcGl4bWFwcnVudGltZV9oCisjZGVmaW5lIHF0X3BpeG1hcHJ1bnRpbWVfaAorCisj
aW5jbHVkZSAicnVudGltZS5oIgorI2luY2x1ZGUgPFFWYXJpYW50PgorCituYW1lc3BhY2UgSlND
IHsKKworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKworY2xhc3MgUXRQaXhtYXBJbnN0YW5jZSA6IHB1
YmxpYyBJbnN0YW5jZSB7CisgICAgUVZhcmlhbnQgZGF0YTsKK3B1YmxpYzoKKyAgICBRdFBpeG1h
cEluc3RhbmNlKFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iaiwgY29uc3QgUVZhcmlhbnQm
IG5ld0RhdGEpOworICAgIHZpcnR1YWwgQ2xhc3MqIGdldENsYXNzKCkgY29uc3Q7CisgICAgdmly
dHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0Jiwg
Y29uc3QgQXJnTGlzdCYgYXJncyk7CisgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMo
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKKworICAgIHZpcnR1YWwgSlNWYWx1ZSBk
ZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdDsKKyAgICBp
bnQgd2lkdGgoKSBjb25zdDsKKyAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgUVBpeG1hcCB0
b1BpeG1hcCgpOworICAgIFFJbWFnZSB0b0ltYWdlKCk7CisgICAgc3RhdGljIEpTT2JqZWN0KiBj
cmVhdGVSdW50aW1lT2JqZWN0KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4sIGNv
bnN0IFFWYXJpYW50Jik7CisgICAgc3RhdGljIFFWYXJpYW50IHZhcmlhbnRGcm9tT2JqZWN0KEpT
T2JqZWN0KiwgUU1ldGFUeXBlOjpUeXBlIGhpbnQpOworICAgIHN0YXRpYyBib29sIGNhbkhhbmRs
ZShRTWV0YVR5cGU6OlR5cGUgaGludCk7Cit9OworCit9CisKK30KKyNlbmRpZgo=
</data>
<flag name="review"
          id="29099"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46835</attachid>
            <date>2010-01-18 11:32:50 -0800</date>
            <delta_ts>2010-01-18 14:09:07 -0800</delta_ts>
            <desc>Increased test coverage to Kent&apos;s request - fixed a compilation issue that slipped through...</desc>
            <filename>patch-hybrid-pixmap-8.diff</filename>
            <type>text/plain</type>
            <size>30637</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQor
KysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8
dWkgdmVyc2lvbj0iNC4wIj4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4KKyA8d2lkZ2V0IGNsYXNz
PSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgor
ICAgPHJlY3Q+CisgICAgPHg+MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD42MDA8L3dp
ZHRoPgorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3RyaW5nPldpZGdldDwvc3Ry
aW5nPgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0i
dmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVdlYlZpZXci
IG5hbWU9IndlYlZpZXciPgorICAgICA8cHJvcGVydHkgbmFtZT0idXJsIj4KKyAgICAgIDx1cmw+
CisgICAgICAgPHN0cmluZz5hYm91dDpibGFuazwvc3RyaW5nPgorICAgICAgPC91cmw+CisgICAg
IDwvcHJvcGVydHk+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8
bGF5b3V0IGNsYXNzPSJRSEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRhbExheW91dCI+CisgICAg
IDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwxIj4KKyAgICAg
ICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJv
cGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAg
IDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAgICAgPHByb3BlcnR5IG5h
bWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93
aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAg
ICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4KKyAg
ICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWln
aHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPkltYWdlIGZyb20gUXQg
dG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAg
ICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFt
ZT0ibGJsMyI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5n
PlBpeG1hcCBmcm9tIFF0IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAg
ICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNs
YXNzPSJRTGFiZWwiIG5hbWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4K
KyAgICAgICAgPHN0cmluZy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0Pgor
ICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBuYW1lPSJob3Jpem9udGFs
U3BhY2VyIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICA8
ZW51bT5RdDo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAgPHNpemU+CisgICAg
ICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAg
ICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3BhY2VyPgorICAgICA8
L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0PgorIDwvd2lkZ2V0
PgorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKyA8Y3VzdG9td2lk
Z2V0cz4KKyAgPGN1c3RvbXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+CisgICA8
ZXh0ZW5kcz5RV2lkZ2V0PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdlYktpdC9RV2ViVmlldzwv
aGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdldHM+CisgPHJlc291cmNl
cy8+CisgPGNvbm5lY3Rpb25zLz4KKzwvdWk+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5
YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEwIEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAyCisj
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luY2x1
ZGUoLi4vdGVzdHMucHJpKQorVEFSR0VUID0gaHlicmlkUGl4bWFwCitTT1VSQ0VTICs9IHdpZGdl
dC5jcHAKK0hFQURFUlMgKz0gd2lkZ2V0LmgKK0ZPUk1TICs9IHdpZGdldC51aQorUkVTT1VSQ0VT
ICs9IHJlc291cmNlcy5xcmMKK0NPTkZJRyArPSBjb25zb2xlCkluZGV4OiBXZWJLaXQvcXQvdGVz
dHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMv
aHlicmlkUGl4bWFwL3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9o
eWJyaWRQaXhtYXAvdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACis8aHRt
bD4KKyAgICA8aGVhZD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgaW1nIHsgZGlzcGxh
eTogYmxvY2s7IGJvcmRlci1zdHlsZTogZ3Jvb3ZlfQorICAgICAgICA8L3N0eWxlPgorICAgICAg
ICA8c2NyaXB0PgorICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CisgICAgICAgICAg
ICAgICAgdmFyIHB4bSA9IG15V2lkZ2V0LnBpeG1hcDsKKworICAgICAgICAgICAgICAgIHZhciBp
bWcgPSBvYmoudG9IVE1MSW1hZ2VFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgdmFyIGltZzEg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1nMSIpOworICAgICAgICAgICAgICAgIHZhciBp
bWcyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltZzIiKTsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltZyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChweG0udG9IVE1MSW1hZ2VFbGVtZW50KCkpOworICAgICAgICAgICAg
ICAgIHZhciBzaWduYWxzRmlyZWQgPSAwOworICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBh
cmUob2JqLnRvU3RyaW5nKCksIltRdCBOYXRpdmUgUGl4bWFwICIrb2JqLndpZHRoKyIsIitvYmou
aGVpZ2h0KyJdIik7CisgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShTdHJpbmcocHht
KSwiW1F0IE5hdGl2ZSBQaXhtYXAgIitweG0ud2lkdGgrIiwiK3B4bS5oZWlnaHQrIl0iKTsKKwor
ICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hvdWxkbid0IHdvcmsgYnV0IHNob3VsZG4ndCBjcmFz
aAorICAgICAgICAgICAgICAgIG15V2lkZ2V0LnJhbmRvbVNsb3QoImZvb2JhciIpOworCisgICAg
ICAgICAgICAgICAgbXlXaWRnZXQucGl4bWFwU2lnbmFsLmNvbm5lY3QoZnVuY3Rpb24oaW1nRnJv
bVNpZ25hbCkgeworICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGltZ0Zyb21T
aWduYWwuaGVpZ2h0LCBpbWcyLmhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK3Np
Z25hbHNGaXJlZCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGxl
dGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBteVdpZGdl
dC5pbWFnZVNpZ25hbC5jb25uZWN0KGZ1bmN0aW9uKGltZ0Zyb21TaWduYWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShweG0uaGVpZ2h0LCBpbWcyLmhlaWdodCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgrK3NpZ25hbHNGaXJlZCA9PSAyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbXlXaWRnZXQuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRlc3RBZnRlckltYWdlc0FyZUxv
YWRlZCgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW1nMS5j
b21wbGV0ZSAmJiBpbWcyLmNvbXBsZXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBteVdp
ZGdldC5jb21wYXJlKHB4bS5oZWlnaHQsIGltZzIuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG15V2lkZ2V0LnBpeG1hcFNsb3QoaW1nKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG15V2lkZ2V0LmltYWdlU2xvdChweG0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGltZzEub25sb2FkID0gY29udGludWVUZXN0QWZ0
ZXJJbWFnZXNBcmVMb2FkZWQ7CisgICAgICAgICAgICAgICAgaW1nMi5vbmxvYWQgPSBjb250aW51
ZVRlc3RBZnRlckltYWdlc0FyZUxvYWRlZDsKKyAgICAgICAgICAgICAgICBpbWcxLnNyYyA9IG9i
ai50b0RhdGFVcmwoKTsKKyAgICAgICAgICAgICAgICBpbWcyLnNyYyA9IG15V2lkZ2V0LnBpeG1h
cC50b0RhdGFVcmwoKTsKKyAgICAgICAgICAgICAgICBteVdpZGdldC5pbWFnZSA9IHB4bTsKKyAg
ICAgICAgICAgICAgICBteVdpZGdldC5waXhtYXAgPSBpbWc7CisgICAgICAgICAgICB9CisgICAg
ICAgIDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0VGVzdCgp
Ij4KKyAgICAgICAgPGltZyBpZD0iaW1nMSIgLz4KKyAgICAgICAgPGltZyBpZD0iaW1nMiIgLz4K
KyAgICA8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFw
L3dpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93
aWRnZXQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93
aWRnZXQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAid2lkZ2V0Lmgi
CisKKyNpbmNsdWRlICJxd2ViZWxlbWVudC5oIgorI2luY2x1ZGUgInF3ZWJmcmFtZS5oIgorI2lu
Y2x1ZGUgInVpX3dpZGdldC5oIgorI2luY2x1ZGUgPFFQYWludGVyPgorI2luY2x1ZGUgPFF0VGVz
dC9RdFRlc3Q+CisKK1dpZGdldDo6V2lkZ2V0KFFXaWRnZXQqIHBhcmVudCkgOgorICAgIFFXaWRn
ZXQocGFyZW50KSwKKyAgICB1aShuZXcgVWk6OldpZGdldCkKK3sKKyAgICB1aS0+c2V0dXBVaSh0
aGlzKTsKK30KKwordm9pZCBXaWRnZXQ6OnJlZnJlc2hKUygpCit7CisgICAgdWktPndlYlZpZXct
PnBhZ2UoKS0+bWFpbkZyYW1lKCktPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgibXlXaWRn
ZXQiLCB0aGlzKTsKK30KK3ZvaWQgV2lkZ2V0OjpzdGFydCgpCit7CisgICAgdWktPndlYlZpZXct
PmxvYWQoUVVybCgicXJjOi8vL3Rlc3QuaHRtbCIpKTsKKyAgICBjb25uZWN0KHVpLT53ZWJWaWV3
LT5wYWdlKCktPm1haW5GcmFtZSgpLCBTSUdOQUwoamF2YVNjcmlwdFdpbmRvd09iamVjdENsZWFy
ZWQoKSksIHRoaXMsIFNMT1QocmVmcmVzaEpTKCkpKTsKKyAgICB1aS0+d2ViVmlldy0+cGFnZSgp
LT5tYWluRnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJteVdpZGdldCIsIHRo
aXMpOworfQorCit2b2lkIFdpZGdldDo6Y29tcGxldGVUZXN0KCkKK3sKKyAgICBRQ09NUEFSRSh1
aS0+bGJsMS0+cGl4bWFwKCktPnNpemUoKSwgdWktPmxibDItPnNpemUoKSk7CisgICAgUUNPTVBB
UkUodWktPmxibDMtPnNpemUoKSwgdWktPmxibDQtPnBpeG1hcCgpLT5zaXplKCkpOworICAgIFFD
T01QQVJFKHVpLT5sYmwyLT5zaXplKCkud2lkdGgoKSwgdWktPndlYlZpZXctPnBhZ2UoKS0+bWFp
bkZyYW1lKCktPmZpbmRGaXJzdEVsZW1lbnQoIiNpbWcxIikuZXZhbHVhdGVKYXZhU2NyaXB0KCJ0
aGlzLndpZHRoIikudG9JbnQoKSk7CisgICAgUUNPTVBBUkUodWktPmxibDMtPnNpemUoKS53aWR0
aCgpLCB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKS0+ZmluZEZpcnN0RWxlbWVudCgi
I2ltZzIiKS5ldmFsdWF0ZUphdmFTY3JpcHQoInRoaXMud2lkdGgiKS50b0ludCgpKTsKKyAgICBl
bWl0IHRlc3RDb21wbGV0ZSgpOworfQorCit2b2lkIFdpZGdldDo6c2V0UGl4bWFwKGNvbnN0IFFQ
aXhtYXAmIHApCit7CisgICAgdWktPmxibDEtPnNldFBpeG1hcChwKTsKK30KK1FQaXhtYXAgV2lk
Z2V0OjpwaXhtYXAoKSBjb25zdAoreworICAgIFFQaXhtYXAgcHgodWktPmxibDMtPnNpemUoKSk7
CisgICAgeworICAgICAgICBRUGFpbnRlciBwKCZweCk7CisgICAgICAgIHVpLT5sYmwzLT5yZW5k
ZXIoJnApOworICAgIH0KKyAgICByZXR1cm4gcHg7Cit9Cit2b2lkIFdpZGdldDo6c2V0SW1hZ2Uo
Y29uc3QgUUltYWdlJiBpbWcpCit7CisgICAgdWktPmxibDQtPnNldFBpeG1hcChRUGl4bWFwOjpm
cm9tSW1hZ2UoaW1nKSk7Cit9CisKK1FJbWFnZSBXaWRnZXQ6OmltYWdlKCkgY29uc3QKK3sKKyAg
ICBRSW1hZ2UgaW1nKHVpLT5sYmwyLT5zaXplKCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7Cisg
ICAgeworICAgICAgICBRUGFpbnRlciBwKCZpbWcpOworICAgICAgICB1aS0+bGJsMi0+cmVuZGVy
KCZwKTsKKyAgICB9CisgICAgcmV0dXJuIGltZzsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sK
KyAgICBkZWxldGUgdWk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpjaGFuZ2VFdmVudChRRXZlbnQqIGUp
Cit7CisgICAgUVdpZGdldDo6Y2hhbmdlRXZlbnQoZSk7CisgICAgc3dpdGNoIChlLT50eXBlKCkp
IHsKKyAgICBjYXNlIFFFdmVudDo6TGFuZ3VhZ2VDaGFuZ2U6CisgICAgICAgIHVpLT5yZXRyYW5z
bGF0ZVVpKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9Cit9Cit2b2lkIFdpZGdldDo6Y29tcGFyZShjb25zdCBRVmFyaWFudCYgYSwgY29u
c3QgUVZhcmlhbnQmIGIpCit7CisgICAgUUNPTVBBUkUoYSwgYik7Cit9CisKK3ZvaWQgV2lkZ2V0
OjppbWFnZVNsb3QoY29uc3QgUUltYWdlJiBpbWcpCit7CisgICAgUUNPTVBBUkUoaW1nLnNpemUo
KSwgdWktPmxibDMtPnNpemUoKSk7CisgICAgZW1pdCBwaXhtYXBTaWduYWwoUVBpeG1hcDo6ZnJv
bUltYWdlKGltZykpOworfQorCit2b2lkIFdpZGdldDo6cGl4bWFwU2xvdChjb25zdCBRUGl4bWFw
JiBweG0pCit7CisgICAgUUNPTVBBUkUocHhtLnNpemUoKSwgdWktPmxibDItPnNpemUoKSk7Cisg
ICAgZW1pdCBpbWFnZVNpZ25hbCh1aS0+bGJsNC0+cGl4bWFwKCktPnRvSW1hZ2UoKSk7Cit9CisK
K3ZvaWQgV2lkZ2V0OjpyYW5kb21TbG90KGNvbnN0IFFQaXhtYXAmIHB4bSkKK3sKKyAgICBRVkVS
SUZZKHB4bS5pc051bGwoKSk7Cit9CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFw
L3dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lk
Z2V0LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdl
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgd2lkZ2V0X2gKKyNkZWZpbmUg
d2lkZ2V0X2gKKworI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRUGl4bWFwPgorI2luY2x1
ZGUgPFFXaWRnZXQ+CisKK25hbWVzcGFjZSBVaSB7CitjbGFzcyBXaWRnZXQ7Cit9CisKK2NsYXNz
IFdpZGdldCA6IHB1YmxpYyBRV2lkZ2V0IHsKKyAgICBRX09CSkVDVAorICAgIFFfUFJPUEVSVFko
UVBpeG1hcCBwaXhtYXAgUkVBRCBwaXhtYXAgV1JJVEUgc2V0UGl4bWFwKQorICAgIFFfUFJPUEVS
VFkoUUltYWdlIGltYWdlIFJFQUQgaW1hZ2UgV1JJVEUgc2V0SW1hZ2UpCisKK3B1YmxpYzoKKyAg
ICBXaWRnZXQoUVdpZGdldCogcGFyZW50ID0gMCk7CisgICAgfldpZGdldCgpOworICAgIHZvaWQg
c2V0UGl4bWFwKGNvbnN0IFFQaXhtYXAmKTsKKyAgICBRUGl4bWFwIHBpeG1hcCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0SW1hZ2UoY29uc3QgUUltYWdlJik7CisgICAgUUltYWdlIGltYWdlKCkgY29u
c3Q7CisKK3ByaXZhdGUgc2xvdHM6CisgICAgdm9pZCByZWZyZXNoSlMoKTsKKworcHVibGljIHNs
b3RzOgorICAgIHZvaWQgY29tcGxldGVUZXN0KCk7CisgICAgdm9pZCBzdGFydCgpOworICAgIHZv
aWQgY29tcGFyZShjb25zdCBRVmFyaWFudCYgYSwgY29uc3QgUVZhcmlhbnQmIGIpOworICAgIHZv
aWQgaW1hZ2VTbG90KGNvbnN0IFFJbWFnZSYpOworICAgIHZvaWQgcGl4bWFwU2xvdChjb25zdCBR
UGl4bWFwJik7CisgICAgdm9pZCByYW5kb21TbG90KGNvbnN0IFFQaXhtYXAmKTsKKworc2lnbmFs
czoKKyAgICB2b2lkIHRlc3RDb21wbGV0ZSgpOworICAgIHZvaWQgaW1hZ2VTaWduYWwoY29uc3Qg
UUltYWdlJik7CisgICAgdm9pZCBwaXhtYXBTaWduYWwoY29uc3QgUVBpeG1hcCYpOworCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBjaGFuZ2VFdmVudChRRXZlbnQqIGUpOworCitwcml2YXRlOgorICAg
IFVpOjpXaWRnZXQqIHVpOworfTsKKworI2VuZGlmIC8vIHdpZGdldF9oCkluZGV4OiBXZWJLaXQv
cXQvdGVzdHMvaHlicmlkUGl4bWFwL3RzdF9oeWJyaWRQaXhtYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3RzdF9oeWJyaWRQaXhtYXAu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICIuLi91dGlsLmgiCisKKyNp
bmNsdWRlICJ3aWRnZXQuaCIKKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgorCitjbGFzcyB0c3Rf
aHlicmlkUGl4bWFwIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCisKK3B1YmxpYzoK
KyAgICB0c3RfaHlicmlkUGl4bWFwKFFPYmplY3QqIG8gPSAwKSA6IFFPYmplY3Qobykge30KKwor
cHVibGljIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
Y2xlYW51cCgpCisgICAgeworICAgIH0KKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIGh5YnJp
ZFBpeG1hcCgpCisgICAgeworICAgICAgICBXaWRnZXQgd2lkZ2V0OworICAgICAgICB3aWRnZXQu
c2hvdygpOworICAgICAgICB3aWRnZXQuc3RhcnQoKTsKKyAgICAgICAgd2FpdEZvclNpZ25hbCgm
d2lkZ2V0LCBTSUdOQUwodGVzdENvbXBsZXRlKCkpKTsKKyAgICB9Cit9OworCitRVEVTVF9NQUlO
KHRzdF9oeWJyaWRQaXhtYXApCisKKyNpbmNsdWRlIDx0c3RfaHlicmlkUGl4bWFwLm1vYz4KSW5k
ZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvcmVzb3VyY2VzLnFyYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Jlc291cmNlcy5xcmMJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Jlc291cmNlcy5xcmMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPFJDQz4KKyAgICA8cXJlc291cmNlIHByZWZpeD0iLyI+
CisgICAgICAgIDxmaWxlPnRlc3QuaHRtbDwvZmlsZT4KKyAgICA8L3FyZXNvdXJjZT4KKzwvUkND
PgpJbmRleDogV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
cXQvdGVzdHMvdGVzdHMucHJvCShyZXZpc2lvbiA1MzM2NCkKKysrIFdlYktpdC9xdC90ZXN0cy90
ZXN0cy5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACiAKIFRFTVBMQVRFID0gc3Vi
ZGlycwotU1VCRElSUyA9IHF3ZWJmcmFtZSBxd2VicGFnZSBxd2ViZWxlbWVudCBxZ3JhcGhpY3N3
ZWJ2aWV3IHF3ZWJoaXN0b3J5aW50ZXJmYWNlIHF3ZWJ2aWV3IHF3ZWJoaXN0b3J5IHF3ZWJpbnNw
ZWN0b3IKK1NVQkRJUlMgPSBxd2ViZnJhbWUgcXdlYnBhZ2UgcXdlYmVsZW1lbnQgcWdyYXBoaWNz
d2VidmlldyBxd2ViaGlzdG9yeWludGVyZmFjZSBxd2VidmlldyBxd2ViaGlzdG9yeSBxd2ViaW5z
cGVjdG9yIGh5YnJpZFBpeG1hcAogZ3JlYXRlclRoYW4oUVRfTUlOT1JfVkVSU0lPTiwgNCk6IFNV
QkRJUlMgKz0gYmVuY2htYXJrcy9wYWludGluZyBiZW5jaG1hcmtzL2xvYWRpbmcKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gNTMzNjQpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDM2LDYgKzEwMzYsNyBAQAogICAgIGJyaWRnZS9xdC9xdF9jbGFzcy5oIFwKICAgICBicmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuaCBcCiAgICAgYnJpZGdlL3F0L3F0X3J1bnRpbWUuaCBcCisgICAgYnJp
ZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaCBcCiAgICAgYnJpZGdlL3J1bnRpbWVfYXJyYXkuaCBc
CiAgICAgYnJpZGdlL3J1bnRpbWUuaCBcCiAgICAgYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmggXApA
QCAtMTkzNSw2ICsxOTM2LDcgQEAKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyUXQu
Y3BwIFwKICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuY3BwIFwKICAgICBicmlkZ2UvcXQvcXRfaW5z
dGFuY2UuY3BwIFwKKyAgICBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAgXAogICAgIGJy
aWRnZS9xdC9xdF9ydW50aW1lLmNwcCBcCiAgICAgcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0LmNw
cCBcCiAgICAgcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAgXApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0xheWVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NMYXllclF0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJ
bmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxdF9waXhtYXBydW50aW1l
LmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgor
I2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNIVE1MSW1hZ2VFbGVtZW50LmgiCisj
aW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisjaW5jbHVk
ZSAiU3RpbGxJbWFnZVF0LmgiCisjaW5jbHVkZSA8UUJ1ZmZlcj4KKyNpbmNsdWRlIDxRQnl0ZUFy
cmF5PgorI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRUGl4bWFwPgorI2luY2x1ZGUgPFFW
YXJpYW50PgorI2luY2x1ZGUgPHJ1bnRpbWVfb2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZV9y
b290Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIEpTQyB7CisKK25h
bWVzcGFjZSBCaW5kaW5ncyB7CisKK2NsYXNzIFF0UGl4bWFwQ2xhc3MgOiBwdWJsaWMgQ2xhc3Mg
eworcHVibGljOgorICAgIFF0UGl4bWFwQ2xhc3MoKTsKKyAgICB2aXJ0dWFsIE1ldGhvZExpc3Qg
bWV0aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSopIGNvbnN0OworICAgIHZp
cnR1YWwgRmllbGQqIGZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmllciYsIEluc3RhbmNlKikgY29u
c3Q7Cit9OworCisKK2NsYXNzIFF0UGl4bWFwV2lkdGhGaWVsZCA6IHB1YmxpYyBGaWVsZCB7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAid2lkdGgiOyB9
CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSW5zdGFuY2UqIHBpeG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBqc051
bWJlcihleGVjLCBzdGF0aWNfY2FzdDxjb25zdCBRdFBpeG1hcEluc3RhbmNlKj4ocGl4bWFwKS0+
d2lkdGgoKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhl
Y1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdCB7fQorfTsKK2NsYXNzIFF0
UGl4bWFwSGVpZ2h0RmllbGQgOiBwdWJsaWMgRmllbGQgeworcHVibGljOgorICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gImhlaWdodCI7IH0KKyAgICB2aXJ0dWFsIEpTVmFs
dWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5z
dCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2Fz
dDxjb25zdCBRdFBpeG1hcEluc3RhbmNlKj4oaW5zdCktPmhlaWdodCgpKTsKKyAgICB9CisgICAg
dmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5j
ZSosIEpTVmFsdWUpIGNvbnN0IHt9Cit9OworCitjbGFzcyBRdFBpeG1hcFJ1bnRpbWVNZXRob2Qg
OiBwdWJsaWMgTWV0aG9kIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGludCBudW1QYXJhbWV0ZXJz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB2aXJ0dWFsIEpT
VmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQmLCBQYXNzUmVmUHRyPFJvb3RP
YmplY3Q+IHJvb3QsIFF0UGl4bWFwSW5zdGFuY2UqIGluc3QpID0gMDsKKworfTsKKworY2xhc3Mg
UXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1ldGhv
ZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAidG9I
VE1MSW1hZ2VFbGVtZW50IjsgfQorICAgIEpTVmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywg
UVZhcmlhbnQmIHYsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgUXRQaXhtYXBJbnN0YW5j
ZSopCisgICAgeworICAgICAgICBRUGl4bWFwIHB4bTsKKyAgICAgICAgaWYgKHYudHlwZSgpID09
IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKSB7Cisg
ICAgICAgICAgICBweG0gPSBRUGl4bWFwOjpmcm9tSW1hZ2Uodi52YWx1ZTxRSW1hZ2U+KCkpOwor
ICAgICAgICAgICAgdiA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4ocHhtKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBweG0gPSB2LnZhbHVlPFFQaXhtYXA+KCk7CisKKyAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gMDsKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4ocm9vdC0+Z2xvYmFsT2JqZWN0
KCkpOworICAgICAgICBpZiAoZ2xvYmFsKSB7CisgICAgICAgICAgICBET01XaW5kb3cqIGRXaW5k
b3cgPSB0b0RPTVdpbmRvdyhnbG9iYWwpOworICAgICAgICAgICAgaWYgKGRXaW5kb3cpCisgICAg
ICAgICAgICAgICAgZG9jdW1lbnQgPSBkV2luZG93LT5kb2N1bWVudCgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGRvY3VtZW50KSB7CisgICAgICAgICAgICBQYXNzUmVmUHRyPFN0aWxsSW1h
Z2U+IGltZyA9IFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZShweG0pOworICAgICAgICAgICAg
UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoSFRN
TE5hbWVzOjppbWdUYWcsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGltYWdlLT5zZXRDYWNoZWRJ
bWFnZShuZXcgQ2FjaGVkSW1hZ2UoaW1nLmdldCgpKSk7CisgICAgICAgICAgICB0b0pTKGV4ZWMs
IGdsb2JhbCwgZG9jdW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhl
YywgZ2xvYmFsLCBpbWFnZS5yZWxlYXNlKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisKK307CisKK2NsYXNzIFF0UGl4bWFwVG9EYXRhVXJsTWV0
aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAidG9EYXRhVXJsIjsgfQorICAgIEpTVmFsdWUg
aW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQmIHYsIFBhc3NSZWZQdHI8Um9vdE9iamVj
dD4gcm9vdCwgUXRQaXhtYXBJbnN0YW5jZSopCisgICAgeworICAgICAgICBRSW1hZ2UgaW1hZ2U7
CisgICAgICAgIC8vIGZvciBnZXR0aW5nIHRoZSBkYXRhIHVybCwgd2UgYWx3YXlzIHByZWZlciB0
aGUgaW1hZ2UuCisgICAgICAgIGlmICh2LnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6
VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpIHsKKyAgICAgICAgICAgIGltYWdlID0gdi52
YWx1ZTxRUGl4bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgICAgIHYgPSBRVmFyaWFudDo6ZnJv
bVZhbHVlPFFJbWFnZT4oaW1hZ2UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGltYWdl
ID0gdi52YWx1ZTxRSW1hZ2U+KCk7CisgICAgICAgIFFCeXRlQXJyYXkgYmE7CisgICAgICAgIFFC
dWZmZXIgYigmYmEpOworICAgICAgICBpbWFnZS5zYXZlKCZiLCAiUE5HIik7CisgICAgICAgIGNv
bnN0IFFTdHJpbmcgYjY0ID0gUVN0cmluZygiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIpICsgYmEu
dG9CYXNlNjQoKTsKKyAgICAgICAgY29uc3QgVVN0cmluZyB1c3RyaW5nKChVQ2hhciopYjY0LnV0
ZjE2KCksIGI2NC5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1c3Ry
aW5nKTsKKyAgICB9CisKK307CisKK2NsYXNzIFF0UGl4bWFwVG9TdHJpbmdNZXRob2QgOiBwdWJs
aWMgUXRQaXhtYXBSdW50aW1lTWV0aG9kIHsKKyAgICBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIG5hbWUoKSB7IHJldHVybiAidG9TdHJpbmciOyB9CisgICAgSlNWYWx1ZSBpbnZva2Uo
RXhlY1N0YXRlKiBleGVjLCBRVmFyaWFudCYgdiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290
LCBRdFBpeG1hcEluc3RhbmNlKiBpbnN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc3QtPnZh
bHVlT2YoZXhlYyk7CisgICAgfQorCit9OworCitzdHJ1Y3QgUXRQaXhtYXBNZXRhRGF0YSB7Cisg
ICAgUXRQaXhtYXBUb0RhdGFVcmxNZXRob2QgdG9EYXRhVXJsTWV0aG9kOworICAgIFF0UGl4bWFw
Q3JlYXRlRWxlbWVudE1ldGhvZCBjcmVhdGVFbGVtZW50TWV0aG9kOworICAgIFF0UGl4bWFwVG9T
dHJpbmdNZXRob2QgdG9TdHJpbmdNZXRob2Q7CisgICAgUXRQaXhtYXBIZWlnaHRGaWVsZCBoZWln
aHRGaWVsZDsKKyAgICBRdFBpeG1hcFdpZHRoRmllbGQgd2lkdGhGaWVsZDsKKyAgICBRdFBpeG1h
cENsYXNzIGNsczsKK30gcXRfcGl4bWFwX21ldGFEYXRhOworCisvLyBEZXJpdmVkIFJ1bnRpbWVP
YmplY3QKK2NsYXNzIFF0UGl4bWFwUnVudGltZU9iamVjdEltcCA6IHB1YmxpYyBSdW50aW1lT2Jq
ZWN0SW1wIHsKK3B1YmxpYzoKKyAgICBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAoRXhlY1N0YXRl
KiwgUGFzc1JlZlB0cjxJbnN0YW5jZT4pOworCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBz
X2luZm87CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVy
ZShKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncykpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IFJ1bnRpbWVPYmplY3RJbXA6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFya0No
aWxkcmVuOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Cit9OworCitRdFBpeG1hcFJ1bnRpbWVPYmpl
Y3RJbXA6OlF0UGl4bWFwUnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQ
dHI8SW5zdGFuY2U+IGluc3RhbmNlKQorICAgIDogUnVudGltZU9iamVjdEltcChleGVjLCBXZWJD
b3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFF0UGl4bWFwUnVudGltZU9iamVjdEltcD4o
ZXhlYyksIGluc3RhbmNlKQoreworfQorCitjb25zdCBDbGFzc0luZm8gUXRQaXhtYXBSdW50aW1l
T2JqZWN0SW1wOjpzX2luZm8gPSB7ICJRdFBpeG1hcFJ1bnRpbWVPYmplY3QiLCAmUnVudGltZU9i
amVjdEltcDo6c19pbmZvLCAwLCAwIH07CisKKworUXRQaXhtYXBDbGFzczo6UXRQaXhtYXBDbGFz
cygpCit7Cit9CisKKworQ2xhc3MqIFF0UGl4bWFwSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gJnF0X3BpeG1hcF9tZXRhRGF0YS5jbHM7Cit9CisKK0pTVmFsdWUgUXRQ
aXhtYXBJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9k
TGlzdCYgbWV0aG9kcywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAobWV0aG9kcy5z
aXplKCkgPT0gMSkgeworICAgICAgICBRdFBpeG1hcFJ1bnRpbWVNZXRob2QqIG10ZCA9IHN0YXRp
Y19jYXN0PFF0UGl4bWFwUnVudGltZU1ldGhvZCo+KG1ldGhvZHNbMF0pOyAgICAgICAgCisgICAg
ICAgIHJldHVybiBtdGQtPmludm9rZShleGVjLCBkYXRhLCByb290T2JqZWN0KCksIHRoaXMpOwor
ICAgIH0KKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworTWV0aG9kTGlzdCBRdFBpeG1h
cENsYXNzOjptZXRob2RzTmFtZWQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSW5zdGFu
Y2UqKSBjb25zdAoreworICAgIE1ldGhvZExpc3QgbWV0aG9kczsKKyAgICBpZiAoaWRlbnRpZmll
ciA9PSBRdFBpeG1hcFRvRGF0YVVybE1ldGhvZDo6bmFtZSgpKQorICAgICAgICBtZXRob2RzLmFw
cGVuZCgmcXRfcGl4bWFwX21ldGFEYXRhLnRvRGF0YVVybE1ldGhvZCk7CisgICAgZWxzZSBpZiAo
aWRlbnRpZmllciA9PSBRdFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRob2Q6Om5hbWUoKSkKKyAgICAg
ICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS5jcmVhdGVFbGVtZW50TWV0aG9k
KTsKKyAgICBlbHNlIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFwVG9TdHJpbmdNZXRob2Q6Om5h
bWUoKSkKKyAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS50b1N0cmlu
Z01ldGhvZCk7CisgICAgcmV0dXJuIG1ldGhvZHM7Cit9CisKK0ZpZWxkKiBRdFBpeG1hcENsYXNz
OjpmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEluc3RhbmNlKikgY29u
c3QKK3sKKyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFdpZHRoRmllbGQ6Om5hbWUoKSkK
KyAgICAgICAgcmV0dXJuICZxdF9waXhtYXBfbWV0YURhdGEud2lkdGhGaWVsZDsKKyAgICBpZiAo
aWRlbnRpZmllciA9PSBRdFBpeG1hcEhlaWdodEZpZWxkOjpuYW1lKCkpCisgICAgICAgIHJldHVy
biAmcXRfcGl4bWFwX21ldGFEYXRhLmhlaWdodEZpZWxkOworICAgIHJldHVybiAwOworfQorCit2
b2lkIFF0UGl4bWFwSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKmV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBhcnIpCit7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVT
dHJpbmcoUXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElk
ZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRob2Q6Om5hbWUo
KSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvU3Ry
aW5nTWV0aG9kOjpuYW1lKCkpKSk7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJp
bmcoUXRQaXhtYXBXaWR0aEZpZWxkOjpuYW1lKCkpKSk7CisgICAgYXJyLmFkZChJZGVudGlmaWVy
KGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBIZWlnaHRGaWVsZDo6bmFtZSgpKSkpOworfQorCitKU1Zh
bHVlIFF0UGl4bWFwSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgcHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKHB0eXBlID09IFByZWZl
ck51bWJlcikgeworICAgICAgICByZXR1cm4ganNCb29sZWFuKAorICAgICAgICAgICAgICAgIChk
YXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUlt
YWdlPigpKSAmJiAhKGRhdGEudmFsdWU8UUltYWdlPigpKS5pc051bGwoKSkKKyAgICAgICAgICAg
ICAgICB8fCAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRh
VHlwZUlkPFFQaXhtYXA+KCkpICYmICFkYXRhLnZhbHVlPFFQaXhtYXA+KCkuaXNOdWxsKCkpKTsK
KyAgICB9CisgICAgaWYgKHB0eXBlID09IFByZWZlclN0cmluZykKKyAgICAgICAgcmV0dXJuIHZh
bHVlT2YoZXhlYyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgUXRQ
aXhtYXBJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgY29u
c3QgUVN0cmluZyB0b1N0ciA9IFFTdHJpbmcoIltRdCBOYXRpdmUgUGl4bWFwICUxLCUyXSIpLmFy
Zyh3aWR0aCgpKS5hcmcoaGVpZ2h0KCkpOworICAgIFVTdHJpbmcgdXN0cmluZygoVUNoYXIqKXRv
U3RyLnV0ZjE2KCksIHRvU3RyLmxlbmd0aCgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
dXN0cmluZyk7Cit9CisKK1F0UGl4bWFwSW5zdGFuY2U6OlF0UGl4bWFwSW5zdGFuY2UoUGFzc1Jl
ZlB0cjxSb290T2JqZWN0PiByb290T2JqLCBjb25zdCBRVmFyaWFudCYgZCkKKyAgICAgICAgOklu
c3RhbmNlKHJvb3RPYmopLCBkYXRhKGQpCit7Cit9CisKK2ludCBRdFBpeG1hcEluc3RhbmNlOjp3
aWR0aCgpIGNvbnN0Cit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJp
YW50OjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEu
dmFsdWU8UVBpeG1hcD4oKS53aWR0aCgpOworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNf
Y2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUltYWdlPigpKSkKKyAgICAgICAgcmV0
dXJuIGRhdGEudmFsdWU8UUltYWdlPigpLndpZHRoKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2lu
dCBRdFBpeG1hcEluc3RhbmNlOjpoZWlnaHQoKSBjb25zdAoreworICAgIGlmIChkYXRhLnR5cGUo
KSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkp
CisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCkuaGVpZ2h0KCk7CisgICAgaWYg
KGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxR
SW1hZ2U+KCkpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRSW1hZ2U+KCkuaGVpZ2h0KCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK1FQaXhtYXAgUXRQaXhtYXBJbnN0YW5jZTo6dG9QaXhtYXAo
KQoreworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4o
cU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXht
YXA+KCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBl
PihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKSB7CisgICAgICAgIGNvbnN0IFFQaXhtYXAgcHhtID0g
UVBpeG1hcDo6ZnJvbUltYWdlKGRhdGEudmFsdWU8UUltYWdlPigpKTsKKyAgICAgICAgZGF0YSA9
IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4ocHhtKTsKKyAgICAgICAgcmV0dXJuIHB4bTsK
KyAgICB9CisgICAgcmV0dXJuIFFQaXhtYXAoKTsKKworfQorCitRSW1hZ2UgUXRQaXhtYXBJbnN0
YW5jZTo6dG9JbWFnZSgpCit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFW
YXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKQorICAgICAgICByZXR1cm4gZGF0
YS52YWx1ZTxRSW1hZ2U+KCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFW
YXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkgeworICAgICAgICBjb25zdCBR
SW1hZ2UgaW1nID0gZGF0YS52YWx1ZTxRUGl4bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgZGF0
YSA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihpbWcpOworICAgICAgICByZXR1cm4gaW1n
OworICAgIH0KKyAgICByZXR1cm4gUUltYWdlKCk7Cit9CisKK1FWYXJpYW50IFF0UGl4bWFwSW5z
dGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QsIFFNZXRhVHlwZTo6VHlw
ZSBoaW50KQoreworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmIChoaW50ID09IHFNZXRh
VHlwZUlkPFFQaXhtYXA+KCkpCisgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQ6OmZyb21WYWx1
ZTxRUGl4bWFwPihRUGl4bWFwKCkpOworICAgICAgICBpZiAoaGludCA9PSBxTWV0YVR5cGVJZDxR
SW1hZ2U+KCkpCisgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+
KFFJbWFnZSgpKTsKKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTSFRNTEltYWdl
RWxlbWVudDo6c19pbmZvKSkgeworICAgICAgICBKU0hUTUxJbWFnZUVsZW1lbnQqIGVsID0gc3Rh
dGljX2Nhc3Q8SlNIVE1MSW1hZ2VFbGVtZW50Kj4ob2JqZWN0KTsKKyAgICAgICAgSFRNTEltYWdl
RWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGVs
LT5pbXBsKCkpOworICAgICAgICBpZiAoaW1hZ2VFbGVtZW50KSB7CisgICAgICAgICAgICBDYWNo
ZWRJbWFnZSogY0ltZyA9IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAgICAg
IGlmIChjSW1nKSB7CisgICAgICAgICAgICAgICAgSW1hZ2UqIGltZyA9IGNJbWctPmltYWdlKCk7
CisgICAgICAgICAgICAgICAgaWYgKGltZykgeworICAgICAgICAgICAgICAgICAgICBRUGl4bWFw
KiBweG0gPSBpbWctPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChweG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaGludCA9
PSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXht
YXA+KCpweG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9t
VmFsdWU8UUltYWdlPihweG0tPnRvSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYg
KG9iamVjdC0+aW5oZXJpdHMoJlF0UGl4bWFwUnVudGltZU9iamVjdEltcDo6c19pbmZvKSkgewor
ICAgICAgICBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFF0UGl4
bWFwUnVudGltZU9iamVjdEltcCo+KG9iamVjdCk7CisgICAgICAgIFF0UGl4bWFwSW5zdGFuY2Uq
IGluc3QgPSBzdGF0aWNfY2FzdDxRdFBpeG1hcEluc3RhbmNlKj4oaW1wLT5nZXRJbnRlcm5hbElu
c3RhbmNlKCkpOworICAgICAgICBpZiAoaW5zdCkgeworICAgICAgICAgICAgaWYgKGhpbnQgPT0g
cU1ldGFUeXBlSWQ8UVBpeG1hcCA+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50
Ojpmcm9tVmFsdWU8UVBpeG1hcD4oaW5zdC0+dG9QaXhtYXAoKSk7CisgICAgICAgICAgICBpZiAo
aGludCA9PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFW
YXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihpbnN0LT50b0ltYWdlKCkpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorSlNPYmplY3QqIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0
ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3QsIGNvbnN0IFFWYXJpYW50JiBkYXRhKQoreworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3Nl
cnRpb25zT25seSk7CisgICAgcmV0dXJuIG5ldyhleGVjKSBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJ
bXAoZXhlYywgbmV3IFF0UGl4bWFwSW5zdGFuY2Uocm9vdCwgZGF0YSkpOworfQorCitib29sIFF0
UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShRTWV0YVR5cGU6OlR5cGUgaGludCkKK3sKKyAgICBy
ZXR1cm4gaGludCA9PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkgfHwgaGludCA9PSBxTWV0YVR5cGVJ
ZDxRUGl4bWFwPigpOworfQorCit9CisKK30KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
CShyZXZpc2lvbiA1MzM2NCkKKysrIFdlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAicW9iamVjdC5oIgogI2lu
Y2x1ZGUgInFzdHJpbmdsaXN0LmgiCiAjaW5jbHVkZSAicXRfaW5zdGFuY2UuaCIKKyNpbmNsdWRl
ICJxdF9waXhtYXBydW50aW1lLmgiCiAjaW5jbHVkZSAicXZhcmxlbmd0aGFycmF5LmgiCiAjaW5j
bHVkZSA8SlNGdW5jdGlvbi5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNzIwLDYgKzcyMSw4
IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNh
bkhhbmRsZShzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKSkgeworICAgICAgICAg
ICAgICAgIHJldCA9IFF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KG9iamVjdCwg
c3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihoaW50KSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UpCkBAIC04NDksNiArODUyLDkgQEAKICAgICAgICAg
cmV0dXJuIFF0SW5zdGFuY2U6OmdldFF0SW5zdGFuY2Uob2JqLCByb290LCBRU2NyaXB0RW5naW5l
OjpRdE93bmVyc2hpcCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgfQogCisgICAg
aWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5
cGU+KHZhcmlhbnQudHlwZSgpKSkpCisgICAgICAgIHJldHVybiBRdFBpeG1hcEluc3RhbmNlOjpj
cmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMsIHJvb3QsIHZhcmlhbnQpOworCiAgICAgaWYgKHR5cGUg
PT0gUU1ldGFUeXBlOjpRVmFyaWFudE1hcCkgewogICAgICAgICAvLyBjcmVhdGUgYSBuZXcgb2Jq
ZWN0LCBhbmQgc3R1ZmYgcHJvcGVydGllcyBpbnRvIGl0CiAgICAgICAgIEpTT2JqZWN0KiByZXQg
PSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0
X3BpeG1hcHJ1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXht
YXBydW50aW1lLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBy
dW50aW1lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBxdF9waXhtYXBydW50
aW1lX2gKKyNkZWZpbmUgcXRfcGl4bWFwcnVudGltZV9oCisKKyNpbmNsdWRlICJydW50aW1lLmgi
CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmlu
ZGluZ3MgeworCitjbGFzcyBRdFBpeG1hcEluc3RhbmNlIDogcHVibGljIEluc3RhbmNlIHsKKyAg
ICBRVmFyaWFudCBkYXRhOworcHVibGljOgorICAgIFF0UGl4bWFwSW5zdGFuY2UoUGFzc1JlZlB0
cjxSb290T2JqZWN0PiByb290T2JqLCBjb25zdCBRVmFyaWFudCYgbmV3RGF0YSk7CisgICAgdmly
dHVhbCBDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tl
TWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0JiBhcmdz
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWVBcnJheSYpOworCisgICAgdmlydHVhbCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShFeGVjU3Rh
dGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUg
dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OworICAgIGludCB3aWR0aCgpIGNvbnN0Owor
ICAgIGludCBoZWlnaHQoKSBjb25zdDsKKyAgICBRUGl4bWFwIHRvUGl4bWFwKCk7CisgICAgUUlt
YWdlIHRvSW1hZ2UoKTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIGNyZWF0ZVJ1bnRpbWVPYmplY3Qo
RXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiwgY29uc3QgUVZhcmlhbnQmKTsKKyAg
ICBzdGF0aWMgUVZhcmlhbnQgdmFyaWFudEZyb21PYmplY3QoSlNPYmplY3QqLCBRTWV0YVR5cGU6
OlR5cGUgaGludCk7CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlKFFNZXRhVHlwZTo6VHlwZSBo
aW50KTsKK307CisKK30KKworfQorI2VuZGlmCg==
</data>
<flag name="review"
          id="29162"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="29164"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46848</attachid>
            <date>2010-01-18 14:09:07 -0800</date>
            <delta_ts>2010-01-19 21:18:10 -0800</delta_ts>
            <desc>Use /dev/null for new files</desc>
            <filename>patch-hybrid-pixmap-8.diff</filename>
            <type>text/plain</type>
            <size>30239</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIC9kZXYvbnVsbAorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9IlVURi04Ij8+Cis8dWkgdmVyc2lvbj0iNC4wIj4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4K
KyA8d2lkZ2V0IGNsYXNzPSJRV2lkZ2V0IiBuYW1lPSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFt
ZT0iZ2VvbWV0cnkiPgorICAgPHJlY3Q+CisgICAgPHg+MDwveD4KKyAgICA8eT4wPC95PgorICAg
IDx3aWR0aD42MDA8L3dpZHRoPgorICAgIDxoZWlnaHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+
CisgIDwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3Ry
aW5nPldpZGdldDwvc3RyaW5nPgorICA8L3Byb3BlcnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJv
eExheW91dCIgbmFtZT0idmVydGljYWxMYXlvdXQiPgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBj
bGFzcz0iUVdlYlZpZXciIG5hbWU9IndlYlZpZXciPgorICAgICA8cHJvcGVydHkgbmFtZT0idXJs
Ij4KKyAgICAgIDx1cmw+CisgICAgICAgPHN0cmluZz5hYm91dDpibGFuazwvc3RyaW5nPgorICAg
ICAgPC91cmw+CisgICAgIDwvcHJvcGVydHk+CisgICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+Cisg
ICA8aXRlbT4KKyAgICA8bGF5b3V0IGNsYXNzPSJRSEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRh
bExheW91dCI+CisgICAgIDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1l
PSJsYmwxIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcv
PgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAg
ICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9Im1pbmltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAg
ICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAg
ICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1h
eGltdW1TaXplIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4K
KyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwv
cHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5n
PkltYWdlIGZyb20gUXQgdG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xh
c3M9IlFMYWJlbCIgbmFtZT0ibGJsMyI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgor
ICAgICAgICA8c3RyaW5nPlBpeG1hcCBmcm9tIFF0IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8
L3Byb3BlcnR5PgorICAgICAgPC93aWRnZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+Cisg
ICAgICA8d2lkZ2V0IGNsYXNzPSJRTGFiZWwiIG5hbWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPHN0cmluZy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAg
ICAgIDwvd2lkZ2V0PgorICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBu
YW1lPSJob3Jpem9udGFsU3BhY2VyIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRp
b24iPgorICAgICAgICA8ZW51bT5RdDo6SG9yaXpvbnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3Bl
cnR5PgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAg
ICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+NDA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4y
MDwvaGVpZ2h0PgorICAgICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwv
c3BhY2VyPgorICAgICA8L2l0ZW0+CisgICAgPC9sYXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5
b3V0PgorIDwvd2lkZ2V0PgorIDxsYXlvdXRkZWZhdWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEi
Lz4KKyA8Y3VzdG9td2lkZ2V0cz4KKyAgPGN1c3RvbXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmll
dzwvY2xhc3M+CisgICA8ZXh0ZW5kcz5RV2lkZ2V0PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdl
YktpdC9RV2ViVmlldzwvaGVhZGVyPgorICA8L2N1c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdl
dHM+CisgPHJlc291cmNlcy8+CisgPGNvbm5lY3Rpb25zLz4KKzwvdWk+CkluZGV4OiBXZWJLaXQv
cXQvdGVzdHMvaHlicmlkUGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL2Rl
di9udWxsCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9qZWN0IGNyZWF0ZWQgYnkgUXRDcmVhdG9y
IDIwMDktMTItMTBUMTE6MjU6MDIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZSguLi90ZXN0cy5wcmkpCitUQVJHRVQgPSBoeWJyaWRQ
aXhtYXAKK1NPVVJDRVMgKz0gd2lkZ2V0LmNwcAorSEVBREVSUyArPSB3aWRnZXQuaAorRk9STVMg
Kz0gd2lkZ2V0LnVpCitSRVNPVVJDRVMgKz0gcmVzb3VyY2VzLnFyYworQ09ORklHICs9IGNvbnNv
bGUKSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdGVzdC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC90ZXN0Lmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKzxodG1sPgorICAgIDxoZWFkPgorICAg
ICAgICA8c3R5bGU+CisgICAgICAgICAgICBpbWcgeyBkaXNwbGF5OiBibG9jazsgYm9yZGVyLXN0
eWxlOiBncm9vdmV9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAg
ICAgICBmdW5jdGlvbiBzdGFydFRlc3QoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHZhciBvYmogPSBteVdpZGdldC5pbWFnZTsKKyAgICAgICAgICAgICAgICB2YXIgcHhtID0gbXlX
aWRnZXQucGl4bWFwOworCisgICAgICAgICAgICAgICAgdmFyIGltZyA9IG9iai50b0hUTUxJbWFn
ZUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB2YXIgaW1nMSA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJpbWcxIik7CisgICAgICAgICAgICAgICAgdmFyIGltZzIgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiaW1nMiIpOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoaW1nKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHB4
bS50b0hUTUxJbWFnZUVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgdmFyIHNpZ25hbHNGaXJl
ZCA9IDA7CisgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShvYmoudG9TdHJpbmcoKSwi
W1F0IE5hdGl2ZSBQaXhtYXAgIitvYmoud2lkdGgrIiwiK29iai5oZWlnaHQrIl0iKTsKKyAgICAg
ICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKFN0cmluZyhweG0pLCJbUXQgTmF0aXZlIFBpeG1h
cCAiK3B4bS53aWR0aCsiLCIrcHhtLmhlaWdodCsiXSIpOworCisgICAgICAgICAgICAgICAgLy8g
dGhpcyBzaG91bGRuJ3Qgd29yayBidXQgc2hvdWxkbid0IGNyYXNoCisgICAgICAgICAgICAgICAg
bXlXaWRnZXQucmFuZG9tU2xvdCgiZm9vYmFyIik7CisKKyAgICAgICAgICAgICAgICBteVdpZGdl
dC5waXhtYXBTaWduYWwuY29ubmVjdChmdW5jdGlvbihpbWdGcm9tU2lnbmFsKSB7CisgICAgICAg
ICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUoaW1nRnJvbVNpZ25hbC5oZWlnaHQsIGltZzIu
aGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrc2lnbmFsc0ZpcmVkID09IDIpCisg
ICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIG15V2lkZ2V0LmltYWdlU2lnbmFsLmNvbm5l
Y3QoZnVuY3Rpb24oaW1nRnJvbVNpZ25hbCkgeworICAgICAgICAgICAgICAgICAgICBteVdpZGdl
dC5jb21wYXJlKHB4bS5oZWlnaHQsIGltZzIuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCsrc2lnbmFsc0ZpcmVkID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdl
dC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IGZ1bmN0aW9uIGNvbnRpbnVlVGVzdEFmdGVySW1hZ2VzQXJlTG9hZGVkKCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbWcxLmNvbXBsZXRlICYmIGltZzIuY29t
cGxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUocHhtLmhl
aWdodCwgaW1nMi5oZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQucGl4
bWFwU2xvdChpbWcpOworICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuaW1hZ2VTbG90
KHB4bSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaW1nMS5vbmxvYWQgPSBjb250aW51ZVRlc3RBZnRlckltYWdlc0FyZUxvYWRlZDsK
KyAgICAgICAgICAgICAgICBpbWcyLm9ubG9hZCA9IGNvbnRpbnVlVGVzdEFmdGVySW1hZ2VzQXJl
TG9hZGVkOworICAgICAgICAgICAgICAgIGltZzEuc3JjID0gb2JqLnRvRGF0YVVybCgpOworICAg
ICAgICAgICAgICAgIGltZzIuc3JjID0gbXlXaWRnZXQucGl4bWFwLnRvRGF0YVVybCgpOworICAg
ICAgICAgICAgICAgIG15V2lkZ2V0LmltYWdlID0gcHhtOworICAgICAgICAgICAgICAgIG15V2lk
Z2V0LnBpeG1hcCA9IGltZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAg
PC9oZWFkPgorICAgIDxib2R5IG9ubG9hZD0ic3RhcnRUZXN0KCkiPgorICAgICAgICA8aW1nIGlk
PSJpbWcxIiAvPgorICAgICAgICA8aW1nIGlkPSJpbWcyIiAvPgorICAgIDwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIndpZGdldC5oIgorCisj
aW5jbHVkZSAicXdlYmVsZW1lbnQuaCIKKyNpbmNsdWRlICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRl
ICJ1aV93aWRnZXQuaCIKKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRdFRlc3QvUXRU
ZXN0PgorCitXaWRnZXQ6OldpZGdldChRV2lkZ2V0KiBwYXJlbnQpIDoKKyAgICBRV2lkZ2V0KHBh
cmVudCksCisgICAgdWkobmV3IFVpOjpXaWRnZXQpCit7CisgICAgdWktPnNldHVwVWkodGhpcyk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZWZyZXNoSlMoKQoreworICAgIHVpLT53ZWJWaWV3LT5wYWdl
KCktPm1haW5GcmFtZSgpLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15V2lkZ2V0Iiwg
dGhpcyk7Cit9Cit2b2lkIFdpZGdldDo6c3RhcnQoKQoreworICAgIHVpLT53ZWJWaWV3LT5sb2Fk
KFFVcmwoInFyYzovLy90ZXN0Lmh0bWwiKSk7CisgICAgY29ubmVjdCh1aS0+d2ViVmlldy0+cGFn
ZSgpLT5tYWluRnJhbWUoKSwgU0lHTkFMKGphdmFTY3JpcHRXaW5kb3dPYmplY3RDbGVhcmVkKCkp
LCB0aGlzLCBTTE9UKHJlZnJlc2hKUygpKSk7CisgICAgdWktPndlYlZpZXctPnBhZ2UoKS0+bWFp
bkZyYW1lKCktPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09iamVjdCgibXlXaWRnZXQiLCB0aGlzKTsK
K30KKwordm9pZCBXaWRnZXQ6OmNvbXBsZXRlVGVzdCgpCit7CisgICAgUUNPTVBBUkUodWktPmxi
bDEtPnBpeG1hcCgpLT5zaXplKCksIHVpLT5sYmwyLT5zaXplKCkpOworICAgIFFDT01QQVJFKHVp
LT5sYmwzLT5zaXplKCksIHVpLT5sYmw0LT5waXhtYXAoKS0+c2l6ZSgpKTsKKyAgICBRQ09NUEFS
RSh1aS0+bGJsMi0+c2l6ZSgpLndpZHRoKCksIHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFt
ZSgpLT5maW5kRmlyc3RFbGVtZW50KCIjaW1nMSIpLmV2YWx1YXRlSmF2YVNjcmlwdCgidGhpcy53
aWR0aCIpLnRvSW50KCkpOworICAgIFFDT01QQVJFKHVpLT5sYmwzLT5zaXplKCkud2lkdGgoKSwg
dWktPndlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmZpbmRGaXJzdEVsZW1lbnQoIiNpbWcy
IikuZXZhbHVhdGVKYXZhU2NyaXB0KCJ0aGlzLndpZHRoIikudG9JbnQoKSk7CisgICAgZW1pdCB0
ZXN0Q29tcGxldGUoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldFBpeG1hcChjb25zdCBRUGl4bWFw
JiBwKQoreworICAgIHVpLT5sYmwxLT5zZXRQaXhtYXAocCk7Cit9CitRUGl4bWFwIFdpZGdldDo6
cGl4bWFwKCkgY29uc3QKK3sKKyAgICBRUGl4bWFwIHB4KHVpLT5sYmwzLT5zaXplKCkpOworICAg
IHsKKyAgICAgICAgUVBhaW50ZXIgcCgmcHgpOworICAgICAgICB1aS0+bGJsMy0+cmVuZGVyKCZw
KTsKKyAgICB9CisgICAgcmV0dXJuIHB4OworfQordm9pZCBXaWRnZXQ6OnNldEltYWdlKGNvbnN0
IFFJbWFnZSYgaW1nKQoreworICAgIHVpLT5sYmw0LT5zZXRQaXhtYXAoUVBpeG1hcDo6ZnJvbUlt
YWdlKGltZykpOworfQorCitRSW1hZ2UgV2lkZ2V0OjppbWFnZSgpIGNvbnN0Cit7CisgICAgUUlt
YWdlIGltZyh1aS0+bGJsMi0+c2l6ZSgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOworICAgIHsK
KyAgICAgICAgUVBhaW50ZXIgcCgmaW1nKTsKKyAgICAgICAgdWktPmxibDItPnJlbmRlcigmcCk7
CisgICAgfQorICAgIHJldHVybiBpbWc7Cit9CisKK1dpZGdldDo6fldpZGdldCgpCit7CisgICAg
ZGVsZXRlIHVpOworfQorCit2b2lkIFdpZGdldDo6Y2hhbmdlRXZlbnQoUUV2ZW50KiBlKQorewor
ICAgIFFXaWRnZXQ6OmNoYW5nZUV2ZW50KGUpOworICAgIHN3aXRjaCAoZS0+dHlwZSgpKSB7Cisg
ICAgY2FzZSBRRXZlbnQ6Okxhbmd1YWdlQ2hhbmdlOgorICAgICAgICB1aS0+cmV0cmFuc2xhdGVV
aSh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQordm9pZCBXaWRnZXQ6OmNvbXBhcmUoY29uc3QgUVZhcmlhbnQmIGEsIGNvbnN0IFFW
YXJpYW50JiBiKQoreworICAgIFFDT01QQVJFKGEsIGIpOworfQorCit2b2lkIFdpZGdldDo6aW1h
Z2VTbG90KGNvbnN0IFFJbWFnZSYgaW1nKQoreworICAgIFFDT01QQVJFKGltZy5zaXplKCksIHVp
LT5sYmwzLT5zaXplKCkpOworICAgIGVtaXQgcGl4bWFwU2lnbmFsKFFQaXhtYXA6OmZyb21JbWFn
ZShpbWcpKTsKK30KKwordm9pZCBXaWRnZXQ6OnBpeG1hcFNsb3QoY29uc3QgUVBpeG1hcCYgcHht
KQoreworICAgIFFDT01QQVJFKHB4bS5zaXplKCksIHVpLT5sYmwyLT5zaXplKCkpOworICAgIGVt
aXQgaW1hZ2VTaWduYWwodWktPmxibDQtPnBpeG1hcCgpLT50b0ltYWdlKCkpOworfQorCit2b2lk
IFdpZGdldDo6cmFuZG9tU2xvdChjb25zdCBRUGl4bWFwJiBweG0pCit7CisgICAgUVZFUklGWShw
eG0uaXNOdWxsKCkpOworfQpJbmRleDogV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQ
aXhtYXAvd2lkZ2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiB3aWRnZXRf
aAorI2RlZmluZSB3aWRnZXRfaAorCisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQaXht
YXA+CisjaW5jbHVkZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFVpIHsKK2NsYXNzIFdpZGdldDsK
K30KKworY2xhc3MgV2lkZ2V0IDogcHVibGljIFFXaWRnZXQgeworICAgIFFfT0JKRUNUCisgICAg
UV9QUk9QRVJUWShRUGl4bWFwIHBpeG1hcCBSRUFEIHBpeG1hcCBXUklURSBzZXRQaXhtYXApCisg
ICAgUV9QUk9QRVJUWShRSW1hZ2UgaW1hZ2UgUkVBRCBpbWFnZSBXUklURSBzZXRJbWFnZSkKKwor
cHVibGljOgorICAgIFdpZGdldChRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKKyAgICB+V2lkZ2V0KCk7
CisgICAgdm9pZCBzZXRQaXhtYXAoY29uc3QgUVBpeG1hcCYpOworICAgIFFQaXhtYXAgcGl4bWFw
KCkgY29uc3Q7CisgICAgdm9pZCBzZXRJbWFnZShjb25zdCBRSW1hZ2UmKTsKKyAgICBRSW1hZ2Ug
aW1hZ2UoKSBjb25zdDsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIHJlZnJlc2hKUygpOwor
CitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBjb21wbGV0ZVRlc3QoKTsKKyAgICB2b2lkIHN0YXJ0
KCk7CisgICAgdm9pZCBjb21wYXJlKGNvbnN0IFFWYXJpYW50JiBhLCBjb25zdCBRVmFyaWFudCYg
Yik7CisgICAgdm9pZCBpbWFnZVNsb3QoY29uc3QgUUltYWdlJik7CisgICAgdm9pZCBwaXhtYXBT
bG90KGNvbnN0IFFQaXhtYXAmKTsKKyAgICB2b2lkIHJhbmRvbVNsb3QoY29uc3QgUVBpeG1hcCYp
OworCitzaWduYWxzOgorICAgIHZvaWQgdGVzdENvbXBsZXRlKCk7CisgICAgdm9pZCBpbWFnZVNp
Z25hbChjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lkIHBpeG1hcFNpZ25hbChjb25zdCBRUGl4bWFw
Jik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGNoYW5nZUV2ZW50KFFFdmVudCogZSk7CisKK3By
aXZhdGU6CisgICAgVWk6OldpZGdldCogdWk7Cit9OworCisjZW5kaWYgLy8gd2lkZ2V0X2gKSW5k
ZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3Rz
dF9oeWJyaWRQaXhtYXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICIu
Li91dGlsLmgiCisKKyNpbmNsdWRlICJ3aWRnZXQuaCIKKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0
PgorCitjbGFzcyB0c3RfaHlicmlkUGl4bWFwIDogcHVibGljIFFPYmplY3QgeworICAgIFFfT0JK
RUNUCisKK3B1YmxpYzoKKyAgICB0c3RfaHlicmlkUGl4bWFwKFFPYmplY3QqIG8gPSAwKSA6IFFP
YmplY3Qobykge30KKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgY2xlYW51cCgpCisgICAgeworICAgIH0KKworcHJpdmF0ZSBzbG90czoK
KyAgICB2b2lkIGh5YnJpZFBpeG1hcCgpCisgICAgeworICAgICAgICBXaWRnZXQgd2lkZ2V0Owor
ICAgICAgICB3aWRnZXQuc2hvdygpOworICAgICAgICB3aWRnZXQuc3RhcnQoKTsKKyAgICAgICAg
d2FpdEZvclNpZ25hbCgmd2lkZ2V0LCBTSUdOQUwodGVzdENvbXBsZXRlKCkpKTsKKyAgICB9Cit9
OworCitRVEVTVF9NQUlOKHRzdF9oeWJyaWRQaXhtYXApCisKKyNpbmNsdWRlIDx0c3RfaHlicmlk
UGl4bWFwLm1vYz4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvcmVzb3VyY2Vz
LnFyYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQ
aXhtYXAvcmVzb3VyY2VzLnFyYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACis8UkNDPgor
ICAgIDxxcmVzb3VyY2UgcHJlZml4PSIvIj4KKyAgICAgICAgPGZpbGU+dGVzdC5odG1sPC9maWxl
PgorICAgIDwvcXJlc291cmNlPgorPC9SQ0M+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvdGVzdHMu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy90ZXN0cy5wcm8JKHJldmlzaW9uIDUz
MzY0KQorKysgV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDQgQEAKIAogVEVNUExBVEUgPSBzdWJkaXJzCi1TVUJESVJTID0gcXdlYmZyYW1lIHF3ZWJw
YWdlIHF3ZWJlbGVtZW50IHFncmFwaGljc3dlYnZpZXcgcXdlYmhpc3RvcnlpbnRlcmZhY2UgcXdl
YnZpZXcgcXdlYmhpc3RvcnkgcXdlYmluc3BlY3RvcgorU1VCRElSUyA9IHF3ZWJmcmFtZSBxd2Vi
cGFnZSBxd2ViZWxlbWVudCBxZ3JhcGhpY3N3ZWJ2aWV3IHF3ZWJoaXN0b3J5aW50ZXJmYWNlIHF3
ZWJ2aWV3IHF3ZWJoaXN0b3J5IHF3ZWJpbnNwZWN0b3IgaHlicmlkUGl4bWFwCiBncmVhdGVyVGhh
bihRVF9NSU5PUl9WRVJTSU9OLCA0KTogU1VCRElSUyArPSBiZW5jaG1hcmtzL3BhaW50aW5nIGJl
bmNobWFya3MvbG9hZGluZwpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA1MzM2NCkKKysrIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwMzYsNiArMTAzNiw3IEBACiAgICAgYnJpZGdlL3F0
L3F0X2NsYXNzLmggXAogICAgIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5oIFwKICAgICBicmlkZ2Uv
cXQvcXRfcnVudGltZS5oIFwKKyAgICBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5oIFwKICAg
ICBicmlkZ2UvcnVudGltZV9hcnJheS5oIFwKICAgICBicmlkZ2UvcnVudGltZS5oIFwKICAgICBi
cmlkZ2UvcnVudGltZV9tZXRob2QuaCBcCkBAIC0xOTM1LDYgKzE5MzYsNyBAQAogICAgIGJpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXJRdC5jcHAgXAogICAgIGJyaWRnZS9xdC9xdF9jbGFzcy5j
cHAgXAogICAgIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAgXAorICAgIGJyaWRnZS9xdC9xdF9w
aXhtYXBydW50aW1lLmNwcCBcCiAgICAgYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwIFwKICAgICBw
YWdlL3F0L0RyYWdDb250cm9sbGVyUXQuY3BwIFwKICAgICBwYWdlL3F0L0V2ZW50SGFuZGxlclF0
LmNwcCBcCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzTGF5ZXJR
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0xheWVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXht
YXBydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdlYkNvcmUvYnJpZGdl
L3F0L3F0X3BpeG1hcHJ1bnRpbWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInF0X3BpeG1hcHJ1bnRpbWUuaCIKKworI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSFRNTElt
YWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKKyNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0xvY2su
aCIKKyNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJTdGlsbEltYWdlUXQu
aCIKKyNpbmNsdWRlIDxRQnVmZmVyPgorI2luY2x1ZGUgPFFCeXRlQXJyYXk+CisjaW5jbHVkZSA8
UUltYWdlPgorI2luY2x1ZGUgPFFQaXhtYXA+CisjaW5jbHVkZSA8UVZhcmlhbnQ+CisjaW5jbHVk
ZSA8cnVudGltZV9vYmplY3QuaD4KKyNpbmNsdWRlIDxydW50aW1lX3Jvb3QuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJpbmRpbmdz
IHsKKworY2xhc3MgUXRQaXhtYXBDbGFzcyA6IHB1YmxpYyBDbGFzcyB7CitwdWJsaWM6CisgICAg
UXRQaXhtYXBDbGFzcygpOworICAgIHZpcnR1YWwgTWV0aG9kTGlzdCBtZXRob2RzTmFtZWQoY29u
c3QgSWRlbnRpZmllciYsIEluc3RhbmNlKikgY29uc3Q7CisgICAgdmlydHVhbCBGaWVsZCogZmll
bGROYW1lZChjb25zdCBJZGVudGlmaWVyJiwgSW5zdGFuY2UqKSBjb25zdDsKK307CisKKworY2xh
c3MgUXRQaXhtYXBXaWR0aEZpZWxkIDogcHVibGljIEZpZWxkIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgY29uc3QgY2hhciogbmFtZSgpIHsgcmV0dXJuICJ3aWR0aCI7IH0KKyAgICB2aXJ0dWFsIEpT
VmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSog
cGl4bWFwKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRp
Y19jYXN0PGNvbnN0IFF0UGl4bWFwSW5zdGFuY2UqPihwaXhtYXApLT53aWR0aCgpKTsKKyAgICB9
CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJ
bnN0YW5jZSosIEpTVmFsdWUpIGNvbnN0IHt9Cit9OworY2xhc3MgUXRQaXhtYXBIZWlnaHRGaWVs
ZCA6IHB1YmxpYyBGaWVsZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUo
KSB7IHJldHVybiAiaGVpZ2h0IjsgfQorICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZUZyb21JbnN0
YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEluc3RhbmNlKiBpbnN0KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIHN0YXRpY19jYXN0PGNvbnN0IFF0UGl4bWFw
SW5zdGFuY2UqPihpbnN0KS0+aGVpZ2h0KCkpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKiwgSlNWYWx1ZSkgY29u
c3Qge30KK307CisKK2NsYXNzIFF0UGl4bWFwUnVudGltZU1ldGhvZCA6IHB1YmxpYyBNZXRob2Qg
eworcHVibGljOgorICAgIHZpcnR1YWwgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2UoRXhl
Y1N0YXRlKiBleGVjLCBRVmFyaWFudCYsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgUXRQ
aXhtYXBJbnN0YW5jZSogaW5zdCkgPSAwOworCit9OworCitjbGFzcyBRdFBpeG1hcENyZWF0ZUVs
ZW1lbnRNZXRob2QgOiBwdWJsaWMgUXRQaXhtYXBSdW50aW1lTWV0aG9kIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsgcmV0dXJuICJ0b0hUTUxJbWFnZUVsZW1lbnQi
OyB9CisgICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0YXRlKiBleGVjLCBRVmFyaWFudCYgdiwgUGFz
c1JlZlB0cjxSb290T2JqZWN0PiByb290LCBRdFBpeG1hcEluc3RhbmNlKikKKyAgICB7CisgICAg
ICAgIFFQaXhtYXAgcHhtOworICAgICAgICBpZiAodi50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZh
cmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkpIHsKKyAgICAgICAgICAgIHB4bSA9
IFFQaXhtYXA6OmZyb21JbWFnZSh2LnZhbHVlPFFJbWFnZT4oKSk7CisgICAgICAgICAgICB2ID0g
UVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFwPihweG0pOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHB4bSA9IHYudmFsdWU8UVBpeG1hcD4oKTsKKworICAgICAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSAwOworICAgICAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsID0gc3RhdGljX2Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihyb290LT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGlm
IChnbG9iYWwpIHsKKyAgICAgICAgICAgIERPTVdpbmRvdyogZFdpbmRvdyA9IHRvRE9NV2luZG93
KGdsb2JhbCk7CisgICAgICAgICAgICBpZiAoZFdpbmRvdykKKyAgICAgICAgICAgICAgICBkb2N1
bWVudCA9IGRXaW5kb3ctPmRvY3VtZW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZG9j
dW1lbnQpIHsKKyAgICAgICAgICAgIFBhc3NSZWZQdHI8U3RpbGxJbWFnZT4gaW1nID0gV2ViQ29y
ZTo6U3RpbGxJbWFnZTo6Y3JlYXRlKHB4bSk7CisgICAgICAgICAgICBSZWZQdHI8SFRNTEltYWdl
RWxlbWVudD4gaW1hZ2UgPSBuZXcgSFRNTEltYWdlRWxlbWVudChIVE1MTmFtZXM6OmltZ1RhZywg
ZG9jdW1lbnQpOworICAgICAgICAgICAgaW1hZ2UtPnNldENhY2hlZEltYWdlKG5ldyBDYWNoZWRJ
bWFnZShpbWcuZ2V0KCkpKTsKKyAgICAgICAgICAgIHRvSlMoZXhlYywgZ2xvYmFsLCBkb2N1bWVu
dCk7CisgICAgICAgICAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBnbG9iYWwsIGltYWdl
LnJlbGVhc2UoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIH0KKworfTsKKworY2xhc3MgUXRQaXhtYXBUb0RhdGFVcmxNZXRob2QgOiBwdWJsaWMgUXRQ
aXhtYXBSdW50aW1lTWV0aG9kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbmFt
ZSgpIHsgcmV0dXJuICJ0b0RhdGFVcmwiOyB9CisgICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0YXRl
KiBleGVjLCBRVmFyaWFudCYgdiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290LCBRdFBpeG1h
cEluc3RhbmNlKikKKyAgICB7CisgICAgICAgIFFJbWFnZSBpbWFnZTsKKyAgICAgICAgLy8gZm9y
IGdldHRpbmcgdGhlIGRhdGEgdXJsLCB3ZSBhbHdheXMgcHJlZmVyIHRoZSBpbWFnZS4KKyAgICAg
ICAgaWYgKHYudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJ
ZDxRUGl4bWFwPigpKSkgeworICAgICAgICAgICAgaW1hZ2UgPSB2LnZhbHVlPFFQaXhtYXA+KCku
dG9JbWFnZSgpOworICAgICAgICAgICAgdiA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihp
bWFnZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW1hZ2UgPSB2LnZhbHVlPFFJbWFn
ZT4oKTsKKyAgICAgICAgUUJ5dGVBcnJheSBiYTsKKyAgICAgICAgUUJ1ZmZlciBiKCZiYSk7Cisg
ICAgICAgIGltYWdlLnNhdmUoJmIsICJQTkciKTsKKyAgICAgICAgY29uc3QgUVN0cmluZyBiNjQg
PSBRU3RyaW5nKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsIikgKyBiYS50b0Jhc2U2NCgpOworICAg
ICAgICBjb25zdCBVU3RyaW5nIHVzdHJpbmcoKFVDaGFyKiliNjQudXRmMTYoKSwgYjY0Lmxlbmd0
aCgpKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVzdHJpbmcpOworICAgIH0KKwor
fTsKKworY2xhc3MgUXRQaXhtYXBUb1N0cmluZ01ldGhvZCA6IHB1YmxpYyBRdFBpeG1hcFJ1bnRp
bWVNZXRob2QgeworICAgIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogbmFtZSgpIHsg
cmV0dXJuICJ0b1N0cmluZyI7IH0KKyAgICBKU1ZhbHVlIGludm9rZShFeGVjU3RhdGUqIGV4ZWMs
IFFWYXJpYW50JiB2LCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIFF0UGl4bWFwSW5zdGFu
Y2UqIGluc3QpCisgICAgeworICAgICAgICByZXR1cm4gaW5zdC0+dmFsdWVPZihleGVjKTsKKyAg
ICB9CisKK307CisKK3N0cnVjdCBRdFBpeG1hcE1ldGFEYXRhIHsKKyAgICBRdFBpeG1hcFRvRGF0
YVVybE1ldGhvZCB0b0RhdGFVcmxNZXRob2Q7CisgICAgUXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0
aG9kIGNyZWF0ZUVsZW1lbnRNZXRob2Q7CisgICAgUXRQaXhtYXBUb1N0cmluZ01ldGhvZCB0b1N0
cmluZ01ldGhvZDsKKyAgICBRdFBpeG1hcEhlaWdodEZpZWxkIGhlaWdodEZpZWxkOworICAgIFF0
UGl4bWFwV2lkdGhGaWVsZCB3aWR0aEZpZWxkOworICAgIFF0UGl4bWFwQ2xhc3MgY2xzOworfSBx
dF9waXhtYXBfbWV0YURhdGE7CisKKy8vIERlcml2ZWQgUnVudGltZU9iamVjdAorY2xhc3MgUXRQ
aXhtYXBSdW50aW1lT2JqZWN0SW1wIDogcHVibGljIFJ1bnRpbWVPYmplY3RJbXAgeworcHVibGlj
OgorICAgIFF0UGl4bWFwUnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPElu
c3RhbmNlPik7CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0dXJlKEpTVmFsdWUgcHJvdG90
eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwg
VHlwZUluZm8oT2JqZWN0VHlwZSwgIFN0cnVjdHVyZUZsYWdzKSk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gUnVudGltZU9i
amVjdEltcDo6U3RydWN0dXJlRmxhZ3MgfCBPdmVycmlkZXNNYXJrQ2hpbGRyZW47CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZzX2luZm87IH0KK307CisKK1F0UGl4bWFwUnVudGltZU9iamVjdEltcDo6UXRQaXhtYXBS
dW50aW1lT2JqZWN0SW1wKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxJbnN0YW5jZT4gaW5z
dGFuY2UpCisgICAgOiBSdW50aW1lT2JqZWN0SW1wKGV4ZWMsIFdlYkNvcmU6OmRlcHJlY2F0ZWRH
ZXRET01TdHJ1Y3R1cmU8UXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wPihleGVjKSwgaW5zdGFuY2Up
Cit7Cit9CisKK2NvbnN0IENsYXNzSW5mbyBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXA6OnNfaW5m
byA9IHsgIlF0UGl4bWFwUnVudGltZU9iamVjdCIsICZSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8s
IDAsIDAgfTsKKworCitRdFBpeG1hcENsYXNzOjpRdFBpeG1hcENsYXNzKCkKK3sKK30KKworCitD
bGFzcyogUXRQaXhtYXBJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zdAoreworICAgIHJldHVybiAm
cXRfcGl4bWFwX21ldGFEYXRhLmNsczsKK30KKworSlNWYWx1ZSBRdFBpeG1hcEluc3RhbmNlOjpp
bnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RzLCBj
b25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIGlmIChtZXRob2RzLnNpemUoKSA9PSAxKSB7Cisg
ICAgICAgIFF0UGl4bWFwUnVudGltZU1ldGhvZCogbXRkID0gc3RhdGljX2Nhc3Q8UXRQaXhtYXBS
dW50aW1lTWV0aG9kKj4obWV0aG9kc1swXSk7ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG10ZC0+
aW52b2tlKGV4ZWMsIGRhdGEsIHJvb3RPYmplY3QoKSwgdGhpcyk7CisgICAgfQorICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworfQorCitNZXRob2RMaXN0IFF0UGl4bWFwQ2xhc3M6Om1ldGhvZHNO
YW1lZChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBJbnN0YW5jZSopIGNvbnN0Cit7Cisg
ICAgTWV0aG9kTGlzdCBtZXRob2RzOworICAgIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFwVG9E
YXRhVXJsTWV0aG9kOjpuYW1lKCkpCisgICAgICAgIG1ldGhvZHMuYXBwZW5kKCZxdF9waXhtYXBf
bWV0YURhdGEudG9EYXRhVXJsTWV0aG9kKTsKKyAgICBlbHNlIGlmIChpZGVudGlmaWVyID09IFF0
UGl4bWFwQ3JlYXRlRWxlbWVudE1ldGhvZDo6bmFtZSgpKQorICAgICAgICBtZXRob2RzLmFwcGVu
ZCgmcXRfcGl4bWFwX21ldGFEYXRhLmNyZWF0ZUVsZW1lbnRNZXRob2QpOworICAgIGVsc2UgaWYg
KGlkZW50aWZpZXIgPT0gUXRQaXhtYXBUb1N0cmluZ01ldGhvZDo6bmFtZSgpKQorICAgICAgICBt
ZXRob2RzLmFwcGVuZCgmcXRfcGl4bWFwX21ldGFEYXRhLnRvU3RyaW5nTWV0aG9kKTsKKyAgICBy
ZXR1cm4gbWV0aG9kczsKK30KKworRmllbGQqIFF0UGl4bWFwQ2xhc3M6OmZpZWxkTmFtZWQoY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSW5zdGFuY2UqKSBjb25zdAoreworICAgIGlmIChp
ZGVudGlmaWVyID09IFF0UGl4bWFwV2lkdGhGaWVsZDo6bmFtZSgpKQorICAgICAgICByZXR1cm4g
JnF0X3BpeG1hcF9tZXRhRGF0YS53aWR0aEZpZWxkOworICAgIGlmIChpZGVudGlmaWVyID09IFF0
UGl4bWFwSGVpZ2h0RmllbGQ6Om5hbWUoKSkKKyAgICAgICAgcmV0dXJuICZxdF9waXhtYXBfbWV0
YURhdGEuaGVpZ2h0RmllbGQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUXRQaXhtYXBJbnN0
YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqZXhlYywgUHJvcGVydHlOYW1lQXJyYXkm
IGFycikKK3sKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRv
RGF0YVVybE1ldGhvZDo6bmFtZSgpKSkpOworICAgIGFyci5hZGQoSWRlbnRpZmllcihleGVjLCBV
U3RyaW5nKFF0UGl4bWFwQ3JlYXRlRWxlbWVudE1ldGhvZDo6bmFtZSgpKSkpOworICAgIGFyci5h
ZGQoSWRlbnRpZmllcihleGVjLCBVU3RyaW5nKFF0UGl4bWFwVG9TdHJpbmdNZXRob2Q6Om5hbWUo
KSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFdpZHRo
RmllbGQ6Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhR
dFBpeG1hcEhlaWdodEZpZWxkOjpuYW1lKCkpKSk7Cit9CisKK0pTVmFsdWUgUXRQaXhtYXBJbnN0
YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlw
ZSBwdHlwZSkgY29uc3QKK3sKKyAgICBpZiAocHR5cGUgPT0gUHJlZmVyTnVtYmVyKSB7CisgICAg
ICAgIHJldHVybiBqc0Jvb2xlYW4oCisgICAgICAgICAgICAgICAgKGRhdGEudHlwZSgpID09IHN0
YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpICYmICEoZGF0
YS52YWx1ZTxRSW1hZ2U+KCkpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIHx8IChkYXRhLnR5
cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4o
KSkgJiYgIWRhdGEudmFsdWU8UVBpeG1hcD4oKS5pc051bGwoKSkpOworICAgIH0KKyAgICBpZiAo
cHR5cGUgPT0gUHJlZmVyU3RyaW5nKQorICAgICAgICByZXR1cm4gdmFsdWVPZihleGVjKTsKKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZSBRdFBpeG1hcEluc3RhbmNlOjp2
YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBjb25zdCBRU3RyaW5nIHRvU3Ry
ID0gUVN0cmluZygiW1F0IE5hdGl2ZSBQaXhtYXAgJTEsJTJdIikuYXJnKHdpZHRoKCkpLmFyZyho
ZWlnaHQoKSk7CisgICAgVVN0cmluZyB1c3RyaW5nKChVQ2hhciopdG9TdHIudXRmMTYoKSwgdG9T
dHIubGVuZ3RoKCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1c3RyaW5nKTsKK30KKwor
UXRQaXhtYXBJbnN0YW5jZTo6UXRQaXhtYXBJbnN0YW5jZShQYXNzUmVmUHRyPFJvb3RPYmplY3Q+
IHJvb3RPYmosIGNvbnN0IFFWYXJpYW50JiBkKQorICAgICAgICA6SW5zdGFuY2Uocm9vdE9iaiks
IGRhdGEoZCkKK3sKK30KKworaW50IFF0UGl4bWFwSW5zdGFuY2U6OndpZHRoKCkgY29uc3QKK3sK
KyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRh
VHlwZUlkPFFQaXhtYXA+KCkpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRUGl4bWFwPigp
LndpZHRoKCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpU
eXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxR
SW1hZ2U+KCkud2lkdGgoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IFF0UGl4bWFwSW5zdGFu
Y2U6OmhlaWdodCgpIGNvbnN0Cit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0
PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkKKyAgICAgICAgcmV0dXJu
IGRhdGEudmFsdWU8UVBpeG1hcD4oKS5oZWlnaHQoKTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0g
c3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkpCisgICAg
ICAgIHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4oKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworUVBpeG1hcCBRdFBpeG1hcEluc3RhbmNlOjp0b1BpeG1hcCgpCit7CisgICAgaWYgKGRh
dGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4
bWFwPigpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU8UVBpeG1hcD4oKTsKKyAgICBpZiAo
ZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFJ
bWFnZT4oKSkpIHsKKyAgICAgICAgY29uc3QgUVBpeG1hcCBweG0gPSBRUGl4bWFwOjpmcm9tSW1h
Z2UoZGF0YS52YWx1ZTxRSW1hZ2U+KCkpOworICAgICAgICBkYXRhID0gUVZhcmlhbnQ6OmZyb21W
YWx1ZTxRUGl4bWFwPihweG0pOworICAgICAgICByZXR1cm4gcHhtOworICAgIH0KKyAgICByZXR1
cm4gUVBpeG1hcCgpOworCit9CisKK1FJbWFnZSBRdFBpeG1hcEluc3RhbmNlOjp0b0ltYWdlKCkK
K3sKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFN
ZXRhVHlwZUlkPFFJbWFnZT4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFJbWFnZT4o
KTsKKyAgICBpZiAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFN
ZXRhVHlwZUlkPFFQaXhtYXA+KCkpKSB7CisgICAgICAgIGNvbnN0IFFJbWFnZSBpbWcgPSBkYXRh
LnZhbHVlPFFQaXhtYXA+KCkudG9JbWFnZSgpOworICAgICAgICBkYXRhID0gUVZhcmlhbnQ6OmZy
b21WYWx1ZTxRSW1hZ2U+KGltZyk7CisgICAgICAgIHJldHVybiBpbWc7CisgICAgfQorICAgIHJl
dHVybiBRSW1hZ2UoKTsKK30KKworUVZhcmlhbnQgUXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZy
b21PYmplY3QoSlNPYmplY3QqIG9iamVjdCwgUU1ldGFUeXBlOjpUeXBlIGhpbnQpCit7CisgICAg
aWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKGhpbnQgPT0gcU1ldGFUeXBlSWQ8UVBpeG1hcD4o
KSkKKyAgICAgICAgICAgIHJldHVybiBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KFFQaXht
YXAoKSk7CisgICAgICAgIGlmIChoaW50ID09IHFNZXRhVHlwZUlkPFFJbWFnZT4oKSkKKyAgICAg
ICAgICAgIHJldHVybiBRVmFyaWFudDo6ZnJvbVZhbHVlPFFJbWFnZT4oUUltYWdlKCkpOworICAg
IH0gZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNIVE1MSW1hZ2VFbGVtZW50OjpzX2luZm8p
KSB7CisgICAgICAgIEpTSFRNTEltYWdlRWxlbWVudCogZWwgPSBzdGF0aWNfY2FzdDxKU0hUTUxJ
bWFnZUVsZW1lbnQqPihvYmplY3QpOworICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oZWwtPmltcGwoKSk7CisgICAg
ICAgIGlmIChpbWFnZUVsZW1lbnQpIHsKKyAgICAgICAgICAgIENhY2hlZEltYWdlKiBjSW1nID0g
aW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpOworICAgICAgICAgICAgaWYgKGNJbWcpIHsKKyAg
ICAgICAgICAgICAgICBJbWFnZSogaW1nID0gY0ltZy0+aW1hZ2UoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaW1nKSB7CisgICAgICAgICAgICAgICAgICAgIFFQaXhtYXAqIHB4bSA9IGltZy0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB4bSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChoaW50ID09IHN0YXRpY19jYXN0PFFN
ZXRhVHlwZTo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4oKnB4bSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogUVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KHB4
bS0+dG9JbWFnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0
cygmUXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8pKSB7CisgICAgICAgIFF0UGl4bWFw
UnVudGltZU9iamVjdEltcCogaW1wID0gc3RhdGljX2Nhc3Q8UXRQaXhtYXBSdW50aW1lT2JqZWN0
SW1wKj4ob2JqZWN0KTsKKyAgICAgICAgUXRQaXhtYXBJbnN0YW5jZSogaW5zdCA9IHN0YXRpY19j
YXN0PFF0UGl4bWFwSW5zdGFuY2UqPihpbXAtPmdldEludGVybmFsSW5zdGFuY2UoKSk7CisgICAg
ICAgIGlmIChpbnN0KSB7CisgICAgICAgICAgICBpZiAoaGludCA9PSBxTWV0YVR5cGVJZDxRUGl4
bWFwID4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4
bWFwPihpbnN0LT50b1BpeG1hcCgpKTsKKyAgICAgICAgICAgIGlmIChoaW50ID09IHFNZXRhVHlw
ZUlkPFFJbWFnZT4oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQ6OmZyb21WYWx1
ZTxRSW1hZ2U+KGluc3QtPnRvSW1hZ2UoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IDA7Cit9CitKU09iamVjdCogUXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUnVudGltZU9iamVjdChF
eGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgY29uc3QgUVZhcmlh
bnQmIGRhdGEpCit7CisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAg
ICByZXR1cm4gbmV3KGV4ZWMpIFF0UGl4bWFwUnVudGltZU9iamVjdEltcChleGVjLCBuZXcgUXRQ
aXhtYXBJbnN0YW5jZShyb290LCBkYXRhKSk7Cit9CisKK2Jvb2wgUXRQaXhtYXBJbnN0YW5jZTo6
Y2FuSGFuZGxlKFFNZXRhVHlwZTo6VHlwZSBoaW50KQoreworICAgIHJldHVybiBoaW50ID09IHFN
ZXRhVHlwZUlkPFFJbWFnZT4oKSB8fCBoaW50ID09IHFNZXRhVHlwZUlkPFFQaXhtYXA+KCk7Cit9
CisKK30KKworfQpJbmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHJldmlzaW9uIDUzMzY0
KQorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJxb2JqZWN0LmgiCiAjaW5jbHVkZSAicXN0cmluZ2xp
c3QuaCIKICNpbmNsdWRlICJxdF9pbnN0YW5jZS5oIgorI2luY2x1ZGUgInF0X3BpeG1hcHJ1bnRp
bWUuaCIKICNpbmNsdWRlICJxdmFybGVuZ3RoYXJyYXkuaCIKICNpbmNsdWRlIDxKU0Z1bmN0aW9u
Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC03MjAsNiArNzIxLDggQEAKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19j
YXN0PFFNZXRhVHlwZTo6VHlwZT4oaGludCkpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gUXRQ
aXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3Qob2JqZWN0LCBzdGF0aWNfY2FzdDxRTWV0
YVR5cGU6OlR5cGU+KGhpbnQpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSAoUU1l
dGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRVmFyaWFudD4oKSkgewogICAgICAgICAgICAgICAg
IGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChkaXN0YW5jZSkKQEAgLTg0OSw2ICs4NTIsOSBAQAogICAgICAgICByZXR1cm4gUXRJbnN0YW5j
ZTo6Z2V0UXRJbnN0YW5jZShvYmosIHJvb3QsIFFTY3JpcHRFbmdpbmU6OlF0T3duZXJzaGlwKS0+
Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAKKyAgICBpZiAoUXRQaXhtYXBJbnN0
YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4odmFyaWFudC50eXBl
KCkpKSkKKyAgICAgICAgcmV0dXJuIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QoZXhlYywgcm9vdCwgdmFyaWFudCk7CisKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFW
YXJpYW50TWFwKSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBvYmplY3QsIGFuZCBzdHVmZiBw
cm9wZXJ0aWVzIGludG8gaXQKICAgICAgICAgSlNPYmplY3QqIHJldCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMpOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFw
cnVudGltZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgcXRfcGl4bWFwcnVu
dGltZV9oCisjZGVmaW5lIHF0X3BpeG1hcHJ1bnRpbWVfaAorCisjaW5jbHVkZSAicnVudGltZS5o
IgorI2luY2x1ZGUgPFFWYXJpYW50PgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIEJp
bmRpbmdzIHsKKworY2xhc3MgUXRQaXhtYXBJbnN0YW5jZSA6IHB1YmxpYyBJbnN0YW5jZSB7Cisg
ICAgUVZhcmlhbnQgZGF0YTsKK3B1YmxpYzoKKyAgICBRdFBpeG1hcEluc3RhbmNlKFBhc3NSZWZQ
dHI8Um9vdE9iamVjdD4gcm9vdE9iaiwgY29uc3QgUVZhcmlhbnQmIG5ld0RhdGEpOworICAgIHZp
cnR1YWwgQ2xhc3MqIGdldENsYXNzKCkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9r
ZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYgYXJn
cyk7CisgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lQXJyYXkmKTsKKworICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0
YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVl
IHZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKSBjb25zdDsKKyAgICBpbnQgd2lkdGgoKSBjb25zdDsK
KyAgICBpbnQgaGVpZ2h0KCkgY29uc3Q7CisgICAgUVBpeG1hcCB0b1BpeG1hcCgpOworICAgIFFJ
bWFnZSB0b0ltYWdlKCk7CisgICAgc3RhdGljIEpTT2JqZWN0KiBjcmVhdGVSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4sIGNvbnN0IFFWYXJpYW50Jik7Cisg
ICAgc3RhdGljIFFWYXJpYW50IHZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiwgUU1ldGFUeXBl
OjpUeXBlIGhpbnQpOworICAgIHN0YXRpYyBib29sIGNhbkhhbmRsZShRTWV0YVR5cGU6OlR5cGUg
aGludCk7Cit9OworCit9CisKK30KKyNlbmRpZgo=
</data>
<flag name="review"
          id="29177"
          type_id="1"
          status="-"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="29178"
          type_id="3"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46974</attachid>
            <date>2010-01-19 21:18:10 -0800</date>
            <delta_ts>2010-01-19 22:29:25 -0800</delta_ts>
            <desc>ChangeLog added, created with svn-create-patch</desc>
            <filename>patch-hybrid-pixmap-9.diff</filename>
            <type>text/plain</type>
            <size>36000</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzUxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIgQEAKKzIwMTAtMDEtMTkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50
aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIEFkZGluZyBRUGl4bWFwL1FJbWFnZSBzdXBwb3J0IGZvciB0aGUgUXQgaHli
cmlkIGxheWVyCisJQWxsb3dzIGFjY2VzaW5nIFFQaXhtYXAgYW5kIFFJbWFnZSBiYXNlZCBhcmd1
bWVudHMgZnJvbSBRdCBzaWduYWxzLAorCXNsb3RzIGFuZCBwcm9wZXJ0aWVzCisJVGhpcyBpcyBk
b25lIGJ5IGFuIGludGVybWVkaWF0ZSBvYmplY3QgdGhhdCBjYW4gYmUgdHVybmVkIGludG8KKwl3
ZWItYmFzZWQgb2JqZWN0cyBieSBjYWxsaW5nIGVpdGhlciB0b0hUTUxJbWFnZUVsZW1lbnQoKSBv
cgorCXRvRGF0YVVSTCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0zMjQ2MQorCisgICAgICAgIFRlc3RzIGFyZSBpbiBXZWJLaXQvcXQvdGVzdHMvaHli
cmlkUGl4bWFwCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBicmlkZ2UvcXQv
cXRfcGl4bWFwcnVudGltZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQ
aXhtYXBXaWR0aEZpZWxkOjpuYW1lKTogIndpZHRoIgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRQaXhtYXBXaWR0aEZpZWxkOjp2YWx1ZUZyb21JbnN0YW5jZSk6IHdpZHRoIG9mCisJcGl4bWFw
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFdpZHRoRmllbGQ6OnNldFZhbHVlVG9J
bnN0YW5jZSk6IG5vdGhpbmcKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSGVpZ2h0
RmllbGQ6Om5hbWUpOiAiaGVpZ2h0IgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBI
ZWlnaHRGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UpOiBoZWlnaHQgb2YKKwlwaXhtYXAKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSGVpZ2h0RmllbGQ6OnNldFZhbHVlVG9JbnN0YW5j
ZSk6IG5vdGhpbmcKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwUnVudGltZU1ldGhv
ZDo6bnVtUGFyYW1ldGVycyk6IDAKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwQ3Jl
YXRlRWxlbWVudE1ldGhvZDo6bmFtZSk6IHRvSFRNTEltYWdlRWxlbWVudAorICAgICAgICAoSlND
OjpCaW5kaW5nczo6UXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0aG9kOjppbnZva2UpOiBjcmVhdGVz
IGFuIEhUTUwKKwllbGVtZW50IGZyb20gdGhlIFFQaXhtYXAKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kOjpuYW1lKTogInRvRGF0YVVSTCIKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kOjppbnZva2UpOiBlbmNvZGVz
IHRoZSBpbWFnZSB0bworCWEgYmFzZTY0IGRhdGEgdXJsCisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpRdFBpeG1hcFRvU3RyaW5nTWV0aG9kOjpuYW1lKTogInRvU3RyaW5nIgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6UXRQaXhtYXBUb1N0cmluZ01ldGhvZDo6aW52b2tlKTogW1F0IE5hdGl2ZSBQ
aXhtYXAKKwl3LGhdCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFJ1bnRpbWVPYmpl
Y3RJbXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisJcnVudGltZS1vYmplY3QgYnJvaWxlcnBsYXRlCisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXA6OmNsYXNzSW5m
byk6IGRpdHRvCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFJ1bnRpbWVPYmplY3RJ
bXA6OlF0UGl4bWFwUnVudGltZU9iamVjdEltcCk6CisJZGl0dG8KKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6Oik6IGRpdHRvCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcENsYXNzOjpR
dFBpeG1hcENsYXNzKTogY2xhc3MgZm9yIHRoZQorCWludGVybWVkaWF0ZSBwaXhtYXAtaG9sZGVy
IAorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6Z2V0Q2xhc3MpOiBk
aXR0bworICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6aW52b2tlTWV0
aG9kKTogZGl0dG8KKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwQ2xhc3M6Om1ldGhv
ZHNOYW1lZCk6IHRvSFRNTEltYWdlRWxlbWVudCwKKwl0b0RhdGFVUkwKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlF0UGl4bWFwQ2xhc3M6OmZpZWxkTmFtZWQpOiB3aWR0aCwgaGVpZ2h0CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjpnZXRQcm9wZXJ0eU5hbWVzKToK
Kwl0b0hUTUxJbWFnZUVsZW1lbnQsIHRvRGF0YVVSTCwgd2lkdGgsIGhlaWdodAorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKTogbm90aGluZwor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6dmFsdWVPZik6IHRvU3Ry
aW5nCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpkYXRhKTogaG9sZHMgYSBRVmFyaWFudCBvZiB0
eXBlIFFJbWFnZS9RUGl4bWFwCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3Rh
bmNlOjp3aWR0aCk6IHdpZHRoIG9mIHRoZSBpbWFnZS9waXhtYXAKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OmhlaWdodCk6IGhlaWdodCBvZiB0aGUgaW1hZ2UvcGl4
bWFwCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjp0b1BpeG1hcCk6
IGNvbnZlcnRzIHRvIGEgUVBpeG1hcAorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJ
bnN0YW5jZTo6dG9JbWFnZSk6IGNvbnZlcnRzIHRvIGEgUUltYWdlCisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjp2YXJpYW50RnJvbU9iamVjdCk6IG1ha2VzIHN1cmUg
dGhpcworCWlzIHRoZSByaWdodCB0eXBlIG9mIG9iamVjdCwgYW5kIGNyZWF0ZXMgYSBRVmFyaWFu
dAorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUnVudGlt
ZU9iamVjdCk6IGNyZWF0ZXMgYSBuZXcKKwlpbnRlcm1lZGlhdGUgcGl4bWFwIGhvbGRlciBmcm9t
IGEgUVZhcmlhbnQKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OmNh
bkhhbmRsZSk6IHJldHVybnMgdHJ1ZSBpZiBhCisJUVBpeG1hcC9RSW1hZ2UgaXMgcmVxdWlyZWQK
KyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5oOiBBZGRlZC4KKyAgICAgICAg
KiBicmlkZ2UvcXQvcXRfcnVudGltZS5jcHA6IGhvb2tzIGZvciB0aGUgYnJpZGdlCisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KTogaGFuZGxlIFFQaXhtYXAv
UUltYWdlIGlmIHRoZQorCW9iamVjdCBpcyB0aGUgaW50ZXJtZWRpYXRlIHBpeG1hcCBob2xkZXIg
b3IgYW4gSFRNTEltYWdlRWxlbWVudAorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFFW
YXJpYW50VG9WYWx1ZSk6IGNyZWF0ZXMgdGhlIGludGVybWVkaWF0ZQorCW9iamVjdCBmcm9tIGEg
UVZhcmlhbnQgb2YgdHlwZSBRSW1hZ2UvUVBpeG1hcAorCiAyMDEwLTAxLTE5ICBNYWNpZWogU3Rh
Y2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXgu
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKHJldmlzaW9uIDUzNDI3KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBj
b3B5KQpAQCAtMTAzNiw2ICsxMDM2LDcgQEAgSEVBREVSUyArPSBcCiAgICAgYnJpZGdlL3F0L3F0
X2NsYXNzLmggXAogICAgIGJyaWRnZS9xdC9xdF9pbnN0YW5jZS5oIFwKICAgICBicmlkZ2UvcXQv
cXRfcnVudGltZS5oIFwKKyAgICBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5oIFwKICAgICBi
cmlkZ2UvcnVudGltZV9hcnJheS5oIFwKICAgICBicmlkZ2UvcnVudGltZS5oIFwKICAgICBicmlk
Z2UvcnVudGltZV9tZXRob2QuaCBcCkBAIC0xOTM1LDYgKzE5MzYsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyUXQuY3BwIFwKICAgICBicmlkZ2UvcXQv
cXRfY2xhc3MuY3BwIFwKICAgICBicmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwIFwKKyAgICBicmlk
Z2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAgXAogICAgIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNw
cCBcCiAgICAgcGFnZS9xdC9EcmFnQ29udHJvbGxlclF0LmNwcCBcCiAgICAgcGFnZS9xdC9FdmVu
dEhhbmRsZXJRdC5jcHAgXApJbmRleDogV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGlt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJxdF9waXhtYXBydW50aW1lLmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNIVE1M
SW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJv
dG90eXBlLmgiCisjaW5jbHVkZSAiU3RpbGxJbWFnZVF0LmgiCisjaW5jbHVkZSA8UUJ1ZmZlcj4K
KyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2luY2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRUGl4
bWFwPgorI2luY2x1ZGUgPFFWYXJpYW50PgorI2luY2x1ZGUgPHJ1bnRpbWVfb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8cnVudGltZV9yb290Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFt
ZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBCaW5kaW5ncyB7CisKK2NsYXNzIFF0UGl4bWFwQ2xh
c3MgOiBwdWJsaWMgQ2xhc3MgeworcHVibGljOgorICAgIFF0UGl4bWFwQ2xhc3MoKTsKKyAgICB2
aXJ0dWFsIE1ldGhvZExpc3QgbWV0aG9kc05hbWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5j
ZSopIGNvbnN0OworICAgIHZpcnR1YWwgRmllbGQqIGZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmll
ciYsIEluc3RhbmNlKikgY29uc3Q7Cit9OworCisKK2NsYXNzIFF0UGl4bWFwV2lkdGhGaWVsZCA6
IHB1YmxpYyBGaWVsZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7
IHJldHVybiAid2lkdGgiOyB9CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIHBpeG1hcCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxjb25zdCBRdFBpeG1hcElu
c3RhbmNlKj4ocGl4bWFwKS0+d2lkdGgoKSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25z
dCB7fQorfTsKK2NsYXNzIFF0UGl4bWFwSGVpZ2h0RmllbGQgOiBwdWJsaWMgRmllbGQgeworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBuYW1lKCkgeyByZXR1cm4gImhlaWdodCI7IH0K
KyAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJbnN0YW5jZSogaW5zdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJl
cihleGVjLCBzdGF0aWNfY2FzdDxjb25zdCBRdFBpeG1hcEluc3RhbmNlKj4oaW5zdCktPmhlaWdo
dCgpKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3Rh
dGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUpIGNvbnN0IHt9Cit9OworCitjbGFzcyBRdFBp
eG1hcFJ1bnRpbWVNZXRob2QgOiBwdWJsaWMgTWV0aG9kIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQm
LCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIFF0UGl4bWFwSW5zdGFuY2UqIGluc3QpID0g
MDsKKworfTsKKworY2xhc3MgUXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0aG9kIDogcHVibGljIFF0
UGl4bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5h
bWUoKSB7IHJldHVybiAidG9IVE1MSW1hZ2VFbGVtZW50IjsgfQorICAgIEpTVmFsdWUgaW52b2tl
KEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQmIHYsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9v
dCwgUXRQaXhtYXBJbnN0YW5jZSopCisgICAgeworICAgICAgICBRUGl4bWFwIHB4bTsKKyAgICAg
ICAgaWYgKHYudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJ
ZDxRSW1hZ2U+KCkpKSB7CisgICAgICAgICAgICBweG0gPSBRUGl4bWFwOjpmcm9tSW1hZ2Uodi52
YWx1ZTxRSW1hZ2U+KCkpOworICAgICAgICAgICAgdiA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBp
eG1hcD4ocHhtKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBweG0gPSB2LnZhbHVlPFFQ
aXhtYXA+KCk7CisKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gMDsKKyAgICAgICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbCA9IHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
cm9vdC0+Z2xvYmFsT2JqZWN0KCkpOworICAgICAgICBpZiAoZ2xvYmFsKSB7CisgICAgICAgICAg
ICBET01XaW5kb3cqIGRXaW5kb3cgPSB0b0RPTVdpbmRvdyhnbG9iYWwpOworICAgICAgICAgICAg
aWYgKGRXaW5kb3cpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBkV2luZG93LT5kb2N1bWVu
dCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRvY3VtZW50KSB7CisgICAgICAgICAgICBQ
YXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGltZyA9IFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZShw
eG0pOworICAgICAgICAgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gbmV3IEhU
TUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcsIGRvY3VtZW50KTsKKyAgICAgICAgICAg
IGltYWdlLT5zZXRDYWNoZWRJbWFnZShuZXcgQ2FjaGVkSW1hZ2UoaW1nLmdldCgpKSk7CisgICAg
ICAgICAgICB0b0pTKGV4ZWMsIGdsb2JhbCwgZG9jdW1lbnQpOworICAgICAgICAgICAgcmV0dXJu
IGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFsLCBpbWFnZS5yZWxlYXNlKCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKK307CisKK2NsYXNzIFF0
UGl4bWFwVG9EYXRhVXJsTWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1ldGhvZCB7Citw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAidG9EYXRhVXJs
IjsgfQorICAgIEpTVmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQmIHYsIFBh
c3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgUXRQaXhtYXBJbnN0YW5jZSopCisgICAgeworICAg
ICAgICBRSW1hZ2UgaW1hZ2U7CisgICAgICAgIC8vIGZvciBnZXR0aW5nIHRoZSBkYXRhIHVybCwg
d2UgYWx3YXlzIHByZWZlciB0aGUgaW1hZ2UuCisgICAgICAgIGlmICh2LnR5cGUoKSA9PSBzdGF0
aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpIHsKKyAgICAg
ICAgICAgIGltYWdlID0gdi52YWx1ZTxRUGl4bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgICAg
IHYgPSBRVmFyaWFudDo6ZnJvbVZhbHVlPFFJbWFnZT4oaW1hZ2UpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGltYWdlID0gdi52YWx1ZTxRSW1hZ2U+KCk7CisgICAgICAgIFFCeXRlQXJy
YXkgYmE7CisgICAgICAgIFFCdWZmZXIgYigmYmEpOworICAgICAgICBpbWFnZS5zYXZlKCZiLCAi
UE5HIik7CisgICAgICAgIGNvbnN0IFFTdHJpbmcgYjY0ID0gUVN0cmluZygiZGF0YTppbWFnZS9w
bmc7YmFzZTY0LCIpICsgYmEudG9CYXNlNjQoKTsKKyAgICAgICAgY29uc3QgVVN0cmluZyB1c3Ry
aW5nKChVQ2hhciopYjY0LnV0ZjE2KCksIGI2NC5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCB1c3RyaW5nKTsKKyAgICB9CisKK307CisKK2NsYXNzIFF0UGl4bWFwVG9T
dHJpbmdNZXRob2QgOiBwdWJsaWMgUXRQaXhtYXBSdW50aW1lTWV0aG9kIHsKKyAgICBwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAidG9TdHJpbmciOyB9Cisg
ICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0YXRlKiBleGVjLCBRVmFyaWFudCYgdiwgUGFzc1JlZlB0
cjxSb290T2JqZWN0PiByb290LCBRdFBpeG1hcEluc3RhbmNlKiBpbnN0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluc3QtPnZhbHVlT2YoZXhlYyk7CisgICAgfQorCit9OworCitzdHJ1Y3QgUXRQ
aXhtYXBNZXRhRGF0YSB7CisgICAgUXRQaXhtYXBUb0RhdGFVcmxNZXRob2QgdG9EYXRhVXJsTWV0
aG9kOworICAgIFF0UGl4bWFwQ3JlYXRlRWxlbWVudE1ldGhvZCBjcmVhdGVFbGVtZW50TWV0aG9k
OworICAgIFF0UGl4bWFwVG9TdHJpbmdNZXRob2QgdG9TdHJpbmdNZXRob2Q7CisgICAgUXRQaXht
YXBIZWlnaHRGaWVsZCBoZWlnaHRGaWVsZDsKKyAgICBRdFBpeG1hcFdpZHRoRmllbGQgd2lkdGhG
aWVsZDsKKyAgICBRdFBpeG1hcENsYXNzIGNsczsKK30gcXRfcGl4bWFwX21ldGFEYXRhOworCisv
LyBEZXJpdmVkIFJ1bnRpbWVPYmplY3QKK2NsYXNzIFF0UGl4bWFwUnVudGltZU9iamVjdEltcCA6
IHB1YmxpYyBSdW50aW1lT2JqZWN0SW1wIHsKK3B1YmxpYzoKKyAgICBRdFBpeG1hcFJ1bnRpbWVP
YmplY3RJbXAoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxJbnN0YW5jZT4pOworCisgICAgc3RhdGlj
IGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsICBT
dHJ1Y3R1cmVGbGFncykpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFJ1bnRpbWVPYmplY3RJbXA6OlN0cnVjdHVyZUZsYWdz
IHwgT3ZlcnJpZGVzTWFya0NoaWxkcmVuOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Cit9OworCitR
dFBpeG1hcFJ1bnRpbWVPYmplY3RJbXA6OlF0UGl4bWFwUnVudGltZU9iamVjdEltcChFeGVjU3Rh
dGUqIGV4ZWMsIFBhc3NSZWZQdHI8SW5zdGFuY2U+IGluc3RhbmNlKQorICAgIDogUnVudGltZU9i
amVjdEltcChleGVjLCBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPFF0UGl4bWFw
UnVudGltZU9iamVjdEltcD4oZXhlYyksIGluc3RhbmNlKQoreworfQorCitjb25zdCBDbGFzc0lu
Zm8gUXRQaXhtYXBSdW50aW1lT2JqZWN0SW1wOjpzX2luZm8gPSB7ICJRdFBpeG1hcFJ1bnRpbWVP
YmplY3QiLCAmUnVudGltZU9iamVjdEltcDo6c19pbmZvLCAwLCAwIH07CisKKworUXRQaXhtYXBD
bGFzczo6UXRQaXhtYXBDbGFzcygpCit7Cit9CisKKworQ2xhc3MqIFF0UGl4bWFwSW5zdGFuY2U6
OmdldENsYXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJnF0X3BpeG1hcF9tZXRhRGF0YS5jbHM7
Cit9CisKK0pTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9kcywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sK
KyAgICBpZiAobWV0aG9kcy5zaXplKCkgPT0gMSkgeworICAgICAgICBRdFBpeG1hcFJ1bnRpbWVN
ZXRob2QqIG10ZCA9IHN0YXRpY19jYXN0PFF0UGl4bWFwUnVudGltZU1ldGhvZCo+KG1ldGhvZHNb
MF0pOyAgICAgICAgCisgICAgICAgIHJldHVybiBtdGQtPmludm9rZShleGVjLCBkYXRhLCByb290
T2JqZWN0KCksIHRoaXMpOworICAgIH0KKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwor
TWV0aG9kTGlzdCBRdFBpeG1hcENsYXNzOjptZXRob2RzTmFtZWQoY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllciwgSW5zdGFuY2UqKSBjb25zdAoreworICAgIE1ldGhvZExpc3QgbWV0aG9kczsK
KyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFRvRGF0YVVybE1ldGhvZDo6bmFtZSgpKQor
ICAgICAgICBtZXRob2RzLmFwcGVuZCgmcXRfcGl4bWFwX21ldGFEYXRhLnRvRGF0YVVybE1ldGhv
ZCk7CisgICAgZWxzZSBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRo
b2Q6Om5hbWUoKSkKKyAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS5j
cmVhdGVFbGVtZW50TWV0aG9kKTsKKyAgICBlbHNlIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFw
VG9TdHJpbmdNZXRob2Q6Om5hbWUoKSkKKyAgICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1h
cF9tZXRhRGF0YS50b1N0cmluZ01ldGhvZCk7CisgICAgcmV0dXJuIG1ldGhvZHM7Cit9CisKK0Zp
ZWxkKiBRdFBpeG1hcENsYXNzOjpmaWVsZE5hbWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIsIEluc3RhbmNlKikgY29uc3QKK3sKKyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFdp
ZHRoRmllbGQ6Om5hbWUoKSkKKyAgICAgICAgcmV0dXJuICZxdF9waXhtYXBfbWV0YURhdGEud2lk
dGhGaWVsZDsKKyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcEhlaWdodEZpZWxkOjpuYW1l
KCkpCisgICAgICAgIHJldHVybiAmcXRfcGl4bWFwX21ldGFEYXRhLmhlaWdodEZpZWxkOworICAg
IHJldHVybiAwOworfQorCit2b2lkIFF0UGl4bWFwSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMo
RXhlY1N0YXRlKmV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnIpCit7CisgICAgYXJyLmFkZChJ
ZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkp
KTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcENyZWF0ZUVs
ZW1lbnRNZXRob2Q6Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0
cmluZyhRdFBpeG1hcFRvU3RyaW5nTWV0aG9kOjpuYW1lKCkpKSk7CisgICAgYXJyLmFkZChJZGVu
dGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBXaWR0aEZpZWxkOjpuYW1lKCkpKSk7CisgICAg
YXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXhtYXBIZWlnaHRGaWVsZDo6bmFt
ZSgpKSkpOworfQorCitKU1ZhbHVlIFF0UGl4bWFwSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUgcHR5cGUpIGNvbnN0Cit7CisgICAg
aWYgKHB0eXBlID09IFByZWZlck51bWJlcikgeworICAgICAgICByZXR1cm4ganNCb29sZWFuKAor
ICAgICAgICAgICAgICAgIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlw
ZT4ocU1ldGFUeXBlSWQ8UUltYWdlPigpKSAmJiAhKGRhdGEudmFsdWU8UUltYWdlPigpKS5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICB8fCAoZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZh
cmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpICYmICFkYXRhLnZhbHVlPFFQaXht
YXA+KCkuaXNOdWxsKCkpKTsKKyAgICB9CisgICAgaWYgKHB0eXBlID09IFByZWZlclN0cmluZykK
KyAgICAgICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Cit9CisKK0pTVmFsdWUgUXRQaXhtYXBJbnN0YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0Cit7CisgICAgY29uc3QgUVN0cmluZyB0b1N0ciA9IFFTdHJpbmcoIltRdCBOYXRpdmUg
UGl4bWFwICUxLCUyXSIpLmFyZyh3aWR0aCgpKS5hcmcoaGVpZ2h0KCkpOworICAgIFVTdHJpbmcg
dXN0cmluZygoVUNoYXIqKXRvU3RyLnV0ZjE2KCksIHRvU3RyLmxlbmd0aCgpKTsKKyAgICByZXR1
cm4ganNTdHJpbmcoZXhlYywgdXN0cmluZyk7Cit9CisKK1F0UGl4bWFwSW5zdGFuY2U6OlF0UGl4
bWFwSW5zdGFuY2UoUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqLCBjb25zdCBRVmFyaWFu
dCYgZCkKKyAgICAgICAgOkluc3RhbmNlKHJvb3RPYmopLCBkYXRhKGQpCit7Cit9CisKK2ludCBR
dFBpeG1hcEluc3RhbmNlOjp3aWR0aCgpIGNvbnN0Cit7CisgICAgaWYgKGRhdGEudHlwZSgpID09
IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkKKyAg
ICAgICAgcmV0dXJuIGRhdGEudmFsdWU8UVBpeG1hcD4oKS53aWR0aCgpOworICAgIGlmIChkYXRh
LnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUltYWdl
PigpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU8UUltYWdlPigpLndpZHRoKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2ludCBRdFBpeG1hcEluc3RhbmNlOjpoZWlnaHQoKSBjb25zdAorewor
ICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFU
eXBlSWQ8UVBpeG1hcD4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCku
aGVpZ2h0KCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpU
eXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxR
SW1hZ2U+KCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1FQaXhtYXAgUXRQaXhtYXBJ
bnN0YW5jZTo6dG9QaXhtYXAoKQoreworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2Fz
dDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpCisgICAgICAgIHJldHVy
biBkYXRhLnZhbHVlPFFQaXhtYXA+KCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19j
YXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKSB7CisgICAgICAgIGNv
bnN0IFFQaXhtYXAgcHhtID0gUVBpeG1hcDo6ZnJvbUltYWdlKGRhdGEudmFsdWU8UUltYWdlPigp
KTsKKyAgICAgICAgZGF0YSA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4ocHhtKTsKKyAg
ICAgICAgcmV0dXJuIHB4bTsKKyAgICB9CisgICAgcmV0dXJuIFFQaXhtYXAoKTsKKworfQorCitR
SW1hZ2UgUXRQaXhtYXBJbnN0YW5jZTo6dG9JbWFnZSgpCit7CisgICAgaWYgKGRhdGEudHlwZSgp
ID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKQor
ICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRSW1hZ2U+KCk7CisgICAgaWYgKGRhdGEudHlwZSgp
ID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkg
eworICAgICAgICBjb25zdCBRSW1hZ2UgaW1nID0gZGF0YS52YWx1ZTxRUGl4bWFwPigpLnRvSW1h
Z2UoKTsKKyAgICAgICAgZGF0YSA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihpbWcpOwor
ICAgICAgICByZXR1cm4gaW1nOworICAgIH0KKyAgICByZXR1cm4gUUltYWdlKCk7Cit9CisKK1FW
YXJpYW50IFF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBvYmpl
Y3QsIFFNZXRhVHlwZTo6VHlwZSBoaW50KQoreworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAg
IGlmIChoaW50ID09IHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpCisgICAgICAgICAgICByZXR1cm4g
UVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFwPihRUGl4bWFwKCkpOworICAgICAgICBpZiAoaGlu
dCA9PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQ6
OmZyb21WYWx1ZTxRSW1hZ2U+KFFJbWFnZSgpKTsKKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+aW5o
ZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkgeworICAgICAgICBKU0hUTUxJbWFn
ZUVsZW1lbnQqIGVsID0gc3RhdGljX2Nhc3Q8SlNIVE1MSW1hZ2VFbGVtZW50Kj4ob2JqZWN0KTsK
KyAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudCo+KGVsLT5pbXBsKCkpOworICAgICAgICBpZiAoaW1hZ2VFbGVtZW50KSB7
CisgICAgICAgICAgICBDYWNoZWRJbWFnZSogY0ltZyA9IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1h
Z2UoKTsKKyAgICAgICAgICAgIGlmIChjSW1nKSB7CisgICAgICAgICAgICAgICAgSW1hZ2UqIGlt
ZyA9IGNJbWctPmltYWdlKCk7CisgICAgICAgICAgICAgICAgaWYgKGltZykgeworICAgICAgICAg
ICAgICAgICAgICBRUGl4bWFwKiBweG0gPSBpbWctPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChweG0pIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAoaGludCA9PSBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlw
ZUlkPFFQaXhtYXA+KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBRVmFyaWFu
dDo6ZnJvbVZhbHVlPFFQaXhtYXA+KCpweG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihweG0tPnRvSW1hZ2UoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlF0UGl4bWFwUnVudGltZU9iamVj
dEltcDo6c19pbmZvKSkgeworICAgICAgICBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9
IHN0YXRpY19jYXN0PFF0UGl4bWFwUnVudGltZU9iamVjdEltcCo+KG9iamVjdCk7CisgICAgICAg
IFF0UGl4bWFwSW5zdGFuY2UqIGluc3QgPSBzdGF0aWNfY2FzdDxRdFBpeG1hcEluc3RhbmNlKj4o
aW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkpOworICAgICAgICBpZiAoaW5zdCkgeworICAgICAg
ICAgICAgaWYgKGhpbnQgPT0gcU1ldGFUeXBlSWQ8UVBpeG1hcCA+KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4oaW5zdC0+dG9QaXhtYXAoKSk7
CisgICAgICAgICAgICBpZiAoaGludCA9PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFsdWU8UUltYWdlPihpbnN0LT50b0ltYWdl
KCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorSlNPYmplY3QqIFF0UGl4
bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVm
UHRyPFJvb3RPYmplY3Q+IHJvb3QsIGNvbnN0IFFWYXJpYW50JiBkYXRhKQoreworICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgcmV0dXJuIG5ldyhleGVjKSBRdFBp
eG1hcFJ1bnRpbWVPYmplY3RJbXAoZXhlYywgbmV3IFF0UGl4bWFwSW5zdGFuY2Uocm9vdCwgZGF0
YSkpOworfQorCitib29sIFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShRTWV0YVR5cGU6OlR5
cGUgaGludCkKK3sKKyAgICByZXR1cm4gaGludCA9PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkgfHwg
aGludCA9PSBxTWV0YVR5cGVJZDxRUGl4bWFwPigpOworfQorCit9CisKK30KSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jy
aWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JyaWRn
ZS9xdC9xdF9waXhtYXBydW50aW1lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRl
ZiBxdF9waXhtYXBydW50aW1lX2gKKyNkZWZpbmUgcXRfcGl4bWFwcnVudGltZV9oCisKKyNpbmNs
dWRlICJydW50aW1lLmgiCisjaW5jbHVkZSA8UVZhcmlhbnQ+CisKK25hbWVzcGFjZSBKU0Mgewor
CituYW1lc3BhY2UgQmluZGluZ3MgeworCitjbGFzcyBRdFBpeG1hcEluc3RhbmNlIDogcHVibGlj
IEluc3RhbmNlIHsKKyAgICBRVmFyaWFudCBkYXRhOworcHVibGljOgorICAgIFF0UGl4bWFwSW5z
dGFuY2UoUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqLCBjb25zdCBRVmFyaWFudCYgbmV3
RGF0YSk7CisgICAgdmlydHVhbCBDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25z
dCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOworCisgICAgdmlydHVhbCBKU1ZhbHVlIGRlZmF1
bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEpTVmFsdWUgdmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OworICAgIGludCB3
aWR0aCgpIGNvbnN0OworICAgIGludCBoZWlnaHQoKSBjb25zdDsKKyAgICBRUGl4bWFwIHRvUGl4
bWFwKCk7CisgICAgUUltYWdlIHRvSW1hZ2UoKTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIGNyZWF0
ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiwgY29uc3Qg
UVZhcmlhbnQmKTsKKyAgICBzdGF0aWMgUVZhcmlhbnQgdmFyaWFudEZyb21PYmplY3QoSlNPYmpl
Y3QqLCBRTWV0YVR5cGU6OlR5cGUgaGludCk7CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlKFFN
ZXRhVHlwZTo6VHlwZSBoaW50KTsKK307CisKK30KKworfQorI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9x
dC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24gNTM0MjcpCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9x
dF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUg
InFvYmplY3QuaCIKICNpbmNsdWRlICJxc3RyaW5nbGlzdC5oIgogI2luY2x1ZGUgInF0X2luc3Rh
bmNlLmgiCisjaW5jbHVkZSAicXRfcGl4bWFwcnVudGltZS5oIgogI2luY2x1ZGUgInF2YXJsZW5n
dGhhcnJheS5oIgogI2luY2x1ZGUgPEpTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4K
QEAgLTcyMCw2ICs3MjEsOCBAQCBRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNT
dGF0CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNh
bkhhbmRsZShzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKSkgeworICAgICAgICAg
ICAgICAgIHJldCA9IFF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KG9iamVjdCwg
c3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPihoaW50KSk7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UpCkBAIC04NDksNiArODUyLDkgQEAgSlNWYWx1ZSBj
b252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZQogICAgICAgICByZXR1cm4gUXRJbnN0YW5j
ZTo6Z2V0UXRJbnN0YW5jZShvYmosIHJvb3QsIFFTY3JpcHRFbmdpbmU6OlF0T3duZXJzaGlwKS0+
Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAKKyAgICBpZiAoUXRQaXhtYXBJbnN0
YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4odmFyaWFudC50eXBl
KCkpKSkKKyAgICAgICAgcmV0dXJuIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QoZXhlYywgcm9vdCwgdmFyaWFudCk7CisKICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFW
YXJpYW50TWFwKSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBvYmplY3QsIGFuZCBzdHVmZiBw
cm9wZXJ0aWVzIGludG8gaXQKICAgICAgICAgSlNPYmplY3QqIHJldCA9IGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGV4ZWMpOwpJbmRleDogV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MzUxOSkKKysrIFdlYktpdC9xdC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0wMS0xOSAgTm8nYW0gUm9z
ZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gQWRkaW5nIFFQaXhtYXAvUUltYWdlIHN1
cHBvcnQgZm9yIHRoZSBRdCBoeWJyaWQgbGF5ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNDYxCisKKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQaXht
YXA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJv
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQaXhtYXAvcmVzb3VyY2VzLnFyYzogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvaHlicmlkUGl4bWFwL3Rlc3QuaHRtbDogQWRkZWQuCisgICAg
ICAgICogdGVzdHMvaHlicmlkUGl4bWFwL3RzdF9oeWJyaWRQaXhtYXAuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKHRzdF9oeWJyaWRQaXhtYXA6OnRzdF9oeWJyaWRQaXhtYXApOiB0ZXN0cyBtb3N0IG9m
IHRoZSB1c2UgY2FzZXMgZm9yCisJaHlicmlkIHBpeG1hcC9pbWFnZSBtYW5pcHVsYXRpb24gCisg
ICAgICAgICh0c3RfaHlicmlkUGl4bWFwOjppbml0KTogUVRlc3RMaWIgaW5pdGlhbGl6YXRpb24K
KyAgICAgICAgKHRzdF9oeWJyaWRQaXhtYXA6OmNsZWFudXApOiBRVGVzdExpYiBjbGVhbnVwCisg
ICAgICAgICh0c3RfaHlicmlkUGl4bWFwOjpoeWJyaWRQaXhtYXApOiBydW4gdGhlIGh0bWwgZmls
ZQorICAgICAgICAqIHRlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdpZGdldDo6V2lkZ2V0KToKKyAgICAgICAgKFdpZGdldDo6cmVmcmVzaEpTKToKKyAgICAg
ICAgKFdpZGdldDo6c3RhcnQpOgorICAgICAgICAoV2lkZ2V0Ojpjb21wbGV0ZVRlc3QpOgorICAg
ICAgICAoV2lkZ2V0OjpzZXRQaXhtYXApOgorICAgICAgICAoV2lkZ2V0OjpwaXhtYXApOgorICAg
ICAgICAoV2lkZ2V0OjpzZXRJbWFnZSk6CisgICAgICAgIChXaWRnZXQ6OmltYWdlKToKKyAgICAg
ICAgKFdpZGdldDo6fldpZGdldCk6CisgICAgICAgIChXaWRnZXQ6OmNoYW5nZUV2ZW50KToKKyAg
ICAgICAgKFdpZGdldDo6Y29tcGFyZSk6CisgICAgICAgIChXaWRnZXQ6OmltYWdlU2xvdCk6Cisg
ICAgICAgIChXaWRnZXQ6OnBpeG1hcFNsb3QpOgorICAgICAgICAoV2lkZ2V0OjpyYW5kb21TbG90
KToKKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0Lmg6IEFkZGVkLgorICAgICAg
ICAqIHRlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWk6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3Rlc3RzLnBybzoKKwogMjAxMC0wMS0xOSAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktpdC9x
dC90ZXN0cy90ZXN0cy5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBy
bwkocmV2aXNpb24gNTM0MjcpCisrKyBXZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJvCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogCiBURU1QTEFURSA9IHN1YmRpcnMKLVNVQkRJUlMgPSBx
d2ViZnJhbWUgcXdlYnBhZ2UgcXdlYmVsZW1lbnQgcWdyYXBoaWNzd2VidmlldyBxd2ViaGlzdG9y
eWludGVyZmFjZSBxd2VidmlldyBxd2ViaGlzdG9yeSBxd2ViaW5zcGVjdG9yCitTVUJESVJTID0g
cXdlYmZyYW1lIHF3ZWJwYWdlIHF3ZWJlbGVtZW50IHFncmFwaGljc3dlYnZpZXcgcXdlYmhpc3Rv
cnlpbnRlcmZhY2UgcXdlYnZpZXcgcXdlYmhpc3RvcnkgcXdlYmluc3BlY3RvciBoeWJyaWRQaXht
YXAKIGdyZWF0ZXJUaGFuKFFUX01JTk9SX1ZFUlNJT04sIDQpOiBTVUJESVJTICs9IGJlbmNobWFy
a3MvcGFpbnRpbmcgYmVuY2htYXJrcy9sb2FkaW5nCkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHli
cmlkUGl4bWFwL2h5YnJpZFBpeG1hcC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3Rz
L2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEwIEBACisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyMgUHJvamVjdCBjcmVhdGVkIGJ5IFF0Q3JlYXRvciAyMDA5LTEyLTEwVDExOjI1OjAy
CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lu
Y2x1ZGUoLi4vdGVzdHMucHJpKQorVEFSR0VUID0gaHlicmlkUGl4bWFwCitTT1VSQ0VTICs9IHdp
ZGdldC5jcHAKK0hFQURFUlMgKz0gd2lkZ2V0LmgKK0ZPUk1TICs9IHdpZGdldC51aQorUkVTT1VS
Q0VTICs9IHJlc291cmNlcy5xcmMKK0NPTkZJRyArPSBjb25zb2xlCkluZGV4OiBXZWJLaXQvcXQv
dGVzdHMvaHlicmlkUGl4bWFwL3Jlc291cmNlcy5xcmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJjCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9yZXNvdXJjZXMucXJjCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUgQEAKKzxSQ0M+CisgICAgPHFyZXNvdXJjZSBwcmVmaXg9Ii8iPgorICAgICAgICA8Zmls
ZT50ZXN0Lmh0bWw8L2ZpbGU+CisgICAgPC9xcmVzb3VyY2U+Cis8L1JDQz4KSW5kZXg6IFdlYktp
dC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9x
dC90ZXN0cy9oeWJyaWRQaXhtYXAvdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC90ZXN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcg
QEAKKzxodG1sPgorICAgIDxoZWFkPgorICAgICAgICA8c3R5bGU+CisgICAgICAgICAgICBpbWcg
eyBkaXNwbGF5OiBibG9jazsgYm9yZGVyLXN0eWxlOiBncm9vdmV9CisgICAgICAgIDwvc3R5bGU+
CisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICBmdW5jdGlvbiBzdGFydFRlc3QoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBvYmogPSBteVdpZGdldC5pbWFnZTsKKyAg
ICAgICAgICAgICAgICB2YXIgcHhtID0gbXlXaWRnZXQucGl4bWFwOworCisgICAgICAgICAgICAg
ICAgdmFyIGltZyA9IG9iai50b0hUTUxJbWFnZUVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICB2
YXIgaW1nMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbWcxIik7CisgICAgICAgICAgICAg
ICAgdmFyIGltZzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW1nMiIpOworICAgICAgICAg
ICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgICAgICAgICAgICAgICBk
b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHB4bS50b0hUTUxJbWFnZUVsZW1lbnQoKSk7CisgICAg
ICAgICAgICAgICAgdmFyIHNpZ25hbHNGaXJlZCA9IDA7CisgICAgICAgICAgICAgICAgbXlXaWRn
ZXQuY29tcGFyZShvYmoudG9TdHJpbmcoKSwiW1F0IE5hdGl2ZSBQaXhtYXAgIitvYmoud2lkdGgr
IiwiK29iai5oZWlnaHQrIl0iKTsKKyAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKFN0
cmluZyhweG0pLCJbUXQgTmF0aXZlIFBpeG1hcCAiK3B4bS53aWR0aCsiLCIrcHhtLmhlaWdodCsi
XSIpOworCisgICAgICAgICAgICAgICAgLy8gdGhpcyBzaG91bGRuJ3Qgd29yayBidXQgc2hvdWxk
bid0IGNyYXNoCisgICAgICAgICAgICAgICAgbXlXaWRnZXQucmFuZG9tU2xvdCgiZm9vYmFyIik7
CisKKyAgICAgICAgICAgICAgICBteVdpZGdldC5waXhtYXBTaWduYWwuY29ubmVjdChmdW5jdGlv
bihpbWdGcm9tU2lnbmFsKSB7CisgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUo
aW1nRnJvbVNpZ25hbC5oZWlnaHQsIGltZzIuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCsrc2lnbmFsc0ZpcmVkID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdl
dC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IG15V2lkZ2V0LmltYWdlU2lnbmFsLmNvbm5lY3QoZnVuY3Rpb24oaW1nRnJvbVNpZ25hbCkgewor
ICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKHB4bS5oZWlnaHQsIGltZzIuaGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrc2lnbmFsc0ZpcmVkID09IDIpCisgICAg
ICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wbGV0ZVRlc3QoKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnRpbnVlVGVzdEFmdGVySW1h
Z2VzQXJlTG9hZGVkKCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpbWcxLmNvbXBsZXRlICYmIGltZzIuY29tcGxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG15V2lkZ2V0LmNvbXBhcmUocHhtLmhlaWdodCwgaW1nMi5oZWlnaHQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbXlXaWRnZXQucGl4bWFwU2xvdChpbWcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbXlXaWRnZXQuaW1hZ2VTbG90KHB4bSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW1nMS5vbmxvYWQgPSBjb250aW51
ZVRlc3RBZnRlckltYWdlc0FyZUxvYWRlZDsKKyAgICAgICAgICAgICAgICBpbWcyLm9ubG9hZCA9
IGNvbnRpbnVlVGVzdEFmdGVySW1hZ2VzQXJlTG9hZGVkOworICAgICAgICAgICAgICAgIGltZzEu
c3JjID0gb2JqLnRvRGF0YVVybCgpOworICAgICAgICAgICAgICAgIGltZzIuc3JjID0gbXlXaWRn
ZXQucGl4bWFwLnRvRGF0YVVybCgpOworICAgICAgICAgICAgICAgIG15V2lkZ2V0LmltYWdlID0g
cHhtOworICAgICAgICAgICAgICAgIG15V2lkZ2V0LnBpeG1hcCA9IGltZzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgPC9zY3JpcHQ+CisgICAgPC9oZWFkPgorICAgIDxib2R5IG9ubG9hZD0ic3Rh
cnRUZXN0KCkiPgorICAgICAgICA8aW1nIGlkPSJpbWcxIiAvPgorICAgICAgICA8aW1nIGlkPSJp
bWcyIiAvPgorICAgIDwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJy
aWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC90c3RfaHlicmlkUGl4bWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0X2h5YnJpZFBpeG1hcC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgIi4uL3V0aWwuaCIKKworI2luY2x1ZGUgIndpZGdl
dC5oIgorI2luY2x1ZGUgPFF0VGVzdC9RdFRlc3Q+CisKK2NsYXNzIHRzdF9oeWJyaWRQaXhtYXAg
OiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKKworcHVibGljOgorICAgIHRzdF9oeWJy
aWRQaXhtYXAoUU9iamVjdCogbyA9IDApIDogUU9iamVjdChvKSB7fQorCitwdWJsaWMgc2xvdHM6
CisgICAgdm9pZCBpbml0KCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjbGVhbnVwKCkKKyAg
ICB7CisgICAgfQorCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgaHlicmlkUGl4bWFwKCkKKyAg
ICB7CisgICAgICAgIFdpZGdldCB3aWRnZXQ7CisgICAgICAgIHdpZGdldC5zaG93KCk7CisgICAg
ICAgIHdpZGdldC5zdGFydCgpOworICAgICAgICB3YWl0Rm9yU2lnbmFsKCZ3aWRnZXQsIFNJR05B
TCh0ZXN0Q29tcGxldGUoKSkpOworICAgIH0KK307CisKK1FURVNUX01BSU4odHN0X2h5YnJpZFBp
eG1hcCkKKworI2luY2x1ZGUgPHRzdF9oeWJyaWRQaXhtYXAubW9jPgpJbmRleDogV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC90
ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90
ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKwor
I2luY2x1ZGUgIndpZGdldC5oIgorCisjaW5jbHVkZSAicXdlYmVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJxd2ViZnJhbWUuaCIKKyNpbmNsdWRlICJ1aV93aWRnZXQuaCIKKyNpbmNsdWRlIDxRUGFpbnRl
cj4KKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgorCitXaWRnZXQ6OldpZGdldChRV2lkZ2V0KiBw
YXJlbnQpIDoKKyAgICBRV2lkZ2V0KHBhcmVudCksCisgICAgdWkobmV3IFVpOjpXaWRnZXQpCit7
CisgICAgdWktPnNldHVwVWkodGhpcyk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpyZWZyZXNoSlMoKQor
eworICAgIHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5hZGRUb0phdmFTY3JpcHRX
aW5kb3dPYmplY3QoIm15V2lkZ2V0IiwgdGhpcyk7Cit9Cit2b2lkIFdpZGdldDo6c3RhcnQoKQor
eworICAgIHVpLT53ZWJWaWV3LT5sb2FkKFFVcmwoInFyYzovLy90ZXN0Lmh0bWwiKSk7CisgICAg
Y29ubmVjdCh1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKSwgU0lHTkFMKGphdmFTY3Jp
cHRXaW5kb3dPYmplY3RDbGVhcmVkKCkpLCB0aGlzLCBTTE9UKHJlZnJlc2hKUygpKSk7CisgICAg
dWktPndlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCktPmFkZFRvSmF2YVNjcmlwdFdpbmRvd09i
amVjdCgibXlXaWRnZXQiLCB0aGlzKTsKK30KKwordm9pZCBXaWRnZXQ6OmNvbXBsZXRlVGVzdCgp
Cit7CisgICAgUUNPTVBBUkUodWktPmxibDEtPnBpeG1hcCgpLT5zaXplKCksIHVpLT5sYmwyLT5z
aXplKCkpOworICAgIFFDT01QQVJFKHVpLT5sYmwzLT5zaXplKCksIHVpLT5sYmw0LT5waXhtYXAo
KS0+c2l6ZSgpKTsKKyAgICBRQ09NUEFSRSh1aS0+bGJsMi0+c2l6ZSgpLndpZHRoKCksIHVpLT53
ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5maW5kRmlyc3RFbGVtZW50KCIjaW1nMSIpLmV2
YWx1YXRlSmF2YVNjcmlwdCgidGhpcy53aWR0aCIpLnRvSW50KCkpOworICAgIFFDT01QQVJFKHVp
LT5sYmwzLT5zaXplKCkud2lkdGgoKSwgdWktPndlYlZpZXctPnBhZ2UoKS0+bWFpbkZyYW1lKCkt
PmZpbmRGaXJzdEVsZW1lbnQoIiNpbWcyIikuZXZhbHVhdGVKYXZhU2NyaXB0KCJ0aGlzLndpZHRo
IikudG9JbnQoKSk7CisgICAgZW1pdCB0ZXN0Q29tcGxldGUoKTsKK30KKwordm9pZCBXaWRnZXQ6
OnNldFBpeG1hcChjb25zdCBRUGl4bWFwJiBwKQoreworICAgIHVpLT5sYmwxLT5zZXRQaXhtYXAo
cCk7Cit9CitRUGl4bWFwIFdpZGdldDo6cGl4bWFwKCkgY29uc3QKK3sKKyAgICBRUGl4bWFwIHB4
KHVpLT5sYmwzLT5zaXplKCkpOworICAgIHsKKyAgICAgICAgUVBhaW50ZXIgcCgmcHgpOworICAg
ICAgICB1aS0+bGJsMy0+cmVuZGVyKCZwKTsKKyAgICB9CisgICAgcmV0dXJuIHB4OworfQordm9p
ZCBXaWRnZXQ6OnNldEltYWdlKGNvbnN0IFFJbWFnZSYgaW1nKQoreworICAgIHVpLT5sYmw0LT5z
ZXRQaXhtYXAoUVBpeG1hcDo6ZnJvbUltYWdlKGltZykpOworfQorCitRSW1hZ2UgV2lkZ2V0Ojpp
bWFnZSgpIGNvbnN0Cit7CisgICAgUUltYWdlIGltZyh1aS0+bGJsMi0+c2l6ZSgpLCBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzIpOworICAgIHsKKyAgICAgICAgUVBhaW50ZXIgcCgmaW1nKTsKKyAgICAg
ICAgdWktPmxibDItPnJlbmRlcigmcCk7CisgICAgfQorICAgIHJldHVybiBpbWc7Cit9CisKK1dp
ZGdldDo6fldpZGdldCgpCit7CisgICAgZGVsZXRlIHVpOworfQorCit2b2lkIFdpZGdldDo6Y2hh
bmdlRXZlbnQoUUV2ZW50KiBlKQoreworICAgIFFXaWRnZXQ6OmNoYW5nZUV2ZW50KGUpOworICAg
IHN3aXRjaCAoZS0+dHlwZSgpKSB7CisgICAgY2FzZSBRRXZlbnQ6Okxhbmd1YWdlQ2hhbmdlOgor
ICAgICAgICB1aS0+cmV0cmFuc2xhdGVVaSh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQordm9pZCBXaWRnZXQ6OmNvbXBhcmUoY29u
c3QgUVZhcmlhbnQmIGEsIGNvbnN0IFFWYXJpYW50JiBiKQoreworICAgIFFDT01QQVJFKGEsIGIp
OworfQorCit2b2lkIFdpZGdldDo6aW1hZ2VTbG90KGNvbnN0IFFJbWFnZSYgaW1nKQoreworICAg
IFFDT01QQVJFKGltZy5zaXplKCksIHVpLT5sYmwzLT5zaXplKCkpOworICAgIGVtaXQgcGl4bWFw
U2lnbmFsKFFQaXhtYXA6OmZyb21JbWFnZShpbWcpKTsKK30KKwordm9pZCBXaWRnZXQ6OnBpeG1h
cFNsb3QoY29uc3QgUVBpeG1hcCYgcHhtKQoreworICAgIFFDT01QQVJFKHB4bS5zaXplKCksIHVp
LT5sYmwyLT5zaXplKCkpOworICAgIGVtaXQgaW1hZ2VTaWduYWwodWktPmxibDQtPnBpeG1hcCgp
LT50b0ltYWdlKCkpOworfQorCit2b2lkIFdpZGdldDo6cmFuZG9tU2xvdChjb25zdCBRUGl4bWFw
JiBweG0pCit7CisgICAgUVZFUklGWShweG0uaXNOdWxsKCkpOworfQpJbmRleDogV2ViS2l0L3F0
L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVz
dHMvaHlicmlkUGl4bWFwL3dpZGdldC5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rlc3Rz
L2h5YnJpZFBpeG1hcC93aWRnZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVm
IHdpZGdldF9oCisjZGVmaW5lIHdpZGdldF9oCisKKyNpbmNsdWRlIDxRSW1hZ2U+CisjaW5jbHVk
ZSA8UVBpeG1hcD4KKyNpbmNsdWRlIDxRV2lkZ2V0PgorCituYW1lc3BhY2UgVWkgeworY2xhc3Mg
V2lkZ2V0OworfQorCitjbGFzcyBXaWRnZXQgOiBwdWJsaWMgUVdpZGdldCB7CisgICAgUV9PQkpF
Q1QKKyAgICBRX1BST1BFUlRZKFFQaXhtYXAgcGl4bWFwIFJFQUQgcGl4bWFwIFdSSVRFIHNldFBp
eG1hcCkKKyAgICBRX1BST1BFUlRZKFFJbWFnZSBpbWFnZSBSRUFEIGltYWdlIFdSSVRFIHNldElt
YWdlKQorCitwdWJsaWM6CisgICAgV2lkZ2V0KFFXaWRnZXQqIHBhcmVudCA9IDApOworICAgIH5X
aWRnZXQoKTsKKyAgICB2b2lkIHNldFBpeG1hcChjb25zdCBRUGl4bWFwJik7CisgICAgUVBpeG1h
cCBwaXhtYXAoKSBjb25zdDsKKyAgICB2b2lkIHNldEltYWdlKGNvbnN0IFFJbWFnZSYpOworICAg
IFFJbWFnZSBpbWFnZSgpIGNvbnN0OworCitwcml2YXRlIHNsb3RzOgorICAgIHZvaWQgcmVmcmVz
aEpTKCk7CisKK3B1YmxpYyBzbG90czoKKyAgICB2b2lkIGNvbXBsZXRlVGVzdCgpOworICAgIHZv
aWQgc3RhcnQoKTsKKyAgICB2b2lkIGNvbXBhcmUoY29uc3QgUVZhcmlhbnQmIGEsIGNvbnN0IFFW
YXJpYW50JiBiKTsKKyAgICB2b2lkIGltYWdlU2xvdChjb25zdCBRSW1hZ2UmKTsKKyAgICB2b2lk
IHBpeG1hcFNsb3QoY29uc3QgUVBpeG1hcCYpOworICAgIHZvaWQgcmFuZG9tU2xvdChjb25zdCBR
UGl4bWFwJik7CisKK3NpZ25hbHM6CisgICAgdm9pZCB0ZXN0Q29tcGxldGUoKTsKKyAgICB2b2lk
IGltYWdlU2lnbmFsKGNvbnN0IFFJbWFnZSYpOworICAgIHZvaWQgcGl4bWFwU2lnbmFsKGNvbnN0
IFFQaXhtYXAmKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgY2hhbmdlRXZlbnQoUUV2ZW50KiBl
KTsKKworcHJpdmF0ZToKKyAgICBVaTo6V2lkZ2V0KiB1aTsKK307CisKKyNlbmRpZiAvLyB3aWRn
ZXRfaApJbmRleDogV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9u
IDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dpZGdldC51aQkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgi
Pz4KKzx1aSB2ZXJzaW9uPSI0LjAiPgorIDxjbGFzcz5XaWRnZXQ8L2NsYXNzPgorIDx3aWRnZXQg
Y2xhc3M9IlFXaWRnZXQiIG5hbWU9IldpZGdldCI+CisgIDxwcm9wZXJ0eSBuYW1lPSJnZW9tZXRy
eSI+CisgICA8cmVjdD4KKyAgICA8eD4wPC94PgorICAgIDx5PjA8L3k+CisgICAgPHdpZHRoPjYw
MDwvd2lkdGg+CisgICAgPGhlaWdodD40MDA8L2hlaWdodD4KKyAgIDwvcmVjdD4KKyAgPC9wcm9w
ZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9IndpbmRvd1RpdGxlIj4KKyAgIDxzdHJpbmc+V2lkZ2V0
PC9zdHJpbmc+CisgIDwvcHJvcGVydHk+CisgIDxsYXlvdXQgY2xhc3M9IlFWQm94TGF5b3V0IiBu
YW1lPSJ2ZXJ0aWNhbExheW91dCI+CisgICA8aXRlbT4KKyAgICA8d2lkZ2V0IGNsYXNzPSJRV2Vi
VmlldyIgbmFtZT0id2ViVmlldyI+CisgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1cmwiPgorICAgICAg
PHVybD4KKyAgICAgICA8c3RyaW5nPmFib3V0OmJsYW5rPC9zdHJpbmc+CisgICAgICA8L3VybD4K
KyAgICAgPC9wcm9wZXJ0eT4KKyAgICA8L3dpZGdldD4KKyAgIDwvaXRlbT4KKyAgIDxpdGVtPgor
ICAgIDxsYXlvdXQgY2xhc3M9IlFIQm94TGF5b3V0IiBuYW1lPSJob3Jpem9udGFsTGF5b3V0Ij4K
KyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNsYXNzPSJRTGFiZWwiIG5hbWU9ImxibDEiPgor
ICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPHN0cmluZy8+CisgICAgICAg
PC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0PgorICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgor
ICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwyIj4KKyAgICAgICA8cHJvcGVy
dHkgbmFtZT0ibWluaW11bVNpemUiPgorICAgICAgICA8c2l6ZT4KKyAgICAgICAgIDx3aWR0aD4x
MjA8L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4zMDwvaGVpZ2h0PgorICAgICAgICA8L3NpemU+
CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0ibWF4aW11bVNpemUi
PgorICAgICAgICA8c2l6ZT4KKyAgICAgICAgIDx3aWR0aD4xMjA8L3dpZHRoPgorICAgICAgICAg
PGhlaWdodD4zMDwvaGVpZ2h0PgorICAgICAgICA8L3NpemU+CisgICAgICAgPC9wcm9wZXJ0eT4K
KyAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmc+SW1hZ2UgZnJv
bSBRdCB0byBIVE1MPC9zdHJpbmc+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0
PgorICAgICA8L2l0ZW0+CisgICAgIDxpdGVtPgorICAgICAgPHdpZGdldCBjbGFzcz0iUUxhYmVs
IiBuYW1lPSJsYmwzIj4KKyAgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCI+CisgICAgICAgIDxz
dHJpbmc+UGl4bWFwIGZyb20gUXQgdG8gSFRNTDwvc3RyaW5nPgorICAgICAgIDwvcHJvcGVydHk+
CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRn
ZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsNCI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9InRl
eHQiPgorICAgICAgICA8c3RyaW5nLz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgPC93aWRn
ZXQ+CisgICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8c3BhY2VyIG5hbWU9Imhvcml6
b250YWxTcGFjZXIiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmllbnRhdGlvbiI+CisgICAg
ICAgIDxlbnVtPlF0OjpIb3Jpem9udGFsPC9lbnVtPgorICAgICAgIDwvcHJvcGVydHk+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InNpemVIaW50IiBzdGRzZXQ9IjAiPgorICAgICAgICA8c2l6ZT4K
KyAgICAgICAgIDx3aWR0aD40MDwvd2lkdGg+CisgICAgICAgICA8aGVpZ2h0PjIwPC9oZWlnaHQ+
CisgICAgICAgIDwvc2l6ZT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgPC9zcGFjZXI+Cisg
ICAgIDwvaXRlbT4KKyAgICA8L2xheW91dD4KKyAgIDwvaXRlbT4KKyAgPC9sYXlvdXQ+CisgPC93
aWRnZXQ+CisgPGxheW91dGRlZmF1bHQgc3BhY2luZz0iNiIgbWFyZ2luPSIxMSIvPgorIDxjdXN0
b213aWRnZXRzPgorICA8Y3VzdG9td2lkZ2V0PgorICAgPGNsYXNzPlFXZWJWaWV3PC9jbGFzcz4K
KyAgIDxleHRlbmRzPlFXaWRnZXQ8L2V4dGVuZHM+CisgICA8aGVhZGVyPlF0V2ViS2l0L1FXZWJW
aWV3PC9oZWFkZXI+CisgIDwvY3VzdG9td2lkZ2V0PgorIDwvY3VzdG9td2lkZ2V0cz4KKyA8cmVz
b3VyY2VzLz4KKyA8Y29ubmVjdGlvbnMvPgorPC91aT4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46977</attachid>
            <date>2010-01-19 22:29:25 -0800</date>
            <delta_ts>2010-01-21 00:13:41 -0800</delta_ts>
            <desc>oops, some auto-tabs</desc>
            <filename>patch-hybrid-pixmap-9.diff</filename>
            <type>text/plain</type>
            <size>36151</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzUxOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzIgQEAKKzIwMTAtMDEtMTkgIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50
aGFsQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbUXRdIEFkZGluZyBRUGl4bWFwL1FJbWFnZSBzdXBwb3J0IGZvciB0aGUgUXQgaHli
cmlkIGxheWVyCisgICAgICAgQWxsb3dzIGFjY2VzaW5nIFFQaXhtYXAgYW5kIFFJbWFnZSBiYXNl
ZCBhcmd1bWVudHMgZnJvbSBRdCBzaWduYWxzLAorICAgICAgIHNsb3RzIGFuZCBwcm9wZXJ0aWVz
CisgICAgICAgVGhpcyBpcyBkb25lIGJ5IGFuIGludGVybWVkaWF0ZSBvYmplY3QgdGhhdCBjYW4g
YmUgdHVybmVkIGludG8KKyAgICAgICB3ZWItYmFzZWQgb2JqZWN0cyBieSBjYWxsaW5nIGVpdGhl
ciB0b0hUTUxJbWFnZUVsZW1lbnQoKSBvcgorICAgICAgIHRvRGF0YVVSTCgpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjQ2MQorCisgICAgICAgIFRl
c3RzIGFyZSBpbiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwCisKKyAgICAgICAgKiBXZWJD
b3JlLnBybzoKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBXaWR0aEZpZWxkOjpuYW1lKTogIndp
ZHRoIgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBXaWR0aEZpZWxkOjp2YWx1ZUZy
b21JbnN0YW5jZSk6IHdpZHRoIG9mCisgICAgICAgIHBpeG1hcAorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UXRQaXhtYXBXaWR0aEZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UpOiBub3RoaW5nCisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEhlaWdodEZpZWxkOjpuYW1lKTogImhlaWdo
dCIKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSGVpZ2h0RmllbGQ6OnZhbHVlRnJv
bUluc3RhbmNlKTogaGVpZ2h0IG9mCisgICAgICAgIHBpeG1hcAorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UXRQaXhtYXBIZWlnaHRGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKTogbm90aGluZwor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBSdW50aW1lTWV0aG9kOjpudW1QYXJhbWV0
ZXJzKTogMAorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBDcmVhdGVFbGVtZW50TWV0
aG9kOjpuYW1lKTogdG9IVE1MSW1hZ2VFbGVtZW50CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpR
dFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRob2Q6Omludm9rZSk6IGNyZWF0ZXMgYW4gSFRNTAorICAg
ICAgICBlbGVtZW50IGZyb20gdGhlIFFQaXhtYXAKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0
UGl4bWFwVG9EYXRhVXJsTWV0aG9kOjpuYW1lKTogInRvRGF0YVVSTCIKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kOjppbnZva2UpOiBlbmNvZGVzIHRoZSBp
bWFnZSB0bworICAgICAgICBhIGJhc2U2NCBkYXRhIHVybAorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6UXRQaXhtYXBUb1N0cmluZ01ldGhvZDo6bmFtZSk6ICJ0b1N0cmluZyIKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlF0UGl4bWFwVG9TdHJpbmdNZXRob2Q6Omludm9rZSk6IFtRdCBOYXRpdmUg
UGl4bWFwCisgICAgICAgIHcsaF0KCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcFJ1
bnRpbWVPYmplY3RJbXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIHJ1bnRpbWUtb2JqZWN0
IGJyb2lsZXJwbGF0ZQorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBSdW50aW1lT2Jq
ZWN0SW1wOjpjbGFzc0luZm8pOiBkaXR0bworICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXht
YXBSdW50aW1lT2JqZWN0SW1wOjpRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXApOgorICAgICAgICBk
aXR0bworICAgICAgICAoSlNDOjpCaW5kaW5nczo6KTogZGl0dG8KKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlF0UGl4bWFwQ2xhc3M6OlF0UGl4bWFwQ2xhc3MpOiBjbGFzcyBmb3IgdGhlCisgICAg
ICAgIGludGVybWVkaWF0ZSBwaXhtYXAtaG9sZGVyIAorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRQaXhtYXBJbnN0YW5jZTo6Z2V0Q2xhc3MpOiBkaXR0bworICAgICAgICAoSlNDOjpCaW5kaW5n
czo6UXRQaXhtYXBJbnN0YW5jZTo6aW52b2tlTWV0aG9kKTogZGl0dG8KKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlF0UGl4bWFwQ2xhc3M6Om1ldGhvZHNOYW1lZCk6IHRvSFRNTEltYWdlRWxlbWVu
dCwKKyAgICAgICAgdG9EYXRhVVJMCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcENs
YXNzOjpmaWVsZE5hbWVkKTogd2lkdGgsIGhlaWdodAorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRQaXhtYXBJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgICAgICAgICAgdG9I
VE1MSW1hZ2VFbGVtZW50LCB0b0RhdGFVUkwsIHdpZHRoLCBoZWlnaHQKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZSk6IG5vdGhpbmcKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFuY2U6OnZhbHVlT2YpOiB0b1N0cmluZwor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZGF0YSk6IGhvbGRzIGEgUVZhcmlhbnQgb2YgdHlwZSBR
SW1hZ2UvUVBpeG1hcAorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6
d2lkdGgpOiB3aWR0aCBvZiB0aGUgaW1hZ2UvcGl4bWFwCisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpRdFBpeG1hcEluc3RhbmNlOjpoZWlnaHQpOiBoZWlnaHQgb2YgdGhlIGltYWdlL3BpeG1hcAor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRQaXhtYXBJbnN0YW5jZTo6dG9QaXhtYXApOiBjb252
ZXJ0cyB0byBhIFFQaXhtYXAKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5zdGFu
Y2U6OnRvSW1hZ2UpOiBjb252ZXJ0cyB0byBhIFFJbWFnZQorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6UXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3QpOiBtYWtlcyBzdXJlIHRoaXMK
KyAgICAgICAgaXMgdGhlIHJpZ2h0IHR5cGUgb2Ygb2JqZWN0LCBhbmQgY3JlYXRlcyBhIFFWYXJp
YW50CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFBpeG1hcEluc3RhbmNlOjpjcmVhdGVSdW50
aW1lT2JqZWN0KTogY3JlYXRlcyBhIG5ldworICAgICAgICBpbnRlcm1lZGlhdGUgcGl4bWFwIGhv
bGRlciBmcm9tIGEgUVZhcmlhbnQKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UGl4bWFwSW5z
dGFuY2U6OmNhbkhhbmRsZSk6IHJldHVybnMgdHJ1ZSBpZiBhCisgICAgICAgIFFQaXhtYXAvUUlt
YWdlIGlzIHJlcXVpcmVkCisgICAgICAgICogYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaDog
QWRkZWQuCisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwOiBob29rcyBmb3IgdGhl
IGJyaWRnZQorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFZhbHVlVG9RVmFyaWFudCk6
IGhhbmRsZSBRUGl4bWFwL1FJbWFnZSBpZiB0aGUKKyAgICAgICAgb2JqZWN0IGlzIHRoZSBpbnRl
cm1lZGlhdGUgcGl4bWFwIGhvbGRlciBvciBhbiBIVE1MSW1hZ2VFbGVtZW50CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKTogY3JlYXRlcyB0aGUgaW50ZXJt
ZWRpYXRlCisgICAgICAgIG9iamVjdCBmcm9tIGEgUVZhcmlhbnQgb2YgdHlwZSBRSW1hZ2UvUVBp
eG1hcAorCiAyMDEwLTAxLTE5ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDUzNDI3KQorKysg
V2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTAzNiw2ICsxMDM2LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgYnJpZGdlL3F0L3F0X2NsYXNzLmggXAogICAgIGJyaWRnZS9xdC9x
dF9pbnN0YW5jZS5oIFwKICAgICBicmlkZ2UvcXQvcXRfcnVudGltZS5oIFwKKyAgICBicmlkZ2Uv
cXQvcXRfcGl4bWFwcnVudGltZS5oIFwKICAgICBicmlkZ2UvcnVudGltZV9hcnJheS5oIFwKICAg
ICBicmlkZ2UvcnVudGltZS5oIFwKICAgICBicmlkZ2UvcnVudGltZV9tZXRob2QuaCBcCkBAIC0x
OTM1LDYgKzE5MzYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBiaW5kaW5ncy9qcy9TY3JpcHRDb250
cm9sbGVyUXQuY3BwIFwKICAgICBicmlkZ2UvcXQvcXRfY2xhc3MuY3BwIFwKICAgICBicmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuY3BwIFwKKyAgICBicmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAg
XAogICAgIGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBcCiAgICAgcGFnZS9xdC9EcmFnQ29udHJv
bGxlclF0LmNwcCBcCiAgICAgcGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAgXApJbmRleDogV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJxdF9waXhtYXBydW50aW1lLmgiCisKKyNp
bmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUg
IkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAi
SlNMb2NrLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiU3RpbGxJ
bWFnZVF0LmgiCisjaW5jbHVkZSA8UUJ1ZmZlcj4KKyNpbmNsdWRlIDxRQnl0ZUFycmF5PgorI2lu
Y2x1ZGUgPFFJbWFnZT4KKyNpbmNsdWRlIDxRUGl4bWFwPgorI2luY2x1ZGUgPFFWYXJpYW50Pgor
I2luY2x1ZGUgPHJ1bnRpbWVfb2JqZWN0Lmg+CisjaW5jbHVkZSA8cnVudGltZV9yb290Lmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVzcGFjZSBC
aW5kaW5ncyB7CisKK2NsYXNzIFF0UGl4bWFwQ2xhc3MgOiBwdWJsaWMgQ2xhc3MgeworcHVibGlj
OgorICAgIFF0UGl4bWFwQ2xhc3MoKTsKKyAgICB2aXJ0dWFsIE1ldGhvZExpc3QgbWV0aG9kc05h
bWVkKGNvbnN0IElkZW50aWZpZXImLCBJbnN0YW5jZSopIGNvbnN0OworICAgIHZpcnR1YWwgRmll
bGQqIGZpZWxkTmFtZWQoY29uc3QgSWRlbnRpZmllciYsIEluc3RhbmNlKikgY29uc3Q7Cit9Owor
CisKK2NsYXNzIFF0UGl4bWFwV2lkdGhGaWVsZCA6IHB1YmxpYyBGaWVsZCB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAid2lkdGgiOyB9CisgICAgdmly
dHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5z
dGFuY2UqIHBpeG1hcCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcihleGVj
LCBzdGF0aWNfY2FzdDxjb25zdCBRdFBpeG1hcEluc3RhbmNlKj4ocGl4bWFwKS0+d2lkdGgoKSk7
CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiwg
Y29uc3QgSW5zdGFuY2UqLCBKU1ZhbHVlKSBjb25zdCB7fQorfTsKK2NsYXNzIFF0UGl4bWFwSGVp
Z2h0RmllbGQgOiBwdWJsaWMgRmllbGQgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBuYW1lKCkgeyByZXR1cm4gImhlaWdodCI7IH0KKyAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVG
cm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBzdGF0aWNfY2FzdDxjb25zdCBR
dFBpeG1hcEluc3RhbmNlKj4oaW5zdCktPmhlaWdodCgpKTsKKyAgICB9CisgICAgdmlydHVhbCB2
b2lkIHNldFZhbHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFs
dWUpIGNvbnN0IHt9Cit9OworCitjbGFzcyBRdFBpeG1hcFJ1bnRpbWVNZXRob2QgOiBwdWJsaWMg
TWV0aG9kIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52
b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQmLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3QsIFF0UGl4bWFwSW5zdGFuY2UqIGluc3QpID0gMDsKKworfTsKKworY2xhc3MgUXRQaXhtYXBD
cmVhdGVFbGVtZW50TWV0aG9kIDogcHVibGljIFF0UGl4bWFwUnVudGltZU1ldGhvZCB7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5hbWUoKSB7IHJldHVybiAidG9IVE1MSW1hZ2VF
bGVtZW50IjsgfQorICAgIEpTVmFsdWUgaW52b2tlKEV4ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQm
IHYsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwgUXRQaXhtYXBJbnN0YW5jZSopCisgICAg
eworICAgICAgICBRUGl4bWFwIHB4bTsKKyAgICAgICAgaWYgKHYudHlwZSgpID09IHN0YXRpY19j
YXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKSB7CisgICAgICAgICAg
ICBweG0gPSBRUGl4bWFwOjpmcm9tSW1hZ2Uodi52YWx1ZTxRSW1hZ2U+KCkpOworICAgICAgICAg
ICAgdiA9IFFWYXJpYW50Ojpmcm9tVmFsdWU8UVBpeG1hcD4ocHhtKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBweG0gPSB2LnZhbHVlPFFQaXhtYXA+KCk7CisKKyAgICAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gMDsKKyAgICAgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbCA9IHN0
YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4ocm9vdC0+Z2xvYmFsT2JqZWN0KCkpOworICAg
ICAgICBpZiAoZ2xvYmFsKSB7CisgICAgICAgICAgICBET01XaW5kb3cqIGRXaW5kb3cgPSB0b0RP
TVdpbmRvdyhnbG9iYWwpOworICAgICAgICAgICAgaWYgKGRXaW5kb3cpCisgICAgICAgICAgICAg
ICAgZG9jdW1lbnQgPSBkV2luZG93LT5kb2N1bWVudCgpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGRvY3VtZW50KSB7CisgICAgICAgICAgICBQYXNzUmVmUHRyPFN0aWxsSW1hZ2U+IGltZyA9
IFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmNyZWF0ZShweG0pOworICAgICAgICAgICAgUmVmUHRyPEhU
TUxJbWFnZUVsZW1lbnQ+IGltYWdlID0gbmV3IEhUTUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjpp
bWdUYWcsIGRvY3VtZW50KTsKKyAgICAgICAgICAgIGltYWdlLT5zZXRDYWNoZWRJbWFnZShuZXcg
Q2FjaGVkSW1hZ2UoaW1nLmdldCgpKSk7CisgICAgICAgICAgICB0b0pTKGV4ZWMsIGdsb2JhbCwg
ZG9jdW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywgZ2xvYmFs
LCBpbWFnZS5yZWxlYXNlKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICB9CisKK307CisKK2NsYXNzIFF0UGl4bWFwVG9EYXRhVXJsTWV0aG9kIDogcHVi
bGljIFF0UGl4bWFwUnVudGltZU1ldGhvZCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIG5hbWUoKSB7IHJldHVybiAidG9EYXRhVXJsIjsgfQorICAgIEpTVmFsdWUgaW52b2tlKEV4
ZWNTdGF0ZSogZXhlYywgUVZhcmlhbnQmIHYsIFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdCwg
UXRQaXhtYXBJbnN0YW5jZSopCisgICAgeworICAgICAgICBRSW1hZ2UgaW1hZ2U7CisgICAgICAg
IC8vIGZvciBnZXR0aW5nIHRoZSBkYXRhIHVybCwgd2UgYWx3YXlzIHByZWZlciB0aGUgaW1hZ2Uu
CisgICAgICAgIGlmICh2LnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1l
dGFUeXBlSWQ8UVBpeG1hcD4oKSkpIHsKKyAgICAgICAgICAgIGltYWdlID0gdi52YWx1ZTxRUGl4
bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgICAgIHYgPSBRVmFyaWFudDo6ZnJvbVZhbHVlPFFJ
bWFnZT4oaW1hZ2UpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGltYWdlID0gdi52YWx1
ZTxRSW1hZ2U+KCk7CisgICAgICAgIFFCeXRlQXJyYXkgYmE7CisgICAgICAgIFFCdWZmZXIgYigm
YmEpOworICAgICAgICBpbWFnZS5zYXZlKCZiLCAiUE5HIik7CisgICAgICAgIGNvbnN0IFFTdHJp
bmcgYjY0ID0gUVN0cmluZygiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIpICsgYmEudG9CYXNlNjQo
KTsKKyAgICAgICAgY29uc3QgVVN0cmluZyB1c3RyaW5nKChVQ2hhciopYjY0LnV0ZjE2KCksIGI2
NC5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1c3RyaW5nKTsKKyAg
ICB9CisKK307CisKK2NsYXNzIFF0UGl4bWFwVG9TdHJpbmdNZXRob2QgOiBwdWJsaWMgUXRQaXht
YXBSdW50aW1lTWV0aG9kIHsKKyAgICBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIG5h
bWUoKSB7IHJldHVybiAidG9TdHJpbmciOyB9CisgICAgSlNWYWx1ZSBpbnZva2UoRXhlY1N0YXRl
KiBleGVjLCBRVmFyaWFudCYgdiwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290LCBRdFBpeG1h
cEluc3RhbmNlKiBpbnN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc3QtPnZhbHVlT2YoZXhl
Yyk7CisgICAgfQorCit9OworCitzdHJ1Y3QgUXRQaXhtYXBNZXRhRGF0YSB7CisgICAgUXRQaXht
YXBUb0RhdGFVcmxNZXRob2QgdG9EYXRhVXJsTWV0aG9kOworICAgIFF0UGl4bWFwQ3JlYXRlRWxl
bWVudE1ldGhvZCBjcmVhdGVFbGVtZW50TWV0aG9kOworICAgIFF0UGl4bWFwVG9TdHJpbmdNZXRo
b2QgdG9TdHJpbmdNZXRob2Q7CisgICAgUXRQaXhtYXBIZWlnaHRGaWVsZCBoZWlnaHRGaWVsZDsK
KyAgICBRdFBpeG1hcFdpZHRoRmllbGQgd2lkdGhGaWVsZDsKKyAgICBRdFBpeG1hcENsYXNzIGNs
czsKK30gcXRfcGl4bWFwX21ldGFEYXRhOworCisvLyBEZXJpdmVkIFJ1bnRpbWVPYmplY3QKK2Ns
YXNzIFF0UGl4bWFwUnVudGltZU9iamVjdEltcCA6IHB1YmxpYyBSdW50aW1lT2JqZWN0SW1wIHsK
K3B1YmxpYzoKKyAgICBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAoRXhlY1N0YXRlKiwgUGFzc1Jl
ZlB0cjxJbnN0YW5jZT4pOworCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVl
IHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsICBTdHJ1Y3R1cmVGbGFncykpOworICAgIH0KKwor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFJ1
bnRpbWVPYmplY3RJbXA6OlN0cnVjdHVyZUZsYWdzIHwgT3ZlcnJpZGVzTWFya0NoaWxkcmVuOwor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmc19pbmZvOyB9Cit9OworCitRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXA6OlF0
UGl4bWFwUnVudGltZU9iamVjdEltcChFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8SW5zdGFu
Y2U+IGluc3RhbmNlKQorICAgIDogUnVudGltZU9iamVjdEltcChleGVjLCBXZWJDb3JlOjpkZXBy
ZWNhdGVkR2V0RE9NU3RydWN0dXJlPFF0UGl4bWFwUnVudGltZU9iamVjdEltcD4oZXhlYyksIGlu
c3RhbmNlKQoreworfQorCitjb25zdCBDbGFzc0luZm8gUXRQaXhtYXBSdW50aW1lT2JqZWN0SW1w
OjpzX2luZm8gPSB7ICJRdFBpeG1hcFJ1bnRpbWVPYmplY3QiLCAmUnVudGltZU9iamVjdEltcDo6
c19pbmZvLCAwLCAwIH07CisKKworUXRQaXhtYXBDbGFzczo6UXRQaXhtYXBDbGFzcygpCit7Cit9
CisKKworQ2xhc3MqIFF0UGl4bWFwSW5zdGFuY2U6OmdldENsYXNzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gJnF0X3BpeG1hcF9tZXRhRGF0YS5jbHM7Cit9CisKK0pTVmFsdWUgUXRQaXhtYXBJbnN0
YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYgbWV0
aG9kcywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBpZiAobWV0aG9kcy5zaXplKCkgPT0g
MSkgeworICAgICAgICBRdFBpeG1hcFJ1bnRpbWVNZXRob2QqIG10ZCA9IHN0YXRpY19jYXN0PFF0
UGl4bWFwUnVudGltZU1ldGhvZCo+KG1ldGhvZHNbMF0pOyAgICAgICAgCisgICAgICAgIHJldHVy
biBtdGQtPmludm9rZShleGVjLCBkYXRhLCByb290T2JqZWN0KCksIHRoaXMpOworICAgIH0KKyAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworTWV0aG9kTGlzdCBRdFBpeG1hcENsYXNzOjpt
ZXRob2RzTmFtZWQoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllciwgSW5zdGFuY2UqKSBjb25z
dAoreworICAgIE1ldGhvZExpc3QgbWV0aG9kczsKKyAgICBpZiAoaWRlbnRpZmllciA9PSBRdFBp
eG1hcFRvRGF0YVVybE1ldGhvZDo6bmFtZSgpKQorICAgICAgICBtZXRob2RzLmFwcGVuZCgmcXRf
cGl4bWFwX21ldGFEYXRhLnRvRGF0YVVybE1ldGhvZCk7CisgICAgZWxzZSBpZiAoaWRlbnRpZmll
ciA9PSBRdFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRob2Q6Om5hbWUoKSkKKyAgICAgICAgbWV0aG9k
cy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS5jcmVhdGVFbGVtZW50TWV0aG9kKTsKKyAgICBl
bHNlIGlmIChpZGVudGlmaWVyID09IFF0UGl4bWFwVG9TdHJpbmdNZXRob2Q6Om5hbWUoKSkKKyAg
ICAgICAgbWV0aG9kcy5hcHBlbmQoJnF0X3BpeG1hcF9tZXRhRGF0YS50b1N0cmluZ01ldGhvZCk7
CisgICAgcmV0dXJuIG1ldGhvZHM7Cit9CisKK0ZpZWxkKiBRdFBpeG1hcENsYXNzOjpmaWVsZE5h
bWVkKGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIsIEluc3RhbmNlKikgY29uc3QKK3sKKyAg
ICBpZiAoaWRlbnRpZmllciA9PSBRdFBpeG1hcFdpZHRoRmllbGQ6Om5hbWUoKSkKKyAgICAgICAg
cmV0dXJuICZxdF9waXhtYXBfbWV0YURhdGEud2lkdGhGaWVsZDsKKyAgICBpZiAoaWRlbnRpZmll
ciA9PSBRdFBpeG1hcEhlaWdodEZpZWxkOjpuYW1lKCkpCisgICAgICAgIHJldHVybiAmcXRfcGl4
bWFwX21ldGFEYXRhLmhlaWdodEZpZWxkOworICAgIHJldHVybiAwOworfQorCit2b2lkIFF0UGl4
bWFwSW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKmV4ZWMsIFByb3BlcnR5TmFt
ZUFycmF5JiBhcnIpCit7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQ
aXhtYXBUb0RhdGFVcmxNZXRob2Q6Om5hbWUoKSkpKTsKKyAgICBhcnIuYWRkKElkZW50aWZpZXIo
ZXhlYywgVVN0cmluZyhRdFBpeG1hcENyZWF0ZUVsZW1lbnRNZXRob2Q6Om5hbWUoKSkpKTsKKyAg
ICBhcnIuYWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhRdFBpeG1hcFRvU3RyaW5nTWV0aG9k
OjpuYW1lKCkpKSk7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVTdHJpbmcoUXRQaXht
YXBXaWR0aEZpZWxkOjpuYW1lKCkpKSk7CisgICAgYXJyLmFkZChJZGVudGlmaWVyKGV4ZWMsIFVT
dHJpbmcoUXRQaXhtYXBIZWlnaHRGaWVsZDo6bmFtZSgpKSkpOworfQorCitKU1ZhbHVlIFF0UGl4
bWFwSW5zdGFuY2U6OmRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUgcHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKHB0eXBlID09IFByZWZlck51bWJlcikg
eworICAgICAgICByZXR1cm4ganNCb29sZWFuKAorICAgICAgICAgICAgICAgIChkYXRhLnR5cGUo
KSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUltYWdlPigpKSAm
JiAhKGRhdGEudmFsdWU8UUltYWdlPigpKS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICB8fCAo
ZGF0YS50eXBlKCkgPT0gc3RhdGljX2Nhc3Q8UVZhcmlhbnQ6OlR5cGU+KHFNZXRhVHlwZUlkPFFQ
aXhtYXA+KCkpICYmICFkYXRhLnZhbHVlPFFQaXhtYXA+KCkuaXNOdWxsKCkpKTsKKyAgICB9Cisg
ICAgaWYgKHB0eXBlID09IFByZWZlclN0cmluZykKKyAgICAgICAgcmV0dXJuIHZhbHVlT2YoZXhl
Yyk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgUXRQaXhtYXBJbnN0
YW5jZTo6dmFsdWVPZihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgY29uc3QgUVN0cmlu
ZyB0b1N0ciA9IFFTdHJpbmcoIltRdCBOYXRpdmUgUGl4bWFwICUxLCUyXSIpLmFyZyh3aWR0aCgp
KS5hcmcoaGVpZ2h0KCkpOworICAgIFVTdHJpbmcgdXN0cmluZygoVUNoYXIqKXRvU3RyLnV0ZjE2
KCksIHRvU3RyLmxlbmd0aCgpKTsKKyAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgdXN0cmluZyk7
Cit9CisKK1F0UGl4bWFwSW5zdGFuY2U6OlF0UGl4bWFwSW5zdGFuY2UoUGFzc1JlZlB0cjxSb290
T2JqZWN0PiByb290T2JqLCBjb25zdCBRVmFyaWFudCYgZCkKKyAgICAgICAgOkluc3RhbmNlKHJv
b3RPYmopLCBkYXRhKGQpCit7Cit9CisKK2ludCBRdFBpeG1hcEluc3RhbmNlOjp3aWR0aCgpIGNv
bnN0Cit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBl
PihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEudmFsdWU8UVBp
eG1hcD4oKS53aWR0aCgpOworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFy
aWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UUltYWdlPigpKSkKKyAgICAgICAgcmV0dXJuIGRhdGEu
dmFsdWU8UUltYWdlPigpLndpZHRoKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBRdFBpeG1h
cEluc3RhbmNlOjpoZWlnaHQoKSBjb25zdAoreworICAgIGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0
aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBlSWQ8UVBpeG1hcD4oKSkpCisgICAgICAg
IHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCkuaGVpZ2h0KCk7CisgICAgaWYgKGRhdGEudHlw
ZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkp
KQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxRSW1hZ2U+KCkuaGVpZ2h0KCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK1FQaXhtYXAgUXRQaXhtYXBJbnN0YW5jZTo6dG9QaXhtYXAoKQoreworICAg
IGlmIChkYXRhLnR5cGUoKSA9PSBzdGF0aWNfY2FzdDxRVmFyaWFudDo6VHlwZT4ocU1ldGFUeXBl
SWQ8UVBpeG1hcD4oKSkpCisgICAgICAgIHJldHVybiBkYXRhLnZhbHVlPFFQaXhtYXA+KCk7Cisg
ICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpUeXBlPihxTWV0YVR5
cGVJZDxRSW1hZ2U+KCkpKSB7CisgICAgICAgIGNvbnN0IFFQaXhtYXAgcHhtID0gUVBpeG1hcDo6
ZnJvbUltYWdlKGRhdGEudmFsdWU8UUltYWdlPigpKTsKKyAgICAgICAgZGF0YSA9IFFWYXJpYW50
Ojpmcm9tVmFsdWU8UVBpeG1hcD4ocHhtKTsKKyAgICAgICAgcmV0dXJuIHB4bTsKKyAgICB9Cisg
ICAgcmV0dXJuIFFQaXhtYXAoKTsKKworfQorCitRSW1hZ2UgUXRQaXhtYXBJbnN0YW5jZTo6dG9J
bWFnZSgpCit7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpU
eXBlPihxTWV0YVR5cGVJZDxRSW1hZ2U+KCkpKQorICAgICAgICByZXR1cm4gZGF0YS52YWx1ZTxR
SW1hZ2U+KCk7CisgICAgaWYgKGRhdGEudHlwZSgpID09IHN0YXRpY19jYXN0PFFWYXJpYW50OjpU
eXBlPihxTWV0YVR5cGVJZDxRUGl4bWFwPigpKSkgeworICAgICAgICBjb25zdCBRSW1hZ2UgaW1n
ID0gZGF0YS52YWx1ZTxRUGl4bWFwPigpLnRvSW1hZ2UoKTsKKyAgICAgICAgZGF0YSA9IFFWYXJp
YW50Ojpmcm9tVmFsdWU8UUltYWdlPihpbWcpOworICAgICAgICByZXR1cm4gaW1nOworICAgIH0K
KyAgICByZXR1cm4gUUltYWdlKCk7Cit9CisKK1FWYXJpYW50IFF0UGl4bWFwSW5zdGFuY2U6OnZh
cmlhbnRGcm9tT2JqZWN0KEpTT2JqZWN0KiBvYmplY3QsIFFNZXRhVHlwZTo6VHlwZSBoaW50KQor
eworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmIChoaW50ID09IHFNZXRhVHlwZUlkPFFQ
aXhtYXA+KCkpCisgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRUGl4bWFw
PihRUGl4bWFwKCkpOworICAgICAgICBpZiAoaGludCA9PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkp
CisgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQ6OmZyb21WYWx1ZTxRSW1hZ2U+KFFJbWFnZSgp
KTsKKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6
c19pbmZvKSkgeworICAgICAgICBKU0hUTUxJbWFnZUVsZW1lbnQqIGVsID0gc3RhdGljX2Nhc3Q8
SlNIVE1MSW1hZ2VFbGVtZW50Kj4ob2JqZWN0KTsKKyAgICAgICAgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGVsLT5pbXBsKCkp
OworICAgICAgICBpZiAoaW1hZ2VFbGVtZW50KSB7CisgICAgICAgICAgICBDYWNoZWRJbWFnZSog
Y0ltZyA9IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAgICAgIGlmIChjSW1n
KSB7CisgICAgICAgICAgICAgICAgSW1hZ2UqIGltZyA9IGNJbWctPmltYWdlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGltZykgeworICAgICAgICAgICAgICAgICAgICBRUGl4bWFwKiBweG0gPSBp
bWctPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChweG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaGludCA9PSBzdGF0aWNf
Y2FzdDxRTWV0YVR5cGU6OlR5cGU+KHFNZXRhVHlwZUlkPFFQaXhtYXA+KCkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBRVmFyaWFudDo6ZnJvbVZhbHVlPFFQaXhtYXA+KCpweG0p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFFWYXJpYW50Ojpmcm9tVmFsdWU8UUlt
YWdlPihweG0tPnRvSW1hZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+
aW5oZXJpdHMoJlF0UGl4bWFwUnVudGltZU9iamVjdEltcDo6c19pbmZvKSkgeworICAgICAgICBR
dFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAqIGltcCA9IHN0YXRpY19jYXN0PFF0UGl4bWFwUnVudGlt
ZU9iamVjdEltcCo+KG9iamVjdCk7CisgICAgICAgIFF0UGl4bWFwSW5zdGFuY2UqIGluc3QgPSBz
dGF0aWNfY2FzdDxRdFBpeG1hcEluc3RhbmNlKj4oaW1wLT5nZXRJbnRlcm5hbEluc3RhbmNlKCkp
OworICAgICAgICBpZiAoaW5zdCkgeworICAgICAgICAgICAgaWYgKGhpbnQgPT0gcU1ldGFUeXBl
SWQ8UVBpeG1hcCA+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpmcm9tVmFs
dWU8UVBpeG1hcD4oaW5zdC0+dG9QaXhtYXAoKSk7CisgICAgICAgICAgICBpZiAoaGludCA9PSBx
TWV0YVR5cGVJZDxRSW1hZ2U+KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJpYW50Ojpm
cm9tVmFsdWU8UUltYWdlPihpbnN0LT50b0ltYWdlKCkpOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiAwOworfQorSlNPYmplY3QqIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVP
YmplY3QoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIGNvbnN0
IFFWYXJpYW50JiBkYXRhKQoreworICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CisgICAgcmV0dXJuIG5ldyhleGVjKSBRdFBpeG1hcFJ1bnRpbWVPYmplY3RJbXAoZXhlYywg
bmV3IFF0UGl4bWFwSW5zdGFuY2Uocm9vdCwgZGF0YSkpOworfQorCitib29sIFF0UGl4bWFwSW5z
dGFuY2U6OmNhbkhhbmRsZShRTWV0YVR5cGU6OlR5cGUgaGludCkKK3sKKyAgICByZXR1cm4gaGlu
dCA9PSBxTWV0YVR5cGVJZDxRSW1hZ2U+KCkgfHwgaGludCA9PSBxTWV0YVR5cGVJZDxRUGl4bWFw
PigpOworfQorCit9CisKK30KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRp
bWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBxdF9waXhtYXBydW50aW1lX2gKKyNkZWZp
bmUgcXRfcGl4bWFwcnVudGltZV9oCisKKyNpbmNsdWRlICJydW50aW1lLmgiCisjaW5jbHVkZSA8
UVZhcmlhbnQ+CisKK25hbWVzcGFjZSBKU0MgeworCituYW1lc3BhY2UgQmluZGluZ3MgeworCitj
bGFzcyBRdFBpeG1hcEluc3RhbmNlIDogcHVibGljIEluc3RhbmNlIHsKKyAgICBRVmFyaWFudCBk
YXRhOworcHVibGljOgorICAgIFF0UGl4bWFwSW5zdGFuY2UoUGFzc1JlZlB0cjxSb290T2JqZWN0
PiByb290T2JqLCBjb25zdCBRVmFyaWFudCYgbmV3RGF0YSk7CisgICAgdmlydHVhbCBDbGFzcyog
Z2V0Q2xhc3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNT
dGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYp
OworCisgICAgdmlydHVhbCBKU1ZhbHVlIGRlZmF1bHRWYWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJy
ZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVPZihFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0OworICAgIGludCB3aWR0aCgpIGNvbnN0OworICAgIGludCBoZWln
aHQoKSBjb25zdDsKKyAgICBRUGl4bWFwIHRvUGl4bWFwKCk7CisgICAgUUltYWdlIHRvSW1hZ2Uo
KTsKKyAgICBzdGF0aWMgSlNPYmplY3QqIGNyZWF0ZVJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlKiwg
UGFzc1JlZlB0cjxSb290T2JqZWN0PiwgY29uc3QgUVZhcmlhbnQmKTsKKyAgICBzdGF0aWMgUVZh
cmlhbnQgdmFyaWFudEZyb21PYmplY3QoSlNPYmplY3QqLCBRTWV0YVR5cGU6OlR5cGUgaGludCk7
CisgICAgc3RhdGljIGJvb2wgY2FuSGFuZGxlKFFNZXRhVHlwZTo6VHlwZSBoaW50KTsKK307CisK
K30KKworfQorI2VuZGlmCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkocmV2aXNpb24g
NTM0MjcpCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInFvYmplY3QuaCIKICNpbmNsdWRlICJxc3Ry
aW5nbGlzdC5oIgogI2luY2x1ZGUgInF0X2luc3RhbmNlLmgiCisjaW5jbHVkZSAicXRfcGl4bWFw
cnVudGltZS5oIgogI2luY2x1ZGUgInF2YXJsZW5ndGhhcnJheS5oIgogI2luY2x1ZGUgPEpTRnVu
Y3Rpb24uaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KQEAgLTcyMCw2ICs3MjEsOCBAQCBRVmFyaWFu
dCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShzdGF0aWNfY2FzdDxRTWV0YVR5
cGU6OlR5cGU+KGhpbnQpKSkgeworICAgICAgICAgICAgICAgIHJldCA9IFF0UGl4bWFwSW5zdGFu
Y2U6OnZhcmlhbnRGcm9tT2JqZWN0KG9iamVjdCwgc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBl
PihoaW50KSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlw
ZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpIHsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2Up
CkBAIC04NDksNiArODUyLDkgQEAgSlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNT
dGF0ZQogICAgICAgICByZXR1cm4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5jZShvYmosIHJvb3Qs
IFFTY3JpcHRFbmdpbmU6OlF0T3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsK
ICAgICB9CiAKKyAgICBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxlKHN0YXRpY19jYXN0
PFFNZXRhVHlwZTo6VHlwZT4odmFyaWFudC50eXBlKCkpKSkKKyAgICAgICAgcmV0dXJuIFF0UGl4
bWFwSW5zdGFuY2U6OmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYywgcm9vdCwgdmFyaWFudCk7CisK
ICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFWYXJpYW50TWFwKSB7CiAgICAgICAgIC8vIGNy
ZWF0ZSBhIG5ldyBvYmplY3QsIGFuZCBzdHVmZiBwcm9wZXJ0aWVzIGludG8gaXQKICAgICAgICAg
SlNPYmplY3QqIHJldCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOwpJbmRleDogV2ViS2l0
L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvQ2hhbmdlTG9nCShyZXZpc2lv
biA1MzUxOSkKKysrIFdlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzOSBAQAorMjAxMC0wMS0xOSAgTm8nYW0gUm9zZW50aGFsICA8bm9hbS5yb3NlbnRoYWxAbm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF0gQWRkaW5nIFFQaXhtYXAvUUltYWdlIHN1cHBvcnQgZm9yIHRoZSBRdCBoeWJyaWQgbGF5
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMyNDYx
CisKKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQaXhtYXA6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L2h5YnJpZFBpeG1hcC9oeWJyaWRQaXhtYXAucHJvOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9o
eWJyaWRQaXhtYXAvcmVzb3VyY2VzLnFyYzogQWRkZWQuCisgICAgICAgICogdGVzdHMvaHlicmlk
UGl4bWFwL3Rlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvaHlicmlkUGl4bWFwL3Rz
dF9oeWJyaWRQaXhtYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRzdF9oeWJyaWRQaXhtYXA6OnRz
dF9oeWJyaWRQaXhtYXApOiB0ZXN0cyBtb3N0IG9mIHRoZSB1c2UgY2FzZXMgZm9yCisgICAgICAg
IGh5YnJpZCBwaXhtYXAvaW1hZ2UgbWFuaXB1bGF0aW9uIAorICAgICAgICAodHN0X2h5YnJpZFBp
eG1hcDo6aW5pdCk6IFFUZXN0TGliIGluaXRpYWxpemF0aW9uCisgICAgICAgICh0c3RfaHlicmlk
UGl4bWFwOjpjbGVhbnVwKTogUVRlc3RMaWIgY2xlYW51cAorICAgICAgICAodHN0X2h5YnJpZFBp
eG1hcDo6aHlicmlkUGl4bWFwKTogcnVuIHRoZSBodG1sIGZpbGUKKyAgICAgICAgKiB0ZXN0cy9o
eWJyaWRQaXhtYXAvd2lkZ2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXaWRnZXQ6OldpZGdldCk6
CisgICAgICAgIChXaWRnZXQ6OnJlZnJlc2hKUyk6CisgICAgICAgIChXaWRnZXQ6OnN0YXJ0KToK
KyAgICAgICAgKFdpZGdldDo6Y29tcGxldGVUZXN0KToKKyAgICAgICAgKFdpZGdldDo6c2V0UGl4
bWFwKToKKyAgICAgICAgKFdpZGdldDo6cGl4bWFwKToKKyAgICAgICAgKFdpZGdldDo6c2V0SW1h
Z2UpOgorICAgICAgICAoV2lkZ2V0OjppbWFnZSk6CisgICAgICAgIChXaWRnZXQ6On5XaWRnZXQp
OgorICAgICAgICAoV2lkZ2V0OjpjaGFuZ2VFdmVudCk6CisgICAgICAgIChXaWRnZXQ6OmNvbXBh
cmUpOgorICAgICAgICAoV2lkZ2V0OjppbWFnZVNsb3QpOgorICAgICAgICAoV2lkZ2V0OjpwaXht
YXBTbG90KToKKyAgICAgICAgKFdpZGdldDo6cmFuZG9tU2xvdCk6CisgICAgICAgICogdGVzdHMv
aHlicmlkUGl4bWFwL3dpZGdldC5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9oeWJyaWRQaXht
YXAvd2lkZ2V0LnVpOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy90ZXN0cy5wcm86CisKIDIwMTAt
MDEtMTkgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJvCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy90ZXN0cy5wcm8JKHJldmlzaW9uIDUzNDI3KQor
KysgV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQg
QEAKIAogVEVNUExBVEUgPSBzdWJkaXJzCi1TVUJESVJTID0gcXdlYmZyYW1lIHF3ZWJwYWdlIHF3
ZWJlbGVtZW50IHFncmFwaGljc3dlYnZpZXcgcXdlYmhpc3RvcnlpbnRlcmZhY2UgcXdlYnZpZXcg
cXdlYmhpc3RvcnkgcXdlYmluc3BlY3RvcgorU1VCRElSUyA9IHF3ZWJmcmFtZSBxd2VicGFnZSBx
d2ViZWxlbWVudCBxZ3JhcGhpY3N3ZWJ2aWV3IHF3ZWJoaXN0b3J5aW50ZXJmYWNlIHF3ZWJ2aWV3
IHF3ZWJoaXN0b3J5IHF3ZWJpbnNwZWN0b3IgaHlicmlkUGl4bWFwCiBncmVhdGVyVGhhbihRVF9N
SU5PUl9WRVJTSU9OLCA0KTogU1VCRElSUyArPSBiZW5jaG1hcmtzL3BhaW50aW5nIGJlbmNobWFy
a3MvbG9hZGluZwpJbmRleDogV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9oeWJyaWRQaXht
YXAucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvaHlicmlk
UGl4bWFwLnBybwkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAv
aHlicmlkUGl4bWFwLnBybwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorIyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2plY3QgY3Jl
YXRlZCBieSBRdENyZWF0b3IgMjAwOS0xMi0xMFQxMToyNTowMgorIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbmNsdWRlKC4uL3Rlc3RzLnByaSkK
K1RBUkdFVCA9IGh5YnJpZFBpeG1hcAorU09VUkNFUyArPSB3aWRnZXQuY3BwCitIRUFERVJTICs9
IHdpZGdldC5oCitGT1JNUyArPSB3aWRnZXQudWkKK1JFU09VUkNFUyArPSByZXNvdXJjZXMucXJj
CitDT05GSUcgKz0gY29uc29sZQpJbmRleDogV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC9y
ZXNvdXJjZXMucXJjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAv
cmVzb3VyY2VzLnFyYwkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXht
YXAvcmVzb3VyY2VzLnFyYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACis8UkNDPgorICAg
IDxxcmVzb3VyY2UgcHJlZml4PSIvIj4KKyAgICAgICAgPGZpbGU+dGVzdC5odG1sPC9maWxlPgor
ICAgIDwvcXJlc291cmNlPgorPC9SQ0M+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4
bWFwL3Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFw
L3Rlc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAv
dGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACis8aHRtbD4KKyAgICA8aGVh
ZD4KKyAgICAgICAgPHN0eWxlPgorICAgICAgICAgICAgaW1nIHsgZGlzcGxheTogYmxvY2s7IGJv
cmRlci1zdHlsZTogZ3Jvb3ZlfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c2NyaXB0Pgor
ICAgICAgICAgICAgZnVuY3Rpb24gc3RhcnRUZXN0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB2YXIgb2JqID0gbXlXaWRnZXQuaW1hZ2U7CisgICAgICAgICAgICAgICAgdmFyIHB4
bSA9IG15V2lkZ2V0LnBpeG1hcDsKKworICAgICAgICAgICAgICAgIHZhciBpbWcgPSBvYmoudG9I
VE1MSW1hZ2VFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgdmFyIGltZzEgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiaW1nMSIpOworICAgICAgICAgICAgICAgIHZhciBpbWcyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImltZzIiKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGltZyk7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChweG0udG9IVE1MSW1hZ2VFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIHZhciBzaWdu
YWxzRmlyZWQgPSAwOworICAgICAgICAgICAgICAgIG15V2lkZ2V0LmNvbXBhcmUob2JqLnRvU3Ry
aW5nKCksIltRdCBOYXRpdmUgUGl4bWFwICIrb2JqLndpZHRoKyIsIitvYmouaGVpZ2h0KyJdIik7
CisgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGFyZShTdHJpbmcocHhtKSwiW1F0IE5hdGl2
ZSBQaXhtYXAgIitweG0ud2lkdGgrIiwiK3B4bS5oZWlnaHQrIl0iKTsKKworICAgICAgICAgICAg
ICAgIC8vIHRoaXMgc2hvdWxkbid0IHdvcmsgYnV0IHNob3VsZG4ndCBjcmFzaAorICAgICAgICAg
ICAgICAgIG15V2lkZ2V0LnJhbmRvbVNsb3QoImZvb2JhciIpOworCisgICAgICAgICAgICAgICAg
bXlXaWRnZXQucGl4bWFwU2lnbmFsLmNvbm5lY3QoZnVuY3Rpb24oaW1nRnJvbVNpZ25hbCkgewor
ICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJlKGltZ0Zyb21TaWduYWwuaGVpZ2h0
LCBpbWcyLmhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK3NpZ25hbHNGaXJlZCA9
PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgbXlXaWRnZXQuY29tcGxldGVUZXN0KCk7Cisg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBteVdpZGdldC5pbWFnZVNpZ25h
bC5jb25uZWN0KGZ1bmN0aW9uKGltZ0Zyb21TaWduYWwpIHsKKyAgICAgICAgICAgICAgICAgICAg
bXlXaWRnZXQuY29tcGFyZShweG0uaGVpZ2h0LCBpbWcyLmhlaWdodCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICgrK3NpZ25hbHNGaXJlZCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAg
bXlXaWRnZXQuY29tcGxldGVUZXN0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
ICAgICAgICBmdW5jdGlvbiBjb250aW51ZVRlc3RBZnRlckltYWdlc0FyZUxvYWRlZCgpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW1nMS5jb21wbGV0ZSAmJiBp
bWcyLmNvbXBsZXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBteVdpZGdldC5jb21wYXJl
KHB4bS5oZWlnaHQsIGltZzIuaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15V2lk
Z2V0LnBpeG1hcFNsb3QoaW1nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15V2lkZ2V0Lmlt
YWdlU2xvdChweG0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGltZzEub25sb2FkID0gY29udGludWVUZXN0QWZ0ZXJJbWFnZXNBcmVM
b2FkZWQ7CisgICAgICAgICAgICAgICAgaW1nMi5vbmxvYWQgPSBjb250aW51ZVRlc3RBZnRlcklt
YWdlc0FyZUxvYWRlZDsKKyAgICAgICAgICAgICAgICBpbWcxLnNyYyA9IG9iai50b0RhdGFVcmwo
KTsKKyAgICAgICAgICAgICAgICBpbWcyLnNyYyA9IG15V2lkZ2V0LnBpeG1hcC50b0RhdGFVcmwo
KTsKKyAgICAgICAgICAgICAgICBteVdpZGdldC5pbWFnZSA9IHB4bTsKKyAgICAgICAgICAgICAg
ICBteVdpZGdldC5waXhtYXAgPSBpbWc7CisgICAgICAgICAgICB9CisgICAgICAgIDwvc2NyaXB0
PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9InN0YXJ0VGVzdCgpIj4KKyAgICAgICAg
PGltZyBpZD0iaW1nMSIgLz4KKyAgICAgICAgPGltZyBpZD0iaW1nMiIgLz4KKyAgICA8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3RzdF9oeWJyaWRQ
aXhtYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvdHN0
X2h5YnJpZFBpeG1hcC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlk
UGl4bWFwL3RzdF9oeWJyaWRQaXhtYXAuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNp
bmNsdWRlICIuLi91dGlsLmgiCisKKyNpbmNsdWRlICJ3aWRnZXQuaCIKKyNpbmNsdWRlIDxRdFRl
c3QvUXRUZXN0PgorCitjbGFzcyB0c3RfaHlicmlkUGl4bWFwIDogcHVibGljIFFPYmplY3Qgewor
ICAgIFFfT0JKRUNUCisKK3B1YmxpYzoKKyAgICB0c3RfaHlicmlkUGl4bWFwKFFPYmplY3QqIG8g
PSAwKSA6IFFPYmplY3Qobykge30KKworcHVibGljIHNsb3RzOgorICAgIHZvaWQgaW5pdCgpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgY2xlYW51cCgpCisgICAgeworICAgIH0KKworcHJpdmF0
ZSBzbG90czoKKyAgICB2b2lkIGh5YnJpZFBpeG1hcCgpCisgICAgeworICAgICAgICBXaWRnZXQg
d2lkZ2V0OworICAgICAgICB3aWRnZXQuc2hvdygpOworICAgICAgICB3aWRnZXQuc3RhcnQoKTsK
KyAgICAgICAgd2FpdEZvclNpZ25hbCgmd2lkZ2V0LCBTSUdOQUwodGVzdENvbXBsZXRlKCkpKTsK
KyAgICB9Cit9OworCitRVEVTVF9NQUlOKHRzdF9oeWJyaWRQaXhtYXApCisKKyNpbmNsdWRlIDx0
c3RfaHlicmlkUGl4bWFwLm1vYz4KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAv
d2lkZ2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dp
ZGdldC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvcXQvdGVzdHMvaHlicmlkUGl4bWFwL3dp
ZGdldC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJ3aWRnZXQuaCIK
KworI2luY2x1ZGUgInF3ZWJlbGVtZW50LmgiCisjaW5jbHVkZSAicXdlYmZyYW1lLmgiCisjaW5j
bHVkZSAidWlfd2lkZ2V0LmgiCisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UXRUZXN0
L1F0VGVzdD4KKworV2lkZ2V0OjpXaWRnZXQoUVdpZGdldCogcGFyZW50KSA6CisgICAgUVdpZGdl
dChwYXJlbnQpLAorICAgIHVpKG5ldyBVaTo6V2lkZ2V0KQoreworICAgIHVpLT5zZXR1cFVpKHRo
aXMpOworfQorCit2b2lkIFdpZGdldDo6cmVmcmVzaEpTKCkKK3sKKyAgICB1aS0+d2ViVmlldy0+
cGFnZSgpLT5tYWluRnJhbWUoKS0+YWRkVG9KYXZhU2NyaXB0V2luZG93T2JqZWN0KCJteVdpZGdl
dCIsIHRoaXMpOworfQordm9pZCBXaWRnZXQ6OnN0YXJ0KCkKK3sKKyAgICB1aS0+d2ViVmlldy0+
bG9hZChRVXJsKCJxcmM6Ly8vdGVzdC5odG1sIikpOworICAgIGNvbm5lY3QodWktPndlYlZpZXct
PnBhZ2UoKS0+bWFpbkZyYW1lKCksIFNJR05BTChqYXZhU2NyaXB0V2luZG93T2JqZWN0Q2xlYXJl
ZCgpKSwgdGhpcywgU0xPVChyZWZyZXNoSlMoKSkpOworICAgIHVpLT53ZWJWaWV3LT5wYWdlKCkt
Pm1haW5GcmFtZSgpLT5hZGRUb0phdmFTY3JpcHRXaW5kb3dPYmplY3QoIm15V2lkZ2V0IiwgdGhp
cyk7Cit9CisKK3ZvaWQgV2lkZ2V0Ojpjb21wbGV0ZVRlc3QoKQoreworICAgIFFDT01QQVJFKHVp
LT5sYmwxLT5waXhtYXAoKS0+c2l6ZSgpLCB1aS0+bGJsMi0+c2l6ZSgpKTsKKyAgICBRQ09NUEFS
RSh1aS0+bGJsMy0+c2l6ZSgpLCB1aS0+bGJsNC0+cGl4bWFwKCktPnNpemUoKSk7CisgICAgUUNP
TVBBUkUodWktPmxibDItPnNpemUoKS53aWR0aCgpLCB1aS0+d2ViVmlldy0+cGFnZSgpLT5tYWlu
RnJhbWUoKS0+ZmluZEZpcnN0RWxlbWVudCgiI2ltZzEiKS5ldmFsdWF0ZUphdmFTY3JpcHQoInRo
aXMud2lkdGgiKS50b0ludCgpKTsKKyAgICBRQ09NUEFSRSh1aS0+bGJsMy0+c2l6ZSgpLndpZHRo
KCksIHVpLT53ZWJWaWV3LT5wYWdlKCktPm1haW5GcmFtZSgpLT5maW5kRmlyc3RFbGVtZW50KCIj
aW1nMiIpLmV2YWx1YXRlSmF2YVNjcmlwdCgidGhpcy53aWR0aCIpLnRvSW50KCkpOworICAgIGVt
aXQgdGVzdENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQaXhtYXAoY29uc3QgUVBp
eG1hcCYgcCkKK3sKKyAgICB1aS0+bGJsMS0+c2V0UGl4bWFwKHApOworfQorUVBpeG1hcCBXaWRn
ZXQ6OnBpeG1hcCgpIGNvbnN0Cit7CisgICAgUVBpeG1hcCBweCh1aS0+bGJsMy0+c2l6ZSgpKTsK
KyAgICB7CisgICAgICAgIFFQYWludGVyIHAoJnB4KTsKKyAgICAgICAgdWktPmxibDMtPnJlbmRl
cigmcCk7CisgICAgfQorICAgIHJldHVybiBweDsKK30KK3ZvaWQgV2lkZ2V0OjpzZXRJbWFnZShj
b25zdCBRSW1hZ2UmIGltZykKK3sKKyAgICB1aS0+bGJsNC0+c2V0UGl4bWFwKFFQaXhtYXA6OmZy
b21JbWFnZShpbWcpKTsKK30KKworUUltYWdlIFdpZGdldDo6aW1hZ2UoKSBjb25zdAoreworICAg
IFFJbWFnZSBpbWcodWktPmxibDItPnNpemUoKSwgUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAg
ICB7CisgICAgICAgIFFQYWludGVyIHAoJmltZyk7CisgICAgICAgIHVpLT5sYmwyLT5yZW5kZXIo
JnApOworICAgIH0KKyAgICByZXR1cm4gaW1nOworfQorCitXaWRnZXQ6On5XaWRnZXQoKQorewor
ICAgIGRlbGV0ZSB1aTsKK30KKwordm9pZCBXaWRnZXQ6OmNoYW5nZUV2ZW50KFFFdmVudCogZSkK
K3sKKyAgICBRV2lkZ2V0OjpjaGFuZ2VFdmVudChlKTsKKyAgICBzd2l0Y2ggKGUtPnR5cGUoKSkg
eworICAgIGNhc2UgUUV2ZW50OjpMYW5ndWFnZUNoYW5nZToKKyAgICAgICAgdWktPnJldHJhbnNs
YXRlVWkodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KK3ZvaWQgV2lkZ2V0Ojpjb21wYXJlKGNvbnN0IFFWYXJpYW50JiBhLCBjb25z
dCBRVmFyaWFudCYgYikKK3sKKyAgICBRQ09NUEFSRShhLCBiKTsKK30KKwordm9pZCBXaWRnZXQ6
OmltYWdlU2xvdChjb25zdCBRSW1hZ2UmIGltZykKK3sKKyAgICBRQ09NUEFSRShpbWcuc2l6ZSgp
LCB1aS0+bGJsMy0+c2l6ZSgpKTsKKyAgICBlbWl0IHBpeG1hcFNpZ25hbChRUGl4bWFwOjpmcm9t
SW1hZ2UoaW1nKSk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpwaXhtYXBTbG90KGNvbnN0IFFQaXhtYXAm
IHB4bSkKK3sKKyAgICBRQ09NUEFSRShweG0uc2l6ZSgpLCB1aS0+bGJsMi0+c2l6ZSgpKTsKKyAg
ICBlbWl0IGltYWdlU2lnbmFsKHVpLT5sYmw0LT5waXhtYXAoKS0+dG9JbWFnZSgpKTsKK30KKwor
dm9pZCBXaWRnZXQ6OnJhbmRvbVNsb3QoY29uc3QgUVBpeG1hcCYgcHhtKQoreworICAgIFFWRVJJ
RlkocHhtLmlzTnVsbCgpKTsKK30KSW5kZXg6IFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAv
d2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3F0L3Rlc3RzL2h5YnJpZFBpeG1hcC93aWRn
ZXQuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9xdC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiB3aWRnZXRfaAorI2RlZmluZSB3
aWRnZXRfaAorCisjaW5jbHVkZSA8UUltYWdlPgorI2luY2x1ZGUgPFFQaXhtYXA+CisjaW5jbHVk
ZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFVpIHsKK2NsYXNzIFdpZGdldDsKK30KKworY2xhc3Mg
V2lkZ2V0IDogcHVibGljIFFXaWRnZXQgeworICAgIFFfT0JKRUNUCisgICAgUV9QUk9QRVJUWShR
UGl4bWFwIHBpeG1hcCBSRUFEIHBpeG1hcCBXUklURSBzZXRQaXhtYXApCisgICAgUV9QUk9QRVJU
WShRSW1hZ2UgaW1hZ2UgUkVBRCBpbWFnZSBXUklURSBzZXRJbWFnZSkKKworcHVibGljOgorICAg
IFdpZGdldChRV2lkZ2V0KiBwYXJlbnQgPSAwKTsKKyAgICB+V2lkZ2V0KCk7CisgICAgdm9pZCBz
ZXRQaXhtYXAoY29uc3QgUVBpeG1hcCYpOworICAgIFFQaXhtYXAgcGl4bWFwKCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRJbWFnZShjb25zdCBRSW1hZ2UmKTsKKyAgICBRSW1hZ2UgaW1hZ2UoKSBjb25z
dDsKKworcHJpdmF0ZSBzbG90czoKKyAgICB2b2lkIHJlZnJlc2hKUygpOworCitwdWJsaWMgc2xv
dHM6CisgICAgdm9pZCBjb21wbGV0ZVRlc3QoKTsKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAgdm9p
ZCBjb21wYXJlKGNvbnN0IFFWYXJpYW50JiBhLCBjb25zdCBRVmFyaWFudCYgYik7CisgICAgdm9p
ZCBpbWFnZVNsb3QoY29uc3QgUUltYWdlJik7CisgICAgdm9pZCBwaXhtYXBTbG90KGNvbnN0IFFQ
aXhtYXAmKTsKKyAgICB2b2lkIHJhbmRvbVNsb3QoY29uc3QgUVBpeG1hcCYpOworCitzaWduYWxz
OgorICAgIHZvaWQgdGVzdENvbXBsZXRlKCk7CisgICAgdm9pZCBpbWFnZVNpZ25hbChjb25zdCBR
SW1hZ2UmKTsKKyAgICB2b2lkIHBpeG1hcFNpZ25hbChjb25zdCBRUGl4bWFwJik7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGNoYW5nZUV2ZW50KFFFdmVudCogZSk7CisKK3ByaXZhdGU6CisgICAg
VWk6OldpZGdldCogdWk7Cit9OworCisjZW5kaWYgLy8gd2lkZ2V0X2gKSW5kZXg6IFdlYktpdC9x
dC90ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9xdC90
ZXN0cy9oeWJyaWRQaXhtYXAvd2lkZ2V0LnVpCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L3F0L3Rl
c3RzL2h5YnJpZFBpeG1hcC93aWRnZXQudWkJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8dWkgdmVyc2lvbj0iNC4w
Ij4KKyA8Y2xhc3M+V2lkZ2V0PC9jbGFzcz4KKyA8d2lkZ2V0IGNsYXNzPSJRV2lkZ2V0IiBuYW1l
PSJXaWRnZXQiPgorICA8cHJvcGVydHkgbmFtZT0iZ2VvbWV0cnkiPgorICAgPHJlY3Q+CisgICAg
PHg+MDwveD4KKyAgICA8eT4wPC95PgorICAgIDx3aWR0aD42MDA8L3dpZHRoPgorICAgIDxoZWln
aHQ+NDAwPC9oZWlnaHQ+CisgICA8L3JlY3Q+CisgIDwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBu
YW1lPSJ3aW5kb3dUaXRsZSI+CisgICA8c3RyaW5nPldpZGdldDwvc3RyaW5nPgorICA8L3Byb3Bl
cnR5PgorICA8bGF5b3V0IGNsYXNzPSJRVkJveExheW91dCIgbmFtZT0idmVydGljYWxMYXlvdXQi
PgorICAgPGl0ZW0+CisgICAgPHdpZGdldCBjbGFzcz0iUVdlYlZpZXciIG5hbWU9IndlYlZpZXci
PgorICAgICA8cHJvcGVydHkgbmFtZT0idXJsIj4KKyAgICAgIDx1cmw+CisgICAgICAgPHN0cmlu
Zz5hYm91dDpibGFuazwvc3RyaW5nPgorICAgICAgPC91cmw+CisgICAgIDwvcHJvcGVydHk+Cisg
ICAgPC93aWRnZXQ+CisgICA8L2l0ZW0+CisgICA8aXRlbT4KKyAgICA8bGF5b3V0IGNsYXNzPSJR
SEJveExheW91dCIgbmFtZT0iaG9yaXpvbnRhbExheW91dCI+CisgICAgIDxpdGVtPgorICAgICAg
PHdpZGdldCBjbGFzcz0iUUxhYmVsIiBuYW1lPSJsYmwxIj4KKyAgICAgICA8cHJvcGVydHkgbmFt
ZT0idGV4dCI+CisgICAgICAgIDxzdHJpbmcvPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8
L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAgICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9
IlFMYWJlbCIgbmFtZT0ibGJsMiI+CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1pbmltdW1TaXpl
Ij4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAg
IDxoZWlnaHQ+MzA8L2hlaWdodD4KKyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+
CisgICAgICAgPHByb3BlcnR5IG5hbWU9Im1heGltdW1TaXplIj4KKyAgICAgICAgPHNpemU+Cisg
ICAgICAgICA8d2lkdGg+MTIwPC93aWR0aD4KKyAgICAgICAgIDxoZWlnaHQ+MzA8L2hlaWdodD4K
KyAgICAgICAgPC9zaXplPgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgPHByb3BlcnR5IG5h
bWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPkltYWdlIGZyb20gUXQgdG8gSFRNTDwvc3RyaW5n
PgorICAgICAgIDwvcHJvcGVydHk+CisgICAgICA8L3dpZGdldD4KKyAgICAgPC9pdGVtPgorICAg
ICA8aXRlbT4KKyAgICAgIDx3aWRnZXQgY2xhc3M9IlFMYWJlbCIgbmFtZT0ibGJsMyI+CisgICAg
ICAgPHByb3BlcnR5IG5hbWU9InRleHQiPgorICAgICAgICA8c3RyaW5nPlBpeG1hcCBmcm9tIFF0
IHRvIEhUTUw8L3N0cmluZz4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgPC93aWRnZXQ+Cisg
ICAgIDwvaXRlbT4KKyAgICAgPGl0ZW0+CisgICAgICA8d2lkZ2V0IGNsYXNzPSJRTGFiZWwiIG5h
bWU9ImxibDQiPgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0Ij4KKyAgICAgICAgPHN0cmlu
Zy8+CisgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvd2lkZ2V0PgorICAgICA8L2l0ZW0+Cisg
ICAgIDxpdGVtPgorICAgICAgPHNwYWNlciBuYW1lPSJob3Jpem9udGFsU3BhY2VyIj4KKyAgICAg
ICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPgorICAgICAgICA8ZW51bT5RdDo6SG9yaXpv
bnRhbDwvZW51bT4KKyAgICAgICA8L3Byb3BlcnR5PgorICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJz
aXplSGludCIgc3Rkc2V0PSIwIj4KKyAgICAgICAgPHNpemU+CisgICAgICAgICA8d2lkdGg+NDA8
L3dpZHRoPgorICAgICAgICAgPGhlaWdodD4yMDwvaGVpZ2h0PgorICAgICAgICA8L3NpemU+Cisg
ICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgIDwvc3BhY2VyPgorICAgICA8L2l0ZW0+CisgICAgPC9s
YXlvdXQ+CisgICA8L2l0ZW0+CisgIDwvbGF5b3V0PgorIDwvd2lkZ2V0PgorIDxsYXlvdXRkZWZh
dWx0IHNwYWNpbmc9IjYiIG1hcmdpbj0iMTEiLz4KKyA8Y3VzdG9td2lkZ2V0cz4KKyAgPGN1c3Rv
bXdpZGdldD4KKyAgIDxjbGFzcz5RV2ViVmlldzwvY2xhc3M+CisgICA8ZXh0ZW5kcz5RV2lkZ2V0
PC9leHRlbmRzPgorICAgPGhlYWRlcj5RdFdlYktpdC9RV2ViVmlldzwvaGVhZGVyPgorICA8L2N1
c3RvbXdpZGdldD4KKyA8L2N1c3RvbXdpZGdldHM+CisgPHJlc291cmNlcy8+CisgPGNvbm5lY3Rp
b25zLz4KKzwvdWk+Cg==
</data>
<flag name="review"
          id="29328"
          type_id="1"
          status="+"
          setter="hausmann"
    />
    <flag name="commit-queue"
          id="29341"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>