<?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>102161</bug_id>
          
          <creation_ts>2012-11-13 18:00:53 -0800</creation_ts>
          <short_desc>WebGL: Avoid unnecessary memory copy or conversion in texImage2D and texSubImage2D for HTMLVideoElement</short_desc>
          <delta_ts>2012-12-11 17:36:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jun Jiang">jun.a.jiang</reporter>
          <assigned_to name="Jun Jiang">jun.a.jiang</assigned_to>
          <cc>bsalomon</cc>
    
    <cc>dino</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>joone</cc>
    
    <cc>junov</cc>
    
    <cc>kbr</cc>
    
    <cc>noam</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>ojan</cc>
    
    <cc>philn</cc>
    
    <cc>reed</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>766258</commentid>
    <comment_count>0</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-13 18:00:53 -0800</bug_when>
    <thetext>In texImage2D(..., HTMLVideoElement*, ...) and texSubImage2D(...,HTMLVideoElement*, ...), there are several memory copy or conversion involved. The data path involves following transforms:
1. Paint Video data(YUV format) to ImageBuffer(RGBA or BGRA format) in m_videoCache.
2. Copy Image from ImageBuffer in m_videoCache with BackingStore copied.
3. extract the data from Image returned by 2) to a vector. There are two steps involved:
   3.1. unpack the data from Image to an intermediate format.
   3.2  pack the data in intermediate format to the destination format according to the format and alphaOp.
4. pass the extracted data to GL through gltexImage2D(...) or gltexSubImage2D(...).

There are several cases in steps 2-4 that we can avoid memory copy or conversions by taking account of alpha value of Video and GL extension.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766598</commentid>
    <comment_count>1</comment_count>
      <attachid>174103</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-14 01:12:27 -0800</bug_when>
    <thetext>Created attachment 174103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766600</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-14 01:16:40 -0800</bug_when>
    <thetext>Attachment 174103 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/GraphicsContext3D.cpp:177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.cpp:178:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:51:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:97:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:98:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:99:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3630:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3868:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.h:577:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.h:578:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.h:902:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.h:903:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.h:904:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.h:905:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.h:906:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/GraphicsContext3D.h:907:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 18 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766621</commentid>
    <comment_count>3</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-14 01:37:23 -0800</bug_when>
    <thetext>Changing the code as the script(check-webkit-style) suggested would be greatly inconsistent with the original coding style in the changed files. If it is a must, I will change the code accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767528</commentid>
    <comment_count>4</comment_count>
      <attachid>174103</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-11-14 17:52:17 -0800</bug_when>
    <thetext>Comment on attachment 174103
Patch

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

I&apos;m sorry, but I think that the approach in this patch is flawed. I think you should add a new inner class GraphicsContext3D::ImageLocker, implemented per platform. An instance of that object could be allocated on the stack at the call site and a method call against it could replace the call to getImageData. For the Skia platform its constructor could allocate an SkAutoLockPixels and its destructor delete it. CC&apos;ing a few other people who know Skia&apos;s internals better than I do in case they want to veto my assertion about the access to the pixel data outside the scope of SkAutoLockPixels, but regardless this patch should be restructured to not add Skia-specific #ifdefs.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3738
&gt; +PassRefPtr&lt;Image&gt; WebGLRenderingContext::videoFrameToImage(HTMLVideoElement* video, bool backingStoreCopy, ExceptionCode&amp; ec)

It&apos;s strongly discouraged to add bool arguments because it makes the call sites difficult to read. Just pass the BackingStoreCopy enum.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3758
&gt; +    return buf-&gt;copyImage(copyBackingStore);

Is it legal for all ports to use DontCopyBackingStore here?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:375
&gt; +    PassRefPtr&lt;Image&gt; videoFrameToImage(HTMLVideoElement*, bool backingStoreCopy, ExceptionCode&amp;);

Same comment as in the .cpp file about passing the BackingStoreCopy enum directly.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:900
&gt; +#if USE(SKIA)

Please don&apos;t add an #ifdef here. API changes made here should be done for all ports.

&gt;&gt; Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:99
&gt;&gt; +           return true;
&gt; 
&gt; Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]

It is a really bad idea to assume that you can access the pixels outside the scope of the SkAutoLockPixels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768019</commentid>
    <comment_count>5</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-15 06:44:11 -0800</bug_when>
    <thetext>Kenneth,your comments and concern are quite reasonable. It is error prone to access the pixels outside the scope of the SkAutoLockPixels. And there is another way to solve this issue besides adding a new class GraphicsContext3D::ImageLocker as you had suggested. 
We can add a new function to ImageBuffer class. In this function, for skia port, SkAutoLockPixels would be called and would call through to glTexImage2D if no conversion is needed. If conversion is needed, it will return false and follow the traditional path. It is much like what had been done to texImage2D in WebGL for HTMLCanvasElement by introducing ImageBuffer::copyToPlatformTexture().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>768565</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-11-15 15:25:32 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Kenneth,your comments and concern are quite reasonable. It is error prone to access the pixels outside the scope of the SkAutoLockPixels. And there is another way to solve this issue besides adding a new class GraphicsContext3D::ImageLocker as you had suggested. 
&gt; We can add a new function to ImageBuffer class. In this function, for skia port, SkAutoLockPixels would be called and would call through to glTexImage2D if no conversion is needed. If conversion is needed, it will return false and follow the traditional path. It is much like what had been done to texImage2D in WebGL for HTMLCanvasElement by introducing ImageBuffer::copyToPlatformTexture().

That&apos;s possible but I would prefer to introduce an ImageLocker class for two reasons. First, putting more GraphicsContext3D-related calls into the ImageBuffer implementation more tightly binds together conceptually unrelated areas of the code.

Second, and possibly more importantly, the pixel packing and unpacking code in GraphicsContext3D has been improved by Mozilla Corporation, and it&apos;s desired to merge back their changes. However, the code structure is different, and relies on being able to get a stable pointer to the source data. Having a port-independent ImageLocker class would enable this as well.

Overall, it would be a really nice contribution if you&apos;d restructure this patch to add and use an ImageLocker abstraction that worked for all ports (or do that in a separate bug and then build this one on it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769145</commentid>
    <comment_count>7</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-16 05:26:23 -0800</bug_when>
    <thetext>The related pack/unpacking code in Firefox did make much improvement. 
1. All the texImage2D(...) functions for ArrayBuffer, ImageData, Image, Canvas and Video are unified to use a single texImage2D_base() function which accepts a pointer to the source data as parameter.
2. For the conversion part, it introduces a WebGLImageConverter object to do the unpack,pack and flipY operations. The flipY operation is carried out in the pack operation instead of being done separately. 
I agree that WebKit may need to merge back some changes done in Firefox. As what item 1 did, introducing the ImageLocker class can help us to abstract all the texImage2D functions to a general texImage2D_base function to use the pointer to the source data as parameter. And then we can implement the texImage2D_base in a clean and clear way.
By checking the code of Graphics ports, it seems only Skia provides Lock/Unlock operation to the pixel data while other ports like cairo, cg and qt didn&apos;t provide that. I will work on the ImageLocker class first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>769578</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-11-16 12:34:21 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; The related pack/unpacking code in Firefox did make much improvement. 
&gt; 1. All the texImage2D(...) functions for ArrayBuffer, ImageData, Image, Canvas and Video are unified to use a single texImage2D_base() function which accepts a pointer to the source data as parameter.
&gt; 2. For the conversion part, it introduces a WebGLImageConverter object to do the unpack,pack and flipY operations. The flipY operation is carried out in the pack operation instead of being done separately. 
&gt; I agree that WebKit may need to merge back some changes done in Firefox. As what item 1 did, introducing the ImageLocker class can help us to abstract all the texImage2D functions to a general texImage2D_base function to use the pointer to the source data as parameter. And then we can implement the texImage2D_base in a clean and clear way.
&gt; By checking the code of Graphics ports, it seems only Skia provides Lock/Unlock operation to the pixel data while other ports like cairo, cg and qt didn&apos;t provide that. I will work on the ImageLocker class first.

Thank you in advance for doing this work. Please let me know if you need any help or encounter any problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770656</commentid>
    <comment_count>9</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2012-11-19 06:01:10 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 174103 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=174103&amp;action=review
&gt; 
&gt; I&apos;m sorry, but I think that the approach in this patch is flawed. I think you should add a new inner class GraphicsContext3D::ImageLocker, implemented per platform. An instance of that object could be allocated on the stack at the call site and a method call against it could replace the call to getImageData. For the Skia platform its constructor could allocate an SkAutoLockPixels and its destructor delete it. CC&apos;ing a few other people who know Skia&apos;s internals better than I do in case they want to veto my assertion about the access to the pixel data outside the scope of SkAutoLockPixels, but regardless this patch should be restructured to not add Skia-specific #ifdefs.

It&apos;s correct that getPixels() should be performed while the pixels are locked (during the lifetime of a SkAutoLockPixels object or between matched lockPixels()/unlockPixels() calls).

&gt; 1
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3738
&gt; &gt; +PassRefPtr&lt;Image&gt; WebGLRenderingContext::videoFrameToImage(HTMLVideoElement* video, bool backingStoreCopy, ExceptionCode&amp; ec)
&gt; 
&gt; It&apos;s strongly discouraged to add bool arguments because it makes the call sites difficult to read. Just pass the BackingStoreCopy enum.
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3758
&gt; &gt; +    return buf-&gt;copyImage(copyBackingStore);
&gt; 
&gt; Is it legal for all ports to use DontCopyBackingStore here?
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.h:375
&gt; &gt; +    PassRefPtr&lt;Image&gt; videoFrameToImage(HTMLVideoElement*, bool backingStoreCopy, ExceptionCode&amp;);
&gt; 
&gt; Same comment as in the .cpp file about passing the BackingStoreCopy enum directly.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:900
&gt; &gt; +#if USE(SKIA)
&gt; 
&gt; Please don&apos;t add an #ifdef here. API changes made here should be done for all ports.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:99
&gt; &gt;&gt; +           return true;
&gt; &gt; 
&gt; &gt; Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; 
&gt; It is a really bad idea to assume that you can access the pixels outside the scope of the SkAutoLockPixels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771807</commentid>
    <comment_count>10</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-20 06:26:57 -0800</bug_when>
    <thetext>Kenneth, I have finished the code for ImageLocker for all platform and get started to test it. Currently, I have tested Skia port via chromium and will test Cairo and Qt port under ubuntu. But it seems I would have some difficulty in testing Cg port. It is a little difficult to set up an environemnt for cg port. Can you give some suggestions on that? Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771881</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-11-20 08:13:19 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Kenneth, I have finished the code for ImageLocker for all platform and get started to test it. Currently, I have tested Skia port via chromium and will test Cairo and Qt port under ubuntu. But it seems I would have some difficulty in testing Cg port. It is a little difficult to set up an environemnt for cg port. Can you give some suggestions on that? Thanks.

Jian, that&apos;s great news. I can help you test the Cg port if you would like to upload an intermediate patch here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772900</commentid>
    <comment_count>12</comment_count>
      <attachid>175430</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-21 06:40:33 -0800</bug_when>
    <thetext>Created attachment 175430
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772909</commentid>
    <comment_count>13</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-21 06:46:13 -0800</bug_when>
    <thetext>Kenneth, the intermediate patch is attached. Any comments are welcome.
The idea here is to implement the ImageLocker class to hold all the states of the Image and therefore the address of the source can be used steadily during the lifetime of the object. Most of work is to change the procedure in GraphicsContext3D::getImageData() to the object-oriented ImageLocker class. The lifetime of the states were originally only in GraphicsContext3D::getImageData(), now it is determined by the lifetime of the object of ImageLocker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774219</commentid>
    <comment_count>14</comment_count>
      <attachid>175737</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-22 22:33:04 -0800</bug_when>
    <thetext>Created attachment 175737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774225</commentid>
    <comment_count>15</comment_count>
      <attachid>175737</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-22 22:42:13 -0800</bug_when>
    <thetext>Comment on attachment 175737
Patch

Attachment 175737 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14960591</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774226</commentid>
    <comment_count>16</comment_count>
      <attachid>175737</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-11-22 22:43:46 -0800</bug_when>
    <thetext>Comment on attachment 175737
Patch

Attachment 175737 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14937611</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774285</commentid>
    <comment_count>17</comment_count>
      <attachid>175737</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-23 00:57:20 -0800</bug_when>
    <thetext>Comment on attachment 175737
Patch

Attachment 175737 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14970360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774298</commentid>
    <comment_count>18</comment_count>
      <attachid>175751</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-23 01:22:06 -0800</bug_when>
    <thetext>Created attachment 175751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774412</commentid>
    <comment_count>19</comment_count>
      <attachid>175751</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-23 04:10:24 -0800</bug_when>
    <thetext>Comment on attachment 175751
Patch

Attachment 175751 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14970421

New failing tests:
fast/canvas/webgl/tex-image-and-sub-image-2d-with-image.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776378</commentid>
    <comment_count>20</comment_count>
      <attachid>176183</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-26 22:55:13 -0800</bug_when>
    <thetext>Created attachment 176183
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776659</commentid>
    <comment_count>21</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-11-27 05:33:33 -0800</bug_when>
    <thetext>fix the issue for Mac OS X.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780620</commentid>
    <comment_count>22</comment_count>
      <attachid>176183</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-11-30 19:47:30 -0800</bug_when>
    <thetext>Comment on attachment 176183
Patch

Per offline discussion, the ImageLocker changes have been split off into another bug. Marking this patch r-; expecting this to be rebased on top of the other work and for this patch to be significantly smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781428</commentid>
    <comment_count>23</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-03 07:25:39 -0800</bug_when>
    <thetext>As Kenneth had suggested, the patch was a little big. To be more focused, it was splited  into 3 bugs respectively, the first one is bug 103606, the second one is  bug 103885 and the third one is 102161. Specially, in bug 102161, it will deal with issues specific to HTMLVideoElement related only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782375</commentid>
    <comment_count>24</comment_count>
      <attachid>177448</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-04 01:40:14 -0800</bug_when>
    <thetext>Created attachment 177448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782388</commentid>
    <comment_count>25</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-04 01:56:53 -0800</bug_when>
    <thetext>regenerated the patch based on ImageExtractor and evaluated its performance gain under Linux and Windows in Chromium.  
In a simple test, decode a 720p ogv file, upload the video to a 3D sphere and the sphere requests animation repeatedly. In Linux (CPU: 3.4Ghz), the fps is both 60 FPS before and after the optimization but the cpu utilization for the renderer process is decreased from ~%97 to ~62% after applying the patch. For Win7(CPU: 2.6GHz), the FPS is increased from ~32FPS to ~54FPS after applying the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783244</commentid>
    <comment_count>26</comment_count>
      <attachid>177448</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-12-04 19:01:50 -0800</bug_when>
    <thetext>Comment on attachment 177448
Patch

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

Nice results but the code needs more work.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3634
&gt; +            || (alphaOp == GraphicsContext3D::AlphaDoPremultiply &amp;&amp; alphaValue == 0xFF))

It isn&apos;t legal to make this determination based on the alpha value of the upper-left pixel of the video. Please make the code correct in all cases.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3781
&gt; +    // if the graphics port provides support to the DontCopyBackingStore semantics. SKIA, CG, CAIRO and QT ports already support this DontCopyBackingStore behavior. 

Where is it specified that DontCopyBackingStore is supported by these ports?

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3782
&gt; +#if USE(SKIA) || USE(CG) || USE(CAIRO) || PLATFORM(QT)

How is this #if going to be kept up-to-date as more ports begin to support the optimization? An API which each port implements is needed rather than an #ifdef here.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:3894
&gt; +            alphaOp = GraphicsContext3D::AlphaDoNothing;

Same comments as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783541</commentid>
    <comment_count>27</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-05 01:58:15 -0800</bug_when>
    <thetext>Hi, Kenneth. Thanks for your comments. Following is some of my considerations: 
1). The AlphaOp optimizations for HTMLVideoElement.
In general, the Image is converted from YUV format to RGBA or BGRA format. During this conversion, the alpha value is always set to 0xFF and no PremultiplyAlpha operation is applied. 
However, in some ports, if the alpha value if not zero and no PremultiplyAlpha is required, AlphaOp will be set to UnmultiplyAlpha and a successive UnmultiplyAlpha operation would be carried out during unpack/pack. In fact, the UnmultiplyAlpha operation is not needed due to current implementation for YUV-&gt;BGRA conversion. Moreover, if in the future, an alpha value other than 0xFF is set during YUV-&gt;BGRA conversion, the alpha value is uniform for each pixel of the Image. If the top-left pixel has an alpha of 0xFF, all other will have an alpha of 0xFF too.
That is why the patch goes that way. I am still considering if a more suitable method can be found and applied.
2). Backing-storing copy.  
First, following is the commit that introduces the DontCopyBackingStore semantics.
SKIA:
 commit d469b6e559bb78260a40dd43ebdcb9b0a2de7ac5
 https://bugs.webkit.org/show_bug.cgi?id=73949
    * platform/graphics/skia/ImageBufferSkia.cpp:
    (WebCore::ImageBuffer::copyImage):
    Implement ImageBuffer::copyImage() with DontCopyBackingStore semantics.
QT:
 commit fa77d736d7c759241d445e2d24513dbb3749184d
 [Qt] Implement ImageBuffer::copyImage(ImageBuffer::DontCopyBackingStore)
 https://bugs.webkit.org/show_bug.cgi?id=77689
CAIRO:
 commit e82a551c1ad08c2eeeb7620b5fe55ea1ed1e167e
 [Cairo] Implement ImageBuffer::copyImage for BackingStoreCopy == DontCopyBackingStore
 https://bugs.webkit.org/show_bug.cgi?id=85728
CG:
    commit 0e72db9bf51becaf5b25944a9ca6d2314af884e7
    https://bugs.webkit.org/show_bug.cgi?id=64535
    * platform/graphics/ImageBuffer.h:
    1) Added BackingStoreCopy enum for choosing to copy backing store or not in copyImage().
Second, I agree with you that an API may be needed to reflect this status for each port without having to add USE(XX) in the #if statement when it was newly supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784050</commentid>
    <comment_count>28</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-12-05 13:18:32 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; Hi, Kenneth. Thanks for your comments. Following is some of my considerations: 
&gt; 1). The AlphaOp optimizations for HTMLVideoElement.
&gt; In general, the Image is converted from YUV format to RGBA or BGRA format. During this conversion, the alpha value is always set to 0xFF and no PremultiplyAlpha operation is applied. 
&gt; However, in some ports, if the alpha value if not zero and no PremultiplyAlpha is required, AlphaOp will be set to UnmultiplyAlpha and a successive UnmultiplyAlpha operation would be carried out during unpack/pack. In fact, the UnmultiplyAlpha operation is not needed due to current implementation for YUV-&gt;BGRA conversion. Moreover, if in the future, an alpha value other than 0xFF is set during YUV-&gt;BGRA conversion, the alpha value is uniform for each pixel of the Image. If the top-left pixel has an alpha of 0xFF, all other will have an alpha of 0xFF too.
&gt; That is why the patch goes that way. I am still considering if a more suitable method can be found and applied.

Please find another way to encapsulate this logic that is more maintainable -- perhaps closer to the implementation of the video elements. Or drop this part of the patch altogether. The current rules are incomprehensible and will be unmaintainable for anybody else looking at this code in the future -- myself included.

&gt; 2). Backing-storing copy.  
&gt; First, following is the commit that introduces the DontCopyBackingStore semantics.
&gt; SKIA:
&gt;  commit d469b6e559bb78260a40dd43ebdcb9b0a2de7ac5
&gt;  https://bugs.webkit.org/show_bug.cgi?id=73949
&gt;     * platform/graphics/skia/ImageBufferSkia.cpp:
&gt;     (WebCore::ImageBuffer::copyImage):
&gt;     Implement ImageBuffer::copyImage() with DontCopyBackingStore semantics.
&gt; QT:
&gt;  commit fa77d736d7c759241d445e2d24513dbb3749184d
&gt;  [Qt] Implement ImageBuffer::copyImage(ImageBuffer::DontCopyBackingStore)
&gt;  https://bugs.webkit.org/show_bug.cgi?id=77689
&gt; CAIRO:
&gt;  commit e82a551c1ad08c2eeeb7620b5fe55ea1ed1e167e
&gt;  [Cairo] Implement ImageBuffer::copyImage for BackingStoreCopy == DontCopyBackingStore
&gt;  https://bugs.webkit.org/show_bug.cgi?id=85728
&gt; CG:
&gt;     commit 0e72db9bf51becaf5b25944a9ca6d2314af884e7
&gt;     https://bugs.webkit.org/show_bug.cgi?id=64535
&gt;     * platform/graphics/ImageBuffer.h:
&gt;     1) Added BackingStoreCopy enum for choosing to copy backing store or not in copyImage().
&gt; Second, I agree with you that an API may be needed to reflect this status for each port without having to add USE(XX) in the #if statement when it was newly supported.

The current change to WebGLRenderingContext is unmaintainable so I&apos;m afraid you will need to find a better way to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785921</commentid>
    <comment_count>29</comment_count>
      <attachid>178225</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-07 09:20:41 -0800</bug_when>
    <thetext>Created attachment 178225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786257</commentid>
    <comment_count>30</comment_count>
      <attachid>178225</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-12-07 15:58:23 -0800</bug_when>
    <thetext>Comment on attachment 178225
Patch

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

Thanks for making these revisions. This looks almost perfect, but needs a couple more small changes to the logic. Along with that, please clean up a few comments.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:933
&gt; +        ImageHtmlDomSource m_imageHtmlDomSource;

This should be declared next to m_image to match the initialization order in the constructor.

&gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp:193
&gt; +        // which is true at present and may be changed in the future and needs adjustment accordingly

See comment below in the Skia port about complete sentences.

&gt; Source/WebCore/platform/graphics/cairo/GraphicsContext3DCairo.cpp:196
&gt; +        if (!premultiplyAlpha &amp;&amp; m_imageHtmlDomSource == HtmlDomCanvas)

See comment below in the Skia port about how to write this test.

&gt; Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:83
&gt; +        // which is true at present and may be changed in the future and needs adjustment accordingly

Please add &quot;.&quot; at the end of comments to make them complete sentences.

&gt; Source/WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp:86
&gt; +        if (m_imageHtmlDomSource == HtmlDomCanvas)

This isn&apos;t the minimal change to the logic. Please write this instead as &quot;if (m_imageHtmlDomSource != HtmlDomVideo)&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786772</commentid>
    <comment_count>31</comment_count>
      <attachid>178413</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-09 05:40:27 -0800</bug_when>
    <thetext>Created attachment 178413
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787915</commentid>
    <comment_count>32</comment_count>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-10 18:05:30 -0800</bug_when>
    <thetext>Met &quot;HTTP Error 500: Internal Server Error&quot; in try-bot for win. Will upload the patch again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787922</commentid>
    <comment_count>33</comment_count>
      <attachid>178680</attachid>
    <who name="Jun Jiang">jun.a.jiang</who>
    <bug_when>2012-12-10 18:19:15 -0800</bug_when>
    <thetext>Created attachment 178680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789010</commentid>
    <comment_count>34</comment_count>
      <attachid>178680</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-12-11 17:09:53 -0800</bug_when>
    <thetext>Comment on attachment 178680
Patch

Looks good. Thanks for persisting with this patch. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789043</commentid>
    <comment_count>35</comment_count>
      <attachid>178680</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 17:36:43 -0800</bug_when>
    <thetext>Comment on attachment 178680
Patch

Clearing flags on attachment: 178680

Committed r137397: &lt;http://trac.webkit.org/changeset/137397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789044</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 17:36:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174103</attachid>
            <date>2012-11-14 01:12:27 -0800</date>
            <delta_ts>2012-11-21 06:40:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121114170736.patch</filename>
            <type>text/plain</type>
            <size>14066</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmRmYTZkMWVjNGY1MTA4
NGU4N2VmYjAwMGU0NzFiYTI1NTgxMjc3ZC4uNmViOTc5MTM5ZmRiZTdiNWI2YmZlMGVmMjkwYmZk
ZGE0MWY2MzUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEyLTExLTE0ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IHRoZXJlIGFyZSBzZXZlcmFsIG1lbW9y
eSBjb3B5IG9yIGNvbnZlcnNpb24gZm9yIHRleEltYWdlMkQoKSB3aXRoIEhUTUxWaWRlb0VsZW1l
bnQgaW52b2x2ZWQuIFNvbWUgb2YgdGhlbSBjYW4gYmUgYXZvaWQsIHN1Y2ggYXM6IAorICAgICAg
ICAxKS4gaW5zdGVhZCBvZiBjb3B5aW5nIEJhY2tpbmdTdG9yZSBvZiBJbWFnZUJ1ZmZlciwgdGhl
IEltYWdlQnVmZmVyIGNhbiBiZSBjb3VudC1yZWZlZC4gCisgICAgICAgIDIpLiBGb3IgSFRNTFZp
ZGVvRWxlbWVudCwgdGhlIGRhdGEgaXMgY29udmVydGVkIGZyb20gWVVWIHRvIFJHQkEgb3IgQkdS
QSBpbiBOYXRpdmVJbWFnZSBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIHRoZSBzYW1lIGZvciB0aGUg
d2hvbGUgSW1hZ2UuIFRoZSBhbHBoYU9wIGNhbiBiZSBhZGp1c3RlZCBzbyBhcyB0byBhdm9pZCB1
bm5lY2Vzc2FyeSBjb252ZXJzaW9uLiAKKyAgICAgICAgMykuIFRoZXJlIGlzIGEgbWFuZGF0b3J5
IG1lbW9yeSBjb3B5IGJldHdlZW4gTmF0aXZlSW1hZ2VCdWZmZXIgYW5kIHRoZSBkZXN0aW5hdGlv
biB2ZWN0b3IgaWYgbm8gY29udmVyc2lvbiBpcyBuZWVkZWQuIFRoZSBtZW1vcnkgY29weSBjYW4g
YmUgYXZvaWRlZCBpZiBhbiBhZGRpdGlvbmFsIHBvaW50ZXIgaXMgYWRkZWQgdG8gaG9sZCB0aGUg
YWRkcmVzcyBwb2ludGluZyB0byB0aGUgZGVzaXJlZCBkYXRhLiAgICAKKworICAgICAgICBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIHRlc3RzIHVuZGVyIGZhc3QvY2FudmFzL3dlYmdsLgorCisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJh
bWVUb0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1
YkltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0Lmg6CisgICAgICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAg
IChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHQzRFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisKIDIwMTItMTEtMTMgIEV1Z2VuZSBLbHl1Y2huaWtvdiAg
PGV1c3Rhcy5idWdAZ21haWwuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEpzRG9jLWFu
bm90YXRlIEtleWJvYXJkU2hvcnRjdXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA3MGNiODUzYzM3OWZmMDY1Yjk4
N2Q5ZGVlMTA0MzU3ZDI4MWJkYjgxLi5mNzMzMjliOGRlNDkzN2UyNDQ4YjAyZTFlZWE3OTA4MTZl
NGY1OTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2MTksMTQgKzM2MTksMTUgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGUKICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQi
LCBpbnRlcm5hbGZvcm1hdCkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4g
ZGF0YTsKLSAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZm9ybWF0
LCB0eXBlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVy
c2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwgZGF0YSkpIHsKKyAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhUG9pbnRlciA9IDA7CisgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURh
dGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIGRhdGEsICZk
YXRhUG9pbnRlcikpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAg
ICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQsIDEpOwogICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLAotICAgICAgICAgICAgICAg
ICAgIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCksIGVjKTsKKyAgICAgICAgICAgICAgICAgICBm
b3JtYXQsIHR5cGUsIGRhdGFQb2ludGVyID8gZGF0YVBvaW50ZXI6IGRhdGEuZGF0YSgpLCBlYyk7
CiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKIH0KQEAgLTM3MzQsNyArMzczNSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0K
IH0KIAogI2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgYm9vbCBiYWNraW5nU3Rv
cmVDb3B5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+
dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewogICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQi
LCAibm8gdmlkZW8iKTsKQEAgLTM3NTMsNyArMzc1NCw4IEBAIFBhc3NSZWZQdHI8SW1hZ2U+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCog
dmlkCiAgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwogICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4dHVyZSBjb3B5
IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgogICAgIHZpZGVvLT5wYWludEN1cnJlbnRGcmFtZUlu
Q29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOwotICAgIHJldHVybiBidWYtPmNvcHlJ
bWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCYWNraW5n
U3RvcmUgPSBiYWNraW5nU3RvcmVDb3B5ID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFj
a2luZ1N0b3JlOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShjb3B5QmFja2luZ1N0b3JlKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKQEAgLTM3NjIsNyAr
Mzc2NCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICBlYyA9IDA7CiAgICAgaWYgKGlz
Q29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgZWMpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgZmFsc2UsIGVjKTsKICAgICBpZiAoIWltYWdlKQog
ICAgICAgICByZXR1cm47CiAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwpAQCAtMzg1NSwxNCArMzg1NywxNSBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFj
dEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwg
ZGF0YSkpIHsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhUG9pbnRlciA9IDA7CisgICAgaWYgKCFt
X2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFksIHBy
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3ND
b250ZXh0M0Q6Ok5PTkUsIGRhdGEsICZkYXRhUG9pbnRlcikpIHsKICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJE
IiwgImJhZCBpbWFnZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtX3VucGFj
a0FsaWdubWVudCAhPSAxKQogICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKICAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhl
aWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCks
IGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGFQb2ludGVyID8g
ZGF0YVBvaW50ZXI6IGRhdGEuZGF0YSgpLCBlYyk7CiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0KQEAgLTM5NTcsNyArMzk2
MCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgZWMgPSAwOwogICAgIGlmIChpc0Nv
bnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
dmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIGVjKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
dmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIGZhbHNlLCBlYyk7CiAgICAgaWYgKCFpbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA4NmViODI5ZjIyNzBjYTJiYWQw
OWZmNDgzODliYWJhNGI4ZDY4MDA5Li4zNTg2NDFjZjcwNmJjOGU3MDY4YTZmZWQ3YTI2MzExMGRl
MWRhOGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaApAQCAtMzcyLDcgKzM3Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENv
bXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAg
ICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdl
KEhUTUxWaWRlb0VsZW1lbnQqLCBib29sIGJhY2tpbmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUm
KTsKICNlbmRpZgogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQzRC5jcHAKaW5kZXggYTk4YjU0NmJhZjdlODEzYjkyODk4MmE3ZGM3MjkzNzVjNTNjNDg0Zi4u
OTJlN2YwYTQ1NTQ4MTI4NzZhYjg1ZGY1OGEyNjYxYTQ1MmE0NWU0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcApA
QCAtMTc0LDEyICsxNzQsMTggQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdl
RGF0YShJbWFnZSogaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZmxpcFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
KiBmYXN0UG9pbnRlcikKIHsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CisjaWYgVVNFKFNLSUEpCisgICAgaWYgKCFnZXRJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlw
ZSwgcHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGRhdGEsIGZh
c3RQb2ludGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKICAgICBpZiAoIWdldElt
YWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBwcmVtdWx0aXBseUFscGhhLCBpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSwgZGF0YSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgog
ICAgIGlmIChmbGlwWSkgewogICAgICAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVs
LCBieXRlc1BlckNvbXBvbmVudDsKICAgICAgICAgaWYgKCFjb21wdXRlRm9ybWF0QW5kVHlwZVBh
cmFtZXRlcnMoZm9ybWF0LCB0eXBlLApAQCAtMTg4LDcgKzE5NCw4IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAvLyBUaGUgaW1hZ2UgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCwg
YW5kIHdlIHVwbG9hZCBpdCBhcyBzdWNoLgogICAgICAgICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxp
Z25tZW50ID0gMTsKLSAgICAgICAgZmxpcFZlcnRpY2FsbHkoZGF0YS5kYXRhKCksIGltYWdlLT53
aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHBkYXRhID0g
KGZhc3RQb2ludGVyICYmICpmYXN0UG9pbnRlcik/ICgqZmFzdFBvaW50ZXIpIDogZGF0YS5kYXRh
KCk7CisgICAgICAgIGZsaXBWZXJ0aWNhbGx5KHBkYXRhLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2Ut
PmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzUGVyUGl4ZWwgKiBi
eXRlc1BlckNvbXBvbmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5wYWNrQWxpZ25tZW50
KTsKICAgICB9CkBAIC05NjMsNyArOTcwLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdC
QThQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmEKIHZv
aWQgcGFja09uZVJvd09mUkdCQThUb1JHQkE4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAg
ICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAv
IDI1NS4wZiA6IDEuMGYpOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/
IDI1NS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CiAgICAgICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVG
YWN0b3IpOwogICAgICAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihz
dGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKICAgICAgICAgdWlu
dDhfdCBzb3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNv
dXJjZVsyXSkgKiBzY2FsZUZhY3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA0ZWRlMGY4MTdmNmMwYzMwYjdh
M2U1NTI4OTZkZTA2ZDQ3M2IyOTAwLi45ZjU4MDAyMzkwNGQ2MjAyZjc5OTY3NmM3MzViMzU0NzEy
ODVmMjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgKQEAgLTU3NCw3ICs1NzQsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiBkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4
X3Q+JiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiogZmFz
dFBvaW50ZXIgPSAwKTsKIAogICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2
ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCiAgICAgLy8gcGFja2luZyB0aGUg
cGl4ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKQEAgLTg5
NiwxMiArODk3LDIyIEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIE5vIHZlcnRpY2FsIGZsaXAg
b2YgdGhlIGltYWdlIGRhdGEgaXMgcGVyZm9ybWVkIGJ5IHRoaXMKICAgICAvLyBtZXRob2QuCisj
aWYgVVNFKFNLSUEpCisgICAgc3RhdGljIGJvb2wgZ2V0SW1hZ2VEYXRhKEltYWdlKiwKKyAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxw
aGEsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSwKKyAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvciwK
KyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiogZmFzdFBvaW50ZXIgPSAwKTsK
KyNlbHNlCiAgICAgc3RhdGljIGJvb2wgZ2V0SW1hZ2VEYXRhKEltYWdlKiwKICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCiAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3Rvcik7CisjZW5k
aWYKIAogICAgIC8vIFBvc3NpYmxlIGFscGhhIG9wZXJhdGlvbnMgdGhhdCBtYXkgbmVlZCB0byBv
Y2N1ciBkdXJpbmcKICAgICAvLyBwaXhlbCBwYWNraW5nLiBGSVhNRToga0FscGhhRG9Vbm11bHRp
cGx5IGlzIGxvc3N5IGFuZCBtdXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKaW5kZXgg
MTdhZDgzZDhmODM3NWZlMGM5MzE1OGM2NDViMGY1MjBlMTUxNzJlOC4uNWU0ZWQyZTdhNWExNmQ0
NWJjNzVlNjU3MmVmNTkwZjg4Zjc1YzgyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNw
cApAQCAtNDcsNyArNDcsOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEo
SW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVt
dWx0aXBseUFscGhhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcioqIGZhc3RQb2lu
dGVyKQogewogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTgzLDkg
Kzg0LDI1IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1h
Z2UsCiAgICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAx
KS4KICAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCBza2lhSW1h
Z2VSZWYud2lkdGgoKSwgc2tpYUltYWdlUmVmLmhlaWdodCgpLCAxLCAmcGFja2VkU2l6ZSwgMCkg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQogICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBTS19CMzJfU0hJRlQgPyBT
b3VyY2VGb3JtYXRSR0JBOCA6IFNvdXJjZUZvcm1hdEJHUkE4OworICAgIHVuc2lnbmVkIGNoYXIq
IHNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihza2lhSW1hZ2VS
ZWYuZ2V0UGl4ZWxzKCkpOworICAgIGlmIChzb3VyY2VEYXRhICYmIHR5cGUgPT0gVU5TSUdORURf
QllURSAmJiAoc291cmNlRGF0YUZvcm1hdCA9PSBTb3VyY2VGb3JtYXRSR0JBOCB8fCBzb3VyY2VE
YXRhRm9ybWF0ID09IFNvdXJjZUZvcm1hdEJHUkE4KSAmJiBmb3JtYXQgPT0gUkdCQSkgeworICAg
ICAgICB1bnNpZ25lZCBjaGFyIGFscGhhQnl0ZSA9IHNvdXJjZURhdGFbM107CisgICAgICAgIGlm
IChuZWVkZWRBbHBoYU9wID09IEFscGhhRG9Vbm11bHRpcGx5ICYmIChhbHBoYUJ5dGUgPT0gMHhG
RiB8fCBhbHBoYUJ5dGUgPT0gMHgwKSkKKyAgICAgICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBo
YURvTm90aGluZzsKKyAgICAgICAgaWYgKG5lZWRlZEFscGhhT3AgPT0gQWxwaGFEb1ByZW11bHRp
cGx5ICYmIGFscGhhQnl0ZSA9PSAweEZGKQorICAgICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFs
cGhhRG9Ob3RoaW5nOworICAgICAgICBpZiAobmVlZGVkQWxwaGFPcCA9PSBBbHBoYURvTm90aGlu
ZyAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IFNvdXJjZUZvcm1hdFJHQkE4KSB7CisgICAgICAgICAg
IC8vIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5LgorICAgICAgICAgICAqZmFzdFBvaW50ZXIgPSBz
b3VyY2VEYXRhOworICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIG91dHB1dFZlY3Rvci5yZXNpemUocGFja2VkU2l6ZSk7CiAgICAgcmV0dXJuIHBhY2tQaXhl
bHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2tpYUltYWdlUmVmLmdldFBpeGVs
cygpKSwKLSAgICAgICAgICAgICAgICAgICAgICBTS19CMzJfU0hJRlQgPyBTb3VyY2VGb3JtYXRS
R0JBOCA6IFNvdXJjZUZvcm1hdEJHUkE4LAorICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZURh
dGFGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgc2tpYUltYWdlUmVmLndpZHRoKCksIHNr
aWFJbWFnZVJlZi5oZWlnaHQoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5
cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175430</attachid>
            <date>2012-11-21 06:40:33 -0800</date>
            <delta_ts>2012-11-22 22:32:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121121223537.patch</filename>
            <type>text/plain</type>
            <size>44432</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmRmYTZkMWVjNGY1MTA4
NGU4N2VmYjAwMGU0NzFiYTI1NTgxMjc3ZC4uNTg2MTZjYWJmZDhjNTg0NTgzZGQ3MTFhMTNlMDJi
MjVhOTg4Y2JjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEyLTExLTIxICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgaXMgYW4gaW50ZXJtZWRpYXRlIHBhdGNoLiBUaGUg
aWRlYSBoZXJlIGlzIHRvIGltcGxlbWVudCBhIEltYWdlTG9ja2VyIGNsYXNzIHRvIGhvbGQgYWxs
IHRoZSBzdGF0ZXMgb2YgdGhlIEltYWdlIGFuZCB0aGVyZWZvcmUgdGhlIGFkZHJlc3Mgb2YgdGhl
IHNvdXJjZSBjYW4KKyAgICAgICAgYmUgdXNlZCBzdGVhZGlseSBkdXJpbmcgdGhlIGxpZmUgb2Yg
dGhlIG9iamVjdC4gTW9zdCBvZiB3b3JrIGlzIHRvIGNoYW5nZSB0aGUgcHJvZHVjcmUgaW4gR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSB0byBvYmplY3Qtb3JpZW50ZWQgSW1hZ2VMb2Nr
ZXIgY2xhc3MuIAorICAgICAgICBUaGUgbGlmZXRpbWUgb2YgdGhlIHN0YXRlcyB3ZXJlIG9yaWdp
bmFsbHkgb25seSBpbiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKCksIG5vdyBpdCBp
cyBkZXRlcm1pbmVkIGJ5IHRoZSBsaWZldGltZSBvZiB0aGUgb2JqZWN0IG9mIEltYWdlTG9ja2Vy
LgorCisgICAgICAgIENvdmVyZWQgYnkgY3VycmVudCB0ZXN0cy4KKworICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgor
ICAgICAgICAoV2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChJbWFnZUxvY2tlcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OkltYWdl
TG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tl
cjo6aW1hZ2VQaXhlbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlTG9ja2VyOjppbWFnZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUxvY2tlcjo6aW1hZ2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjppbWFnZVNvdXJjZUZvcm1hdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmltYWdlQWxwaGFPcCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmltYWdl
U291cmNlVW5wYWNrQWxpZ25tZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9OYXRp
dmVJbWFnZVB0ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dDNEQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFn
ZUxvY2tlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6Omdl
dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VM
b2NrZXI6On5JbWFnZUxvY2tlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxv
Y2tlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKToKKwogMjAxMi0xMS0xMyAgRXVnZW5l
IEtseXVjaG5pa292ICA8ZXVzdGFzLmJ1Z0BnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogSnNEb2MtYW5ub3RhdGUgS2V5Ym9hcmRTaG9ydGN1dHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDcwY2I4
NTNjMzc5ZmYwNjViOTg3ZDlkZWUxMDQzNTdkMjgxYmRiODEuLjkzZDdkNGZiN2JhZmVhM2FlOTNi
YTMzMGNlNGYzMDFiNDU0Y2Y1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzYxMSwxOCArMzYxMSwyMSBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1h
dCkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAo
IW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwg
cHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9ORSwgZGF0YSkpIHsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUxvY2tlciBpbWFnZUxvY2tlcihpbWFnZSwgZG9tU291cmNlKTsKKyAgICBpZiAoIWltYWdlTG9j
a2VyLmdldEltYWdlRGF0YShwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252
ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKSkgewogICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAi
YmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIG1fY29udGV4
dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgaW1hZ2VMb2NrZXIuaW1hZ2VQaXhlbERhdGEoKSwg
Zm9ybWF0LCB0eXBlLCBmbGlwWSwgaW1hZ2VMb2NrZXIuaW1hZ2VBbHBoYU9wKCksIGltYWdlTG9j
a2VyLmltYWdlU291cmNlRm9ybWF0KCksIGltYWdlTG9ja2VyLmltYWdlV2lkdGgoKSwgaW1hZ2VM
b2NrZXIuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VMb2NrZXIuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1l
bnQoKSwgZGF0YSk7CisKICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKICAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgMSk7CiAgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsCkBAIC0zNjkwLDcgKzM2OTMsNyBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0
ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIo
KSksCisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2Ut
PnJlbmRlcmVyKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLAogICAgICAgICAg
ICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwog
fQogCkBAIC0zNzI5LDEyICszNzMyLDEyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICBp
ZiAoaW1hZ2VEYXRhKQogICAgICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwogICAgIGVsc2UKLSAg
ICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1h
dCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLAorICAgICAgICB0ZXhJbWFnZTJESW1wbCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGll
ZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIVE1MRG9tQ2FudmFzLAogICAgICAgICAgICAg
ICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsK
IH0KIAogI2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29w
eSBiYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXZpZGVv
IHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InRleEltYWdlMkQiLCAibm8gdmlkZW8iKTsKQEAgLTM3NTMsNyArMzc1Niw3IEBAIFBhc3NSZWZQ
dHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZp
ZGVvRWxlbWVudCogdmlkCiAgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwogICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUg
dGV4dHVyZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgogICAgIHZpZGVvLT5wYWludEN1
cnJlbnRGcmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOwotICAgIHJldHVy
biBidWYtPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5
SW1hZ2UoYmFja2luZ1N0b3JlQ29weSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsCkBAIC0zNzYyLDEwICszNzY1LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0KICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgZWMp
OworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgRG9u
dENvcHlCYWNraW5nU3RvcmUsIGVjKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47
Ci0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1h
dCwgdHlwZSwgaW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOworCisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIVE1M
RG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwog
fQogI2VuZGlmCiAKQEAgLTM4NDcsMTggKzM4NTEsMjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW1hZ2UqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlv
bkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBs
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9
IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwotICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKGlt
YWdlLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9y
c3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FLCBkYXRhKSkgeworCisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyIGltYWdlTG9ja2VyKGltYWdlLCBkb21T
b3VyY2UpOyAgCisgICAgaWYgKCFpbWFnZUxvY2tlci5nZXRJbWFnZURhdGEocHJlbXVsdGlwbHlB
bHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9ORSkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCisgICAgbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKGltYWdlLCBpbWFn
ZUxvY2tlci5pbWFnZVBpeGVsRGF0YSgpLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBpbWFnZUxvY2tl
ci5pbWFnZUFscGhhT3AoKSwgaW1hZ2VMb2NrZXIuaW1hZ2VTb3VyY2VGb3JtYXQoKSwgaW1hZ2VM
b2NrZXIuaW1hZ2VXaWR0aCgpLCBpbWFnZUxvY2tlci5pbWFnZUhlaWdodCgpLCBpbWFnZUxvY2tl
ci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKTsKKwogICAgIGlmIChtX3VucGFj
a0FsaWdubWVudCAhPSAxKQogICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKICAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhl
aWdodCgpLApAQCAtMzkyNCw4ICszOTMxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4
U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0
eXBlLCBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVy
ZXIoKSksCi0gICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhLCBlYyk7CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1h
Z2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1s
RG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwog
fQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LApA
QCAtMzk0Niw3ICszOTUyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICBpZiAoaW1h
Z2VEYXRhKQogICAgICAgICB0ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7CiAgICAgZWxzZQotICAg
ICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKKyAgICAgICAgdGV4U3ViSW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52
YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIVE1MRG9tQ2FudmFzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIGVjKTsKIH0KIApAQCAtMzk1NywxMCArMzk2MywxMSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbgogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVv
LCBlYyk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVv
LCBEb250Q29weUJhY2tpbmdTdG9yZSwgZWMpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGVjKTsKKworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIVE1MRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggODZlYjgyOWYyMjcwY2EyYmFkMDlm
ZjQ4Mzg5YmFiYTRiOGQ2ODAwOS4uZDQ4NmE2MTU0YTU3NTM5M2QzYjQ5NmI0NGRhMDg1OGM3MWRm
ZmIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdD
b250ZXh0LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgogCkBAIC0zNzIsNyArMzczLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwogCiAjaWYg
RU5BQkxFKFZJREVPKQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhU
TUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJbWFnZT4g
dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIEJhY2tpbmdTdG9yZUNvcHksIEV4
Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQ7CkBAIC01MzMsMTUgKzUzNCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhJbWFn
ZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgdm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosCi0gICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1h
Z2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHRleFN1Yklt
YWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGhhbmRsZU5QT1RUZXh0dXJlcyhjb25zdCBj
aGFyKiwgYm9vbCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAppbmRleCBhOThiNTQ2YmFmN2U4MTNiOTI4OTgyYTdk
YzcyOTM3NWM1M2M0ODRmLi45YmEyMWE1ZjA2ZDBkNDQ2ZDRlMDVkZmRiN2QxZTRmOTdhNzUwNjk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCkBAIC0xNjgsNiArMTY4LDcgQEAgR0MzRGVudW0gR3JhcGhpY3NDb250
ZXh0M0Q6OmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHkKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwogfQogCisvKgogYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwKQEAg
LTE5Niw2ICsxOTcsNTYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0
YShJbWFnZSogaW1hZ2UsCiAgICAgICAgIG9ic2VydmVyLT5kaWREcmF3KGltYWdlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KKyovCisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFn
ZURhdGEoSW1hZ2UqIGltYWdlLAorICAgIHZvaWQqIHBpeGVscywKKyAgICBHQzNEZW51bSBmb3Jt
YXQsCisgICAgR0MzRGVudW0gdHlwZSwKKyAgICBib29sIGZsaXBZLAorICAgIEFscGhhT3AgYWxw
aGFPcCwKKyAgICBTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZUZvcm1hdCwgCisgICAgdW5zaWduZWQg
d2lkdGgsCisgICAgdW5zaWduZWQgaGVpZ2h0LAorICAgIHVuc2lnbmVkIHNvdXJjZVVucGFja0Fs
aWdubWVudCwKKyAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpCit7CisgICAgaWYgKCFwaXhlbHMp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHBhY2tlZFNpemU7CisgICAg
Ly8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KKyAgICBp
ZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAx
LCAmcGFja2VkU2l6ZSwgMCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZGF0YS5yZXNpemUocGFja2VkU2l6ZSk7CisKKyAgICBpZiAo
IXBhY2tQaXhlbHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ocGl4ZWxzKSwKKyAg
ICAgICAgc291cmNlRm9ybWF0LAorICAgICAgICB3aWR0aCwKKyAgICAgICAgaGVpZ2h0LAorICAg
ICAgICBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCisgICAgICAgIGZvcm1hdCwKKyAgICAgICAgdHlw
ZSwKKyAgICAgICAgYWxwaGFPcCwKKyAgICAgICAgZGF0YS5kYXRhKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGZsaXBZKSB7CisgICAgICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQ
ZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgICAgIGlmICghY29tcHV0ZUZvcm1hdEFu
ZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwKKyAgICAgICAgICAgICZjb21wb25lbnRzUGVy
UGl4ZWwsCisgICAgICAgICAgICAmYnl0ZXNQZXJDb21wb25lbnQpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAvLyBUaGUgaW1hZ2UgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCwg
YW5kIHdlIHVwbG9hZCBpdCBhcyBzdWNoLgorICAgICAgICB1bnNpZ25lZCB1bnBhY2tBbGlnbm1l
bnQgPSAxOworICAgICAgICBmbGlwVmVydGljYWxseShkYXRhLmRhdGEoKSwgd2lkdGgsIGhlaWdo
dCwKKyAgICAgICAgICAgIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAor
ICAgICAgICAgICAgdW5wYWNrQWxpZ25tZW50KTsKKyAgICB9CisKKyAgICBpZiAoSW1hZ2VPYnNl
cnZlciAqb2JzZXJ2ZXIgPSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBvYnNlcnZl
ci0+ZGlkRHJhdyhpbWFnZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEoSW1hZ2VEYXRhKiBpbWFnZURhdGEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKQEAgLTk2
Myw3ICsxMDE0LDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCQThQcmVtdWx0aXBseShj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmEKIHZvaWQgcGFja09uZVJvd09m
UkdCQThUb1JHQkE4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYp
OworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJj
ZVszXSA6IDEuMGY7CiAgICAgICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVGYWN0b3IpOwogICAgICAg
ICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKICAgICAgICAgdWludDhfdCBzb3VyY2VCID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsyXSkgKiBzY2Fs
ZUZhY3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaAppbmRleCA0ZWRlMGY4MTdmNmMwYzMwYjdhM2U1NTI4OTZkZTA2ZDQ3
M2IyOTAwLi43N2EyNDExZTJhM2VjMDRmN2MxMDRmMTdmYzU2OTZhYmZkOTQyMTM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaAogI2RlZmlu
ZSBHcmFwaGljc0NvbnRleHQzRF9oCiAKKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCkBAIC0xMDEsNiArMTAyLDcgQEAgY2xhc3MgRXh0ZW5zaW9uczNEUXQ7CiBjbGFz
cyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIElt
YWdlU291cmNlOwogY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNp
emU7CkBAIC01NjQsMTggKzU2Niw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGltYWdlU2l6ZUluQnl0ZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBwYWRkaW5nSW5CeXRlcyk7
CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIGludG8g
dGhlIHBhc3NlZCBWZWN0b3IsCi0gICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRp
bmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKLSAgICAvLyBhbmQgb2JleWluZyB0aGUg
ZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGFuZCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZQot
ICAgIC8vIGZsYWdzLiBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29s
IGV4dHJhY3RJbWFnZURhdGEoSW1hZ2UqLAotICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQogICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50
cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCiAgICAgLy8g
cGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQg
dHlwZSwKICAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEg
ZmxhZ3MuIFJldHVybnMgdHJ1ZQpAQCAtODc0LDM0ICs4NjQsMTEgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHVuc2lnbmVkIGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0pOwogCi0gIHBy
aXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJl
bmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKLQotICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVz
dCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgotICAgIC8vCi0gICAg
Ly8gR2V0cyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIEltYWdlIGludG8gb3V0cHV0VmVjdG9yIGlu
IHRoZQotICAgIC8vIGZvcm1hdCBzcGVjaWZpZWQgYnkgdGhlIChPcGVuR0wtc3R5bGUpIGZvcm1h
dCBhbmQgdHlwZQotICAgIC8vIGFyZ3VtZW50cy4gRGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBv
dXRwdXRWZWN0b3IgY29udGFpbnMKLSAgICAvLyB1aW50OF90LCBpZiB0aGUgZm9ybWF0IGFuZCB0
eXBlIHNwZWNpZnkgcGFja2VkIHBpeGVscywgdGhlbgotICAgIC8vIGl0IHdpbGwgZXNzZW50aWFs
bHkgY29udGFpbiB1aW50MTZfdCBhZnRlciB0aGUgZXh0cmFjdGlvbgotICAgIC8vIHByb2Nlc3Mu
Ci0gICAgLy8KLSAgICAvLyBJZiBwcmVtdWx0aXBseUFscGhhIGlzIHRydWUsIHRoZSBhbHBoYSBj
aGFubmVsLCBpZiBhbnksCi0gICAgLy8gd2lsbCBiZSBtdWx0aXBsaWVkIGludG8gdGhlIGNvbG9y
IGNoYW5uZWxzIGR1cmluZyB0aGUKLSAgICAvLyBleHRyYWN0aW9uIHByb2Nlc3MuIFRoaXMgcHJl
bXVsdGlwbGljYXRpb24gb2NjdXJzIGJlZm9yZQotICAgIC8vIGFueSBwYWNraW5nIG9mIHBpeGVs
IGRhdGEuCi0gICAgLy8KLSAgICAvLyBJZiBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSBpcyB0
cnVlLCBnYW1tYSBjb3JyZWN0aW9uIGFuZCBJQ0MKLSAgICAvLyBwcm9maWxlIHdvbid0IGJlIGFw
cGxpZWQuCi0gICAgLy8KLSAgICAvLyBObyB2ZXJ0aWNhbCBmbGlwIG9mIHRoZSBpbWFnZSBkYXRh
IGlzIHBlcmZvcm1lZCBieSB0aGlzCi0gICAgLy8gbWV0aG9kLgotICAgIHN0YXRpYyBib29sIGdl
dEltYWdlRGF0YShJbWFnZSosCi0gICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpOworICAgIGVudW0gSW1hZ2VIdG1sRG9tU291cmNlIHsK
KyAgICAgICAgSHRtbERvbUltYWdlID0gMCwKKyAgICAgICAgSFRNTERvbUNhbnZhcyA9IDEsCisg
ICAgICAgIEhUTUxEb21WaWRlbyA9IDIKKyAgICB9OwogCiAgICAgLy8gUG9zc2libGUgYWxwaGEg
b3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9jY3VyIGR1cmluZwogICAgIC8vIHBpeGVsIHBh
Y2tpbmcuIEZJWE1FOiBrQWxwaGFEb1VubXVsdGlwbHkgaXMgbG9zc3kgYW5kIG11c3QKQEAgLTkx
Miw2ICs4NzksNTEgQEAgcHVibGljOgogICAgICAgICBBbHBoYURvVW5tdWx0aXBseSA9IDIKICAg
ICB9OwogCisgICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSBp
bnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNj
b3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCisgICAgLy8gYW5kIG9iZXlpbmcg
dGhlIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBhbmQgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUKKyAgICAvLyBmbGFncy4gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMg
Ym9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiwgdm9pZCogcGl4ZWxzLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIFNvdXJjZURhdGFGb3JtYXQg
c291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAgICBjbGFz
cyBJbWFnZUxvY2tlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5JbWFnZUxvY2tl
cigpOworICAgICAgICBib29sIGdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJv
b2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOworCisgICAgICAgIEltYWdlTG9ja2VyKElt
YWdlKiBpbWFnZSwgSW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSkge21faW1hZ2UgPSBpbWFn
ZTsgbV9pbWFnZUh0bWxEb21Tb3VyY2UgPSBkb21Tb3VyY2U7fTsKKyAgICAgICAgdm9pZCogaW1h
Z2VQaXhlbERhdGEoKSB7cmV0dXJuIG1faW1hZ2VQaXhlbERhdGE7fTsKKyAgICAgICAgdW5zaWdu
ZWQgaW1hZ2VXaWR0aCgpIHtyZXR1cm4gbV9pbWFnZVdpZHRoO307CisgICAgICAgIHVuc2lnbmVk
IGltYWdlSGVpZ2h0KCkge3JldHVybiBtX2ltYWdlSGVpZ2h0O307CisgICAgICAgIFNvdXJjZURh
dGFGb3JtYXQgaW1hZ2VTb3VyY2VGb3JtYXQoKSB7cmV0dXJuIG1faW1hZ2VTb3VyY2VGb3JtYXQ7
fTsKKyAgICAgICAgQWxwaGFPcCBpbWFnZUFscGhhT3AoKSB7cmV0dXJuIG1fYWxwaGFPcDt9Cisg
ICAgICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkge3JldHVybiBtX2lt
YWdlU291cmNlVW5wYWNrQWxpZ25tZW50O307IAorICAgIHByaXZhdGU6CisjaWYgVVNFKFNLSUEp
CisgICAgICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IG1fbmF0aXZlSW1hZ2U7CisgICAgICAg
IE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlOworI2VsaWYgVVNFKENBSVJPKQorICAgICAgICBJ
bWFnZVNvdXJjZSogbV9kZWNvZGVyOworICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBt
X2ltYWdlU3VyZmFjZTsKKyNlbGlmIFVTRShDRykKKyAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdl
OworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZGVjb2RlZEltYWdlOworICAgICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwaXhlbERhdGE7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICAg
ICAgUUltYWdlIG1fcXRJbWFnZTsKKyNlbmRpZgorICAgICAgICBJbWFnZSogbV9pbWFnZTsKKyAg
ICAgICAgSW1hZ2VIdG1sRG9tU291cmNlIG1faW1hZ2VIdG1sRG9tU291cmNlOworICAgICAgICB2
b2lkKiBtX2ltYWdlUGl4ZWxEYXRhOworICAgICAgICB1bnNpZ25lZCBtX2ltYWdlV2lkdGg7Cisg
ICAgICAgIHVuc2lnbmVkIG1faW1hZ2VIZWlnaHQ7CisgICAgICAgIFNvdXJjZURhdGFGb3JtYXQg
bV9pbWFnZVNvdXJjZUZvcm1hdDsKKyAgICAgICAgQWxwaGFPcCBtX2FscGhhT3A7CisgICAgICAg
IHVuc2lnbmVkIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7CisgICAgfTsKKworICAgIHBy
aXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJl
bmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKKwogICAgIC8vIEhlbHBlciBmb3IgZ2V0SW1h
Z2VEYXRhIHdoaWNoIGltcGxlbWVudHMgcGFja2luZyBvZiBwaXhlbAogICAgIC8vIGRhdGEgaW50
byB0aGUgc3BlY2lmaWVkIE9wZW5HTCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIHR5cGUuCiAgICAg
Ly8gQSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291
cmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJ
bWFnZVB0ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQ
dHIuaAppbmRleCBjOThmOGMyNWE5YTg3NmM0YWI2ZTQwODY4YzJkYmNiMjc2ZDBkY2QwLi4wNTMw
YWRlMTI3OTdkZjBmMjA0YTg1ODgyYjg1Y2I1YTRhMDNjY2U4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKQEAgLTM0LDYgKzM0LDcg
QEAgY2xhc3Mgd3hHcmFwaGljc0JpdG1hcDsKICNlbGlmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0
IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJOYXRp
dmVJbWFnZVF0LmgiCiAjaW5jbHVkZSA8cWdsb2JhbC5oPgogUVRfQkVHSU5fTkFNRVNQQUNFCiBj
bGFzcyBRUGl4bWFwOwpAQCAtNDEsNiArNDIsNyBAQCBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBV
U0UoQ0FJUk8pCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VDYWlyby5oIgogI2VsaWYgVVNFKFNLSUEp
CisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBOYXRpdmVJbWFnZVNraWE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmlu
ZGV4IDcwMzNmYTZkYTY3NjEwMTM2YjQ0M2JmNjkxZDMxYzZmMzZkNDYwZjUuLjk2NzBmM2RkODRm
Mzk5ZTAxZDUxODVmZTBhMzRiMjI0OTk2ZmQxOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwCkBAIC0xNjMsNDAgKzE2Myw0OCBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBo
aWNzQ29udGV4dDNEKCkKICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CiB9
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVu
c2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0
cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIo
KQogewotICAgIGlmICghaW1hZ2UpCisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgZGVsZXRl
IG1fZGVjb2RlcjsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6Omdl
dEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xv
clByb2ZpbGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgLy8gV2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGlt
YWdlIGlzIGp1c3QgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRhdGEuCi0gICAgSW1hZ2VTb3VyY2Ug
ZGVjb2RlcihwcmVtdWx0aXBseUFscGhhID8gSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGll
ZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFu
ZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVB
cHBsaWVkKTsKLSAgICBBbHBoYU9wIGFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKLSAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2U7Ci0gICAgaWYgKGltYWdlLT5kYXRhKCkp
IHsKLSAgICAgICAgZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgIG1f
ZGVjb2RlciA9IG5ldyBJbWFnZVNvdXJjZShwcmVtdWx0aXBseUFscGhhID8gSW1hZ2VTb3VyY2U6
OkFscGhhUHJlbXVsdGlwbGllZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQs
IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQp
OworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW1hZ2VT
b3VyY2UmIGRlY29kZXIgPSAqbV9kZWNvZGVyOworCisgICAgbV9hbHBoYU9wID0gQWxwaGFEb05v
dGhpbmc7CisgICAgaWYgKG1faW1hZ2UtPmRhdGEoKSkgeworICAgICAgICBkZWNvZGVyLnNldERh
dGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291
bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICBPd25QdHI8TmF0aXZlSW1hZ2VDYWlybz4gbmF0aXZlSW1h
Z2UgPSBhZG9wdFB0cihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7Ci0gICAgICAgIGlt
YWdlU3VyZmFjZSA9IG5hdGl2ZUltYWdlLT5zdXJmYWNlKCk7CisgICAgICAgIG1faW1hZ2VTdXJm
YWNlID0gbmF0aXZlSW1hZ2UtPnN1cmZhY2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBpbWFn
ZVN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c3VyZmFjZSgp
OworICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCktPnN1cmZhY2UoKTsKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAg
ICAgICAgICAgYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBo
YU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgfQogCi0gICAgaWYgKCFpbWFnZVN1cmZhY2Up
CisgICAgaWYgKCFtX2ltYWdlU3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2VTdXJmYWNlLmdl
dCgpKTsKLSAgICBpbnQgaGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGlt
YWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQorICAgIG1faW1h
Z2VXaWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1faW1hZ2VTdXJmYWNlLmdl
dCgpKTsKKyAgICBtX2ltYWdlSGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFn
ZUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2Zvcm1hdChpbWFnZVN1cmZhY2UuZ2V0KCkpICE9IENBSVJPX0ZPUk1BVF9BUkdC
MzIpCisgICAgaWYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChtX2ltYWdlU3VyZmFj
ZS5nZXQoKSkgIT0gQ0FJUk9fRk9STUFUX0FSR0IzMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgdW5zaWduZWQgaW50IHNyY1VucGFja0FsaWdubWVudCA9IDE7Ci0gICAgc2l6ZV90IGJ5
dGVzUGVyUm93ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5n
ZXQoKSk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKICAgICBzaXplX3QgYml0c1BlclBpeGVsID0g
MzI7CiAgICAgdW5zaWduZWQgaW50IHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhl
bCAvIDggKiB3aWR0aDsKICAgICBpZiAocGFkZGluZykgewpAQCAtMjA1LDE0ICsyMTMsMTAgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgdW5zaWdu
ZWQgaW50IGZvcm1hdCwgdW5zaWduZWQKICAgICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25tZW50
OwogICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBk
YXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAgaWYgKGNvbXB1dGVJ
bWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnBhY2tlZFNp
emUsIDApICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIG91dHB1dFZlY3Rvci5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICByZXR1cm4g
cGFja1BpeGVscyhjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5nZXQo
KSksIFNvdXJjZUZvcm1hdEJHUkE4LAotICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWln
aHQsIHNyY1VucGFja0FsaWdubWVudCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBvdXRwdXRWZWN0
b3IuZGF0YSgpKTsKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOworICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBT
b3VyY2VGb3JtYXRCR1JBODsKKyAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gc3Jj
VW5wYWNrQWxpZ25tZW50OworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBp
bnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52
YXNIZWlnaHQsIFBsYXRmb3JtQ29udGV4dENhaXJvKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENH
LmNwcAppbmRleCBhYzAwYzQzZGUwYWE0ZGIxMTdhZTYxMjRiNTg0NjM4MWI0OTc0ZmU2Li4xM2E0
MDU0NTliNmUxMWFiN2JkNGE1OTcyOGRjY2FmYWNkY2VhNjk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENH
LmNwcApAQCAtODksMzQgKzg5LDMxIEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6U291cmNl
RGF0YUZvcm1hdCBnZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVkIGludCBjb21wCiAgICAgcmV0
dXJuIGZvcm1hdFRhYmxlW2Zvcm1hdEJhc2VdWyhpczE2Qml0Rm9ybWF0ID8gMiA6IDApICsgKGJp
Z0VuZGlhbiA/IDEgOiAwKV07CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdl
RGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBw
cmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGljc0NvbnRl
eHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcigpCiB7Ci0gICAgaWYgKCFpbWFnZSkKK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YShib29s
IHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCit7Cisg
ICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ0dJbWFnZVJlZiBj
Z0ltYWdlOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBkZWNvZGVkSW1hZ2U7Ci0gICAgYm9v
bCBoYXNBbHBoYSA9IGltYWdlLT5pc0JpdG1hcEltYWdlKCkgPyBpbWFnZS0+Y3VycmVudEZyYW1l
SGFzQWxwaGEoKSA6IHRydWU7Ci0gICAgaWYgKChpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSB8
fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBpbWFnZS0+ZGF0YSgpKSB7Cisg
ICAgYm9vbCBoYXNBbHBoYSA9IG1faW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSA/IG1faW1hZ2UtPmN1
cnJlbnRGcmFtZUhhc0FscGhhKCkgOiB0cnVlOworICAgIGlmICgoaWdub3JlR2FtbWFBbmRDb2xv
clByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgbV9pbWFnZS0+
ZGF0YSgpKSB7CiAgICAgICAgIEltYWdlU291cmNlIGRlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhh
Tm90UHJlbXVsdGlwbGllZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9y
ZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKLSAgICAgICAg
ZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgICAgICBkZWNvZGVyLnNl
dERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1l
Q291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZGVjb2RlZEltYWdl
LmFkb3B0Q0YoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOwogICAgICAgICBjZ0ltYWdl
ID0gZGVjb2RlZEltYWdlLmdldCgpOwogICAgIH0gZWxzZQotICAgICAgICBjZ0ltYWdlID0gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIGNnSW1hZ2UgPSBtX2lt
YWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghY2dJbWFnZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRo
KGNnSW1hZ2UpOwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2Up
OwotICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICBtX2ltYWdlV2lkdGggPSBDR0ltYWdl
R2V0V2lkdGgoY2dJbWFnZSk7CisgICAgbV9pbWFnZUhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQo
Y2dJbWFnZSk7CisgICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VIZWlnaHQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNlZSB3aGV0aGVyIHRoZSBpbWFnZSBpcyB1c2lu
ZyBhbiBpbmRleGVkIGNvbG9yIHNwYWNlLCBhbmQgaWYKQEAgLTEzMSw3ICsxMjgsNyBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICAv
LyB0aGUgY29sb3IgdGFibGUsIHdoaWNoIHdvdWxkIGFsbG93IHVzIHRvIGF2b2lkIHByZW11bHRp
cGx5aW5nIHRoZQogICAgICAgICAvLyBhbHBoYSBjaGFubmVsLiBDcmVhdGlvbiBvZiBhIGJpdG1h
cCBjb250ZXh0IHdpdGggYW4gYWxwaGEgY2hhbm5lbAogICAgICAgICAvLyBkb2Vzbid0IHNlZW0g
dG8gd29yayB1bmxlc3MgaXQncyBwcmVtdWx0aXBsaWVkLgotICAgICAgICBiaXRtYXBDb250ZXh0
LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIHdpZHRoLCBoZWlnaHQsIDgsIHdpZHRo
ICogNCwKKyAgICAgICAgYml0bWFwQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZSgwLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQsIDgsIG1faW1hZ2VXaWR0aCAqIDQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNl
UkdCQ29sb3JTcGFjZVJlZigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkhvc3QpKTsKICAgICAgICAgaWYgKCFiaXRtYXBDb250ZXh0KQpAQCAtMTM5
LDcgKzEzNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSog
aW1hZ2UsCiAKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOwogICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9u
UXVhbGl0eShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7Ci0gICAg
ICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIHdpZHRoLCBoZWlnaHQpLCBjZ0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdl
KGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbV9pbWFnZVdpZHRoLCBtX2lt
YWdlSGVpZ2h0KSwgY2dJbWFnZSk7CiAKICAgICAgICAgLy8gTm93IGRpc2NhcmQgdGhlIG9yaWdp
bmFsIENHIGltYWdlIGFuZCByZXBsYWNlIGl0IHdpdGggYSBjb3B5IGZyb20gdGhlIGJpdG1hcCBj
b250ZXh0LgogICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7CkBAIC0xOTQsMTggKzE5MSwxOCBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICB9
CiAgICAgfQogCi0gICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7Cisg
ICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CiAgICAgQWxwaGFGb3JtYXQgYWxwaGFGb3Jt
YXQgPSBBbHBoYUZvcm1hdE5vbmU7CiAgICAgc3dpdGNoIChDR0ltYWdlR2V0QWxwaGFJbmZvKGNn
SW1hZ2UpKSB7CiAgICAgY2FzZSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0OgogICAg
ICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRBbHBoYU9wID0g
QWxwaGFEb1VubXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5tdWx0
aXBseTsKICAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0OwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFGaXJzdDoKICAgICAgICAgLy8gVGhpcyBwYXRo
IGlzIG9ubHkgYWNjZXNzaWJsZSBmb3IgTWFjT1MgZWFybGllciB0aGFuIDEwLjYuNC4KICAgICAg
ICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRBbHBoYU9wID0gQWxw
aGFEb1ByZW11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1ByZW11bHRp
cGx5OwogICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3Q6CkBAIC0yMTQsMTIgKzIx
MSwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdl
LAogICAgICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dDoKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgbmVlZGVkQWxw
aGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFE
b1VubXVsdGlwbHk7CiAgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0OwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFMYXN0OgogICAgICAgICBpZiAocHJl
bXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvUHJlbXVs
dGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CiAgICAg
ICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0OwogICAgICAgICBicmVhazsKICAgICBj
YXNlIGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q6CkBAIC0yMzEsMjEgKzIyOCwxNiBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgU291cmNlRGF0YUZvcm1hdCBz
cmNEYXRhRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21wb25lbnRzUGVyUGl4ZWwsIGFs
cGhhRm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdFbmRpYW5Tb3VyY2UpOwotICAg
IGlmIChzcmNEYXRhRm9ybWF0ID09IFNvdXJjZUZvcm1hdE51bUZvcm1hdHMpCisKKyAgICBtX2lt
YWdlU291cmNlRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21wb25lbnRzUGVyUGl4ZWws
IGFscGhhRm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdFbmRpYW5Tb3VyY2UpOwor
ICAgIGlmIChtX2ltYWdlU291cmNlRm9ybWF0ID09IFNvdXJjZUZvcm1hdE51bUZvcm1hdHMpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHBpeGVsRGF0
YTsKICAgICBwaXhlbERhdGEuYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VH
ZXREYXRhUHJvdmlkZXIoY2dJbWFnZSkpKTsKICAgICBpZiAoIXBpeGVsRGF0YSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFVJbnQ4KiByZ2JhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihw
aXhlbERhdGEuZ2V0KCkpOwogCi0gICAgdW5zaWduZWQgaW50IHBhY2tlZFNpemU7Ci0gICAgLy8g
T3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KLSAgICBpZiAo
Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAm
cGFja2VkU2l6ZSwgMCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShwYWNrZWRTaXplKTsKKyAgICBt
X2ltYWdlUGl4ZWxEYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwaXhlbERhdGEuZ2V0KCkpOwogCiAg
ICAgdW5zaWduZWQgaW50IHNyY1VucGFja0FsaWdubWVudCA9IDA7CiAgICAgc2l6ZV90IGJ5dGVz
UGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGNnSW1hZ2UpOwpAQCAtMjU1LDkgKzI0Nywx
MCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAog
ICAgICAgICB3aGlsZSAoYnl0ZXNQZXJSb3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQpCiAgICAgICAg
ICAgICArK3NyY1VucGFja0FsaWdubWVudDsKICAgICB9Ci0gICAgYm9vbCBydCA9IHBhY2tQaXhl
bHMocmdiYSwgc3JjRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3JjVW5wYWNrQWxpZ25tZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFPcCwg
b3V0cHV0VmVjdG9yLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHJ0OworCisgICAgbV9pbWFnZVNvdXJj
ZVVucGFja0FsaWdubWVudCA9IHNyY1VucGFja0FsaWdubWVudDsKKworICAgIHJldHVybiB0cnVl
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBp
bnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFw
aGljc0NvbnRleHQzRENsdXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCmluZGV4IDdkZjFlZTkyZGI1
OTNiZjc3MDA4MTdkNTJhZDViODM1OWYwNzlmYjEuLjlkMWFiMTQzYjU4NjZiZDg3YmE3NTBiOWVj
MjY3NWRmMWFiYzVmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5j
cHAKQEAgLTU2LDcgKzU2LDExIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0
M0QoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVk
IGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xv
clByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIoKQoreworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IGQxMzkx
MzA3Y2QzYmM5MjYyZDQ2OTgxNDczMzQ5YjkwMGRkNGU5MjEuLjIyYzExMzNjZDdlMDliYWI5NDU2
ZTJmYzk1MDZjYWUzOTYxMTVjMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAtMjU1
LDcgKzI1NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVHcmFwaGljc1N1cmZh
Y2VzKGNvbnN0IEludFNpemUmIHNpemUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiwgR0MzRGVudW0gLyogZm9ybWF0ICovLCBHQzNEZW51
bSAvKiB0eXBlICovLCBib29sIC8qIHByZW11bHRpcGx5QWxwaGEgKi8sIGJvb2wgLyogaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUgKi8sIFZlY3Rvcjx1aW50OF90PiYgLyogb3V0cHV0VmVjdG9y
ICovKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIoKQorewor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RR
dC5jcHAKaW5kZXggOWIwMDAzNzk3NzM1MmNkMWVjMTgzODI3M2YwMjE0OWI3OTRiODZlNi4uZjNl
MmViMzYzMTljZmUxNzdjNjlhNGUwYjc5OThhZmFhMTBjMGU2MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RR
dC5jcHAKQEAgLTQ3OSw1NCArNDc5LDUzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIH0KICNlbmRpZgogCi1ib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYg
b3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2Nr
ZXIoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1h
Z2VEYXRhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSkKIHsKICAgICBVTlVTRURfUEFSQU0oaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwot
ICAgIGlmICghaW1hZ2UpCisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBRSW1hZ2UgcXRJbWFnZTsKICAgICAvLyBJcyBpbWFnZSBhbHJlYWR5IGxvYWRlZD8g
SWYgbm90LCBsb2FkIGl0LgotICAgIGlmIChpbWFnZS0+ZGF0YSgpKQotICAgICAgICBxdEltYWdl
ID0gUUltYWdlOjpmcm9tRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oaW1hZ2Ut
PmRhdGEoKS0+ZGF0YSgpKSwgaW1hZ2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICBpZiAobV9pbWFn
ZS0+ZGF0YSgpKQorICAgICAgICBtX3F0SW1hZ2UgPSBRSW1hZ2U6OmZyb21EYXRhKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWNoYXIqPihtX2ltYWdlLT5kYXRhKCktPmRhdGEoKSksIG1faW1hZ2Ut
PmRhdGEoKS0+c2l6ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgUVBpeG1hcCogbmF0aXZlUGl4
bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFQaXht
YXAqIG5hdGl2ZVBpeG1hcCA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CiAgICAgICAgIC8vIFdpdGggUVBBLCB3ZSBjYW4gYXZvaWQgYSBkZWVwIGNvcHkuCi0gICAgICAg
IHF0SW1hZ2UgPSAqbmF0aXZlUGl4bWFwLT5oYW5kbGUoKS0+YnVmZmVyKCk7CisgICAgICAgIG1f
cXRJbWFnZSA9ICpuYXRpdmVQaXhtYXAtPmhhbmRsZSgpLT5idWZmZXIoKTsKICAgICB9CiAKLSAg
ICBBbHBoYU9wIGFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKLSAgICBzd2l0Y2ggKHF0SW1hZ2Uu
Zm9ybWF0KCkpIHsKKyAgICBtX2FscGhhT3AgPSBBbHBoYURvTm90aGluZzsKKyAgICBzd2l0Y2gg
KG1fcXRJbWFnZS5mb3JtYXQoKSkgewogICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCMzI6CiAg
ICAgICAgIC8vIEZvciBvcGFxdWUgaW1hZ2VzLCB3ZSBzaG91bGQgbm90IHByZW11bHRpcGx5IG9y
IHVubXVsdGlwbHkgYWxwaGEuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUUltYWdlOjpGb3Jt
YXRfQVJHQjMyOgogICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIGFs
cGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBo
YURvUHJlbXVsdGlwbHk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUUltYWdlOjpGb3JtYXRf
QVJHQjMyX1ByZW11bHRpcGxpZWQ6CiAgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkKLSAg
ICAgICAgICAgIGFscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKKyAgICAgICAgICAgIG1fYWxw
aGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0Ogog
ICAgICAgICAvLyBUaGUgaW1hZ2UgaGFzIGEgZm9ybWF0IHRoYXQgaXMgbm90IHN1cHBvcnRlZCBp
biBwYWNrUGl4ZWxzLiBXZSBoYXZlIHRvIGNvbnZlcnQgaXQgaGVyZS4KLSAgICAgICAgcXRJbWFn
ZSA9IHF0SW1hZ2UuY29udmVydFRvRm9ybWF0KHByZW11bHRpcGx5QWxwaGEgPyBRSW1hZ2U6OkZv
cm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCA6IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CisgICAg
ICAgIG1fcXRJbWFnZSA9IG1fcXRJbWFnZS5jb252ZXJ0VG9Gb3JtYXQocHJlbXVsdGlwbHlBbHBo
YSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3JtYXRf
QVJHQjMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IHBhY2tl
ZFNpemU7Ci0gICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9
PSAxKS4KLSAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCBpbWFn
ZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxLCAmcGFja2VkU2l6ZSwgMCkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgIG1faW1hZ2VXaWR0aCA9IG1faW1hZ2UtPndpZHRo
KCk7CisgICAgbV9pbWFnZUhlaWdodCA9IG1faW1hZ2UtPmhlaWdodCgpOworICAgIGlmICghbV9p
bWFnZVdpZHRoIHx8ICFtX2ltYWdlSGVpZ2h0KQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
bV9pbWFnZVBpeGVsRGF0YSA9IG1fcXRJbWFnZS5jb25zdEJpdHMoKTsKKyAgICBtX2ltYWdlU291
cmNlRm9ybWF0ID0gU291cmNlRm9ybWF0QkdSQTg7CisgICAgbV9pbWFnZVNvdXJjZVVucGFja0Fs
aWdubWVudCA9IDA7CiAKLSAgICBvdXRwdXRWZWN0b3IucmVzaXplKHBhY2tlZFNpemUpOwotCi0g
ICAgcmV0dXJuIHBhY2tQaXhlbHMocXRJbWFnZS5jb25zdEJpdHMoKSwgU291cmNlRm9ybWF0QkdS
QTgsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgYWxw
aGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250
ZXh0TG9zdENhbGxiYWNrPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAppbmRleCAxN2Fk
ODNkOGY4Mzc1ZmUwYzkzMTU4YzY0NWIwZjUyMGUxNTE3MmU4Li4zOTBiZWNjMTU4NDA2MmQwMDVm
NzE3NDFkYTA0ODRmNjlhN2Y1NTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCkBA
IC00Miw1MiArNDIsNTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVj
dG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIoKQogewot
ICAgIGlmICghaW1hZ2UpCisgICAgaWYgKHNraWFJbWFnZSkKKyAgICAgICAgc2tpYUltYWdlLT5i
aXRtYXAoKS51bmxvY2tQaXhlbHMoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VMb2NrZXI6OmdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gcGl4ZWxzOwotICAgIE5hdGl2
ZUltYWdlU2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7Ci0gICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CisgICAgc2tp
YUltYWdlID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBtX2Fs
cGhhT3AgPSBBbHBoYURvTm90aGluZzsKICAgICBib29sIGhhc0FscGhhID0gc2tpYUltYWdlID8g
IXNraWFJbWFnZS0+Yml0bWFwKCkuaXNPcGFxdWUoKSA6IHRydWU7Ci0gICAgaWYgKCghc2tpYUlt
YWdlIHx8IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJlbXVs
dGlwbHlBbHBoYSkpICYmIGltYWdlLT5kYXRhKCkpIHsKKyAgICBpZiAoKCFza2lhSW1hZ2UgfHwg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFs
cGhhKSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7CiAgICAgICAgIEltYWdlU291cmNlIGRlY29kZXIo
SW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFu
ZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVB
cHBsaWVkKTsKICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgcmF3IHVucHJlbXVsdGlwbGllZCBp
bWFnZSBkYXRhIAotICAgICAgICBkZWNvZGVyLnNldERhdGEoaW1hZ2UtPmRhdGEoKSwgdHJ1ZSk7
CisgICAgICAgIGRlY29kZXIuc2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUpOwogICAgICAg
ICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpIHx8ICFkZWNvZGVyLmZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgoMCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGhhc0FscGhhID0g
ZGVjb2Rlci5mcmFtZUhhc0FscGhhQXRJbmRleCgwKTsKLSAgICAgICAgcGl4ZWxzID0gYWRvcHRQ
dHIoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOwotICAgICAgICBpZiAoIXBpeGVscy5n
ZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhlbHMtPmJpdG1hcCgpLndp
ZHRoKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkuaGVpZ2h0KCkpCisgICAgICAgIG1fbmF0aXZlSW1h
Z2UgPSBhZG9wdFB0cihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7CisgICAgICAgIGlm
ICghbV9uYXRpdmVJbWFnZS5nZXQoKSB8fCAhbV9uYXRpdmVJbWFnZS0+aXNEYXRhQ29tcGxldGUo
KSB8fCAhbV9uYXRpdmVJbWFnZS0+Yml0bWFwKCkud2lkdGgoKSB8fCAhbV9uYXRpdmVJbWFnZS0+
Yml0bWFwKCkuaGVpZ2h0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFNr
Qml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IHBpeGVscy0+Yml0bWFwKCkuY29uZmlnKCk7Cisg
ICAgICAgIFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IG1fbmF0aXZlSW1hZ2UtPmJpdG1h
cCgpLmNvbmZpZygpOwogICAgICAgICBpZiAoc2tpYUNvbmZpZyAhPSBTa0JpdG1hcDo6a0FSR0Jf
ODg4OF9Db25maWcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHNraWFJbWFn
ZSA9IHBpeGVscy5nZXQoKTsKKyAgICAgICAgc2tpYUltYWdlID0gbV9uYXRpdmVJbWFnZS5nZXQo
KTsKICAgICAgICAgaWYgKGhhc0FscGhhICYmIHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAg
ICBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb1ByZW11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBo
YU9wID0gQWxwaGFEb1ByZW11bHRpcGx5OwogICAgIH0gZWxzZSBpZiAoIXByZW11bHRpcGx5QWxw
aGEgJiYgaGFzQWxwaGEpCi0gICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBs
eTsKKyAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgaWYgKCFza2lh
SW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBTa0JpdG1hcCYgc2tpYUlt
YWdlUmVmID0gc2tpYUltYWdlLT5iaXRtYXAoKTsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2so
c2tpYUltYWdlUmVmKTsKLSAgICBBU1NFUlQoc2tpYUltYWdlUmVmLnJvd0J5dGVzKCkgPT0gc2tp
YUltYWdlUmVmLndpZHRoKCkgKiA0KTsKLSAgICB1bnNpZ25lZCBpbnQgcGFja2VkU2l6ZTsKLSAg
ICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgotICAg
IGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHNraWFJbWFnZVJlZi53
aWR0aCgpLCBza2lhSW1hZ2VSZWYuaGVpZ2h0KCksIDEsICZwYWNrZWRTaXplLCAwKSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBvdXRw
dXRWZWN0b3IucmVzaXplKHBhY2tlZFNpemUpOwotICAgIHJldHVybiBwYWNrUGl4ZWxzKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZVJlZi5nZXRQaXhlbHMoKSksCi0g
ICAgICAgICAgICAgICAgICAgICAgU0tfQjMyX1NISUZUID8gU291cmNlRm9ybWF0UkdCQTggOiBT
b3VyY2VGb3JtYXRCR1JBOCwKLSAgICAgICAgICAgICAgICAgICAgICBza2lhSW1hZ2VSZWYud2lk
dGgoKSwgc2tpYUltYWdlUmVmLmhlaWdodCgpLCAwLAotICAgICAgICAgICAgICAgICAgICAgIGZv
cm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CisKKyAgICBt
X2ltYWdlU291cmNlRm9ybWF0ID0gU0tfQjMyX1NISUZUID8gU291cmNlRm9ybWF0UkdCQTggOiBT
b3VyY2VGb3JtYXRCR1JBODsKKworICAgIG1faW1hZ2VXaWR0aCA9IHNraWFJbWFnZS0+Yml0bWFw
KCkud2lkdGgoKTsKKyAgICBtX2ltYWdlSGVpZ2h0ID0gc2tpYUltYWdlLT5iaXRtYXAoKS5oZWln
aHQoKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOyAKKworICAgIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQgPSAwOyAK
KyAgICBza2lhSW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKyAgICBtX2ltYWdlUGl4ZWxE
YXRhID0gc2tpYUltYWdlLT5iaXRtYXAoKS5nZXRQaXhlbHMoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175737</attachid>
            <date>2012-11-22 22:33:04 -0800</date>
            <delta_ts>2012-11-23 01:21:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121123142808.patch</filename>
            <type>text/plain</type>
            <size>48672</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NTU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTJiOWI2MzA2MTUxZDQx
YmIwZmE5Y2JmNzY2Y2RkMmQxMzg1YjA3ZC4uOTdlN2E2YmQ1MDhiOWU4MDZiZTc4NDlhMzQxZmI4
YjAzZmQ4OWI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTExLTIyICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgbWVtb3J5IGNvcHkgb3Ig
Y29udmVyc2lvbnMgaW4gdGhlIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZm9yIEhUTUxW
aWRlb0VsZW1lbnQgd2hpY2ggbWF5IGJlIGF2b2lkZWQuCisgICAgICAgIFR3byBtYWluIGNoYW5n
ZXMgYXJlIG9jY3VyZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gCisgICAgICAgIC0gT25lIGlz
IGZvY3VzZWQgb24gdGhlIGZyYW1ld29yayB0byBnZXQgYSBwb2ludGVyIHRvIHRoZSBzb3VyY2Ug
ZGF0YSB0aGF0IGJlIGNhbiBzdGVhZGlseSB1c2VkIHdpdGggaXRzIGxpZmV0aW1lIGFuZCBzY29w
ZSBjb250cm9uYWJsZS4KKyAgICAgICAgLSBUaGUgb3RoZXIgaXMgZm9jdXNlZCBvbiB0aGUgcGVy
Zm9ybWFuY2UgaW1wcm92ZW1lbnQsIHN1Y2ggYXMgQmFja2luZ1N0b3JlIGNvcHksIGFscGhhIHZh
bHVlIHJldmlzZSBhbmQgZmFzdCBnbyB0aHJvdWdoIHBhdGggd2l0aG91dCBjb252ZXJzaW9uLiAK
KworICAgICAgICBBbHJlYWR5IGNvdmVyZWQgYnkgY3VycmVudCB0ZXN0cy4KKworICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRv
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJESW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFN1YkltYWdlMkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oOgorICAgICAgICAoV2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChJbWFnZUxv
Y2tlcik6IGtlZXBzIHRoZSBzdGF0ZXMgb2YgdGhlIEltYWdlLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpJbWFnZUxvY2tlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmltYWdlUGl4ZWxEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6aW1hZ2VX
aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6
OmltYWdlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUxvY2tlcjo6aW1hZ2VTb3VyY2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlTG9ja2VyOjppbWFnZUFscGhhT3ApOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjppbWFnZVNvdXJjZVVucGFja0FsaWdubWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdl
TG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2Nr
ZXI6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmdldElt
YWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNERWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxv
Y2tlcjo6fkltYWdlTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6
OmdldEltYWdlRGF0YSk6CisKIDIwMTItMTEtMjIgIFJhZmFlbCBCcmFuZGFvICA8cmFmYWVsLmxv
Ym9Ab3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBSZW1vdmUgUExBVEZPUk0oSEFJS1UpIGxlZnRv
dmVycyBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAppbmRleCA3MGNiODUzYzM3OWZmMDY1Yjk4N2Q5ZGVlMTA0MzU3ZDI4
MWJkYjgxLi44YmQ0NjZhYTkyNWQzN2I3NDU4MGY5NDYxYjc5YjVhNTljNWY5NzAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAKQEAgLTM2MTEsMjIgKzM2MTEsNDUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGUKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRv
bVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBlYyA9IDA7CiAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0
KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQogICAgICAgICByZXR1cm47CiAgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEo
aW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIGRhdGEpKSB7CisK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXIgaW1hZ2VMb2NrZXIoaW1hZ2UsIGRv
bVNvdXJjZSk7CisgICAgaWYgKCFpbWFnZUxvY2tlci5nZXRJbWFnZURhdGEocHJlbXVsdGlwbHlB
bHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9ORSkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBz
b3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VMb2NrZXIuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAgICBH
cmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VMb2NrZXIuaW1hZ2VBbHBo
YU9wKCk7CisgICAgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUxvY2tlci5pbWFnZVBpeGVs
RGF0YSgpOworCisgICAgLy8gRG8gc29tZSBvcHRpbWl6YXRpb24gb24gYWxwaGFPcCB3aGVuIElt
YWdlSHRtbERvbVNvdXJjZSBpcyBWaWRlbyBlbGVtZW50CisgICAgLy8gc2luY2UgdGhlIGFscGhh
IHZhbHVlIGlzIHRoZSBzYW1lIGZvciBhbGwgcGl4ZWxzCisgICAgaWYgKGRvbVNvdXJjZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6SFRNTERvbVZpZGVvKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIg
YWxwaGFWYWx1ZSA9ICoocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VQaXhl
bERhdGEpICsgMyk7CisgICAgICAgIGlmICgoYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
QWxwaGFEb1VubXVsdGlwbHkgJiYgKGFscGhhVmFsdWUgPT0gMHhGRiB8fCBhbHBoYVZhbHVlID09
IDB4MCkpCisgICAgICAgICAgICB8fCAoYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFEb1ByZW11bHRpcGx5ICYmIGFscGhhVmFsdWUgPT0gMHhGRikpCisgICAgICAgICAgICBhbHBo
YU9wID0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nOworICAgIH0KKworICAgIGJv
b2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlNvdXJjZUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZykKKyAgICAg
ICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2Nv
bnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5
cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUxvY2tlci5pbWFnZVdp
ZHRoKCksIGltYWdlTG9ja2VyLmltYWdlSGVpZ2h0KCksIGltYWdlTG9ja2VyLmltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGlt
YWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQogICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhJbWFn
ZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwgMCwKLSAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEu
ZGF0YSgpLCBlYyk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwg
bmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlTG9ja2VyLmltYWdlUGl4ZWxEYXRh
KCksIGVjKTsKICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKICAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91
bnBhY2tBbGlnbm1lbnQpOwogfQpAQCAtMzY5MCw3ICszNzEzLDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdGV4SW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZElt
YWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLAorICAgIHRleEltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwKICAgICAgICAgICAgICAgICAgICBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIApAQCAtMzcyOSwxMiAr
Mzc1MiwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgaWYgKGltYWdlRGF0YSkKICAg
ICAgICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIHRleEltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+
Y29waWVkSW1hZ2UoKSwKKyAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6SFRNTERvbUNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKICNpZiBFTkFCTEUo
VklERU8pCi1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJh
bWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bh
c3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2Uo
SFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29w
eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVv
V2lkdGgoKSB8fCAhdmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgIm5v
IHZpZGVvIik7CkBAIC0zNzUzLDcgKzM3NzYsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZAog
ICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
ICAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBpbnN0
ZWFkIG9mIENQVSByZWFkYmFjay4KICAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRl
eHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2Uo
Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9y
ZUNvcHkpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LApAQCAt
Mzc2MiwxMCArMzc4NSwxOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgZWMgPSAwOwog
ICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW1h
Z2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIGVjKTsKKworLy8gRklYTUU6IG9u
bHkgU0tJQSBwb3J0IGlzIGVuYWJsZWQgdG8gZ28gdGhyb3VnaCB0aGUgb3B0aW1pemVkIHBhdGgs
IG90aGVyIHBvcnRzIG1heSBiZSBlbmFibGVkIGFzIHdlbGwgYWZ0ZXIgdmVyaWZpZWQuICAgIAor
I2lmIFVTRShTS0lBKQorICAgIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSA9IERv
bnRDb3B5QmFja2luZ1N0b3JlOworI2Vsc2UKKyAgICBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlOworI2VuZGlmCisgICAgUmVmUHRyPEltYWdlPiBp
bWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBiYWNraW5nU3RvcmVDb3B5LCBlYyk7CiAg
ICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIHRleEltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKworICAgIHRleEltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SFRNTERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KICNlbmRpZgogCkBAIC0zODQ3LDIyICsz
ODc4LDQ1IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDCiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRt
bERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAo
IW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwg
cHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9ORSwgZGF0YSkpIHsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUxvY2tlciBpbWFnZUxvY2tlcihpbWFnZSwgZG9tU291cmNlKTsgIAorICAgIGlmICghaW1hZ2VM
b2NrZXIuZ2V0SW1hZ2VEYXRhKHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNv
bnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpKSB7CiAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2Uy
RCIsICJiYWQgaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpTb3VyY2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUxvY2tl
ci5pbWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFs
cGhhT3AgPSBpbWFnZUxvY2tlci5pbWFnZUFscGhhT3AoKTsKKyAgICB2b2lkKiBpbWFnZVBpeGVs
RGF0YSA9IGltYWdlTG9ja2VyLmltYWdlUGl4ZWxEYXRhKCk7CisKKyAgICAvLyBEbyBzb21lIG9w
dGltaXphdGlvbiBvbiBhbHBoYU9wIHdoZW4gSW1hZ2VIdG1sRG9tU291cmNlIGlzIFZpZGVvIGVs
ZW1lbnQKKyAgICAvLyBzaW5jZSB0aGUgYWxwaGEgdmFsdWUgaXMgdGhlIHNhbWUgZm9yIGFsbCBw
aXhlbHMKKyAgICBpZiAoZG9tU291cmNlID09IEdyYXBoaWNzQ29udGV4dDNEOjpIVE1MRG9tVmlk
ZW8pIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYVZhbHVlID0gKihyZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihpbWFnZVBpeGVsRGF0YSkgKyAzKTsKKyAgICAgICAgaWYgKChh
bHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSAmJiAoYWxwaGFW
YWx1ZSA9PSAweEZGIHx8IGFscGhhVmFsdWUgPT0gMHgwKSkKKyAgICAgICAgICAgIHx8IChhbHBo
YU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHkgJiYgYWxwaGFWYWx1
ZSA9PSAweEZGKSkKKyAgICAgICAgICAgIGFscGhhT3AgPSBHcmFwaGljc0NvbnRleHQzRDo6QWxw
aGFEb05vdGhpbmc7CisgICAgfQorICAgIAorICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVl
OworICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNv
dXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE4ICYm
IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYURvTm90aGluZykKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxz
ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEo
aW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3Vy
Y2VEYXRhRm9ybWF0LCBpbWFnZUxvY2tlci5pbWFnZVdpZHRoKCksIGltYWdlTG9ja2VyLmltYWdl
SGVpZ2h0KCksIGltYWdlTG9ja2VyLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEp
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAh
PSAxKQogICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRhKCksIGVjKTsKKyAgICB0
ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+
d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8g
ZGF0YS5kYXRhKCkgOiBpbWFnZUxvY2tlci5pbWFnZVBpeGVsRGF0YSgpLCBlYyk7CiAgICAgaWYg
KG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWko
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsK
IH0KQEAgLTM5MjQsOCArMzk3OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgICAg
IGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHRleFN1Yklt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkp
LAotICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9y
UmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUlt
YWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKQEAgLTM5
NDYsNyArMzk5OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgaWYgKGltYWdlRGF0
YSkKICAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5j
b3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SFRNTERvbUNhbnZhcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBlYyk7CiB9CiAKQEAgLTM5NTcsMTAgKzQwMTAsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW4KICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgZWMp
OworLy8gRklYTUU6IG9ubHkgU0tJQSBwb3J0IGlzIGVuYWJsZWQgdG8gZ28gdGhyb3VnaCB0aGUg
b3B0aW1pemVkIHBhdGgsIG90aGVyIHBvcnRzIG1heSBiZSBlbmFibGVkIGFzIHdlbGwgYWZ0ZXIg
dmVyaWZpZWQuCisjaWYgVVNFKFNLSUEpCisgICAgQmFja2luZ1N0b3JlQ29weSBiYWNraW5nU3Rv
cmVDb3B5ID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisjZWxzZQorICAgIEJhY2tpbmdTdG9yZUNv
cHkgYmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmU7CisjZW5kaWYKKyAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIGJhY2tpbmdTdG9yZUNv
cHksIGVjKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBp
bWFnZS5nZXQoKSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7
CisKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SFRNTERvbVZp
ZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oCmluZGV4IDg2ZWI4MjlmMjI3MGNhMmJhZDA5ZmY0ODM4OWJhYmE0YjhkNjgwMDku
LmQ0ODZhNjE1NGE1NzUzOTNkM2I0OTZiNDRkYTA4NThjNzFkZmZiMTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUg
IkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXZWJHTEdl
dEluZm8uaCIKIApAQCAtMzcyLDcgKzM3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICBQ
YXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhU
TUxWaWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7CiAjZW5k
aWYKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwpAQCAtNTMzLDE1
ICs1MzQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgSW1hZ2UqLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJESW1w
bChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1Yklt
YWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSog
aW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3Vy
Y2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwog
CiAgICAgdm9pZCBoYW5kbGVOUE9UVGV4dHVyZXMoY29uc3QgY2hhciosIGJvb2wpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5jcHAKaW5kZXggYTk4YjU0NmJhZjdlODEzYjkyODk4MmE3ZGM3MjkzNzVjNTNjNDg0Zi4uNDhi
ZjI5ZmQ3Y2I5NDZiMzczZTY5ZWQ5ZjdhMDRmN2I3YzJlMGM4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcApAQCAt
MTY5LDI5ICsxNjksNDkgQEAgR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVJbWFn
ZVNpemVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHkKIH0KIAogYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5k
Q29sb3JQcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSkKKyAgICB2b2lkKiBwaXhl
bHMsCisgICAgR0MzRGVudW0gZm9ybWF0LAorICAgIEdDM0RlbnVtIHR5cGUsCisgICAgYm9vbCBm
bGlwWSwKKyAgICBBbHBoYU9wIGFscGhhT3AsCisgICAgU291cmNlRGF0YUZvcm1hdCBzb3VyY2VG
b3JtYXQsIAorICAgIHVuc2lnbmVkIHdpZHRoLAorICAgIHVuc2lnbmVkIGhlaWdodCwKKyAgICB1
bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCisgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRh
KQoreworICAgIGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFn
ZXRJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlwbHlBbHBoYSwgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUsIGRhdGEpKQorCisgICAgdW5zaWduZWQgcGFja2VkU2l6ZTsK
KyAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgor
ICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWln
aHQsIDEsICZwYWNrZWRTaXplLCAwKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAg
IGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMp
LAorICAgICAgICBzb3VyY2VGb3JtYXQsCisgICAgICAgIHdpZHRoLAorICAgICAgICBoZWlnaHQs
CisgICAgICAgIHNvdXJjZVVucGFja0FsaWdubWVudCwKKyAgICAgICAgZm9ybWF0LAorICAgICAg
ICB0eXBlLAorICAgICAgICBhbHBoYU9wLAorICAgICAgICBkYXRhLmRhdGEoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBpZiAoZmxpcFkpIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGNv
bXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgICAgIHVuc2lnbmVkIGNv
bXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CiAgICAgICAgIGlmICghY29tcHV0
ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudHNQZXJQaXhlbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50KSkK
KyAgICAgICAgICAgICZjb21wb25lbnRzUGVyUGl4ZWwsCisgICAgICAgICAgICAmYnl0ZXNQZXJD
b21wb25lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBUaGUgaW1h
Z2UgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCwgYW5kIHdlIHVwbG9hZCBpdCBhcyBzdWNoLgotICAg
ICAgICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25tZW50ID0gMTsKLSAgICAgICAgZmxpcFZlcnRp
Y2FsbHkoZGF0YS5kYXRhKCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50
LAotICAgICAgICAgICAgICAgICAgICAgICB1bnBhY2tBbGlnbm1lbnQpOworICAgICAgICB1bnNp
Z25lZCB1bnBhY2tBbGlnbm1lbnQgPSAxOworICAgICAgICBmbGlwVmVydGljYWxseShkYXRhLmRh
dGEoKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5
dGVzUGVyQ29tcG9uZW50LAorICAgICAgICAgICAgdW5wYWNrQWxpZ25tZW50KTsKICAgICB9CisK
ICAgICBpZiAoSW1hZ2VPYnNlcnZlciAqb2JzZXJ2ZXIgPSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigp
KQogICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdyhpbWFnZSk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC05NjMsNyArOTgzLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCQThQcmVtdWx0aXBs
eShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmEKIHZvaWQgcGFja09uZVJv
d09mUkdCQThUb1JHQkE4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZmxvYXQg
c2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEu
MGYpOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNv
dXJjZVszXSA6IDEuMGY7CiAgICAgICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVGYWN0b3IpOwogICAg
ICAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxm
bG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKICAgICAgICAgdWludDhfdCBzb3VyY2VC
ID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsyXSkgKiBz
Y2FsZUZhY3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA0ZWRlMGY4MTdmNmMwYzMwYjdhM2U1NTI4OTZkZTA2
ZDQ3M2IyOTAwLi43N2EyNDExZTJhM2VjMDRmN2MxMDRmMTdmYzU2OTZhYmZkOTQyMTM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaAogI2Rl
ZmluZSBHcmFwaGljc0NvbnRleHQzRF9oCiAKKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUxheWVyLmgiCkBAIC0xMDEsNiArMTAyLDcgQEAgY2xhc3MgRXh0ZW5zaW9uczNEUXQ7CiBj
bGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNz
IEltYWdlU291cmNlOwogY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIElu
dFNpemU7CkBAIC01NjQsMTggKzU2Niw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGltYWdlU2l6ZUluQnl0ZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBwYWRkaW5nSW5CeXRl
cyk7CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIGlu
dG8gdGhlIHBhc3NlZCBWZWN0b3IsCi0gICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2Nv
cmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKLSAgICAvLyBhbmQgb2JleWluZyB0
aGUgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGFuZCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZQotICAgIC8vIGZsYWdzLiBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBi
b29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2UqLAotICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQogICAgIC8vIEV4dHJhY3RzIHRoZSBjb250
ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCiAgICAg
Ly8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBh
bmQgdHlwZSwKICAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxw
aGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQpAQCAtODc0LDM0ICs4NjQsMTEgQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIHVuc2lnbmVkIGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0pOwogCi0g
IHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyos
IFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKLQotICAgIC8vIEVhY2ggcGxhdGZvcm0g
bXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgotICAgIC8vCi0g
ICAgLy8gR2V0cyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIEltYWdlIGludG8gb3V0cHV0VmVjdG9y
IGluIHRoZQotICAgIC8vIGZvcm1hdCBzcGVjaWZpZWQgYnkgdGhlIChPcGVuR0wtc3R5bGUpIGZv
cm1hdCBhbmQgdHlwZQotICAgIC8vIGFyZ3VtZW50cy4gRGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRo
ZSBvdXRwdXRWZWN0b3IgY29udGFpbnMKLSAgICAvLyB1aW50OF90LCBpZiB0aGUgZm9ybWF0IGFu
ZCB0eXBlIHNwZWNpZnkgcGFja2VkIHBpeGVscywgdGhlbgotICAgIC8vIGl0IHdpbGwgZXNzZW50
aWFsbHkgY29udGFpbiB1aW50MTZfdCBhZnRlciB0aGUgZXh0cmFjdGlvbgotICAgIC8vIHByb2Nl
c3MuCi0gICAgLy8KLSAgICAvLyBJZiBwcmVtdWx0aXBseUFscGhhIGlzIHRydWUsIHRoZSBhbHBo
YSBjaGFubmVsLCBpZiBhbnksCi0gICAgLy8gd2lsbCBiZSBtdWx0aXBsaWVkIGludG8gdGhlIGNv
bG9yIGNoYW5uZWxzIGR1cmluZyB0aGUKLSAgICAvLyBleHRyYWN0aW9uIHByb2Nlc3MuIFRoaXMg
cHJlbXVsdGlwbGljYXRpb24gb2NjdXJzIGJlZm9yZQotICAgIC8vIGFueSBwYWNraW5nIG9mIHBp
eGVsIGRhdGEuCi0gICAgLy8KLSAgICAvLyBJZiBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSBp
cyB0cnVlLCBnYW1tYSBjb3JyZWN0aW9uIGFuZCBJQ0MKLSAgICAvLyBwcm9maWxlIHdvbid0IGJl
IGFwcGxpZWQuCi0gICAgLy8KLSAgICAvLyBObyB2ZXJ0aWNhbCBmbGlwIG9mIHRoZSBpbWFnZSBk
YXRhIGlzIHBlcmZvcm1lZCBieSB0aGlzCi0gICAgLy8gbWV0aG9kLgotICAgIHN0YXRpYyBib29s
IGdldEltYWdlRGF0YShJbWFnZSosCi0gICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpOworICAgIGVudW0gSW1hZ2VIdG1sRG9tU291cmNl
IHsKKyAgICAgICAgSHRtbERvbUltYWdlID0gMCwKKyAgICAgICAgSFRNTERvbUNhbnZhcyA9IDEs
CisgICAgICAgIEhUTUxEb21WaWRlbyA9IDIKKyAgICB9OwogCiAgICAgLy8gUG9zc2libGUgYWxw
aGEgb3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9jY3VyIGR1cmluZwogICAgIC8vIHBpeGVs
IHBhY2tpbmcuIEZJWE1FOiBrQWxwaGFEb1VubXVsdGlwbHkgaXMgbG9zc3kgYW5kIG11c3QKQEAg
LTkxMiw2ICs4NzksNTEgQEAgcHVibGljOgogICAgICAgICBBbHBoYURvVW5tdWx0aXBseSA9IDIK
ICAgICB9OwogCisgICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFn
ZSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEg
YWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCisgICAgLy8gYW5kIG9iZXlp
bmcgdGhlIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBhbmQgaWdub3JlR2FtbWFBbmRDb2xvclBy
b2ZpbGUKKyAgICAvLyBmbGFncy4gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0
aWMgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiwgdm9pZCogcGl4ZWxzLCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIFNvdXJjZURhdGFGb3Jt
YXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25l
ZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAgICBj
bGFzcyBJbWFnZUxvY2tlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5JbWFnZUxv
Y2tlcigpOworICAgICAgICBib29sIGdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOworCisgICAgICAgIEltYWdlTG9ja2Vy
KEltYWdlKiBpbWFnZSwgSW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSkge21faW1hZ2UgPSBp
bWFnZTsgbV9pbWFnZUh0bWxEb21Tb3VyY2UgPSBkb21Tb3VyY2U7fTsKKyAgICAgICAgdm9pZCog
aW1hZ2VQaXhlbERhdGEoKSB7cmV0dXJuIG1faW1hZ2VQaXhlbERhdGE7fTsKKyAgICAgICAgdW5z
aWduZWQgaW1hZ2VXaWR0aCgpIHtyZXR1cm4gbV9pbWFnZVdpZHRoO307CisgICAgICAgIHVuc2ln
bmVkIGltYWdlSGVpZ2h0KCkge3JldHVybiBtX2ltYWdlSGVpZ2h0O307CisgICAgICAgIFNvdXJj
ZURhdGFGb3JtYXQgaW1hZ2VTb3VyY2VGb3JtYXQoKSB7cmV0dXJuIG1faW1hZ2VTb3VyY2VGb3Jt
YXQ7fTsKKyAgICAgICAgQWxwaGFPcCBpbWFnZUFscGhhT3AoKSB7cmV0dXJuIG1fYWxwaGFPcDt9
CisgICAgICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkge3JldHVybiBt
X2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50O307IAorICAgIHByaXZhdGU6CisjaWYgVVNFKFNL
SUEpCisgICAgICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IG1fbmF0aXZlSW1hZ2U7CisgICAg
ICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlOworI2VsaWYgVVNFKENBSVJPKQorICAgICAg
ICBJbWFnZVNvdXJjZSogbV9kZWNvZGVyOworICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBtX2ltYWdlU3VyZmFjZTsKKyNlbGlmIFVTRShDRykKKyAgICAgICAgQ0dJbWFnZVJlZiBjZ0lt
YWdlOworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZGVjb2RlZEltYWdlOworICAgICAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwaXhlbERhdGE7CisjZWxpZiBQTEFURk9STShRVCkKKyAg
ICAgICAgUUltYWdlIG1fcXRJbWFnZTsKKyNlbmRpZgorICAgICAgICBJbWFnZSogbV9pbWFnZTsK
KyAgICAgICAgSW1hZ2VIdG1sRG9tU291cmNlIG1faW1hZ2VIdG1sRG9tU291cmNlOworICAgICAg
ICB2b2lkKiBtX2ltYWdlUGl4ZWxEYXRhOworICAgICAgICB1bnNpZ25lZCBtX2ltYWdlV2lkdGg7
CisgICAgICAgIHVuc2lnbmVkIG1faW1hZ2VIZWlnaHQ7CisgICAgICAgIFNvdXJjZURhdGFGb3Jt
YXQgbV9pbWFnZVNvdXJjZUZvcm1hdDsKKyAgICAgICAgQWxwaGFPcCBtX2FscGhhT3A7CisgICAg
ICAgIHVuc2lnbmVkIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7CisgICAgfTsKKworICAg
IHByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyos
IFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKKwogICAgIC8vIEhlbHBlciBmb3IgZ2V0
SW1hZ2VEYXRhIHdoaWNoIGltcGxlbWVudHMgcGFja2luZyBvZiBwaXhlbAogICAgIC8vIGRhdGEg
aW50byB0aGUgc3BlY2lmaWVkIE9wZW5HTCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIHR5cGUuCiAg
ICAgLy8gQSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUg
c291cmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRp
dmVJbWFnZVB0ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1h
Z2VQdHIuaAppbmRleCBjOThmOGMyNWE5YTg3NmM0YWI2ZTQwODY4YzJkYmNiMjc2ZDBkY2QwLi4w
NTMwYWRlMTI3OTdkZjBmMjA0YTg1ODgyYjg1Y2I1YTRhMDNjY2U4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKQEAgLTM0LDYgKzM0
LDcgQEAgY2xhc3Mgd3hHcmFwaGljc0JpdG1hcDsKICNlbGlmIFVTRShDRykKIHR5cGVkZWYgc3Ry
dWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJO
YXRpdmVJbWFnZVF0LmgiCiAjaW5jbHVkZSA8cWdsb2JhbC5oPgogUVRfQkVHSU5fTkFNRVNQQUNF
CiBjbGFzcyBRUGl4bWFwOwpAQCAtNDEsNiArNDIsNyBAQCBRVF9FTkRfTkFNRVNQQUNFCiAjZWxp
ZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VDYWlyby5oIgogI2VsaWYgVVNFKFNL
SUEpCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBOYXRpdmVJbWFnZVNraWE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3Bw
CmluZGV4IDcwMzNmYTZkYTY3NjEwMTM2YjQ0M2JmNjkxZDMxYzZmMzZkNDYwZjUuLjk2NzBmM2Rk
ODRmMzk5ZTAxZDUxODVmZTBhMzRiMjI0OTk2ZmQxOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dDNEQ2Fpcm8uY3BwCkBAIC0xNjMsNDAgKzE2Myw0OCBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdy
YXBoaWNzQ29udGV4dDNEKCkKICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7
CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2Us
IHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYg
b3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2Nr
ZXIoKQogewotICAgIGlmICghaW1hZ2UpCisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgZGVs
ZXRlIG1fZGVjb2RlcjsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6
OmdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgLy8gV2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZl
IGltYWdlIGlzIGp1c3QgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRhdGEuCi0gICAgSW1hZ2VTb3Vy
Y2UgZGVjb2RlcihwcmVtdWx0aXBseUFscGhhID8gSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlw
bGllZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1t
YUFuZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2Zp
bGVBcHBsaWVkKTsKLSAgICBBbHBoYU9wIGFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKLSAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2U7Ci0gICAgaWYgKGltYWdlLT5kYXRh
KCkpIHsKLSAgICAgICAgZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAg
IG1fZGVjb2RlciA9IG5ldyBJbWFnZVNvdXJjZShwcmVtdWx0aXBseUFscGhhID8gSW1hZ2VTb3Vy
Y2U6OkFscGhhUHJlbXVsdGlwbGllZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxp
ZWQsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxp
ZWQpOworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW1h
Z2VTb3VyY2UmIGRlY29kZXIgPSAqbV9kZWNvZGVyOworCisgICAgbV9hbHBoYU9wID0gQWxwaGFE
b05vdGhpbmc7CisgICAgaWYgKG1faW1hZ2UtPmRhdGEoKSkgeworICAgICAgICBkZWNvZGVyLnNl
dERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1l
Q291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBPd25QdHI8TmF0aXZlSW1hZ2VDYWlybz4gbmF0aXZl
SW1hZ2UgPSBhZG9wdFB0cihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7Ci0gICAgICAg
IGltYWdlU3VyZmFjZSA9IG5hdGl2ZUltYWdlLT5zdXJmYWNlKCk7CisgICAgICAgIG1faW1hZ2VT
dXJmYWNlID0gbmF0aXZlSW1hZ2UtPnN1cmZhY2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBp
bWFnZVN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c3VyZmFj
ZSgpOworICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCktPnN1cmZhY2UoKTsKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQot
ICAgICAgICAgICAgYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAgICAgICAgbV9h
bHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgfQogCi0gICAgaWYgKCFpbWFnZVN1cmZh
Y2UpCisgICAgaWYgKCFtX2ltYWdlU3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2VTdXJmYWNl
LmdldCgpKTsKLSAgICBpbnQgaGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQorICAgIG1f
aW1hZ2VXaWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1faW1hZ2VTdXJmYWNl
LmdldCgpKTsKKyAgICBtX2ltYWdlSGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9p
bWFnZUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2Zvcm1hdChpbWFnZVN1cmZhY2UuZ2V0KCkpICE9IENBSVJPX0ZPUk1BVF9B
UkdCMzIpCisgICAgaWYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChtX2ltYWdlU3Vy
ZmFjZS5nZXQoKSkgIT0gQ0FJUk9fRk9STUFUX0FSR0IzMikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgdW5zaWduZWQgaW50IHNyY1VucGFja0FsaWdubWVudCA9IDE7Ci0gICAgc2l6ZV90
IGJ5dGVzUGVyUm93ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFj
ZS5nZXQoKSk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKICAgICBzaXplX3QgYml0c1BlclBpeGVs
ID0gMzI7CiAgICAgdW5zaWduZWQgaW50IHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQ
aXhlbCAvIDggKiB3aWR0aDsKICAgICBpZiAocGFkZGluZykgewpAQCAtMjA1LDE0ICsyMTMsMTAg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgdW5z
aWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQKICAgICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25t
ZW50OwogICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1
dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAgaWYgKGNvbXB1
dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgMSwgJnBhY2tl
ZFNpemUsIDApICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG91dHB1dFZlY3Rvci5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICByZXR1
cm4gcGFja1BpeGVscyhjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5n
ZXQoKSksIFNvdXJjZUZvcm1hdEJHUkE4LAotICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIHNyY1VucGFja0FsaWdubWVudCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBvdXRwdXRW
ZWN0b3IuZGF0YSgpKTsKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOworICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQg
PSBTb3VyY2VGb3JtYXRCR1JBODsKKyAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0g
c3JjVW5wYWNrQWxpZ25tZW50OworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxz
LCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBj
YW52YXNIZWlnaHQsIFBsYXRmb3JtQ29udGV4dENhaXJvKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQz
RENHLmNwcAppbmRleCBhYzAwYzQzZGUwYWE0ZGIxMTdhZTYxMjRiNTg0NjM4MWI0OTc0ZmU2Li4x
M2E0MDU0NTliNmUxMWFiN2JkNGE1OTcyOGRjY2FmYWNkY2VhNjk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQz
RENHLmNwcApAQCAtODksMzQgKzg5LDMxIEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6U291
cmNlRGF0YUZvcm1hdCBnZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVkIGludCBjb21wCiAgICAg
cmV0dXJuIGZvcm1hdFRhYmxlW2Zvcm1hdEJhc2VdWyhpczE2Qml0Rm9ybWF0ID8gMiA6IDApICsg
KGJpZ0VuZGlhbiA/IDEgOiAwKV07CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldElt
YWdlRGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcigpCiB7Ci0gICAgaWYgKCFpbWFnZSkK
K30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YShi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCit7
CisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ0dJbWFnZVJl
ZiBjZ0ltYWdlOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBkZWNvZGVkSW1hZ2U7Ci0gICAg
Ym9vbCBoYXNBbHBoYSA9IGltYWdlLT5pc0JpdG1hcEltYWdlKCkgPyBpbWFnZS0+Y3VycmVudEZy
YW1lSGFzQWxwaGEoKSA6IHRydWU7Ci0gICAgaWYgKChpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSB8fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBpbWFnZS0+ZGF0YSgpKSB7
CisgICAgYm9vbCBoYXNBbHBoYSA9IG1faW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSA/IG1faW1hZ2Ut
PmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgOiB0cnVlOworICAgIGlmICgoaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgbV9pbWFn
ZS0+ZGF0YSgpKSB7CiAgICAgICAgIEltYWdlU291cmNlIGRlY29kZXIoSW1hZ2VTb3VyY2U6OkFs
cGhhTm90UHJlbXVsdGlwbGllZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVH
YW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUln
bm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKLSAgICAg
ICAgZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgICAgICBkZWNvZGVy
LnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZy
YW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZGVjb2RlZElt
YWdlLmFkb3B0Q0YoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOwogICAgICAgICBjZ0lt
YWdlID0gZGVjb2RlZEltYWdlLmdldCgpOwogICAgIH0gZWxzZQotICAgICAgICBjZ0ltYWdlID0g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIGNnSW1hZ2UgPSBt
X2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghY2dJbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdp
ZHRoKGNnSW1hZ2UpOwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1h
Z2UpOwotICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICBtX2ltYWdlV2lkdGggPSBDR0lt
YWdlR2V0V2lkdGgoY2dJbWFnZSk7CisgICAgbV9pbWFnZUhlaWdodCA9IENHSW1hZ2VHZXRIZWln
aHQoY2dJbWFnZSk7CisgICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VIZWlnaHQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNlZSB3aGV0aGVyIHRoZSBpbWFnZSBpcyB1
c2luZyBhbiBpbmRleGVkIGNvbG9yIHNwYWNlLCBhbmQgaWYKQEAgLTEzMSw3ICsxMjgsNyBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAg
ICAvLyB0aGUgY29sb3IgdGFibGUsIHdoaWNoIHdvdWxkIGFsbG93IHVzIHRvIGF2b2lkIHByZW11
bHRpcGx5aW5nIHRoZQogICAgICAgICAvLyBhbHBoYSBjaGFubmVsLiBDcmVhdGlvbiBvZiBhIGJp
dG1hcCBjb250ZXh0IHdpdGggYW4gYWxwaGEgY2hhbm5lbAogICAgICAgICAvLyBkb2Vzbid0IHNl
ZW0gdG8gd29yayB1bmxlc3MgaXQncyBwcmVtdWx0aXBsaWVkLgotICAgICAgICBiaXRtYXBDb250
ZXh0LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIHdpZHRoLCBoZWlnaHQsIDgsIHdp
ZHRoICogNCwKKyAgICAgICAgYml0bWFwQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZSgwLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQsIDgsIG1faW1hZ2VXaWR0aCAqIDQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2
aWNlUkdCQ29sb3JTcGFjZVJlZigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dC
aXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKICAgICAgICAgaWYgKCFiaXRtYXBDb250ZXh0KQpAQCAt
MTM5LDcgKzEzNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFn
ZSogaW1hZ2UsCiAKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwogICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0
aW9uUXVhbGl0eShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7Ci0g
ICAgICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtl
KDAsIDAsIHdpZHRoLCBoZWlnaHQpLCBjZ0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0lt
YWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbV9pbWFnZVdpZHRoLCBt
X2ltYWdlSGVpZ2h0KSwgY2dJbWFnZSk7CiAKICAgICAgICAgLy8gTm93IGRpc2NhcmQgdGhlIG9y
aWdpbmFsIENHIGltYWdlIGFuZCByZXBsYWNlIGl0IHdpdGggYSBjb3B5IGZyb20gdGhlIGJpdG1h
cCBjb250ZXh0LgogICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7CkBAIC0xOTQsMTggKzE5MSwxOCBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAg
ICB9CiAgICAgfQogCi0gICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7
CisgICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CiAgICAgQWxwaGFGb3JtYXQgYWxwaGFG
b3JtYXQgPSBBbHBoYUZvcm1hdE5vbmU7CiAgICAgc3dpdGNoIChDR0ltYWdlR2V0QWxwaGFJbmZv
KGNnSW1hZ2UpKSB7CiAgICAgY2FzZSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0Ogog
ICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRBbHBoYU9w
ID0gQWxwaGFEb1VubXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5t
dWx0aXBseTsKICAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0OwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFGaXJzdDoKICAgICAgICAgLy8gVGhpcyBw
YXRoIGlzIG9ubHkgYWNjZXNzaWJsZSBmb3IgTWFjT1MgZWFybGllciB0aGFuIDEwLjYuNC4KICAg
ICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRBbHBoYU9wID0g
QWxwaGFEb1ByZW11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1ByZW11
bHRpcGx5OwogICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3Q6CkBAIC0yMTQsMTIg
KzIxMSwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGlt
YWdlLAogICAgICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
TGFzdDoKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgbmVlZGVk
QWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxw
aGFEb1VubXVsdGlwbHk7CiAgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0Owog
ICAgICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFMYXN0OgogICAgICAgICBpZiAo
cHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvUHJl
bXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CiAg
ICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0OwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q6CkBAIC0yMzEsMjEgKzIyOCwxNiBAQCBi
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgU291cmNlRGF0YUZvcm1h
dCBzcmNEYXRhRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21wb25lbnRzUGVyUGl4ZWws
IGFscGhhRm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdFbmRpYW5Tb3VyY2UpOwot
ICAgIGlmIChzcmNEYXRhRm9ybWF0ID09IFNvdXJjZUZvcm1hdE51bUZvcm1hdHMpCisKKyAgICBt
X2ltYWdlU291cmNlRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21wb25lbnRzUGVyUGl4
ZWwsIGFscGhhRm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdFbmRpYW5Tb3VyY2Up
OworICAgIGlmIChtX2ltYWdlU291cmNlRm9ybWF0ID09IFNvdXJjZUZvcm1hdE51bUZvcm1hdHMp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHBpeGVs
RGF0YTsKICAgICBwaXhlbERhdGEuYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1h
Z2VHZXREYXRhUHJvdmlkZXIoY2dJbWFnZSkpKTsKICAgICBpZiAoIXBpeGVsRGF0YSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFVJbnQ4KiByZ2JhID0gQ0ZEYXRhR2V0Qnl0ZVB0
cihwaXhlbERhdGEuZ2V0KCkpOwogCi0gICAgdW5zaWduZWQgaW50IHBhY2tlZFNpemU7Ci0gICAg
Ly8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KLSAgICBp
ZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAx
LCAmcGFja2VkU2l6ZSwgMCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShwYWNrZWRTaXplKTsKKyAg
ICBtX2ltYWdlUGl4ZWxEYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwaXhlbERhdGEuZ2V0KCkpOwog
CiAgICAgdW5zaWduZWQgaW50IHNyY1VucGFja0FsaWdubWVudCA9IDA7CiAgICAgc2l6ZV90IGJ5
dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGNnSW1hZ2UpOwpAQCAtMjU1LDkgKzI0
NywxMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdl
LAogICAgICAgICB3aGlsZSAoYnl0ZXNQZXJSb3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQpCiAgICAg
ICAgICAgICArK3NyY1VucGFja0FsaWdubWVudDsKICAgICB9Ci0gICAgYm9vbCBydCA9IHBhY2tQ
aXhlbHMocmdiYSwgc3JjRGF0YUZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3JjVW5wYWNrQWxpZ25t
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFP
cCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHJ0OworCisgICAgbV9pbWFnZVNv
dXJjZVVucGFja0FsaWdubWVudCA9IHNyY1VucGFja0FsaWdubWVudDsKKworICAgIHJldHVybiB0
cnVlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0
LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCmluZGV4IDdkZjFlZTky
ZGI1OTNiZjc3MDA4MTdkNTJhZDViODM1OWYwNzlmYjEuLjlkMWFiMTQzYjU4NjZiZDg3YmE3NTBi
OWVjMjY3NWRmMWFiYzVmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRl
ci5jcHAKQEAgLTU2LDcgKzU2LDExIEBAIEdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250
ZXh0M0QoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2ln
bmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250
ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIoKQoreworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCmluZGV4IDJl
MmE0OTMxMzg5MDMyYzMwNmQzNmNmYWUxYmQ5MGQ2NGIxOTg1MDMuLjVlZmZlMmRlNDNmOTY1NzRi
ZWYyNTMwYTYyYjMyMzBiZjcwMTE1ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcApAQCAt
MjQxLDcgKzI0MSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVHcmFwaGljc1N1
cmZhY2VzKGNvbnN0IEludFNpemUmIHNpemUpCiB9CiAjZW5kaWYKIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiwgR0MzRGVudW0gLyogZm9ybWF0ICovLCBHQzNE
ZW51bSAvKiB0eXBlICovLCBib29sIC8qIHByZW11bHRpcGx5QWxwaGEgKi8sIGJvb2wgLyogaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgKi8sIFZlY3Rvcjx1aW50OF90PiYgLyogb3V0cHV0VmVj
dG9yICovKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIoKQor
eworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRh
KGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKaW5kZXggNzE1ZDFiNWU5MDYyYjdmYjA0YmZlMDFjZWRlNTQxZGY5OTQ0OGJiMi4u
YzU3Zjk1ZDZlYTBhM2ViZDBjODE0ODZlZWE0OTMyYzkyMDU3NDdmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAKQEAgLTQ4NSw1NCArNDg1LDUzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIH0KICNlbmRpZgogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VM
b2NrZXIoKQoreworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0
SW1hZ2VEYXRhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9y
UHJvZmlsZSkKIHsKICAgICBVTlVTRURfUEFSQU0oaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUp
OwotICAgIGlmICghaW1hZ2UpCisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBRSW1hZ2UgcXRJbWFnZTsKICAgICAvLyBJcyBpbWFnZSBhbHJlYWR5IGxvYWRl
ZD8gSWYgbm90LCBsb2FkIGl0LgotICAgIGlmIChpbWFnZS0+ZGF0YSgpKQotICAgICAgICBxdElt
YWdlID0gUUltYWdlOjpmcm9tRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVjaGFyKj4oaW1h
Z2UtPmRhdGEoKS0+ZGF0YSgpKSwgaW1hZ2UtPmRhdGEoKS0+c2l6ZSgpKTsKKyAgICBpZiAobV9p
bWFnZS0+ZGF0YSgpKQorICAgICAgICBtX3F0SW1hZ2UgPSBRSW1hZ2U6OmZyb21EYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWNoYXIqPihtX2ltYWdlLT5kYXRhKCktPmRhdGEoKSksIG1faW1h
Z2UtPmRhdGEoKS0+c2l6ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgUVBpeG1hcCogbmF0aXZl
UGl4bWFwID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIFFQ
aXhtYXAqIG5hdGl2ZVBpeG1hcCA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CiAgICAgICAgIC8vIFdpdGggUVBBLCB3ZSBjYW4gYXZvaWQgYSBkZWVwIGNvcHkuCi0gICAg
ICAgIHF0SW1hZ2UgPSAqbmF0aXZlUGl4bWFwLT5oYW5kbGUoKS0+YnVmZmVyKCk7CisgICAgICAg
IG1fcXRJbWFnZSA9ICpuYXRpdmVQaXhtYXAtPmhhbmRsZSgpLT5idWZmZXIoKTsKICAgICB9CiAK
LSAgICBBbHBoYU9wIGFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKLSAgICBzd2l0Y2ggKHF0SW1h
Z2UuZm9ybWF0KCkpIHsKKyAgICBtX2FscGhhT3AgPSBBbHBoYURvTm90aGluZzsKKyAgICBzd2l0
Y2ggKG1fcXRJbWFnZS5mb3JtYXQoKSkgewogICAgIGNhc2UgUUltYWdlOjpGb3JtYXRfUkdCMzI6
CiAgICAgICAgIC8vIEZvciBvcGFxdWUgaW1hZ2VzLCB3ZSBzaG91bGQgbm90IHByZW11bHRpcGx5
IG9yIHVubXVsdGlwbHkgYWxwaGEuCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUUltYWdlOjpG
b3JtYXRfQVJHQjMyOgogICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAg
IGFscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBB
bHBoYURvUHJlbXVsdGlwbHk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUUltYWdlOjpGb3Jt
YXRfQVJHQjMyX1ByZW11bHRpcGxpZWQ6CiAgICAgICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkK
LSAgICAgICAgICAgIGFscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKKyAgICAgICAgICAgIG1f
YWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICAvLyBUaGUgaW1hZ2UgaGFzIGEgZm9ybWF0IHRoYXQgaXMgbm90IHN1cHBvcnRl
ZCBpbiBwYWNrUGl4ZWxzLiBXZSBoYXZlIHRvIGNvbnZlcnQgaXQgaGVyZS4KLSAgICAgICAgcXRJ
bWFnZSA9IHF0SW1hZ2UuY29udmVydFRvRm9ybWF0KHByZW11bHRpcGx5QWxwaGEgPyBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCA6IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7Cisg
ICAgICAgIG1fcXRJbWFnZSA9IG1fcXRJbWFnZS5jb252ZXJ0VG9Gb3JtYXQocHJlbXVsdGlwbHlB
bHBoYSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3Jt
YXRfQVJHQjMyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IHBh
Y2tlZFNpemU7Ci0gICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVu
dCA9PSAxKS4KLSAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCBp
bWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxLCAmcGFja2VkU2l6ZSwgMCkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgIG1faW1hZ2VXaWR0aCA9IG1faW1hZ2UtPndp
ZHRoKCk7CisgICAgbV9pbWFnZUhlaWdodCA9IG1faW1hZ2UtPmhlaWdodCgpOworICAgIGlmICgh
bV9pbWFnZVdpZHRoIHx8ICFtX2ltYWdlSGVpZ2h0KQogICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgbV9pbWFnZVBpeGVsRGF0YSA9IG1fcXRJbWFnZS5jb25zdEJpdHMoKTsKKyAgICBtX2ltYWdl
U291cmNlRm9ybWF0ID0gU291cmNlRm9ybWF0QkdSQTg7CisgICAgbV9pbWFnZVNvdXJjZVVucGFj
a0FsaWdubWVudCA9IDA7CiAKLSAgICBvdXRwdXRWZWN0b3IucmVzaXplKHBhY2tlZFNpemUpOwot
Ci0gICAgcmV0dXJuIHBhY2tQaXhlbHMocXRJbWFnZS5jb25zdEJpdHMoKSwgU291cmNlRm9ybWF0
QkdSQTgsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwg
YWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxD
b250ZXh0TG9zdENhbGxiYWNrPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAppbmRleCBm
ZWE2YWRjZTMwMTg1Nzc2NDA4NmVhMjdiNzVjZWJiOWU2YjE1NjhlLi40YzZlOTFiMWM1OTkxZjc3
ZDk0MjRjNTlkYWZlOTE5ZWFmNWZjYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3Bw
CkBAIC00Miw1OCArNDIsNTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0
VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIoKQog
ewotICAgIGlmICghaW1hZ2UpCisgICAgaWYgKHNraWFJbWFnZSkKKyAgICAgICAgc2tpYUltYWdl
LT5iaXRtYXAoKS51bmxvY2tQaXhlbHMoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gcGl4ZWxzOwotICAgIE5h
dGl2ZUltYWdlU2tpYSogc2tpYUltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7Ci0gICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CisgICAg
c2tpYUltYWdlID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBt
X2FscGhhT3AgPSBBbHBoYURvTm90aGluZzsKICAgICBib29sIGhhc0FscGhhID0gc2tpYUltYWdl
ID8gIXNraWFJbWFnZS0+Yml0bWFwKCkuaXNPcGFxdWUoKSA6IHRydWU7Ci0gICAgaWYgKCghc2tp
YUltYWdlIHx8IGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlIHx8IChoYXNBbHBoYSAmJiAhcHJl
bXVsdGlwbHlBbHBoYSkpICYmIGltYWdlLT5kYXRhKCkpIHsKKyAgICBpZiAoKCFza2lhSW1hZ2Ug
fHwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBs
eUFscGhhKSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7CiAgICAgICAgIC8vIEF0dGVtcHQgdG8gZ2V0
IHJhdyB1bnByZW11bHRpcGxpZWQgaW1hZ2UgZGF0YS4KICAgICAgICAgT3duUHRyPEltYWdlRGVj
b2Rlcj4gZGVjb2RlcihhZG9wdFB0cihJbWFnZURlY29kZXI6OmNyZWF0ZSgKLSAgICAgICAgICAg
ICooaW1hZ2UtPmRhdGEoKSksIEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCisg
ICAgICAgICAgICAqKG1faW1hZ2UtPmRhdGEoKSksIEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11
bHRpcGxpZWQsCiAgICAgICAgICAgICBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFB
bmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOwogICAgICAgICBpZiAoIWRlY29kZXIpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRlY29kZXItPnNldERhdGEoaW1hZ2UtPmRhdGEo
KSwgdHJ1ZSk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVl
KTsKICAgICAgICAgaWYgKCFkZWNvZGVyLT5mcmFtZUNvdW50KCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZm
ZXJBdEluZGV4KDApOwogICAgICAgICBpZiAoIWZyYW1lIHx8IGZyYW1lLT5zdGF0dXMoKSAhPSBJ
bWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBoYXNBbHBoYSA9IGZyYW1lLT5oYXNBbHBoYSgpOwotICAgICAgICBwaXhlbHMgPSBhZG9w
dFB0cihmcmFtZS0+YXNOZXdOYXRpdmVJbWFnZSgpKTsKLSAgICAgICAgaWYgKCFwaXhlbHMuZ2V0
KCkgfHwgIXBpeGVscy0+aXNEYXRhQ29tcGxldGUoKSB8fCAhcGl4ZWxzLT5iaXRtYXAoKS53aWR0
aCgpIHx8ICFwaXhlbHMtPmJpdG1hcCgpLmhlaWdodCgpKQorICAgICAgICBtX25hdGl2ZUltYWdl
ID0gYWRvcHRQdHIoZnJhbWUtPmFzTmV3TmF0aXZlSW1hZ2UoKSk7CisgICAgICAgIGlmICghbV9u
YXRpdmVJbWFnZS5nZXQoKSB8fCAhbV9uYXRpdmVJbWFnZS0+aXNEYXRhQ29tcGxldGUoKSB8fCAh
bV9uYXRpdmVJbWFnZS0+Yml0bWFwKCkud2lkdGgoKSB8fCAhbV9uYXRpdmVJbWFnZS0+Yml0bWFw
KCkuaGVpZ2h0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFNrQml0bWFw
OjpDb25maWcgc2tpYUNvbmZpZyA9IHBpeGVscy0+Yml0bWFwKCkuY29uZmlnKCk7CisgICAgICAg
IFNrQml0bWFwOjpDb25maWcgc2tpYUNvbmZpZyA9IG1fbmF0aXZlSW1hZ2UtPmJpdG1hcCgpLmNv
bmZpZygpOwogICAgICAgICBpZiAoc2tpYUNvbmZpZyAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHNraWFJbWFnZSA9IHBp
eGVscy5nZXQoKTsKKyAgICAgICAgc2tpYUltYWdlID0gbV9uYXRpdmVJbWFnZS5nZXQoKTsKICAg
ICAgICAgaWYgKGhhc0FscGhhICYmIHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVk
ZWRBbHBoYU9wID0gQWxwaGFEb1ByZW11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0g
QWxwaGFEb1ByZW11bHRpcGx5OwogICAgIH0gZWxzZSBpZiAoIXByZW11bHRpcGx5QWxwaGEgJiYg
aGFzQWxwaGEpCi0gICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKKyAg
ICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgaWYgKCFza2lhSW1hZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBTa0JpdG1hcCYgc2tpYUltYWdlUmVm
ID0gc2tpYUltYWdlLT5iaXRtYXAoKTsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soc2tpYUlt
YWdlUmVmKTsKLSAgICBBU1NFUlQoc2tpYUltYWdlUmVmLnJvd0J5dGVzKCkgPT0gc2tpYUltYWdl
UmVmLndpZHRoKCkgKiA0KTsKLSAgICB1bnNpZ25lZCBpbnQgcGFja2VkU2l6ZTsKLSAgICAvLyBP
dXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgotICAgIGlmIChj
b21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHNraWFJbWFnZVJlZi53aWR0aCgp
LCBza2lhSW1hZ2VSZWYuaGVpZ2h0KCksIDEsICZwYWNrZWRTaXplLCAwKSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpCisKKyAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gU0tfQjMyX1NI
SUZUID8gU291cmNlRm9ybWF0UkdCQTggOiBTb3VyY2VGb3JtYXRCR1JBODsKKyAgICBtX2ltYWdl
V2lkdGggPSBza2lhSW1hZ2UtPmJpdG1hcCgpLndpZHRoKCk7CisgICAgbV9pbWFnZUhlaWdodCA9
IHNraWFJbWFnZS0+Yml0bWFwKCkuaGVpZ2h0KCk7CisgICAgaWYgKCFtX2ltYWdlV2lkdGggfHwg
IW1faW1hZ2VIZWlnaHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBvdXRwdXRWZWN0b3Iu
cmVzaXplKHBhY2tlZFNpemUpOwotICAgIHJldHVybiBwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHNraWFJbWFnZVJlZi5nZXRQaXhlbHMoKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgU0tfQjMyX1NISUZUID8gU291cmNlRm9ybWF0UkdCQTggOiBTb3VyY2VGb3Jt
YXRCR1JBOCwKLSAgICAgICAgICAgICAgICAgICAgICBza2lhSW1hZ2VSZWYud2lkdGgoKSwgc2tp
YUltYWdlUmVmLmhlaWdodCgpLCAwLAotICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlw
ZSwgbmVlZGVkQWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CisgICAgbV9pbWFnZVNvdXJj
ZVVucGFja0FsaWdubWVudCA9IDA7CisgICAgc2tpYUltYWdlLT5iaXRtYXAoKS5sb2NrUGl4ZWxz
KCk7CisgICAgbV9pbWFnZVBpeGVsRGF0YSA9IHNraWFJbWFnZS0+Yml0bWFwKCkuZ2V0UGl4ZWxz
KCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175751</attachid>
            <date>2012-11-23 01:22:06 -0800</date>
            <delta_ts>2012-11-26 22:55:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121123171702.patch</filename>
            <type>text/plain</type>
            <size>48932</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NTY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmVmN2QzNjkxZWQ1NGVl
MGI1Nzc4YWNmOTlhNzJlYzMxMTViMmZmZC4uZTcyODAyNjA3ODc3NjM4NmZkNTk3NWY0NGNiZmFl
NzFkMzYwNjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTExLTIzICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgbWVtb3J5IGNvcHkgb3Ig
Y29udmVyc2lvbnMgaW4gdGhlIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZm9yIEhUTUxW
aWRlb0VsZW1lbnQgd2hpY2ggbWF5IGJlIGF2b2lkZWQuCisgICAgICAgIFR3byBtYWluIGNoYW5n
ZXMgYXJlIG9jY3VyZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgLSBPbmUgaXMg
Zm9jdXNlZCBvbiB0aGUgZnJhbWV3b3JrIHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBk
YXRhIHRoYXQgYmUgY2FuIHN0ZWFkaWx5IHVzZWQgd2l0aCBpdHMgbGlmZXRpbWUgYW5kIHNjb3Bl
IGNvbnRyb25hYmxlLgorICAgICAgICAtIFRoZSBvdGhlciBpcyBmb2N1c2VkIG9uIHRoZSBwZXJm
b3JtYW5jZSBpbXByb3ZlbWVudCwgc3VjaCBhcyBCYWNraW5nU3RvcmUgY29weSwgYWxwaGEgdmFs
dWUgcmV2aXNlIGFuZCBmYXN0IGdvIHRocm91Z2ggcGF0aCB3aXRob3V0IGNvbnZlcnNpb24uIAor
CisgICAgICAgIEFscmVhZHkgY292ZXJlZCBieSBjdXJyZW50IHRlc3RzLgorCisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9J
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
Lmg6CisgICAgICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKEltYWdlTG9j
a2VyKTprZWVwcyB0aGUgc3RhdGVzIG9mIHRoZSBJbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6SW1hZ2VMb2NrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjppbWFnZVBpeGVsRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmltYWdlV2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpp
bWFnZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VM
b2NrZXI6OmltYWdlU291cmNlRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUxvY2tlcjo6aW1hZ2VBbHBoYU9wKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6aW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxv
Y2tlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdlTG9ja2VyKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2Vy
OjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3Jh
cGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdlTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFn
ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQz
REVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2Nr
ZXI6On5JbWFnZUxvY2tlcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdlTG9ja2VyKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdlTG9ja2VyKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpn
ZXRJbWFnZURhdGEpOgorCiAyMDEyLTExLTIzICBUaGlhZ28gTWFyY29zIFAuIFNhbnRvcyAgPHRo
aWFnby5zYW50b3NAaW50ZWwuY29tPgogCiAgICAgICAgIEV4cG9zZSBET00gaW50ZXJmYWNlIGZv
ciBDU1MgRGV2aWNlIEFkYXB0YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDcwY2I4NTNjMzc5ZmYwNjViOTg3
ZDlkZWUxMDQzNTdkMjgxYmRiODEuLmU1MjJhNzYxNjY2NzU2NTQzMGQ4MzAxNTc3YzU3ZmIxMGZm
NDFlZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcApAQCAtMzYxMSwyMiArMzYxMSw0NSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SW1hZ2UqIGltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0
bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAgICBpZiAoIXZhbGlkYXRlU2V0
dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCiAgICAgICAgIHJl
dHVybjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIW1fY29udGV4dC0+ZXh0
cmFjdEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RSwgZGF0YSkpIHsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlciBpbWFnZUxv
Y2tlcihpbWFnZSwgZG9tU291cmNlKTsKKyAgICBpZiAoIWltYWdlTG9ja2VyLmdldEltYWdlRGF0
YShwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBo
aWNzQ29udGV4dDNEOjpOT05FKSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3Vy
Y2VEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUxvY2tlci5pbWFnZVNvdXJjZUZv
cm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUxv
Y2tlci5pbWFnZUFscGhhT3AoKTsKKyAgICB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGNvbnN0X2Nh
c3Q8dm9pZCo+KGltYWdlTG9ja2VyLmltYWdlUGl4ZWxEYXRhKCkpOworCisgICAgLy8gRG8gc29t
ZSBvcHRpbWl6YXRpb24gb24gYWxwaGFPcCB3aGVuIEltYWdlSHRtbERvbVNvdXJjZSBpcyBWaWRl
byBlbGVtZW50CisgICAgLy8gc2luY2UgdGhlIGFscGhhIHZhbHVlIGlzIHRoZSBzYW1lIGZvciBh
bGwgcGl4ZWxzCisgICAgaWYgKGRvbVNvdXJjZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SFRNTERv
bVZpZGVvKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFWYWx1ZSA9ICoocmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VQaXhlbERhdGEpICsgMyk7CisgICAgICAgIGlm
ICgoYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHkgJiYgKGFs
cGhhVmFsdWUgPT0gMHhGRiB8fCBhbHBoYVZhbHVlID09IDB4MCkpCisgICAgICAgICAgICB8fCAo
YWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5ICYmIGFscGhh
VmFsdWUgPT0gMHhGRikpCisgICAgICAgICAgICBhbHBoYU9wID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhRG9Ob3RoaW5nOworICAgIH0KKworICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVl
OworICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNv
dXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNvdXJjZUZvcm1hdFJHQkE4ICYm
IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYURvTm90aGluZykKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxz
ZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEo
aW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3Vy
Y2VEYXRhRm9ybWF0LCBpbWFnZUxvY2tlci5pbWFnZVdpZHRoKCksIGltYWdlTG9ja2VyLmltYWdl
SGVpZ2h0KCksIGltYWdlTG9ja2VyLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEp
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChtX3VucGFja0FsaWdubWVudCAh
PSAxKQogICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwKLSAgICAg
ICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEuZGF0YSgpLCBlYyk7CisgICAgdGV4SW1h
Z2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdlLT53aWR0aCgpLCBp
bWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRh
dGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7CiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9
IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVO
UEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0KQEAgLTM2OTAsNyArMzcxMyw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJl
cigpKSwKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFn
ZS0+cmVuZGVyZXIoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsCiAgICAgICAg
ICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7
CiB9CiAKQEAgLTM3MjksMTIgKzM3NTIsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAg
IGlmIChpbWFnZURhdGEpCiAgICAgICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7CiAgICAgZWxzZQot
ICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksCisgICAgICAgIHRleEltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29w
aWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkhUTUxEb21DYW52YXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMp
OwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhj
ZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVD
b3B5IGJhY2tpbmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghdmlk
ZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7CiAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJubyB2aWRlbyIpOwpAQCAtMzc1Myw3ICszNzc2LDcgQEAgUGFzc1Jl
ZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1M
VmlkZW9FbGVtZW50KiB2aWQKICAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQ
VSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCiAgICAgdmlkZW8tPnBhaW50
Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7Ci0gICAgcmV0
dXJuIGJ1Zi0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBidWYtPmNv
cHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKQEAgLTM3NjIsMTAgKzM3ODUsMTggQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bQogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1
cm47Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBl
Yyk7CisKKy8vIEZJWE1FOiBvbmx5IFNLSUEgcG9ydCBpcyBlbmFibGVkIHRvIGdvIHRocm91Z2gg
dGhlIG9wdGltaXplZCBwYXRoLCBvdGhlciBwb3J0cyBtYXkgYmUgZW5hYmxlZCBhcyB3ZWxsIGFm
dGVyIHZlcmlmaWVkLiAgICAKKyNpZiBVU0UoU0tJQSkKKyAgICBCYWNraW5nU3RvcmVDb3B5IGJh
Y2tpbmdTdG9yZUNvcHkgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyNlbHNlCisgICAgQmFja2lu
Z1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZTsKKyNlbmRpZgor
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgYmFja2lu
Z1N0b3JlQ29weSwgZWMpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB0
ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBpbWFnZS5nZXQoKSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBl
Yyk7CisKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkhUTUxEb21WaWRl
bywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAjZW5k
aWYKIApAQCAtMzg0NywyMiArMzg3OCw0NSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSog
aW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAg
ICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7Ci0gICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZv
cm1hdCwgdHlwZSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNv
bnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUsIGRhdGEpKSB7CisKKyAgICBHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXIgaW1hZ2VMb2NrZXIoaW1hZ2UsIGRvbVNvdXJjZSk7
ICAKKyAgICBpZiAoIWltYWdlTG9ja2VyLmdldEltYWdlRGF0YShwcmVtdWx0aXBseUFscGhhLCBt
X3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKSkg
ewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRh
Rm9ybWF0ID0gaW1hZ2VMb2NrZXIuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VMb2NrZXIuaW1hZ2VBbHBoYU9wKCk7Cisg
ICAgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBjb25zdF9jYXN0PHZvaWQqPihpbWFnZUxvY2tlci5p
bWFnZVBpeGVsRGF0YSgpKTsKKworICAgIC8vIERvIHNvbWUgb3B0aW1pemF0aW9uIG9uIGFscGhh
T3Agd2hlbiBJbWFnZUh0bWxEb21Tb3VyY2UgaXMgVmlkZW8gZWxlbWVudAorICAgIC8vIHNpbmNl
IHRoZSBhbHBoYSB2YWx1ZSBpcyB0aGUgc2FtZSBmb3IgYWxsIHBpeGVscworICAgIGlmIChkb21T
b3VyY2UgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhUTUxEb21WaWRlbykgeworICAgICAgICB1bnNp
Z25lZCBjaGFyIGFscGhhVmFsdWUgPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGltYWdlUGl4ZWxEYXRhKSArIDMpOworICAgICAgICBpZiAoKGFscGhhT3AgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhRG9Vbm11bHRpcGx5ICYmIChhbHBoYVZhbHVlID09IDB4RkYgfHwgYWxw
aGFWYWx1ZSA9PSAweDApKQorICAgICAgICAgICAgfHwgKGFscGhhT3AgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBseSAmJiBhbHBoYVZhbHVlID09IDB4RkYpKQorICAgICAg
ICAgICAgYWxwaGFPcCA9IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZzsKKyAgICB9
CisgICAgCisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgaWYgKHR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6U291cmNlRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9O
b3RoaW5nKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAg
ICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERh
dGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdl
TG9ja2VyLmltYWdlV2lkdGgoKSwgaW1hZ2VMb2NrZXIuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VMb2Nr
ZXIuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1h
Z2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEp
OwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSwgZWMpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdl
UGl4ZWxEYXRhLCBlYyk7CiAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAg
IG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1F
TlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0KQEAgLTM5MjQsOCArMzk3OCw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGluCiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVu
ZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLAotICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIHRleFN1YkltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Ut
PmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLCBHcmFw
aGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwKQEAgLTM5NDYsNyArMzk5OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGluCiAgICAgaWYgKGltYWdlRGF0YSkKICAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwg
ZWMpOwogICAgIGVsc2UKLSAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksCisg
ICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6
SFRNTERvbUNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKQEAgLTM5NTcsMTAgKzQwMTAsMTcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4
dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRl
b0ZyYW1lVG9JbWFnZSh2aWRlbywgZWMpOworLy8gRklYTUU6IG9ubHkgU0tJQSBwb3J0IGlzIGVu
YWJsZWQgdG8gZ28gdGhyb3VnaCB0aGUgb3B0aW1pemVkIHBhdGgsIG90aGVyIHBvcnRzIG1heSBi
ZSBlbmFibGVkIGFzIHdlbGwgYWZ0ZXIgdmVyaWZpZWQuCisjaWYgVVNFKFNLSUEpCisgICAgQmFj
a2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5ID0gRG9udENvcHlCYWNraW5nU3RvcmU7Cisj
ZWxzZQorICAgIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmU7CisjZW5kaWYKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1h
Z2UodmlkZW8sIGJhY2tpbmdTdG9yZUNvcHksIGVjKTsKICAgICBpZiAoIWltYWdlKQogICAgICAg
ICByZXR1cm47Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CisKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFw
aGljc0NvbnRleHQzRDo6SFRNTERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIGVjKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDg2ZWI4MjlmMjI3MGNhMmJh
ZDA5ZmY0ODM4OWJhYmE0YjhkNjgwMDkuLmQ0ODZhNjE1NGE1NzUzOTNkM2I0OTZiNDRkYTA4NThj
NzFkZmZiMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKICNpbmNsdWRlICJXZWJHTEdldEluZm8uaCIKIApAQCAtMzcyLDcgKzM3Myw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtKTsKIAog
I2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFn
ZShIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SW1h
Z2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5
LCBFeGNlcHRpb25Db2RlJik7CiAjZW5kaWYKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbV9jb250ZXh0OwpAQCAtNTMzLDE1ICs1MzQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgdGV4
SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLAotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB0ZXhT
dWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBoYW5kbGVOUE9UVGV4dHVyZXMoY29u
c3QgY2hhciosIGJvb2wpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKaW5kZXggYTk4YjU0NmJhZjdlODEzYjkyODk4
MmE3ZGM3MjkzNzVjNTNjNDg0Zi4uNDhiZjI5ZmQ3Y2I5NDZiMzczZTY5ZWQ5ZjdhMDRmN2I3YzJl
MGM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmNwcApAQCAtMTY5LDI5ICsxNjksNDkgQEAgR0MzRGVudW0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHkKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YShJ
bWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBmbGlwWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYg
KCFpbWFnZSkKKyAgICB2b2lkKiBwaXhlbHMsCisgICAgR0MzRGVudW0gZm9ybWF0LAorICAgIEdD
M0RlbnVtIHR5cGUsCisgICAgYm9vbCBmbGlwWSwKKyAgICBBbHBoYU9wIGFscGhhT3AsCisgICAg
U291cmNlRGF0YUZvcm1hdCBzb3VyY2VGb3JtYXQsIAorICAgIHVuc2lnbmVkIHdpZHRoLAorICAg
IHVuc2lnbmVkIGhlaWdodCwKKyAgICB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQoreworICAgIGlmICghcGl4ZWxzKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnZXRJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwg
cHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIGRhdGEpKQorCisg
ICAgdW5zaWduZWQgcGFja2VkU2l6ZTsKKyAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBh
Y2tlZCAoYWxpZ25tZW50ID09IDEpLgorICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhm
b3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZwYWNrZWRTaXplLCAwKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJl
c2l6ZShwYWNrZWRTaXplKTsKKworICAgIGlmICghcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLAorICAgICAgICBzb3VyY2VGb3JtYXQsCisgICAgICAg
IHdpZHRoLAorICAgICAgICBoZWlnaHQsCisgICAgICAgIHNvdXJjZVVucGFja0FsaWdubWVudCwK
KyAgICAgICAgZm9ybWF0LAorICAgICAgICB0eXBlLAorICAgICAgICBhbHBoYU9wLAorICAgICAg
ICBkYXRhLmRhdGEoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoZmxpcFkpIHsK
LSAgICAgICAgdW5zaWduZWQgaW50IGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25l
bnQ7CisgICAgICAgIHVuc2lnbmVkIGNvbXBvbmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25l
bnQ7CiAgICAgICAgIGlmICghY29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBv
bmVudHNQZXJQaXhlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmJ5dGVzUGVyQ29tcG9uZW50KSkKKyAgICAgICAgICAgICZjb21wb25lbnRzUGVyUGl4ZWws
CisgICAgICAgICAgICAmYnl0ZXNQZXJDb21wb25lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAvLyBUaGUgaW1hZ2UgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCwgYW5kIHdl
IHVwbG9hZCBpdCBhcyBzdWNoLgotICAgICAgICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25tZW50
ID0gMTsKLSAgICAgICAgZmxpcFZlcnRpY2FsbHkoZGF0YS5kYXRhKCksIGltYWdlLT53aWR0aCgp
LCBpbWFnZS0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHNQZXJQ
aXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICB1bnBhY2tB
bGlnbm1lbnQpOworICAgICAgICB1bnNpZ25lZCB1bnBhY2tBbGlnbm1lbnQgPSAxOworICAgICAg
ICBmbGlwVmVydGljYWxseShkYXRhLmRhdGEoKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAg
IGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAorICAgICAgICAgICAgdW5w
YWNrQWxpZ25tZW50KTsKICAgICB9CisKICAgICBpZiAoSW1hZ2VPYnNlcnZlciAqb2JzZXJ2ZXIg
PSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQogICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdyhpbWFn
ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05NjMsNyArOTgzLDcgQEAgdm9pZCBwYWNrT25lUm93
T2ZSR0JBOFRvUkdCQThQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3Qq
IGRlc3RpbmEKIHZvaWQgcGFja09uZVJvd09mUkdCQThUb1JHQkE4VW5tdWx0aXBseShjb25zdCB1
aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxz
UGVyUm93KQogewogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93
OyArK2kpIHsKLSAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/
IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYpOworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9
IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJjZVszXSA6IDEuMGY7CiAgICAgICAgIHVpbnQ4X3Qg
c291cmNlUiA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2Vb
MF0pICogc2NhbGVGYWN0b3IpOwogICAgICAgICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2Fz
dDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9hdD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsK
ICAgICAgICAgdWludDhfdCBzb3VyY2VCID0gc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHNvdXJjZVsyXSkgKiBzY2FsZUZhY3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCA0ZWRlMGY4
MTdmNmMwYzMwYjdhM2U1NTI4OTZkZTA2ZDQ3M2IyOTAwLi4yZWRlNTg5OGMxOTdmYzBjMjM1YmIy
MTA3YTJkYzE4ZjE5ZjE0ODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYg
R3JhcGhpY3NDb250ZXh0M0RfaAogI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRF9oCiAKKyNpbmNs
dWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5
cGVzM0QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCkBAIC0xMDEsNiArMTAyLDcgQEAg
Y2xhc3MgRXh0ZW5zaW9uczNEUXQ7CiBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7CiBj
bGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlU291cmNlOwogY2xhc3MgSW1hZ2VEYXRhOwog
Y2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CkBAIC01NjQsMTggKzU2Niw2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGlt
YWdlU2l6ZUluQnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50KiBwYWRkaW5nSW5CeXRlcyk7CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVu
dHMgb2YgdGhlIGdpdmVuIEltYWdlIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCi0gICAgLy8gcGFj
a2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlw
ZSwKLSAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGFuZCBp
Z25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZQotICAgIC8vIGZsYWdzLiBSZXR1cm5zIHRydWUgdXBv
biBzdWNjZXNzLgotICAgIHN0YXRpYyBib29sIGV4dHJhY3RJbWFnZURhdGEoSW1hZ2UqLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
ZmxpcFksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQog
ICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8g
dGhlIHBhc3NlZCBWZWN0b3IsCiAgICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRp
bmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKICAgICAvLyBhbmQgb2JleWluZyB0aGUg
ZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuIFJldHVybnMgdHJ1ZQpAQCAtODc0LDM0
ICs4NjQsMTEgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHVuc2lnbmVkIGdldENoYW5uZWxCaXRz
QnlGb3JtYXQoR0MzRGVudW0pOwogCi0gIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Qo
QXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsK
LQotICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9m
IHRoaXMgbWV0aG9kLgotICAgIC8vCi0gICAgLy8gR2V0cyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVu
IEltYWdlIGludG8gb3V0cHV0VmVjdG9yIGluIHRoZQotICAgIC8vIGZvcm1hdCBzcGVjaWZpZWQg
YnkgdGhlIChPcGVuR0wtc3R5bGUpIGZvcm1hdCBhbmQgdHlwZQotICAgIC8vIGFyZ3VtZW50cy4g
RGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBvdXRwdXRWZWN0b3IgY29udGFpbnMKLSAgICAvLyB1
aW50OF90LCBpZiB0aGUgZm9ybWF0IGFuZCB0eXBlIHNwZWNpZnkgcGFja2VkIHBpeGVscywgdGhl
bgotICAgIC8vIGl0IHdpbGwgZXNzZW50aWFsbHkgY29udGFpbiB1aW50MTZfdCBhZnRlciB0aGUg
ZXh0cmFjdGlvbgotICAgIC8vIHByb2Nlc3MuCi0gICAgLy8KLSAgICAvLyBJZiBwcmVtdWx0aXBs
eUFscGhhIGlzIHRydWUsIHRoZSBhbHBoYSBjaGFubmVsLCBpZiBhbnksCi0gICAgLy8gd2lsbCBi
ZSBtdWx0aXBsaWVkIGludG8gdGhlIGNvbG9yIGNoYW5uZWxzIGR1cmluZyB0aGUKLSAgICAvLyBl
eHRyYWN0aW9uIHByb2Nlc3MuIFRoaXMgcHJlbXVsdGlwbGljYXRpb24gb2NjdXJzIGJlZm9yZQot
ICAgIC8vIGFueSBwYWNraW5nIG9mIHBpeGVsIGRhdGEuCi0gICAgLy8KLSAgICAvLyBJZiBpZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZSBpcyB0cnVlLCBnYW1tYSBjb3JyZWN0aW9uIGFuZCBJQ0MK
LSAgICAvLyBwcm9maWxlIHdvbid0IGJlIGFwcGxpZWQuCi0gICAgLy8KLSAgICAvLyBObyB2ZXJ0
aWNhbCBmbGlwIG9mIHRoZSBpbWFnZSBkYXRhIGlzIHBlcmZvcm1lZCBieSB0aGlzCi0gICAgLy8g
bWV0aG9kLgotICAgIHN0YXRpYyBib29sIGdldEltYWdlRGF0YShJbWFnZSosCi0gICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAot
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpOworICAg
IGVudW0gSW1hZ2VIdG1sRG9tU291cmNlIHsKKyAgICAgICAgSHRtbERvbUltYWdlID0gMCwKKyAg
ICAgICAgSFRNTERvbUNhbnZhcyA9IDEsCisgICAgICAgIEhUTUxEb21WaWRlbyA9IDIKKyAgICB9
OwogCiAgICAgLy8gUG9zc2libGUgYWxwaGEgb3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9j
Y3VyIGR1cmluZwogICAgIC8vIHBpeGVsIHBhY2tpbmcuIEZJWE1FOiBrQWxwaGFEb1VubXVsdGlw
bHkgaXMgbG9zc3kgYW5kIG11c3QKQEAgLTkxMiw2ICs4NzksNTEgQEAgcHVibGljOgogICAgICAg
ICBBbHBoYURvVW5tdWx0aXBseSA9IDIKICAgICB9OwogCisgICAgLy8gRXh0cmFjdHMgdGhlIGNv
bnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSBpbnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8v
IHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5k
IHR5cGUsCisgICAgLy8gYW5kIG9iZXlpbmcgdGhlIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBh
bmQgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUKKyAgICAvLyBmbGFncy4gUmV0dXJucyB0cnVl
IHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMgYm9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiwg
dm9pZCogcGl4ZWxzLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFks
IEFscGhhT3AsIFNvdXJjZURhdGFGb3JtYXQgc291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1
aW50OF90PiYgZGF0YSk7CisKKyAgICBjbGFzcyBJbWFnZUxvY2tlciB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIH5JbWFnZUxvY2tlcigpOworICAgICAgICBib29sIGdldEltYWdlRGF0
YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUp
OworCisgICAgICAgIEltYWdlTG9ja2VyKEltYWdlKiBpbWFnZSwgSW1hZ2VIdG1sRG9tU291cmNl
IGRvbVNvdXJjZSkge21faW1hZ2UgPSBpbWFnZTsgbV9pbWFnZUh0bWxEb21Tb3VyY2UgPSBkb21T
b3VyY2U7fTsKKyAgICAgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEoKSB7cmV0dXJuIG1f
aW1hZ2VQaXhlbERhdGE7fTsKKyAgICAgICAgdW5zaWduZWQgaW1hZ2VXaWR0aCgpIHtyZXR1cm4g
bV9pbWFnZVdpZHRoO307CisgICAgICAgIHVuc2lnbmVkIGltYWdlSGVpZ2h0KCkge3JldHVybiBt
X2ltYWdlSGVpZ2h0O307CisgICAgICAgIFNvdXJjZURhdGFGb3JtYXQgaW1hZ2VTb3VyY2VGb3Jt
YXQoKSB7cmV0dXJuIG1faW1hZ2VTb3VyY2VGb3JtYXQ7fTsKKyAgICAgICAgQWxwaGFPcCBpbWFn
ZUFscGhhT3AoKSB7cmV0dXJuIG1fYWxwaGFPcDt9CisgICAgICAgIHVuc2lnbmVkIGltYWdlU291
cmNlVW5wYWNrQWxpZ25tZW50KCkge3JldHVybiBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50
O307IAorICAgIHByaXZhdGU6CisjaWYgVVNFKFNLSUEpCisgICAgICAgIE93blB0cjxOYXRpdmVJ
bWFnZVNraWE+IG1fbmF0aXZlSW1hZ2U7CisgICAgICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUlt
YWdlOworI2VsaWYgVVNFKENBSVJPKQorICAgICAgICBJbWFnZVNvdXJjZSogbV9kZWNvZGVyOwor
ICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2ltYWdlU3VyZmFjZTsKKyNlbGlmIFVT
RShDRykKKyAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlOworICAgICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gZGVjb2RlZEltYWdlOworICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwaXhl
bERhdGE7CisjZWxpZiBQTEFURk9STShRVCkKKyAgICAgICAgUUltYWdlIG1fcXRJbWFnZTsKKyNl
bmRpZgorICAgICAgICBJbWFnZSogbV9pbWFnZTsKKyAgICAgICAgSW1hZ2VIdG1sRG9tU291cmNl
IG1faW1hZ2VIdG1sRG9tU291cmNlOworICAgICAgICBjb25zdCB2b2lkKiBtX2ltYWdlUGl4ZWxE
YXRhOworICAgICAgICB1bnNpZ25lZCBtX2ltYWdlV2lkdGg7CisgICAgICAgIHVuc2lnbmVkIG1f
aW1hZ2VIZWlnaHQ7CisgICAgICAgIFNvdXJjZURhdGFGb3JtYXQgbV9pbWFnZVNvdXJjZUZvcm1h
dDsKKyAgICAgICAgQWxwaGFPcCBtX2FscGhhT3A7CisgICAgICAgIHVuc2lnbmVkIG1faW1hZ2VT
b3VyY2VVbnBhY2tBbGlnbm1lbnQ7CisgICAgfTsKKworICAgIHByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVy
T2Zmc2NyZWVuKTsKKwogICAgIC8vIEhlbHBlciBmb3IgZ2V0SW1hZ2VEYXRhIHdoaWNoIGltcGxl
bWVudHMgcGFja2luZyBvZiBwaXhlbAogICAgIC8vIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIE9w
ZW5HTCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5kIHR5cGUuCiAgICAgLy8gQSBzb3VyY2VVbnBhY2tB
bGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2VQdHIuaAppbmRleCBjOThmOGMy
NWE5YTg3NmM0YWI2ZTQwODY4YzJkYmNiMjc2ZDBkY2QwLi4wNTMwYWRlMTI3OTdkZjBmMjA0YTg1
ODgyYjg1Y2I1YTRhMDNjY2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKQEAgLTM0LDYgKzM0LDcgQEAgY2xhc3Mgd3hHcmFwaGlj
c0JpdG1hcDsKICNlbGlmIFVTRShDRykKIHR5cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VS
ZWY7CiAjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVF0LmgiCiAjaW5j
bHVkZSA8cWdsb2JhbC5oPgogUVRfQkVHSU5fTkFNRVNQQUNFCiBjbGFzcyBRUGl4bWFwOwpAQCAt
NDEsNiArNDIsNyBAQCBRVF9FTkRfTkFNRVNQQUNFCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VDYWlyby5oIgogI2VsaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAiTmF0aXZl
SW1hZ2VTa2lhLmgiCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBOYXRpdmVJbWFnZVNraWE7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCmluZGV4IDcwMzNmYTZkYTY3NjEw
MTM2YjQ0M2JmNjkxZDMxYzZmMzZkNDYwZjUuLjFhNGExYWU2MGEyM2Q3NzNmOWIzYmI5NmUwZGFk
MWE2NzQwM2M2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC0xNjMs
NTYgKzE2Myw2MCBAQCBHcmFwaGljc0NvbnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAg
ICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZtX2Zibyk7CiB9CiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQs
IHVuc2lnbmVkIGludCB0eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+SW1hZ2VMb2NrZXIoKQogewotICAgIGlmICghaW1h
Z2UpCisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKK30KKwor
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YShib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCit7CisgICAg
aWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gV2UgbmVlZCB0aGlz
IHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0aGUgbmF0aXZlIGltYWdlIGlzIGp1c3QgYSBzaGFs
bG93IGNvcHkgb2YgdGhlIGRhdGEuCi0gICAgSW1hZ2VTb3VyY2UgZGVjb2RlcihwcmVtdWx0aXBs
eUFscGhhID8gSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCA6IEltYWdlU291cmNlOjpB
bHBoYU5vdFByZW11bHRpcGxpZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9y
ZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKLSAgICBBbHBo
YU9wIGFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBpbWFnZVN1cmZhY2U7Ci0gICAgaWYgKGltYWdlLT5kYXRhKCkpIHsKLSAgICAgICAgZGVjb2Rl
ci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgIG1fZGVjb2RlciA9IG5ldyBJbWFn
ZVNvdXJjZShwcmVtdWx0aXBseUFscGhhID8gSW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGll
ZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IElt
YWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpOworICAgIGlmICghbV9kZWNv
ZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW1hZ2VTb3VyY2UmIGRlY29kZXIgPSAq
bV9kZWNvZGVyOworCisgICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CisgICAgaWYgKG1f
aW1hZ2UtPmRhdGEoKSkgeworICAgICAgICBkZWNvZGVyLnNldERhdGEobV9pbWFnZS0+ZGF0YSgp
LCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5m
cmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICBPd25QdHI8TmF0aXZlSW1hZ2VDYWlybz4gbmF0aXZlSW1hZ2UgPSBhZG9wdFB0cihkZWNv
ZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7Ci0gICAgICAgIGltYWdlU3VyZmFjZSA9IG5hdGl2
ZUltYWdlLT5zdXJmYWNlKCk7CisgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gbmF0aXZlSW1hZ2Ut
PnN1cmZhY2UoKTsKICAgICB9IGVsc2UgewotICAgICAgICBpbWFnZVN1cmZhY2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKS0+c3VyZmFjZSgpOworICAgICAgICBtX2ltYWdl
U3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCktPnN1cmZhY2Uo
KTsKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgYWxwaGFPcCA9
IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVs
dGlwbHk7CiAgICAgfQogCi0gICAgaWYgKCFpbWFnZVN1cmZhY2UpCisgICAgaWYgKCFtX2ltYWdl
U3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IHdpZHRoID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICBpbnQgaGVp
Z2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGltYWdlU3VyZmFjZS5nZXQoKSk7
Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQorICAgIG1faW1hZ2VXaWR0aCA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBtX2ltYWdl
SGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1faW1hZ2VTdXJmYWNlLmdl
dCgpKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChp
bWFnZVN1cmZhY2UuZ2V0KCkpICE9IENBSVJPX0ZPUk1BVF9BUkdCMzIpCisgICAgaWYgKGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChtX2ltYWdlU3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9f
Rk9STUFUX0FSR0IzMikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgaW50
IHNyY1VucGFja0FsaWdubWVudCA9IDE7Ci0gICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7CisgICAgc2l6ZV90
IGJ5dGVzUGVyUm93ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1faW1hZ2VTdXJm
YWNlLmdldCgpKTsKICAgICBzaXplX3QgYml0c1BlclBpeGVsID0gMzI7Ci0gICAgdW5zaWduZWQg
aW50IHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhlbCAvIDggKiB3aWR0aDsKKyAg
ICB1bnNpZ25lZCBwYWRkaW5nID0gYnl0ZXNQZXJSb3cgLSBiaXRzUGVyUGl4ZWwgLyA4ICogbV9p
bWFnZVdpZHRoOwogICAgIGlmIChwYWRkaW5nKSB7CiAgICAgICAgIHNyY1VucGFja0FsaWdubWVu
dCA9IHBhZGRpbmcgKyAxOwogICAgICAgICB3aGlsZSAoYnl0ZXNQZXJSb3cgJSBzcmNVbnBhY2tB
bGlnbm1lbnQpCiAgICAgICAgICAgICArK3NyY1VucGFja0FsaWdubWVudDsKICAgICB9CiAKLSAg
ICB1bnNpZ25lZCBpbnQgcGFja2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5
IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgotICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRl
cyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZwYWNrZWRTaXplLCAwKSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBvdXRw
dXRWZWN0b3IucmVzaXplKHBhY2tlZFNpemUpOwotCi0gICAgcmV0dXJuIHBhY2tQaXhlbHMoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpLCBTb3VyY2VGb3Jt
YXRCR1JBOCwKLSAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBzcmNVbnBhY2tB
bGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwgYWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7Cisg
ICAgbV9pbWFnZVBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9pbWFn
ZVN1cmZhY2UuZ2V0KCkpOworICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBTb3VyY2VGb3JtYXRC
R1JBODsKKyAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25t
ZW50OworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0
aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIFBs
YXRmb3JtQ29udGV4dENhaXJvKiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAppbmRleCBh
YzAwYzQzZGUwYWE0ZGIxMTdhZTYxMjRiNTg0NjM4MWI0OTc0ZmU2Li41YmE3NTdmMzI1NDMwYzRh
MTAyMTVhN2NkM2Q0NzdhNDg2MjQ2OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcApAQCAtODks
MzQgKzg5LDMxIEBAIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBn
ZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVkIGludCBjb21wCiAgICAgcmV0dXJuIGZvcm1hdFRh
YmxlW2Zvcm1hdEJhc2VdWyhpczE2Qml0Rm9ybWF0ID8gMiA6IDApICsgKGJpZ0VuZGlhbiA/IDEg
OiAwKV07CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSog
aW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VM
b2NrZXI6On5JbWFnZUxvY2tlcigpCiB7Ci0gICAgaWYgKCFpbWFnZSkKK30KKworYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCit7CisgICAgaWYgKCFtX2lt
YWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgQ0dJbWFnZVJlZiBjZ0ltYWdlOwotICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBkZWNvZGVkSW1hZ2U7Ci0gICAgYm9vbCBoYXNBbHBoYSA9
IGltYWdlLT5pc0JpdG1hcEltYWdlKCkgPyBpbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA6
IHRydWU7Ci0gICAgaWYgKChpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSB8fCAoaGFzQWxwaGEg
JiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBpbWFnZS0+ZGF0YSgpKSB7CisgICAgYm9vbCBoYXNB
bHBoYSA9IG1faW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSA/IG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhh
c0FscGhhKCkgOiB0cnVlOworICAgIGlmICgoaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwg
KGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7CiAg
ICAgICAgIEltYWdlU291cmNlIGRlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlw
bGllZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNv
dXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKTsKLSAgICAgICAgZGVjb2Rlci5zZXRE
YXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgICAgICBkZWNvZGVyLnNldERhdGEobV9pbWFn
ZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZGVjb2RlZEltYWdlLmFkb3B0Q0YoZGVj
b2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkpOwogICAgICAgICBjZ0ltYWdlID0gZGVjb2RlZElt
YWdlLmdldCgpOwogICAgIH0gZWxzZQotICAgICAgICBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgICAgIGNnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgIGlmICghY2dJbWFnZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOwot
ICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOwotICAgIGlmICgh
d2lkdGggfHwgIWhlaWdodCkKKyAgICBtX2ltYWdlV2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJ
bWFnZSk7CisgICAgbV9pbWFnZUhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7Cisg
ICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VIZWlnaHQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIFNlZSB3aGV0aGVyIHRoZSBpbWFnZSBpcyB1c2luZyBhbiBpbmRleGVk
IGNvbG9yIHNwYWNlLCBhbmQgaWYKQEAgLTEzMSw3ICsxMjgsNyBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICAvLyB0aGUgY29sb3Ig
dGFibGUsIHdoaWNoIHdvdWxkIGFsbG93IHVzIHRvIGF2b2lkIHByZW11bHRpcGx5aW5nIHRoZQog
ICAgICAgICAvLyBhbHBoYSBjaGFubmVsLiBDcmVhdGlvbiBvZiBhIGJpdG1hcCBjb250ZXh0IHdp
dGggYW4gYWxwaGEgY2hhbm5lbAogICAgICAgICAvLyBkb2Vzbid0IHNlZW0gdG8gd29yayB1bmxl
c3MgaXQncyBwcmVtdWx0aXBsaWVkLgotICAgICAgICBiaXRtYXBDb250ZXh0LmFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKDAsIHdpZHRoLCBoZWlnaHQsIDgsIHdpZHRoICogNCwKKyAgICAg
ICAgYml0bWFwQ29udGV4dC5hZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBtX2ltYWdl
V2lkdGgsIG1faW1hZ2VIZWlnaHQsIDgsIG1faW1hZ2VXaWR0aCAqIDQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlUkdCQ29sb3JTcGFj
ZVJlZigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIz
Mkhvc3QpKTsKICAgICAgICAgaWYgKCFiaXRtYXBDb250ZXh0KQpAQCAtMTM5LDcgKzEzNiw3IEBA
IGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAKICAg
ICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5k
TW9kZUNvcHkpOwogICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShiaXRt
YXBDb250ZXh0LmdldCgpLCBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7Ci0gICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLCBo
ZWlnaHQpLCBjZ0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbV9pbWFnZVdpZHRoLCBtX2ltYWdlSGVpZ2h0KSwg
Y2dJbWFnZSk7CiAKICAgICAgICAgLy8gTm93IGRpc2NhcmQgdGhlIG9yaWdpbmFsIENHIGltYWdl
IGFuZCByZXBsYWNlIGl0IHdpdGggYSBjb3B5IGZyb20gdGhlIGJpdG1hcCBjb250ZXh0LgogICAg
ICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRt
YXBDb250ZXh0LmdldCgpKSk7CkBAIC0xOTQsMTggKzE5MSwxOCBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICB9CiAgICAgfQogCi0g
ICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CisgICAgbV9hbHBoYU9w
ID0gQWxwaGFEb05vdGhpbmc7CiAgICAgQWxwaGFGb3JtYXQgYWxwaGFGb3JtYXQgPSBBbHBoYUZv
cm1hdE5vbmU7CiAgICAgc3dpdGNoIChDR0ltYWdlR2V0QWxwaGFJbmZvKGNnSW1hZ2UpKSB7CiAg
ICAgY2FzZSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0OgogICAgICAgICBpZiAoIXBy
ZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb1VubXVs
dGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKICAgICAg
ICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdEZpcnN0OwogICAgICAgICBicmVhazsKICAgICBj
YXNlIGtDR0ltYWdlQWxwaGFGaXJzdDoKICAgICAgICAgLy8gVGhpcyBwYXRoIGlzIG9ubHkgYWNj
ZXNzaWJsZSBmb3IgTWFjT1MgZWFybGllciB0aGFuIDEwLjYuNC4KICAgICAgICAgaWYgKHByZW11
bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb1ByZW11bHRp
cGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1ByZW11bHRpcGx5OwogICAgICAg
ICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0Rmlyc3Q7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3Q6CkBAIC0yMTQsMTIgKzIxMSwxMiBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICBi
cmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDoKICAgICAgICAg
aWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhh
RG9Vbm11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7
CiAgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0OwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIGtDR0ltYWdlQWxwaGFMYXN0OgogICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBo
YSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CisgICAg
ICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CiAgICAgICAgIGFscGhhRm9y
bWF0ID0gQWxwaGFGb3JtYXRMYXN0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdl
QWxwaGFOb25lU2tpcExhc3Q6CkBAIC0yMzEsMzMgKzIyOCwyOSBAQCBib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLAogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgU291cmNlRGF0YUZvcm1hdCBzcmNEYXRhRm9ybWF0
ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21wb25lbnRzUGVyUGl4ZWwsIGFscGhhRm9ybWF0LCBi
aXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdFbmRpYW5Tb3VyY2UpOwotICAgIGlmIChzcmNEYXRh
Rm9ybWF0ID09IFNvdXJjZUZvcm1hdE51bUZvcm1hdHMpCisKKyAgICBtX2ltYWdlU291cmNlRm9y
bWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21wb25lbnRzUGVyUGl4ZWwsIGFscGhhRm9ybWF0
LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdFbmRpYW5Tb3VyY2UpOworICAgIGlmIChtX2lt
YWdlU291cmNlRm9ybWF0ID09IFNvdXJjZUZvcm1hdE51bUZvcm1hdHMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHBpeGVsRGF0YTsKICAgICBwaXhl
bERhdGEuYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlk
ZXIoY2dJbWFnZSkpKTsKICAgICBpZiAoIXBpeGVsRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGNvbnN0IFVJbnQ4KiByZ2JhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwaXhlbERhdGEuZ2V0
KCkpOwogCi0gICAgdW5zaWduZWQgaW50IHBhY2tlZFNpemU7Ci0gICAgLy8gT3V0cHV0IGRhdGEg
aXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVudCA9PSAxKS4KLSAgICBpZiAoY29tcHV0ZUltYWdl
U2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmcGFja2VkU2l6ZSwg
MCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShwYWNrZWRTaXplKTsKKyAgICBtX2ltYWdlUGl4ZWxE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihwaXhl
bERhdGEuZ2V0KCkpKTsKIAogICAgIHVuc2lnbmVkIGludCBzcmNVbnBhY2tBbGlnbm1lbnQgPSAw
OwogICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhjZ0ltYWdl
KTsKLSAgICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9IGJ5dGVzUGVyUm93IC0gYml0c1BlclBpeGVs
IC8gOCAqIHdpZHRoOworICAgIHVuc2lnbmVkIHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQ
ZXJQaXhlbCAvIDggKiBtX2ltYWdlV2lkdGg7CiAgICAgaWYgKHBhZGRpbmcpIHsKICAgICAgICAg
c3JjVW5wYWNrQWxpZ25tZW50ID0gcGFkZGluZyArIDE7CiAgICAgICAgIHdoaWxlIChieXRlc1Bl
clJvdyAlIHNyY1VucGFja0FsaWdubWVudCkKICAgICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25t
ZW50OwogICAgIH0KLSAgICBib29sIHJ0ID0gcGFja1BpeGVscyhyZ2JhLCBzcmNEYXRhRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBzcmNVbnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0LCB0eXBlLCBuZWVkZWRBbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsK
LSAgICByZXR1cm4gcnQ7CisKKyAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gc3Jj
VW5wYWNrQWxpZ25tZW50OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMs
IGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsIGludCBjYW52YXNXaWR0aCwgaW50IGNh
bnZhc0hlaWdodCwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29u
dGV4dDNEQ2x1dHRlci5jcHAKaW5kZXggN2RmMWVlOTJkYjU5M2JmNzcwMDgxN2Q1MmFkNWI4MzU5
ZjA3OWZiMS4uOWQxYWIxNDNiNTg2NmJkODdiYTc1MGI5ZWMyNjc1ZGYxYWJjNWYwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0Nv
bnRleHQzRENsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcApAQCAtNTYsNyArNTYsMTEgQEAg
R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBp
bWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwgdW5zaWduZWQgaW50IHR5cGUsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVpbnQ4
X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFn
ZUxvY2tlcigpCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpn
ZXRJbWFnZURhdGEoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNERWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9H
cmFwaGljc0NvbnRleHQzREVmbC5jcHAKaW5kZXggMmUyYTQ5MzEzODkwMzJjMzA2ZDM2Y2ZhZTFi
ZDkwZDY0YjE5ODUwMy4uNWVmZmUyZGU0M2Y5NjU3NGJlZjI1MzBhNjJiMzIzMGJmNzAxMTU4NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNz
Q29udGV4dDNERWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9l
ZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCkBAIC0yNDEsNyArMjQxLDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUdyYXBoaWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIH0KICNlbmRpZgogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1h
Z2UqLCBHQzNEZW51bSAvKiBmb3JtYXQgKi8sIEdDM0RlbnVtIC8qIHR5cGUgKi8sIGJvb2wgLyog
cHJlbXVsdGlwbHlBbHBoYSAqLywgYm9vbCAvKiBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSAq
LywgVmVjdG9yPHVpbnQ4X3Q+JiAvKiBvdXRwdXRWZWN0b3IgKi8pCitHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcigpCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAppbmRleCA3MTVkMWI1ZTkw
NjJiN2ZiMDRiZmUwMWNlZGU1NDFkZjk5NDQ4YmIyLi5jNTdmOTVkNmVhMGEzZWJkMGM4MTQ4NmVl
YTQ5MzJjOTIwNTc0N2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcApAQCAtNDg1LDU0ICs0ODUs
NTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25z
dCBJbnRTaXplJiBzaXplKQogfQogI2VuZGlmCiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcigpCit7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEoYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQogewogICAgIFVOVVNFRF9Q
QVJBTShpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7Ci0gICAgaWYgKCFpbWFnZSkKKyAgICBp
ZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFFJbWFnZSBxdEltYWdl
OwogICAgIC8vIElzIGltYWdlIGFscmVhZHkgbG9hZGVkPyBJZiBub3QsIGxvYWQgaXQuCi0gICAg
aWYgKGltYWdlLT5kYXRhKCkpCi0gICAgICAgIHF0SW1hZ2UgPSBRSW1hZ2U6OmZyb21EYXRhKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWNoYXIqPihpbWFnZS0+ZGF0YSgpLT5kYXRhKCkpLCBpbWFn
ZS0+ZGF0YSgpLT5zaXplKCkpOworICAgIGlmIChtX2ltYWdlLT5kYXRhKCkpCisgICAgICAgIG1f
cXRJbWFnZSA9IFFJbWFnZTo6ZnJvbURhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+
KG1faW1hZ2UtPmRhdGEoKS0+ZGF0YSgpKSwgbV9pbWFnZS0+ZGF0YSgpLT5zaXplKCkpOwogICAg
IGVsc2UgewotICAgICAgICBRUGl4bWFwKiBuYXRpdmVQaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAgICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gbV9p
bWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAgLy8gV2l0aCBRUEEs
IHdlIGNhbiBhdm9pZCBhIGRlZXAgY29weS4KLSAgICAgICAgcXRJbWFnZSA9ICpuYXRpdmVQaXht
YXAtPmhhbmRsZSgpLT5idWZmZXIoKTsKKyAgICAgICAgbV9xdEltYWdlID0gKm5hdGl2ZVBpeG1h
cC0+aGFuZGxlKCktPmJ1ZmZlcigpOwogICAgIH0KIAotICAgIEFscGhhT3AgYWxwaGFPcCA9IEFs
cGhhRG9Ob3RoaW5nOwotICAgIHN3aXRjaCAocXRJbWFnZS5mb3JtYXQoKSkgeworICAgIG1fYWxw
aGFPcCA9IEFscGhhRG9Ob3RoaW5nOworICAgIHN3aXRjaCAobV9xdEltYWdlLmZvcm1hdCgpKSB7
CiAgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjoKICAgICAgICAgLy8gRm9yIG9wYXF1ZSBp
bWFnZXMsIHdlIHNob3VsZCBub3QgcHJlbXVsdGlwbHkgb3IgdW5tdWx0aXBseSBhbHBoYS4KICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzI6CiAgICAgICAgIGlm
IChwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgYWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0
aXBseTsKKyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDoK
ICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAgICAgICAgICAgYWxwaGFPcCA9IEFs
cGhhRG9Vbm11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlw
bHk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFRoZSBpbWFnZSBo
YXMgYSBmb3JtYXQgdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGluIHBhY2tQaXhlbHMuIFdlIGhhdmUg
dG8gY29udmVydCBpdCBoZXJlLgotICAgICAgICBxdEltYWdlID0gcXRJbWFnZS5jb252ZXJ0VG9G
b3JtYXQocHJlbXVsdGlwbHlBbHBoYSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBs
aWVkIDogUUltYWdlOjpGb3JtYXRfQVJHQjMyKTsKKyAgICAgICAgbV9xdEltYWdlID0gbV9xdElt
YWdlLmNvbnZlcnRUb0Zvcm1hdChwcmVtdWx0aXBseUFscGhhID8gUUltYWdlOjpGb3JtYXRfQVJH
QjMyX1ByZW11bHRpcGxpZWQgOiBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGFja2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQg
ZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgotICAgIGlmIChjb21wdXRl
SW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksIDEsICZwYWNrZWRTaXplLCAwKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1Ip
CisgICAgbV9pbWFnZVdpZHRoID0gbV9pbWFnZS0+d2lkdGgoKTsKKyAgICBtX2ltYWdlSGVpZ2h0
ID0gbV9pbWFnZS0+aGVpZ2h0KCk7CisgICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VI
ZWlnaHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gbV9x
dEltYWdlLmNvbnN0Qml0cygpOworICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBTb3VyY2VGb3Jt
YXRCR1JBODsKKyAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gMDsKIAotICAgIG91
dHB1dFZlY3Rvci5yZXNpemUocGFja2VkU2l6ZSk7Ci0KLSAgICByZXR1cm4gcGFja1BpeGVscyhx
dEltYWdlLmNvbnN0Qml0cygpLCBTb3VyY2VGb3JtYXRCR1JBOCwgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBhbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0
YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0
Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHQzRFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHQzRFNraWEuY3BwCmluZGV4IGZlYTZhZGNlMzAxODU3NzY0MDg2ZWEyN2I3
NWNlYmI5ZTZiMTU2OGUuLjRjNmU5MWIxYzU5OTFmNzdkOTQyNGM1OWRhZmU5MTllYWY1ZmNjNDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0M0RTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKQEAgLTQyLDU4ICs0Miw1NiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVt
dWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcigpCiB7Ci0gICAgaWYgKCFpbWFnZSkKKyAgICBp
ZiAoc2tpYUltYWdlKQorICAgICAgICBza2lhSW1hZ2UtPmJpdG1hcCgpLnVubG9ja1BpeGVscygp
OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRh
KGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkK
K3sKKyAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBPd25QdHI8
TmF0aXZlSW1hZ2VTa2lhPiBwaXhlbHM7Ci0gICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2Ug
PSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBBbHBoYU9wIG5lZWRl
ZEFscGhhT3AgPSBBbHBoYURvTm90aGluZzsKKyAgICBza2lhSW1hZ2UgPSBtX2ltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOworICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Ob3RoaW5n
OwogICAgIGJvb2wgaGFzQWxwaGEgPSBza2lhSW1hZ2UgPyAhc2tpYUltYWdlLT5iaXRtYXAoKS5p
c09wYXF1ZSgpIDogdHJ1ZTsKLSAgICBpZiAoKCFza2lhSW1hZ2UgfHwgaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFscGhhKSkgJiYgaW1hZ2Ut
PmRhdGEoKSkgeworICAgIGlmICgoIXNraWFJbWFnZSB8fCBpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSB8fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBtX2ltYWdlLT5kYXRh
KCkpIHsKICAgICAgICAgLy8gQXR0ZW1wdCB0byBnZXQgcmF3IHVucHJlbXVsdGlwbGllZCBpbWFn
ZSBkYXRhLgogICAgICAgICBPd25QdHI8SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKElt
YWdlRGVjb2Rlcjo6Y3JlYXRlKAotICAgICAgICAgICAgKihpbWFnZS0+ZGF0YSgpKSwgSW1hZ2VT
b3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwKKyAgICAgICAgICAgICoobV9pbWFnZS0+ZGF0
YSgpKSwgSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwKICAgICAgICAgICAgIGln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9m
aWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7
CiAgICAgICAgIGlmICghZGVjb2RlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgZGVjb2Rlci0+c2V0RGF0YShpbWFnZS0+ZGF0YSgpLCB0cnVlKTsKKyAgICAgICAgZGVjb2Rl
ci0+c2V0RGF0YShtX2ltYWdlLT5kYXRhKCksIHRydWUpOwogICAgICAgICBpZiAoIWRlY29kZXIt
PmZyYW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgSW1hZ2VG
cmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CiAgICAgICAgIGlm
ICghZnJhbWUgfHwgZnJhbWUtPnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGhhc0FscGhhID0gZnJhbWUtPmhh
c0FscGhhKCk7Ci0gICAgICAgIHBpeGVscyA9IGFkb3B0UHRyKGZyYW1lLT5hc05ld05hdGl2ZUlt
YWdlKCkpOwotICAgICAgICBpZiAoIXBpeGVscy5nZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21w
bGV0ZSgpIHx8ICFwaXhlbHMtPmJpdG1hcCgpLndpZHRoKCkgfHwgIXBpeGVscy0+Yml0bWFwKCku
aGVpZ2h0KCkpCisgICAgICAgIG1fbmF0aXZlSW1hZ2UgPSBhZG9wdFB0cihmcmFtZS0+YXNOZXdO
YXRpdmVJbWFnZSgpKTsKKyAgICAgICAgaWYgKCFtX25hdGl2ZUltYWdlLmdldCgpIHx8ICFtX25h
dGl2ZUltYWdlLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS53
aWR0aCgpIHx8ICFtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gcGl4
ZWxzLT5iaXRtYXAoKS5jb25maWcoKTsKKyAgICAgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29u
ZmlnID0gbV9uYXRpdmVJbWFnZS0+Yml0bWFwKCkuY29uZmlnKCk7CiAgICAgICAgIGlmIChza2lh
Q29uZmlnICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgc2tpYUltYWdlID0gcGl4ZWxzLmdldCgpOworICAgICAgICBza2lh
SW1hZ2UgPSBtX25hdGl2ZUltYWdlLmdldCgpOwogICAgICAgICBpZiAoaGFzQWxwaGEgJiYgcHJl
bXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvUHJlbXVs
dGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CiAgICAg
fSBlbHNlIGlmICghcHJlbXVsdGlwbHlBbHBoYSAmJiBoYXNBbHBoYSkKLSAgICAgICAgbmVlZGVk
QWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURv
VW5tdWx0aXBseTsKICAgICBpZiAoIXNraWFJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGNvbnN0IFNrQml0bWFwJiBza2lhSW1hZ2VSZWYgPSBza2lhSW1hZ2UtPmJpdG1hcCgpOwot
ICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhza2lhSW1hZ2VSZWYpOwotICAgIEFTU0VSVChza2lh
SW1hZ2VSZWYucm93Qnl0ZXMoKSA9PSBza2lhSW1hZ2VSZWYud2lkdGgoKSAqIDQpOwotICAgIHVu
c2lnbmVkIGludCBwYWNrZWRTaXplOwotICAgIC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFj
a2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAgaWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZv
cm1hdCwgdHlwZSwgc2tpYUltYWdlUmVmLndpZHRoKCksIHNraWFJbWFnZVJlZi5oZWlnaHQoKSwg
MSwgJnBhY2tlZFNpemUsIDApICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikKKworICAg
IG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBTS19CMzJfU0hJRlQgPyBTb3VyY2VGb3JtYXRSR0JBOCA6
IFNvdXJjZUZvcm1hdEJHUkE4OworICAgIG1faW1hZ2VXaWR0aCA9IHNraWFJbWFnZS0+Yml0bWFw
KCkud2lkdGgoKTsKKyAgICBtX2ltYWdlSGVpZ2h0ID0gc2tpYUltYWdlLT5iaXRtYXAoKS5oZWln
aHQoKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0aCB8fCAhbV9pbWFnZUhlaWdodCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIG91dHB1dFZlY3Rvci5yZXNpemUocGFja2VkU2l6ZSk7Ci0gICAg
cmV0dXJuIHBhY2tQaXhlbHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2tpYUlt
YWdlUmVmLmdldFBpeGVscygpKSwKLSAgICAgICAgICAgICAgICAgICAgICBTS19CMzJfU0hJRlQg
PyBTb3VyY2VGb3JtYXRSR0JBOCA6IFNvdXJjZUZvcm1hdEJHUkE4LAotICAgICAgICAgICAgICAg
ICAgICAgIHNraWFJbWFnZVJlZi53aWR0aCgpLCBza2lhSW1hZ2VSZWYuaGVpZ2h0KCksIDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBuZWVkZWRBbHBoYU9wLCBvdXRwdXRW
ZWN0b3IuZGF0YSgpKTsKKyAgICBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gMDsKKyAg
ICBza2lhSW1hZ2UtPmJpdG1hcCgpLmxvY2tQaXhlbHMoKTsKKyAgICBtX2ltYWdlUGl4ZWxEYXRh
ID0gc2tpYUltYWdlLT5iaXRtYXAoKS5nZXRQaXhlbHMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176183</attachid>
            <date>2012-11-26 22:55:13 -0800</date>
            <delta_ts>2012-12-04 01:40:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121127145014.patch</filename>
            <type>text/plain</type>
            <size>49190</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1ODE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmNiNTU5NmQ0NzQyZmFl
Y2E2ZWNjMmViNGYxZWJkYzcyYjQ5ZTEwOC4uMDdhYTBmYWRiYzU2NWFjNjcxYTU5NGQzZjhmODU4
ZjcwMjc5NTE1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTExLTI2ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgbWVtb3J5IGNvcHkgb3Ig
Y29udmVyc2lvbnMgaW4gdGhlIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZm9yIEhUTUxW
aWRlb0VsZW1lbnQgd2hpY2ggbWF5IGJlIGF2b2lkZWQuIE1vcmVvdmVyLCB0aGUgdGV4SW1hZ2Uy
RCBwYXRoIGZvciBJbWFnZSwgQ2FudmFzIGFuZCBWaWRlbyBjYW4gYmUgdW5pZmllZCB3aXRoIEFy
cmF5QnVmZmVyVmlldyBhbmQgSW1hZ2VCdWZmZXIgaW4gZnV0dXJlIGJ5IGFic3RyYWN0aW5nIGEg
Z2VuZXJhbCBvYmplY3QgdGhhdCBob2xkcyB0aGUgcG9pbnRlciB0byBzb3VyY2UgZGF0YSwgc291
cmNlIGZvcm1hdCwgYWxwaGEgdmFsdWUsIHN0cmlkZSwgZXRjLiAKKyAgICAgICAgVHdvIG1haW4g
Y2hhbmdlcyBpbiB0aGUgZW5oYW5jZW1lbnQ6CisgICAgICAgIC0gVGhlIGZpcnN0IGNoYW5nZSBp
cyBvbiB0aGUgZnJhbWV3b3JrIHRvIGdldCBhIHBvaW50ZXIgdG8gdGhlIHNvdXJjZSBkYXRhIHRo
YXQgYmUgY2FuIHN0ZWFkaWx5IHVzZWQgd2l0aCBpdHMgbGlmZXRpbWUgYW5kIHNjb3BlIGNvbnRy
b25hYmxlLgorICAgICAgICAtIFRoZSBzZWNvbmQgY2hhbmdlIGlzIGZvY3VzZWQgb24gdGhlIHBl
cmZvcm1hbmNlIGltcHJvdmVtZW50LCBzdWNoIGFzIEJhY2tpbmdTdG9yZSBjb3B5LCBhbHBoYSB2
YWx1ZSByZXZpc2UgYW5kIGZhc3QgZ28gdGhyb3VnaCBwYXRoIHdpdGhvdXQgY29udmVyc2lvbi4g
CisKKyAgICAgICAgQWxyZWFkeSBjb3ZlcmVkIGJ5IGN1cnJlbnQgdGVzdHMuIAorCisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1l
VG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1
YkltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0Lmg6CisgICAgICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKEltYWdl
TG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tl
cjo6SW1hZ2VMb2NrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Oklt
YWdlTG9ja2VyOjppbWFnZVBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VMb2NrZXI6OmltYWdlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjppbWFnZUhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6OmltYWdlU291cmNlRm9ybWF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6aW1hZ2VB
bHBoYU9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tl
cjo6aW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL05hdGl2ZUltYWdlUHRyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcik6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1h
Z2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQz
RENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tl
cjo6fkltYWdlTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RDbHV0dGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6fkltYWdl
TG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcik6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxv
Y2tlcjo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpJbWFnZUxvY2tlcjo6fkltYWdlTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlcjo6
fkltYWdlTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEpOgorCiAyMDEyLTExLTI2
ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIENv
b3JkaW5hdGVkIEdyYXBoaWNzOiBTZXQgdmlzaWJpbGl0eSB0byBhIG1hc2sgbGF5ZXIgaW4gR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA3MGNiODUzYzM3
OWZmMDY1Yjk4N2Q5ZGVlMTA0MzU3ZDI4MWJkYjgxLi4xOTY0MzAzMTc2ZDkzODljZDY5NzJkYWNl
MmUxNmQ5MWNiYWExMDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2MTEsMjIgKzM2MTEsNDUgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGUKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEltYWdlKiBpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CiAgICAgaWYgKCF2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQog
ICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgaWYgKCFtX2Nv
bnRleHQtPmV4dHJhY3RJbWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgZmxpcFksIHByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PTkUsIGRhdGEpKSB7CisKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2Nr
ZXIgaW1hZ2VMb2NrZXIoaW1hZ2UsIGRvbVNvdXJjZSk7CisgICAgaWYgKCFpbWFnZUxvY2tlci5n
ZXRJbWFnZURhdGEocHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lv
biA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBp
bWFnZSBkYXRhIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBHcmFwaGljc0NvbnRl
eHQzRDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VMb2NrZXIuaW1h
Z2VTb3VyY2VGb3JtYXQoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9w
ID0gaW1hZ2VMb2NrZXIuaW1hZ2VBbHBoYU9wKCk7CisgICAgdm9pZCogaW1hZ2VQaXhlbERhdGEg
PSBjb25zdF9jYXN0PHZvaWQqPihpbWFnZUxvY2tlci5pbWFnZVBpeGVsRGF0YSgpKTsKKworICAg
IC8vIERvIHNvbWUgb3B0aW1pemF0aW9uIG9uIGFscGhhT3Agd2hlbiBJbWFnZUh0bWxEb21Tb3Vy
Y2UgaXMgVmlkZW8gZWxlbWVudAorICAgIC8vIHNpbmNlIHRoZSBhbHBoYSB2YWx1ZSBpcyB0aGUg
c2FtZSBmb3IgYWxsIHBpeGVscworICAgIGlmIChkb21Tb3VyY2UgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkhUTUxEb21WaWRlbykgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhVmFsdWUgPSAq
KHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGltYWdlUGl4ZWxEYXRhKSArIDMpOwor
ICAgICAgICBpZiAoKGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Vbm11bHRp
cGx5ICYmIChhbHBoYVZhbHVlID09IDB4RkYgfHwgYWxwaGFWYWx1ZSA9PSAweDApKQorICAgICAg
ICAgICAgfHwgKGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9QcmVtdWx0aXBs
eSAmJiBhbHBoYVZhbHVlID09IDB4RkYpKQorICAgICAgICAgICAgYWxwaGFPcCA9IEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYURvTm90aGluZzsKKyAgICB9CisKKyAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3Jt
YXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgIWZsaXBZKQorICAgICAgICBu
ZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4
dC0+ZXh0cmFjdEltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwg
ZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlTG9ja2VyLmltYWdlV2lkdGgo
KSwgaW1hZ2VMb2NrZXIuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VMb2NrZXIuaW1hZ2VTb3VyY2VVbnBh
Y2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2Ug
ZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYg
KG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWko
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRC
YXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2Ut
PmhlaWdodCgpLCAwLAotICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YS5kYXRh
KCksIGVjKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVk
Q29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKICAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwog
fQpAQCAtMzY5MCw3ICszNzEzLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVu
ZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLAorICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5p
bWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0
bWxEb21JbWFnZSwKICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIApAQCAtMzcyOSwxMiArMzc1MiwxMiBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtCiAgICAgaWYgKGltYWdlRGF0YSkKICAgICAgICAgdGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0
KCksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKKyAg
ICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1h
dCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SFRNTERv
bUNhbnZhcywKICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1QYXNzUmVmUHRy
PEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRl
b0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8SW1hZ2U+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCog
dmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgoKSB8fCAhdmlkZW8t
PnZpZGVvSGVpZ2h0KCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgIm5vIHZpZGVvIik7CkBAIC0zNzUz
LDcgKzM3NzYsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
ZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZAogICAgIEludFJlY3QgZGVzdFJl
Y3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICAvLyBGSVhNRTogVHVy
biB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBpbnN0ZWFkIG9mIENQVSByZWFkYmFj
ay4KICAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmLT5jb250ZXh0KCks
IGRlc3RSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7
CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LApAQCAtMzc2MiwxMCArMzc4NSwxOCBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRM
b3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9G
cmFtZVRvSW1hZ2UodmlkZW8sIGVjKTsKKworLy8gRklYTUU6IG9ubHkgU0tJQSBwb3J0IGlzIGVu
YWJsZWQgdG8gZ28gdGhyb3VnaCB0aGUgb3B0aW1pemVkIHBhdGgsIG90aGVyIHBvcnRzIG1heSBi
ZSBlbmFibGVkIGFzIHdlbGwgYWZ0ZXIgdmVyaWZpZWQuICAgIAorI2lmIFVTRShTS0lBKQorICAg
IEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSA9IERvbnRDb3B5QmFja2luZ1N0b3Jl
OworI2Vsc2UKKyAgICBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlOworI2VuZGlmCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVU
b0ltYWdlKHZpZGVvLCBiYWNraW5nU3RvcmVDb3B5LCBlYyk7CiAgICAgaWYgKCFpbWFnZSkKICAg
ICAgICAgcmV0dXJuOwotICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBtX3VucGFja0ZsaXBZLCBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKworICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0Nv
bnRleHQzRDo6SFRNTERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIGVjKTsKIH0KICNlbmRpZgogCkBAIC0zODQ3LDIyICszODc4LDQ1IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhT
dWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIElt
YWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3Vy
Y2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFj
dEltYWdlRGF0YShpbWFnZSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSwg
ZGF0YSkpIHsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUxvY2tlciBpbWFnZUxvY2tl
cihpbWFnZSwgZG9tU291cmNlKTsgIAorICAgIGlmICghaW1hZ2VMb2NrZXIuZ2V0SW1hZ2VEYXRh
KHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUxvY2tlci5pbWFnZVNvdXJjZUZvcm1h
dCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUxvY2tl
ci5pbWFnZUFscGhhT3AoKTsKKyAgICB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGNvbnN0X2Nhc3Q8
dm9pZCo+KGltYWdlTG9ja2VyLmltYWdlUGl4ZWxEYXRhKCkpOworCisgICAgLy8gRG8gc29tZSBv
cHRpbWl6YXRpb24gb24gYWxwaGFPcCB3aGVuIEltYWdlSHRtbERvbVNvdXJjZSBpcyBWaWRlbyBl
bGVtZW50CisgICAgLy8gc2luY2UgdGhlIGFscGhhIHZhbHVlIGlzIHRoZSBzYW1lIGZvciBhbGwg
cGl4ZWxzCisgICAgaWYgKGRvbVNvdXJjZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SFRNTERvbVZp
ZGVvKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYWxwaGFWYWx1ZSA9ICoocmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oaW1hZ2VQaXhlbERhdGEpICsgMyk7CisgICAgICAgIGlmICgo
YWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1VubXVsdGlwbHkgJiYgKGFscGhh
VmFsdWUgPT0gMHhGRiB8fCBhbHBoYVZhbHVlID09IDB4MCkpCisgICAgICAgICAgICB8fCAoYWxw
aGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb1ByZW11bHRpcGx5ICYmIGFscGhhVmFs
dWUgPT0gMHhGRikpCisgICAgICAgICAgICBhbHBoYU9wID0gR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhRG9Ob3RoaW5nOworICAgIH0KKyAgICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1
ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBz
b3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBOCAm
JiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVy
c2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFj
dEltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFs
cGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlTG9ja2VyLmltYWdlV2lkdGgoKSwgaW1hZ2VM
b2NrZXIuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VMb2NrZXIuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1l
bnQoKSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKG1fdW5wYWNr
QWxpZ25tZW50ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVp
Z2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLmRhdGEoKSwg
ZWMpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgbmVlZENv
bnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7CiAgICAgaWYgKG1f
dW5wYWNrQWxpZ25tZW50ICE9IDEpCiAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKIH0K
QEAgLTM5MjQsOCArMzk3OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgICAgIGVj
ID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHRleFN1YkltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLAot
ICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVu
ZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdl
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKQEAgLTM5NDYs
NyArMzk5OSw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgaWYgKGltYWdlRGF0YSkK
ICAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgdGV4
U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0
eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3Bp
ZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SFRNTERvbUNhbnZhcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBl
Yyk7CiB9CiAKQEAgLTM5NTcsMTAgKzQwMTAsMTcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4K
ICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgZWMpOwor
Ly8gRklYTUU6IG9ubHkgU0tJQSBwb3J0IGlzIGVuYWJsZWQgdG8gZ28gdGhyb3VnaCB0aGUgb3B0
aW1pemVkIHBhdGgsIG90aGVyIHBvcnRzIG1heSBiZSBlbmFibGVkIGFzIHdlbGwgYWZ0ZXIgdmVy
aWZpZWQuCisjaWYgVVNFKFNLSUEpCisgICAgQmFja2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVD
b3B5ID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisjZWxzZQorICAgIEJhY2tpbmdTdG9yZUNvcHkg
YmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmU7CisjZW5kaWYKKyAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIGJhY2tpbmdTdG9yZUNvcHks
IGVjKTsKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgdGV4U3ViSW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZS5nZXQoKSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CisK
KyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SFRNTERvbVZpZGVv
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oCmluZGV4IDg2ZWI4MjlmMjI3MGNhMmJhZDA5ZmY0ODM4OWJhYmE0YjhkNjgwMDkuLmQ0
ODZhNjE1NGE1NzUzOTNkM2I0OTZiNDRkYTA4NThjNzFkZmZiMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRy
YXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXZWJHTEdldElu
Zm8uaCIKIApAQCAtMzcyLDcgKzM3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENvbXByZXNz
ZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNz
UmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhUTUxW
aWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7CiAjZW5kaWYK
IAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwpAQCAtNTMzLDE1ICs1
MzQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSW1hZ2UqLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJESW1wbChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdl
MkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSogaW1h
Z2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2Us
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgdm9pZCBoYW5kbGVOUE9UVGV4dHVyZXMoY29uc3QgY2hhciosIGJvb2wpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5j
cHAKaW5kZXggYTk4YjU0NmJhZjdlODEzYjkyODk4MmE3ZGM3MjkzNzVjNTNjNDg0Zi4uNDhiZjI5
ZmQ3Y2I5NDZiMzczZTY5ZWQ5ZjdhMDRmN2I3YzJlMGM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcApAQCAtMTY5
LDI5ICsxNjksNDkgQEAgR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVJbWFnZVNp
emVJbkJ5dGVzKEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHkKIH0KIAogYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29s
b3JQcm9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4mIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSkKKyAgICB2b2lkKiBwaXhlbHMs
CisgICAgR0MzRGVudW0gZm9ybWF0LAorICAgIEdDM0RlbnVtIHR5cGUsCisgICAgYm9vbCBmbGlw
WSwKKyAgICBBbHBoYU9wIGFscGhhT3AsCisgICAgU291cmNlRGF0YUZvcm1hdCBzb3VyY2VGb3Jt
YXQsIAorICAgIHVuc2lnbmVkIHdpZHRoLAorICAgIHVuc2lnbmVkIGhlaWdodCwKKyAgICB1bnNp
Z25lZCBzb3VyY2VVbnBhY2tBbGlnbm1lbnQsCisgICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQor
eworICAgIGlmICghcGl4ZWxzKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFnZXRJ
bWFnZURhdGEoaW1hZ2UsIGZvcm1hdCwgdHlwZSwgcHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUsIGRhdGEpKQorCisgICAgdW5zaWduZWQgcGFja2VkU2l6ZTsKKyAg
ICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgorICAg
IGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQs
IDEsICZwYWNrZWRTaXplLCAwKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBkYXRhLnJlc2l6ZShwYWNrZWRTaXplKTsKKworICAgIGlm
ICghcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMpLAor
ICAgICAgICBzb3VyY2VGb3JtYXQsCisgICAgICAgIHdpZHRoLAorICAgICAgICBoZWlnaHQsCisg
ICAgICAgIHNvdXJjZVVucGFja0FsaWdubWVudCwKKyAgICAgICAgZm9ybWF0LAorICAgICAgICB0
eXBlLAorICAgICAgICBhbHBoYU9wLAorICAgICAgICBkYXRhLmRhdGEoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBpZiAoZmxpcFkpIHsKLSAgICAgICAgdW5zaWduZWQgaW50IGNvbXBv
bmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgICAgIHVuc2lnbmVkIGNvbXBv
bmVudHNQZXJQaXhlbCwgYnl0ZXNQZXJDb21wb25lbnQ7CiAgICAgICAgIGlmICghY29tcHV0ZUZv
cm1hdEFuZFR5cGVQYXJhbWV0ZXJzKGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXBvbmVudHNQZXJQaXhlbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzUGVyQ29tcG9uZW50KSkKKyAg
ICAgICAgICAgICZjb21wb25lbnRzUGVyUGl4ZWwsCisgICAgICAgICAgICAmYnl0ZXNQZXJDb21w
b25lbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyBUaGUgaW1hZ2Ug
ZGF0YSBpcyB0aWdodGx5IHBhY2tlZCwgYW5kIHdlIHVwbG9hZCBpdCBhcyBzdWNoLgotICAgICAg
ICB1bnNpZ25lZCBpbnQgdW5wYWNrQWxpZ25tZW50ID0gMTsKLSAgICAgICAgZmxpcFZlcnRpY2Fs
bHkoZGF0YS5kYXRhKCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVzUGVyQ29tcG9uZW50LAot
ICAgICAgICAgICAgICAgICAgICAgICB1bnBhY2tBbGlnbm1lbnQpOworICAgICAgICB1bnNpZ25l
ZCB1bnBhY2tBbGlnbm1lbnQgPSAxOworICAgICAgICBmbGlwVmVydGljYWxseShkYXRhLmRhdGEo
KSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgIGNvbXBvbmVudHNQZXJQaXhlbCAqIGJ5dGVz
UGVyQ29tcG9uZW50LAorICAgICAgICAgICAgdW5wYWNrQWxpZ25tZW50KTsKICAgICB9CisKICAg
ICBpZiAoSW1hZ2VPYnNlcnZlciAqb2JzZXJ2ZXIgPSBpbWFnZS0+aW1hZ2VPYnNlcnZlcigpKQog
ICAgICAgICBvYnNlcnZlci0+ZGlkRHJhdyhpbWFnZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC05
NjMsNyArOTgzLDcgQEAgdm9pZCBwYWNrT25lUm93T2ZSR0JBOFRvUkdCQThQcmVtdWx0aXBseShj
b25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRlc3RpbmEKIHZvaWQgcGFja09uZVJvd09m
UkdCQThUb1JHQkE4VW5tdWx0aXBseShjb25zdCB1aW50OF90KiBzb3VyY2UsIHVpbnQ4X3QqIGRl
c3RpbmF0aW9uLCB1bnNpZ25lZCBpbnQgcGl4ZWxzUGVyUm93KQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgcGl4ZWxzUGVyUm93OyArK2kpIHsKLSAgICAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSAxLjBmIC8gKHNvdXJjZVszXSA/IHNvdXJjZVszXSAvIDI1NS4wZiA6IDEuMGYp
OworICAgICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IHNvdXJjZVszXSA/IDI1NS4wZiAvIHNvdXJj
ZVszXSA6IDEuMGY7CiAgICAgICAgIHVpbnQ4X3Qgc291cmNlUiA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN0YXRpY19jYXN0PGZsb2F0Pihzb3VyY2VbMF0pICogc2NhbGVGYWN0b3IpOwogICAgICAg
ICB1aW50OF90IHNvdXJjZUcgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzdGF0aWNfY2FzdDxmbG9h
dD4oc291cmNlWzFdKSAqIHNjYWxlRmFjdG9yKTsKICAgICAgICAgdWludDhfdCBzb3VyY2VCID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4oc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNvdXJjZVsyXSkgKiBzY2Fs
ZUZhY3Rvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaAppbmRleCA0ZWRlMGY4MTdmNmMwYzMwYjdhM2U1NTI4OTZkZTA2ZDQ3
M2IyOTAwLi4yZWRlNTg5OGMxOTdmYzBjMjM1YmIyMTA3YTJkYzE4ZjE5ZjE0ODIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RfaAogI2RlZmlu
ZSBHcmFwaGljc0NvbnRleHQzRF9oCiAKKyNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIklu
dFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCkBAIC0xMDEsNiArMTAyLDcgQEAgY2xhc3MgRXh0ZW5zaW9uczNEUXQ7CiBjbGFz
cyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIElt
YWdlU291cmNlOwogY2xhc3MgSW1hZ2VEYXRhOwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNp
emU7CkBAIC01NjQsMTggKzU2Niw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQqIGltYWdlU2l6ZUluQnl0ZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50KiBwYWRkaW5nSW5CeXRlcyk7
CiAKLSAgICAvLyBFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgdGhlIGdpdmVuIEltYWdlIGludG8g
dGhlIHBhc3NlZCBWZWN0b3IsCi0gICAgLy8gcGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRp
bmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwKLSAgICAvLyBhbmQgb2JleWluZyB0aGUg
ZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGFuZCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZQot
ICAgIC8vIGZsYWdzLiBSZXR1cm5zIHRydWUgdXBvbiBzdWNjZXNzLgotICAgIHN0YXRpYyBib29s
IGV4dHJhY3RJbWFnZURhdGEoSW1hZ2UqLAotICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKTsKLQogICAgIC8vIEV4dHJhY3RzIHRoZSBjb250ZW50
cyBvZiB0aGUgZ2l2ZW4gSW1hZ2VEYXRhIGludG8gdGhlIHBhc3NlZCBWZWN0b3IsCiAgICAgLy8g
cGFja2luZyB0aGUgcGl4ZWwgZGF0YSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQg
dHlwZSwKICAgICAvLyBhbmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEg
ZmxhZ3MuIFJldHVybnMgdHJ1ZQpAQCAtODc0LDM0ICs4NjQsMTEgQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHVuc2lnbmVkIGdldENoYW5uZWxCaXRzQnlGb3JtYXQoR0MzRGVudW0pOwogCi0gIHBy
aXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9zdFdpbmRvdyosIFJl
bmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKLQotICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVz
dCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgotICAgIC8vCi0gICAg
Ly8gR2V0cyB0aGUgZGF0YSBmb3IgdGhlIGdpdmVuIEltYWdlIGludG8gb3V0cHV0VmVjdG9yIGlu
IHRoZQotICAgIC8vIGZvcm1hdCBzcGVjaWZpZWQgYnkgdGhlIChPcGVuR0wtc3R5bGUpIGZvcm1h
dCBhbmQgdHlwZQotICAgIC8vIGFyZ3VtZW50cy4gRGVzcGl0ZSB0aGUgZmFjdCB0aGF0IHRoZSBv
dXRwdXRWZWN0b3IgY29udGFpbnMKLSAgICAvLyB1aW50OF90LCBpZiB0aGUgZm9ybWF0IGFuZCB0
eXBlIHNwZWNpZnkgcGFja2VkIHBpeGVscywgdGhlbgotICAgIC8vIGl0IHdpbGwgZXNzZW50aWFs
bHkgY29udGFpbiB1aW50MTZfdCBhZnRlciB0aGUgZXh0cmFjdGlvbgotICAgIC8vIHByb2Nlc3Mu
Ci0gICAgLy8KLSAgICAvLyBJZiBwcmVtdWx0aXBseUFscGhhIGlzIHRydWUsIHRoZSBhbHBoYSBj
aGFubmVsLCBpZiBhbnksCi0gICAgLy8gd2lsbCBiZSBtdWx0aXBsaWVkIGludG8gdGhlIGNvbG9y
IGNoYW5uZWxzIGR1cmluZyB0aGUKLSAgICAvLyBleHRyYWN0aW9uIHByb2Nlc3MuIFRoaXMgcHJl
bXVsdGlwbGljYXRpb24gb2NjdXJzIGJlZm9yZQotICAgIC8vIGFueSBwYWNraW5nIG9mIHBpeGVs
IGRhdGEuCi0gICAgLy8KLSAgICAvLyBJZiBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSBpcyB0
cnVlLCBnYW1tYSBjb3JyZWN0aW9uIGFuZCBJQ0MKLSAgICAvLyBwcm9maWxlIHdvbid0IGJlIGFw
cGxpZWQuCi0gICAgLy8KLSAgICAvLyBObyB2ZXJ0aWNhbCBmbGlwIG9mIHRoZSBpbWFnZSBkYXRh
IGlzIHBlcmZvcm1lZCBieSB0aGlzCi0gICAgLy8gbWV0aG9kLgotICAgIHN0YXRpYyBib29sIGdl
dEltYWdlRGF0YShJbWFnZSosCi0gICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpOworICAgIGVudW0gSW1hZ2VIdG1sRG9tU291cmNlIHsK
KyAgICAgICAgSHRtbERvbUltYWdlID0gMCwKKyAgICAgICAgSFRNTERvbUNhbnZhcyA9IDEsCisg
ICAgICAgIEhUTUxEb21WaWRlbyA9IDIKKyAgICB9OwogCiAgICAgLy8gUG9zc2libGUgYWxwaGEg
b3BlcmF0aW9ucyB0aGF0IG1heSBuZWVkIHRvIG9jY3VyIGR1cmluZwogICAgIC8vIHBpeGVsIHBh
Y2tpbmcuIEZJWE1FOiBrQWxwaGFEb1VubXVsdGlwbHkgaXMgbG9zc3kgYW5kIG11c3QKQEAgLTkx
Miw2ICs4NzksNTEgQEAgcHVibGljOgogICAgICAgICBBbHBoYURvVW5tdWx0aXBseSA9IDIKICAg
ICB9OwogCisgICAgLy8gRXh0cmFjdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBJbWFnZSBp
bnRvIHRoZSBwYXNzZWQgVmVjdG9yLAorICAgIC8vIHBhY2tpbmcgdGhlIHBpeGVsIGRhdGEgYWNj
b3JkaW5nIHRvIHRoZSBnaXZlbiBmb3JtYXQgYW5kIHR5cGUsCisgICAgLy8gYW5kIG9iZXlpbmcg
dGhlIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBhbmQgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUKKyAgICAvLyBmbGFncy4gUmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KKyAgICBzdGF0aWMg
Ym9vbCBleHRyYWN0SW1hZ2VEYXRhKEltYWdlKiwgdm9pZCogcGl4ZWxzLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgZmxpcFksIEFscGhhT3AsIFNvdXJjZURhdGFGb3JtYXQg
c291cmNlRm9ybWF0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBz
b3VyY2VVbnBhY2tBbGlnbm1lbnQsIFZlY3Rvcjx1aW50OF90PiYgZGF0YSk7CisKKyAgICBjbGFz
cyBJbWFnZUxvY2tlciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5JbWFnZUxvY2tl
cigpOworICAgICAgICBib29sIGdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJv
b2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOworCisgICAgICAgIEltYWdlTG9ja2VyKElt
YWdlKiBpbWFnZSwgSW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSkge21faW1hZ2UgPSBpbWFn
ZTsgbV9pbWFnZUh0bWxEb21Tb3VyY2UgPSBkb21Tb3VyY2U7fTsKKyAgICAgICAgY29uc3Qgdm9p
ZCogaW1hZ2VQaXhlbERhdGEoKSB7cmV0dXJuIG1faW1hZ2VQaXhlbERhdGE7fTsKKyAgICAgICAg
dW5zaWduZWQgaW1hZ2VXaWR0aCgpIHtyZXR1cm4gbV9pbWFnZVdpZHRoO307CisgICAgICAgIHVu
c2lnbmVkIGltYWdlSGVpZ2h0KCkge3JldHVybiBtX2ltYWdlSGVpZ2h0O307CisgICAgICAgIFNv
dXJjZURhdGFGb3JtYXQgaW1hZ2VTb3VyY2VGb3JtYXQoKSB7cmV0dXJuIG1faW1hZ2VTb3VyY2VG
b3JtYXQ7fTsKKyAgICAgICAgQWxwaGFPcCBpbWFnZUFscGhhT3AoKSB7cmV0dXJuIG1fYWxwaGFP
cDt9CisgICAgICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkge3JldHVy
biBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50O307IAorICAgIHByaXZhdGU6CisjaWYgVVNF
KFNLSUEpCisgICAgICAgIE93blB0cjxOYXRpdmVJbWFnZVNraWE+IG1fbmF0aXZlSW1hZ2U7Cisg
ICAgICAgIE5hdGl2ZUltYWdlU2tpYSogc2tpYUltYWdlOworI2VsaWYgVVNFKENBSVJPKQorICAg
ICAgICBJbWFnZVNvdXJjZSogbV9kZWNvZGVyOworICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBtX2ltYWdlU3VyZmFjZTsKKyNlbGlmIFVTRShDRykKKyAgICAgICAgQ0dJbWFnZVJlZiBj
Z0ltYWdlOworICAgICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gZGVjb2RlZEltYWdlOworICAg
ICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwaXhlbERhdGE7CisjZWxpZiBQTEFURk9STShRVCkK
KyAgICAgICAgUUltYWdlIG1fcXRJbWFnZTsKKyNlbmRpZgorICAgICAgICBJbWFnZSogbV9pbWFn
ZTsKKyAgICAgICAgSW1hZ2VIdG1sRG9tU291cmNlIG1faW1hZ2VIdG1sRG9tU291cmNlOworICAg
ICAgICBjb25zdCB2b2lkKiBtX2ltYWdlUGl4ZWxEYXRhOworICAgICAgICB1bnNpZ25lZCBtX2lt
YWdlV2lkdGg7CisgICAgICAgIHVuc2lnbmVkIG1faW1hZ2VIZWlnaHQ7CisgICAgICAgIFNvdXJj
ZURhdGFGb3JtYXQgbV9pbWFnZVNvdXJjZUZvcm1hdDsKKyAgICAgICAgQWxwaGFPcCBtX2FscGhh
T3A7CisgICAgICAgIHVuc2lnbmVkIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7CisgICAg
fTsKKworICAgIHByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0M0QoQXR0cmlidXRlcywgSG9z
dFdpbmRvdyosIFJlbmRlclN0eWxlID0gUmVuZGVyT2Zmc2NyZWVuKTsKKwogICAgIC8vIEhlbHBl
ciBmb3IgZ2V0SW1hZ2VEYXRhIHdoaWNoIGltcGxlbWVudHMgcGFja2luZyBvZiBwaXhlbAogICAg
IC8vIGRhdGEgaW50byB0aGUgc3BlY2lmaWVkIE9wZW5HTCBkZXN0aW5hdGlvbiBmb3JtYXQgYW5k
IHR5cGUuCiAgICAgLy8gQSBzb3VyY2VVbnBhY2tBbGlnbm1lbnQgb2YgemVybyBpbmRpY2F0ZXMg
dGhhdCB0aGUgc291cmNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9OYXRpdmVJbWFnZVB0ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TmF0aXZlSW1hZ2VQdHIuaAppbmRleCBjOThmOGMyNWE5YTg3NmM0YWI2ZTQwODY4YzJkYmNiMjc2
ZDBkY2QwLi4wNTMwYWRlMTI3OTdkZjBmMjA0YTg1ODgyYjg1Y2I1YTRhMDNjY2U4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFnZVB0ci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdlUHRyLmgKQEAg
LTM0LDYgKzM0LDcgQEAgY2xhc3Mgd3hHcmFwaGljc0JpdG1hcDsKICNlbGlmIFVTRShDRykKIHR5
cGVkZWYgc3RydWN0IENHSW1hZ2UqIENHSW1hZ2VSZWY7CiAjZWxpZiBQTEFURk9STShRVCkKKyNp
bmNsdWRlICJOYXRpdmVJbWFnZVF0LmgiCiAjaW5jbHVkZSA8cWdsb2JhbC5oPgogUVRfQkVHSU5f
TkFNRVNQQUNFCiBjbGFzcyBRUGl4bWFwOwpAQCAtNDEsNiArNDIsNyBAQCBRVF9FTkRfTkFNRVNQ
QUNFCiAjZWxpZiBVU0UoQ0FJUk8pCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VDYWlyby5oIgogI2Vs
aWYgVVNFKFNLSUEpCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBOYXRpdmVJbWFnZVNraWE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwCmluZGV4IDcwMzNmYTZkYTY3NjEwMTM2YjQ0M2JmNjkxZDMxYzZmMzZkNDYwZjUu
LjFhNGExYWU2MGEyM2Q3NzNmOWIzYmI5NmUwZGFkMWE2NzQwM2M2YzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC0xNjMsNTYgKzE2Myw2MCBAQCBHcmFwaGljc0NvbnRl
eHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZtX2Zibyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFn
ZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0eXBlLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1
aW50OF90PiYgb3V0cHV0VmVjdG9yKQorR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjp+
SW1hZ2VMb2NrZXIoKQogewotICAgIGlmICghaW1hZ2UpCisgICAgaWYgKG1fZGVjb2RlcikKKyAg
ICAgICAgZGVsZXRlIG1fZGVjb2RlcjsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VMb2NrZXI6OmdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgLy8gV2UgbmVlZCB0aGlzIHRvIHN0YXkgaW4gc2NvcGUgYmVjYXVzZSB0
aGUgbmF0aXZlIGltYWdlIGlzIGp1c3QgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRhdGEuCi0gICAg
SW1hZ2VTb3VyY2UgZGVjb2RlcihwcmVtdWx0aXBseUFscGhhID8gSW1hZ2VTb3VyY2U6OkFscGhh
UHJlbXVsdGlwbGllZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291
cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRD
b2xvclByb2ZpbGVBcHBsaWVkKTsKLSAgICBBbHBoYU9wIGFscGhhT3AgPSBBbHBoYURvTm90aGlu
ZzsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2U7Ci0gICAgaWYgKGlt
YWdlLT5kYXRhKCkpIHsKLSAgICAgICAgZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRy
dWUpOworICAgIG1fZGVjb2RlciA9IG5ldyBJbWFnZVNvdXJjZShwcmVtdWx0aXBseUFscGhhID8g
SW1hZ2VTb3VyY2U6OkFscGhhUHJlbXVsdGlwbGllZCA6IEltYWdlU291cmNlOjpBbHBoYU5vdFBy
ZW11bHRpcGxpZWQsIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6Okdh
bW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJv
ZmlsZUFwcGxpZWQpOworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgSW1hZ2VTb3VyY2UmIGRlY29kZXIgPSAqbV9kZWNvZGVyOworCisgICAgbV9hbHBoYU9w
ID0gQWxwaGFEb05vdGhpbmc7CisgICAgaWYgKG1faW1hZ2UtPmRhdGEoKSkgeworICAgICAgICBk
ZWNvZGVyLnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAgaWYgKCFkZWNv
ZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBPd25QdHI8TmF0aXZlSW1hZ2VDYWly
bz4gbmF0aXZlSW1hZ2UgPSBhZG9wdFB0cihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7
Ci0gICAgICAgIGltYWdlU3VyZmFjZSA9IG5hdGl2ZUltYWdlLT5zdXJmYWNlKCk7CisgICAgICAg
IG1faW1hZ2VTdXJmYWNlID0gbmF0aXZlSW1hZ2UtPnN1cmZhY2UoKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBpbWFnZVN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KS0+c3VyZmFjZSgpOworICAgICAgICBtX2ltYWdlU3VyZmFjZSA9IG1faW1hZ2UtPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCktPnN1cmZhY2UoKTsKICAgICAgICAgaWYgKCFwcmVtdWx0aXBs
eUFscGhhKQotICAgICAgICAgICAgYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAg
ICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgfQogCi0gICAgaWYgKCFp
bWFnZVN1cmZhY2UpCisgICAgaWYgKCFtX2ltYWdlU3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1h
Z2VTdXJmYWNlLmdldCgpKTsKLSAgICBpbnQgaGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0
KQorICAgIG1faW1hZ2VXaWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1faW1h
Z2VTdXJmYWNlLmdldCgpKTsKKyAgICBtX2ltYWdlSGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfaGVpZ2h0KG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0
aCB8fCAhbV9pbWFnZUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChpbWFnZVN1cmZhY2UuZ2V0KCkpICE9IENBSVJP
X0ZPUk1BVF9BUkdCMzIpCisgICAgaWYgKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdCht
X2ltYWdlU3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fRk9STUFUX0FSR0IzMikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgdW5zaWduZWQgaW50IHNyY1VucGFja0FsaWdubWVudCA9IDE7Ci0g
ICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGlt
YWdlU3VyZmFjZS5nZXQoKSk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKG1faW1hZ2VTdXJmYWNlLmdldCgpKTsKICAgICBzaXplX3QgYml0
c1BlclBpeGVsID0gMzI7Ci0gICAgdW5zaWduZWQgaW50IHBhZGRpbmcgPSBieXRlc1BlclJvdyAt
IGJpdHNQZXJQaXhlbCAvIDggKiB3aWR0aDsKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0gYnl0ZXNQ
ZXJSb3cgLSBiaXRzUGVyUGl4ZWwgLyA4ICogbV9pbWFnZVdpZHRoOwogICAgIGlmIChwYWRkaW5n
KSB7CiAgICAgICAgIHNyY1VucGFja0FsaWdubWVudCA9IHBhZGRpbmcgKyAxOwogICAgICAgICB3
aGlsZSAoYnl0ZXNQZXJSb3cgJSBzcmNVbnBhY2tBbGlnbm1lbnQpCiAgICAgICAgICAgICArK3Ny
Y1VucGFja0FsaWdubWVudDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGFja2VkU2l6ZTsK
LSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxpZ25tZW50ID09IDEpLgot
ICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWln
aHQsIDEsICZwYWNrZWRTaXplLCAwKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBvdXRwdXRWZWN0b3IucmVzaXplKHBhY2tlZFNpemUp
OwotCi0gICAgcmV0dXJuIHBhY2tQaXhlbHMoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShp
bWFnZVN1cmZhY2UuZ2V0KCkpLCBTb3VyY2VGb3JtYXRCR1JBOCwKLSAgICAgICAgICAgICAgICAg
ICAgICB3aWR0aCwgaGVpZ2h0LCBzcmNVbnBhY2tBbGlnbm1lbnQsIGZvcm1hdCwgdHlwZSwgYWxw
aGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CisgICAgbV9pbWFnZVBpeGVsRGF0YSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9pbWFnZVN1cmZhY2UuZ2V0KCkpOworICAgIG1faW1h
Z2VTb3VyY2VGb3JtYXQgPSBTb3VyY2VGb3JtYXRCR1JBODsKKyAgICBtX2ltYWdlU291cmNlVW5w
YWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OworICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2Fu
dmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIFBsYXRmb3JtQ29udGV4dENhaXJvKiBjb250ZXh0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0M0RDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHQzRENHLmNwcAppbmRleCBhYzAwYzQzZGUwYWE0ZGIxMTdhZTYxMjRiNTg0
NjM4MWI0OTc0ZmU2Li41YmE3NTdmMzI1NDMwYzRhMTAyMTVhN2NkM2Q0NzdhNDg2MjQ2OTUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHQzRENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHQzRENHLmNwcApAQCAtODksMzQgKzg5LDMxIEBAIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBnZXRTb3VyY2VEYXRhRm9ybWF0KHVuc2lnbmVk
IGludCBjb21wCiAgICAgcmV0dXJuIGZvcm1hdFRhYmxlW2Zvcm1hdEJhc2VdWyhpczE2Qml0Rm9y
bWF0ID8gMiA6IDApICsgKGJpZ0VuZGlhbiA/IDEgOiAwKV07CiB9CiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0
b3IpCitHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcigpCiB7Ci0g
ICAgaWYgKCFpbWFnZSkKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6
OmdldEltYWdlRGF0YShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRD
b2xvclByb2ZpbGUpCit7CisgICAgaWYgKCFtX2ltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgQ0dJbWFnZVJlZiBjZ0ltYWdlOwotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBkZWNv
ZGVkSW1hZ2U7Ci0gICAgYm9vbCBoYXNBbHBoYSA9IGltYWdlLT5pc0JpdG1hcEltYWdlKCkgPyBp
bWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA6IHRydWU7Ci0gICAgaWYgKChpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSB8fCAoaGFzQWxwaGEgJiYgIXByZW11bHRpcGx5QWxwaGEpKSAmJiBp
bWFnZS0+ZGF0YSgpKSB7CisgICAgYm9vbCBoYXNBbHBoYSA9IG1faW1hZ2UtPmlzQml0bWFwSW1h
Z2UoKSA/IG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgOiB0cnVlOworICAgIGlmICgo
aWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYmICFwcmVtdWx0aXBseUFs
cGhhKSkgJiYgbV9pbWFnZS0+ZGF0YSgpKSB7CiAgICAgICAgIEltYWdlU291cmNlIGRlY29kZXIo
SW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSA/IEltYWdlU291cmNlOjpHYW1tYUFu
ZENvbG9yUHJvZmlsZUlnbm9yZWQgOiBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVB
cHBsaWVkKTsKLSAgICAgICAgZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOwor
ICAgICAgICBkZWNvZGVyLnNldERhdGEobV9pbWFnZS0+ZGF0YSgpLCB0cnVlKTsKICAgICAgICAg
aWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgZGVjb2RlZEltYWdlLmFkb3B0Q0YoZGVjb2Rlci5jcmVhdGVGcmFtZUF0SW5kZXgoMCkp
OwogICAgICAgICBjZ0ltYWdlID0gZGVjb2RlZEltYWdlLmdldCgpOwogICAgIH0gZWxzZQotICAg
ICAgICBjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
ICAgIGNnSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAg
IGlmICghY2dJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc2l6ZV90IHdpZHRo
ID0gQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpOwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdl
R2V0SGVpZ2h0KGNnSW1hZ2UpOwotICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICBtX2lt
YWdlV2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7CisgICAgbV9pbWFnZUhlaWdodCA9
IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7CisgICAgaWYgKCFtX2ltYWdlV2lkdGggfHwgIW1f
aW1hZ2VIZWlnaHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFNlZSB3aGV0aGVy
IHRoZSBpbWFnZSBpcyB1c2luZyBhbiBpbmRleGVkIGNvbG9yIHNwYWNlLCBhbmQgaWYKQEAgLTEz
MSw3ICsxMjgsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2Uq
IGltYWdlLAogICAgICAgICAvLyB0aGUgY29sb3IgdGFibGUsIHdoaWNoIHdvdWxkIGFsbG93IHVz
IHRvIGF2b2lkIHByZW11bHRpcGx5aW5nIHRoZQogICAgICAgICAvLyBhbHBoYSBjaGFubmVsLiBD
cmVhdGlvbiBvZiBhIGJpdG1hcCBjb250ZXh0IHdpdGggYW4gYWxwaGEgY2hhbm5lbAogICAgICAg
ICAvLyBkb2Vzbid0IHNlZW0gdG8gd29yayB1bmxlc3MgaXQncyBwcmVtdWx0aXBsaWVkLgotICAg
ICAgICBiaXRtYXBDb250ZXh0LmFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIHdpZHRo
LCBoZWlnaHQsIDgsIHdpZHRoICogNCwKKyAgICAgICAgYml0bWFwQ29udGV4dC5hZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZSgwLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQsIDgsIG1f
aW1hZ2VXaWR0aCAqIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QpKTsKICAgICAgICAgaWYgKCFiaXRt
YXBDb250ZXh0KQpAQCAtMTM5LDcgKzEzNiw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCiAKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2Rl
KGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwogICAgICAgICBDR0NvbnRl
eHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dJbnRlcnBv
bGF0aW9uTm9uZSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0Lmdl
dCgpLCBDR1JlY3RNYWtlKDAsIDAsIHdpZHRoLCBoZWlnaHQpLCBjZ0ltYWdlKTsKKyAgICAgICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwg
bV9pbWFnZVdpZHRoLCBtX2ltYWdlSGVpZ2h0KSwgY2dJbWFnZSk7CiAKICAgICAgICAgLy8gTm93
IGRpc2NhcmQgdGhlIG9yaWdpbmFsIENHIGltYWdlIGFuZCByZXBsYWNlIGl0IHdpdGggYSBjb3B5
IGZyb20gdGhlIGJpdG1hcCBjb250ZXh0LgogICAgICAgICBkZWNvZGVkSW1hZ2UuYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7CkBAIC0xOTQs
MTggKzE5MSwxOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2Uq
IGltYWdlLAogICAgICAgICB9CiAgICAgfQogCi0gICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0g
QWxwaGFEb05vdGhpbmc7CisgICAgbV9hbHBoYU9wID0gQWxwaGFEb05vdGhpbmc7CiAgICAgQWxw
aGFGb3JtYXQgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1hdE5vbmU7CiAgICAgc3dpdGNoIChDR0lt
YWdlR2V0QWxwaGFJbmZvKGNnSW1hZ2UpKSB7CiAgICAgY2FzZSBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0OgogICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAg
ICBuZWVkZWRBbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhh
T3AgPSBBbHBoYURvVW5tdWx0aXBseTsKICAgICAgICAgYWxwaGFGb3JtYXQgPSBBbHBoYUZvcm1h
dEZpcnN0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFGaXJzdDoKICAg
ICAgICAgLy8gVGhpcyBwYXRoIGlzIG9ubHkgYWNjZXNzaWJsZSBmb3IgTWFjT1MgZWFybGllciB0
aGFuIDEwLjYuNC4KICAgICAgICAgaWYgKHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgICAgICBu
ZWVkZWRBbHBoYU9wID0gQWxwaGFEb1ByZW11bHRpcGx5OworICAgICAgICAgICAgbV9hbHBoYU9w
ID0gQWxwaGFEb1ByZW11bHRpcGx5OwogICAgICAgICBhbHBoYUZvcm1hdCA9IEFscGhhRm9ybWF0
Rmlyc3Q7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Uga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmly
c3Q6CkBAIC0yMTQsMTIgKzIxMSwxMiBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFn
ZURhdGEoSW1hZ2UqIGltYWdlLAogICAgICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdDoKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQotICAg
ICAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAgICAgICAg
bV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgICAgIGFscGhhRm9ybWF0ID0gQWxw
aGFGb3JtYXRMYXN0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFMYXN0
OgogICAgICAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAgIG5lZWRlZEFscGhh
T3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURv
UHJlbXVsdGlwbHk7CiAgICAgICAgIGFscGhhRm9ybWF0ID0gQWxwaGFGb3JtYXRMYXN0OwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q6CkBAIC0yMzEs
MzMgKzIyOCwyOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2Uq
IGltYWdlLAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
U291cmNlRGF0YUZvcm1hdCBzcmNEYXRhRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChjb21w
b25lbnRzUGVyUGl4ZWwsIGFscGhhRm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBiaWdF
bmRpYW5Tb3VyY2UpOwotICAgIGlmIChzcmNEYXRhRm9ybWF0ID09IFNvdXJjZUZvcm1hdE51bUZv
cm1hdHMpCisKKyAgICBtX2ltYWdlU291cmNlRm9ybWF0ID0gZ2V0U291cmNlRGF0YUZvcm1hdChj
b21wb25lbnRzUGVyUGl4ZWwsIGFscGhhRm9ybWF0LCBiaXRzUGVyQ29tcG9uZW50ID09IDE2LCBi
aWdFbmRpYW5Tb3VyY2UpOworICAgIGlmIChtX2ltYWdlU291cmNlRm9ybWF0ID09IFNvdXJjZUZv
cm1hdE51bUZvcm1hdHMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IHBpeGVsRGF0YTsKICAgICBwaXhlbERhdGEuYWRvcHRDRihDR0RhdGFQcm92aWRl
ckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIoY2dJbWFnZSkpKTsKICAgICBpZiAoIXBp
eGVsRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFVJbnQ4KiByZ2JhID0g
Q0ZEYXRhR2V0Qnl0ZVB0cihwaXhlbERhdGEuZ2V0KCkpOwogCi0gICAgdW5zaWduZWQgaW50IHBh
Y2tlZFNpemU7Ci0gICAgLy8gT3V0cHV0IGRhdGEgaXMgdGlnaHRseSBwYWNrZWQgKGFsaWdubWVu
dCA9PSAxKS4KLSAgICBpZiAoY29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3
aWR0aCwgaGVpZ2h0LCAxLCAmcGFja2VkU2l6ZSwgMCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShw
YWNrZWRTaXplKTsKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB2b2lkKj4oQ0ZEYXRhR2V0Qnl0ZVB0cihwaXhlbERhdGEuZ2V0KCkpKTsKIAogICAgIHVuc2ln
bmVkIGludCBzcmNVbnBhY2tBbGlnbm1lbnQgPSAwOwogICAgIHNpemVfdCBieXRlc1BlclJvdyA9
IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhjZ0ltYWdlKTsKLSAgICB1bnNpZ25lZCBpbnQgcGFkZGlu
ZyA9IGJ5dGVzUGVyUm93IC0gYml0c1BlclBpeGVsIC8gOCAqIHdpZHRoOworICAgIHVuc2lnbmVk
IHBhZGRpbmcgPSBieXRlc1BlclJvdyAtIGJpdHNQZXJQaXhlbCAvIDggKiBtX2ltYWdlV2lkdGg7
CiAgICAgaWYgKHBhZGRpbmcpIHsKICAgICAgICAgc3JjVW5wYWNrQWxpZ25tZW50ID0gcGFkZGlu
ZyArIDE7CiAgICAgICAgIHdoaWxlIChieXRlc1BlclJvdyAlIHNyY1VucGFja0FsaWdubWVudCkK
ICAgICAgICAgICAgICsrc3JjVW5wYWNrQWxpZ25tZW50OwogICAgIH0KLSAgICBib29sIHJ0ID0g
cGFja1BpeGVscyhyZ2JhLCBzcmNEYXRhRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBzcmNVbnBhY2tB
bGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBuZWVkZWRB
bHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsKLSAgICByZXR1cm4gcnQ7CisKKyAgICBtX2lt
YWdlU291cmNlVW5wYWNrQWxpZ25tZW50ID0gc3JjVW5wYWNrQWxpZ25tZW50OworCisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29u
c3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VI
ZWlnaHQsIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgQ0dDb250ZXh0UmVmIGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzQ29udGV4dDNEQ2x1dHRlci5jcHAKaW5kZXggN2Rm
MWVlOTJkYjU5M2JmNzcwMDgxN2Q1MmFkNWI4MzU5ZjA3OWZiMS4uOWQxYWIxNDNiNTg2NmJkODdi
YTc1MGI5ZWMyNjc1ZGYxYWJjNWYwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0NvbnRleHQzRENsdXR0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NDb250ZXh0M0RD
bHV0dGVyLmNwcApAQCAtNTYsNyArNTYsMTEgQEAgR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGlj
c0NvbnRleHQzRCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwgdW5zaWduZWQgaW50IGZvcm1hdCwg
dW5zaWduZWQgaW50IHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1t
YUFuZENvbG9yUHJvZmlsZSwgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tlcigpCit7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFnZURhdGEoYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAKaW5k
ZXggMmUyYTQ5MzEzODkwMzJjMzA2ZDM2Y2ZhZTFiZDkwZDY0YjE5ODUwMy4uNWVmZmUyZGU0M2Y5
NjU3NGJlZjI1MzBhNjJiMzIzMGJmNzAxMTU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNERWZsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3Bw
CkBAIC0yNDEsNyArMjQxLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUdyYXBo
aWNzU3VyZmFjZXMoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIH0KICNlbmRpZgogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqLCBHQzNEZW51bSAvKiBmb3JtYXQgKi8s
IEdDM0RlbnVtIC8qIHR5cGUgKi8sIGJvb2wgLyogcHJlbXVsdGlwbHlBbHBoYSAqLywgYm9vbCAv
KiBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSAqLywgVmVjdG9yPHVpbnQ4X3Q+JiAvKiBvdXRw
dXRWZWN0b3IgKi8pCitHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tl
cigpCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2VyOjpnZXRJbWFn
ZURhdGEoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
M0RRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcAppbmRleCAzNTMzYWRhOTZhNDc0ZTViZGZmZDM5NTVlZDRjNzNkYjIyYzM4
NTkxLi5hNWE4MGE2NWE4ZWE0ZGY1YjQyZmFkYmY1OTgyNzJkNGY0NTRiOWViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0Nv
bnRleHQzRFF0LmNwcApAQCAtNDg1LDU0ICs0ODUsNTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlR3JhcGhpY3NTdXJmYWNlcyhjb25zdCBJbnRTaXplJiBzaXplKQogfQogI2VuZGlm
CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xv
clByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCitHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5J
bWFnZUxvY2tlcigpCit7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlTG9ja2Vy
OjpnZXRJbWFnZURhdGEoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5k
Q29sb3JQcm9maWxlKQogewogICAgIFVOVVNFRF9QQVJBTShpZ25vcmVHYW1tYUFuZENvbG9yUHJv
ZmlsZSk7Ci0gICAgaWYgKCFpbWFnZSkKKyAgICBpZiAoIW1faW1hZ2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFFJbWFnZSBxdEltYWdlOwogICAgIC8vIElzIGltYWdlIGFscmVhZHkg
bG9hZGVkPyBJZiBub3QsIGxvYWQgaXQuCi0gICAgaWYgKGltYWdlLT5kYXRhKCkpCi0gICAgICAg
IHF0SW1hZ2UgPSBRSW1hZ2U6OmZyb21EYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWNoYXIq
PihpbWFnZS0+ZGF0YSgpLT5kYXRhKCkpLCBpbWFnZS0+ZGF0YSgpLT5zaXplKCkpOworICAgIGlm
IChtX2ltYWdlLT5kYXRhKCkpCisgICAgICAgIG1fcXRJbWFnZSA9IFFJbWFnZTo6ZnJvbURhdGEo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1Y2hhcio+KG1faW1hZ2UtPmRhdGEoKS0+ZGF0YSgpKSwg
bV9pbWFnZS0+ZGF0YSgpLT5zaXplKCkpOwogICAgIGVsc2UgewotICAgICAgICBRUGl4bWFwKiBu
YXRpdmVQaXhtYXAgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICAg
ICAgUVBpeG1hcCogbmF0aXZlUGl4bWFwID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKICAgICAgICAgLy8gV2l0aCBRUEEsIHdlIGNhbiBhdm9pZCBhIGRlZXAgY29weS4K
LSAgICAgICAgcXRJbWFnZSA9ICpuYXRpdmVQaXhtYXAtPmhhbmRsZSgpLT5idWZmZXIoKTsKKyAg
ICAgICAgbV9xdEltYWdlID0gKm5hdGl2ZVBpeG1hcC0+aGFuZGxlKCktPmJ1ZmZlcigpOwogICAg
IH0KIAotICAgIEFscGhhT3AgYWxwaGFPcCA9IEFscGhhRG9Ob3RoaW5nOwotICAgIHN3aXRjaCAo
cXRJbWFnZS5mb3JtYXQoKSkgeworICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Ob3RoaW5nOworICAg
IHN3aXRjaCAobV9xdEltYWdlLmZvcm1hdCgpKSB7CiAgICAgY2FzZSBRSW1hZ2U6OkZvcm1hdF9S
R0IzMjoKICAgICAgICAgLy8gRm9yIG9wYXF1ZSBpbWFnZXMsIHdlIHNob3VsZCBub3QgcHJlbXVs
dGlwbHkgb3IgdW5tdWx0aXBseSBhbHBoYS4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBRSW1h
Z2U6OkZvcm1hdF9BUkdCMzI6CiAgICAgICAgIGlmIChwcmVtdWx0aXBseUFscGhhKQotICAgICAg
ICAgICAgYWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsKKyAgICAgICAgICAgIG1fYWxwaGFP
cCA9IEFscGhhRG9QcmVtdWx0aXBseTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZDoKICAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFs
cGhhKQotICAgICAgICAgICAgYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgICAgICAg
ICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIC8vIFRoZSBpbWFnZSBoYXMgYSBmb3JtYXQgdGhhdCBpcyBub3Qgc3Vw
cG9ydGVkIGluIHBhY2tQaXhlbHMuIFdlIGhhdmUgdG8gY29udmVydCBpdCBoZXJlLgotICAgICAg
ICBxdEltYWdlID0gcXRJbWFnZS5jb252ZXJ0VG9Gb3JtYXQocHJlbXVsdGlwbHlBbHBoYSA/IFFJ
bWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkIDogUUltYWdlOjpGb3JtYXRfQVJHQjMy
KTsKKyAgICAgICAgbV9xdEltYWdlID0gbV9xdEltYWdlLmNvbnZlcnRUb0Zvcm1hdChwcmVtdWx0
aXBseUFscGhhID8gUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQgOiBRSW1hZ2U6
OkZvcm1hdF9BUkdCMzIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBp
bnQgcGFja2VkU2l6ZTsKLSAgICAvLyBPdXRwdXQgZGF0YSBpcyB0aWdodGx5IHBhY2tlZCAoYWxp
Z25tZW50ID09IDEpLgotICAgIGlmIChjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5
cGUsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEsICZwYWNrZWRTaXplLCAwKSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgbV9pbWFnZVdpZHRoID0gbV9pbWFn
ZS0+d2lkdGgoKTsKKyAgICBtX2ltYWdlSGVpZ2h0ID0gbV9pbWFnZS0+aGVpZ2h0KCk7CisgICAg
aWYgKCFtX2ltYWdlV2lkdGggfHwgIW1faW1hZ2VIZWlnaHQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gbV9xdEltYWdlLmNvbnN0Qml0cygpOworICAgIG1f
aW1hZ2VTb3VyY2VGb3JtYXQgPSBTb3VyY2VGb3JtYXRCR1JBODsKKyAgICBtX2ltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50ID0gMDsKIAotICAgIG91dHB1dFZlY3Rvci5yZXNpemUocGFja2VkU2l6
ZSk7Ci0KLSAgICByZXR1cm4gcGFja1BpeGVscyhxdEltYWdlLmNvbnN0Qml0cygpLCBTb3VyY2VG
b3JtYXRCR1JBOCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0
eXBlLCBhbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3du
UHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCmlu
ZGV4IGZlYTZhZGNlMzAxODU3NzY0MDg2ZWEyN2I3NWNlYmI5ZTZiMTU2OGUuLjRjNmU5MWIxYzU5
OTFmNzdkOTQyNGM1OWRhZmU5MTllYWY1ZmNjNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tp
YS5jcHAKQEAgLTQyLDU4ICs0Miw1NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBv
dXRwdXRWZWN0b3IpCitHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VMb2NrZXI6On5JbWFnZUxvY2tl
cigpCiB7Ci0gICAgaWYgKCFpbWFnZSkKKyAgICBpZiAoc2tpYUltYWdlKQorICAgICAgICBza2lh
SW1hZ2UtPmJpdG1hcCgpLnVubG9ja1BpeGVscygpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpJbWFnZUxvY2tlcjo6Z2V0SW1hZ2VEYXRhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkKK3sKKyAgICBpZiAoIW1faW1hZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBPd25QdHI8TmF0aXZlSW1hZ2VTa2lhPiBwaXhlbHM7Ci0g
ICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKTsKLSAgICBBbHBoYU9wIG5lZWRlZEFscGhhT3AgPSBBbHBoYURvTm90aGluZzsK
KyAgICBza2lhSW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
ICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Ob3RoaW5nOwogICAgIGJvb2wgaGFzQWxwaGEgPSBza2lh
SW1hZ2UgPyAhc2tpYUltYWdlLT5iaXRtYXAoKS5pc09wYXF1ZSgpIDogdHJ1ZTsKLSAgICBpZiAo
KCFza2lhSW1hZ2UgfHwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgfHwgKGhhc0FscGhhICYm
ICFwcmVtdWx0aXBseUFscGhhKSkgJiYgaW1hZ2UtPmRhdGEoKSkgeworICAgIGlmICgoIXNraWFJ
bWFnZSB8fCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSB8fCAoaGFzQWxwaGEgJiYgIXByZW11
bHRpcGx5QWxwaGEpKSAmJiBtX2ltYWdlLT5kYXRhKCkpIHsKICAgICAgICAgLy8gQXR0ZW1wdCB0
byBnZXQgcmF3IHVucHJlbXVsdGlwbGllZCBpbWFnZSBkYXRhLgogICAgICAgICBPd25QdHI8SW1h
Z2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKEltYWdlRGVjb2Rlcjo6Y3JlYXRlKAotICAgICAg
ICAgICAgKihpbWFnZS0+ZGF0YSgpKSwgSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGll
ZCwKKyAgICAgICAgICAgICoobV9pbWFnZS0+ZGF0YSgpKSwgSW1hZ2VTb3VyY2U6OkFscGhhTm90
UHJlbXVsdGlwbGllZCwKICAgICAgICAgICAgIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID8g
SW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3JlZCA6IEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CiAgICAgICAgIGlmICghZGVjb2RlcikKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZGVjb2Rlci0+c2V0RGF0YShpbWFnZS0+
ZGF0YSgpLCB0cnVlKTsKKyAgICAgICAgZGVjb2Rlci0+c2V0RGF0YShtX2ltYWdlLT5kYXRhKCks
IHRydWUpOwogICAgICAgICBpZiAoIWRlY29kZXItPmZyYW1lQ291bnQoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoMCk7CiAgICAgICAgIGlmICghZnJhbWUgfHwgZnJhbWUtPnN0YXR1cygp
ICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGhhc0FscGhhID0gZnJhbWUtPmhhc0FscGhhKCk7Ci0gICAgICAgIHBpeGVscyA9
IGFkb3B0UHRyKGZyYW1lLT5hc05ld05hdGl2ZUltYWdlKCkpOwotICAgICAgICBpZiAoIXBpeGVs
cy5nZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhlbHMtPmJpdG1hcCgp
LndpZHRoKCkgfHwgIXBpeGVscy0+Yml0bWFwKCkuaGVpZ2h0KCkpCisgICAgICAgIG1fbmF0aXZl
SW1hZ2UgPSBhZG9wdFB0cihmcmFtZS0+YXNOZXdOYXRpdmVJbWFnZSgpKTsKKyAgICAgICAgaWYg
KCFtX25hdGl2ZUltYWdlLmdldCgpIHx8ICFtX25hdGl2ZUltYWdlLT5pc0RhdGFDb21wbGV0ZSgp
IHx8ICFtX25hdGl2ZUltYWdlLT5iaXRtYXAoKS53aWR0aCgpIHx8ICFtX25hdGl2ZUltYWdlLT5i
aXRtYXAoKS5oZWlnaHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgU2tC
aXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gcGl4ZWxzLT5iaXRtYXAoKS5jb25maWcoKTsKKyAg
ICAgICAgU2tCaXRtYXA6OkNvbmZpZyBza2lhQ29uZmlnID0gbV9uYXRpdmVJbWFnZS0+Yml0bWFw
KCkuY29uZmlnKCk7CiAgICAgICAgIGlmIChza2lhQ29uZmlnICE9IFNrQml0bWFwOjprQVJHQl84
ODg4X0NvbmZpZykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgc2tpYUltYWdl
ID0gcGl4ZWxzLmdldCgpOworICAgICAgICBza2lhSW1hZ2UgPSBtX25hdGl2ZUltYWdlLmdldCgp
OwogICAgICAgICBpZiAoaGFzQWxwaGEgJiYgcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgICAg
IG5lZWRlZEFscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CisgICAgICAgICAgICBtX2FscGhh
T3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7CiAgICAgfSBlbHNlIGlmICghcHJlbXVsdGlwbHlBbHBo
YSAmJiBoYXNBbHBoYSkKLSAgICAgICAgbmVlZGVkQWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5
OworICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKICAgICBpZiAoIXNraWFJ
bWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IFNrQml0bWFwJiBza2lhSW1h
Z2VSZWYgPSBza2lhSW1hZ2UtPmJpdG1hcCgpOwotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhz
a2lhSW1hZ2VSZWYpOwotICAgIEFTU0VSVChza2lhSW1hZ2VSZWYucm93Qnl0ZXMoKSA9PSBza2lh
SW1hZ2VSZWYud2lkdGgoKSAqIDQpOwotICAgIHVuc2lnbmVkIGludCBwYWNrZWRTaXplOwotICAg
IC8vIE91dHB1dCBkYXRhIGlzIHRpZ2h0bHkgcGFja2VkIChhbGlnbm1lbnQgPT0gMSkuCi0gICAg
aWYgKGNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgc2tpYUltYWdlUmVmLndp
ZHRoKCksIHNraWFJbWFnZVJlZi5oZWlnaHQoKSwgMSwgJnBhY2tlZFNpemUsIDApICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUikKKworICAgIG1faW1hZ2VTb3VyY2VGb3JtYXQgPSBTS19C
MzJfU0hJRlQgPyBTb3VyY2VGb3JtYXRSR0JBOCA6IFNvdXJjZUZvcm1hdEJHUkE4OworICAgIG1f
aW1hZ2VXaWR0aCA9IHNraWFJbWFnZS0+Yml0bWFwKCkud2lkdGgoKTsKKyAgICBtX2ltYWdlSGVp
Z2h0ID0gc2tpYUltYWdlLT5iaXRtYXAoKS5oZWlnaHQoKTsKKyAgICBpZiAoIW1faW1hZ2VXaWR0
aCB8fCAhbV9pbWFnZUhlaWdodCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG91dHB1dFZl
Y3Rvci5yZXNpemUocGFja2VkU2l6ZSk7Ci0gICAgcmV0dXJuIHBhY2tQaXhlbHMocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2tpYUltYWdlUmVmLmdldFBpeGVscygpKSwKLSAgICAg
ICAgICAgICAgICAgICAgICBTS19CMzJfU0hJRlQgPyBTb3VyY2VGb3JtYXRSR0JBOCA6IFNvdXJj
ZUZvcm1hdEJHUkE4LAotICAgICAgICAgICAgICAgICAgICAgIHNraWFJbWFnZVJlZi53aWR0aCgp
LCBza2lhSW1hZ2VSZWYuaGVpZ2h0KCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0
LCB0eXBlLCBuZWVkZWRBbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsKKyAgICBtX2ltYWdl
U291cmNlVW5wYWNrQWxpZ25tZW50ID0gMDsKKyAgICBza2lhSW1hZ2UtPmJpdG1hcCgpLmxvY2tQ
aXhlbHMoKTsKKyAgICBtX2ltYWdlUGl4ZWxEYXRhID0gc2tpYUltYWdlLT5iaXRtYXAoKS5nZXRQ
aXhlbHMoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177448</attachid>
            <date>2012-12-04 01:40:14 -0800</date>
            <delta_ts>2012-12-07 09:20:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121204173854.patch</filename>
            <type>text/plain</type>
            <size>18807</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODdmYmUwYTM4NjllMGM0
NmFmYWYyMzVmZjk4ZmY3YWQ4MTBjMGRlZC4uMGEzNDY1MTRhZDEwY2FiNjNkZWM0Y2Q4OTM2ZDNk
OTYxYWIxYzhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTEyLTA0ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgbWVtb3J5IGNvcHkgb3Ig
Y29udmVyc2lvbnMgaW4gdGhlIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZm9yIEhUTUxW
aWRlb0VsZW1lbnQgd2hpY2ggbWF5IGJlIGF2b2lkZWQuIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUg
cmVkdW5kYW50IEJhY2tpbmdTdG9yZSBjb3B5IGlmIHRoZSBjb3JyZXNwb25kaW5nIEdyYXBoaWNz
IHBvcnQgc3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yLiBNb3Jlb3Zl
ciwgaXQgb3B0aW1pemVzIHRoZSBBbHBoYU9wIGlmIHRoZSBJbWFnZSBzb3VyY2UgaXMgZnJvbSBI
VE1MVmlkZW9FbGVtZW50IHRvIGF2b2lkIHVubmVjZXNzYXJ5IFVubXVsdGlwbHkgb3IgUHJlbXVs
dGlwbHkgb3BlcmF0aW9uLgorCisgICAgICAgIEFscmVhZHkgY292ZXJlZCBieSBjdXJyZW50IHRl
c3RzLgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJESW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRy
YWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6
CisgICAgICAgIChJbWFnZUV4dHJhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VI
dG1sRG9tU291cmNlKToKKwogMjAxMi0xMi0wMyAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtSRUdSRVNTSU9OXSBbU3R5
bGVzXSBSdWxlIGRpc2FwcGVhcnMgaWYgZWRpdGVkIHNlbGVjdG9yIGRvZXMgbm90IGFmZmVjdCBz
ZWxlY3RlZCBub2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA1YThkYzk1ZjMxMGIxYThkZGZkYTU1ZTQ1OTg2NWU5
YmViYzViYmJlLi45Yzg5ZWIwYTU0ZjhjNDkzZGMwZTY5MjQ5NGFkZmE1MmNhOTE0ZDg4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTM2MTEsMjEgKzM2MTEsMzEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGUKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFn
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNl
IGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBlYyA9IDA7CiAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9y
bWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQogICAgICAgICByZXR1cm47CiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFj
dG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9y
c3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJj
ZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9ORSk7CiAgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3Vj
Y2VlZGVkKCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFn
ZSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwg
aW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNl
Rm9ybWF0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1h
Z2VIZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwg
ZGF0YSkpIHsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VE
YXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAgICBHcmFw
aGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBo
YU9wKCk7CisgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5p
bWFnZVBpeGVsRGF0YSgpOworCisgICAgLy8gRG8gc29tZSBvcHRpbWl6YXRpb24gb24gYWxwaGFP
cCB3aGVuIEltYWdlSHRtbERvbVNvdXJjZSBpcyBIVE1MVmlkZW9FbGVtZW50CisgICAgaWYgKGRv
bVNvdXJjZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvICYmIChzb3VyY2VEYXRh
Rm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBOCB8fCBzb3VyY2VE
YXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRCR1JBOCkpIHsKKyAg
ICAgICAgdW5zaWduZWQgY2hhciBhbHBoYVZhbHVlID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbWFnZVBpeGVsRGF0YSkgKyAzKTsKKyAgICAgICAgaWYgKChhbHBo
YU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSAmJiAoYWxwaGFWYWx1
ZSA9PSAweEZGIHx8IGFscGhhVmFsdWUgPT0gMHgwKSkKKyAgICAgICAgICAgIHx8IChhbHBoYU9w
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHkgJiYgYWxwaGFWYWx1ZSA9
PSAweEZGKSkKKyAgICAgICAgICAgIGFscGhhT3AgPSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFE
b05vdGhpbmc7CisgICAgfQorCisgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1h
Z2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VE
YXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmlt
YWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCks
IGRhdGEpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2VEYXRhIGVycm9yIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zNjk3LDggKzM3MDcsNyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS0+Y2FjaGVkSW1h
Z2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSksCi0gICAgICAgICAgICAg
ICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CisgICAg
dGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVy
KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKQEAgLTM3MzYsMTIgKzM3NDUsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bQogICAgIGlmIChpbWFnZURhdGEpCiAgICAgICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7CiAg
ICAgZWxzZQotICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwor
ICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1s
RG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsK
IH0KIAogI2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29w
eSBiYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXZpZGVv
IHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InRleEltYWdlMkQiLCAibm8gdmlkZW8iKTsKQEAgLTM3NjAsNyArMzc2OCw3IEBAIFBhc3NSZWZQ
dHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZp
ZGVvRWxlbWVudCogdmlkCiAgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwogICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUg
dGV4dHVyZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgogICAgIHZpZGVvLT5wYWludEN1
cnJlbnRGcmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOwotICAgIHJldHVy
biBidWYtPmNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5
SW1hZ2UoYmFja2luZ1N0b3JlQ29weSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsCkBAIC0zNzY5LDEwICszNzc3LDE4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0KICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywgZWMp
OworICAgIC8vIEZvciBIVE1MVmlkZW9FbGVtZW50LCB0aGUgaW1hZ2UgaXMgZ2VuZXJhdGVkIGFu
ZCB1c2VkIGluIG9yZGVyLiBJdCBpcyByZWFzb25hYmxlIHRvIHVzZSB0aGUgSW1hZ2UgZGlyZWN0
bHkgd2l0aG91dCBhZGRpdGlvbmFsIEJhY2tpbmdTdG9yZSBjb3B5IAorICAgIC8vIGlmIHRoZSBn
cmFwaGljcyBwb3J0IHByb3ZpZGVzIHN1cHBvcnQgdG8gdGhlIERvbnRDb3B5QmFja2luZ1N0b3Jl
IHNlbWFudGljcy4gU0tJQSwgQ0csIENBSVJPIGFuZCBRVCBwb3J0cyBhbHJlYWR5IHN1cHBvcnQg
dGhpcyBEb250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvci4gCisjaWYgVVNFKFNLSUEpIHx8IFVT
RShDRykgfHwgVVNFKENBSVJPKSB8fCBQTEFURk9STShRVCkKKyAgICBCYWNraW5nU3RvcmVDb3B5
IGJhY2tpbmdTdG9yZUNvcHkgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyNlbHNlCisgICAgQmFj
a2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZTsKKyNlbmRp
ZgorCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBi
YWNraW5nU3RvcmVDb3B5LCBlYyk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQs
IHR5cGUsIGltYWdlLmdldCgpLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsIGVjKTsKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21W
aWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAj
ZW5kaWYKIApAQCAtMzg1NCwyMSArMzg3MCwzMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFn
ZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsK
ICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdl
RXh0cmFjdG9yKGltYWdlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252
ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsgIAorICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVt
dWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpOT05FKTsKICAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQo
KSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgaW1hZ2VFeHRy
YWN0b3IuaW1hZ2VBbHBoYU9wKCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCks
IGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQo
KSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6U291cmNlRGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0
ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Cisg
ICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVs
RGF0YSgpOworCisgICAgLy8gRG8gc29tZSBvcHRpbWl6YXRpb24gb24gYWxwaGFPcCB3aGVuIElt
YWdlSHRtbERvbVNvdXJjZSBpcyBIVE1MVmlkZW9FbGVtZW50CisgICAgaWYgKGRvbVNvdXJjZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvICYmIChzb3VyY2VEYXRhRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRSR0JBOCB8fCBzb3VyY2VEYXRhRm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTb3VyY2VGb3JtYXRCR1JBOCkpIHsKKyAgICAgICAgdW5z
aWduZWQgY2hhciBhbHBoYVZhbHVlID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbWFnZVBpeGVsRGF0YSkgKyAzKTsKKyAgICAgICAgaWYgKChhbHBoYU9wID09IEdy
YXBoaWNzQ29udGV4dDNEOjpBbHBoYURvVW5tdWx0aXBseSAmJiAoYWxwaGFWYWx1ZSA9PSAweEZG
IHx8IGFscGhhVmFsdWUgPT0gMHgwKSkKKyAgICAgICAgICAgIHx8IChhbHBoYU9wID09IEdyYXBo
aWNzQ29udGV4dDNEOjpBbHBoYURvUHJlbXVsdGlwbHkgJiYgYWxwaGFWYWx1ZSA9PSAweEZGKSkK
KyAgICAgICAgICAgIGFscGhhT3AgPSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmc7
CisgICAgfQorCisgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdl
UGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7
CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2VEYXRhIGVycm9yIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zOTM4LDggKzM5NjQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rpbgog
ICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB0
ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5k
ZXJlcigpKSwKLSAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5p
bWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0
bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7
CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
CkBAIC0zOTYwLDggKzM5ODUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgIGlmIChp
bWFnZURhdGEpCiAgICAgICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKICAgICBlbHNlCi0g
ICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAg
ICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpI
dG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVj
KTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTM5NzEsMTAgKzM5OTUsMTcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW4KICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9J
bWFnZSh2aWRlbywgZWMpOworICAgIC8vIEZvciBIVE1MVmlkZW9FbGVtZW50LCB0aGUgaW1hZ2Ug
aXMgZ2VuZXJhdGVkIGFuZCB1c2VkIGluIG9yZGVyLiBJdCBpcyByZWFzb25hYmxlIHRvIHVzZSB0
aGUgSW1hZ2UgZGlyZWN0bHkgd2l0aG91dCBhZGRpdGlvbmFsIEJhY2tpbmdTdG9yZSBjb3B5IAor
ICAgIC8vIGlmIHRoZSBncmFwaGljcyBwb3J0IHByb3ZpZGVzIHN1cHBvcnQgdG8gdGhlIERvbnRD
b3B5QmFja2luZ1N0b3JlIHNlbWFudGljcy4gU0tJQSwgQ0csIENBSVJPIGFuZCBRVCBwb3J0cyBh
bHJlYWR5IHN1cHBvcnQgdGhpcyBEb250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvci4KKyNpZiBV
U0UoU0tJQSkgfHwgVVNFKENHKSB8fCBVU0UoQ0FJUk8pIHx8IFBMQVRGT1JNKFFUKQorICAgIEJh
Y2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSA9IERvbnRDb3B5QmFja2luZ1N0b3JlOwor
I2Vsc2UKKyAgICBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlOworI2VuZGlmCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0lt
YWdlKHZpZGVvLCBiYWNraW5nU3RvcmVDb3B5LCBlYyk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggODZlYjgyOWYyMjcwY2EyYmFk
MDlmZjQ4Mzg5YmFiYTRiOGQ2ODAwOS4uZDQ4NmE2MTU0YTU3NTM5M2QzYjQ5NmI0NGRhMDg1OGM3
MWRmZmIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJUaW1l
ci5oIgogI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgogCkBAIC0zNzIsNyArMzczLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwogCiAj
aWYgRU5BQkxFKFZJREVPKQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdl
KEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJbWFn
ZT4gdmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIEJhY2tpbmdTdG9yZUNvcHks
IEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBtX2NvbnRleHQ7CkBAIC01MzMsMTUgKzUzNCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXhJ
bWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosCi0gICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHRleFN1
YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGhhbmRsZU5QT1RUZXh0dXJlcyhjb25z
dCBjaGFyKiwgYm9vbCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAppbmRleCBmZmE4ZWM2M2E3NmMwMjE3NTViMTIy
Y2U1ZTQxYmNlN2M3NzQyMjQ2Li43NzBmNGQxNjA5ZjY3OGEzZTRiNjA2Y2RiZDFlYjk2YWMzZGMx
YjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCkBAIC0xNjgsOSArMTY4LDEwIEBAIEdDM0RlbnVtIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5CiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKIH0KIAotR3Jh
cGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpJbWFnZUV4dHJhY3RvcihJbWFnZSogaW1h
Z2UsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSkKK0dyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3IoSW1h
Z2UqIGltYWdlLCBJbWFnZUh0bWxEb21Tb3VyY2UgaW1hZ2VIdG1sRG9tU291cmNlLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCiB7CiAgICAg
bV9pbWFnZSA9IGltYWdlOworICAgIG1faW1hZ2VIdG1sRG9tU291cmNlID0gaW1hZ2VIdG1sRG9t
U291cmNlOwogICAgIG1fZXh0cmFjdFN1Y2NlZWRlZCA9IGV4dHJhY3RJbWFnZShwcmVtdWx0aXBs
eUFscGhhLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDk1
ZWVhN2FhYTc0ZjEyMmVlOTM4YzNjMDg1YTc0MDBiMzk1ZGU2YzQuLjViZjRlMzRkNzI3MDQ0Mjg2
YjY4ODY1NmIyZGI3YjA4ZDNlYmNjNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtODczLDYgKzg3MywxMyBAQCBw
dWJsaWM6CiAgICAgICAgIEFscGhhRG9Vbm11bHRpcGx5ID0gMgogICAgIH07CiAKKyAgICBlbnVt
IEltYWdlSHRtbERvbVNvdXJjZSB7CisgICAgICAgIEh0bWxEb21JbWFnZSA9IDAsCisgICAgICAg
IEh0bWxEb21DYW52YXMgPSAxLAorICAgICAgICBIdG1sRG9tVmlkZW8gPSAyLAorICAgICAgICBI
dG1sRG9tTm9uZSA9IDMKKyAgICB9OworCiAgICAgLy8gUGFja3MgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBnaXZlbiBJbWFnZSB3aGljaCBpcyBwYXNzZWQgaW4gfHBpeGVsc3wgaW50byB0aGUgcGFzc2Vk
IFZlY3RvcgogICAgIC8vIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBh
bmQgb2JleWluZyB0aGUgZmxpcFkgYW5kIHByZW11bHRpcGx5QWxwaGEgZmxhZ3MuCiAgICAgLy8g
UmV0dXJucyB0cnVlIHVwb24gc3VjY2Vzcy4KQEAgLTg4MCw3ICs4ODcsNyBAQCBwdWJsaWM6CiAK
ICAgICBjbGFzcyBJbWFnZUV4dHJhY3RvciB7CiAgICAgcHVibGljOgotICAgICAgICBJbWFnZUV4
dHJhY3RvcihJbWFnZSosIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFu
ZENvbG9yUHJvZmlsZSk7CisgICAgICAgIEltYWdlRXh0cmFjdG9yKEltYWdlKiwgSW1hZ2VIdG1s
RG9tU291cmNlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xv
clByb2ZpbGUpOwogCiAgICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGlt
cGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHRvIGRlYWxsb2NhdGUgb3IgcmVsZWFzZSByZXNv
dXJjZXMKICAgICAgICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZSBpZiBuZWVkZWQuCkBA
IC04OTIsNyArODk5LDggQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBpbWFnZUhlaWdodCgp
IHsgcmV0dXJuIG1faW1hZ2VIZWlnaHQ7IH0KICAgICAgICAgU291cmNlRGF0YUZvcm1hdCBpbWFn
ZVNvdXJjZUZvcm1hdCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VGb3JtYXQ7IH0KICAgICAgICAg
QWxwaGFPcCBpbWFnZUFscGhhT3AoKSB7IHJldHVybiBtX2FscGhhT3A7IH0KLSAgICAgICAgdW5z
aWduZWQgaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBtX2ltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50OyB9IAorICAgICAgICB1bnNpZ25lZCBpbWFnZVNvdXJjZVVucGFja0Fs
aWdubWVudCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7IH0KKyAgICAg
ICAgSW1hZ2VIdG1sRG9tU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSgpIHsgcmV0dXJuIG1faW1h
Z2VIdG1sRG9tU291cmNlOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gRWFjaCBwbGF0Zm9y
bSBtdXN0IHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCiAgICAgICAg
IC8vIEV4dHJhY3RzIHRoZSBpbWFnZSBhbmQga2VlcHMgdHJhY2sgb2YgaXRzIHN0YXR1cywgc3Vj
aCBhcyB3aWR0aCwgaGVpZ2h0LCBTb3VyY2UgQWxpZ25tZW50LCBmb3JtYXQgYW5kIEFscGhhT3Ag
ZXRjCkBAIC05MjEsNiArOTI5LDcgQEAgcHVibGljOgogICAgICAgICBTb3VyY2VEYXRhRm9ybWF0
IG1faW1hZ2VTb3VyY2VGb3JtYXQ7CiAgICAgICAgIEFscGhhT3AgbV9hbHBoYU9wOwogICAgICAg
ICB1bnNpZ25lZCBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50OworICAgICAgICBJbWFnZUh0
bWxEb21Tb3VyY2UgbV9pbWFnZUh0bWxEb21Tb3VyY2U7CiAgICAgfTsKIAogcHJpdmF0ZToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178225</attachid>
            <date>2012-12-07 09:20:41 -0800</date>
            <delta_ts>2012-12-09 05:40:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121208011803.patch</filename>
            <type>text/plain</type>
            <size>23949</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2OTU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTNkMDFlYzExOTcwMjQ3
MzQ5ZDA1ODMzOGJkZDg1M2U2MTAxNGQ2MC4uOTkzYzBhZWNiZGU5Y2VjZDRmZWIxN2U5MDVhMGI2
NGVmMTA1ZTliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTEyLTA3ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgbWVtb3J5IGNvcHkgb3Ig
Y29udmVyc2lvbnMgaW4gdGhlIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZm9yIEhUTUxW
aWRlb0VsZW1lbnQgd2hpY2ggbWF5IGJlIGF2b2lkZWQuIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUg
cmVkdW5kYW50IEJhY2tpbmdTdG9yZSBjb3B5IGlmIHRoZSBjb3JyZXNwb25kaW5nIEdyYXBoaWNz
IHBvcnQgc3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yLiBNb3Jlb3Zl
ciwgaXQgb3B0aW1pemVzIHRoZSBBbHBoYU9wIGlmIHRoZSBJbWFnZSBzb3VyY2UgaXMgZnJvbSBI
VE1MVmlkZW9FbGVtZW50IHRvIGF2b2lkIHVubmVjZXNzYXJ5IFVubXVsdGlwbHkgb3IgUHJlbXVs
dGlwbHkgb3BlcmF0aW9uIGluIHVucGFjay9wYWNrLiAKKworICAgICAgICBBbHJlYWR5IGNvdmVy
ZWQgYnkgY3VycmVudCB0ZXN0cy4gCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdlKTogYWRkIGEgcGFyYW1ldGVy
IHRvIGNob29zZSBCYWNraW5nU3RvcmUgY29weSBiZWhhdmlvci4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFj
dG9yOjpJbWFnZUV4dHJhY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEltYWdlRXh0cmFjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VTb3VyY2VVbnBhY2tB
bGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0
cmFjdG9yOjppbWFnZUh0bWxEb21Tb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6
IG9wdGltaXplIHRoZSBBbHBoYU9wIGZvciBIVE1MVmlkZW9FbGVtZW50IGlucHV0LgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKTogZ2l2ZSBoaW50cyBv
biB0aGUgZmFzdCBCYWNraW5nU3RvcmUgY29weSBtb2RlLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHQzRFNraWEuY3BwOiBvcHRpbWl6ZSB0aGUgQWxwaGFPcCBmb3IgSFRNTFZpZGVvRWxl
bWVudCBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4
dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZmFz
dENvcHlJbWFnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUpOgorICAgICAgICAoV2ViQ29y
ZSk6CisKIDIwMTItMTItMDcgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFRocm93IGF3YXkgU3R5bGVSZXNvbHZlcnMgdGhhdCBoYXZlbid0IGJlZW4gdXNlZCBm
b3IgYSBsb25nIHRpbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBkMzllMmJiODhlYzMxMmMyNjhjODZkNDE5ZDk2
ZWY3ZjExNzEwNmNiLi4xZGQyZmZlZGJiZjhkZDdkMTFkNjhkOWQ1NWY4MjRkMmE3N2E0MDY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAKQEAgLTM2MDksMTUgKzM2MDksMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGUK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBp
bWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZs
aXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291
cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CiAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4
Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQogICAgICAgICByZXR1cm47CiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0
cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0Nv
bG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKKyAgICBHcmFw
aGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNv
dXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CiAgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0
U3VjY2VlZGVkKCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAg
ICAgIHJldHVybjsKQEAgLTM3MDIsOCArMzcwMCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5p
bWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKSwKLSAgICAgICAgICAgICAgICAgICBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICB0ZXhJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSksIEdy
YXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LApAQCAtMzc0MSwxMiArMzczOCwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAg
ICAgaWYgKGltYWdlRGF0YSkKICAgICAgICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKICAgICBlbHNl
Ci0gICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBm
b3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CisgICAgICAg
IHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52
YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiAj
aWYgRU5BQkxFKFZJREVPKQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29k
ZSYgZWMpCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJh
bWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tp
bmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghdmlkZW8gfHwgIXZp
ZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7CiAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1h
Z2UyRCIsICJubyB2aWRlbyIpOwpAQCAtMzc2NSw3ICszNzYxLDcgQEAgUGFzc1JlZlB0cjxJbWFn
ZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVt
ZW50KiB2aWQKICAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSk7CiAgICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJl
IGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCiAgICAgdmlkZW8tPnBhaW50Q3VycmVudEZy
YW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShi
YWNraW5nU3RvcmVDb3B5KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKQEAgLTM3NzQsMTAgKzM3NzAsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAg
IGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBlYyk7CisgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZl
cjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBlYyk7CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpI
dG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMp
OwogfQogI2VuZGlmCiAKQEAgLTM4NTcsMTUgKzM4NTMsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW1hZ2UqIGltYWdlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJ
bXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdl
LCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBm
bGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBl
YyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFZl
Y3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rv
ciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNw
YWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAKKyAgICBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJj
ZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9ORSk7ICAKICAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RT
dWNjZWVkZWQoKSkgewogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CiAgICAgICAg
IHJldHVybjsKQEAgLTM5NDgsOCArMzk0Miw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAg
ICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHRl
eFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpLAotICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmlt
YWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRt
bERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwK
QEAgLTM5NzAsOCArMzk2Myw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgaWYgKGlt
YWdlRGF0YSkKICAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwogICAgIGVsc2UKLSAg
ICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAg
ICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0
bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMp
OwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMzk4MSwxMCArMzk3MywxMCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbgogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0lt
YWdlKHZpZGVvLCBlYyk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0lt
YWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwogICAgIGlm
ICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICB0ZXhTdWJJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGlt
YWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDJk
YWUyM2Q4MzI4MjBhNjJkYzI2YTIzMWU0YTZlNTczODgzODg4ZmYuLjdkZGZjMmNkNjVlZjAxYzAy
NTgyNzM0YjM2ZWQyN2ZhOTk3ZmZmZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXZWJHTEdldEluZm8uaCIKIApAQCAtMzcy
LDcgKzM3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0
KEdDM0RlbnVtKTsKIAogI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVmUHRyPEltYWdlPiB2
aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBC
YWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7CiAjZW5kaWYKIAogICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwpAQCAtNTMxLDEzICs1MzIsOSBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7CiAKICAgICB2b2lkIHRleEltYWdl
MkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosCi0gICAgICAgICAg
ICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBi
b29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFks
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3Vi
SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFn
ZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBoYW5kbGVO
UE9UVGV4dHVyZXMoY29uc3QgY2hhciosIGJvb2wpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAKaW5kZXggZmZhOGVj
NjNhNzZjMDIxNzU1YjEyMmNlNWU0MWJjZTdjNzc0MjI0Ni4uNzcwZjRkMTYwOWY2NzhhM2U0YjYw
NmNkYmQxZWI5NmFjM2RjMWI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcApAQCAtMTY4LDkgKzE2OCwxMCBAQCBH
QzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eQogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1I7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRy
YWN0b3IoSW1hZ2UqIGltYWdlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUpCitHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6Oklt
YWdlRXh0cmFjdG9yKEltYWdlKiBpbWFnZSwgSW1hZ2VIdG1sRG9tU291cmNlIGltYWdlSHRtbERv
bVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQ
cm9maWxlKQogewogICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICBtX2ltYWdlSHRtbERvbVNvdXJj
ZSA9IGltYWdlSHRtbERvbVNvdXJjZTsKICAgICBtX2V4dHJhY3RTdWNjZWVkZWQgPSBleHRyYWN0
SW1hZ2UocHJlbXVsdGlwbHlBbHBoYSwgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAppbmRleCAzMWY2MDNjYmU4NjY5OWE5NWRkNjI3YmNjNWYxZGE2ZTA2ZGQ1MzY0Li5l
NjA4ODkzNGE3MmQyNzMwMmUyMmRhYmIzYjQyZGZmZGJiMTlkNjA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTg3
NSw2ICs4NzUsMTMgQEAgcHVibGljOgogICAgICAgICBBbHBoYURvVW5tdWx0aXBseSA9IDIKICAg
ICB9OwogCisgICAgZW51bSBJbWFnZUh0bWxEb21Tb3VyY2UgeworICAgICAgICBIdG1sRG9tSW1h
Z2UgPSAwLAorICAgICAgICBIdG1sRG9tQ2FudmFzID0gMSwKKyAgICAgICAgSHRtbERvbVZpZGVv
ID0gMiwKKyAgICAgICAgSHRtbERvbU5vbmUgPSAzCisgICAgfTsKKwogICAgIC8vIFBhY2tzIHRo
ZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2Ugd2hpY2ggaXMgcGFzc2VkIGluIHxwaXhlbHN8
IGludG8gdGhlIHBhc3NlZCBWZWN0b3IKICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZv
cm1hdCBhbmQgdHlwZSwgYW5kIG9iZXlpbmcgdGhlIGZsaXBZIGFuZCBBbHBoYU9wIGZsYWdzLgog
ICAgIC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nlc3MuCkBAIC04ODIsNyArODg5LDcgQEAgcHVi
bGljOgogCiAgICAgY2xhc3MgSW1hZ2VFeHRyYWN0b3IgewogICAgIHB1YmxpYzoKLSAgICAgICAg
SW1hZ2VFeHRyYWN0b3IoSW1hZ2UqLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUpOworICAgICAgICBJbWFnZUV4dHJhY3RvcihJbWFnZSosIElt
YWdlSHRtbERvbVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlKTsKIAogICAgICAgICAvLyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlk
ZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVh
c2UgcmVzb3VyY2VzCiAgICAgICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYgbmVl
ZGVkLgpAQCAtODk0LDcgKzkwMSw4IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgaW1hZ2VI
ZWlnaHQoKSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0OyB9CiAgICAgICAgIFNvdXJjZURhdGFGb3Jt
YXQgaW1hZ2VTb3VyY2VGb3JtYXQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlRm9ybWF0OyB9CiAg
ICAgICAgIEFscGhhT3AgaW1hZ2VBbHBoYU9wKCkgeyByZXR1cm4gbV9hbHBoYU9wOyB9Ci0gICAg
ICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCkgeyByZXR1cm4gbV9pbWFn
ZVNvdXJjZVVucGFja0FsaWdubWVudDsgfSAKKyAgICAgICAgdW5zaWduZWQgaW1hZ2VTb3VyY2VV
bnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50OyB9
CisgICAgICAgIEltYWdlSHRtbERvbVNvdXJjZSBpbWFnZUh0bWxEb21Tb3VyY2UoKSB7IHJldHVy
biBtX2ltYWdlSHRtbERvbVNvdXJjZTsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIC8vIEVhY2gg
cGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgog
ICAgICAgICAvLyBFeHRyYWN0cyB0aGUgaW1hZ2UgYW5kIGtlZXBzIHRyYWNrIG9mIGl0cyBzdGF0
dXMsIHN1Y2ggYXMgd2lkdGgsIGhlaWdodCwgU291cmNlIEFsaWdubWVudCwgZm9ybWF0IGFuZCBB
bHBoYU9wIGV0YywKQEAgLTkyMiw2ICs5MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgIFNvdXJjZURh
dGFGb3JtYXQgbV9pbWFnZVNvdXJjZUZvcm1hdDsKICAgICAgICAgQWxwaGFPcCBtX2FscGhhT3A7
CiAgICAgICAgIHVuc2lnbmVkIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7CisgICAgICAg
IEltYWdlSHRtbERvbVNvdXJjZSBtX2ltYWdlSHRtbERvbVNvdXJjZTsKICAgICB9OwogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgK
aW5kZXggZjliYzkyMDQ5YTRmNjMxODRlYjY1M2MxNjFiMDEwODM1OGVjMjkxMC4uNjhjOGQ4MmY3
ZDEyZjIwNTg4NjA1M2E4MDAwZThiNTdkZGVmNGY1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xMDQsNiArMTA0LDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25zdDsK
IAogICAgICAgICBQYXNzUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFNjYWxlQmVoYXZpb3IgPSBTY2FsZWQpIGNvbnN0OworICAgICAg
ICAvLyBHaXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250
Q29weUJhY2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUg
YmVoYXZpb3IKKyAgICAgICAgLy8gb3IgcmV0dXJuIENvcHlCYWNraW5nU3RvcmUgaWYgaXQgZG9l
c24ndC4gIAorICAgICAgICBzdGF0aWMgQmFja2luZ1N0b3JlQ29weSBmYXN0Q29weUltYWdlTW9k
ZSgpOwogCiAgICAgICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fp
cm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0M0RDYWlyby5jcHAKaW5kZXggYmQzYmRmZGE5YWExMzhlODY0OTNkMTQ4MmU4NTkzZmE0
NGNjYWZjMS4uOGU5YmI4MmIzNjM1MDdhZjhmODg4MDhhMDM2N2IwNGMzODNhYTQ1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTE4OSw3ICsxODksMTEgQEAgYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wKICAgICB9IGVsc2UgewogICAgICAgICBOYXRpdmVJbWFnZUNhaXJv
KiBuYXRpdmVJbWFnZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAg
ICAgICAgIG1faW1hZ2VTdXJmYWNlID0gKG5hdGl2ZUltYWdlKSA/IG5hdGl2ZUltYWdlLT5zdXJm
YWNlKCkgOiAwOwotICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCisgICAgICAgIC8vIDEu
IEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJl
bXVsdGlwbHlBbHBoYSBoYWQgYmVlbiBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMgMHhG
RiBmb3IgZWFjaCBwaXhlbCwKKyAgICAgICAgLy8gd2hpY2ggaXMgdHJ1ZSBhdCBwcmVzZW50IGFu
ZCBtYXkgYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIGFuZCBuZWVkcyBhZGp1c3RtZW50IGFjY29y
ZGluZ2x5CisgICAgICAgIC8vIDIuIEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTENhbnZhc0VsZW1l
bnQgaW5wdXQgaW4gd2hpY2ggQWxwaGEgaXMgYWxyZWFkeSBQcmVtdWx0aXBsaWVkIGluIHRoaXMg
cG9ydCwgCisgICAgICAgIC8vIGRvIEFscGhhRG9Vbm11bHRpcGx5IGlmIFVOUEFDS19QUkVNVUxU
SVBMWV9BTFBIQV9XRUJHTCBpcyBzZXQgdG8gZmFsc2UKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBs
eUFscGhhICYmIG1faW1hZ2VIdG1sRG9tU291cmNlID09IEh0bWxEb21DYW52YXMpCiAgICAgICAg
ICAgICBtX2FscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHAKaW5kZXggMDI2ZjQ0OTFkMDI4NTIxYTU4ZTcxYWM3MzZhMGFhZmM3MjI2NTkzNS4u
MjA5ODc5YWRiODJjNjNjNGMwNjQxMjVlOGNhODE3MmVkMzg2YWFjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyby5jcHAKQEAgLTkxLDYgKzkxLDExIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVoCiAgICAg
cmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY2Fpcm9fc3VyZmFjZV9yZWZlcmVuY2UobV9kYXRh
Lm1fc3VyZmFjZSkpOwogfQogCitCYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29w
eUltYWdlTW9kZSgpCit7CisgICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOworfQorCiB2
b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBtYXNrUmVjdCkgY29uc3QKIHsKICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+cHVzaEltYWdlTWFzayhtX2RhdGEubV9zdXJmYWNlLCBtYXNrUmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmlu
ZGV4IGI1ODcxZGM5OWUyMzQ3NDg0OTAyY2Q0MjFmYzNlOGQ1OTAzOTU5NDUuLjUwZDE4OWNhNmNm
NDdmN2NlMDIxNDcxNzc5NzU3ODU5MDc4YThlODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0yMzEsNiArMjMx
LDExIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVoCiAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoaW1hZ2UuZ2V0KCkpOwogfQogCitCYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpm
YXN0Q29weUltYWdlTW9kZSgpCit7CisgICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwor
fQorCiBOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAogewogICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VC
dWZmZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1
ZmZlclF0LmNwcAppbmRleCBmZGJlODhkYjNkZjgyZjg1YmNjOWY3MzVmNDVmMjE4NzFjMTRkMDdm
Li4xYzA4MzVjNzdlMGQ4YWRkZTc2ZmFhMWQ0MGU3ODgwNTA3ZjJhMjA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApA
QCAtMTI1LDYgKzEyNSwxMSBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBTY2FsZUJlaAogICAgIHJldHVybiBT
dGlsbEltYWdlOjpjcmVhdGVGb3JSZW5kZXJpbmcoJm1fZGF0YS5tX3BpeG1hcCk7CiB9CiAKK0Jh
Y2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKK3sKKyAgICBy
ZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXco
R3JhcGhpY3NDb250ZXh0KiBkZXN0Q29udGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVh
bGl0eVNjYWxlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCmluZGV4IGIzZDFlYTdm
N2ViN2Y5YTdlMjQyZjU0NGQxYWNkZjZhOGI3M2I5YjguLjZiN2Y1MjkwNzdkZTlhN2I0NjkwYzBj
OTQ4NDc0MmY2MmI5YzY4YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKQEAgLTc4
LDggKzc4LDE0IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRy
YWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sCiAgICAgICAgIG1fc2tpYUltYWdl
ID0gbV9uYXRpdmVJbWFnZS5nZXQoKTsKICAgICAgICAgaWYgKGhhc0FscGhhICYmIHByZW11bHRp
cGx5QWxwaGEpCiAgICAgICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7Ci0g
ICAgfSBlbHNlIGlmICghcHJlbXVsdGlwbHlBbHBoYSAmJiBoYXNBbHBoYSkKLSAgICAgICAgbV9h
bHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CisgICAgfSBlbHNlIGlmICghcHJlbXVsdGlwbHlB
bHBoYSAmJiBoYXNBbHBoYSkgeworICAgICAgICAvLyAxLiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhU
TUxWaWRlb0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5QWxwaGEgaGFkIGJlZW4g
YXBwbGllZCBhbmQgdGhlIGFscGhhIHZhbHVlIGZvciBlYWNoIHBpeGVsIGlzIDB4RkYKKyAgICAg
ICAgLy8gd2hpY2ggaXMgdHJ1ZSBhdCBwcmVzZW50IGFuZCBtYXkgYmUgY2hhbmdlZCBpbiB0aGUg
ZnV0dXJlIGFuZCBuZWVkcyBhZGp1c3RtZW50IGFjY29yZGluZ2x5CisgICAgICAgIC8vIDIuIEZv
ciB0ZXhJbWFnZTJEIHdpdGggSFRNTENhbnZhc0VsZW1lbnQgaW5wdXQgaW4gd2hpY2ggQWxwaGEg
aXMgYWxyZWFkeSBQcmVtdWx0aXBsaWVkIGluIHRoaXMgcG9ydCwKKyAgICAgICAgLy8gZG8gQWxw
aGFEb1VubXVsdGlwbHkgaWYgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIGlzIHNldCB0
byBmYWxzZQorICAgICAgICBpZiAobV9pbWFnZUh0bWxEb21Tb3VyY2UgPT0gSHRtbERvbUNhbnZh
cykKKyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgIH0KICAg
ICBpZiAoIW1fc2tpYUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAppbmRleCBmMjRmOTcyNTI0NmJlZjgwOTU4YTk5NWNhYmNkYmJmYjQwNmY3YjkzLi4zODAz
OWQxNzY5ZjBkZTIwZmU2MmZhMjMxMGQxZmVjYWQyOWY5OWVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3Bw
CkBAIC0yMDEsNiArMjAxLDExIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVoCiAgICAgcmV0dXJu
IEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1fZGF0YS5tX3BsYXRmb3JtQ29u
dGV4dC5iaXRtYXAoKSwgY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUsIG1fcmVzb2x1
dGlvblNjYWxlKTsKIH0KIAorQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKQoreworICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKK30KKwogUGxh
dGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2RhdGEubV9sYXllckJyaWRnZSA/IG1fZGF0YS5tX2xheWVyQnJpZGdlLT5sYXllcigp
IDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0ltYWdlQnVmZmVyV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKaW5kZXggMjJjMzdmMmM5YzkxNjgxMjE0MDk3ZTkz
ZGYxODM1NWYwZTU4MGMyOS4uMmFmNmFkNTQ5MGYzZjg5MTUxYWY3MzM3NzgzYzQ0NDgwYjc5NGM3
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VCdWZmZXJXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKQEAgLTEwMCw2ICsxMDAsMTEgQEAgUGFzc1JlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciwgU2NhbGVCZWgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkSW1hZ2UoJm1f
ZGF0YSkpOwogfQogCitCYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpCit7CisgICAgcmV0dXJuIENvcHlCYWNraW5nU3RvcmU7Cit9CisKIHZvaWQgSW1hZ2VC
dWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAppbmRleCBlNWM0ZTdhY2NlYTA0NTYxNjQx
MTRkMzIyNTc2YjYxNGU3NTAwYzEwLi40ZjQxZWQxMDNjZjdjMTllM2IzNGU1OTVjMDJjOWY3YmFl
MmE5Yjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZUJ1ZmZlcld4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9JbWFnZUJ1ZmZlcld4LmNwcApAQCAtMTUyLDYgKzE1MiwxMSBAQCBQYXNzUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBT
Y2FsZUJlaAogICAgIHJldHVybiBpbWcucmVsZWFzZSgpOwogfQogCitCYWNraW5nU3RvcmVDb3B5
IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCit7CisgICAgcmV0dXJuIENvcHlCYWNr
aW5nU3RvcmU7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgY29udGV4dC0+Y2xp
cChyZWN0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178413</attachid>
            <date>2012-12-09 05:40:27 -0800</date>
            <delta_ts>2012-12-10 18:19:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121209213744.patch</filename>
            <type>text/plain</type>
            <size>23889</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY5YWQ4OGJhZDcxZDUw
NjM2Zjg4YjMxMjhkN2Y1OTEyNjc0ZjFlNC4uODkwNTRlNWYwMmY4YWI5MDcyOTIxYzE1ZjI1ZDAz
ZTJmODgyNWQ2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTEyLTA5ICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgbWVtb3J5IGNvcHkgb3Ig
Y29udmVyc2lvbnMgaW4gdGhlIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZm9yIEhUTUxW
aWRlb0VsZW1lbnQgd2hpY2ggbWF5IGJlIGF2b2lkZWQuIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUg
cmVkdW5kYW50IEJhY2tpbmdTdG9yZSBjb3B5IGlmIHRoZSBjb3JyZXNwb25kaW5nIEdyYXBoaWNz
IHBvcnQgc3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yLiBNb3Jlb3Zl
ciwgaXQgb3B0aW1pemVzIHRoZSBBbHBoYU9wIGlmIHRoZSBJbWFnZSBzb3VyY2UgaXMgZnJvbSBI
VE1MVmlkZW9FbGVtZW50IHRvIGF2b2lkIHVubmVjZXNzYXJ5IFVubXVsdGlwbHkgb3IgUHJlbXVs
dGlwbHkgb3BlcmF0aW9uIGluIHVucGFjay9wYWNrLiAKKworICAgICAgICBBbHJlYWR5IGNvdmVy
ZWQgYnkgY3VycmVudCB0ZXN0cy4gCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdlKTogYWRkIGEgcGFyYW1ldGVy
IHRvIGNob29zZSBCYWNraW5nU3RvcmUgY29weSBiZWhhdmlvci4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFj
dG9yOjpJbWFnZUV4dHJhY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEltYWdlRXh0cmFjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VTb3VyY2VVbnBhY2tB
bGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0
cmFjdG9yOjppbWFnZUh0bWxEb21Tb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6
IG9wdGltaXplIHRoZSBBbHBoYU9wIGZvciBIVE1MVmlkZW9FbGVtZW50IGlucHV0LgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VN
b2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKTogb3B0aW1pemUgdGhlIEFs
cGhhT3AgZm9yIEhUTUxWaWRlb0VsZW1lbnQgaW5wdXQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorCiAyMDEyLTEyLTA5ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4K
IAogICAgICAgICBbV0syXSBNb3ZlIGJ1dHRvbiBpbWFnZSB0byBpbmplY3RlZCBidW5kbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCmluZGV4IGQzOWUyYmI4OGVjMzEyYzI2OGM4NmQ0MTlkOTZlZjdmMTE3MTA2Y2IuLjFkZDJm
ZmVkYmJmOGRkN2QxMWQ2OGQ5ZDU1ZjgyNGQyYTc3YTQwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzYwOSwx
NSArMzYwOSwxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZQogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1h
Z2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29s
IGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IGVjID0gMDsKICAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQi
LCBpbnRlcm5hbGZvcm1hdCkpCiAgICAgICAgIHJldHVybjsKICAgICBWZWN0b3I8dWludDhfdD4g
ZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0
b3IoaW1hZ2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24g
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFs
cGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpO
T05FKTsKICAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewogICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzcw
Miw4ICszNzAwLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1h
Z2UtPnJlbmRlcmVyKCkpLAotICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5p
bWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0
bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7
CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCkBAIC0zNzQxLDEy
ICszNzM4LDExIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICBpZiAoaW1hZ2VEYXRhKQog
ICAgICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQs
IHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgdGV4SW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFz
LT5jb3BpZWRJbWFnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICAgICAgdGV4SW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1Q
YXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdl
KEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8
SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVv
RWxlbWVudCogdmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCF2aWRlbyB8fCAhdmlkZW8tPnZpZGVvV2lkdGgoKSB8
fCAhdmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgIm5vIHZpZGVvIik7
CkBAIC0zNzY1LDcgKzM3NjEsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZAogICAgIEludFJl
Y3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICAvLyBG
SVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBpbnN0ZWFkIG9mIENQ
VSByZWFkYmFjay4KICAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmLT5j
b250ZXh0KCksIGRlc3RSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOwog
fQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LApAQCAtMzc3NCwxMCAr
Mzc3MCwxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgZWMgPSAwOwogICAgIGlmIChp
c0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIGVjKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9k
ZSgpLCBlYyk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIHRleEltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LmdldCgpLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAg
ICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAjZW5kaWYKIApAQCAt
Mzg1NywxNSArMzg1MywxMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSogaW1hZ2UsIGJv
b2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dDNE
OjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRp
cGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKICAgICBpZiAoaXND
b250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGlt
YWdlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdy
YXBoaWNzQ29udGV4dDNEOjpOT05FKTsgIAorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4
dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhh
LCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
KTsgIAogICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CiAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzk0OCw4
ICszOTQyLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICAgICAgZWMgPSBTRUNVUklU
WV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7
CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFn
ZS0+cmVuZGVyZXIoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LApAQCAtMzk3MCw4ICszOTYzLDcg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW4KICAgICBpZiAoaW1hZ2VEYXRhKQogICAgICAgICB0
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7CiAgICAgZWxzZQotICAgICAgICB0ZXhTdWJJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZh
cy0+Y29waWVkSW1hZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CisgICAgICAgIHRleFN1YkltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFz
LT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKICNpZiBFTkFCTEUo
VklERU8pCkBAIC0zOTgxLDEwICszOTczLDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAg
ICAgZWMgPSAwOwogICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIGVjKTsKKyAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIEltYWdlQnVm
ZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAg
cmV0dXJuOwotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggMmRhZTIzZDgzMjgyMGE2MmRjMjZh
MjMxZTRhNmU1NzM4ODM4ODhmZi4uN2RkZmMyY2Q2NWVmMDFjMDI1ODI3MzRiMzZlZDI3ZmE5OTdm
ZmZlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdD
b250ZXh0LmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJUaW1lci5o
IgogI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgogCkBAIC0zNzIsNyArMzczLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwogCiAjaWYg
RU5BQkxFKFZJREVPKQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhU
TUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJbWFnZT4g
dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIEJhY2tpbmdTdG9yZUNvcHksIEV4
Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQ7CkBAIC01MzEsMTMgKzUzMiw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc3RvcmVT
dGF0ZUFmdGVyQ2xlYXIoKTsKIAogICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
ZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
dGV4SW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJh
c2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEltYWdlKiBpbWFnZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2b2lkIGhhbmRsZU5QT1RUZXh0dXJlcyhjb25zdCBj
aGFyKiwgYm9vbCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAppbmRleCBmZmE4ZWM2M2E3NmMwMjE3NTViMTIyY2U1
ZTQxYmNlN2M3NzQyMjQ2Li43NzBmNGQxNjA5ZjY3OGEzZTRiNjA2Y2RiZDFlYjk2YWMzZGMxYjlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuY3BwCkBAIC0xNjgsOSArMTY4LDEwIEBAIEdDM0RlbnVtIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5CiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpJbWFnZUV4dHJhY3RvcihJbWFnZSogaW1hZ2Us
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkK
K0dyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3IoSW1hZ2Uq
IGltYWdlLCBJbWFnZUh0bWxEb21Tb3VyY2UgaW1hZ2VIdG1sRG9tU291cmNlLCBib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCiB7CiAgICAgbV9p
bWFnZSA9IGltYWdlOworICAgIG1faW1hZ2VIdG1sRG9tU291cmNlID0gaW1hZ2VIdG1sRG9tU291
cmNlOwogICAgIG1fZXh0cmFjdFN1Y2NlZWRlZCA9IGV4dHJhY3RJbWFnZShwcmVtdWx0aXBseUFs
cGhhLCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDMxZjYw
M2NiZTg2Njk5YTk1ZGQ2MjdiY2M1ZjFkYTZlMDZkZDUzNjQuLjhjMzI2ZjY4NjZjM2RlZDc5ZWVm
MDEwNmI4ZjcyNmE5YTY5YjJlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtODc1LDYgKzg3NSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIEFscGhhRG9Vbm11bHRpcGx5ID0gMgogICAgIH07CiAKKyAgICBlbnVtIElt
YWdlSHRtbERvbVNvdXJjZSB7CisgICAgICAgIEh0bWxEb21JbWFnZSA9IDAsCisgICAgICAgIEh0
bWxEb21DYW52YXMgPSAxLAorICAgICAgICBIdG1sRG9tVmlkZW8gPSAyLAorICAgICAgICBIdG1s
RG9tTm9uZSA9IDMKKyAgICB9OworCiAgICAgLy8gUGFja3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBn
aXZlbiBJbWFnZSB3aGljaCBpcyBwYXNzZWQgaW4gfHBpeGVsc3wgaW50byB0aGUgcGFzc2VkIFZl
Y3RvcgogICAgIC8vIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCB0eXBlLCBhbmQg
b2JleWluZyB0aGUgZmxpcFkgYW5kIEFscGhhT3AgZmxhZ3MuCiAgICAgLy8gUmV0dXJucyB0cnVl
IHVwb24gc3VjY2Vzcy4KQEAgLTg4Miw3ICs4ODksNyBAQCBwdWJsaWM6CiAKICAgICBjbGFzcyBJ
bWFnZUV4dHJhY3RvciB7CiAgICAgcHVibGljOgotICAgICAgICBJbWFnZUV4dHJhY3RvcihJbWFn
ZSosIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBpZ25vcmVHYW1tYUFuZENvbG9yUHJvZmls
ZSk7CisgICAgICAgIEltYWdlRXh0cmFjdG9yKEltYWdlKiwgSW1hZ2VIdG1sRG9tU291cmNlLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOwog
CiAgICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9u
IG9mIHRoaXMgbWV0aG9kIHRvIGRlYWxsb2NhdGUgb3IgcmVsZWFzZSByZXNvdXJjZXMKICAgICAg
ICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSBpbWFnZSBpZiBuZWVkZWQuCkBAIC04OTQsNyArOTAx
LDggQEAgcHVibGljOgogICAgICAgICB1bnNpZ25lZCBpbWFnZUhlaWdodCgpIHsgcmV0dXJuIG1f
aW1hZ2VIZWlnaHQ7IH0KICAgICAgICAgU291cmNlRGF0YUZvcm1hdCBpbWFnZVNvdXJjZUZvcm1h
dCgpIHsgcmV0dXJuIG1faW1hZ2VTb3VyY2VGb3JtYXQ7IH0KICAgICAgICAgQWxwaGFPcCBpbWFn
ZUFscGhhT3AoKSB7IHJldHVybiBtX2FscGhhT3A7IH0KLSAgICAgICAgdW5zaWduZWQgaW1hZ2VT
b3VyY2VVbnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBtX2ltYWdlU291cmNlVW5wYWNrQWxpZ25t
ZW50OyB9IAorICAgICAgICB1bnNpZ25lZCBpbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpIHsg
cmV0dXJuIG1faW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQ7IH0KKyAgICAgICAgSW1hZ2VIdG1s
RG9tU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSgpIHsgcmV0dXJuIG1faW1hZ2VIdG1sRG9tU291
cmNlOyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gRWFjaCBwbGF0Zm9ybSBtdXN0IHByb3Zp
ZGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QuCiAgICAgICAgIC8vIEV4dHJhY3Rz
IHRoZSBpbWFnZSBhbmQga2VlcHMgdHJhY2sgb2YgaXRzIHN0YXR1cywgc3VjaCBhcyB3aWR0aCwg
aGVpZ2h0LCBTb3VyY2UgQWxpZ25tZW50LCBmb3JtYXQgYW5kIEFscGhhT3AgZXRjLApAQCAtOTE1
LDYgKzkyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgUUltYWdlIG1fcXRJbWFnZTsKICNlbmRpZgog
ICAgICAgICBJbWFnZSogbV9pbWFnZTsKKyAgICAgICAgSW1hZ2VIdG1sRG9tU291cmNlIG1faW1h
Z2VIdG1sRG9tU291cmNlOwogICAgICAgICBib29sIG1fZXh0cmFjdFN1Y2NlZWRlZDsKICAgICAg
ICAgY29uc3Qgdm9pZCogbV9pbWFnZVBpeGVsRGF0YTsKICAgICAgICAgdW5zaWduZWQgbV9pbWFn
ZVdpZHRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKaW5kZXggNDU2MTE0MDA3ZThhMmI3NTQ5MTBlZmMzN2U2YzY1ZWU1ZWUyZjA2Yy4uOWM1ZTYz
YTk1OTVlOWE2MDk5YTUyNzU1ZDQ3OTYzM2UyMWM4OWRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xMDQsNiArMTA0LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQoKSBjb25z
dDsKIAogICAgICAgICBQYXNzUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUsIFNjYWxlQmVoYXZpb3IgPSBTY2FsZWQpIGNvbnN0OworICAg
ICAgICAvLyBHaXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBE
b250Q29weUJhY2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3Rv
cmUgYmVoYXZpb3IKKyAgICAgICAgLy8gb3IgcmV0dXJuIENvcHlCYWNraW5nU3RvcmUgaWYgaXQg
ZG9lc24ndC4gIAorICAgICAgICBzdGF0aWMgQmFja2luZ1N0b3JlQ29weSBmYXN0Q29weUltYWdl
TW9kZSgpOwogCiAgICAgICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0M0RDYWlyby5jcHAKaW5kZXggYmQzYmRmZGE5YWExMzhlODY0OTNkMTQ4MmU4NTkz
ZmE0NGNjYWZjMS4uM2Q1YTFlMjM5YWVlMzE5M2IxM2RlNDc0NDhkN2FkMzQ4NmNiNmU1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0M0RDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAKQEAgLTE4OSw3ICsxODksMTEgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZShib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wKICAgICB9IGVsc2UgewogICAgICAgICBOYXRpdmVJbWFnZUNh
aXJvKiBuYXRpdmVJbWFnZSA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7
CiAgICAgICAgIG1faW1hZ2VTdXJmYWNlID0gKG5hdGl2ZUltYWdlKSA/IG5hdGl2ZUltYWdlLT5z
dXJmYWNlKCkgOiAwOwotICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCisgICAgICAgIC8v
IDEuIEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTFZpZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8g
UHJlbXVsdGlwbHlBbHBoYSBoYWQgYmVlbiBhcHBsaWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgaXMg
MHhGRiBmb3IgZWFjaCBwaXhlbCwKKyAgICAgICAgLy8gd2hpY2ggaXMgdHJ1ZSBhdCBwcmVzZW50
IGFuZCBtYXkgYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIGFuZCBuZWVkcyBhZGp1c3RtZW50IGFj
Y29yZGluZ2x5LgorICAgICAgICAvLyAyLiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxDYW52YXNF
bGVtZW50IGlucHV0IGluIHdoaWNoIEFscGhhIGlzIGFscmVhZHkgUHJlbXVsdGlwbGllZCBpbiB0
aGlzIHBvcnQsIAorICAgICAgICAvLyBkbyBBbHBoYURvVW5tdWx0aXBseSBpZiBVTlBBQ0tfUFJF
TVVMVElQTFlfQUxQSEFfV0VCR0wgaXMgc2V0IHRvIGZhbHNlLgorICAgICAgICBpZiAoIXByZW11
bHRpcGx5QWxwaGEgJiYgbV9pbWFnZUh0bWxEb21Tb3VyY2UgIT0gSHRtbERvbVZpZGVvKQogICAg
ICAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFEb1VubXVsdGlwbHk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCmluZGV4IGIzZDEzZmRkMmFlZmE5ZjY0NjEyMmIxMzRjMGViODEzMTVhNjMz
MTMuLjY5NTM5MzI3ZjEzMDQyNmU2YTk0ZjA0ZDg4MDNhNDQ3ODY5ZjMzZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwCkBAIC05MSw2ICs5MSwxMSBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBTY2FsZUJlaAog
ICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNhaXJvX3N1cmZhY2VfcmVmZXJlbmNlKG1f
ZGF0YS5tX3N1cmZhY2UpKTsKIH0KIAorQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFz
dENvcHlJbWFnZU1vZGUoKQoreworICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKK30K
Kwogdm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgbWFza1JlY3QpIGNvbnN0CiB7CiAgICAgY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPnB1c2hJbWFnZU1hc2sobV9kYXRhLm1fc3VyZmFjZSwgbWFza1JlY3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAppbmRleCA1NDU3MTc0ZGEzMjI2NmYzMTkwNWViZmRjMjA3ODU0YWRmOGEwNzExLi4xZDk5ZTA4
NjA5MDU3OTQ5ZGNmMTIyOWUzYTdhYjQwYzAzNDNjMGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApAQCAtMjMxLDYg
KzIzMSwxMSBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBTY2FsZUJlaAogICAgIHJldHVybiBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKGltYWdlLmdldCgpKTsKIH0KIAorQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZl
cjo6ZmFzdENvcHlJbWFnZU1vZGUoKQoreworICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9y
ZTsKK30KKwogTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKIHsKICAgICBDR0ltYWdlUmVmIGltYWdl
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0lt
YWdlQnVmZmVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VCdWZmZXJRdC5jcHAKaW5kZXggMGMyZWVmNDZhMGE0MjIzYjRmZWQyYTZkOTI1NDBhMGI2ZDIz
ZWZiNC4uOGIwYjMyYTZkOGFmNGVkNWI2OWYwMGJiMGNiNWE4Yzc0ODM2MDJjYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5j
cHAKQEAgLTEyNSw2ICsxMjUsMTEgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgU2NhbGVCZWgKICAgICByZXR1
cm4gU3RpbGxJbWFnZTo6Y3JlYXRlRm9yUmVuZGVyaW5nKCZtX2RhdGEubV9waXhtYXApOwogfQog
CitCYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCit7Cisg
ICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOworfQorCiB2b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogZGVzdENvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
CiAgICAgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSwgYm9vbCB1c2VMb3dRdWFsaXR5
U2NhbGUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKaW5kZXggYjNkMWVhN2Y3ZWI3
ZjlhN2UyNDJmNTQ0ZDFhY2RmNmE4YjczYjliOC4uNWJkOWEzYjZhYzkxZWVhMmMxY2RmMDI2NDZl
NGRmYWM0NzIyMmUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcApAQCAtNzgsOCAr
NzgsMTQgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJ
bWFnZShib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wKICAgICAgICAgbV9za2lhSW1hZ2UgPSBt
X25hdGl2ZUltYWdlLmdldCgpOwogICAgICAgICBpZiAoaGFzQWxwaGEgJiYgcHJlbXVsdGlwbHlB
bHBoYSkKICAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9QcmVtdWx0aXBseTsKLSAgICB9
IGVsc2UgaWYgKCFwcmVtdWx0aXBseUFscGhhICYmIGhhc0FscGhhKQotICAgICAgICBtX2FscGhh
T3AgPSBBbHBoYURvVW5tdWx0aXBseTsKKyAgICB9IGVsc2UgaWYgKCFwcmVtdWx0aXBseUFscGhh
ICYmIGhhc0FscGhhKSB7CisgICAgICAgIC8vIDEuIEZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTFZp
ZGVvRWxtZW50IGlucHV0LCBhc3N1bWUgbm8gUHJlbXVsdGlwbHlBbHBoYSBoYWQgYmVlbiBhcHBs
aWVkIGFuZCB0aGUgYWxwaGEgdmFsdWUgZm9yIGVhY2ggcGl4ZWwgaXMgMHhGRgorICAgICAgICAv
LyB3aGljaCBpcyB0cnVlIGF0IHByZXNlbnQgYW5kIG1heSBiZSBjaGFuZ2VkIGluIHRoZSBmdXR1
cmUgYW5kIG5lZWRzIGFkanVzdG1lbnQgYWNjb3JkaW5nbHkuCisgICAgICAgIC8vIDIuIEZvciB0
ZXhJbWFnZTJEIHdpdGggSFRNTENhbnZhc0VsZW1lbnQgaW5wdXQgaW4gd2hpY2ggQWxwaGEgaXMg
YWxyZWFkeSBQcmVtdWx0aXBsaWVkIGluIHRoaXMgcG9ydCwKKyAgICAgICAgLy8gZG8gQWxwaGFE
b1VubXVsdGlwbHkgaWYgVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMIGlzIHNldCB0byBm
YWxzZS4KKyAgICAgICAgaWYgKG1faW1hZ2VIdG1sRG9tU291cmNlICE9IEh0bWxEb21WaWRlbykK
KyAgICAgICAgICAgIG1fYWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OworICAgIH0KICAgICBp
ZiAoIW1fc2tpYUltYWdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNw
cAppbmRleCA5OTU0ZDc2Y2M3NjBmZGZmZDk0ODVhOGY2MjQzNmU0ZmVlNTczNzZkLi5mYmY3MzU5
YjA3NDY2NGExYzJjYTlmN2NiOTAxM2MxMWRkOTFjMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBA
IC0yMDEsNiArMjAxLDExIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVoCiAgICAgcmV0dXJuIEJp
dG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4
dC5iaXRtYXAoKSwgY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUsIG1fcmVzb2x1dGlv
blNjYWxlKTsKIH0KIAorQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFn
ZU1vZGUoKQoreworICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKK30KKwogUGxhdGZv
cm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAogewogICAgIHJldHVy
biBtX2RhdGEubV9sYXllckJyaWRnZSA/IG1fZGF0YS5tX2xheWVyQnJpZGdlLT5sYXllcigpIDog
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0lt
YWdlQnVmZmVyV2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKaW5kZXggMzJhMjI2M2MxNzk5ZWJhNTg4YmJmOTZjNzA2
ZGYxYjdlYWMzZWU1NC4uODgxNTQwNzRiYTVmYTlkYzhjNTkxMDYyMTBkZDgwMTA0YWMwNDcwNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VC
dWZmZXJXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvSW1hZ2VCdWZmZXJXaW5DRS5jcHAKQEAgLTEwMCw2ICsxMDAsMTEgQEAgUGFzc1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
ciwgU2NhbGVCZWgKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEJ1ZmZlcmVkSW1hZ2UoJm1fZGF0
YSkpOwogfQogCitCYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9k
ZSgpCit7CisgICAgcmV0dXJuIENvcHlCYWNraW5nU3RvcmU7Cit9CisKIHZvaWQgSW1hZ2VCdWZm
ZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikgY29uc3QKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAppbmRleCBlNWM0ZTdhY2NlYTA0NTYxNjQxMTRk
MzIyNTc2YjYxNGU3NTAwYzEwLi40ZjQxZWQxMDNjZjdjMTllM2IzNGU1OTVjMDJjOWY3YmFlMmE5
Yjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFn
ZUJ1ZmZlcld4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZUJ1ZmZlcld4LmNwcApAQCAtMTUyLDYgKzE1MiwxMSBAQCBQYXNzUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBTY2Fs
ZUJlaAogICAgIHJldHVybiBpbWcucmVsZWFzZSgpOwogfQogCitCYWNraW5nU3RvcmVDb3B5IElt
YWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCit7CisgICAgcmV0dXJuIENvcHlCYWNraW5n
U3RvcmU7Cit9CisKIHZvaWQgSW1hZ2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiB7CiAgICAgY29udGV4dC0+Y2xpcChy
ZWN0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178680</attachid>
            <date>2012-12-10 18:19:15 -0800</date>
            <delta_ts>2012-12-11 17:36:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102161-20121211101757.patch</filename>
            <type>text/plain</type>
            <size>23878</size>
            <attacher name="Jun Jiang">jun.a.jiang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmU4MTIwNjNkOTNiYWRl
NjNkMDI4YjM1NDYwZWJjYmNlMTIwOGU1Yy4uMGNmMWUzZDFmZGMyODcwNjljZDljNDk0MDY5NGY1
NWU0MDdiNTZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEyLTEyLTEwICBKdW4g
SmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CisKKyAgICAgICAgV2ViR0w6IEF2b2lkIHVu
bmVjZXNzYXJ5IG1lbW9yeSBjb3B5IG9yIGNvbnZlcnNpb24gaW4gdGV4SW1hZ2UyRCBhbmQgdGV4
U3ViSW1hZ2UyRCBmb3IgSFRNTFZpZGVvRWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyMTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgbWVtb3J5IGNvcHkgb3Ig
Y29udmVyc2lvbnMgaW4gdGhlIHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgZm9yIEhUTUxW
aWRlb0VsZW1lbnQgd2hpY2ggbWF5IGJlIGF2b2lkZWQuIFRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUg
cmVkdW5kYW50IEJhY2tpbmdTdG9yZSBjb3B5IGlmIHRoZSBjb3JyZXNwb25kaW5nIEdyYXBoaWNz
IHBvcnQgc3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yLiBNb3Jlb3Zl
ciwgaXQgb3B0aW1pemVzIHRoZSBBbHBoYU9wIGlmIHRoZSBJbWFnZSBzb3VyY2UgaXMgZnJvbSBI
VE1MVmlkZW9FbGVtZW50IHRvIGF2b2lkIHVubmVjZXNzYXJ5IFVubXVsdGlwbHkgb3IgUHJlbXVs
dGlwbHkgb3BlcmF0aW9uIGluIHVucGFjay9wYWNrLiAKKworICAgICAgICBBbHJlYWR5IGNvdmVy
ZWQgYnkgY3VycmVudCB0ZXN0cy4gCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdlKTogYWRkIGEgcGFyYW1ldGVy
IHRvIGNob29zZSBCYWNraW5nU3RvcmUgY29weSBiZWhhdmlvci4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFj
dG9yOjpJbWFnZUV4dHJhY3Rvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaDoKKyAgICAgICAgKEltYWdlRXh0cmFjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6aW1hZ2VTb3VyY2VVbnBhY2tB
bGlnbm1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0
cmFjdG9yOjppbWFnZUh0bWxEb21Tb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OmV4dHJhY3RJbWFnZSk6
IG9wdGltaXplIHRoZSBBbHBoYU9wIGZvciBIVE1MVmlkZW9FbGVtZW50IGlucHV0LgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VN
b2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUV4dHJhY3Rvcjo6ZXh0cmFjdEltYWdlKTogb3B0aW1pemUgdGhlIEFs
cGhhT3AgZm9yIEhUTUxWaWRlb0VsZW1lbnQgaW5wdXQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorCiAyMDEyLTEyLTEwICBLeXVuZ1RhZSBLaW0gIDxrdGYua2ltQHNhbXN1
bmcuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBhZnRlciByMTM3MjIxCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCBk
MzllMmJiODhlYzMxMmMyNjhjODZkNDE5ZDk2ZWY3ZjExNzEwNmNiLi4xZGQyZmZlZGJiZjhkZDdk
MTFkNjhkOWQ1NWY4MjRkMmE3N2E0MDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2MDksMTUgKzM2MDksMTMg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGUKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4
Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJ
bXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CiAg
ICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxm
b3JtYXQpKQogICAgICAgICByZXR1cm47CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBw
cmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT05FKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3Ig
aW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBh
Y2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CiAgICAg
aWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJE
IiwgImJhZCBpbWFnZSBkYXRhIik7CiAgICAgICAgIHJldHVybjsKQEAgLTM3MDIsOCArMzcwMCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJl
cigpKSwKLSAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIGVjKTsKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5k
ZXJlcihpbWFnZS0+cmVuZGVyZXIoKSksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2Us
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LApAQCAtMzc0MSwxMiArMzczOCwxMSBA
QCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtCiAgICAgaWYgKGltYWdlRGF0YSkKICAgICAgICAgdGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZURhdGEuZ2V0KCksIGVjKTsKICAgICBlbHNlCi0gICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1h
Z2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVt
dWx0aXBseUFscGhhLCBlYyk7CisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotUGFzc1JlZlB0cjxJ
bWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9F
bGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPEltYWdlPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmIGVj
KQogewogICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52
aWRlb0hlaWdodCgpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJubyB2aWRlbyIpOwpAQCAtMzc2NSw3
ICszNzYxLDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRl
b0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWQKICAgICBJbnRSZWN0IGRlc3RSZWN0
KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAgICAgLy8gRklYTUU6IFR1cm4g
dGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2su
CiAgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBk
ZXN0UmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwor
ICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKIH0KIAogdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKQEAgLTM3NzQsMTAgKzM3NzAsMTAgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bQogICAgIGVjID0gMDsKICAgICBpZiAoaXNDb250ZXh0TG9z
dCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJh
bWVUb0ltYWdlKHZpZGVvLCBlYyk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJh
bWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwog
ICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CisgICAgdGV4SW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Uu
Z2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogI2VuZGlmCiAKQEAgLTM4NTcsMTUgKzM4
NTMsMTMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2UqIGltYWdlLCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1s
RG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKICAgICAgICAgcmV0dXJuOwogICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgcHJlbXVs
dGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9ORSk7ICAKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1h
Z2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tD
b2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAKICAgICBp
ZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewogICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdl
MkQiLCAiYmFkIGltYWdlIik7CiAgICAgICAgIHJldHVybjsKQEAgLTM5NDgsOCArMzk0Miw3IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGluCiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmlt
YWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVyKCkpLAotICAgICAgICAgICAgICAgICAgICAg
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIHRleFN1
YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVy
KCkpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKQEAgLTM5NzAsOCArMzk2Myw3IEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGluCiAgICAgaWYgKGltYWdlRGF0YSkKICAgICAgICAgdGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0
YS5nZXQoKSwgZWMpOwogICAgIGVsc2UKLSAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZElt
YWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1h
Z2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAt
Mzk4MSwxMCArMzk3MywxMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgIGVjID0gMDsK
ICAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBlYyk7CisgICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENv
cHlJbWFnZU1vZGUoKSwgZWMpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAg
ICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlLmdldCgpLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIGVjKTsKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6
SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVj
KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDJkYWUyM2Q4MzI4MjBhNjJkYzI2YTIzMWU0YTZlNTcz
ODgzODg4ZmYuLjdkZGZjMmNkNjVlZjAxYzAyNTgyNzM0YjM2ZWQyN2ZhOTk3ZmZmZWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5o
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRl
ICJXZWJHTEdldEluZm8uaCIKIApAQCAtMzcyLDcgKzM3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtKTsKIAogI2lmIEVOQUJMRShWSURF
TykKLSAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVU
b0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2Rl
Jik7CiAjZW5kaWYKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwpA
QCAtNTMxLDEzICs1MzIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXN0b3JlU3RhdGVBZnRlckNs
ZWFyKCk7CiAKICAgICB2b2lkIHRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhJbWFn
ZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBJbWFnZSosCi0gICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkRJ
bXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRl
eHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxw
aGEsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGlu
dCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbWFnZSogaW1hZ2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0
bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9u
Q29kZSYpOwogCiAgICAgdm9pZCBoYW5kbGVOUE9UVGV4dHVyZXMoY29uc3QgY2hhciosIGJvb2wp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAKaW5kZXggZmZhOGVjNjNhNzZjMDIxNzU1YjEyMmNlNWU0MWJjZTdjNzc0
MjI0Ni4uNzcwZjRkMTYwOWY2NzhhM2U0YjYwNmNkYmQxZWI5NmFjM2RjMWI5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmNwcApAQCAtMTY4LDkgKzE2OCwxMCBAQCBHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eQogICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNE
OjpJbWFnZUV4dHJhY3Rvcjo6SW1hZ2VFeHRyYWN0b3IoSW1hZ2UqIGltYWdlLCBib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpCitHcmFwaGljc0Nv
bnRleHQzRDo6SW1hZ2VFeHRyYWN0b3I6OkltYWdlRXh0cmFjdG9yKEltYWdlKiBpbWFnZSwgSW1h
Z2VIdG1sRG9tU291cmNlIGltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKQogewogICAgIG1faW1hZ2UgPSBpbWFn
ZTsKKyAgICBtX2ltYWdlSHRtbERvbVNvdXJjZSA9IGltYWdlSHRtbERvbVNvdXJjZTsKICAgICBt
X2V4dHJhY3RTdWNjZWVkZWQgPSBleHRyYWN0SW1hZ2UocHJlbXVsdGlwbHlBbHBoYSwgaWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCAzMWY2MDNjYmU4NjY5OWE5
NWRkNjI3YmNjNWYxZGE2ZTA2ZGQ1MzY0Li44YzMyNmY2ODY2YzNkZWQ3OWVlZjAxMDZiOGY3MjZh
OWE2OWIyZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTg3NSw2ICs4NzUsMTMgQEAgcHVibGljOgogICAgICAg
ICBBbHBoYURvVW5tdWx0aXBseSA9IDIKICAgICB9OwogCisgICAgZW51bSBJbWFnZUh0bWxEb21T
b3VyY2UgeworICAgICAgICBIdG1sRG9tSW1hZ2UgPSAwLAorICAgICAgICBIdG1sRG9tQ2FudmFz
ID0gMSwKKyAgICAgICAgSHRtbERvbVZpZGVvID0gMiwKKyAgICAgICAgSHRtbERvbU5vbmUgPSAz
CisgICAgfTsKKwogICAgIC8vIFBhY2tzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gSW1hZ2Ug
d2hpY2ggaXMgcGFzc2VkIGluIHxwaXhlbHN8IGludG8gdGhlIHBhc3NlZCBWZWN0b3IKICAgICAv
LyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIGZvcm1hdCBhbmQgdHlwZSwgYW5kIG9iZXlpbmcgdGhl
IGZsaXBZIGFuZCBBbHBoYU9wIGZsYWdzLgogICAgIC8vIFJldHVybnMgdHJ1ZSB1cG9uIHN1Y2Nl
c3MuCkBAIC04ODIsNyArODg5LDcgQEAgcHVibGljOgogCiAgICAgY2xhc3MgSW1hZ2VFeHRyYWN0
b3IgewogICAgIHB1YmxpYzoKLSAgICAgICAgSW1hZ2VFeHRyYWN0b3IoSW1hZ2UqLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUpOworICAgICAg
ICBJbWFnZUV4dHJhY3RvcihJbWFnZSosIEltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKTsKIAogICAgICAgICAv
LyBFYWNoIHBsYXRmb3JtIG11c3QgcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1l
dGhvZCB0byBkZWFsbG9jYXRlIG9yIHJlbGVhc2UgcmVzb3VyY2VzCiAgICAgICAgIC8vIGFzc29j
aWF0ZWQgd2l0aCB0aGUgaW1hZ2UgaWYgbmVlZGVkLgpAQCAtODk0LDcgKzkwMSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgdW5zaWduZWQgaW1hZ2VIZWlnaHQoKSB7IHJldHVybiBtX2ltYWdlSGVpZ2h0
OyB9CiAgICAgICAgIFNvdXJjZURhdGFGb3JtYXQgaW1hZ2VTb3VyY2VGb3JtYXQoKSB7IHJldHVy
biBtX2ltYWdlU291cmNlRm9ybWF0OyB9CiAgICAgICAgIEFscGhhT3AgaW1hZ2VBbHBoYU9wKCkg
eyByZXR1cm4gbV9hbHBoYU9wOyB9Ci0gICAgICAgIHVuc2lnbmVkIGltYWdlU291cmNlVW5wYWNr
QWxpZ25tZW50KCkgeyByZXR1cm4gbV9pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudDsgfSAKKyAg
ICAgICAgdW5zaWduZWQgaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSB7IHJldHVybiBtX2lt
YWdlU291cmNlVW5wYWNrQWxpZ25tZW50OyB9CisgICAgICAgIEltYWdlSHRtbERvbVNvdXJjZSBp
bWFnZUh0bWxEb21Tb3VyY2UoKSB7IHJldHVybiBtX2ltYWdlSHRtbERvbVNvdXJjZTsgfQogICAg
IHByaXZhdGU6CiAgICAgICAgIC8vIEVhY2ggcGxhdGZvcm0gbXVzdCBwcm92aWRlIGFuIGltcGxl
bWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgogICAgICAgICAvLyBFeHRyYWN0cyB0aGUgaW1hZ2Ug
YW5kIGtlZXBzIHRyYWNrIG9mIGl0cyBzdGF0dXMsIHN1Y2ggYXMgd2lkdGgsIGhlaWdodCwgU291
cmNlIEFsaWdubWVudCwgZm9ybWF0IGFuZCBBbHBoYU9wIGV0YywKQEAgLTkxNSw2ICs5MjMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFFJbWFnZSBtX3F0SW1hZ2U7CiAjZW5kaWYKICAgICAgICAgSW1h
Z2UqIG1faW1hZ2U7CisgICAgICAgIEltYWdlSHRtbERvbVNvdXJjZSBtX2ltYWdlSHRtbERvbVNv
dXJjZTsKICAgICAgICAgYm9vbCBtX2V4dHJhY3RTdWNjZWVkZWQ7CiAgICAgICAgIGNvbnN0IHZv
aWQqIG1faW1hZ2VQaXhlbERhdGE7CiAgICAgICAgIHVuc2lnbmVkIG1faW1hZ2VXaWR0aDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDQ1
NjExNDAwN2U4YTJiNzU0OTEwZWZjMzdlNmM2NWVlNWVlMmYwNmMuLjljNWU2M2E5NTk1ZTlhNjA5
OWE1Mjc1NWQ0Nzk2MzNlMjFjODlkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMTA0LDYgKzEwNCw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KCkgY29uc3Q7CiAKICAgICAg
ICAgUGFzc1JlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlLCBTY2FsZUJlaGF2aW9yID0gU2NhbGVkKSBjb25zdDsKKyAgICAgICAgLy8gR2l2
ZSBoaW50cyBvbiB0aGUgZmFzdGVyIGNvcHlJbWFnZSBNb2RlLCByZXR1cm4gRG9udENvcHlCYWNr
aW5nU3RvcmUgaWYgaXQgc3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9y
CisgICAgICAgIC8vIG9yIHJldHVybiBDb3B5QmFja2luZ1N0b3JlIGlmIGl0IGRvZXNuJ3QuICAK
KyAgICAgICAgc3RhdGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKIAog
ICAgICAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwg
QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNE
Q2Fpcm8uY3BwCmluZGV4IGJkM2JkZmRhOWFhMTM4ZTg2NDkzZDE0ODJlODU5M2ZhNDRjY2FmYzEu
LjNkNWExZTIzOWFlZTMxOTNiMTNkZTQ3NDQ4ZDdhZDM0ODZjYjZlNTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dDNEQ2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dDNEQ2Fpcm8uY3BwCkBAIC0xODksNyArMTg5LDExIEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sCiAgICAgfSBlbHNlIHsKICAgICAgICAgTmF0aXZlSW1hZ2VDYWlybyogbmF0aXZl
SW1hZ2UgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAgICAgICBt
X2ltYWdlU3VyZmFjZSA9IChuYXRpdmVJbWFnZSkgPyBuYXRpdmVJbWFnZS0+c3VyZmFjZSgpIDog
MDsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhhKQorICAgICAgICAvLyAxLiBGb3IgdGV4
SW1hZ2UyRCB3aXRoIEhUTUxWaWRlb0VsbWVudCBpbnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5
QWxwaGEgaGFkIGJlZW4gYXBwbGllZCBhbmQgdGhlIGFscGhhIHZhbHVlIGlzIDB4RkYgZm9yIGVh
Y2ggcGl4ZWwsCisgICAgICAgIC8vIHdoaWNoIGlzIHRydWUgYXQgcHJlc2VudCBhbmQgbWF5IGJl
IGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSBhbmQgbmVlZHMgYWRqdXN0bWVudCBhY2NvcmRpbmdseS4K
KyAgICAgICAgLy8gMi4gRm9yIHRleEltYWdlMkQgd2l0aCBIVE1MQ2FudmFzRWxlbWVudCBpbnB1
dCBpbiB3aGljaCBBbHBoYSBpcyBhbHJlYWR5IFByZW11bHRpcGxpZWQgaW4gdGhpcyBwb3J0LCAK
KyAgICAgICAgLy8gZG8gQWxwaGFEb1VubXVsdGlwbHkgaWYgVU5QQUNLX1BSRU1VTFRJUExZX0FM
UEhBX1dFQkdMIGlzIHNldCB0byBmYWxzZS4KKyAgICAgICAgaWYgKCFwcmVtdWx0aXBseUFscGhh
ICYmIG1faW1hZ2VIdG1sRG9tU291cmNlICE9IEh0bWxEb21WaWRlbykKICAgICAgICAgICAgIG1f
YWxwaGFPcCA9IEFscGhhRG9Vbm11bHRpcGx5OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAppbmRleCBiM2QxM2ZkZDJhZWZhOWY2NDYxMjJiMTM0YzBlYjgxMzE1YTYzMzEzLi42OTUzOTMy
N2YxMzA0MjZlNmE5NGYwNGQ4ODAzYTQ0Nzg2OWYzM2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cApAQCAtOTEsNiArOTEsMTEgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgU2NhbGVCZWgKICAgICByZXR1cm4g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShjYWlyb19zdXJmYWNlX3JlZmVyZW5jZShtX2RhdGEubV9zdXJm
YWNlKSk7CiB9CiAKK0JhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VN
b2RlKCkKK3sKKyAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Cit9CisKIHZvaWQgSW1h
Z2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IG1hc2tSZWN0KSBjb25zdAogewogICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wdXNo
SW1hZ2VNYXNrKG1fZGF0YS5tX3N1cmZhY2UsIG1hc2tSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggNTQ1
NzE3NGRhMzIyNjZmMzE5MDVlYmZkYzIwNzg1NGFkZjhhMDcxMS4uMWQ5OWUwODYwOTA1Nzk0OWRj
ZjEyMjllM2E3YWI0MGMwMzQzYzBjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKQEAgLTIzMSw2ICsyMzEsMTEgQEAg
UGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvciwgU2NhbGVCZWgKICAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShp
bWFnZS5nZXQoKSk7CiB9CiAKK0JhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5
SW1hZ2VNb2RlKCkKK3sKKyAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Cit9CisKIE5h
dGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IpIGNvbnN0CiB7CiAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQu
Y3BwCmluZGV4IDBjMmVlZjQ2YTBhNDIyM2I0ZmVkMmE2ZDkyNTQwYTBiNmQyM2VmYjQuLjhiMGIz
MmE2ZDhhZjRlZDViNjlmMDBiYjBjYjVhOGM3NDgzNjAyY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCkBAIC0xMjUs
NiArMTI1LDExIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVoCiAgICAgcmV0dXJuIFN0aWxsSW1h
Z2U6OmNyZWF0ZUZvclJlbmRlcmluZygmbV9kYXRhLm1fcGl4bWFwKTsKIH0KIAorQmFja2luZ1N0
b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQoreworICAgIHJldHVybiBE
b250Q29weUJhY2tpbmdTdG9yZTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQqIGRlc3RDb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAogICAgIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHQzRFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCmluZGV4IGIzZDFlYTdmN2ViN2Y5YTdlMjQyZjU0
NGQxYWNkZjZhOGI3M2I5YjguLjViZDlhM2I2YWM5MWVlYTJjMWNkZjAyNjQ2ZTRkZmFjNDcyMjJl
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0M0RTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKQEAgLTc4LDggKzc4LDE0IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yOjpleHRyYWN0SW1hZ2UoYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBib29sCiAgICAgICAgIG1fc2tpYUltYWdlID0gbV9uYXRpdmVJbWFn
ZS5nZXQoKTsKICAgICAgICAgaWYgKGhhc0FscGhhICYmIHByZW11bHRpcGx5QWxwaGEpCiAgICAg
ICAgICAgICBtX2FscGhhT3AgPSBBbHBoYURvUHJlbXVsdGlwbHk7Ci0gICAgfSBlbHNlIGlmICgh
cHJlbXVsdGlwbHlBbHBoYSAmJiBoYXNBbHBoYSkKLSAgICAgICAgbV9hbHBoYU9wID0gQWxwaGFE
b1VubXVsdGlwbHk7CisgICAgfSBlbHNlIGlmICghcHJlbXVsdGlwbHlBbHBoYSAmJiBoYXNBbHBo
YSkgeworICAgICAgICAvLyAxLiBGb3IgdGV4SW1hZ2UyRCB3aXRoIEhUTUxWaWRlb0VsbWVudCBp
bnB1dCwgYXNzdW1lIG5vIFByZW11bHRpcGx5QWxwaGEgaGFkIGJlZW4gYXBwbGllZCBhbmQgdGhl
IGFscGhhIHZhbHVlIGZvciBlYWNoIHBpeGVsIGlzIDB4RkYKKyAgICAgICAgLy8gd2hpY2ggaXMg
dHJ1ZSBhdCBwcmVzZW50IGFuZCBtYXkgYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlIGFuZCBuZWVk
cyBhZGp1c3RtZW50IGFjY29yZGluZ2x5LgorICAgICAgICAvLyAyLiBGb3IgdGV4SW1hZ2UyRCB3
aXRoIEhUTUxDYW52YXNFbGVtZW50IGlucHV0IGluIHdoaWNoIEFscGhhIGlzIGFscmVhZHkgUHJl
bXVsdGlwbGllZCBpbiB0aGlzIHBvcnQsCisgICAgICAgIC8vIGRvIEFscGhhRG9Vbm11bHRpcGx5
IGlmIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCBpcyBzZXQgdG8gZmFsc2UuCisgICAg
ICAgIGlmIChtX2ltYWdlSHRtbERvbVNvdXJjZSAhPSBIdG1sRG9tVmlkZW8pCisgICAgICAgICAg
ICBtX2FscGhhT3AgPSBBbHBoYURvVW5tdWx0aXBseTsKKyAgICB9CiAgICAgaWYgKCFtX3NraWFJ
bWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKaW5kZXggOTk1
NGQ3NmNjNzYwZmRmZmQ5NDg1YThmNjI0MzZlNGZlZTU3Mzc2ZC4uZmJmNzM1OWIwNzQ2NjRhMWMy
Y2E5ZjdjYjkwMTNjMTFkZDkxYzA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcApAQCAtMjAxLDYgKzIw
MSwxMSBAQCBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yLCBTY2FsZUJlaAogICAgIHJldHVybiBCaXRtYXBJbWFnZVNp
bmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCks
IGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlLCBtX3Jlc29sdXRpb25TY2FsZSk7CiB9
CiAKK0JhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKK3sK
KyAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Cit9CisKIFBsYXRmb3JtTGF5ZXIqIElt
YWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLm1f
bGF5ZXJCcmlkZ2UgPyBtX2RhdGEubV9sYXllckJyaWRnZS0+bGF5ZXIoKSA6IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldp
bkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVm
ZmVyV2luQ0UuY3BwCmluZGV4IDMyYTIyNjNjMTc5OWViYTU4OGJiZjk2YzcwNmRmMWI3ZWFjM2Vl
NTQuLjg4MTU0MDc0YmE1ZmE5ZGM4YzU5MTA2MjEwZGQ4MDEwNGFjMDQ3MDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luQ0Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVm
ZmVyV2luQ0UuY3BwCkBAIC0xMDAsNiArMTAwLDExIEBAIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFNjYWxlQmVo
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBCdWZmZXJlZEltYWdlKCZtX2RhdGEpKTsKIH0KIAor
QmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQoreworICAg
IHJldHVybiBDb3B5QmFja2luZ1N0b3JlOworfQorCiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0CiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4
L0ltYWdlQnVmZmVyV3guY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
SW1hZ2VCdWZmZXJXeC5jcHAKaW5kZXggZTVjNGU3YWNjZWEwNDU2MTY0MTE0ZDMyMjU3NmI2MTRl
NzUwMGMxMC4uNGY0MWVkMTAzY2Y3YzE5ZTNiMzRlNTk1YzAyYzlmN2JhZTJhOWI4NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJX
eC5jcHAKQEAgLTE1Miw2ICsxNTIsMTEgQEAgUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6
OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgU2NhbGVCZWgKICAgICBy
ZXR1cm4gaW1nLnJlbGVhc2UoKTsKIH0KIAorQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6
ZmFzdENvcHlJbWFnZU1vZGUoKQoreworICAgIHJldHVybiBDb3B5QmFja2luZ1N0b3JlOworfQor
CiB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KSBjb25zdAogewogICAgIGNvbnRleHQtPmNsaXAocmVjdCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>