<?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>38145</bug_id>
          
          <creation_ts>2010-04-26 15:30:11 -0700</creation_ts>
          <short_desc>Validate *tex* functions input parameters according to ES2 conformance</short_desc>
          <delta_ts>2010-06-23 13:01:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>29230</blocked>
    
    <blocked>40346</blocked>
    
    <blocked>40603</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>217322</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-26 15:30:11 -0700</bug_when>
    <thetext>If target/format/internalformat/type does not belong to ES2 subset, generate INVALID_ENUM.
If border != 0, generate INVALID_VALUE.
If format != internalformat, generate INVALID_OPERATION.
Simulate glGet* for GL_MAX_CUBE_MAP_TEXTURE_SIZE (map it to GL_MAX_TEXTURE_SIZE).
For *copyTexImage*, if the currently bound framebuffer&apos;s format does not contain a superset of the internalformat, generate INVAID_OPERATION.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221420</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-05 18:25:35 -0700</bug_when>
    <thetext>The active texture unit limits should be queries (currently it&apos;s hardwired to 32).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221429</commentid>
    <comment_count>2</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-05 18:41:46 -0700</bug_when>
    <thetext>[copy]tex[sub]image/getTexParameter/texParameter/generateMipmap should generate INVALID_OPERATION if no WebGLTexture is bound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222103</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-06 18:15:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; [copy]tex[sub]image/getTexParameter/texParameter/generateMipmap should generate
&gt; INVALID_OPERATION if no WebGLTexture is bound.

Gregg Tavares pointed out that it is debatable whether WebGL should enforce its current restrictions around not having a texture bound. Instead it is probably better to match OpenGL ES&apos;s behavior and support the notion of an initial texture. There is an email discussion started on the public_webgl list about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231484</commentid>
    <comment_count>4</comment_count>
      <attachid>57278</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-27 15:30:50 -0700</bug_when>
    <thetext>Created attachment 57278
patch

This patch does NOT deal with the default texture (0) situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232960</commentid>
    <comment_count>5</comment_count>
      <attachid>57278</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-01 14:43:38 -0700</bug_when>
    <thetext>Comment on attachment 57278
patch

WebCore/html/canvas/WebGLRenderingContext.h:356
 +          Vector&lt;TextureUnitState&gt; m_textureUnits;
This is good.

WebCore/html/canvas/WebGLRenderingContext.h:357
 +          unsigned m_maxCombinedTextureImageUnits;
This member should be removed and m_textureUnits.size() be used everywhere it is. Having duplicate copies of this data will lead to errors.


