<?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>44309</bug_id>
          
          <creation_ts>2010-08-19 16:48:55 -0700</creation_ts>
          <short_desc>Hook up ANGLE with chromium --in-process-webgl port</short_desc>
          <delta_ts>2010-09-29 18:23:50 -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>
          <dependson>45004</dependson>
          <blocked>46650</blocked>
    
    <blocked>46677</blocked>
    
    <blocked>46863</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>alokp</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>267058</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-19 16:48:55 -0700</bug_when>
    <thetext>Currently test_shell is still using --in-process-webgl port.  In theory for webgl, we shouldn&apos;t need &quot;#ifdef GL_ES&quot; around precision modifier.  However, currently we still have to do so for chromium to pass the tests.

Once we hook up ANGEL with the port, we should be able to remove the &quot;#ifdef GL_ES&quot; both in khronos and in LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271669</commentid>
    <comment_count>1</comment_count>
      <attachid>65965</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-30 15:05:13 -0700</bug_when>
    <thetext>Created attachment 65965
patch

Refactor the ANGLEWebKitBridge class a little bit.  Also, fix some issues in the Mac port in ANGLE shader validation stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271672</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-30 15:06:17 -0700</bug_when>
    <thetext>Attachment 65965 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:662:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:974:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271689</commentid>
    <comment_count>3</comment_count>
      <attachid>65968</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-30 15:19:39 -0700</bug_when>
    <thetext>Created attachment 65968
revised patch: fix style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271825</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-30 18:09:34 -0700</bug_when>
    <thetext>Attachment 65968 did not build on chromium:
Build output: http://queues.webkit.org/results/3816186</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271841</commentid>
    <comment_count>5</comment_count>
      <attachid>65993</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-30 18:30:02 -0700</bug_when>
    <thetext>Created attachment 65993
revised patch: fix the filename case issue in WebCore.gypi</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271880</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-30 20:18:52 -0700</bug_when>
    <thetext>Attachment 65993 did not build on chromium:
Build output: http://queues.webkit.org/results/3816190</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272230</commentid>
    <comment_count>7</comment_count>
      <attachid>66078</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-31 11:30:03 -0700</bug_when>
    <thetext>Created attachment 66078
revised patch: adapting to newer version of ANGLE interface</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272493</commentid>
    <comment_count>8</comment_count>
      <attachid>66078</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-31 16:41:14 -0700</bug_when>
    <thetext>Comment on attachment 66078
revised patch: adapting to newer version of ANGLE interface

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

&gt; WebCore/ChangeLog:-10
&gt; -2010-08-31  Jian Li  &lt;jianli@chromium.org&gt;
&gt; +2010-08-30  Zhenyao Mo  &lt;zmo@google.com&gt;
&gt;  
&gt; -        Reviewed by Darin Fisher.
&gt; +        Reviewed by NOBODY (OOPS!).
&gt;  
&gt; -        Improve BlobBuilder to combine adjacent strings.
&gt; -        https://bugs.webkit.org/post_bug.cgi
&gt; +        Hook up ANGLE with chromium --in-process-webgl port
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=44309
&gt;  
&gt; -        * fileapi/BlobBuilder.cpp:
&gt; -        (WebCore::addTwoCStrings):
&gt; -        (WebCore::BlobBuilder::append):
This part of the diff looks bogus.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272513</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-31 16:59:23 -0700</bug_when>
    <thetext>Will revise and fix this change log issue once the newer version of ANGLE lands.  Cancel the review request for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284755</commentid>
    <comment_count>10</comment_count>
      <attachid>68767</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-24 15:15:29 -0700</bug_when>
    <thetext>Created attachment 68767
revised patch

So I didn&apos;t use AngleWebKitBridge because the Angle under webkit is out-of-sync again.  Besides, AngleWebKitBridge isn&apos;t very efficient and I feel optimizing it should be a separate patch.

Per discussion with alokp@google, we don&apos;t call ShFinalize per canvas exit, but per process exit, so I will add it to renderer exit code in a chromium patch.  This patch alone should work because the angle resource will be released anyway when the renderer process exits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284932</commentid>
    <comment_count>11</comment_count>
      <attachid>68767</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-24 20:14:16 -0700</bug_when>
    <thetext>Comment on attachment 68767
revised patch

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

This mostly looks good; I&apos;m marking it r- because of a few relatively minor issues. Please correct me if I&apos;m wrong about the need for the null checks, but I&apos;m quite sure strlen(NULL) crashes rather than returning 0.

The introduction of an ANGLE dependency on WebCore means that API changes to the shader validator are going to be fairly difficult to handle. I&apos;m going to notify people about this.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:689
&gt; +    int compileStatus;
&gt; +    glGetShaderiv(shader, GL_COMPILE_STATUS, &amp;compileStatus);
&gt; +    // ASSERT that ANGLE generated GLSL will be accepted by OpenGL
&gt; +    ASSERT(compileStatus == GL_TRUE);

It would be safer to handle the case that the OpenGL driver rejects the shader for some reason. While it&apos;s unlikely, even though we&apos;re configuring the ANGLE shader validator with the OpenGL driver&apos;s parameters like the maximum number of uniforms, the OpenGL driver might count things differently than ANGLE and therefore fail to compile the shader because it exceeds resource constraints. (Although it&apos;s more likely that the OpenGL driver will eliminate unused uniforms or varyings and therefore use fewer resources than ANGLE counts.) I think this block is OK in debug mode but the whole thing should be in an #ifndef NDEBUG.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:958
&gt; +            *value = static_cast&lt;int&gt;(entry.isValid);

Per above, I think this should delegate to glGetShaderiv if entry.isValid.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:962
&gt; +                *value = strlen(entry.log);

Guard against the case that entry.log is NULL.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:969
&gt; +            *value = strlen(entry.source);

Guard against the case that entry.source is NULL.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:987
&gt; +            WebString res = WebString::fromUTF8(entry.log, strlen(entry.log));

Guard against the case that entry.log is NULL.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1014
&gt; +        WebString res = WebString::fromUTF8(entry.source, strlen(entry.source));

Guard against the case that entry.source is NULL.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1152
&gt; +        glShaderSource(shader, 1, &amp;string, &amp;length);

The else clause should be an error condition, and synthesize either INVALID_VALUE or INVALID_OPERATION (probably the latter).

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1358
&gt; +    getIntegerv(0x8DFB, // MAX_VERTEX_UNIFORM_VECTORS

Please define &quot;const int MAX_VERTEX_UNIFORM_VECTORS=0x8DFB&quot; at the top of the file and use it here and in getIntegerv.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1361
&gt; +    getIntegerv(0x8DFC, // MAX_VARYING_VECTORS

Same here.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1370
&gt; +    getIntegerv(0x8DFD, // MAX_FRAGMENT_UNIFORM_VECTORS

Same here.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.h:330
&gt; +    class ShaderSourceEntry {

If all members are supposed to be public then this should be a struct, not a class. Note that a struct can have constructors and destructors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285690</commentid>
    <comment_count>12</comment_count>
      <attachid>68767</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2010-09-27 13:01:58 -0700</bug_when>
    <thetext>Comment on attachment 68767
revised patch

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

&gt; WebKit/chromium/WebKit.gyp:79
&gt; +                &apos;&lt;(chromium_src_dir)/third_party/angle/src/build_angle.gyp:translator_common&apos;,

It should depend on translator_glsl or translator_hlsl. translator_common is abstract with no backend.

&gt; WebKit/chromium/WebKit.gyp:88
&gt; +                &apos;&lt;(chromium_src_dir)/third_party/angle/include/GLSLANG&apos;,

I think it should just be &quot;&lt;(chromium_src_dir)/third_party/angle/include&quot;. ShaderLang.h should be included as GLSLANG/ShaderLang.h.

&gt;&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:689
&gt;&gt; +    ASSERT(compileStatus == GL_TRUE);
&gt; 
&gt; It would be safer to handle the case that the OpenGL driver rejects the shader for some reason. While it&apos;s unlikely, even though we&apos;re configuring the ANGLE shader validator with the OpenGL driver&apos;s parameters like the maximum number of uniforms, the OpenGL driver might count things differently than ANGLE and therefore fail to compile the shader because it exceeds resource constraints. (Although it&apos;s more likely that the OpenGL driver will eliminate unused uniforms or varyings and therefore use fewer resources than ANGLE counts.) I think this block is OK in debug mode but the whole thing should be in an #ifndef NDEBUG.

I agree with Ken. ASSERT is too string here. Logging the info that ANGLE generated GLSL failed to compile would useful though.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1351
&gt; +    if (!ShInitialize())

Even though ShInitialize is a no-op if called multiple times, it will be better to call it only once.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1382
&gt; +    if (m_fragmentCompiler) {

Is there something equivalent to AtExitManager in webkit? You could register ShFinalize in that case.

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1425
&gt; +    ShGetInfo(compiler, SH_OBJECT_CODE_LENGTH, &amp;length);

I am just curious what you do with the translated source. Does webkit use desktop OpenGL? I thought it just marshaled all calls to command buffer which exposes a GLES 2.0 interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285704</commentid>
    <comment_count>13</comment_count>
      <attachid>68767</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 13:24:43 -0700</bug_when>
    <thetext>Comment on attachment 68767
revised patch

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

The rest I will revise.

&gt;&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1351
&gt;&gt; +    if (!ShInitialize())
&gt; 
&gt; Even though ShInitialize is a no-op if called multiple times, it will be better to call it only once.

In order to call it only once, we need to either do it on the chromium side (in the initializing of the process), or keep an static flag to track whether it&apos;s been initialized.  Since it&apos;s no-op, I prefer to keep the ShInitialize here for safeguard purpose.

&gt;&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1382
&gt;&gt; +    if (m_fragmentCompiler) {
&gt; 
&gt; Is there something equivalent to AtExitManager in webkit? You could register ShFinalize in that case.

The process class is in chromium, and I will register ShFinalize there in another chromium patch.

&gt;&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1425
&gt;&gt; +    ShGetInfo(compiler, SH_OBJECT_CODE_LENGTH, &amp;length);
&gt; 
&gt; I am just curious what you do with the translated source. Does webkit use desktop OpenGL? I thought it just marshaled all calls to command buffer which exposes a GLES 2.0 interface.

No, WebGraphicsContext3DDefaultImpl is used for in-process-webgl and it&apos;s an alternative to command buffer; it is a wrapper around desktop gl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285712</commentid>
    <comment_count>14</comment_count>
      <attachid>68767</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 13:44:22 -0700</bug_when>
    <thetext>Comment on attachment 68767
revised patch

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

&gt;&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1152
&gt;&gt; +        glShaderSource(shader, 1, &amp;string, &amp;length);
&gt; 
&gt; The else clause should be an error condition, and synthesize either INVALID_VALUE or INVALID_OPERATION (probably the latter).

It&apos;s hard to decide whether to generate INVALID_VALUE or INVALID_OPERATION here; also, in the rare case where deleteShader is called when it&apos;s still attached to a program, the ShaderSourceEntry will be removed, yet glShaderSource call should still succeed.  For these two reasons, I pass down the call to gl driver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285726</commentid>
    <comment_count>15</comment_count>
      <attachid>68955</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 14:07:02 -0700</bug_when>
    <thetext>Created attachment 68955
revised patch: responding to kbr and alokp reviews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285729</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-27 14:10:38 -0700</bug_when>
    <thetext>Attachment 68955 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:48:  IMPLEMENTATION_COLOR_READ_FORMAT is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:49:  IMPLEMENTATION_COLOR_READ_TYPE is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:50:  MAX_VERTEX_UNIFORM_VECTORS is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:51:  MAX_VARYING_VECTORS is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:52:  MAX_FRAGMENT_UNIFORM_VECTORS is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 5 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285749</commentid>
    <comment_count>17</comment_count>
      <attachid>68955</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-27 14:29:50 -0700</bug_when>
    <thetext>Comment on attachment 68955
revised patch: responding to kbr and alokp reviews

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

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:52
&gt; +const unsigned int MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;

To make the style bot happy I guess we need to name these ImplementationColorReadFormat, etc. You can add a comment at the end of the line indicating it&apos;s the same as GL_IMPLEMENTATION_COLOR_READ_FORMAT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285759</commentid>
    <comment_count>18</comment_count>
      <attachid>68960</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 14:45:48 -0700</bug_when>
    <thetext>Created attachment 68960
revised patch: style fix

It&apos;s really important to make the style bot happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285787</commentid>
    <comment_count>19</comment_count>
      <attachid>68960</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-27 15:05:09 -0700</bug_when>
    <thetext>Comment on attachment 68960
revised patch: style fix

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

&gt; WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:48
&gt; +enum GLES2EnumType {

This could just be an unnamed enum type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285829</commentid>
    <comment_count>20</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-09-27 15:52:07 -0700</bug_when>
    <thetext>Committed r68434: &lt;http://trac.webkit.org/changeset/68434&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65965</attachid>
            <date>2010-08-30 15:05:13 -0700</date>
            <delta_ts>2010-08-30 15:19:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>angle.patch</filename>
            <type>text/plain</type>
            <size>44329</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IEFkZCBBTkdMRVdlYktpdEJyaWRnZS4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6Om9uRGV0YWNo
ZWQpOiBTaG91bGQgY2FsbCBkZWxldGUgaW5zdGVhZCBvZiBkaXJlY3RseSBzZXR0aW5nIG9iamVj
dCB0byAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwpOiBTaG91bGQgdXNlIGEg
ZGlmZmVyZW50IGZsYWcgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHByb2dyYW0gaXMgdHJ1bHkgZGVs
ZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKTogRml4
IGEgdGlueSBidWcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlk
Z2UuY3BwOiBSZWZhY3RvciB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2ViS2l0
QnJpZGdlOjpBTkdMRVdlYktpdEJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRVdlYktp
dEJyaWRnZTo6fkFOR0xFV2ViS2l0QnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2Vi
S2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBTkdM
RVdlYktpdEJyaWRnZTo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeTo6U2hhZGVyU291cmNlRW50cnkpOiBBZGQgYW4gZXh0
cmEgZmllbGQgb2YgdHlwZSBhbmQgbW92ZSBpdCBpbnRvIE1BQy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOiBVc2UgdGhlIHVwZGF0ZWQg
QU5HTEVXZWJLaXRCcmlkZ2UuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y29tcGlsZVNoYWRlcik6IEZpeCBzb21lIGlzc3Vlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UpOiBFbnRyeSBzaG91bGQgYmUgY3JlYXRlZCBpbiBj
cmVhdGVTaGFkZXIuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyaXYpOiBGaXggc29tZSBpc3N1ZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6IEZpeCBzb21lIGlzc3Vlcy4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOiBGaXggc29tZSBpc3N1ZXMu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKTogQ3Jl
YXRlIGFuIGVudHJ5LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVNoYWRlcik6IFJlbW92ZSB0aGUgZW50cnkuCisKIDIwMTAtMDgtMjcgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDY2MDc4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTI0OTIsNiArMjQ5Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvUGVuV3guY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1w
bGVGb250RGF0YVd4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJh
bnNmb3JtYXRpb25NYXRyaXhXeC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2Via2l0QnJpZGdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJraXRCcmlkZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAnLApJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAkocmV2aXNpb24gNjYwNzgpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogICAgICAgICBpZiAobV9hdHRhY2htZW50Q291bnQpCiAgICAgICAgICAgICAtLW1f
YXR0YWNobWVudENvdW50OwogICAgICAgICBpZiAoIW1fYXR0YWNobWVudENvdW50ICYmIG1fZGVs
ZXRlZCkKLSAgICAgICAgICAgIG1fb2JqZWN0ID0gMDsKKyAgICAgICAgICAgIGRlbGV0ZU9iamVj
dCgpOwogICAgIH0KICAgICB1bnNpZ25lZCBnZXRBdHRhY2htZW50Q291bnQoKSB7IHJldHVybiBt
X2F0dGFjaG1lbnRDb3VudDsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCShyZXZpc2lvbiA2NjA3OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4LDE1IEBAIFdlYkdMUHJvZ3JhbTo6V2Vi
R0xQcm9ncmFtKFdlYkdMUmVuZGVyaW4KIHZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQogewogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+ZGVsZXRlUHJvZ3JhbShvYmopOwotICAgIGlmICghb2JqZWN0KCkpIHsKLSAgICAg
ICAgaWYgKG1fdmVydGV4U2hhZGVyKQorICAgIGlmICghZ2V0QXR0YWNobWVudENvdW50KCkpIHsK
KyAgICAgICAgaWYgKG1fdmVydGV4U2hhZGVyKSB7CiAgICAgICAgICAgICBtX3ZlcnRleFNoYWRl
ci0+b25EZXRhY2hlZCgpOwotICAgICAgICBpZiAobV9mcmFnbWVudFNoYWRlcikKKyAgICAgICAg
ICAgIG1fdmVydGV4U2hhZGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9mcmFnbWVu
dFNoYWRlcikgewogICAgICAgICAgICAgbV9mcmFnbWVudFNoYWRlci0+b25EZXRhY2hlZCgpOwor
ICAgICAgICAgICAgbV9mcmFnbWVudFNoYWRlciA9IDA7CisgICAgICAgIH0KICAgICB9CiB9CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDY2MDc4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzA1LDcgKzI3MDUsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXCiAgICAgICAgICAgICBtX2N1cnJlbnRQcm9n
cmFtLT5vbkRldGFjaGVkKCk7CiAgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwog
ICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAg
ICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgIGlmIChwcm9ncmFtICYmIHByb2dyYW0tPm9iamVj
dCgpKQogICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOwogICAgIH0KICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHJldmlzaW9uIDY2MDc4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDQ3ICszMSw1OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotQU5HTEVX
ZWJLaXRCcmlkZ2U6OkFOR0xFV2ViS2l0QnJpZGdlKCkgOgotICAgIGJ1aWx0Q29tcGlsZXJzKGZh
bHNlKQorQU5HTEVXZWJLaXRCcmlkZ2U6OkFOR0xFV2ViS2l0QnJpZGdlKGNvbnN0IFRCdWlsdElu
UmVzb3VyY2UmIHJlc291cmNlcykKKyAgICA6IG1fZnJhZ21lbnRDb21waWxlcigwKQorICAgICwg
bV92ZXJ0ZXhDb21waWxlcigwKQorICAgICwgbV9idWlsdENvbXBpbGVycyhmYWxzZSkKKyAgICAs
IG1fcmVzb3VyY2VzKHJlc291cmNlcykKIHsKICAgICBTaEluaXRpYWxpemUoKTsKIH0KIAogQU5H
TEVXZWJLaXRCcmlkZ2U6On5BTkdMRVdlYktpdEJyaWRnZSgpCiB7Ci0gICAgaWYgKGJ1aWx0Q29t
cGlsZXJzKSB7CisgICAgaWYgKG1fYnVpbHRDb21waWxlcnMpIHsKICAgICAgICAgU2hEZXN0cnVj
dChtX2ZyYWdtZW50Q29tcGlsZXIpOwogICAgICAgICBTaERlc3RydWN0KG1fdmVydGV4Q29tcGls
ZXIpOwogICAgIH0KLSAgICAKICAgICBTaEZpbmFsaXplKCk7CiB9CiAKLWJvb2wgQU5HTEVXZWJL
aXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwg
QU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nKQorY29uc3QgY2hhciogQU5HTEVXZWJLaXRC
cmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5H
TEVTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB7Ci0gICAgaWYgKCFidWlsdENvbXBpbGVycykgewor
ICAgIGlmICghbV9idWlsdENvbXBpbGVycykgewogICAgICAgICBtX2ZyYWdtZW50Q29tcGlsZXIg
PSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdGcmFnbWVudCwgRVNoU3BlY1dlYkdMLCAmbV9y
ZXNvdXJjZXMpOwogICAgICAgICBtX3ZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxl
cihFU2hMYW5nVmVydGV4LCBFU2hTcGVjV2ViR0wsICZtX3Jlc291cmNlcyk7Ci0KLSAgICAgICAg
YnVpbHRDb21waWxlcnMgPSB0cnVlOworICAgICAgICBtX2J1aWx0Q29tcGlsZXJzID0gdHJ1ZTsK
ICAgICB9Ci0gICAgCi0gICAgU2hIYW5kbGUgY29tcGlsZXI7CiAKKyAgICBTaEhhbmRsZSBjb21w
aWxlcjsKICAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSEFERVJfVFlQRV9WRVJURVgpCiAgICAgICAg
IGNvbXBpbGVyID0gbV92ZXJ0ZXhDb21waWxlcjsKICAgICBlbHNlCiAgICAgICAgIGNvbXBpbGVy
ID0gbV9mcmFnbWVudENvbXBpbGVyOworICAgIEFTU0VSVChjb21waWxlcik7CiAKLSAgICBjb25z
dCBjaGFyKiBjb25zdCBzaGFkZXJTb3VyY2VTdHJpbmdzW10gPSB7IHNoYWRlclNvdXJjZSB9Owor
ICAgIGJvb2wgdmFsaWRhdGVTdWNjZXNzID0gU2hDb21waWxlKGNvbXBpbGVyLCAmc2hhZGVyU291
cmNlLCAxLCBFU2hPcHROb25lLCBFRGVidWdPcEludGVybWVkaWF0ZSk7CisgICAgaWYgKCF2YWxp
ZGF0ZVN1Y2Nlc3MpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBTaEdldE9iamVjdENv
ZGUoY29tcGlsZXIpOworfQogCi0gICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUo
Y29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIEVTaE9wdE5vbmUsIEVEZWJ1Z09wSW50
ZXJtZWRpYXRlKTsKK2NvbnN0IGNoYXIqIEFOR0xFV2ViS2l0QnJpZGdlOjpnZXRTaGFkZXJJbmZv
TG9nKEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlKQoreworICAgIGlmICghbV9idWlsdENvbXBp
bGVycykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0g
U2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyKTsKLSAgICBzaGFkZXJWYWxpZGF0aW9uTG9nID0gU2hH
ZXRJbmZvTG9nKGNvbXBpbGVyKTsKKyAgICBTaEhhbmRsZSBjb21waWxlcjsKKyAgICBpZiAoc2hh
ZGVyVHlwZSA9PSBTSEFERVJfVFlQRV9WRVJURVgpCisgICAgICAgIGNvbXBpbGVyID0gbV92ZXJ0
ZXhDb21waWxlcjsKKyAgICBlbHNlCisgICAgICAgIGNvbXBpbGVyID0gbV9mcmFnbWVudENvbXBp
bGVyOworICAgIEFTU0VSVChjb21waWxlcik7CiAKLSAgICByZXR1cm4gdmFsaWRhdGVTdWNjZXNz
OworICAgIHJldHVybiBTaEdldEluZm9Mb2coY29tcGlsZXIpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCShyZXZpc2lvbiA2
NjA3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsMTEgQEAKICNpZm5kZWYgQU5HTEVXZWJLaXRCcmlk
Z2VfaAogI2RlZmluZSBBTkdMRVdlYktpdEJyaWRnZV9oCiAKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCisjZWxzZQogI2luY2x1ZGUgIkFOR0xFL1NoYWRl
ckxhbmcuaCIKKyNlbmRpZgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC00MCwyMCArNDQsMTkgQEAgZW51bSBBTkdMRVNoYWRl
clR5cGUgewogCiBjbGFzcyBBTkdMRVdlYktpdEJyaWRnZSB7CiBwdWJsaWM6Ci0KLSAgICBBTkdM
RVdlYktpdEJyaWRnZSgpOworICAgIEFOR0xFV2ViS2l0QnJpZGdlKGNvbnN0IFRCdWlsdEluUmVz
b3VyY2UmIHJlc291cmNlcyk7CiAgICAgfkFOR0xFV2ViS2l0QnJpZGdlKCk7Ci0gICAgCi0gICAg
dm9pZCBzZXRSZXNvdXJjZXMoVEJ1aWx0SW5SZXNvdXJjZSByZXNvdXJjZXMpIHsgbV9yZXNvdXJj
ZXMgPSByZXNvdXJjZXM7IH0KLSAgICAKLSAgICBib29sIHZhbGlkYXRlU2hhZGVyU291cmNlKGNv
bnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFN0cmlu
ZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nKTsK
IAotcHJpdmF0ZToKKyAgICAvLyBJZiBzdWNjZWVkLCByZXR1cm4gdGhlIHRyYW5zbGF0ZWQgc2hh
ZGVyIHNvdXJjZTsgaWYgZmFpbHVyZSwgcmV0dXJuIDAuCisgICAgY29uc3QgY2hhciogdmFsaWRh
dGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUg
c2hhZGVyVHlwZSk7CisgICAgLy8gR2V0IHRoZSBpbmZvIGxvZyBmcm9tIGxhc3QgU2hDb21waWxl
KCkgZm9yIHRoZSBnaXZlbiBzaGFkZXIgdHlwZS4KKyAgICBjb25zdCBjaGFyKiBnZXRTaGFkZXJJ
bmZvTG9nKEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlKTsKIAorcHJpdmF0ZToKICAgICBTaEhh
bmRsZSBtX2ZyYWdtZW50Q29tcGlsZXI7CiAgICAgU2hIYW5kbGUgbV92ZXJ0ZXhDb21waWxlcjsK
IAotICAgIGJvb2wgYnVpbHRDb21waWxlcnM7CisgICAgYm9vbCBtX2J1aWx0Q29tcGlsZXJzOwog
CiAgICAgVEJ1aWx0SW5SZXNvdXJjZSBtX3Jlc291cmNlczsKIH07CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2NjA3OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODEyLDE1ICs4MTIsMjQgQEAgcHVibGljOgogCiAgICAgaW50IG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CiAKLSAgICB0eXBlZGVmIHN0cnVjdCB7IAotICAgICAg
ICBTdHJpbmcgc291cmNlOyAKLSAgICAgICAgU3RyaW5nIGxvZzsgCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIGNsYXNzIFNoYWRlclNvdXJjZUVudHJ5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNo
YWRlclNvdXJjZUVudHJ5KCkKKyAgICAgICAgICAgIDogdHlwZSgwKQorICAgICAgICAgICAgLCBp
c1ZhbGlkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgbG9u
ZyB0eXBlOworICAgICAgICBTdHJpbmcgc291cmNlOworICAgICAgICBTdHJpbmcgbG9nOwogICAg
ICAgICBib29sIGlzVmFsaWQ7Ci0gICAgfSBTaGFkZXJTb3VyY2VFbnRyeTsKLSAgICBIYXNoTWFw
PFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5PiBtX3NoYWRlclNvdXJjZU1hcDsK
KyAgICB9OwogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29t
cGlsZXI7CisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJj
ZUVudHJ5PiBTaGFkZXJTb3VyY2VNYXA7CisgICAgU2hhZGVyU291cmNlTWFwIG1fc2hhZGVyU291
cmNlTWFwOworCisgICAgT3duUHRyPEFOR0xFV2ViS2l0QnJpZGdlPiBtX2NvbXBpbGVyOwogCiAg
ICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0
ZXhBcnJheTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2NjA3OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xODMsMjggKzE4MywyNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAgICAgfQogICAgIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotCi0gICAg
VEJ1aWx0SW5SZXNvdXJjZSBBTkdMRVJlc291cmNlczsKLQotICAgIEFOR0xFUmVzb3VyY2VzLm1h
eFZlcnRleEF0dHJpYnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IDA7Ci0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5H
TEVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lm1heFZhcnlpbmdWZWN0b3JzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3Jz
KTsKLSAgICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0g
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBn
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZBTkdMRVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNv
dXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMubWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyk7Ci0KKyAgICBUQnVpbHRJblJlc291cmNlIGFuZ2xlUmVzb3VyY2Vz
OworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMgPSAwOworICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZhbmdsZVJlc291cmNl
cy5tYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTLCAmYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3Rv
cnMpOworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJmFuZ2xlUmVz
b3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJmFuZ2xlUmVzb3VyY2VzLm1heFZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5tYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VV
bml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmYW5nbGVSZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGFuZ2xlUmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAwOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAm
YW5nbGVSZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CiAgICAgLy8gQWx3YXlz
IHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMubWF4RHJhd0J1ZmZl
cnMgPSAxOwotICAgIAotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2Vz
KTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb21waWxl
ciA9IG5ldyBBTkdMRVdlYktpdEJyaWRnZShhbmdsZVJlc291cmNlcyk7CiAgICAgCiAgICAgOjpn
bEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICAgICA6OmdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKQEAgLTYxNyw1NCArNjEzLDQwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbG9yTWFzayhib29sIHIKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKICAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwot
ICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOwotCi0gICAgZ2xHZXRTaGFkZXJpdihzaGFk
ZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKLSAgICAKLSAgICBpZiAoR0xzaGFkZXJU
eXBlID09IFZFUlRFWF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9W
RVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKLSAg
ICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgotCi0gICAgSGFzaE1hcDxQbGF0Zm9y
bTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkgeworICAgICAgICAvLyBFaXRoZXIgaXQgaXMgbm90IGEgdmFsaWQgc2hh
ZGVyIG9yIHNoYWRlclNvdXJjZSgpIGhhc24ndCBiZWVuIGNhbGxlZC4KKyAgICAgICAgLy8gUGFz
c2luZyBkb3duIHRvIGdsIGRyaXZlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBlcnJvci4KKyAg
ICAgICAgOjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyKTsKICAgICAgICAgcmV0dXJu
OwotCisgICAgfQogICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OwogCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRl
ckluZm9Mb2c7Ci0KLSAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVy
U291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKLQotICAgIGVudHJ5LmxvZyA9IHNoYWRlcklu
Zm9Mb2c7Ci0gICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7Ci0KLSAgICBpZiAoIWlzVmFsaWQp
Ci0gICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBm
b3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAorICAgIEFOR0xFU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlOworICAgIEFTU0VSVChlbnRyeS50eXBlID09IEdMX1ZFUlRFWF9T
SEFERVIgfHwgZW50cnkudHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpOworICAgIGlmIChlbnRy
eS50eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJf
VFlQRV9WRVJURVg7CisgICAgZWxzZQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVf
RlJBR01FTlQ7CiAKLSAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2UubGVuZ3RoKCk7CisgICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclNv
dXJjZSA9IG1fY29tcGlsZXItPnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4
KCkuZGF0YSgpLCBzaGFkZXJUeXBlKTsKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Up
IHsKKyAgICAgICAgZW50cnkubG9nID0gbV9jb21waWxlci0+Z2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXJUeXBlKTsKKyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47
IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBp
bGluZyB0cmFuc2xhdGVkIHNvdXJjZQorICAgIH0gZWxzZQorICAgICAgICBlbnRyeS5pc1ZhbGlk
ID0gdHJ1ZTsKIAotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0g
dHJhbnNsYXRlZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRl
ZFNoYWRlclB0ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICAKLSAgICA6
OmdsU2hhZGVyU291cmNlKChHTHVpbnQpIHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIs
ICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsKLSAgICAKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRl
ckxlbmd0aCA9IHN0cmxlbih0cmFuc2xhdGVkU2hhZGVyU291cmNlKTsKKyAgICA6OmdsU2hhZGVy
U291cmNlKChHTHVpbnQpIHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsICZ0cmFu
c2xhdGVkU2hhZGVyTGVuZ3RoKTsKICAgICA6OmdsQ29tcGlsZVNoYWRlcigoR0x1aW50KSBzaGFk
ZXIpOwotICAgIAotICAgIGludCBHTENvbXBpbGVTdWNjZXNzOwotICAgIAotICAgIDo6Z2xHZXRT
aGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vz
cyk7Ci0gICAgCisKKyAgICBpbnQgZ2xDb21waWxlU3VjY2VzczsKKyAgICA6OmdsR2V0U2hhZGVy
aXYoKEdMdWludClzaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAmZ2xDb21waWxlU3VjY2Vzcyk7
CiAgICAgLy8gQVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRl
ZCBieSBPcGVuR0wKLSAgICBBU1NFUlQoR0xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKKyAg
ICBBU1NFUlQoZ2xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCkBAIC0xMDQy
LDE1ICsxMDI0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IobG9uZyB4LCAK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAg
ICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBTaGFkZXJTb3VyY2VF
bnRyeSBlbnRyeTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVy
U291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBBU1NFUlQo
cmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKTsKKyAgICByZXN1bHQtPnNlY29uZC5z
b3VyY2UgPSBzdHJpbmc7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5j
KHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKQEAgLTEz
OTEsOTAgKzEzNjksNjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVy
UAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
c2hhZGVyKTsKLSAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCi0g
ICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9y
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0
Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKLSAgICAgICAgY2FzZSBT
SEFERVJfVFlQRToKLSAgICAgICAgICAgIC8vIExldCBPcGVuR0wgaGFuZGxlIHRoZXNlLgotICAg
ICAgICAKLSAgICAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIHBuYW1l
LCB2YWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIENPTVBJTEVfU1RB
VFVTOgotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkg
ewotICAgICAgICAgICAgICAgICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0aWNfY2FzdDxpbnQ+KHJlc3VsdC0+c2Vjb25kLmlz
VmFsaWQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJ
TkZPX0xPR19MRU5HVEg6Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgKCp2YWx1ZSkgPSAwOworICAgIFNoYWRlclNv
dXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIp
OworICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAg
U2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBHTF9DT01QSUxFX1NUQVRVUzoKKyAgICAgICAgICAg
ICp2YWx1ZSA9IHN0YXRpY19jYXN0PGludD4oZW50cnkuaXNWYWxpZCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgR0xfSU5GT19MT0dfTEVOR1RIOgorICAgICAgICAgICAgaWYg
KCFlbnRyeS5pc1ZhbGlkKSB7CisgICAgICAgICAgICAgICAgKnZhbHVlID0gZW50cnkubG9nLmxl
bmd0aCgpOworICAgICAgICAgICAgICAgIGlmICgqdmFsdWUpCisgICAgICAgICAgICAgICAgICAg
ICgqdmFsdWUpKys7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVy
KS5sZW5ndGgoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgU0hBREVSX1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRl
clNvdXJjZShzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgY2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgICAg
ICp2YWx1ZSA9IGVudHJ5LnNvdXJjZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICgqdmFsdWUp
CisgICAgICAgICAgICAgICAgKCp2YWx1ZSkrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQogICAgIH0KKworICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIHBuYW1l
LCB2YWx1ZSk7CiB9CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xv
ZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQogICAg
IGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBHTGludCBsZW5ndGg7Ci0gICAgOjpn
bEdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3Ro
KTsKLQotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAKKyAgICBT
aGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAg
ICAgICAgcmV0dXJuICIiOwotCi0gICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0
LT5zZWNvbmQ7Ci0KLSAgICAgaWYgKGVudHJ5LmlzVmFsaWQpIHsKLSAgICAgICAgIEdMaW50IGxl
bmd0aDsKLSAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIEdMX0lORk9f
TE9HX0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAgICAgICAgIEdMc2l6ZWkgc2l6ZTsKLSAgICAgICAg
IEdMY2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7Ci0gICAgICAgICBp
ZiAoIWluZm8pCi0gICAgICAgICAgICAgcmV0dXJuICIiOwotCi0gICAgICAgICA6OmdsR2V0U2hh
ZGVySW5mb0xvZygoR0x1aW50KSBzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOwotCi0gICAg
ICAgICBTdHJpbmcgcyhpbmZvKTsKLSAgICAgICAgIGZhc3RGcmVlKGluZm8pOwotICAgICAgICAg
cmV0dXJuIHM7Ci0gICAgIH0KLSAgICAgZWxzZSB7Ci0gICAgICAgICByZXR1cm4gZW50cnkubG9n
OwotICAgICB9CisgICAgICAgIHJldHVybiAiIjsKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50
cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICBpZiAoZW50cnkuaXNWYWxpZCkgeworICAgICAgICBH
TGludCBsZW5ndGg7CisgICAgICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KXNoYWRlciwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICAgICAgR0xzaXplaSBzaXplOworICAgICAg
ICBHTGNoYXIqIGluZm8gPSAoR0xjaGFyKikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgICAgICBp
ZiAoIWluZm8pCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIDo6Z2xHZXRTaGFkZXJJ
bmZvTG9nKChHTHVpbnQpc2hhZGVyLCBsZW5ndGgsICZzaXplLCBpbmZvKTsKKyAgICAgICAgQVNT
RVJUKGxlbmd0aCA9IHNpemUgKyAxKTsKKyAgICAgICAgU3RyaW5nIHMoaW5mbyk7CisgICAgICAg
IGZhc3RGcmVlKGluZm8pOworICAgICAgICByZXR1cm4gczsKKyAgICB9IGVsc2UgeworICAgICAg
ICByZXR1cm4gZW50cnkubG9nOworICAgIH0KIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgQVNTRVJU
KHNoYWRlcik7Ci0KICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBIYXNo
TWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwotCisgICAgU2hhZGVyU291cmNlTWFw
OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAg
aWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuICIi
OwogCkBAIC0xNTg1LDcgKzE1MzcsMTQgQEAgdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVJlbmRlcgogdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcih1bnNp
Z25lZCBsb25nIHR5cGUpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAg
IHJldHVybiBnbENyZWF0ZVNoYWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJB
R01FTlRfU0hBREVSIDogR0xfVkVSVEVYX1NIQURFUik7CisgICAgdW5zaWduZWQgc2hhZGVyID0g
Z2xDcmVhdGVTaGFkZXIodHlwZSk7CisgICAgaWYgKHNoYWRlcikgeworICAgICAgICBBU1NFUlQo
dHlwZSA9PSBHTF9WRVJURVhfU0hBREVSIHx8IHR5cGUgPT0gR0xfRlJBR01FTlRTSEFERVIpOwor
ICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKKyAgICAgICAgZW50cnkudHlwZSA9IHR5
cGU7CisgICAgICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKKyAgICB9
CisgICAgcmV0dXJuIHNoYWRlcjsKIH0KIAogdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZVRleHR1cmUoKQpAQCAtMTYyNCw2ICsxNTgzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlU2hhZGVyKHVucwogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
ICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgIGlmICg6OmdsSXNTaGFkZXIoc2hhZGVy
KSA9PSBHTF9GQUxTRSkKKyAgICAgICAgbV9zaGFkZXJTb3VyY2VNYXAucmVtb3ZlKHNoYWRlcik7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4
dHVyZSkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjY0MTEpCisrKyBXZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDgtMzAg
IFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVwIEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1w
cm9jZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOiBBZGQgQU5HTEUgZGVwZW5k
ZW5jeS4KKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmluaXRp
YWxpemUpOiBJbml0IEFOR0xFIHN0dWZmLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpjb21waWxlU2hhZGVyKTogVXNlIEFOR0xFIHNoYWRlciB2YWxp
ZGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpnZXRTaGFkZXJpdik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJJbmZvTG9nKTogRGl0dG8uCisgICAgICAgIChXZWJL
aXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJjZSk6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpz
aGFkZXJTb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6Y3JlYXRlU2hhZGVyKTogU3RhcnRpbmcgYW4gZW50cnkgdG8gdHJhY2sg
dGhlIHNoYWRlci4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6ZGVsZXRlU2hhZGVyKTogRW5kaW5nIHRoZSBlbnRyeSBvZiB0aGUgZGVsZXRlZCBzaGFk
ZXIuCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6U2hhZGVyU291
cmNlRW50cnk6OlNoYWRlclNvdXJjZUVudHJ5KTogQ3JlYXRlIHRoZSBzdHJ1Y3R1cmUgdG8gdHJh
Y2sgYSBzaGFkZXIuCisKIDIwMTAtMDgtMzAgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21p
dW0ub3NyYz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAkocmV2aXNpb24gNjYwNzgpCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAko
d29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsNyBAQAogICAgICAgICAgICAgICAgICc8KGNocm9t
aXVtX3NyY19kaXIpL2FwcC9hcHAuZ3lwOmFwcF9iYXNlJywgIyBGb3IgR0xDb250ZXh0CiAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lhJywKICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFw
aS5neXA6bnBhcGknLAorICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJk
X3BhcnR5L2FuZ2xlL3NyYy9idWlsZF9hbmdsZS5neXA6dHJhbnNsYXRvcl9jb21tb24nLAogICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwog
ICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3NraWEvc2tpYS5neXA6c2tpYScs
CkBAIC05OCw2ICs5OSw3IEBACiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAg
ICAgICAgICAgICdwdWJsaWMnLAogICAgICAgICAgICAgICAgICdzcmMnLAorICAgICAgICAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xTTEFO
RycsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAgICAgICAgICAg
ICAgICAgJ1dFQktJVF9JTVBMRU1FTlRBVElPTj0xJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2
aXNpb24gNjYwNzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNs
dWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCiAKKyNpbmNsdWRlICJSZXNv
dXJjZUxpbWl0cy5oIgogI2luY2x1ZGUgImFwcC9nZngvZ2wvZ2xfYmluZGluZ3MuaCIKICNpbmNs
dWRlICJhcHAvZ2Z4L2dsL2dsX2NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgpAQCAtMTExLDYgKzExMiwzMCBAQCBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmluCiAKICAgICBnbEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICAg
ICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKKworICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgor
ICAgIFRCdWlsdEluUmVzb3VyY2UgYW5nbGVSZXNvdXJjZXM7CisgICAgYW5nbGVSZXNvdXJjZXMu
bWF4VmVydGV4QXR0cmlicyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9BVFRS
SUJTLCAmYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyk7CisgICAgYW5nbGVSZXNvdXJj
ZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2KDB4OERGQiwg
Ly8gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMKKyAgICAgICAgICAgICAgICAmYW5nbGVSZXNv
dXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZh
cnlpbmdWZWN0b3JzID0gMDsKKyAgICBnZXRJbnRlZ2VydigweDhERkMsIC8vIE1BWF9WQVJZSU5H
X1ZFQ1RPUlMKKyAgICAgICAgICAgICAgICAmYW5nbGVSZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3Rv
cnMpOworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsK
KyAgICBnZXRJbnRlZ2VydihHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmds
ZVJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgYW5nbGVSZXNvdXJj
ZXMubWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xf
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5tYXhDb21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhUZXh0dXJlSW1h
Z2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMs
ICZhbmdsZVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgYW5nbGVSZXNvdXJj
ZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoMHg4REZE
LCAvLyBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTCisgICAgICAgICAgICAgICAgJmFuZ2xl
UmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworICAgIC8vIEFsd2F5cyBzZXQg
dG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIGFuZ2xlUmVzb3VyY2VzLm1heERyYXdCdWZmZXJzID0g
MTsKKyAgICBtX2NvbXBpbGVyID0gbmV3IFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlKGFuZ2xl
UmVzb3VyY2VzKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC02MTMsNyArNjM4LDQzIEBA
IERFTEVHQVRFX1RPX0dMXzEoY2xlYXJTdGVuY2lsLCBDbGVhclN0ZW4KIAogREVMRUdBVEVfVE9f
R0xfNChjb2xvck1hc2ssIENvbG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKIAotREVM
RUdBVEVfVE9fR0xfMShjb21waWxlU2hhZGVyLCBDb21waWxlU2hhZGVyLCBXZWJHTElkKQordm9p
ZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjb21waWxlU2hhZGVyKFdlYkdMSWQg
c2hhZGVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVyU291cmNl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Cisg
ICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICAvLyBF
aXRoZXIgaXQgaXMgbm90IGEgdmFsaWQgc2hhZGVyIG9yIHNoYWRlclNvdXJjZSgpIGhhc24ndCBi
ZWVuIGNhbGxlZC4KKyAgICAgICAgLy8gUGFzc2luZyBkb3duIHRvIGdsIGRyaXZlciB0byBnZW5l
cmF0ZSB0aGUgY29ycmVjdCBlcnJvci4KKyAgICAgICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0g
cmVzdWx0LT5zZWNvbmQ7CisKKyAgICBXZWJDb3JlOjpBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlw
ZTsKKyAgICBBU1NFUlQoZW50cnkudHlwZSA9PSBHTF9WRVJURVhfU0hBREVSIHx8IGVudHJ5LnR5
cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICBpZiAoZW50cnkudHlwZSA9PSBHTF9WRVJU
RVhfU0hBREVSKQorICAgICAgICBzaGFkZXJUeXBlID0gV2ViQ29yZTo6U0hBREVSX1RZUEVfVkVS
VEVYOworICAgIGVsc2UKKyAgICAgICAgc2hhZGVyVHlwZSA9IFdlYkNvcmU6OlNIQURFUl9UWVBF
X0ZSQUdNRU5UOworCisgICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1f
Y29tcGlsZXItPnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgp
LCBzaGFkZXJUeXBlKTsKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UpIHsKKyAgICAg
ICAgZW50cnkubG9nID0gbV9jb21waWxlci0+Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXJUeXBlKTsK
KyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47IC8vIFNoYWRl
ciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0cmFu
c2xhdGVkIHNvdXJjZQorICAgIH0gZWxzZQorICAgICAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsK
KworICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gc3RybGVuKHRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UpOworICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2UsICZ0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoKTsKKyAgICBnbENvbXBpbGVTaGFkZXIo
c2hhZGVyKTsKKworICAgIGludCBnbENvbXBpbGVTdWNjZXNzOworICAgIGdsR2V0U2hhZGVyaXYo
c2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywgJmdsQ29tcGlsZVN1Y2Nlc3MpOworICAgIC8vIEFT
U0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBHTFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdM
CisgICAgQVNTRVJUKGdsQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7Cit9CiAKIHZvaWQgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgeCwg
bG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBi
b3JkZXIpCkBAIC04NzIsNDEgKzkzMyw3MiBAQCBXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wCiAKIERFTEVHQVRFX1RPX0dMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYsIEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2RVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25l
ZCBsb25nLCBpbnQqKQogCi1ERUxFR0FURV9UT19HTF8zKGdldFNoYWRlcml2LCBHZXRTaGFkZXJp
diwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywgaW50KikKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVyaXYoV2ViR0xJZCBzaGFkZXIsIHVuc2lnbmVkIGxvbmcg
cG5hbWUsIGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBT
aGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Cisg
ICAgICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAg
ICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6CisgICAg
ICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KGVudHJ5LmlzVmFsaWQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEdMX0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAg
ICAgIGlmICghZW50cnkuaXNWYWxpZCkgeworICAgICAgICAgICAgICAgICp2YWx1ZSA9IGVudHJ5
LmxvZy5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoKnZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICAoKnZhbHVlKSsrOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVO
R1RIOgorICAgICAgICAgICAgKnZhbHVlID0gZW50cnkuc291cmNlLmxlbmd0aCgpOworICAgICAg
ICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAgICAgICAgICAoKnZhbHVlKSsrOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIs
IHBuYW1lLCB2YWx1ZSk7Cit9CiAKIFdlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMSWQgc2hhZGVyKQogewogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IGxvZ0xlbmd0aDsKLSAgICBnbEdldFNoYWRlcml2KHNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsKLSAgICBpZiAoIWxvZ0xlbmd0
aCkKLSAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwotICAgIEdMY2hhciogbG9nID0gMDsKLSAg
ICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVl
KGxvZykpCisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNl
TWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci0gICAgR0xzaXplaSByZXR1
cm5lZExvZ0xlbmd0aDsKLSAgICBnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsb2dMZW5ndGgs
ICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVy
bmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgV2ViU3RyaW5nIHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVU
RjgobG9nLCByZXR1cm5lZExvZ0xlbmd0aCk7Ci0gICAgZmFzdEZyZWUobG9nKTsKLSAgICByZXR1
cm4gcmVzOworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7Cisg
ICAgaWYgKGVudHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgR0xpbnQgbG9nTGVuZ3RoOworICAgICAg
ICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsK
KyAgICAgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7
CisgICAgICAgIEdMY2hhciogbG9nID0gMDsKKyAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxv
Z0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorICAgICAgICAgICAgcmV0
dXJuIFdlYlN0cmluZygpOworICAgICAgICBHTHNpemVpIHJldHVybmVkTG9nTGVuZ3RoOworICAg
ICAgICBnbEdldFNoYWRlckluZm9Mb2coc2hhZGVyLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xl
bmd0aCwgbG9nKTsKKyAgICAgICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0
aCArIDEpOworICAgICAgICBXZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChsb2cs
IHJldHVybmVkTG9nTGVuZ3RoKTsKKyAgICAgICAgZmFzdEZyZWUobG9nKTsKKyAgICAgICAgcmV0
dXJuIHJlczsKKyAgICB9IGVsc2UgeworICAgICAgICBXZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5n
Ojpmcm9tVVRGOChlbnRyeS5sb2cudXRmOCgpLmRhdGEoKSwgZW50cnkubG9nLmxlbmd0aCgpKTsK
KyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CiB9CiAKIFdlYlN0cmluZyBXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIpCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbG9nTGVuZ3RoOwotICAgIGdsR2V0
U2hhZGVyaXYoc2hhZGVyLCBHTF9TSEFERVJfU09VUkNFX0xFTkdUSCwgJmxvZ0xlbmd0aCk7Ci0g
ICAgaWYgKCFsb2dMZW5ndGgpCi0gICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAgICBHTGNo
YXIqIGxvZyA9IDA7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihH
TGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwot
ICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJTb3VyY2Uoc2hh
ZGVyLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAgICBBU1NFUlQobG9n
TGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgV2ViU3RyaW5nIHJlcyA9IFdl
YlN0cmluZzo6ZnJvbVVURjgobG9nLCByZXR1cm5lZExvZ0xlbmd0aCk7Ci0gICAgZmFzdEZyZWUo
bG9nKTsKKyAgICBXZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChyZXN1bHQtPnNl
Y29uZC5zb3VyY2UudXRmOCgpLmRhdGEoKSwgcmVzdWx0LT5zZWNvbmQuc291cmNlLmxlbmd0aCgp
KTsKICAgICByZXR1cm4gcmVzOwogfQogCkBAIC0xMDE2LDkgKzExMDgsOSBAQCBERUxFR0FURV9U
T19HTF80KHNjaXNzb3IsIFNjaXNzb3IsIGxvbmcsCiAKIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6c2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25zdCBjaGFyKiBz
dHJpbmcpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbGVuZ3RoID0g
c3RybGVuKHN0cmluZyk7Ci0gICAgZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc3RyaW5nLCAm
bGVuZ3RoKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBBU1NFUlQocmVzdWx0ICE9IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpKTsKKyAgICByZXN1bHQtPnNlY29uZC5zb3VyY2UgPSBTdHJpbmcoc3RyaW5n
KTsKIH0KIAogREVMRUdBVEVfVE9fR0xfMyhzdGVuY2lsRnVuYywgU3RlbmNpbEZ1bmMsIHVuc2ln
bmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCkBAIC0xMTU3LDcgKzEyNDksMTggQEAgdW5z
aWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbAogICAgIHJldHVybiBvOwogfQog
Ci1ERUxFR0FURV9UT19HTF8xUihjcmVhdGVTaGFkZXIsIENyZWF0ZVNoYWRlciwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQpOwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgc2hhZGVyVHlwZSkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICB1bnNpZ25lZCBzaGFkZXIgPSBnbENyZWF0ZVNoYWRlcihzaGFk
ZXJUeXBlKTsKKyAgICBpZiAoc2hhZGVyKSB7CisgICAgICAgIEFTU0VSVChzaGFkZXJUeXBlID09
IEdMX1ZFUlRFWF9TSEFERVIgfHwgc2hhZGVyVHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpOwor
ICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKKyAgICAgICAgZW50cnkudHlwZSA9IHNo
YWRlclR5cGU7CisgICAgICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsK
KyAgICB9CisgICAgcmV0dXJuIHNoYWRlcjsKK30KIAogdW5zaWduZWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6Y3JlYXRlVGV4dHVyZSgpCiB7CkBAIC0xMTk1LDYgKzEyOTgsOCBA
QCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlCiB7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKKyAgICBpZiAoZ2xJ
c1NoYWRlcihzaGFkZXIpID09IEdMX0ZBTFNFKQorICAgICAgICBtX3NoYWRlclNvdXJjZU1hcC5y
ZW1vdmUoc2hhZGVyKTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAkocmV2aXNp
b24gNjYwNzgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsOSBAQAogCiAjaW5jbHVkZSAi
V2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgi
CisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAtMzE2LDYgKzMxOSwyNSBAQCBwcml2YXRl
OgogICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOwogCiAg
ICAgT3duUHRyPGdmeDo6R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKKworICAgIGNsYXNzIFNoYWRl
clNvdXJjZUVudHJ5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5KCkK
KyAgICAgICAgICAgICAgICA6IHR5cGUoMCkKKyAgICAgICAgICAgICAgICAsIGlzVmFsaWQoZmFs
c2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZTsK
KyAgICAgICAgU3RyaW5nIHNvdXJjZTsKKyAgICAgICAgU3RyaW5nIGxvZzsKKyAgICAgICAgYm9v
bCBpc1ZhbGlkOworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8V2ViR0xJZCwgU2hhZGVy
U291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1hcDsKKyAgICBTaGFkZXJTb3VyY2VNYXAgbV9zaGFk
ZXJTb3VyY2VNYXA7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6QU5HTEVXZWJLaXRCcmlkZ2U+IG1f
Y29tcGlsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDY2NDExKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjYgQEAKKzIwMTAtMDgtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVwIEFOR0xF
IHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxp
YXMuaHRtbDogUmVtb3ZlICNpZmRlZiBHTEVTLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L2NvcHktdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQuaHRtbDogRGl0dG8uCisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sOiBEaXR0
by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC11bmlmb3JtLWFycmF5cy5odG1sOiBE
aXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9pbmRleC12YWxpZGF0aW9uLXdpdGgt
cmVzaXplZC1idWZmZXIuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
cG9pbnQtc2l6ZS5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wcm9n
cmFtLXRlc3QuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1w
aXhlbHMtcGFjay1hbGlnbm1lbnQuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvcmVzb3VyY2VzL2ZyYWdtZW50U2hhZGVyLmZyYWc6IERpdHRvLgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL3RleC1zdWItaW1hZ2UtMmQuaHRtbDogRGl0dG8uCisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvdGV4SW1hZ2UyREltYWdlRGF0YVRlc3QuaHRtbDogRGl0dG8uCisg
ICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1hY3RpdmUtYmluZC5odG1sOiBEaXR0
by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLWNvbXBsZXRlLmh0bWw6IERp
dHRvLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtbnBvdC5odG1sOiBEaXR0
by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLXRyYW5zcGFyZW50LXBpeGVs
cy1pbml0aWFsaXplZC5odG1sOiBEaXR0by4KKwogMjAxMC0wOC0yNyAgSmVyIE5vYmxlICA8amVy
Lm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxw
aGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNp
bC1hbnRpYWxpYXMuaHRtbAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9jb250ZXh0LWF0dHJpYnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxp
YXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTYsOSArMTYsNyBAQCB2b2lkIG1haW4oKQogPC9z
Y3JpcHQ+CiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQi
PgotI2lmZGVmIEdMX0VTCiBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHZhcnlpbmcg
dmVjNCBjb2xvcjsKIAogdm9pZCBtYWluKCkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2NvcHktdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb3B5LXRleC1pbWFnZS1hbmQtc3ViLWlt
YWdlLTJkLmh0bWwJKHJldmlzaW9uIDY2MDc4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvY29weS10ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xOCwxMiArMTgsNyBAQCB2b2lkIG1haW4oKQogCiA8c2NyaXB0IGlkPSJmc2hhZGVyIiB0
eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KIHVuaWZvcm0gc2FtcGxlcjJEIHRleDsKLS8vIFdv
cmthcm91bmQgZm9yIG5vbi1jb21wbGlhbnQgV2ViR0wgaW1wbGVtZW50YXRpb25zIChGSVhNRSkK
LSNpZiBkZWZpbmVkKEdMX0VTKQogdmFyeWluZyBtZWRpdW1wIHZlYzIgdGV4Q29vcmQ7Ci0jZWxz
ZQotdmFyeWluZyB2ZWMyIHRleENvb3JkOwotI2VuZGlmCiAKIHZvaWQgbWFpbigpCiB7CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10
ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
YmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMjMsOSArMjMsNyBAQCB2b2lkIG1haW4oKQogfQogPC9zY3Jp
cHQ+CiA8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNj
cmlwdCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKLSNlbmRpZgogdmFy
eWluZyB2ZWM0IGNvbG9yOwogdm9pZCBtYWluKCkKIHsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2dsLXVuaWZvcm0tYXJyYXlzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1hcnJheXMuaHRtbAkocmV2aXNpb24g
NjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC11bmlmb3JtLWFycmF5
cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMiArMjEsNyBAQAogPC9zY3JpcHQ+CiAKIDxz
Y3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotICAgIC8vIFdv
cmthcm91bmQgZm9yIG5vbi1jb21wbGlhbnQgV2ViR0wgaW1wbGVtZW50YXRpb25zIChGSVhNRSkK
LSAgICAjaWYgZGVmaW5lZChHTF9FUykKICAgICB1bmlmb3JtIG1lZGl1bXAgJHR5cGUgY29sb3Jb
M107Ci0gICAgI2Vsc2UKLSAgICB1bmlmb3JtICR0eXBlIGNvbG9yWzNdOwotICAgICNlbmRpZgog
ICAgIHZvaWQgbWFpbigpCiAgICAgewogICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9y
WzBdJGVsZW0sIGNvbG9yWzFdJGVsZW0sIGNvbG9yWzJdJGVsZW0sIDEpOwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvaW5kZXgtdmFsaWRhdGlvbi13aXRoLXJlc2l6ZWQtYnVm
ZmVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvaW5k
ZXgtdmFsaWRhdGlvbi13aXRoLXJlc2l6ZWQtYnVmZmVyLmh0bWwJKHJldmlzaW9uIDY2MDc4KQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvaW5kZXgtdmFsaWRhdGlvbi13aXRoLXJl
c2l6ZWQtYnVmZmVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE5LDkgKzE5LDcgQEAgdm9pZCBt
YWluKCkgewogfQogPC9zY3JpcHQ+CiA8c2NyaXB0IGlkPSJmcyIgdHlwZT0ieC1zaGFkZXIveC1m
cmFnbWVudCI+Ci0jaWYgZGVmaW5lZChHTF9FUykKIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owot
I2VuZGlmCiB2YXJ5aW5nIHZlYzQgY29sb3I7CiB2b2lkIG1haW4oKSB7CiAgIGdsX0ZyYWdDb2xv
ciA9IGNvbG9yOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcG9pbnQtc2l6
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3BvaW50
LXNpemUuaHRtbAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9wb2ludC1zaXplLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDkgKzE4LDcgQEAgdm9p
ZCBtYWluKCkKIDwvc2NyaXB0PgogCiA8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRl
ci94LWZyYWdtZW50Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0j
ZW5kaWYKIHZhcnlpbmcgdmVjNCBjb2xvcjsKIAogdm9pZCBtYWluKCkKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5odG1sCShyZXZpc2lvbiA2
NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNCArNTUsMTQgQEAgZnVuY3Rpb24gZ28oKSB7CiAgICAg
ICAgICAgICAgICJiYWQgdmVydGV4IHNoYWRlciBzaG91bGQgZmFpbCB0byBjb21waWxlIik7CiAK
ICAgICB2YXIgZnMgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKLSAgICBn
bC5zaGFkZXJTb3VyY2UoZnMsICIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
O1xuI2VuZGlmXG4gdmFyeWluZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29s
b3IgPSB2Q29sb3I7IH0iKTsKKyAgICBnbC5zaGFkZXJTb3VyY2UoZnMsICJwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDtcbiB2YXJ5aW5nIHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdD
b2xvciA9IHZDb2xvcjsgfSIpOwogICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMpOwogCiAgICAgYXNz
ZXJ0TXNnKGdsLmdldFNoYWRlclBhcmFtZXRlcihmcywgZ2wuQ09NUElMRV9TVEFUVVMpID09IHRy
dWUsCiAgICAgICAgICAgICAgICJnb29kIGZyYWdtZW50IHNoYWRlciBzaG91bGQgY29tcGlsZSIp
OwogCiAgICAgdmFyIGZzMiA9IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpOwot
ICAgIGdsLnNoYWRlclNvdXJjZShmczIsICIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0O1xuI2VuZGlmXG4gdmFyeWluZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBnbF9G
cmFnQ29sb3IgPSB2Q29sb3IgKiAwLjU7IH0iKTsKKyAgICBnbC5zaGFkZXJTb3VyY2UoZnMyLCAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4gdmFyeWluZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWlu
KCkgeyBnbF9GcmFnQ29sb3IgPSB2Q29sb3IgKiAwLjU7IH0iKTsKICAgICBnbC5jb21waWxlU2hh
ZGVyKGZzMik7CiAKICAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZzMiwgZ2wu
Q09NUElMRV9TVEFUVVMpID09IHRydWUsCkBAIC0yNDIsNyArMjQyLDcgQEAgZnVuY3Rpb24gZ28o
KSB7CiAgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlRoZSBjdXJyZW50IHBy
b2dyYW0gc2hvdWxkbid0IGJlIGRlbGV0ZWQiKTsKIAogICAgIHZhciBmczMgPSBnbC5jcmVhdGVT
aGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbC5zaGFkZXJTb3VyY2UoZnMzLCAiI2lm
ZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbmRpZlxuIHZhcnlpbmcgdmVj
NCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7CisgICAg
Z2wuc2hhZGVyU291cmNlKGZzMywgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIHZhcnlpbmcg
dmVjNCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7CiAg
ICAgZ2wuY29tcGlsZVNoYWRlcihmczMpOwogCiAgICAgYXNzZXJ0TXNnKGdsLmdldFNoYWRlclBh
cmFtZXRlcihmczMsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PSB0cnVlLApAQCAtMjUzLDcgKzI1Myw3
IEBAIGZ1bmN0aW9uIGdvKCkgewogICAgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuSU5WQUxJRF9W
QUxVRSwgImFuIHVuYXR0YWNoZWQgc2hhZGVyIHNob3VsZCBiZSBkZWxldGVkIGltbWVkaWF0ZWx5
Iik7CiAKICAgICBmczMgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKLSAg
ICBnbC5zaGFkZXJTb3VyY2UoZnMzLCAiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDtcbiNlbmRpZlxuIHZhcnlpbmcgdmVjNCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJh
Z0NvbG9yID0gdkNvbG9yOyB9Iik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZzMywgInByZWNpc2lv
biBtZWRpdW1wIGZsb2F0O1xuIHZhcnlpbmcgdmVjNCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xf
RnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7CiAgICAgZ2wuY29tcGlsZVNoYWRlcihmczMpOwogCiAg
ICAgYXNzZXJ0TXNnKGdsLmdldFNoYWRlclBhcmFtZXRlcihmczMsIGdsLkNPTVBJTEVfU1RBVFVT
KSA9PSB0cnVlLApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhl
bHMtcGFjay1hbGlnbm1lbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9yZWFkLXBpeGVscy1wYWNrLWFsaWdubWVudC5odG1sCShyZXZpc2lvbiA2NjA3
OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLXBhY2stYWxp
Z25tZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE2LDkgKzE2LDcgQEAgdm9pZCBtYWluKCkK
IDwvc2NyaXB0PgogCiA8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdt
ZW50Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0jZW5kaWYKIHZh
cnlpbmcgdmVjNCBjb2xvcjsKIAogdm9pZCBtYWluKCkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL3RleC1zdWItaW1hZ2UtMmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtc3ViLWltYWdlLTJkLmh0bWwJKHJldmlzaW9uIDY2
MDc4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LXN1Yi1pbWFnZS0yZC5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC01LDkgKzUsNyBAQAogPHNjcmlwdCBzcmM9InJlc291cmNl
cy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wt
dGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNo
YWRlci94LWZyYWdtZW50Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lzaW9uIGhpZ2hwIGZsb2F0Owot
I2VuZGlmCiB1bmlmb3JtIHNhbXBsZXIyRCB0ZXg7CiB2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CiAK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleEltYWdlMkRJbWFnZURhdGFU
ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4
SW1hZ2UyREltYWdlRGF0YVRlc3QuaHRtbAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXhJbWFnZTJESW1hZ2VEYXRhVGVzdC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xNSw5ICsxNSw3IEBACiAgICAgPC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IGlk
PSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSAgICAgICAgI2lmZGVmIEdM
X0VTCiAgICAgICAgIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKLSAgICAgICAgI2VuZGlmCiAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEIHRleDsKICAgICAgICAgdmFyeWluZyB2ZWMyIHRleENvb3Jk
OwogICAgICAgICB2b2lkIG1haW4oKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvdGV4dHVyZS1hY3RpdmUtYmluZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3RleHR1cmUtYWN0aXZlLWJpbmQuaHRtbAkocmV2aXNpb24gNjYwNzgp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLWFjdGl2ZS1iaW5kLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDcgQEAgdm9pZCBtYWluKCkKIDwvc2NyaXB0
PgogCiA8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSNp
ZmRlZiBHTF9FUwogcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwotI2VuZGlmCiB1bmlmb3JtIHNhbXBs
ZXIyRCB0ZXg7CiB2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CiB2b2lkIG1haW4oKQpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1jb21wbGV0ZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtY29tcGxldGUuaHRt
bAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0
dXJlLWNvbXBsZXRlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEzLDkgKzEzLDcgQEAKIDxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogPHNjcmlw
dCBpZD0idnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgotI2lmZGVmIEdMX0VTCiBw
cmVjaXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIGF0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsK
IGF0dHJpYnV0ZSB2ZWMyIHRleENvb3JkMDsKIHZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKQEAgLTI3
LDkgKzI1LDcgQEAgdm9pZCBtYWluKCkKIDwvc2NyaXB0PgogCiA8c2NyaXB0IGlkPSJmc2hhZGVy
IiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lzaW9uIGhp
Z2hwIGZsb2F0OwotI2VuZGlmCiB1bmlmb3JtIHNhbXBsZXIyRCB0ZXg7CiB2YXJ5aW5nIHZlYzIg
dGV4Q29vcmQ7CiB2b2lkIG1haW4oKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvdGV4dHVyZS1ucG90Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdGV4dHVyZS1ucG90Lmh0bWwJKHJldmlzaW9uIDY2MDc4KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1ucG90Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDkgKzI0LDcgQEAgdm9pZCBtYWluKCkKIDwvc2NyaXB0PgogCiA8c2NyaXB0IGlkPSJmc2hh
ZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci0jZW5kaWYKIHVuaWZvcm0gc2FtcGxlckN1YmUgdGV4OwogdmFyeWlu
ZyB2ZWMyIHRleENvb3JkOwogdm9pZCBtYWluKCkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3RleHR1cmUtdHJhbnNwYXJlbnQtcGl4ZWxzLWluaXRpYWxpemVkLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS10cmFuc3Bh
cmVudC1waXhlbHMtaW5pdGlhbGl6ZWQuaHRtbAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLXRyYW5zcGFyZW50LXBpeGVscy1pbml0aWFs
aXplZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw5ICsxNyw3IEBAIHZvaWQgbWFpbigpCiA8
L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVu
dCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKLSNlbmRpZgogdW5pZm9y
bSBzYW1wbGVyMkQgdGV4OwogdmFyeWluZyB2ZWMyIHRleENvb3JkOwogCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZnJhZ21lbnRTaGFkZXIuZnJhZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZnJhZ21l
bnRTaGFkZXIuZnJhZwkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZXNvdXJjZXMvZnJhZ21lbnRTaGFkZXIuZnJhZwkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDQgQEAKLSNpZmRlZiBHTF9FUwogcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwotI2VuZGlm
CiB2YXJ5aW5nIHZlYzMgdl9ub3JtYWw7CiAKIHZvaWQgbWFpbigpCg==
</data>
<flag name="commit-queue"
          id="54853"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65968</attachid>
            <date>2010-08-30 15:19:39 -0700</date>
            <delta_ts>2010-08-30 18:30:02 -0700</delta_ts>
            <desc>revised patch: fix style issues</desc>
            <filename>angle.patch</filename>
            <type>text/plain</type>
            <size>43392</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IEFkZCBBTkdMRVdlYktpdEJyaWRnZS4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6Om9uRGV0YWNo
ZWQpOiBTaG91bGQgY2FsbCBkZWxldGUgaW5zdGVhZCBvZiBkaXJlY3RseSBzZXR0aW5nIG9iamVj
dCB0byAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwpOiBTaG91bGQgdXNlIGEg
ZGlmZmVyZW50IGZsYWcgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHByb2dyYW0gaXMgdHJ1bHkgZGVs
ZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKTogRml4
IGEgdGlueSBidWcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlk
Z2UuY3BwOiBSZWZhY3RvciB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2ViS2l0
QnJpZGdlOjpBTkdMRVdlYktpdEJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRVdlYktp
dEJyaWRnZTo6fkFOR0xFV2ViS2l0QnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2Vi
S2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBTkdM
RVdlYktpdEJyaWRnZTo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeTo6U2hhZGVyU291cmNlRW50cnkpOiBBZGQgYW4gZXh0
cmEgZmllbGQgb2YgdHlwZSBhbmQgbW92ZSBpdCBpbnRvIE1BQy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOiBVc2UgdGhlIHVwZGF0ZWQg
QU5HTEVXZWJLaXRCcmlkZ2UuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y29tcGlsZVNoYWRlcik6IEZpeCBzb21lIGlzc3Vlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UpOiBFbnRyeSBzaG91bGQgYmUgY3JlYXRlZCBpbiBj
cmVhdGVTaGFkZXIuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyaXYpOiBGaXggc29tZSBpc3N1ZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6IEZpeCBzb21lIGlzc3Vlcy4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOiBGaXggc29tZSBpc3N1ZXMu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKTogQ3Jl
YXRlIGFuIGVudHJ5LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVNoYWRlcik6IFJlbW92ZSB0aGUgZW50cnkuCisKIDIwMTAtMDgtMjcgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDY2MDc4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTI0OTIsNiArMjQ5Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvUGVuV3guY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1w
bGVGb250RGF0YVd4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJh
bnNmb3JtYXRpb25NYXRyaXhXeC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2Via2l0QnJpZGdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJraXRCcmlkZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAnLApJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAkocmV2aXNpb24gNjYwNzgpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogICAgICAgICBpZiAobV9hdHRhY2htZW50Q291bnQpCiAgICAgICAgICAgICAtLW1f
YXR0YWNobWVudENvdW50OwogICAgICAgICBpZiAoIW1fYXR0YWNobWVudENvdW50ICYmIG1fZGVs
ZXRlZCkKLSAgICAgICAgICAgIG1fb2JqZWN0ID0gMDsKKyAgICAgICAgICAgIGRlbGV0ZU9iamVj
dCgpOwogICAgIH0KICAgICB1bnNpZ25lZCBnZXRBdHRhY2htZW50Q291bnQoKSB7IHJldHVybiBt
X2F0dGFjaG1lbnRDb3VudDsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCShyZXZpc2lvbiA2NjA3OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4LDE1IEBAIFdlYkdMUHJvZ3JhbTo6V2Vi
R0xQcm9ncmFtKFdlYkdMUmVuZGVyaW4KIHZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQogewogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+ZGVsZXRlUHJvZ3JhbShvYmopOwotICAgIGlmICghb2JqZWN0KCkpIHsKLSAgICAg
ICAgaWYgKG1fdmVydGV4U2hhZGVyKQorICAgIGlmICghZ2V0QXR0YWNobWVudENvdW50KCkpIHsK
KyAgICAgICAgaWYgKG1fdmVydGV4U2hhZGVyKSB7CiAgICAgICAgICAgICBtX3ZlcnRleFNoYWRl
ci0+b25EZXRhY2hlZCgpOwotICAgICAgICBpZiAobV9mcmFnbWVudFNoYWRlcikKKyAgICAgICAg
ICAgIG1fdmVydGV4U2hhZGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9mcmFnbWVu
dFNoYWRlcikgewogICAgICAgICAgICAgbV9mcmFnbWVudFNoYWRlci0+b25EZXRhY2hlZCgpOwor
ICAgICAgICAgICAgbV9mcmFnbWVudFNoYWRlciA9IDA7CisgICAgICAgIH0KICAgICB9CiB9CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDY2MDc4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzA1LDcgKzI3MDUsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXCiAgICAgICAgICAgICBtX2N1cnJlbnRQcm9n
cmFtLT5vbkRldGFjaGVkKCk7CiAgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwog
ICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAg
ICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgIGlmIChwcm9ncmFtICYmIHByb2dyYW0tPm9iamVj
dCgpKQogICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOwogICAgIH0KICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHJldmlzaW9uIDY2MDc4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDQ3ICszMSw1OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotQU5HTEVX
ZWJLaXRCcmlkZ2U6OkFOR0xFV2ViS2l0QnJpZGdlKCkgOgotICAgIGJ1aWx0Q29tcGlsZXJzKGZh
bHNlKQorQU5HTEVXZWJLaXRCcmlkZ2U6OkFOR0xFV2ViS2l0QnJpZGdlKGNvbnN0IFRCdWlsdElu
UmVzb3VyY2UmIHJlc291cmNlcykKKyAgICA6IG1fZnJhZ21lbnRDb21waWxlcigwKQorICAgICwg
bV92ZXJ0ZXhDb21waWxlcigwKQorICAgICwgbV9idWlsdENvbXBpbGVycyhmYWxzZSkKKyAgICAs
IG1fcmVzb3VyY2VzKHJlc291cmNlcykKIHsKICAgICBTaEluaXRpYWxpemUoKTsKIH0KIAogQU5H
TEVXZWJLaXRCcmlkZ2U6On5BTkdMRVdlYktpdEJyaWRnZSgpCiB7Ci0gICAgaWYgKGJ1aWx0Q29t
cGlsZXJzKSB7CisgICAgaWYgKG1fYnVpbHRDb21waWxlcnMpIHsKICAgICAgICAgU2hEZXN0cnVj
dChtX2ZyYWdtZW50Q29tcGlsZXIpOwogICAgICAgICBTaERlc3RydWN0KG1fdmVydGV4Q29tcGls
ZXIpOwogICAgIH0KLSAgICAKICAgICBTaEZpbmFsaXplKCk7CiB9CiAKLWJvb2wgQU5HTEVXZWJL
aXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwg
QU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nKQorY29uc3QgY2hhciogQU5HTEVXZWJLaXRC
cmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5H
TEVTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB7Ci0gICAgaWYgKCFidWlsdENvbXBpbGVycykgewor
ICAgIGlmICghbV9idWlsdENvbXBpbGVycykgewogICAgICAgICBtX2ZyYWdtZW50Q29tcGlsZXIg
PSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdGcmFnbWVudCwgRVNoU3BlY1dlYkdMLCAmbV9y
ZXNvdXJjZXMpOwogICAgICAgICBtX3ZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxl
cihFU2hMYW5nVmVydGV4LCBFU2hTcGVjV2ViR0wsICZtX3Jlc291cmNlcyk7Ci0KLSAgICAgICAg
YnVpbHRDb21waWxlcnMgPSB0cnVlOworICAgICAgICBtX2J1aWx0Q29tcGlsZXJzID0gdHJ1ZTsK
ICAgICB9Ci0gICAgCi0gICAgU2hIYW5kbGUgY29tcGlsZXI7CiAKKyAgICBTaEhhbmRsZSBjb21w
aWxlcjsKICAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSEFERVJfVFlQRV9WRVJURVgpCiAgICAgICAg
IGNvbXBpbGVyID0gbV92ZXJ0ZXhDb21waWxlcjsKICAgICBlbHNlCiAgICAgICAgIGNvbXBpbGVy
ID0gbV9mcmFnbWVudENvbXBpbGVyOworICAgIEFTU0VSVChjb21waWxlcik7CiAKLSAgICBjb25z
dCBjaGFyKiBjb25zdCBzaGFkZXJTb3VyY2VTdHJpbmdzW10gPSB7IHNoYWRlclNvdXJjZSB9Owor
ICAgIGJvb2wgdmFsaWRhdGVTdWNjZXNzID0gU2hDb21waWxlKGNvbXBpbGVyLCAmc2hhZGVyU291
cmNlLCAxLCBFU2hPcHROb25lLCBFRGVidWdPcEludGVybWVkaWF0ZSk7CisgICAgaWYgKCF2YWxp
ZGF0ZVN1Y2Nlc3MpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBTaEdldE9iamVjdENv
ZGUoY29tcGlsZXIpOworfQogCi0gICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUo
Y29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIEVTaE9wdE5vbmUsIEVEZWJ1Z09wSW50
ZXJtZWRpYXRlKTsKK2NvbnN0IGNoYXIqIEFOR0xFV2ViS2l0QnJpZGdlOjpnZXRTaGFkZXJJbmZv
TG9nKEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlKQoreworICAgIGlmICghbV9idWlsdENvbXBp
bGVycykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0g
U2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyKTsKLSAgICBzaGFkZXJWYWxpZGF0aW9uTG9nID0gU2hH
ZXRJbmZvTG9nKGNvbXBpbGVyKTsKKyAgICBTaEhhbmRsZSBjb21waWxlcjsKKyAgICBpZiAoc2hh
ZGVyVHlwZSA9PSBTSEFERVJfVFlQRV9WRVJURVgpCisgICAgICAgIGNvbXBpbGVyID0gbV92ZXJ0
ZXhDb21waWxlcjsKKyAgICBlbHNlCisgICAgICAgIGNvbXBpbGVyID0gbV9mcmFnbWVudENvbXBp
bGVyOworICAgIEFTU0VSVChjb21waWxlcik7CiAKLSAgICByZXR1cm4gdmFsaWRhdGVTdWNjZXNz
OworICAgIHJldHVybiBTaEdldEluZm9Mb2coY29tcGlsZXIpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCShyZXZpc2lvbiA2
NjA3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsMTEgQEAKICNpZm5kZWYgQU5HTEVXZWJLaXRCcmlk
Z2VfaAogI2RlZmluZSBBTkdMRVdlYktpdEJyaWRnZV9oCiAKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCisjZWxzZQogI2luY2x1ZGUgIkFOR0xFL1NoYWRl
ckxhbmcuaCIKKyNlbmRpZgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC00MCwyMCArNDQsMTkgQEAgZW51bSBBTkdMRVNoYWRl
clR5cGUgewogCiBjbGFzcyBBTkdMRVdlYktpdEJyaWRnZSB7CiBwdWJsaWM6Ci0KLSAgICBBTkdM
RVdlYktpdEJyaWRnZSgpOworICAgIEFOR0xFV2ViS2l0QnJpZGdlKGNvbnN0IFRCdWlsdEluUmVz
b3VyY2UmIHJlc291cmNlcyk7CiAgICAgfkFOR0xFV2ViS2l0QnJpZGdlKCk7Ci0gICAgCi0gICAg
dm9pZCBzZXRSZXNvdXJjZXMoVEJ1aWx0SW5SZXNvdXJjZSByZXNvdXJjZXMpIHsgbV9yZXNvdXJj
ZXMgPSByZXNvdXJjZXM7IH0KLSAgICAKLSAgICBib29sIHZhbGlkYXRlU2hhZGVyU291cmNlKGNv
bnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFN0cmlu
ZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nKTsK
IAotcHJpdmF0ZToKKyAgICAvLyBJZiBzdWNjZWVkLCByZXR1cm4gdGhlIHRyYW5zbGF0ZWQgc2hh
ZGVyIHNvdXJjZTsgaWYgZmFpbHVyZSwgcmV0dXJuIDAuCisgICAgY29uc3QgY2hhciogdmFsaWRh
dGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUg
c2hhZGVyVHlwZSk7CisgICAgLy8gR2V0IHRoZSBpbmZvIGxvZyBmcm9tIGxhc3QgU2hDb21waWxl
KCkgZm9yIHRoZSBnaXZlbiBzaGFkZXIgdHlwZS4KKyAgICBjb25zdCBjaGFyKiBnZXRTaGFkZXJJ
bmZvTG9nKEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlKTsKIAorcHJpdmF0ZToKICAgICBTaEhh
bmRsZSBtX2ZyYWdtZW50Q29tcGlsZXI7CiAgICAgU2hIYW5kbGUgbV92ZXJ0ZXhDb21waWxlcjsK
IAotICAgIGJvb2wgYnVpbHRDb21waWxlcnM7CisgICAgYm9vbCBtX2J1aWx0Q29tcGlsZXJzOwog
CiAgICAgVEJ1aWx0SW5SZXNvdXJjZSBtX3Jlc291cmNlczsKIH07CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2NjA3OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODEyLDE1ICs4MTIsMjQgQEAgcHVibGljOgogCiAgICAgaW50IG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CiAKLSAgICB0eXBlZGVmIHN0cnVjdCB7IAotICAgICAg
ICBTdHJpbmcgc291cmNlOyAKLSAgICAgICAgU3RyaW5nIGxvZzsgCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIGNsYXNzIFNoYWRlclNvdXJjZUVudHJ5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNo
YWRlclNvdXJjZUVudHJ5KCkKKyAgICAgICAgICAgIDogdHlwZSgwKQorICAgICAgICAgICAgLCBp
c1ZhbGlkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgbG9u
ZyB0eXBlOworICAgICAgICBTdHJpbmcgc291cmNlOworICAgICAgICBTdHJpbmcgbG9nOwogICAg
ICAgICBib29sIGlzVmFsaWQ7Ci0gICAgfSBTaGFkZXJTb3VyY2VFbnRyeTsKLSAgICBIYXNoTWFw
PFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5PiBtX3NoYWRlclNvdXJjZU1hcDsK
KyAgICB9OwogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29t
cGlsZXI7CisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJj
ZUVudHJ5PiBTaGFkZXJTb3VyY2VNYXA7CisgICAgU2hhZGVyU291cmNlTWFwIG1fc2hhZGVyU291
cmNlTWFwOworCisgICAgT3duUHRyPEFOR0xFV2ViS2l0QnJpZGdlPiBtX2NvbXBpbGVyOwogCiAg
ICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0
ZXhBcnJheTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2NjA3OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xODMsMjggKzE4MywyNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAgICAgfQogICAgIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotCi0gICAg
VEJ1aWx0SW5SZXNvdXJjZSBBTkdMRVJlc291cmNlczsKLQotICAgIEFOR0xFUmVzb3VyY2VzLm1h
eFZlcnRleEF0dHJpYnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IDA7Ci0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5H
TEVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lm1heFZhcnlpbmdWZWN0b3JzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3Jz
KTsKLSAgICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0g
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBn
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZBTkdMRVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNv
dXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMubWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyk7Ci0KKyAgICBUQnVpbHRJblJlc291cmNlIGFuZ2xlUmVzb3VyY2Vz
OworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMgPSAwOworICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZhbmdsZVJlc291cmNl
cy5tYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTLCAmYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3Rv
cnMpOworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJmFuZ2xlUmVz
b3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJmFuZ2xlUmVzb3VyY2VzLm1heFZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5tYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VV
bml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmYW5nbGVSZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGFuZ2xlUmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAwOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAm
YW5nbGVSZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CiAgICAgLy8gQWx3YXlz
IHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMubWF4RHJhd0J1ZmZl
cnMgPSAxOwotICAgIAotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2Vz
KTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb21waWxl
ciA9IG5ldyBBTkdMRVdlYktpdEJyaWRnZShhbmdsZVJlc291cmNlcyk7CiAgICAgCiAgICAgOjpn
bEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICAgICA6OmdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKQEAgLTYxNyw1NCArNjEzLDQwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbG9yTWFzayhib29sIHIKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKICAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwot
ICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOwotCi0gICAgZ2xHZXRTaGFkZXJpdihzaGFk
ZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKLSAgICAKLSAgICBpZiAoR0xzaGFkZXJU
eXBlID09IFZFUlRFWF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9W
RVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKLSAg
ICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgotCi0gICAgSGFzaE1hcDxQbGF0Zm9y
bTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkgeworICAgICAgICAvLyBFaXRoZXIgaXQgaXMgbm90IGEgdmFsaWQgc2hh
ZGVyIG9yIHNoYWRlclNvdXJjZSgpIGhhc24ndCBiZWVuIGNhbGxlZC4KKyAgICAgICAgLy8gUGFz
c2luZyBkb3duIHRvIGdsIGRyaXZlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBlcnJvci4KKyAg
ICAgICAgOjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyKTsKICAgICAgICAgcmV0dXJu
OwotCisgICAgfQogICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OwogCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRl
ckluZm9Mb2c7Ci0KLSAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVy
U291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKLQotICAgIGVudHJ5LmxvZyA9IHNoYWRlcklu
Zm9Mb2c7Ci0gICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7Ci0KLSAgICBpZiAoIWlzVmFsaWQp
Ci0gICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBm
b3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAorICAgIEFOR0xFU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlOworICAgIEFTU0VSVChlbnRyeS50eXBlID09IEdMX1ZFUlRFWF9T
SEFERVIgfHwgZW50cnkudHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpOworICAgIGlmIChlbnRy
eS50eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJf
VFlQRV9WRVJURVg7CisgICAgZWxzZQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVf
RlJBR01FTlQ7CiAKLSAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2UubGVuZ3RoKCk7CisgICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclNv
dXJjZSA9IG1fY29tcGlsZXItPnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4
KCkuZGF0YSgpLCBzaGFkZXJUeXBlKTsKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Up
IHsKKyAgICAgICAgZW50cnkubG9nID0gbV9jb21waWxlci0+Z2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXJUeXBlKTsKKyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47
IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBp
bGluZyB0cmFuc2xhdGVkIHNvdXJjZQorICAgIH0KKyAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsK
IAotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0
ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICAKLSAgICA6OmdsU2hhZGVy
U291cmNlKChHTHVpbnQpIHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xh
dGVkU2hhZGVyTGVuZ3RoKTsKLSAgICAKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9
IHN0cmxlbih0cmFuc2xhdGVkU2hhZGVyU291cmNlKTsKKyAgICA6OmdsU2hhZGVyU291cmNlKChH
THVpbnQpIHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsICZ0cmFuc2xhdGVkU2hh
ZGVyTGVuZ3RoKTsKICAgICA6OmdsQ29tcGlsZVNoYWRlcigoR0x1aW50KSBzaGFkZXIpOwotICAg
IAotICAgIGludCBHTENvbXBpbGVTdWNjZXNzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJpdigo
R0x1aW50KSBzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7Ci0gICAg
CisKKyAgICBpbnQgZ2xDb21waWxlU3VjY2VzczsKKyAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWlu
dClzaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAmZ2xDb21waWxlU3VjY2Vzcyk7CiAgICAgLy8g
QVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVu
R0wKLSAgICBBU1NFUlQoR0xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKKyAgICBBU1NFUlQo
Z2xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2ln
bmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCkBAIC0xMDQyLDE1ICsxMDI0
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IobG9uZyB4LCAKIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICAKICAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRy
eTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291cmNlTWFw
LnNldChzaGFkZXIsIGVudHJ5KTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBBU1NFUlQocmVzdWx0ICE9
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKTsKKyAgICByZXN1bHQtPnNlY29uZC5zb3VyY2UgPSBz
dHJpbmc7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKHVuc2lnbmVk
IGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKQEAgLTEzOTEsOTAgKzEz
NjksNjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUAogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwg
dW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsK
LSAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCi0gICAgSGFzaE1h
cDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKLSAgICAgICAgY2FzZSBTSEFERVJfVFlQ
RToKLSAgICAgICAgICAgIC8vIExldCBPcGVuR0wgaGFuZGxlIHRoZXNlLgotICAgICAgICAKLSAg
ICAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgotICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewotICAgICAg
ICAgICAgICAgICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7CisgICAgU2hhZGVy
U291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAg
ICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgc3dp
dGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdMX0NPTVBJTEVfU1RBVFVTOgorICAgICAgICAg
ICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihlbnRyeS5pc1ZhbGlkKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBHTF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICAgICBp
ZiAoIWVudHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgICAgICAgICAqdmFsdWUgPSBlbnRyeS5sb2cu
bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgKCp2YWx1ZSkrKzsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGludD4o
cmVzdWx0LT5zZWNvbmQuaXNWYWxpZCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKLSAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAoKnZhbHVlKSA9
IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU0hBREVS
X1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlclNvdXJjZShz
aGFkZXIpLmxlbmd0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgY2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgICAgICp2YWx1ZSA9
IGVudHJ5LnNvdXJjZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICgqdmFsdWUpCisgICAgICAg
ICAgICAgICAgKCp2YWx1ZSkrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAg
IH0KKworICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7
CiB9CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQogICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBHTGludCBsZW5ndGg7Ci0gICAgOjpnbEdldFNoYWRl
cml2KChHTHVpbnQpIHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAg
IEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAKKyAgICBTaGFkZXJTb3Vy
Y2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
ICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgcmV0
dXJuICIiOworICAgICAgICByZXR1cm4gIiI7CiAKLSAgICAgU2hhZGVyU291cmNlRW50cnkgZW50
cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1
bHQtPnNlY29uZDsKKyAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRy
eS5sb2c7CiAKLSAgICAgaWYgKGVudHJ5LmlzVmFsaWQpIHsKLSAgICAgICAgIEdMaW50IGxlbmd0
aDsKLSAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIEdMX0lORk9fTE9H
X0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAgICAgICAgIEdMc2l6ZWkgc2l6ZTsKLSAgICAgICAgIEdM
Y2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7Ci0gICAgICAgICBpZiAo
IWluZm8pCi0gICAgICAgICAgICAgcmV0dXJuICIiOwotCi0gICAgICAgICA6OmdsR2V0U2hhZGVy
SW5mb0xvZygoR0x1aW50KSBzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOwotCi0gICAgICAg
ICBTdHJpbmcgcyhpbmZvKTsKLSAgICAgICAgIGZhc3RGcmVlKGluZm8pOwotICAgICAgICAgcmV0
dXJuIHM7Ci0gICAgIH0KLSAgICAgZWxzZSB7Ci0gICAgICAgICByZXR1cm4gZW50cnkubG9nOwot
ICAgICB9CisgICAgR0xpbnQgbGVuZ3RoOworICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KXNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBHTHNpemVpIHNpemU7Cisg
ICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAo
IWluZm8pCisgICAgICAgIHJldHVybiAiIjsKKyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZygoR0x1
aW50KXNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisgICAgQVNTRVJUKGxlbmd0aCA9IHNp
emUgKyAxKTsKKyAgICBTdHJpbmcgcyhpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKyAgICBy
ZXR1cm4gczsKIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KICAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmpl
Y3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOwotCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuICIiOwogCkBAIC0xNTg1LDcgKzE1
MzcsMTQgQEAgdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcgogdW5zaWdu
ZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUpCiB7
CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIHJldHVybiBnbENyZWF0ZVNo
YWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xf
VkVSVEVYX1NIQURFUik7CisgICAgdW5zaWduZWQgc2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlw
ZSk7CisgICAgaWYgKHNoYWRlcikgeworICAgICAgICBBU1NFUlQodHlwZSA9PSBHTF9WRVJURVhf
U0hBREVSIHx8IHR5cGUgPT0gR0xfRlJBR01FTlRTSEFERVIpOworICAgICAgICBTaGFkZXJTb3Vy
Y2VFbnRyeSBlbnRyeTsKKyAgICAgICAgZW50cnkudHlwZSA9IHR5cGU7CisgICAgICAgIG1fc2hh
ZGVyU291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKKyAgICB9CisgICAgcmV0dXJuIHNoYWRl
cjsKIH0KIAogdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQpAQCAt
MTYyNCw2ICsxNTgzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKHVu
cwogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICBnbERlbGV0ZVNoYWRl
cihzaGFkZXIpOworICAgIGlmICg6OmdsSXNTaGFkZXIoc2hhZGVyKSA9PSBHTF9GQUxTRSkKKyAg
ICAgICAgbV9zaGFkZXJTb3VyY2VNYXAucmVtb3ZlKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjY0MTEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDgtMzAgIFpoZW55YW8gTW8gIDx6bW9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBIb29rIHVwIEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisK
KyAgICAgICAgKiBXZWJLaXQuZ3lwOiBBZGQgQU5HTEUgZGVwZW5kZW5jeS4KKyAgICAgICAgKiBz
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmluaXRpYWxpemUpOiBJbml0IEFOR0xF
IHN0dWZmLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
Ojpjb21waWxlU2hhZGVyKTogVXNlIEFOR0xFIHNoYWRlciB2YWxpZGF0aW9uLgorICAgICAgICAo
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJpdik6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpn
ZXRTaGFkZXJJbmZvTG9nKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzaGFkZXJTb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3Jl
YXRlU2hhZGVyKTogU3RhcnRpbmcgYW4gZW50cnkgdG8gdHJhY2sgdGhlIHNoYWRlci4KKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlU2hhZGVy
KTogRW5kaW5nIHRoZSBlbnRyeSBvZiB0aGUgZGVsZXRlZCBzaGFkZXIuCisgICAgICAgICogc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6U2hhZGVyU291cmNlRW50cnk6OlNoYWRlclNv
dXJjZUVudHJ5KTogQ3JlYXRlIHRoZSBzdHJ1Y3R1cmUgdG8gdHJhY2sgYSBzaGFkZXIuCisKIDIw
MTAtMDgtMzAgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3NyYz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24g
NjYwNzgpCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNiArOTAsNyBAQAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2FwcC9h
cHAuZ3lwOmFwcF9iYXNlJywgIyBGb3IgR0xDb250ZXh0CiAgICAgICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lhJywKICAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFwaS5neXA6bnBhcGknLAorICAg
ICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9i
dWlsZF9hbmdsZS5neXA6dHJhbnNsYXRvcl9jb21tb24nLAogICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwogICAgICAgICAgICAgICAgICc8
KGNocm9taXVtX3NyY19kaXIpL3NraWEvc2tpYS5neXA6c2tpYScsCkBAIC05OCw2ICs5OSw3IEBA
CiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICdwdWJsaWMn
LAogICAgICAgICAgICAgICAgICdzcmMnLAorICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3Ny
Y19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xTTEFORycsCiAgICAgICAgICAgICBd
LAogICAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAgICAgICAgICAgICAgICAgJ1dFQktJVF9JTVBM
RU1FTlRBVElPTj0xJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNjYwNzgpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsLmgiCiAKKyNpbmNsdWRlICJSZXNvdXJjZUxpbWl0cy5oIgogI2lu
Y2x1ZGUgImFwcC9nZngvZ2wvZ2xfYmluZGluZ3MuaCIKICNpbmNsdWRlICJhcHAvZ2Z4L2dsL2ds
X2NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTExLDYgKzExMiwz
MCBAQCBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmluCiAKICAgICBnbEVu
YWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICAgICBtX2luaXRpYWxpemVkID0g
dHJ1ZTsKKworICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAgIFRCdWlsdEluUmVzb3Vy
Y2UgYW5nbGVSZXNvdXJjZXM7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyA9
IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9BVFRSSUJTLCAmYW5nbGVSZXNvdXJj
ZXMubWF4VmVydGV4QXR0cmlicyk7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9y
bVZlY3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2KDB4OERGQiwgLy8gTUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlMKKyAgICAgICAgICAgICAgICAmYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4VW5p
Zm9ybVZlY3RvcnMpOworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzID0gMDsK
KyAgICBnZXRJbnRlZ2VydigweDhERkMsIC8vIE1BWF9WQVJZSU5HX1ZFQ1RPUlMKKyAgICAgICAg
ICAgICAgICAmYW5nbGVSZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIGFuZ2xlUmVz
b3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihH
TF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5tYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xfTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAg
Z2V0SW50ZWdlcnYoR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5t
YXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoMHg4REZELCAvLyBNQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTCisgICAgICAgICAgICAgICAgJmFuZ2xlUmVzb3VyY2VzLm1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMpOworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVT
LgorICAgIGFuZ2xlUmVzb3VyY2VzLm1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbXBpbGVy
ID0gbmV3IFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlKGFuZ2xlUmVzb3VyY2VzKTsKKwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC02MTMsNyArNjM4LDQzIEBAIERFTEVHQVRFX1RPX0dMXzEo
Y2xlYXJTdGVuY2lsLCBDbGVhclN0ZW4KIAogREVMRUdBVEVfVE9fR0xfNChjb2xvck1hc2ssIENv
bG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKIAotREVMRUdBVEVfVE9fR0xfMShjb21w
aWxlU2hhZGVyLCBDb21waWxlU2hhZGVyLCBXZWJHTElkKQordm9pZCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpjb21waWxlU2hhZGVyKFdlYkdMSWQgc2hhZGVyKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICAvLyBFaXRoZXIgaXQgaXMgbm90IGEg
dmFsaWQgc2hhZGVyIG9yIHNoYWRlclNvdXJjZSgpIGhhc24ndCBiZWVuIGNhbGxlZC4KKyAgICAg
ICAgLy8gUGFzc2luZyBkb3duIHRvIGdsIGRyaXZlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBl
cnJvci4KKyAgICAgICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisK
KyAgICBXZWJDb3JlOjpBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKyAgICBBU1NFUlQoZW50
cnkudHlwZSA9PSBHTF9WRVJURVhfU0hBREVSIHx8IGVudHJ5LnR5cGUgPT0gR0xfRlJBR01FTlRf
U0hBREVSKTsKKyAgICBpZiAoZW50cnkudHlwZSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgICAg
ICBzaGFkZXJUeXBlID0gV2ViQ29yZTo6U0hBREVSX1RZUEVfVkVSVEVYOworICAgIGVsc2UKKyAg
ICAgICAgc2hhZGVyVHlwZSA9IFdlYkNvcmU6OlNIQURFUl9UWVBFX0ZSQUdNRU5UOworCisgICAg
Y29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fY29tcGlsZXItPnZhbGlkYXRl
U2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlKTsKKyAg
ICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UpIHsKKyAgICAgICAgZW50cnkubG9nID0gbV9j
b21waWxlci0+Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXJUeXBlKTsKKyAgICAgICAgZW50cnkuaXNW
YWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUs
IGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZQorICAg
IH0KKyAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKworICAgIGludCB0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoID0gc3RybGVuKHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UpOworICAgIGdsU2hhZGVyU291
cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsICZ0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoKTsKKyAgICBnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICAgIGludCBnbENvbXBp
bGVTdWNjZXNzOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywg
JmdsQ29tcGlsZVN1Y2Nlc3MpOworICAgIC8vIEFTU0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBH
TFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdMCisgICAgQVNTRVJUKGdsQ29tcGlsZVN1Y2Nl
c3MgPT0gR0xfVFJVRSk7Cit9CiAKIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2ln
bmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCkBAIC04NzIsMTEgKzkzMyw1MCBA
QCBXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wCiAKIERFTEVHQVRFX1RP
X0dMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYsIEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2RVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi1ERUxFR0FURV9U
T19HTF8zKGdldFNoYWRlcml2LCBHZXRTaGFkZXJpdiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywg
aW50KikKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVyaXYo
V2ViR0xJZCBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ICE9
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAg
IGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGVudHJ5LmlzVmFsaWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IEdMX0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgICAgIGlmICghZW50cnkuaXNWYWxpZCkgewor
ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGVudHJ5LmxvZy5sZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoKnZhbHVlKQorICAgICAgICAgICAgICAgICAgICAoKnZhbHVlKSsrOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAgICAgICAgKnZhbHVlID0g
ZW50cnkuc291cmNlLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAg
ICAgICAgICAoKnZhbHVlKSsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7Cit9CiAKIFdlYlN0
cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMSWQgc2hhZGVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVy
U291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIFdlYlN0cmluZygpOworCisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1
bHQtPnNlY29uZDsKKyAgICBpZiAoIWVudHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgV2ViU3RyaW5n
IHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVURjgoZW50cnkubG9nLnV0ZjgoKS5kYXRhKCksIGVudHJ5
LmxvZy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCiAgICAgR0xpbnQg
bG9nTGVuZ3RoOwogICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsb2dMZW5ndGgpOwogICAgIGlmICghbG9nTGVuZ3RoKQpAQCAtODk1LDE4ICs5OTUsMTEgQEAg
V2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcAogV2ViU3RyaW5nIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRl
cikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBsb2dMZW5ndGg7Ci0g
ICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbG9nTGVu
Z3RoKTsKLSAgICBpZiAoIWxvZ0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwot
ICAgIEdMY2hhciogbG9nID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICog
c2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gV2ViU3Ry
aW5nKCk7Ci0gICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKLSAgICBnbEdldFNoYWRlclNv
dXJjZShzaGFkZXIsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFT
U0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBXZWJTdHJpbmcg
cmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICBm
YXN0RnJlZShsb2cpOworICAgIFdlYlN0cmluZyByZXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KHJl
c3VsdC0+c2Vjb25kLnNvdXJjZS51dGY4KCkuZGF0YSgpLCByZXN1bHQtPnNlY29uZC5zb3VyY2Uu
bGVuZ3RoKCkpOwogICAgIHJldHVybiByZXM7CiB9CiAKQEAgLTEwMTYsOSArMTEwOSw5IEBAIERF
TEVHQVRFX1RPX0dMXzQoc2Npc3NvciwgU2Npc3NvciwgbG9uZywKIAogdm9pZCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpzaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIsIGNvbnN0
IGNoYXIqIHN0cmluZykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBs
ZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKLSAgICBnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZz
dHJpbmcsICZsZW5ndGgpOworICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIEFTU0VSVChyZXN1bHQgIT0gbV9z
aGFkZXJTb3VyY2VNYXAuZW5kKCkpOworICAgIHJlc3VsdC0+c2Vjb25kLnNvdXJjZSA9IFN0cmlu
ZyhzdHJpbmcpOwogfQogCiBERUxFR0FURV9UT19HTF8zKHN0ZW5jaWxGdW5jLCBTdGVuY2lsRnVu
YywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKQEAgLTExNTcsNyArMTI1MCwx
OCBAQCB1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsCiAgICAgcmV0dXJu
IG87CiB9CiAKLURFTEVHQVRFX1RPX0dMXzFSKGNyZWF0ZVNoYWRlciwgQ3JlYXRlU2hhZGVyLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCk7Cit1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyBzaGFkZXJUeXBlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVuc2lnbmVkIHNoYWRlciA9IGdsQ3JlYXRlU2hh
ZGVyKHNoYWRlclR5cGUpOworICAgIGlmIChzaGFkZXIpIHsKKyAgICAgICAgQVNTRVJUKHNoYWRl
clR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUiB8fCBzaGFkZXJUeXBlID09IEdMX0ZSQUdNRU5UX1NI
QURFUik7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OworICAgICAgICBlbnRyeS50
eXBlID0gc2hhZGVyVHlwZTsKKyAgICAgICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwg
ZW50cnkpOworICAgIH0KKyAgICByZXR1cm4gc2hhZGVyOworfQogCiB1bnNpZ25lZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVUZXh0dXJlKCkKIHsKQEAgLTExOTUsNiAr
MTI5OSw4IEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGUKIHsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAg
IGlmIChnbElzU2hhZGVyKHNoYWRlcikgPT0gR0xfRkFMU0UpCisgICAgICAgIG1fc2hhZGVyU291
cmNlTWFwLnJlbW92ZShzaGFkZXIpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5o
CShyZXZpc2lvbiA2NjA3OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMywxMCBAQAogCiAj
aWYgRU5BQkxFKDNEX0NBTlZBUykKIAorI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCiAj
aW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogCkBAIC0zMTYsNiArMzE4LDI1IEBAIHByaXZhdGU6CiAgICAgTGlzdEhhc2hTZXQ8dW5zaWdu
ZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CiAKICAgICBPd25QdHI8Z2Z4OjpHTENvbnRleHQ+
IG1fZ2xDb250ZXh0OworCisgICAgY2xhc3MgU2hhZGVyU291cmNlRW50cnkgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkoKQorICAgICAgICAgICAgICAgIDogdHlwZSgw
KQorICAgICAgICAgICAgICAgICwgaXNWYWxpZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOworICAgICAgICBTdHJpbmcgc291cmNlOwor
ICAgICAgICBTdHJpbmcgbG9nOworICAgICAgICBib29sIGlzVmFsaWQ7CisgICAgfTsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxXZWJHTElkLCBTaGFkZXJTb3VyY2VFbnRyeT4gU2hhZGVyU291cmNl
TWFwOworICAgIFNoYWRlclNvdXJjZU1hcCBtX3NoYWRlclNvdXJjZU1hcDsKKworICAgIE93blB0
cjxXZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZT4gbV9jb21waWxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjY0MTEpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wOC0zMCAgWmhl
bnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEhvb2sgdXAgQU5HTEUgd2l0aCBjaHJvbWl1bSAtLWluLXByb2Nl
c3Mtd2ViZ2wgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDQzMDkKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmli
dXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sOiBSZW1vdmUgI2lmZGVmIEdM
RVMuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29weS10ZXgtaW1hZ2UtYW5kLXN1Yi1p
bWFnZS0yZC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5k
LWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL2dsLXVuaWZvcm0tYXJyYXlzLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2Fu
dmFzL3dlYmdsL2luZGV4LXZhbGlkYXRpb24td2l0aC1yZXNpemVkLWJ1ZmZlci5odG1sOiBEaXR0
by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wb2ludC1zaXplLmh0bWw6IERpdHRvLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5odG1sOiBEaXR0by4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1wYWNrLWFsaWdubWVudC5odG1s
OiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZnJhZ21lbnRT
aGFkZXIuZnJhZzogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LXN1Yi1p
bWFnZS0yZC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXhJbWFn
ZTJESW1hZ2VEYXRhVGVzdC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC90ZXh0dXJlLWFjdGl2ZS1iaW5kLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3RleHR1cmUtY29tcGxldGUuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvdGV4dHVyZS1ucG90Lmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3RleHR1cmUtdHJhbnNwYXJlbnQtcGl4ZWxzLWluaXRpYWxpemVkLmh0bWw6IERpdHRv
LgorCiAyMDEwLTA4LTI3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlh
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRl
eHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCShyZXZpc2lv
biA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmli
dXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xNiw5ICsxNiw3IEBAIHZvaWQgbWFpbigpCiA8L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0iZnNo
YWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lv
biBoaWdocCBmbG9hdDsKLSNlbmRpZgogdmFyeWluZyB2ZWM0IGNvbG9yOwogCiB2b2lkIG1haW4o
KQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29weS10ZXgtaW1hZ2UtYW5k
LXN1Yi1pbWFnZS0yZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2NvcHktdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQuaHRtbAkocmV2aXNpb24gNjYw
NzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb3B5LXRleC1pbWFnZS1hbmQt
c3ViLWltYWdlLTJkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDEyICsxOCw3IEBAIHZvaWQg
bWFpbigpCiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQi
PgogdW5pZm9ybSBzYW1wbGVyMkQgdGV4OwotLy8gV29ya2Fyb3VuZCBmb3Igbm9uLWNvbXBsaWFu
dCBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgKEZJWE1FKQotI2lmIGRlZmluZWQoR0xfRVMpCiB2YXJ5
aW5nIG1lZGl1bXAgdmVjMiB0ZXhDb29yZDsKLSNlbHNlCi12YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7
Ci0jZW5kaWYKIAogdm9pZCBtYWluKCkKIHsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0
Lmh0bWwJKHJldmlzaW9uIDY2MDc4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5
ICsyMyw3IEBAIHZvaWQgbWFpbigpCiB9CiA8L3NjcmlwdD4KIDxzY3JpcHQgaWQ9ImZzaGFkZXIi
IHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KLSNpZmRlZiBHTF9FUwogcHJl
Y2lzaW9uIGhpZ2hwIGZsb2F0OwotI2VuZGlmCiB2YXJ5aW5nIHZlYzQgY29sb3I7CiB2b2lkIG1h
aW4oKQogewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1h
cnJheXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9n
bC11bmlmb3JtLWFycmF5cy5odG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm0tYXJyYXlzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDEyICsyMSw3IEBACiA8L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0i
eC1zaGFkZXIveC1mcmFnbWVudCI+Ci0gICAgLy8gV29ya2Fyb3VuZCBmb3Igbm9uLWNvbXBsaWFu
dCBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgKEZJWE1FKQotICAgICNpZiBkZWZpbmVkKEdMX0VTKQog
ICAgIHVuaWZvcm0gbWVkaXVtcCAkdHlwZSBjb2xvclszXTsKLSAgICAjZWxzZQotICAgIHVuaWZv
cm0gJHR5cGUgY29sb3JbM107Ci0gICAgI2VuZGlmCiAgICAgdm9pZCBtYWluKCkKICAgICB7CiAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3JbMF0kZWxlbSwgY29sb3JbMV0kZWxlbSwg
Y29sb3JbMl0kZWxlbSwgMSk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9p
bmRleC12YWxpZGF0aW9uLXdpdGgtcmVzaXplZC1idWZmZXIuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9pbmRleC12YWxpZGF0aW9uLXdpdGgtcmVzaXpl
ZC1idWZmZXIuaHRtbAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9pbmRleC12YWxpZGF0aW9uLXdpdGgtcmVzaXplZC1idWZmZXIuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTksOSArMTksNyBAQCB2b2lkIG1haW4oKSB7CiB9CiA8L3NjcmlwdD4KIDxz
Y3JpcHQgaWQ9ImZzIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSNpZiBkZWZpbmVkKEdM
X0VTKQogcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0jZW5kaWYKIHZhcnlpbmcgdmVjNCBjb2xv
cjsKIHZvaWQgbWFpbigpIHsKICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wb2ludC1zaXplLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcG9pbnQtc2l6ZS5odG1sCShyZXZpc2lvbiA2NjA3
OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3BvaW50LXNpemUuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMTgsOSArMTgsNyBAQCB2b2lkIG1haW4oKQogPC9zY3JpcHQ+CiAKIDxz
Y3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVmIEdM
X0VTCiBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSNlbmRpZgogdmFyeWluZyB2ZWM0IGNvbG9y
OwogCiB2b2lkIG1haW4oKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJv
Z3JhbS10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvcHJvZ3JhbS10ZXN0Lmh0bWwJKHJldmlzaW9uIDY2MDc4KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0
ICs1NSwxNCBAQCBmdW5jdGlvbiBnbygpIHsKICAgICAgICAgICAgICAgImJhZCB2ZXJ0ZXggc2hh
ZGVyIHNob3VsZCBmYWlsIHRvIGNvbXBpbGUiKTsKIAogICAgIHZhciBmcyA9IGdsLmNyZWF0ZVNo
YWRlcihnbC5GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsLnNoYWRlclNvdXJjZShmcywgIiNpZmRl
ZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2YXJ5aW5nIHZlYzQg
dkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsgfSIpOworICAgIGds
LnNoYWRlclNvdXJjZShmcywgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIHZhcnlpbmcgdmVj
NCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7CiAgICAg
Z2wuY29tcGlsZVNoYWRlcihmcyk7CiAKICAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVyUGFyYW1l
dGVyKGZzLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKICAgICAgICAgICAgICAgImdvb2Qg
ZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBjb21waWxlIik7CiAKICAgICB2YXIgZnMyID0gZ2wuY3Jl
YXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2wuc2hhZGVyU291cmNlKGZzMiwg
IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2YXJ5aW5n
IHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvciAqIDAuNTsg
fSIpOworICAgIGdsLnNoYWRlclNvdXJjZShmczIsICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtc
biB2YXJ5aW5nIHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xv
ciAqIDAuNTsgfSIpOwogICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMyKTsKIAogICAgIGFzc2VydE1z
ZyhnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoZnMyLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwK
QEAgLTI0Miw3ICsyNDIsNyBAQCBmdW5jdGlvbiBnbygpIHsKICAgICBnbEVycm9yU2hvdWxkQmUo
Z2wsIGdsLk5PX0VSUk9SLCAiVGhlIGN1cnJlbnQgcHJvZ3JhbSBzaG91bGRuJ3QgYmUgZGVsZXRl
ZCIpOwogCiAgICAgdmFyIGZzMyA9IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIp
OwotICAgIGdsLnNoYWRlclNvdXJjZShmczMsICIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0O1xuI2VuZGlmXG4gdmFyeWluZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBn
bF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsKKyAgICBnbC5zaGFkZXJTb3VyY2UoZnMzLCAicHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4gdmFyeWluZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkg
eyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsKICAgICBnbC5jb21waWxlU2hhZGVyKGZzMyk7
CiAKICAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZzMywgZ2wuQ09NUElMRV9T
VEFUVVMpID09IHRydWUsCkBAIC0yNTMsNyArMjUzLDcgQEAgZnVuY3Rpb24gZ28oKSB7CiAgICAg
Z2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElEX1ZBTFVFLCAiYW4gdW5hdHRhY2hlZCBzaGFk
ZXIgc2hvdWxkIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkiKTsKIAogICAgIGZzMyA9IGdsLmNyZWF0
ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsLnNoYWRlclNvdXJjZShmczMsICIj
aWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2VuZGlmXG4gdmFyeWluZyB2
ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsKKyAg
ICBnbC5zaGFkZXJTb3VyY2UoZnMzLCAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4gdmFyeWlu
ZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsK
ICAgICBnbC5jb21waWxlU2hhZGVyKGZzMyk7CiAKICAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVy
UGFyYW1ldGVyKGZzMywgZ2wuQ09NUElMRV9TVEFUVVMpID09IHRydWUsCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1wYWNrLWFsaWdubWVudC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLXBh
Y2stYWxpZ25tZW50Lmh0bWwJKHJldmlzaW9uIDY2MDc4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtcGFjay1hbGlnbm1lbnQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMTYsOSArMTYsNyBAQCB2b2lkIG1haW4oKQogPC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9
ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVmIEdMX0VTCiBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKLSNlbmRpZgogdmFyeWluZyB2ZWM0IGNvbG9yOwogCiB2b2lk
IG1haW4oKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LXN1Yi1pbWFn
ZS0yZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Rl
eC1zdWItaW1hZ2UtMmQuaHRtbAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC90ZXgtc3ViLWltYWdlLTJkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTUs
OSArNSw3IEBACiA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVm
IEdMX0VTCiBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHVuaWZvcm0gc2FtcGxlcjJE
IHRleDsKIHZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdGV4SW1hZ2UyREltYWdlRGF0YVRlc3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXhJbWFnZTJESW1hZ2VEYXRhVGVzdC5odG1s
CShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleElt
YWdlMkRJbWFnZURhdGFUZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1LDkgKzE1LDcgQEAK
ICAgICA8L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVy
L3gtZnJhZ21lbnQiPgotICAgICAgICAjaWZkZWYgR0xfRVMKICAgICAgICAgcHJlY2lzaW9uIGhp
Z2hwIGZsb2F0OwotICAgICAgICAjZW5kaWYKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdGV4
OwogICAgICAgICB2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CiAgICAgICAgIHZvaWQgbWFpbigpCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLWFjdGl2ZS1iaW5kLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1h
Y3RpdmUtYmluZC5odG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3RleHR1cmUtYWN0aXZlLWJpbmQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjUs
OSArMjUsNyBAQCB2b2lkIG1haW4oKQogPC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVmIEdMX0VTCiBwcmVjaXNpb24gaGln
aHAgZmxvYXQ7Ci0jZW5kaWYKIHVuaWZvcm0gc2FtcGxlcjJEIHRleDsKIHZhcnlpbmcgdmVjMiB0
ZXhDb29yZDsKIHZvaWQgbWFpbigpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC90ZXh0dXJlLWNvbXBsZXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdGV4dHVyZS1jb21wbGV0ZS5odG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtY29tcGxldGUuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsOSArMTMsNyBAQAogPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgog
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CiA8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNo
YWRlci94LXZlcnRleCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKLSNl
bmRpZgogYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOwogYXR0cmlidXRlIHZlYzIgdGV4Q29vcmQw
OwogdmFyeWluZyB2ZWMyIHRleENvb3JkOwpAQCAtMjcsOSArMjUsNyBAQCB2b2lkIG1haW4oKQog
PC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21l
bnQiPgotI2lmZGVmIEdMX0VTCiBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHVuaWZv
cm0gc2FtcGxlcjJEIHRleDsKIHZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKIHZvaWQgbWFpbigpCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLW5wb3QuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLW5wb3QuaHRt
bAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0
dXJlLW5wb3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsNyBAQCB2b2lkIG1haW4o
KQogPC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJh
Z21lbnQiPgotI2lmZGVmIEdMX0VTCiBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSNlbmRpZgog
dW5pZm9ybSBzYW1wbGVyQ3ViZSB0ZXg7CiB2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CiB2b2lkIG1h
aW4oKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS10cmFuc3Bh
cmVudC1waXhlbHMtaW5pdGlhbGl6ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLXRyYW5zcGFyZW50LXBpeGVscy1pbml0aWFsaXplZC5o
dG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Rl
eHR1cmUtdHJhbnNwYXJlbnQtcGl4ZWxzLWluaXRpYWxpemVkLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTE3LDkgKzE3LDcgQEAgdm9pZCBtYWluKCkKIDwvc2NyaXB0PgogCiA8c2NyaXB0IGlkPSJm
c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lz
aW9uIGhpZ2hwIGZsb2F0OwotI2VuZGlmCiB1bmlmb3JtIHNhbXBsZXIyRCB0ZXg7CiB2YXJ5aW5n
IHZlYzIgdGV4Q29vcmQ7CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jl
c291cmNlcy9mcmFnbWVudFNoYWRlci5mcmFnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9mcmFnbWVudFNoYWRlci5mcmFnCShyZXZpc2lvbiA2
NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9mcmFnbWVu
dFNoYWRlci5mcmFnCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAotI2lmZGVmIEdMX0VT
CiBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHZhcnlpbmcgdmVjMyB2X25vcm1hbDsK
IAogdm9pZCBtYWluKCkK
</data>
<flag name="commit-queue"
          id="54858"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65993</attachid>
            <date>2010-08-30 18:30:02 -0700</date>
            <delta_ts>2010-08-31 11:30:03 -0700</delta_ts>
            <desc>revised patch: fix the filename case issue in WebCore.gypi</desc>
            <filename>angle.patch</filename>
            <type>text/plain</type>
            <size>43392</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjQxMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDgtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IEFkZCBBTkdMRVdlYktpdEJyaWRnZS4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6Om9uRGV0YWNo
ZWQpOiBTaG91bGQgY2FsbCBkZWxldGUgaW5zdGVhZCBvZiBkaXJlY3RseSBzZXR0aW5nIG9iamVj
dCB0byAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwpOiBTaG91bGQgdXNlIGEg
ZGlmZmVyZW50IGZsYWcgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHByb2dyYW0gaXMgdHJ1bHkgZGVs
ZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKTogRml4
IGEgdGlueSBidWcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlk
Z2UuY3BwOiBSZWZhY3RvciB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2ViS2l0
QnJpZGdlOjpBTkdMRVdlYktpdEJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRVdlYktp
dEJyaWRnZTo6fkFOR0xFV2ViS2l0QnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2Vi
S2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBTkdM
RVdlYktpdEJyaWRnZTo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeTo6U2hhZGVyU291cmNlRW50cnkpOiBBZGQgYW4gZXh0
cmEgZmllbGQgb2YgdHlwZSBhbmQgbW92ZSBpdCBpbnRvIE1BQy4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOiBVc2UgdGhlIHVwZGF0ZWQg
QU5HTEVXZWJLaXRCcmlkZ2UuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y29tcGlsZVNoYWRlcik6IEZpeCBzb21lIGlzc3Vlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UpOiBFbnRyeSBzaG91bGQgYmUgY3JlYXRlZCBpbiBj
cmVhdGVTaGFkZXIuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hh
ZGVyaXYpOiBGaXggc29tZSBpc3N1ZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6IEZpeCBzb21lIGlzc3Vlcy4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOiBGaXggc29tZSBpc3N1ZXMu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKTogQ3Jl
YXRlIGFuIGVudHJ5LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0
ZVNoYWRlcik6IFJlbW92ZSB0aGUgZW50cnkuCisKIDIwMTAtMDgtMjcgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBDYXJsc29uLgpJ
bmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHJldmlzaW9uIDY2MDc4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTI0OTIsNiArMjQ5Miw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3Mvd3gvUGVuV3guY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9TaW1w
bGVGb250RGF0YVd4LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mvd3gvVHJh
bnNmb3JtYXRpb25NYXRyaXhXeC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2ViS2l0QnJpZGdlLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJLaXRCcmlkZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAnLApJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAkocmV2aXNpb24gNjYwNzgpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAg
cHVibGljOgogICAgICAgICBpZiAobV9hdHRhY2htZW50Q291bnQpCiAgICAgICAgICAgICAtLW1f
YXR0YWNobWVudENvdW50OwogICAgICAgICBpZiAoIW1fYXR0YWNobWVudENvdW50ICYmIG1fZGVs
ZXRlZCkKLSAgICAgICAgICAgIG1fb2JqZWN0ID0gMDsKKyAgICAgICAgICAgIGRlbGV0ZU9iamVj
dCgpOwogICAgIH0KICAgICB1bnNpZ25lZCBnZXRBdHRhY2htZW50Q291bnQoKSB7IHJldHVybiBt
X2F0dGFjaG1lbnRDb3VudDsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJv
Z3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCShyZXZpc2lvbiA2NjA3OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTEgKzQ4LDE1IEBAIFdlYkdMUHJvZ3JhbTo6V2Vi
R0xQcm9ncmFtKFdlYkdMUmVuZGVyaW4KIHZvaWQgV2ViR0xQcm9ncmFtOjpkZWxldGVPYmplY3RJ
bXBsKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQogewogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+ZGVsZXRlUHJvZ3JhbShvYmopOwotICAgIGlmICghb2JqZWN0KCkpIHsKLSAgICAg
ICAgaWYgKG1fdmVydGV4U2hhZGVyKQorICAgIGlmICghZ2V0QXR0YWNobWVudENvdW50KCkpIHsK
KyAgICAgICAgaWYgKG1fdmVydGV4U2hhZGVyKSB7CiAgICAgICAgICAgICBtX3ZlcnRleFNoYWRl
ci0+b25EZXRhY2hlZCgpOwotICAgICAgICBpZiAobV9mcmFnbWVudFNoYWRlcikKKyAgICAgICAg
ICAgIG1fdmVydGV4U2hhZGVyID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9mcmFnbWVu
dFNoYWRlcikgewogICAgICAgICAgICAgbV9mcmFnbWVudFNoYWRlci0+b25EZXRhY2hlZCgpOwor
ICAgICAgICAgICAgbV9mcmFnbWVudFNoYWRlciA9IDA7CisgICAgICAgIH0KICAgICB9CiB9CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDY2MDc4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzA1LDcgKzI3MDUsNyBAQCB2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXCiAgICAgICAgICAgICBtX2N1cnJlbnRQcm9n
cmFtLT5vbkRldGFjaGVkKCk7CiAgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwog
ICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAg
ICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgIGlmIChwcm9ncmFtICYmIHByb2dyYW0tPm9iamVj
dCgpKQogICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOwogICAgIH0KICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHJldmlzaW9uIDY2MDc4KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDQ3ICszMSw1OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLQotQU5HTEVX
ZWJLaXRCcmlkZ2U6OkFOR0xFV2ViS2l0QnJpZGdlKCkgOgotICAgIGJ1aWx0Q29tcGlsZXJzKGZh
bHNlKQorQU5HTEVXZWJLaXRCcmlkZ2U6OkFOR0xFV2ViS2l0QnJpZGdlKGNvbnN0IFRCdWlsdElu
UmVzb3VyY2UmIHJlc291cmNlcykKKyAgICA6IG1fZnJhZ21lbnRDb21waWxlcigwKQorICAgICwg
bV92ZXJ0ZXhDb21waWxlcigwKQorICAgICwgbV9idWlsdENvbXBpbGVycyhmYWxzZSkKKyAgICAs
IG1fcmVzb3VyY2VzKHJlc291cmNlcykKIHsKICAgICBTaEluaXRpYWxpemUoKTsKIH0KIAogQU5H
TEVXZWJLaXRCcmlkZ2U6On5BTkdMRVdlYktpdEJyaWRnZSgpCiB7Ci0gICAgaWYgKGJ1aWx0Q29t
cGlsZXJzKSB7CisgICAgaWYgKG1fYnVpbHRDb21waWxlcnMpIHsKICAgICAgICAgU2hEZXN0cnVj
dChtX2ZyYWdtZW50Q29tcGlsZXIpOwogICAgICAgICBTaERlc3RydWN0KG1fdmVydGV4Q29tcGls
ZXIpOwogICAgIH0KLSAgICAKICAgICBTaEZpbmFsaXplKCk7CiB9CiAKLWJvb2wgQU5HTEVXZWJL
aXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwg
QU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJj
ZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nKQorY29uc3QgY2hhciogQU5HTEVXZWJLaXRC
cmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5H
TEVTaGFkZXJUeXBlIHNoYWRlclR5cGUpCiB7Ci0gICAgaWYgKCFidWlsdENvbXBpbGVycykgewor
ICAgIGlmICghbV9idWlsdENvbXBpbGVycykgewogICAgICAgICBtX2ZyYWdtZW50Q29tcGlsZXIg
PSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdGcmFnbWVudCwgRVNoU3BlY1dlYkdMLCAmbV9y
ZXNvdXJjZXMpOwogICAgICAgICBtX3ZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxl
cihFU2hMYW5nVmVydGV4LCBFU2hTcGVjV2ViR0wsICZtX3Jlc291cmNlcyk7Ci0KLSAgICAgICAg
YnVpbHRDb21waWxlcnMgPSB0cnVlOworICAgICAgICBtX2J1aWx0Q29tcGlsZXJzID0gdHJ1ZTsK
ICAgICB9Ci0gICAgCi0gICAgU2hIYW5kbGUgY29tcGlsZXI7CiAKKyAgICBTaEhhbmRsZSBjb21w
aWxlcjsKICAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSEFERVJfVFlQRV9WRVJURVgpCiAgICAgICAg
IGNvbXBpbGVyID0gbV92ZXJ0ZXhDb21waWxlcjsKICAgICBlbHNlCiAgICAgICAgIGNvbXBpbGVy
ID0gbV9mcmFnbWVudENvbXBpbGVyOworICAgIEFTU0VSVChjb21waWxlcik7CiAKLSAgICBjb25z
dCBjaGFyKiBjb25zdCBzaGFkZXJTb3VyY2VTdHJpbmdzW10gPSB7IHNoYWRlclNvdXJjZSB9Owor
ICAgIGJvb2wgdmFsaWRhdGVTdWNjZXNzID0gU2hDb21waWxlKGNvbXBpbGVyLCAmc2hhZGVyU291
cmNlLCAxLCBFU2hPcHROb25lLCBFRGVidWdPcEludGVybWVkaWF0ZSk7CisgICAgaWYgKCF2YWxp
ZGF0ZVN1Y2Nlc3MpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBTaEdldE9iamVjdENv
ZGUoY29tcGlsZXIpOworfQogCi0gICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUo
Y29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIEVTaE9wdE5vbmUsIEVEZWJ1Z09wSW50
ZXJtZWRpYXRlKTsKK2NvbnN0IGNoYXIqIEFOR0xFV2ViS2l0QnJpZGdlOjpnZXRTaGFkZXJJbmZv
TG9nKEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlKQoreworICAgIGlmICghbV9idWlsdENvbXBp
bGVycykKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0g
U2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyKTsKLSAgICBzaGFkZXJWYWxpZGF0aW9uTG9nID0gU2hH
ZXRJbmZvTG9nKGNvbXBpbGVyKTsKKyAgICBTaEhhbmRsZSBjb21waWxlcjsKKyAgICBpZiAoc2hh
ZGVyVHlwZSA9PSBTSEFERVJfVFlQRV9WRVJURVgpCisgICAgICAgIGNvbXBpbGVyID0gbV92ZXJ0
ZXhDb21waWxlcjsKKyAgICBlbHNlCisgICAgICAgIGNvbXBpbGVyID0gbV9mcmFnbWVudENvbXBp
bGVyOworICAgIEFTU0VSVChjb21waWxlcik7CiAKLSAgICByZXR1cm4gdmFsaWRhdGVTdWNjZXNz
OworICAgIHJldHVybiBTaEdldEluZm9Mb2coY29tcGlsZXIpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCShyZXZpc2lvbiA2
NjA3OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsMTEgQEAKICNpZm5kZWYgQU5HTEVXZWJLaXRCcmlk
Z2VfaAogI2RlZmluZSBBTkdMRVdlYktpdEJyaWRnZV9oCiAKKyNpZiBQTEFURk9STShDSFJPTUlV
TSkKKyNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCisjZWxzZQogI2luY2x1ZGUgIkFOR0xFL1NoYWRl
ckxhbmcuaCIKKyNlbmRpZgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC00MCwyMCArNDQsMTkgQEAgZW51bSBBTkdMRVNoYWRl
clR5cGUgewogCiBjbGFzcyBBTkdMRVdlYktpdEJyaWRnZSB7CiBwdWJsaWM6Ci0KLSAgICBBTkdM
RVdlYktpdEJyaWRnZSgpOworICAgIEFOR0xFV2ViS2l0QnJpZGdlKGNvbnN0IFRCdWlsdEluUmVz
b3VyY2UmIHJlc291cmNlcyk7CiAgICAgfkFOR0xFV2ViS2l0QnJpZGdlKCk7Ci0gICAgCi0gICAg
dm9pZCBzZXRSZXNvdXJjZXMoVEJ1aWx0SW5SZXNvdXJjZSByZXNvdXJjZXMpIHsgbV9yZXNvdXJj
ZXMgPSByZXNvdXJjZXM7IH0KLSAgICAKLSAgICBib29sIHZhbGlkYXRlU2hhZGVyU291cmNlKGNv
bnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFN0cmlu
ZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nKTsK
IAotcHJpdmF0ZToKKyAgICAvLyBJZiBzdWNjZWVkLCByZXR1cm4gdGhlIHRyYW5zbGF0ZWQgc2hh
ZGVyIHNvdXJjZTsgaWYgZmFpbHVyZSwgcmV0dXJuIDAuCisgICAgY29uc3QgY2hhciogdmFsaWRh
dGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUg
c2hhZGVyVHlwZSk7CisgICAgLy8gR2V0IHRoZSBpbmZvIGxvZyBmcm9tIGxhc3QgU2hDb21waWxl
KCkgZm9yIHRoZSBnaXZlbiBzaGFkZXIgdHlwZS4KKyAgICBjb25zdCBjaGFyKiBnZXRTaGFkZXJJ
bmZvTG9nKEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlKTsKIAorcHJpdmF0ZToKICAgICBTaEhh
bmRsZSBtX2ZyYWdtZW50Q29tcGlsZXI7CiAgICAgU2hIYW5kbGUgbV92ZXJ0ZXhDb21waWxlcjsK
IAotICAgIGJvb2wgYnVpbHRDb21waWxlcnM7CisgICAgYm9vbCBtX2J1aWx0Q29tcGlsZXJzOwog
CiAgICAgVEJ1aWx0SW5SZXNvdXJjZSBtX3Jlc291cmNlczsKIH07CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2NjA3OCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODEyLDE1ICs4MTIsMjQgQEAgcHVibGljOgogCiAgICAgaW50IG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQ7CiAKLSAgICB0eXBlZGVmIHN0cnVjdCB7IAotICAgICAg
ICBTdHJpbmcgc291cmNlOyAKLSAgICAgICAgU3RyaW5nIGxvZzsgCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIGNsYXNzIFNoYWRlclNvdXJjZUVudHJ5IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNo
YWRlclNvdXJjZUVudHJ5KCkKKyAgICAgICAgICAgIDogdHlwZSgwKQorICAgICAgICAgICAgLCBp
c1ZhbGlkKGZhbHNlKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgbG9u
ZyB0eXBlOworICAgICAgICBTdHJpbmcgc291cmNlOworICAgICAgICBTdHJpbmcgbG9nOwogICAg
ICAgICBib29sIGlzVmFsaWQ7Ci0gICAgfSBTaGFkZXJTb3VyY2VFbnRyeTsKLSAgICBIYXNoTWFw
PFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5PiBtX3NoYWRlclNvdXJjZU1hcDsK
KyAgICB9OwogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29t
cGlsZXI7CisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJj
ZUVudHJ5PiBTaGFkZXJTb3VyY2VNYXA7CisgICAgU2hhZGVyU291cmNlTWFwIG1fc2hhZGVyU291
cmNlTWFwOworCisgICAgT3duUHRyPEFOR0xFV2ViS2l0QnJpZGdlPiBtX2NvbXBpbGVyOwogCiAg
ICAgQXR0cmlidXRlcyBtX2F0dHJzOwogICAgIFZlY3RvcjxWZWN0b3I8ZmxvYXQ+ID4gbV92ZXJ0
ZXhBcnJheTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2NjA3OCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xODMsMjggKzE4MywyNCBAQCBHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0
M0QoR3JhCiAgICAgfQogICAgIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotCi0gICAg
VEJ1aWx0SW5SZXNvdXJjZSBBTkdMRVJlc291cmNlczsKLQotICAgIEFOR0xFUmVzb3VyY2VzLm1h
eFZlcnRleEF0dHJpYnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVkVSVEVYX0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhBdHRyaWJzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IDA7Ci0gICAgZ2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmQU5H
TEVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lm1heFZhcnlpbmdWZWN0b3JzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3Jz
KTsKLSAgICBBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0g
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBn
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZBTkdMRVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAg
ICBBTkdMRVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgZ2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNv
dXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMubWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyk7Ci0KKyAgICBUQnVpbHRJblJlc291cmNlIGFuZ2xlUmVzb3VyY2Vz
OworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMgPSAwOworICAgIGdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZhbmdsZVJlc291cmNl
cy5tYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTLCAmYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9ybVZlY3Rv
cnMpOworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzID0gMDsKKyAgICBnZXRJ
bnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUywgJmFuZ2xlUmVz
b3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJmFuZ2xlUmVzb3VyY2VzLm1heFZlcnRl
eFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5tYXhDb21iaW5l
ZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VV
bml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTLCAmYW5nbGVSZXNvdXJjZXMubWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGFuZ2xlUmVzb3VyY2VzLm1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSAwOworICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAm
YW5nbGVSZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk7CiAgICAgLy8gQWx3YXlz
IHNldCB0byAxIGZvciBPcGVuR0wgRVMuCi0gICAgQU5HTEVSZXNvdXJjZXMubWF4RHJhd0J1ZmZl
cnMgPSAxOwotICAgIAotICAgIG1fY29tcGlsZXIuc2V0UmVzb3VyY2VzKEFOR0xFUmVzb3VyY2Vz
KTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb21waWxl
ciA9IG5ldyBBTkdMRVdlYktpdEJyaWRnZShhbmdsZVJlc291cmNlcyk7CiAgICAgCiAgICAgOjpn
bEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICAgICA6OmdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKQEAgLTYxNyw1NCArNjEzLDQwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbG9yTWFzayhib29sIHIKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNo
YWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKICAg
ICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBpbnQgR0xzaGFkZXJUeXBlOwot
ICAgIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlOwotCi0gICAgZ2xHZXRTaGFkZXJpdihzaGFk
ZXIsIFNIQURFUl9UWVBFLCAmR0xzaGFkZXJUeXBlKTsKLSAgICAKLSAgICBpZiAoR0xzaGFkZXJU
eXBlID09IFZFUlRFWF9TSEFERVIpCi0gICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9W
RVJURVg7Ci0gICAgZWxzZSBpZiAoR0xzaGFkZXJUeXBlID09IEZSQUdNRU5UX1NIQURFUikKLSAg
ICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX0ZSQUdNRU5UOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuOyAvLyBJbnZhbGlkIHNoYWRlciB0eXBlLgotCi0gICAgSGFzaE1hcDxQbGF0Zm9y
bTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLQotICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZW5kKCkpCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkgeworICAgICAgICAvLyBFaXRoZXIgaXQgaXMgbm90IGEgdmFsaWQgc2hh
ZGVyIG9yIHNoYWRlclNvdXJjZSgpIGhhc24ndCBiZWVuIGNhbGxlZC4KKyAgICAgICAgLy8gUGFz
c2luZyBkb3duIHRvIGdsIGRyaXZlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBlcnJvci4KKyAg
ICAgICAgOjpnbENvbXBpbGVTaGFkZXIoKEdMdWludCkgc2hhZGVyKTsKICAgICAgICAgcmV0dXJu
OwotCisgICAgfQogICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OwogCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7Ci0gICAgU3RyaW5nIHNoYWRl
ckluZm9Mb2c7Ci0KLSAgICBib29sIGlzVmFsaWQgPSBtX2NvbXBpbGVyLnZhbGlkYXRlU2hhZGVy
U291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nKTsKLQotICAgIGVudHJ5LmxvZyA9IHNoYWRlcklu
Zm9Mb2c7Ci0gICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7Ci0KLSAgICBpZiAoIWlzVmFsaWQp
Ci0gICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBm
b3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlICAgIAorICAgIEFOR0xFU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlOworICAgIEFTU0VSVChlbnRyeS50eXBlID09IEdMX1ZFUlRFWF9T
SEFERVIgfHwgZW50cnkudHlwZSA9PSBHTF9GUkFHTUVOVF9TSEFERVIpOworICAgIGlmIChlbnRy
eS50eXBlID09IEdMX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJf
VFlQRV9WRVJURVg7CisgICAgZWxzZQorICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVSX1RZUEVf
RlJBR01FTlQ7CiAKLSAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9IHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2UubGVuZ3RoKCk7CisgICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclNv
dXJjZSA9IG1fY29tcGlsZXItPnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4
KCkuZGF0YSgpLCBzaGFkZXJUeXBlKTsKKyAgICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Up
IHsKKyAgICAgICAgZW50cnkubG9nID0gbV9jb21waWxlci0+Z2V0U2hhZGVySW5mb0xvZyhzaGFk
ZXJUeXBlKTsKKyAgICAgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47
IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUsIGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBp
bGluZyB0cmFuc2xhdGVkIHNvdXJjZQorICAgIH0KKyAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsK
IAotICAgIGNvbnN0IENTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nID0gdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclB0
ciA9IHRyYW5zbGF0ZWRTaGFkZXJDU3RyaW5nLmRhdGEoKTsKLSAgICAKLSAgICA6OmdsU2hhZGVy
U291cmNlKChHTHVpbnQpIHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJQdHIsICZ0cmFuc2xh
dGVkU2hhZGVyTGVuZ3RoKTsKLSAgICAKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRlckxlbmd0aCA9
IHN0cmxlbih0cmFuc2xhdGVkU2hhZGVyU291cmNlKTsKKyAgICA6OmdsU2hhZGVyU291cmNlKChH
THVpbnQpIHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsICZ0cmFuc2xhdGVkU2hh
ZGVyTGVuZ3RoKTsKICAgICA6OmdsQ29tcGlsZVNoYWRlcigoR0x1aW50KSBzaGFkZXIpOwotICAg
IAotICAgIGludCBHTENvbXBpbGVTdWNjZXNzOwotICAgIAotICAgIDo6Z2xHZXRTaGFkZXJpdigo
R0x1aW50KSBzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7Ci0gICAg
CisKKyAgICBpbnQgZ2xDb21waWxlU3VjY2VzczsKKyAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWlu
dClzaGFkZXIsIEdMX0NPTVBJTEVfU1RBVFVTLCAmZ2xDb21waWxlU3VjY2Vzcyk7CiAgICAgLy8g
QVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2NlcHRlZCBieSBPcGVu
R0wKLSAgICBBU1NFUlQoR0xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKKyAgICBBU1NFUlQo
Z2xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2ln
bmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCkBAIC0xMDQyLDE1ICsxMDI0
LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IobG9uZyB4LCAKIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLSAgICAKICAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRy
eTsKLQotICAgIGVudHJ5LnNvdXJjZSA9IHN0cmluZzsKLQotICAgIG1fc2hhZGVyU291cmNlTWFw
LnNldChzaGFkZXIsIGVudHJ5KTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBBU1NFUlQocmVzdWx0ICE9
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKTsKKyAgICByZXN1bHQtPnNlY29uZC5zb3VyY2UgPSBz
dHJpbmc7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKHVuc2lnbmVk
IGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKQEAgLTEzOTEsOTAgKzEz
NjksNjQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUAogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwg
dW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsK
LSAgICAKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgCi0gICAgSGFzaE1h
cDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICAKLSAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKLSAgICAgICAgY2FzZSBTSEFERVJfVFlQ
RToKLSAgICAgICAgICAgIC8vIExldCBPcGVuR0wgaGFuZGxlIHRoZXNlLgotICAgICAgICAKLSAg
ICAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIENPTVBJTEVfU1RBVFVTOgotICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgewotICAgICAg
ICAgICAgICAgICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8aW50PihmYWxzZSk7CisgICAgU2hhZGVy
U291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAg
ICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgc3dp
dGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdMX0NPTVBJTEVfU1RBVFVTOgorICAgICAgICAg
ICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihlbnRyeS5pc1ZhbGlkKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBHTF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICAgICBp
ZiAoIWVudHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgICAgICAgICAqdmFsdWUgPSBlbnRyeS5sb2cu
bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgKCp2YWx1ZSkrKzsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAoKnZhbHVlKSA9IHN0YXRpY19jYXN0PGludD4o
cmVzdWx0LT5zZWNvbmQuaXNWYWxpZCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIElORk9fTE9HX0xFTkdUSDoKLSAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAoKnZhbHVlKSA9
IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlckluZm9Mb2coc2hhZGVyKS5sZW5ndGgo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU0hBREVS
X1NPVVJDRV9MRU5HVEg6Ci0gICAgICAgICAgICAoKnZhbHVlKSA9IGdldFNoYWRlclNvdXJjZShz
aGFkZXIpLmxlbmd0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgY2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgICAgICp2YWx1ZSA9
IGVudHJ5LnNvdXJjZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICgqdmFsdWUpCisgICAgICAg
ICAgICAgICAgKCp2YWx1ZSkrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAg
IH0KKworICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7
CiB9CiAKIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKIHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQogICAgIGVuc3VyZUNv
bnRleHQobV9jb250ZXh0T2JqKTsKLSAgICBHTGludCBsZW5ndGg7Ci0gICAgOjpnbEdldFNoYWRl
cml2KChHTHVpbnQpIHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAg
IEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAKKyAgICBTaGFkZXJTb3Vy
Y2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
ICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQotICAgICAgICAgcmV0
dXJuICIiOworICAgICAgICByZXR1cm4gIiI7CiAKLSAgICAgU2hhZGVyU291cmNlRW50cnkgZW50
cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1
bHQtPnNlY29uZDsKKyAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCisgICAgICAgIHJldHVybiBlbnRy
eS5sb2c7CiAKLSAgICAgaWYgKGVudHJ5LmlzVmFsaWQpIHsKLSAgICAgICAgIEdMaW50IGxlbmd0
aDsKLSAgICAgICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KSBzaGFkZXIsIEdMX0lORk9fTE9H
X0xFTkdUSCwgJmxlbmd0aCk7Ci0KLSAgICAgICAgIEdMc2l6ZWkgc2l6ZTsKLSAgICAgICAgIEdM
Y2hhciogaW5mbyA9IChHTGNoYXIqKSBmYXN0TWFsbG9jKGxlbmd0aCk7Ci0gICAgICAgICBpZiAo
IWluZm8pCi0gICAgICAgICAgICAgcmV0dXJuICIiOwotCi0gICAgICAgICA6OmdsR2V0U2hhZGVy
SW5mb0xvZygoR0x1aW50KSBzaGFkZXIsIGxlbmd0aCwgJnNpemUsIGluZm8pOwotCi0gICAgICAg
ICBTdHJpbmcgcyhpbmZvKTsKLSAgICAgICAgIGZhc3RGcmVlKGluZm8pOwotICAgICAgICAgcmV0
dXJuIHM7Ci0gICAgIH0KLSAgICAgZWxzZSB7Ci0gICAgICAgICByZXR1cm4gZW50cnkubG9nOwot
ICAgICB9CisgICAgR0xpbnQgbGVuZ3RoOworICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KXNo
YWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKKyAgICBHTHNpemVpIHNpemU7Cisg
ICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZhc3RNYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAo
IWluZm8pCisgICAgICAgIHJldHVybiAiIjsKKyAgICA6OmdsR2V0U2hhZGVySW5mb0xvZygoR0x1
aW50KXNoYWRlciwgbGVuZ3RoLCAmc2l6ZSwgaW5mbyk7CisgICAgQVNTRVJUKGxlbmd0aCA9IHNp
emUgKyAxKTsKKyAgICBTdHJpbmcgcyhpbmZvKTsKKyAgICBmYXN0RnJlZShpbmZvKTsKKyAgICBy
ZXR1cm4gczsKIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiB7Ci0gICAgQVNTRVJUKHNoYWRlcik7Ci0KICAgICBl
bnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmpl
Y3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOwotCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuICIiOwogCkBAIC0xNTg1LDcgKzE1
MzcsMTQgQEAgdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcgogdW5zaWdu
ZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUpCiB7
CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAgIHJldHVybiBnbENyZWF0ZVNo
YWRlcigodHlwZSA9PSBGUkFHTUVOVF9TSEFERVIpID8gR0xfRlJBR01FTlRfU0hBREVSIDogR0xf
VkVSVEVYX1NIQURFUik7CisgICAgdW5zaWduZWQgc2hhZGVyID0gZ2xDcmVhdGVTaGFkZXIodHlw
ZSk7CisgICAgaWYgKHNoYWRlcikgeworICAgICAgICBBU1NFUlQodHlwZSA9PSBHTF9WRVJURVhf
U0hBREVSIHx8IHR5cGUgPT0gR0xfRlJBR01FTlRTSEFERVIpOworICAgICAgICBTaGFkZXJTb3Vy
Y2VFbnRyeSBlbnRyeTsKKyAgICAgICAgZW50cnkudHlwZSA9IHR5cGU7CisgICAgICAgIG1fc2hh
ZGVyU291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKKyAgICB9CisgICAgcmV0dXJuIHNoYWRl
cjsKIH0KIAogdW5zaWduZWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQpAQCAt
MTYyNCw2ICsxNTgzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKHVu
cwogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICBnbERlbGV0ZVNoYWRl
cihzaGFkZXIpOworICAgIGlmICg6OmdsSXNTaGFkZXIoc2hhZGVyKSA9PSBHTF9GQUxTRSkKKyAg
ICAgICAgbV9zaGFkZXJTb3VyY2VNYXAucmVtb3ZlKHNoYWRlcik7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjY0MTEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTAtMDgtMzAgIFpoZW55YW8gTW8gIDx6bW9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBIb29rIHVwIEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisK
KyAgICAgICAgKiBXZWJLaXQuZ3lwOiBBZGQgQU5HTEUgZGVwZW5kZW5jeS4KKyAgICAgICAgKiBz
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmluaXRpYWxpemUpOiBJbml0IEFOR0xF
IHN0dWZmLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
Ojpjb21waWxlU2hhZGVyKTogVXNlIEFOR0xFIHNoYWRlciB2YWxpZGF0aW9uLgorICAgICAgICAo
V2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJpdik6IERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpn
ZXRTaGFkZXJJbmZvTG9nKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzaGFkZXJTb3VyY2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3Jl
YXRlU2hhZGVyKTogU3RhcnRpbmcgYW4gZW50cnkgdG8gdHJhY2sgdGhlIHNoYWRlci4KKyAgICAg
ICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlU2hhZGVy
KTogRW5kaW5nIHRoZSBlbnRyeSBvZiB0aGUgZGVsZXRlZCBzaGFkZXIuCisgICAgICAgICogc3Jj
L1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6U2hhZGVyU291cmNlRW50cnk6OlNoYWRlclNv
dXJjZUVudHJ5KTogQ3JlYXRlIHRoZSBzdHJ1Y3R1cmUgdG8gdHJhY2sgYSBzaGFkZXIuCisKIDIw
MTAtMDgtMzAgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3NyYz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24g
NjYwNzgpCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNiArOTAsNyBAQAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2FwcC9h
cHAuZ3lwOmFwcF9iYXNlJywgIyBGb3IgR0xDb250ZXh0CiAgICAgICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lhJywKICAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFwaS5neXA6bnBhcGknLAorICAg
ICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9i
dWlsZF9hbmdsZS5neXA6dHJhbnNsYXRvcl9jb21tb24nLAogICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwogICAgICAgICAgICAgICAgICc8
KGNocm9taXVtX3NyY19kaXIpL3NraWEvc2tpYS5neXA6c2tpYScsCkBAIC05OCw2ICs5OSw3IEBA
CiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICdwdWJsaWMn
LAogICAgICAgICAgICAgICAgICdzcmMnLAorICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3Ny
Y19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xTTEFORycsCiAgICAgICAgICAgICBd
LAogICAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAgICAgICAgICAgICAgICAgJ1dFQktJVF9JTVBM
RU1FTlRBVElPTj0xJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNjYwNzgpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsLmgiCiAKKyNpbmNsdWRlICJSZXNvdXJjZUxpbWl0cy5oIgogI2lu
Y2x1ZGUgImFwcC9nZngvZ2wvZ2xfYmluZGluZ3MuaCIKICNpbmNsdWRlICJhcHAvZ2Z4L2dsL2ds
X2NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMTExLDYgKzExMiwz
MCBAQCBib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmluCiAKICAgICBnbEVu
YWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKICAgICBtX2luaXRpYWxpemVkID0g
dHJ1ZTsKKworICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgorICAgIFRCdWlsdEluUmVzb3Vy
Y2UgYW5nbGVSZXNvdXJjZXM7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyA9
IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9BVFRSSUJTLCAmYW5nbGVSZXNvdXJj
ZXMubWF4VmVydGV4QXR0cmlicyk7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4VW5pZm9y
bVZlY3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2KDB4OERGQiwgLy8gTUFYX1ZFUlRFWF9VTklG
T1JNX1ZFQ1RPUlMKKyAgICAgICAgICAgICAgICAmYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4VW5p
Zm9ybVZlY3RvcnMpOworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZhcnlpbmdWZWN0b3JzID0gMDsK
KyAgICBnZXRJbnRlZ2VydigweDhERkMsIC8vIE1BWF9WQVJZSU5HX1ZFQ1RPUlMKKyAgICAgICAg
ICAgICAgICAmYW5nbGVSZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMpOworICAgIGFuZ2xlUmVz
b3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihH
TF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5tYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xfTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5tYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBhbmdsZVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAg
Z2V0SW50ZWdlcnYoR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291cmNlcy5t
YXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoMHg4REZELCAvLyBNQVhfRlJBR01FTlRf
VU5JRk9STV9WRUNUT1JTCisgICAgICAgICAgICAgICAgJmFuZ2xlUmVzb3VyY2VzLm1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMpOworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVT
LgorICAgIGFuZ2xlUmVzb3VyY2VzLm1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbXBpbGVy
ID0gbmV3IFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlKGFuZ2xlUmVzb3VyY2VzKTsKKwogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC02MTMsNyArNjM4LDQzIEBAIERFTEVHQVRFX1RPX0dMXzEo
Y2xlYXJTdGVuY2lsLCBDbGVhclN0ZW4KIAogREVMRUdBVEVfVE9fR0xfNChjb2xvck1hc2ssIENv
bG9yTWFzaywgYm9vbCwgYm9vbCwgYm9vbCwgYm9vbCkKIAotREVMRUdBVEVfVE9fR0xfMShjb21w
aWxlU2hhZGVyLCBDb21waWxlU2hhZGVyLCBXZWJHTElkKQordm9pZCBXZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjpjb21waWxlU2hhZGVyKFdlYkdMSWQgc2hhZGVyKQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCA9PSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICAvLyBFaXRoZXIgaXQgaXMgbm90IGEg
dmFsaWQgc2hhZGVyIG9yIHNoYWRlclNvdXJjZSgpIGhhc24ndCBiZWVuIGNhbGxlZC4KKyAgICAg
ICAgLy8gUGFzc2luZyBkb3duIHRvIGdsIGRyaXZlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBl
cnJvci4KKyAgICAgICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisK
KyAgICBXZWJDb3JlOjpBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZTsKKyAgICBBU1NFUlQoZW50
cnkudHlwZSA9PSBHTF9WRVJURVhfU0hBREVSIHx8IGVudHJ5LnR5cGUgPT0gR0xfRlJBR01FTlRf
U0hBREVSKTsKKyAgICBpZiAoZW50cnkudHlwZSA9PSBHTF9WRVJURVhfU0hBREVSKQorICAgICAg
ICBzaGFkZXJUeXBlID0gV2ViQ29yZTo6U0hBREVSX1RZUEVfVkVSVEVYOworICAgIGVsc2UKKyAg
ICAgICAgc2hhZGVyVHlwZSA9IFdlYkNvcmU6OlNIQURFUl9UWVBFX0ZSQUdNRU5UOworCisgICAg
Y29uc3QgY2hhciogdHJhbnNsYXRlZFNoYWRlclNvdXJjZSA9IG1fY29tcGlsZXItPnZhbGlkYXRl
U2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlKTsKKyAg
ICBpZiAoIXRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UpIHsKKyAgICAgICAgZW50cnkubG9nID0gbV9j
b21waWxlci0+Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXJUeXBlKTsKKyAgICAgICAgZW50cnkuaXNW
YWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm47IC8vIFNoYWRlciBkaWRuJ3QgdmFsaWRhdGUs
IGRvbid0IG1vdmUgZm9yd2FyZCB3aXRoIGNvbXBpbGluZyB0cmFuc2xhdGVkIHNvdXJjZQorICAg
IH0KKyAgICBlbnRyeS5pc1ZhbGlkID0gdHJ1ZTsKKworICAgIGludCB0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoID0gc3RybGVuKHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UpOworICAgIGdsU2hhZGVyU291
cmNlKHNoYWRlciwgMSwgJnRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsICZ0cmFuc2xhdGVkU2hhZGVy
TGVuZ3RoKTsKKyAgICBnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICAgIGludCBnbENvbXBp
bGVTdWNjZXNzOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywg
JmdsQ29tcGlsZVN1Y2Nlc3MpOworICAgIC8vIEFTU0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBH
TFNMIHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdMCisgICAgQVNTRVJUKGdsQ29tcGlsZVN1Y2Nl
c3MgPT0gR0xfVFJVRSk7Cit9CiAKIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2ln
bmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCkBAIC04NzIsMTEgKzkzMyw1MCBA
QCBXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wCiAKIERFTEVHQVRFX1RP
X0dMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYsIEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2RVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi1ERUxFR0FURV9U
T19HTF8zKGdldFNoYWRlcml2LCBHZXRTaGFkZXJpdiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywg
aW50KikKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVyaXYo
V2ViR0xJZCBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ICE9
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAg
IGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGVudHJ5LmlzVmFsaWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNl
IEdMX0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgICAgIGlmICghZW50cnkuaXNWYWxpZCkgewor
ICAgICAgICAgICAgICAgICp2YWx1ZSA9IGVudHJ5LmxvZy5sZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoKnZhbHVlKQorICAgICAgICAgICAgICAgICAgICAoKnZhbHVlKSsrOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAgICAgICAgKnZhbHVlID0g
ZW50cnkuc291cmNlLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAg
ICAgICAgICAoKnZhbHVlKSsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7Cit9CiAKIFdlYlN0
cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMSWQgc2hhZGVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVy
U291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIFdlYlN0cmluZygpOworCisgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1
bHQtPnNlY29uZDsKKyAgICBpZiAoIWVudHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgV2ViU3RyaW5n
IHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVURjgoZW50cnkubG9nLnV0ZjgoKS5kYXRhKCksIGVudHJ5
LmxvZy5sZW5ndGgoKSk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorCiAgICAgR0xpbnQg
bG9nTGVuZ3RoOwogICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsb2dMZW5ndGgpOwogICAgIGlmICghbG9nTGVuZ3RoKQpAQCAtODk1LDE4ICs5OTUsMTEgQEAg
V2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcAogV2ViU3RyaW5nIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJjZShXZWJHTElkIHNoYWRl
cikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBsb2dMZW5ndGg7Ci0g
ICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbG9nTGVu
Z3RoKTsKLSAgICBpZiAoIWxvZ0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwot
ICAgIEdMY2hhciogbG9nID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICog
c2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAo
cmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gV2ViU3Ry
aW5nKCk7Ci0gICAgR0xzaXplaSByZXR1cm5lZExvZ0xlbmd0aDsKLSAgICBnbEdldFNoYWRlclNv
dXJjZShzaGFkZXIsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cpOwotICAgIEFT
U0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBXZWJTdHJpbmcg
cmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKLSAgICBm
YXN0RnJlZShsb2cpOworICAgIFdlYlN0cmluZyByZXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KHJl
c3VsdC0+c2Vjb25kLnNvdXJjZS51dGY4KCkuZGF0YSgpLCByZXN1bHQtPnNlY29uZC5zb3VyY2Uu
bGVuZ3RoKCkpOwogICAgIHJldHVybiByZXM7CiB9CiAKQEAgLTEwMTYsOSArMTEwOSw5IEBAIERF
TEVHQVRFX1RPX0dMXzQoc2Npc3NvciwgU2Npc3NvciwgbG9uZywKIAogdm9pZCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpzaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIsIGNvbnN0
IGNoYXIqIHN0cmluZykKIHsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBs
ZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKLSAgICBnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZz
dHJpbmcsICZsZW5ndGgpOworICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIEFTU0VSVChyZXN1bHQgIT0gbV9z
aGFkZXJTb3VyY2VNYXAuZW5kKCkpOworICAgIHJlc3VsdC0+c2Vjb25kLnNvdXJjZSA9IFN0cmlu
ZyhzdHJpbmcpOwogfQogCiBERUxFR0FURV9UT19HTF8zKHN0ZW5jaWxGdW5jLCBTdGVuY2lsRnVu
YywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9uZykKQEAgLTExNTcsNyArMTI1MCwx
OCBAQCB1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsCiAgICAgcmV0dXJu
IG87CiB9CiAKLURFTEVHQVRFX1RPX0dMXzFSKGNyZWF0ZVNoYWRlciwgQ3JlYXRlU2hhZGVyLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCk7Cit1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyBzaGFkZXJUeXBlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVuc2lnbmVkIHNoYWRlciA9IGdsQ3JlYXRlU2hh
ZGVyKHNoYWRlclR5cGUpOworICAgIGlmIChzaGFkZXIpIHsKKyAgICAgICAgQVNTRVJUKHNoYWRl
clR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUiB8fCBzaGFkZXJUeXBlID09IEdMX0ZSQUdNRU5UX1NI
QURFUik7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OworICAgICAgICBlbnRyeS50
eXBlID0gc2hhZGVyVHlwZTsKKyAgICAgICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwg
ZW50cnkpOworICAgIH0KKyAgICByZXR1cm4gc2hhZGVyOworfQogCiB1bnNpZ25lZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVUZXh0dXJlKCkKIHsKQEAgLTExOTUsNiAr
MTI5OSw4IEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGUKIHsKICAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAg
IGlmIChnbElzU2hhZGVyKHNoYWRlcikgPT0gR0xfRkFMU0UpCisgICAgICAgIG1fc2hhZGVyU291
cmNlTWFwLnJlbW92ZShzaGFkZXIpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5o
CShyZXZpc2lvbiA2NjA3OCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMywxMCBAQAogCiAj
aWYgRU5BQkxFKDNEX0NBTlZBUykKIAorI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCiAj
aW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5o
PgogCkBAIC0zMTYsNiArMzE4LDI1IEBAIHByaXZhdGU6CiAgICAgTGlzdEhhc2hTZXQ8dW5zaWdu
ZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CiAKICAgICBPd25QdHI8Z2Z4OjpHTENvbnRleHQ+
IG1fZ2xDb250ZXh0OworCisgICAgY2xhc3MgU2hhZGVyU291cmNlRW50cnkgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkoKQorICAgICAgICAgICAgICAgIDogdHlwZSgw
KQorICAgICAgICAgICAgICAgICwgaXNWYWxpZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOworICAgICAgICBTdHJpbmcgc291cmNlOwor
ICAgICAgICBTdHJpbmcgbG9nOworICAgICAgICBib29sIGlzVmFsaWQ7CisgICAgfTsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxXZWJHTElkLCBTaGFkZXJTb3VyY2VFbnRyeT4gU2hhZGVyU291cmNl
TWFwOworICAgIFNoYWRlclNvdXJjZU1hcCBtX3NoYWRlclNvdXJjZU1hcDsKKworICAgIE93blB0
cjxXZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZT4gbV9jb21waWxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjY0MTEpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0wOC0zMCAgWmhl
bnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEhvb2sgdXAgQU5HTEUgd2l0aCBjaHJvbWl1bSAtLWluLXByb2Nl
c3Mtd2ViZ2wgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDQzMDkKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmli
dXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sOiBSZW1vdmUgI2lmZGVmIEdM
RVMuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29weS10ZXgtaW1hZ2UtYW5kLXN1Yi1p
bWFnZS0yZC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5k
LWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL2dsLXVuaWZvcm0tYXJyYXlzLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2Fu
dmFzL3dlYmdsL2luZGV4LXZhbGlkYXRpb24td2l0aC1yZXNpemVkLWJ1ZmZlci5odG1sOiBEaXR0
by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wb2ludC1zaXplLmh0bWw6IERpdHRvLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Byb2dyYW0tdGVzdC5odG1sOiBEaXR0by4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1wYWNrLWFsaWdubWVudC5odG1s
OiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZnJhZ21lbnRT
aGFkZXIuZnJhZzogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LXN1Yi1p
bWFnZS0yZC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXhJbWFn
ZTJESW1hZ2VEYXRhVGVzdC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC90ZXh0dXJlLWFjdGl2ZS1iaW5kLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3RleHR1cmUtY29tcGxldGUuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvdGV4dHVyZS1ucG90Lmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFz
L3dlYmdsL3RleHR1cmUtdHJhbnNwYXJlbnQtcGl4ZWxzLWluaXRpYWxpemVkLmh0bWw6IERpdHRv
LgorCiAyMDEwLTA4LTI3ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2NvbnRleHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlh
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRl
eHQtYXR0cmlidXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCShyZXZpc2lv
biA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvbnRleHQtYXR0cmli
dXRlcy1hbHBoYS1kZXB0aC1zdGVuY2lsLWFudGlhbGlhcy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xNiw5ICsxNiw3IEBAIHZvaWQgbWFpbigpCiA8L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0iZnNo
YWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lv
biBoaWdocCBmbG9hdDsKLSNlbmRpZgogdmFyeWluZyB2ZWM0IGNvbG9yOwogCiB2b2lkIG1haW4o
KQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29weS10ZXgtaW1hZ2UtYW5k
LXN1Yi1pbWFnZS0yZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2NvcHktdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQuaHRtbAkocmV2aXNpb24gNjYw
NzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb3B5LXRleC1pbWFnZS1hbmQt
c3ViLWltYWdlLTJkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE4LDEyICsxOCw3IEBAIHZvaWQg
bWFpbigpCiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQi
PgogdW5pZm9ybSBzYW1wbGVyMkQgdGV4OwotLy8gV29ya2Fyb3VuZCBmb3Igbm9uLWNvbXBsaWFu
dCBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgKEZJWE1FKQotI2lmIGRlZmluZWQoR0xfRVMpCiB2YXJ5
aW5nIG1lZGl1bXAgdmVjMiB0ZXhDb29yZDsKLSNlbHNlCi12YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7
Ci0jZW5kaWYKIAogdm9pZCBtYWluKCkKIHsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0
Lmh0bWwJKHJldmlzaW9uIDY2MDc4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw5
ICsyMyw3IEBAIHZvaWQgbWFpbigpCiB9CiA8L3NjcmlwdD4KIDxzY3JpcHQgaWQ9ImZzaGFkZXIi
IHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KLSNpZmRlZiBHTF9FUwogcHJl
Y2lzaW9uIGhpZ2hwIGZsb2F0OwotI2VuZGlmCiB2YXJ5aW5nIHZlYzQgY29sb3I7CiB2b2lkIG1h
aW4oKQogewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1h
cnJheXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9n
bC11bmlmb3JtLWFycmF5cy5odG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2dsLXVuaWZvcm0tYXJyYXlzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTIxLDEyICsyMSw3IEBACiA8L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0i
eC1zaGFkZXIveC1mcmFnbWVudCI+Ci0gICAgLy8gV29ya2Fyb3VuZCBmb3Igbm9uLWNvbXBsaWFu
dCBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgKEZJWE1FKQotICAgICNpZiBkZWZpbmVkKEdMX0VTKQog
ICAgIHVuaWZvcm0gbWVkaXVtcCAkdHlwZSBjb2xvclszXTsKLSAgICAjZWxzZQotICAgIHVuaWZv
cm0gJHR5cGUgY29sb3JbM107Ci0gICAgI2VuZGlmCiAgICAgdm9pZCBtYWluKCkKICAgICB7CiAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3JbMF0kZWxlbSwgY29sb3JbMV0kZWxlbSwg
Y29sb3JbMl0kZWxlbSwgMSk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9p
bmRleC12YWxpZGF0aW9uLXdpdGgtcmVzaXplZC1idWZmZXIuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9pbmRleC12YWxpZGF0aW9uLXdpdGgtcmVzaXpl
ZC1idWZmZXIuaHRtbAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9pbmRleC12YWxpZGF0aW9uLXdpdGgtcmVzaXplZC1idWZmZXIuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTksOSArMTksNyBAQCB2b2lkIG1haW4oKSB7CiB9CiA8L3NjcmlwdD4KIDxz
Y3JpcHQgaWQ9ImZzIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSNpZiBkZWZpbmVkKEdM
X0VTKQogcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0jZW5kaWYKIHZhcnlpbmcgdmVjNCBjb2xv
cjsKIHZvaWQgbWFpbigpIHsKICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wb2ludC1zaXplLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcG9pbnQtc2l6ZS5odG1sCShyZXZpc2lvbiA2NjA3
OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3BvaW50LXNpemUuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMTgsOSArMTgsNyBAQCB2b2lkIG1haW4oKQogPC9zY3JpcHQ+CiAKIDxz
Y3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVmIEdM
X0VTCiBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSNlbmRpZgogdmFyeWluZyB2ZWM0IGNvbG9y
OwogCiB2b2lkIG1haW4oKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcHJv
Z3JhbS10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvcHJvZ3JhbS10ZXN0Lmh0bWwJKHJldmlzaW9uIDY2MDc4KQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcHJvZ3JhbS10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE0
ICs1NSwxNCBAQCBmdW5jdGlvbiBnbygpIHsKICAgICAgICAgICAgICAgImJhZCB2ZXJ0ZXggc2hh
ZGVyIHNob3VsZCBmYWlsIHRvIGNvbXBpbGUiKTsKIAogICAgIHZhciBmcyA9IGdsLmNyZWF0ZVNo
YWRlcihnbC5GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsLnNoYWRlclNvdXJjZShmcywgIiNpZmRl
ZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2YXJ5aW5nIHZlYzQg
dkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsgfSIpOworICAgIGds
LnNoYWRlclNvdXJjZShmcywgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIHZhcnlpbmcgdmVj
NCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7CiAgICAg
Z2wuY29tcGlsZVNoYWRlcihmcyk7CiAKICAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVyUGFyYW1l
dGVyKGZzLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKICAgICAgICAgICAgICAgImdvb2Qg
ZnJhZ21lbnQgc2hhZGVyIHNob3VsZCBjb21waWxlIik7CiAKICAgICB2YXIgZnMyID0gZ2wuY3Jl
YXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2wuc2hhZGVyU291cmNlKGZzMiwg
IiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2YXJ5aW5n
IHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvciAqIDAuNTsg
fSIpOworICAgIGdsLnNoYWRlclNvdXJjZShmczIsICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtc
biB2YXJ5aW5nIHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xv
ciAqIDAuNTsgfSIpOwogICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMyKTsKIAogICAgIGFzc2VydE1z
ZyhnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoZnMyLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwK
QEAgLTI0Miw3ICsyNDIsNyBAQCBmdW5jdGlvbiBnbygpIHsKICAgICBnbEVycm9yU2hvdWxkQmUo
Z2wsIGdsLk5PX0VSUk9SLCAiVGhlIGN1cnJlbnQgcHJvZ3JhbSBzaG91bGRuJ3QgYmUgZGVsZXRl
ZCIpOwogCiAgICAgdmFyIGZzMyA9IGdsLmNyZWF0ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIp
OwotICAgIGdsLnNoYWRlclNvdXJjZShmczMsICIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0O1xuI2VuZGlmXG4gdmFyeWluZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBn
bF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsKKyAgICBnbC5zaGFkZXJTb3VyY2UoZnMzLCAicHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4gdmFyeWluZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkg
eyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsKICAgICBnbC5jb21waWxlU2hhZGVyKGZzMyk7
CiAKICAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKGZzMywgZ2wuQ09NUElMRV9T
VEFUVVMpID09IHRydWUsCkBAIC0yNTMsNyArMjUzLDcgQEAgZnVuY3Rpb24gZ28oKSB7CiAgICAg
Z2xFcnJvclNob3VsZEJlKGdsLCBnbC5JTlZBTElEX1ZBTFVFLCAiYW4gdW5hdHRhY2hlZCBzaGFk
ZXIgc2hvdWxkIGJlIGRlbGV0ZWQgaW1tZWRpYXRlbHkiKTsKIAogICAgIGZzMyA9IGdsLmNyZWF0
ZVNoYWRlcihnbC5GUkFHTUVOVF9TSEFERVIpOwotICAgIGdsLnNoYWRlclNvdXJjZShmczMsICIj
aWZkZWYgR0xfRVNcbnByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2VuZGlmXG4gdmFyeWluZyB2
ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsKKyAg
ICBnbC5zaGFkZXJTb3VyY2UoZnMzLCAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4gdmFyeWlu
ZyB2ZWM0IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsK
ICAgICBnbC5jb21waWxlU2hhZGVyKGZzMyk7CiAKICAgICBhc3NlcnRNc2coZ2wuZ2V0U2hhZGVy
UGFyYW1ldGVyKGZzMywgZ2wuQ09NUElMRV9TVEFUVVMpID09IHRydWUsCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1wYWNrLWFsaWdubWVudC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLXBh
Y2stYWxpZ25tZW50Lmh0bWwJKHJldmlzaW9uIDY2MDc4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtcGFjay1hbGlnbm1lbnQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMTYsOSArMTYsNyBAQCB2b2lkIG1haW4oKQogPC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9
ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVmIEdMX0VTCiBwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDsKLSNlbmRpZgogdmFyeWluZyB2ZWM0IGNvbG9yOwogCiB2b2lk
IG1haW4oKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LXN1Yi1pbWFn
ZS0yZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Rl
eC1zdWItaW1hZ2UtMmQuaHRtbAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC90ZXgtc3ViLWltYWdlLTJkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTUs
OSArNSw3IEBACiA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVm
IEdMX0VTCiBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHVuaWZvcm0gc2FtcGxlcjJE
IHRleDsKIHZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdGV4SW1hZ2UyREltYWdlRGF0YVRlc3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXhJbWFnZTJESW1hZ2VEYXRhVGVzdC5odG1s
CShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleElt
YWdlMkRJbWFnZURhdGFUZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1LDkgKzE1LDcgQEAK
ICAgICA8L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVy
L3gtZnJhZ21lbnQiPgotICAgICAgICAjaWZkZWYgR0xfRVMKICAgICAgICAgcHJlY2lzaW9uIGhp
Z2hwIGZsb2F0OwotICAgICAgICAjZW5kaWYKICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdGV4
OwogICAgICAgICB2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CiAgICAgICAgIHZvaWQgbWFpbigpCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLWFjdGl2ZS1iaW5kLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1h
Y3RpdmUtYmluZC5odG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3RleHR1cmUtYWN0aXZlLWJpbmQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjUs
OSArMjUsNyBAQCB2b2lkIG1haW4oKQogPC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVmIEdMX0VTCiBwcmVjaXNpb24gaGln
aHAgZmxvYXQ7Ci0jZW5kaWYKIHVuaWZvcm0gc2FtcGxlcjJEIHRleDsKIHZhcnlpbmcgdmVjMiB0
ZXhDb29yZDsKIHZvaWQgbWFpbigpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC90ZXh0dXJlLWNvbXBsZXRlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdGV4dHVyZS1jb21wbGV0ZS5odG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtY29tcGxldGUuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMsOSArMTMsNyBAQAogPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgog
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CiA8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNo
YWRlci94LXZlcnRleCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKLSNl
bmRpZgogYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOwogYXR0cmlidXRlIHZlYzIgdGV4Q29vcmQw
OwogdmFyeWluZyB2ZWMyIHRleENvb3JkOwpAQCAtMjcsOSArMjUsNyBAQCB2b2lkIG1haW4oKQog
PC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21l
bnQiPgotI2lmZGVmIEdMX0VTCiBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHVuaWZv
cm0gc2FtcGxlcjJEIHRleDsKIHZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKIHZvaWQgbWFpbigpCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLW5wb3QuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLW5wb3QuaHRt
bAkocmV2aXNpb24gNjYwNzgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0
dXJlLW5wb3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjQsOSArMjQsNyBAQCB2b2lkIG1haW4o
KQogPC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJh
Z21lbnQiPgotI2lmZGVmIEdMX0VTCiBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSNlbmRpZgog
dW5pZm9ybSBzYW1wbGVyQ3ViZSB0ZXg7CiB2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CiB2b2lkIG1h
aW4oKQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS10cmFuc3Bh
cmVudC1waXhlbHMtaW5pdGlhbGl6ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLXRyYW5zcGFyZW50LXBpeGVscy1pbml0aWFsaXplZC5o
dG1sCShyZXZpc2lvbiA2NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Rl
eHR1cmUtdHJhbnNwYXJlbnQtcGl4ZWxzLWluaXRpYWxpemVkLmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTE3LDkgKzE3LDcgQEAgdm9pZCBtYWluKCkKIDwvc2NyaXB0PgogCiA8c2NyaXB0IGlkPSJm
c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lz
aW9uIGhpZ2hwIGZsb2F0OwotI2VuZGlmCiB1bmlmb3JtIHNhbXBsZXIyRCB0ZXg7CiB2YXJ5aW5n
IHZlYzIgdGV4Q29vcmQ7CiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jl
c291cmNlcy9mcmFnbWVudFNoYWRlci5mcmFnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9mcmFnbWVudFNoYWRlci5mcmFnCShyZXZpc2lvbiA2
NjA3OCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9mcmFnbWVu
dFNoYWRlci5mcmFnCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAotI2lmZGVmIEdMX0VT
CiBwcmVjaXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHZhcnlpbmcgdmVjMyB2X25vcm1hbDsK
IAogdm9pZCBtYWluKCkK
</data>
<flag name="commit-queue"
          id="54890"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66078</attachid>
            <date>2010-08-31 11:30:03 -0700</date>
            <delta_ts>2010-09-24 15:15:29 -0700</delta_ts>
            <desc>revised patch: adapting to newer version of ANGLE interface</desc>
            <filename>angle.patch</filename>
            <type>text/plain</type>
            <size>43448</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjUwMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEzICsxLDM0IEBACi0yMDEwLTA4LTMxICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9y
Zz4KKzIwMTAtMDgtMzAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAotICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgogCi0gICAgICAgIEltcHJvdmUgQmxvYkJ1aWxkZXIgdG8gY29tYmluZSBhZGphY2VudCBz
dHJpbmdzLgotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9wb3N0X2J1Zy5jZ2kKKyAg
ICAgICAgSG9vayB1cCBBTkdMRSB3aXRoIGNocm9taXVtIC0taW4tcHJvY2Vzcy13ZWJnbCBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDMwOQog
Ci0gICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjph
ZGRUd29DU3RyaW5ncyk6Ci0gICAgICAgIChXZWJDb3JlOjpCbG9iQnVpbGRlcjo6YXBwZW5kKToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IEFkZCBBTkdMRVdlYktpdEJyaWRnZS4KKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmpl
Y3Q6Om9uRGV0YWNoZWQpOiBTaG91bGQgY2FsbCBkZWxldGUgaW5zdGVhZCBvZiBkaXJlY3RseSBz
ZXR0aW5nIG9iamVjdCB0byAwLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwpOiBT
aG91bGQgdXNlIGEgZGlmZmVyZW50IGZsYWcgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIHByb2dyYW0g
aXMgdHJ1bHkgZGVsZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQ
cm9ncmFtKTogRml4IGEgdGlueSBidWcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5H
TEVXZWJLaXRCcmlkZ2UuY3BwOiBSZWZhY3RvciB0aGUgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6
OkFOR0xFV2ViS2l0QnJpZGdlOjpBTkdMRVdlYktpdEJyaWRnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBTkdMRVdlYktpdEJyaWRnZTo6fkFOR0xFV2ViS2l0QnJpZGdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZTo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaDogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeTo6U2hhZGVyU291cmNlRW50cnkp
OiBBZGQgYW4gZXh0cmEgZmllbGQgb2YgdHlwZSBhbmQgbW92ZSBpdCBpbnRvIE1BQy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOiBVc2Ug
dGhlIHVwZGF0ZWQgQU5HTEVXZWJLaXRCcmlkZ2UuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6IEZpeCBzb21lIGlzc3Vlcy4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2UpOiBFbnRyeSBzaG91bGQgYmUg
Y3JlYXRlZCBpbiBjcmVhdGVTaGFkZXIuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0U2hhZGVyaXYpOiBGaXggc29tZSBpc3N1ZXMuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyk6IEZpeCBzb21lIGlzc3Vlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOiBGaXgg
c29tZSBpc3N1ZXMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
U2hhZGVyKTogQ3JlYXRlIGFuIGVudHJ5LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmRlbGV0ZVNoYWRlcik6IFJlbW92ZSB0aGUgZW50cnkuCiAKIDIwMTAtMDgtMzEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNjY1MDIpCisr
KyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjUxMSw2ICsyNTExLDgg
QEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9QZW5XeC5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL3d4L1NpbXBsZUZvbnREYXRhV3guY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy93eC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFd4LmNwcCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwJywK
KyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmNwcCcsCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5o
CShyZXZpc2lvbiA2NjUwMikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX2F0
dGFjaG1lbnRDb3VudCkKICAgICAgICAgICAgIC0tbV9hdHRhY2htZW50Q291bnQ7CiAgICAgICAg
IGlmICghbV9hdHRhY2htZW50Q291bnQgJiYgbV9kZWxldGVkKQotICAgICAgICAgICAgbV9vYmpl
Y3QgPSAwOworICAgICAgICAgICAgZGVsZXRlT2JqZWN0KCk7CiAgICAgfQogICAgIHVuc2lnbmVk
IGdldEF0dGFjaG1lbnRDb3VudCgpIHsgcmV0dXJuIG1fYXR0YWNobWVudENvdW50OyB9CiAKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDY2NTAyKQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OCwxMSArNDgsMTUgQEAgV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbgog
dm9pZCBXZWJHTFByb2dyYW06OmRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCBvYmop
CiB7CiAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVQcm9ncmFtKG9i
aik7Ci0gICAgaWYgKCFvYmplY3QoKSkgewotICAgICAgICBpZiAobV92ZXJ0ZXhTaGFkZXIpCisg
ICAgaWYgKCFnZXRBdHRhY2htZW50Q291bnQoKSkgeworICAgICAgICBpZiAobV92ZXJ0ZXhTaGFk
ZXIpIHsKICAgICAgICAgICAgIG1fdmVydGV4U2hhZGVyLT5vbkRldGFjaGVkKCk7Ci0gICAgICAg
IGlmIChtX2ZyYWdtZW50U2hhZGVyKQorICAgICAgICAgICAgbV92ZXJ0ZXhTaGFkZXIgPSAwOwor
ICAgICAgICB9CisgICAgICAgIGlmIChtX2ZyYWdtZW50U2hhZGVyKSB7CiAgICAgICAgICAgICBt
X2ZyYWdtZW50U2hhZGVyLT5vbkRldGFjaGVkKCk7CisgICAgICAgICAgICBtX2ZyYWdtZW50U2hh
ZGVyID0gMDsKKyAgICAgICAgfQogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjY1MDIpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3MDcsNyArMjcwNyw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQcm9n
cmFtKFcKICAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoKTsKICAgICAg
ICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07CiAgICAgICAgIG1fY29udGV4dC0+dXNlUHJv
Z3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3JhbSkKKyAgICAg
ICAgaWYgKHByb2dyYW0gJiYgcHJvZ3JhbS0+b2JqZWN0KCkpCiAgICAgICAgICAgICBwcm9ncmFt
LT5vbkF0dGFjaGVkKCk7CiAgICAgfQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJp
ZGdlLmNwcAkocmV2aXNpb24gNjY1MDIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FO
R0xFV2ViS2l0QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNDcgKzMxLDU4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotCi1BTkdMRVdlYktpdEJyaWRnZTo6QU5HTEVXZWJLaXRC
cmlkZ2UoKSA6Ci0gICAgYnVpbHRDb21waWxlcnMoZmFsc2UpCitBTkdMRVdlYktpdEJyaWRnZTo6
QU5HTEVXZWJLaXRCcmlkZ2UoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzKQorICAg
IDogbV9mcmFnbWVudENvbXBpbGVyKDApCisgICAgLCBtX3ZlcnRleENvbXBpbGVyKDApCisgICAg
LCBtX2J1aWx0Q29tcGlsZXJzKGZhbHNlKQorICAgICwgbV9yZXNvdXJjZXMocmVzb3VyY2VzKQog
ewogICAgIFNoSW5pdGlhbGl6ZSgpOwogfQogCiBBTkdMRVdlYktpdEJyaWRnZTo6fkFOR0xFV2Vi
S2l0QnJpZGdlKCkKIHsKLSAgICBpZiAoYnVpbHRDb21waWxlcnMpIHsKKyAgICBpZiAobV9idWls
dENvbXBpbGVycykgewogICAgICAgICBTaERlc3RydWN0KG1fZnJhZ21lbnRDb21waWxlcik7CiAg
ICAgICAgIFNoRGVzdHJ1Y3QobV92ZXJ0ZXhDb21waWxlcik7CiAgICAgfQotICAgIAogICAgIFNo
RmluYWxpemUoKTsKIH0KIAotYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJT
b3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlw
ZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlkYXRp
b25Mb2cpCitjb25zdCBjaGFyKiBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTb3Vy
Y2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZSkK
IHsKLSAgICBpZiAoIWJ1aWx0Q29tcGlsZXJzKSB7CisgICAgaWYgKCFtX2J1aWx0Q29tcGlsZXJz
KSB7CiAgICAgICAgIG1fZnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNo
TGFuZ0ZyYWdtZW50LCBFU2hTcGVjV2ViR0wsICZtX3Jlc291cmNlcyk7CiAgICAgICAgIG1fdmVy
dGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdWZXJ0ZXgsIEVTaFNwZWNX
ZWJHTCwgJm1fcmVzb3VyY2VzKTsKLQotICAgICAgICBidWlsdENvbXBpbGVycyA9IHRydWU7Cisg
ICAgICAgIG1fYnVpbHRDb21waWxlcnMgPSB0cnVlOwogICAgIH0KLSAgICAKLSAgICBTaEhhbmRs
ZSBjb21waWxlcjsKIAorICAgIFNoSGFuZGxlIGNvbXBpbGVyOwogICAgIGlmIChzaGFkZXJUeXBl
ID09IFNIQURFUl9UWVBFX1ZFUlRFWCkKICAgICAgICAgY29tcGlsZXIgPSBtX3ZlcnRleENvbXBp
bGVyOwogICAgIGVsc2UKICAgICAgICAgY29tcGlsZXIgPSBtX2ZyYWdtZW50Q29tcGlsZXI7Cisg
ICAgQVNTRVJUKGNvbXBpbGVyKTsKIAotICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclNvdXJj
ZVN0cmluZ3NbXSA9IHsgc2hhZGVyU291cmNlIH07CisgICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3Mg
PSBTaENvbXBpbGUoY29tcGlsZXIsICZzaGFkZXJTb3VyY2UsIDEsIEVTaE9wdE5vbmUsIEVEZWJ1
Z09wSW50ZXJtZWRpYXRlKTsKKyAgICBpZiAoIXZhbGlkYXRlU3VjY2VzcykKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIFNoR2V0T2JqZWN0Q29kZShjb21waWxlcik7Cit9CiAKLSAgICBi
b29sIHZhbGlkYXRlU3VjY2VzcyA9IFNoQ29tcGlsZShjb21waWxlciwgc2hhZGVyU291cmNlU3Ry
aW5ncywgMSwgRVNoT3B0Tm9uZSwgRURlYnVnT3BJbnRlcm1lZGlhdGUpOworY29uc3QgY2hhciog
QU5HTEVXZWJLaXRCcmlkZ2U6OmdldFNoYWRlckluZm9Mb2coQU5HTEVTaGFkZXJUeXBlIHNoYWRl
clR5cGUpCit7CisgICAgaWYgKCFtX2J1aWx0Q29tcGlsZXJzKQorICAgICAgICByZXR1cm4gMDsK
IAotICAgIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBTaEdldE9iamVjdENvZGUoY29tcGlsZXIp
OwotICAgIHNoYWRlclZhbGlkYXRpb25Mb2cgPSBTaEdldEluZm9Mb2coY29tcGlsZXIpOworICAg
IFNoSGFuZGxlIGNvbXBpbGVyOworICAgIGlmIChzaGFkZXJUeXBlID09IFNIQURFUl9UWVBFX1ZF
UlRFWCkKKyAgICAgICAgY29tcGlsZXIgPSBtX3ZlcnRleENvbXBpbGVyOworICAgIGVsc2UKKyAg
ICAgICAgY29tcGlsZXIgPSBtX2ZyYWdtZW50Q29tcGlsZXI7CisgICAgQVNTRVJUKGNvbXBpbGVy
KTsKIAotICAgIHJldHVybiB2YWxpZGF0ZVN1Y2Nlc3M7CisgICAgcmV0dXJuIFNoR2V0SW5mb0xv
Zyhjb21waWxlcik7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5H
TEVXZWJLaXRCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2ViS2l0QnJpZGdlLmgJKHJldmlzaW9uIDY2NTAyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
NiwxMSBAQAogI2lmbmRlZiBBTkdMRVdlYktpdEJyaWRnZV9oCiAjZGVmaW5lIEFOR0xFV2ViS2l0
QnJpZGdlX2gKIAorI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2luY2x1ZGUgIlNoYWRlckxhbmcu
aCIKKyNlbHNlCiAjaW5jbHVkZSAiQU5HTEUvU2hhZGVyTGFuZy5oIgorI2VuZGlmCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAg
LTQwLDIwICs0NCwxOSBAQCBlbnVtIEFOR0xFU2hhZGVyVHlwZSB7CiAKIGNsYXNzIEFOR0xFV2Vi
S2l0QnJpZGdlIHsKIHB1YmxpYzoKLQotICAgIEFOR0xFV2ViS2l0QnJpZGdlKCk7CisgICAgQU5H
TEVXZWJLaXRCcmlkZ2UoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzKTsKICAgICB+
QU5HTEVXZWJLaXRCcmlkZ2UoKTsKLSAgICAKLSAgICB2b2lkIHNldFJlc291cmNlcyhUQnVpbHRJ
blJlc291cmNlIHJlc291cmNlcykgeyBtX3Jlc291cmNlcyA9IHJlc291cmNlczsgfQotICAgIAot
ICAgIGJvb2wgdmFsaWRhdGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBB
TkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291cmNl
LCBTdHJpbmcmIHNoYWRlclZhbGlkYXRpb25Mb2cpOwogCi1wcml2YXRlOgorICAgIC8vIElmIHN1
Y2NlZWQsIHJldHVybiB0aGUgdHJhbnNsYXRlZCBzaGFkZXIgc291cmNlOyBpZiBmYWlsdXJlLCBy
ZXR1cm4gMC4KKyAgICBjb25zdCBjaGFyKiB2YWxpZGF0ZVNoYWRlclNvdXJjZShjb25zdCBjaGFy
KiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlKTsKKyAgICAvLyBHZXQg
dGhlIGluZm8gbG9nIGZyb20gbGFzdCBTaENvbXBpbGUoKSBmb3IgdGhlIGdpdmVuIHNoYWRlciB0
eXBlLgorICAgIGNvbnN0IGNoYXIqIGdldFNoYWRlckluZm9Mb2coQU5HTEVTaGFkZXJUeXBlIHNo
YWRlclR5cGUpOwogCitwcml2YXRlOgogICAgIFNoSGFuZGxlIG1fZnJhZ21lbnRDb21waWxlcjsK
ICAgICBTaEhhbmRsZSBtX3ZlcnRleENvbXBpbGVyOwogCi0gICAgYm9vbCBidWlsdENvbXBpbGVy
czsKKyAgICBib29sIG1fYnVpbHRDb21waWxlcnM7CiAKICAgICBUQnVpbHRJblJlc291cmNlIG1f
cmVzb3VyY2VzOwogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDY2NTAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTIsMTUgKzgxMiwy
NCBAQCBwdWJsaWM6CiAKICAgICBpbnQgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodDsK
IAotICAgIHR5cGVkZWYgc3RydWN0IHsgCi0gICAgICAgIFN0cmluZyBzb3VyY2U7IAotICAgICAg
ICBTdHJpbmcgbG9nOyAKKyNpZiBQTEFURk9STShNQUMpCisgICAgY2xhc3MgU2hhZGVyU291cmNl
RW50cnkgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkoKQorICAgICAg
ICAgICAgOiB0eXBlKDApCisgICAgICAgICAgICAsIGlzVmFsaWQoZmFsc2UpCisgICAgICAgIHsK
KyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBsb25nIHR5cGU7CisgICAgICAgIFN0cmluZyBz
b3VyY2U7CisgICAgICAgIFN0cmluZyBsb2c7CiAgICAgICAgIGJvb2wgaXNWYWxpZDsKLSAgICB9
IFNoYWRlclNvdXJjZUVudHJ5OwotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVy
U291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOworICAgIH07CiAKLSNpZiBQTEFURk9STShN
QUMpCi0gICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1hcDsK
KyAgICBTaGFkZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAgICBPd25QdHI8QU5H
TEVXZWJLaXRCcmlkZ2U+IG1fY29tcGlsZXI7CiAKICAgICBBdHRyaWJ1dGVzIG1fYXR0cnM7CiAg
ICAgVmVjdG9yPFZlY3RvcjxmbG9hdD4gPiBtX3ZlcnRleEFycmF5OwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0J
KHJldmlzaW9uIDY2NTAyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4MywyOCArMTgzLDI0IEBAIEdy
YXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmEKICAgICB9CiAgICAgCiAgICAg
Ly8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCi0KLSAgICBUQnVpbHRJblJlc291cmNlIEFOR0xFUmVz
b3VyY2VzOwotCi0gICAgQU5HTEVSZXNvdXJjZXMubWF4VmVydGV4QXR0cmlicyA9IDA7Ci0gICAg
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJkFOR0xF
UmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heFZlcnRl
eFVuaWZvcm1WZWN0b3JzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlm
b3JtVmVjdG9ycyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMgPSAwOwot
ICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAm
QU5HTEVSZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1h
eFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMu
bWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLm1h
eENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2VzLm1heFRleHR1
cmVJbWFnZVVuaXRzID0gMDsKLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0
cyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMubWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IDA7Ci0g
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZF
Q1RPUlMsICZBTkdMRVJlc291cmNlcy5tYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKLQorICAg
IFRCdWlsdEluUmVzb3VyY2UgYW5nbGVSZXNvdXJjZXM7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4
VmVydGV4QXR0cmlicyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9WRVJURVhfQVRUUklCUywgJmFuZ2xlUmVzb3VyY2VzLm1heFZlcnRleEF0dHJpYnMpOworICAg
IGFuZ2xlUmVzb3VyY2VzLm1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gMDsKKyAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZhbmds
ZVJlc291cmNlcy5tYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgYW5nbGVSZXNvdXJjZXMu
bWF4VmFyeWluZ1ZlY3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmYW5nbGVSZXNvdXJjZXMubWF4VmFyeWluZ1ZlY3RvcnMp
OworICAgIGFuZ2xlUmVzb3VyY2VzLm1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAg
ICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTLCAmYW5nbGVSZXNvdXJjZXMubWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGFuZ2xlUmVzb3VyY2VzLm1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIGdl
dEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUywgJmFuZ2xlUmVzb3VyY2VzLm1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAg
IGFuZ2xlUmVzb3VyY2VzLm1heFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2Vy
dihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZhbmdsZVJlc291
cmNlcy5tYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgYW5nbGVSZXNvdXJjZXMubWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMsICZhbmdsZVJlc291cmNlcy5tYXhGcmFnbWVu
dFVuaWZvcm1WZWN0b3JzKTsKICAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4K
LSAgICBBTkdMRVJlc291cmNlcy5tYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgCi0gICAgbV9jb21w
aWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOworICAgIGFuZ2xlUmVzb3VyY2VzLm1h
eERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbXBpbGVyID0gbmV3IEFOR0xFV2ViS2l0QnJpZGdl
KGFuZ2xlUmVzb3VyY2VzKTsKICAgICAKICAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFN
X1BPSU5UX1NJWkUpOwogICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwpAQCAtNjE3LDU0
ICs2MTMsNDAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wgcgogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyKQogewotICAgIEFTU0VSVChzaGFkZXIpOwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKIAotICAgIGludCBHTHNoYWRlclR5cGU7Ci0gICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRl
clR5cGU7Ci0KLSAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgU0hBREVSX1RZUEUsICZHTHNoYWRl
clR5cGUpOwotICAgIAotICAgIGlmIChHTHNoYWRlclR5cGUgPT0gVkVSVEVYX1NIQURFUikKLSAg
ICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKLSAgICBlbHNlIGlmIChHTHNo
YWRlclR5cGUgPT0gRlJBR01FTlRfU0hBREVSKQotICAgICAgICBzaGFkZXJUeXBlID0gU0hBREVS
X1RZUEVfRlJBR01FTlQ7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm47IC8vIEludmFsaWQgc2hh
ZGVyIHR5cGUuCi0KLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVu
dHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwot
Ci0gICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICBTaGFkZXJT
b3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
KTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAg
IC8vIEVpdGhlciBpdCBpcyBub3QgYSB2YWxpZCBzaGFkZXIgb3Igc2hhZGVyU291cmNlKCkgaGFz
bid0IGJlZW4gY2FsbGVkLgorICAgICAgICAvLyBQYXNzaW5nIGRvd24gdG8gZ2wgZHJpdmVyIHRv
IGdlbmVyYXRlIHRoZSBjb3JyZWN0IGVycm9yLgorICAgICAgICA6OmdsQ29tcGlsZVNoYWRlcigo
R0x1aW50KSBzaGFkZXIpOwogICAgICAgICByZXR1cm47Ci0KKyAgICB9CiAgICAgU2hhZGVyU291
cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CiAKLSAgICBTdHJpbmcgdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZTsKLSAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLQotICAgIGJvb2wgaXNW
YWxpZCA9IG1fY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0Zjgo
KS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9M
b2cpOwotCi0gICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xvZzsKLSAgICBlbnRyeS5pc1ZhbGlk
ID0gaXNWYWxpZDsKLQotICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFk
ZXIgZGlkbid0IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJh
bnNsYXRlZCBzb3VyY2UgICAgCisgICAgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisgICAg
QVNTRVJUKGVudHJ5LnR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUiB8fCBlbnRyeS50eXBlID09IEdM
X0ZSQUdNRU5UX1NIQURFUik7CisgICAgaWYgKGVudHJ5LnR5cGUgPT0gR0xfVkVSVEVYX1NIQURF
UikKKyAgICAgICAgc2hhZGVyVHlwZSA9IFNIQURFUl9UWVBFX1ZFUlRFWDsKKyAgICBlbHNlCisg
ICAgICAgIHNoYWRlclR5cGUgPSBTSEFERVJfVFlQRV9GUkFHTUVOVDsKIAotICAgIGludCB0cmFu
c2xhdGVkU2hhZGVyTGVuZ3RoID0gdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKTsKKyAg
ICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9jb21waWxlci0+dmFsaWRh
dGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUpOwor
ICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZSkgeworICAgICAgICBlbnRyeS5sb2cgPSBt
X2NvbXBpbGVyLT5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlclR5cGUpOworICAgICAgICBlbnRyeS5p
c1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0
ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlCisg
ICAgfQorICAgIGVudHJ5LmlzVmFsaWQgPSB0cnVlOwogCi0gICAgY29uc3QgQ1N0cmluZyYgdHJh
bnNsYXRlZFNoYWRlckNTdHJpbmcgPSB0cmFuc2xhdGVkU2hhZGVyU291cmNlLnV0ZjgoKTsKLSAg
ICBjb25zdCBjaGFyKiB0cmFuc2xhdGVkU2hhZGVyUHRyID0gdHJhbnNsYXRlZFNoYWRlckNTdHJp
bmcuZGF0YSgpOwotICAgIAotICAgIDo6Z2xTaGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLCAx
LCAmdHJhbnNsYXRlZFNoYWRlclB0ciwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5ndGgpOwotICAgIAor
ICAgIGludCB0cmFuc2xhdGVkU2hhZGVyTGVuZ3RoID0gc3RybGVuKHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2UpOworICAgIDo6Z2xTaGFkZXJTb3VyY2UoKEdMdWludCkgc2hhZGVyLCAxLCAmdHJhbnNs
YXRlZFNoYWRlclNvdXJjZSwgJnRyYW5zbGF0ZWRTaGFkZXJMZW5ndGgpOwogICAgIDo6Z2xDb21w
aWxlU2hhZGVyKChHTHVpbnQpIHNoYWRlcik7Ci0gICAgCi0gICAgaW50IEdMQ29tcGlsZVN1Y2Nl
c3M7Ci0gICAgCi0gICAgOjpnbEdldFNoYWRlcml2KChHTHVpbnQpIHNoYWRlciwgQ09NUElMRV9T
VEFUVVMsICZHTENvbXBpbGVTdWNjZXNzKTsKLSAgICAKKworICAgIGludCBnbENvbXBpbGVTdWNj
ZXNzOworICAgIDo6Z2xHZXRTaGFkZXJpdigoR0x1aW50KXNoYWRlciwgR0xfQ09NUElMRV9TVEFU
VVMsICZnbENvbXBpbGVTdWNjZXNzKTsKICAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5lcmF0
ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAotICAgIEFTU0VSVChHTENvbXBpbGVT
dWNjZXNzID09IEdMX1RSVUUpOworICAgIEFTU0VSVChnbENvbXBpbGVTdWNjZXNzID09IEdMX1RS
VUUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwg
bG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
LCBsb25nIGJvcmRlcikKQEAgLTEwNDIsMTUgKzEwMjQsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6c2Npc3Nvcihsb25nIHgsIAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJT
b3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewot
ICAgIEFTU0VSVChzaGFkZXIpOwotICAgIAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKIAotICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OwotCi0gICAgZW50cnkuc291cmNlID0g
c3RyaW5nOwotCi0gICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOworICAg
IFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmlu
ZChzaGFkZXIpOworICAgIEFTU0VSVChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkp
OworICAgIHJlc3VsdC0+c2Vjb25kLnNvdXJjZSA9IHN0cmluZzsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6c3RlbmNpbEZ1bmModW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5z
aWduZWQgbG9uZyBtYXNrKQpAQCAtMTM5MSw5MCArMTM2OSw2NCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNo
YWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQq
IHZhbHVlKQogewotICAgIEFTU0VSVChzaGFkZXIpOwotICAgIAogICAgIGVuc3VyZUNvbnRleHQo
bV9jb250ZXh0T2JqKTsKLSAgICAKLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRl
clNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChz
aGFkZXIpOwotICAgIAotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBERUxFVEVf
U1RBVFVTOgotICAgICAgICBjYXNlIFNIQURFUl9UWVBFOgotICAgICAgICAgICAgLy8gTGV0IE9w
ZW5HTCBoYW5kbGUgdGhlc2UuCi0gICAgICAgIAotICAgICAgICAgICAgOjpnbEdldFNoYWRlcml2
KChHTHVpbnQpIHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgIGNhc2UgQ09NUElMRV9TVEFUVVM6Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgICAgICAgICAgKCp2YWx1ZSkgPSBzdGF0
aWNfY2FzdDxpbnQ+KGZhbHNlKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ICE9IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRy
eSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNh
c2UgR0xfQ09NUElMRV9TVEFUVVM6CisgICAgICAgICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxp
bnQ+KGVudHJ5LmlzVmFsaWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEdM
X0lORk9fTE9HX0xFTkdUSDoKKyAgICAgICAgICAgIGlmICghZW50cnkuaXNWYWxpZCkgeworICAg
ICAgICAgICAgICAgICp2YWx1ZSA9IGVudHJ5LmxvZy5sZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoKnZhbHVlKQorICAgICAgICAgICAgICAgICAgICAoKnZhbHVlKSsrOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICgqdmFsdWUpID0gc3RhdGljX2Nhc3Q8aW50PihyZXN1bHQtPnNlY29uZC5pc1ZhbGlkKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSU5GT19MT0df
TEVOR1RIOgotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkgewotICAgICAgICAgICAgICAgICgqdmFsdWUpID0gMDsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICgqdmFsdWUpID0g
Z2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpLmxlbmd0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTSEFERVJfU09VUkNFX0xFTkdUSDoKLSAgICAgICAg
ICAgICgqdmFsdWUpID0gZ2V0U2hhZGVyU291cmNlKHNoYWRlcikubGVuZ3RoKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihJTlZBTElEX0VOVU0pOworICAgICAgICBjYXNlIEdMX1NIQURFUl9TT1VS
Q0VfTEVOR1RIOgorICAgICAgICAgICAgKnZhbHVlID0gZW50cnkuc291cmNlLmxlbmd0aCgpOwor
ICAgICAgICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAgICAgICAgICAoKnZhbHVlKSsrOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQorCisgICAgOjpnbEdldFNoYWRlcml2
KChHTHVpbnQpIHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKIH0KIAogU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewotICAg
IEFTU0VSVChzaGFkZXIpOwotCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwotICAg
IEdMaW50IGxlbmd0aDsKLSAgICA6OmdsR2V0U2hhZGVyaXYoKEdMdWludCkgc2hhZGVyLCBHTF9J
TkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwotCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0
LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyKTsKIAorICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0g
bV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFk
ZXJTb3VyY2VNYXAuZW5kKCkpCi0gICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHJldHVybiAi
IjsKIAotICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAg
IFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgIGlmICghZW50
cnkuaXNWYWxpZCkKKyAgICAgICAgcmV0dXJuIGVudHJ5LmxvZzsKIAotICAgICBpZiAoZW50cnku
aXNWYWxpZCkgewotICAgICAgICAgR0xpbnQgbGVuZ3RoOwotICAgICAgICAgOjpnbEdldFNoYWRl
cml2KChHTHVpbnQpIHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKLQotICAg
ICAgICAgR0xzaXplaSBzaXplOwotICAgICAgICAgR0xjaGFyKiBpbmZvID0gKEdMY2hhciopIGZh
c3RNYWxsb2MobGVuZ3RoKTsKLSAgICAgICAgIGlmICghaW5mbykKLSAgICAgICAgICAgICByZXR1
cm4gIiI7Ci0KLSAgICAgICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKChHTHVpbnQpIHNoYWRlciwg
bGVuZ3RoLCAmc2l6ZSwgaW5mbyk7Ci0KLSAgICAgICAgIFN0cmluZyBzKGluZm8pOwotICAgICAg
ICAgZmFzdEZyZWUoaW5mbyk7Ci0gICAgICAgICByZXR1cm4gczsKLSAgICAgfQotICAgICBlbHNl
IHsKLSAgICAgICAgIHJldHVybiBlbnRyeS5sb2c7Ci0gICAgIH0KKyAgICBHTGludCBsZW5ndGg7
CisgICAgOjpnbEdldFNoYWRlcml2KChHTHVpbnQpc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsZW5ndGgpOworICAgIEdMc2l6ZWkgc2l6ZTsKKyAgICBHTGNoYXIqIGluZm8gPSAoR0xjaGFy
KikgZmFzdE1hbGxvYyhsZW5ndGgpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJuICIi
OworICAgIDo6Z2xHZXRTaGFkZXJJbmZvTG9nKChHTHVpbnQpc2hhZGVyLCBsZW5ndGgsICZzaXpl
LCBpbmZvKTsKKyAgICBBU1NFUlQobGVuZ3RoID0gc2l6ZSArIDEpOworICAgIFN0cmluZyBzKGlu
Zm8pOworICAgIGZhc3RGcmVlKGluZm8pOworICAgIHJldHVybiBzOwogfQogCiBTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
IHsKLSAgICBBU1NFUlQoc2hhZGVyKTsKLQogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2Jq
KTsKIAotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+Ojpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0KKyAgICBT
aGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gIiI7CiAKQEAgLTE1ODUsNyArMTUzNywxNCBAQCB1bnNpZ25lZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyCiB1bnNpZ25lZCBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29u
dGV4dE9iaik7Ci0gICAgcmV0dXJuIGdsQ3JlYXRlU2hhZGVyKCh0eXBlID09IEZSQUdNRU5UX1NI
QURFUikgPyBHTF9GUkFHTUVOVF9TSEFERVIgOiBHTF9WRVJURVhfU0hBREVSKTsKKyAgICB1bnNp
Z25lZCBzaGFkZXIgPSBnbENyZWF0ZVNoYWRlcih0eXBlKTsKKyAgICBpZiAoc2hhZGVyKSB7Cisg
ICAgICAgIEFTU0VSVCh0eXBlID09IEdMX1ZFUlRFWF9TSEFERVIgfHwgdHlwZSA9PSBHTF9GUkFH
TUVOVFNIQURFUik7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5OworICAgICAgICBl
bnRyeS50eXBlID0gdHlwZTsKKyAgICAgICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwg
ZW50cnkpOworICAgIH0KKyAgICByZXR1cm4gc2hhZGVyOwogfQogCiB1bnNpZ25lZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSgpCkBAIC0xNjI0LDYgKzE1ODMsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIodW5zCiB7CiAgICAgZW5zdXJlQ29udGV4dCht
X2NvbnRleHRPYmopOwogICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7CisgICAgaWYgKDo6Z2xJ
c1NoYWRlcihzaGFkZXIpID09IEdMX0ZBTFNFKQorICAgICAgICBtX3NoYWRlclNvdXJjZU1hcC5y
ZW1vdmUoc2hhZGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVy
ZSh1bnNpZ25lZCB0ZXh0dXJlKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjUwMikKKysr
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBA
QAorMjAxMC0wOC0zMCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEhvb2sgdXAgQU5HTEUgd2l0aCBj
aHJvbWl1bSAtLWluLXByb2Nlc3Mtd2ViZ2wgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQzMDkKKworICAgICAgICAqIFdlYktpdC5neXA6IEFk
ZCBBTkdMRSBkZXBlbmRlbmN5LgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6aW5pdGlhbGl6ZSk6IEluaXQgQU5HTEUgc3R1ZmYuCisgICAgICAgIChXZWJLaXQ6
OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNvbXBpbGVTaGFkZXIpOiBVc2UgQU5H
TEUgc2hhZGVyIHZhbGlkYXRpb24uCisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmdldFNoYWRlcml2KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Oldl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlckluZm9Mb2cpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hh
ZGVyU291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OnNoYWRlclNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVTaGFkZXIpOiBTdGFydGluZyBhbiBl
bnRyeSB0byB0cmFjayB0aGUgc2hhZGVyLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0Nv
bnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVTaGFkZXIpOiBFbmRpbmcgdGhlIGVudHJ5IG9mIHRo
ZSBkZWxldGVkIHNoYWRlci4KKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpTaGFkZXJTb3VyY2VFbnRyeTo6U2hhZGVyU291cmNlRW50cnkpOiBDcmVhdGUgdGhlIHN0
cnVjdHVyZSB0byB0cmFjayBhIHNoYWRlci4KKwogMjAxMC0wOC0yNCAgSmVyZW15IE9ybG93ICA8
am9ybG93QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZSBCbG9jay4K
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA2NjUwMikKKysrIFdlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw3IEBACiAgICAgICAgICAgICAg
ICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYXBwL2FwcC5neXA6YXBwX2Jhc2UnLCAjIEZvciBHTENv
bnRleHQKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9za2lhL3NraWEuZ3lw
OnNraWEnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5
L25wYXBpL25wYXBpLmd5cDpucGFwaScsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3Jj
X2RpcikvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLmd5cDp0cmFuc2xhdG9yX2Nv
bW1vbicsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2V4cG9ydF9kZXBlbmRlbnRfc2V0
dGluZ3MnOiBbCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvc2tpYS9za2lh
Lmd5cDpza2lhJywKQEAgLTk4LDYgKzk5LDcgQEAKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMn
OiBbCiAgICAgICAgICAgICAgICAgJ3B1YmxpYycsCiAgICAgICAgICAgICAgICAgJ3NyYycsCisg
ICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvYW5nbGUvaW5j
bHVkZS9HTFNMQU5HJywKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAnZGVmaW5lcyc6IFsK
ICAgICAgICAgICAgICAgICAnV0VCS0lUX0lNUExFTUVOVEFUSU9OPTEnLApJbmRleDogV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGwuY3BwCShyZXZpc2lvbiA2NjUwMikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEs
MzAgQEAgYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppbgogCiAgICAgZ2xF
bmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CiAgICAgbV9pbml0aWFsaXplZCA9
IHRydWU7CisKKyAgICAvLyBBTkdMRSBpbml0aWFsaXphdGlvbi4KKyAgICBUQnVpbHRJblJlc291
cmNlIGFuZ2xlUmVzb3VyY2VzOworICAgIGFuZ2xlUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMg
PSAwOworICAgIGdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfQVRUUklCUywgJmFuZ2xlUmVzb3Vy
Y2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIGFuZ2xlUmVzb3VyY2VzLk1heFZlcnRleFVuaWZv
cm1WZWN0b3JzID0gMDsKKyAgICBnZXRJbnRlZ2VydigweDhERkIsIC8vIE1BWF9WRVJURVhfVU5J
Rk9STV9WRUNUT1JTCisgICAgICAgICAgICAgICAgJmFuZ2xlUmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKTsKKyAgICBhbmdsZVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9IDA7
CisgICAgZ2V0SW50ZWdlcnYoMHg4REZDLCAvLyBNQVhfVkFSWUlOR19WRUNUT1JTCisgICAgICAg
ICAgICAgICAgJmFuZ2xlUmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICBhbmdsZVJl
c291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYo
R0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmYW5nbGVSZXNvdXJjZXMuTWF4VmVy
dGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGFuZ2xlUmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSAwOworICAgIGdldEludGVnZXJ2KEdMX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTLCAmYW5nbGVSZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgYW5nbGVSZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAg
IGdldEludGVnZXJ2KEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmYW5nbGVSZXNvdXJjZXMu
TWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIGFuZ2xlUmVzb3VyY2VzLk1heEZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2KDB4OERGRCwgLy8gTUFYX0ZSQUdNRU5U
X1VOSUZPUk1fVkVDVE9SUworICAgICAgICAgICAgICAgICZhbmdsZVJlc291cmNlcy5NYXhGcmFn
bWVudFVuaWZvcm1WZWN0b3JzKTsKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBF
Uy4KKyAgICBhbmdsZVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7CisgICAgbV9jb21waWxl
ciA9IG5ldyBXZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZShhbmdsZVJlc291cmNlcyk7CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjEzLDcgKzYzNyw0MyBAQCBERUxFR0FURV9UT19HTF8x
KGNsZWFyU3RlbmNpbCwgQ2xlYXJTdGVuCiAKIERFTEVHQVRFX1RPX0dMXzQoY29sb3JNYXNrLCBD
b2xvck1hc2ssIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wpCiAKLURFTEVHQVRFX1RPX0dMXzEoY29t
cGlsZVNoYWRlciwgQ29tcGlsZVNoYWRlciwgV2ViR0xJZCkKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6Y29tcGlsZVNoYWRlcihXZWJHTElkIHNoYWRlcikKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0g
bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gRWl0aGVyIGl0IGlzIG5vdCBh
IHZhbGlkIHNoYWRlciBvciBzaGFkZXJTb3VyY2UoKSBoYXNuJ3QgYmVlbiBjYWxsZWQuCisgICAg
ICAgIC8vIFBhc3NpbmcgZG93biB0byBnbCBkcml2ZXIgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3Qg
ZXJyb3IuCisgICAgICAgIGdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOwor
CisgICAgV2ViQ29yZTo6QU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGU7CisgICAgQVNTRVJUKGVu
dHJ5LnR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUiB8fCBlbnRyeS50eXBlID09IEdMX0ZSQUdNRU5U
X1NIQURFUik7CisgICAgaWYgKGVudHJ5LnR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUikKKyAgICAg
ICAgc2hhZGVyVHlwZSA9IFdlYkNvcmU6OlNIQURFUl9UWVBFX1ZFUlRFWDsKKyAgICBlbHNlCisg
ICAgICAgIHNoYWRlclR5cGUgPSBXZWJDb3JlOjpTSEFERVJfVFlQRV9GUkFHTUVOVDsKKworICAg
IGNvbnN0IGNoYXIqIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2NvbXBpbGVyLT52YWxpZGF0
ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSk7Cisg
ICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNlKSB7CisgICAgICAgIGVudHJ5LmxvZyA9IG1f
Y29tcGlsZXItPmdldFNoYWRlckluZm9Mb2coc2hhZGVyVHlwZSk7CisgICAgICAgIGVudHJ5Lmlz
VmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZhbGlkYXRl
LCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3VyY2UKKyAg
ICB9CisgICAgZW50cnkuaXNWYWxpZCA9IHRydWU7CisKKyAgICBpbnQgdHJhbnNsYXRlZFNoYWRl
ckxlbmd0aCA9IHN0cmxlbih0cmFuc2xhdGVkU2hhZGVyU291cmNlKTsKKyAgICBnbFNoYWRlclNv
dXJjZShzaGFkZXIsIDEsICZ0cmFuc2xhdGVkU2hhZGVyU291cmNlLCAmdHJhbnNsYXRlZFNoYWRl
ckxlbmd0aCk7CisgICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBpbnQgZ2xDb21w
aWxlU3VjY2VzczsKKyAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMs
ICZnbENvbXBpbGVTdWNjZXNzKTsKKyAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5lcmF0ZWQg
R0xTTCB3aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAorICAgIEFTU0VSVChnbENvbXBpbGVTdWNj
ZXNzID09IEdMX1RSVUUpOworfQogCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNp
Z25lZCBsb25nIGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQpAQCAtODcyLDExICs5MzIsNTAg
QEAgV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcAogCiBERUxFR0FURV9U
T19HTF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBHZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXJpdkVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKIAotREVMRUdBVEVf
VE9fR0xfMyhnZXRTaGFkZXJpdiwgR2V0U2hhZGVyaXYsIFdlYkdMSWQsIHVuc2lnbmVkIGxvbmcs
IGludCopCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlcml2
KFdlYkdMSWQgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCAh
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSYg
ZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkgeworICAgICAg
ICBjYXNlIEdMX0NPTVBJTEVfU1RBVFVTOgorICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nh
c3Q8aW50PihlbnRyeS5pc1ZhbGlkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBHTF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICAgICBpZiAoIWVudHJ5LmlzVmFsaWQpIHsK
KyAgICAgICAgICAgICAgICAqdmFsdWUgPSBlbnRyeS5sb2cubGVuZ3RoKCk7CisgICAgICAgICAg
ICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgKCp2YWx1ZSkrKzsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAgICAgICp2YWx1ZSA9
IGVudHJ5LnNvdXJjZS5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICgqdmFsdWUpCisgICAgICAg
ICAgICAgICAgKCp2YWx1ZSkrKzsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSwgdmFsdWUpOworfQogCiBXZWJT
dHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVySW5mb0xvZyhX
ZWJHTElkIHNoYWRlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIFNoYWRl
clNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFk
ZXIpOworICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybiBXZWJTdHJpbmcoKTsKKworICAgIFNoYWRlclNvdXJjZUVudHJ5IGVudHJ5ID0gcmVz
dWx0LT5zZWNvbmQ7CisgICAgaWYgKCFlbnRyeS5pc1ZhbGlkKSB7CisgICAgICAgIFdlYlN0cmlu
ZyByZXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KGVudHJ5LmxvZy51dGY4KCkuZGF0YSgpLCBlbnRy
eS5sb2cubGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKwogICAgIEdMaW50
IGxvZ0xlbmd0aDsKICAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RI
LCAmbG9nTGVuZ3RoKTsKICAgICBpZiAoIWxvZ0xlbmd0aCkKQEAgLTg5NSwxOCArOTk0LDExIEBA
IFdlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXAKIFdlYlN0cmluZyBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFk
ZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbG9nTGVuZ3RoOwot
ICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9TSEFERVJfU09VUkNFX0xFTkdUSCwgJmxvZ0xl
bmd0aCk7Ci0gICAgaWYgKCFsb2dMZW5ndGgpCi0gICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsK
LSAgICBHTGNoYXIqIGxvZyA9IDA7Ci0gICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxvZ0xlbmd0aCAq
IHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQorCisgICAgU2hhZGVyU291cmNlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFdlYlN0
cmluZygpOwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRTaGFkZXJT
b3VyY2Uoc2hhZGVyLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAgICBB
U1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgV2ViU3RyaW5n
IHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVURjgobG9nLCByZXR1cm5lZExvZ0xlbmd0aCk7Ci0gICAg
ZmFzdEZyZWUobG9nKTsKKyAgICBXZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChy
ZXN1bHQtPnNlY29uZC5zb3VyY2UudXRmOCgpLmRhdGEoKSwgcmVzdWx0LT5zZWNvbmQuc291cmNl
Lmxlbmd0aCgpKTsKICAgICByZXR1cm4gcmVzOwogfQogCkBAIC0xMDE2LDkgKzExMDgsOSBAQCBE
RUxFR0FURV9UT19HTF80KHNjaXNzb3IsIFNjaXNzb3IsIGxvbmcsCiAKIHZvaWQgV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25z
dCBjaGFyKiBzdHJpbmcpCiB7Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQg
bGVuZ3RoID0gc3RybGVuKHN0cmluZyk7Ci0gICAgZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAm
c3RyaW5nLCAmbGVuZ3RoKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBBU1NFUlQocmVzdWx0ICE9IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKTsKKyAgICByZXN1bHQtPnNlY29uZC5zb3VyY2UgPSBTdHJp
bmcoc3RyaW5nKTsKIH0KIAogREVMRUdBVEVfVE9fR0xfMyhzdGVuY2lsRnVuYywgU3RlbmNpbEZ1
bmMsIHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCkBAIC0xMTU3LDcgKzEyNDks
MTggQEAgdW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbAogICAgIHJldHVy
biBvOwogfQogCi1ERUxFR0FURV9UT19HTF8xUihjcmVhdGVTaGFkZXIsIENyZWF0ZVNoYWRlciwg
dW5zaWduZWQgbG9uZywgdW5zaWduZWQpOwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgc2hhZGVyVHlwZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1bnNpZ25lZCBzaGFkZXIgPSBnbENyZWF0ZVNo
YWRlcihzaGFkZXJUeXBlKTsKKyAgICBpZiAoc2hhZGVyKSB7CisgICAgICAgIEFTU0VSVChzaGFk
ZXJUeXBlID09IEdMX1ZFUlRFWF9TSEFERVIgfHwgc2hhZGVyVHlwZSA9PSBHTF9GUkFHTUVOVF9T
SEFERVIpOworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKKyAgICAgICAgZW50cnku
dHlwZSA9IHNoYWRlclR5cGU7CisgICAgICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIs
IGVudHJ5KTsKKyAgICB9CisgICAgcmV0dXJuIHNoYWRlcjsKK30KIAogdW5zaWduZWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3JlYXRlVGV4dHVyZSgpCiB7CkBAIC0xMTk1LDYg
KzEyOTgsOCBAQCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlCiB7CiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKKyAg
ICBpZiAoZ2xJc1NoYWRlcihzaGFkZXIpID09IEdMX0ZBTFNFKQorICAgICAgICBtX3NoYWRlclNv
dXJjZU1hcC5yZW1vdmUoc2hhZGVyKTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwu
aAkocmV2aXNpb24gNjY1MDIpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsMTAgQEAKIAog
I2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKKyNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgog
I2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KIApAQCAtMzE2LDYgKzMxOCwyNSBAQCBwcml2YXRlOgogICAgIExpc3RIYXNoU2V0PHVuc2ln
bmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOwogCiAgICAgT3duUHRyPGdmeDo6R0xDb250ZXh0
PiBtX2dsQ29udGV4dDsKKworICAgIGNsYXNzIFNoYWRlclNvdXJjZUVudHJ5IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5KCkKKyAgICAgICAgICAgICAgICA6IHR5cGUo
MCkKKyAgICAgICAgICAgICAgICAsIGlzVmFsaWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZTsKKyAgICAgICAgU3RyaW5nIHNvdXJjZTsK
KyAgICAgICAgU3RyaW5nIGxvZzsKKyAgICAgICAgYm9vbCBpc1ZhbGlkOworICAgIH07CisKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8V2ViR0xJZCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJj
ZU1hcDsKKyAgICBTaGFkZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAgICBPd25Q
dHI8V2ViQ29yZTo6QU5HTEVXZWJLaXRCcmlkZ2U+IG1fY29tcGlsZXI7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2NTAyKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDgtMzAgIFpo
ZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBIb29rIHVwIEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9j
ZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZXh0LWF0dHJp
YnV0ZXMtYWxwaGEtZGVwdGgtc3RlbmNpbC1hbnRpYWxpYXMuaHRtbDogUmVtb3ZlICNpZmRlZiBH
TEVTLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NvcHktdGV4LWltYWdlLWFuZC1zdWIt
aW1hZ2UtMmQuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtYmlu
ZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9nbC11bmlmb3JtLWFycmF5cy5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9pbmRleC12YWxpZGF0aW9uLXdpdGgtcmVzaXplZC1idWZmZXIuaHRtbDogRGl0
dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcG9pbnQtc2l6ZS5odG1sOiBEaXR0by4K
KyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QuaHRtbDogRGl0dG8uCisg
ICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtcGFjay1hbGlnbm1lbnQuaHRt
bDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2ZyYWdtZW50
U2hhZGVyLmZyYWc6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1zdWIt
aW1hZ2UtMmQuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdGV4SW1h
Z2UyREltYWdlRGF0YVRlc3QuaHRtbDogRGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvdGV4dHVyZS1hY3RpdmUtYmluZC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC90ZXh0dXJlLWNvbXBsZXRlLmh0bWw6IERpdHRvLgorICAgICAgICAqIGZhc3QvY2Fu
dmFzL3dlYmdsL3RleHR1cmUtbnBvdC5odG1sOiBEaXR0by4KKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC90ZXh0dXJlLXRyYW5zcGFyZW50LXBpeGVscy1pbml0aWFsaXplZC5odG1sOiBEaXR0
by4KKwogMjAxMC0wOC0zMSAgRXZhbiBNYXJ0aW4gIDxldmFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4
dC1hdHRyaWJ1dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwJKHJldmlzaW9u
IDY2NTAyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGV4dC1hdHRyaWJ1
dGVzLWFscGhhLWRlcHRoLXN0ZW5jaWwtYW50aWFsaWFzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTE2LDkgKzE2LDcgQEAgdm9pZCBtYWluKCkKIDwvc2NyaXB0PgogCiA8c2NyaXB0IGlkPSJmc2hh
ZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lzaW9u
IGhpZ2hwIGZsb2F0OwotI2VuZGlmCiB2YXJ5aW5nIHZlYzQgY29sb3I7CiAKIHZvaWQgbWFpbigp
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb3B5LXRleC1pbWFnZS1hbmQt
c3ViLWltYWdlLTJkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvY29weS10ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC5odG1sCShyZXZpc2lvbiA2NjUw
MikKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NvcHktdGV4LWltYWdlLWFuZC1z
dWItaW1hZ2UtMmQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTgsMTIgKzE4LDcgQEAgdm9pZCBt
YWluKCkKIAogPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+
CiB1bmlmb3JtIHNhbXBsZXIyRCB0ZXg7Ci0vLyBXb3JrYXJvdW5kIGZvciBub24tY29tcGxpYW50
IFdlYkdMIGltcGxlbWVudGF0aW9ucyAoRklYTUUpCi0jaWYgZGVmaW5lZChHTF9FUykKIHZhcnlp
bmcgbWVkaXVtcCB2ZWMyIHRleENvb3JkOwotI2Vsc2UKLXZhcnlpbmcgdmVjMiB0ZXhDb29yZDsK
LSNlbmRpZgogCiB2b2lkIG1haW4oKQogewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvZ2wtYmluZC1hdHRyaWItbG9jYXRpb24tdGVzdC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWJpbmQtYXR0cmliLWxvY2F0aW9uLXRlc3Qu
aHRtbAkocmV2aXNpb24gNjY1MDIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9n
bC1iaW5kLWF0dHJpYi1sb2NhdGlvbi10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIzLDkg
KzIzLDcgQEAgdm9pZCBtYWluKCkKIH0KIDwvc2NyaXB0PgogPHNjcmlwdCBpZD0iZnNoYWRlciIg
dHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgotI2lmZGVmIEdMX0VTCiBwcmVj
aXNpb24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHZhcnlpbmcgdmVjNCBjb2xvcjsKIHZvaWQgbWFp
bigpCiB7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC11bmlmb3JtLWFy
cmF5cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ds
LXVuaWZvcm0tYXJyYXlzLmh0bWwJKHJldmlzaW9uIDY2NTAyKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtdW5pZm9ybS1hcnJheXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MjEsMTIgKzIxLDcgQEAKIDwvc2NyaXB0PgogCiA8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4
LXNoYWRlci94LWZyYWdtZW50Ij4KLSAgICAvLyBXb3JrYXJvdW5kIGZvciBub24tY29tcGxpYW50
IFdlYkdMIGltcGxlbWVudGF0aW9ucyAoRklYTUUpCi0gICAgI2lmIGRlZmluZWQoR0xfRVMpCiAg
ICAgdW5pZm9ybSBtZWRpdW1wICR0eXBlIGNvbG9yWzNdOwotICAgICNlbHNlCi0gICAgdW5pZm9y
bSAkdHlwZSBjb2xvclszXTsKLSAgICAjZW5kaWYKICAgICB2b2lkIG1haW4oKQogICAgIHsKICAg
ICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvclswXSRlbGVtLCBjb2xvclsxXSRlbGVtLCBj
b2xvclsyXSRlbGVtLCAxKTsKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2lu
ZGV4LXZhbGlkYXRpb24td2l0aC1yZXNpemVkLWJ1ZmZlci5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2luZGV4LXZhbGlkYXRpb24td2l0aC1yZXNpemVk
LWJ1ZmZlci5odG1sCShyZXZpc2lvbiA2NjUwMikKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2luZGV4LXZhbGlkYXRpb24td2l0aC1yZXNpemVkLWJ1ZmZlci5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xOSw5ICsxOSw3IEBAIHZvaWQgbWFpbigpIHsKIH0KIDwvc2NyaXB0PgogPHNj
cmlwdCBpZD0iZnMiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmIGRlZmluZWQoR0xf
RVMpCiBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSNlbmRpZgogdmFyeWluZyB2ZWM0IGNvbG9y
Owogdm9pZCBtYWluKCkgewogICBnbF9GcmFnQ29sb3IgPSBjb2xvcjsKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3BvaW50LXNpemUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wb2ludC1zaXplLmh0bWwJKHJldmlzaW9uIDY2NTAy
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcG9pbnQtc2l6ZS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOCw5ICsxOCw3IEBAIHZvaWQgbWFpbigpCiA8L3NjcmlwdD4KIAogPHNj
cmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Ci0jaWZkZWYgR0xf
RVMKIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotI2VuZGlmCiB2YXJ5aW5nIHZlYzQgY29sb3I7
CiAKIHZvaWQgbWFpbigpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9wcm9n
cmFtLXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9wcm9ncmFtLXRlc3QuaHRtbAkocmV2aXNpb24gNjY1MDIpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9wcm9ncmFtLXRlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTQg
KzU1LDE0IEBAIGZ1bmN0aW9uIGdvKCkgewogICAgICAgICAgICAgICAiYmFkIHZlcnRleCBzaGFk
ZXIgc2hvdWxkIGZhaWwgdG8gY29tcGlsZSIpOwogCiAgICAgdmFyIGZzID0gZ2wuY3JlYXRlU2hh
ZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2wuc2hhZGVyU291cmNlKGZzLCAiI2lmZGVm
IEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbmRpZlxuIHZhcnlpbmcgdmVjNCB2
Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyB9Iik7CisgICAgZ2wu
c2hhZGVyU291cmNlKGZzLCAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4gdmFyeWluZyB2ZWM0
IHZDb2xvcjsgdm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IH0iKTsKICAgICBn
bC5jb21waWxlU2hhZGVyKGZzKTsKIAogICAgIGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQYXJhbWV0
ZXIoZnMsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PSB0cnVlLAogICAgICAgICAgICAgICAiZ29vZCBm
cmFnbWVudCBzaGFkZXIgc2hvdWxkIGNvbXBpbGUiKTsKIAogICAgIHZhciBmczIgPSBnbC5jcmVh
dGVTaGFkZXIoZ2wuRlJBR01FTlRfU0hBREVSKTsKLSAgICBnbC5zaGFkZXJTb3VyY2UoZnMyLCAi
I2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNlbmRpZlxuIHZhcnlpbmcg
dmVjNCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yICogMC41OyB9
Iik7CisgICAgZ2wuc2hhZGVyU291cmNlKGZzMiwgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xu
IHZhcnlpbmcgdmVjNCB2Q29sb3I7IHZvaWQgbWFpbigpIHsgZ2xfRnJhZ0NvbG9yID0gdkNvbG9y
ICogMC41OyB9Iik7CiAgICAgZ2wuY29tcGlsZVNoYWRlcihmczIpOwogCiAgICAgYXNzZXJ0TXNn
KGdsLmdldFNoYWRlclBhcmFtZXRlcihmczIsIGdsLkNPTVBJTEVfU1RBVFVTKSA9PSB0cnVlLApA
QCAtMjQyLDcgKzI0Miw3IEBAIGZ1bmN0aW9uIGdvKCkgewogICAgIGdsRXJyb3JTaG91bGRCZShn
bCwgZ2wuTk9fRVJST1IsICJUaGUgY3VycmVudCBwcm9ncmFtIHNob3VsZG4ndCBiZSBkZWxldGVk
Iik7CiAKICAgICB2YXIgZnMzID0gZ2wuY3JlYXRlU2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7
Ci0gICAgZ2wuc2hhZGVyU291cmNlKGZzMywgIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7XG4jZW5kaWZcbiB2YXJ5aW5nIHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGds
X0ZyYWdDb2xvciA9IHZDb2xvcjsgfSIpOworICAgIGdsLnNoYWRlclNvdXJjZShmczMsICJwcmVj
aXNpb24gbWVkaXVtcCBmbG9hdDtcbiB2YXJ5aW5nIHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7
IGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsgfSIpOwogICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMzKTsK
IAogICAgIGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoZnMzLCBnbC5DT01QSUxFX1NU
QVRVUykgPT0gdHJ1ZSwKQEAgLTI1Myw3ICsyNTMsNyBAQCBmdW5jdGlvbiBnbygpIHsKICAgICBn
bEVycm9yU2hvdWxkQmUoZ2wsIGdsLklOVkFMSURfVkFMVUUsICJhbiB1bmF0dGFjaGVkIHNoYWRl
ciBzaG91bGQgYmUgZGVsZXRlZCBpbW1lZGlhdGVseSIpOwogCiAgICAgZnMzID0gZ2wuY3JlYXRl
U2hhZGVyKGdsLkZSQUdNRU5UX1NIQURFUik7Ci0gICAgZ2wuc2hhZGVyU291cmNlKGZzMywgIiNp
ZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZW5kaWZcbiB2YXJ5aW5nIHZl
YzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsgfSIpOworICAg
IGdsLnNoYWRlclNvdXJjZShmczMsICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiB2YXJ5aW5n
IHZlYzQgdkNvbG9yOyB2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZDb2xvcjsgfSIpOwog
ICAgIGdsLmNvbXBpbGVTaGFkZXIoZnMzKTsKIAogICAgIGFzc2VydE1zZyhnbC5nZXRTaGFkZXJQ
YXJhbWV0ZXIoZnMzLCBnbC5DT01QSUxFX1NUQVRVUykgPT0gdHJ1ZSwKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLXBhY2stYWxpZ25tZW50Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtcGFj
ay1hbGlnbm1lbnQuaHRtbAkocmV2aXNpb24gNjY1MDIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9yZWFkLXBpeGVscy1wYWNrLWFsaWdubWVudC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xNiw5ICsxNiw3IEBAIHZvaWQgbWFpbigpCiA8L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0i
ZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNp
c2lvbiBtZWRpdW1wIGZsb2F0OwotI2VuZGlmCiB2YXJ5aW5nIHZlYzQgY29sb3I7CiAKIHZvaWQg
bWFpbigpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtc3ViLWltYWdl
LTJkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4
LXN1Yi1pbWFnZS0yZC5odG1sCShyZXZpc2lvbiA2NjUwMikKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL3RleC1zdWItaW1hZ2UtMmQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNSw5
ICs1LDcgQEAKIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Ci0jaWZkZWYg
R0xfRVMKIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKLSNlbmRpZgogdW5pZm9ybSBzYW1wbGVyMkQg
dGV4OwogdmFyeWluZyB2ZWMyIHRleENvb3JkOwogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC90ZXhJbWFnZTJESW1hZ2VEYXRhVGVzdC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleEltYWdlMkRJbWFnZURhdGFUZXN0Lmh0bWwJ
KHJldmlzaW9uIDY2NTAyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4SW1h
Z2UyREltYWdlRGF0YVRlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsOSArMTUsNyBAQAog
ICAgIDwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIv
eC1mcmFnbWVudCI+Ci0gICAgICAgICNpZmRlZiBHTF9FUwogICAgICAgICBwcmVjaXNpb24gaGln
aHAgZmxvYXQ7Ci0gICAgICAgICNlbmRpZgogICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB0ZXg7
CiAgICAgICAgIHZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKICAgICAgICAgdm9pZCBtYWluKCkKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtYWN0aXZlLWJpbmQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLWFj
dGl2ZS1iaW5kLmh0bWwJKHJldmlzaW9uIDY2NTAyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdGV4dHVyZS1hY3RpdmUtYmluZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5
ICsyNSw3IEBAIHZvaWQgbWFpbigpCiA8L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0iZnNoYWRlciIg
dHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lvbiBoaWdo
cCBmbG9hdDsKLSNlbmRpZgogdW5pZm9ybSBzYW1wbGVyMkQgdGV4OwogdmFyeWluZyB2ZWMyIHRl
eENvb3JkOwogdm9pZCBtYWluKCkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3RleHR1cmUtY29tcGxldGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC90ZXh0dXJlLWNvbXBsZXRlLmh0bWwJKHJldmlzaW9uIDY2NTAyKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4dHVyZS1jb21wbGV0ZS5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xMyw5ICsxMyw3IEBACiA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CiA8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KIDxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9Ingtc2hh
ZGVyL3gtdmVydGV4Ij4KLSNpZmRlZiBHTF9FUwogcHJlY2lzaW9uIGhpZ2hwIGZsb2F0OwotI2Vu
ZGlmCiBhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247CiBhdHRyaWJ1dGUgdmVjMiB0ZXhDb29yZDA7
CiB2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7CkBAIC0yNyw5ICsyNSw3IEBAIHZvaWQgbWFpbigpCiA8
L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVu
dCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lvbiBoaWdocCBmbG9hdDsKLSNlbmRpZgogdW5pZm9y
bSBzYW1wbGVyMkQgdGV4OwogdmFyeWluZyB2ZWMyIHRleENvb3JkOwogdm9pZCBtYWluKCkKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtbnBvdC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1cmUtbnBvdC5odG1s
CShyZXZpc2lvbiA2NjUwMikKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RleHR1
cmUtbnBvdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw5ICsyNCw3IEBAIHZvaWQgbWFpbigp
CiA8L3NjcmlwdD4KIAogPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFn
bWVudCI+Ci0jaWZkZWYgR0xfRVMKIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotI2VuZGlmCiB1
bmlmb3JtIHNhbXBsZXJDdWJlIHRleDsKIHZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKIHZvaWQgbWFp
bigpCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXh0dXJlLXRyYW5zcGFy
ZW50LXBpeGVscy1pbml0aWFsaXplZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3RleHR1cmUtdHJhbnNwYXJlbnQtcGl4ZWxzLWluaXRpYWxpemVkLmh0
bWwJKHJldmlzaW9uIDY2NTAyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4
dHVyZS10cmFuc3BhcmVudC1waXhlbHMtaW5pdGlhbGl6ZWQuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMTcsOSArMTcsNyBAQCB2b2lkIG1haW4oKQogPC9zY3JpcHQ+CiAKIDxzY3JpcHQgaWQ9ImZz
aGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgotI2lmZGVmIEdMX0VTCiBwcmVjaXNp
b24gaGlnaHAgZmxvYXQ7Ci0jZW5kaWYKIHVuaWZvcm0gc2FtcGxlcjJEIHRleDsKIHZhcnlpbmcg
dmVjMiB0ZXhDb29yZDsKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVz
b3VyY2VzL2ZyYWdtZW50U2hhZGVyLmZyYWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2ZyYWdtZW50U2hhZGVyLmZyYWcJKHJldmlzaW9uIDY2
NTAyKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2ZyYWdtZW50
U2hhZGVyLmZyYWcJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACi0jaWZkZWYgR0xfRVMK
IHByZWNpc2lvbiBoaWdocCBmbG9hdDsKLSNlbmRpZgogdmFyeWluZyB2ZWMzIHZfbm9ybWFsOwog
CiB2b2lkIG1haW4oKQo=
</data>
<flag name="review"
          id="54993"
          type_id="1"
          status="-"
          setter="zmo"
    />
    <flag name="commit-queue"
          id="54994"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68767</attachid>
            <date>2010-09-24 15:15:29 -0700</date>
            <delta_ts>2010-09-27 14:07:02 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>angle.patch</filename>
            <type>text/plain</type>
            <size>15597</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODI5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBNb3ZlIEFuZ2xlIHN0dWZmIGlu
c2lkZSBNQUMgb25seSBzZWN0aW9uLgorCiAyMDEwLTA5LTI0ICBMdWl6IEFnb3N0aW5pICA8bHVp
ei5hZ29zdGluaUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjgyMjApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTgzNCwxNCAr
ODM0LDE0IEBAIHB1YmxpYzoKIAogICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0OwogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgeyAKLSAgICAgICAgU3RyaW5nIHNvdXJjZTsgCi0g
ICAgICAgIFN0cmluZyBsb2c7IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB0eXBlZGVmIHN0cnVj
dCB7CisgICAgICAgIFN0cmluZyBzb3VyY2U7CisgICAgICAgIFN0cmluZyBsb2c7CiAgICAgICAg
IGJvb2wgaXNWYWxpZDsKICAgICB9IFNoYWRlclNvdXJjZUVudHJ5OwogICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCi0j
aWYgUExBVEZPUk0oTUFDKQogICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7CiAKICAg
ICBBdHRyaWJ1dGVzIG1fYXR0cnM7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY4Mjk0KQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5
IEBACisyMDEwLTA5LTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSG9vayB1cCBBTkdMRSB3aXRo
IGNocm9taXVtIC0taW4tcHJvY2Vzcy13ZWJnbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDMwOQorCisgICAgICAgICogV2ViS2l0Lmd5cDog
QWRkIGFuZ2xlIGRlcGVuZGVuY3kuCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuY3BwOiBVc2luZyBhbmdsZSBmb3Igc2hhZGVyIHZhbGlkYXRpb24gYW5kIHRy
YW5zbGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6fldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNo
YWRlclNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFuZ2xlQ3JlYXRlQ29tcGlsZXJzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YW5nbGVEZXN0cm95Q29t
cGlsZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6YW5nbGVWYWxpZGF0ZVNoYWRlclNvdXJjZSk6CisgICAgICAgICogc3JjL1dlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuaDogQWRkIG5lY2Vzc2FyeSBkYXRhIGFuZCBmdW5jdGlvbnMg
Zm9yIGFuZ2xlIHN0dWZmLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpTaGFkZXJTb3VyY2VFbnRyeTo6U2hhZGVyU291cmNlRW50cnkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpTaGFkZXJTb3VyY2VF
bnRyeTo6flNoYWRlclNvdXJjZUVudHJ5KToKKwogMjAxMC0wOS0yNCAgVG9ueSBDaGFuZyAgPHRv
bnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCBjaHJvbWl1bSBjb21w
aWxlIGFmdGVyIHI2ODI3NiB3aGljaCByZW5hbWVkCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNp
b24gNjgyMjApCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpA
QCAtNzYsNiArNzYsNyBAQAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Fw
cC9hcHAuZ3lwOmFwcF9iYXNlJywgIyBGb3IgR0xDb250ZXh0CiAgICAgICAgICAgICAgICAgJzwo
Y2hyb21pdW1fc3JjX2Rpcikvc2tpYS9za2lhLmd5cDpza2lhJywKICAgICAgICAgICAgICAgICAn
PChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9ucGFwaS9ucGFwaS5neXA6bnBhcGknLAor
ICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL3Ny
Yy9idWlsZF9hbmdsZS5neXA6dHJhbnNsYXRvcl9jb21tb24nLAogICAgICAgICAgICAgXSwKICAg
ICAgICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWwogICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL3NraWEvc2tpYS5neXA6c2tpYScsCkBAIC04NCw2ICs4NSw3
IEBACiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICdwdWJs
aWMnLAogICAgICAgICAgICAgICAgICdzcmMnLAorICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL2luY2x1ZGUvR0xTTEFORycsCiAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgJ2RlZmluZXMnOiBbCiAgICAgICAgICAgICAgICAgJ1dFQktJVF9J
TVBMRU1FTlRBVElPTj0xJywKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNjgyMjApCisr
KyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiYXBwL2dmeC9nbC9n
bF9jb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2luY2x1ZGUg
PHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC02OSw2ICs3MCw4IEBAIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OldlYkdyYXAKICAgICAsIG1fc2NhbmxpbmUoMCkKICNl
bmRpZgogICAgICwgbV9ib3VuZEFycmF5QnVmZmVyKDApCisgICAgLCBtX2ZyYWdtZW50Q29tcGls
ZXIoMCkKKyAgICAsIG1fdmVydGV4Q29tcGlsZXIoMCkKIHsKIH0KIApAQCAtOTQsNiArOTcsOCBA
QCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhCiAgICAgICAgIGdsRGVs
ZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiAKICAgICAgICAgbV9nbENvbnRleHQtPkRl
c3Ryb3koKTsKKworICAgICAgICBhbmdsZURlc3Ryb3lDb21waWxlcnMoKTsKICAgICB9CiB9CiAK
QEAgLTExNSw2ICsxMjAsMTIgQEAgYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjppbgogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwogCiAgICAgZ2xFbmFibGUoR0xfVkVSVEVY
X1BST0dSQU1fUE9JTlRfU0laRSk7CisKKyAgICBpZiAoIWFuZ2xlQ3JlYXRlQ29tcGlsZXJzKCkp
IHsKKyAgICAgICAgYW5nbGVEZXN0cm95Q29tcGlsZXJzKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKICAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTY1Miw3ICs2NjMsMzEgQEAgREVMRUdBVEVfVE9fR0xfMShjbGVhclN0ZW5jaWwsIENs
ZWFyU3RlbgogCiBERUxFR0FURV9UT19HTF80KGNvbG9yTWFzaywgQ29sb3JNYXNrLCBib29sLCBi
b29sLCBib29sLCBib29sKQogCi1ERUxFR0FURV9UT19HTF8xKGNvbXBpbGVTaGFkZXIsIENvbXBp
bGVTaGFkZXIsIFdlYkdMSWQpCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmNvbXBpbGVTaGFkZXIoV2ViR0xJZCBzaGFkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKSB7CisgICAgICAgIC8vIFBhc3NpbmcgZG93biB0byBnbCBkcml2ZXIgdG8gZ2VuZXJh
dGUgdGhlIGNvcnJlY3QgZXJyb3I7IG9yIHRoZSBjYXNlCisgICAgICAgIC8vIHdoZXJlIHRoZSBz
aGFkZXIgZGVsZXRpb24gaXMgZGVsYXllZCB3aGVuIGl0J3MgYXR0YWNoZWQgdG8gYSBwcm9ncmFt
LgorICAgICAgICBnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKworICAg
IGlmICghYW5nbGVWYWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeSkpCisgICAgICAgIHJldHVybjsg
Ly8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29tcGls
aW5nIHRyYW5zbGF0ZWQgc291cmNlCisKKyAgICBpbnQgc2hhZGVyTGVuZ3RoID0gc3RybGVuKGVu
dHJ5LnRyYW5zbGF0ZWRTb3VyY2UpOworICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgY29u
c3RfY2FzdDxjb25zdCBjaGFyKio+KCZlbnRyeS50cmFuc2xhdGVkU291cmNlKSwgJnNoYWRlckxl
bmd0aCk7CisgICAgZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgICBpbnQgY29tcGlsZVN0
YXR1czsKKyAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsICZjb21w
aWxlU3RhdHVzKTsKKyAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5lcmF0ZWQgR0xTTCB3aWxs
IGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAorICAgIEFTU0VSVChjb21waWxlU3RhdHVzID09IEdMX1RS
VUUpOworfQogCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNvcHlUZXhJ
bWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGlu
dGVybmFsZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQg
bG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQpAQCAtOTExLDE0ICs5NDYsNTIgQEAgV2ViU3RyaW5n
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcAogCiBERUxFR0FURV9UT19HTF8zKGdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVYVCwgdW5z
aWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKIAotREVMRUdBVEVfVE9fR0xfMyhnZXRT
aGFkZXJpdiwgR2V0U2hhZGVyaXYsIFdlYkdMSWQsIHVuc2lnbmVkIGxvbmcsIGludCopCit2b2lk
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlcml2KFdlYkdMSWQgc2hh
ZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNv
dXJjZU1hcC5lbmQoKSkgeworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1
bHQtPnNlY29uZDsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdMX0NP
TVBJTEVfU1RBVFVTOgorICAgICAgICAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8aW50PihlbnRy
eS5pc1ZhbGlkKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBHTF9JTkZPX0xP
R19MRU5HVEg6CisgICAgICAgICAgICBpZiAoIWVudHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgICAg
ICAgICAqdmFsdWUgPSBzdHJsZW4oZW50cnkubG9nKTsKKyAgICAgICAgICAgICAgICBpZiAoKnZh
bHVlKQorICAgICAgICAgICAgICAgICAgICAoKnZhbHVlKSsrOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdM
X1NIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAgICAgICAgKnZhbHVlID0gc3RybGVuKGVudHJ5
LnNvdXJjZSk7CisgICAgICAgICAgICBpZiAoKnZhbHVlKQorICAgICAgICAgICAgICAgICgqdmFs
dWUpKys7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnbEdl
dFNoYWRlcml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKK30KIAogV2ViU3RyaW5nIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBzaGFkZXIp
CiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbG9nTGVuZ3RoOworCisg
ICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkg
eworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAg
ICAgICAgaWYgKCFlbnRyeS5pc1ZhbGlkKSB7CisgICAgICAgICAgICBXZWJTdHJpbmcgcmVzID0g
V2ViU3RyaW5nOjpmcm9tVVRGOChlbnRyeS5sb2csIHN0cmxlbihlbnRyeS5sb2cpKTsKKyAgICAg
ICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGludCBsb2dMZW5n
dGggPSAwOwogICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
b2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQorICAgIGlmIChsb2dMZW5ndGggPD0gMSkK
ICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwogICAgIEdMY2hhciogbG9nID0gMDsKICAgICBp
ZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxv
ZykpCkBAIC05MzQsOSArMTAwNywxNyBAQCBXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wCiBXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0
U2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVyKQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIEdMaW50IGxvZ0xlbmd0aDsKKworICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3Ig
cmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQg
IT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkm
IGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIFdlYlN0cmluZyByZXMgPSBXZWJTdHJp
bmc6OmZyb21VVEY4KGVudHJ5LnNvdXJjZSwgc3RybGVuKGVudHJ5LnNvdXJjZSkpOworICAgICAg
ICByZXR1cm4gcmVzOworICAgIH0KKworICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7CiAgICAgZ2xH
ZXRTaGFkZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbG9nTGVuZ3RoKTsK
LSAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICBpZiAobG9nTGVuZ3RoIDw9IDEpCiAgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKICAgICBHTGNoYXIqIGxvZyA9IDA7CiAgICAgaWYgKCF0cnlGYXN0
TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQpAQCAtMTA1
Nyw3ICsxMTM4LDE4IEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c2gK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBHTGludCBsZW5ndGggPSBzdHJsZW4o
c3RyaW5nKTsKLSAgICBnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsICZzdHJpbmcsICZsZW5ndGgp
OworICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpIHsKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7
CisgICAgICAgIGlmIChlbnRyeS5zb3VyY2UpIHsKKyAgICAgICAgICAgIGZhc3RGcmVlKGVudHJ5
LnNvdXJjZSk7CisgICAgICAgICAgICBlbnRyeS5zb3VyY2UgPSAwOworICAgICAgICB9CisgICAg
ICAgIGlmICghdHJ5RmFzdE1hbGxvYygobGVuZ3RoICsgMSkgKiBzaXplb2YoY2hhcikpLmdldFZh
bHVlKGVudHJ5LnNvdXJjZSkpCisgICAgICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBnZW5lcmF0
ZSBhbiBlcnJvcj8KKyAgICAgICAgbWVtY3B5KGVudHJ5LnNvdXJjZSwgc3RyaW5nLCAobGVuZ3Ro
ICsgMSkgKiBzaXplb2YoY2hhcikpOworICAgIH0gZWxzZQorICAgICAgICBnbFNoYWRlclNvdXJj
ZShzaGFkZXIsIDEsICZzdHJpbmcsICZsZW5ndGgpOwogfQogCiBERUxFR0FURV9UT19HTF8zKHN0
ZW5jaWxGdW5jLCBTdGVuY2lsRnVuYywgdW5zaWduZWQgbG9uZywgbG9uZywgdW5zaWduZWQgbG9u
ZykKQEAgLTExOTYsNyArMTI4OCwxOCBAQCB1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsCiAgICAgcmV0dXJuIG87CiB9CiAKLURFTEVHQVRFX1RPX0dMXzFSKGNyZWF0ZVNo
YWRlciwgQ3JlYXRlU2hhZGVyLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCk7Cit1bnNpZ25lZCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9u
ZyBzaGFkZXJUeXBlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEFTU0VSVChz
aGFkZXJUeXBlID09IEdMX1ZFUlRFWF9TSEFERVIgfHwgc2hhZGVyVHlwZSA9PSBHTF9GUkFHTUVO
VF9TSEFERVIpOworICAgIHVuc2lnbmVkIHNoYWRlciA9IGdsQ3JlYXRlU2hhZGVyKHNoYWRlclR5
cGUpOworICAgIGlmIChzaGFkZXIpIHsKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnk7
CisgICAgICAgIGVudHJ5LnR5cGUgPSBzaGFkZXJUeXBlOworICAgICAgICBtX3NoYWRlclNvdXJj
ZU1hcC5zZXQoc2hhZGVyLCBlbnRyeSk7CisgICAgfQorICAgIHJldHVybiBzaGFkZXI7Cit9CiAK
IHVuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVRleHR1cmUo
KQogewpAQCAtMTIzNCw2ICsxMzM3LDcgQEAgdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjpkZQogewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGdsRGVsZXRlU2hh
ZGVyKHNoYWRlcik7CisgICAgbV9zaGFkZXJTb3VyY2VNYXAucmVtb3ZlKHNoYWRlcik7CiB9CiAK
IHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlVGV4dHVyZSh1bnNp
Z25lZCB0ZXh0dXJlKQpAQCAtMTI0Miw2ICsxMzQ2LDkyIEBAIHZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6ZGUKICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsK
IH0KIAorYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjphbmdsZUNyZWF0ZUNv
bXBpbGVycygpCit7CisgICAgaWYgKCFTaEluaXRpYWxpemUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgVEJ1aWx0SW5SZXNvdXJjZSByZXNvdXJjZTsKKyAgICByZXNvdXJjZS5NYXhW
ZXJ0ZXhBdHRyaWJzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHTF9NQVhfVkVSVEVYX0FUVFJJQlMs
ICZyZXNvdXJjZS5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICByZXNvdXJjZS5NYXhWZXJ0ZXhVbmlm
b3JtVmVjdG9ycyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoMHg4REZCLCAvLyBNQVhfVkVSVEVYX1VO
SUZPUk1fVkVDVE9SUworICAgICAgICAgICAgICAgICZyZXNvdXJjZS5NYXhWZXJ0ZXhVbmlmb3Jt
VmVjdG9ycyk7CisgICAgcmVzb3VyY2UuTWF4VmFyeWluZ1ZlY3RvcnMgPSAwOworICAgIGdldElu
dGVnZXJ2KDB4OERGQywgLy8gTUFYX1ZBUllJTkdfVkVDVE9SUworICAgICAgICAgICAgICAgICZy
ZXNvdXJjZS5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgcmVzb3VyY2UuTWF4VmVydGV4VGV4dHVy
ZUltYWdlVW5pdHMgPSAwOworICAgIGdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfVEVYVFVSRV9J
TUFHRV9VTklUUywgJnJlc291cmNlLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBy
ZXNvdXJjZS5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRlZ2Vy
dihHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJnJlc291cmNlLk1heENvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIHJlc291cmNlLk1heFRleHR1cmVJbWFnZVVuaXRz
ID0gMDsKKyAgICBnZXRJbnRlZ2VydihHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJnJlc291
cmNlLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICByZXNvdXJjZS5NYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzID0gMDsKKyAgICBnZXRJbnRlZ2VydigweDhERkQsIC8vIE1BWF9GUkFHTUVOVF9V
TklGT1JNX1ZFQ1RPUlMKKyAgICAgICAgICAgICAgICAmcmVzb3VyY2UuTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyk7CisgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCisgICAg
cmVzb3VyY2UuTWF4RHJhd0J1ZmZlcnMgPSAxOworCisgICAgbV9mcmFnbWVudENvbXBpbGVyID0g
U2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5nRnJhZ21lbnQsIEVTaFNwZWNXZWJHTCwgJnJlc291
cmNlKTsKKyAgICBtX3ZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5n
VmVydGV4LCBFU2hTcGVjV2ViR0wsICZyZXNvdXJjZSk7CisgICAgcmV0dXJuIChtX2ZyYWdtZW50
Q29tcGlsZXIgJiYgbV92ZXJ0ZXhDb21waWxlcik7Cit9CisKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6YW5nbGVEZXN0cm95Q29tcGlsZXJzKCkKK3sKKyAgICBpZiAobV9m
cmFnbWVudENvbXBpbGVyKSB7CisgICAgICAgIFNoRGVzdHJ1Y3QobV9mcmFnbWVudENvbXBpbGVy
KTsKKyAgICAgICAgbV9mcmFnbWVudENvbXBpbGVyID0gMDsKKyAgICB9CisgICAgaWYgKG1fdmVy
dGV4Q29tcGlsZXIpIHsKKyAgICAgICAgU2hEZXN0cnVjdChtX3ZlcnRleENvbXBpbGVyKTsKKyAg
ICAgICAgbV92ZXJ0ZXhDb21waWxlciA9IDA7CisgICAgfQorfQorCitib29sIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmFuZ2xlVmFsaWRhdGVTaGFkZXJTb3VyY2UoU2hhZGVyU291
cmNlRW50cnkmIGVudHJ5KQoreworICAgIGVudHJ5LmlzVmFsaWQgPSBmYWxzZTsKKyAgICBpZiAo
ZW50cnkudHJhbnNsYXRlZFNvdXJjZSkgeworICAgICAgICBmYXN0RnJlZShlbnRyeS50cmFuc2xh
dGVkU291cmNlKTsKKyAgICAgICAgZW50cnkudHJhbnNsYXRlZFNvdXJjZSA9IDA7CisgICAgfQor
ICAgIGlmIChlbnRyeS5sb2cpIHsKKyAgICAgICAgZmFzdEZyZWUoZW50cnkubG9nKTsKKyAgICAg
ICAgZW50cnkubG9nID0gMDsKKyAgICB9CisKKyAgICBTaEhhbmRsZSBjb21waWxlciA9IDA7Cisg
ICAgc3dpdGNoIChlbnRyeS50eXBlKSB7CisgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6Cisg
ICAgICAgIGNvbXBpbGVyID0gbV9mcmFnbWVudENvbXBpbGVyOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6CisgICAgICAgIGNvbXBpbGVyID0gbV92ZXJ0ZXhDb21w
aWxlcjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghY29tcGlsZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghU2hDb21waWxlKGNvbXBpbGVyLCAmZW50cnkuc291
cmNlLCAxLCBFU2hPcHRPYmplY3RDb2RlKSkgeworICAgICAgICBpbnQgbG9nU2l6ZSA9IDA7Cisg
ICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmbG9nU2l6ZSk7
CisgICAgICAgIGlmIChsb2dTaXplID4gMSAmJiB0cnlGYXN0TWFsbG9jKGxvZ1NpemUgKiBzaXpl
b2YoY2hhcikpLmdldFZhbHVlKGVudHJ5LmxvZykpCisgICAgICAgICAgICBTaEdldEluZm9Mb2co
Y29tcGlsZXIsIGVudHJ5LmxvZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpbnQgbGVuZ3RoID0gMDsKKyAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RF
X0xFTkdUSCwgJmxlbmd0aCk7CisgICAgaWYgKGxlbmd0aCA+IDEpIHsKKyAgICAgICAgaWYgKCF0
cnlGYXN0TWFsbG9jKGxlbmd0aCAqIHNpemVvZihjaGFyKSkuZ2V0VmFsdWUoZW50cnkudHJhbnNs
YXRlZFNvdXJjZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNoR2V0T2Jq
ZWN0Q29kZShjb21waWxlciwgZW50cnkudHJhbnNsYXRlZFNvdXJjZSk7CisgICAgfQorICAgIGVu
dHJ5LmlzVmFsaWQgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuaAko
cmV2aXNpb24gNjgyMjApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsMTAgQEAKIAogI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCiAKKyNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCiAjaW5jbHVkZSAi
V2ViR3JhcGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC0z
MjMsNiArMzI1LDQ1IEBAIHByaXZhdGU6CiAgICAgTGlzdEhhc2hTZXQ8dW5zaWduZWQgbG9uZz4g
bV9zeW50aGV0aWNFcnJvcnM7CiAKICAgICBPd25QdHI8Z2Z4OjpHTENvbnRleHQ+IG1fZ2xDb250
ZXh0OworCisgICAgLy8gQU5HTEUgcmVsYXRlZC4KKyAgICBjbGFzcyBTaGFkZXJTb3VyY2VFbnRy
eSB7CisgICAgcHVibGljOgorICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSgpCisgICAgICAgICAg
ICAgICAgOiB0eXBlKDApCisgICAgICAgICAgICAgICAgLCBzb3VyY2UoMCkKKyAgICAgICAgICAg
ICAgICAsIGxvZygwKQorICAgICAgICAgICAgICAgICwgdHJhbnNsYXRlZFNvdXJjZSgwKQorICAg
ICAgICAgICAgICAgICwgaXNWYWxpZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgflNoYWRlclNvdXJjZUVudHJ5KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNv
dXJjZSkKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShzb3VyY2UpOworICAgICAgICAgICAgaWYg
KGxvZykKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShsb2cpOworICAgICAgICAgICAgaWYgKHRy
YW5zbGF0ZWRTb3VyY2UpCisgICAgICAgICAgICAgICAgZmFzdEZyZWUodHJhbnNsYXRlZFNvdXJj
ZSk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBsb25nIHR5cGU7CisgICAgICAgIGNo
YXIqIHNvdXJjZTsKKyAgICAgICAgY2hhciogbG9nOworICAgICAgICBjaGFyKiB0cmFuc2xhdGVk
U291cmNlOworICAgICAgICBib29sIGlzVmFsaWQ7CisgICAgfTsKKworICAgIGJvb2wgYW5nbGVD
cmVhdGVDb21waWxlcnMoKTsKKyAgICB2b2lkIGFuZ2xlRGVzdHJveUNvbXBpbGVycygpOworICAg
IGJvb2wgYW5nbGVWYWxpZGF0ZVNoYWRlclNvdXJjZShTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkp
OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkdMSWQsIFNoYWRlclNvdXJjZUVudHJ5PiBTaGFk
ZXJTb3VyY2VNYXA7CisgICAgU2hhZGVyU291cmNlTWFwIG1fc2hhZGVyU291cmNlTWFwOworCisg
ICAgU2hIYW5kbGUgbV9mcmFnbWVudENvbXBpbGVyOworICAgIFNoSGFuZGxlIG1fdmVydGV4Q29t
cGlsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="58333"
          type_id="1"
          status="-"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="58334"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68955</attachid>
            <date>2010-09-27 14:07:02 -0700</date>
            <delta_ts>2010-09-27 14:45:48 -0700</delta_ts>
            <desc>revised patch: responding to kbr and alokp reviews</desc>
            <filename>angle.patch</filename>
            <type>text/plain</type>
            <size>17874</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODI5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBNb3ZlIEFuZ2xlIHN0dWZmIGlu
c2lkZSBNQUMgb25seSBzZWN0aW9uLgorCiAyMDEwLTA5LTI0ICBMdWl6IEFnb3N0aW5pICA8bHVp
ei5hZ29zdGluaUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjgyMjApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTgzNCwxNCAr
ODM0LDE0IEBAIHB1YmxpYzoKIAogICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0OwogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgeyAKLSAgICAgICAgU3RyaW5nIHNvdXJjZTsgCi0g
ICAgICAgIFN0cmluZyBsb2c7IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB0eXBlZGVmIHN0cnVj
dCB7CisgICAgICAgIFN0cmluZyBzb3VyY2U7CisgICAgICAgIFN0cmluZyBsb2c7CiAgICAgICAg
IGJvb2wgaXNWYWxpZDsKICAgICB9IFNoYWRlclNvdXJjZUVudHJ5OwogICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCi0j
aWYgUExBVEZPUk0oTUFDKQogICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7CiAKICAg
ICBBdHRyaWJ1dGVzIG1fYXR0cnM7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY4Mjk0KQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMw
IEBACisyMDEwLTA5LTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSG9vayB1cCBBTkdMRSB3aXRo
IGNocm9taXVtIC0taW4tcHJvY2Vzcy13ZWJnbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDMwOQorCisgICAgICAgICogV2ViS2l0Lmd5cDog
QWRkIGFuZ2xlIGRlcGVuZGVuY3kuCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuY3BwOiBVc2luZyBhbmdsZSBmb3Igc2hhZGVyIHZhbGlkYXRpb24gYW5kIHRy
YW5zbGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6fldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmdldEludGVnZXJ2KTogVXNpbmcgZGVmaW5lZCBjb25zdCBp
bnN0ZWFkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzaGFkZXJTb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVTaGFkZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxl
dGVTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjphbmdsZUNyZWF0ZUNvbXBpbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmFuZ2xlRGVzdHJveUNvbXBpbGVycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFuZ2xlVmFsaWRhdGVTaGFk
ZXJTb3VyY2UpOgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
Lmg6IEFkZCBuZWNlc3NhcnkgZGF0YSBhbmQgZnVuY3Rpb25zIGZvciBhbmdsZSBzdHVmZi4KKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6U2hhZGVyU291
cmNlRW50cnk6OlNoYWRlclNvdXJjZUVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6U2hhZGVyU291cmNlRW50cnk6On5TaGFkZXJTb3VyY2VF
bnRyeSk6CisKIDIwMTAtMDktMjQgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCBmaXggY2hyb21pdW0gY29tcGlsZSBhZnRlciByNjgyNzYgd2hp
Y2ggcmVuYW1lZApJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDY4MjIwKQorKysgV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9hcHAvYXBwLmd5cDphcHBfYmFzZScs
ICMgRm9yIEdMQ29udGV4dAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Nr
aWEvc2tpYS5neXA6c2tpYScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
dGhpcmRfcGFydHkvbnBhcGkvbnBhcGkuZ3lwOm5wYXBpJywKKyAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvYnVpbGRfYW5nbGUuZ3lwOnRy
YW5zbGF0b3JfZ2xzbCcsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2V4cG9ydF9kZXBl
bmRlbnRfc2V0dGluZ3MnOiBbCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
c2tpYS9za2lhLmd5cDpza2lhJywKQEAgLTg0LDYgKzg1LDcgQEAKICAgICAgICAgICAgICdpbmNs
dWRlX2RpcnMnOiBbCiAgICAgICAgICAgICAgICAgJ3B1YmxpYycsCiAgICAgICAgICAgICAgICAg
J3NyYycsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkv
YW5nbGUvaW5jbHVkZScsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2RlZmluZXMnOiBb
CiAgICAgICAgICAgICAgICAgJ1dFQktJVF9JTVBMRU1FTlRBVElPTj0xJywKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsLmNwcAkocmV2aXNpb24gNjgyMjApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMiArMzgs
MTkgQEAKICNpbmNsdWRlICJhcHAvZ2Z4L2dsL2dsX2NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NvbnN0IHVuc2lnbmVkIGludCBJTVBMRU1FTlRB
VElPTl9DT0xPUl9SRUFEX0ZPUk1BVCA9IDB4OEI5QjsKK2NvbnN0IHVuc2lnbmVkIGludCBJTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUgPSAgMHg4QjlBOworY29uc3QgdW5zaWduZWQgaW50
IE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTID0gMHg4REZCOworY29uc3QgdW5zaWduZWQgaW50
IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAweDhERkM7Citjb25zdCB1bnNpZ25lZCBpbnQgTUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDB4OERGRDsKKwogV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6VmVydGV4QXR0cmliUG9pbnRlclN0YXRlOjpWZXJ0ZXhBdHRyaWJQb2ludGVy
U3RhdGUoKQogICAgIDogZW5hYmxlZChmYWxzZSkKICAgICAsIGJ1ZmZlcigwKQpAQCAtNjksNiAr
NzYsOCBAQCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpXZWJHcmFwCiAgICAgLCBt
X3NjYW5saW5lKDApCiAjZW5kaWYKICAgICAsIG1fYm91bmRBcnJheUJ1ZmZlcigwKQorICAgICwg
bV9mcmFnbWVudENvbXBpbGVyKDApCisgICAgLCBtX3ZlcnRleENvbXBpbGVyKDApCiB7CiB9CiAK
QEAgLTk0LDYgKzEwMyw4IEBAIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6On5XZWJH
cmEKICAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKIAogICAgICAg
ICBtX2dsQ29udGV4dC0+RGVzdHJveSgpOworCisgICAgICAgIGFuZ2xlRGVzdHJveUNvbXBpbGVy
cygpOwogICAgIH0KIH0KIApAQCAtMTE1LDYgKzEyNiwxMiBAQCBib29sIFdlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmluCiAgICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7CiAKICAgICBn
bEVuYWJsZShHTF9WRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKKworICAgIGlmICghYW5nbGVD
cmVhdGVDb21waWxlcnMoKSkgeworICAgICAgICBhbmdsZURlc3Ryb3lDb21waWxlcnMoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNjUyLDcgKzY2OSwzMyBAQCBERUxFR0FURV9UT19HTF8x
KGNsZWFyU3RlbmNpbCwgQ2xlYXJTdGVuCiAKIERFTEVHQVRFX1RPX0dMXzQoY29sb3JNYXNrLCBD
b2xvck1hc2ssIGJvb2wsIGJvb2wsIGJvb2wsIGJvb2wpCiAKLURFTEVHQVRFX1RPX0dMXzEoY29t
cGlsZVNoYWRlciwgQ29tcGlsZVNoYWRlciwgV2ViR0xJZCkKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6Y29tcGlsZVNoYWRlcihXZWJHTElkIHNoYWRlcikKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVz
dWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlmIChyZXN1bHQgPT0g
bV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gUGFzc2luZyBkb3duIHRvIGds
IGRyaXZlciB0byBnZW5lcmF0ZSB0aGUgY29ycmVjdCBlcnJvcjsgb3IgdGhlIGNhc2UKKyAgICAg
ICAgLy8gd2hlcmUgdGhlIHNoYWRlciBkZWxldGlvbiBpcyBkZWxheWVkIHdoZW4gaXQncyBhdHRh
Y2hlZCB0byBhIHByb2dyYW0uCisgICAgICAgIGdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3Vs
dC0+c2Vjb25kOworCisgICAgaWYgKCFhbmdsZVZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5KSkK
KyAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIgZGlkbid0IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZv
cndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNsYXRlZCBzb3VyY2UKKworICAgIGludCBzaGFkZXJM
ZW5ndGggPSBlbnRyeS50cmFuc2xhdGVkU291cmNlID8gc3RybGVuKGVudHJ5LnRyYW5zbGF0ZWRT
b3VyY2UpIDogMDsKKyAgICBnbFNoYWRlclNvdXJjZShzaGFkZXIsIDEsIGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcioqPigmZW50cnkudHJhbnNsYXRlZFNvdXJjZSksICZzaGFkZXJMZW5ndGgpOworICAg
IGdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOworCisjaWZuZGVmIE5ERUJVRworICAgIGludCBjb21w
aWxlU3RhdHVzOworICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9DT01QSUxFX1NUQVRVUywg
JmNvbXBpbGVTdGF0dXMpOworICAgIC8vIEFTU0VSVCB0aGF0IEFOR0xFIGdlbmVyYXRlZCBHTFNM
IHdpbGwgYmUgYWNjZXB0ZWQgYnkgT3BlbkdMCisgICAgQVNTRVJUKGNvbXBpbGVTdGF0dXMgPT0g
R0xfVFJVRSk7CisjZW5kaWYKK30KIAogdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5z
aWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKQEAgLTg2NiwyMSArOTA5LDIx
IEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2UKICAgICAvLyBUaGVy
ZWZvcmUsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZXNrdG9wIEdMIG5lZWRzIHRvIGJlIGRpdmlk
ZWQgYnkgNC4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBzd2l0Y2ggKHBuYW1lKSB7
Ci0gICAgY2FzZSAweDhCOUI6IC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUCisg
ICAgY2FzZSBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKICAgICAgICAgKnZhbHVl
ID0gR0xfUkdCOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIDB4OEI5QTogLy8gSU1QTEVNRU5U
QVRJT05fQ09MT1JfUkVBRF9UWVBFCisgICAgY2FzZSBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X1RZUEU6CiAgICAgICAgICp2YWx1ZSA9IEdMX1VOU0lHTkVEX0JZVEU7CiAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgMHg4REZEOiAvLyBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTCisgICAg
Y2FzZSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOgogICAgICAgICBnbEdldEludGVnZXJ2
KEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFMsIHZhbHVlKTsKICAgICAgICAgKnZh
bHVlIC89IDQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgMHg4REZCOiAvLyBNQVhfVkVSVEVY
X1VOSUZPUk1fVkVDVE9SUworICAgIGNhc2UgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CiAg
ICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFMsIHZh
bHVlKTsKICAgICAgICAgKnZhbHVlIC89IDQ7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgMHg4
REZDOiAvLyBNQVhfVkFSWUlOR19WRUNUT1JTCisgICAgY2FzZSBNQVhfVkFSWUlOR19WRUNUT1JT
OgogICAgICAgICBnbEdldEludGVnZXJ2KEdMX01BWF9WQVJZSU5HX0ZMT0FUUywgdmFsdWUpOwog
ICAgICAgICAqdmFsdWUgLz0gNDsKICAgICAgICAgYnJlYWs7CkBAIC05MTEsMTQgKzk1NCw1NyBA
QCBXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wCiAKIERFTEVHQVRFX1RP
X0dMXzMoZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYsIEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cml2RVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQqKQogCi1ERUxFR0FURV9U
T19HTF8zKGdldFNoYWRlcml2LCBHZXRTaGFkZXJpdiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywg
aW50KikKK3ZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0U2hhZGVyaXYo
V2ViR0xJZCBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ICE9
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5JiBl
bnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAg
IGNhc2UgR0xfQ09NUElMRV9TVEFUVVM6CisgICAgICAgICAgICBpZiAoIWVudHJ5LmlzVmFsaWQp
IHsKKyAgICAgICAgICAgICAgICAqdmFsdWUgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdMX0lORk9f
TE9HX0xFTkdUSDoKKyAgICAgICAgICAgIGlmICghZW50cnkuaXNWYWxpZCkgeworICAgICAgICAg
ICAgICAgICp2YWx1ZSA9IGVudHJ5LmxvZyA/IHN0cmxlbihlbnRyeS5sb2cpIDogMDsKKyAgICAg
ICAgICAgICAgICBpZiAoKnZhbHVlKQorICAgICAgICAgICAgICAgICAgICAoKnZhbHVlKSsrOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIOgorICAgICAgICAgICAgKnZh
bHVlID0gZW50cnkuc291cmNlID8gc3RybGVuKGVudHJ5LnNvdXJjZSkgOiAwOworICAgICAgICAg
ICAgaWYgKCp2YWx1ZSkKKyAgICAgICAgICAgICAgICAoKnZhbHVlKSsrOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIHBu
YW1lLCB2YWx1ZSk7Cit9CiAKIFdlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMSWQgc2hhZGVyKQogewogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwotICAgIEdMaW50IGxvZ0xlbmd0aDsKKworICAgIFNoYWRlclNvdXJjZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIGlm
IChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgU2hhZGVyU291
cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CisgICAgICAgIGlmICghZW50cnkuaXNW
YWxpZCkgeworICAgICAgICAgICAgaWYgKCFlbnRyeS5sb2cpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdlYlN0cmluZygpOworICAgICAgICAgICAgV2ViU3RyaW5nIHJlcyA9IFdlYlN0cmluZzo6
ZnJvbVVURjgoZW50cnkubG9nLCBzdHJsZW4oZW50cnkubG9nKSk7CisgICAgICAgICAgICByZXR1
cm4gcmVzOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpbnQgbG9nTGVuZ3RoID0gMDsKICAg
ICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfSU5GT19MT0dfTEVOR1RILCAmbG9nTGVuZ3RoKTsK
LSAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICBpZiAobG9nTGVuZ3RoIDw9IDEpCiAgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKICAgICBHTGNoYXIqIGxvZyA9IDA7CiAgICAgaWYgKCF0cnlGYXN0
TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQpAQCAtOTM0
LDkgKzEwMjAsMTkgQEAgV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcAog
V2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNoYWRlclNvdXJj
ZShXZWJHTElkIHNoYWRlcikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGlu
dCBsb2dMZW5ndGg7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJl
c3VsdC0+c2Vjb25kOworICAgICAgICBpZiAoIWVudHJ5LnNvdXJjZSkKKyAgICAgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKKyAgICAgICAgV2ViU3RyaW5nIHJlcyA9IFdlYlN0cmluZzo6ZnJv
bVVURjgoZW50cnkuc291cmNlLCBzdHJsZW4oZW50cnkuc291cmNlKSk7CisgICAgICAgIHJldHVy
biByZXM7CisgICAgfQorCisgICAgR0xpbnQgbG9nTGVuZ3RoID0gMDsKICAgICBnbEdldFNoYWRl
cml2KHNoYWRlciwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlm
ICghbG9nTGVuZ3RoKQorICAgIGlmIChsb2dMZW5ndGggPD0gMSkKICAgICAgICAgcmV0dXJuIFdl
YlN0cmluZygpOwogICAgIEdMY2hhciogbG9nID0gMDsKICAgICBpZiAoIXRyeUZhc3RNYWxsb2Mo
bG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCkBAIC0xMDU2LDggKzEx
NTIsMTkgQEAgREVMRUdBVEVfVE9fR0xfNChzY2lzc29yLCBTY2lzc29yLCBsb25nLAogdm9pZCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFk
ZXIsIGNvbnN0IGNoYXIqIHN0cmluZykKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAg
ICBHTGludCBsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsKLSAgICBnbFNoYWRlclNvdXJjZShzaGFk
ZXIsIDEsICZzdHJpbmcsICZsZW5ndGgpOworICAgIEdMaW50IGxlbmd0aCA9IHN0cmluZyA/IHN0
cmxlbihzdHJpbmcpIDogMDsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVzdWx0ICE9IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgIFNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBpZiAoZW50cnkuc291cmNlKSB7CisgICAgICAgICAg
ICBmYXN0RnJlZShlbnRyeS5zb3VyY2UpOworICAgICAgICAgICAgZW50cnkuc291cmNlID0gMDsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIXRyeUZhc3RNYWxsb2MoKGxlbmd0aCArIDEpICogc2l6
ZW9mKGNoYXIpKS5nZXRWYWx1ZShlbnRyeS5zb3VyY2UpKQorICAgICAgICAgICAgcmV0dXJuOyAv
LyBGSVhNRTogZ2VuZXJhdGUgYW4gZXJyb3I/CisgICAgICAgIG1lbWNweShlbnRyeS5zb3VyY2Us
IHN0cmluZywgKGxlbmd0aCArIDEpICogc2l6ZW9mKGNoYXIpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCAmc3RyaW5nLCAmbGVuZ3RoKTsKIH0KIAogREVM
RUdBVEVfVE9fR0xfMyhzdGVuY2lsRnVuYywgU3RlbmNpbEZ1bmMsIHVuc2lnbmVkIGxvbmcsIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCkBAIC0xMTk2LDcgKzEzMDMsMTggQEAgdW5zaWduZWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbAogICAgIHJldHVybiBvOwogfQogCi1ERUxFR0FURV9U
T19HTF8xUihjcmVhdGVTaGFkZXIsIENyZWF0ZVNoYWRlciwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQpOwordW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y3JlYXRlU2hh
ZGVyKHVuc2lnbmVkIGxvbmcgc2hhZGVyVHlwZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBBU1NFUlQoc2hhZGVyVHlwZSA9PSBHTF9WRVJURVhfU0hBREVSIHx8IHNoYWRlclR5
cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKTsKKyAgICB1bnNpZ25lZCBzaGFkZXIgPSBnbENyZWF0
ZVNoYWRlcihzaGFkZXJUeXBlKTsKKyAgICBpZiAoc2hhZGVyKSB7CisgICAgICAgIFNoYWRlclNv
dXJjZUVudHJ5IGVudHJ5OworICAgICAgICBlbnRyeS50eXBlID0gc2hhZGVyVHlwZTsKKyAgICAg
ICAgbV9zaGFkZXJTb3VyY2VNYXAuc2V0KHNoYWRlciwgZW50cnkpOworICAgIH0KKyAgICByZXR1
cm4gc2hhZGVyOworfQogCiB1bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpjcmVhdGVUZXh0dXJlKCkKIHsKQEAgLTEyMzQsNiArMTM1Miw3IEBAIHZvaWQgV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6ZGUKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
ICAgICBnbERlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgIG1fc2hhZGVyU291cmNlTWFwLnJlbW92
ZShzaGFkZXIpOwogfQogCiB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRl
bGV0ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSkKQEAgLTEyNDIsNiArMTM2MSw5MiBAQCB2b2lk
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlCiAgICAgZ2xEZWxldGVUZXh0dXJl
cygxLCAmdGV4dHVyZSk7CiB9CiAKK2Jvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6YW5nbGVDcmVhdGVDb21waWxlcnMoKQoreworICAgIGlmICghU2hJbml0aWFsaXplKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRCdWlsdEluUmVzb3VyY2UgcmVzb3VyY2U7Cisg
ICAgcmVzb3VyY2UuTWF4VmVydGV4QXR0cmlicyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xfTUFY
X1ZFUlRFWF9BVFRSSUJTLCAmcmVzb3VyY2UuTWF4VmVydGV4QXR0cmlicyk7CisgICAgcmVzb3Vy
Y2UuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2KE1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTLAorICAgICAgICAgICAgICAgICZyZXNvdXJjZS5NYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycyk7CisgICAgcmVzb3VyY2UuTWF4VmFyeWluZ1ZlY3RvcnMgPSAwOworICAg
IGdldEludGVnZXJ2KE1BWF9WQVJZSU5HX1ZFQ1RPUlMsCisgICAgICAgICAgICAgICAgJnJlc291
cmNlLk1heFZhcnlpbmdWZWN0b3JzKTsKKyAgICByZXNvdXJjZS5NYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cyA9IDA7CisgICAgZ2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTLCAmcmVzb3VyY2UuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIHJlc291
cmNlLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOworICAgIGdldEludGVnZXJ2KEdM
X01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmcmVzb3VyY2UuTWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgcmVzb3VyY2UuTWF4VGV4dHVyZUltYWdlVW5pdHMgPSAw
OworICAgIGdldEludGVnZXJ2KEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmcmVzb3VyY2Uu
TWF4VGV4dHVyZUltYWdlVW5pdHMpOworICAgIHJlc291cmNlLk1heEZyYWdtZW50VW5pZm9ybVZl
Y3RvcnMgPSAwOworICAgIGdldEludGVnZXJ2KE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMs
CisgICAgICAgICAgICAgICAgJnJlc291cmNlLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwor
ICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIHJlc291cmNlLk1heERy
YXdCdWZmZXJzID0gMTsKKworICAgIG1fZnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29t
cGlsZXIoRVNoTGFuZ0ZyYWdtZW50LCBFU2hTcGVjV2ViR0wsICZyZXNvdXJjZSk7CisgICAgbV92
ZXJ0ZXhDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ1ZlcnRleCwgRVNoU3Bl
Y1dlYkdMLCAmcmVzb3VyY2UpOworICAgIHJldHVybiAobV9mcmFnbWVudENvbXBpbGVyICYmIG1f
dmVydGV4Q29tcGlsZXIpOworfQorCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmFuZ2xlRGVzdHJveUNvbXBpbGVycygpCit7CisgICAgaWYgKG1fZnJhZ21lbnRDb21waWxl
cikgeworICAgICAgICBTaERlc3RydWN0KG1fZnJhZ21lbnRDb21waWxlcik7CisgICAgICAgIG1f
ZnJhZ21lbnRDb21waWxlciA9IDA7CisgICAgfQorICAgIGlmIChtX3ZlcnRleENvbXBpbGVyKSB7
CisgICAgICAgIFNoRGVzdHJ1Y3QobV92ZXJ0ZXhDb21waWxlcik7CisgICAgICAgIG1fdmVydGV4
Q29tcGlsZXIgPSAwOworICAgIH0KK30KKworYm9vbCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXBsOjphbmdsZVZhbGlkYXRlU2hhZGVyU291cmNlKFNoYWRlclNvdXJjZUVudHJ5JiBlbnRy
eSkKK3sKKyAgICBlbnRyeS5pc1ZhbGlkID0gZmFsc2U7CisgICAgaWYgKGVudHJ5LnRyYW5zbGF0
ZWRTb3VyY2UpIHsKKyAgICAgICAgZmFzdEZyZWUoZW50cnkudHJhbnNsYXRlZFNvdXJjZSk7Cisg
ICAgICAgIGVudHJ5LnRyYW5zbGF0ZWRTb3VyY2UgPSAwOworICAgIH0KKyAgICBpZiAoZW50cnku
bG9nKSB7CisgICAgICAgIGZhc3RGcmVlKGVudHJ5LmxvZyk7CisgICAgICAgIGVudHJ5LmxvZyA9
IDA7CisgICAgfQorCisgICAgU2hIYW5kbGUgY29tcGlsZXIgPSAwOworICAgIHN3aXRjaCAoZW50
cnkudHlwZSkgeworICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSOgorICAgICAgICBjb21waWxl
ciA9IG1fZnJhZ21lbnRDb21waWxlcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9WRVJU
RVhfU0hBREVSOgorICAgICAgICBjb21waWxlciA9IG1fdmVydGV4Q29tcGlsZXI7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBpZiAoIWNvbXBpbGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIVNoQ29tcGlsZShjb21waWxlciwgJmVudHJ5LnNvdXJjZSwgMSwgRVNoT3B0
T2JqZWN0Q29kZSkpIHsKKyAgICAgICAgaW50IGxvZ1NpemUgPSAwOworICAgICAgICBTaEdldElu
Zm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwgJmxvZ1NpemUpOworICAgICAgICBpZiAo
bG9nU2l6ZSA+IDEgJiYgdHJ5RmFzdE1hbGxvYyhsb2dTaXplICogc2l6ZW9mKGNoYXIpKS5nZXRW
YWx1ZShlbnRyeS5sb2cpKQorICAgICAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBlbnRy
eS5sb2cpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IGxlbmd0aCA9
IDA7CisgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZsZW5n
dGgpOworICAgIGlmIChsZW5ndGggPiAxKSB7CisgICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYyhs
ZW5ndGggKiBzaXplb2YoY2hhcikpLmdldFZhbHVlKGVudHJ5LnRyYW5zbGF0ZWRTb3VyY2UpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTaEdldE9iamVjdENvZGUoY29tcGls
ZXIsIGVudHJ5LnRyYW5zbGF0ZWRTb3VyY2UpOworICAgIH0KKyAgICBlbnRyeS5pc1ZhbGlkID0g
dHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgJKHJldmlzaW9uIDY4MjIw
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDEwIEBACiAKICNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQogCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAjaW5jbHVkZSAiV2ViR3Jh
cGhpY3NDb250ZXh0M0QuaCIKIAorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC0zMDAsOCAr
MzAyLDcgQEAgcHJpdmF0ZToKICAgICAvLyBuZWVkIHRvIGluIG9yZGVyIHRvIHZlcmlmeSB0aGF0
IGFsbCBlbmFibGVkIHZlcnRleCBhcnJheXMgaGF2ZQogICAgIC8vIGEgdmFsaWQgYnVmZmVyIGJv
dW5kIC0tIHRvIGF2b2lkIGNyYXNoZXMgb24gY2VydGFpbiBjYXJkcy4KICAgICB1bnNpZ25lZCBp
bnQgbV9ib3VuZEFycmF5QnVmZmVyOwotICAgIGNsYXNzIFZlcnRleEF0dHJpYlBvaW50ZXJTdGF0
ZSB7Ci0gICAgcHVibGljOgorICAgIHN0cnVjdCBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUgewog
ICAgICAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUoKTsKIAogICAgICAgICBib29sIGVuYWJs
ZWQ7CkBAIC0zMjMsNiArMzI0LDQ0IEBAIHByaXZhdGU6CiAgICAgTGlzdEhhc2hTZXQ8dW5zaWdu
ZWQgbG9uZz4gbV9zeW50aGV0aWNFcnJvcnM7CiAKICAgICBPd25QdHI8Z2Z4OjpHTENvbnRleHQ+
IG1fZ2xDb250ZXh0OworCisgICAgLy8gQU5HTEUgcmVsYXRlZC4KKyAgICBzdHJ1Y3QgU2hhZGVy
U291cmNlRW50cnkgeworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSgpCisgICAgICAgICAgICAg
ICAgOiB0eXBlKDApCisgICAgICAgICAgICAgICAgLCBzb3VyY2UoMCkKKyAgICAgICAgICAgICAg
ICAsIGxvZygwKQorICAgICAgICAgICAgICAgICwgdHJhbnNsYXRlZFNvdXJjZSgwKQorICAgICAg
ICAgICAgICAgICwgaXNWYWxpZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgflNoYWRlclNvdXJjZUVudHJ5KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNvdXJj
ZSkKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShzb3VyY2UpOworICAgICAgICAgICAgaWYgKGxv
ZykKKyAgICAgICAgICAgICAgICBmYXN0RnJlZShsb2cpOworICAgICAgICAgICAgaWYgKHRyYW5z
bGF0ZWRTb3VyY2UpCisgICAgICAgICAgICAgICAgZmFzdEZyZWUodHJhbnNsYXRlZFNvdXJjZSk7
CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBsb25nIHR5cGU7CisgICAgICAgIGNoYXIq
IHNvdXJjZTsKKyAgICAgICAgY2hhciogbG9nOworICAgICAgICBjaGFyKiB0cmFuc2xhdGVkU291
cmNlOworICAgICAgICBib29sIGlzVmFsaWQ7CisgICAgfTsKKworICAgIGJvb2wgYW5nbGVDcmVh
dGVDb21waWxlcnMoKTsKKyAgICB2b2lkIGFuZ2xlRGVzdHJveUNvbXBpbGVycygpOworICAgIGJv
b2wgYW5nbGVWYWxpZGF0ZVNoYWRlclNvdXJjZShTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkpOwor
CisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkdMSWQsIFNoYWRlclNvdXJjZUVudHJ5PiBTaGFkZXJT
b3VyY2VNYXA7CisgICAgU2hhZGVyU291cmNlTWFwIG1fc2hhZGVyU291cmNlTWFwOworCisgICAg
U2hIYW5kbGUgbV9mcmFnbWVudENvbXBpbGVyOworICAgIFNoSGFuZGxlIG1fdmVydGV4Q29tcGls
ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="commit-queue"
          id="58558"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68960</attachid>
            <date>2010-09-27 14:45:48 -0700</date>
            <delta_ts>2010-09-27 15:05:09 -0700</delta_ts>
            <desc>revised patch: style fix</desc>
            <filename>angle.patch</filename>
            <type>text/plain</type>
            <size>17824</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODI5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBIb29rIHVw
IEFOR0xFIHdpdGggY2hyb21pdW0gLS1pbi1wcm9jZXNzLXdlYmdsIHBvcnQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MzA5CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBNb3ZlIEFuZ2xlIHN0dWZmIGlu
c2lkZSBNQUMgb25seSBzZWN0aW9uLgorCiAyMDEwLTA5LTI0ICBMdWl6IEFnb3N0aW5pICA8bHVp
ei5hZ29zdGluaUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjgyMjApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTgzNCwxNCAr
ODM0LDE0IEBAIHB1YmxpYzoKIAogICAgIGludCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0OwogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgeyAKLSAgICAgICAgU3RyaW5nIHNvdXJjZTsgCi0g
ICAgICAgIFN0cmluZyBsb2c7IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB0eXBlZGVmIHN0cnVj
dCB7CisgICAgICAgIFN0cmluZyBzb3VyY2U7CisgICAgICAgIFN0cmluZyBsb2c7CiAgICAgICAg
IGJvb2wgaXNWYWxpZDsKICAgICB9IFNoYWRlclNvdXJjZUVudHJ5OwogICAgIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNlTWFwOwogCi0j
aWYgUExBVEZPUk0oTUFDKQogICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7CiAKICAg
ICBBdHRyaWJ1dGVzIG1fYXR0cnM7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY4Mjk0KQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMw
IEBACisyMDEwLTA5LTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSG9vayB1cCBBTkdMRSB3aXRo
IGNocm9taXVtIC0taW4tcHJvY2Vzcy13ZWJnbCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDMwOQorCisgICAgICAgICogV2ViS2l0Lmd5cDog
QWRkIGFuZ2xlIGRlcGVuZGVuY3kuCisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuY3BwOiBVc2luZyBhbmdsZSBmb3Igc2hhZGVyIHZhbGlkYXRpb24gYW5kIHRy
YW5zbGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6fldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmdldEludGVnZXJ2KTogVXNpbmcgZGVmaW5lZCBjb25zdCBp
bnN0ZWFkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpnZXRTaGFkZXJpdik6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViS2l0
OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpzaGFkZXJTb3VyY2UpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVTaGFkZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxl
dGVTaGFkZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjphbmdsZUNyZWF0ZUNvbXBpbGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmFuZ2xlRGVzdHJveUNvbXBpbGVycyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFuZ2xlVmFsaWRhdGVTaGFk
ZXJTb3VyY2UpOgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
Lmg6IEFkZCBuZWNlc3NhcnkgZGF0YSBhbmQgZnVuY3Rpb25zIGZvciBhbmdsZSBzdHVmZi4KKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6U2hhZGVyU291
cmNlRW50cnk6OlNoYWRlclNvdXJjZUVudHJ5KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6U2hhZGVyU291cmNlRW50cnk6On5TaGFkZXJTb3VyY2VF
bnRyeSk6CisKIDIwMTAtMDktMjQgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCBmaXggY2hyb21pdW0gY29tcGlsZSBhZnRlciByNjgyNzYgd2hp
Y2ggcmVuYW1lZApJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDY4MjIwKQorKysgV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICAg
ICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9hcHAvYXBwLmd5cDphcHBfYmFzZScs
ICMgRm9yIEdMQ29udGV4dAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Nr
aWEvc2tpYS5neXA6c2tpYScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
dGhpcmRfcGFydHkvbnBhcGkvbnBhcGkuZ3lwOm5wYXBpJywKKyAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvYnVpbGRfYW5nbGUuZ3lwOnRy
YW5zbGF0b3JfZ2xzbCcsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2V4cG9ydF9kZXBl
bmRlbnRfc2V0dGluZ3MnOiBbCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
c2tpYS9za2lhLmd5cDpza2lhJywKQEAgLTg0LDYgKzg1LDcgQEAKICAgICAgICAgICAgICdpbmNs
dWRlX2RpcnMnOiBbCiAgICAgICAgICAgICAgICAgJ3B1YmxpYycsCiAgICAgICAgICAgICAgICAg
J3NyYycsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkv
YW5nbGUvaW5jbHVkZScsCiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgJ2RlZmluZXMnOiBb
CiAgICAgICAgICAgICAgICAgJ1dFQktJVF9JTVBMRU1FTlRBVElPTj0xJywKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsLmNwcAkocmV2aXNpb24gNjgyMjApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMiArMzgs
MjEgQEAKICNpbmNsdWRlICJhcHAvZ2Z4L2dsL2dsX2NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2VudW0gR0xFUzJFbnVtVHlwZSB7CisgICAgSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQgPSAweDhCOUIsCisgICAgSU1QTEVNRU5UQVRJ
T05fQ09MT1JfUkVBRF9UWVBFID0gIDB4OEI5QSwKKyAgICBNQVhfVkVSVEVYX1VOSUZPUk1fVkVD
VE9SUyA9IDB4OERGQiwKKyAgICBNQVhfVkFSWUlOR19WRUNUT1JTID0gMHg4REZDLAorICAgIE1B
WF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgPSAweDhERkQKK307CisKIFdlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OlZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZTo6VmVydGV4QXR0cmli
UG9pbnRlclN0YXRlKCkKICAgICA6IGVuYWJsZWQoZmFsc2UpCiAgICAgLCBidWZmZXIoMCkKQEAg
LTY5LDYgKzc4LDggQEAgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2ViR3JhcAog
ICAgICwgbV9zY2FubGluZSgwKQogI2VuZGlmCiAgICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkK
KyAgICAsIG1fZnJhZ21lbnRDb21waWxlcigwKQorICAgICwgbV92ZXJ0ZXhDb21waWxlcigwKQog
ewogfQogCkBAIC05NCw2ICsxMDUsOCBAQCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
Ojp+V2ViR3JhCiAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX2Zibyk7CiAK
ICAgICAgICAgbV9nbENvbnRleHQtPkRlc3Ryb3koKTsKKworICAgICAgICBhbmdsZURlc3Ryb3lD
b21waWxlcnMoKTsKICAgICB9CiB9CiAKQEAgLTExNSw2ICsxMjgsMTIgQEAgYm9vbCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjppbgogICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwog
CiAgICAgZ2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7CisKKyAgICBpZiAo
IWFuZ2xlQ3JlYXRlQ29tcGlsZXJzKCkpIHsKKyAgICAgICAgYW5nbGVEZXN0cm95Q29tcGlsZXJz
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBtX2luaXRpYWxpemVkID0g
dHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY1Miw3ICs2NzEsMzMgQEAgREVMRUdBVEVf
VE9fR0xfMShjbGVhclN0ZW5jaWwsIENsZWFyU3RlbgogCiBERUxFR0FURV9UT19HTF80KGNvbG9y
TWFzaywgQ29sb3JNYXNrLCBib29sLCBib29sLCBib29sLCBib29sKQogCi1ERUxFR0FURV9UT19H
TF8xKGNvbXBpbGVTaGFkZXIsIENvbXBpbGVTaGFkZXIsIFdlYkdMSWQpCit2b2lkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNvbXBpbGVTaGFkZXIoV2ViR0xJZCBzaGFkZXIpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBpZiAocmVz
dWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIFBhc3NpbmcgZG93
biB0byBnbCBkcml2ZXIgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgZXJyb3I7IG9yIHRoZSBjYXNl
CisgICAgICAgIC8vIHdoZXJlIHRoZSBzaGFkZXIgZGVsZXRpb24gaXMgZGVsYXllZCB3aGVuIGl0
J3MgYXR0YWNoZWQgdG8gYSBwcm9ncmFtLgorICAgICAgICBnbENvbXBpbGVTaGFkZXIoc2hhZGVy
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkg
PSByZXN1bHQtPnNlY29uZDsKKworICAgIGlmICghYW5nbGVWYWxpZGF0ZVNoYWRlclNvdXJjZShl
bnRyeSkpCisgICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3Qg
bW92ZSBmb3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlCisKKyAgICBpbnQg
c2hhZGVyTGVuZ3RoID0gZW50cnkudHJhbnNsYXRlZFNvdXJjZSA/IHN0cmxlbihlbnRyeS50cmFu
c2xhdGVkU291cmNlKSA6IDA7CisgICAgZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCAxLCBjb25zdF9j
YXN0PGNvbnN0IGNoYXIqKj4oJmVudHJ5LnRyYW5zbGF0ZWRTb3VyY2UpLCAmc2hhZGVyTGVuZ3Ro
KTsKKyAgICBnbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICBp
bnQgY29tcGlsZVN0YXR1czsKKyAgICBnbEdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9T
VEFUVVMsICZjb21waWxlU3RhdHVzKTsKKyAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5lcmF0
ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTAorICAgIEFTU0VSVChjb21waWxlU3Rh
dHVzID09IEdMX1RSVUUpOworI2VuZGlmCit9CiAKIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBs
b25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCkBAIC04NjYsMjEg
KzkxMSwyMSBAQCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdlCiAgICAg
Ly8gVGhlcmVmb3JlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBi
ZSBkaXZpZGVkIGJ5IDQuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgc3dpdGNoIChw
bmFtZSkgewotICAgIGNhc2UgMHg4QjlCOiAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZP
Uk1BVAorICAgIGNhc2UgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CiAgICAgICAg
ICp2YWx1ZSA9IEdMX1JHQjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDhCOUE6IC8vIElN
UExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQorICAgIGNhc2UgSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9UWVBFOgogICAgICAgICAqdmFsdWUgPSBHTF9VTlNJR05FRF9CWVRFOwogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIDB4OERGRDogLy8gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9S
UworICAgIGNhc2UgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKICAgICAgICAgZ2xHZXRJ
bnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7CiAgICAg
ICAgICp2YWx1ZSAvPSA0OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIDB4OERGQjogLy8gTUFY
X1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMKKyAgICBjYXNlIE1BWF9WRVJURVhfVU5JRk9STV9WRUNU
T1JTOgogICAgICAgICBnbEdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05F
TlRTLCB2YWx1ZSk7CiAgICAgICAgICp2YWx1ZSAvPSA0OwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIDB4OERGQzogLy8gTUFYX1ZBUllJTkdfVkVDVE9SUworICAgIGNhc2UgTUFYX1ZBUllJTkdf
VkVDVE9SUzoKICAgICAgICAgZ2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19GTE9BVFMsIHZh
bHVlKTsKICAgICAgICAgKnZhbHVlIC89IDQ7CiAgICAgICAgIGJyZWFrOwpAQCAtOTExLDE0ICs5
NTYsNTcgQEAgV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcAogCiBERUxF
R0FURV9UT19HTF8zKGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBHZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXJpdkVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKIAotREVM
RUdBVEVfVE9fR0xfMyhnZXRTaGFkZXJpdiwgR2V0U2hhZGVyaXYsIFdlYkdMSWQsIHVuc2lnbmVk
IGxvbmcsIGludCopCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFNo
YWRlcml2KFdlYkdMSWQgc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJl
c3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICBTaGFkZXJTb3VyY2VF
bnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkgewor
ICAgICAgICBjYXNlIEdMX0NPTVBJTEVfU1RBVFVTOgorICAgICAgICAgICAgaWYgKCFlbnRyeS5p
c1ZhbGlkKSB7CisgICAgICAgICAgICAgICAgKnZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBH
TF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICAgICBpZiAoIWVudHJ5LmlzVmFsaWQpIHsKKyAg
ICAgICAgICAgICAgICAqdmFsdWUgPSBlbnRyeS5sb2cgPyBzdHJsZW4oZW50cnkubG9nKSA6IDA7
CisgICAgICAgICAgICAgICAgaWYgKCp2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgKCp2YWx1
ZSkrKzsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHTF9TSEFERVJfU09VUkNFX0xFTkdUSDoKKyAgICAgICAg
ICAgICp2YWx1ZSA9IGVudHJ5LnNvdXJjZSA/IHN0cmxlbihlbnRyeS5zb3VyY2UpIDogMDsKKyAg
ICAgICAgICAgIGlmICgqdmFsdWUpCisgICAgICAgICAgICAgICAgKCp2YWx1ZSkrKzsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdsR2V0U2hhZGVyaXYoc2hh
ZGVyLCBwbmFtZSwgdmFsdWUpOworfQogCiBXZWJTdHJpbmcgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTElkIHNoYWRlcikKIHsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGludCBsb2dMZW5ndGg7CisKKyAgICBTaGFkZXJTb3Vy
Y2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsK
KyAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7CisgICAgICAgIFNo
YWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBpZiAoIWVu
dHJ5LmlzVmFsaWQpIHsKKyAgICAgICAgICAgIGlmICghZW50cnkubG9nKQorICAgICAgICAgICAg
ICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKyAgICAgICAgICAgIFdlYlN0cmluZyByZXMgPSBXZWJT
dHJpbmc6OmZyb21VVEY4KGVudHJ5LmxvZywgc3RybGVuKGVudHJ5LmxvZykpOworICAgICAgICAg
ICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMaW50IGxvZ0xlbmd0aCA9
IDA7CiAgICAgZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxvZ0xl
bmd0aCk7Ci0gICAgaWYgKCFsb2dMZW5ndGgpCisgICAgaWYgKGxvZ0xlbmd0aCA8PSAxKQogICAg
ICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CiAgICAgR0xjaGFyKiBsb2cgPSAwOwogICAgIGlmICgh
dHJ5RmFzdE1hbGxvYyhsb2dMZW5ndGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkK
QEAgLTkzNCw5ICsxMDIyLDE5IEBAIFdlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1
bHRJbXAKIFdlYlN0cmluZyBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFk
ZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgR0xpbnQgbG9nTGVuZ3RoOworCisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCAhPSBt
X3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSYgZW50
cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgaWYgKCFlbnRyeS5zb3VyY2UpCisgICAgICAg
ICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisgICAgICAgIFdlYlN0cmluZyByZXMgPSBXZWJTdHJp
bmc6OmZyb21VVEY4KGVudHJ5LnNvdXJjZSwgc3RybGVuKGVudHJ5LnNvdXJjZSkpOworICAgICAg
ICByZXR1cm4gcmVzOworICAgIH0KKworICAgIEdMaW50IGxvZ0xlbmd0aCA9IDA7CiAgICAgZ2xH
ZXRTaGFkZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RILCAmbG9nTGVuZ3RoKTsK
LSAgICBpZiAoIWxvZ0xlbmd0aCkKKyAgICBpZiAobG9nTGVuZ3RoIDw9IDEpCiAgICAgICAgIHJl
dHVybiBXZWJTdHJpbmcoKTsKICAgICBHTGNoYXIqIGxvZyA9IDA7CiAgICAgaWYgKCF0cnlGYXN0
TWFsbG9jKGxvZ0xlbmd0aCAqIHNpemVvZihHTGNoYXIpKS5nZXRWYWx1ZShsb2cpKQpAQCAtMTA1
Niw4ICsxMTU0LDE5IEBAIERFTEVHQVRFX1RPX0dMXzQoc2Npc3NvciwgU2Npc3NvciwgbG9uZywK
IHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c2hhZGVyU291cmNlKFdlYkdM
SWQgc2hhZGVyLCBjb25zdCBjaGFyKiBzdHJpbmcpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgR0xpbnQgbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7Ci0gICAgZ2xTaGFkZXJTb3Vy
Y2Uoc2hhZGVyLCAxLCAmc3RyaW5nLCAmbGVuZ3RoKTsKKyAgICBHTGludCBsZW5ndGggPSBzdHJp
bmcgPyBzdHJsZW4oc3RyaW5nKSA6IDA7CisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciBy
ZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgaWYgKHJlc3VsdCAh
PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkgeworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSYg
ZW50cnkgPSByZXN1bHQtPnNlY29uZDsKKyAgICAgICAgaWYgKGVudHJ5LnNvdXJjZSkgeworICAg
ICAgICAgICAgZmFzdEZyZWUoZW50cnkuc291cmNlKTsKKyAgICAgICAgICAgIGVudHJ5LnNvdXJj
ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKChsZW5ndGggKyAx
KSAqIHNpemVvZihjaGFyKSkuZ2V0VmFsdWUoZW50cnkuc291cmNlKSkKKyAgICAgICAgICAgIHJl
dHVybjsgLy8gRklYTUU6IGdlbmVyYXRlIGFuIGVycm9yPworICAgICAgICBtZW1jcHkoZW50cnku
c291cmNlLCBzdHJpbmcsIChsZW5ndGggKyAxKSAqIHNpemVvZihjaGFyKSk7CisgICAgfSBlbHNl
CisgICAgICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnN0cmluZywgJmxlbmd0aCk7CiB9
CiAKIERFTEVHQVRFX1RPX0dMXzMoc3RlbmNpbEZ1bmMsIFN0ZW5jaWxGdW5jLCB1bnNpZ25lZCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQpAQCAtMTE5Niw3ICsxMzA1LDE4IEBAIHVuc2lnbmVk
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwKICAgICByZXR1cm4gbzsKIH0KIAotREVM
RUdBVEVfVE9fR0xfMVIoY3JlYXRlU2hhZGVyLCBDcmVhdGVTaGFkZXIsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkKTsKK3Vuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNy
ZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHNoYWRlclR5cGUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgQVNTRVJUKHNoYWRlclR5cGUgPT0gR0xfVkVSVEVYX1NIQURFUiB8fCBz
aGFkZXJUeXBlID09IEdMX0ZSQUdNRU5UX1NIQURFUik7CisgICAgdW5zaWduZWQgc2hhZGVyID0g
Z2xDcmVhdGVTaGFkZXIoc2hhZGVyVHlwZSk7CisgICAgaWYgKHNoYWRlcikgeworICAgICAgICBT
aGFkZXJTb3VyY2VFbnRyeSBlbnRyeTsKKyAgICAgICAgZW50cnkudHlwZSA9IHNoYWRlclR5cGU7
CisgICAgICAgIG1fc2hhZGVyU291cmNlTWFwLnNldChzaGFkZXIsIGVudHJ5KTsKKyAgICB9Cisg
ICAgcmV0dXJuIHNoYWRlcjsKK30KIAogdW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6Y3JlYXRlVGV4dHVyZSgpCiB7CkBAIC0xMjM0LDYgKzEzNTQsNyBAQCB2b2lkIFdl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlCiB7CiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgZ2xEZWxldGVTaGFkZXIoc2hhZGVyKTsKKyAgICBtX3NoYWRlclNvdXJjZU1h
cC5yZW1vdmUoc2hhZGVyKTsKIH0KIAogdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJ
bXBsOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmUpCkBAIC0xMjQyLDYgKzEzNjMsOTIg
QEAgdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZQogICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJnRleHR1cmUpOwogfQogCitib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmFuZ2xlQ3JlYXRlQ29tcGlsZXJzKCkKK3sKKyAgICBpZiAoIVNoSW5pdGlhbGl6
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBUQnVpbHRJblJlc291cmNlIHJlc291
cmNlOworICAgIHJlc291cmNlLk1heFZlcnRleEF0dHJpYnMgPSAwOworICAgIGdldEludGVnZXJ2
KEdMX01BWF9WRVJURVhfQVRUUklCUywgJnJlc291cmNlLk1heFZlcnRleEF0dHJpYnMpOworICAg
IHJlc291cmNlLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gMDsKKyAgICBnZXRJbnRlZ2VydihN
QVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywKKyAgICAgICAgICAgICAgICAmcmVzb3VyY2UuTWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIHJlc291cmNlLk1heFZhcnlpbmdWZWN0b3JzID0g
MDsKKyAgICBnZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLAorICAgICAgICAgICAgICAg
ICZyZXNvdXJjZS5NYXhWYXJ5aW5nVmVjdG9ycyk7CisgICAgcmVzb3VyY2UuTWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMgPSAwOworICAgIGdldEludGVnZXJ2KEdMX01BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUywgJnJlc291cmNlLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAg
ICByZXNvdXJjZS5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBnZXRJbnRl
Z2VydihHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJnJlc291cmNlLk1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIHJlc291cmNlLk1heFRleHR1cmVJbWFnZVVu
aXRzID0gMDsKKyAgICBnZXRJbnRlZ2VydihHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJnJl
c291cmNlLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICByZXNvdXJjZS5NYXhGcmFnbWVudFVu
aWZvcm1WZWN0b3JzID0gMDsKKyAgICBnZXRJbnRlZ2VydihNQVhfRlJBR01FTlRfVU5JRk9STV9W
RUNUT1JTLAorICAgICAgICAgICAgICAgICZyZXNvdXJjZS5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKTsKKyAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KKyAgICByZXNvdXJj
ZS5NYXhEcmF3QnVmZmVycyA9IDE7CisKKyAgICBtX2ZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0
cnVjdENvbXBpbGVyKEVTaExhbmdGcmFnbWVudCwgRVNoU3BlY1dlYkdMLCAmcmVzb3VyY2UpOwor
ICAgIG1fdmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdWZXJ0ZXgs
IEVTaFNwZWNXZWJHTCwgJnJlc291cmNlKTsKKyAgICByZXR1cm4gKG1fZnJhZ21lbnRDb21waWxl
ciAmJiBtX3ZlcnRleENvbXBpbGVyKTsKK30KKwordm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjphbmdsZURlc3Ryb3lDb21waWxlcnMoKQoreworICAgIGlmIChtX2ZyYWdtZW50
Q29tcGlsZXIpIHsKKyAgICAgICAgU2hEZXN0cnVjdChtX2ZyYWdtZW50Q29tcGlsZXIpOworICAg
ICAgICBtX2ZyYWdtZW50Q29tcGlsZXIgPSAwOworICAgIH0KKyAgICBpZiAobV92ZXJ0ZXhDb21w
aWxlcikgeworICAgICAgICBTaERlc3RydWN0KG1fdmVydGV4Q29tcGlsZXIpOworICAgICAgICBt
X3ZlcnRleENvbXBpbGVyID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6YW5nbGVWYWxpZGF0ZVNoYWRlclNvdXJjZShTaGFkZXJTb3VyY2VFbnRy
eSYgZW50cnkpCit7CisgICAgZW50cnkuaXNWYWxpZCA9IGZhbHNlOworICAgIGlmIChlbnRyeS50
cmFuc2xhdGVkU291cmNlKSB7CisgICAgICAgIGZhc3RGcmVlKGVudHJ5LnRyYW5zbGF0ZWRTb3Vy
Y2UpOworICAgICAgICBlbnRyeS50cmFuc2xhdGVkU291cmNlID0gMDsKKyAgICB9CisgICAgaWYg
KGVudHJ5LmxvZykgeworICAgICAgICBmYXN0RnJlZShlbnRyeS5sb2cpOworICAgICAgICBlbnRy
eS5sb2cgPSAwOworICAgIH0KKworICAgIFNoSGFuZGxlIGNvbXBpbGVyID0gMDsKKyAgICBzd2l0
Y2ggKGVudHJ5LnR5cGUpIHsKKyAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAg
Y29tcGlsZXIgPSBtX2ZyYWdtZW50Q29tcGlsZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R0xfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgY29tcGlsZXIgPSBtX3ZlcnRleENvbXBpbGVyOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFjb21waWxlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFTaENvbXBpbGUoY29tcGlsZXIsICZlbnRyeS5zb3VyY2UsIDEs
IEVTaE9wdE9iamVjdENvZGUpKSB7CisgICAgICAgIGludCBsb2dTaXplID0gMDsKKyAgICAgICAg
U2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9JTkZPX0xPR19MRU5HVEgsICZsb2dTaXplKTsKKyAgICAg
ICAgaWYgKGxvZ1NpemUgPiAxICYmIHRyeUZhc3RNYWxsb2MobG9nU2l6ZSAqIHNpemVvZihjaGFy
KSkuZ2V0VmFsdWUoZW50cnkubG9nKSkKKyAgICAgICAgICAgIFNoR2V0SW5mb0xvZyhjb21waWxl
ciwgZW50cnkubG9nKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBs
ZW5ndGggPSAwOworICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVOR1RI
LCAmbGVuZ3RoKTsKKyAgICBpZiAobGVuZ3RoID4gMSkgeworICAgICAgICBpZiAoIXRyeUZhc3RN
YWxsb2MobGVuZ3RoICogc2l6ZW9mKGNoYXIpKS5nZXRWYWx1ZShlbnRyeS50cmFuc2xhdGVkU291
cmNlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU2hHZXRPYmplY3RDb2Rl
KGNvbXBpbGVyLCBlbnRyeS50cmFuc2xhdGVkU291cmNlKTsKKyAgICB9CisgICAgZW50cnkuaXNW
YWxpZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCShyZXZpc2lv
biA2ODIyMCkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMywxMCBAQAogCiAjaWYgRU5BQkxF
KDNEX0NBTlZBUykKIAorI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUg
IldlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2lu
Y2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAt
MzAwLDggKzMwMiw3IEBAIHByaXZhdGU6CiAgICAgLy8gbmVlZCB0byBpbiBvcmRlciB0byB2ZXJp
ZnkgdGhhdCBhbGwgZW5hYmxlZCB2ZXJ0ZXggYXJyYXlzIGhhdmUKICAgICAvLyBhIHZhbGlkIGJ1
ZmZlciBib3VuZCAtLSB0byBhdm9pZCBjcmFzaGVzIG9uIGNlcnRhaW4gY2FyZHMuCiAgICAgdW5z
aWduZWQgaW50IG1fYm91bmRBcnJheUJ1ZmZlcjsKLSAgICBjbGFzcyBWZXJ0ZXhBdHRyaWJQb2lu
dGVyU3RhdGUgewotICAgIHB1YmxpYzoKKyAgICBzdHJ1Y3QgVmVydGV4QXR0cmliUG9pbnRlclN0
YXRlIHsKICAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCk7CiAKICAgICAgICAgYm9v
bCBlbmFibGVkOwpAQCAtMzIzLDYgKzMyNCw0NCBAQCBwcml2YXRlOgogICAgIExpc3RIYXNoU2V0
PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJyb3JzOwogCiAgICAgT3duUHRyPGdmeDo6R0xD
b250ZXh0PiBtX2dsQ29udGV4dDsKKworICAgIC8vIEFOR0xFIHJlbGF0ZWQuCisgICAgc3RydWN0
IFNoYWRlclNvdXJjZUVudHJ5IHsKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkoKQorICAgICAg
ICAgICAgICAgIDogdHlwZSgwKQorICAgICAgICAgICAgICAgICwgc291cmNlKDApCisgICAgICAg
ICAgICAgICAgLCBsb2coMCkKKyAgICAgICAgICAgICAgICAsIHRyYW5zbGF0ZWRTb3VyY2UoMCkK
KyAgICAgICAgICAgICAgICAsIGlzVmFsaWQoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIH5TaGFkZXJTb3VyY2VFbnRyeSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChzb3VyY2UpCisgICAgICAgICAgICAgICAgZmFzdEZyZWUoc291cmNlKTsKKyAgICAgICAgICAg
IGlmIChsb2cpCisgICAgICAgICAgICAgICAgZmFzdEZyZWUobG9nKTsKKyAgICAgICAgICAgIGlm
ICh0cmFuc2xhdGVkU291cmNlKQorICAgICAgICAgICAgICAgIGZhc3RGcmVlKHRyYW5zbGF0ZWRT
b3VyY2UpOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOworICAgICAg
ICBjaGFyKiBzb3VyY2U7CisgICAgICAgIGNoYXIqIGxvZzsKKyAgICAgICAgY2hhciogdHJhbnNs
YXRlZFNvdXJjZTsKKyAgICAgICAgYm9vbCBpc1ZhbGlkOworICAgIH07CisKKyAgICBib29sIGFu
Z2xlQ3JlYXRlQ29tcGlsZXJzKCk7CisgICAgdm9pZCBhbmdsZURlc3Ryb3lDb21waWxlcnMoKTsK
KyAgICBib29sIGFuZ2xlVmFsaWRhdGVTaGFkZXJTb3VyY2UoU2hhZGVyU291cmNlRW50cnkmIGVu
dHJ5KTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJHTElkLCBTaGFkZXJTb3VyY2VFbnRyeT4g
U2hhZGVyU291cmNlTWFwOworICAgIFNoYWRlclNvdXJjZU1hcCBtX3NoYWRlclNvdXJjZU1hcDsK
KworICAgIFNoSGFuZGxlIG1fZnJhZ21lbnRDb21waWxlcjsKKyAgICBTaEhhbmRsZSBtX3ZlcnRl
eENvbXBpbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="58563"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="58564"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
      

    </bug>

</bugzilla>