<?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>196793</bug_id>
          
          <creation_ts>2019-04-10 16:34:47 -0700</creation_ts>
          <short_desc>[Web GPU] Prevent lossy 64-bit to 32-bit narrowing conversions during Metal function calls on 32-bit platforms</short_desc>
          <delta_ts>2019-04-15 14:59:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Justin Fan">justin_fan</reporter>
          <assigned_to name="Justin Fan">justin_fan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1526207</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-10 16:34:47 -0700</bug_when>
    <thetext>[Web GPU] Prevent narrowing conversions during Metal function calls on 32-bit platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526208</commentid>
    <comment_count>1</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-10 16:35:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/49779960&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526231</commentid>
    <comment_count>2</comment_count>
      <attachid>367181</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-10 17:14:22 -0700</bug_when>
    <thetext>Created attachment 367181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526384</commentid>
    <comment_count>3</comment_count>
      <attachid>367181</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-04-11 09:19:05 -0700</bug_when>
    <thetext>Comment on attachment 367181
Patch

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

Looks great.

I think the code would be cleaner if we used local variables and whenever possible put the static_cast to NSUInteger right next to the bounds check.

review- because we should not be using BoundsChecker directly (see comments below).

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm:68
&gt; +    if (!WTF::BoundsChecker&lt;NSUInteger, uint64_t&gt;::inBounds(bufferBinding.offset)) {

BoundsChecker is intended for use within the CheckedArithmetic.h header, not use outside of it. It’s also unfortunate that this hard-codes the type uint64_t, when it would be better to safely deduce the type from its argument. The way to write this is:

    !WTF::isInBounds&lt;NSUInteger&gt;(bufferBinding.offset)

Or we could combine the bounds check with the typecast by using WTF::convertSafely.

The comment saying &quot;MTLBuffer size (NSUInteger) is 32 bits on some platforms&quot; seems slightly too oblique. While remaining brief, I think the comment needs to explain why a check here is both necessary and sufficient. I guess I’d want to see a comment making it clear how the typecast needed below is always safe because of this bounds check. Ideally the structure would have an NSUInteger in it, but that may be impractical if it’s a platform-independent structure.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUBufferMetal.mm:68
&gt; +    // MTLBuffer size (NSUInteger) is 32 bits on some platforms.
&gt; +    if (!WTF::BoundsChecker&lt;NSUInteger, uint64_t&gt;::inBounds(descriptor.size)) {

Same comments here about the comment and use of BoundsChecker (and in other cases below as well, I won’t comment on each one).

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUBufferMetal.mm:97
&gt; +    return adoptRef(*new GPUBuffer(WTFMove(mtlBuffer), static_cast&lt;size_t&gt;(descriptor.size), usage, WTFMove(device)));

Unclear why casting to size_t is necessary, and why it’s safe. Is it safe because size_t is always the same as or bigger than NSUInteger? If so, that’s not obvious.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm:111
&gt; +    auto srcLength = checkedSum&lt;NSUInteger&gt;(size, srcOffset);
&gt; +    auto dstLength = checkedSum&lt;NSUInteger&gt;(size, dstOffset);

I think that this is non-obvious and is worth a brief comment. The fact each of these calls takes care of all three checks, checking both the arguments for whether they fit in NSUInteger and the result for overflow of NSUInteger range as well, is non-obvious; it’s easy to think that a function template that takes NSUInteger would require NSUInteger arguments, but, hooray, it’s better designed than that, and it doesn’t. That’s important because below, we do typecasts that would otherwise be unsafe. The code is correct, but we want it to be obvious as well so we don’t get confused and break it later.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPassEncoderMetal.mm:360
&gt; +    auto totalOffset = checkedSum&lt;NSUInteger&gt;(firstIndexOffset, m_indexBufferOffset);

Same comment as above, although here there are no casts below. But it’s the same confusion about whether it’s a problem that the arguments are not NSUInteger.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:344
&gt; +        // FIXME: Ensure offset &lt; buffer&apos;s stride + format&apos;s data size.

Why does this comment not say &quot;After adding more vertex formats&quot;, since the original comment did before? Was that unnecessary or incorrect?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526385</commentid>
    <comment_count>4</comment_count>
      <attachid>367181</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-04-11 09:19:58 -0700</bug_when>
    <thetext>Comment on attachment 367181
Patch

I guess instead I should say review+, but please change to use isInBounds instead of BoundsChecker. Please consider my other comments as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526410</commentid>
    <comment_count>5</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-11 11:17:12 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; Comment on attachment 367181 [details]
&gt; Patch
&gt; 
&gt; I guess instead I should say review+, but please change to use isInBounds
&gt; instead of BoundsChecker. Please consider my other comments as well.

Thanks, Darin! Super helpful. I definitely wasn&apos;t sure about BoundsChecker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526930</commentid>
    <comment_count>6</comment_count>
      <attachid>367353</attachid>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-12 16:00:43 -0700</bug_when>
    <thetext>Created attachment 367353
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526940</commentid>
    <comment_count>7</comment_count>
      <attachid>367353</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-12 16:40:59 -0700</bug_when>
    <thetext>Comment on attachment 367353
Patch for landing

Clearing flags on attachment: 367353

Committed r244235: &lt;https://trac.webkit.org/changeset/244235&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1526941</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-12 16:41:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527046</commentid>
    <comment_count>9</comment_count>
      <attachid>367353</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-04-13 08:09:42 -0700</bug_when>
    <thetext>Comment on attachment 367353
Patch for landing

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

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:346
&gt; +        NSUInteger attributeOffset = 0;
&gt; +        if (!WTF::convertSafely&lt;NSUInteger, uint64_t&gt;(attributes[i].offset, attributeOffset)) {

One last comment. The great thing about convertSafely is that it can deduce type from its arguments, so this can just be written:

    if (!WTF::convertSafely(attributes[i].offset, attributeOffset)) {

I suggest you take advantage of that by removing the explicit template arguments. Also, no need to initialize to 0, but I suppose that’s a good &quot;initialize everything&quot; habit.

&gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:368
&gt; +        NSUInteger inputStride = 0;
&gt; +        if (!WTF::convertSafely&lt;NSUInteger, uint64_t&gt;(inputs[j].stride, inputStride)) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1527447</commentid>
    <comment_count>10</comment_count>
    <who name="Justin Fan">justin_fan</who>
    <bug_when>2019-04-15 14:59:25 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Comment on attachment 367353 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=367353&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:346
&gt; &gt; +        NSUInteger attributeOffset = 0;
&gt; &gt; +        if (!WTF::convertSafely&lt;NSUInteger, uint64_t&gt;(attributes[i].offset, attributeOffset)) {
&gt; 
&gt; One last comment. The great thing about convertSafely is that it can deduce
&gt; type from its arguments, so this can just be written:
&gt; 
&gt;     if (!WTF::convertSafely(attributes[i].offset, attributeOffset)) {
&gt; 
&gt; I suggest you take advantage of that by removing the explicit template
&gt; arguments. Also, no need to initialize to 0, but I suppose that’s a good
&gt; &quot;initialize everything&quot; habit.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm:368
&gt; &gt; +        NSUInteger inputStride = 0;
&gt; &gt; +        if (!WTF::convertSafely&lt;NSUInteger, uint64_t&gt;(inputs[j].stride, inputStride)) {
&gt; 
&gt; Ditto.

Updated in https://trac.webkit.org/changeset/244297/webkit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367181</attachid>
            <date>2019-04-10 17:14:22 -0700</date>
            <delta_ts>2019-04-12 16:00:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196793-20190410171422.patch</filename>
            <type>text/plain</type>
            <size>17589</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGI1MDczNzNjOGM0ZWEw
ZjcyMzJlYzFjMzBmN2U0NmY3ZTEwYzdiZi4uNzQzOWY0NzM3NjI4NDZhZDJlOTljNzZiZmRjMGE3
YjQ1YWQyYTFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE5LTA0LTEwICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIFByZXZl
bnQgbmFycm93aW5nIGNvbnZlcnNpb25zIGR1cmluZyBNZXRhbCBmdW5jdGlvbiBjYWxscyBvbiAz
Mi1iaXQgcGxhdGZvcm1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTY3OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBPbiAzMi1iaXQgcGxhdGZvcm1zLCBOU1VJbnRlZ2VyIGlzIDMyLWJpdCwgd2hpY2gg
bGltaXRzIGNlcnRhaW4gV2ViIEdQVSBwYXJhbWV0ZXJzLiAKKyAgICAgICAgRW5zdXJlIHRoYXQg
dmFsaWQgcGFyYW1ldGVycyBhcmUgcHJvcGVybHkgY29udmVydGVkIHRvIE5TVUludGVnZXIgZm9y
IE1ldGFsIGNhbGxzLCByZWdhcmRsZXNzIG9mIHBsYXRmb3JtLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVy
OjpieXRlTGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVQmluZEdyb3VwTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjp0cnlHZXRSZXNvdXJj
ZUFzQnVmZmVyQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRCdWZmZXJPbkVuY29kZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5t
bToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6dmFsaWRhdGVCdWZmZXJVc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHUFVCdWZmZXI6OkdQVUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnNl
dFN1YkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21t
YW5kQnVmZmVyTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5kQnVmZmVyOjpj
b3B5QnVmZmVyVG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29tbWFuZEJ1ZmZlcjo6
Y29weUJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5kQnVmZmVy
Ojpjb3B5VGV4dHVyZVRvQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQ
VVJlbmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChXZWJD
b3JlOjp0cnlTZXRJbnB1dFN0YXRlRm9yUGlwZWxpbmVEZXNjcmlwdG9yKToKKwogMjAxOS0wNC0x
MCAgSnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgR1BV
XSBJbmRleGVkIGRyYXdpbmcgYW5kIEdQVUNvbW1hbmRFbmNvZGVyIGNyYXNoIHByZXZlbnRpb24K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaApp
bmRleCA1NWRiZWE5NmNkZGM1N2YzMmRkNGQwZDZhYzU2NzQ4MDNmYmFkNDcyLi5lNDZhOWE0ZDQ0
MmVjYzY5YjQ1YmQyODVhNmY3ZjdhNjIwYjU2ZTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCkBAIC03MSw3ICs3MSw3IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmUHRyPEdQVUJ1ZmZlcj4gdHJ5Q3JlYXRlKFJlZjxHUFVEZXZpY2U+
JiYsIGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0b3ImKTsKIAogICAgIFBsYXRmb3JtQnVmZmVyICpw
bGF0Zm9ybUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1CdWZmZXIuZ2V0KCk7IH0K
LSAgICB1aW50NjRfdCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9
CisgICAgc2l6ZV90IGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0K
ICAgICBib29sIGlzVHJhbnNmZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRh
aW5zKEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6VHJhbnNmZXJTb3VyY2UpOyB9CiAgICAgYm9vbCBp
c1RyYW5zZmVyRGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQ
VUJ1ZmZlclVzYWdlOjpGbGFnczo6VHJhbnNmZXJEZXN0aW5hdGlvbik7IH0KICAgICBib29sIGlz
SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQVUJ1ZmZlclVzYWdlOjpG
bGFnczo6SW5kZXgpOyB9CkBAIC0xMTAsNyArMTEwLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRp
YyBib29sIHZhbGlkYXRlQnVmZmVyVXNhZ2UoY29uc3QgR1BVRGV2aWNlJiwgT3B0aW9uU2V0PEdQ
VUJ1ZmZlclVzYWdlOjpGbGFncz4pOwogCi0gICAgR1BVQnVmZmVyKFBsYXRmb3JtQnVmZmVyU21h
cnRQdHImJiwgdWludDY0X3QsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+LCBSZWY8
R1BVRGV2aWNlPiYmKTsKKyAgICBHUFVCdWZmZXIoUGxhdGZvcm1CdWZmZXJTbWFydFB0ciYmLCBz
aXplX3QsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+LCBSZWY8R1BVRGV2aWNlPiYm
KTsKIAogICAgIEpTQzo6QXJyYXlCdWZmZXIqIHN0YWdpbmdCdWZmZXJGb3JSZWFkKCk7CiAgICAg
SlNDOjpBcnJheUJ1ZmZlciogc3RhZ2luZ0J1ZmZlckZvcldyaXRlKCk7CkBAIC0xMzIsNyArMTMy
LDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UGVuZGluZ01hcHBpbmdDYWxsYmFjaz4gbV9tYXBw
aW5nQ2FsbGJhY2s7CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fbWFwcGluZ0NhbGxiYWNr
VGFzazsKIAotICAgIHVpbnQ2NF90IG1fYnl0ZUxlbmd0aDsKKyAgICBzaXplX3QgbV9ieXRlTGVu
Z3RoOwogICAgIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+IG1fdXNhZ2U7CiAgICAg
dW5zaWduZWQgbV9udW1TY2hlZHVsZWRDb21tYW5kQnVmZmVycyB7IDAgfTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdy
b3VwTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQmluZEdyb3VwTWV0YWwubW0KaW5kZXggN2M0MTExZGM4NzQ5ZDhlZTQxMWVkNWY3ZjQ2MDFl
MDQyOGUzNTdmNS4uZGY5ZGY1ZTNiYWM5Njg2YjNmZTJhOGVjYjQ3ZjM1NjQ3Y2QzNWY0OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJp
bmRHcm91cE1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9jb2NvYS9HUFVCaW5kR3JvdXBNZXRhbC5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAi
TG9nZ2luZy5oIgogI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09i
akNFeGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbXBv
cnQgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw2ICs2NCwx
MSBAQCBzdGF0aWMgT3B0aW9uYWw8R1BVQnVmZmVyQmluZGluZz4gdHJ5R2V0UmVzb3VyY2VBc0J1
ZmZlckJpbmRpbmcoY29uc3QgR1BVQmluZGluZwogICAgICAgICBMT0coV2ViR1BVLCAiJXM6IElu
dmFsaWQgTVRMQnVmZmVyIGluIEdQVUJ1ZmZlckJpbmRpbmchIiwgZnVuY3Rpb25OYW1lKTsKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CisgICAgLy8gTVRMQnVmZmVyIHNpemUg
KE5TVUludGVnZXIpIGlzIDMyIGJpdHMgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgaWYgKCFXVEY6
OkJvdW5kc0NoZWNrZXI8TlNVSW50ZWdlciwgdWludDY0X3Q+OjppbkJvdW5kcyhidWZmZXJCaW5k
aW5nLm9mZnNldCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBCdWZmZXIgb2Zmc2V0IGlz
IHRvbyBsYXJnZSEiLCBmdW5jdGlvbk5hbWUpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIH0KICAgICByZXR1cm4gR1BVQnVmZmVyQmluZGluZyB7IGJ1ZmZlckJpbmRpbmcuYnVm
ZmVyLmNvcHlSZWYoKSwgYnVmZmVyQmluZGluZy5vZmZzZXQsIGJ1ZmZlckJpbmRpbmcuc2l6ZSB9
OwogfQogCkBAIC03MSw3ICs3Nyw3IEBAIHN0YXRpYyB2b2lkIHNldEJ1ZmZlck9uRW5jb2RlcihN
VExBcmd1bWVudEVuY29kZXIgKmFyZ3VtZW50RW5jb2RlciwgY29uc3QgR1BVQnVmCiAgICAgQVNT
RVJUKGFyZ3VtZW50RW5jb2RlciAmJiBidWZmZXJCaW5kaW5nLmJ1ZmZlci0+cGxhdGZvcm1CdWZm
ZXIoKSk7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgW2FyZ3VtZW50
RW5jb2RlciBzZXRCdWZmZXI6YnVmZmVyQmluZGluZy5idWZmZXItPnBsYXRmb3JtQnVmZmVyKCkg
b2Zmc2V0OmJ1ZmZlckJpbmRpbmcub2Zmc2V0IGF0SW5kZXg6aW5kZXhdOworICAgIFthcmd1bWVu
dEVuY29kZXIgc2V0QnVmZmVyOmJ1ZmZlckJpbmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigp
IG9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihidWZmZXJCaW5kaW5nLm9mZnNldCkgYXRJ
bmRleDppbmRleF07CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIH0KICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVC
dWZmZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVCdWZmZXJNZXRhbC5tbQppbmRleCA3N2UzM2YyYzk4MTY1ZmM2MTNlNWE5YWNmOWRlOGQ2
ZjU2MzVjYjMxLi5lNDcxMTZiMmFkNDdkMzM0ZmRmZjYzODIzNzc4NTAwNGI3YTRhMGE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQnVm
ZmVyTWV0YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVUJ1ZmZlck1ldGFsLm1tCkBAIC00NSwxNyArNDUsMTcgQEAgc3RhdGljIGNvbnN0ZXhw
ciBhdXRvIHJlYWRPbmx5RmxhZ3MgPSBPcHRpb25TZXQ8R1BVQnVmZmVyVXNhZ2U6OkZsYWdzPiB7
IEdQVUJ1ZmYKIGJvb2wgR1BVQnVmZmVyOjp2YWxpZGF0ZUJ1ZmZlclVzYWdlKGNvbnN0IEdQVURl
dmljZSYgZGV2aWNlLCBPcHRpb25TZXQ8R1BVQnVmZmVyVXNhZ2U6OkZsYWdzPiB1c2FnZSkKIHsK
ICAgICBpZiAoIWRldmljZS5wbGF0Zm9ybURldmljZSgpKSB7Ci0gICAgICAgIExPRyhXZWJHUFUs
ICJHUFVCdWZmZXI6OmNyZWF0ZSgpOiBJbnZhbGlkIEdQVURldmljZSEiKTsKKyAgICAgICAgTE9H
KFdlYkdQVSwgIkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKCk6IEludmFsaWQgR1BVRGV2aWNlISIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKHVzYWdlLmNvbnRhaW5zQWxs
KHsgR1BVQnVmZmVyVXNhZ2U6OkZsYWdzOjpNYXBXcml0ZSwgR1BVQnVmZmVyVXNhZ2U6OkZsYWdz
OjpNYXBSZWFkIH0pKSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OmNyZWF0ZSgp
OiBCdWZmZXIgY2Fubm90IGhhdmUgYm90aCBNQVBfUkVBRCBhbmQgTUFQX1dSSVRFIHVzYWdlISIp
OworICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjp0cnlDcmVhdGUoKTogQnVmZmVyIGNh
bm5vdCBoYXZlIGJvdGggTUFQX1JFQUQgYW5kIE1BUF9XUklURSB1c2FnZSEiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIGlmICh1c2FnZS5jb250YWluc0FueShyZWFkT25s
eUZsYWdzKSAmJiAodXNhZ2UgJiBHUFVCdWZmZXJVc2FnZTo6RmxhZ3M6OlN0b3JhZ2UpKSB7Ci0g
ICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OmNyZWF0ZSgpOiBCdWZmZXIgY2Fubm90IGhh
dmUgYm90aCBTVE9SQUdFIGFuZCBhIHJlYWQtb25seSB1c2FnZSEiKTsKKyAgICAgICAgTE9HKFdl
YkdQVSwgIkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKCk6IEJ1ZmZlciBjYW5ub3QgaGF2ZSBib3RoIFNU
T1JBR0UgYW5kIGEgcmVhZC1vbmx5IHVzYWdlISIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkBAIC02NCw2ICs2NCwxMiBAQCBib29sIEdQVUJ1ZmZlcjo6dmFsaWRhdGVCdWZmZXJV
c2FnZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgT3B0aW9uU2V0PEdQVUJ1ZmZlcgogCiBSZWZQ
dHI8R1BVQnVmZmVyPiBHUFVCdWZmZXI6OnRyeUNyZWF0ZShSZWY8R1BVRGV2aWNlPiYmIGRldmlj
ZSwgY29uc3QgR1BVQnVmZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKKyAgICAvLyBNVExC
dWZmZXIgc2l6ZSAoTlNVSW50ZWdlcikgaXMgMzIgYml0cyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAg
ICBpZiAoIVdURjo6Qm91bmRzQ2hlY2tlcjxOU1VJbnRlZ2VyLCB1aW50NjRfdD46OmluQm91bmRz
KGRlc2NyaXB0b3Iuc2l6ZSkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6dHJ5
Q3JlYXRlKCk6IEJ1ZmZlciBzaXplIGlzIHRvbyBsYXJnZSEiKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCiAgICAgYXV0byB1c2FnZSA9IE9wdGlvblNldDxHUFVCdWZmZXJVc2Fn
ZTo6RmxhZ3M+Ojpmcm9tUmF3KGRlc2NyaXB0b3IudXNhZ2UpOwogICAgIGlmICghdmFsaWRhdGVC
dWZmZXJVc2FnZShkZXZpY2UuZ2V0KCksIHVzYWdlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CkBAIC03OSwxOSArODUsMTkgQEAgUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVQnVmZmVyOjp0cnlDcmVh
dGUoUmVmPEdQVURldmljZT4mJiBkZXZpY2UsIGNvbnN0IEdQVUJ1ZmZlckQKIAogICAgIEJFR0lO
X0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKIAotICAgIG10bEJ1ZmZlciA9IGFkb3B0TlMoW2Rldmlj
ZS0+cGxhdGZvcm1EZXZpY2UoKSBuZXdCdWZmZXJXaXRoTGVuZ3RoOmRlc2NyaXB0b3Iuc2l6ZSBv
cHRpb25zOnJlc291cmNlT3B0aW9uc10pOworICAgIG10bEJ1ZmZlciA9IGFkb3B0TlMoW2Rldmlj
ZS0+cGxhdGZvcm1EZXZpY2UoKSBuZXdCdWZmZXJXaXRoTGVuZ3RoOnN0YXRpY19jYXN0PE5TVUlu
dGVnZXI+KGRlc2NyaXB0b3Iuc2l6ZSkgb3B0aW9uczpyZXNvdXJjZU9wdGlvbnNdKTsKIAogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBpZiAoIW10bEJ1ZmZlcikgewotICAg
ICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUoKTogVW5hYmxlIHRvIGNyZWF0ZSBN
VExCdWZmZXIhIik7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnRyeUNyZWF0ZSgp
OiBVbmFibGUgdG8gY3JlYXRlIE1UTEJ1ZmZlciEiKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1BVQnVmZmVyKFdURk1vdmUobXRs
QnVmZmVyKSwgZGVzY3JpcHRvci5zaXplLCB1c2FnZSwgV1RGTW92ZShkZXZpY2UpKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgR1BVQnVmZmVyKFdURk1vdmUobXRsQnVmZmVyKSwgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihkZXNjcmlwdG9yLnNpemUpLCB1c2FnZSwgV1RGTW92ZShkZXZpY2UpKSk7
CiB9CiAKLUdQVUJ1ZmZlcjo6R1BVQnVmZmVyKFJldGFpblB0cjxNVExCdWZmZXI+JiYgYnVmZmVy
LCB1aW50NjRfdCBzaXplLCBPcHRpb25TZXQ8R1BVQnVmZmVyVXNhZ2U6OkZsYWdzPiB1c2FnZSwg
UmVmPEdQVURldmljZT4mJiBkZXZpY2UpCitHUFVCdWZmZXI6OkdQVUJ1ZmZlcihSZXRhaW5QdHI8
TVRMQnVmZmVyPiYmIGJ1ZmZlciwgc2l6ZV90IHNpemUsIE9wdGlvblNldDxHUFVCdWZmZXJVc2Fn
ZTo6RmxhZ3M+IHVzYWdlLCBSZWY8R1BVRGV2aWNlPiYmIGRldmljZSkKICAgICA6IG1fcGxhdGZv
cm1CdWZmZXIoV1RGTW92ZShidWZmZXIpKQogICAgICwgbV9kZXZpY2UoV1RGTW92ZShkZXZpY2Up
KQogICAgICwgbV9ieXRlTGVuZ3RoKHNpemUpCkBAIC0xMzYsOCArMTQyLDggQEAgdm9pZCBHUFVC
dWZmZXI6OnNldFN1YkRhdGEodWludDY0X3Qgb2Zmc2V0LCBjb25zdCBKU0M6OkFycmF5QnVmZmVy
JiBkYXRhKQogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0KLSAgICBhdXRvIHN1YkRh
dGFMZW5ndGggPSBjaGVja2VkU3VtPHVpbnQ2NF90PihkYXRhLmJ5dGVMZW5ndGgoKSwgb2Zmc2V0
KTsKKyAgICAvLyBNVExCdWZmZXIgc2l6ZSAoTlNVSW50ZWdlcikgaXMgMzIgYml0cyBvbiBzb21l
IHBsYXRmb3Jtcy4KKyAgICBhdXRvIHN1YkRhdGFMZW5ndGggPSBjaGVja2VkU3VtPE5TVUludGVn
ZXI+KGRhdGEuYnl0ZUxlbmd0aCgpLCBvZmZzZXQpOwogICAgIGlmIChzdWJEYXRhTGVuZ3RoLmhh
c092ZXJmbG93ZWQoKSB8fCBzdWJEYXRhTGVuZ3RoLnVuc2FmZUdldCgpID4gbV9ieXRlTGVuZ3Ro
KSB7CiAgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnNldFN1YkRhdGEoKTogSW52YWxp
ZCBvZmZzZXQgb3IgZGF0YSBzaXplISIpOwogICAgICAgICByZXR1cm47CkBAIC0xNDUsNyArMTUx
LDcgQEAgdm9pZCBHUFVCdWZmZXI6OnNldFN1YkRhdGEodWludDY0X3Qgb2Zmc2V0LCBjb25zdCBK
U0M6OkFycmF5QnVmZmVyJiBkYXRhKQogCiAgICAgaWYgKG1fc3ViRGF0YUJ1ZmZlcnMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKLSAgICAgICAgbV9z
dWJEYXRhQnVmZmVycy5hcHBlbmQoYWRvcHROUyhbbV9wbGF0Zm9ybUJ1ZmZlci5nZXQoKS5kZXZp
Y2UgbmV3QnVmZmVyV2l0aExlbmd0aDptX2J5dGVMZW5ndGggb3B0aW9uczpNVExSZXNvdXJjZUNQ
VUNhY2hlTW9kZURlZmF1bHRDYWNoZV0pKTsKKyAgICAgICAgbV9zdWJEYXRhQnVmZmVycy5hcHBl
bmQoYWRvcHROUyhbbV9wbGF0Zm9ybUJ1ZmZlci5nZXQoKS5kZXZpY2UgbmV3QnVmZmVyV2l0aExl
bmd0aDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX2J5dGVMZW5ndGgpIG9wdGlvbnM6TVRMUmVz
b3VyY2VDUFVDYWNoZU1vZGVEZWZhdWx0Q2FjaGVdKSk7CiAgICAgICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlM7CiAgICAgfQogCkBAIC0xNjMsNyArMTY5LDcgQEAgdm9pZCBHUFVCdWZmZXI6
OnNldFN1YkRhdGEodWludDY0X3Qgb2Zmc2V0LCBjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBkYXRh
KQogICAgIGF1dG8gY29tbWFuZEJ1ZmZlciA9IHJldGFpblB0cihbcXVldWUgY29tbWFuZEJ1ZmZl
cl0pOwogICAgIGF1dG8gYmxpdEVuY29kZXIgPSByZXRhaW5QdHIoW2NvbW1hbmRCdWZmZXIgYmxp
dENvbW1hbmRFbmNvZGVyXSk7CiAKLSAgICBbYmxpdEVuY29kZXIgY29weUZyb21CdWZmZXI6c3Rh
Z2luZ010bEJ1ZmZlci5nZXQoKSBzb3VyY2VPZmZzZXQ6MCB0b0J1ZmZlcjptX3BsYXRmb3JtQnVm
ZmVyLmdldCgpIGRlc3RpbmF0aW9uT2Zmc2V0Om9mZnNldCBzaXplOnN0YWdpbmdNdGxCdWZmZXIu
Z2V0KCkubGVuZ3RoXTsKKyAgICBbYmxpdEVuY29kZXIgY29weUZyb21CdWZmZXI6c3RhZ2luZ010
bEJ1ZmZlci5nZXQoKSBzb3VyY2VPZmZzZXQ6MCB0b0J1ZmZlcjptX3BsYXRmb3JtQnVmZmVyLmdl
dCgpIGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KG9mZnNldCkgc2l6
ZTpzdGFnaW5nTXRsQnVmZmVyLmdldCgpLmxlbmd0aF07CiAgICAgW2JsaXRFbmNvZGVyIGVuZEVu
Y29kaW5nXTsKIAogICAgIGlmIChpc01hcHBhYmxlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tbWFuZEJ1ZmZlck1ldGFsLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRC
dWZmZXJNZXRhbC5tbQppbmRleCA3ZWJkNWJmMjY4NGRkOTljYTYwM2Q2ODRjNTE4NmNiMGM2ODQx
ODUwLi4zM2ViYjRlYWNhNGFkOGFiNTliOGUyMTQyNzg0Mjk5NjBlMzg2MDM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tbWFuZEJ1
ZmZlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVDb21tYW5kQnVmZmVyTWV0YWwubW0KQEAgLTEwNyw4ICsxMDcsOCBAQCB2b2lkIEdQ
VUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcihSZWY8R1BVQnVmZmVyPiYmIHNyYywg
dWludDY0X3Qgc3JjT2ZmcwogICAgIH0KICNlbmRpZgogCi0gICAgYXV0byBzcmNMZW5ndGggPSBj
aGVja2VkU3VtPHVpbnQ2NF90PihzaXplLCBzcmNPZmZzZXQpOwotICAgIGF1dG8gZHN0TGVuZ3Ro
ID0gY2hlY2tlZFN1bTx1aW50NjRfdD4oc2l6ZSwgZHN0T2Zmc2V0KTsKKyAgICBhdXRvIHNyY0xl
bmd0aCA9IGNoZWNrZWRTdW08TlNVSW50ZWdlcj4oc2l6ZSwgc3JjT2Zmc2V0KTsKKyAgICBhdXRv
IGRzdExlbmd0aCA9IGNoZWNrZWRTdW08TlNVSW50ZWdlcj4oc2l6ZSwgZHN0T2Zmc2V0KTsKICAg
ICBpZiAoc3JjTGVuZ3RoLmhhc092ZXJmbG93ZWQoKSB8fCBkc3RMZW5ndGguaGFzT3ZlcmZsb3dl
ZCgpCiAgICAgICAgIHx8IHNyY0xlbmd0aC51bnNhZmVHZXQoKSA+IHNyYy0+Ynl0ZUxlbmd0aCgp
IHx8IGRzdExlbmd0aC51bnNhZmVHZXQoKSA+IGRzdC0+Ynl0ZUxlbmd0aCgpKSB7CiAgICAgICAg
IExPRyhXZWJHUFUsICJHUFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoKTogSW52
YWxpZCBvZmZzZXQgb3IgY29weSBzaXplISIpOwpAQCAtMTE5LDEwICsxMTksMTAgQEAgdm9pZCBH
UFVDb21tYW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9CdWZmZXIoUmVmPEdQVUJ1ZmZlcj4mJiBzcmMs
IHVpbnQ2NF90IHNyY09mZnMKIAogICAgIFtibGl0RW5jb2RlcigpCiAgICAgICAgIGNvcHlGcm9t
QnVmZmVyOnNyYy0+cGxhdGZvcm1CdWZmZXIoKQotICAgICAgICBzb3VyY2VPZmZzZXQ6c3JjT2Zm
c2V0CisgICAgICAgIHNvdXJjZU9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzcmNPZmZz
ZXQpCiAgICAgICAgIHRvQnVmZmVyOmRzdC0+cGxhdGZvcm1CdWZmZXIoKQotICAgICAgICBkZXN0
aW5hdGlvbk9mZnNldDpkc3RPZmZzZXQKLSAgICAgICAgc2l6ZTpzaXplXTsKKyAgICAgICAgZGVz
dGluYXRpb25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZHN0T2Zmc2V0KQorICAgICAg
ICBzaXplOnN0YXRpY19jYXN0PE5TVUludGVnZXI+KHNpemUpXTsKIAogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKQEAgLTEzNyw2ICsxMzcsMTIgQEAgdm9pZCBHUFVDb21tYW5kQnVm
ZmVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKEdQVUJ1ZmZlckNvcHlWaWV3JiYgc3JjQnVmZmVyLCBH
UFVUZXgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIE1UTEJ1ZmZlciBzaXplIChO
U1VJbnRlZ2VyKSBpcyAzMiBiaXRzIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgIGlmICghV1RGOjpC
b3VuZHNDaGVja2VyPE5TVUludGVnZXIsIHVpbnQ2NF90Pjo6aW5Cb3VuZHMoc3JjQnVmZmVyLm9m
ZnNldCkpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZm
ZXJUb1RleHR1cmUoKTogU291cmNlIG9mZnNldCBpcyB0b28gbGFyZ2UhIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICAvLyBGSVhNRTogQWRkIE1ldGFsIHZhbGlkYXRpb24uCiAKICAg
ICAvLyBHUFVCdWZmZXJDb3B5Vmlldzo6b2Zmc2V0OiBUaGUgbG9jYXRpb24gbXVzdCBiZSBhbGln
bmVkIHRvIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJlJ3MgcGl4ZWwgZm9ybWF0
LiBUaGUgdmFsdWUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJl
J3MgcGl4ZWwgc2l6ZSwgaW4gYnl0ZXMuCkBAIC0xNTMsNyArMTU5LDcgQEAgdm9pZCBHUFVDb21t
YW5kQnVmZmVyOjpjb3B5QnVmZmVyVG9UZXh0dXJlKEdQVUJ1ZmZlckNvcHlWaWV3JiYgc3JjQnVm
ZmVyLCBHUFVUZXgKIAogICAgIFtibGl0RW5jb2RlcigpCiAgICAgICAgIGNvcHlGcm9tQnVmZmVy
OnNyY0J1ZmZlci5idWZmZXItPnBsYXRmb3JtQnVmZmVyKCkKLSAgICAgICAgc291cmNlT2Zmc2V0
OnNyY0J1ZmZlci5vZmZzZXQKKyAgICAgICAgc291cmNlT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUlu
dGVnZXI+KHNyY0J1ZmZlci5vZmZzZXQpCiAgICAgICAgIHNvdXJjZUJ5dGVzUGVyUm93OnNyY0J1
ZmZlci5yb3dQaXRjaAogICAgICAgICBzb3VyY2VCeXRlc1BlckltYWdlOnNyY0J1ZmZlci5pbWFn
ZUhlaWdodAogICAgICAgICBzb3VyY2VTaXplOk1UTFNpemVNYWtlKHNpemUud2lkdGgsIHNpemUu
aGVpZ2h0LCBzaXplLmRlcHRoKQpAQCAtMTc0LDYgKzE4MCwxMSBAQCB2b2lkIEdQVUNvbW1hbmRC
dWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoR1BVVGV4dHVyZUNvcHlWaWV3JiYgc3JjVGV4dHVy
ZSwgR1BVQgogICAgICAgICBMT0coV2ViR1BVLCAiR1BVQ29tbWFuZEJ1ZmZlcjo6Y29weVRleHR1
cmVUb0J1ZmZlcigpOiBJbnZhbGlkIG9wZXJhdGlvbiEiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KKyAgICAvLyBNVExCdWZmZXIgc2l6ZSAoTlNVSW50ZWdlcikgaXMgMzIgYml0cyBvbiBzb21l
IHBsYXRmb3Jtcy4KKyAgICBpZiAoIVdURjo6Qm91bmRzQ2hlY2tlcjxOU1VJbnRlZ2VyLCB1aW50
NjRfdD46OmluQm91bmRzKGRzdEJ1ZmZlci5vZmZzZXQpKSB7CisgICAgICAgIExPRyhXZWJHUFUs
ICJHUFVDb21tYW5kQnVmZmVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKCk6IERlc3RpbmF0aW9uIG9m
ZnNldCBpcyB0b28gbGFyZ2UhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICAvLyBG
SVhNRTogQWRkIE1ldGFsIHZhbGlkYXRpb24/CiAKQEAgLTE4Niw3ICsxOTcsNyBAQCB2b2lkIEdQ
VUNvbW1hbmRCdWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoR1BVVGV4dHVyZUNvcHlWaWV3JiYg
c3JjVGV4dHVyZSwgR1BVQgogICAgICAgICBzb3VyY2VPcmlnaW46TVRMT3JpZ2luTWFrZShzcmNU
ZXh0dXJlLm9yaWdpbi54LCBzcmNUZXh0dXJlLm9yaWdpbi55LCBzcmNUZXh0dXJlLm9yaWdpbi56
KQogICAgICAgICBzb3VyY2VTaXplOk1UTFNpemVNYWtlKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0
LCBzaXplLmRlcHRoKQogICAgICAgICB0b0J1ZmZlcjpkc3RCdWZmZXIuYnVmZmVyLT5wbGF0Zm9y
bUJ1ZmZlcigpCi0gICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0OmRzdEJ1ZmZlci5vZmZzZXQKKyAg
ICAgICAgZGVzdGluYXRpb25PZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4oZHN0QnVmZmVy
Lm9mZnNldCkKICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlclJvdzpkc3RCdWZmZXIucm93UGl0
Y2gKICAgICAgICAgZGVzdGluYXRpb25CeXRlc1BlckltYWdlOmRzdEJ1ZmZlci5pbWFnZUhlaWdo
dF07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0YWwubW0KaW5kZXgg
NGMxZDYwOWJlYzJmOTQxZjFmMWIxZTc5MjQ0NDZjYWVhNTg5YzkzOC4uZmU1ZWFmOTdmNmUxOTkx
YjRmYzhiYzQ3OTlhZmNlZWM3ZWYxODUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0YWwubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBh
c3NFbmNvZGVyTWV0YWwubW0KQEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIEdQVVJlbmRlclBhc3NF
bmNvZGVyOjpkcmF3SW5kZXhlZCh1bnNpZ25lZCBpbmRleENvdW50LCB1bnNpZ25lZCBpbnN0YW5j
ZUNvdQogCiAgICAgYXV0byBpbmRleEJ5dGVTaXplID0gKG1fcGlwZWxpbmUtPmluZGV4Rm9ybWF0
KCkgPT0gR1BVSW5kZXhGb3JtYXQ6OlVpbnQxNikgPyBzaXplb2YodWludDE2X3QpIDogc2l6ZW9m
KHVpbnQzMl90KTsKICAgICB1aW50NjRfdCBmaXJzdEluZGV4T2Zmc2V0ID0gZmlyc3RJbmRleCAq
IGluZGV4Qnl0ZVNpemU7Ci0gICAgYXV0byB0b3RhbE9mZnNldCA9IGNoZWNrZWRTdW08dWludDY0
X3Q+KGZpcnN0SW5kZXhPZmZzZXQsIG1faW5kZXhCdWZmZXJPZmZzZXQpOworICAgIGF1dG8gdG90
YWxPZmZzZXQgPSBjaGVja2VkU3VtPE5TVUludGVnZXI+KGZpcnN0SW5kZXhPZmZzZXQsIG1faW5k
ZXhCdWZmZXJPZmZzZXQpOwogICAgIGlmICh0b3RhbE9mZnNldC5oYXNPdmVyZmxvd2VkKCkgfHwg
dG90YWxPZmZzZXQgPj0gbV9pbmRleEJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKSB7CiAgICAgICAgIExP
RyhXZWJHUFUsICIlczogSW52YWxpZCBmaXJzdEluZGV4ISIsIGZ1bmN0aW9uTmFtZSk7CiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KaW5kZXgg
MGRmMWRlZjcxNDBmZTQ2OWFiOGE0N2VlM2JhNTZmMThmYzE2YTNiMi4uMzhmMmUxYjFiMGYyMWEw
MmJkMjU1MWQ5ZTA2NGMzNDU1ZDE4Nzk1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVs
aW5lTWV0YWwubW0KQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgIldITFNMVmVydGV4QnVmZmVy
SW5kZXhDYWxjdWxhdG9yLmgiCiAjaW1wb3J0IDxNZXRhbC9NZXRhbC5oPgogI2ltcG9ydCA8d3Rm
L0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KKyNpbXBvcnQgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5o
PgogI2ltcG9ydCA8d3RmL09wdGlvblNldC5oPgogI2ltcG9ydCA8d3RmL09wdGlvbmFsLmg+CiAK
QEAgLTMzOSwxMCArMzQwLDE2IEBAIHN0YXRpYyBib29sIHRyeVNldElucHV0U3RhdGVGb3JQaXBl
bGluZURlc2NyaXB0b3IoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lCiAgICAgICAgICAg
ICBMT0coV2ViR1BVLCAiJXM6IEludmFsaWQgaW5wdXRTbG90ICV1IGZvciB2ZXJ0ZXggYXR0cmli
dXRlICV1ISIsIGZ1bmN0aW9uTmFtZSwgYXR0cmlidXRlc1tpXS5pbnB1dFNsb3QsIGxvY2F0aW9u
KTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAgICAgICAvLyBNVExC
dWZmZXIgc2l6ZSAoTlNVSW50ZWdlcikgaXMgMzIgYml0cyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAg
ICAgICAgLy8gRklYTUU6IEVuc3VyZSBvZmZzZXQgPCBidWZmZXIncyBzdHJpZGUgKyBmb3JtYXQn
cyBkYXRhIHNpemUuCisgICAgICAgIGlmICghV1RGOjpCb3VuZHNDaGVja2VyPE5TVUludGVnZXIs
IHVpbnQ2NF90Pjo6aW5Cb3VuZHMoYXR0cmlidXRlc1tpXS5vZmZzZXQpKSB7CisgICAgICAgICAg
ICBMT0coV2ViR1BVLCAiJXM6IEJ1ZmZlciBvZmZzZXQgZm9yIHZlcnRleCBhdHRyaWJ1dGUgJXUg
aXMgdG9vIGxhcmdlISIsIGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24pOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAgYXV0byBtdGxBdHRyaWJ1dGVEZXNjID0g
cmV0YWluUHRyKFthdHRyaWJ1dGVBcnJheSBvYmplY3RBdEluZGV4ZWRTdWJzY3JpcHQ6bG9jYXRp
b25dKTsKICAgICAgICAgW210bEF0dHJpYnV0ZURlc2Mgc2V0Rm9ybWF0Om10bFZlcnRleEZvcm1h
dEZvckdQVVZlcnRleEZvcm1hdChhdHRyaWJ1dGVzW2ldLmZvcm1hdCldOwotICAgICAgICBbbXRs
QXR0cmlidXRlRGVzYyBzZXRPZmZzZXQ6YXR0cmlidXRlc1tpXS5vZmZzZXRdOyAvLyBGSVhNRTog
QWZ0ZXIgYWRkaW5nIG1vcmUgdmVydGV4IGZvcm1hdHMsIGVuc3VyZSBvZmZzZXQgPCBidWZmZXIn
cyBzdHJpZGUgKyBmb3JtYXQncyBkYXRhIHNpemUuCisgICAgICAgIFttdGxBdHRyaWJ1dGVEZXNj
IHNldE9mZnNldDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihhdHRyaWJ1dGVzW2ldLm9mZnNldCld
OwogICAgICAgICBbbXRsQXR0cmlidXRlRGVzYyBzZXRCdWZmZXJJbmRleDpXSExTTDo6TWV0YWw6
OmNhbGN1bGF0ZVZlcnRleEJ1ZmZlckluZGV4KGF0dHJpYnV0ZXNbaV0uaW5wdXRTbG90KV07CiAg
ICAgfQogCkBAIC0zNTYsMTEgKzM2MywxNSBAQCBzdGF0aWMgYm9vbCB0cnlTZXRJbnB1dFN0YXRl
Rm9yUGlwZWxpbmVEZXNjcmlwdG9yKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZQogICAg
ICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJbnZhbGlkIGlucHV0U2xvdCAlZCBmb3IgdmVydGV4
IGJ1ZmZlciEiLCBmdW5jdGlvbk5hbWUsIHNsb3QpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgICAgIGlmICghV1RGOjpCb3VuZHNDaGVja2VyPE5TVUludGVnZXIs
IHVpbnQ2NF90Pjo6aW5Cb3VuZHMoaW5wdXRzW2pdLnN0cmlkZSkpIHsKKyAgICAgICAgICAgIExP
RyhXZWJHUFUsICIlczogU3RyaWRlIGZvciB2ZXJ0ZXggYnVmZmVyIHNsb3QgJWQgaXMgdG9vIGxh
cmdlISIsIGZ1bmN0aW9uTmFtZSwgc2xvdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KIAogICAgICAgICBhdXRvIGNvbnZlcnRlZFNsb3QgPSBXSExTTDo6TWV0YWw6OmNh
bGN1bGF0ZVZlcnRleEJ1ZmZlckluZGV4KHNsb3QpOwogICAgICAgICBhdXRvIG10bExheW91dERl
c2MgPSByZXRhaW5QdHIoW2xheW91dEFycmF5IG9iamVjdEF0SW5kZXhlZFN1YnNjcmlwdDpjb252
ZXJ0ZWRTbG90XSk7CiAgICAgICAgIFttdGxMYXlvdXREZXNjIHNldFN0ZXBGdW5jdGlvbjptdGxT
dGVwRnVuY3Rpb25Gb3JHUFVJbnB1dFN0ZXBNb2RlKGlucHV0c1tqXS5zdGVwTW9kZSldOwotICAg
ICAgICBbbXRsTGF5b3V0RGVzYyBzZXRTdHJpZGU6aW5wdXRzW2pdLnN0cmlkZV07CisgICAgICAg
IFttdGxMYXlvdXREZXNjIHNldFN0cmlkZTpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihpbnB1dHNb
al0uc3RyaWRlKV07CiAgICAgfQogCiAgICAgW210bERlc2NyaXB0b3Igc2V0VmVydGV4RGVzY3Jp
cHRvcjptdGxWZXJ0ZXhEZXNjcmlwdG9yLmdldCgpXTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>367353</attachid>
            <date>2019-04-12 16:00:43 -0700</date>
            <delta_ts>2019-04-12 16:40:59 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-196793-20190412160042.patch</filename>
            <type>text/plain</type>
            <size>18159</size>
            <attacher name="Justin Fan">justin_fan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ0MTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGI1MDczNzNjOGM0ZWEw
ZjcyMzJlYzFjMzBmN2U0NmY3ZTEwYzdiZi4uZjczYTcwNzc4MmQ5NDc3ODdjZjVmMzYxODFiMDM3
OTc2MDk0NGY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE5LTA0LTEwICBKdXN0
aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW1dlYiBHUFVdIFByZXZl
bnQgbmFycm93aW5nIGNvbnZlcnNpb25zIGR1cmluZyBNZXRhbCBmdW5jdGlvbiBjYWxscyBvbiAz
Mi1iaXQgcGxhdGZvcm1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTY3OTMKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAg
ICAgICBPbiAzMi1iaXQgcGxhdGZvcm1zLCBOU1VJbnRlZ2VyIGlzIDMyLWJpdCwgd2hpY2ggbGlt
aXRzIGNlcnRhaW4gV2ViIEdQVSBwYXJhbWV0ZXJzLiAKKyAgICAgICAgRW5zdXJlIHRoYXQgdmFs
aWQgcGFyYW1ldGVycyBhcmUgcHJvcGVybHkgY29udmVydGVkIHRvIE5TVUludGVnZXIgZm9yIE1l
dGFsIGNhbGxzLCByZWdhcmRsZXNzIG9mIHBsYXRmb3JtLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6R1BVQnVmZmVyOjpi
eXRlTGVuZ3RoIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2Ev
R1BVQmluZEdyb3VwTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjp0cnlHZXRSZXNvdXJjZUFz
QnVmZmVyQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRCdWZmZXJPbkVuY29kZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbToK
KyAgICAgICAgKFdlYkNvcmU6OkdQVUJ1ZmZlcjo6dmFsaWRhdGVCdWZmZXJVc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnRyeUNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
UFVCdWZmZXI6OkdQVUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHUFVCdWZmZXI6OnNldFN1
YkRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21tYW5k
QnVmZmVyTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5kQnVmZmVyOjpjb3B5
QnVmZmVyVG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1BVQ29tbWFuZEJ1ZmZlcjo6Y29w
eUJ1ZmZlclRvVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVDb21tYW5kQnVmZmVyOjpj
b3B5VGV4dHVyZVRvQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdQVVJl
bmRlclBhc3NFbmNvZGVyOjpkcmF3SW5kZXhlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW06CisgICAgICAgIChXZWJDb3Jl
Ojp0cnlTZXRJbnB1dFN0YXRlRm9yUGlwZWxpbmVEZXNjcmlwdG9yKToKKwogMjAxOS0wNC0xMCAg
SnVzdGluIEZhbiAgPGp1c3Rpbl9mYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWIgR1BVXSBJ
bmRleGVkIGRyYXdpbmcgYW5kIEdQVUNvbW1hbmRFbmNvZGVyIGNyYXNoIHByZXZlbnRpb24KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVCdWZmZXIuaAppbmRl
eCA1NWRiZWE5NmNkZGM1N2YzMmRkNGQwZDZhYzU2NzQ4MDNmYmFkNDcyLi5lNDZhOWE0ZDQ0MmVj
YzY5YjQ1YmQyODVhNmY3ZjdhNjIwYjU2ZTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUJ1ZmZlci5oCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmUHRyPEdQVUJ1ZmZlcj4gdHJ5Q3JlYXRlKFJlZjxHUFVEZXZpY2U+JiYs
IGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0b3ImKTsKIAogICAgIFBsYXRmb3JtQnVmZmVyICpwbGF0
Zm9ybUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1CdWZmZXIuZ2V0KCk7IH0KLSAg
ICB1aW50NjRfdCBieXRlTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlTGVuZ3RoOyB9Cisg
ICAgc2l6ZV90IGJ5dGVMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2J5dGVMZW5ndGg7IH0KICAg
ICBib29sIGlzVHJhbnNmZXJTb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5z
KEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6VHJhbnNmZXJTb3VyY2UpOyB9CiAgICAgYm9vbCBpc1Ry
YW5zZmVyRGVzdGluYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQVUJ1
ZmZlclVzYWdlOjpGbGFnczo6VHJhbnNmZXJEZXN0aW5hdGlvbik7IH0KICAgICBib29sIGlzSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX3VzYWdlLmNvbnRhaW5zKEdQVUJ1ZmZlclVzYWdlOjpGbGFn
czo6SW5kZXgpOyB9CkBAIC0xMTAsNyArMTEwLDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBi
b29sIHZhbGlkYXRlQnVmZmVyVXNhZ2UoY29uc3QgR1BVRGV2aWNlJiwgT3B0aW9uU2V0PEdQVUJ1
ZmZlclVzYWdlOjpGbGFncz4pOwogCi0gICAgR1BVQnVmZmVyKFBsYXRmb3JtQnVmZmVyU21hcnRQ
dHImJiwgdWludDY0X3QsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+LCBSZWY8R1BV
RGV2aWNlPiYmKTsKKyAgICBHUFVCdWZmZXIoUGxhdGZvcm1CdWZmZXJTbWFydFB0ciYmLCBzaXpl
X3QsIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+LCBSZWY8R1BVRGV2aWNlPiYmKTsK
IAogICAgIEpTQzo6QXJyYXlCdWZmZXIqIHN0YWdpbmdCdWZmZXJGb3JSZWFkKCk7CiAgICAgSlND
OjpBcnJheUJ1ZmZlciogc3RhZ2luZ0J1ZmZlckZvcldyaXRlKCk7CkBAIC0xMzIsNyArMTMyLDcg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8UGVuZGluZ01hcHBpbmdDYWxsYmFjaz4gbV9tYXBwaW5n
Q2FsbGJhY2s7CiAgICAgRGVmZXJyYWJsZVRhc2s8VGltZXI+IG1fbWFwcGluZ0NhbGxiYWNrVGFz
azsKIAotICAgIHVpbnQ2NF90IG1fYnl0ZUxlbmd0aDsKKyAgICBzaXplX3QgbV9ieXRlTGVuZ3Ro
OwogICAgIE9wdGlvblNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+IG1fdXNhZ2U7CiAgICAgdW5z
aWduZWQgbV9udW1TY2hlZHVsZWRDb21tYW5kQnVmZmVycyB7IDAgfTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQmluZEdyb3Vw
TWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
QmluZEdyb3VwTWV0YWwubW0KaW5kZXggN2M0MTExZGM4NzQ5ZDhlZTQxMWVkNWY3ZjQ2MDFlMDQy
OGUzNTdmNS4uZGEyYzIwZDAzZWY3MWNiMjZkN2Q2YzExNzEyYzU2MmZlYzFkY2Q0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJpbmRH
cm91cE1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVCaW5kR3JvdXBNZXRhbC5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiTG9n
Z2luZy5oIgogI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja09iakNF
eGNlcHRpb25zLmg+CisjaW1wb3J0IDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KICNpbXBvcnQg
PHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC02Myw2ICs2NCwxMSBA
QCBzdGF0aWMgT3B0aW9uYWw8R1BVQnVmZmVyQmluZGluZz4gdHJ5R2V0UmVzb3VyY2VBc0J1ZmZl
ckJpbmRpbmcoY29uc3QgR1BVQmluZGluZwogICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEludmFs
aWQgTVRMQnVmZmVyIGluIEdQVUJ1ZmZlckJpbmRpbmchIiwgZnVuY3Rpb25OYW1lKTsKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CisgICAgLy8gTVRMQnVmZmVyIHNpemUgKE5T
VUludGVnZXIpIGlzIDMyIGJpdHMgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgaWYgKCFXVEY6Omlz
SW5Cb3VuZHM8TlNVSW50ZWdlcj4oYnVmZmVyQmluZGluZy5vZmZzZXQpKSB7CisgICAgICAgIExP
RyhXZWJHUFUsICIlczogQnVmZmVyIG9mZnNldCBpcyB0b28gbGFyZ2UhIiwgZnVuY3Rpb25OYW1l
KTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CiAgICAgcmV0dXJuIEdQVUJ1
ZmZlckJpbmRpbmcgeyBidWZmZXJCaW5kaW5nLmJ1ZmZlci5jb3B5UmVmKCksIGJ1ZmZlckJpbmRp
bmcub2Zmc2V0LCBidWZmZXJCaW5kaW5nLnNpemUgfTsKIH0KIApAQCAtNzEsNyArNzcsOCBAQCBz
dGF0aWMgdm9pZCBzZXRCdWZmZXJPbkVuY29kZXIoTVRMQXJndW1lbnRFbmNvZGVyICphcmd1bWVu
dEVuY29kZXIsIGNvbnN0IEdQVUJ1ZgogICAgIEFTU0VSVChhcmd1bWVudEVuY29kZXIgJiYgYnVm
ZmVyQmluZGluZy5idWZmZXItPnBsYXRmb3JtQnVmZmVyKCkpOwogCiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwotICAgIFthcmd1bWVudEVuY29kZXIgc2V0QnVmZmVyOmJ1ZmZlckJp
bmRpbmcuYnVmZmVyLT5wbGF0Zm9ybUJ1ZmZlcigpIG9mZnNldDpidWZmZXJCaW5kaW5nLm9mZnNl
dCBhdEluZGV4OmluZGV4XTsKKyAgICAvLyBCb3VuZHMgY2hlY2sgd2hlbiBjb252ZXJ0aW5nIEdQ
VUJ1ZmZlckJpbmRpbmcgZW5zdXJlcyB0aGF0IE5TVUludGVnZXIgY2FzdCBvZiB1aW50NjRfdCBv
ZmZzZXQgaXMgc2FmZS4KKyAgICBbYXJndW1lbnRFbmNvZGVyIHNldEJ1ZmZlcjpidWZmZXJCaW5k
aW5nLmJ1ZmZlci0+cGxhdGZvcm1CdWZmZXIoKSBvZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdl
cj4oYnVmZmVyQmluZGluZy5vZmZzZXQpIGF0SW5kZXg6aW5kZXhdOwogICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQnVmZmVyTWV0YWwubW0KaW5kZXggNzdl
MzNmMmM5ODE2NWZjNjEzZTVhOWFjZjlkZThkNmY1NjM1Y2IzMS4uMmE1OTRiOTk4MmRlNzE0MDJm
NTc4OTUxZTI4MTEyYTU4YmFlODU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUJ1ZmZlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVCdWZmZXJNZXRhbC5tbQpAQCAtNDUs
MTcgKzQ1LDE3IEBAIHN0YXRpYyBjb25zdGV4cHIgYXV0byByZWFkT25seUZsYWdzID0gT3B0aW9u
U2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFncz4geyBHUFVCdWZmCiBib29sIEdQVUJ1ZmZlcjo6dmFs
aWRhdGVCdWZmZXJVc2FnZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgT3B0aW9uU2V0PEdQVUJ1
ZmZlclVzYWdlOjpGbGFncz4gdXNhZ2UpCiB7CiAgICAgaWYgKCFkZXZpY2UucGxhdGZvcm1EZXZp
Y2UoKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUoKTogSW52YWxp
ZCBHUFVEZXZpY2UhIik7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnRyeUNyZWF0
ZSgpOiBJbnZhbGlkIEdQVURldmljZSEiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAogICAgIGlmICh1c2FnZS5jb250YWluc0FsbCh7IEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6TWFw
V3JpdGUsIEdQVUJ1ZmZlclVzYWdlOjpGbGFnczo6TWFwUmVhZCB9KSkgewotICAgICAgICBMT0co
V2ViR1BVLCAiR1BVQnVmZmVyOjpjcmVhdGUoKTogQnVmZmVyIGNhbm5vdCBoYXZlIGJvdGggTUFQ
X1JFQUQgYW5kIE1BUF9XUklURSB1c2FnZSEiKTsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1
ZmZlcjo6dHJ5Q3JlYXRlKCk6IEJ1ZmZlciBjYW5ub3QgaGF2ZSBib3RoIE1BUF9SRUFEIGFuZCBN
QVBfV1JJVEUgdXNhZ2UhIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBp
ZiAodXNhZ2UuY29udGFpbnNBbnkocmVhZE9ubHlGbGFncykgJiYgKHVzYWdlICYgR1BVQnVmZmVy
VXNhZ2U6OkZsYWdzOjpTdG9yYWdlKSkgewotICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVy
OjpjcmVhdGUoKTogQnVmZmVyIGNhbm5vdCBoYXZlIGJvdGggU1RPUkFHRSBhbmQgYSByZWFkLW9u
bHkgdXNhZ2UhIik7CisgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnRyeUNyZWF0ZSgp
OiBCdWZmZXIgY2Fubm90IGhhdmUgYm90aCBTVE9SQUdFIGFuZCBhIHJlYWQtb25seSB1c2FnZSEi
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjQsNiArNjQsMTMgQEAgYm9v
bCBHUFVCdWZmZXI6OnZhbGlkYXRlQnVmZmVyVXNhZ2UoY29uc3QgR1BVRGV2aWNlJiBkZXZpY2Us
IE9wdGlvblNldDxHUFVCdWZmZXIKIAogUmVmUHRyPEdQVUJ1ZmZlcj4gR1BVQnVmZmVyOjp0cnlD
cmVhdGUoUmVmPEdQVURldmljZT4mJiBkZXZpY2UsIGNvbnN0IEdQVUJ1ZmZlckRlc2NyaXB0b3Im
IGRlc2NyaXB0b3IpCiB7CisgICAgLy8gTVRMQnVmZmVyIHNpemUgKE5TVUludGVnZXIpIGlzIDMy
IGJpdHMgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgTlNVSW50ZWdlciBzaXplID0gMDsKKyAgICBp
ZiAoIVdURjo6Y29udmVydFNhZmVseTxOU1VJbnRlZ2VyLCB1aW50NjRfdD4oZGVzY3JpcHRvci5z
aXplLCBzaXplKSkgeworICAgICAgICBMT0coV2ViR1BVLCAiR1BVQnVmZmVyOjp0cnlDcmVhdGUo
KTogQnVmZmVyIHNpemUgaXMgdG9vIGxhcmdlISIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKICAgICBhdXRvIHVzYWdlID0gT3B0aW9uU2V0PEdQVUJ1ZmZlclVzYWdlOjpGbGFn
cz46OmZyb21SYXcoZGVzY3JpcHRvci51c2FnZSk7CiAgICAgaWYgKCF2YWxpZGF0ZUJ1ZmZlclVz
YWdlKGRldmljZS5nZXQoKSwgdXNhZ2UpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc5
LDE5ICs4NiwxOSBAQCBSZWZQdHI8R1BVQnVmZmVyPiBHUFVCdWZmZXI6OnRyeUNyZWF0ZShSZWY8
R1BVRGV2aWNlPiYmIGRldmljZSwgY29uc3QgR1BVQnVmZmVyRAogCiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCi0gICAgbXRsQnVmZmVyID0gYWRvcHROUyhbZGV2aWNlLT5wbGF0
Zm9ybURldmljZSgpIG5ld0J1ZmZlcldpdGhMZW5ndGg6ZGVzY3JpcHRvci5zaXplIG9wdGlvbnM6
cmVzb3VyY2VPcHRpb25zXSk7CisgICAgbXRsQnVmZmVyID0gYWRvcHROUyhbZGV2aWNlLT5wbGF0
Zm9ybURldmljZSgpIG5ld0J1ZmZlcldpdGhMZW5ndGg6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4o
ZGVzY3JpcHRvci5zaXplKSBvcHRpb25zOnJlc291cmNlT3B0aW9uc10pOwogCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUzsKIAogICAgIGlmICghbXRsQnVmZmVyKSB7Ci0gICAgICAgIExP
RyhXZWJHUFUsICJHUFVCdWZmZXI6OmNyZWF0ZSgpOiBVbmFibGUgdG8gY3JlYXRlIE1UTEJ1ZmZl
ciEiKTsKKyAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUJ1ZmZlcjo6dHJ5Q3JlYXRlKCk6IFVuYWJs
ZSB0byBjcmVhdGUgTVRMQnVmZmVyISIpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBHUFVCdWZmZXIoV1RGTW92ZShtdGxCdWZmZXIp
LCBkZXNjcmlwdG9yLnNpemUsIHVzYWdlLCBXVEZNb3ZlKGRldmljZSkpKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBHUFVCdWZmZXIoV1RGTW92ZShtdGxCdWZmZXIpLCBzaXplLCB1c2FnZSwg
V1RGTW92ZShkZXZpY2UpKSk7CiB9CiAKLUdQVUJ1ZmZlcjo6R1BVQnVmZmVyKFJldGFpblB0cjxN
VExCdWZmZXI+JiYgYnVmZmVyLCB1aW50NjRfdCBzaXplLCBPcHRpb25TZXQ8R1BVQnVmZmVyVXNh
Z2U6OkZsYWdzPiB1c2FnZSwgUmVmPEdQVURldmljZT4mJiBkZXZpY2UpCitHUFVCdWZmZXI6OkdQ
VUJ1ZmZlcihSZXRhaW5QdHI8TVRMQnVmZmVyPiYmIGJ1ZmZlciwgc2l6ZV90IHNpemUsIE9wdGlv
blNldDxHUFVCdWZmZXJVc2FnZTo6RmxhZ3M+IHVzYWdlLCBSZWY8R1BVRGV2aWNlPiYmIGRldmlj
ZSkKICAgICA6IG1fcGxhdGZvcm1CdWZmZXIoV1RGTW92ZShidWZmZXIpKQogICAgICwgbV9kZXZp
Y2UoV1RGTW92ZShkZXZpY2UpKQogICAgICwgbV9ieXRlTGVuZ3RoKHNpemUpCkBAIC0xMzYsOCAr
MTQzLDggQEAgdm9pZCBHUFVCdWZmZXI6OnNldFN1YkRhdGEodWludDY0X3Qgb2Zmc2V0LCBjb25z
dCBKU0M6OkFycmF5QnVmZmVyJiBkYXRhKQogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
Ci0KLSAgICBhdXRvIHN1YkRhdGFMZW5ndGggPSBjaGVja2VkU3VtPHVpbnQ2NF90PihkYXRhLmJ5
dGVMZW5ndGgoKSwgb2Zmc2V0KTsKKyAgICAvLyBNVExCdWZmZXIgc2l6ZSAoTlNVSW50ZWdlcikg
aXMgMzIgYml0cyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICBhdXRvIHN1YkRhdGFMZW5ndGggPSBj
aGVja2VkU3VtPE5TVUludGVnZXI+KGRhdGEuYnl0ZUxlbmd0aCgpLCBvZmZzZXQpOwogICAgIGlm
IChzdWJEYXRhTGVuZ3RoLmhhc092ZXJmbG93ZWQoKSB8fCBzdWJEYXRhTGVuZ3RoLnVuc2FmZUdl
dCgpID4gbV9ieXRlTGVuZ3RoKSB7CiAgICAgICAgIExPRyhXZWJHUFUsICJHUFVCdWZmZXI6OnNl
dFN1YkRhdGEoKTogSW52YWxpZCBvZmZzZXQgb3IgZGF0YSBzaXplISIpOwogICAgICAgICByZXR1
cm47CkBAIC0xNDUsNyArMTUyLDcgQEAgdm9pZCBHUFVCdWZmZXI6OnNldFN1YkRhdGEodWludDY0
X3Qgb2Zmc2V0LCBjb25zdCBKU0M6OkFycmF5QnVmZmVyJiBkYXRhKQogCiAgICAgaWYgKG1fc3Vi
RGF0YUJ1ZmZlcnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBU
SU9OUzsKLSAgICAgICAgbV9zdWJEYXRhQnVmZmVycy5hcHBlbmQoYWRvcHROUyhbbV9wbGF0Zm9y
bUJ1ZmZlci5nZXQoKS5kZXZpY2UgbmV3QnVmZmVyV2l0aExlbmd0aDptX2J5dGVMZW5ndGggb3B0
aW9uczpNVExSZXNvdXJjZUNQVUNhY2hlTW9kZURlZmF1bHRDYWNoZV0pKTsKKyAgICAgICAgbV9z
dWJEYXRhQnVmZmVycy5hcHBlbmQoYWRvcHROUyhbbV9wbGF0Zm9ybUJ1ZmZlci5nZXQoKS5kZXZp
Y2UgbmV3QnVmZmVyV2l0aExlbmd0aDpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihtX2J5dGVMZW5n
dGgpIG9wdGlvbnM6TVRMUmVzb3VyY2VDUFVDYWNoZU1vZGVEZWZhdWx0Q2FjaGVdKSk7CiAgICAg
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAgICAgfQogCkBAIC0xNjMsNyArMTcwLDcg
QEAgdm9pZCBHUFVCdWZmZXI6OnNldFN1YkRhdGEodWludDY0X3Qgb2Zmc2V0LCBjb25zdCBKU0M6
OkFycmF5QnVmZmVyJiBkYXRhKQogICAgIGF1dG8gY29tbWFuZEJ1ZmZlciA9IHJldGFpblB0cihb
cXVldWUgY29tbWFuZEJ1ZmZlcl0pOwogICAgIGF1dG8gYmxpdEVuY29kZXIgPSByZXRhaW5QdHIo
W2NvbW1hbmRCdWZmZXIgYmxpdENvbW1hbmRFbmNvZGVyXSk7CiAKLSAgICBbYmxpdEVuY29kZXIg
Y29weUZyb21CdWZmZXI6c3RhZ2luZ010bEJ1ZmZlci5nZXQoKSBzb3VyY2VPZmZzZXQ6MCB0b0J1
ZmZlcjptX3BsYXRmb3JtQnVmZmVyLmdldCgpIGRlc3RpbmF0aW9uT2Zmc2V0Om9mZnNldCBzaXpl
OnN0YWdpbmdNdGxCdWZmZXIuZ2V0KCkubGVuZ3RoXTsKKyAgICBbYmxpdEVuY29kZXIgY29weUZy
b21CdWZmZXI6c3RhZ2luZ010bEJ1ZmZlci5nZXQoKSBzb3VyY2VPZmZzZXQ6MCB0b0J1ZmZlcjpt
X3BsYXRmb3JtQnVmZmVyLmdldCgpIGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUlu
dGVnZXI+KG9mZnNldCkgc2l6ZTpzdGFnaW5nTXRsQnVmZmVyLmdldCgpLmxlbmd0aF07CiAgICAg
W2JsaXRFbmNvZGVyIGVuZEVuY29kaW5nXTsKIAogICAgIGlmIChpc01hcHBhYmxlKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29t
bWFuZEJ1ZmZlck1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbQppbmRleCA3ZWJkNWJmMjY4NGRkOTljYTYw
M2Q2ODRjNTE4NmNiMGM2ODQxODUwLi4zN2NkNDVkN2Q1MTQwZjc3ZGRkYzZlMjQ4ZGYxZmIyZmU5
YWQwMmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVQ29tbWFuZEJ1ZmZlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21tYW5kQnVmZmVyTWV0YWwubW0KQEAgLTEwNyw4
ICsxMDcsOSBAQCB2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcihSZWY8
R1BVQnVmZmVyPiYmIHNyYywgdWludDY0X3Qgc3JjT2ZmcwogICAgIH0KICNlbmRpZgogCi0gICAg
YXV0byBzcmNMZW5ndGggPSBjaGVja2VkU3VtPHVpbnQ2NF90PihzaXplLCBzcmNPZmZzZXQpOwot
ICAgIGF1dG8gZHN0TGVuZ3RoID0gY2hlY2tlZFN1bTx1aW50NjRfdD4oc2l6ZSwgZHN0T2Zmc2V0
KTsKKyAgICAvLyBUaGlzIGNhbGwgZW5zdXJlcyB0aGF0IHNpemUsIG9mZnNldCwgYW5kIHNpemUg
KyBvZmZzZXQgY2FuIHNhZmVseSBmaXQgaW4gTlNVSW50ZWdlciByZWdhcmRsZXNzIG9mIHBsYXRm
b3JtLgorICAgIGF1dG8gc3JjTGVuZ3RoID0gY2hlY2tlZFN1bTxOU1VJbnRlZ2VyPihzaXplLCBz
cmNPZmZzZXQpOworICAgIGF1dG8gZHN0TGVuZ3RoID0gY2hlY2tlZFN1bTxOU1VJbnRlZ2VyPihz
aXplLCBkc3RPZmZzZXQpOwogICAgIGlmIChzcmNMZW5ndGguaGFzT3ZlcmZsb3dlZCgpIHx8IGRz
dExlbmd0aC5oYXNPdmVyZmxvd2VkKCkKICAgICAgICAgfHwgc3JjTGVuZ3RoLnVuc2FmZUdldCgp
ID4gc3JjLT5ieXRlTGVuZ3RoKCkgfHwgZHN0TGVuZ3RoLnVuc2FmZUdldCgpID4gZHN0LT5ieXRl
TGVuZ3RoKCkpIHsKICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlC
dWZmZXJUb0J1ZmZlcigpOiBJbnZhbGlkIG9mZnNldCBvciBjb3B5IHNpemUhIik7CkBAIC0xMTcs
MTIgKzExOCwxMyBAQCB2b2lkIEdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb0J1ZmZlcihS
ZWY8R1BVQnVmZmVyPiYmIHNyYywgdWludDY0X3Qgc3JjT2ZmcwogCiAgICAgQkVHSU5fQkxPQ0tf
T0JKQ19FWENFUFRJT05TOwogCisgICAgLy8gVGhlc2UgY2FzdHMgYXJlIHNhZmUgZHVlIHRvIGVh
cmxpZXIgY2hlY2tlZFN1bSgpIGNoZWNrcy4KICAgICBbYmxpdEVuY29kZXIoKQogICAgICAgICBj
b3B5RnJvbUJ1ZmZlcjpzcmMtPnBsYXRmb3JtQnVmZmVyKCkKLSAgICAgICAgc291cmNlT2Zmc2V0
OnNyY09mZnNldAorICAgICAgICBzb3VyY2VPZmZzZXQ6c3RhdGljX2Nhc3Q8TlNVSW50ZWdlcj4o
c3JjT2Zmc2V0KQogICAgICAgICB0b0J1ZmZlcjpkc3QtPnBsYXRmb3JtQnVmZmVyKCkKLSAgICAg
ICAgZGVzdGluYXRpb25PZmZzZXQ6ZHN0T2Zmc2V0Ci0gICAgICAgIHNpemU6c2l6ZV07CisgICAg
ICAgIGRlc3RpbmF0aW9uT2Zmc2V0OnN0YXRpY19jYXN0PE5TVUludGVnZXI+KGRzdE9mZnNldCkK
KyAgICAgICAgc2l6ZTpzdGF0aWNfY2FzdDxOU1VJbnRlZ2VyPihzaXplKV07CiAKICAgICBFTkRf
QkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCkBAIC0xMzcsNiArMTM5LDEzIEBAIHZvaWQgR1BVQ29t
bWFuZEJ1ZmZlcjo6Y29weUJ1ZmZlclRvVGV4dHVyZShHUFVCdWZmZXJDb3B5VmlldyYmIHNyY0J1
ZmZlciwgR1BVVGV4CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBNVExCdWZmZXIg
c2l6ZSAoTlNVSW50ZWdlcikgaXMgMzIgYml0cyBvbiBzb21lIHBsYXRmb3Jtcy4KKyAgICBOU1VJ
bnRlZ2VyIHNvdXJjZU9mZnNldCA9IDA7CisgICAgaWYgKCFXVEY6OmNvbnZlcnRTYWZlbHk8TlNV
SW50ZWdlciwgdWludDY0X3Q+KHNyY0J1ZmZlci5vZmZzZXQsIHNvdXJjZU9mZnNldCkpIHsKKyAg
ICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbW1hbmRCdWZmZXI6OmNvcHlCdWZmZXJUb1RleHR1cmUo
KTogU291cmNlIG9mZnNldCBpcyB0b28gbGFyZ2UhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICAvLyBGSVhNRTogQWRkIE1ldGFsIHZhbGlkYXRpb24uCiAKICAgICAvLyBHUFVCdWZm
ZXJDb3B5Vmlldzo6b2Zmc2V0OiBUaGUgbG9jYXRpb24gbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBz
aXplIG9mIHRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJlJ3MgcGl4ZWwgZm9ybWF0LiBUaGUgdmFsdWUg
bXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBkZXN0aW5hdGlvbiB0ZXh0dXJlJ3MgcGl4ZWwgc2l6
ZSwgaW4gYnl0ZXMuCkBAIC0xNTMsNyArMTYyLDcgQEAgdm9pZCBHUFVDb21tYW5kQnVmZmVyOjpj
b3B5QnVmZmVyVG9UZXh0dXJlKEdQVUJ1ZmZlckNvcHlWaWV3JiYgc3JjQnVmZmVyLCBHUFVUZXgK
IAogICAgIFtibGl0RW5jb2RlcigpCiAgICAgICAgIGNvcHlGcm9tQnVmZmVyOnNyY0J1ZmZlci5i
dWZmZXItPnBsYXRmb3JtQnVmZmVyKCkKLSAgICAgICAgc291cmNlT2Zmc2V0OnNyY0J1ZmZlci5v
ZmZzZXQKKyAgICAgICAgc291cmNlT2Zmc2V0OnNvdXJjZU9mZnNldAogICAgICAgICBzb3VyY2VC
eXRlc1BlclJvdzpzcmNCdWZmZXIucm93UGl0Y2gKICAgICAgICAgc291cmNlQnl0ZXNQZXJJbWFn
ZTpzcmNCdWZmZXIuaW1hZ2VIZWlnaHQKICAgICAgICAgc291cmNlU2l6ZTpNVExTaXplTWFrZShz
aXplLndpZHRoLCBzaXplLmhlaWdodCwgc2l6ZS5kZXB0aCkKQEAgLTE3NCw2ICsxODMsMTIgQEAg
dm9pZCBHUFVDb21tYW5kQnVmZmVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKEdQVVRleHR1cmVDb3B5
VmlldyYmIHNyY1RleHR1cmUsIEdQVUIKICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbW1hbmRC
dWZmZXI6OmNvcHlUZXh0dXJlVG9CdWZmZXIoKTogSW52YWxpZCBvcGVyYXRpb24hIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgLy8gTVRMQnVmZmVyIHNpemUgKE5TVUludGVnZXIpIGlz
IDMyIGJpdHMgb24gc29tZSBwbGF0Zm9ybXMuCisgICAgTlNVSW50ZWdlciBkZXN0aW5hdGlvbk9m
ZnNldCA9IDA7CisgICAgaWYgKCFXVEY6OmNvbnZlcnRTYWZlbHk8TlNVSW50ZWdlciwgdWludDY0
X3Q+KGRzdEJ1ZmZlci5vZmZzZXQsIGRlc3RpbmF0aW9uT2Zmc2V0KSkgeworICAgICAgICBMT0co
V2ViR1BVLCAiR1BVQ29tbWFuZEJ1ZmZlcjo6Y29weVRleHR1cmVUb0J1ZmZlcigpOiBEZXN0aW5h
dGlvbiBvZmZzZXQgaXMgdG9vIGxhcmdlISIpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAg
ICAgLy8gRklYTUU6IEFkZCBNZXRhbCB2YWxpZGF0aW9uPwogCkBAIC0xODYsNyArMjAxLDcgQEAg
dm9pZCBHUFVDb21tYW5kQnVmZmVyOjpjb3B5VGV4dHVyZVRvQnVmZmVyKEdQVVRleHR1cmVDb3B5
VmlldyYmIHNyY1RleHR1cmUsIEdQVUIKICAgICAgICAgc291cmNlT3JpZ2luOk1UTE9yaWdpbk1h
a2Uoc3JjVGV4dHVyZS5vcmlnaW4ueCwgc3JjVGV4dHVyZS5vcmlnaW4ueSwgc3JjVGV4dHVyZS5v
cmlnaW4ueikKICAgICAgICAgc291cmNlU2l6ZTpNVExTaXplTWFrZShzaXplLndpZHRoLCBzaXpl
LmhlaWdodCwgc2l6ZS5kZXB0aCkKICAgICAgICAgdG9CdWZmZXI6ZHN0QnVmZmVyLmJ1ZmZlci0+
cGxhdGZvcm1CdWZmZXIoKQotICAgICAgICBkZXN0aW5hdGlvbk9mZnNldDpkc3RCdWZmZXIub2Zm
c2V0CisgICAgICAgIGRlc3RpbmF0aW9uT2Zmc2V0OmRlc3RpbmF0aW9uT2Zmc2V0CiAgICAgICAg
IGRlc3RpbmF0aW9uQnl0ZXNQZXJSb3c6ZHN0QnVmZmVyLnJvd1BpdGNoCiAgICAgICAgIGRlc3Rp
bmF0aW9uQnl0ZXNQZXJJbWFnZTpkc3RCdWZmZXIuaW1hZ2VIZWlnaHRdOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGFz
c0VuY29kZXJNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9j
b2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCmluZGV4IDRjMWQ2MDliZWMyZjk0MWYx
ZjFiMWU3OTI0NDQ2Y2FlYTU4OWM5MzguLjQxYTA0MDY2ODZmOWY3MjcyZjVjN2IwZDkxZjQ1Yzc2
ZGUwNmQzNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQYXNzRW5jb2Rlck1ldGFsLm1t
CkBAIC0zNTYsOCArMzU2LDEyIEBAIHZvaWQgR1BVUmVuZGVyUGFzc0VuY29kZXI6OmRyYXdJbmRl
eGVkKHVuc2lnbmVkIGluZGV4Q291bnQsIHVuc2lnbmVkIGluc3RhbmNlQ291CiAgICAgfQogCiAg
ICAgYXV0byBpbmRleEJ5dGVTaXplID0gKG1fcGlwZWxpbmUtPmluZGV4Rm9ybWF0KCkgPT0gR1BV
SW5kZXhGb3JtYXQ6OlVpbnQxNikgPyBzaXplb2YodWludDE2X3QpIDogc2l6ZW9mKHVpbnQzMl90
KTsKKworICAgIC8vIFRoaXMgY2FsY3VsYXRpb24gY2Fubm90IG92ZXJmbG93IGFzIGZpcnN0SW5k
ZXggaXMgYm91bmRlZCB0byAzMiBiaXRzLCBhbmQgaW5kZXhCeXRlU2l6ZSB0byBzaXplb2YodWlu
dDMyX3QpLgogICAgIHVpbnQ2NF90IGZpcnN0SW5kZXhPZmZzZXQgPSBmaXJzdEluZGV4ICogaW5k
ZXhCeXRlU2l6ZTsKLSAgICBhdXRvIHRvdGFsT2Zmc2V0ID0gY2hlY2tlZFN1bTx1aW50NjRfdD4o
Zmlyc3RJbmRleE9mZnNldCwgbV9pbmRleEJ1ZmZlck9mZnNldCk7CisKKyAgICAvLyBUaGlzIGNh
bGwgZW5zdXJlcyB0aGF0IG5laXRoZXIgYXJndW1lbnQgbm9yIHRoZWlyIHN1bSB3aWxsIG92ZXJm
bG93IE5TVUludGVnZXIuCisgICAgYXV0byB0b3RhbE9mZnNldCA9IGNoZWNrZWRTdW08TlNVSW50
ZWdlcj4oZmlyc3RJbmRleE9mZnNldCwgbV9pbmRleEJ1ZmZlck9mZnNldCk7CiAgICAgaWYgKHRv
dGFsT2Zmc2V0Lmhhc092ZXJmbG93ZWQoKSB8fCB0b3RhbE9mZnNldCA+PSBtX2luZGV4QnVmZmVy
LT5ieXRlTGVuZ3RoKCkpIHsKICAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBJbnZhbGlkIGZpcnN0
SW5kZXghIiwgZnVuY3Rpb25OYW1lKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5l
TWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
UmVuZGVyUGlwZWxpbmVNZXRhbC5tbQppbmRleCAwZGYxZGVmNzE0MGZlNDY5YWI4YTQ3ZWUzYmE1
NmYxOGZjMTZhM2IyLi5mM2VhODYyZTU3ZTMxMWE1NDIwYjlhMDdhNmY5N2FkYjZlMTVkNjk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BV
UmVuZGVyUGlwZWxpbmVNZXRhbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbQpAQCAtMzYsNiArMzYsNyBA
QAogI2ltcG9ydCAiV0hMU0xWZXJ0ZXhCdWZmZXJJbmRleENhbGN1bGF0b3IuaCIKICNpbXBvcnQg
PE1ldGFsL01ldGFsLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgorI2lt
cG9ydCA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CiAjaW1wb3J0IDx3dGYvT3B0aW9uU2V0Lmg+
CiAjaW1wb3J0IDx3dGYvT3B0aW9uYWwuaD4KIApAQCAtMzM5LDEwICszNDAsMTcgQEAgc3RhdGlj
IGJvb2wgdHJ5U2V0SW5wdXRTdGF0ZUZvclBpcGVsaW5lRGVzY3JpcHRvcihjb25zdCBjaGFyKiBj
b25zdCBmdW5jdGlvbk5hbWUKICAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogSW52YWxpZCBp
bnB1dFNsb3QgJXUgZm9yIHZlcnRleCBhdHRyaWJ1dGUgJXUhIiwgZnVuY3Rpb25OYW1lLCBhdHRy
aWJ1dGVzW2ldLmlucHV0U2xvdCwgbG9jYXRpb24pOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CisgICAgICAgIC8vIE1UTEJ1ZmZlciBzaXplIChOU1VJbnRlZ2VyKSBpcyAz
MiBiaXRzIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgICAgICAvLyBGSVhNRTogRW5zdXJlIG9mZnNl
dCA8IGJ1ZmZlcidzIHN0cmlkZSArIGZvcm1hdCdzIGRhdGEgc2l6ZS4KKyAgICAgICAgTlNVSW50
ZWdlciBhdHRyaWJ1dGVPZmZzZXQgPSAwOworICAgICAgICBpZiAoIVdURjo6Y29udmVydFNhZmVs
eTxOU1VJbnRlZ2VyLCB1aW50NjRfdD4oYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZU9m
ZnNldCkpIHsKKyAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogQnVmZmVyIG9mZnNldCBmb3Ig
dmVydGV4IGF0dHJpYnV0ZSAldSBpcyB0b28gbGFyZ2UhIiwgZnVuY3Rpb25OYW1lLCBsb2NhdGlv
bik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAogICAgICAgICBhdXRv
IG10bEF0dHJpYnV0ZURlc2MgPSByZXRhaW5QdHIoW2F0dHJpYnV0ZUFycmF5IG9iamVjdEF0SW5k
ZXhlZFN1YnNjcmlwdDpsb2NhdGlvbl0pOwogICAgICAgICBbbXRsQXR0cmlidXRlRGVzYyBzZXRG
b3JtYXQ6bXRsVmVydGV4Rm9ybWF0Rm9yR1BVVmVydGV4Rm9ybWF0KGF0dHJpYnV0ZXNbaV0uZm9y
bWF0KV07Ci0gICAgICAgIFttdGxBdHRyaWJ1dGVEZXNjIHNldE9mZnNldDphdHRyaWJ1dGVzW2ld
Lm9mZnNldF07IC8vIEZJWE1FOiBBZnRlciBhZGRpbmcgbW9yZSB2ZXJ0ZXggZm9ybWF0cywgZW5z
dXJlIG9mZnNldCA8IGJ1ZmZlcidzIHN0cmlkZSArIGZvcm1hdCdzIGRhdGEgc2l6ZS4KKyAgICAg
ICAgW210bEF0dHJpYnV0ZURlc2Mgc2V0T2Zmc2V0OmF0dHJpYnV0ZU9mZnNldF07CiAgICAgICAg
IFttdGxBdHRyaWJ1dGVEZXNjIHNldEJ1ZmZlckluZGV4OldITFNMOjpNZXRhbDo6Y2FsY3VsYXRl
VmVydGV4QnVmZmVySW5kZXgoYXR0cmlidXRlc1tpXS5pbnB1dFNsb3QpXTsKICAgICB9CiAKQEAg
LTM1NiwxMSArMzY0LDE2IEBAIHN0YXRpYyBib29sIHRyeVNldElucHV0U3RhdGVGb3JQaXBlbGlu
ZURlc2NyaXB0b3IoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lCiAgICAgICAgICAgICBM
T0coV2ViR1BVLCAiJXM6IEludmFsaWQgaW5wdXRTbG90ICVkIGZvciB2ZXJ0ZXggYnVmZmVyISIs
IGZ1bmN0aW9uTmFtZSwgc2xvdCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KKyAgICAgICAgTlNVSW50ZWdlciBpbnB1dFN0cmlkZSA9IDA7CisgICAgICAgIGlmICghV1RG
Ojpjb252ZXJ0U2FmZWx5PE5TVUludGVnZXIsIHVpbnQ2NF90PihpbnB1dHNbal0uc3RyaWRlLCBp
bnB1dFN0cmlkZSkpIHsKKyAgICAgICAgICAgIExPRyhXZWJHUFUsICIlczogU3RyaWRlIGZvciB2
ZXJ0ZXggYnVmZmVyIHNsb3QgJWQgaXMgdG9vIGxhcmdlISIsIGZ1bmN0aW9uTmFtZSwgc2xvdCk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAogICAgICAgICBhdXRvIGNv
bnZlcnRlZFNsb3QgPSBXSExTTDo6TWV0YWw6OmNhbGN1bGF0ZVZlcnRleEJ1ZmZlckluZGV4KHNs
b3QpOwogICAgICAgICBhdXRvIG10bExheW91dERlc2MgPSByZXRhaW5QdHIoW2xheW91dEFycmF5
IG9iamVjdEF0SW5kZXhlZFN1YnNjcmlwdDpjb252ZXJ0ZWRTbG90XSk7CiAgICAgICAgIFttdGxM
YXlvdXREZXNjIHNldFN0ZXBGdW5jdGlvbjptdGxTdGVwRnVuY3Rpb25Gb3JHUFVJbnB1dFN0ZXBN
b2RlKGlucHV0c1tqXS5zdGVwTW9kZSldOwotICAgICAgICBbbXRsTGF5b3V0RGVzYyBzZXRTdHJp
ZGU6aW5wdXRzW2pdLnN0cmlkZV07CisgICAgICAgIFttdGxMYXlvdXREZXNjIHNldFN0cmlkZTpp
bnB1dFN0cmlkZV07CiAgICAgfQogCiAgICAgW210bERlc2NyaXB0b3Igc2V0VmVydGV4RGVzY3Jp
cHRvcjptdGxWZXJ0ZXhEZXNjcmlwdG9yLmdldCgpXTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>