<?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>64535</bug_id>
          
          <creation_ts>2011-07-14 09:53:47 -0700</creation_ts>
          <short_desc>Add fast path for ImageBuffer::draw</short_desc>
          <delta_ts>2011-07-21 13:49:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>64925</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matthew Delaney">mdelaney7</reporter>
          <assigned_to name="Matthew Delaney">mdelaney7</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>ian</cc>
    
    <cc>inferno</cc>
    
    <cc>kbr</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>mikelawther</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>437139</commentid>
    <comment_count>0</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-14 09:53:47 -0700</bug_when>
    <thetext>ImageBuffer::draw is a heavily used path (currently only by canvas::paint and drawing from/to a canvas) and can be optimized in the accelerated route by stripping out the call through the Image class to avoid all the context saves/restores and other &quot;general&quot; image drawing logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437166</commentid>
    <comment_count>1</comment_count>
      <attachid>100824</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-14 10:22:08 -0700</bug_when>
    <thetext>Created attachment 100824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437170</commentid>
    <comment_count>2</comment_count>
      <attachid>100824</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-14 10:28:20 -0700</bug_when>
    <thetext>Comment on attachment 100824
Patch

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

&gt; Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:-219
&gt; -        RefPtr&lt;Image&gt; copy = copyImage();
&gt; -        ColorSpace colorSpace = (destContext == context()) ? ColorSpaceDeviceRGB : styleColorSpace;
&gt; -        destContext-&gt;drawImage(copy.get(), colorSpace, destRect, srcRect, op, useLowQualityScale);

You&apos;re ignoring useLowQualityScale in the new code path.

The new code also doesn&apos;t do a bunch of stuff that BitmapImage::draw() does:
startAnimation()
mayFillWithSolidColor()
Bail early if part of the image will be drawn.
The shouldUseSubimage stuff.
Adjusting the color space.
Calling  imageObserver()-&gt;didDraw().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437246</commentid>
    <comment_count>3</comment_count>
    <who name="Ian Henderson">ian</who>
    <bug_when>2011-07-14 12:17:45 -0700</bug_when>
    <thetext>Could drawImage() detect we&apos;re in this case and skip the save / restore calls?  What makes it valid to skip all the general image drawing logic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438655</commentid>
    <comment_count>4</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-18 13:12:33 -0700</bug_when>
    <thetext>I put a bunch of thought into this and realized that what we need here is to make the image drawing paths clearer. ImageBuffer is this weird beast that currently wraps itself in a BitmapImage when it goes to draw - this has a lot of unnecessary overhead. Since ImageBuffer is used heavily by high-performance-demanding image blitting paths such as Canvas and SVG, there should be a very fast path for blitting its image.

Basically, ImageBuffer::draw needs all of core code of BitmapImage&apos;s draw method without all the overhead of creating an BitmapImage and its setup when it draws (like startAnimation, getCurrentFrame, etc.).

BitmapImage currently represents what&apos;s supposed to be our &quot;general image object&quot; that wraps a CGImage or any other platform specific image. Unlike other things that are drawn through graphicscontext (text, shapes, etc.) it ends up holding the machinery for drawing itself into the graphicsContext, as opposed to the graphicsContext knowing how to draw it.

This patch refactors the core (platform specific) image drawing code from ImageCG.cpp and puts it in GraphicsContextCG.cpp so that GraphicsContext will know how to draw platform specific images into itself instead of images knowing how to draw into GraphicsContexts. To do this, we add a GraphicsContext::drawImage that takes the platform specific NativeImagePtr and it does the core work. Thus, BitmapImage still can have all of its setup and tear down machinery but then passes off its CGImageRef over to GraphicsContext to do the actual drawing. Many agree that this paradigm makes more sense and it also opens up more room for faster drawing and code reuse.

With the above change to GraphicsContext, ImageBuffer is now able to create its platform specific Image ref, not have to bottle it in a BitmapImage, and pass it directly to GraphicsContext to draw without any of the setup/teardown that BitmapImage::draw had. In my testing, this change alone easily removes 10-15% total cpu time for some sites that have canvas animations where an offscreen canvas is used as a sprite sheet to draw thousands of assets per second (thus hitting the ImageBuffer:draw path those thousands of times per second).

Other Notes:
 * This patch will currently break on other ports. I wanted to get feedback before stubbing out other ports.

 * &quot;imageWithColorSpace&quot; is a general image conversion routine that should live elsewhere. I currently just copied it over (I know, ::cringe::) and am looking for suggestions for where it should live. There are other static utility functions like this (mainly for images) that really should either live in a ImageUtilsCG or if they&apos;re cross platform-able, perhaps be defined off of GraphicsContext.

 * I removed useLowQuality from ImageBuffer::draw because it has not use for it now that it doesn&apos;t need to draw through BitmapImage::draw. It was redundant logic dealing with the useLowQuality from GraphicsContext::drawImageBuffer anyhow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438657</commentid>
    <comment_count>5</comment_count>
      <attachid>101194</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-18 13:14:27 -0700</bug_when>
    <thetext>Created attachment 101194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438662</commentid>
    <comment_count>6</comment_count>
      <attachid>101194</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-18 13:24:01 -0700</bug_when>
    <thetext>Comment on attachment 101194
Patch

Attachment 101194 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9115386</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438664</commentid>
    <comment_count>7</comment_count>
      <attachid>101194</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-07-18 13:26:20 -0700</bug_when>
    <thetext>Comment on attachment 101194
Patch

Attachment 101194 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9120089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438667</commentid>
    <comment_count>8</comment_count>
      <attachid>101194</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-07-18 13:29:44 -0700</bug_when>
    <thetext>Comment on attachment 101194
Patch

Attachment 101194 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9115391</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438735</commentid>
    <comment_count>9</comment_count>
      <attachid>101194</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-07-18 14:41:44 -0700</bug_when>
    <thetext>Comment on attachment 101194
Patch

Attachment 101194 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9110538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438985</commentid>
    <comment_count>10</comment_count>
      <attachid>101275</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-18 23:32:04 -0700</bug_when>
    <thetext>Created attachment 101275
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438990</commentid>
    <comment_count>11</comment_count>
      <attachid>101275</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-18 23:47:34 -0700</bug_when>
    <thetext>Comment on attachment 101275
Patch

Attachment 101275 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9150053</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>438992</commentid>
    <comment_count>12</comment_count>
      <attachid>101275</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-07-18 23:49:38 -0700</bug_when>
    <thetext>Comment on attachment 101275
Patch

Attachment 101275 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9154036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439015</commentid>
    <comment_count>13</comment_count>
      <attachid>101275</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-19 00:37:24 -0700</bug_when>
    <thetext>Comment on attachment 101275
Patch

Attachment 101275 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9159038</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439208</commentid>
    <comment_count>14</comment_count>
      <attachid>101333</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-19 09:31:52 -0700</bug_when>
    <thetext>Created attachment 101333
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439392</commentid>
    <comment_count>15</comment_count>
      <attachid>101333</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-19 13:24:21 -0700</bug_when>
    <thetext>Comment on attachment 101333
Patch

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

r=me but please consider the feedback.

&gt; Source/WebCore/ChangeLog:12
&gt; +        This isn&apos;t necessary, but it has been bothering me forever :-)

No need to justify this.

&gt; Source/WebCore/ChangeLog:13
&gt; +        (WebCore::GraphicsContext::drawImageBuffer): Removed the need to pass down useLowQualityScale since it&apos;s not needed below.

It&apos;s odd that it&apos;s not needed; is that just because no-one happens to use it in this code path? Might they in future?

&gt; Source/WebCore/ChangeLog:18
&gt; +        0) Changed copyImage() to deepCopy() to make it clear this copy is indeed deep (but could be COW)
&gt; +        1) Added shallowCopy() that gives a copy that doesn&apos;t guarantee to be a deep copy.

I&apos;m not sure these names are really accurate, but I can&apos;t think of better ones. The main difference seems to be that if you call shallowCopy(), subsequent drawing into the image buffer will change what you have.

Another approach would be:
enum BackingStoreCopy { CopyBackingStore, DontCopyBackingStore }
copyImage(BackingStoreCopy)

&gt; Source/WebCore/ChangeLog:27
&gt; +        2) Added in plaformDeepCopy(), and platformShallowCopy() to other methods that should use them.

plaformDeepCopy is misspelled.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:268
&gt; +        void drawImage(NativeImagePtr, const FloatSize&amp; selfSize, ColorSpace styleColorSpace, const FloatRect&amp; destRect, const FloatRect&amp; srcRect, CompositeOperator = CompositeSourceOver);

We&apos;d have to be careful that this overload isn&apos;t called by mistake if an Image has an operator NativeImagePtr(). I&apos;d suggest renaming it to drawNativeImage()

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:114
&gt; +        void draw(GraphicsContext*, ColorSpace styleColorSpace, const FloatRect&amp; destRect, const FloatRect&amp; srcRect = FloatRect(0, 0, -1, -1), CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false);

You can remove the styleColorSpace param name.

&gt; Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp:240
&gt; +            // We&apos;re drawing into our own buffer, need to deep copy.

Why this comment here and not in draw() above? I&apos;d prefer it in both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439615</commentid>
    <comment_count>16</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-19 21:29:21 -0700</bug_when>
    <thetext>Committed r91332: &lt;http://trac.webkit.org/changeset/91332&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439810</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-20 08:01:37 -0700</bug_when>
    <thetext>css3/images/optimize-contrast-canvas.html started crashing on Chromium Mac Debug after this patch (both 10.5 and 10.6):

http://test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=css3%2Fimages%2Foptimize-contrast-canvas.html&amp;showExpectations=true</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439820</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-20 08:19:37 -0700</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=64874.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>439847</commentid>
    <comment_count>19</comment_count>
      <attachid>101333</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-07-20 09:49:44 -0700</bug_when>
    <thetext>Comment on attachment 101333
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:18
&gt;&gt; +        1) Added shallowCopy() that gives a copy that doesn&apos;t guarantee to be a deep copy.
&gt; 
&gt; I&apos;m not sure these names are really accurate, but I can&apos;t think of better ones. The main difference seems to be that if you call shallowCopy(), subsequent drawing into the image buffer will change what you have.
&gt; 
&gt; Another approach would be:
&gt; enum BackingStoreCopy { CopyBackingStore, DontCopyBackingStore }
&gt; copyImage(BackingStoreCopy)

A naming scheme we use elsewhere is a little clearer, I think:

enum CopyBackingStoreOrNot { DoNotCopyBackingStore, CopyBackingStore };

