<?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>51421</bug_id>
          
          <creation_ts>2010-12-21 14:40:49 -0800</creation_ts>
          <short_desc>Initialize to 0 for undefined values in CopyTexImage2D</short_desc>
          <delta_ts>2010-12-28 13:35:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>enne</cc>
    
    <cc>gman</cc>
    
    <cc>kbr</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>325206</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-21 14:40:49 -0800</bug_when>
    <thetext>For example, if texture is larger than the currently bound fbo, then the out-of-bounds regions are undefined.  Need to initialize them to 0 to avoid potential information leaking.

Note that if the underlying GL implementation is already resource-safe (like chromium command buffer port), then no need to do it twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326254</commentid>
    <comment_count>1</comment_count>
      <attachid>77365</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-23 13:18:46 -0800</bug_when>
    <thetext>Created attachment 77365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326312</commentid>
    <comment_count>2</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-23 15:14:28 -0800</bug_when>
    <thetext>Test is in sync with khronos.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>326606</commentid>
    <comment_count>3</comment_count>
      <attachid>77365</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-12-24 06:59:56 -0800</bug_when>
    <thetext>Comment on attachment 77365
Patch

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

This change would benefit from someone more familiar with the ara looking it over but here are a few minor nits I noticed when I looked briefly.

&gt; WebCore/html/canvas/WebGLFramebuffer.cpp:113
&gt; +void WebGLFramebuffer::setAttachment(unsigned long attachment, WebGLRenderbuffer* rbo)

Don&apos;t use abbreviations &quot;rbo&quot;.

&gt; WebCore/html/canvas/WebGLFramebuffer.cpp:208
&gt; +    } else if (m_colorAttachment-&gt;isTexture()) {

No braces for this single line if statement.

&gt; WebCore/html/canvas/WebGLFramebuffer.h:45
&gt; +    void setAttachment(unsigned long attachment, unsigned long texTarget, WebGLTexture* texture, int level);

In function declarations, don&apos;t include variables that don&apos;t ad information. (Remove &quot;texture&quot;.)

&gt; WebCore/html/canvas/WebGLFramebuffer.h:46
&gt; +    void setAttachment(unsigned long attachment, WebGLRenderbuffer* rbo);

Don&apos;t include &quot;rbo&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327184</commentid>
    <comment_count>4</comment_count>
      <attachid>77365</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-27 21:15:14 -0800</bug_when>
    <thetext>Comment on attachment 77365
Patch

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

This mostly looks good. Aside from Dave&apos;s nits, a couple of requests / questions.

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:81
&gt; +        if (start &lt; 0) {
&gt; +            range += start;
&gt; +            start = 0;
&gt; +        }

Is this really the right behavior? Shouldn&apos;t the range be reduced by the amount that start is less than zero, regardless of whether end is within sourceRange?

&gt; WebCore/platform/graphics/GraphicsContext3D.h:800
&gt; +    IntSize getInternalBufferSize();

Please rename this to &quot;getInternalFrameBufferSize&quot;. Then the comment (which as written doesn&apos;t add much) is really unnecessary.

&gt; LayoutTests/fast/canvas/webgl/uninitialized-test.html:128
&gt; +gl.finish();

How about another test which passes down a negative x and y?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327251</commentid>
    <comment_count>5</comment_count>
      <attachid>77365</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 09:42:41 -0800</bug_when>
    <thetext>Comment on attachment 77365
Patch

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

&gt;&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:81
&gt;&gt; +        }
&gt; 
&gt; Is this really the right behavior? Shouldn&apos;t the range be reduced by the amount that start is less than zero, regardless of whether end is within sourceRange?

I think the code did exactly what you said.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327253</commentid>
    <comment_count>6</comment_count>
      <attachid>77365</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-28 10:01:29 -0800</bug_when>
    <thetext>Comment on attachment 77365
Patch

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

Would you be willing to upload a revised patch addressing the other issues?

&gt;&gt;&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:81
&gt;&gt;&gt; +        }
&gt;&gt; 
&gt;&gt; Is this really the right behavior? Shouldn&apos;t the range be reduced by the amount that start is less than zero, regardless of whether end is within sourceRange?
&gt; 
&gt; I think the code did exactly what you said.

Ah, I see now; sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327256</commentid>
    <comment_count>7</comment_count>
      <attachid>77558</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 10:17:53 -0800</bug_when>
    <thetext>Created attachment 77558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327257</commentid>
    <comment_count>8</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 10:20:14 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=77558) [details]
&gt; Patch

This patch addressed the comments from levin and kbr.  Will sync the added test section (negative x/y) to khronos once it&apos;s reviewed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327272</commentid>
    <comment_count>9</comment_count>
      <attachid>77558</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-28 11:11:32 -0800</bug_when>
    <thetext>Comment on attachment 77558
Patch

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

&gt; LayoutTests/fast/canvas/webgl/uninitialized-test.html:134
&gt; +var x = -16;
&gt; +var y = -16;

Would it be better to choose different values than 16 here? Will the fact that these are the same magnitude as fboWidth/fboHeight potentially hide bugs?

&gt; LayoutTests/fast/canvas/webgl/uninitialized-test.html:136
&gt; +checkNonZeroPixels(tex, width, height, -x, -y, fboWidth, fboHeight, 255, 0, 0, 255);

Are the x and y coordinates being passed to checkNonZeroPixels correct here? Should they be (0, 0)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327284</commentid>
    <comment_count>10</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 11:29:16 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 77558 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=77558&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/uninitialized-test.html:134
&gt; &gt; +var x = -16;
&gt; &gt; +var y = -16;
&gt; 
&gt; Would it be better to choose different values than 16 here? Will the fact that these are the same magnitude as fboWidth/fboHeight potentially hide bugs?

Will revise.

&gt; 
&gt; &gt; LayoutTests/fast/canvas/webgl/uninitialized-test.html:136
&gt; &gt; +checkNonZeroPixels(tex, width, height, -x, -y, fboWidth, fboHeight, 255, 0, 0, 255);
&gt; 
&gt; Are the x and y coordinates being passed to checkNonZeroPixels correct here? Should they be (0, 0)?

I think -x and -y are the correct value here.  Because starting point is (x, y), so the offset is (-x, -y) in the pixel buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327286</commentid>
    <comment_count>11</comment_count>
      <attachid>77565</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 11:33:08 -0800</bug_when>
    <thetext>Created attachment 77565
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327293</commentid>
    <comment_count>12</comment_count>
      <attachid>77565</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-12-28 11:41:18 -0800</bug_when>
    <thetext>Comment on attachment 77565
Patch

Thanks for bearing with my questions. Looks very good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>327326</commentid>
    <comment_count>13</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-12-28 13:35:52 -0800</bug_when>
    <thetext>Committed r74720: &lt;http://trac.webkit.org/changeset/74720&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77365</attachid>
            <date>2010-12-23 13:18:46 -0800</date>
            <delta_ts>2010-12-28 10:17:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51421-20101223131845.patch</filename>
            <type>text/plain</type>
            <size>30433</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDU3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTItMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFs
aXplIHRvIDAgZm9yIHVuZGVmaW5lZCB2YWx1ZXMgaW4gQ29weVRleEltYWdlMkQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDIxCisKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDogVHJhY2sgd2lkdGgvaGVpZ2h0L2lu
dGVybmFsRm9ybWF0IG9mIGNvbG9yIGJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJh
bWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFt
ZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZm
ZXJGb3JtYXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6IEluaXRpYWxp
emUgdW5kZWZpbmVkIHBpeGVscyB0byAwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVi
dWZmZXJIZWlnaHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHA6IFRyYWNrIHdpZHRo
L2hlaWdodC9pbnRlcm5hbEZvcm1hdCBvZiBhIHRleHR1cmUgYnkgdGFyZ2V0L2xldmVsLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMVGV4dHVyZTo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6
bWFwVGFyZ2V0VG9JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldExl
dmVsSW5mbyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmlzVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkIGdldEludGVybmFsQnVmZmVyU2l6ZSgp
IGZ1bmN0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0SW50ZXJuYWxCdWZmZXJTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbnRlcm5hbEJ1ZmZlclNpemUpOgorCiAyMDEwLTEyLTIzICBKdXN0aW4gU2NodWgg
IDxqc2NodWhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVs
LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lv
biA3NDUwNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDI4ICs3Niw1OCBAQCBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZm
ZXI+IFdlYkdMRnJhbWViCiBXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVmZmVyKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogV2ViR0xPYmplY3QoY3R4KQogICAgICwgbV9o
YXNFdmVyQmVlbkJvdW5kKGZhbHNlKQorICAgICwgbV90ZXhUYXJnZXQoMCkKKyAgICAsIG1fdGV4
TGV2ZWwoLTEpCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKLXZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0
QXR0YWNobWVudCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIFdlYkdMT2JqZWN0KiBhdHRhY2hl
ZE9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCh1bnNpZ25lZCBs
b25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRl
eHR1cmUsIGludCBsZXZlbCkKIHsKICAgICBpZiAoIW9iamVjdCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmICFhdHRhY2hlZE9iamVjdC0+b2JqZWN0KCkpCi0g
ICAgICAgIGF0dGFjaGVkT2JqZWN0ID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+
b2JqZWN0KCkpCisgICAgICAgIHRleHR1cmUgPSAwOwogICAgIHN3aXRjaCAoYXR0YWNobWVudCkg
ewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOgotICAgICAg
ICBtX2NvbG9yQXR0YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0OworICAgICAgICBtX2NvbG9yQXR0
YWNobWVudCA9IHRleHR1cmU7CisgICAgICAgIGlmICh0ZXh0dXJlKSB7CisgICAgICAgICAgICBt
X3RleFRhcmdldCA9IHRleFRhcmdldDsKKyAgICAgICAgICAgIG1fdGV4TGV2ZWwgPSBsZXZlbDsK
KyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2RlcHRoQXR0YWNobWVudCA9IGF0dGFjaGVkT2Jq
ZWN0OworICAgICAgICBtX2RlcHRoQXR0YWNobWVudCA9IHRleHR1cmU7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICAg
ICAgbV9zdGVuY2lsQXR0YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0OworICAgICAgICBtX3N0ZW5j
aWxBdHRhY2htZW50ID0gdGV4dHVyZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2RlcHRoU3Rl
bmNpbEF0dGFjaG1lbnQgPSBhdHRhY2hlZE9iamVjdDsKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxB
dHRhY2htZW50ID0gdGV4dHVyZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2ht
ZW50KHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgV2ViR0xSZW5kZXJidWZmZXIqIHJibykKK3sK
KyAgICBpZiAoIW9iamVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHJibyAmJiAhcmJv
LT5vYmplY3QoKSkKKyAgICAgICAgcmJvID0gMDsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICAgICAg
bV9jb2xvckF0dGFjaG1lbnQgPSByYm87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fZGVwdGhBdHRhY2htZW50
ID0gcmJvOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQgPSByYm87CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gcmJvOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm47CkBAIC0xMzgsMjEgKzE2OCw0
NyBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnJlbW92ZUF0dGFjaG1lbnQoCiAgICAgICAgIHJl
dHVybjsKIH0KIAoraW50IFdlYkdMRnJhbWVidWZmZXI6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW9iamVjdCgpIHx8ICFpc0NvbG9yQXR0YWNoZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKG1fY29sb3JBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpKQorICAgICAgICBy
ZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihtX2NvbG9yQXR0YWNo
bWVudC5nZXQoKSkpLT5nZXRXaWR0aCgpOworICAgIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNU
ZXh0dXJlKCkpCisgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUq
PihtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkpLT5nZXRXaWR0aChtX3RleFRhcmdldCwgbV90ZXhM
ZXZlbCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2lu
dCBXZWJHTEZyYW1lYnVmZmVyOjpnZXRIZWlnaHQoKSBjb25zdAoreworICAgIGlmICghb2JqZWN0
KCkgfHwgIWlzQ29sb3JBdHRhY2hlZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9j
b2xvckF0dGFjaG1lbnQtPmlzUmVuZGVyYnVmZmVyKCkpCisgICAgICAgIHJldHVybiAocmVpbnRl
cnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fY29sb3JBdHRhY2htZW50LmdldCgpKSkt
PmdldEhlaWdodCgpOworICAgIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkpCisg
ICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0
YWNobWVudC5nZXQoKSkpLT5nZXRIZWlnaHQobV90ZXhUYXJnZXQsIG1fdGV4TGV2ZWwpOworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiB1bnNpZ25lZCBsb25n
IFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9yQnVmZmVyRm9ybWF0KCkgY29uc3QKIHsKLSAgICBp
ZiAob2JqZWN0KCkgJiYgbV9jb2xvckF0dGFjaG1lbnQgJiYgbV9jb2xvckF0dGFjaG1lbnQtPm9i
amVjdCgpKSB7Ci0gICAgICAgIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNSZW5kZXJidWZmZXIo
KSkgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmb3JtYXQgPSAocmVpbnRlcnByZXRfY2Fz
dDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fY29sb3JBdHRhY2htZW50LmdldCgpKSktPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I1X0ExOgotICAgICAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTsKLSAgICAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToK
LSAgICAgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkp
Ci0gICAgICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4obV9j
b2xvckF0dGFjaG1lbnQuZ2V0KCkpKS0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7CisgICAgaWYgKCFv
YmplY3QoKSB8fCAhaXNDb2xvckF0dGFjaGVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlm
IChtX2NvbG9yQXR0YWNobWVudC0+aXNSZW5kZXJidWZmZXIoKSkgeworICAgICAgICB1bnNpZ25l
ZCBsb25nIGZvcm1hdCA9IChyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4obV9j
b2xvckF0dGFjaG1lbnQuZ2V0KCkpKS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgc3dp
dGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgICAgICAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjU2NToKKyAgICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkp
IHsKKyAgICAgICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG1fY29s
b3JBdHRhY2htZW50LmdldCgpKSktPmdldEludGVybmFsRm9ybWF0KG1fdGV4VGFyZ2V0LCBtX3Rl
eExldmVsKTsKICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lv
biA3NDUwNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMywxOCArMzMsMjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBXZWJHTFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIFdlYkdMVGV4dHVyZTsKKwogY2xhc3MgV2Vi
R0xGcmFtZWJ1ZmZlciA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+V2ViR0xGcmFtZWJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KIAogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KTsKIAotICAgIHZvaWQgc2V0QXR0YWNobWVudCh1bnNpZ25lZCBsb25nLCBXZWJHTE9iamVjdCop
OworICAgIHZvaWQgc2V0QXR0YWNobWVudCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2ln
bmVkIGxvbmcgdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIGludCBsZXZlbCk7Cisg
ICAgdm9pZCBzZXRBdHRhY2htZW50KHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgV2ViR0xSZW5k
ZXJidWZmZXIqIHJibyk7CiAgICAgLy8gSWYgYW4gb2JqZWN0IGlzIGF0dGFjaGVkIHRvIHRoZSBm
cmFtZWJ1ZmZlciwgcmVtb3ZlIGl0LgogICAgIHZvaWQgcmVtb3ZlQXR0YWNobWVudChXZWJHTE9i
amVjdCopOwogICAgIFdlYkdMT2JqZWN0KiBnZXRBdHRhY2htZW50KHVuc2lnbmVkIGxvbmcpIGNv
bnN0OwogCiAgICAgdW5zaWduZWQgbG9uZyBnZXRDb2xvckJ1ZmZlckZvcm1hdCgpIGNvbnN0Owor
ICAgIGludCBnZXRXaWR0aCgpIGNvbnN0OworICAgIGludCBnZXRIZWlnaHQoKSBjb25zdDsKIAog
ICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIGRyYXdBcnJheSwgZHJh
d0VsZW1lbnRzLCBjbGVhciwKICAgICAvLyByZWFkUGl4ZWxzLCBjb3B5VGV4SW1hZ2UyRCwgY29w
eVRleFN1YkltYWdlMkQgaWYgdGhpcyBmcmFtZWJ1ZmZlciBpcwpAQCAtODMsNiArODksOSBAQCBw
cml2YXRlOgogICAgIFJlZlB0cjxXZWJHTE9iamVjdD4gbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50
OwogCiAgICAgYm9vbCBtX2hhc0V2ZXJCZWVuQm91bmQ7CisKKyAgICB1bnNpZ25lZCBsb25nIG1f
dGV4VGFyZ2V0OworICAgIGludCBtX3RleExldmVsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkocmV2aXNpb24gNzQ1MDUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDEwICs2NSwyOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNvbnN0IGRvdWJsZSBzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0
cyA9IDEuMDsKIAotc3RhdGljIGlubGluZSBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhX
ZWJHTE9iamVjdCogb2JqZWN0KQotewotICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVj
dCgpIDogMDsKLX0KK25hbWVzcGFjZSB7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9y
WmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdCA/
IG9iamVjdC0+b2JqZWN0KCkgOiAwOworICAgIH0KKworICAgIHZvaWQgY2xpcChsb25nIHN0YXJ0
LCBsb25nIHJhbmdlLCBsb25nIHNvdXJjZVJhbmdlLCBsb25nKiBjbGlwcGVkU3RhcnQsIGxvbmcq
IGNsaXBwZWRSYW5nZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYgY2xp
cHBlZFJhbmdlKTsKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICAgICAgcmFuZ2Ug
Kz0gc3RhcnQ7CisgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbG9u
ZyBlbmQgPSBzdGFydCArIHJhbmdlOworICAgICAgICBpZiAoZW5kID4gc291cmNlUmFuZ2UpCisg
ICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKKyAgICAgICAgKmNsaXBwZWRT
dGFydCA9IHN0YXJ0OworICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7CisgICAgfQorCit9
IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAogY2xhc3MgV2ViR0xTdGF0ZVJlc3RvcmVyIHsKIHB1
YmxpYzoKQEAgLTY0OSw3ICs2NjcsMjIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNv
cHlUZXhJbWFnZQogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAoaXNS
ZXNvdXJjZVNhZmUoKSkKKyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgbG9uZyBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwg
Y2xpcHBlZEhlaWdodDsKKyAgICAgICAgY2xpcCh4LCB3aWR0aCwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
cldpZHRoKCksICZjbGlwcGVkWCwgJmNsaXBwZWRXaWR0aCk7CisgICAgICAgIGNsaXAoeSwgaGVp
Z2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWSwgJmNsaXBwZWRIZWln
aHQpOworICAgICAgICBpZiAoY2xpcHBlZFggIT0geCB8fCBjbGlwcGVkWSAhPSB5IHx8IGNsaXBw
ZWRXaWR0aCAhPSBzdGF0aWNfY2FzdDxsb25nPih3aWR0aCkgfHwgY2xpcHBlZEhlaWdodCAhPSBz
dGF0aWNfY2FzdDxsb25nPihoZWlnaHQpKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleElt
YWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwor
ICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApIHsK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNs
aXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfQogICAgIC8vIEZJWE1FOiBpZiB0
aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQg
YmUgZXhlY3V0ZWQuCiAgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwpAQCAtNjYyLDcgKzY5NSw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW0KICAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcodGFyZ2V0LCB0cnVlKTsKICAgICBp
ZiAoIXRleCkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENv
bG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZCh0ZXgtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSwg
Z2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CisgICAgaWYgKCFpc1RleEludGVy
bmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKHRleC0+Z2V0SW50ZXJuYWxGb3Jt
YXQodGFyZ2V0LCBsZXZlbCksIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgewog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMzE4LDcgKzEz
NTEsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUpLCBsZXZlbCk7
Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnQoYXR0YWNobWVudCwgdGV4
dHVyZSk7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnQoYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIApAQCAtMjM4MiwxNCArMjQxNSwxNSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyCiAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVy
U3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAg
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7
CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKKyAgICAg
ICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgogICAgICAgICBpZiAoaXNEZXB0
aFN0ZW5jaWxTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZm
ZXJTdG9yYWdlKHRhcmdldCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwg
aGVpZ2h0KTsKICAgICAgICAgICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXpl
KHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5zZXRJc1ZhbGlkKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOwogICAgICAgICBtX3JlbmRl
cmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKICAgICAg
ICAgYnJlYWs7CkBAIC0zNTcyLDYgKzM2MDYsMjAgQEAgdW5zaWduZWQgbG9uZyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldAogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwogfQog
CitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQor
eworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgo
KTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEJ1ZmZlclNpemUoKS53aWR0aCgp
OworfQorCitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdl
dEhlaWdodCgpOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsQnVmZmVyU2l6ZSgp
LmhlaWdodCgpOworfQorCiBXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVUZXh0dXJlQmluZGluZyh1bnNpZ25lZCBsb25nIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVt
c0ZvckN1YmVNYXApCiB7CiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSAwOwpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA3NDUwNSkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUwNSw2ICs1MDUsMTIgQEAgcHVibGljOgogICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgY29sb3IgYnVmZmVyIGZvcm1hdC4KICAg
ICB1bnNpZ25lZCBsb25nIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpOwogCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyB3aWR0aC4K
KyAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCk7CisKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGhlaWdodC4KKyAgICBpbnQgZ2V0
Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpOworCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNo
ZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgogICAgIC8vIEdlbmVy
YXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVy
ZSBib3VuZCBpcwogICAgIC8vIG51bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBi
b3VuZCB0byB0aGUgdGFyZ2V0LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNw
cAkocmV2aXNpb24gNzQ1MDUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OSwxMiArMTY5LDI4IEBAIHZvaWQgV2ViR0xUZXh0dXJl
OjpnZW5lcmF0ZU1pcG1hcExldmVsSW4KICAgICBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IGZh
bHNlOwogfQogCi11bnNpZ25lZCBsb25nIFdlYkdMVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQo
aW50IGxldmVsKSBjb25zdAordW5zaWduZWQgbG9uZyBXZWJHTFRleHR1cmU6OmdldEludGVybmFs
Rm9ybWF0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgaWYg
KCFvYmplY3QoKSB8fCAhbV90YXJnZXQpCisgICAgY29uc3QgTGV2ZWxJbmZvKiBpbmZvID0gZ2V0
TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGluZm8tPmludGVybmFsRm9ybWF0OworfQorCitpbnQgV2ViR0xUZXh0
dXJlOjpnZXRXaWR0aCh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdAorewor
ICAgIGNvbnN0IExldmVsSW5mbyogaW5mbyA9IGdldExldmVsSW5mbyh0YXJnZXQsIGxldmVsKTsK
KyAgICBpZiAoIWluZm8pCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBpbmZvLT53aWR0
aDsKK30KKworaW50IFdlYkdMVGV4dHVyZTo6Z2V0SGVpZ2h0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgY29uc3QgTGV2ZWxJbmZvKiBpbmZvID0gZ2V0TGV2
ZWxJbmZvKHRhcmdldCwgbGV2ZWwpOworICAgIGlmICghaW5mbykKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgLy8gV2UgYXNzdW1lIGxldmVsIGhhcyBiZWVuIHZhbGlkYXRlZCBhbHJlYWR5LgotICAg
IHJldHVybiBtX2luZm9bMF1bbGV2ZWxdLmludGVybmFsRm9ybWF0OworICAgIHJldHVybiBpbmZv
LT5oZWlnaHQ7CiB9CiAKIGJvb2wgV2ViR0xUZXh0dXJlOjppc05QT1QodW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkKQEAgLTIwNSw3ICsyMjEsNyBAQCB2b2lkIFdlYkdMVGV4dHVyZTo6
ZGVsZXRlT2JqZWN0SW1wbChQbGF0CiAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
LT5kZWxldGVUZXh0dXJlKG9iamVjdCk7CiB9CiAKLWludCBXZWJHTFRleHR1cmU6Om1hcFRhcmdl
dFRvSW5kZXgodW5zaWduZWQgbG9uZyB0YXJnZXQpCitpbnQgV2ViR0xUZXh0dXJlOjptYXBUYXJn
ZXRUb0luZGV4KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KSBjb25zdAogewogICAgIGlmIChtX3Rhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgewogICAgICAgICBpZiAodGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKQpAQCAtMzE0LDYgKzMzMCwxOCBAQCB2
b2lkIFdlYkdMVGV4dHVyZTo6dXBkYXRlKCkKICAgICAgICAgbV9uZWVkVG9Vc2VCbGFja1RleHR1
cmUgPSB0cnVlOwogfQogCitjb25zdCBXZWJHTFRleHR1cmU6OkxldmVsSW5mbyogV2ViR0xUZXh0
dXJlOjpnZXRMZXZlbEluZm8odW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QK
K3sKKyAgICBpZiAoIW9iamVjdCgpIHx8ICFtX3RhcmdldCkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaW50IHRhcmdldEluZGV4ID0gbWFwVGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIGlmICh0
YXJnZXRJbmRleCA8IDAgfHwgdGFyZ2V0SW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihtX2luZm8u
c2l6ZSgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+
PSBzdGF0aWNfY2FzdDxpbnQ+KG1faW5mb1t0YXJnZXRJbmRleF0uc2l6ZSgpKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuICYobV9pbmZvW3RhcmdldEluZGV4XVtsZXZlbF0pOworfQor
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFRleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVGV4dHVyZS5oCShyZXZpc2lvbiA3NDUwNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDkgQEAgcHVibGljOgogICAg
IC8vIEdlbmVyYXRlIGFsbCBsZXZlbCBpbmZvcm1hdGlvbi4KICAgICB2b2lkIGdlbmVyYXRlTWlw
bWFwTGV2ZWxJbmZvKCk7CiAKLSAgICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsRm9ybWF0KGlu
dCBsZXZlbCkgY29uc3Q7CisgICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbEZvcm1hdCh1bnNp
Z25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdDsKKyAgICBpbnQgZ2V0V2lkdGgodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7CisgICAgaW50IGdldEhlaWdodCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdDsKIAogICAgIC8vIFdoZXRoZXIg
d2lkdGgvaGVpZ2h0IGlzIE5vdFBvd2VyT2ZUd28uCiAgICAgc3RhdGljIGJvb2wgaXNOUE9UKHVu
c2lnbmVkLCB1bnNpZ25lZCk7CkBAIC03MSwxOSArNzMsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoUGxhdGZvcm0zRE9iamVjdCk7CiAKIHByaXZhdGU6
Ci0gICAgdmlydHVhbCBib29sIGlzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQot
ICAgIHZvaWQgdXBkYXRlKCk7Ci0KLSAgICBpbnQgbWFwVGFyZ2V0VG9JbmRleCh1bnNpZ25lZCBs
b25nKTsKLQotICAgIHVuc2lnbmVkIGxvbmcgbV90YXJnZXQ7Ci0KLSAgICBpbnQgbV9taW5GaWx0
ZXI7Ci0gICAgaW50IG1fbWFnRmlsdGVyOwotICAgIGludCBtX3dyYXBTOwotICAgIGludCBtX3dy
YXBUOwotCiAgICAgY2xhc3MgTGV2ZWxJbmZvIHsKICAgICBwdWJsaWM6CiAgICAgICAgIExldmVs
SW5mbygpCkBAIC0xMTEsNiArMTAwLDIxIEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGxv
bmcgdHlwZTsKICAgICB9OwogCisgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgdXBkYXRlKCk7CisKKyAgICBpbnQgbWFwVGFyZ2V0
VG9JbmRleCh1bnNpZ25lZCBsb25nKSBjb25zdDsKKworICAgIGNvbnN0IExldmVsSW5mbyogZ2V0
TGV2ZWxJbmZvKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0OworCisgICAg
dW5zaWduZWQgbG9uZyBtX3RhcmdldDsKKworICAgIGludCBtX21pbkZpbHRlcjsKKyAgICBpbnQg
bV9tYWdGaWx0ZXI7CisgICAgaW50IG1fd3JhcFM7CisgICAgaW50IG1fd3JhcFQ7CisKICAgICBW
ZWN0b3I8VmVjdG9yPExldmVsSW5mbz4gPiBtX2luZm87CiAKICAgICBib29sIG1faXNOUE9UOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAko
cmV2aXNpb24gNzQ1MDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTc5Niw2ICs3OTYsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gZGV0ZXJtaW5lIHRoaXMuCiAgICAgRXh0ZW5zaW9uczNEKiBnZXRFeHRlbnNpb25zKCk7CiAK
KyAgICAvLyBHZXQgdGhlIGFjdHVhbCBpbnRlcm5hbCBidWZmZXIgc2l6ZS4KKyAgICBJbnRTaXpl
IGdldEludGVybmFsQnVmZmVyU2l6ZSgpOworCiAgIHByaXZhdGU6CiAgICAgR3JhcGhpY3NDb250
ZXh0M0QoQXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAJ
KHJldmlzaW9uIDc0NTA1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDEx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKICAgICA6OmdsRmx1
c2goKTsKIH0KIAorSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxCdWZmZXJT
aXplKCkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQogewog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShyZXZpc2lvbiA3NDUwNSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU5OCw2ICs1OTgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVzaGFwZShpbnQgd2lkdAogICAgIGdsRmx1c2goKTsKIH0KIAorSW50U2l6ZSBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxCdWZmZXJTaXplKCkKK3sKKyAgICByZXR1cm4gSW50U2l6
ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCiB7CiAgICAgbV9p
bnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2
aXNpb24gNzQ1NzYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTItMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0
aWFsaXplIHRvIDAgZm9yIHVuZGVmaW5lZCB2YWx1ZXMgaW4gQ29weVRleEltYWdlMkQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDIxCisKKyAgICAg
ICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6IEltcGxlbWVudCBnZXRJbnRl
cm5hbEJ1ZmZlclNpemUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmdldEludGVybmFsQnVmZmVyU2l6ZSk6CisgICAgICAgICogc3JjL0dyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWwuaDoKKwogMjAxMC0xMi0yMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIEZpeCBidWlsZC4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkocmV2aXNpb24gNzQ1MDUpCisrKyBX
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTAsNiArMjUwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cmVzaGFwZSgKICNlbmRpZiAvLyBQTEFURk9STShDRykKIH0KIAorSW50U2l6ZSBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlcm5hbEJ1ZmZlclNpemUoKQoreworICAgIHJldHVy
biBJbnRTaXplKG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSk7Cit9CisKIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXNDb250ZXh0TG9zdCgpCiB7CiAgICAgcmV0dXJu
IG1faW1wbC0+aXNDb250ZXh0TG9zdCgpOwpAQCAtODk2LDYgKzkwMSw3IEBAIFBsYXRmb3JtTGF5
ZXIqIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm8KIERFTEVHQVRFX1RPX0lOVEVSTkFMKG1ha2VD
b250ZXh0Q3VycmVudCkKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzFSKHNpemVJbkJ5dGVzLCBpbnQs
IGludCkKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzIocmVzaGFwZSwgaW50LCBpbnQpCitERUxFR0FU
RV9UT19JTlRFUk5BTF9SKGdldEludGVybmFsQnVmZmVyU2l6ZSwgSW50U2l6ZSkKIAogREVMRUdB
VEVfVE9fSU5URVJOQUxfMShhY3RpdmVUZXh0dXJlLCB1bnNpZ25lZCBsb25nKQogREVMRUdBVEVf
VE9fSU5URVJOQUxfMihhdHRhY2hTaGFkZXIsIFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RP
YmplY3QpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWwuaAkocmV2aXNpb24gNzQ1MDUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBw
dWJsaWM6CiAgICAgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKIAogICAgIHZvaWQgcmVzaGFw
ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworICAgIEludFNpemUgZ2V0SW50ZXJuYWxCdWZmZXJT
aXplKCk7CiAKICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqKTsKICAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25z
dDsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0NTc2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMTItMjMgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbml0aWFsaXplIHRvIDAgZm9yIHVuZGVmaW5lZCB2YWx1ZXMgaW4gQ29weVRleElt
YWdlMkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUx
NDIxCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhw
ZWN0ZWQudHh0OiBBZGQgdGVzdCBjYXNlcyBmb3IgY29weVRleEltYWdlMkQuCisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWw6IERpdHRvLgorCiAyMDEw
LTEyLTIzICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkIENocm9taXVtIGV4cGVjdGF0aW9ucyB1cGRhdGUuIFN1cHByZXNzIGNyYXNoZXMgc2Vl
biBvbgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10
ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3NDUwNSkKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMywyMiBAQCBUZXN0cyB0byBjaGVjayB1c2Vy
IGNvZGUgY2Fubm90IGFjY2VzcyB1CiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIFBBU1Mg
Q29udGV4dCBjcmVhdGVkLgotUmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHRleHR1cmUgc2hvdWxk
IHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMgc2V0IHRvIDAuCisKK1JlYWRpbmcgYW4gdW5pbml0aWFs
aXplZCB0ZXh0dXJlICh0ZXhJbWFnZTJEKSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBz
ZXQgdG8gMC4KK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
aXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgQWxsIGRhdGEgaW5pdGlhbGl6ZWQKK1BB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorCitSZWFkaW5nIGFu
IHVuaW5pdGlhbGl6ZWQgcG9ydGlvbiBvZiBhIHRleHR1cmUgKGNvcHlUZXhJbWFnZTJEKSBzaG91
bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4KK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01Q
TEVURQorUEFTUyBBbGwgZGF0YSBpbml0aWFsaXplZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCisKK1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9u
IG9mIGEgdGV4dHVyZSAoY29weVRleEltYWdlMkQgZnJvbSBXZWJHTCBpbnRlcm5hbCBmYm8pIHNo
b3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLgorUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGdsLkZSQU1FQlVGRkVSX0NPTVBMRVRFCiBQQVNTIEFsbCBk
YXRhIGluaXRpYWxpemVkCiBQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiAKIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXpl
ZC10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJKHJldmlzaW9uIDc0NTA1KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDUyICsyMSw1NyBAQCBpZiAoIWdsKQogZWxzZQogICB0ZXN0UGFzc2VkKCJDb250ZXh0
IGNyZWF0ZWQuIik7CiAKLWRlYnVnKCJSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdGV4dHVyZSBz
aG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4iKTsKLQotdmFyIHdpZHRoID0g
NTEyOwotdmFyIGhlaWdodCA9IDUxMjsKLXZhciBicHAgPSA0OwotdmFyIGV4cGVjdGVkRGF0YUxl
bmd0aCA9IHdpZHRoKmhlaWdodCpicHA7Ci0KLXZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7
Ci1nbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOwotZ2wudGV4SW1hZ2UyRChnbC5U
RVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJ
R05FRF9CWVRFLCBudWxsKTsKLQotLy8gdGhpcyBjYW4gYmUgcXVpdGUgdW5kZXRlcm1pbmlzdGlj
IHNvIHRvIGltcHJvdmUgb2RkcyBvZiBzZWVpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdyaXRlIGJp
dHMKLS8vIGludG8gdGV4IHRoZW4gZGVsZXRlIHRleHR1cmUgdGhlbiByZS1jcmVhdGUgb25lIHdp
dGggc2FtZSBjaGFyYWN0ZXJpc3RpY3MgKGRyaXZlciB3aWxsIGxpa2VseSByZXVzZSBtZW0pCi0v
LyB3aXRoIHRoaXMgdHJpY2sgb24gcjU5MDQ2IFdlYktpdC9PU1ggSSBnZXQgRkFJTCAxMDAlIG9m
IHRoZSB0aW1lIGluc3RlYWQgb2YgfjE1JSBvZiB0aGUgdGltZS4KLQotdmFyIGJhZERhdGEgPSBu
ZXcgVWludDhBcnJheShleHBlY3RlZERhdGFMZW5ndGgpOwotZm9yICh2YXIgaSA9IDA7IGkgPCBi
YWREYXRhLmxlbmd0aDsgKytpKQotICAgIGJhZERhdGFbaV0gPSBpICUgMjU1OworZnVuY3Rpb24g
c2V0dXBUZXh0dXJlKHRleFdpZHRoLCB0ZXhIZWlnaHQpIHsKKyAgICB2YXIgdGV4dHVyZSA9IGds
LmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0
dXJlKTsKKyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIHRleFdp
ZHRoLCB0ZXhIZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpOworCisg
ICAgLy8gdGhpcyBjYW4gYmUgcXVpdGUgdW5kZXRlcm1pbmlzdGljIHNvIHRvIGltcHJvdmUgb2Rk
cyBvZiBzZWVpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdyaXRlIGJpdHMKKyAgICAvLyBpbnRvIHRl
eCB0aGVuIGRlbGV0ZSB0ZXh0dXJlIHRoZW4gcmUtY3JlYXRlIG9uZSB3aXRoIHNhbWUgY2hhcmFj
dGVyaXN0aWNzIChkcml2ZXIgd2lsbCBsaWtlbHkgcmV1c2UgbWVtKQorICAgIC8vIHdpdGggdGhp
cyB0cmljayBvbiByNTkwNDYgV2ViS2l0L09TWCBJIGdldCBGQUlMIDEwMCUgb2YgdGhlIHRpbWUg
aW5zdGVhZCBvZiB+MTUlIG9mIHRoZSB0aW1lLgorCisgICAgdmFyIGJhZERhdGEgPSBuZXcgVWlu
dDhBcnJheSh0ZXhXaWR0aCAqIHRleEhlaWdodCAqIDQpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYmFkRGF0YS5sZW5ndGg7ICsraSkKKyAgICAgICAgYmFkRGF0YVtpXSA9IGkgJSAyNTU7CisK
KyAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHRleFdpZHRoLCB0
ZXhIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJhZERhdGEpOworICAgIGdsLmZp
bmlzaCgpOyAvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gdXBsb2FkZWQKKworICAgIGdsLmRlbGV0
ZVRleHR1cmUodGV4dHVyZSk7CisgICAgZ2wuZmluaXNoKCk7IC8vIG1ha2Ugc3VyZSBpdCBoYXMg
YmVlbiBkZWxldGVkCisKKyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAg
ICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICByZXR1cm4gdGV4
dHVyZTsKK30KIAotZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBiYWREYXRhKTsKLWdsLmZpbmlz
aCgpOyAvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gdXBsb2FkZWQKK2Z1bmN0aW9uIGNoZWNrTm9u
WmVyb1BpeGVscyh0ZXh0dXJlLCB0ZXhXaWR0aCwgdGV4SGVpZ2h0LCBza2lwWCwgc2tpcFksIHNr
aXBXaWR0aCwgc2tpcEhlaWdodCwgc2tpcFIsIHNraXBHLCBza2lwQiwgc2tpcEEpIHsKKyAgICBn
bC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCBudWxsKTsKKyAgICB2YXIgZmIgPSBnbC5jcmVh
dGVGcmFtZWJ1ZmZlcigpOworICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwg
ZmIpOworICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xP
Ul9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSwgMCk7CisgICAgc2hvdWxkQmUo
ImdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIiwgImdsLkZSQU1FQlVG
RkVSX0NPTVBMRVRFIik7CiAKLWdsLmRlbGV0ZVRleHR1cmUodGV4KTsKLWdsLmZpbmlzaCgpOyAv
LyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gZGVsZXRlZAorICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4
QXJyYXkodGV4V2lkdGggKiB0ZXhIZWlnaHQgKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAs
IHRleFdpZHRoLCB0ZXhIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGRhdGEpOwog
Ci12YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOwotZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVS
RV8yRCwgdGV4KTsKLWdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgd2lk
dGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7Ci0KLXZhciBm
YiA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci1nbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVC
VUZGRVIsIGZiKTsKLWdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5D
T0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGV4LCAwKTsKLQotZGF0YSA9IG5ldyBV
aW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7Ci1nbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRo
LCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGRhdGEpOwotCi1pZiAoZGF0YS5s
ZW5ndGggIT0gZXhwZWN0ZWREYXRhTGVuZ3RoKSB7Ci0gICAgdGVzdEZhaWxlZCgiZXhwZWN0ZWQg
ZGF0YSBsZW5ndGggIiArIGV4cGVjdGVkRGF0YUxlbmd0aCArICIgYnV0IGdvdCAiICsgZGF0YS5s
ZW5ndGggKyAiIGluc3RlYWQuIik7Ci19IGVsc2UgewogICAgIHZhciBrID0gMDsKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGRhdGFbaV0g
IT0gMCkgewotICAgICAgICAgICAgaysrOworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgdGV4SGVp
Z2h0OyArK3kpIHsKKyAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB0ZXhXaWR0aDsgKyt4KSB7
CisgICAgICAgICAgICB2YXIgaW5kZXggPSAoeSAqIHRleFdpZHRoICsgeCkgKiA0OworICAgICAg
ICAgICAgaWYgKHggPj0gc2tpcFggJiYgeCA8IHNraXBYICsgc2tpcFdpZHRoICYmIHkgPj0gc2tp
cFkgJiYgeSA8IHNraXBZICsgc2tpcEhlaWdodCkgeworICAgICAgICAgICAgICAgIGlmIChkYXRh
W2luZGV4XSAhPSBza2lwUiB8fCBkYXRhW2luZGV4ICsgMV0gIT0gc2tpcEcgfHwgZGF0YVtpbmRl
eCArIDJdICE9IHNraXBCIHx8IGRhdGFbaW5kZXggKyAzXSAhPSBza2lwQSkgeworICAgICAgICAg
ICAgICAgICAgICB0ZXN0RmFpbGVkKCJub24temVybyBwaXhlbCB2YWx1ZXMgYXJlIHdyb25nIik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2luZGV4ICsgaV0gIT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGsrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9Ci0KICAgICBpZiAoaykgewogICAgICAgICB0ZXN0RmFpbGVkKCJG
b3VuZCAiICsgayArICIgbm9uLXplcm8gYnl0ZXMiKTsKICAgICB9IGVsc2UgewpAQCAtNzQsNiAr
NzksNTMgQEAgaWYgKGRhdGEubGVuZ3RoICE9IGV4cGVjdGVkRGF0YUxlbmd0aCkgewogICAgIH0K
IH0KIAordmFyIHdpZHRoID0gNTEyOwordmFyIGhlaWdodCA9IDUxMjsKKworZGVidWcoIiIpOwor
ZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCB0ZXh0dXJlICh0ZXhJbWFnZTJEKSBzaG91
bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNldHVw
VGV4dHVyZSh3aWR0aCwgaGVpZ2h0KTsKK2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwg
Z2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVs
bCk7CitjaGVja05vblplcm9QaXhlbHModGV4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwKTsKK2dsLmRlbGV0ZVRleHR1cmUodGV4KTsKK2dsLmZpbmlzaCgpOworZ2xFcnJv
clNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJSZWFkaW5n
IGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlvbiBvZiBhIHRleHR1cmUgKGNvcHlUZXhJbWFnZTJEKSBz
aG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNl
dHVwVGV4dHVyZSh3aWR0aCwgaGVpZ2h0KTsKK3ZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZl
cigpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYm8pOwordmFyIHJibyA9
IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJC
VUZGRVIsIHJibyk7Cit2YXIgZmJvV2lkdGggPSAxNjsKK3ZhciBmYm9IZWlnaHQgPSAxNjsKK2ds
LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5SR0JBNCwgZmJvV2lkdGgs
IGZib0hlaWdodCk7CitnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwg
Z2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJFTkRFUkJVRkZFUiwgcmJvKTsKK3Nob3VsZEJlKCJn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZF
Ul9DT01QTEVURSIpOworZ2wuY2xlYXJDb2xvcigxLjAsIDAuMCwgMC4wLCAxLjApOworZ2wuY2xl
YXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9S
KTsKK2dsLmNvcHlUZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIDAsIDAsIHdp
ZHRoLCBoZWlnaHQsIDApOworY2hlY2tOb25aZXJvUGl4ZWxzKHRleCwgd2lkdGgsIGhlaWdodCwg
MCwgMCwgZmJvV2lkdGgsIGZib0hlaWdodCwgMjU1LCAwLCAwLCAyNTUpOworZ2wuZGVsZXRlVGV4
dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9S
KTsKKworZGVidWcoIiIpOworZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9u
IG9mIGEgdGV4dHVyZSAoY29weVRleEltYWdlMkQgZnJvbSBXZWJHTCBpbnRlcm5hbCBmYm8pIHNo
b3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLiIpOworCit2YXIgdGV4ID0gc2V0
dXBUZXh0dXJlKHdpZHRoLCBoZWlnaHQpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVG
RkVSLCBudWxsKTsKK2dsLmNsZWFyQ29sb3IoMC4wLCAxLjAsIDAuMCwgMC4wKTsKK2dsLmNsZWFy
KGdsLkNPTE9SX0JVRkZFUl9CSVQpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUik7
CitnbC5jb3B5VGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LCAwKTsKK2NoZWNrTm9uWmVyb1BpeGVscyh0ZXgsIHdpZHRoLCBoZWlnaHQsIDAs
IDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCwgMCwgMjU1LCAwLCAwKTsKK2dsLmRlbGV0
ZVRleHR1cmUodGV4KTsKK2dsLmZpbmlzaCgpOwogZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19F
UlJPUik7CiAKIC8vVE9ETzogdW5pbml0aWFsaXplZCB2ZXJ0ZXggYXJyYXkgYnVmZmVyCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77558</attachid>
            <date>2010-12-28 10:17:53 -0800</date>
            <delta_ts>2010-12-28 11:33:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51421-20101228101751.patch</filename>
            <type>text/plain</type>
            <size>31918</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDU3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTItMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFs
aXplIHRvIDAgZm9yIHVuZGVmaW5lZCB2YWx1ZXMgaW4gQ29weVRleEltYWdlMkQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDIxCisKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDogVHJhY2sgd2lkdGgvaGVpZ2h0L2lu
dGVybmFsRm9ybWF0IG9mIGNvbG9yIGJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJh
bWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFt
ZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZm
ZXJGb3JtYXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6IEluaXRpYWxp
emUgdW5kZWZpbmVkIHBpeGVscyB0byAwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVi
dWZmZXJIZWlnaHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHA6IFRyYWNrIHdpZHRo
L2hlaWdodC9pbnRlcm5hbEZvcm1hdCBvZiBhIHRleHR1cmUgYnkgdGFyZ2V0L2xldmVsLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMVGV4dHVyZTo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6
bWFwVGFyZ2V0VG9JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldExl
dmVsSW5mbyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmlzVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkIGdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkgZnVuY3Rpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUpOgorCiAyMDEwLTEyLTIz
ICBKdXN0aW4gU2NodWggIDxqc2NodWhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuY3BwCShyZXZpc2lvbiA3NDUwNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDI4ICs3Niw1OCBAQCBQYXNzUmVmUHRy
PFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJhbWViCiBXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZy
YW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogV2ViR0xPYmplY3Qo
Y3R4KQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQorICAgICwgbV90ZXhUYXJnZXQo
MCkKKyAgICAsIG1fdGV4TGV2ZWwoLTEpCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3Jh
cGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKLXZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIFdlYkdM
T2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNo
bWVudCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4VGFyZ2V0LCBX
ZWJHTFRleHR1cmUqIHRleHR1cmUsIGludCBsZXZlbCkKIHsKICAgICBpZiAoIW9iamVjdCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmICFhdHRhY2hlZE9iamVj
dC0+b2JqZWN0KCkpCi0gICAgICAgIGF0dGFjaGVkT2JqZWN0ID0gMDsKKyAgICBpZiAodGV4dHVy
ZSAmJiAhdGV4dHVyZS0+b2JqZWN0KCkpCisgICAgICAgIHRleHR1cmUgPSAwOwogICAgIHN3aXRj
aCAoYXR0YWNobWVudCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFD
SE1FTlQwOgotICAgICAgICBtX2NvbG9yQXR0YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0OworICAg
ICAgICBtX2NvbG9yQXR0YWNobWVudCA9IHRleHR1cmU7CisgICAgICAgIGlmICh0ZXh0dXJlKSB7
CisgICAgICAgICAgICBtX3RleFRhcmdldCA9IHRleFRhcmdldDsKKyAgICAgICAgICAgIG1fdGV4
TGV2ZWwgPSBsZXZlbDsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2RlcHRoQXR0YWNobWVu
dCA9IGF0dGFjaGVkT2JqZWN0OworICAgICAgICBtX2RlcHRoQXR0YWNobWVudCA9IHRleHR1cmU7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRU
QUNITUVOVDoKLSAgICAgICAgbV9zdGVuY2lsQXR0YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0Owor
ICAgICAgICBtX3N0ZW5jaWxBdHRhY2htZW50ID0gdGV4dHVyZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAg
ICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBhdHRhY2hlZE9iamVjdDsKKyAgICAgICAg
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gdGV4dHVyZTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBXZWJHTEZyYW1lYnVm
ZmVyOjpzZXRBdHRhY2htZW50KHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgV2ViR0xSZW5kZXJi
dWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIW9iamVjdCgpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiAhcmVuZGVyYnVmZmVyLT5vYmplY3QoKSkKKyAg
ICAgICAgcmVuZGVyYnVmZmVyID0gMDsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICAgICAgbV9jb2xv
ckF0dGFjaG1lbnQgPSByZW5kZXJidWZmZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fZGVwdGhBdHRhY2ht
ZW50ID0gcmVuZGVyYnVmZmVyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQg
PSByZW5kZXJidWZmZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRh
Y2htZW50ID0gcmVuZGVyYnVmZmVyOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm47CkBAIC0xMzgsMjEgKzE2OCw0OCBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6
OnJlbW92ZUF0dGFjaG1lbnQoCiAgICAgICAgIHJldHVybjsKIH0KIAoraW50IFdlYkdMRnJhbWVi
dWZmZXI6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAoIW9iamVjdCgpIHx8ICFpc0NvbG9y
QXR0YWNoZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1fY29sb3JBdHRhY2htZW50
LT5pc1JlbmRlcmJ1ZmZlcigpKQorICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkpLT5nZXRXaWR0aCgpOwor
ICAgIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkpCisgICAgICAgIHJldHVybiAo
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkp
LT5nZXRXaWR0aChtX3RleFRhcmdldCwgbV90ZXhMZXZlbCk7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBXZWJHTEZyYW1lYnVmZmVyOjpnZXRIZWln
aHQoKSBjb25zdAoreworICAgIGlmICghb2JqZWN0KCkgfHwgIWlzQ29sb3JBdHRhY2hlZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzUmVuZGVyYnVm
ZmVyKCkpCisgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZl
cio+KG1fY29sb3JBdHRhY2htZW50LmdldCgpKSktPmdldEhlaWdodCgpOworICAgIGlmIChtX2Nv
bG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkpCisgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRf
Y2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkpLT5nZXRIZWlnaHQo
bV90ZXhUYXJnZXQsIG1fdGV4TGV2ZWwpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCiB1bnNpZ25lZCBsb25nIFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9y
QnVmZmVyRm9ybWF0KCkgY29uc3QKIHsKLSAgICBpZiAob2JqZWN0KCkgJiYgbV9jb2xvckF0dGFj
aG1lbnQgJiYgbV9jb2xvckF0dGFjaG1lbnQtPm9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChtX2Nv
bG9yQXR0YWNobWVudC0+aXNSZW5kZXJidWZmZXIoKSkgewotICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBmb3JtYXQgPSAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fY29s
b3JBdHRhY2htZW50LmdldCgpKSktPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTQ6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgotICAgICAg
ICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLSAgICAgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKLSAgICAgICAgICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICht
X2NvbG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gKHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4obV9jb2xvckF0dGFjaG1lbnQuZ2V0KCkpKS0+Z2V0
SW50ZXJuYWxGb3JtYXQoMCk7CisgICAgaWYgKCFvYmplY3QoKSB8fCAhaXNDb2xvckF0dGFjaGVk
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNSZW5k
ZXJidWZmZXIoKSkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGZvcm1hdCA9IChyZWludGVycHJl
dF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4obV9jb2xvckF0dGFjaG1lbnQuZ2V0KCkpKS0+Z2V0
SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjVfQTE6CisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKKyAgICAgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworICAgICAgICB9CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KKyAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzVGV4dHVyZSgpKQorICAgICAg
ICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4obV9jb2xvckF0dGFjaG1l
bnQuZ2V0KCkpKS0+Z2V0SW50ZXJuYWxGb3JtYXQobV90ZXhUYXJnZXQsIG1fdGV4TGV2ZWwpOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gNzQ1MDUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTggKzMzLDI0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgV2ViR0xSZW5kZXJi
dWZmZXI7CitjbGFzcyBXZWJHTFRleHR1cmU7CisKIGNsYXNzIFdlYkdMRnJhbWVidWZmZXIgOiBw
dWJsaWMgV2ViR0xPYmplY3QgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMRnJhbWVidWZm
ZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEZy
YW1lYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICB2b2lkIHNl
dEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZywgV2ViR0xPYmplY3QqKTsKKyAgICB2b2lkIHNldEF0
dGFjaG1lbnQodW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleFRhcmdl
dCwgV2ViR0xUZXh0dXJlKiwgaW50IGxldmVsKTsKKyAgICB2b2lkIHNldEF0dGFjaG1lbnQodW5z
aWduZWQgbG9uZyBhdHRhY2htZW50LCBXZWJHTFJlbmRlcmJ1ZmZlciopOwogICAgIC8vIElmIGFu
IG9iamVjdCBpcyBhdHRhY2hlZCB0byB0aGUgZnJhbWVidWZmZXIsIHJlbW92ZSBpdC4KICAgICB2
b2lkIHJlbW92ZUF0dGFjaG1lbnQoV2ViR0xPYmplY3QqKTsKICAgICBXZWJHTE9iamVjdCogZ2V0
QXR0YWNobWVudCh1bnNpZ25lZCBsb25nKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0
Q29sb3JCdWZmZXJGb3JtYXQoKSBjb25zdDsKKyAgICBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAg
ICBpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUg
Y2FsbGVkIGJlZm9yZSBkcmF3QXJyYXksIGRyYXdFbGVtZW50cywgY2xlYXIsCiAgICAgLy8gcmVh
ZFBpeGVscywgY29weVRleEltYWdlMkQsIGNvcHlUZXhTdWJJbWFnZTJEIGlmIHRoaXMgZnJhbWVi
dWZmZXIgaXMKQEAgLTgzLDYgKzg5LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViR0xPYmpl
Y3Q+IG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudDsKIAogICAgIGJvb2wgbV9oYXNFdmVyQmVlbkJv
dW5kOworCisgICAgdW5zaWduZWQgbG9uZyBtX3RleFRhcmdldDsKKyAgICBpbnQgbV90ZXhMZXZl
bDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDc0NTA1KQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSwxMCArNjUsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBkb3VibGUg
c2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMgPSAxLjA7CiAKLXN0YXRpYyBpbmxpbmUgUGxh
dGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT5vYmplY3QoKSA6IDA7Ci19CituYW1lc3BhY2UgeworCisg
ICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDogMDsKKyAgICB9
CisKKyAgICB2b2lkIGNsaXAobG9uZyBzdGFydCwgbG9uZyByYW5nZSwgbG9uZyBzb3VyY2VSYW5n
ZSwgbG9uZyogY2xpcHBlZFN0YXJ0LCBsb25nKiBjbGlwcGVkUmFuZ2UpCisgICAgeworICAgICAg
ICBBU1NFUlQoY2xpcHBlZFN0YXJ0ICYmIGNsaXBwZWRSYW5nZSk7CisgICAgICAgIGlmIChzdGFy
dCA8IDApIHsKKyAgICAgICAgICAgIHJhbmdlICs9IHN0YXJ0OworICAgICAgICAgICAgc3RhcnQg
PSAwOworICAgICAgICB9CisgICAgICAgIGxvbmcgZW5kID0gc3RhcnQgKyByYW5nZTsKKyAgICAg
ICAgaWYgKGVuZCA+IHNvdXJjZVJhbmdlKQorICAgICAgICAgICAgcmFuZ2UgLT0gZW5kIC0gc291
cmNlUmFuZ2U7CisgICAgICAgICpjbGlwcGVkU3RhcnQgPSBzdGFydDsKKyAgICAgICAgKmNsaXBw
ZWRSYW5nZSA9IHJhbmdlOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCiAKIGNs
YXNzIFdlYkdMU3RhdGVSZXN0b3JlciB7CiBwdWJsaWM6CkBAIC02NDksNyArNjY3LDIyIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29udGV4dC0+Y29w
eVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlcik7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgZWxzZSB7CisgICAgICAgIGxvbmcgY2xpcHBl
ZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGNsaXAo
eCwgd2lkdGgsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCAmY2xpcHBlZFgsICZjbGlwcGVk
V2lkdGgpOworICAgICAgICBjbGlwKHksIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdo
dCgpLCAmY2xpcHBlZFksICZjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgaWYgKGNsaXBwZWRYICE9
IHggfHwgY2xpcHBlZFkgIT0geSB8fCBjbGlwcGVkV2lkdGggIT0gc3RhdGljX2Nhc3Q8bG9uZz4o
d2lkdGgpIHx8IGNsaXBwZWRIZWlnaHQgIT0gc3RhdGljX2Nhc3Q8bG9uZz4oaGVpZ2h0KSkgewor
ICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGgg
PiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5j
b3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0g
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRY
LCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIp
OworICAgIH0KICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0
ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+c2V0TGV2
ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKQEAgLTY2Miw3ICs2OTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleFN1YkltCiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKHRhcmdldCwgdHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQodGV4
LT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1h
dCgpKSkgeworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRp
b25WYWxpZCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpLCBnZXRCb3VuZEZy
YW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMTMxOCw3ICsxMzUxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZyYW1lYnVmZmVyVAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIG9i
amVjdE9yWmVybyh0ZXh0dXJlKSwgbGV2ZWwpOwotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5z
ZXRBdHRhY2htZW50KGF0dGFjaG1lbnQsIHRleHR1cmUpOworICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5zZXRBdHRhY2htZW50KGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTIzODIsMTQg
KzI0MTUsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlcgogICAg
ICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPnNldElzVmFsaWQodHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTDoKICAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKICAgICAg
ICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMz
RDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
cmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQor
ICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CiAg
ICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1
cHBvcnRlZCgpKTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZv
cm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzU3Miw2ICszNjA2LDIw
IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXQKICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKIH0KIAoraW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOworfQorCitpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKK3sKKyAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAg
ICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEhlaWdodCgpOworICAgIHJldHVybiBt
X2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7Cit9CisKIFdl
YkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKIHsKICAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IDA7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDc0NTA1KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTA1LDYgKzUw
NSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQg
ZnJhbWVidWZmZXIncyBjb2xvciBidWZmZXIgZm9ybWF0LgogICAgIHVuc2lnbmVkIGxvbmcgZ2V0
Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CiAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgorICAgIGludCBnZXRCb3VuZEZy
YW1lYnVmZmVyV2lkdGgoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJv
dW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgorICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KCk7CisKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGFyZ2V0IGFuZCB0ZXh0
dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCiAgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3JzIGFuZCBy
ZXR1cm4gMCBpZiB0YXJnZXQgaXMgaW52YWxpZCBvciB0ZXh0dXJlIGJvdW5kIGlzCiAgICAgLy8g
bnVsbC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQu
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA3NDUwNSkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY5LDEyICsxNjksMjggQEAgdm9pZCBXZWJHTFRleHR1cmU6OmdlbmVyYXRlTWlwbWFwTGV2
ZWxJbgogICAgIG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlID0gZmFsc2U7CiB9CiAKLXVuc2lnbmVk
IGxvbmcgV2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdChpbnQgbGV2ZWwpIGNvbnN0Cit1
bnNpZ25lZCBsb25nIFdlYkdMVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW9iamVjdCgpIHx8ICFtX3Rh
cmdldCkKKyAgICBjb25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRMZXZlbEluZm8odGFyZ2V0LCBs
ZXZlbCk7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5m
by0+aW50ZXJuYWxGb3JtYXQ7Cit9CisKK2ludCBXZWJHTFRleHR1cmU6OmdldFdpZHRoKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgY29uc3QgTGV2ZWxJbmZv
KiBpbmZvID0gZ2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwpOworICAgIGlmICghaW5mbykKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluZm8tPndpZHRoOworfQorCitpbnQgV2ViR0xU
ZXh0dXJlOjpnZXRIZWlnaHQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QK
K3sKKyAgICBjb25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZl
bCk7CisgICAgaWYgKCFpbmZvKQogICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBXZSBhc3N1bWUg
bGV2ZWwgaGFzIGJlZW4gdmFsaWRhdGVkIGFscmVhZHkuCi0gICAgcmV0dXJuIG1faW5mb1swXVts
ZXZlbF0uaW50ZXJuYWxGb3JtYXQ7CisgICAgcmV0dXJuIGluZm8tPmhlaWdodDsKIH0KIAogYm9v
bCBXZWJHTFRleHR1cmU6OmlzTlBPVCh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQpA
QCAtMjA1LDcgKzIyMSw3IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKFBs
YXQKICAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2Jq
ZWN0KTsKIH0KIAotaW50IFdlYkdMVGV4dHVyZTo6bWFwVGFyZ2V0VG9JbmRleCh1bnNpZ25lZCBs
b25nIHRhcmdldCkKK2ludCBXZWJHTFRleHR1cmU6Om1hcFRhcmdldFRvSW5kZXgodW5zaWduZWQg
bG9uZyB0YXJnZXQpIGNvbnN0CiB7CiAgICAgaWYgKG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEKSB7CiAgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQpCkBAIC0zMTQsNiArMzMwLDE4IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjp1
cGRhdGUoKQogICAgICAgICBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IHRydWU7CiB9CiAKK2Nv
bnN0IFdlYkdMVGV4dHVyZTo6TGV2ZWxJbmZvKiBXZWJHTFRleHR1cmU6OmdldExldmVsSW5mbyh1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdAoreworICAgIGlmICghb2JqZWN0
KCkgfHwgIW1fdGFyZ2V0KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpbnQgdGFyZ2V0SW5kZXgg
PSBtYXBUYXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0
YXJnZXRJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1faW5mby5zaXplKCkpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID49IHN0YXRpY19jYXN0PGludD4o
bV9pbmZvW3RhcmdldEluZGV4XS5zaXplKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gJihtX2luZm9bdGFyZ2V0SW5kZXhdW2xldmVsXSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlz
aW9uIDc0NTA1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsOSBAQCBwdWJsaWM6CiAgICAgLy8gR2VuZXJhdGUgYWxsIGxl
dmVsIGluZm9ybWF0aW9uLgogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXBMZXZlbEluZm8oKTsKIAot
ICAgIHVuc2lnbmVkIGxvbmcgZ2V0SW50ZXJuYWxGb3JtYXQoaW50IGxldmVsKSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsRm9ybWF0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBp
bnQgbGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRXaWR0aCh1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW50IGxldmVsKSBjb25zdDsKKyAgICBpbnQgZ2V0SGVpZ2h0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbnQgbGV2ZWwpIGNvbnN0OwogCiAgICAgLy8gV2hldGhlciB3aWR0aC9oZWlnaHQgaXMgTm90
UG93ZXJPZlR3by4KICAgICBzdGF0aWMgYm9vbCBpc05QT1QodW5zaWduZWQsIHVuc2lnbmVkKTsK
QEAgLTcxLDE5ICs3Myw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0KTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB1cGRhdGUoKTsK
LQotICAgIGludCBtYXBUYXJnZXRUb0luZGV4KHVuc2lnbmVkIGxvbmcpOwotCi0gICAgdW5zaWdu
ZWQgbG9uZyBtX3RhcmdldDsKLQotICAgIGludCBtX21pbkZpbHRlcjsKLSAgICBpbnQgbV9tYWdG
aWx0ZXI7Ci0gICAgaW50IG1fd3JhcFM7Ci0gICAgaW50IG1fd3JhcFQ7Ci0KICAgICBjbGFzcyBM
ZXZlbEluZm8gewogICAgIHB1YmxpYzoKICAgICAgICAgTGV2ZWxJbmZvKCkKQEAgLTExMSw2ICsx
MDAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOwogICAgIH07CiAK
KyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdm9pZCB1cGRhdGUoKTsKKworICAgIGludCBtYXBUYXJnZXRUb0luZGV4KHVuc2lnbmVkIGxv
bmcpIGNvbnN0OworCisgICAgY29uc3QgTGV2ZWxJbmZvKiBnZXRMZXZlbEluZm8odW5zaWduZWQg
bG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBsb25nIG1fdGFy
Z2V0OworCisgICAgaW50IG1fbWluRmlsdGVyOworICAgIGludCBtX21hZ0ZpbHRlcjsKKyAgICBp
bnQgbV93cmFwUzsKKyAgICBpbnQgbV93cmFwVDsKKwogICAgIFZlY3RvcjxWZWN0b3I8TGV2ZWxJ
bmZvPiA+IG1faW5mbzsKIAogICAgIGJvb2wgbV9pc05QT1Q7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA3NDUwNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzk2LDYgKzc5Niw4IEBAIHB1YmxpYzoKICAgICAvLyBkZXRlcm1pbmUgdGhpcy4K
ICAgICBFeHRlbnNpb25zM0QqIGdldEV4dGVuc2lvbnMoKTsKIAorICAgIEludFNpemUgZ2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKKwogICBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4
dDNEKEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShy
ZXZpc2lvbiA3NDUwNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSwxMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAgOjpnbEZsdXNo
KCk7CiB9CiAKK0ludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQog
ewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShyZXZpc2lvbiA3NDUw
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5OCw2ICs1OTgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdAogICAgIGdsRmx1c2goKTsKIH0KIAorSW50U2l6ZSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKQoreworICAgIHJldHVy
biBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKIHsK
ICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwpJbmRleDogV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA3NDU3NikKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0xMi0yMyAgWmhlbnlhbyBNbyAgPHptb0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluaXRpYWxpemUgdG8gMCBmb3IgdW5kZWZpbmVkIHZhbHVlcyBpbiBDb3B5VGV4SW1hZ2Uy
RAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0MjEK
KworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDogSW1wbGVtZW50
IGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAg
ICogc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDoKKwogMjAxMC0xMi0yMyAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBidWlsZC4KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkocmV2
aXNpb24gNzQ1MDUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDExIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZSgKICNlbmRpZiAvLyBQTEFURk9STShDRykKIH0K
IAorSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlcm5hbEZyYW1lYnVm
ZmVyU2l6ZSgpCit7CisgICAgcmV0dXJuIEludFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwt
PmhlaWdodCgpKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0NvbnRl
eHRMb3N0KCkKIHsKICAgICByZXR1cm4gbV9pbXBsLT5pc0NvbnRleHRMb3N0KCk7CkBAIC04OTYs
NiArOTAxLDcgQEAgUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmbwogREVM
RUdBVEVfVE9fSU5URVJOQUwobWFrZUNvbnRleHRDdXJyZW50KQogREVMRUdBVEVfVE9fSU5URVJO
QUxfMVIoc2l6ZUluQnl0ZXMsIGludCwgaW50KQogREVMRUdBVEVfVE9fSU5URVJOQUxfMihyZXNo
YXBlLCBpbnQsIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUsIEludFNpemUpCiAKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoYWN0aXZlVGV4dHVy
ZSwgdW5zaWduZWQgbG9uZykKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYXR0YWNoU2hhZGVyLCBQ
bGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgJKHJldmlzaW9uIDc0NTA1KQor
KysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIGludCBzaXplSW5CeXRlcyhp
bnQgdHlwZSk7CiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAg
ICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CiAKICAgICB2b2lkIHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKICAgICBi
b29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0
NTc2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTAtMTItMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsaXplIHRvIDAg
Zm9yIHVuZGVmaW5lZCB2YWx1ZXMgaW4gQ29weVRleEltYWdlMkQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDIxCisKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGQgdGVzdCBjYXNl
cyBmb3IgY29weVRleEltYWdlMkQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0
aWFsaXplZC10ZXN0Lmh0bWw6IERpdHRvLgorCiAyMDEwLTEyLTIzICBLZW5uZXRoIFJ1c3NlbGwg
IDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIENocm9taXVtIGV4cGVjdGF0
aW9ucyB1cGRhdGUuIFN1cHByZXNzIGNyYXNoZXMgc2VlbiBvbgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3Qt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3NDUwNSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTMsNyArMywyOSBAQCBUZXN0cyB0byBjaGVjayB1c2VyIGNvZGUgY2Fubm90IGFjY2VzcyB1CiBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIFBBU1MgQ29udGV4dCBjcmVhdGVkLgotUmVhZGlu
ZyBhbiB1bmluaXRpYWxpemVkIHRleHR1cmUgc2hvdWxkIHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMg
c2V0IHRvIDAuCisKK1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCB0ZXh0dXJlICh0ZXhJbWFnZTJE
KSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4KK1BBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExF
VEUKK1BBU1MgQWxsIGRhdGEgaW5pdGlhbGl6ZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAorCitSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlvbiBv
ZiBhIHRleHR1cmUgKGNvcHlUZXhJbWFnZTJEKSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRl
cyBzZXQgdG8gMC4KK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBBbGwgZGF0YSBpbml0
aWFsaXplZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCisK
K1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleElt
YWdlMkQgd2l0aCBuZWdhdGl2ZSB4IGFuZCB5KSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRl
cyBzZXQgdG8gMC4KK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBBbGwgZGF0YSBpbml0
aWFsaXplZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCisK
K1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleElt
YWdlMkQgZnJvbSBXZWJHTCBpbnRlcm5hbCBmYm8pIHNob3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5
dGVzIHNldCB0byAwLgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGds
LkZSQU1FQlVGRkVSX0NPTVBMRVRFCiBQQVNTIEFsbCBkYXRhIGluaXRpYWxpemVkCiBQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKIApJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJ
KHJldmlzaW9uIDc0NTA1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0
aWFsaXplZC10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIxLDUyICsyMSw1NyBAQCBpZiAo
IWdsKQogZWxzZQogICB0ZXN0UGFzc2VkKCJDb250ZXh0IGNyZWF0ZWQuIik7CiAKLWRlYnVnKCJS
ZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdGV4dHVyZSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBi
eXRlcyBzZXQgdG8gMC4iKTsKLQotdmFyIHdpZHRoID0gNTEyOwotdmFyIGhlaWdodCA9IDUxMjsK
LXZhciBicHAgPSA0OwotdmFyIGV4cGVjdGVkRGF0YUxlbmd0aCA9IHdpZHRoKmhlaWdodCpicHA7
Ci0KLXZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7Ci1nbC5iaW5kVGV4dHVyZShnbC5URVhU
VVJFXzJELCB0ZXgpOwotZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3
aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKLQotLy8g
dGhpcyBjYW4gYmUgcXVpdGUgdW5kZXRlcm1pbmlzdGljIHNvIHRvIGltcHJvdmUgb2RkcyBvZiBz
ZWVpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdyaXRlIGJpdHMKLS8vIGludG8gdGV4IHRoZW4gZGVs
ZXRlIHRleHR1cmUgdGhlbiByZS1jcmVhdGUgb25lIHdpdGggc2FtZSBjaGFyYWN0ZXJpc3RpY3Mg
KGRyaXZlciB3aWxsIGxpa2VseSByZXVzZSBtZW0pCi0vLyB3aXRoIHRoaXMgdHJpY2sgb24gcjU5
MDQ2IFdlYktpdC9PU1ggSSBnZXQgRkFJTCAxMDAlIG9mIHRoZSB0aW1lIGluc3RlYWQgb2YgfjE1
JSBvZiB0aGUgdGltZS4KLQotdmFyIGJhZERhdGEgPSBuZXcgVWludDhBcnJheShleHBlY3RlZERh
dGFMZW5ndGgpOwotZm9yICh2YXIgaSA9IDA7IGkgPCBiYWREYXRhLmxlbmd0aDsgKytpKQotICAg
IGJhZERhdGFbaV0gPSBpICUgMjU1OwotCi1nbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQs
IDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJhZERh
dGEpOwotZ2wuZmluaXNoKCk7IC8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiB1cGxvYWRlZAorZnVu
Y3Rpb24gc2V0dXBUZXh0dXJlKHRleFdpZHRoLCB0ZXhIZWlnaHQpIHsKKyAgICB2YXIgdGV4dHVy
ZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJE
LCB0ZXh0dXJlKTsKKyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEs
IHRleFdpZHRoLCB0ZXhIZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwp
OworCisgICAgLy8gdGhpcyBjYW4gYmUgcXVpdGUgdW5kZXRlcm1pbmlzdGljIHNvIHRvIGltcHJv
dmUgb2RkcyBvZiBzZWVpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdyaXRlIGJpdHMKKyAgICAvLyBp
bnRvIHRleCB0aGVuIGRlbGV0ZSB0ZXh0dXJlIHRoZW4gcmUtY3JlYXRlIG9uZSB3aXRoIHNhbWUg
Y2hhcmFjdGVyaXN0aWNzIChkcml2ZXIgd2lsbCBsaWtlbHkgcmV1c2UgbWVtKQorICAgIC8vIHdp
dGggdGhpcyB0cmljayBvbiByNTkwNDYgV2ViS2l0L09TWCBJIGdldCBGQUlMIDEwMCUgb2YgdGhl
IHRpbWUgaW5zdGVhZCBvZiB+MTUlIG9mIHRoZSB0aW1lLgorCisgICAgdmFyIGJhZERhdGEgPSBu
ZXcgVWludDhBcnJheSh0ZXhXaWR0aCAqIHRleEhlaWdodCAqIDQpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYmFkRGF0YS5sZW5ndGg7ICsraSkKKyAgICAgICAgYmFkRGF0YVtpXSA9IGkgJSAy
NTU7CisKKyAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHRleFdp
ZHRoLCB0ZXhIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJhZERhdGEpOworICAg
IGdsLmZpbmlzaCgpOyAvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gdXBsb2FkZWQKKworICAgIGds
LmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7CisgICAgZ2wuZmluaXNoKCk7IC8vIG1ha2Ugc3VyZSBp
dCBoYXMgYmVlbiBkZWxldGVkCisKKyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUo
KTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICByZXR1
cm4gdGV4dHVyZTsKK30KIAotZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOwotZ2wuZmluaXNoKCk7IC8v
IG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBkZWxldGVkCitmdW5jdGlvbiBjaGVja05vblplcm9QaXhl
bHModGV4dHVyZSwgdGV4V2lkdGgsIHRleEhlaWdodCwgc2tpcFgsIHNraXBZLCBza2lwV2lkdGgs
IHNraXBIZWlnaHQsIHNraXBSLCBza2lwRywgc2tpcEIsIHNraXBBKSB7CisgICAgZ2wuYmluZFRl
eHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7CisgICAgdmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKTsKKyAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKKyAg
ICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNI
TUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIDApOworICAgIHNob3VsZEJlKCJnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZFUl9DT01Q
TEVURSIpOwogCi12YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOwotZ2wuYmluZFRleHR1cmUo
Z2wuVEVYVFVSRV8yRCwgdGV4KTsKLWdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wu
UkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7
CisgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheSh0ZXhXaWR0aCAqIHRleEhlaWdodCAqIDQp
OworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgdGV4V2lkdGgsIHRleEhlaWdodCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgZGF0YSk7CiAKLXZhciBmYiA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVy
KCk7Ci1nbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKLWdsLmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVY
VFVSRV8yRCwgdGV4LCAwKTsKLQotZGF0YSA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0
ICogNCk7Ci1nbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVO
U0lHTkVEX0JZVEUsIGRhdGEpOwotCi1pZiAoZGF0YS5sZW5ndGggIT0gZXhwZWN0ZWREYXRhTGVu
Z3RoKSB7Ci0gICAgdGVzdEZhaWxlZCgiZXhwZWN0ZWQgZGF0YSBsZW5ndGggIiArIGV4cGVjdGVk
RGF0YUxlbmd0aCArICIgYnV0IGdvdCAiICsgZGF0YS5sZW5ndGggKyAiIGluc3RlYWQuIik7Ci19
IGVsc2UgewogICAgIHZhciBrID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGRhdGFbaV0gIT0gMCkgewotICAgICAgICAgICAgaysr
OworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgdGV4SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgZm9y
ICh2YXIgeCA9IDA7IHggPCB0ZXhXaWR0aDsgKyt4KSB7CisgICAgICAgICAgICB2YXIgaW5kZXgg
PSAoeSAqIHRleFdpZHRoICsgeCkgKiA0OworICAgICAgICAgICAgaWYgKHggPj0gc2tpcFggJiYg
eCA8IHNraXBYICsgc2tpcFdpZHRoICYmIHkgPj0gc2tpcFkgJiYgeSA8IHNraXBZICsgc2tpcEhl
aWdodCkgeworICAgICAgICAgICAgICAgIGlmIChkYXRhW2luZGV4XSAhPSBza2lwUiB8fCBkYXRh
W2luZGV4ICsgMV0gIT0gc2tpcEcgfHwgZGF0YVtpbmRleCArIDJdICE9IHNraXBCIHx8IGRhdGFb
aW5kZXggKyAzXSAhPSBza2lwQSkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJu
b24temVybyBwaXhlbCB2YWx1ZXMgYXJlIHdyb25nIik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkYXRhW2luZGV4ICsgaV0gIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGsrKzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KICAg
ICBpZiAoaykgewogICAgICAgICB0ZXN0RmFpbGVkKCJGb3VuZCAiICsgayArICIgbm9uLXplcm8g
Ynl0ZXMiKTsKICAgICB9IGVsc2UgewpAQCAtNzQsNiArNzksNzcgQEAgaWYgKGRhdGEubGVuZ3Ro
ICE9IGV4cGVjdGVkRGF0YUxlbmd0aCkgewogICAgIH0KIH0KIAordmFyIHdpZHRoID0gNTEyOwor
dmFyIGhlaWdodCA9IDUxMjsKKworZGVidWcoIiIpOworZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0
aWFsaXplZCB0ZXh0dXJlICh0ZXhJbWFnZTJEKSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRl
cyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNldHVwVGV4dHVyZSh3aWR0aCwgaGVpZ2h0KTsK
K2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwg
MCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CitjaGVja05vblplcm9QaXhlbHMo
dGV4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK2dsLmRlbGV0ZVRl
eHR1cmUodGV4KTsKK2dsLmZpbmlzaCgpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJP
Uik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlv
biBvZiBhIHRleHR1cmUgKGNvcHlUZXhJbWFnZTJEKSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBi
eXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNldHVwVGV4dHVyZSh3aWR0aCwgaGVpZ2h0
KTsKK3ZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworZ2wuYmluZEZyYW1lYnVmZmVy
KGdsLkZSQU1FQlVGRkVSLCBmYm8pOwordmFyIHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
OworZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHJibyk7Cit2YXIgZmJvV2lk
dGggPSAxNjsKK3ZhciBmYm9IZWlnaHQgPSAxNjsKK2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wu
UkVOREVSQlVGRkVSLCBnbC5SR0JBNCwgZmJvV2lkdGgsIGZib0hlaWdodCk7CitnbC5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGds
LlJFTkRFUkJVRkZFUiwgcmJvKTsKK3Nob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZFUl9DT01QTEVURSIpOworZ2wuY2xlYXJD
b2xvcigxLjAsIDAuMCwgMC4wLCAxLjApOworZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7
CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKK2dsLmNvcHlUZXhJbWFnZTJEKGds
LlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDApOworY2hlY2tO
b25aZXJvUGl4ZWxzKHRleCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgZmJvV2lkdGgsIGZib0hlaWdo
dCwgMjU1LCAwLCAwLCAyNTUpOworZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7
CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKKworZGVidWcoIiIpOworZGVidWco
IlJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleElt
YWdlMkQgd2l0aCBuZWdhdGl2ZSB4IGFuZCB5KSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRl
cyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNldHVwVGV4dHVyZSh3aWR0aCwgaGVpZ2h0KTsK
K3ZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworZ2wuYmluZEZyYW1lYnVmZmVyKGds
LkZSQU1FQlVGRkVSLCBmYm8pOwordmFyIHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwor
Z2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHJibyk7Cit2YXIgZmJvV2lkdGgg
PSAxNjsKK3ZhciBmYm9IZWlnaHQgPSAxNjsKK2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVO
REVSQlVGRkVSLCBnbC5SR0JBNCwgZmJvV2lkdGgsIGZib0hlaWdodCk7CitnbC5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJF
TkRFUkJVRkZFUiwgcmJvKTsKK3Nob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGds
LkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZFUl9DT01QTEVURSIpOworZ2wuY2xlYXJDb2xv
cigxLjAsIDAuMCwgMC4wLCAxLjApOworZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7Citn
bEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKK3ZhciB4ID0gLTE2OwordmFyIHkgPSAt
MTY7CitnbC5jb3B5VGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCAwKTsKK2NoZWNrTm9uWmVyb1BpeGVscyh0ZXgsIHdpZHRoLCBoZWlnaHQs
IC14LCAteSwgZmJvV2lkdGgsIGZib0hlaWdodCwgMjU1LCAwLCAwLCAyNTUpOworZ2wuZGVsZXRl
VGV4dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VS
Uk9SKTsKKworZGVidWcoIiIpOworZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0
aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleEltYWdlMkQgZnJvbSBXZWJHTCBpbnRlcm5hbCBmYm8p
IHNob3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5dGVzIHNldCB0byAwLiIpOworCit2YXIgdGV4ID0g
c2V0dXBUZXh0dXJlKHdpZHRoLCBoZWlnaHQpOworZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1F
QlVGRkVSLCBudWxsKTsKK2dsLmNsZWFyQ29sb3IoMC4wLCAxLjAsIDAuMCwgMC4wKTsKK2dsLmNs
ZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJP
Uik7CitnbC5jb3B5VGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAwLCAwLCB3
aWR0aCwgaGVpZ2h0LCAwKTsKK2NoZWNrTm9uWmVyb1BpeGVscyh0ZXgsIHdpZHRoLCBoZWlnaHQs
IDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCwgMCwgMjU1LCAwLCAwKTsKK2dsLmRl
bGV0ZVRleHR1cmUodGV4KTsKK2dsLmZpbmlzaCgpOwogZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5O
T19FUlJPUik7CiAKIC8vVE9ETzogdW5pbml0aWFsaXplZCB2ZXJ0ZXggYXJyYXkgYnVmZmVyCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77565</attachid>
            <date>2010-12-28 11:33:08 -0800</date>
            <delta_ts>2010-12-28 11:41:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51421-20101228113306.patch</filename>
            <type>text/plain</type>
            <size>31916</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NDU3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTItMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFs
aXplIHRvIDAgZm9yIHVuZGVmaW5lZCB2YWx1ZXMgaW4gQ29weVRleEltYWdlMkQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDIxCisKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDogVHJhY2sgd2lkdGgvaGVpZ2h0L2lu
dGVybmFsRm9ybWF0IG9mIGNvbG9yIGJ1ZmZlci4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJh
bWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFt
ZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVm
ZmVyOjpnZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpnZXRI
ZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JCdWZm
ZXJGb3JtYXQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRCk6IEluaXRpYWxp
emUgdW5kZWZpbmVkIHBpeGVscyB0byAwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVi
dWZmZXJIZWlnaHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHA6IFRyYWNrIHdpZHRo
L2hlaWdodC9pbnRlcm5hbEZvcm1hdCBvZiBhIHRleHR1cmUgYnkgdGFyZ2V0L2xldmVsLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMVGV4dHVyZTo6Z2V0SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6
bWFwVGFyZ2V0VG9JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmdldExl
dmVsSW5mbyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFRleHR1cmU6OmlzVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkIGdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkgZnVuY3Rpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUpOgorCiAyMDEwLTEyLTIz
ICBKdXN0aW4gU2NodWggIDxqc2NodWhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuY3BwCShyZXZpc2lvbiA3NDUwNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDI4ICs3Niw1OCBAQCBQYXNzUmVmUHRy
PFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJhbWViCiBXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZy
YW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogV2ViR0xPYmplY3Qo
Y3R4KQogICAgICwgbV9oYXNFdmVyQmVlbkJvdW5kKGZhbHNlKQorICAgICwgbV90ZXhUYXJnZXQo
MCkKKyAgICAsIG1fdGV4TGV2ZWwoLTEpCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3Jh
cGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKLXZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIFdlYkdM
T2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNo
bWVudCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4VGFyZ2V0LCBX
ZWJHTFRleHR1cmUqIHRleHR1cmUsIGludCBsZXZlbCkKIHsKICAgICBpZiAoIW9iamVjdCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmICFhdHRhY2hlZE9iamVj
dC0+b2JqZWN0KCkpCi0gICAgICAgIGF0dGFjaGVkT2JqZWN0ID0gMDsKKyAgICBpZiAodGV4dHVy
ZSAmJiAhdGV4dHVyZS0+b2JqZWN0KCkpCisgICAgICAgIHRleHR1cmUgPSAwOwogICAgIHN3aXRj
aCAoYXR0YWNobWVudCkgewogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFD
SE1FTlQwOgotICAgICAgICBtX2NvbG9yQXR0YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0OworICAg
ICAgICBtX2NvbG9yQXR0YWNobWVudCA9IHRleHR1cmU7CisgICAgICAgIGlmICh0ZXh0dXJlKSB7
CisgICAgICAgICAgICBtX3RleFRhcmdldCA9IHRleFRhcmdldDsKKyAgICAgICAgICAgIG1fdGV4
TGV2ZWwgPSBsZXZlbDsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2RlcHRoQXR0YWNobWVu
dCA9IGF0dGFjaGVkT2JqZWN0OworICAgICAgICBtX2RlcHRoQXR0YWNobWVudCA9IHRleHR1cmU7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRU
QUNITUVOVDoKLSAgICAgICAgbV9zdGVuY2lsQXR0YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0Owor
ICAgICAgICBtX3N0ZW5jaWxBdHRhY2htZW50ID0gdGV4dHVyZTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAg
ICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQgPSBhdHRhY2hlZE9iamVjdDsKKyAgICAgICAg
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ID0gdGV4dHVyZTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBXZWJHTEZyYW1lYnVm
ZmVyOjpzZXRBdHRhY2htZW50KHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgV2ViR0xSZW5kZXJi
dWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIW9iamVjdCgpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlciAmJiAhcmVuZGVyYnVmZmVyLT5vYmplY3QoKSkKKyAg
ICAgICAgcmVuZGVyYnVmZmVyID0gMDsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICAgICAgbV9jb2xv
ckF0dGFjaG1lbnQgPSByZW5kZXJidWZmZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fZGVwdGhBdHRhY2ht
ZW50ID0gcmVuZGVyYnVmZmVyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQg
PSByZW5kZXJidWZmZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxBdHRh
Y2htZW50ID0gcmVuZGVyYnVmZmVyOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm47CkBAIC0xMzgsMjEgKzE2OCw0OCBAQCB2b2lkIFdlYkdMRnJhbWVidWZmZXI6
OnJlbW92ZUF0dGFjaG1lbnQoCiAgICAgICAgIHJldHVybjsKIH0KIAoraW50IFdlYkdMRnJhbWVi
dWZmZXI6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAoIW9iamVjdCgpIHx8ICFpc0NvbG9y
QXR0YWNoZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1fY29sb3JBdHRhY2htZW50
LT5pc1JlbmRlcmJ1ZmZlcigpKQorICAgICAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkpLT5nZXRXaWR0aCgpOwor
ICAgIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkpCisgICAgICAgIHJldHVybiAo
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkp
LT5nZXRXaWR0aChtX3RleFRhcmdldCwgbV90ZXhMZXZlbCk7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBXZWJHTEZyYW1lYnVmZmVyOjpnZXRIZWln
aHQoKSBjb25zdAoreworICAgIGlmICghb2JqZWN0KCkgfHwgIWlzQ29sb3JBdHRhY2hlZCgpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzUmVuZGVyYnVm
ZmVyKCkpCisgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZl
cio+KG1fY29sb3JBdHRhY2htZW50LmdldCgpKSktPmdldEhlaWdodCgpOworICAgIGlmIChtX2Nv
bG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkpCisgICAgICAgIHJldHVybiAocmVpbnRlcnByZXRf
Y2FzdDxXZWJHTFRleHR1cmUqPihtX2NvbG9yQXR0YWNobWVudC5nZXQoKSkpLT5nZXRIZWlnaHQo
bV90ZXhUYXJnZXQsIG1fdGV4TGV2ZWwpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCiB1bnNpZ25lZCBsb25nIFdlYkdMRnJhbWVidWZmZXI6OmdldENvbG9y
QnVmZmVyRm9ybWF0KCkgY29uc3QKIHsKLSAgICBpZiAob2JqZWN0KCkgJiYgbV9jb2xvckF0dGFj
aG1lbnQgJiYgbV9jb2xvckF0dGFjaG1lbnQtPm9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChtX2Nv
bG9yQXR0YWNobWVudC0+aXNSZW5kZXJidWZmZXIoKSkgewotICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBmb3JtYXQgPSAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fY29s
b3JBdHRhY2htZW50LmdldCgpKSktPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QTQ6Ci0gICAgICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0ExOgotICAgICAg
ICAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKLSAgICAgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKLSAgICAgICAgICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICht
X2NvbG9yQXR0YWNobWVudC0+aXNUZXh0dXJlKCkpCi0gICAgICAgICAgICByZXR1cm4gKHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4obV9jb2xvckF0dGFjaG1lbnQuZ2V0KCkpKS0+Z2V0
SW50ZXJuYWxGb3JtYXQoMCk7CisgICAgaWYgKCFvYmplY3QoKSB8fCAhaXNDb2xvckF0dGFjaGVk
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2NvbG9yQXR0YWNobWVudC0+aXNSZW5k
ZXJidWZmZXIoKSkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGZvcm1hdCA9IChyZWludGVycHJl
dF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4obV9jb2xvckF0dGFjaG1lbnQuZ2V0KCkpKS0+Z2V0
SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjVfQTE6CisgICAgICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKKyAgICAgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworICAgICAgICB9CisgICAgICAgIHJldHVybiAw
OwogICAgIH0KKyAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQtPmlzVGV4dHVyZSgpKQorICAgICAg
ICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4obV9jb2xvckF0dGFjaG1l
bnQuZ2V0KCkpKS0+Z2V0SW50ZXJuYWxGb3JtYXQobV90ZXhUYXJnZXQsIG1fdGV4TGV2ZWwpOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkocmV2aXNpb24gNzQ1MDUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTggKzMzLDI0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgV2ViR0xSZW5kZXJi
dWZmZXI7CitjbGFzcyBXZWJHTFRleHR1cmU7CisKIGNsYXNzIFdlYkdMRnJhbWVidWZmZXIgOiBw
dWJsaWMgV2ViR0xPYmplY3QgewogcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMRnJhbWVidWZm
ZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEZy
YW1lYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICB2b2lkIHNl
dEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZywgV2ViR0xPYmplY3QqKTsKKyAgICB2b2lkIHNldEF0
dGFjaG1lbnQodW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleFRhcmdl
dCwgV2ViR0xUZXh0dXJlKiwgaW50IGxldmVsKTsKKyAgICB2b2lkIHNldEF0dGFjaG1lbnQodW5z
aWduZWQgbG9uZyBhdHRhY2htZW50LCBXZWJHTFJlbmRlcmJ1ZmZlciopOwogICAgIC8vIElmIGFu
IG9iamVjdCBpcyBhdHRhY2hlZCB0byB0aGUgZnJhbWVidWZmZXIsIHJlbW92ZSBpdC4KICAgICB2
b2lkIHJlbW92ZUF0dGFjaG1lbnQoV2ViR0xPYmplY3QqKTsKICAgICBXZWJHTE9iamVjdCogZ2V0
QXR0YWNobWVudCh1bnNpZ25lZCBsb25nKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGxvbmcgZ2V0
Q29sb3JCdWZmZXJGb3JtYXQoKSBjb25zdDsKKyAgICBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKKyAg
ICBpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7CiAKICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUg
Y2FsbGVkIGJlZm9yZSBkcmF3QXJyYXksIGRyYXdFbGVtZW50cywgY2xlYXIsCiAgICAgLy8gcmVh
ZFBpeGVscywgY29weVRleEltYWdlMkQsIGNvcHlUZXhTdWJJbWFnZTJEIGlmIHRoaXMgZnJhbWVi
dWZmZXIgaXMKQEAgLTgzLDYgKzg5LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViR0xPYmpl
Y3Q+IG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudDsKIAogICAgIGJvb2wgbV9oYXNFdmVyQmVlbkJv
dW5kOworCisgICAgdW5zaWduZWQgbG9uZyBtX3RleFRhcmdldDsKKyAgICBpbnQgbV90ZXhMZXZl
bDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDc0NTA1KQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSwxMCArNjUsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBkb3VibGUg
c2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMgPSAxLjA7CiAKLXN0YXRpYyBpbmxpbmUgUGxh
dGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gb2JqZWN0ID8gb2JqZWN0LT5vYmplY3QoKSA6IDA7Ci19CituYW1lc3BhY2UgeworCisg
ICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDogMDsKKyAgICB9
CisKKyAgICB2b2lkIGNsaXAobG9uZyBzdGFydCwgbG9uZyByYW5nZSwgbG9uZyBzb3VyY2VSYW5n
ZSwgbG9uZyogY2xpcHBlZFN0YXJ0LCBsb25nKiBjbGlwcGVkUmFuZ2UpCisgICAgeworICAgICAg
ICBBU1NFUlQoY2xpcHBlZFN0YXJ0ICYmIGNsaXBwZWRSYW5nZSk7CisgICAgICAgIGlmIChzdGFy
dCA8IDApIHsKKyAgICAgICAgICAgIHJhbmdlICs9IHN0YXJ0OworICAgICAgICAgICAgc3RhcnQg
PSAwOworICAgICAgICB9CisgICAgICAgIGxvbmcgZW5kID0gc3RhcnQgKyByYW5nZTsKKyAgICAg
ICAgaWYgKGVuZCA+IHNvdXJjZVJhbmdlKQorICAgICAgICAgICAgcmFuZ2UgLT0gZW5kIC0gc291
cmNlUmFuZ2U7CisgICAgICAgICpjbGlwcGVkU3RhcnQgPSBzdGFydDsKKyAgICAgICAgKmNsaXBw
ZWRSYW5nZSA9IHJhbmdlOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCiAKIGNs
YXNzIFdlYkdMU3RhdGVSZXN0b3JlciB7CiBwdWJsaWM6CkBAIC02NDksNyArNjY3LDIyIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UKICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIG1fY29udGV4dC0+Y29w
eVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlcik7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgZWxzZSB7CisgICAgICAgIGxvbmcgY2xpcHBl
ZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGNsaXAo
eCwgd2lkdGgsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCAmY2xpcHBlZFgsICZjbGlwcGVk
V2lkdGgpOworICAgICAgICBjbGlwKHksIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdo
dCgpLCAmY2xpcHBlZFksICZjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgaWYgKGNsaXBwZWRYICE9
IHggfHwgY2xpcHBlZFkgIT0geSB8fCBjbGlwcGVkV2lkdGggIT0gc3RhdGljX2Nhc3Q8bG9uZz4o
d2lkdGgpIHx8IGNsaXBwZWRIZWlnaHQgIT0gc3RhdGljX2Nhc3Q8bG9uZz4oaGVpZ2h0KSkgewor
ICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGgg
PiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5j
b3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0g
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRY
LCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIp
OworICAgIH0KICAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0
ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1dGVkLgogICAgIHRleC0+c2V0TGV2
ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKQEAgLTY2Miw3ICs2OTUsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y29weVRleFN1YkltCiAgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKHRhcmdldCwgdHJ1ZSk7CiAgICAgaWYgKCF0ZXgpCiAgICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQodGV4
LT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1h
dCgpKSkgeworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRp
b25WYWxpZCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpLCBnZXRCb3VuZEZy
YW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMTMxOCw3ICsxMzUxLDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZyYW1lYnVmZmVyVAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIG9i
amVjdE9yWmVybyh0ZXh0dXJlKSwgbGV2ZWwpOwotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5z
ZXRBdHRhY2htZW50KGF0dGFjaG1lbnQsIHRleHR1cmUpOworICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5zZXRBdHRhY2htZW50KGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwp
OwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTIzODIsMTQg
KzI0MTUsMTUgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlcgogICAg
ICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwogICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPnNldElzVmFsaWQodHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTDoKICAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKICAgICAg
ICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMz
RDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
cmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQor
ICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CiAg
ICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1
cHBvcnRlZCgpKTsKICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZv
cm1hdChpbnRlcm5hbGZvcm1hdCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzU3Miw2ICszNjA2LDIw
IEBAIHVuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXQKICAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKIH0KIAoraW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOworfQorCitpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKK3sKKyAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAg
ICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEhlaWdodCgpOworICAgIHJldHVybiBt
X2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7Cit9CisKIFdl
YkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKIHsKICAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IDA7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDc0NTA1KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTA1LDYgKzUw
NSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQg
ZnJhbWVidWZmZXIncyBjb2xvciBidWZmZXIgZm9ybWF0LgogICAgIHVuc2lnbmVkIGxvbmcgZ2V0
Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CiAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgorICAgIGludCBnZXRCb3VuZEZy
YW1lYnVmZmVyV2lkdGgoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJv
dW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgorICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KCk7CisKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGFyZ2V0IGFuZCB0ZXh0
dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCiAgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3JzIGFuZCBy
ZXR1cm4gMCBpZiB0YXJnZXQgaXMgaW52YWxpZCBvciB0ZXh0dXJlIGJvdW5kIGlzCiAgICAgLy8g
bnVsbC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQu
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA3NDUwNSkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY5LDEyICsxNjksMjggQEAgdm9pZCBXZWJHTFRleHR1cmU6OmdlbmVyYXRlTWlwbWFwTGV2
ZWxJbgogICAgIG1fbmVlZFRvVXNlQmxhY2tUZXh0dXJlID0gZmFsc2U7CiB9CiAKLXVuc2lnbmVk
IGxvbmcgV2ViR0xUZXh0dXJlOjpnZXRJbnRlcm5hbEZvcm1hdChpbnQgbGV2ZWwpIGNvbnN0Cit1
bnNpZ25lZCBsb25nIFdlYkdMVGV4dHVyZTo6Z2V0SW50ZXJuYWxGb3JtYXQodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW9iamVjdCgpIHx8ICFtX3Rh
cmdldCkKKyAgICBjb25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRMZXZlbEluZm8odGFyZ2V0LCBs
ZXZlbCk7CisgICAgaWYgKCFpbmZvKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gaW5m
by0+aW50ZXJuYWxGb3JtYXQ7Cit9CisKK2ludCBXZWJHTFRleHR1cmU6OmdldFdpZHRoKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgY29uc3QgTGV2ZWxJbmZv
KiBpbmZvID0gZ2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwpOworICAgIGlmICghaW5mbykKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGluZm8tPndpZHRoOworfQorCitpbnQgV2ViR0xU
ZXh0dXJlOjpnZXRIZWlnaHQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3QK
K3sKKyAgICBjb25zdCBMZXZlbEluZm8qIGluZm8gPSBnZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZl
bCk7CisgICAgaWYgKCFpbmZvKQogICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBXZSBhc3N1bWUg
bGV2ZWwgaGFzIGJlZW4gdmFsaWRhdGVkIGFscmVhZHkuCi0gICAgcmV0dXJuIG1faW5mb1swXVts
ZXZlbF0uaW50ZXJuYWxGb3JtYXQ7CisgICAgcmV0dXJuIGluZm8tPmhlaWdodDsKIH0KIAogYm9v
bCBXZWJHTFRleHR1cmU6OmlzTlBPVCh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQpA
QCAtMjA1LDcgKzIyMSw3IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjpkZWxldGVPYmplY3RJbXBsKFBs
YXQKICAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2Jq
ZWN0KTsKIH0KIAotaW50IFdlYkdMVGV4dHVyZTo6bWFwVGFyZ2V0VG9JbmRleCh1bnNpZ25lZCBs
b25nIHRhcmdldCkKK2ludCBXZWJHTFRleHR1cmU6Om1hcFRhcmdldFRvSW5kZXgodW5zaWduZWQg
bG9uZyB0YXJnZXQpIGNvbnN0CiB7CiAgICAgaWYgKG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEKSB7CiAgICAgICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQpCkBAIC0zMTQsNiArMzMwLDE4IEBAIHZvaWQgV2ViR0xUZXh0dXJlOjp1
cGRhdGUoKQogICAgICAgICBtX25lZWRUb1VzZUJsYWNrVGV4dHVyZSA9IHRydWU7CiB9CiAKK2Nv
bnN0IFdlYkdMVGV4dHVyZTo6TGV2ZWxJbmZvKiBXZWJHTFRleHR1cmU6OmdldExldmVsSW5mbyh1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IGxldmVsKSBjb25zdAoreworICAgIGlmICghb2JqZWN0
KCkgfHwgIW1fdGFyZ2V0KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpbnQgdGFyZ2V0SW5kZXgg
PSBtYXBUYXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgaWYgKHRhcmdldEluZGV4IDwgMCB8fCB0
YXJnZXRJbmRleCA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1faW5mby5zaXplKCkpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID49IHN0YXRpY19jYXN0PGludD4o
bV9pbmZvW3RhcmdldEluZGV4XS5zaXplKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gJihtX2luZm9bdGFyZ2V0SW5kZXhdW2xldmVsXSk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVO
QUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlz
aW9uIDc0NTA1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsNyArNTIsOSBAQCBwdWJsaWM6CiAgICAgLy8gR2VuZXJhdGUgYWxsIGxl
dmVsIGluZm9ybWF0aW9uLgogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXBMZXZlbEluZm8oKTsKIAot
ICAgIHVuc2lnbmVkIGxvbmcgZ2V0SW50ZXJuYWxGb3JtYXQoaW50IGxldmVsKSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBsb25nIGdldEludGVybmFsRm9ybWF0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBp
bnQgbGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRXaWR0aCh1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW50IGxldmVsKSBjb25zdDsKKyAgICBpbnQgZ2V0SGVpZ2h0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbnQgbGV2ZWwpIGNvbnN0OwogCiAgICAgLy8gV2hldGhlciB3aWR0aC9oZWlnaHQgaXMgTm90
UG93ZXJPZlR3by4KICAgICBzdGF0aWMgYm9vbCBpc05QT1QodW5zaWduZWQsIHVuc2lnbmVkKTsK
QEAgLTcxLDE5ICs3Myw2IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChQbGF0Zm9ybTNET2JqZWN0KTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCB1cGRhdGUoKTsK
LQotICAgIGludCBtYXBUYXJnZXRUb0luZGV4KHVuc2lnbmVkIGxvbmcpOwotCi0gICAgdW5zaWdu
ZWQgbG9uZyBtX3RhcmdldDsKLQotICAgIGludCBtX21pbkZpbHRlcjsKLSAgICBpbnQgbV9tYWdG
aWx0ZXI7Ci0gICAgaW50IG1fd3JhcFM7Ci0gICAgaW50IG1fd3JhcFQ7Ci0KICAgICBjbGFzcyBM
ZXZlbEluZm8gewogICAgIHB1YmxpYzoKICAgICAgICAgTGV2ZWxJbmZvKCkKQEAgLTExMSw2ICsx
MDAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOwogICAgIH07CiAK
KyAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdm9pZCB1cGRhdGUoKTsKKworICAgIGludCBtYXBUYXJnZXRUb0luZGV4KHVuc2lnbmVkIGxv
bmcpIGNvbnN0OworCisgICAgY29uc3QgTGV2ZWxJbmZvKiBnZXRMZXZlbEluZm8odW5zaWduZWQg
bG9uZyB0YXJnZXQsIGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBsb25nIG1fdGFy
Z2V0OworCisgICAgaW50IG1fbWluRmlsdGVyOworICAgIGludCBtX21hZ0ZpbHRlcjsKKyAgICBp
bnQgbV93cmFwUzsKKyAgICBpbnQgbV93cmFwVDsKKwogICAgIFZlY3RvcjxWZWN0b3I8TGV2ZWxJ
bmZvPiA+IG1faW5mbzsKIAogICAgIGJvb2wgbV9pc05QT1Q7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA3NDUwNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBj
b3B5KQpAQCAtNzk2LDYgKzc5Niw4IEBAIHB1YmxpYzoKICAgICAvLyBkZXRlcm1pbmUgdGhpcy4K
ICAgICBFeHRlbnNpb25zM0QqIGdldEV4dGVuc2lvbnMoKTsKIAorICAgIEludFNpemUgZ2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKTsKKwogICBwcml2YXRlOgogICAgIEdyYXBoaWNzQ29udGV4
dDNEKEF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCShy
ZXZpc2lvbiA3NDUwNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSwxMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAgOjpnbEZsdXNo
KCk7CiB9CiAKK0ludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUoKQog
ewogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCShyZXZpc2lvbiA3NDUw
NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU5OCw2ICs1OTgsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdAogICAgIGdsRmx1c2goKTsKIH0KIAorSW50U2l6ZSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKQoreworICAgIHJldHVy
biBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKIHsK
ICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwpJbmRleDogV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA3NDU3NikKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0xMi0yMyAgWmhlbnlhbyBNbyAgPHptb0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEluaXRpYWxpemUgdG8gMCBmb3IgdW5kZWZpbmVkIHZhbHVlcyBpbiBDb3B5VGV4SW1hZ2Uy
RAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTE0MjEK
KworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDogSW1wbGVtZW50
IGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAg
ICogc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaDoKKwogMjAxMC0xMi0yMyAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBidWlsZC4KSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkocmV2
aXNpb24gNzQ1MDUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDExIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6cmVzaGFwZSgKICNlbmRpZiAvLyBQTEFURk9STShDRykKIH0K
IAorSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlcm5hbEZyYW1lYnVm
ZmVyU2l6ZSgpCit7CisgICAgcmV0dXJuIEludFNpemUobV9pbXBsLT53aWR0aCgpLCBtX2ltcGwt
PmhlaWdodCgpKTsKK30KKwogYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0NvbnRl
eHRMb3N0KCkKIHsKICAgICByZXR1cm4gbV9pbXBsLT5pc0NvbnRleHRMb3N0KCk7CkBAIC04OTYs
NiArOTAxLDcgQEAgUGxhdGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmbwogREVM
RUdBVEVfVE9fSU5URVJOQUwobWFrZUNvbnRleHRDdXJyZW50KQogREVMRUdBVEVfVE9fSU5URVJO
QUxfMVIoc2l6ZUluQnl0ZXMsIGludCwgaW50KQogREVMRUdBVEVfVE9fSU5URVJOQUxfMihyZXNo
YXBlLCBpbnQsIGludCkKK0RFTEVHQVRFX1RPX0lOVEVSTkFMX1IoZ2V0SW50ZXJuYWxGcmFtZWJ1
ZmZlclNpemUsIEludFNpemUpCiAKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoYWN0aXZlVGV4dHVy
ZSwgdW5zaWduZWQgbG9uZykKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzIoYXR0YWNoU2hhZGVyLCBQ
bGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2JqZWN0KQpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgJKHJldmlzaW9uIDc0NTA1KQor
KysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogICAgIGludCBzaXplSW5CeXRlcyhp
bnQgdHlwZSk7CiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAg
ICBJbnRTaXplIGdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCk7CiAKICAgICB2b2lkIHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqKTsKICAgICBi
b29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKSW5kZXg6IExheW91dFRlc3RzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0
NTc2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTAtMTItMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0aWFsaXplIHRvIDAg
Zm9yIHVuZGVmaW5lZCB2YWx1ZXMgaW4gQ29weVRleEltYWdlMkQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUxNDIxCisKKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGQgdGVzdCBjYXNl
cyBmb3IgY29weVRleEltYWdlMkQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0
aWFsaXplZC10ZXN0Lmh0bWw6IERpdHRvLgorCiAyMDEwLTEyLTIzICBLZW5uZXRoIFJ1c3NlbGwg
IDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIENocm9taXVtIGV4cGVjdGF0
aW9ucyB1cGRhdGUuIFN1cHByZXNzIGNyYXNoZXMgc2VlbiBvbgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmluaXRpYWxpemVkLXRlc3Qt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA3NDUwNSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL3VuaW5pdGlhbGl6ZWQtdGVzdC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTMsNyArMywyOSBAQCBUZXN0cyB0byBjaGVjayB1c2VyIGNvZGUgY2Fubm90IGFjY2VzcyB1CiBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIFBBU1MgQ29udGV4dCBjcmVhdGVkLgotUmVhZGlu
ZyBhbiB1bmluaXRpYWxpemVkIHRleHR1cmUgc2hvdWxkIHN1Y2NlZWQgd2l0aCBhbGwgYnl0ZXMg
c2V0IHRvIDAuCisKK1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCB0ZXh0dXJlICh0ZXhJbWFnZTJE
KSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4KK1BBU1MgZ2wuY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExF
VEUKK1BBU1MgQWxsIGRhdGEgaW5pdGlhbGl6ZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAorCitSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlvbiBv
ZiBhIHRleHR1cmUgKGNvcHlUZXhJbWFnZTJEKSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRl
cyBzZXQgdG8gMC4KK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBBbGwgZGF0YSBpbml0
aWFsaXplZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCisK
K1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleElt
YWdlMkQgd2l0aCBuZWdhdGl2ZSB4IGFuZCB5KSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRl
cyBzZXQgdG8gMC4KK1BBU1MgZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZF
UikgaXMgZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAorUEFTUyBnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKSBpcyBnbC5GUkFNRUJVRkZFUl9DT01QTEVURQorUEFTUyBBbGwgZGF0YSBpbml0
aWFsaXplZAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCisK
K1JlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleElt
YWdlMkQgZnJvbSBXZWJHTCBpbnRlcm5hbCBmYm8pIHNob3VsZCBzdWNjZWVkIHdpdGggYWxsIGJ5
dGVzIHNldCB0byAwLgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogCitQQVNTIGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpIGlzIGds
LkZSQU1FQlVGRkVSX0NPTVBMRVRFCiBQQVNTIEFsbCBkYXRhIGluaXRpYWxpemVkCiBQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKIApJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0aWFsaXplZC10ZXN0Lmh0bWwJ
KHJldmlzaW9uIDc0NTA1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pbml0
aWFsaXplZC10ZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTIxLDUyICsyMSw1NyBAQCBpZiAo
IWdsKQogZWxzZQogICB0ZXN0UGFzc2VkKCJDb250ZXh0IGNyZWF0ZWQuIik7CiAKLWRlYnVnKCJS
ZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgdGV4dHVyZSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBi
eXRlcyBzZXQgdG8gMC4iKTsKLQotdmFyIHdpZHRoID0gNTEyOwotdmFyIGhlaWdodCA9IDUxMjsK
LXZhciBicHAgPSA0OwotdmFyIGV4cGVjdGVkRGF0YUxlbmd0aCA9IHdpZHRoKmhlaWdodCpicHA7
Ci0KLXZhciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7Ci1nbC5iaW5kVGV4dHVyZShnbC5URVhU
VVJFXzJELCB0ZXgpOwotZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB3
aWR0aCwgaGVpZ2h0LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKLQotLy8g
dGhpcyBjYW4gYmUgcXVpdGUgdW5kZXRlcm1pbmlzdGljIHNvIHRvIGltcHJvdmUgb2RkcyBvZiBz
ZWVpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdyaXRlIGJpdHMKLS8vIGludG8gdGV4IHRoZW4gZGVs
ZXRlIHRleHR1cmUgdGhlbiByZS1jcmVhdGUgb25lIHdpdGggc2FtZSBjaGFyYWN0ZXJpc3RpY3Mg
KGRyaXZlciB3aWxsIGxpa2VseSByZXVzZSBtZW0pCi0vLyB3aXRoIHRoaXMgdHJpY2sgb24gcjU5
MDQ2IFdlYktpdC9PU1ggSSBnZXQgRkFJTCAxMDAlIG9mIHRoZSB0aW1lIGluc3RlYWQgb2YgfjE1
JSBvZiB0aGUgdGltZS4KLQotdmFyIGJhZERhdGEgPSBuZXcgVWludDhBcnJheShleHBlY3RlZERh
dGFMZW5ndGgpOwotZm9yICh2YXIgaSA9IDA7IGkgPCBiYWREYXRhLmxlbmd0aDsgKytpKQotICAg
IGJhZERhdGFbaV0gPSBpICUgMjU1OwotCi1nbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQs
IDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJhZERh
dGEpOwotZ2wuZmluaXNoKCk7IC8vIG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiB1cGxvYWRlZAorZnVu
Y3Rpb24gc2V0dXBUZXh0dXJlKHRleFdpZHRoLCB0ZXhIZWlnaHQpIHsKKyAgICB2YXIgdGV4dHVy
ZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJE
LCB0ZXh0dXJlKTsKKyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEs
IHRleFdpZHRoLCB0ZXhIZWlnaHQsIDAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwp
OworCisgICAgLy8gdGhpcyBjYW4gYmUgcXVpdGUgdW5kZXRlcm1pbmlzdGljIHNvIHRvIGltcHJv
dmUgb2RkcyBvZiBzZWVpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdyaXRlIGJpdHMKKyAgICAvLyBp
bnRvIHRleCB0aGVuIGRlbGV0ZSB0ZXh0dXJlIHRoZW4gcmUtY3JlYXRlIG9uZSB3aXRoIHNhbWUg
Y2hhcmFjdGVyaXN0aWNzIChkcml2ZXIgd2lsbCBsaWtlbHkgcmV1c2UgbWVtKQorICAgIC8vIHdp
dGggdGhpcyB0cmljayBvbiByNTkwNDYgV2ViS2l0L09TWCBJIGdldCBGQUlMIDEwMCUgb2YgdGhl
IHRpbWUgaW5zdGVhZCBvZiB+MTUlIG9mIHRoZSB0aW1lLgorCisgICAgdmFyIGJhZERhdGEgPSBu
ZXcgVWludDhBcnJheSh0ZXhXaWR0aCAqIHRleEhlaWdodCAqIDQpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgYmFkRGF0YS5sZW5ndGg7ICsraSkKKyAgICAgICAgYmFkRGF0YVtpXSA9IGkgJSAy
NTU7CisKKyAgICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIDAsIDAsIHRleFdp
ZHRoLCB0ZXhIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJhZERhdGEpOworICAg
IGdsLmZpbmlzaCgpOyAvLyBtYWtlIHN1cmUgaXQgaGFzIGJlZW4gdXBsb2FkZWQKKworICAgIGds
LmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7CisgICAgZ2wuZmluaXNoKCk7IC8vIG1ha2Ugc3VyZSBp
dCBoYXMgYmVlbiBkZWxldGVkCisKKyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUo
KTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICByZXR1
cm4gdGV4dHVyZTsKK30KIAotZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOwotZ2wuZmluaXNoKCk7IC8v
IG1ha2Ugc3VyZSBpdCBoYXMgYmVlbiBkZWxldGVkCitmdW5jdGlvbiBjaGVja05vblplcm9QaXhl
bHModGV4dHVyZSwgdGV4V2lkdGgsIHRleEhlaWdodCwgc2tpcFgsIHNraXBZLCBza2lwV2lkdGgs
IHNraXBIZWlnaHQsIHNraXBSLCBza2lwRywgc2tpcEIsIHNraXBBKSB7CisgICAgZ2wuYmluZFRl
eHR1cmUoZ2wuVEVYVFVSRV8yRCwgbnVsbCk7CisgICAgdmFyIGZiID0gZ2wuY3JlYXRlRnJhbWVi
dWZmZXIoKTsKKyAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKKyAg
ICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNI
TUVOVDAsIGdsLlRFWFRVUkVfMkQsIHRleHR1cmUsIDApOworICAgIHNob3VsZEJlKCJnbC5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZFUl9DT01Q
TEVURSIpOwogCi12YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOwotZ2wuYmluZFRleHR1cmUo
Z2wuVEVYVFVSRV8yRCwgdGV4KTsKLWdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wu
UkdCQSwgd2lkdGgsIGhlaWdodCwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7
CisgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheSh0ZXhXaWR0aCAqIHRleEhlaWdodCAqIDQp
OworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgdGV4V2lkdGgsIHRleEhlaWdodCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgZGF0YSk7CiAKLXZhciBmYiA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVy
KCk7Ci1nbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKLWdsLmZyYW1lYnVm
ZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuVEVY
VFVSRV8yRCwgdGV4LCAwKTsKLQotZGF0YSA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0
ICogNCk7Ci1nbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVO
U0lHTkVEX0JZVEUsIGRhdGEpOwotCi1pZiAoZGF0YS5sZW5ndGggIT0gZXhwZWN0ZWREYXRhTGVu
Z3RoKSB7Ci0gICAgdGVzdEZhaWxlZCgiZXhwZWN0ZWQgZGF0YSBsZW5ndGggIiArIGV4cGVjdGVk
RGF0YUxlbmd0aCArICIgYnV0IGdvdCAiICsgZGF0YS5sZW5ndGggKyAiIGluc3RlYWQuIik7Ci19
IGVsc2UgewogICAgIHZhciBrID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGRhdGFbaV0gIT0gMCkgewotICAgICAgICAgICAgaysr
OworICAgIGZvciAodmFyIHkgPSAwOyB5IDwgdGV4SGVpZ2h0OyArK3kpIHsKKyAgICAgICAgZm9y
ICh2YXIgeCA9IDA7IHggPCB0ZXhXaWR0aDsgKyt4KSB7CisgICAgICAgICAgICB2YXIgaW5kZXgg
PSAoeSAqIHRleFdpZHRoICsgeCkgKiA0OworICAgICAgICAgICAgaWYgKHggPj0gc2tpcFggJiYg
eCA8IHNraXBYICsgc2tpcFdpZHRoICYmIHkgPj0gc2tpcFkgJiYgeSA8IHNraXBZICsgc2tpcEhl
aWdodCkgeworICAgICAgICAgICAgICAgIGlmIChkYXRhW2luZGV4XSAhPSBza2lwUiB8fCBkYXRh
W2luZGV4ICsgMV0gIT0gc2tpcEcgfHwgZGF0YVtpbmRleCArIDJdICE9IHNraXBCIHx8IGRhdGFb
aW5kZXggKyAzXSAhPSBza2lwQSkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJu
b24temVybyBwaXhlbCB2YWx1ZXMgYXJlIHdyb25nIik7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChkYXRhW2luZGV4ICsgaV0gIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGsrKzsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KICAg
ICBpZiAoaykgewogICAgICAgICB0ZXN0RmFpbGVkKCJGb3VuZCAiICsgayArICIgbm9uLXplcm8g
Ynl0ZXMiKTsKICAgICB9IGVsc2UgewpAQCAtNzQsNiArNzksNzcgQEAgaWYgKGRhdGEubGVuZ3Ro
ICE9IGV4cGVjdGVkRGF0YUxlbmd0aCkgewogICAgIH0KIH0KIAordmFyIHdpZHRoID0gNTEyOwor
dmFyIGhlaWdodCA9IDUxMjsKKworZGVidWcoIiIpOworZGVidWcoIlJlYWRpbmcgYW4gdW5pbml0
aWFsaXplZCB0ZXh0dXJlICh0ZXhJbWFnZTJEKSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRl
cyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNldHVwVGV4dHVyZSh3aWR0aCwgaGVpZ2h0KTsK
K2dsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwg
MCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CitjaGVja05vblplcm9QaXhlbHMo
dGV4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwKTsKK2dsLmRlbGV0ZVRl
eHR1cmUodGV4KTsKK2dsLmZpbmlzaCgpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJP
Uik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlv
biBvZiBhIHRleHR1cmUgKGNvcHlUZXhJbWFnZTJEKSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBi
eXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNldHVwVGV4dHVyZSh3aWR0aCwgaGVpZ2h0
KTsKK3ZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworZ2wuYmluZEZyYW1lYnVmZmVy
KGdsLkZSQU1FQlVGRkVSLCBmYm8pOwordmFyIHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigp
OworZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHJibyk7Cit2YXIgZmJvV2lk
dGggPSAxNjsKK3ZhciBmYm9IZWlnaHQgPSAxNjsKK2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wu
UkVOREVSQlVGRkVSLCBnbC5SR0JBNCwgZmJvV2lkdGgsIGZib0hlaWdodCk7CitnbC5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGds
LlJFTkRFUkJVRkZFUiwgcmJvKTsKK3Nob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZFUl9DT01QTEVURSIpOworZ2wuY2xlYXJD
b2xvcigxLjAsIDAuMCwgMC4wLCAxLjApOworZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7
CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKK2dsLmNvcHlUZXhJbWFnZTJEKGds
LlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDApOworY2hlY2tO
b25aZXJvUGl4ZWxzKHRleCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgZmJvV2lkdGgsIGZib0hlaWdo
dCwgMjU1LCAwLCAwLCAyNTUpOworZ2wuZGVsZXRlVGV4dHVyZSh0ZXgpOworZ2wuZmluaXNoKCk7
CitnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKKworZGVidWcoIiIpOworZGVidWco
IlJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCBwb3J0aW9uIG9mIGEgdGV4dHVyZSAoY29weVRleElt
YWdlMkQgd2l0aCBuZWdhdGl2ZSB4IGFuZCB5KSBzaG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRl
cyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNldHVwVGV4dHVyZSh3aWR0aCwgaGVpZ2h0KTsK
K3ZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworZ2wuYmluZEZyYW1lYnVmZmVyKGds
LkZSQU1FQlVGRkVSLCBmYm8pOwordmFyIHJibyA9IGdsLmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwor
Z2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIHJibyk7Cit2YXIgZmJvV2lkdGgg
PSAxNjsKK3ZhciBmYm9IZWlnaHQgPSAxNjsKK2dsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVO
REVSQlVGRkVSLCBnbC5SR0JBNCwgZmJvV2lkdGgsIGZib0hlaWdodCk7CitnbC5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlJF
TkRFUkJVRkZFUiwgcmJvKTsKK3Nob3VsZEJlKCJnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGds
LkZSQU1FQlVGRkVSKSIsICJnbC5GUkFNRUJVRkZFUl9DT01QTEVURSIpOworZ2wuY2xlYXJDb2xv
cigxLjAsIDAuMCwgMC4wLCAxLjApOworZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCk7Citn
bEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SKTsKK3ZhciB4ID0gLTg7Cit2YXIgeSA9IC04
OworZ2wuY29weVRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgMCk7CitjaGVja05vblplcm9QaXhlbHModGV4LCB3aWR0aCwgaGVpZ2h0LCAt
eCwgLXksIGZib1dpZHRoLCBmYm9IZWlnaHQsIDI1NSwgMCwgMCwgMjU1KTsKK2dsLmRlbGV0ZVRl
eHR1cmUodGV4KTsKK2dsLmZpbmlzaCgpOworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJP
Uik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJSZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcG9ydGlv
biBvZiBhIHRleHR1cmUgKGNvcHlUZXhJbWFnZTJEIGZyb20gV2ViR0wgaW50ZXJuYWwgZmJvKSBz
aG91bGQgc3VjY2VlZCB3aXRoIGFsbCBieXRlcyBzZXQgdG8gMC4iKTsKKwordmFyIHRleCA9IHNl
dHVwVGV4dHVyZSh3aWR0aCwgaGVpZ2h0KTsKK2dsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJV
RkZFUiwgbnVsbCk7CitnbC5jbGVhckNvbG9yKDAuMCwgMS4wLCAwLjAsIDAuMCk7CitnbC5jbGVh
cihnbC5DT0xPUl9CVUZGRVJfQklUKTsKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1Ip
OworZ2wuY29weVRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgMCwgMCwgd2lk
dGgsIGhlaWdodCwgMCk7CitjaGVja05vblplcm9QaXhlbHModGV4LCB3aWR0aCwgaGVpZ2h0LCAw
LCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQsIDAsIDI1NSwgMCwgMCk7CitnbC5kZWxl
dGVUZXh0dXJlKHRleCk7CitnbC5maW5pc2goKTsKIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9f
RVJST1IpOwogCiAvL1RPRE86IHVuaW5pdGlhbGl6ZWQgdmVydGV4IGFycmF5IGJ1ZmZlcgo=
</data>
<flag name="review"
          id="68703"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>