WebCore/html/canvas/WebGLRenderingContext.cpp:1893
 +          switch (format) {
The format and type checking is duplicated between this function and texSubImage2D. Can you refactor it into a helper function returning a boolean? It could take take all of format, internalformat and type, as well as a boolean indicating whether to verify format against internalformat.


WebCore/html/canvas/WebGLRenderingContext.cpp:2065
 +          switch (target) {
This verification code is duplicated between texParameterf and texParameteri. Can you refactor it?


WebCore/html/canvas/WebGLTexture.h:56
 +          unsigned long getInternalformat() const { return m_internalformat; }
While I understand that this capitalization matches that in the OpenGL header, it is jarring to read in the WebKit code base. Would you please rename &quot;internalformat&quot; to &quot;internalFormat&quot; and &quot;Internalformat&quot; to &quot;InternalFormat&quot; everywhere in this patch?


LayoutTests/fast/canvas/webgl/tex-input-validation.html:177
 +  gl.copyTexSubImage2D(target, level, xoffset, yoffset, 0, 0, width, height, border);
In this test case, I understand your desire to use named parameters, but the fact that assignments to variables like &quot;border&quot; much higher up in the test case affect later calls make it difficult to understand the logic. There is also a fair amount of duplicated code in the test. Can you think about ways to improve this? One idea would be to have a helper function for each individual test, though that doesn&apos;t really solve the problem at the call sites. Maybe consider passing objects which contain &quot;format&quot;, &quot;internalformat&quot;, etc. attributes like in array-unit-tests.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233430</commentid>
    <comment_count>6</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-02 13:51:09 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 57278 [details])
&gt; WebCore/html/canvas/WebGLRenderingContext.h:356
&gt;  +          Vector&lt;TextureUnitState&gt; m_textureUnits;
&gt; This is good.
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.h:357
&gt;  +          unsigned m_maxCombinedTextureImageUnits;
&gt; This member should be removed and m_textureUnits.size() be used everywhere it is. Having duplicate copies of this data will lead to errors.

Done.

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:1893
&gt;  +          switch (format) {
&gt; The format and type checking is duplicated between this function and texSubImage2D. Can you refactor it into a helper function returning a boolean? It could take take all of format, internalformat and type, as well as a boolean indicating whether to verify format against internalformat.

Done. See function validateTexFuncParameters().

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2065
&gt;  +          switch (target) {
&gt; This verification code is duplicated between texParameterf and texParameteri. Can you refactor it?

Done.  See function texParameter().

&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLTexture.h:56
&gt;  +          unsigned long getInternalformat() const { return m_internalformat; }
&gt; While I understand that this capitalization matches that in the OpenGL header, it is jarring to read in the WebKit code base. Would you please rename &quot;internalformat&quot; to &quot;internalFormat&quot; and &quot;Internalformat&quot; to &quot;InternalFormat&quot; everywhere in this patch?

There are already many internalformat in WebGL (for example, a member in WebGLRenderbuffer, and many function parameters in WebGLRenderingConrext).  I think we should use internalformat here and later create another bug to change all internalformat to internalFormat.  This way, the naming will always be consistent.

&gt; 
&gt; 
&gt; LayoutTests/fast/canvas/webgl/tex-input-validation.html:177
&gt;  +  gl.copyTexSubImage2D(target, level, xoffset, yoffset, 0, 0, width, height, border);
&gt; In this test case, I understand your desire to use named parameters, but the fact that assignments to variables like &quot;border&quot; much higher up in the test case affect later calls make it difficult to understand the logic. There is also a fair amount of duplicated code in the test. Can you think about ways to improve this? One idea would be to have a helper function for each individual test, though that doesn&apos;t really solve the problem at the call sites. Maybe consider passing objects which contain &quot;format&quot;, &quot;internalformat&quot;, etc. attributes like in array-unit-tests.html.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233432</commentid>
    <comment_count>7</comment_count>
      <attachid>57697</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-02 13:51:53 -0700</bug_when>
    <thetext>Created attachment 57697
revised patch : responding to Ken Russell&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233434</commentid>
    <comment_count>8</comment_count>
      <attachid>57698</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-02 13:54:30 -0700</bug_when>
    <thetext>Created attachment 57698
revised patch: fix the url in changeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233858</commentid>
    <comment_count>9</comment_count>
      <attachid>57698</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-03 11:51:35 -0700</bug_when>
    <thetext>Comment on attachment 57698
revised patch: fix the url in changeLog.

Sorry, I didn&apos;t notice this the last time:

WebCore/html/canvas/WebGLRenderingContext.cpp:455
 +      unsigned long error = m_context-&gt;getError();
This and the other getError checks in texImage2D, etc. aren&apos;t correct. glGetError may return multiple errors in sequential calls. To be correct, getError would need to be called in a loop before the call to copyTexImage2D / texImage2D / etc. and all of the errors detected synthesized again afterward. However I think this is the wrong approach. If you look at the command buffer code in Chrome (GLES2DecoderImpl::DoTexImage2D) it doesn&apos;t call glGetError when deciding when to update its notion of the texture&apos;s size, format, etc. It does all of the required checks up front. I think the !isGLES2Compliant() case in this code should be structured more like that. It will be much more efficient than calling getError() potentially multiple times upon each call to texImage2D, etc.

The refactoring of the test case looks nice.

Renaming the internalformat arguments and functions in a separate bug sounds fine; please file a cleanup bug and CC: me on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233859</commentid>
    <comment_count>10</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-03 11:59:07 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 57698 [details])
&gt; Sorry, I didn&apos;t notice this the last time:
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:455
&gt;  +      unsigned long error = m_context-&gt;getError();
&gt; This and the other getError checks in texImage2D, etc. aren&apos;t correct. glGetError may return multiple errors in sequential calls. To be correct, getError would need to be called in a loop before the call to copyTexImage2D / texImage2D / etc. and all of the errors detected synthesized again afterward. However I think this is the wrong approach. If you look at the command buffer code in Chrome (GLES2DecoderImpl::DoTexImage2D) it doesn&apos;t call glGetError when deciding when to update its notion of the texture&apos;s size, format, etc. It does all of the required checks up front. I think the !isGLES2Compliant() case in this code should be structured more like that. It will be much more efficient than calling getError() potentially multiple times upon each call to texImage2D, etc.

Current !isGLES2Compliant() does not do a full check - it only checks the difference betwwen GLES and GL.  In order to avoid getError like command buffer implementation, we have to do a full check here too.  I&apos;ll revise.

&gt; 
&gt; The refactoring of the test case looks nice.
&gt; 
&gt; Renaming the internalformat arguments and functions in a separate bug sounds fine; please file a cleanup bug and CC: me on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233973</commentid>
    <comment_count>11</comment_count>
      <attachid>57828</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-03 16:13:58 -0700</bug_when>
    <thetext>Created attachment 57828
revised patch: fix the getError() mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234006</commentid>
    <comment_count>12</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-03 17:11:23 -0700</bug_when>
    <thetext>*** Bug 39524 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235498</commentid>
    <comment_count>13</comment_count>
      <attachid>57828</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-08 13:47:28 -0700</bug_when>
    <thetext>Comment on attachment 57828
revised patch: fix the getError() mistake.

Looks good to me. Thanks for your persistence on this fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235519</commentid>
    <comment_count>14</comment_count>
      <attachid>57828</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-08 14:14:37 -0700</bug_when>
    <thetext>Comment on attachment 57828
revised patch: fix the getError() mistake.

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235605</commentid>
    <comment_count>15</comment_count>
      <attachid>57828</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-08 17:45:35 -0700</bug_when>
    <thetext>Comment on attachment 57828
revised patch: fix the getError() mistake.

Clearing flags on attachment: 57828

Committed r60874: &lt;http://trac.webkit.org/changeset/60874&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235606</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-08 17:45:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235608</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-08 17:59:05 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/60874 might have broken Chromium Win Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235636</commentid>
    <comment_count>18</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-06-08 21:08:47 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; http://trac.webkit.org/changeset/60874 might have broken Chromium Win Release

Specifically, the error message is:
4&gt;..\html\canvas\WebGLRenderingContext.cpp(3227) : error C3861: &apos;log2&apos;: identifier not found
4&gt;..\html\canvas\WebGLRenderingContext.cpp(3238) : error C3861: &apos;log2&apos;: identifier not found

Maybe there&apos;s some macro conflict?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235637</commentid>
    <comment_count>19</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-08 21:14:09 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; http://trac.webkit.org/changeset/60874 might have broken Chromium Win Release
&gt; 
&gt; Specifically, the error message is:
&gt; 4&gt;..\html\canvas\WebGLRenderingContext.cpp(3227) : error C3861: &apos;log2&apos;: identifier not found
&gt; 4&gt;..\html\canvas\WebGLRenderingContext.cpp(3238) : error C3861: &apos;log2&apos;: identifier not found
&gt; 
&gt; Maybe there&apos;s some macro conflict?

Ken tried fixing it in http://trac.webkit.org/changeset/60876, but it didn&apos;t take. Let&apos;s just roll it out and fix locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235654</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-08 22:14:33 -0700</bug_when>
    <thetext>This broke Chromium Win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235657</commentid>
    <comment_count>21</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-06-08 22:16:48 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; This broke Chromium Win.

Roland has a fix.  He&apos;s going to try to land it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235661</commentid>
    <comment_count>22</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-06-08 22:37:55 -0700</bug_when>
    <thetext>Added a 2nd quick fix in r60881 - adding explicit casts to double and double constants - which seems to have done the trick, at least as far as compilation goes (see http://trac.webkit.org/changeset/60881)

This still should be reviewed whether it&apos;s a final solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237061</commentid>
    <comment_count>23</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-11 15:12:41 -0700</bug_when>
    <thetext>Re-read the GLES 2.0.24 Spec.  It seemed like there is no hard limit as level &lt; log2(MAX_TEXTURE_SIZE).  It only says the maximum allowable width/height may be zero for image arrays of any level-of-detail greater than log2(MAX_TEXTURE_SIZE).

In this case, we should remove the code that checks the level upper limit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>237065</commentid>
    <comment_count>24</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-11 15:18:22 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Re-read the GLES 2.0.24 Spec.  It seemed like there is no hard limit as level &lt; log2(MAX_TEXTURE_SIZE).  It only says the maximum allowable width/height may be zero for image arrays of any level-of-detail greater than log2(MAX_TEXTURE_SIZE).
&gt; 
&gt; In this case, we should remove the code that checks the level upper limit.

OK, but please file a new bug and make it depend on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238178</commentid>
    <comment_count>25</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-14 18:16:18 -0700</bug_when>
    <thetext>Will resolve the &quot;level&quot; upper limit issue in a new bug: https://bugs.webkit.org/show_bug.cgi?id=38145.  Close this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>238182</commentid>
    <comment_count>26</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-14 18:17:16 -0700</bug_when>
    <thetext>Woops, wrong new bug URL.  Here is the correct one: https://bugs.webkit.org/show_bug.cgi?id=40603</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57278</attachid>
            <date>2010-05-27 15:30:50 -0700</date>
            <delta_ts>2010-06-02 13:51:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>tex.patch</filename>
            <type>text/plain</type>
            <size>31691</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDMyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDUtMjcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWYWxpZGF0
ZSAqdGV4KiBmdW5jdGlvbnMgaW5wdXQgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gRVMyIGNvbmZv
cm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Byb2Nlc3NfYnVnLmNnaQor
CisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbnB1dC12YWxpZGF0aW9uLmh0
bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJGb3JtYXQpOiBHZXQg
Y29sb3IgYnVmZmVyIGludGVybmFsZm9ybWF0LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0KTogRGVhbCB3aXRoIG1heCB0ZXggdW5pdHMuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogVmFsaWRh
dGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleFN1YkltYWdlMkQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRC
YXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhh
bmRsZU5QT1RUZXh0dXJlcyk6IERlYWwgd2l0aCBtYXggdGV4IHVuaXRzLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsZm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKTogQ2hlY2sgd2hldGhlciB0aGUgdGV4dHVyZSBmb3JtYXQgYW5k
IGZyYW1lYnVmZmVyIGNvbG9yIGJ1ZmZlciBpbnRlcm5hbGZvcm1hdCBjb21iaW5hdGlvbiBpcyB2
YWxpZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDogRGVh
bCB3aXRoIG1heCB0ZXggdW5pdHMuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKTogQ2Fj
aGUgaW50ZXJuYWxmb3JtYXQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpzZXRJbnRlcm5hbGZvcm1h
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldEludGVybmFsZm9ybWF0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6IGludGVy
bmFsZm9ybWF0IGFuZCBmb3JtYXQgbmVlZCB0byBiZSB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhKToKKwogMjAxMC0wNS0yNyAg
SGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEplcmVteSBPcmxvdy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmNwcAkocmV2aXNpb24gNjAzMTEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywyNCBAQCB2b2lkIFdlYkdMRnJh
bWVidWZmZXI6Om9uQXR0YWNoZWRPYmplY3RDCiAgICAgICAgIGluaXRpYWxpemVSZW5kZXJidWZm
ZXJzKCk7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgV2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZm
ZXJGb3JtYXQoKQoreworICAgIGlmIChvYmplY3QoKSAmJiBtX2NvbG9yQXR0YWNobWVudCAmJiBt
X2NvbG9yQXR0YWNobWVudC0+b2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1fY29sb3JBdHRhY2ht
ZW50LT5pc1JlbmRlcmJ1ZmZlcigpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZvcm1h
dCA9IChyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4obV9jb2xvckF0dGFjaG1l
bnQpKS0+Z2V0SW50ZXJuYWxmb3JtYXQoKTsKKyAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7
CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKKyAgICAgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgICAgICAgICAgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCNTY1OgorICAgICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
UkdCOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fY29sb3JBdHRhY2htZW50
LT5pc1RleHR1cmUoKSkKKyAgICAgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJH
TFRleHR1cmUqPihtX2NvbG9yQXR0YWNobWVudCkpLT5nZXRJbnRlcm5hbGZvcm1hdCgpOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpfZGVsZXRlT2Jq
ZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiA2MDMxMSkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gY2xlYXIgdW4taW5pdGlhbGl6ZWQg
cmVuZGVyYnVmZmVycy4KICAgICAgICAgdm9pZCBvbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKENhbnZh
c09iamVjdCopOwogCisgICAgICAgIHVuc2lnbmVkIGxvbmcgZ2V0Q29sb3JCdWZmZXJGb3JtYXQo
KTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKTsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA2MDMxMSkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMs
NiArOTMsMTAgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAg
ICwgbV91bnBhY2tBbGlnbm1lbnQoNCkKIHsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBp
bnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX21heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzOworICAgIG1fdGV4
dHVyZVVuaXRzLnJlc2l6ZShtX21heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogICAgIGlu
dCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKICAg
ICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJzOwpAQCAtNDQ2LDIzICs0NTAs
ODAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZQogICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAg
dGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1h
cEJpbmRpbmc7CiAgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4
dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAg
ICAgICAgaWYgKGJvcmRlcikgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1J
TkFOQ0VfQUxQSEE6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9iamVjdCgpCisgICAgICAgICAgICAmJiAhaXNUZXhJbnRlcm5hbGZvcm1hdENv
bG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpKSkgeworICAgICAgICAgICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmIChsZXZl
bCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewogICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRleCAm
JiAhbGV2ZWwpIC8vIG9ubHkgZm9yIGxldmVsIDAKLSAgICAgICAgICAgIHRleC0+c2V0U2l6ZSh0
YXJnZXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiB0ZXgpCi0gICAgICAgIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKHRleC5nZXQoKSk7Cisg
ICAgdW5zaWduZWQgbG9uZyBlcnJvciA9IG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKKyAgICBpZiAo
ZXJyb3IgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgIGlmICghaXNH
TEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgICAgICBpZiAodGV4ICYmICFsZXZlbCkgLy8gb25s
eSBmb3IgbGV2ZWwgMAorICAgICAgICAgICAgICAgIHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKHRleCkKKyAgICAgICAgICAgICAgICB0ZXgtPnNl
dEludGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgdGV4KQorICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4LmdldCgpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25n
IHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IDA7CisgICAgICAgIHN3aXRj
aCAodGFyZ2V0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6
CisgICAgICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5t
X3RleHR1cmUyREJpbmRpbmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1o6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWjoKKyAgICAgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4
dHVyZVVuaXRdLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b2JqZWN0KCkgJiYgdGV4ICYmIHRleC0+b2JqZWN0KCkKKyAgICAgICAgICAg
ICYmICFpc1RleEludGVybmFsZm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHRleC0+
Z2V0SW50ZXJuYWxmb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xv
ckJ1ZmZlckZvcm1hdCgpKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQogICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE4MDUsNiArMTg2
Niw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhl
bHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9y
ZSBhbnkgZXJyb3JzIHJldHVybmVkCisgICAgZWMgPSAwOwogICAgIFJlZlB0cjxXZWJHTFRleHR1
cmU+IHRleCA9IDA7CiAgICAgc3dpdGNoICh0YXJnZXQpIHsKICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJEOgpAQCAtMTgxOCwyMSArMTg4MSw1OSBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0
c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmluZGluZzsKICAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAot
ICAgIGVjID0gMDsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBpZiAo
Ym9yZGVyKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTFBIQToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNF
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6Omlz
TlBPVCh3aWR0aCwgaGVpZ2h0KSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRleCAmJiAhbGV2ZWwpIC8vIG9ubHkgZm9y
IGxldmVsIDAKLSAgICAgICAgICAgIHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQp
OwogICAgIH0KICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiB0ZXgpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hh
bmdlKHRleC5nZXQoKSk7CisgICAgdW5zaWduZWQgbG9uZyBlcnJvciA9IG1fY29udGV4dC0+Z2V0
RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7
CisgICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgICAgICBpZiAodGV4
ICYmICFsZXZlbCkgLy8gb25seSBmb3IgbGV2ZWwgMAorICAgICAgICAgICAgICAgIHRleC0+c2V0
U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKHRleCkKKyAgICAg
ICAgICAgICAgICB0ZXgtPnNldEludGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgdGV4KQorICAgICAgICAg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4LmdldCgp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJv
cik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTk1OSwz
MSArMjA2MCw3OSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1CiAK
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdl
dCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKQogewotICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpIHsKICAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4ID0gMDsKLSAgICAgICAgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkKKyAgICAgICAgc3dpdGNo
ICh0YXJnZXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoK
ICAgICAgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1f
dGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAgICAgICB0ZXgg
PSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmlu
ZGluZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9TOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
VDoKKyAgICAgICAgICAgIGlmIChwYXJhbSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9f
RURHRQorICAgICAgICAgICAgICAgICYmIHBhcmFtICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJS
T1JFRF9SRVBFQVQKKyAgICAgICAgICAgICAgICAmJiBwYXJhbSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVQRUFUKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAg
ICAgaWYgKHRleCkKICAgICAgICAgICAgIHRleC0+c2V0UGFyYW1ldGVyZihwbmFtZSwgcGFyYW0p
OwogICAgIH0KKyAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFy
YW0pOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgcG5hbWUsIGludCBwYXJhbSkKIHsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFy
Z2V0LCBwbmFtZSwgcGFyYW0pOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAg
ICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IDA7Ci0gICAgICAgIGlmICh0YXJnZXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpCisgICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CiAgICAgICAgICAg
ICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmUyREJp
bmRpbmc7Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgogICAgICAgICAgICAgdGV4ID0gbV90ZXh0dXJl
VW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChwbmFtZSkgeworICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgICAg
ICAgICBpZiAocGFyYW0gIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UKKyAgICAg
ICAgICAgICAgICAmJiBwYXJhbSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFU
CisgICAgICAgICAgICAgICAgJiYgcGFyYW0gIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkg
eworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmICh0ZXgp
CiAgICAgICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtKTsKICAgICB9Cisg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xOTkzLDYgKzIxNDIsMjkg
QEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMgogewogICAgIC8vIEZJ
WE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwor
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
OgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0zMDQyLDggKzMyMTQs
NyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRlCiAgICAgaWYgKGlz
R0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgcmVzZXRBY3RpdmVV
bml0ID0gZmFsc2U7Ci0gICAgLy8gRklYTUU6IGFjdGl2ZSB0ZXh0dXJlIHVuaXQgbGltaXRzIHNo
b3VsZCBiZSBxdWVyaWVzIGluc3RlYWQgb2YgMzIuCi0gICAgZm9yICh1bnNpZ25lZCBsb25nIGlp
ID0gMDsgaWkgPCAzMjsgKytpaSkgeworICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1f
bWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0czsgKytpaSkgewogICAgICAgICBpZiAobV90ZXh0
dXJlVW5pdHNbaWldLm1fdGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0ubV90
ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoKQogICAgICAgICAgICAgfHwg
bV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVu
aXRzW2lpXS5tX3RleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKCkp
IHsKICAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7CkBAIC0zMDk3
LDYgKzMyNjgsMjUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZhbGxiYQog
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVAsIDApOwogfQogCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXhJbnRlcm5h
bGZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZCh1bnNpZ25lZCBsb25nIHRleEludGVy
bmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xvckJ1ZmZlckZv
cm1hdCkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yQnVmZmVyRm9ybWF0KSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgICAgIGlmICh0ZXhJbnRlcm5hbGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6QUxQSEEpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgICAgICBpZiAo
dGV4SW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRQorICAgICAg
ICAgICAgfHwgdGV4SW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQikKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
M0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oCShyZXZpc2lvbiA2MDMxMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw3ICszNTMsOCBAQCBjbGFzcyBX
ZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX3RleHR1
cmUyREJpbmRpbmc7CiAgICAgICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX3RleHR1cmVD
dWJlTWFwQmluZGluZzsKICAgICAgICAgfTsKLSAgICAgICAgVGV4dHVyZVVuaXRTdGF0ZSBtX3Rl
eHR1cmVVbml0c1szMl07CisgICAgICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1
cmVVbml0czsKKyAgICAgICAgdW5zaWduZWQgbV9tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
OwogICAgICAgICB1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CiAKICAgICAgICAg
UmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmUyRDsKQEAgLTM4OSw2ICszOTAsMTIg
QEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIHZvaWQgY3JlYXRlRmFsbGJhY2tC
bGFja1RleHR1cmVzMXgxKCk7CiAKKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBjb3B5
VGV4e1N1Yn1JbWFnZSwgY2hlY2sgd2hldGhlciB0aGUgaW50ZXJuYWxmb3JtYXQKKyAgICAgICAg
Ly8gYW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1l
YnVmZmVyIGNvbWJpbmF0aW9uCisgICAgICAgIC8vIGlzIHZhbGlkLgorICAgICAgICBib29sIGlz
VGV4SW50ZXJuYWxmb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQodW5zaWduZWQgbG9u
ZyB0ZXhJbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sb3JCdWZmZXJGb3JtYXQp
OworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBXZWJHTFN0YXRlUmVzdG9yZXI7CiAgICAgfTsKIApJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkocmV2aXNpb24gNjAzMTEpCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDYgKzQ1LDcgQEAgV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbgog
ICAgICwgbV9tYWdGaWx0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikKICAgICAsIG1fd3Jh
cFMoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKICAgICAsIG1fd3JhcFQoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFUEVBVCkKKyAgICAsIG1faW50ZXJuYWxmb3JtYXQoMCkKICAgICAsIG1faXNOUE9U
KGZhbHNlKQogICAgICwgbV9uZWVkVG9Vc2VCbGFja1RleHR1cmUoZmFsc2UpCiB7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlzaW9uIDYwMzExKQorKysgV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0UGFyYW1ldGVyZih1bnNpZ25l
ZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJhbSk7CiAgICAgICAgIHZvaWQgc2V0U2l6ZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAKKyAgICAg
ICAgdm9pZCBzZXRJbnRlcm5hbGZvcm1hdCh1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0KSB7
IG1faW50ZXJuYWxmb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsgfQorICAgICAgICB1bnNpZ25lZCBs
b25nIGdldEludGVybmFsZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbGZvcm1hdDsg
fQorCiAgICAgICAgIHN0YXRpYyBib29sIGlzTlBPVCh1bnNpZ25lZCwgdW5zaWduZWQpOwogCiAg
ICAgICAgIGJvb2wgaXNOUE9UKCkgY29uc3QgeyByZXR1cm4gbV9pc05QT1Q7IH0KQEAgLTc3LDYg
KzgwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbV93cmFwUzsKICAgICAg
ICAgaW50IG1fd3JhcFQ7CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtX2ludGVybmFsZm9ybWF0
OworCiAgICAgICAgIHVuc2lnbmVkIG1fd2lkdGhbNl07CiAgICAgICAgIHVuc2lnbmVkIG1faGVp
Z2h0WzZdOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmNwcAkocmV2aXNpb24gNjAzMTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsOCBA
QCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1hZ2VEYXRhCiAgICAgICAgICAgICAg
ICAgICAgICBpbWFnZS0+aGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICBmbGlwWSwKICAg
ICAgICAgICAgICAgICAgICAgIGFscGhhT3ApOwotICAgICppbnRlcm5hbEZvcm1hdCA9IChoYXNB
bHBoYUNoYW5uZWwgPyBSR0JBIDogUkdCKTsKKyAgICAvLyBGb3IgR0xFUzIgdGV4IGZ1bmN0aW9u
cywgaW50ZXJuYWxmb3JtYXQgaGFzIHRvIG1hdGNoIGZvcm1hdC4KKyAgICAqaW50ZXJuYWxGb3Jt
YXQgPSAqZm9ybWF0OwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
MDMyNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTA1LTI3ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVmFsaWRhdGUgKnRleCog
ZnVuY3Rpb25zIGlucHV0IHBhcmFtZXRlcnMgYWNjb3JkaW5nIHRvIEVTMiBjb25mb3JtYW5jZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9wcm9jZXNzX2J1Zy5jZ2kKKworICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1h
Z2UuaHRtbDogSW50ZXJuYWxmb3JtYXQgYW5kIGZvcm1hdCBuZWVkIHRvIGJlIHRoZSBzYW1lLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbnB1dC12YWxpZGF0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlk
YXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTAtMDUtMjcgIEp1bGllIFBhcmVudCAgPGpwYXJlbnRA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLWltYWdlLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdl
LWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCShyZXZpc2lvbiA2MDMxMSkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdp
dGgtaW1hZ2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIGZ1bmN0aW9u
IHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwgdXNlVGV4U3UKICAgICAvLyBVcGxvYWQgdGhlIGltYWdl
IGludG8gdGhlIHRleHR1cmUKICAgICBpZiAodXNlVGV4U3ViSW1hZ2UyRCkgewogICAgICAgICAv
LyBJbml0aWFsaXplIHRoZSB0ZXh0dXJlIHRvIGJsYWNrIGZpcnN0Ci0gICAgICAgIGdsLnRleElt
YWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0
LCAwLAorICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGlt
YWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgZ2wuUkdC
QSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CiAgICAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wu
VEVYVFVSRV8yRCwgMCwgMCwgMCwgaW1hZ2UsIGZsaXBZLCBmYWxzZSk7CiAgICAgfSBlbHNlIHsK
QEAgLTEyOCw3ICsxMjgsNiBAQCBmdW5jdGlvbiBydW5PbmVJdGVyYXRpb24oaW1hZ2UsIHVzZVRl
eFN1CiAgICAgZ2wudW5pZm9ybTFpKHRleHR1cmVMb2MsIDApOwogICAgIC8vIERyYXcgdGhlIHRy
aWFuZ2xlcwogICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKLQogICAgIC8v
IFJlYWQgYmFjayB0aGUgcmVuZGVyaW5nIHJlc3VsdHMKICAgICB2YXIgd2lkdGggPSAzMjsKICAg
ICB2YXIgaGVpZ2h0ID0gMzI7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90
ZXgtaW5wdXQtdmFsaWRhdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZh
bGlkYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzIEBACitWYWxp
ZGF0ZSB0ZXggZnVuY3Rpb25zIGlucHV0IHBhcmFtZXRlcnMKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCitQQVNTIGdsID0gY3JlYXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCitQQVNT
IHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKSBpcyBub24tbnVsbC4KK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgorQ2hlY2tpbmcgVGV4SW1hZ2UyRDogYSBzZXQgb2YgaW5wdXRzIHRo
YXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyCitQQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuSU5WQUxJRF9FTlVNCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9F
TlVNCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9WQUxVRQorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
SU5WQUxJRF9FTlVNCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK0NoZWNraW5n
IFRleFN1YkltYWdlMkQ6IGEgc2V0IG9mIGlucHV0cyB0aGF0IGFyZSB2YWxpZCBpbiBHTCBidXQg
aW52YWxpZCBpbiBHTEVTMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfRU5VTQor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfRU5VTQorUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLk5PX0VSUk9SCitDaGVja2luZyBUZXhQYXJhbWV0ZXI6IGEgc2V0IG9mIGlucHV0cyB0
aGF0IGFyZSB2YWxpZCBpbiBHTCBidXQgaW52YWxpZCBpbiBHTEVTMgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLklOVkFMSURfRU5VTQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURf
RU5VTQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfRU5VTQorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLklOVkFMSURfRU5VTQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFM
SURfRU5VTQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLklOVkFMSURfRU5VTQorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK0NoZWNraW5nIEdldFRleFBhcmFtZXRlcjogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZh
bGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
SU5WQUxJRF9FTlVNCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9FTlVNCitQQVNT
IGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK0NoZWNraW5nIENvcHlUZXhJbWFnZTJEOiBh
IHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIK
K1BBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4K
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBmYm8gPSBnbC5jcmVhdGVG
cmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VS
Uk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGds
LkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9F
TlVNCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuSU5WQUxJRF9WQUxVRQorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKK0NoZWNraW5nIENvcHlUZXhTdWJJbWFnZTJEOiBhIHNldCBvZiBpbnB1dHMgdGhh
dCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLklOVkFMSURfT1BFUkFUSU9OCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW5wdXQtdmFsaWRhdGlvbi5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24u
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODUgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKwordmFyIGdsID0gbnVsbDsKK3ZhciB0ZXgg
PSBudWxsOworCitkZXNjcmlwdGlvbigiVmFsaWRhdGUgdGV4IGZ1bmN0aW9ucyBpbnB1dCBwYXJh
bWV0ZXJzIik7CisKK3Nob3VsZEJlTm9uTnVsbCgiZ2wgPSBjcmVhdGUzRENvbnRleHQoKSIpOwor
c2hvdWxkQmVOb25OdWxsKCJ0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCkiKTsKK2dsLmJpbmRUZXh0
dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5O
T19FUlJPUiIpOworCit2YXIgdGFyZ2V0ID0gZ2wuVEVYVFVSRV8yRDsKK3ZhciBsZXZlbCA9IDA7
Cit2YXIgaW50ZXJuYWxmb3JtYXQgPSBnbC5SR0JBOwordmFyIHdpZHRoID0gMTY7Cit2YXIgaGVp
Z2h0ID0gMTY7Cit2YXIgYm9yZGVyID0gMDsKK3ZhciBmb3JtYXQgPSBnbC5SR0JBOwordmFyIHR5
cGUgPSBnbC5VTlNJR05FRF9CWVRFOworCitkZWJ1ZygiQ2hlY2tpbmcgVGV4SW1hZ2UyRDogYSBz
ZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyIik7
CisKK3RhcmdldCA9IDB4ODA2NDsgLy8gR0xfUFJPWFlfVEVYVFVSRV8yRAorZ2wudGV4SW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUsIG51bGwpOworc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuSU5WQUxJ
RF9FTlVNIik7Cit0YXJnZXQgPSBnbC5URVhUVVJFXzJEOworCitpbnRlcm5hbGZvcm1hdCA9IGZv
cm1hdCA9IDB4MTkwMzsgLy8gR0xfUkVECitnbC50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbnVsbCk7
CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5JTlZBTElEX0VOVU0iKTsKK2ludGVybmFs
Zm9ybWF0ID0gZm9ybWF0ID0gZ2wuUkdCQTsKKworYm9yZGVyID0gMTsKK2dsLnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBudWxsKTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLklOVkFMSURf
VkFMVUUiKTsKK2JvcmRlciA9IDA7CisKK2Zvcm1hdCA9IGdsLlJHQjsKK2dsLnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBudWxsKTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLklOVkFMSURf
T1BFUkFUSU9OIik7Citmb3JtYXQgPSBnbC5SR0JBOworCit0eXBlID0gZ2wuQllURTsKK2dsLnRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJv
cmRlciwgZm9ybWF0LCB0eXBlLCBudWxsKTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImds
LklOVkFMSURfRU5VTSIpOwordHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7CisKK2dsLnRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBudWxsKTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VS
Uk9SIik7CisKK2RlYnVnKCJDaGVja2luZyBUZXhTdWJJbWFnZTJEOiBhIHNldCBvZiBpbnB1dHMg
dGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIiKTsKKwordmFyIHhvZmZz
ZXQgPSAwOwordmFyIHlvZmZzZXQgPSAwOwordmFyIGFycmF5ID0gbmV3IFdlYkdMVW5zaWduZWRC
eXRlQXJyYXkoMTYgKiAxNiAqIDQpOworCitmb3JtYXQgPSAweDE5MDM7IC8vIEdMX1JFRDsKK2ds
LnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBhcnJheSk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJn
bC5JTlZBTElEX0VOVU0iKTsKK2Zvcm1hdCA9IGdsLlJHQkE7CisKK3R5cGUgPSBnbC5CWVRFOwor
Z2wudGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGFycmF5KTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwg
ImdsLklOVkFMSURfRU5VTSIpOwordHlwZSA9IGdsLlVOU0lHTkVEX0JZVEU7CisKK2dsLnRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBhcnJheSk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19F
UlJPUiIpOworCitkZWJ1ZygiQ2hlY2tpbmcgVGV4UGFyYW1ldGVyOiBhIHNldCBvZiBpbnB1dHMg
dGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIiKTsKKwordmFyIHBuYW1l
ID0gZ2wuVEVYVFVSRV9XUkFQX1Q7Cit2YXIgcGFyYW0gPSBnbC5SRVBFQVQ7CisKK3RhcmdldCA9
IDB4MERFMDsgLy8gR0xfVEVYVFVSRV8xRAorZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1l
LCBwYXJhbSk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5JTlZBTElEX0VOVU0iKTsK
K2dsLnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOworc2hvdWxkQmUoImdsLmdl
dEVycm9yKCkiLCAiZ2wuSU5WQUxJRF9FTlVNIik7Cit0YXJnZXQgPSBnbC5URVhUVVJFXzJEOwor
CitwbmFtZSA9IDB4ODEzQTsgLy8gR0xfVEVYVFVSRV9NSU5fTE9ECitwYXJhbSA9IDA7CitnbC50
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJv
cigpIiwgImdsLklOVkFMSURfRU5VTSIpOworZ2wudGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCBwYXJhbSk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5JTlZBTElEX0VOVU0iKTsK
KworcG5hbWUgPSBnbC5URVhUVVJFX1dSQVBfVDsKK3BhcmFtID0gMHgyOTAwOyAvLyBHTF9DTEFN
UAorZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CitzaG91bGRCZSgiZ2wu
Z2V0RXJyb3IoKSIsICJnbC5JTlZBTElEX0VOVU0iKTsKK2dsLnRleFBhcmFtZXRlcmYodGFyZ2V0
LCBwbmFtZSwgcGFyYW0pOworc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuSU5WQUxJRF9F
TlVNIik7CitwYXJhbSA9IGdsLlJFUEVBVDsKKworZ2wudGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBu
YW1lLCBwYXJhbSk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOwor
Z2wudGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbSk7CitzaG91bGRCZSgiZ2wuZ2V0
RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworCitkZWJ1ZygiQ2hlY2tpbmcgR2V0VGV4UGFyYW1l
dGVyOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4g
R0xFUzIiKTsKKwordGFyZ2V0ID0gMHgwREUwOyAvLyBHTF9URVhUVVJFXzFECitnbC5nZXRUZXhQ
YXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5J
TlZBTElEX0VOVU0iKTsKK3RhcmdldCA9IGdsLlRFWFRVUkVfMkQ7CisKK3BuYW1lID0gMHg4MTNB
OyAvLyBHTF9URVhUVVJFX01JTl9MT0QKK2dsLmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1l
KTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLklOVkFMSURfRU5VTSIpOworcG5hbWUg
PSBnbC5URVhUVVJFX1dSQVBfVDsKKworZ2wuZ2V0VGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUp
Oworc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKworZGVidWcoIkNo
ZWNraW5nIENvcHlUZXhJbWFnZTJEOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4g
R0wgYnV0IGludmFsaWQgaW4gR0xFUzIiKTsKKwordmFyIGNvbG9yQnVmZmVyID0gbnVsbDsKK3Zh
ciBmYm8gPSBudWxsOworCitzaG91bGRCZU5vbk51bGwoImNvbG9yQnVmZmVyID0gZ2wuY3JlYXRl
UmVuZGVyYnVmZmVyKCkiKTsKK2dsLmJpbmRSZW5kZXJidWZmZXIoZ2wuUkVOREVSQlVGRkVSLCBj
b2xvckJ1ZmZlcik7CitnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wu
UkdCNTY1LCB3aWR0aCwgaGVpZ2h0KTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5P
X0VSUk9SIik7CitzaG91bGRCZU5vbk51bGwoImZibyA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCki
KTsKK2dsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmJvKTsKK2dsLmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wu
UkVOREVSQlVGRkVSLCBjb2xvckJ1ZmZlcik7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJn
bC5OT19FUlJPUiIpOworc2hvdWxkQmUoImdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpIiwgImdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFIik7CisKK2ludGVybmFsZm9ybWF0
ID0gMHg4MDU0OyAvLyBHTF9SR0IxNgorZ2wuY29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CitzaG91bGRCZSgi
Z2wuZ2V0RXJyb3IoKSIsICJnbC5JTlZBTElEX0VOVU0iKTsKK2ludGVybmFsZm9ybWF0ID0gZ2wu
UkdCQTsKKworYm9yZGVyID0gMTsKK2dsLmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworc2hvdWxkQmUoImds
LmdldEVycm9yKCkiLCAiZ2wuSU5WQUxJRF9WQUxVRSIpOworYm9yZGVyID0gMDsKKworZ2wuY29w
eVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlcik7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5JTlZBTElEX09Q
RVJBVElPTiIpOworCitpbnRlcm5hbGZvcm1hdCA9IGdsLlJHQjsKK2dsLmNvcHlUZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBib3Jk
ZXIpOworc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKK2ludGVybmFs
Zm9ybWF0ID0gZ2wuUkdCQTsKKworZGVidWcoIkNoZWNraW5nIENvcHlUZXhTdWJJbWFnZTJEOiBh
IHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIi
KTsKKworZ2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIGdsLlJHQjVfQTEs
IHdpZHRoLCBoZWlnaHQpOworc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1Ii
KTsKK3Nob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSIs
ICJnbC5GUkFNRUJVRkZFUl9DT01QTEVURSIpOworCitnbC5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKK3No
b3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CisKK2dsLmNvcHlUZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIDAsIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOwor
CitnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkdCNTY1LCB3aWR0
aCwgaGVpZ2h0KTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7Citz
aG91bGRCZSgiZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikiLCAiZ2wu
RlJBTUVCVUZGRVJfQ09NUExFVEUiKTsKKworZ2wuY29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKK3No
b3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLklOVkFMSURfT1BFUkFUSU9OIik7CisKK3N1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57697</attachid>
            <date>2010-06-02 13:51:53 -0700</date>
            <delta_ts>2010-06-02 13:54:30 -0700</delta_ts>
            <desc>revised patch : responding to Ken Russell&apos;s review</desc>
            <filename>tex.patch</filename>
            <type>text/plain</type>
            <size>34563</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDMyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMjcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWYWxpZGF0
ZSAqdGV4KiBmdW5jdGlvbnMgaW5wdXQgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gRVMyIGNvbmZv
cm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Byb2Nlc3NfYnVnLmNnaQor
CisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbnB1dC12YWxpZGF0aW9uLmh0
bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJGb3JtYXQpOiBHZXQg
Y29sb3IgYnVmZmVyIGludGVybmFsZm9ybWF0LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0KTogRGVhbCB3aXRoIG1heCB0ZXggdW5pdHMuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTogVmFsaWRh
dGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleFN1YkltYWdlMkQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRC
YXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhh
bmRsZU5QT1RUZXh0dXJlcyk6IERlYWwgd2l0aCBtYXggdGV4IHVuaXRzLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsZm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKTogQ2hlY2sgd2hldGhlciB0aGUgdGV4dHVyZSBmb3JtYXQgYW5k
IGZyYW1lYnVmZmVyIGNvbG9yIGJ1ZmZlciBpbnRlcm5hbGZvcm1hdCBjb21iaW5hdGlvbiBpcyB2
YWxpZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4dHVy
ZUJpbmRpbmcpOiBnZXQgdGhlIGN1cnJlbnQgYm91bmQgdGV4dHVyZSBmb3IgZ2l2ZW4gdGFyZ2V0
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1
bmNQYXJhbWV0ZXJzKTogVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgKnRleCogZnVuY3Rp
b25zLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0
ZXIpOiBCYXNlIGZ1bmN0aW9uIGZvciB0ZXhQYXJhbWV0ZXJpIGFuZCB0ZXhQYXJhbWV0ZXJmLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWFsIHdpdGgg
bWF4IHRleCB1bml0cy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUpOiBDYWNoZSBpbnRl
cm5hbGZvcm1hdC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OnNldEludGVybmFsZm9ybWF0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6Z2V0SW50ZXJuYWxmb3JtYXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDogaW50ZXJuYWxmb3Jt
YXQgYW5kIGZvcm1hdCBuZWVkIHRvIGJlIHRoZSBzYW1lLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorCiAyMDEwLTA1LTI3ICBIYW5zIFdl
bm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15
IE9ybG93LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShy
ZXZpc2lvbiA2MDMxMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDI0IEBAIHZvaWQgV2ViR0xGcmFtZWJ1ZmZl
cjo6b25BdHRhY2hlZE9iamVjdEMKICAgICAgICAgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMoKTsK
IH0KIAordW5zaWduZWQgbG9uZyBXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZlckZvcm1h
dCgpCit7CisgICAgaWYgKG9iamVjdCgpICYmIG1fY29sb3JBdHRhY2htZW50ICYmIG1fY29sb3JB
dHRhY2htZW50LT5vYmplY3QoKSkgeworICAgICAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQtPmlz
UmVuZGVyYnVmZmVyKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZm9ybWF0ID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihtX2NvbG9yQXR0YWNobWVudCkpLT5n
ZXRJbnRlcm5hbGZvcm1hdCgpOworICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgICAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKKyAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I1NjU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzVGV4
dHVyZSgpKQorICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVy
ZSo+KG1fY29sb3JBdHRhY2htZW50KSktPmdldEludGVybmFsZm9ybWF0KCk7CisgICAgfQorICAg
IHJldHVybiAwOworfQorCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6Ol9kZWxldGVPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQz
RCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3QpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDYwMzExKQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBjbGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJi
dWZmZXJzLgogICAgICAgICB2b2lkIG9uQXR0YWNoZWRPYmplY3RDaGFuZ2UoQ2FudmFzT2JqZWN0
Kik7CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRDb2xvckJ1ZmZlckZvcm1hdCgpOworCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDYwMzExKQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw5
IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAsIG1fdW5w
YWNrQWxpZ25tZW50KDQpCiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgaW50IG51bUNv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmbnVt
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51
bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogICAgIGludCBudW1WZXJ0ZXhBdHRyaWJzID0g
MDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVS
VEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKICAgICBtX21heFZlcnRleEF0dHJpYnMg
PSBudW1WZXJ0ZXhBdHRyaWJzOwpAQCAtNDMzLDM2ICs0MzYsNDggQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVk
IGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCiB7Ci0gICAgUmVmUHRyPFdlYkdM
VGV4dHVyZT4gdGV4ID0gMDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21f
YWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1f
dGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgaWYgKCF2
YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIGJvcmRlciwg
aW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gZ2V0VGV4dHVyZUJpbmRpbmcodGFy
Z2V0KTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpCisgICAgICAg
ICAgICAmJiAhaXNUZXhJbnRlcm5hbGZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChp
bnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZl
ckZvcm1hdCgpKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3
aWR0aCwgaGVpZ2h0KSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRleCAmJiAhbGV2ZWwpIC8vIG9ubHkgZm9yIGxldmVs
IDAKLSAgICAgICAgICAgIHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQpOwogICAg
IH0KICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiB0ZXgpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFj
aGVkT2JqZWN0Q2hhbmdlKHRleC5nZXQoKSk7CisgICAgdW5zaWduZWQgbG9uZyBlcnJvciA9IG1f
Y29udGV4dC0+Z2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PX0VSUk9SKSB7CisgICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAg
ICAgICBpZiAodGV4ICYmICFsZXZlbCkgLy8gb25seSBmb3IgbGV2ZWwgMAorICAgICAgICAgICAg
ICAgIHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYg
KHRleCkKKyAgICAgICAgICAgICAgICB0ZXgtPnNldEludGVybmFsZm9ybWF0KGludGVybmFsZm9y
bWF0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgdGV4
KQorICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFu
Z2UodGV4KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihlcnJvcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBs
b25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogeworICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4ID0g
Z2V0VGV4dHVyZUJpbmRpbmcodGFyZ2V0KTsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSAmJiB0ZXgKKyAgICAgICAgICAg
ICYmICFpc1RleEludGVybmFsZm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHRleC0+
Z2V0SW50ZXJuYWxmb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xv
ckJ1ZmZlckZvcm1hdCgpKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQogICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE4MDUsMzQgKzE4
MjAsMzEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZvaWQqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4
ID0gMDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQ6Ci0gICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVy
ZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAg
IHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZUN1YmVN
YXBCaW5kaW5nOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgLy8gRklYTUU6IEZvciBub3cg
d2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7CisgICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gZ2V0
VGV4dHVyZUJpbmRpbmcodGFyZ2V0KTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewog
ICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkp
IHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGlmICh0ZXggJiYgIWxldmVsKSAvLyBvbmx5IGZvciBsZXZlbCAwCi0gICAgICAgICAg
ICB0ZXgtPnNldFNpemUodGFyZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgbV9jb250
ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgdGV4KQotICAgICAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZE9iamVjdENoYW5nZSh0ZXguZ2V0KCkpOworICAg
IHVuc2lnbmVkIGxvbmcgZXJyb3IgPSBtX2NvbnRleHQtPmdldEVycm9yKCk7CisgICAgaWYgKGVy
cm9yID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkgeworICAgICAgICAgICAgaWYgKHRleCAmJiAhbGV2ZWwpIC8vIG9ubHkg
Zm9yIGxldmVsIDAKKyAgICAgICAgICAgICAgICB0ZXgtPnNldFNpemUodGFyZ2V0LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgICAgIGlmICh0ZXgpCisgICAgICAgICAgICAgICAgdGV4LT5zZXRJ
bnRlcm5hbGZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmIHRleCkKKyAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKHRleCk7CisgICAgfSBlbHNlCisgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTE5NTcsMzQgKzE5NjksNTkgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJm
KHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IHBuYW1lLCBmbG9hdCBwYXJhbWYsIGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKIHsKLSAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwogICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9
IDA7Ci0gICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQp
CisgICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQ6CiAgICAgICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS5tX3RleHR1cmUyREJpbmRpbmc7Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgog
ICAgICAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90
ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgICAgIGlmICh0ZXgpCi0gICAgICAgICAgICB0ZXgt
PnNldFBhcmFtZXRlcmYocG5hbWUsIHBhcmFtKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgICAgIGlmIChpc0Zsb2F0ICYmIHBh
cmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJFUEVBVAorICAgICAgICAgICAgICAgIHx8ICFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJF
UEVBVCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlm
ICh0ZXgpIHsKKyAgICAgICAgICAgIGlmIChpc0Zsb2F0KQorICAgICAgICAgICAgICAgIHRleC0+
c2V0UGFyYW1ldGVyZihwbmFtZSwgcGFyYW1mKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtaSk7CisgICAgICAgIH0KICAg
ICB9CisgICAgaWYgKGlzRmxvYXQpCisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0
YXJnZXQsIHBuYW1lLCBwYXJhbWYpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtaSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFt
ZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pCit7Cisg
ICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsKK30KKwogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKQogewotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVy
aSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsK
LSAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4ID0gMDsKLSAgICAgICAgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHRleCA9IG1f
dGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZzsKLSAg
ICAgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQKQotICAgICAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgICAgIGlmICh0ZXgpCi0gICAgICAgICAg
ICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtKTsKLSAgICB9Ci0gICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwg
MCwgcGFyYW0sIGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1
YkltYWdlMkRCYXNlKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhv
ZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCkBAIC0xOTkzLDYgKzIwMzAsOSBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cg
d2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7CisgICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgZm9ybWF0LCAwLCBmb3JtYXQsIHR5cGUpKQor
ICAgICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0zMDQyLDgg
KzMwODIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRlCiAgICAg
aWYgKGlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgcmVzZXRB
Y3RpdmVVbml0ID0gZmFsc2U7Ci0gICAgLy8gRklYTUU6IGFjdGl2ZSB0ZXh0dXJlIHVuaXQgbGlt
aXRzIHNob3VsZCBiZSBxdWVyaWVzIGluc3RlYWQgb2YgMzIuCi0gICAgZm9yICh1bnNpZ25lZCBs
b25nIGlpID0gMDsgaWkgPCAzMjsgKytpaSkgeworICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBp
aSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewogICAgICAgICBpZiAobV90ZXh0dXJl
VW5pdHNbaWldLm1fdGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0
dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoKQogICAgICAgICAgICAgfHwgbV90
ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRz
W2lpXS5tX3RleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKCkpIHsK
ICAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7CkBAIC0zMDk3LDYg
KzMxMzYsMTAxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmEKICAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQLCAwKTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxm
b3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQodW5zaWduZWQgbG9uZyB0ZXhJbnRlcm5h
bGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sb3JCdWZmZXJGb3Jt
YXQpCit7CisgICAgc3dpdGNoIChjb2xvckJ1ZmZlckZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICBpZiAodGV4SW50ZXJuYWxmb3JtYXQgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMUEhBKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAgaWYgKHRl
eEludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0UKKyAgICAgICAg
ICAgIHx8IHRleEludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleHR1
cmVCaW5kaW5nKHVuc2lnbmVkIHRhcmdldCkKK3sKKyAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0
ZXggPSAwOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRDoKKyAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0ubV90ZXh0dXJlMkRCaW5kaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAg
ICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3Vi
ZU1hcEJpbmRpbmc7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAodGV4ICYmIHRleC0+
b2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0ZXguZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGJvcmRlciwg
dW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlKQoreworICAgIGlmIChpc0dMRVMyQ29tcGxp
YW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7
CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChib3JkZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MDMxMSkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1Myw3ICszNTMsNyBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgICAg
ICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX3RleHR1cmUyREJpbmRpbmc7CiAgICAgICAgICAgICBS
ZWZQdHI8V2ViR0xUZXh0dXJlPiBtX3RleHR1cmVDdWJlTWFwQmluZGluZzsKICAgICAgICAgfTsK
LSAgICAgICAgVGV4dHVyZVVuaXRTdGF0ZSBtX3RleHR1cmVVbml0c1szMl07CisgICAgICAgIFZl
Y3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKICAgICAgICAgdW5zaWduZWQg
bG9uZyBtX2FjdGl2ZVRleHR1cmVVbml0OwogCiAgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+
IG1fYmxhY2tUZXh0dXJlMkQ7CkBAIC0zODksNiArMzg5LDI0IEBAIGNsYXNzIFdlYktpdENTU01h
dHJpeDsKIAogICAgICAgICB2b2lkIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwog
CisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRleHtTdWJ9SW1hZ2UsIGNoZWNr
IHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CisgICAgICAgIC8vIGFuZCB0aGUgY29sb3IgYnVm
ZmVyIGZvcm1hdCBvZiB0aGUgY3VycmVudCBib3VuZCBmcmFtZWJ1ZmZlciBjb21iaW5hdGlvbgor
ICAgICAgICAvLyBpcyB2YWxpZC4KKyAgICAgICAgYm9vbCBpc1RleEludGVybmFsZm9ybWF0Q29s
b3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHVuc2lnbmVkIGxvbmcgdGV4SW50ZXJuYWxmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIGNvbG9yQnVmZmVyRm9ybWF0KTsKKworICAgICAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjdXJyZW50IGJvdW5kIHRleHR1cmUuCisgICAgICAgIFdl
YkdMVGV4dHVyZSogZ2V0VGV4dHVyZUJpbmRpbmcodW5zaWduZWQgdGFyZ2V0KTsKKworICAgICAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rp
b25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisgICAgICAgIC8vIEdlbmVyYXRlIEdMIGVycm9yIGFu
ZCByZXR1cm4gZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICAgICAgYm9vbCB2
YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgaW50ZXJu
YWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpOworCisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiBm
b3IgdGV4UGFyYW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KKyAgICAgICAgdm9pZCB0ZXhQYXJh
bWV0ZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW1pLCBpbnQg
cGFyYW1mLCBib29sIGlzRmxvYXQpOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBXZWJHTFN0YXRl
UmVzdG9yZXI7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNw
cAkocmV2aXNpb24gNjAzMTEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgV2ViR0xUZXh0dXJlOjpXZWJHTFRl
eHR1cmUoV2ViR0xSZW5kZXJpbgogICAgICwgbV9tYWdGaWx0ZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUikKICAgICAsIG1fd3JhcFMoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKICAgICAs
IG1fd3JhcFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKKyAgICAsIG1faW50ZXJuYWxmb3Jt
YXQoMCkKICAgICAsIG1faXNOUE9UKGZhbHNlKQogICAgICwgbV9uZWVkVG9Vc2VCbGFja1RleHR1
cmUoZmFsc2UpCiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlzaW9u
IDYwMzExKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNiArNTIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQg
c2V0UGFyYW1ldGVyZih1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJhbSk7CiAgICAgICAg
IHZvaWQgc2V0U2l6ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCk7CiAKKyAgICAgICAgdm9pZCBzZXRJbnRlcm5hbGZvcm1hdCh1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0KSB7IG1faW50ZXJuYWxmb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsg
fQorICAgICAgICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsZm9ybWF0KCkgY29uc3QgeyByZXR1
cm4gbV9pbnRlcm5hbGZvcm1hdDsgfQorCiAgICAgICAgIHN0YXRpYyBib29sIGlzTlBPVCh1bnNp
Z25lZCwgdW5zaWduZWQpOwogCiAgICAgICAgIGJvb2wgaXNOUE9UKCkgY29uc3QgeyByZXR1cm4g
bV9pc05QT1Q7IH0KQEAgLTc3LDYgKzgwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBpbnQgbV93cmFwUzsKICAgICAgICAgaW50IG1fd3JhcFQ7CiAKKyAgICAgICAgdW5zaWduZWQg
bG9uZyBtX2ludGVybmFsZm9ybWF0OworCiAgICAgICAgIHVuc2lnbmVkIG1fd2lkdGhbNl07CiAg
ICAgICAgIHVuc2lnbmVkIG1faGVpZ2h0WzZdOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNjAzMTEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNyArNTQsOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0SW1h
Z2VEYXRhCiAgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+aGVpZ2h0KCksCiAgICAgICAgICAg
ICAgICAgICAgICBmbGlwWSwKICAgICAgICAgICAgICAgICAgICAgIGFscGhhT3ApOwotICAgICpp
bnRlcm5hbEZvcm1hdCA9IChoYXNBbHBoYUNoYW5uZWwgPyBSR0JBIDogUkdCKTsKKyAgICAvLyBG
b3IgR0xFUzIgdGV4IGZ1bmN0aW9ucywgaW50ZXJuYWxmb3JtYXQgaGFzIHRvIG1hdGNoIGZvcm1h
dC4KKyAgICAqaW50ZXJuYWxGb3JtYXQgPSAqZm9ybWF0OwogICAgIHJldHVybiB0cnVlOwogfQog
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiA2MDMyNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA1LTI3ICBaaGVueWFvIE1vICA8em1v
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVmFsaWRhdGUgKnRleCogZnVuY3Rpb25zIGlucHV0IHBhcmFtZXRlcnMgYWNjb3JkaW5n
IHRvIEVTMiBjb25mb3JtYW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9wcm9j
ZXNzX2J1Zy5jZ2kKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQt
c3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbDogSW50ZXJuYWxmb3JtYXQgYW5kIGZvcm1hdCBu
ZWVkIHRvIGJlIHRoZSBzYW1lLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbnB1
dC12YWxpZGF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24uaHRtbDogQWRkZWQuCisKIDIwMTAtMDUtMjcgIEp1
bGllIFBhcmVudCAgPGpwYXJlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1p
bWFnZS0yZC13aXRoLWltYWdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1pbWFnZS5odG1sCShy
ZXZpc2lvbiA2MDMxMSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFn
ZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTE3
LDcgKzExNyw3IEBAIGZ1bmN0aW9uIHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwgdXNlVGV4U3UKICAg
ICAvLyBVcGxvYWQgdGhlIGltYWdlIGludG8gdGhlIHRleHR1cmUKICAgICBpZiAodXNlVGV4U3Vi
SW1hZ2UyRCkgewogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSB0ZXh0dXJlIHRvIGJsYWNrIGZp
cnN0Ci0gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCLCBpbWFn
ZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLAorICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRV
UkVfMkQsIDAsIGdsLlJHQkEsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQsIDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CiAgICAgICAg
IGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgaW1hZ2UsIGZsaXBZLCBm
YWxzZSk7CiAgICAgfSBlbHNlIHsKQEAgLTEyOCw3ICsxMjgsNiBAQCBmdW5jdGlvbiBydW5PbmVJ
dGVyYXRpb24oaW1hZ2UsIHVzZVRleFN1CiAgICAgZ2wudW5pZm9ybTFpKHRleHR1cmVMb2MsIDAp
OwogICAgIC8vIERyYXcgdGhlIHRyaWFuZ2xlcwogICAgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5H
TEVTLCAwLCA2KTsKLQogICAgIC8vIFJlYWQgYmFjayB0aGUgcmVuZGVyaW5nIHJlc3VsdHMKICAg
ICB2YXIgd2lkdGggPSAzMjsKICAgICB2YXIgaGVpZ2h0ID0gMzI7CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW5wdXQtdmFsaWRhdGlvbi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlk
YXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU5IEBACitWYWxpZGF0ZSB0ZXggZnVuY3Rpb25zIGlucHV0IHBhcmFtZXRlcnMK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIGdsID0gY3JlYXRlM0RDb250ZXh0
KCkgaXMgbm9uLW51bGwuCitQQVNTIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKSBpcyBub24tbnVs
bC4KK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorQ2hlY2tpbmcgVGV4SW1hZ2Uy
RDogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdM
RVMyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBl
cnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
ZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGVycm9yCitDaGVja2luZyBUZXhTdWJJbWFnZTJEOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUg
dmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBl
cnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
ZXJyb3IKK0NoZWNraW5nIFRleFBhcmFtZXRlcjogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZh
bGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJy
b3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVy
cm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBl
cnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
ZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorQ2hlY2tpbmcgR2V0VGV4UGFyYW1l
dGVyOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4g
R0xFUzIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK0NoZWNraW5nIENvcHlUZXhJbWFn
ZTJEOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4g
R0xFUzIKK1BBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBub24tbnVsbC4KK1BB
U1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBub24tbnVsbC4KK1BB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIp
IGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IK
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVm
ZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wu
RlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZXJyb3IKK0NoZWNraW5nIENvcHlUZXhTdWJJbWFnZTJEOiBhIHNldCBvZiBp
bnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlu
cHV0LXZhbGlkYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC90ZXgtaW5wdXQtdmFsaWRhdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24uaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyNjUgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPHNjcmlwdD4KKwordmFyIGdsID0gbnVsbDsKK3ZhciB0ZXggPSBudWxsOwordmFy
IGVycm9yID0gMDsKKworZnVuY3Rpb24gdGVzdFRleEltYWdlMkQodGVzdENhc2UpCit7CisgICAg
dmFyIGxldmVsID0gMDsKKyAgICB2YXIgd2lkdGggPSAxNjsKKyAgICB2YXIgaGVpZ2h0ID0gMTY7
CisgICAgZ2wudGV4SW1hZ2UyRCh0ZXN0Q2FzZS50YXJnZXQsIGxldmVsLCB0ZXN0Q2FzZS5pbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdGVzdENhc2UuYm9yZGVyLCB0ZXN0Q2FzZS5mb3Jt
YXQsIHRlc3RDYXNlLnR5cGUsIG51bGwpOworICAgIGVycm9yID0gdGVzdENhc2UuZXhwZWN0ZWRF
cnJvcjsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJlcnJvciIpOworfQorCitmdW5j
dGlvbiB0ZXN0VGV4U3ViSW1hZ2UyRCh0ZXN0Q2FzZSkKK3sKKyAgICB2YXIgbGV2ZWwgPSAwOwor
ICAgIHZhciB4b2Zmc2V0ID0gMDsKKyAgICB2YXIgeW9mZnNldCA9IDA7CisgICAgdmFyIHdpZHRo
ID0gMTY7CisgICAgdmFyIGhlaWdodCA9IDE2OworICAgIHZhciBhcnJheSA9IG5ldyBXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CisgICAgZ2wudGV4U3ViSW1hZ2Uy
RCh0ZXN0Q2FzZS50YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCB0ZXN0Q2FzZS5mb3JtYXQsIHRlc3RDYXNlLnR5cGUsIGFycmF5KTsKKyAgICBlcnJvciA9IHRl
c3RDYXNlLmV4cGVjdGVkRXJyb3I7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZXJy
b3IiKTsKK30KKworZnVuY3Rpb24gdGVzdFRleFBhcmFtZXRlcih0ZXN0Q2FzZSkKK3sKKyAgICBl
cnJvciA9IHRlc3RDYXNlLmV4cGVjdGVkRXJyb3I7CisgICAgZ2wudGV4UGFyYW1ldGVyaSh0ZXN0
Q2FzZS50YXJnZXQsIHRlc3RDYXNlLnBuYW1lLCB0ZXN0Q2FzZS5wYXJhbSk7CisgICAgc2hvdWxk
QmUoImdsLmdldEVycm9yKCkiLCAiZXJyb3IiKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJmKHRlc3RD
YXNlLnRhcmdldCwgdGVzdENhc2UucG5hbWUsIHRlc3RDYXNlLnBhcmFtKTsKKyAgICBzaG91bGRC
ZSgiZ2wuZ2V0RXJyb3IoKSIsICJlcnJvciIpOworfQorCitmdW5jdGlvbiB0ZXN0R2V0VGV4UGFy
YW1ldGVyKHRlc3RDYXNlKQoreworICAgIGVycm9yID0gdGVzdENhc2UuZXhwZWN0ZWRFcnJvcjsK
KyAgICBnbC5nZXRUZXhQYXJhbWV0ZXIodGVzdENhc2UudGFyZ2V0LCB0ZXN0Q2FzZS5wbmFtZSk7
CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZXJyb3IiKTsKK30KKworZnVuY3Rpb24g
dGVzdENvcHlUZXhJbWFnZTJEKHRlc3RDYXNlKQoreworICAgIHZhciBsZXZlbCA9IDA7CisgICAg
dmFyIHggPSAwOworICAgIHZhciB5ID0gMDsKKyAgICB2YXIgd2lkdGggPSAxNjsKKyAgICB2YXIg
aGVpZ2h0ID0gMTY7CisKKyAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZF
UiwgdGVzdENhc2UuY29sb3JCdWZmZXJGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIHNob3Vs
ZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CisgICAgc2hvdWxkQmUoImdsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIiwgImdsLkZSQU1FQlVGRkVSX0NP
TVBMRVRFIik7CisKKyAgICBnbC5jb3B5VGV4SW1hZ2UyRCh0ZXN0Q2FzZS50YXJnZXQsIGxldmVs
LCB0ZXN0Q2FzZS5pbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGVzdENhc2Uu
Ym9yZGVyKTsKKyAgICBlcnJvciA9IHRlc3RDYXNlLmV4cGVjdGVkRXJyb3I7CisgICAgc2hvdWxk
QmUoImdsLmdldEVycm9yKCkiLCAiZXJyb3IiKTsKK30KKworZnVuY3Rpb24gdGVzdENvcHlUZXhT
dWJJbWFnZTJEKHRlc3RDYXNlKQoreworICAgIHZhciBsZXZlbCA9IDA7CisgICAgdmFyIHggPSAw
OworICAgIHZhciB5ID0gMDsKKyAgICB2YXIgd2lkdGggPSAxNjsKKyAgICB2YXIgaGVpZ2h0ID0g
MTY7CisgICAgdmFyIHhvZmZzZXQgPSAwOworICAgIHZhciB5b2Zmc2V0ID0gMDsKKyAgICB2YXIg
Ym9yZGVyID0gMDsKKworICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVS
LCB0ZXN0Q2FzZS5jb2xvckJ1ZmZlckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgc2hvdWxk
QmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICBzaG91bGRCZSgiZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikiLCAiZ2wuRlJBTUVCVUZGRVJfQ09N
UExFVEUiKTsKKworICAgIGlmICh0ZXN0Q2FzZS5pbml0VGV4KSB7CisgICAgICAgIGdsLmNvcHlU
ZXhJbWFnZTJEKHRlc3RDYXNlLnRhcmdldCwgbGV2ZWwsIHRlc3RDYXNlLmludGVybmFsZm9ybWF0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgICAgICBzaG91bGRCZSgiZ2wuZ2V0
RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAgIH0KKworICAgIGdsLmNvcHlUZXhTdWJJbWFn
ZTJEKHRlc3RDYXNlLnRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQpOworICAgIGVycm9yID0gdGVzdENhc2UuZXhwZWN0ZWRFcnJvcjsKKyAgICBzaG91
bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJlcnJvciIpOworfQorCitkZXNjcmlwdGlvbigiVmFsaWRh
dGUgdGV4IGZ1bmN0aW9ucyBpbnB1dCBwYXJhbWV0ZXJzIik7CisKK3Nob3VsZEJlTm9uTnVsbCgi
Z2wgPSBjcmVhdGUzRENvbnRleHQoKSIpOworc2hvdWxkQmVOb25OdWxsKCJ0ZXggPSBnbC5jcmVh
dGVUZXh0dXJlKCkiKTsKK2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CitzaG91
bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworCitkZWJ1ZygiQ2hlY2tpbmcg
VGV4SW1hZ2UyRDogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBpbnZh
bGlkIGluIEdMRVMyIik7CisKK3ZhciB0ZXN0Q2FzZXMgPQorICBbIHt0YXJnZXQ6IDB4ODA2NCwg
Ly8gR0xfUFJPWFlfVEVYVFVSRV8yRAorICAgICBpbnRlcm5hbGZvcm1hdDogZ2wuUkdCQSwKKyAg
ICAgYm9yZGVyOiAwLAorICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgIHR5cGU6IGdsLlVOU0lH
TkVEX0JZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfRU5VTX0sCisgICAge3Rh
cmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgaW50ZXJuYWxmb3JtYXQ6IDB4MTkwMywgLy8gR0xf
UkVECisgICAgIGJvcmRlcjogMCwKKyAgICAgZm9ybWF0OiAweDE5MDMsIC8vIEdMX1JFRAorICAg
ICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICBleHBlY3RlZEVycm9yOiBnbC5JTlZBTElE
X0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIGludGVybmFsZm9ybWF0
OiBnbC5SR0JBLAorICAgICBib3JkZXI6IDEsCisgICAgIGZvcm1hdDogZ2wuUkdCQSwKKyAgICAg
dHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9W
QUxVRX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgaW50ZXJuYWxmb3JtYXQ6
IGdsLlJHQkEsCisgICAgIGJvcmRlcjogMCwKKyAgICAgZm9ybWF0OiBnbC5SR0IsCisgICAgIHR5
cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfT1BF
UkFUSU9OfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAgICBpbnRlcm5hbGZvcm1h
dDogZ2wuUkdCQSwKKyAgICAgYm9yZGVyOiAwLAorICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAg
IHR5cGU6IGdsLkJZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfRU5VTX0sCisg
ICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgaW50ZXJuYWxmb3JtYXQ6IGdsLlJHQkEs
CisgICAgIGJvcmRlcjogMCwKKyAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICB0eXBlOiBnbC5V
TlNJR05FRF9CWVRFLAorICAgICBleHBlY3RlZEVycm9yOiBnbC5OT19FUlJPUn0gXTsKKworZm9y
ICh2YXIgaWkgPSAwOyBpaSA8IHRlc3RDYXNlcy5sZW5ndGg7ICsraWkpCisgICAgdGVzdFRleElt
YWdlMkQodGVzdENhc2VzW2lpXSk7CisKK2RlYnVnKCJDaGVja2luZyBUZXhTdWJJbWFnZTJEOiBh
IHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIi
KTsKKwordGVzdENhc2VzID0KKyAgWyB7dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAgICBmb3Jt
YXQ6IDB4MTkwMywgLy8gR0xfUkVECisgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAg
IGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfRU5VTX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVS
RV8yRCwKKyAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICB0eXBlOiBnbC5CWVRFLAorICAgICBl
eHBlY3RlZEVycm9yOiBnbC5JTlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVf
MkQsCisgICAgIGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwK
KyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuTk9fRVJST1J9IF07CisKK2ZvciAodmFyIGlpID0gMDsg
aWkgPCB0ZXN0Q2FzZXMubGVuZ3RoOyArK2lpKQorICAgIHRlc3RUZXhTdWJJbWFnZTJEKHRlc3RD
YXNlc1tpaV0pOworCitkZWJ1ZygiQ2hlY2tpbmcgVGV4UGFyYW1ldGVyOiBhIHNldCBvZiBpbnB1
dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIiKTsKKwordGVzdENh
c2VzID0KKyAgWyB7dGFyZ2V0OiAweDBERTAsIC8vIEdMX1RFWFRVUkVfMUQKKyAgICAgcG5hbWU6
IGdsLlRFWFRVUkVfV1JBUF9ULAorICAgICBwYXJhbTogZ2wuUkVQRUFULAorICAgICBleHBlY3Rl
ZEVycm9yOiBnbC5JTlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisg
ICAgIHBuYW1lOiAweDgxM0EsIC8vIEdMX1RFWFRVUkVfTUlOX0xPRAorICAgICBwYXJhbTogMCwK
KyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0OiBnbC5U
RVhUVVJFXzJELAorICAgICBwbmFtZTogZ2wuVEVYVFVSRV9XUkFQX1QsCisgICAgIHBhcmFtOiAw
eDI5MDAsIC8vIEdMX0NMQU1QCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfRU5VTX0s
CisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgcG5hbWU6IGdsLlRFWFRVUkVfV1JB
UF9ULAorICAgICBwYXJhbTogZ2wuUkVQRUFULAorICAgICBleHBlY3RlZEVycm9yOiBnbC5OT19F
UlJPUn0gXTsKKworZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRlc3RDYXNlcy5sZW5ndGg7ICsraWkp
CisgICAgdGVzdFRleFBhcmFtZXRlcih0ZXN0Q2FzZXNbaWldKTsKKworZGVidWcoIkNoZWNraW5n
IEdldFRleFBhcmFtZXRlcjogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1
dCBpbnZhbGlkIGluIEdMRVMyIik7CisKK3Rlc3RDYXNlcyA9CisgIFsge3RhcmdldDogMHgwREUw
LCAvLyBHTF9URVhUVVJFXzFECisgICAgIHBuYW1lOiBnbC5URVhUVVJFX1dSQVBfVCwKKyAgICAg
ZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhUVVJF
XzJELAorICAgICBwbmFtZTogMHg4MTNBLCAvLyBHTF9URVhUVVJFX01JTl9MT0QKKyAgICAgZXhw
ZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhUVVJFXzJE
LAorICAgICBwbmFtZTogZ2wuVEVYVFVSRV9XUkFQX1QsCisgICAgIGV4cGVjdGVkRXJyb3I6IGds
Lk5PX0VSUk9SfSBdOworCitmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGVzdENhc2VzLmxlbmd0aDsg
KytpaSkKKyAgICB0ZXN0R2V0VGV4UGFyYW1ldGVyKHRlc3RDYXNlc1tpaV0pOworCitkZWJ1Zygi
Q2hlY2tpbmcgQ29weVRleEltYWdlMkQ6IGEgc2V0IG9mIGlucHV0cyB0aGF0IGFyZSB2YWxpZCBp
biBHTCBidXQgaW52YWxpZCBpbiBHTEVTMiIpOworCit2YXIgY29sb3JCdWZmZXIgPSBudWxsOwor
dmFyIGZibyA9IG51bGw7CisKK3Nob3VsZEJlTm9uTnVsbCgiZmJvID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKSIpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYm8pOworc2hv
dWxkQmVOb25OdWxsKCJjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIik7Citn
bC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgY29sb3JCdWZmZXIpOworZ2wuZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQw
LCBnbC5SRU5ERVJCVUZGRVIsIGNvbG9yQnVmZmVyKTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigp
IiwgImdsLk5PX0VSUk9SIik7CisKK3Rlc3RDYXNlcyA9CisgIFsge3RhcmdldDogZ2wuVEVYVFVS
RV8yRCwKKyAgICAgY29sb3JCdWZmZXJGb3JtYXQ6IGdsLlJHQjU2NSwKKyAgICAgaW50ZXJuYWxm
b3JtYXQ6IDB4ODA1NCwgLy8gR0xfUkdCMTYKKyAgICAgYm9yZGVyOiAwLAorICAgICBleHBlY3Rl
ZEVycm9yOiBnbC5JTlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisg
ICAgIGNvbG9yQnVmZmVyRm9ybWF0OiBnbC5SR0I1NjUsCisgICAgIGludGVybmFsZm9ybWF0OiBn
bC5SR0JBLAorICAgICBib3JkZXI6IDEsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURf
VkFMVUV9LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIGNvbG9yQnVmZmVyRm9y
bWF0OiBnbC5SR0I1NjUsCisgICAgIGludGVybmFsZm9ybWF0OiBnbC5SR0JBLAorICAgICBib3Jk
ZXI6IDAsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfT1BFUkFUSU9OfSwKKyAgICB7
dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAgICBjb2xvckJ1ZmZlckZvcm1hdDogZ2wuUkdCNTY1
LAorICAgICBpbnRlcm5hbGZvcm1hdDogZ2wuUkdCLAorICAgICBib3JkZXI6IDAsCisgICAgIGV4
cGVjdGVkRXJyb3I6IGdsLk5PX0VSUk9SfSBdOworCitmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGVz
dENhc2VzLmxlbmd0aDsgKytpaSkKKyAgICB0ZXN0Q29weVRleEltYWdlMkQodGVzdENhc2VzW2lp
XSk7CisKK2RlYnVnKCJDaGVja2luZyBDb3B5VGV4U3ViSW1hZ2UyRDogYSBzZXQgb2YgaW5wdXRz
IHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyIik7CisKK3Rlc3RDYXNl
cyA9CisgIFsge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgY29sb3JCdWZmZXJGb3JtYXQ6
IGdsLlJHQjVfQTEsCisgICAgIGludGVybmFsZm9ybWF0OiBnbC5SR0JBLAorICAgICBpbml0VGV4
OiB0cnVlLAorICAgICBleHBlY3RlZEVycm9yOiBnbC5OT19FUlJPUn0sCisgICAge3RhcmdldDog
Z2wuVEVYVFVSRV8yRCwKKyAgICAgY29sb3JCdWZmZXJGb3JtYXQ6IGdsLlJHQjU2NSwKKyAgICAg
aW50ZXJuYWxmb3JtYXQ6IGdsLlJHQkEsCisgICAgIGluaXRUZXg6IGZhbHNlLAorICAgICBleHBl
Y3RlZEVycm9yOiBnbC5JTlZBTElEX09QRVJBVElPTn0gXTsKKworZm9yICh2YXIgaWkgPSAwOyBp
aSA8IHRlc3RDYXNlcy5sZW5ndGg7ICsraWkpCisgICAgdGVzdENvcHlUZXhTdWJJbWFnZTJEKHRl
c3RDYXNlc1tpaV0pOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisK
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57698</attachid>
            <date>2010-06-02 13:54:30 -0700</date>
            <delta_ts>2010-06-03 16:13:58 -0700</delta_ts>
            <desc>revised patch: fix the url in changeLog.</desc>
            <filename>tex.patch</filename>
            <type>text/plain</type>
            <size>34575</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDMyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDUtMjcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWYWxpZGF0
ZSAqdGV4KiBmdW5jdGlvbnMgaW5wdXQgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gRVMyIGNvbmZv
cm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
ODE0NQorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbnB1dC12YWxpZGF0
aW9uLmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJGb3JtYXQp
OiBHZXQgY29sb3IgYnVmZmVyIGludGVybmFsZm9ybWF0LgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KTogRGVhbCB3aXRoIG1heCB0ZXggdW5pdHMuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKTog
VmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkRCYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyk6IERlYWwgd2l0aCBtYXggdGV4IHVuaXRzLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsZm9ybWF0Q29s
b3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKTogQ2hlY2sgd2hldGhlciB0aGUgdGV4dHVyZSBmb3Jt
YXQgYW5kIGZyYW1lYnVmZmVyIGNvbG9yIGJ1ZmZlciBpbnRlcm5hbGZvcm1hdCBjb21iaW5hdGlv
biBpcyB2YWxpZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VGV4dHVyZUJpbmRpbmcpOiBnZXQgdGhlIGN1cnJlbnQgYm91bmQgdGV4dHVyZSBmb3IgZ2l2ZW4g
dGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNQYXJhbWV0ZXJzKTogVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgKnRleCog
ZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQ
YXJhbWV0ZXIpOiBCYXNlIGZ1bmN0aW9uIGZvciB0ZXhQYXJhbWV0ZXJpIGFuZCB0ZXhQYXJhbWV0
ZXJmLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWFs
IHdpdGggbWF4IHRleCB1bml0cy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUpOiBDYWNo
ZSBpbnRlcm5hbGZvcm1hdC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaDog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OnNldEludGVybmFsZm9ybWF0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6Z2V0SW50ZXJuYWxmb3JtYXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcDogaW50ZXJu
YWxmb3JtYXQgYW5kIGZvcm1hdCBuZWVkIHRvIGJlIHRoZSBzYW1lLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEpOgorCiAyMDEwLTA1LTI3ICBI
YW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
SmVyZW15IE9ybG93LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
Y3BwCShyZXZpc2lvbiA2MDMxMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDI0IEBAIHZvaWQgV2ViR0xGcmFt
ZWJ1ZmZlcjo6b25BdHRhY2hlZE9iamVjdEMKICAgICAgICAgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZl
cnMoKTsKIH0KIAordW5zaWduZWQgbG9uZyBXZWJHTEZyYW1lYnVmZmVyOjpnZXRDb2xvckJ1ZmZl
ckZvcm1hdCgpCit7CisgICAgaWYgKG9iamVjdCgpICYmIG1fY29sb3JBdHRhY2htZW50ICYmIG1f
Y29sb3JBdHRhY2htZW50LT5vYmplY3QoKSkgeworICAgICAgICBpZiAobV9jb2xvckF0dGFjaG1l
bnQtPmlzUmVuZGVyYnVmZmVyKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZm9ybWF0
ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihtX2NvbG9yQXR0YWNobWVu
dCkpLT5nZXRJbnRlcm5hbGZvcm1hdCgpOworICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsK
KyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgICAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKKyAgICAgICAgICAgICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0I1NjU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobV9jb2xvckF0dGFjaG1lbnQt
PmlzVGV4dHVyZSgpKQorICAgICAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFdlYkdM
VGV4dHVyZSo+KG1fY29sb3JBdHRhY2htZW50KSktPmdldEludGVybmFsZm9ybWF0KCk7CisgICAg
fQorICAgIHJldHVybiAwOworfQorCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6Ol9kZWxldGVPYmpl
Y3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgY29udGV4dCgpLT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3QpOwpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDYwMzExKQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBjbGVhciB1bi1pbml0aWFsaXplZCBy
ZW5kZXJidWZmZXJzLgogICAgICAgICB2b2lkIG9uQXR0YWNoZWRPYmplY3RDaGFuZ2UoQ2FudmFz
T2JqZWN0Kik7CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRDb2xvckJ1ZmZlckZvcm1hdCgp
OworCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCopOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDYwMzExKQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2
ICs5Myw5IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb24KICAgICAs
IG1fdW5wYWNrQWxpZ25tZW50KDQpCiB7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgaW50
IG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
LCAmbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgbV90ZXh0dXJlVW5pdHMucmVz
aXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwogICAgIGludCBudW1WZXJ0ZXhBdHRy
aWJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKICAgICBtX21heFZlcnRleEF0
dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJzOwpAQCAtNDMzLDM2ICs0MzYsNDggQEAgdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVu
c2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCiB7Ci0gICAgUmVmUHRy
PFdlYkdMVGV4dHVyZT4gdGV4ID0gMDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIHRleCA9IG1fdGV4dHVyZVVu
aXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1o6Ci0gICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVu
aXRdLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAg
aWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIGJv
cmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkK
KyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gZ2V0VGV4dHVyZUJpbmRp
bmcodGFyZ2V0KTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpCisg
ICAgICAgICAgICAmJiAhaXNUZXhJbnRlcm5hbGZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25W
YWxpZChpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xv
ckJ1ZmZlckZvcm1hdCgpKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6Omlz
TlBPVCh3aWR0aCwgaGVpZ2h0KSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRleCAmJiAhbGV2ZWwpIC8vIG9ubHkgZm9y
IGxldmVsIDAKLSAgICAgICAgICAgIHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQp
OwogICAgIH0KICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiB0ZXgpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
bkF0dGFjaGVkT2JqZWN0Q2hhbmdlKHRleC5nZXQoKSk7CisgICAgdW5zaWduZWQgbG9uZyBlcnJv
ciA9IG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKKyAgICBpZiAoZXJyb3IgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Cisg
ICAgICAgICAgICBpZiAodGV4ICYmICFsZXZlbCkgLy8gb25seSBmb3IgbGV2ZWwgMAorICAgICAg
ICAgICAgICAgIHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAg
ICAgaWYgKHRleCkKKyAgICAgICAgICAgICAgICB0ZXgtPnNldEludGVybmFsZm9ybWF0KGludGVy
bmFsZm9ybWF0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgdGV4KQorICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmpl
Y3RDaGFuZ2UodGV4KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihlcnJvcik7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQog
eworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIFdlYkdMVGV4dHVyZSog
dGV4ID0gZ2V0VGV4dHVyZUJpbmRpbmcodGFyZ2V0KTsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSAmJiB0ZXgKKyAgICAg
ICAgICAgICYmICFpc1RleEludGVybmFsZm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlk
KHRleC0+Z2V0SW50ZXJuYWxmb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXRDb2xvckJ1ZmZlckZvcm1hdCgpKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogICAgIG1fY29udGV4dC0+Y29weVRleFN1
YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAgLTE4MDUs
MzQgKzE4MjAsMzEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIHZv
aWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gdGV4ID0gMDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZl
VGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVy
ZUN1YmVNYXBCaW5kaW5nOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgLy8gRklYTUU6IEZv
ciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7CisgICAgaWYg
KCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gZ2V0VGV4dHVyZUJpbmRpbmcodGFyZ2V0KTsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSkgewogICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhl
aWdodCkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICh0ZXggJiYgIWxldmVsKSAvLyBvbmx5IGZvciBsZXZlbCAwCi0gICAg
ICAgICAgICB0ZXgtPnNldFNpemUodGFyZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAg
bV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgdGV4KQotICAgICAg
ICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZE9iamVjdENoYW5nZSh0ZXguZ2V0KCkp
OworICAgIHVuc2lnbmVkIGxvbmcgZXJyb3IgPSBtX2NvbnRleHQtPmdldEVycm9yKCk7CisgICAg
aWYgKGVycm9yID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICAgICAgaWYgKHRleCAmJiAhbGV2ZWwpIC8v
IG9ubHkgZm9yIGxldmVsIDAKKyAgICAgICAgICAgICAgICB0ZXgtPnNldFNpemUodGFyZ2V0LCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIGlmICh0ZXgpCisgICAgICAgICAgICAgICAgdGV4
LT5zZXRJbnRlcm5hbGZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIHRleCkKKyAgICAgICAgICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKHRleCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTE5NTcsMzQgKzE5NjksNTkgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodQogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJh
bWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKQordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcih1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIHBuYW1lLCBmbG9hdCBwYXJhbWYsIGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKIHsK
LSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwogICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+
IHRleCA9IDA7Ci0gICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQpCisgICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQ6CiAgICAgICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1tt
X2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmUyREJpbmRpbmc7Ci0gICAgICAgIGVsc2UgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQOgogICAgICAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgICAgIGlmICh0ZXgpCi0gICAgICAgICAg
ICB0ZXgtPnNldFBhcmFtZXRlcmYocG5hbWUsIHBhcmFtKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgICAgIGlmIChpc0Zsb2F0
ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFUEVBVAorICAgICAgICAgICAgICAgIHx8ICFpc0Zsb2F0ICYmIHBhcmFt
aSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFUEVBVCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmICh0ZXgpIHsKKyAgICAgICAgICAgIGlmIChpc0Zsb2F0KQorICAgICAgICAgICAgICAg
IHRleC0+c2V0UGFyYW1ldGVyZihwbmFtZSwgcGFyYW1mKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtaSk7CisgICAgICAg
IH0KICAgICB9CisgICAgaWYgKGlzRmxvYXQpCisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbWYpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtaSk7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0p
Cit7CisgICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsKK30K
Kwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKQogewotICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpIHsKLSAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4ID0gMDsKLSAgICAgICAgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHRl
eCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGlu
ZzsKLSAgICAgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQKQotICAgICAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgICAgIGlmICh0ZXgpCi0gICAg
ICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtKTsKLSAgICB9Ci0gICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBw
bmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleFN1YkltYWdlMkRCYXNlKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2ln
bmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCkBAIC0xOTkzLDYgKzIwMzAsOSBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyCiB7CiAgICAgLy8gRklYTUU6IEZv
ciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7CisgICAgaWYg
KCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgZm9ybWF0LCAwLCBmb3JtYXQsIHR5
cGUpKQorICAgICAgICByZXR1cm47CisKICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CkBAIC0z
MDQyLDggKzMwODIsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFuZGxlTlBPVFRl
CiAgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wg
cmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7Ci0gICAgLy8gRklYTUU6IGFjdGl2ZSB0ZXh0dXJlIHVu
aXQgbGltaXRzIHNob3VsZCBiZSBxdWVyaWVzIGluc3RlYWQgb2YgMzIuCi0gICAgZm9yICh1bnNp
Z25lZCBsb25nIGlpID0gMDsgaWkgPCAzMjsgKytpaSkgeworICAgIGZvciAodW5zaWduZWQgaWkg
PSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewogICAgICAgICBpZiAobV90
ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0u
bV90ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoKQogICAgICAgICAgICAg
fHwgbV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVy
ZVVuaXRzW2lpXS5tX3RleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJl
KCkpIHsKICAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7CkBAIC0z
MDk3LDYgKzMxMzYsMTAxIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxs
YmEKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQLCAwKTsKIH0KIAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50
ZXJuYWxmb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQodW5zaWduZWQgbG9uZyB0ZXhJ
bnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sb3JCdWZm
ZXJGb3JtYXQpCit7CisgICAgc3dpdGNoIChjb2xvckJ1ZmZlckZvcm1hdCkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgICAgICBpZiAodGV4SW50ZXJuYWxmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAgICAg
aWYgKHRleEludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0UKKyAg
ICAgICAgICAgIHx8IHRleEludGVybmFsZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ip
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFRleHR1cmVCaW5kaW5nKHVuc2lnbmVkIHRhcmdldCkKK3sKKyAgICBSZWZQdHI8V2ViR0xUZXh0
dXJlPiB0ZXggPSAwOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3Rp
dmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlMkRCaW5kaW5nOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
KyAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0
dXJlQ3ViZU1hcEJpbmRpbmc7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAodGV4ICYm
IHRleC0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0ZXguZ2V0KCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0
ZXJzKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGJv
cmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlKQoreworICAgIGlmIChpc0dMRVMy
Q29tcGxpYW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoICh0YXJnZXQp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0pOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG1fY29udGV4dC0+
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsZm9y
bWF0KSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81
XzVfMToKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MDMx
MSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1Myw3ICszNTMsNyBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAg
ICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX3RleHR1cmUyREJpbmRpbmc7CiAgICAgICAg
ICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX3RleHR1cmVDdWJlTWFwQmluZGluZzsKICAgICAg
ICAgfTsKLSAgICAgICAgVGV4dHVyZVVuaXRTdGF0ZSBtX3RleHR1cmVVbml0c1szMl07CisgICAg
ICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKICAgICAgICAgdW5z
aWduZWQgbG9uZyBtX2FjdGl2ZVRleHR1cmVVbml0OwogCiAgICAgICAgIFJlZlB0cjxXZWJHTFRl
eHR1cmU+IG1fYmxhY2tUZXh0dXJlMkQ7CkBAIC0zODksNiArMzg5LDI0IEBAIGNsYXNzIFdlYktp
dENTU01hdHJpeDsKIAogICAgICAgICB2b2lkIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4
MSgpOwogCisgICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRleHtTdWJ9SW1hZ2Us
IGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CisgICAgICAgIC8vIGFuZCB0aGUgY29s
b3IgYnVmZmVyIGZvcm1hdCBvZiB0aGUgY3VycmVudCBib3VuZCBmcmFtZWJ1ZmZlciBjb21iaW5h
dGlvbgorICAgICAgICAvLyBpcyB2YWxpZC4KKyAgICAgICAgYm9vbCBpc1RleEludGVybmFsZm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHVuc2lnbmVkIGxvbmcgdGV4SW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbG9yQnVmZmVyRm9ybWF0KTsKKworICAgICAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjdXJyZW50IGJvdW5kIHRleHR1cmUuCisgICAg
ICAgIFdlYkdMVGV4dHVyZSogZ2V0VGV4dHVyZUJpbmRpbmcodW5zaWduZWQgdGFyZ2V0KTsKKwor
ICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgcGFyYW1ldGVycyBmb3Ig
ZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisgICAgICAgIC8vIEdlbmVyYXRlIEdMIGVy
cm9yIGFuZCByZXR1cm4gZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICAgICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUpOworCisgICAgICAgIC8vIEhlbHBlciBmdW5j
dGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KKyAgICAgICAgdm9pZCB0
ZXhQYXJhbWV0ZXIodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW1p
LCBpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBXZWJH
TFN0YXRlUmVzdG9yZXI7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0
dXJlLmNwcAkocmV2aXNpb24gNjAzMTEpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAgV2ViR0xUZXh0dXJlOjpX
ZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbgogICAgICwgbV9tYWdGaWx0ZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVBUikKICAgICAsIG1fd3JhcFMoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkK
ICAgICAsIG1fd3JhcFQoR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKKyAgICAsIG1faW50ZXJu
YWxmb3JtYXQoMCkKICAgICAsIG1faXNOUE9UKGZhbHNlKQogICAgICwgbV9uZWVkVG9Vc2VCbGFj
a1RleHR1cmUoZmFsc2UpCiB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJl
dmlzaW9uIDYwMzExKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgc2V0UGFyYW1ldGVyZih1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJhbSk7CiAg
ICAgICAgIHZvaWQgc2V0U2l6ZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCk7CiAKKyAgICAgICAgdm9pZCBzZXRJbnRlcm5hbGZvcm1hdCh1bnNp
Z25lZCBsb25nIGludGVybmFsZm9ybWF0KSB7IG1faW50ZXJuYWxmb3JtYXQgPSBpbnRlcm5hbGZv
cm1hdDsgfQorICAgICAgICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsZm9ybWF0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnRlcm5hbGZvcm1hdDsgfQorCiAgICAgICAgIHN0YXRpYyBib29sIGlzTlBP
VCh1bnNpZ25lZCwgdW5zaWduZWQpOwogCiAgICAgICAgIGJvb2wgaXNOUE9UKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc05QT1Q7IH0KQEAgLTc3LDYgKzgwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBpbnQgbV93cmFwUzsKICAgICAgICAgaW50IG1fd3JhcFQ7CiAKKyAgICAgICAgdW5z
aWduZWQgbG9uZyBtX2ludGVybmFsZm9ybWF0OworCiAgICAgICAgIHVuc2lnbmVkIG1fd2lkdGhb
Nl07CiAgICAgICAgIHVuc2lnbmVkIG1faGVpZ2h0WzZdOwogCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNjAzMTEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNyArNTQsOCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpleHRy
YWN0SW1hZ2VEYXRhCiAgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+aGVpZ2h0KCksCiAgICAg
ICAgICAgICAgICAgICAgICBmbGlwWSwKICAgICAgICAgICAgICAgICAgICAgIGFscGhhT3ApOwot
ICAgICppbnRlcm5hbEZvcm1hdCA9IChoYXNBbHBoYUNoYW5uZWwgPyBSR0JBIDogUkdCKTsKKyAg
ICAvLyBGb3IgR0xFUzIgdGV4IGZ1bmN0aW9ucywgaW50ZXJuYWxmb3JtYXQgaGFzIHRvIG1hdGNo
IGZvcm1hdC4KKyAgICAqaW50ZXJuYWxGb3JtYXQgPSAqZm9ybWF0OwogICAgIHJldHVybiB0cnVl
OwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDMyNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA1LTI3ICBaaGVueWFvIE1v
ICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVmFsaWRhdGUgKnRleCogZnVuY3Rpb25zIGlucHV0IHBhcmFtZXRlcnMgYWNj
b3JkaW5nIHRvIEVTMiBjb25mb3JtYW5jZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzgxNDUKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Rl
eC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbDogSW50ZXJuYWxmb3JtYXQg
YW5kIGZvcm1hdCBuZWVkIHRvIGJlIHRoZSBzYW1lLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dl
YmdsL3RleC1pbnB1dC12YWxpZGF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24uaHRtbDogQWRkZWQuCisKIDIw
MTAtMDUtMjcgIEp1bGllIFBhcmVudCAgPGpwYXJlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1h
Z2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLWltYWdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1p
bWFnZS5odG1sCShyZXZpc2lvbiA2MDMxMSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2UuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMTE3LDcgKzExNyw3IEBAIGZ1bmN0aW9uIHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwg
dXNlVGV4U3UKICAgICAvLyBVcGxvYWQgdGhlIGltYWdlIGludG8gdGhlIHRleHR1cmUKICAgICBp
ZiAodXNlVGV4U3ViSW1hZ2UyRCkgewogICAgICAgICAvLyBJbml0aWFsaXplIHRoZSB0ZXh0dXJl
IHRvIGJsYWNrIGZpcnN0Ci0gICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwg
Z2wuUkdCLCBpbWFnZS53aWR0aCwgaW1hZ2UuaGVpZ2h0LCAwLAorICAgICAgICBnbC50ZXhJbWFn
ZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGltYWdlLndpZHRoLCBpbWFnZS5oZWlnaHQs
IDAsCiAgICAgICAgICAgICAgICAgICAgICAgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVs
bCk7CiAgICAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgaW1h
Z2UsIGZsaXBZLCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKQEAgLTEyOCw3ICsxMjgsNiBAQCBmdW5j
dGlvbiBydW5PbmVJdGVyYXRpb24oaW1hZ2UsIHVzZVRleFN1CiAgICAgZ2wudW5pZm9ybTFpKHRl
eHR1cmVMb2MsIDApOwogICAgIC8vIERyYXcgdGhlIHRyaWFuZ2xlcwogICAgIGdsLmRyYXdBcnJh
eXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKLQogICAgIC8vIFJlYWQgYmFjayB0aGUgcmVuZGVyaW5n
IHJlc3VsdHMKICAgICB2YXIgd2lkdGggPSAzMjsKICAgICB2YXIgaGVpZ2h0ID0gMzI7CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW5wdXQtdmFsaWRhdGlvbi1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4
LWlucHV0LXZhbGlkYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACitWYWxpZGF0ZSB0ZXggZnVuY3Rpb25zIGlucHV0
IHBhcmFtZXRlcnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIGdsID0gY3Jl
YXRlM0RDb250ZXh0KCkgaXMgbm9uLW51bGwuCitQQVNTIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUo
KSBpcyBub24tbnVsbC4KK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorQ2hlY2tp
bmcgVGV4SW1hZ2UyRDogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBp
bnZhbGlkIGluIEdMRVMyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGVycm9yCitDaGVja2luZyBUZXhTdWJJbWFnZTJEOiBhIHNldCBvZiBpbnB1
dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIKK1BBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZXJyb3IKK0NoZWNraW5nIFRleFBhcmFtZXRlcjogYSBzZXQgb2YgaW5wdXRz
IHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorQ2hlY2tpbmcg
R2V0VGV4UGFyYW1ldGVyOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0
IGludmFsaWQgaW4gR0xFUzIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK0NoZWNraW5n
IENvcHlUZXhJbWFnZTJEOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0
IGludmFsaWQgaW4gR0xFUzIKK1BBU1MgZmJvID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKSBpcyBu
b24tbnVsbC4KK1BBU1MgY29sb3JCdWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKSBpcyBu
b24tbnVsbC4KK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIGdsLmdldEVycm9y
KCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9D
T01QTEVURQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkg
aXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJV
RkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBl
cnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJh
bWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRF
CitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK0NoZWNraW5nIENvcHlUZXhTdWJJbWFnZTJE
OiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xF
UzIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
ZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVU
RQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW5wdXQtdmFsaWRhdGlvbi5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24u
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNjUgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKwordmFyIGdsID0gbnVsbDsKK3ZhciB0ZXgg
PSBudWxsOwordmFyIGVycm9yID0gMDsKKworZnVuY3Rpb24gdGVzdFRleEltYWdlMkQodGVzdENh
c2UpCit7CisgICAgdmFyIGxldmVsID0gMDsKKyAgICB2YXIgd2lkdGggPSAxNjsKKyAgICB2YXIg
aGVpZ2h0ID0gMTY7CisgICAgZ2wudGV4SW1hZ2UyRCh0ZXN0Q2FzZS50YXJnZXQsIGxldmVsLCB0
ZXN0Q2FzZS5pbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdGVzdENhc2UuYm9yZGVyLCB0
ZXN0Q2FzZS5mb3JtYXQsIHRlc3RDYXNlLnR5cGUsIG51bGwpOworICAgIGVycm9yID0gdGVzdENh
c2UuZXhwZWN0ZWRFcnJvcjsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJlcnJvciIp
OworfQorCitmdW5jdGlvbiB0ZXN0VGV4U3ViSW1hZ2UyRCh0ZXN0Q2FzZSkKK3sKKyAgICB2YXIg
bGV2ZWwgPSAwOworICAgIHZhciB4b2Zmc2V0ID0gMDsKKyAgICB2YXIgeW9mZnNldCA9IDA7Cisg
ICAgdmFyIHdpZHRoID0gMTY7CisgICAgdmFyIGhlaWdodCA9IDE2OworICAgIHZhciBhcnJheSA9
IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CisgICAgZ2wu
dGV4U3ViSW1hZ2UyRCh0ZXN0Q2FzZS50YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCB0ZXN0Q2FzZS5mb3JtYXQsIHRlc3RDYXNlLnR5cGUsIGFycmF5KTsKKyAg
ICBlcnJvciA9IHRlc3RDYXNlLmV4cGVjdGVkRXJyb3I7CisgICAgc2hvdWxkQmUoImdsLmdldEVy
cm9yKCkiLCAiZXJyb3IiKTsKK30KKworZnVuY3Rpb24gdGVzdFRleFBhcmFtZXRlcih0ZXN0Q2Fz
ZSkKK3sKKyAgICBlcnJvciA9IHRlc3RDYXNlLmV4cGVjdGVkRXJyb3I7CisgICAgZ2wudGV4UGFy
YW1ldGVyaSh0ZXN0Q2FzZS50YXJnZXQsIHRlc3RDYXNlLnBuYW1lLCB0ZXN0Q2FzZS5wYXJhbSk7
CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZXJyb3IiKTsKKyAgICBnbC50ZXhQYXJh
bWV0ZXJmKHRlc3RDYXNlLnRhcmdldCwgdGVzdENhc2UucG5hbWUsIHRlc3RDYXNlLnBhcmFtKTsK
KyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJlcnJvciIpOworfQorCitmdW5jdGlvbiB0
ZXN0R2V0VGV4UGFyYW1ldGVyKHRlc3RDYXNlKQoreworICAgIGVycm9yID0gdGVzdENhc2UuZXhw
ZWN0ZWRFcnJvcjsKKyAgICBnbC5nZXRUZXhQYXJhbWV0ZXIodGVzdENhc2UudGFyZ2V0LCB0ZXN0
Q2FzZS5wbmFtZSk7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZXJyb3IiKTsKK30K
KworZnVuY3Rpb24gdGVzdENvcHlUZXhJbWFnZTJEKHRlc3RDYXNlKQoreworICAgIHZhciBsZXZl
bCA9IDA7CisgICAgdmFyIHggPSAwOworICAgIHZhciB5ID0gMDsKKyAgICB2YXIgd2lkdGggPSAx
NjsKKyAgICB2YXIgaGVpZ2h0ID0gMTY7CisKKyAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGds
LlJFTkRFUkJVRkZFUiwgdGVzdENhc2UuY29sb3JCdWZmZXJGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CisgICAgc2hv
dWxkQmUoImdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIiwgImdsLkZS
QU1FQlVGRkVSX0NPTVBMRVRFIik7CisKKyAgICBnbC5jb3B5VGV4SW1hZ2UyRCh0ZXN0Q2FzZS50
YXJnZXQsIGxldmVsLCB0ZXN0Q2FzZS5pbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgdGVzdENhc2UuYm9yZGVyKTsKKyAgICBlcnJvciA9IHRlc3RDYXNlLmV4cGVjdGVkRXJyb3I7
CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZXJyb3IiKTsKK30KKworZnVuY3Rpb24g
dGVzdENvcHlUZXhTdWJJbWFnZTJEKHRlc3RDYXNlKQoreworICAgIHZhciBsZXZlbCA9IDA7Cisg
ICAgdmFyIHggPSAwOworICAgIHZhciB5ID0gMDsKKyAgICB2YXIgd2lkdGggPSAxNjsKKyAgICB2
YXIgaGVpZ2h0ID0gMTY7CisgICAgdmFyIHhvZmZzZXQgPSAwOworICAgIHZhciB5b2Zmc2V0ID0g
MDsKKyAgICB2YXIgYm9yZGVyID0gMDsKKworICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wu
UkVOREVSQlVGRkVSLCB0ZXN0Q2FzZS5jb2xvckJ1ZmZlckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICBzaG91
bGRCZSgiZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikiLCAiZ2wuRlJB
TUVCVUZGRVJfQ09NUExFVEUiKTsKKworICAgIGlmICh0ZXN0Q2FzZS5pbml0VGV4KSB7CisgICAg
ICAgIGdsLmNvcHlUZXhJbWFnZTJEKHRlc3RDYXNlLnRhcmdldCwgbGV2ZWwsIHRlc3RDYXNlLmlu
dGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgICAgICBzaG91
bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAgIH0KKworICAgIGdsLmNv
cHlUZXhTdWJJbWFnZTJEKHRlc3RDYXNlLnRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGVycm9yID0gdGVzdENhc2UuZXhwZWN0ZWRFcnJv
cjsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJlcnJvciIpOworfQorCitkZXNjcmlw
dGlvbigiVmFsaWRhdGUgdGV4IGZ1bmN0aW9ucyBpbnB1dCBwYXJhbWV0ZXJzIik7CisKK3Nob3Vs
ZEJlTm9uTnVsbCgiZ2wgPSBjcmVhdGUzRENvbnRleHQoKSIpOworc2hvdWxkQmVOb25OdWxsKCJ0
ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCkiKTsKK2dsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQs
IHRleCk7CitzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworCitkZWJ1
ZygiQ2hlY2tpbmcgVGV4SW1hZ2UyRDogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZhbGlkIGlu
IEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyIik7CisKK3ZhciB0ZXN0Q2FzZXMgPQorICBbIHt0YXJn
ZXQ6IDB4ODA2NCwgLy8gR0xfUFJPWFlfVEVYVFVSRV8yRAorICAgICBpbnRlcm5hbGZvcm1hdDog
Z2wuUkdCQSwKKyAgICAgYm9yZGVyOiAwLAorICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgIHR5
cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfRU5V
TX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgaW50ZXJuYWxmb3JtYXQ6IDB4
MTkwMywgLy8gR0xfUkVECisgICAgIGJvcmRlcjogMCwKKyAgICAgZm9ybWF0OiAweDE5MDMsIC8v
IEdMX1JFRAorICAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICBleHBlY3RlZEVycm9y
OiBnbC5JTlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIGlu
dGVybmFsZm9ybWF0OiBnbC5SR0JBLAorICAgICBib3JkZXI6IDEsCisgICAgIGZvcm1hdDogZ2wu
UkdCQSwKKyAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgZXhwZWN0ZWRFcnJvcjog
Z2wuSU5WQUxJRF9WQUxVRX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgaW50
ZXJuYWxmb3JtYXQ6IGdsLlJHQkEsCisgICAgIGJvcmRlcjogMCwKKyAgICAgZm9ybWF0OiBnbC5S
R0IsCisgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGds
LklOVkFMSURfT1BFUkFUSU9OfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAgICBp
bnRlcm5hbGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgYm9yZGVyOiAwLAorICAgICBmb3JtYXQ6IGds
LlJHQkEsCisgICAgIHR5cGU6IGdsLkJZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFM
SURfRU5VTX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgaW50ZXJuYWxmb3Jt
YXQ6IGdsLlJHQkEsCisgICAgIGJvcmRlcjogMCwKKyAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAg
ICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICBleHBlY3RlZEVycm9yOiBnbC5OT19FUlJP
Un0gXTsKKworZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRlc3RDYXNlcy5sZW5ndGg7ICsraWkpCisg
ICAgdGVzdFRleEltYWdlMkQodGVzdENhc2VzW2lpXSk7CisKK2RlYnVnKCJDaGVja2luZyBUZXhT
dWJJbWFnZTJEOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFs
aWQgaW4gR0xFUzIiKTsKKwordGVzdENhc2VzID0KKyAgWyB7dGFyZ2V0OiBnbC5URVhUVVJFXzJE
LAorICAgICBmb3JtYXQ6IDB4MTkwMywgLy8gR0xfUkVECisgICAgIHR5cGU6IGdsLlVOU0lHTkVE
X0JZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfRU5VTX0sCisgICAge3Rhcmdl
dDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICB0eXBlOiBnbC5C
WVRFLAorICAgICBleHBlY3RlZEVycm9yOiBnbC5JTlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6
IGdsLlRFWFRVUkVfMkQsCisgICAgIGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgdHlwZTogZ2wuVU5T
SUdORURfQllURSwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuTk9fRVJST1J9IF07CisKK2ZvciAo
dmFyIGlpID0gMDsgaWkgPCB0ZXN0Q2FzZXMubGVuZ3RoOyArK2lpKQorICAgIHRlc3RUZXhTdWJJ
bWFnZTJEKHRlc3RDYXNlc1tpaV0pOworCitkZWJ1ZygiQ2hlY2tpbmcgVGV4UGFyYW1ldGVyOiBh
IHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIi
KTsKKwordGVzdENhc2VzID0KKyAgWyB7dGFyZ2V0OiAweDBERTAsIC8vIEdMX1RFWFRVUkVfMUQK
KyAgICAgcG5hbWU6IGdsLlRFWFRVUkVfV1JBUF9ULAorICAgICBwYXJhbTogZ2wuUkVQRUFULAor
ICAgICBleHBlY3RlZEVycm9yOiBnbC5JTlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRF
WFRVUkVfMkQsCisgICAgIHBuYW1lOiAweDgxM0EsIC8vIEdMX1RFWFRVUkVfTUlOX0xPRAorICAg
ICBwYXJhbTogMCwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7
dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAgICBwbmFtZTogZ2wuVEVYVFVSRV9XUkFQX1QsCisg
ICAgIHBhcmFtOiAweDI5MDAsIC8vIEdMX0NMQU1QCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklO
VkFMSURfRU5VTX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgcG5hbWU6IGds
LlRFWFRVUkVfV1JBUF9ULAorICAgICBwYXJhbTogZ2wuUkVQRUFULAorICAgICBleHBlY3RlZEVy
cm9yOiBnbC5OT19FUlJPUn0gXTsKKworZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRlc3RDYXNlcy5s
ZW5ndGg7ICsraWkpCisgICAgdGVzdFRleFBhcmFtZXRlcih0ZXN0Q2FzZXNbaWldKTsKKworZGVi
dWcoIkNoZWNraW5nIEdldFRleFBhcmFtZXRlcjogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZh
bGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyIik7CisKK3Rlc3RDYXNlcyA9CisgIFsge3Rh
cmdldDogMHgwREUwLCAvLyBHTF9URVhUVVJFXzFECisgICAgIHBuYW1lOiBnbC5URVhUVVJFX1dS
QVBfVCwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0
OiBnbC5URVhUVVJFXzJELAorICAgICBwbmFtZTogMHg4MTNBLCAvLyBHTF9URVhUVVJFX01JTl9M
T0QKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0OiBn
bC5URVhUVVJFXzJELAorICAgICBwbmFtZTogZ2wuVEVYVFVSRV9XUkFQX1QsCisgICAgIGV4cGVj
dGVkRXJyb3I6IGdsLk5PX0VSUk9SfSBdOworCitmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGVzdENh
c2VzLmxlbmd0aDsgKytpaSkKKyAgICB0ZXN0R2V0VGV4UGFyYW1ldGVyKHRlc3RDYXNlc1tpaV0p
OworCitkZWJ1ZygiQ2hlY2tpbmcgQ29weVRleEltYWdlMkQ6IGEgc2V0IG9mIGlucHV0cyB0aGF0
IGFyZSB2YWxpZCBpbiBHTCBidXQgaW52YWxpZCBpbiBHTEVTMiIpOworCit2YXIgY29sb3JCdWZm
ZXIgPSBudWxsOwordmFyIGZibyA9IG51bGw7CisKK3Nob3VsZEJlTm9uTnVsbCgiZmJvID0gZ2wu
Y3JlYXRlRnJhbWVidWZmZXIoKSIpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVS
LCBmYm8pOworc2hvdWxkQmVOb25OdWxsKCJjb2xvckJ1ZmZlciA9IGdsLmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpIik7CitnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZFUiwgY29sb3JCdWZm
ZXIpOworZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9S
X0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJCVUZGRVIsIGNvbG9yQnVmZmVyKTsKK3Nob3VsZEJlKCJn
bC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CisKK3Rlc3RDYXNlcyA9CisgIFsge3Rhcmdl
dDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgY29sb3JCdWZmZXJGb3JtYXQ6IGdsLlJHQjU2NSwKKyAg
ICAgaW50ZXJuYWxmb3JtYXQ6IDB4ODA1NCwgLy8gR0xfUkdCMTYKKyAgICAgYm9yZGVyOiAwLAor
ICAgICBleHBlY3RlZEVycm9yOiBnbC5JTlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRF
WFRVUkVfMkQsCisgICAgIGNvbG9yQnVmZmVyRm9ybWF0OiBnbC5SR0I1NjUsCisgICAgIGludGVy
bmFsZm9ybWF0OiBnbC5SR0JBLAorICAgICBib3JkZXI6IDEsCisgICAgIGV4cGVjdGVkRXJyb3I6
IGdsLklOVkFMSURfVkFMVUV9LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIGNv
bG9yQnVmZmVyRm9ybWF0OiBnbC5SR0I1NjUsCisgICAgIGludGVybmFsZm9ybWF0OiBnbC5SR0JB
LAorICAgICBib3JkZXI6IDAsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfT1BFUkFU
SU9OfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAgICBjb2xvckJ1ZmZlckZvcm1h
dDogZ2wuUkdCNTY1LAorICAgICBpbnRlcm5hbGZvcm1hdDogZ2wuUkdCLAorICAgICBib3JkZXI6
IDAsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLk5PX0VSUk9SfSBdOworCitmb3IgKHZhciBpaSA9
IDA7IGlpIDwgdGVzdENhc2VzLmxlbmd0aDsgKytpaSkKKyAgICB0ZXN0Q29weVRleEltYWdlMkQo
dGVzdENhc2VzW2lpXSk7CisKK2RlYnVnKCJDaGVja2luZyBDb3B5VGV4U3ViSW1hZ2UyRDogYSBz
ZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBpbnZhbGlkIGluIEdMRVMyIik7
CisKK3Rlc3RDYXNlcyA9CisgIFsge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgY29sb3JC
dWZmZXJGb3JtYXQ6IGdsLlJHQjVfQTEsCisgICAgIGludGVybmFsZm9ybWF0OiBnbC5SR0JBLAor
ICAgICBpbml0VGV4OiB0cnVlLAorICAgICBleHBlY3RlZEVycm9yOiBnbC5OT19FUlJPUn0sCisg
ICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgY29sb3JCdWZmZXJGb3JtYXQ6IGdsLlJH
QjU2NSwKKyAgICAgaW50ZXJuYWxmb3JtYXQ6IGdsLlJHQkEsCisgICAgIGluaXRUZXg6IGZhbHNl
LAorICAgICBleHBlY3RlZEVycm9yOiBnbC5JTlZBTElEX09QRVJBVElPTn0gXTsKKworZm9yICh2
YXIgaWkgPSAwOyBpaSA8IHRlc3RDYXNlcy5sZW5ndGg7ICsraWkpCisgICAgdGVzdENvcHlUZXhT
dWJJbWFnZTJEKHRlc3RDYXNlc1tpaV0pOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57828</attachid>
            <date>2010-06-03 16:13:58 -0700</date>
            <delta_ts>2010-06-11 16:19:27 -0700</delta_ts>
            <desc>revised patch: fix the getError() mistake.</desc>
            <filename>tex.patch</filename>
            <type>text/plain</type>
            <size>37109</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDMyNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDUtMjcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWYWxpZGF0
ZSAqdGV4KiBmdW5jdGlvbnMgaW5wdXQgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gRVMyIGNvbmZv
cm1hbmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
ODE0NQorCisgICAgICAgIFRlc3Q6IGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbnB1dC12YWxpZGF0
aW9uLmh0bWwKKworICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJGb3JtYXQp
OiBHZXQgY29sb3IgYnVmZmVyIGludGVybmFsZm9ybWF0LgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaDogRGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KTogRGVhbCB3aXRoIG1heCB0ZXggdW5pdHMgYW5k
IG1heCB0ZXh0dXJlIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvcHlUZXhJbWFnZTJEKTogVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJh
c2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
UGFyYW1ldGVyZik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhQYXJhbWV0ZXJpKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhhbmRsZU5QT1RUZXh0dXJlcyk6IERlYWwgd2l0aCBt
YXggdGV4IHVuaXRzLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c1RleEludGVybmFsZm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKTogQ2hlY2sgd2hl
dGhlciB0aGUgdGV4dHVyZSBmb3JtYXQgYW5kIGZyYW1lYnVmZmVyIGNvbG9yIGJ1ZmZlciBpbnRl
cm5hbGZvcm1hdCBjb21iaW5hdGlvbiBpcyB2YWxpZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4dHVyZUJpbmRpbmcpOiBnZXQgdGhlIGN1cnJlbnQgYm91
bmQgdGV4dHVyZSBmb3IgZ2l2ZW4gdGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKTogVmFsaWRhdGUgaW5w
dXQgZm9ybWF0L3R5cGUgZm9yICp0ZXgqIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyk6IFZhbGlkYXRl
IGlucHV0IHBhcmFtZXRlcnMgZm9yICp0ZXgqIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyKTogQmFzZSBmdW5jdGlvbiBmb3Ig
dGV4UGFyYW1ldGVyaSBhbmQgdGV4UGFyYW1ldGVyZi4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaDogRGVhbCB3aXRoIG1heCB0ZXggdW5pdHMuCisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VGV4dHVyZTo6V2ViR0xUZXh0dXJlKTogQ2FjaGUgaW50ZXJuYWxmb3JtYXQuCisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xUZXh0dXJlOjpzZXRJbnRlcm5hbGZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRl
eHR1cmU6OmdldEludGVybmFsZm9ybWF0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5jcHA6IGludGVybmFsZm9ybWF0IGFuZCBmb3JtYXQgbmVlZCB0byBi
ZSB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpleHRyYWN0
SW1hZ2VEYXRhKToKKwogMjAxMC0wNS0yNyAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gNjAzMTEpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
Nyw2ICs4NywyNCBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6Om9uQXR0YWNoZWRPYmplY3RDCiAg
ICAgICAgIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgV2Vi
R0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKQoreworICAgIGlmIChvYmplY3Qo
KSAmJiBtX2NvbG9yQXR0YWNobWVudCAmJiBtX2NvbG9yQXR0YWNobWVudC0+b2JqZWN0KCkpIHsK
KyAgICAgICAgaWYgKG1fY29sb3JBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGZvcm1hdCA9IChyZWludGVycHJldF9jYXN0PFdlYkdMUmVu
ZGVyYnVmZmVyKj4obV9jb2xvckF0dGFjaG1lbnQpKS0+Z2V0SW50ZXJuYWxmb3JtYXQoKTsKKyAg
ICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBNDoKKyAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVf
QTE6CisgICAgICAgICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOworICAg
ICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNTY1OgorICAgICAgICAgICAgICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKG1fY29sb3JBdHRhY2htZW50LT5pc1RleHR1cmUoKSkKKyAgICAgICAgICAgIHJl
dHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0YWNobWVudCkp
LT5nZXRJbnRlcm5hbGZvcm1hdCgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBX
ZWJHTEZyYW1lYnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQog
ewogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlRnJhbWVidWZmZXIo
b2JqZWN0KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZp
c2lvbiA2MDMxMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gY2xlYXIgdW4taW5pdGlhbGl6ZWQgcmVuZGVyYnVmZmVycy4KICAgICAgICAgdm9pZCBv
bkF0dGFjaGVkT2JqZWN0Q2hhbmdlKENhbnZhc09iamVjdCopOwogCisgICAgICAgIHVuc2lnbmVk
IGxvbmcgZ2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAg
V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICAgICAgCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZp
c2lvbiA2MDMxMSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIldlYkdMVW5p
Zm9ybUxvY2F0aW9uLmgiCiAKICNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05MywxNSArOTQs
MjkgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbgogICAgICwgbV91
bnBhY2tBbGlnbm1lbnQoNCkKIHsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKKworICAgIGludCBu
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
Jm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6
ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKwogICAgIGludCBudW1WZXJ0ZXhBdHRy
aWJzID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZudW1WZXJ0ZXhBdHRyaWJzKTsKICAgICBtX21heFZlcnRleEF0
dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJzOworCiAgICAgaW50IGltcGxlbWVudGF0aW9uQ29sb3JS
ZWFkRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CiAgICAgbV9jb250ZXh0LT5nZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JN
QVQsICZpbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCk7CiAgICAgbV9pbXBsZW1lbnRhdGlv
bkNvbG9yUmVhZEZvcm1hdCA9IGltcGxlbWVudGF0aW9uQ29sb3JSZWFkRm9ybWF0OwogICAgIGlu
dCBpbXBsZW1lbnRhdGlvbkNvbG9yUmVhZFR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURTsKICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpJ
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUsICZpbXBsZW1lbnRhdGlvbkNvbG9yUmVhZFR5
cGUpOwogICAgIG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRUeXBlID0gaW1wbGVtZW50YXRpb25D
b2xvclJlYWRUeXBlOworCisgICAgaW50IG1heFRleHR1cmVTaXplID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbWF4
VGV4dHVyZVNpemUpOworICAgIG1fbWF4VGV4dHVyZVNpemUgPSBtYXhUZXh0dXJlU2l6ZTsKKyAg
ICBpbnQgbWF4Q3ViZU1hcFRleHR1cmVTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbWF4Q3Vi
ZU1hcFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IG1heEN1YmVN
YXBUZXh0dXJlU2l6ZTsKKwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICBj
cmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKICAgICBtX2NvbnRleHQtPnJlc2hhcGUo
Y2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CkBAIC00MzMsMzYgKzQ0OCw0
NSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlCiAKIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwg
bG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHks
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikK
IHsKLSAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXggPSAwOwotICAgIHN3aXRjaCAodGFyZ2V0
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgdGV4
ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlMkRCaW5kaW5n
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9h
Y3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnModGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJuOwogICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkKKyAgICAgICAgICAgICYmICFp
c1RleEludGVybmFsZm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCkp
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KICAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWln
aHQpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorICAgIH0KKyAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIC8vIEZJWE1F
OiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBz
aG91bGQgYmUgZXhlY3V0ZWQuCisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSBnZXRUZXh0dXJlQmlu
ZGluZyh0YXJnZXQpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIGlm
ICh0ZXggJiYgIWxldmVsKSAvLyBvbmx5IGZvciBsZXZlbCAwCiAgICAgICAgICAgICB0ZXgtPnNl
dFNpemUodGFyZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgaWYgKHRleCkKKyAgICAgICAg
ICAgIHRleC0+c2V0SW50ZXJuYWxmb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgIH0KLSAgICBt
X2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZyAmJiB0ZXgpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0
Q2hhbmdlKHRleC5nZXQoKSk7CisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFj
aGVkT2JqZWN0Q2hhbmdlKHRleCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9mZnNl
dCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQogeworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gZ2V0VGV4dHVyZUJpbmRpbmcodGFyZ2V0KTsKKyAgICAgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSAmJiB0ZXgK
KyAgICAgICAgICAgICYmICFpc1RleEludGVybmFsZm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlv
blZhbGlkKHRleC0+Z2V0SW50ZXJuYWxmb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpKSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogICAgIG1fY29udGV4dC0+Y29w
eVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KQEAg
LTE4MDUsMzQgKzE4MjksMjcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdl
MkRCYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5
cGUsIHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPFdlYkdM
VGV4dHVyZT4gdGV4ID0gMDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21f
YWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1f
dGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgICAgICBicmVhazsKLSAgICB9CiAgICAgLy8gRklY
TUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7Cisg
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJl
dHVybjsKICAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewogICAgICAgICBpZiAobGV2ZWwg
JiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKICAgICAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0ZXggJiYg
IWxldmVsKSAvLyBvbmx5IGZvciBsZXZlbCAwCi0gICAgICAgICAgICB0ZXgtPnNldFNpemUodGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IGdldFRleHR1cmVCaW5kaW5nKHRhcmdldCk7CisgICAgaWYgKCFpc0dMRVMy
Q29tcGxpYW50KCkpIHsKKyAgICAgICAgaWYgKHRleCAmJiAhbGV2ZWwpIC8vIG9ubHkgZm9yIGxl
dmVsIDAKKyAgICAgICAgICAgIHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICBpZiAodGV4KQorICAgICAgICAgICAgdGV4LT5zZXRJbnRlcm5hbGZvcm1hdChpbnRl
cm5hbGZvcm1hdCk7CisgICAgfQogICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiB0ZXgp
Ci0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKHRl
eC5nZXQoKSk7CisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0
Q2hhbmdlKHRleCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApA
QCAtMTk1NywzNCArMTk3NCw1OSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1h
Z2UyRCh1CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNp
Z25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9h
dCBwYXJhbWYsIGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKIHsKLSAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwogICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7CiAgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IDA7Ci0gICAgICAg
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpCisgICAgICAgIHN3
aXRjaCAodGFyZ2V0KSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQ6CiAgICAgICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0
XS5tX3RleHR1cmUyREJpbmRpbmc7Ci0gICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgogICAgICAgICAgICAg
dGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1h
cEJpbmRpbmc7Ci0gICAgICAgIGlmICh0ZXgpCi0gICAgICAgICAgICB0ZXgtPnNldFBhcmFtZXRl
cmYocG5hbWUsIHBhcmFtKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUjoKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
QUdfRklMVEVSOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfVDoKKyAgICAgICAgICAgIGlmIChpc0Zsb2F0ICYmIHBhcmFtZiAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVB
VAorICAgICAgICAgICAgICAgIHx8ICFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJP
UkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkgeworICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX2Nv
bnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0ZXgpIHsKKyAg
ICAgICAgICAgIGlmIChpc0Zsb2F0KQorICAgICAgICAgICAgICAgIHRleC0+c2V0UGFyYW1ldGVy
ZihwbmFtZSwgcGFyYW1mKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0ZXgt
PnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtaSk7CisgICAgICAgIH0KICAgICB9CisgICAgaWYg
KGlzRmxvYXQpCisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCBwYXJhbWYpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHBhcmFtaSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmYodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pCit7CisgICAgdGV4UGFyYW1l
dGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsKK30KKwogdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFt
ZSwgaW50IHBhcmFtKQogewotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBu
YW1lLCBwYXJhbSk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgUmVm
UHRyPFdlYkdMVGV4dHVyZT4gdGV4ID0gMDsKLSAgICAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgZWxzZSBp
ZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKQotICAgICAg
ICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJl
Q3ViZU1hcEJpbmRpbmc7Ci0gICAgICAgIGlmICh0ZXgpCi0gICAgICAgICAgICB0ZXgtPnNldFBh
cmFtZXRlcmkocG5hbWUsIHBhcmFtKTsKLSAgICB9Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZh
bHNlKTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNl
KHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2ln
bmVkIHlvZmZzZXQsCkBAIC0xOTkzLDYgKzIwMzUsOSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4U3ViSW1hZ2UyCiB7CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFu
eSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9IDA7CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNG
b3JtYXRBbmRUeXBlKGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybjsKKwogICAgIG1fY29u
dGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KQEAgLTMwNDIsOCArMzA4Nyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpoYW5kbGVOUE9UVGUKICAgICBpZiAoaXNHTEVTMkNvbXBsaWFudCgpKQogICAg
ICAgICByZXR1cm47CiAgICAgYm9vbCByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKLSAgICAvLyBG
SVhNRTogYWN0aXZlIHRleHR1cmUgdW5pdCBsaW1pdHMgc2hvdWxkIGJlIHF1ZXJpZXMgaW5zdGVh
ZCBvZiAzMi4KLSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaWkgPSAwOyBpaSA8IDMyOyArK2lpKSB7
CisgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyAr
K2lpKSB7CiAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0dXJlMkRCaW5kaW5n
ICYmIG1fdGV4dHVyZVVuaXRzW2lpXS5tX3RleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNr
VGV4dHVyZSgpCiAgICAgICAgICAgICB8fCBtX3RleHR1cmVVbml0c1tpaV0ubV90ZXh0dXJlQ3Vi
ZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5n
LT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoKSkgewogICAgICAgICAgICAgaWYgKGlpICE9IG1fYWN0
aXZlVGV4dHVyZVVuaXQpIHsKQEAgLTMwOTcsNiArMzE0MSwxMjMgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUZhbGxiYQogICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIDApOwogfQogCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNUZXhJbnRlcm5hbGZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25W
YWxpZCh1bnNpZ25lZCBsb25nIHRleEludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZyBjb2xvckJ1ZmZlckZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yQnVm
ZmVyRm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgICAg
IGlmICh0ZXhJbnRlcm5hbGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEEpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCOgorICAgICAgICBpZiAodGV4SW50ZXJuYWxmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRQorICAgICAgICAgICAgfHwgdGV4SW50ZXJuYWxmb3JtYXQgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXZWJHTFRleHR1cmUqIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4dHVyZUJpbmRpbmcodW5zaWduZWQgbG9uZyB0YXJn
ZXQpCit7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4ID0gMDsKKyAgICBzd2l0Y2ggKHRh
cmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAg
IHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmlu
ZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgaWYgKHRleCAmJiB0ZXgtPm9iamVjdCgpKQorICAgICAgICByZXR1
cm4gdGV4LmdldCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZSh1bnNpZ25lZCBsb25nIGZvcm1hdCwg
dW5zaWduZWQgbG9uZyB0eXBlKQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVN
SU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNQYXJh
bWV0ZXJzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnRl
cm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgaWYgKGlzR0xFUzJDb21wbGlh
bnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdo
dCA8IDAgfHwgbGV2ZWwgPCAwKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAod2lkdGggPiBtX21heFRleHR1cmVTaXpl
IHx8IGhlaWdodCA+IG1fbWF4VGV4dHVyZVNpemUgfHwgbGV2ZWwgPiBsb2cyKG1fbWF4VGV4dHVy
ZVNpemUpKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKHdpZHRoICE9IGhl
aWdodCB8fCB3aWR0aCA+IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplIHx8IGxldmVsID4gbG9nMiht
X21heEN1YmVNYXBUZXh0dXJlU2l6ZSkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Zm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgbV9jb250
ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdmFsaWRhdGVUZXhG
dW5jRm9ybWF0QW5kVHlwZShmb3JtYXQsIHR5cGUpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MDMxMSkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1MywxMiArMzUzLDE1IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAgICAgICAgIFJl
ZlB0cjxXZWJHTFRleHR1cmU+IG1fdGV4dHVyZTJEQmluZGluZzsKICAgICAgICAgICAgIFJlZlB0
cjxXZWJHTFRleHR1cmU+IG1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nOwogICAgICAgICB9OwotICAg
ICAgICBUZXh0dXJlVW5pdFN0YXRlIG1fdGV4dHVyZVVuaXRzWzMyXTsKKyAgICAgICAgVmVjdG9y
PFRleHR1cmVVbml0U3RhdGU+IG1fdGV4dHVyZVVuaXRzOwogICAgICAgICB1bnNpZ25lZCBsb25n
IG1fYWN0aXZlVGV4dHVyZVVuaXQ7CiAKICAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9i
bGFja1RleHR1cmUyRDsKICAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1
cmVDdWJlTWFwOwogCisgICAgICAgIGxvbmcgbV9tYXhUZXh0dXJlU2l6ZTsKKyAgICAgICAgbG9u
ZyBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKKwogICAgICAgICBpbnQgbV9wYWNrQWxpZ25tZW50
OwogICAgICAgICBpbnQgbV91bnBhY2tBbGlnbm1lbnQ7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bV9pbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdDsKQEAgLTM4OSw2ICszOTIsMjkgQEAgY2xh
c3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAgICAgIHZvaWQgY3JlYXRlRmFsbGJhY2tCbGFja1Rl
eHR1cmVzMXgxKCk7CiAKKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBjb3B5VGV4e1N1
Yn1JbWFnZSwgY2hlY2sgd2hldGhlciB0aGUgaW50ZXJuYWxmb3JtYXQKKyAgICAgICAgLy8gYW5k
IHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVmZmVy
IGNvbWJpbmF0aW9uCisgICAgICAgIC8vIGlzIHZhbGlkLgorICAgICAgICBib29sIGlzVGV4SW50
ZXJuYWxmb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQodW5zaWduZWQgbG9uZyB0ZXhJ
bnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sb3JCdWZmZXJGb3JtYXQpOworCisg
ICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGN1cnJlbnQgYm91bmQgdGV4dHVy
ZS4KKyAgICAgICAgV2ViR0xUZXh0dXJlKiBnZXRUZXh0dXJlQmluZGluZyh1bnNpZ25lZCBsb25n
IHRhcmdldCk7CisKKyAgICAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZv
cm1hdC90eXBlIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAgICAgLy8g
R2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZh
bGlkLgorICAgICAgICBib29sIHZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUodW5zaWduZWQg
bG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisKKyAgICAgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7
U3VifUltYWdlLgorICAgICAgICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBhbmQgcmV0dXJuIGZhbHNl
IGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5j
UGFyYW1ldGVycyh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHdpZHRoLCBsb25n
IGhlaWdodCwgbG9uZyBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKTsKKworICAgICAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleFBhcmFtZXRlcmYgYW5kIHRleFBhcmFtZXRlcmku
CisgICAgICAgIHZvaWQgdGV4UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJhbWksIGludCBwYXJhbWYsIGJvb2wgaXNGbG9hdCk7CisK
ICAgICAgICAgZnJpZW5kIGNsYXNzIFdlYkdMU3RhdGVSZXN0b3JlcjsKICAgICB9OwogCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA2MDMxMSkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NiArNDUsNyBAQCBXZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluCiAgICAg
LCBtX21hZ0ZpbHRlcihHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKQogICAgICwgbV93cmFwUyhH
cmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQogICAgICwgbV93cmFwVChHcmFwaGljc0NvbnRleHQz
RDo6UkVQRUFUKQorICAgICwgbV9pbnRlcm5hbGZvcm1hdCgwKQogICAgICwgbV9pc05QT1QoZmFs
c2UpCiAgICAgLCBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZShmYWxzZSkKIHsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaAkocmV2aXNpb24gNjAzMTEpCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRQYXJhbWV0ZXJmKHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGZsb2F0IHBhcmFtKTsKICAgICAgICAgdm9pZCBzZXRTaXplKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKIAorICAgICAgICB2
b2lkIHNldEludGVybmFsZm9ybWF0KHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQpIHsgbV9p
bnRlcm5hbGZvcm1hdCA9IGludGVybmFsZm9ybWF0OyB9CisgICAgICAgIHVuc2lnbmVkIGxvbmcg
Z2V0SW50ZXJuYWxmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsZm9ybWF0OyB9CisK
ICAgICAgICAgc3RhdGljIGJvb2wgaXNOUE9UKHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAKICAgICAg
ICAgYm9vbCBpc05QT1QoKSBjb25zdCB7IHJldHVybiBtX2lzTlBPVDsgfQpAQCAtNzcsNiArODAs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCBtX3dyYXBTOwogICAgICAgICBp
bnQgbV93cmFwVDsKIAorICAgICAgICB1bnNpZ25lZCBsb25nIG1faW50ZXJuYWxmb3JtYXQ7CisK
ICAgICAgICAgdW5zaWduZWQgbV93aWR0aFs2XTsKICAgICAgICAgdW5zaWduZWQgbV9oZWlnaHRb
Nl07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuY3BwCShyZXZpc2lvbiA2MDMxMSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw4IEBAIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmV4dHJhY3RJbWFnZURhdGEKICAgICAgICAgICAgICAgICAg
ICAgIGltYWdlLT5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgIGZsaXBZLAogICAgICAg
ICAgICAgICAgICAgICAgYWxwaGFPcCk7Ci0gICAgKmludGVybmFsRm9ybWF0ID0gKGhhc0FscGhh
Q2hhbm5lbCA/IFJHQkEgOiBSR0IpOworICAgIC8vIEZvciBHTEVTMiB0ZXggZnVuY3Rpb25zLCBp
bnRlcm5hbGZvcm1hdCBoYXMgdG8gbWF0Y2ggZm9ybWF0LgorICAgICppbnRlcm5hbEZvcm1hdCA9
ICpmb3JtYXQ7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwMzI0
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTAtMDUtMjcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBWYWxpZGF0ZSAqdGV4KiBmdW5j
dGlvbnMgaW5wdXQgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gRVMyIGNvbmZvcm1hbmNlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODE0NQorCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1p
bWFnZS5odG1sOiBJbnRlcm5hbGZvcm1hdCBhbmQgZm9ybWF0IG5lZWQgdG8gYmUgdGhlIHNhbWUu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWlucHV0LXZhbGlkYXRpb24tZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW5wdXQtdmFs
aWRhdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxMC0wNS0yNyAgSnVsaWUgUGFyZW50ICA8anBhcmVu
dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtaW1hZ2Uu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1h
Z2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLWltYWdlLmh0bWwJKHJldmlzaW9uIDYwMzExKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQt
d2l0aC1pbWFnZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyArMTE3LDcgQEAgZnVuY3Rp
b24gcnVuT25lSXRlcmF0aW9uKGltYWdlLCB1c2VUZXhTdQogICAgIC8vIFVwbG9hZCB0aGUgaW1h
Z2UgaW50byB0aGUgdGV4dHVyZQogICAgIGlmICh1c2VUZXhTdWJJbWFnZTJEKSB7CiAgICAgICAg
IC8vIEluaXRpYWxpemUgdGhlIHRleHR1cmUgdG8gYmxhY2sgZmlyc3QKLSAgICAgICAgZ2wudGV4
SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0IsIGltYWdlLndpZHRoLCBpbWFnZS5oZWln
aHQsIDAsCisgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwg
aW1hZ2Uud2lkdGgsIGltYWdlLmhlaWdodCwgMCwKICAgICAgICAgICAgICAgICAgICAgICBnbC5S
R0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKICAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChn
bC5URVhUVVJFXzJELCAwLCAwLCAwLCBpbWFnZSwgZmxpcFksIGZhbHNlKTsKICAgICB9IGVsc2Ug
ewpAQCAtMTI4LDcgKzEyOCw2IEBAIGZ1bmN0aW9uIHJ1bk9uZUl0ZXJhdGlvbihpbWFnZSwgdXNl
VGV4U3UKICAgICBnbC51bmlmb3JtMWkodGV4dHVyZUxvYywgMCk7CiAgICAgLy8gRHJhdyB0aGUg
dHJpYW5nbGVzCiAgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpOwotCiAgICAg
Ly8gUmVhZCBiYWNrIHRoZSByZW5kZXJpbmcgcmVzdWx0cwogICAgIHZhciB3aWR0aCA9IDMyOwog
ICAgIHZhciBoZWlnaHQgPSAzMjsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3RleC1pbnB1dC12YWxpZGF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW5wdXQtdmFsaWRhdGlvbi1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW5wdXQt
dmFsaWRhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKK1Zh
bGlkYXRlIHRleCBmdW5jdGlvbnMgaW5wdXQgcGFyYW1ldGVycworCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKK1BBU1MgZ2wgPSBjcmVhdGUzRENvbnRleHQoKSBpcyBub24tbnVsbC4KK1BB
U1MgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpIGlzIG5vbi1udWxsLgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitDaGVja2luZyBUZXhJbWFnZTJEOiBhIHNldCBvZiBpbnB1dHMg
dGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK0NoZWNraW5nIFRl
eFN1YkltYWdlMkQ6IGEgc2V0IG9mIGlucHV0cyB0aGF0IGFyZSB2YWxpZCBpbiBHTCBidXQgaW52
YWxpZCBpbiBHTEVTMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorQ2hlY2tpbmcgVGV4
UGFyYW1ldGVyOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFs
aWQgaW4gR0xFUzIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGVycm9yCitDaGVja2luZyBHZXRUZXhQYXJhbWV0ZXI6IGEgc2V0IG9mIGlucHV0
cyB0aGF0IGFyZSB2YWxpZCBpbiBHTCBidXQgaW52YWxpZCBpbiBHTEVTMgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IKK1BBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBlcnJvcgorQ2hlY2tpbmcgQ29weVRleEltYWdlMkQ6IGEgc2V0IG9mIGlucHV0
cyB0aGF0IGFyZSB2YWxpZCBpbiBHTCBidXQgaW52YWxpZCBpbiBHTEVTMgorUEFTUyBmYm8gPSBn
bC5jcmVhdGVGcmFtZWJ1ZmZlcigpIGlzIG5vbi1udWxsLgorUEFTUyBjb2xvckJ1ZmZlciA9IGds
LmNyZWF0ZVJlbmRlcmJ1ZmZlcigpIGlzIG5vbi1udWxsLgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wu
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJf
Q09NUExFVEUKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVC
VUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
ZXJyb3IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVU
RQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGVycm9yCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
aXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgor
Q2hlY2tpbmcgQ29weVRleFN1YkltYWdlMkQ6IGEgc2V0IG9mIGlucHV0cyB0aGF0IGFyZSB2YWxp
ZCBpbiBHTCBidXQgaW52YWxpZCBpbiBHTEVTMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5P
X0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlz
IGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBlcnJvcgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIp
IGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZXJyb3IK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW5wdXQtdmFsaWRhdGlvbi5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleC1pbnB1dC12
YWxpZGF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC90ZXgtaW5wdXQtdmFsaWRhdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2
NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0Pgor
Cit2YXIgZ2wgPSBudWxsOwordmFyIHRleCA9IG51bGw7Cit2YXIgZXJyb3IgPSAwOworCitmdW5j
dGlvbiB0ZXN0VGV4SW1hZ2UyRCh0ZXN0Q2FzZSkKK3sKKyAgICB2YXIgbGV2ZWwgPSAwOworICAg
IHZhciB3aWR0aCA9IDE2OworICAgIHZhciBoZWlnaHQgPSAxNjsKKyAgICBnbC50ZXhJbWFnZTJE
KHRlc3RDYXNlLnRhcmdldCwgbGV2ZWwsIHRlc3RDYXNlLmludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCB0ZXN0Q2FzZS5ib3JkZXIsIHRlc3RDYXNlLmZvcm1hdCwgdGVzdENhc2UudHlwZSwg
bnVsbCk7CisgICAgZXJyb3IgPSB0ZXN0Q2FzZS5leHBlY3RlZEVycm9yOworICAgIHNob3VsZEJl
KCJnbC5nZXRFcnJvcigpIiwgImVycm9yIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RUZXhTdWJJbWFn
ZTJEKHRlc3RDYXNlKQoreworICAgIHZhciBsZXZlbCA9IDA7CisgICAgdmFyIHhvZmZzZXQgPSAw
OworICAgIHZhciB5b2Zmc2V0ID0gMDsKKyAgICB2YXIgd2lkdGggPSAxNjsKKyAgICB2YXIgaGVp
Z2h0ID0gMTY7CisgICAgdmFyIGFycmF5ID0gbmV3IFdlYkdMVW5zaWduZWRCeXRlQXJyYXkod2lk
dGggKiBoZWlnaHQgKiA0KTsKKyAgICBnbC50ZXhTdWJJbWFnZTJEKHRlc3RDYXNlLnRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHRlc3RDYXNlLmZvcm1hdCwg
dGVzdENhc2UudHlwZSwgYXJyYXkpOworICAgIGVycm9yID0gdGVzdENhc2UuZXhwZWN0ZWRFcnJv
cjsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJlcnJvciIpOworfQorCitmdW5jdGlv
biB0ZXN0VGV4UGFyYW1ldGVyKHRlc3RDYXNlKQoreworICAgIGVycm9yID0gdGVzdENhc2UuZXhw
ZWN0ZWRFcnJvcjsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKHRlc3RDYXNlLnRhcmdldCwgdGVzdENh
c2UucG5hbWUsIHRlc3RDYXNlLnBhcmFtKTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIs
ICJlcnJvciIpOworICAgIGdsLnRleFBhcmFtZXRlcmYodGVzdENhc2UudGFyZ2V0LCB0ZXN0Q2Fz
ZS5wbmFtZSwgdGVzdENhc2UucGFyYW0pOworICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwg
ImVycm9yIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RHZXRUZXhQYXJhbWV0ZXIodGVzdENhc2UpCit7
CisgICAgZXJyb3IgPSB0ZXN0Q2FzZS5leHBlY3RlZEVycm9yOworICAgIGdsLmdldFRleFBhcmFt
ZXRlcih0ZXN0Q2FzZS50YXJnZXQsIHRlc3RDYXNlLnBuYW1lKTsKKyAgICBzaG91bGRCZSgiZ2wu
Z2V0RXJyb3IoKSIsICJlcnJvciIpOworfQorCitmdW5jdGlvbiB0ZXN0Q29weVRleEltYWdlMkQo
dGVzdENhc2UpCit7CisgICAgdmFyIGxldmVsID0gMDsKKyAgICB2YXIgeCA9IDA7CisgICAgdmFy
IHkgPSAwOworICAgIHZhciB3aWR0aCA9IDE2OworICAgIHZhciBoZWlnaHQgPSAxNjsKKworICAg
IGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCB0ZXN0Q2FzZS5jb2xvckJ1
ZmZlckZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCki
LCAiZ2wuTk9fRVJST1IiKTsKKyAgICBzaG91bGRCZSgiZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhnbC5GUkFNRUJVRkZFUikiLCAiZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUiKTsKKworICAgIGds
LmNvcHlUZXhJbWFnZTJEKHRlc3RDYXNlLnRhcmdldCwgbGV2ZWwsIHRlc3RDYXNlLmludGVybmFs
Zm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0ZXN0Q2FzZS5ib3JkZXIpOworICAgIGVycm9y
ID0gdGVzdENhc2UuZXhwZWN0ZWRFcnJvcjsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIs
ICJlcnJvciIpOworfQorCitmdW5jdGlvbiB0ZXN0Q29weVRleFN1YkltYWdlMkQodGVzdENhc2Up
Cit7CisgICAgdmFyIGxldmVsID0gMDsKKyAgICB2YXIgeCA9IDA7CisgICAgdmFyIHkgPSAwOwor
ICAgIHZhciB3aWR0aCA9IDE2OworICAgIHZhciBoZWlnaHQgPSAxNjsKKyAgICB2YXIgeG9mZnNl
dCA9IDA7CisgICAgdmFyIHlvZmZzZXQgPSAwOworICAgIHZhciBib3JkZXIgPSAwOworCisgICAg
Z2wucmVuZGVyYnVmZmVyU3RvcmFnZShnbC5SRU5ERVJCVUZGRVIsIHRlc3RDYXNlLmNvbG9yQnVm
ZmVyRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIs
ICJnbC5OT19FUlJPUiIpOworICAgIHNob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZFUl9DT01QTEVURSIpOworCisgICAgaWYg
KHRlc3RDYXNlLmluaXRUZXgpIHsKKyAgICAgICAgZ2wuY29weVRleEltYWdlMkQodGVzdENhc2Uu
dGFyZ2V0LCBsZXZlbCwgdGVzdENhc2UuaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7CisgICAgICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VS
Uk9SIik7CisgICAgfQorCisgICAgZ2wuY29weVRleFN1YkltYWdlMkQodGVzdENhc2UudGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXJy
b3IgPSB0ZXN0Q2FzZS5leHBlY3RlZEVycm9yOworICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigp
IiwgImVycm9yIik7Cit9CisKK2Rlc2NyaXB0aW9uKCJWYWxpZGF0ZSB0ZXggZnVuY3Rpb25zIGlu
cHV0IHBhcmFtZXRlcnMiKTsKKworc2hvdWxkQmVOb25OdWxsKCJnbCA9IGNyZWF0ZTNEQ29udGV4
dCgpIik7CitzaG91bGRCZU5vbk51bGwoInRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKSIpOworZ2wu
YmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKK3Nob3VsZEJlKCJnbC5nZXRFcnJvcigp
IiwgImdsLk5PX0VSUk9SIik7CisKK2RlYnVnKCJDaGVja2luZyBUZXhJbWFnZTJEOiBhIHNldCBv
ZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIiKTsKKwor
dmFyIHRlc3RDYXNlcyA9CisgIFsge3RhcmdldDogMHg4MDY0LCAvLyBHTF9QUk9YWV9URVhUVVJF
XzJECisgICAgIGludGVybmFsZm9ybWF0OiBnbC5SR0JBLAorICAgICBib3JkZXI6IDAsCisgICAg
IGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgZXhw
ZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhUVVJFXzJE
LAorICAgICBpbnRlcm5hbGZvcm1hdDogMHgxOTAzLCAvLyBHTF9SRUQKKyAgICAgYm9yZGVyOiAw
LAorICAgICBmb3JtYXQ6IDB4MTkwMywgLy8gR0xfUkVECisgICAgIHR5cGU6IGdsLlVOU0lHTkVE
X0JZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURfRU5VTX0sCisgICAge3Rhcmdl
dDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgaW50ZXJuYWxmb3JtYXQ6IGdsLlJHQkEsCisgICAgIGJv
cmRlcjogMSwKKyAgICAgZm9ybWF0OiBnbC5SR0JBLAorICAgICB0eXBlOiBnbC5VTlNJR05FRF9C
WVRFLAorICAgICBleHBlY3RlZEVycm9yOiBnbC5JTlZBTElEX1ZBTFVFfSwKKyAgICB7dGFyZ2V0
OiBnbC5URVhUVVJFXzJELAorICAgICBpbnRlcm5hbGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgYm9y
ZGVyOiAwLAorICAgICBmb3JtYXQ6IGdsLlJHQiwKKyAgICAgdHlwZTogZ2wuVU5TSUdORURfQllU
RSwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9PUEVSQVRJT059LAorICAgIHt0YXJn
ZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIGludGVybmFsZm9ybWF0OiBnbC5SR0JBLAorICAgICBi
b3JkZXI6IDAsCisgICAgIGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgdHlwZTogZ2wuQllURSwKKyAg
ICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhU
VVJFXzJELAorICAgICBpbnRlcm5hbGZvcm1hdDogZ2wuUkdCQSwKKyAgICAgYm9yZGVyOiAwLAor
ICAgICBmb3JtYXQ6IGdsLlJHQkEsCisgICAgIHR5cGU6IGdsLlVOU0lHTkVEX0JZVEUsCisgICAg
IGV4cGVjdGVkRXJyb3I6IGdsLk5PX0VSUk9SfSBdOworCitmb3IgKHZhciBpaSA9IDA7IGlpIDwg
dGVzdENhc2VzLmxlbmd0aDsgKytpaSkKKyAgICB0ZXN0VGV4SW1hZ2UyRCh0ZXN0Q2FzZXNbaWld
KTsKKworZGVidWcoIkNoZWNraW5nIFRleFN1YkltYWdlMkQ6IGEgc2V0IG9mIGlucHV0cyB0aGF0
IGFyZSB2YWxpZCBpbiBHTCBidXQgaW52YWxpZCBpbiBHTEVTMiIpOworCit0ZXN0Q2FzZXMgPQor
ICBbIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIGZvcm1hdDogMHgxOTAzLCAvLyBHTF9S
RUQKKyAgICAgdHlwZTogZ2wuVU5TSUdORURfQllURSwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wu
SU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAgICBmb3JtYXQ6
IGdsLlJHQkEsCisgICAgIHR5cGU6IGdsLkJZVEUsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklO
VkFMSURfRU5VTX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgZm9ybWF0OiBn
bC5SR0JBLAorICAgICB0eXBlOiBnbC5VTlNJR05FRF9CWVRFLAorICAgICBleHBlY3RlZEVycm9y
OiBnbC5OT19FUlJPUn0gXTsKKworZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRlc3RDYXNlcy5sZW5n
dGg7ICsraWkpCisgICAgdGVzdFRleFN1YkltYWdlMkQodGVzdENhc2VzW2lpXSk7CisKK2RlYnVn
KCJDaGVja2luZyBUZXhQYXJhbWV0ZXI6IGEgc2V0IG9mIGlucHV0cyB0aGF0IGFyZSB2YWxpZCBp
biBHTCBidXQgaW52YWxpZCBpbiBHTEVTMiIpOworCit0ZXN0Q2FzZXMgPQorICBbIHt0YXJnZXQ6
IDB4MERFMCwgLy8gR0xfVEVYVFVSRV8xRAorICAgICBwbmFtZTogZ2wuVEVYVFVSRV9XUkFQX1Qs
CisgICAgIHBhcmFtOiBnbC5SRVBFQVQsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURf
RU5VTX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgcG5hbWU6IDB4ODEzQSwg
Ly8gR0xfVEVYVFVSRV9NSU5fTE9ECisgICAgIHBhcmFtOiAwLAorICAgICBleHBlY3RlZEVycm9y
OiBnbC5JTlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIHBu
YW1lOiBnbC5URVhUVVJFX1dSQVBfVCwKKyAgICAgcGFyYW06IDB4MjkwMCwgLy8gR0xfQ0xBTVAK
KyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9FTlVNfSwKKyAgICB7dGFyZ2V0OiBnbC5U
RVhUVVJFXzJELAorICAgICBwbmFtZTogZ2wuVEVYVFVSRV9XUkFQX1QsCisgICAgIHBhcmFtOiBn
bC5SRVBFQVQsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLk5PX0VSUk9SfSBdOworCitmb3IgKHZh
ciBpaSA9IDA7IGlpIDwgdGVzdENhc2VzLmxlbmd0aDsgKytpaSkKKyAgICB0ZXN0VGV4UGFyYW1l
dGVyKHRlc3RDYXNlc1tpaV0pOworCitkZWJ1ZygiQ2hlY2tpbmcgR2V0VGV4UGFyYW1ldGVyOiBh
IHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4gR0wgYnV0IGludmFsaWQgaW4gR0xFUzIi
KTsKKwordGVzdENhc2VzID0KKyAgWyB7dGFyZ2V0OiAweDBERTAsIC8vIEdMX1RFWFRVUkVfMUQK
KyAgICAgcG5hbWU6IGdsLlRFWFRVUkVfV1JBUF9ULAorICAgICBleHBlY3RlZEVycm9yOiBnbC5J
TlZBTElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIHBuYW1lOiAw
eDgxM0EsIC8vIEdMX1RFWFRVUkVfTUlOX0xPRAorICAgICBleHBlY3RlZEVycm9yOiBnbC5JTlZB
TElEX0VOVU19LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVfMkQsCisgICAgIHBuYW1lOiBnbC5U
RVhUVVJFX1dSQVBfVCwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuTk9fRVJST1J9IF07CisKK2Zv
ciAodmFyIGlpID0gMDsgaWkgPCB0ZXN0Q2FzZXMubGVuZ3RoOyArK2lpKQorICAgIHRlc3RHZXRU
ZXhQYXJhbWV0ZXIodGVzdENhc2VzW2lpXSk7CisKK2RlYnVnKCJDaGVja2luZyBDb3B5VGV4SW1h
Z2UyRDogYSBzZXQgb2YgaW5wdXRzIHRoYXQgYXJlIHZhbGlkIGluIEdMIGJ1dCBpbnZhbGlkIGlu
IEdMRVMyIik7CisKK3ZhciBjb2xvckJ1ZmZlciA9IG51bGw7Cit2YXIgZmJvID0gbnVsbDsKKwor
c2hvdWxkQmVOb25OdWxsKCJmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpIik7CitnbC5iaW5k
RnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZibyk7CitzaG91bGRCZU5vbk51bGwoImNvbG9y
QnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVmZmVyKCkiKTsKK2dsLmJpbmRSZW5kZXJidWZmZXIo
Z2wuUkVOREVSQlVGRkVSLCBjb2xvckJ1ZmZlcik7CitnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJFTkRFUkJVRkZFUiwg
Y29sb3JCdWZmZXIpOworc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsK
KwordGVzdENhc2VzID0KKyAgWyB7dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAgICBjb2xvckJ1
ZmZlckZvcm1hdDogZ2wuUkdCNTY1LAorICAgICBpbnRlcm5hbGZvcm1hdDogMHg4MDU0LCAvLyBH
TF9SR0IxNgorICAgICBib3JkZXI6IDAsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFMSURf
RU5VTX0sCisgICAge3RhcmdldDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgY29sb3JCdWZmZXJGb3Jt
YXQ6IGdsLlJHQjU2NSwKKyAgICAgaW50ZXJuYWxmb3JtYXQ6IGdsLlJHQkEsCisgICAgIGJvcmRl
cjogMSwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuSU5WQUxJRF9WQUxVRX0sCisgICAge3Rhcmdl
dDogZ2wuVEVYVFVSRV8yRCwKKyAgICAgY29sb3JCdWZmZXJGb3JtYXQ6IGdsLlJHQjU2NSwKKyAg
ICAgaW50ZXJuYWxmb3JtYXQ6IGdsLlJHQkEsCisgICAgIGJvcmRlcjogMCwKKyAgICAgZXhwZWN0
ZWRFcnJvcjogZ2wuSU5WQUxJRF9PUEVSQVRJT059LAorICAgIHt0YXJnZXQ6IGdsLlRFWFRVUkVf
MkQsCisgICAgIGNvbG9yQnVmZmVyRm9ybWF0OiBnbC5SR0I1NjUsCisgICAgIGludGVybmFsZm9y
bWF0OiBnbC5SR0IsCisgICAgIGJvcmRlcjogMCwKKyAgICAgZXhwZWN0ZWRFcnJvcjogZ2wuTk9f
RVJST1J9IF07CisKK2ZvciAodmFyIGlpID0gMDsgaWkgPCB0ZXN0Q2FzZXMubGVuZ3RoOyArK2lp
KQorICAgIHRlc3RDb3B5VGV4SW1hZ2UyRCh0ZXN0Q2FzZXNbaWldKTsKKworZGVidWcoIkNoZWNr
aW5nIENvcHlUZXhTdWJJbWFnZTJEOiBhIHNldCBvZiBpbnB1dHMgdGhhdCBhcmUgdmFsaWQgaW4g
R0wgYnV0IGludmFsaWQgaW4gR0xFUzIiKTsKKwordGVzdENhc2VzID0KKyAgWyB7dGFyZ2V0OiBn
bC5URVhUVVJFXzJELAorICAgICBjb2xvckJ1ZmZlckZvcm1hdDogZ2wuUkdCNV9BMSwKKyAgICAg
aW50ZXJuYWxmb3JtYXQ6IGdsLlJHQkEsCisgICAgIGluaXRUZXg6IHRydWUsCisgICAgIGV4cGVj
dGVkRXJyb3I6IGdsLk5PX0VSUk9SfSwKKyAgICB7dGFyZ2V0OiBnbC5URVhUVVJFXzJELAorICAg
ICBjb2xvckJ1ZmZlckZvcm1hdDogZ2wuUkdCNTY1LAorICAgICBpbnRlcm5hbGZvcm1hdDogZ2wu
UkdCQSwKKyAgICAgaW5pdFRleDogZmFsc2UsCisgICAgIGV4cGVjdGVkRXJyb3I6IGdsLklOVkFM
SURfT1BFUkFUSU9OfSBdOworCitmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGVzdENhc2VzLmxlbmd0
aDsgKytpaSkKKyAgICB0ZXN0Q29weVRleFN1YkltYWdlMkQodGVzdENhc2VzW2lpXSk7CisKK3N1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>