(Note that this also has the nice property that DoNotCopyBackingStore is falsey, and CopyBackingStore is truthy.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440292</commentid>
    <comment_count>20</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2011-07-21 00:01:24 -0700</bug_when>
    <thetext>r91332 was rolled out in bug 64925 due to crashing Safari Mac and Chrome Mac (see bug 64874 for some stacktraces).

&apos;useLowQualityScale&apos; is in use by the CSS3 value &apos;optimize-contrast&apos; (landed in bug 56627) to control the use of nearest-neighbour scaling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440294</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-07-21 00:13:21 -0700</bug_when>
    <thetext>Abhishek,

Would you be able to help Matthew figure out what went wrong?  Kenneth thinks we might have a memory corruption here (see the bug 64874).  It&apos;s possible that this bug always existed in the code base and Matthew&apos;s patch only made it easier to reproduce.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440296</commentid>
    <comment_count>22</comment_count>
    <who name="Abhishek Arya">inferno</who>
    <bug_when>2011-07-21 00:28:21 -0700</bug_when>
    <thetext>Matthew, do you a chromium build on linux ? If yes, can you try running this layouttest under ASAN. [https://sites.google.com/a/chromium.org/dev/developers/testing/addresssanitizer] (dont&apos; try the mac instructions, it does not work properly on mac right now). I think it is introduced by your patch, because our fuzz bots are running on unmodified layouttest and i have not seen a crash on that layouttest css3/images/optimize-contrast-canvas.html before. If you are only on mac, try running with and without your patch using libgmalloc, http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/libgmalloc.3.html

Please paste these debugging tools output here, i can help to triage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440495</commentid>
    <comment_count>23</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-21 11:04:41 -0700</bug_when>
    <thetext>Woah, everything blowing up. Did that really need a rollout?

First, I see this: https://bugs.webkit.org/show_bug.cgi?id=64925
...and this: https://bugs.webkit.org/show_bug.cgi?id=64874
...are dupes.

The stack traces that Kenneth posted aren&apos;t due to my patch - they&apos;re in V8 from document parsing. The one that Mike posted surely is: it was simply an ASSERTION failure about useLowQuality scale not being used at the ImageBuffer::draw level. I understand how &quot;optimize-contrast&quot; is using the bool, but from my refactor, it&apos;s no longer needed below ImageBuffer::draw, hence the assertion of it being unused.

Basically, I misused the ASSERT_UNUSED macro and should have just used UNUSED_PARAM(useLowQualityScale) at that point. I&apos;ll make a patch that does that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440620</commentid>
    <comment_count>24</comment_count>
      <attachid>101641</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-21 13:34:58 -0700</bug_when>
    <thetext>Created attachment 101641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440622</commentid>
    <comment_count>25</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-21 13:36:41 -0700</bug_when>
    <thetext>Reopened to fix the old patch to have the correct assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440623</commentid>
    <comment_count>26</comment_count>
      <attachid>101641</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-21 13:37:27 -0700</bug_when>
    <thetext>Comment on attachment 101641
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:91
&gt; +        PassRefPtr&lt;Image&gt; copyImage(BackingStoreCopy copyPreference = CopyBackingStore) const;

I don&apos;t like copyPreference; it sounds related to preferences. copyBehavior would be better. You don&apos;t even need to include a parameter name here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>440625</commentid>
    <comment_count>27</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2011-07-21 13:49:46 -0700</bug_when>
    <thetext>Committed r91496: &lt;http://trac.webkit.org/changeset/91496&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100824</attachid>
            <date>2011-07-14 10:22:08 -0700</date>
            <delta_ts>2011-07-18 13:14:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64535-20110714102207.patch</filename>
            <type>text/plain</type>
            <size>2821</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMDA4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDctMTQgIE1hdHRoZXcg
RGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZmFzdCBwYXRoIGZv
ciBJbWFnZUJ1ZmZlcjo6ZHJhdyBpZiBhY2NlbGVyYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1MzUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGJlaGF2aW9yIGNoYW5n
ZTsgYWxsIGN1cnJlbnQgdGVzdHMgY292ZXIgdGhpcyBjb2RlIHBhdGguCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpkcmF3KToKKwogMjAxMS0wNy0xNCAgVnNldm9sb2QgVmxhc292ICA8dnNl
dmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBNb3ZlIFhNTCBlcnJvcnMgaGFuZGxpbmcgb3V0
IGZyb20gWE1MRG9jdW1lbnRQYXJzZXIgKHJlZmFjdG9yaW5nKS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShy
ZXZpc2lvbiA5MDgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsOSArMjE0LDMyIEBAIHZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgICAgIGRlc3RDb250
ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VGb3JSZW5kZXJpbmcuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7Ci0g
ICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkp
ID8gQ29sb3JTcGFjZURldmljZVJHQiA6IHN0eWxlQ29sb3JTcGFjZTsKLSAgICAgICAgZGVzdENv
bnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgpLCBjb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIENHQ29udGV4dFJlZiBzcmNDdHgg
PSBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpOworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UoQWRvcHRDRiwgd2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2Uoc3JjQ3R4
KSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdl
dCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOworICAgICAgICAKKyAgICAgICAg
Q0dDb250ZXh0UmVmIGRlc3RDdHggPSBkZXN0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Cisg
ICAgICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAgICAgIENv
bXBvc2l0ZU9wZXJhdG9yIG9sZE9wID0gZGVzdENvbnRleHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigp
OworICAgICAgICBkZXN0Q29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKKyAgICAg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShkZXN0Q3R4KTsKKyAgICAgICAgCisgICAgICAgIGlmIChz
cmNSZWN0LnNpemUoKSAhPSBpbWFnZVNpemUpIHsKKyAgICAgICAgICAgIGZsb2F0IHhTY2FsZSA9
IHNyY1JlY3Qud2lkdGgoKSAvIGRlc3RSZWN0LndpZHRoKCk7CisgICAgICAgICAgICBmbG9hdCB5
U2NhbGUgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVzdFJlY3QuaGVpZ2h0KCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChk
ZXN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSAvIHhTY2FsZSwgZGVzdFJlY3QueSgpIC0gc3JjUmVj
dC55KCkgLyB5U2NhbGUpKTsKKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShG
bG9hdFNpemUoaW1hZ2VTaXplLndpZHRoKCkgLyB4U2NhbGUsIGltYWdlU2l6ZS5oZWlnaHQoKSAv
IHlTY2FsZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWRlc3RSZWN0LmNvbnRh
aW5zKGFkanVzdGVkRGVzdFJlY3QpKQorICAgICAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1Jl
Y3QoZGVzdEN0eCwgZGVzdFJlY3QpOworICAgICAgICB9CisKKyAgICAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0oZGVzdEN0eCwgMSwgLTEpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFkoLWFk
anVzdGVkRGVzdFJlY3QubWF4WSgpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlc3RD
dHgsIGFkanVzdGVkRGVzdFJlY3QsIGltYWdlLmdldCgpKTsKKyAgICAgICAgQ0dDb250ZXh0UmVz
dG9yZUdTdGF0ZShkZXN0Q3R4KTsKKyAgICAgICAgZGVzdENvbnRleHQtPnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihvbGRPcCk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101194</attachid>
            <date>2011-07-18 13:14:27 -0700</date>
            <delta_ts>2011-07-18 23:31:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64535-20110718131426.patch</filename>
            <type>text/plain</type>
            <size>24782</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTEtMDctMTggIE1hdHRoZXcg
RGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZmFzdCBwYXRoIGZv
ciBJbWFnZUJ1ZmZlcjo6ZHJhdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjQ1MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZp
b3I7IGN1cnJlbnQgdGVzdHMgYXJlIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UpOiBNb3ZlZCB0aGUgbWFpbiBtZXRob2QgdG8gYmUgbmV4dCB0byB3
cmFwcGVyIGNhbGxzLiBTb3JyeSwgdGhpcyBoYXMgYmVlbiBib3RoZXJpbmcgbWUgZm9yZXZlciA6
LSkKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKTog
UmVtb3ZlZCB0aGUgbmVlZCB0byBwYXNzIGRvd24gdXNlTG93UXVhbGl0eVNjYWxlIHNpbmNlIGl0
J3Mgbm90IG5lZWRlZCBiZWxvdy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oOiBBZGRpbmcgYSBwbGF0Zm9ybSBzcGVjaWZpYyBkcmF3SW1hZ2UgcGF0aC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAxKSBB
ZGRlZCBsaXZlSW1hZ2UoKSB0aGF0IHJldHVybnMgYW4gSW1hZ2UgdGhhdCB3cmFwcyB0aGUgY3Vy
cmVudCBJbWFnZUJ1ZmZlci4KKyAgICAgICAgMikgQWRkZWQgcGxhdGZvcm1Db3B5SW1hZ2UoKSB0
aGF0IGNyYXRlcyBhIHBsYXRmb3JtIGltYWdlIHJlZiBjb3B5IG9mIHRoZSBidWZmZXIuCisgICAg
ICAgIDMpIEFkZGVkIHBsYXRmb3JtTGl2ZUltYWdlKCkgdGhhdCBjcmF0ZXMgYSBsaXZlIHBsYXRm
b3JtIGltYWdlIHJlZiBvZiB0aGUgYnVmZmVyLgorICAgICAgICA0KSBSZW1vdmVkIHRoZSB1c2VM
b3dRdWFsaXR5IHNjYWxlIHBhcmFtLCBiZWNhdXNlIGl0J3Mgbm90IG5lZWRlZC4KKyAgICAgICAg
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aW1hZ2VXaXRoQ29sb3JTcGFjZSk6IEFkZGVkIHRoaXMgZm9yIHVz
ZWQgaW4gYmVsb3cgbWV0aG9kLiBJdCBzaG91bGQgbGl2ZSBlbHNld2hlcmUuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6IEEgbWV0aG9kIHRoYXQga25vd3Mg
aG93IHRvIGRyYXcgYSBuYXRpdmVJbWFnZVB0ciBpbnRvIHRoZSBjb250ZXh0LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIDEpIEFk
ZGVkIG5ldyBtZXRob2RzIGRlc2NyaWJlZCBhYm92ZS4KKyAgICAgICAgMikgQWRkZWQgaW4gcGxh
dGZvcm1Db3B5SW1hZ2UoKSwgYW5kIHBsYXRmb3JtTGl2ZUltYWdlKCkgdG8gb3RoZXIgbWV0aG9k
cyB0aGF0IG5lZWQgdGhlbS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOiBSZWZhY3RvcmVk
IG91dCBhY3R1YWwgaW1hZ2UgZHJhd2luZyBjb2RlIGludG8gR3JhcGhpY3NDb250ZXh0LAorICAg
ICAgICBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IG1vcmUgdGhhbiBqdXN0IEJpdG1hcEltYWdl
IHdpdGhvdXQgaGF2aW5nIHRvIGNvcHkgY29kZS4KKwogMjAxMS0wNy0xOCAgUHJhdGlrIFNvbGFu
a2kgIDxwc29sYW5raUBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gRml4IFdpbmRv
d3MgYnVpbGQuIE1vdmUgc3RhdGljIGZ1bmN0aW9uIGRlZmF1bHRTZXNzaW9uQ29va2llU3RvcmFn
ZSgpIHRvIGJlZm9yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiA5MDgwMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM1MSwyNiArMzUxLDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OnBhaW50aW5nRGlz
YWJsZWQoKQogICAgIHJldHVybiBtX3N0YXRlLnBhaW50aW5nRGlzYWJsZWQ7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxl
Q29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQotewot
ICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0x
LCAtMSksIG9wKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSog
aW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCi17Ci0gICAgZHJhd0lt
YWdlKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3As
IHVzZUxvd1F1YWxpdHlTY2FsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9p
bnQmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQot
ewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3QsIHNy
Y1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKLXsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0
eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0
eVNjYWxlKTsKLX0KLQogI2lmICFPUyhXSU5DRSkgfHwgKFBMQVRGT1JNKFFUKSAmJiAhSEFWRShR
UkFXRk9OVCkpCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20s
IGludCB0bykKIHsKQEAgLTQzMyw2ICs0MTMsMjYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdIaWdobGlnaHRGb3JUZQogICAgIGZpbGxSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQo
cnVuLCBwb2ludCwgaCwgZnJvbSwgdG8pLCBiYWNrZ3JvdW5kQ29sb3IsIGNvbG9yU3BhY2UpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiBwLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCkKK3sKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgcCwgSW50UmVj
dCgwLCAwLCAtMSwgLTEpLCBvcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVj
dCYgciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQorewor
ICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCByLCBJbnRSZWN0KDAsIDAsIC0x
LCAtMSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEludFBvaW50JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVy
YXRvciBvcCkKK3sKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgSW50UmVj
dChkZXN0LCBzcmNSZWN0LnNpemUoKSksIHNyY1JlY3QsIG9wKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBJbnRSZWN0JiBkZXN0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb21wb3Np
dGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJhd0ltYWdl
KGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0KSwgc3JjUmVjdCwgb3AsIHVz
ZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wg
dXNlTG93UXVhbGl0eVNjYWxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWlt
YWdlKQpAQCAtNTQxLDEwICs1NDEsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZUJ1ZmZlcihJbQogICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBwcmV2aW91c0ludGVycG9s
YXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpOwogICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIGJlIEludGVycG9sYXRpb25Mb3cKICAgICAgICAgc2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uTm9uZSk7Ci0gICAgICAgIGltYWdlLT5kcmF3KHRo
aXMsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24oKSwgRmxvYXRTaXpl
KHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0c3csIHRzaCkp
LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgc3R5
bGVDb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRo
KSksIEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIG9wKTsK
ICAgICAgICAgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShwcmV2aW91c0ludGVycG9sYXRp
b25RdWFsaXR5KTsKICAgICB9IGVsc2UKLSAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgc3R5bGVD
b2xvclNwYWNlLCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSks
IEZsb2F0UmVjdChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIG9wLCB1c2VM
b3dRdWFsaXR5U2NhbGUpOworICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3Bh
Y2UsIEZsb2F0UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRS
ZWN0KHNyYy5sb2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3ApOwogfQogCiAjaWYg
IVBMQVRGT1JNKFFUKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDkwODAxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwNiw2ICszMDYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CiAKKyAgICAgICAgdm9p
ZCBkcmF3SW1hZ2UoTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNl
T3Zlcik7CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIGNvbnN0IEludFBvaW50JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyKTsKICAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9z
aXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAgICAgICAg
IHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDkwODAxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtODUsNiArODUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNB
Y2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZVJlbmRlcmluZzsgfQogICAg
ICAgICBib29sIGRyYXdzVXNpbmdDb3B5KCkgY29uc3Q7IC8vIElmIHRoZSBpbWFnZSBidWZmZXIg
aGFzIHRvIHJlbmRlciB1c2luZyBhIGNvcGllZCBpbWFnZSwgaXQgd2lsbCByZXR1cm4gdHJ1ZS4K
ICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdlKCkgY29uc3Q7IC8vIFJldHVybiBh
IG5ldyBpbWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVmZmVyLgorICAgICAgICBQYXNzUmVm
UHRyPEltYWdlPiBsaXZlSW1hZ2UoKSBjb25zdDsgLy8gUmV0dXJuIGEgbmV3IGltYWdlIHRoYXQg
d3JhcHMgdGhlIGJ1ZmZlci4KIAogICAgICAgICBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gZ2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICAgICAgUGFzc1Jl
ZlB0cjxCeXRlQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYp
IGNvbnN0OwpAQCAtMTA0LDEzICsxMDUsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlm
CiAKICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgICAgIE5hdGl2ZUltYWdlUHRyIHBsYXRmb3JtQ29w
eUltYWdlKCkgY29uc3Q7CisgICAgICAgIE5hdGl2ZUltYWdlUHRyIHBsYXRmb3JtTGl2ZUltYWdl
KCkgY29uc3Q7CiAKKyAgICAgICAgdm9pZCBjbGlwKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UmVjdCYpIGNvbnN0OworICAgICAgICAKICAgICAgICAgLy8gVGhlIGRyYXcgbWV0aG9kIGRy
YXdzIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIHdpdGhvdXQgY29weWluZyBpdC4KLSAgICAg
ICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBG
bG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSA9IGZhbHNlKTsKLSAgICAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKKyAgICAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICAgICAgdm9pZCBkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAgICAgICAgIAogICAgICAgICBpbmxpbmUgdm9pZCBnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShy
ZXZpc2lvbiA5MDgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDYgKzE1MiwxMDEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YQogICAgIG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCitzdGF0
aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlV2l0aENvbG9yU3BhY2UoQ0dJbWFnZVJlZiBv
cmlnaW5hbEltYWdlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgQ0dDb2xvclNwYWNl
UmVmIG9yaWdpbmFsQ29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKG9yaWdpbmFsSW1h
Z2UpOworCisgICAgLy8gSWYgdGhlIGltYWdlIGFscmVhZHkgaGFzIGEgKG5vbi1kZXZpY2UpIGNv
bG9yIHNwYWNlLCB3ZSBkb24ndCB3YW50IHRvCisgICAgLy8gb3ZlcnJpZGUgaXQsIHNvIHJldHVy
bi4KKyAgICBpZiAoIW9yaWdpbmFsQ29sb3JTcGFjZSB8fCAhQ0ZFcXVhbChvcmlnaW5hbENvbG9y
U3BhY2UsIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSkpCisgICAgICAgIHJldHVybiBvcmlnaW5h
bEltYWdlOworCisgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2FzZSBDb2xvclNwYWNl
RGV2aWNlUkdCOgorICAgICAgICByZXR1cm4gb3JpZ2luYWxJbWFnZTsKKyAgICBjYXNlIENvbG9y
U3BhY2VTUkdCOgorICAgICAgICByZXR1cm4gUmV0YWluUHRyPENHSW1hZ2VSZWY+KEFkb3B0Q0Ys
IENHSW1hZ2VDcmVhdGVDb3B5V2l0aENvbG9yU3BhY2Uob3JpZ2luYWxJbWFnZSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSkpOworICAgIGNhc2UgQ29sb3JTcGFjZUxpbmVhclJHQjoKKyAgICAgICAgcmV0
dXJuIFJldGFpblB0cjxDR0ltYWdlUmVmPihBZG9wdENGLCBDR0ltYWdlQ3JlYXRlQ29weVdpdGhD
b2xvclNwYWNlKG9yaWdpbmFsSW1hZ2UsIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYoKSkpOworICAg
IH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBvcmlnaW5hbEltYWdl
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKE5hdGl2ZUltYWdlUHRyIGlt
YWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlKGltYWdlUHRyKTsKKworICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0
KGltYWdlLmdldCgpKTsKKyAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAgYm9vbCBzaG91bGRV
c2VTdWJpbWFnZSA9IGZhbHNlOworCisgICAgLy8gSWYgdGhlIHNvdXJjZSByZWN0IGlzIGEgc3Vi
cG9ydGlvbiBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0ZSBhbiBpbmZsYXRlZCBkZXN0aW5h
dGlvbiByZWN0IHRoYXQgd2lsbCBob2xkIHRoZSBlbnRpcmUgaW1hZ2UKKyAgICAvLyBhbmQgdGhl
biBzZXQgYSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5LgorICAg
IEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisKKyAgICBpZiAoc3JjUmVj
dC5zaXplKCkgIT0gaW1hZ2VTaXplKSB7CisgICAgICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkg
aW50ZXJwb2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShj
b250ZXh0KTsKKyAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHVzaW5nIGhpZ2gt
cXVhbGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgQ0dJbWFnZQorICAg
ICAgICAvLyBjb250YWluaW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ugd2FudCB0byBkaXNwbGF5LiBX
ZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkKKyAgICAgICAgLy8gaW50ZXJw
b2xhdGlvbiBzbW9vdGhlcyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRzaWRl
IHRoZSBzb3VyY2UgcmVjdCB0byBibGVlZAorICAgICAgICAvLyBpbnRvIHRoZSBkZXN0aW5hdGlv
biByZWN0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgorICAgICAgICBzaG91bGRVc2VT
dWJpbWFnZSA9IChpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZSkg
JiYgKHNyY1JlY3Quc2l6ZSgpICE9IGRlc3RSZWN0LnNpemUoKSB8fCAhZ2V0Q1RNKCkuaXNJZGVu
dGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisgICAgICAgIGZsb2F0IHhTY2FsZSA9IHNy
Y1JlY3Qud2lkdGgoKSAvIGRlc3RSZWN0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHlTY2FsZSA9
IHNyY1JlY3QuaGVpZ2h0KCkgLyBkZXN0UmVjdC5oZWlnaHQoKTsKKyAgICAgICAgaWYgKHNob3Vs
ZFVzZVN1YmltYWdlKSB7CisgICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1hZ2VSZWN0ID0gc3Jj
UmVjdDsKKyAgICAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVjdC54KCkgLSBmbG9v
cmYoc3JjUmVjdC54KCkpOworICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGluZyA9IHNyY1JlY3Qu
eSgpIC0gZmxvb3JmKHNyY1JlY3QueSgpKTsKKworICAgICAgICAgICAgc3ViaW1hZ2VSZWN0Lm1v
dmUoLWxlZnRQYWRkaW5nLCAtdG9wUGFkZGluZyk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RS
ZWN0Lm1vdmUoLWxlZnRQYWRkaW5nIC8geFNjYWxlLCAtdG9wUGFkZGluZyAvIHlTY2FsZSk7CisK
KyAgICAgICAgICAgIHN1YmltYWdlUmVjdC5zZXRXaWR0aChjZWlsZihzdWJpbWFnZVJlY3Qud2lk
dGgoKSArIGxlZnRQYWRkaW5nKSk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFdp
ZHRoKHN1YmltYWdlUmVjdC53aWR0aCgpIC8geFNjYWxlKTsKKworICAgICAgICAgICAgc3ViaW1h
Z2VSZWN0LnNldEhlaWdodChjZWlsZihzdWJpbWFnZVJlY3QuaGVpZ2h0KCkgKyB0b3BQYWRkaW5n
KSk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChzdWJpbWFnZVJlY3Qu
aGVpZ2h0KCkgLyB5U2NhbGUpOworCisgICAgICAgICAgICBpbWFnZS5hZG9wdENGKENHSW1hZ2VD
cmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVjdCkpOworICAgICAg
ICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgeworICAgICAgICAgICAgICAg
IEFTU0VSVChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBjdXJySGVpZ2h0IC0gQ0dS
ZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOworICAgICAgICAgICAgICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpIC8geVNjYWxl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChkZXN0UmVjdC54KCkgLSBzcmNSZWN0Lngo
KSAvIHhTY2FsZSwgZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkgLyB5U2NhbGUpKTsKKyAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShGbG9hdFNpemUoaW1hZ2VTaXplLndpZHRo
KCkgLyB4U2NhbGUsIGltYWdlU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RSZWN0KSkKKyAgICAg
ICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJlY3QpOworICAgIH0KKwor
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBvbmx5IHBhcnRpYWxseSBsb2FkZWQsIHRoZW4gc2hyaW5r
IHRoZSBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2UncmUgZHJhd2luZyBpbnRvIGFjY29yZGluZ2x5
LgorICAgIGlmICghc2hvdWxkVXNlU3ViaW1hZ2UgJiYgY3VyckhlaWdodCA8IGltYWdlU2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWREZXN0
UmVjdC5oZWlnaHQoKSAqIGN1cnJIZWlnaHQgLyBpbWFnZVNpemUuaGVpZ2h0KCkpOworCisgICAg
c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgLy8gRmxpcCB0aGUgY29v
cmRzLgorICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICBhZGp1c3Rl
ZERlc3RSZWN0LnNldFkoLWFkanVzdGVkRGVzdFJlY3QubWF4WSgpKTsKKyAgICAKKyAgICAvLyBB
ZGp1c3QgdGhlIGNvbG9yIHNwYWNlLgorICAgIGltYWdlID0gaW1hZ2VXaXRoQ29sb3JTcGFjZShp
bWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlKTsKKworICAgIC8vIERyYXcgdGhlIGltYWdlLgor
ICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBpbWFnZS5n
ZXQoKSk7CisKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQorCiAvLyBE
cmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAkocmV2aXNpb24gOTA4MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcwICsxODQsODAg
QEAgYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAogCiBQYXNzUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKIHsKLSAgICAvLyBCaXRtYXBJ
bWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBDR0ltYWdlIG9uIGRlc3RydWN0aW9uCi0g
ICAgQ0dJbWFnZVJlZiBjdHhJbWFnZSA9IDA7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlID0gcGxhdGZvcm1Db3B5SW1hZ2UoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGltYWdlLmdldCgpKTsKK30K
KworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtQ29weUltYWdlKCkgY29uc3QK
K3sKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gMDsKICAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRl
cmluZykKLSAgICAgICAgY3R4SW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICAgICAgaW1hZ2UgPSBDR0JpdG1hcENvbnRl
eHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKICNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIGVsc2UKLSAgICAgICAgY3R4SW1hZ2Ug
PSB3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICAgICAgaW1hZ2UgPSB3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKICNlbmRpZgotICAgIHJldHVybiBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKGN0eEltYWdlKTsKKyAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLXN0YXRpYyBDR0lt
YWdlUmVmIGNnSW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW1hZ2VCdWZmZXJEYXRh
JiBkYXRhKQorUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmxpdmVJbWFnZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIENHSW1hZ2VDcmVhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCA4LCAzMiwgZGF0YS5tX2J5dGVzUGVyUm93LAotICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGEubV9jb2xvclNwYWNlLCBkYXRhLm1fYml0bWFwSW5mbywgZGF0YS5tX2RhdGFQcm92aWRlci5n
ZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CisgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGltYWdlID0gcGxhdGZvcm1MaXZlSW1hZ2UoKTsKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGlt
YWdlLmdldCgpKTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQq
IGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAotICAgICAgICAgICAgICAgICAg
ICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCitOYXRp
dmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MaXZlSW1hZ2UoKSBjb25zdAogewotICAg
IGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmIChkZXN0Q29udGV4dCA9
PSBjb250ZXh0KCkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3du
IGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUg
c291cmNlIGJ1ZmZlciBmaXJzdC4KLSAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNv
cHlJbWFnZSgpOwotICAgICAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgp
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxp
dHlTY2FsZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlRm9yUmVuZGVyaW5nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0ltYWdlKG1fc2l6ZSwgbV9k
YXRhKSk7Ci0gICAgICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGltYWdlRm9yUmVuZGVy
aW5nLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93
UXVhbGl0eVNjYWxlKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJ
bWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOwotICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2Ug
PSAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSA/IENvbG9yU3BhY2VEZXZpY2VSR0IgOiBzdHls
ZUNvbG9yU3BhY2U7Ci0gICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoY29weS5nZXQoKSwg
Y29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwot
ICAgIH0KKyAgICBDR0ltYWdlUmVmIGltYWdlID0gMDsKKyAgICBpZiAoIW1fYWNjZWxlcmF0ZVJl
bmRlcmluZykKKyAgICAgICAgaW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEubV9ieXRlc1BlclJvdywgbV9kYXRhLm1fY29s
b3JTcGFjZSwgbV9kYXRhLm1fYml0bWFwSW5mbywgbV9kYXRhLm1fZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKyNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQorICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSB3a0lPU3Vy
ZmFjZUNvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNl
bmRpZgorICAgIHJldHVybiBpbWFnZTsKIH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UgPSAoZGVzdENvbnRleHQgPT0gbV9jb250ZXh0KSA/IENvbG9y
U3BhY2VEZXZpY2VSR0IgOiBzdHlsZUNvbG9yU3BhY2U7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2U7CisgICAgaWYgKG1fYWNjZWxlcmF0ZVJlbmRlcmluZyB8fCBkZXN0Q29udGV4
dCA9PSBtX2NvbnRleHQpCisgICAgICAgIGltYWdlLmFkb3B0Q0YocGxhdGZvcm1Db3B5SW1hZ2Uo
KSk7CisgICAgZWxzZQorICAgICAgICBpbWFnZS5hZG9wdENGKHBsYXRmb3JtTGl2ZUltYWdlKCkp
OworCisgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5nZXQoKSwgbV9zaXplLCBjb2xv
clNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3ApOworfQorCit2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewogICAgIGlmICghbV9hY2NlbGVy
YXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkpIHsK
LSAgICAgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9y
ZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBm
aXJzdC4KKyAgICAgICAgaWYgKGNvbnRleHQgPT0gbV9jb250ZXh0KSB7CisgICAgICAgICAgICAv
LyBXZSdyZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5Lgog
ICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7Ci0gICAgICAgICAg
ICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIGNv
cHktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gQml0bWFwSW1hZ2U6OmNy
ZWF0ZShjZ0ltYWdlKG1fc2l6ZSwgbV9kYXRhKSk7Ci0gICAgICAgICAgICBpbWFnZUZvclJlbmRl
cmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gbGl2ZUltYWdlKCk7CisgICAgICAgICAgICBp
bWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgp
OwotICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAg
ICAgY29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKICAgICB9CiB9CiAKIHZvaWQg
SW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0VG9DbGlwLCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4
dFRvQ2xpcCA9IGNvbnRleHRUb0NsaXAtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmluZykKLSAg
ICAgICAgaW1hZ2UuYWRvcHRDRihjZ0ltYWdlKG1fc2l6ZSwgbV9kYXRhKSk7Ci0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlLmFk
b3B0Q0Yod2tJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKSkpOwotI2VuZGlmCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0
Q0YsIHBsYXRmb3JtTGl2ZUltYWdlKCkpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0
Zm9ybUNvbnRleHRUb0NsaXAsIHJlY3QueCgpLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwog
ICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dFRvQ2xpcCwgMSwgLTEpOwogICAg
IENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0VG9DbGlwLCBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCByZWN0LnNpemUoKSksIGltYWdlLmdldCgpKTsKQEAgLTM1MSwxMyArMzYxLDcg
QEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQogewogICAgIEFTU0VS
VChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyht
aW1lVHlwZSkpOwogCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgh
bV9hY2NlbGVyYXRlUmVuZGVyaW5nKQotICAgICAgICBpbWFnZS5hZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKLSNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2Uu
YWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3Jt
Q29udGV4dCgpKSk7Ci0jZW5kaWYKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRv
cHRDRiwgcGxhdGZvcm1Db3B5SW1hZ2UoKSk7CiAKICAgICBpZiAoIWltYWdlKQogICAgICAgICBy
ZXR1cm4gImRhdGE6LCI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUNHLmNwcAkocmV2aXNpb24gOTA4MDEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcz
ICsxOTUsOSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmbG9hdCBjdXJySGVpZ2h0ID0gQ0dJbWFnZUdldEhl
aWdodChpbWFnZS5nZXQoKSk7Ci0gICAgaWYgKGN1cnJIZWlnaHQgPD0gc3JjUmVjdC55KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY3R4dC0+cGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpj
dHh0KTsKLQotICAgIGJvb2wgc2hvdWxkVXNlU3ViaW1hZ2UgPSBmYWxzZTsKLQotICAgIC8vIElm
IHRoZSBzb3VyY2UgcmVjdCBpcyBhIHN1YnBvcnRpb24gb2YgdGhlIGltYWdlLCB0aGVuIHdlIGNv
bXB1dGUgYW4gaW5mbGF0ZWQgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdpbGwgaG9sZCB0aGUgZW50
aXJlIGltYWdlCi0gICAgLy8gYW5kIHRoZW4gc2V0IGEgY2xpcCB0byB0aGUgcG9ydGlvbiB0aGF0
IHdlIHdhbnQgdG8gZGlzcGxheS4KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRl
c3RSZWN0OwogICAgIEZsb2F0U2l6ZSBzZWxmU2l6ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsKLSAg
ICBpZiAoc3JjUmVjdC5zaXplKCkgIT0gc2VsZlNpemUpIHsKLSAgICAgICAgQ0dJbnRlcnBvbGF0
aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSA9IENHQ29udGV4dEdldEludGVycG9sYXRp
b25RdWFsaXR5KGNvbnRleHQpOwotICAgICAgICAvLyBXaGVuIHRoZSBpbWFnZSBpcyBzY2FsZWQg
dXNpbmcgaGlnaC1xdWFsaXR5IGludGVycG9sYXRpb24sIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBD
R0ltYWdlCi0gICAgICAgIC8vIGNvbnRhaW5pbmcgb25seSB0aGUgcG9ydGlvbiB3ZSB3YW50IHRv
IGRpc3BsYXkuIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIGhpZ2gtcXVhbGl0eQotICAgICAg
ICAvLyBpbnRlcnBvbGF0aW9uIHNtb290aGVzIHNoYXJwIGVkZ2VzLCBjYXVzaW5nIHBpeGVscyBm
cm9tIG91dHNpZGUgdGhlIHNvdXJjZSByZWN0IHRvIGJsZWVkCi0gICAgICAgIC8vIGludG8gdGhl
IGRlc3RpbmF0aW9uIHJlY3QuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjExMjkwOT4uCi0gICAgICAg
IHNob3VsZFVzZVN1YmltYWdlID0gKGludGVycG9sYXRpb25RdWFsaXR5ICE9IGtDR0ludGVycG9s
YXRpb25Ob25lKSAmJiAoc3JjUmVjdC5zaXplKCkgIT0gZGVzdFJlY3Quc2l6ZSgpIHx8ICFjdHh0
LT5nZXRDVE0oKS5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbk9yRmxpcHBlZCgpKTsKLSAgICAgICAg
ZmxvYXQgeFNjYWxlID0gc3JjUmVjdC53aWR0aCgpIC8gZGVzdFJlY3Qud2lkdGgoKTsKLSAgICAg
ICAgZmxvYXQgeVNjYWxlID0gc3JjUmVjdC5oZWlnaHQoKSAvIGRlc3RSZWN0LmhlaWdodCgpOwot
ICAgICAgICBpZiAoc2hvdWxkVXNlU3ViaW1hZ2UpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBz
dWJpbWFnZVJlY3QgPSBzcmNSZWN0OwotICAgICAgICAgICAgZmxvYXQgbGVmdFBhZGRpbmcgPSBz
cmNSZWN0LngoKSAtIGZsb29yZihzcmNSZWN0LngoKSk7Ci0gICAgICAgICAgICBmbG9hdCB0b3BQ
YWRkaW5nID0gc3JjUmVjdC55KCkgLSBmbG9vcmYoc3JjUmVjdC55KCkpOwotCi0gICAgICAgICAg
ICBzdWJpbWFnZVJlY3QubW92ZSgtbGVmdFBhZGRpbmcsIC10b3BQYWRkaW5nKTsKLSAgICAgICAg
ICAgIGFkanVzdGVkRGVzdFJlY3QubW92ZSgtbGVmdFBhZGRpbmcgLyB4U2NhbGUsIC10b3BQYWRk
aW5nIC8geVNjYWxlKTsKLQotICAgICAgICAgICAgc3ViaW1hZ2VSZWN0LnNldFdpZHRoKGNlaWxm
KHN1YmltYWdlUmVjdC53aWR0aCgpICsgbGVmdFBhZGRpbmcpKTsKLSAgICAgICAgICAgIGFkanVz
dGVkRGVzdFJlY3Quc2V0V2lkdGgoc3ViaW1hZ2VSZWN0LndpZHRoKCkgLyB4U2NhbGUpOwotCi0g
ICAgICAgICAgICBzdWJpbWFnZVJlY3Quc2V0SGVpZ2h0KGNlaWxmKHN1YmltYWdlUmVjdC5oZWln
aHQoKSArIHRvcFBhZGRpbmcpKTsKLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVp
Z2h0KHN1YmltYWdlUmVjdC5oZWlnaHQoKSAvIHlTY2FsZSk7Ci0KLSAgICAgICAgICAgIGltYWdl
LmFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZS5nZXQoKSwgc3ViaW1h
Z2VSZWN0KSk7Ci0gICAgICAgICAgICBpZiAoY3VyckhlaWdodCA8IHNyY1JlY3QubWF4WSgpKSB7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpID09
IGN1cnJIZWlnaHQgLSBDR1JlY3RJbnRlZ3JhbChzcmNSZWN0KS5vcmlnaW4ueSk7Ci0gICAgICAg
ICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoQ0dJbWFnZUdldEhlaWdodChpbWFn
ZS5nZXQoKSkgLyB5U2NhbGUpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KGRlc3RSZWN0
LngoKSAtIHNyY1JlY3QueCgpIC8geFNjYWxlLCBkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSAv
IHlTY2FsZSkpOwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRTaXplKEZsb2F0U2l6
ZShzZWxmU2l6ZS53aWR0aCgpIC8geFNjYWxlLCBzZWxmU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERl
c3RSZWN0KSkKLSAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJl
Y3QpOwotICAgIH0KIAotICAgIC8vIElmIHRoZSBpbWFnZSBpcyBvbmx5IHBhcnRpYWxseSBsb2Fk
ZWQsIHRoZW4gc2hyaW5rIHRoZSBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2UncmUgZHJhd2luZyBp
bnRvIGFjY29yZGluZ2x5LgotICAgIGlmICghc2hvdWxkVXNlU3ViaW1hZ2UgJiYgY3VyckhlaWdo
dCA8IHNlbGZTaXplLmhlaWdodCgpKQotICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdo
dChhZGp1c3RlZERlc3RSZWN0LmhlaWdodCgpICogY3VyckhlaWdodCAvIHNlbGZTaXplLmhlaWdo
dCgpKTsKLQotICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcCk7Ci0K
LSAgICAvLyBGbGlwIHRoZSBjb29yZHMuCi0gICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwg
MSwgLTEpOwotICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0WSgtYWRqdXN0ZWREZXN0UmVjdC5tYXhZ
KCkpOwotCi0gICAgLy8gQWRqdXN0IHRoZSBjb2xvciBzcGFjZS4KLSAgICBpbWFnZSA9IGltYWdl
V2l0aENvbG9yU3BhY2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSk7Ci0KLSAgICAvLyBE
cmF3IHRoZSBpbWFnZS4KLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgYWRqdXN0ZWRE
ZXN0UmVjdCwgaW1hZ2UuZ2V0KCkpOwotCi0gICAgc3RhdGVTYXZlci5yZXN0b3JlKCk7CisgICAg
Y3R4dC0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBzZWxmU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgY29tcG9zaXRlT3ApOwogCiAgICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101275</attachid>
            <date>2011-07-18 23:32:04 -0700</date>
            <delta_ts>2011-07-19 09:31:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64535-20110718233203.patch</filename>
            <type>text/plain</type>
            <size>35447</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDctMTggIE1hdHRoZXcg
RGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZmFzdCBwYXRoIGZv
ciBJbWFnZUJ1ZmZlcjo6ZHJhdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjQ1MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZp
b3I7IGN1cnJlbnQgdGVzdHMgYXJlIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UpOiBNb3ZlZCB0aGUgbWFpbiBtZXRob2QgdG8gYmUgbmV4dCB0byB3
cmFwcGVyIGNhbGxzLgorICAgICAgICBUaGlzIGlzbid0IG5lY2Vzc2FyeSwgYnV0IGl0IGhhcyBi
ZWVuIGJvdGhlcmluZyBtZSBmb3JldmVyIDotKQorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIpOiBSZW1vdmVkIHRoZSBuZWVkIHRvIHBhc3MgZG93biB1
c2VMb3dRdWFsaXR5U2NhbGUgc2luY2UgaXQncyBub3QgbmVlZGVkIGJlbG93LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6IEFkZGluZyBhIHBsYXRmb3Jt
IHNwZWNpZmljIGRyYXdJbWFnZSBwYXRoLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmg6CisgICAgICAgIDApIENoYW5nZWQgY29weUltYWdlKCkgdG8gZGVlcENvcHko
KSB0byBtYWtlIGl0IGNsZWFyIHRoaXMgY29weSBpcyBpbmRlZWQgZGVlcCAoYnV0IGNvdWxkIGJl
IENPVykKKyAgICAgICAgMSkgQWRkZWQgc2hhbGxvd0NvcHkoKSB0aGF0IGdpdmVzIGEgY29weSB0
aGF0IGRvZXNuJ3QgZ3VhcmFudGVlIHRvIGJlIGEgZGVlcCBjb3B5LgorICAgICAgICAyKSBBZGRl
ZCBwbGF0Zm9ybURlZXBDb3B5KCkgLSBqdXN0IGFzIGRlZXBDb3B5KCkgYnV0IGdpdmVzIE5hdGl2
ZUltYWdlUHRyLgorICAgICAgICAzKSBBZGRlZCBwbGF0Zm9ybVNoYWxsb3dDb3B5KCkgLSBqdXN0
IGFzIHNoYWxsb3dDb3B5KCkgYnV0IGdpdmVzIE5hdGl2ZUltYWdlUHRyLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBBIG1ldGhvZCB0aGF0IGtub3dzIGhv
dyB0byBkcmF3IGEgbmF0aXZlSW1hZ2VQdHIgaW50byB0aGUgY29udGV4dC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAxKSBBZGRl
ZCBuZXcgbWV0aG9kcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIDIpIEFkZGVkIGluIHBsYWZv
cm1EZWVwQ29weSgpLCBhbmQgcGxhdGZvcm1TaGFsbG93Q29weSgpIHRvIG90aGVyIG1ldGhvZHMg
dGhhdCBzaG91bGQgdXNlIHRoZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oOiBBZGRlZCBpbWFnZVdpdGhDb2xvclNwYWNlIGJlaGluZCBDRyBwbGF0Zm9ybSBpZmRlZgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOiAKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KTogUmVmYWN0b3JlZCBvdXQgYWN0dWFsIGltYWdlIGRy
YXdpbmcgY29kZSBpbnRvIEdyYXBoaWNzQ29udGV4dCwKKyAgICAgICAgc28gdGhhdCBpdCBjYW4g
YmUgdXNlZCBieSBtb3JlIHRoYW4ganVzdCBCaXRtYXBJbWFnZSB3aXRob3V0IGhhdmluZyB0byBj
b3B5IGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6aW1hZ2VXaXRoQ29sb3JTcGFjZSk6
IE1hZGUgaW50byBhbiBJbWFnZSBjbGFzcyBmdW5jdGlvbi4KKworICAgICAgICBVcGRhdGVkIGNv
cHlJbWFnZSgpIHRvIGRlZXBDb3B5IGluIGJlbG93IGZpbGVzOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxl
bWVudC5jcHAKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmNwcAorCiAyMDExLTA3LTE4ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgog
CiAgICAgICAgIFtTaGFkb3dDb250ZW50RWxlbWVudF0gZm9yd2FyZGVkIG5vZGUgc2hvdWxkIGJl
IGFibGUgdG8gYWNjZXNzIGl0cyBob3N0aW5nIGNvbnRlbnQgZWxlbWVudC4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTIzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6bWFrZVByZXNlbnRh
dGlvbgogewogICAgIGlmICghbV9wcmVzZW50ZWRJbWFnZSkgewogICAgICAgICAvLyBUaGUgYnVm
ZmVyIGNvbnRhaW5zIHRoZSBsYXN0IHByZXNlbnRlZCBkYXRhLCBzbyBzYXZlIGEgY29weSBvZiBp
dC4KLSAgICAgICAgbV9wcmVzZW50ZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3B5SW1hZ2UoKTsKKyAg
ICAgICAgbV9wcmVzZW50ZWRJbWFnZSA9IGJ1ZmZlcigpLT5kZWVwQ29weSgpOwogICAgIH0KIH0K
IApAQCAtNDcyLDcgKzQ3Miw3IEBAIEltYWdlKiBIVE1MQ2FudmFzRWxlbWVudDo6Y29waWVkSW1h
Z2UoKSAKICAgICBpZiAoIW1fY29waWVkSW1hZ2UgJiYgYnVmZmVyKCkpIHsKICAgICAgICAgaWYg
KG1fY29udGV4dCkKICAgICAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKTsKLSAgICAgICAgbV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3B5SW1hZ2Uo
KTsKKyAgICAgICAgbV9jb3BpZWRJbWFnZSA9IGJ1ZmZlcigpLT5kZWVwQ29weSgpOwogICAgIH0K
ICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNp
b24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIyLDcgKzMyMjIsNyBAQCBQYXNzUmVmUHRy
PEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6CiAgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAw
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMg
aW50byBhIEdQVS1HUFUgdGV4dHVyZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgogICAg
IHZpZGVvLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJl
Y3QpOwotICAgIHJldHVybiBidWYtPmNvcHlJbWFnZSgpOworICAgIHJldHVybiBidWYtPmRlZXBD
b3B5KCk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI2ICszNTEs
NiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgpCiAgICAgcmV0dXJu
IG1fc3RhdGUucGFpbnRpbmdEaXNhYmxlZDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJ
bnRQb2ludCYgcCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgZHJhd0ltYWdlKGltYWdl
LCBzdHlsZUNvbG9yU3BhY2UsIHAsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3ApOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIHIsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBi
b29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKLXsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29s
b3JTcGFjZSwgciwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCwgdXNlTG93UXVhbGl0eVNjYWxl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdCwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgZHJhd0ltYWdlKGlt
YWdlLCBzdHlsZUNvbG9yU3BhY2UsIEludFJlY3QoZGVzdCwgc3JjUmVjdC5zaXplKCkpLCBzcmNS
ZWN0LCBvcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGlt
YWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKQotewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBGbG9h
dFJlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwotfQotCiAjaWYg
IU9TKFdJTkNFKSB8fCAoUExBVEZPUk0oUVQpICYmICFIQVZFKFFSQVdGT05UKSkKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewpAQCAtNDMz
LDYgKzQxMywyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRlCiAg
ICAgZmlsbFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBoLCBmcm9t
LCB0byksIGJhY2tncm91bmRDb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJ
bWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9w
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJhd0ltYWdlKGltYWdl
LCBzdHlsZUNvbG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3AsIHVzZUxvd1F1
YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2Uq
IGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3Qs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRy
YXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3QsIHNyY1JlY3Quc2l6
ZSgpKSwgc3JjUmVjdCwgb3ApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
KEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3Qm
IGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29s
IHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JT
cGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsK
K30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUp
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCkBAIC01NDEsMTAgKzU0
MSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltCiAgICAgICAg
IEludGVycG9sYXRpb25RdWFsaXR5IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgSW50
ZXJwb2xhdGlvbkxvdwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25Ob25lKTsKLSAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgc3R5bGVDb2xvclNwYWNl
LCBGbG9hdFJlY3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVj
dChzcmMubG9jYXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIG9wLCB1c2VMb3dRdWFsaXR5
U2NhbGUpOworICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0
UmVjdChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5s
b2NhdGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3ApOwogICAgICAgICBzZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgIH0g
ZWxzZQotICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVj
dChkZXN0LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2Nh
dGlvbigpLCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cisg
ICAgICAgIGltYWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3Qu
bG9jYXRpb24oKSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCks
IEZsb2F0U2l6ZSh0c3csIHRzaCkpLCBvcCk7CiB9CiAKICNpZiAhUExBVEZPUk0oUVQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAkocmV2aXNpb24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CiAgICAg
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBk
cmF3SW1hZ2UoTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zl
cik7CisKICAgICAgICAgLy8gQWxsb3cgZm9udCBzbW9vdGhpbmcgKExDRCBhbnRpYWxpYXNpbmcp
LiBOb3QgcGFydCBvZiB0aGUgZ3JhcGhpY3Mgc3RhdGUuCiAgICAgICAgIHZvaWQgc2V0QWxsb3dz
Rm9udFNtb290aGluZyhib29sKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Q0dJbWFnZVJlZigpIHsgcmV0
dXJuIDA7IH0KICAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXpl
KGNvbnN0IEludFNpemUmKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gZ2V0Q0dJbWFnZUFycmF5KCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFs
SW1hZ2UsIENvbG9yU3BhY2UpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlz
aW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgIGJv
b2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZVJlbmRlcmluZzsg
fQotICAgICAgICBQYXNzUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoKSBjb25zdDsgLy8gUmV0dXJu
IGEgbmV3IGltYWdlIHRoYXQgaXMgYSBjb3B5IG9mIHRoZSBidWZmZXIuCisgICAgICAgIFBhc3NS
ZWZQdHI8SW1hZ2U+IGRlZXBDb3B5KCkgY29uc3Q7IC8vIEd1YXJhbnRlZXMgYSBkZWVwIGNvcHkg
b2YgdGhlIGJ1ZmZlciAobWF5IGJlIENPVykuCiAKICAgICAgICAgUGFzc1JlZlB0cjxCeXRlQXJy
YXk+IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAg
ICAgIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmKSBjb25zdDsKQEAgLTEwMywxNCArMTAzLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKKyNpZiBVU0UoQ0cpCisgICAgICAgIFBhc3NSZWZQ
dHI8SW1hZ2U+IHNoYWxsb3dDb3B5KCkgY29uc3Q7IC8vIERvZXMgbm90IGd1YXJhbnRlZSBhIGRl
ZXAgY29weSBvZiB0aGUgYnVmZmVyLgorICAgICAgICBOYXRpdmVJbWFnZVB0ciBwbGF0Zm9ybURl
ZXBDb3B5KCkgY29uc3Q7IC8vIEd1YXJhbnRlZXMgYSBkZWVwIGNvcHkgb2YgdGhlIGJ1ZmZlciAo
bWF5IGJlIENPVykuCisgICAgICAgIE5hdGl2ZUltYWdlUHRyIHBsYXRmb3JtU2hhbGxvd0NvcHko
KSBjb25zdDsgLy8gRG9lcyBub3QgZ3VhcmFudGVlIGEgZGVlcCBjb3B5IG9mIHRoZSBidWZmZXIu
CisjZW5kaWYKKwogICAgICAgICB2b2lkIGNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JikgY29uc3Q7CiAKLSAgICAgICAgLy8gVGhlIGRyYXcgbWV0aG9kIGRyYXdzIHRoZSBj
b250ZW50cyBvZiB0aGUgYnVmZmVyIHdpdGhvdXQgY29weWluZyBpdC4KLSAgICAgICAgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3Qo
MCwgMCwgLTEsIC0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3Bl
cmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZh
bHNlKTsKLSAgICAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KTsKLSAgICAgICAgCisgICAgICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIENv
bXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5
U2NhbGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOwor
CiAgICAgICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CiAK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwCShyZXZpc2lvbiA5MTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3
ICs4Niw3IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6Y29weUltYWdlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpkZWVw
Q29weSgpIGNvbnN0CiB7CiAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNz
ZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgogICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZShtX2RhdGEubV9zdXJmYWNlKS5sZWFrUmVmKCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1Miw2ICsxNTIsNzkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0
Zm9ybVN0YQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVu
dGl0eSA9IGZhbHNlOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKE5hdGl2
ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlKGltYWdlUHRyKTsKKworICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBDR0lt
YWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKTsKKyAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0
LnkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAg
Ym9vbCBzaG91bGRVc2VTdWJpbWFnZSA9IGZhbHNlOworCisgICAgLy8gSWYgdGhlIHNvdXJjZSBy
ZWN0IGlzIGEgc3VicG9ydGlvbiBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0ZSBhbiBpbmZs
YXRlZCBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2lsbCBob2xkIHRoZSBlbnRpcmUgaW1hZ2UKKyAg
ICAvLyBhbmQgdGhlbiBzZXQgYSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ugd2FudCB0byBk
aXNwbGF5LgorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisKKyAg
ICBpZiAoc3JjUmVjdC5zaXplKCkgIT0gaW1hZ2VTaXplKSB7CisgICAgICAgIENHSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBvbGF0
aW9uUXVhbGl0eShjb250ZXh0KTsKKyAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVk
IHVzaW5nIGhpZ2gtcXVhbGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3Jhcnkg
Q0dJbWFnZQorICAgICAgICAvLyBjb250YWluaW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ugd2FudCB0
byBkaXNwbGF5LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkKKyAgICAg
ICAgLy8gaW50ZXJwb2xhdGlvbiBzbW9vdGhlcyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMg
ZnJvbSBvdXRzaWRlIHRoZSBzb3VyY2UgcmVjdCB0byBibGVlZAorICAgICAgICAvLyBpbnRvIHRo
ZSBkZXN0aW5hdGlvbiByZWN0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgorICAgICAg
ICBzaG91bGRVc2VTdWJpbWFnZSA9IChpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBrQ0dJbnRlcnBv
bGF0aW9uTm9uZSkgJiYgKHNyY1JlY3Quc2l6ZSgpICE9IGRlc3RSZWN0LnNpemUoKSB8fCAhZ2V0
Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisgICAgICAgIGZsb2F0
IHhTY2FsZSA9IHNyY1JlY3Qud2lkdGgoKSAvIGRlc3RSZWN0LndpZHRoKCk7CisgICAgICAgIGZs
b2F0IHlTY2FsZSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkZXN0UmVjdC5oZWlnaHQoKTsKKyAgICAg
ICAgaWYgKHNob3VsZFVzZVN1YmltYWdlKSB7CisgICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1h
Z2VSZWN0ID0gc3JjUmVjdDsKKyAgICAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVj
dC54KCkgLSBmbG9vcmYoc3JjUmVjdC54KCkpOworICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGlu
ZyA9IHNyY1JlY3QueSgpIC0gZmxvb3JmKHNyY1JlY3QueSgpKTsKKworICAgICAgICAgICAgc3Vi
aW1hZ2VSZWN0Lm1vdmUoLWxlZnRQYWRkaW5nLCAtdG9wUGFkZGluZyk7CisgICAgICAgICAgICBh
ZGp1c3RlZERlc3RSZWN0Lm1vdmUoLWxlZnRQYWRkaW5nIC8geFNjYWxlLCAtdG9wUGFkZGluZyAv
IHlTY2FsZSk7CisKKyAgICAgICAgICAgIHN1YmltYWdlUmVjdC5zZXRXaWR0aChjZWlsZihzdWJp
bWFnZVJlY3Qud2lkdGgoKSArIGxlZnRQYWRkaW5nKSk7CisgICAgICAgICAgICBhZGp1c3RlZERl
c3RSZWN0LnNldFdpZHRoKHN1YmltYWdlUmVjdC53aWR0aCgpIC8geFNjYWxlKTsKKworICAgICAg
ICAgICAgc3ViaW1hZ2VSZWN0LnNldEhlaWdodChjZWlsZihzdWJpbWFnZVJlY3QuaGVpZ2h0KCkg
KyB0b3BQYWRkaW5nKSk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChz
dWJpbWFnZVJlY3QuaGVpZ2h0KCkgLyB5U2NhbGUpOworCisgICAgICAgICAgICBpbWFnZS5hZG9w
dENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVj
dCkpOworICAgICAgICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBjdXJy
SGVpZ2h0IC0gQ0dSZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOworICAgICAgICAgICAg
ICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0
KCkpIC8geVNjYWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChkZXN0UmVjdC54KCkg
LSBzcmNSZWN0LngoKSAvIHhTY2FsZSwgZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkgLyB5U2Nh
bGUpKTsKKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShGbG9hdFNpemUoaW1h
Z2VTaXplLndpZHRoKCkgLyB4U2NhbGUsIGltYWdlU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RS
ZWN0KSkKKyAgICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJlY3Qp
OworICAgIH0KKworICAgIC8vIElmIHRoZSBpbWFnZSBpcyBvbmx5IHBhcnRpYWxseSBsb2FkZWQs
IHRoZW4gc2hyaW5rIHRoZSBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2UncmUgZHJhd2luZyBpbnRv
IGFjY29yZGluZ2x5LgorICAgIGlmICghc2hvdWxkVXNlU3ViaW1hZ2UgJiYgY3VyckhlaWdodCA8
IGltYWdlU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQo
YWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSAqIGN1cnJIZWlnaHQgLyBpbWFnZVNpemUuaGVpZ2h0
KCkpOworCisgICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgLy8g
RmxpcCB0aGUgY29vcmRzLgorICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsK
KyAgICBhZGp1c3RlZERlc3RSZWN0LnNldFkoLWFkanVzdGVkRGVzdFJlY3QubWF4WSgpKTsKKyAg
ICAKKyAgICAvLyBBZGp1c3QgdGhlIGNvbG9yIHNwYWNlLgorICAgIGltYWdlID0gSW1hZ2U6Omlt
YWdlV2l0aENvbG9yU3BhY2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSk7CisKKyAgICAv
LyBEcmF3IHRoZSBpbWFnZS4KKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgYWRqdXN0
ZWREZXN0UmVjdCwgaW1hZ2UuZ2V0KCkpOworCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShj
b250ZXh0KTsKK30KKwogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2Vk
IGJvcmRlci4KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3Nyw3MiArMTc3LDgzIEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSAKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyOjpkZWVwQ29weSgpIGNvbnN0CiB7Ci0gICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxl
YXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgotICAgIENHSW1hZ2VSZWYg
Y3R4SW1hZ2UgPSAwOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IHBsYXRmb3Jt
RGVlcENvcHkoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGltYWdlLmdldCgpKTsKK30KKworTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtRGVlcENvcHkoKSBjb25zdAoreworICAgIENHSW1hZ2VS
ZWYgaW1hZ2UgPSAwOwogICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQotICAgICAgICBj
dHhJbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1D
b250ZXh0KCkpOworICAgICAgICBpbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCiAgICAgZWxzZQotICAgICAgICBjdHhJbWFnZSA9IHdrSU9TdXJmYWNlQ29u
dGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICBp
bWFnZSA9IHdrSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1D
b250ZXh0KCkpOwogI2VuZGlmCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY3R4SW1h
Z2UpOworICAgIHJldHVybiBpbWFnZTsKIH0KIAotc3RhdGljIENHSW1hZ2VSZWYgY2dJbWFnZShj
b25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEpCitQYXNzUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2hhbGxvd0NvcHkoKSBjb25zdAogewotICAgIHJldHVy
biBDR0ltYWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGRhdGEu
bV9ieXRlc1BlclJvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1fY29sb3JTcGFj
ZSwgZGF0YS5tX2JpdG1hcEluZm8sIGRhdGEubV9kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUs
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZSA9IHBsYXRmb3JtU2hhbGxvd0NvcHkoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGltYWdlLmdldCgpKTsK
IH0KIAotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0
LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICBDb21wb3Np
dGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlcjo6cGxhdGZvcm1TaGFsbG93Q29weSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2Fj
Y2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQo
KSkgewotICAgICAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAg
SW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVm
ZmVyIGZpcnN0LgotICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7
Ci0gICAgICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0KCksIENvbG9yU3Bh
Y2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5k
ZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKLSAg
ICAgICAgICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VGb3JSZW5kZXJpbmcuZ2V0KCks
IHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2Nh
bGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5
ID0gY29weUltYWdlKCk7Ci0gICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IChkZXN0Q29u
dGV4dCA9PSBjb250ZXh0KCkpID8gQ29sb3JTcGFjZURldmljZVJHQiA6IHN0eWxlQ29sb3JTcGFj
ZTsKLSAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgpLCBjb2xvclNwYWNl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Ci0gICAgfQorICAg
IENHSW1hZ2VSZWYgaW1hZ2UgPSAwOworICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQor
ICAgICAgICBpbWFnZSA9IENHSW1hZ2VDcmVhdGUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSwgOCwgMzIsIG1fZGF0YS5tX2J5dGVzUGVyUm93LCBtX2RhdGEubV9jb2xvclNwYWNlLCBt
X2RhdGEubV9iaXRtYXBJbmZvLCBtX2RhdGEubV9kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUs
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IHdrSU9TdXJmYWNlQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworI2VuZGlmCisgICAg
cmV0dXJuIGltYWdlOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lk
IEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlT
Y2FsZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKHVzZUxvd1F1YWxpdHlTY2FsZSwgIXVzZUxvd1F1
YWxpdHlTY2FsZSk7CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gKGRlc3RDb250ZXh0ID09
IG1fY29udGV4dCkgPyBDb2xvclNwYWNlRGV2aWNlUkdCIDogc3R5bGVDb2xvclNwYWNlOworCisg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIGlmIChkZXN0Q29udGV4dCA9PSBt
X2NvbnRleHQpCisgICAgICAgIGltYWdlLmFkb3B0Q0YocGxhdGZvcm1EZWVwQ29weSgpKTsKKyAg
ICBlbHNlCisgICAgICAgIGltYWdlLmFkb3B0Q0YocGxhdGZvcm1TaGFsbG93Q29weSgpKTsKKwor
ICAgIGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgY29sb3JTcGFj
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoIW1fYWNjZWxlcmF0ZVJl
bmRlcmluZykgewotICAgICAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICAvLyBXZSdyZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBm
b3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3Qu
Ci0gICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKLSAgICAgICAg
ICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICBpZiAo
Y29udGV4dCA9PSBtX2NvbnRleHQpIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50
byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCisgICAgICAgICAgICBSZWZQdHI8
SW1hZ2U+IGNvcHkgPSBkZWVwQ29weSgpOworICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4o
Y29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFj
ZSwgb3AsIGRlc3RSZWN0KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9z
aXplLCBtX2RhdGEpKTsKLSAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVy
bihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29s
b3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VG
b3JSZW5kZXJpbmcgPSBzaGFsbG93Q29weSgpOworICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJp
bmctPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewotICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKLSAgICAgICAgY29w
eS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgIFJlZlB0cjxJbWFn
ZT4gY29weSA9IGRlZXBDb3B5KCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGNvbnRleHQs
IHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBk
ZXN0UmVjdCk7CiAgICAgfQogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dFRvQ2xpcCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewogICAg
IENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHRUb0NsaXAgPSBjb250ZXh0VG9DbGlwLT5wbGF0
Zm9ybUNvbnRleHQoKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYg
KCFtX2FjY2VsZXJhdGVSZW5kZXJpbmcpCi0gICAgICAgIGltYWdlLmFkb3B0Q0YoY2dJbWFnZSht
X3NpemUsIG1fZGF0YSkpOwotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgZWxzZQotICAgICAgICBpbWFnZS5hZG9wdENGKHdrSU9TdXJmYWNlQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKLSNlbmRpZgorICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZShBZG9wdENGLCBwbGF0Zm9ybVNoYWxsb3dDb3B5KCkpOwog
ICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHRUb0NsaXAsIHJlY3QueCgp
LCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRm
b3JtQ29udGV4dFRvQ2xpcCwgMSwgLTEpOwogICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZv
cm1Db250ZXh0VG9DbGlwLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSksIGlt
YWdlLmdldCgpKTsKQEAgLTM0NiwxMyArMzU3LDcgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCi0gICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQotICAg
ICAgICBpbWFnZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCkpKTsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRD
cmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0jZW5kaWYKKyAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgcGxhdGZvcm1EZWVwQ29weSgpKTsK
IAogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lv
biA5MTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6
Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICB9CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKK1JldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1hZ2VXaXRo
Q29sb3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKIHsKICAgICBDR0NvbG9yU3BhY2VSZWYgb3JpZ2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdl
dENvbG9yU3BhY2Uob3JpZ2luYWxJbWFnZSk7CiAKQEAgLTE5NSw3MyArMTk1LDkgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgZmxvYXQgY3VyckhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkp
OwotICAgIGlmIChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY3R4dCk7Ci0KLSAgICBib29s
IHNob3VsZFVzZVN1YmltYWdlID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgc291cmNlIHJlY3Qg
aXMgYSBzdWJwb3J0aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGluZmxhdGVk
IGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZQotICAgIC8v
IGFuZCB0aGVuIHNldCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50IHRvIGRpc3Bs
YXkuCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKICAgICBGbG9h
dFNpemUgc2VsZlNpemUgPSBjdXJyZW50RnJhbWVTaXplKCk7Ci0gICAgaWYgKHNyY1JlY3Quc2l6
ZSgpICE9IHNlbGZTaXplKSB7Ci0gICAgICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJw
b2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0
KTsKLSAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHVzaW5nIGhpZ2gtcXVhbGl0
eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgQ0dJbWFnZQotICAgICAgICAv
LyBjb250YWluaW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ugd2FudCB0byBkaXNwbGF5LiBXZSBuZWVk
IHRvIGRvIHRoaXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkKLSAgICAgICAgLy8gaW50ZXJwb2xhdGlv
biBzbW9vdGhlcyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRzaWRlIHRoZSBz
b3VyY2UgcmVjdCB0byBibGVlZAotICAgICAgICAvLyBpbnRvIHRoZSBkZXN0aW5hdGlvbiByZWN0
LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgotICAgICAgICBzaG91bGRVc2VTdWJpbWFn
ZSA9IChpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZSkgJiYgKHNy
Y1JlY3Quc2l6ZSgpICE9IGRlc3RSZWN0LnNpemUoKSB8fCAhY3R4dC0+Z2V0Q1RNKCkuaXNJZGVu
dGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7Ci0gICAgICAgIGZsb2F0IHhTY2FsZSA9IHNy
Y1JlY3Qud2lkdGgoKSAvIGRlc3RSZWN0LndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IHlTY2FsZSA9
IHNyY1JlY3QuaGVpZ2h0KCkgLyBkZXN0UmVjdC5oZWlnaHQoKTsKLSAgICAgICAgaWYgKHNob3Vs
ZFVzZVN1YmltYWdlKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1hZ2VSZWN0ID0gc3Jj
UmVjdDsKLSAgICAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVjdC54KCkgLSBmbG9v
cmYoc3JjUmVjdC54KCkpOwotICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGluZyA9IHNyY1JlY3Qu
eSgpIC0gZmxvb3JmKHNyY1JlY3QueSgpKTsKLQotICAgICAgICAgICAgc3ViaW1hZ2VSZWN0Lm1v
dmUoLWxlZnRQYWRkaW5nLCAtdG9wUGFkZGluZyk7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RS
ZWN0Lm1vdmUoLWxlZnRQYWRkaW5nIC8geFNjYWxlLCAtdG9wUGFkZGluZyAvIHlTY2FsZSk7Ci0K
LSAgICAgICAgICAgIHN1YmltYWdlUmVjdC5zZXRXaWR0aChjZWlsZihzdWJpbWFnZVJlY3Qud2lk
dGgoKSArIGxlZnRQYWRkaW5nKSk7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFdp
ZHRoKHN1YmltYWdlUmVjdC53aWR0aCgpIC8geFNjYWxlKTsKLQotICAgICAgICAgICAgc3ViaW1h
Z2VSZWN0LnNldEhlaWdodChjZWlsZihzdWJpbWFnZVJlY3QuaGVpZ2h0KCkgKyB0b3BQYWRkaW5n
KSk7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChzdWJpbWFnZVJlY3Qu
aGVpZ2h0KCkgLyB5U2NhbGUpOwotCi0gICAgICAgICAgICBpbWFnZS5hZG9wdENGKENHSW1hZ2VD
cmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVjdCkpOwotICAgICAg
ICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgewotICAgICAgICAgICAgICAg
IEFTU0VSVChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBjdXJySGVpZ2h0IC0gQ0dS
ZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOwotICAgICAgICAgICAgICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpIC8geVNjYWxl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChkZXN0UmVjdC54KCkgLSBzcmNSZWN0Lngo
KSAvIHhTY2FsZSwgZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkgLyB5U2NhbGUpKTsKLSAgICAg
ICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShGbG9hdFNpemUoc2VsZlNpemUud2lkdGgo
KSAvIHhTY2FsZSwgc2VsZlNpemUuaGVpZ2h0KCkgLyB5U2NhbGUpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghZGVzdFJlY3QuY29udGFpbnMoYWRqdXN0ZWREZXN0UmVjdCkpCi0gICAgICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKLSAgICB9Ci0KLSAg
ICAvLyBJZiB0aGUgaW1hZ2UgaXMgb25seSBwYXJ0aWFsbHkgbG9hZGVkLCB0aGVuIHNocmluayB0
aGUgZGVzdGluYXRpb24gcmVjdCB0aGF0IHdlJ3JlIGRyYXdpbmcgaW50byBhY2NvcmRpbmdseS4K
LSAgICBpZiAoIXNob3VsZFVzZVN1YmltYWdlICYmIGN1cnJIZWlnaHQgPCBzZWxmU2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWREZXN0UmVj
dC5oZWlnaHQoKSAqIGN1cnJIZWlnaHQgLyBzZWxmU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBjdHh0
LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3ApOwogCi0gICAgLy8gRmxpcCB0aGUg
Y29vcmRzLgotICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLSAgICBhZGp1
c3RlZERlc3RSZWN0LnNldFkoLWFkanVzdGVkRGVzdFJlY3QubWF4WSgpKTsKLQotICAgIC8vIEFk
anVzdCB0aGUgY29sb3Igc3BhY2UuCi0gICAgaW1hZ2UgPSBpbWFnZVdpdGhDb2xvclNwYWNlKGlt
YWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UpOwotCi0gICAgLy8gRHJhdyB0aGUgaW1hZ2UuCi0g
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3QsIGltYWdlLmdl
dCgpKTsKLQotICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOworICAgIGN0eHQtPmRyYXdJbWFnZShp
bWFnZS5nZXQoKSwgc2VsZlNpemUsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IGNvbXBvc2l0ZU9wKTsKIAogICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGltYWdl
T2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKQEAgLTMxMyw3ICsyNDksNyBAQCB2b2lkIEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgfQogCiAgICAgLy8gQWRqdXN0IHRo
ZSBjb2xvciBzcGFjZS4KLSAgICBzdWJJbWFnZSA9IGltYWdlV2l0aENvbG9yU3BhY2Uoc3ViSW1h
Z2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSk7CisgICAgc3ViSW1hZ2UgPSBJbWFnZTo6aW1hZ2VX
aXRoQ29sb3JTcGFjZShzdWJJbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlKTsKICAgICAKICAg
ICAvLyBMZW9wYXJkIGhhcyBhbiBvcHRpbWl6ZWQgY2FsbCBmb3IgdGhlIHRpbGluZyBvZiBpbWFn
ZSBwYXR0ZXJucywgYnV0IHdlIGNhbiBvbmx5IHVzZSBpdCBpZiB0aGUgaW1hZ2UgaGFzIGJlZW4g
ZGVjb2RlZCBlbm91Z2ggdGhhdAogICAgIC8vIGl0cyBidWZmZXIgaXMgdGhlIHNhbWUgc2l6ZSBh
cyB0aGUgb3ZlcmFsbCBpbWFnZS4gIEJlY2F1c2UgYSBwYXJ0aWFsbHkgZGVjb2RlZCBDR0ltYWdl
UmVmIHdpdGggYSBzbWFsbGVyIHdpZHRoIG9yIGhlaWdodCB0aGFuIHRoZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAko
cmV2aXNpb24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFVGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBGRVRp
bGU6OmFwcGx5KCkKICAgICB0aWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLWluTWF4RWZmZWN0
TG9jYXRpb24ueCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwogICAgIHRpbGVJbWFnZUNv
bnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2
aWNlUkdCLCBpbi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKIAotICAgIFJlZlB0
cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29weUltYWdl
KCksIHRydWUsIHRydWUpOworICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6
Y3JlYXRlKHRpbGVJbWFnZS0+ZGVlcENvcHkoKSwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICBBZmZpbmVU
cmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybTsKICAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0
ZShpbk1heEVmZmVjdExvY2F0aW9uLngoKSAtIG1heEVmZmVjdExvY2F0aW9uLngoKSwgaW5NYXhF
ZmZlY3RMb2NhdGlvbi55KCkgLSBtYXhFZmZlY3RMb2NhdGlvbi55KCkpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5j
cHAJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBH
cmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZSgpIGNvbnN0CitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6ZGVlcENvcHkoKSBjb25z
dAogewogICAgIHJldHVybiBTdGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1fcGl4bWFwKTsKIH0K
QEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogCiB7CiAgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgewogICAgICAgICAvLyBX
ZSdyZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3
b3JrLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCi0gICAgICAgIFJl
ZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGNv
cHkgPSBkZWVwQ29weSgpOwogICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0
KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVh
bGl0eVNjYWxlKTsKICAgICB9IGVsc2UKICAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZSht
X2RhdGEubV9pbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBJbWFnZUJ1
ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDbwogewogICAgIGlmIChkZXN0Q29udGV4dCA9PSBj
b250ZXh0KCkpIHsKICAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVy
LiAgSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2Ug
YnVmZmVyIGZpcnN0LgotICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsK
KyAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gZGVlcENvcHkoKTsKICAgICAgICAgY29weS0+
ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1f
ZGF0YS5tX2ltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0lt
YWdlQnVmZmVyV2luQ0UuY3BwCShyZXZpc2lvbiA5MTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OCw3ICs5OCw3IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQo
KSAKICAgICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpkZWVwQ29weSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWZmZXJl
ZEltYWdlKCZtX2RhdGEpKTsKIH0KQEAgLTExMSwxNCArMTExLDE0IEBAIHZvaWQgSW1hZ2VCdWZm
ZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiwKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCAsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxl
KQogewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7CisgICAgUmVm
UHRyPEltYWdlPiBpbWFnZUNvcHkgPSBkZWVwQ29weSgpOwogICAgIGNvbnRleHQtPmRyYXdJbWFn
ZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
LCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
IHsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOworICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2VDb3B5ID0gZGVlcENvcHkoKTsKICAgICBpbWFnZUNvcHktPmRyYXdQYXR0
ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9y
U3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZpc2lvbiA5MTIz
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3gu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAorUGFzc1JlZlB0cjxJbWFn
ZT4gSW1hZ2VCdWZmZXI6OmRlZXBDb3B5KCkgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiAwOwpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6
Y2xpcChHcmFwaGljc0NvbnRleHQqLAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsK
LSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOworICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VDb3B5ID0gZGVlcENvcHkoKTsKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1h
Z2VDb3B5LmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNl
TG93UXVhbGl0eVNjYWxlKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0g
ICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICBSZWZQdHI8SW1h
Z2U+IGltYWdlQ29weSA9IGRlZXBDb3B5KCk7CiAgICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihj
b250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNl
LCBvcCwgZGVzdFJlY3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA5
MTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VQYXR0ZXJuOjphcHBseVJlc28KICAgICAgICAgaWYgKCF0aWxlSW1hZ2UpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBjb3BpZWRJ
bWFnZSA9IHRpbGVJbWFnZS0+Y29weUltYWdlKCk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gY29w
aWVkSW1hZ2UgPSB0aWxlSW1hZ2UtPmRlZXBDb3B5KCk7CiAgICAgICAgIGlmICghY29waWVkSW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4
LDcgQEAgUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFSW1hZ2VFbGVtZQogICAgICAgICBT
VkdJbWFnZUJ1ZmZlclRvb2xzOjpyZW5kZXJTdWJ0cmVlVG9JbWFnZUJ1ZmZlcihtX3RhcmdldElt
YWdlLmdldCgpLCByZW5kZXJlciwgY29udGVudFRyYW5zZm9ybWF0aW9uKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlKGZpbHRlciwgbV90YXJnZXRJbWFnZSA/IG1fdGFyZ2V0
SW1hZ2UtPmNvcHlJbWFnZSgpIDogbV9jYWNoZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3Bl
Y3RSYXRpbygpKTsKKyAgICByZXR1cm4gRkVJbWFnZTo6Y3JlYXRlKGZpbHRlciwgbV90YXJnZXRJ
bWFnZSA/IG1fdGFyZ2V0SW1hZ2UtPmRlZXBDb3B5KCkgOiBtX2NhY2hlZEltYWdlLT5pbWFnZSgp
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogfQogCiB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojph
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAJKHJldmlzaW9u
IDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI3LDcgKzIyNyw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpu
YXRpdmVJbWFnZUZvckMKICAgICAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0
ZSBpbWFnZQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGRyYXcoYnVmZmVyLT5jb250
ZXh0KCksIHJlY3QoKSwgcmVjdCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBDb21wb3NpdGVTb3Vy
Y2VPdmVyKTsKLSAgICAgICAgbV9mcmFtZUNhY2hlID0gYnVmZmVyLT5jb3B5SW1hZ2UoKTsKKyAg
ICAgICAgbV9mcmFtZUNhY2hlID0gYnVmZmVyLT5kZWVwQ29weSgpOwogICAgIH0KICAgICByZXR1
cm4gbV9mcmFtZUNhY2hlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101333</attachid>
            <date>2011-07-19 09:31:52 -0700</date>
            <delta_ts>2011-07-21 13:34:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64535-20110719093147.patch</filename>
            <type>text/plain</type>
            <size>37570</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTEtMDctMTggIE1hdHRoZXcg
RGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZmFzdCBwYXRoIGZv
ciBJbWFnZUJ1ZmZlcjo6ZHJhdworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjQ1MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggZG9lc24ndCBjaGFuZ2UgYmVoYXZp
b3I7IGN1cnJlbnQgdGVzdHMgYXJlIHN1ZmZpY2llbnQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UpOiBNb3ZlZCB0aGUgbWFpbiBtZXRob2QgdG8gYmUgbmV4dCB0byB3
cmFwcGVyIGNhbGxzLgorICAgICAgICBUaGlzIGlzbid0IG5lY2Vzc2FyeSwgYnV0IGl0IGhhcyBi
ZWVuIGJvdGhlcmluZyBtZSBmb3JldmVyIDotKQorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIpOiBSZW1vdmVkIHRoZSBuZWVkIHRvIHBhc3MgZG93biB1
c2VMb3dRdWFsaXR5U2NhbGUgc2luY2UgaXQncyBub3QgbmVlZGVkIGJlbG93LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6IEFkZGluZyBhIHBsYXRmb3Jt
IHNwZWNpZmljIGRyYXdJbWFnZSBwYXRoLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmg6CisgICAgICAgIDApIENoYW5nZWQgY29weUltYWdlKCkgdG8gZGVlcENvcHko
KSB0byBtYWtlIGl0IGNsZWFyIHRoaXMgY29weSBpcyBpbmRlZWQgZGVlcCAoYnV0IGNvdWxkIGJl
IENPVykKKyAgICAgICAgMSkgQWRkZWQgc2hhbGxvd0NvcHkoKSB0aGF0IGdpdmVzIGEgY29weSB0
aGF0IGRvZXNuJ3QgZ3VhcmFudGVlIHRvIGJlIGEgZGVlcCBjb3B5LgorICAgICAgICAyKSBBZGRl
ZCBwbGF0Zm9ybURlZXBDb3B5KCkgLSBqdXN0IGFzIGRlZXBDb3B5KCkgYnV0IGdpdmVzIE5hdGl2
ZUltYWdlUHRyLgorICAgICAgICAzKSBBZGRlZCBwbGF0Zm9ybVNoYWxsb3dDb3B5KCkgLSBqdXN0
IGFzIHNoYWxsb3dDb3B5KCkgYnV0IGdpdmVzIE5hdGl2ZUltYWdlUHRyLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UpOiBBIG1ldGhvZCB0aGF0IGtub3dzIGhv
dyB0byBkcmF3IGEgbmF0aXZlSW1hZ2VQdHIgaW50byB0aGUgY29udGV4dC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAxKSBBZGRl
ZCBuZXcgbWV0aG9kcyBkZXNjcmliZWQgYWJvdmUuCisgICAgICAgIDIpIEFkZGVkIGluIHBsYWZv
cm1EZWVwQ29weSgpLCBhbmQgcGxhdGZvcm1TaGFsbG93Q29weSgpIHRvIG90aGVyIG1ldGhvZHMg
dGhhdCBzaG91bGQgdXNlIHRoZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oOiBBZGRlZCBpbWFnZVdpdGhDb2xvclNwYWNlIGJlaGluZCBDRyBwbGF0Zm9ybSBpZmRlZgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOiAKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KTogUmVmYWN0b3JlZCBvdXQgYWN0dWFsIGltYWdlIGRy
YXdpbmcgY29kZSBpbnRvIEdyYXBoaWNzQ29udGV4dCwKKyAgICAgICAgc28gdGhhdCBpdCBjYW4g
YmUgdXNlZCBieSBtb3JlIHRoYW4ganVzdCBCaXRtYXBJbWFnZSB3aXRob3V0IGhhdmluZyB0byBj
b3B5IGNvZGUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6aW1hZ2VXaXRoQ29sb3JTcGFjZSk6
IE1hZGUgaW50byBhbiBJbWFnZSBjbGFzcyBmdW5jdGlvbi4KKworICAgICAgICBVcGRhdGVkIGNv
cHlJbWFnZSgpIHRvIGRlZXBDb3B5IGluIGJlbG93IGZpbGVzOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorICAgICAgICAqIHN2Zy9TVkdGRUltYWdlRWxl
bWVudC5jcHAKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmNwcAorICAgICAgICAqIHBhZ2UvY2hyb21pdW0vRnJhbWVDaHJvbWl1bS5jcHAKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKyAgICAgICAgKiBw
YWdlL3F0L0ZyYW1lUXQuY3BwCisKIDIwMTEtMDctMTggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CiAKICAgICAgICAgW1NoYWRvd0NvbnRlbnRFbGVtZW50XSBmb3J3YXJkZWQg
bm9kZSBzaG91bGQgYmUgYWJsZSB0byBhY2Nlc3MgaXRzIGhvc3RpbmcgY29udGVudCBlbGVtZW50
LgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlz
aW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjptYWtlUHJlc2VudGF0aW9uCiB7CiAgICAgaWYgKCFtX3ByZXNlbnRlZEltYWdlKSB7CiAgICAg
ICAgIC8vIFRoZSBidWZmZXIgY29udGFpbnMgdGhlIGxhc3QgcHJlc2VudGVkIGRhdGEsIHNvIHNh
dmUgYSBjb3B5IG9mIGl0LgotICAgICAgICBtX3ByZXNlbnRlZEltYWdlID0gYnVmZmVyKCktPmNv
cHlJbWFnZSgpOworICAgICAgICBtX3ByZXNlbnRlZEltYWdlID0gYnVmZmVyKCktPmRlZXBDb3B5
KCk7CiAgICAgfQogfQogCkBAIC00NzIsNyArNDcyLDcgQEAgSW1hZ2UqIEhUTUxDYW52YXNFbGVt
ZW50Ojpjb3BpZWRJbWFnZSgpIAogICAgIGlmICghbV9jb3BpZWRJbWFnZSAmJiBidWZmZXIoKSkg
ewogICAgICAgICBpZiAobV9jb250ZXh0KQogICAgICAgICAgICAgbV9jb250ZXh0LT5wYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwotICAgICAgICBtX2NvcGllZEltYWdlID0gYnVmZmVy
KCktPmNvcHlJbWFnZSgpOworICAgICAgICBtX2NvcGllZEltYWdlID0gYnVmZmVyKCktPmRlZXBD
b3B5KCk7CiAgICAgfQogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCShyZXZpc2lvbiA5MTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMjIsNyArMzIyMiw3
IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDoKICAgICBJbnRSZWN0
IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgLy8gRklY
TUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUg
cmVhZGJhY2suCiAgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29u
dGV4dCgpLCBkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKCk7CisgICAgcmV0
dXJuIGJ1Zi0+ZGVlcENvcHkoKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRnJhbWVDaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9GcmFtZUNo
cm9taXVtLmNwcAkocmV2aXNpb24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2Nocm9t
aXVtL0ZyYW1lQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3ICs5MCw3IEBAIERy
YWdJbWFnZVJlZiBGcmFtZTo6bm9kZUltYWdlKE5vZGUqIG5vZGUKIAogICAgIG1fdmlldy0+cGFp
bnRDb250ZW50cyhidWZmZXItPmNvbnRleHQoKSwgcGFpbnRpbmdSZWN0KTsKIAotICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZSgpOworICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2UgPSBidWZmZXItPmRlZXBDb3B5KCk7CiAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZy
b21JbWFnZShpbWFnZS5nZXQoKSk7CiB9CiAKQEAgLTExMyw3ICsxMTMsNyBAQCBEcmFnSW1hZ2VS
ZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvCiAKICAgICBtX3ZpZXctPnBhaW50Q29udGVu
dHMoYnVmZmVyLT5jb250ZXh0KCksIHBhaW50aW5nUmVjdCk7CiAKLSAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
YnVmZmVyLT5kZWVwQ29weSgpOwogICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2Uo
aW1hZ2UuZ2V0KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0ZyYW1lUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRnJhbWVRdC5jcHAJKHJl
dmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9xdC9GcmFtZVF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBEcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFn
ZUZvclNlbGVjdGlvCiAgICAgbV92aWV3LT5wYWludENvbnRlbnRzKGNvbnRleHQsIHBhaW50aW5n
UmVjdCk7CiAgICAgbV92aWV3LT5zZXRQYWludEJlaGF2aW9yKHByZXZpb3VzUGFpbnRCZWhhdmlv
cik7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoKTsKKyAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5kZWVwQ29weSgpOwogICAgIHJldHVybiBj
cmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UuZ2V0KCkpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDI2ICszNTEsNiBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgpCiAgICAgcmV0dXJuIG1fc3RhdGUu
cGFpbnRpbmdEaXNhYmxlZDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJ
bWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYg
cCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNv
bG9yU3BhY2UsIHAsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3ApOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIGNvbnN0IEludFJlY3QmIHIsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxv
d1F1YWxpdHlTY2FsZSkKLXsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwg
ciwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgZHJhd0ltYWdlKGltYWdlLCBzdHls
ZUNvbG9yU3BhY2UsIEludFJlY3QoZGVzdCwgc3JjUmVjdC5zaXplKCkpLCBzcmNSZWN0LCBvcCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVjdCYgZGVzdCwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxl
KQotewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJlY3QoZGVz
dCksIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwotfQotCiAjaWYgIU9TKFdJTkNF
KSB8fCAoUExBVEZPUk0oUVQpICYmICFIQVZFKFFSQVdGT05UKSkKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKQogewpAQCAtNDMzLDYgKzQxMywy
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hsaWdodEZvclRlCiAgICAgZmlsbFJl
Y3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBvaW50LCBoLCBmcm9tLCB0byksIGJh
Y2tncm91bmRDb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
SW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZShpbWFn
ZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAsIC0xLCAtMSksIG9wKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBDb21wb3NpdGVPcGVyYXRvciBvcCwg
Ym9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNv
bG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2Fs
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBD
b2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIGRlc3QsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXdJbWFnZShp
bWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3QsIHNyY1JlY3Quc2l6ZSgpKSwgc3Jj
UmVjdCwgb3ApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBp
bWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIGRlc3QsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1
YWxpdHlTY2FsZSkKK3sKKyAgICBkcmF3SW1hZ2UoaW1hZ2UsIHN0eWxlQ29sb3JTcGFjZSwgRmxv
YXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKK30KKwogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7CiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCkBAIC01NDEsMTAgKzU0MSwxMCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltCiAgICAgICAgIEludGVycG9s
YXRpb25RdWFsaXR5IHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgSW50ZXJwb2xhdGlv
bkxvdwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25O
b25lKTsKLSAgICAgICAgaW1hZ2UtPmRyYXcodGhpcywgc3R5bGVDb2xvclNwYWNlLCBGbG9hdFJl
Y3QoZGVzdC5sb2NhdGlvbigpLCBGbG9hdFNpemUodHcsIHRoKSksIEZsb2F0UmVjdChzcmMubG9j
YXRpb24oKSwgRmxvYXRTaXplKHRzdywgdHNoKSksIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwor
ICAgICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0
LmxvY2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigp
LCBGbG9hdFNpemUodHN3LCB0c2gpKSwgb3ApOwogICAgICAgICBzZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KHByZXZpb3VzSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgIH0gZWxzZQotICAg
ICAgICBpbWFnZS0+ZHJhdyh0aGlzLCBzdHlsZUNvbG9yU3BhY2UsIEZsb2F0UmVjdChkZXN0Lmxv
Y2F0aW9uKCksIEZsb2F0U2l6ZSh0dywgdGgpKSwgRmxvYXRSZWN0KHNyYy5sb2NhdGlvbigpLCBG
bG9hdFNpemUodHN3LCB0c2gpKSwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIGlt
YWdlLT5kcmF3KHRoaXMsIHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QubG9jYXRpb24o
KSwgRmxvYXRTaXplKHR3LCB0aCkpLCBGbG9hdFJlY3Qoc3JjLmxvY2F0aW9uKCksIEZsb2F0U2l6
ZSh0c3csIHRzaCkpLCBvcCk7CiB9CiAKICNpZiAhUExBVEZPUk0oUVQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2
aXNpb24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CiAgICAgICAgIHZvaWQg
ZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogICAgICAgICAKKyAgICAgICAgdm9pZCBkcmF3SW1hZ2Uo
TmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIENvbG9yU3BhY2Ugc3R5
bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CisKICAg
ICAgICAgLy8gQWxsb3cgZm9udCBzbW9vdGhpbmcgKExDRCBhbnRpYWxpYXNpbmcpLiBOb3QgcGFy
dCBvZiB0aGUgZ3JhcGhpY3Mgc3RhdGUuCiAgICAgICAgIHZvaWQgc2V0QWxsb3dzRm9udFNtb290
aGluZyhib29sKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Q0dJbWFnZVJlZigpIHsgcmV0dXJuIDA7IH0K
ICAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IElu
dFNpemUmKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4g
Z2V0Q0dJbWFnZUFycmF5KCkgeyByZXR1cm4gMDsgfQorICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENv
bG9yU3BhY2UpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDkxMjM1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtODMsNyArODMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCogY29udGV4dCgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgaXNBY2Nl
bGVyYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0ZVJlbmRlcmluZzsgfQotICAgICAg
ICBQYXNzUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoKSBjb25zdDsgLy8gUmV0dXJuIGEgbmV3IGlt
YWdlIHRoYXQgaXMgYSBjb3B5IG9mIHRoZSBidWZmZXIuCisgICAgICAgIFBhc3NSZWZQdHI8SW1h
Z2U+IGRlZXBDb3B5KCkgY29uc3Q7IC8vIEd1YXJhbnRlZXMgYSBkZWVwIGNvcHkgb2YgdGhlIGJ1
ZmZlciAobWF5IGJlIENPVykuCiAKICAgICAgICAgUGFzc1JlZlB0cjxCeXRlQXJyYXk+IGdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgICAgIFBhc3NS
ZWZQdHI8Qnl0ZUFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
KSBjb25zdDsKQEAgLTEwMywxNCArMTAzLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKKyNpZiBVU0UoQ0cpCisgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2U+
IHNoYWxsb3dDb3B5KCkgY29uc3Q7IC8vIERvZXMgbm90IGd1YXJhbnRlZSBhIGRlZXAgY29weSBv
ZiB0aGUgYnVmZmVyLgorICAgICAgICBOYXRpdmVJbWFnZVB0ciBwbGF0Zm9ybURlZXBDb3B5KCkg
Y29uc3Q7IC8vIEd1YXJhbnRlZXMgYSBkZWVwIGNvcHkgb2YgdGhlIGJ1ZmZlciAobWF5IGJlIENP
VykuCisgICAgICAgIE5hdGl2ZUltYWdlUHRyIHBsYXRmb3JtU2hhbGxvd0NvcHkoKSBjb25zdDsg
Ly8gRG9lcyBub3QgZ3VhcmFudGVlIGEgZGVlcCBjb3B5IG9mIHRoZSBidWZmZXIuCisjZW5kaWYK
KwogICAgICAgICB2b2lkIGNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jikg
Y29uc3Q7CiAKLSAgICAgICAgLy8gVGhlIGRyYXcgbWV0aG9kIGRyYXdzIHRoZSBjb250ZW50cyBv
ZiB0aGUgYnVmZmVyIHdpdGhvdXQgY29weWluZyBpdC4KLSAgICAgICAgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCosIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEs
IC0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBD
b21wb3NpdGVTb3VyY2VPdmVyLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSA9IGZhbHNlKTsKLSAg
ICAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBz
dHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KTsKLSAgICAgICAgCisgICAgICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBDb2xv
clNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIENvbXBvc2l0ZU9w
ZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUgPSBm
YWxzZSk7CisgICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOworCiAgICAgICAg
IGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CiAKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3Bw
CShyZXZpc2lvbiA5MTIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBA
IEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1cm4gbV9j
b250ZXh0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUlt
YWdlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpkZWVwQ29weSgpIGNv
bnN0CiB7CiAgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3Vy
ZmFjZSBvbiBkZXN0cnVjdGlvbgogICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlD
YWlyb0ltYWdlU3VyZmFjZShtX2RhdGEubV9zdXJmYWNlKS5sZWFrUmVmKCkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAkocmV2aXNpb24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
Miw2ICsxNTIsNzkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YQog
ICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZh
bHNlOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKE5hdGl2ZUltYWdlUHRy
IGltYWdlUHRyLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCit7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlKGltYWdlUHRyKTsKKworICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlLmdldCgpKTsKKyAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAgYm9vbCBzaG91
bGRVc2VTdWJpbWFnZSA9IGZhbHNlOworCisgICAgLy8gSWYgdGhlIHNvdXJjZSByZWN0IGlzIGEg
c3VicG9ydGlvbiBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0ZSBhbiBpbmZsYXRlZCBkZXN0
aW5hdGlvbiByZWN0IHRoYXQgd2lsbCBob2xkIHRoZSBlbnRpcmUgaW1hZ2UKKyAgICAvLyBhbmQg
dGhlbiBzZXQgYSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5Lgor
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisKKyAgICBpZiAoc3Jj
UmVjdC5zaXplKCkgIT0gaW1hZ2VTaXplKSB7CisgICAgICAgIENHSW50ZXJwb2xhdGlvblF1YWxp
dHkgaW50ZXJwb2xhdGlvblF1YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0
eShjb250ZXh0KTsKKyAgICAgICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHVzaW5nIGhp
Z2gtcXVhbGl0eSBpbnRlcnBvbGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgQ0dJbWFnZQor
ICAgICAgICAvLyBjb250YWluaW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ugd2FudCB0byBkaXNwbGF5
LiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkKKyAgICAgICAgLy8gaW50
ZXJwb2xhdGlvbiBzbW9vdGhlcyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRz
aWRlIHRoZSBzb3VyY2UgcmVjdCB0byBibGVlZAorICAgICAgICAvLyBpbnRvIHRoZSBkZXN0aW5h
dGlvbiByZWN0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgorICAgICAgICBzaG91bGRV
c2VTdWJpbWFnZSA9IChpbnRlcnBvbGF0aW9uUXVhbGl0eSAhPSBrQ0dJbnRlcnBvbGF0aW9uTm9u
ZSkgJiYgKHNyY1JlY3Quc2l6ZSgpICE9IGRlc3RSZWN0LnNpemUoKSB8fCAhZ2V0Q1RNKCkuaXNJ
ZGVudGl0eU9yVHJhbnNsYXRpb25PckZsaXBwZWQoKSk7CisgICAgICAgIGZsb2F0IHhTY2FsZSA9
IHNyY1JlY3Qud2lkdGgoKSAvIGRlc3RSZWN0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHlTY2Fs
ZSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkZXN0UmVjdC5oZWlnaHQoKTsKKyAgICAgICAgaWYgKHNo
b3VsZFVzZVN1YmltYWdlKSB7CisgICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1hZ2VSZWN0ID0g
c3JjUmVjdDsKKyAgICAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVjdC54KCkgLSBm
bG9vcmYoc3JjUmVjdC54KCkpOworICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGluZyA9IHNyY1Jl
Y3QueSgpIC0gZmxvb3JmKHNyY1JlY3QueSgpKTsKKworICAgICAgICAgICAgc3ViaW1hZ2VSZWN0
Lm1vdmUoLWxlZnRQYWRkaW5nLCAtdG9wUGFkZGluZyk7CisgICAgICAgICAgICBhZGp1c3RlZERl
c3RSZWN0Lm1vdmUoLWxlZnRQYWRkaW5nIC8geFNjYWxlLCAtdG9wUGFkZGluZyAvIHlTY2FsZSk7
CisKKyAgICAgICAgICAgIHN1YmltYWdlUmVjdC5zZXRXaWR0aChjZWlsZihzdWJpbWFnZVJlY3Qu
d2lkdGgoKSArIGxlZnRQYWRkaW5nKSk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNl
dFdpZHRoKHN1YmltYWdlUmVjdC53aWR0aCgpIC8geFNjYWxlKTsKKworICAgICAgICAgICAgc3Vi
aW1hZ2VSZWN0LnNldEhlaWdodChjZWlsZihzdWJpbWFnZVJlY3QuaGVpZ2h0KCkgKyB0b3BQYWRk
aW5nKSk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChzdWJpbWFnZVJl
Y3QuaGVpZ2h0KCkgLyB5U2NhbGUpOworCisgICAgICAgICAgICBpbWFnZS5hZG9wdENGKENHSW1h
Z2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVjdCkpOworICAg
ICAgICAgICAgaWYgKGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBjdXJySGVpZ2h0IC0g
Q0dSZWN0SW50ZWdyYWwoc3JjUmVjdCkub3JpZ2luLnkpOworICAgICAgICAgICAgICAgIGFkanVz
dGVkRGVzdFJlY3Quc2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpIC8geVNj
YWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkanVz
dGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludChkZXN0UmVjdC54KCkgLSBzcmNSZWN0
LngoKSAvIHhTY2FsZSwgZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkgLyB5U2NhbGUpKTsKKyAg
ICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShGbG9hdFNpemUoaW1hZ2VTaXplLndp
ZHRoKCkgLyB4U2NhbGUsIGltYWdlU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFkZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RSZWN0KSkKKyAg
ICAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJlY3QpOworICAgIH0K
KworICAgIC8vIElmIHRoZSBpbWFnZSBpcyBvbmx5IHBhcnRpYWxseSBsb2FkZWQsIHRoZW4gc2hy
aW5rIHRoZSBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2UncmUgZHJhd2luZyBpbnRvIGFjY29yZGlu
Z2x5LgorICAgIGlmICghc2hvdWxkVXNlU3ViaW1hZ2UgJiYgY3VyckhlaWdodCA8IGltYWdlU2l6
ZS5oZWlnaHQoKSkKKyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWRE
ZXN0UmVjdC5oZWlnaHQoKSAqIGN1cnJIZWlnaHQgLyBpbWFnZVNpemUuaGVpZ2h0KCkpOworCisg
ICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgLy8gRmxpcCB0aGUg
Y29vcmRzLgorICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICBhZGp1
c3RlZERlc3RSZWN0LnNldFkoLWFkanVzdGVkRGVzdFJlY3QubWF4WSgpKTsKKyAgICAKKyAgICAv
LyBBZGp1c3QgdGhlIGNvbG9yIHNwYWNlLgorICAgIGltYWdlID0gSW1hZ2U6OmltYWdlV2l0aENv
bG9yU3BhY2UoaW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSk7CisKKyAgICAvLyBEcmF3IHRo
ZSBpbWFnZS4KKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgYWRqdXN0ZWREZXN0UmVj
dCwgaW1hZ2UuZ2V0KCkpOworCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsK
K30KKwogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3
MiArMTc3LDgzIEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAg
ICByZXR1cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpk
ZWVwQ29weSgpIGNvbnN0CiB7Ci0gICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBw
YXNzZWQgaW4gQ0dJbWFnZSBvbiBkZXN0cnVjdGlvbgotICAgIENHSW1hZ2VSZWYgY3R4SW1hZ2Ug
PSAwOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IHBsYXRmb3JtRGVlcENvcHko
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKGltYWdlLmdldCgpKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VC
dWZmZXI6OnBsYXRmb3JtRGVlcENvcHkoKSBjb25zdAoreworICAgIENHSW1hZ2VSZWYgaW1hZ2Ug
PSAwOwogICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQotICAgICAgICBjdHhJbWFnZSA9
IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkp
OworICAgICAgICBpbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCkpOwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCiAgICAgZWxzZQotICAgICAgICBjdHhJbWFnZSA9IHdrSU9TdXJmYWNlQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgICAgICBpbWFnZSA9IHdr
SU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkp
OwogI2VuZGlmCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY3R4SW1hZ2UpOworICAg
IHJldHVybiBpbWFnZTsKIH0KIAotc3RhdGljIENHSW1hZ2VSZWYgY2dJbWFnZShjb25zdCBJbnRT
aXplJiBzaXplLCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEpCitQYXNzUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6c2hhbGxvd0NvcHkoKSBjb25zdAogewotICAgIHJldHVybiBDR0ltYWdl
Q3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGRhdGEubV9ieXRlc1Bl
clJvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1fY29sb3JTcGFjZSwgZGF0YS5t
X2JpdG1hcEluZm8sIGRhdGEubV9kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRl
cmluZ0ludGVudERlZmF1bHQpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IHBs
YXRmb3JtU2hhbGxvd0NvcHkoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGltYWdlLmdldCgpKTsKIH0KIAotdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNw
YWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1TaGFsbG93Q29weSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2FjY2VsZXJhdGVS
ZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgewotICAg
ICAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3JkZXIg
Zm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZpcnN0
LgotICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7Ci0gICAgICAg
ICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxlKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBC
aXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBtX2RhdGEpKTsKLSAgICAgICAgICAg
IGRlc3RDb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VGb3JSZW5kZXJpbmcuZ2V0KCksIHN0eWxlQ29s
b3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUlt
YWdlKCk7Ci0gICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IChkZXN0Q29udGV4dCA9PSBj
b250ZXh0KCkpID8gQ29sb3JTcGFjZURldmljZVJHQiA6IHN0eWxlQ29sb3JTcGFjZTsKLSAgICAg
ICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShjb3B5LmdldCgpLCBjb2xvclNwYWNlLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Ci0gICAgfQorICAgIENHSW1hZ2VS
ZWYgaW1hZ2UgPSAwOworICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQorICAgICAgICBp
bWFnZSA9IENHSW1hZ2VDcmVhdGUobV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgOCwg
MzIsIG1fZGF0YS5tX2J5dGVzUGVyUm93LCBtX2RhdGEubV9jb2xvclNwYWNlLCBtX2RhdGEubV9i
aXRtYXBJbmZvLCBtX2RhdGEubV9kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRl
cmluZ0ludGVudERlZmF1bHQpOworI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IHdrSU9TdXJmYWNlQ29udGV4dENyZWF0ZUlt
YWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworI2VuZGlmCisgICAgcmV0dXJuIGlt
YWdlOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQq
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEltYWdlQnVm
ZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVD
b2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sK
KyAgICBBU1NFUlRfVU5VU0VEKHVzZUxvd1F1YWxpdHlTY2FsZSwgIXVzZUxvd1F1YWxpdHlTY2Fs
ZSk7CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gKGRlc3RDb250ZXh0ID09IG1fY29udGV4
dCkgPyBDb2xvclNwYWNlRGV2aWNlUkdCIDogc3R5bGVDb2xvclNwYWNlOworCisgICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIGlmIChkZXN0Q29udGV4dCA9PSBtX2NvbnRleHQp
CisgICAgICAgIGltYWdlLmFkb3B0Q0YocGxhdGZvcm1EZWVwQ29weSgpKTsKKyAgICBlbHNlCisg
ICAgICAgIGltYWdlLmFkb3B0Q0YocGxhdGZvcm1TaGFsbG93Q29weSgpKTsKKworICAgIGRlc3RD
b250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgY29sb3JTcGFjZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmluZykg
ewotICAgICAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7Ci0gICAgICAgICAgICAv
LyBXZSdyZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0
byB3b3JrLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCi0gICAgICAg
ICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKLSAgICAgICAgICAgIGNvcHkt
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAgICBpZiAoY29udGV4dCA9
PSBtX2NvbnRleHQpIHsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3du
IGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCisgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGNv
cHkgPSBkZWVwQ29weSgpOworICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRl
c3RSZWN0KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2VGb3JSZW5kZXJpbmcgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNnSW1hZ2UobV9zaXplLCBtX2Rh
dGEpKTsKLSAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwg
b3AsIGRlc3RSZWN0KTsKKyAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJp
bmcgPSBzaGFsbG93Q29weSgpOworICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQ
YXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNv
bG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAg
ICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKLSAgICAgICAgY29weS0+ZHJhd1Bh
dHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHls
ZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9
IGRlZXBDb3B5KCk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7
CiAgICAgfQogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dFRvQ2xpcCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIENHQ29udGV4
dFJlZiBwbGF0Zm9ybUNvbnRleHRUb0NsaXAgPSBjb250ZXh0VG9DbGlwLT5wbGF0Zm9ybUNvbnRl
eHQoKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFtX2FjY2Vs
ZXJhdGVSZW5kZXJpbmcpCi0gICAgICAgIGltYWdlLmFkb3B0Q0YoY2dJbWFnZShtX3NpemUsIG1f
ZGF0YSkpOwotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxz
ZQotICAgICAgICBpbWFnZS5hZG9wdENGKHdrSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKGNv
bnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpKTsKLSNlbmRpZgorICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZShBZG9wdENGLCBwbGF0Zm9ybVNoYWxsb3dDb3B5KCkpOwogICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHRUb0NsaXAsIHJlY3QueCgpLCByZWN0Lnko
KSArIHJlY3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4
dFRvQ2xpcCwgMSwgLTEpOwogICAgIENHQ29udGV4dENsaXBUb01hc2socGxhdGZvcm1Db250ZXh0
VG9DbGlwLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCByZWN0LnNpemUoKSksIGltYWdlLmdldCgp
KTsKQEAgLTM0NiwxMyArMzU3LDcgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29u
c3QgU3RyaQogewogICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwogCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlOwotICAgIGlmICghbV9hY2NlbGVyYXRlUmVuZGVyaW5nKQotICAgICAgICBpbWFn
ZS5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1D
b250ZXh0KCkpKTsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
IGVsc2UKLSAgICAgICAgaW1hZ2UuYWRvcHRDRih3a0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0jZW5kaWYKKyAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2UoQWRvcHRDRiwgcGxhdGZvcm1EZWVwQ29weSgpKTsKIAogICAgIGlm
ICghaW1hZ2UpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCShyZXZpc2lvbiA5MTIzNSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JT
b2xpZENvbG9yKCkKICAgICB9CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1h
Z2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKK1JldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1hZ2VXaXRoQ29sb3JTcGFj
ZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAg
ICBDR0NvbG9yU3BhY2VSZWYgb3JpZ2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9yU3Bh
Y2Uob3JpZ2luYWxJbWFnZSk7CiAKQEAgLTE5NSw3MyArMTk1LDkgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
ZmxvYXQgY3VyckhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpOwotICAgIGlm
IChjdXJySGVpZ2h0IDw9IHNyY1JlY3QueSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY3R4dCk7Ci0KLSAgICBib29sIHNob3VsZFVz
ZVN1YmltYWdlID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGUgc291cmNlIHJlY3QgaXMgYSBzdWJw
b3J0aW9uIG9mIHRoZSBpbWFnZSwgdGhlbiB3ZSBjb21wdXRlIGFuIGluZmxhdGVkIGRlc3RpbmF0
aW9uIHJlY3QgdGhhdCB3aWxsIGhvbGQgdGhlIGVudGlyZSBpbWFnZQotICAgIC8vIGFuZCB0aGVu
IHNldCBhIGNsaXAgdG8gdGhlIHBvcnRpb24gdGhhdCB3ZSB3YW50IHRvIGRpc3BsYXkuCi0gICAg
RmxvYXRSZWN0IGFkanVzdGVkRGVzdFJlY3QgPSBkZXN0UmVjdDsKICAgICBGbG9hdFNpemUgc2Vs
ZlNpemUgPSBjdXJyZW50RnJhbWVTaXplKCk7Ci0gICAgaWYgKHNyY1JlY3Quc2l6ZSgpICE9IHNl
bGZTaXplKSB7Ci0gICAgICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1
YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0KTsKLSAgICAg
ICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHVzaW5nIGhpZ2gtcXVhbGl0eSBpbnRlcnBv
bGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgQ0dJbWFnZQotICAgICAgICAvLyBjb250YWlu
aW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ugd2FudCB0byBkaXNwbGF5LiBXZSBuZWVkIHRvIGRvIHRo
aXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkKLSAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiBzbW9vdGhl
cyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRzaWRlIHRoZSBzb3VyY2UgcmVj
dCB0byBibGVlZAotICAgICAgICAvLyBpbnRvIHRoZSBkZXN0aW5hdGlvbiByZWN0LiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgotICAgICAgICBzaG91bGRVc2VTdWJpbWFnZSA9IChpbnRl
cnBvbGF0aW9uUXVhbGl0eSAhPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZSkgJiYgKHNyY1JlY3Quc2l6
ZSgpICE9IGRlc3RSZWN0LnNpemUoKSB8fCAhY3R4dC0+Z2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJh
bnNsYXRpb25PckZsaXBwZWQoKSk7Ci0gICAgICAgIGZsb2F0IHhTY2FsZSA9IHNyY1JlY3Qud2lk
dGgoKSAvIGRlc3RSZWN0LndpZHRoKCk7Ci0gICAgICAgIGZsb2F0IHlTY2FsZSA9IHNyY1JlY3Qu
aGVpZ2h0KCkgLyBkZXN0UmVjdC5oZWlnaHQoKTsKLSAgICAgICAgaWYgKHNob3VsZFVzZVN1Ymlt
YWdlKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1hZ2VSZWN0ID0gc3JjUmVjdDsKLSAg
ICAgICAgICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVjdC54KCkgLSBmbG9vcmYoc3JjUmVj
dC54KCkpOwotICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGluZyA9IHNyY1JlY3QueSgpIC0gZmxv
b3JmKHNyY1JlY3QueSgpKTsKLQotICAgICAgICAgICAgc3ViaW1hZ2VSZWN0Lm1vdmUoLWxlZnRQ
YWRkaW5nLCAtdG9wUGFkZGluZyk7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0Lm1vdmUo
LWxlZnRQYWRkaW5nIC8geFNjYWxlLCAtdG9wUGFkZGluZyAvIHlTY2FsZSk7Ci0KLSAgICAgICAg
ICAgIHN1YmltYWdlUmVjdC5zZXRXaWR0aChjZWlsZihzdWJpbWFnZVJlY3Qud2lkdGgoKSArIGxl
ZnRQYWRkaW5nKSk7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFdpZHRoKHN1Ymlt
YWdlUmVjdC53aWR0aCgpIC8geFNjYWxlKTsKLQotICAgICAgICAgICAgc3ViaW1hZ2VSZWN0LnNl
dEhlaWdodChjZWlsZihzdWJpbWFnZVJlY3QuaGVpZ2h0KCkgKyB0b3BQYWRkaW5nKSk7Ci0gICAg
ICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChzdWJpbWFnZVJlY3QuaGVpZ2h0KCkg
LyB5U2NhbGUpOwotCi0gICAgICAgICAgICBpbWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRo
SW1hZ2VJblJlY3QoaW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVjdCkpOwotICAgICAgICAgICAgaWYg
KGN1cnJIZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBjdXJySGVpZ2h0IC0gQ0dSZWN0SW50ZWdy
YWwoc3JjUmVjdCkub3JpZ2luLnkpOwotICAgICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Qu
c2V0SGVpZ2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpIC8geVNjYWxlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Qu
c2V0TG9jYXRpb24oRmxvYXRQb2ludChkZXN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSAvIHhTY2Fs
ZSwgZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkgLyB5U2NhbGUpKTsKLSAgICAgICAgICAgIGFk
anVzdGVkRGVzdFJlY3Quc2V0U2l6ZShGbG9hdFNpemUoc2VsZlNpemUud2lkdGgoKSAvIHhTY2Fs
ZSwgc2VsZlNpemUuaGVpZ2h0KCkgLyB5U2NhbGUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghZGVzdFJlY3QuY29udGFpbnMoYWRqdXN0ZWREZXN0UmVjdCkpCi0gICAgICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0
aGUgaW1hZ2UgaXMgb25seSBwYXJ0aWFsbHkgbG9hZGVkLCB0aGVuIHNocmluayB0aGUgZGVzdGlu
YXRpb24gcmVjdCB0aGF0IHdlJ3JlIGRyYXdpbmcgaW50byBhY2NvcmRpbmdseS4KLSAgICBpZiAo
IXNob3VsZFVzZVN1YmltYWdlICYmIGN1cnJIZWlnaHQgPCBzZWxmU2l6ZS5oZWlnaHQoKSkKLSAg
ICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQo
KSAqIGN1cnJIZWlnaHQgLyBzZWxmU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBjdHh0LT5zZXRDb21w
b3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3ApOwogCi0gICAgLy8gRmxpcCB0aGUgY29vcmRzLgot
ICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKLSAgICBhZGp1c3RlZERlc3RS
ZWN0LnNldFkoLWFkanVzdGVkRGVzdFJlY3QubWF4WSgpKTsKLQotICAgIC8vIEFkanVzdCB0aGUg
Y29sb3Igc3BhY2UuCi0gICAgaW1hZ2UgPSBpbWFnZVdpdGhDb2xvclNwYWNlKGltYWdlLmdldCgp
LCBzdHlsZUNvbG9yU3BhY2UpOwotCi0gICAgLy8gRHJhdyB0aGUgaW1hZ2UuCi0gICAgQ0dDb250
ZXh0RHJhd0ltYWdlKGNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3QsIGltYWdlLmdldCgpKTsKLQot
ICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOworICAgIGN0eHQtPmRyYXdJbWFnZShpbWFnZS5nZXQo
KSwgc2VsZlNpemUsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0
ZU9wKTsKIAogICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIo
KS0+ZGlkRHJhdyh0aGlzKTsKQEAgLTMxMyw3ICsyNDksNyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgfQogCiAgICAgLy8gQWRqdXN0IHRoZSBjb2xvciBz
cGFjZS4KLSAgICBzdWJJbWFnZSA9IGltYWdlV2l0aENvbG9yU3BhY2Uoc3ViSW1hZ2UuZ2V0KCks
IHN0eWxlQ29sb3JTcGFjZSk7CisgICAgc3ViSW1hZ2UgPSBJbWFnZTo6aW1hZ2VXaXRoQ29sb3JT
cGFjZShzdWJJbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlKTsKICAgICAKICAgICAvLyBMZW9w
YXJkIGhhcyBhbiBvcHRpbWl6ZWQgY2FsbCBmb3IgdGhlIHRpbGluZyBvZiBpbWFnZSBwYXR0ZXJu
cywgYnV0IHdlIGNhbiBvbmx5IHVzZSBpdCBpZiB0aGUgaW1hZ2UgaGFzIGJlZW4gZGVjb2RlZCBl
bm91Z2ggdGhhdAogICAgIC8vIGl0cyBidWZmZXIgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgb3Zl
cmFsbCBpbWFnZS4gIEJlY2F1c2UgYSBwYXJ0aWFsbHkgZGVjb2RlZCBDR0ltYWdlUmVmIHdpdGgg
YSBzbWFsbGVyIHdpZHRoIG9yIGhlaWdodCB0aGFuIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkocmV2aXNpb24g
OTEyMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBGRVRpbGU6OmFwcGx5
KCkKICAgICB0aWxlSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLWluTWF4RWZmZWN0TG9jYXRpb24u
eCgpLCAtaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkpOwogICAgIHRpbGVJbWFnZUNvbnRleHQtPmRy
YXdJbWFnZUJ1ZmZlcihpbi0+YXNJbWFnZUJ1ZmZlcigpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBp
bi0+YWJzb2x1dGVQYWludFJlY3QoKS5sb2NhdGlvbigpKTsKIAotICAgIFJlZlB0cjxQYXR0ZXJu
PiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRpbGVJbWFnZS0+Y29weUltYWdlKCksIHRydWUs
IHRydWUpOworICAgIFJlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuID0gUGF0dGVybjo6Y3JlYXRlKHRp
bGVJbWFnZS0+ZGVlcENvcHkoKSwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0g
cGF0dGVyblRyYW5zZm9ybTsKICAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVm
ZmVjdExvY2F0aW9uLngoKSAtIG1heEVmZmVjdExvY2F0aW9uLngoKSwgaW5NYXhFZmZlY3RMb2Nh
dGlvbi55KCkgLSBtYXhFZmZlY3RMb2NhdGlvbi55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlz
aW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VC
dWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBHcmFwaGljc0Nv
bnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQo
KTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0
CitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6ZGVlcENvcHkoKSBjb25zdAogewogICAg
IHJldHVybiBTdGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1fcGl4bWFwKTsKIH0KQEAgLTEzMSw3
ICsxMzEsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiB7CiAg
ICAgaWYgKGRlc3RDb250ZXh0ID09IGNvbnRleHQoKSkgewogICAgICAgICAvLyBXZSdyZSBkcmF3
aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBu
ZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCi0gICAgICAgIFJlZlB0cjxJbWFn
ZT4gY29weSA9IGNvcHlJbWFnZSgpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBkZWVw
Q29weSgpOwogICAgICAgICBkZXN0Q29udGV4dC0+ZHJhd0ltYWdlKGNvcHkuZ2V0KCksIENvbG9y
U3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVhbGl0eVNjYWxl
KTsKICAgICB9IGVsc2UKICAgICAgICAgZGVzdENvbnRleHQtPmRyYXdJbWFnZShtX2RhdGEubV9p
bWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxv
d1F1YWxpdHlTY2FsZSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDbwogewogICAgIGlmIChkZXN0Q29udGV4dCA9PSBjb250ZXh0KCkp
IHsKICAgICAgICAgLy8gV2UncmUgZHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLiAgSW4gb3Jk
ZXIgZm9yIHRoaXMgdG8gd29yaywgd2UgbmVlZCB0byBjb3B5IHRoZSBzb3VyY2UgYnVmZmVyIGZp
cnN0LgotICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKKyAgICAgICAg
UmVmUHRyPEltYWdlPiBjb3B5ID0gZGVlcENvcHkoKTsKICAgICAgICAgY29weS0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNv
bG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fZGF0YS5tX2lt
YWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHAJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3
IEBAIHNpemVfdCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX3Np
emUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAorUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXI6OmRlZXBDb3B5KCkgY29uc3QKIHsKICAgICBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBCaXRtYXBJbWFnZVNpbmds
ZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCksIHRy
dWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VC
dWZmZXJXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlzaW9uIDkxMjM1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgR3JhcGhpY3NDb250ZXh0KiBJbWFnZUJ1
ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2NvbnRleHQuZ2V0KCk7CiB9CiAKLVBhc3NS
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAorUGFzc1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmRlZXBDb3B5KCkgY29uc3QKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEJ1ZmZlcmVkSW1hZ2UoJm1fZGF0YSkpOwogfQpAQCAtMTExLDE0ICsxMTEsMTQgQEAg
dm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqLAogdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wICwgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUpCiB7Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1h
Z2UoKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGRlZXBDb3B5KCk7CiAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKIHZvaWQgSW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JT
cGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQogewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdl
KCk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBkZWVwQ29weSgpOwogICAgIGltYWdl
Q29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJ
KHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
SW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIAotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0CitQ
YXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6ZGVlcENvcHkoKSBjb25zdAogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIDA7CkBAIC0xMDIsMTQgKzEwMiwxNCBAQCB2b2lk
IEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCosCiB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKQogewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7
CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBkZWVwQ29weSgpOwogICAgIGNvbnRleHQt
PmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCkKIHsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOwor
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gZGVlcENvcHkoKTsKICAgICBpbWFnZUNvcHkt
PmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
dHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5j
cHAJKHJldmlzaW9uIDkxMjM1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcg
QEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmFwcGx5UmVzbwogICAgICAgICBpZiAo
IXRpbGVJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBSZWZQdHI8
SW1hZ2U+IGNvcGllZEltYWdlID0gdGlsZUltYWdlLT5jb3B5SW1hZ2UoKTsKKyAgICAgICAgUmVm
UHRyPEltYWdlPiBjb3BpZWRJbWFnZSA9IHRpbGVJbWFnZS0+ZGVlcENvcHkoKTsKICAgICAgICAg
aWYgKCFjb3BpZWRJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTIzNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3OCw3ICsxNzgsNyBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVs
ZW1lCiAgICAgICAgIFNWR0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVm
ZmVyKG1fdGFyZ2V0SW1hZ2UuZ2V0KCksIHJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24p
OwogICAgIH0KIAotICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGUoZmlsdGVyLCBtX3RhcmdldElt
YWdlID8gbV90YXJnZXRJbWFnZS0+Y29weUltYWdlKCkgOiBtX2NhY2hlZEltYWdlLT5pbWFnZSgp
LCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOworICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGUoZmls
dGVyLCBtX3RhcmdldEltYWdlID8gbV90YXJnZXRJbWFnZS0+ZGVlcENvcHkoKSA6IG1fY2FjaGVk
SW1hZ2UtPmltYWdlKCksIHByZXNlcnZlQXNwZWN0UmF0aW8oKSk7CiB9CiAKIHZvaWQgU1ZHRkVJ
bWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJM
PiYgdXJscykgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAkocmV2aXNpb24gOTEyMzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNyArMjI3LDcgQEAgTmF0aXZlSW1hZ2VQ
dHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQwogICAgICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFp
bGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZHJh
dyhidWZmZXItPmNvbnRleHQoKSwgcmVjdCgpLCByZWN0KCksIENvbG9yU3BhY2VEZXZpY2VSR0Is
IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwotICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBidWZmZXItPmNv
cHlJbWFnZSgpOworICAgICAgICBtX2ZyYW1lQ2FjaGUgPSBidWZmZXItPmRlZXBDb3B5KCk7CiAg
ICAgfQogICAgIHJldHVybiBtX2ZyYW1lQ2FjaGUtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101641</attachid>
            <date>2011-07-21 13:34:58 -0700</date>
            <delta_ts>2011-07-21 13:37:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64535-20110721133457.patch</filename>
            <type>text/plain</type>
            <size>35879</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkxNDc4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDctMjEgIE1hdHRoZXcg
RGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgZmFzdCBwYXRoIGZv
ciBJbWFnZUJ1ZmZlcjo6ZHJhdywgVGFrZSAyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQ1MzUKKworICAgICAgICBSZXZpZXdlZCBieSBub2JvZGF5
IHlldC4uLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBwYXRjaCBkb2Vzbid0IGNoYW5n
ZSBiZWhhdmlvcjsgY3VycmVudCB0ZXN0cyBhcmUgc3VmZmljaWVudC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSk6IE1vdmVkIHRoZSBtYWluIG1ldGhvZCB2ZXJzaW9u
IG5leHQgdG8gd3JhcHBlciB2ZXJzaW9ucy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmg6CisgICAgICAgIDEpIEFkZGVkIEJhY2tpbmdTdG9yZUNvcHkgZW51bSBm
b3IgY2hvb3NpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIG9yIG5vdCBpbiBjb3B5SW1hZ2UoKS4K
KyAgICAgICAgMikgQWRkZWQgY29weU5hdGl2ZUltYWdlKCkgYmVoaW5kIFVTRShDRykgLSBzYW1l
IGFzIGNvcHlJbWFnZSgpIGJ1dCBnaXZlcyBOYXRpdmVJbWFnZVB0ci4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDogQWRkZWQgbmV3IG1ldGhvZHMgZGVz
Y3JpYmVkIGFib3ZlLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0Lmg6IEFkZGluZyBkcmF3TmF0aXZlSW1hZ2UoKSBmb3IgZmFzdCBkcmF3IHBhdGguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UpOiBBZGRlZC4gRHJh
d3MgYSBuYXRpdmVJbWFnZVB0ciBpbnRvIGNvbnRleHQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZS5oOiBBZGRlZCBpbWFnZVdpdGhDb2xvclNwYWNlIGJlaGluZCBDRyBwbGF0
Zm9ybSBpZmRlZgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOiBSZWZhY3RvcmVkIG91dCBhY3R1
YWwgaW1hZ2UgZHJhd2luZyBjb2RlIGludG8gR3JhcGhpY3NDb250ZXh0LAorICAgICAgICBzbyB0
aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IG1vcmUgdGhhbiBqdXN0IEJpdG1hcEltYWdlIHdpdGhvdXQg
aGF2aW5nIHRvIGNvcHkgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjppbWFnZVdpdGhD
b2xvclNwYWNlKTogTWFkZSBpbnRvIGFuIEltYWdlIGNsYXNzIGZ1bmN0aW9uLgorCisgICAgICAg
IFVwZGF0ZWQgY29weUltYWdlKCkgdG8gZm9yIEJhY2tpbmdTdG9yZUNvcHk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4
L0ltYWdlQnVmZmVyV3guY3BwCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5DRS5jcHAKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCisg
ICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAorICAgICAgICAqIGh0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
LmNwcAorCiAyMDExLTA3LTIxICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4K
IAogICAgICAgICBOb3QgcmV2aWV3ZWQ6IG9uZSBsaW5lciB0eXBvIGZpeCBpbiBJbnNwZWN0b3Iu
anNvbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiA5MTQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6bWFrZVByZXNlbnRhdGlvbgogewogICAgIGlmICghbV9wcmVzZW50ZWRJbWFnZSkgewog
ICAgICAgICAvLyBUaGUgYnVmZmVyIGNvbnRhaW5zIHRoZSBsYXN0IHByZXNlbnRlZCBkYXRhLCBz
byBzYXZlIGEgY29weSBvZiBpdC4KLSAgICAgICAgbV9wcmVzZW50ZWRJbWFnZSA9IGJ1ZmZlcigp
LT5jb3B5SW1hZ2UoKTsKKyAgICAgICAgbV9wcmVzZW50ZWRJbWFnZSA9IGJ1ZmZlcigpLT5jb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgfQogfQogCkBAIC00NzIsNyArNDcyLDcgQEAg
SW1hZ2UqIEhUTUxDYW52YXNFbGVtZW50Ojpjb3BpZWRJbWFnZSgpIAogICAgIGlmICghbV9jb3Bp
ZWRJbWFnZSAmJiBidWZmZXIoKSkgewogICAgICAgICBpZiAobV9jb250ZXh0KQogICAgICAgICAg
ICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwotICAgICAgICBt
X2NvcGllZEltYWdlID0gYnVmZmVyKCktPmNvcHlJbWFnZSgpOworICAgICAgICBtX2NvcGllZElt
YWdlID0gYnVmZmVyKCktPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICAgICB9CiAgICAg
cmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDkx
NDc4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxNCw3ICszMjE0LDcgQEAgUGFzc1JlZlB0cjxJbWFn
ZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OgogICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8g
YSBHUFUtR1BVIHRleHR1cmUgY29weSBpbnN0ZWFkIG9mIENQVSByZWFkYmFjay4KICAgICB2aWRl
by0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsK
LSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2Uo
Q29weUJhY2tpbmdTdG9yZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDkxNDc4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUxLDI2ICszNTEsNiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCgp
CiAgICAgcmV0dXJuIG1fc3RhdGUucGFpbnRpbmdEaXNhYmxlZDsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBJbnRQb2ludCYgcCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgZHJh
d0ltYWdlKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIHAsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwg
b3ApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEludFJlY3QmIHIsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKLXsKLSAgICBkcmF3SW1hZ2UoaW1h
Z2UsIHN0eWxlQ29sb3JTcGFjZSwgciwgSW50UmVjdCgwLCAwLCAtMSwgLTEpLCBvcCwgdXNlTG93
UXVhbGl0eVNjYWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFn
ZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRQb2ludCYgZGVz
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAg
ZHJhd0ltYWdlKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIEludFJlY3QoZGVzdCwgc3JjUmVjdC5z
aXplKCkpLCBzcmNSZWN0LCBvcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1h
Z2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UmVj
dCYgZGVzdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJv
b2wgdXNlTG93UXVhbGl0eVNjYWxlKQotewotICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xv
clNwYWNlLCBGbG9hdFJlY3QoZGVzdCksIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUp
OwotfQotCiAjaWYgIU9TKFdJTkNFKSB8fCAoUExBVEZPUk0oUVQpICYmICFIQVZFKFFSQVdGT05U
KSkKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250JiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KQogewpAQCAtNDMzLDYgKzQxMywyNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0hpZ2hs
aWdodEZvclRlCiAgICAgZmlsbFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHBv
aW50LCBoLCBmcm9tLCB0byksIGJhY2tncm91bmRDb2xvciwgY29sb3JTcGFjZSk7CiB9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50UG9pbnQmIHAsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQor
eworICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBwLCBJbnRSZWN0KDAsIDAs
IC0xLCAtMSksIG9wKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFn
ZSogaW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBJbnRSZWN0JiByLCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCit7CisgICAgZHJh
d0ltYWdlKGltYWdlLCBzdHlsZUNvbG9yU3BhY2UsIHIsIEludFJlY3QoMCwgMCwgLTEsIC0xKSwg
b3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
SW1hZ2UoSW1hZ2UqIGltYWdlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgSW50
UG9pbnQmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
KQoreworICAgIGRyYXdJbWFnZShpbWFnZSwgc3R5bGVDb2xvclNwYWNlLCBJbnRSZWN0KGRlc3Qs
IHNyY1JlY3Quc2l6ZSgpKSwgc3JjUmVjdCwgb3ApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlKEltYWdlKiBpbWFnZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNv
bnN0IEludFJlY3QmIGRlc3QsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJh
dG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK3sKKyAgICBkcmF3SW1hZ2UoaW1hZ2Us
IHN0eWxlQ29sb3JTcGFjZSwgRmxvYXRSZWN0KGRlc3QpLCBzcmNSZWN0LCBvcCwgdXNlTG93UXVh
bGl0eVNjYWxlKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSog
aW1hZ2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dR
dWFsaXR5U2NhbGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAkocmV2aXNpb24gOTE0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjY1LDYgKzI2NSw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CiAg
ICAgICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogICAgICAgICAKKyAgICAgICAgdm9p
ZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2VQdHIsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNp
emUsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRl
U291cmNlT3Zlcik7CisKICAgICAgICAgLy8gQWxsb3cgZm9udCBzbW9vdGhpbmcgKExDRCBhbnRp
YWxpYXNpbmcpLiBOb3QgcGFydCBvZiB0aGUgZ3JhcGhpY3Mgc3RhdGUuCiAgICAgICAgIHZvaWQg
c2V0QWxsb3dzRm9udFNtb290aGluZyhib29sKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgJKHJldmlzaW9uIDkxNDc4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTQx
LDYgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Q0dJbWFnZVJl
ZigpIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIENHSW1hZ2VSZWYgZ2V0Rmlyc3RDR0ltYWdl
UmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBSZXRh
aW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFycmF5KCkgeyByZXR1cm4gMDsgfQorICAgIHN0
YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVm
IG9yaWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4p
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgJKHJldmlzaW9uIDkxNDc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBVbmFjY2VsZXJhdGVkLAogICAgICAgICBBY2NlbGVyYXRlZAog
ICAgIH07CisgICAgCisgICAgZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAgICAgICAgQ29weUJh
Y2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRo
ZSBjb3B5LgorICAgICAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdz
IG1heSBhZmZlY3QgdGhlIGNvcHkuCisgICAgfTsKIAogICAgIGNsYXNzIEltYWdlQnVmZmVyIHsK
ICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKQEAgLTgzLDcgKzg4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdDsKIAogICAgICAgICBib29sIGlzQWNj
ZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVSZW5kZXJpbmc7IH0KLSAgICAg
ICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdlKCkgY29uc3Q7IC8vIFJldHVybiBhIG5ldyBp
bWFnZSB0aGF0IGlzIGEgY29weSBvZiB0aGUgYnVmZmVyLgorICAgICAgICBQYXNzUmVmUHRyPElt
YWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5UHJlZmVyZW5jZSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0OwogCiAgICAgICAgIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBnZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgICAgICBQYXNzUmVm
UHRyPEJ5dGVBcnJheT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CkBAIC0xMDMsMTQgKzEwOCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYK
IAogICAgIHByaXZhdGU6CisjaWYgVVNFKENHKQorICAgICAgICBOYXRpdmVJbWFnZVB0ciBjb3B5
TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5UHJlZmVyZW5jZSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0OworI2VuZGlmCisKICAgICAgICAgdm9pZCBjbGlwKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogCi0gICAgICAgIC8vIFRoZSBkcmF3IG1ldGhv
ZCBkcmF3cyB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB3aXRob3V0IGNvcHlpbmcgaXQuCi0g
ICAgICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQqLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFs
aXR5U2NhbGUgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCk7Ci0gICAgICAgIAorICAgICAgICB2b2lkIGRyYXco
R3JhcGhpY3NDb250ZXh0KiwgQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIENvbXBv
c2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VMb3dRdWFsaXR5U2Nh
bGUgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JT
cGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpOworCiAg
ICAgICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CiAKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm8uY3BwCShyZXZpc2lvbiA5MTQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw4ICs4
Niw5IEBAIEdyYXBoaWNzQ29udGV4dCogSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSAKICAgICByZXR1
cm4gbV9jb250ZXh0LmdldCgpOwogfQogCi1QYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6
Y29weUltYWdlKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5UHJlZmVyZW5jZSkgY29uc3QKIHsKKyAgICBBU1NFUlQo
Y29weVByZWZlcmVuY2UgPT0gQ29weUJhY2tpbmdTdG9yZSk7CiAgICAgLy8gQml0bWFwSW1hZ2Ug
d2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgogICAgIHJl
dHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZShtX2RhdGEubV9z
dXJmYWNlKS5sZWFrUmVmKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24g
OTE0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw2ICsxNTIsNzkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZp
Y2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlUHRyIGltYWdlUHRyLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCit7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKGltYWdlUHRyKTsK
KworICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKTsK
KyAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAgYm9vbCBzaG91bGRVc2VTdWJpbWFnZSA9IGZh
bHNlOworCisgICAgLy8gSWYgdGhlIHNvdXJjZSByZWN0IGlzIGEgc3VicG9ydGlvbiBvZiB0aGUg
aW1hZ2UsIHRoZW4gd2UgY29tcHV0ZSBhbiBpbmZsYXRlZCBkZXN0aW5hdGlvbiByZWN0IHRoYXQg
d2lsbCBob2xkIHRoZSBlbnRpcmUgaW1hZ2UKKyAgICAvLyBhbmQgdGhlbiBzZXQgYSBjbGlwIHRv
IHRoZSBwb3J0aW9uIHRoYXQgd2Ugd2FudCB0byBkaXNwbGF5LgorICAgIEZsb2F0UmVjdCBhZGp1
c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisKKyAgICBpZiAoc3JjUmVjdC5zaXplKCkgIT0gaW1h
Z2VTaXplKSB7CisgICAgICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1
YWxpdHkgPSBDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0KTsKKyAgICAg
ICAgLy8gV2hlbiB0aGUgaW1hZ2UgaXMgc2NhbGVkIHVzaW5nIGhpZ2gtcXVhbGl0eSBpbnRlcnBv
bGF0aW9uLCB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkgQ0dJbWFnZQorICAgICAgICAvLyBjb250YWlu
aW5nIG9ubHkgdGhlIHBvcnRpb24gd2Ugd2FudCB0byBkaXNwbGF5LiBXZSBuZWVkIHRvIGRvIHRo
aXMgYmVjYXVzZSBoaWdoLXF1YWxpdHkKKyAgICAgICAgLy8gaW50ZXJwb2xhdGlvbiBzbW9vdGhl
cyBzaGFycCBlZGdlcywgY2F1c2luZyBwaXhlbHMgZnJvbSBvdXRzaWRlIHRoZSBzb3VyY2UgcmVj
dCB0byBibGVlZAorICAgICAgICAvLyBpbnRvIHRoZSBkZXN0aW5hdGlvbiByZWN0LiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzYxMTI5MDk+LgorICAgICAgICBzaG91bGRVc2VTdWJpbWFnZSA9IChpbnRl
cnBvbGF0aW9uUXVhbGl0eSAhPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZSkgJiYgKHNyY1JlY3Quc2l6
ZSgpICE9IGRlc3RSZWN0LnNpemUoKSB8fCAhZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRp
b25PckZsaXBwZWQoKSk7CisgICAgICAgIGZsb2F0IHhTY2FsZSA9IHNyY1JlY3Qud2lkdGgoKSAv
IGRlc3RSZWN0LndpZHRoKCk7CisgICAgICAgIGZsb2F0IHlTY2FsZSA9IHNyY1JlY3QuaGVpZ2h0
KCkgLyBkZXN0UmVjdC5oZWlnaHQoKTsKKyAgICAgICAgaWYgKHNob3VsZFVzZVN1YmltYWdlKSB7
CisgICAgICAgICAgICBGbG9hdFJlY3Qgc3ViaW1hZ2VSZWN0ID0gc3JjUmVjdDsKKyAgICAgICAg
ICAgIGZsb2F0IGxlZnRQYWRkaW5nID0gc3JjUmVjdC54KCkgLSBmbG9vcmYoc3JjUmVjdC54KCkp
OworICAgICAgICAgICAgZmxvYXQgdG9wUGFkZGluZyA9IHNyY1JlY3QueSgpIC0gZmxvb3JmKHNy
Y1JlY3QueSgpKTsKKworICAgICAgICAgICAgc3ViaW1hZ2VSZWN0Lm1vdmUoLWxlZnRQYWRkaW5n
LCAtdG9wUGFkZGluZyk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0Lm1vdmUoLWxlZnRQ
YWRkaW5nIC8geFNjYWxlLCAtdG9wUGFkZGluZyAvIHlTY2FsZSk7CisKKyAgICAgICAgICAgIHN1
YmltYWdlUmVjdC5zZXRXaWR0aChjZWlsZihzdWJpbWFnZVJlY3Qud2lkdGgoKSArIGxlZnRQYWRk
aW5nKSk7CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFdpZHRoKHN1YmltYWdlUmVj
dC53aWR0aCgpIC8geFNjYWxlKTsKKworICAgICAgICAgICAgc3ViaW1hZ2VSZWN0LnNldEhlaWdo
dChjZWlsZihzdWJpbWFnZVJlY3QuaGVpZ2h0KCkgKyB0b3BQYWRkaW5nKSk7CisgICAgICAgICAg
ICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChzdWJpbWFnZVJlY3QuaGVpZ2h0KCkgLyB5U2Nh
bGUpOworCisgICAgICAgICAgICBpbWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJ
blJlY3QoaW1hZ2UuZ2V0KCksIHN1YmltYWdlUmVjdCkpOworICAgICAgICAgICAgaWYgKGN1cnJI
ZWlnaHQgPCBzcmNSZWN0Lm1heFkoKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChDR0ltYWdl
R2V0SGVpZ2h0KGltYWdlLmdldCgpKSA9PSBjdXJySGVpZ2h0IC0gQ0dSZWN0SW50ZWdyYWwoc3Jj
UmVjdCkub3JpZ2luLnkpOworICAgICAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVp
Z2h0KENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpIC8geVNjYWxlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9j
YXRpb24oRmxvYXRQb2ludChkZXN0UmVjdC54KCkgLSBzcmNSZWN0LngoKSAvIHhTY2FsZSwgZGVz
dFJlY3QueSgpIC0gc3JjUmVjdC55KCkgLyB5U2NhbGUpKTsKKyAgICAgICAgICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0U2l6ZShGbG9hdFNpemUoaW1hZ2VTaXplLndpZHRoKCkgLyB4U2NhbGUsIGlt
YWdlU2l6ZS5oZWlnaHQoKSAvIHlTY2FsZSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFk
ZXN0UmVjdC5jb250YWlucyhhZGp1c3RlZERlc3RSZWN0KSkKKyAgICAgICAgICAgIENHQ29udGV4
dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJlY3QpOworICAgIH0KKworICAgIC8vIElmIHRoZSBp
bWFnZSBpcyBvbmx5IHBhcnRpYWxseSBsb2FkZWQsIHRoZW4gc2hyaW5rIHRoZSBkZXN0aW5hdGlv
biByZWN0IHRoYXQgd2UncmUgZHJhd2luZyBpbnRvIGFjY29yZGluZ2x5LgorICAgIGlmICghc2hv
dWxkVXNlU3ViaW1hZ2UgJiYgY3VyckhlaWdodCA8IGltYWdlU2l6ZS5oZWlnaHQoKSkKKyAgICAg
ICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQoYWRqdXN0ZWREZXN0UmVjdC5oZWlnaHQoKSAq
IGN1cnJIZWlnaHQgLyBpbWFnZVNpemUuaGVpZ2h0KCkpOworCisgICAgc2V0UGxhdGZvcm1Db21w
b3NpdGVPcGVyYXRpb24ob3ApOworCisgICAgLy8gRmxpcCB0aGUgY29vcmRzLgorICAgIENHQ29u
dGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICBhZGp1c3RlZERlc3RSZWN0LnNldFko
LWFkanVzdGVkRGVzdFJlY3QubWF4WSgpKTsKKyAgICAKKyAgICAvLyBBZGp1c3QgdGhlIGNvbG9y
IHNwYWNlLgorICAgIGltYWdlID0gSW1hZ2U6OmltYWdlV2l0aENvbG9yU3BhY2UoaW1hZ2UuZ2V0
KCksIHN0eWxlQ29sb3JTcGFjZSk7CisKKyAgICAvLyBEcmF3IHRoZSBpbWFnZS4KKyAgICBDR0Nv
bnRleHREcmF3SW1hZ2UoY29udGV4dCwgYWRqdXN0ZWREZXN0UmVjdCwgaW1hZ2UuZ2V0KCkpOwor
CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKK30KKwogLy8gRHJhd3MgYSBm
aWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHJl
dmlzaW9uIDkxNDc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRl
IDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogI2luY2x1
ZGUgPG1hdGguaD4KIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pCkBA
IC0xNzcsNzIgKzE3OCw3NCBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdlQnVmZmVyOjpjb250ZXh0
KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZT4g
SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0CitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weVByZWZlcmVuY2UpIGNvbnN0CiB7
Ci0gICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gQ0dJbWFnZSBv
biBkZXN0cnVjdGlvbgotICAgIENHSW1hZ2VSZWYgY3R4SW1hZ2UgPSAwOwotICAgIGlmICghbV9h
Y2NlbGVyYXRlUmVuZGVyaW5nKQotICAgICAgICBjdHhJbWFnZSA9IENHQml0bWFwQ29udGV4dENy
ZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBjdHhJbWFnZSA9IHdr
SU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkp
OwotI2VuZGlmCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY3R4SW1hZ2UpOwotfQor
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5UHJl
ZmVyZW5jZSk7CiAKLXN0YXRpYyBDR0ltYWdlUmVmIGNnSW1hZ2UoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhKQotewotICAgIHJldHVybiBDR0ltYWdlQ3Jl
YXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGRhdGEubV9ieXRlc1BlclJv
dywKLSAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1fY29sb3JTcGFjZSwgZGF0YS5tX2Jp
dG1hcEluZm8sIGRhdGEubV9kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmlu
Z0ludGVudERlZmF1bHQpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoaW1hZ2UuZ2V0KCkpOwogfQogCi12b2lkIElt
YWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5UHJlZmVyZW5jZSkgY29uc3QKIHsK
KyAgICBDR0ltYWdlUmVmIGltYWdlID0gMDsKICAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmlu
ZykgewotICAgICAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7Ci0gICAgICAgICAg
ICAvLyBXZSdyZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBvcmRlciBmb3IgdGhp
cyB0byB3b3JrLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIgZmlyc3QuCi0gICAg
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKLSAgICAgICAgICAgIGRl
c3RDb250ZXh0LT5kcmF3SW1hZ2UoY29weS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IEJpdG1hcElt
YWdlOjpjcmVhdGUoY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOwotICAgICAgICAgICAgZGVzdENv
bnRleHQtPmRyYXdJbWFnZShpbWFnZUZvclJlbmRlcmluZy5nZXQoKSwgc3R5bGVDb2xvclNwYWNl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CisgICAgICAgIHN3
aXRjaCAoY29weVByZWZlcmVuY2UpIHsKKyAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9y
ZToKKyAgICAgICAgICAgIGltYWdlID0gQ0dJbWFnZUNyZWF0ZShtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLm1fYnl0ZXNQZXJSb3csIG1fZGF0YS5tX2NvbG9y
U3BhY2UsIG1fZGF0YS5tX2JpdG1hcEluZm8sIG1fZGF0YS5tX2RhdGFQcm92aWRlci5nZXQoKSwg
MCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICAgICAgaW1hZ2UgPSBDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZSgpOwotICAgICAgICBDb2xv
clNwYWNlIGNvbG9yU3BhY2UgPSAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSA/IENvbG9yU3Bh
Y2VEZXZpY2VSR0IgOiBzdHlsZUNvbG9yU3BhY2U7Ci0gICAgICAgIGRlc3RDb250ZXh0LT5kcmF3
SW1hZ2UoY29weS5nZXQoKSwgY29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VM
b3dRdWFsaXR5U2NhbGUpOwogICAgIH0KKyNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQorICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSB3a0lPU3VyZmFjZUNvbnRleHRDcmVh
dGVJbWFnZShjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKKyNlbmRpZgorCisgICAgcmV0
dXJuIGltYWdlOwogfQogCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3Igb3AsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIElt
YWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIENvbG9yU3BhY2Ug
c3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSkKK3sKKyAgICBVTlVTRURfUEFSQU0odXNlTG93UXVhbGl0eVNjYWxlKTsKKyAgICBDb2xvclNw
YWNlIGNvbG9yU3BhY2UgPSAoZGVzdENvbnRleHQgPT0gbV9jb250ZXh0KSA/IENvbG9yU3BhY2VE
ZXZpY2VSR0IgOiBzdHlsZUNvbG9yU3BhY2U7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2U7CisgICAgaWYgKGRlc3RDb250ZXh0ID09IG1fY29udGV4dCkKKyAgICAgICAgaW1hZ2Uu
YWRvcHRDRihjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpOyAvLyBEcmF3aW5nIGlu
dG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgorICAgIGVsc2UKKyAgICAgICAg
aW1hZ2UuYWRvcHRDRihjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKTsKKwor
ICAgIGRlc3RDb250ZXh0LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgY29s
b3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVy
YXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBpZiAoIW1fYWNjZWxl
cmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7
Ci0gICAgICAgICAgICAvLyBXZSdyZSBkcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIuICBJbiBv
cmRlciBmb3IgdGhpcyB0byB3b3JrLCB3ZSBuZWVkIHRvIGNvcHkgdGhlIHNvdXJjZSBidWZmZXIg
Zmlyc3QuCi0gICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoKTsKLSAg
ICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOworICAgICAg
ICBpZiAoY29udGV4dCA9PSBtX2NvbnRleHQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbWFnZT4g
Y29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJhd2luZyBpbnRvIG91ciBv
d24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KKyAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0
ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9y
U3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShjZ0ltYWdl
KG1fc2l6ZSwgbV9kYXRhKSk7Ci0gICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1Bh
dHRlcm4oZGVzdENvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHls
ZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CisgICAgICAgICAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAg
ICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29w
eUltYWdlKCk7Ci0gICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBzcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3Qp
OworICAgICAgICBSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7CisgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGNvbnRleHQsIHNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBkZXN0UmVjdCk7CiAgICAgfQog
fQogCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dFRvQ2xp
cCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIENHQ29udGV4dFJlZiBwbGF0
Zm9ybUNvbnRleHRUb0NsaXAgPSBjb250ZXh0VG9DbGlwLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFtX2FjY2VsZXJhdGVSZW5k
ZXJpbmcpCi0gICAgICAgIGltYWdlLmFkb3B0Q0YoY2dJbWFnZShtX3NpemUsIG1fZGF0YSkpOwot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAg
ICBpbWFnZS5hZG9wdENGKHdrSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCkpKTsKLSNlbmRpZgorICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZShBZG9wdENGLCBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKTsKICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0VG9DbGlwLCByZWN0LngoKSwg
cmVjdC55KCkgKyByZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9y
bUNvbnRleHRUb0NsaXAsIDEsIC0xKTsKICAgICBDR0NvbnRleHRDbGlwVG9NYXNrKHBsYXRmb3Jt
Q29udGV4dFRvQ2xpcCwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBpbWFn
ZS5nZXQoKSk7CkBAIC0zNDYsMTMgKzM0OSw3IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRh
VVJMKGNvbnN0IFN0cmkKIHsKICAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKIAotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIW1fYWNjZWxlcmF0ZVJlbmRlcmluZykKLSAgICAg
ICAgaW1hZ2UuYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCktPnBs
YXRmb3JtQ29udGV4dCgpKSk7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlLmFkb3B0Q0Yod2tJT1N1cmZhY2VDb250ZXh0Q3Jl
YXRlSW1hZ2UoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSkpOwotI2VuZGlmCisgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlKEFkb3B0Q0YsIGNvcHlOYXRpdmVJbWFnZShDb3B5QmFj
a2luZ1N0b3JlKSk7CiAKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNH
LmNwcAkocmV2aXNpb24gOTE0NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCiAgICAgfQogfQogCi1zdGF0aWMgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlV2l0aENvbG9yU3BhY2UoQ0dJbWFnZVJlZiBvcmlnaW5h
bEltYWdlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1h
Z2U6OmltYWdlV2l0aENvbG9yU3BhY2UoQ0dJbWFnZVJlZiBvcmlnaW5hbEltYWdlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgQ0dDb2xvclNwYWNlUmVmIG9yaWdpbmFsQ29sb3JTcGFj
ZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNlKG9yaWdpbmFsSW1hZ2UpOwogCkBAIC0xOTUsNzMgKzE5
NSw5IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGZsb2F0IGN1cnJIZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0
KGltYWdlLmdldCgpKTsKLSAgICBpZiAoY3VyckhlaWdodCA8PSBzcmNSZWN0LnkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdHh0LT5wbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmN0eHQp
OwotCi0gICAgYm9vbCBzaG91bGRVc2VTdWJpbWFnZSA9IGZhbHNlOwotCi0gICAgLy8gSWYgdGhl
IHNvdXJjZSByZWN0IGlzIGEgc3VicG9ydGlvbiBvZiB0aGUgaW1hZ2UsIHRoZW4gd2UgY29tcHV0
ZSBhbiBpbmZsYXRlZCBkZXN0aW5hdGlvbiByZWN0IHRoYXQgd2lsbCBob2xkIHRoZSBlbnRpcmUg
aW1hZ2UKLSAgICAvLyBhbmQgdGhlbiBzZXQgYSBjbGlwIHRvIHRoZSBwb3J0aW9uIHRoYXQgd2Ug
d2FudCB0byBkaXNwbGF5LgotICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJl
Y3Q7CiAgICAgRmxvYXRTaXplIHNlbGZTaXplID0gY3VycmVudEZyYW1lU2l6ZSgpOwotICAgIGlm
IChzcmNSZWN0LnNpemUoKSAhPSBzZWxmU2l6ZSkgewotICAgICAgICBDR0ludGVycG9sYXRpb25R
dWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5ID0gQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1
YWxpdHkoY29udGV4dCk7Ci0gICAgICAgIC8vIFdoZW4gdGhlIGltYWdlIGlzIHNjYWxlZCB1c2lu
ZyBoaWdoLXF1YWxpdHkgaW50ZXJwb2xhdGlvbiwgd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IENHSW1h
Z2UKLSAgICAgICAgLy8gY29udGFpbmluZyBvbmx5IHRoZSBwb3J0aW9uIHdlIHdhbnQgdG8gZGlz
cGxheS4gV2UgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2UgaGlnaC1xdWFsaXR5Ci0gICAgICAgIC8v
IGludGVycG9sYXRpb24gc21vb3RoZXMgc2hhcnAgZWRnZXMsIGNhdXNpbmcgcGl4ZWxzIGZyb20g
b3V0c2lkZSB0aGUgc291cmNlIHJlY3QgdG8gYmxlZWQKLSAgICAgICAgLy8gaW50byB0aGUgZGVz
dGluYXRpb24gcmVjdC4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MTEyOTA5Pi4KLSAgICAgICAgc2hv
dWxkVXNlU3ViaW1hZ2UgPSAoaW50ZXJwb2xhdGlvblF1YWxpdHkgIT0ga0NHSW50ZXJwb2xhdGlv
bk5vbmUpICYmIChzcmNSZWN0LnNpemUoKSAhPSBkZXN0UmVjdC5zaXplKCkgfHwgIWN0eHQtPmdl
dENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCkpOwotICAgICAgICBmbG9h
dCB4U2NhbGUgPSBzcmNSZWN0LndpZHRoKCkgLyBkZXN0UmVjdC53aWR0aCgpOwotICAgICAgICBm
bG9hdCB5U2NhbGUgPSBzcmNSZWN0LmhlaWdodCgpIC8gZGVzdFJlY3QuaGVpZ2h0KCk7Ci0gICAg
ICAgIGlmIChzaG91bGRVc2VTdWJpbWFnZSkgewotICAgICAgICAgICAgRmxvYXRSZWN0IHN1Ymlt
YWdlUmVjdCA9IHNyY1JlY3Q7Ci0gICAgICAgICAgICBmbG9hdCBsZWZ0UGFkZGluZyA9IHNyY1Jl
Y3QueCgpIC0gZmxvb3JmKHNyY1JlY3QueCgpKTsKLSAgICAgICAgICAgIGZsb2F0IHRvcFBhZGRp
bmcgPSBzcmNSZWN0LnkoKSAtIGZsb29yZihzcmNSZWN0LnkoKSk7Ci0KLSAgICAgICAgICAgIHN1
YmltYWdlUmVjdC5tb3ZlKC1sZWZ0UGFkZGluZywgLXRvcFBhZGRpbmcpOwotICAgICAgICAgICAg
YWRqdXN0ZWREZXN0UmVjdC5tb3ZlKC1sZWZ0UGFkZGluZyAvIHhTY2FsZSwgLXRvcFBhZGRpbmcg
LyB5U2NhbGUpOwotCi0gICAgICAgICAgICBzdWJpbWFnZVJlY3Quc2V0V2lkdGgoY2VpbGYoc3Vi
aW1hZ2VSZWN0LndpZHRoKCkgKyBsZWZ0UGFkZGluZykpOwotICAgICAgICAgICAgYWRqdXN0ZWRE
ZXN0UmVjdC5zZXRXaWR0aChzdWJpbWFnZVJlY3Qud2lkdGgoKSAvIHhTY2FsZSk7Ci0KLSAgICAg
ICAgICAgIHN1YmltYWdlUmVjdC5zZXRIZWlnaHQoY2VpbGYoc3ViaW1hZ2VSZWN0LmhlaWdodCgp
ICsgdG9wUGFkZGluZykpOwotICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRIZWlnaHQo
c3ViaW1hZ2VSZWN0LmhlaWdodCgpIC8geVNjYWxlKTsKLQotICAgICAgICAgICAgaW1hZ2UuYWRv
cHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLmdldCgpLCBzdWJpbWFnZVJl
Y3QpKTsKLSAgICAgICAgICAgIGlmIChjdXJySGVpZ2h0IDwgc3JjUmVjdC5tYXhZKCkpIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkgPT0gY3Vy
ckhlaWdodCAtIENHUmVjdEludGVncmFsKHNyY1JlY3QpLm9yaWdpbi55KTsKLSAgICAgICAgICAg
ICAgICBhZGp1c3RlZERlc3RSZWN0LnNldEhlaWdodChDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdl
dCgpKSAvIHlTY2FsZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBhZGp1c3RlZERlc3RSZWN0LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoZGVzdFJlY3QueCgp
IC0gc3JjUmVjdC54KCkgLyB4U2NhbGUsIGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpIC8geVNj
YWxlKSk7Ci0gICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoRmxvYXRTaXplKHNl
bGZTaXplLndpZHRoKCkgLyB4U2NhbGUsIHNlbGZTaXplLmhlaWdodCgpIC8geVNjYWxlKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIWRlc3RSZWN0LmNvbnRhaW5zKGFkanVzdGVkRGVzdFJl
Y3QpKQotICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7
Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIGltYWdlIGlzIG9ubHkgcGFydGlhbGx5IGxvYWRlZCwg
dGhlbiBzaHJpbmsgdGhlIGRlc3RpbmF0aW9uIHJlY3QgdGhhdCB3ZSdyZSBkcmF3aW5nIGludG8g
YWNjb3JkaW5nbHkuCi0gICAgaWYgKCFzaG91bGRVc2VTdWJpbWFnZSAmJiBjdXJySGVpZ2h0IDwg
c2VsZlNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0SGVpZ2h0KGFk
anVzdGVkRGVzdFJlY3QuaGVpZ2h0KCkgKiBjdXJySGVpZ2h0IC8gc2VsZlNpemUuaGVpZ2h0KCkp
OwotCi0gICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wKTsKIAotICAg
IC8vIEZsaXAgdGhlIGNvb3Jkcy4KLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAt
MSk7Ci0gICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRZKC1hZGp1c3RlZERlc3RSZWN0Lm1heFkoKSk7
Ci0KLSAgICAvLyBBZGp1c3QgdGhlIGNvbG9yIHNwYWNlLgotICAgIGltYWdlID0gaW1hZ2VXaXRo
Q29sb3JTcGFjZShpbWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlKTsKLQotICAgIC8vIERyYXcg
dGhlIGltYWdlLgotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBhZGp1c3RlZERlc3RS
ZWN0LCBpbWFnZS5nZXQoKSk7Ci0KLSAgICBzdGF0ZVNhdmVyLnJlc3RvcmUoKTsKKyAgICBjdHh0
LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIHNlbGZTaXplLCBzdHlsZUNvbG9yU3BhY2Us
IGRlc3RSZWN0LCBzcmNSZWN0LCBjb21wb3NpdGVPcCk7CiAKICAgICBpZiAoaW1hZ2VPYnNlcnZl
cigpKQogICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7CkBAIC0zMTMsNyAr
MjQ5LDcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KgogICAgIH0K
IAogICAgIC8vIEFkanVzdCB0aGUgY29sb3Igc3BhY2UuCi0gICAgc3ViSW1hZ2UgPSBpbWFnZVdp
dGhDb2xvclNwYWNlKHN1YkltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UpOworICAgIHN1Yklt
YWdlID0gSW1hZ2U6OmltYWdlV2l0aENvbG9yU3BhY2Uoc3ViSW1hZ2UuZ2V0KCksIHN0eWxlQ29s
b3JTcGFjZSk7CiAgICAgCiAgICAgLy8gTGVvcGFyZCBoYXMgYW4gb3B0aW1pemVkIGNhbGwgZm9y
IHRoZSB0aWxpbmcgb2YgaW1hZ2UgcGF0dGVybnMsIGJ1dCB3ZSBjYW4gb25seSB1c2UgaXQgaWYg
dGhlIGltYWdlIGhhcyBiZWVuIGRlY29kZWQgZW5vdWdoIHRoYXQKICAgICAvLyBpdHMgYnVmZmVy
IGlzIHRoZSBzYW1lIHNpemUgYXMgdGhlIG92ZXJhbGwgaW1hZ2UuICBCZWNhdXNlIGEgcGFydGlh
bGx5IGRlY29kZWQgQ0dJbWFnZVJlZiB3aXRoIGEgc21hbGxlciB3aWR0aCBvciBoZWlnaHQgdGhh
biB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
aWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVGlsZS5jcHAJKHJldmlzaW9uIDkxNDc4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3
ICs3OSw3IEBAIHZvaWQgRkVUaWxlOjphcHBseSgpCiAgICAgdGlsZUltYWdlQ29udGV4dC0+dHJh
bnNsYXRlKC1pbk1heEVmZmVjdExvY2F0aW9uLngoKSwgLWluTWF4RWZmZWN0TG9jYXRpb24ueSgp
KTsKICAgICB0aWxlSW1hZ2VDb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIoaW4tPmFzSW1hZ2VCdWZm
ZXIoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgaW4tPmFic29sdXRlUGFpbnRSZWN0KCkubG9jYXRp
b24oKSk7CiAKLSAgICBSZWZQdHI8UGF0dGVybj4gcGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0
aWxlSW1hZ2UtPmNvcHlJbWFnZSgpLCB0cnVlLCB0cnVlKTsKKyAgICBSZWZQdHI8UGF0dGVybj4g
cGF0dGVybiA9IFBhdHRlcm46OmNyZWF0ZSh0aWxlSW1hZ2UtPmNvcHlJbWFnZShDb3B5QmFja2lu
Z1N0b3JlKSwgdHJ1ZSwgdHJ1ZSk7CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gcGF0dGVyblRyYW5z
Zm9ybTsKICAgICBwYXR0ZXJuVHJhbnNmb3JtLnRyYW5zbGF0ZShpbk1heEVmZmVjdExvY2F0aW9u
LngoKSAtIG1heEVmZmVjdExvY2F0aW9uLngoKSwgaW5NYXhFZmZlY3RMb2NhdGlvbi55KCkgLSBt
YXhFZmZlY3RMb2NhdGlvbi55KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDkxNDc4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMSw4ICsxMjEsOSBAQCBHcmFwaGljc0NvbnRleHQqIEltYWdl
QnVmZmVyOjpjb250ZXh0KCkgCiAgICAgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsKIH0KIAotUGFz
c1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0CitQYXNzUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weVByZWZl
cmVuY2UpIGNvbnN0CiB7CisgICAgQVNTRVJUKGNvcHlQcmVmZXJlbmNlID09IENvcHlCYWNraW5n
U3RvcmUpOwogICAgIHJldHVybiBTdGlsbEltYWdlOjpjcmVhdGUobV9kYXRhLm1fcGl4bWFwKTsK
IH0KIApAQCAtMTMxLDcgKzEzMiw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiAKIHsKICAgICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CiAgICAgICAg
IC8vIFdlJ3JlIGRyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlz
IHRvIHdvcmssIHdlIG5lZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KLSAgICAg
ICAgUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIFJlZlB0cjxJbWFn
ZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgZGVzdENvbnRl
eHQtPmRyYXdJbWFnZShjb3B5LmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGRl
c3RDb250ZXh0LT5kcmF3SW1hZ2UobV9kYXRhLm1faW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFj
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwpAQCAtMTQyLDcg
KzE0Myw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ28KIHsKICAg
ICBpZiAoZGVzdENvbnRleHQgPT0gY29udGV4dCgpKSB7CiAgICAgICAgIC8vIFdlJ3JlIGRyYXdp
bmcgaW50byBvdXIgb3duIGJ1ZmZlci4gIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHdlIG5l
ZWQgdG8gY29weSB0aGUgc291cmNlIGJ1ZmZlciBmaXJzdC4KLSAgICAgICAgUmVmUHRyPEltYWdl
PiBjb3B5ID0gY29weUltYWdlKCk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJ
bWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENv
bnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2Us
IG9wLCBkZXN0UmVjdCk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fZGF0YS5tX2ltYWdlLT5kcmF3
UGF0dGVybihkZXN0Q29udGV4dCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0
eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJl
dmlzaW9uIDkxNDc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9J
bWFnZUJ1ZmZlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw4ICs5Nyw5IEBAIHNpemVf
dCBJbWFnZUJ1ZmZlcjo6ZGF0YVNpemUoKSBjb25zdAogICAgIHJldHVybiBtX3NpemUud2lkdGgo
KSAqIG1fc2l6ZS5oZWlnaHQoKSAqIDQ7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAorUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlQcmVmZXJlbmNlKSBjb25zdAogeworICAgIEFT
U0VSVChjb3B5UHJlZmVyZW5jZSA9PSBDb3B5QmFja2luZ1N0b3JlKTsKICAgICBtX2NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBC
aXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNvbnRl
eHQuYml0bWFwKCksIHRydWUpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAJKHJldmlz
aW9uIDkxNDc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDggKzk4LDkgQEAgR3JhcGhp
Y3NDb250ZXh0KiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIAogICAgIHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7CiB9CiAKLVBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBj
b25zdAorUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlQcmVmZXJlbmNlKSBjb25zdAogeworICAgIEFTU0VSVChjb3B5UHJlZmVyZW5j
ZSA9PSBDb3B5QmFja2luZ1N0b3JlKTsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVk
SW1hZ2UoJm1fZGF0YSkpOwogfQogCkBAIC0xMTEsMTQgKzExMiwxNCBAQCB2b2lkIEltYWdlQnVm
ZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCosCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AgLCBib29sIHVzZUxvd1F1YWxpdHlTY2Fs
ZSkKIHsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJbWFnZSgpOworICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwogICAg
IGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZUNvcHkuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUpOwogfQogCiB2b2lkIEltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlQ29weSA9IGNvcHlJ
bWFnZSgpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKENvcHlCYWNr
aW5nU3RvcmUpOwogICAgIGltYWdlQ29weS0+ZHJhd1BhdHRlcm4oY29udGV4dCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHN0eWxlQ29sb3JTcGFjZSwgb3AsIGRlc3RSZWN0KTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZm
ZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHJldmlzaW9uIDkxNDc4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDggKzg4LDkgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaQog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6
OmNvcHlJbWFnZSgpIGNvbnN0CitQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weVByZWZlcmVuY2UpIGNvbnN0CiB7CisgICAgQVNTRVJU
KGNvcHlQcmVmZXJlbmNlID09IENvcHlCYWNraW5nU3RvcmUpOwogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xMDIsMTQgKzEwMywxNCBAQCB2b2lkIEltYWdlQnVm
ZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCosCiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxl
KQogewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUltYWdlKCk7CisgICAgUmVm
UHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CiAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKGltYWdlQ29weS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxpdHlTY2FsZSk7CiB9CiAKIHZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0KQogewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VDb3B5ID0gY29weUlt
YWdlKCk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7CiAgICAgaW1hZ2VDb3B5LT5kcmF3UGF0dGVybihjb250ZXh0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3R5bGVDb2xvclNwYWNlLCBvcCwgZGVzdFJlY3QpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
UGF0dGVybi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCShyZXZpc2lvbiA5MTQ3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJu
OjphcHBseVJlc28KICAgICAgICAgaWYgKCF0aWxlSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBjb3BpZWRJbWFnZSA9IHRpbGVJbWFnZS0+
Y29weUltYWdlKCk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gY29waWVkSW1hZ2UgPSB0aWxlSW1h
Z2UtPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKCFjb3BpZWRJbWFn
ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MTQ3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgs
NyBAQCBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVJbWFnZUVsZW1lCiAgICAgICAgIFNW
R0ltYWdlQnVmZmVyVG9vbHM6OnJlbmRlclN1YnRyZWVUb0ltYWdlQnVmZmVyKG1fdGFyZ2V0SW1h
Z2UuZ2V0KCksIHJlbmRlcmVyLCBjb250ZW50VHJhbnNmb3JtYXRpb24pOwogICAgIH0KIAotICAg
IHJldHVybiBGRUltYWdlOjpjcmVhdGUoZmlsdGVyLCBtX3RhcmdldEltYWdlID8gbV90YXJnZXRJ
bWFnZS0+Y29weUltYWdlKCkgOiBtX2NhY2hlZEltYWdlLT5pbWFnZSgpLCBwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkpOworICAgIHJldHVybiBGRUltYWdlOjpjcmVhdGUoZmlsdGVyLCBtX3RhcmdldElt
YWdlID8gbV90YXJnZXRJbWFnZS0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpIDogbV9jYWNo
ZWRJbWFnZS0+aW1hZ2UoKSwgcHJlc2VydmVBc3BlY3RSYXRpbygpKTsKIH0KIAogdm9pZCBTVkdG
RUltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JiB1cmxzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCShyZXZpc2lvbiA5MTQ3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw3ICsyMjcsNyBAQCBOYXRpdmVJbWFn
ZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDCiAgICAgICAgIGlmICghYnVmZmVyKSAvLyBm
YWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBk
cmF3KGJ1ZmZlci0+Y29udGV4dCgpLCByZWN0KCksIHJlY3QoKSwgQ29sb3JTcGFjZURldmljZVJH
QiwgQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgICAgIG1fZnJhbWVDYWNoZSA9IGJ1ZmZlci0+
Y29weUltYWdlKCk7CisgICAgICAgIG1fZnJhbWVDYWNoZSA9IGJ1ZmZlci0+Y29weUltYWdlKENv
cHlCYWNraW5nU3RvcmUpOwogICAgIH0KICAgICByZXR1cm4gbV9mcmFtZUNhY2hlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogfQo=
</data>
<flag name="review"
          id="96626"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>