<?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>96039</bug_id>
          
          <creation_ts>2012-09-06 16:39:54 -0700</creation_ts>
          <short_desc>[V8] Weave creationContext through toV8 and related functions</short_desc>
          <delta_ts>2012-09-07 19:50:21 -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>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>96038</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>mitz</cc>
    
    <cc>ossy</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>713840</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-06 16:39:54 -0700</bug_when>
    <thetext>[V8] Weave creationContext through toV8 and related functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713846</commentid>
    <comment_count>1</comment_count>
      <attachid>162618</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-06 16:41:41 -0700</bug_when>
    <thetext>Created attachment 162618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713848</commentid>
    <comment_count>2</comment_count>
      <attachid>162619</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-06 16:43:35 -0700</bug_when>
    <thetext>Created attachment 162619
run-bindings-tests diffs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713849</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-06 16:44:15 -0700</bug_when>
    <thetext>I put the run-bindings-tests diffs in a separate patch file to make it easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713866</commentid>
    <comment_count>4</comment_count>
      <attachid>162618</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-09-06 16:57:51 -0700</bug_when>
    <thetext>Comment on attachment 162618
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:508
&gt; +inline v8::Handle&lt;v8::Value&gt; toV8(${nativeType}* impl, v8::Handle&lt;v8::Context&gt; creationContext = v8::Handle&lt;v8::Context&gt;(), v8::Isolate* isolate = 0${forceNewObjectParameter})

Isn&apos;t there any perf concern about creating v8::Handle&lt;v8::Context&gt;() every time? toV8() should be super fast especially for node wrapper objects. If you cannot observe any perf regression in Binding/first-child, then it looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713883</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-06 17:19:23 -0700</bug_when>
    <thetext>&gt; Isn&apos;t there any perf concern about creating v8::Handle&lt;v8::Context&gt;() every time? toV8() should be super fast especially for node wrapper objects. If you cannot observe any perf regression in Binding/first-child, then it looks OK.

I&apos;ll check before landing.  At the moment, I&apos;m just trying to get it working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713912</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-06 17:36:14 -0700</bug_when>
    <thetext>Looks like I might have made it marginally faster.  The &quot;before&quot; numbers are before this patch and the &quot;after&quot; numbers are after this patch and the patch in Bug 96044.

== Before ==

Running 1 tests
Running Bindings/first-child.html (1 of 1)
DESCRIPTION: This benchmark covers &apos;firstChild&apos;, &apos;lastChild&apos;, &apos;nextSibling&apos; and &apos;previousSibling&apos; in Dromaeo/dom-traverse.html, and other DOM attributes that return a Node object.
RESULT Bindings: first-child= 812.341722521 runs/s
median= 812.182741117 runs/s, stdev= 1.8782032458 runs/s, min= 807.061790668 runs/s, max= 815.286624204 runs/s
RESULT Bindings: first-child: JSHeap= 1330116.8 bytes
median= 1326596.0 bytes, stdev= 12326.5484934 bytes, min= 1319888.0 bytes, max= 1367520.0 bytes
RESULT Bindings: first-child: Malloc= 0.0 bytes
median= 0.0 bytes, stdev= 0.0 bytes, min= 0.0 bytes, max= 0.0 bytes

== After ==

DESCRIPTION: This benchmark covers &apos;firstChild&apos;, &apos;lastChild&apos;, &apos;nextSibling&apos; and &apos;previousSibling&apos; in Dromaeo/dom-traverse.html, and other DOM attributes that return a Node object.
RESULT Bindings: first-child= 813.735729057 runs/s
median= 814.249363868 runs/s, stdev= 1.80420562007 runs/s, min= 810.126582278 runs/s, max= 816.326530612 runs/s
RESULT Bindings: first-child: JSHeap= 1330162.4 bytes
median= 1326696.0 bytes, stdev= 12300.6580897 bytes, min= 1319976.0 bytes, max= 1367520.0 bytes
RESULT Bindings: first-child: Malloc= 0.0 bytes
median= 0.0 bytes, stdev= 0.0 bytes, min= 0.0 bytes, max= 0.0 bytes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713916</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-09-06 17:37:57 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Looks like I might have made it marginally faster.  The &quot;before&quot; numbers are before this patch and the &quot;after&quot; numbers are after this patch and the patch in Bug 96044.

Looks good:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714161</commentid>
    <comment_count>8</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-09-06 23:15:24 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/127806 broke bindings tests on the bots.
Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714248</commentid>
    <comment_count>9</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-09-07 01:02:50 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; https://trac.webkit.org/changeset/127806 broke bindings tests on the bots.
&gt; Could you check it, please?

Oddly, this bug is still in NEW. And, it looks like the second patch (rebaselining the bindings test) didn&apos;t get landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714681</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 10:23:04 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; https://trac.webkit.org/changeset/127806 broke bindings tests on the bots.
&gt; Could you check it, please?

Oh, sorry.  I forgot that I put the bindings results in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>714682</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 10:25:39 -0700</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=96039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715238</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-07 19:50:21 -0700</bug_when>
    <thetext>&gt; Isn&apos;t there any perf concern about creating v8::Handle&lt;v8::Context&gt;() every time? toV8() should be super fast especially for node wrapper objects. If you cannot observe any perf regression in Binding/first-child, then it looks OK.

Turns out you were right, but the issue was with calling CreationContext().  Binding/first-child didn&apos;t see the problem initially because that particular code path wasn&apos;t using CreationContext() in this patch.

http://trac.webkit.org/changeset/127946 delays delays calling CreationContext() until we actually need it, which seems to solve the problem.  http://trac.webkit.org/changeset/127955 then causes Binding/first-child to go through this new code path and doesn&apos;t show a perf regression.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162618</attachid>
            <date>2012-09-06 16:41:41 -0700</date>
            <delta_ts>2012-09-06 17:19:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96039-20120906164121.patch</filename>
            <type>text/plain</type>
            <size>135186</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODVkODFjMjgwMGZiOTc3
NTk0MTEzMjMyZDE3MmQ1NDY2OTg3M2ZjOS4uZjc2MzUwNWQ0MjBiZDIxMjkwYmEwM2ZlZDAwMmVj
MjMwMTQ2MWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MyBAQAorMjAxMi0wOS0wNiAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1Y4XSBXZWF2ZSBjcmVh
dGlvbkNvbnRleHQgdGhyb3VnaCB0b1Y4IGFuZCByZWxhdGVkIGZ1bmN0aW9ucworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTYwMzkKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBvcmRlciB0byBnaXZlIERP
TSB3cmFwcGVycyB0aGUgY29ycmVjdCBwcm90b3R5cGUgY2hhaW4sIHdlIG5lZWQgdG8KKyAgICAg
ICAga25vdyB3aGF0IHRoZSBjcmVhdGlvbkNvbnRleHQgb3VnaHQgdG8gYmUgZm9yIGVhY2ggd3Jh
cHBlci4gVGhpcyBwYXRjaAorICAgICAgICB3ZWF2ZXMgdGhhdCBpbmZvcm1hdGlvbiB0aHJvdWdo
IHRvVjggYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZG9lc24n
dCB5ZXQgdXNlIHRoZSBpbmZvcm1hdGlvbi4gVGhhdCB3aWxsIHRha2UgcGxhY2UgaW4gYQorICAg
ICAgICBzZXBhcmF0ZSBwYXRjaC4gRm9yIHRoYXQgcmVhc29uLCB0aGlzIHBhdGNoIHNob3VsZCBu
b3QgaGF2ZSBhbnkKKyAgICAgICAgYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6
CisgICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVO
YW1lZENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bik6CisgICAgICAgIChHZW5lcmF0ZVRvVjhDb252ZXJ0ZXJzKToKKyAgICAgICAgKEdlbmVyYXRl
RnVuY3Rpb25DYWxsU3RyaW5nKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZsb2F0NjRBcnJheVY4SW50ZXJuYWw6OmZvb0NhbGxiYWNrKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9ET01UcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01U
cmFuc2FjdGlvbjo6Y2FsbEZ1bmN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9JREJDdXN0
b21CaW5kaW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOElEQkN1cnNvcldpdGhWYWx1ZTo6
dmFsdWVBY2Nlc3NvckdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4VmFsdWVUcmFpdHM6OmFycmF5VjhWYWx1ZSk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpnZXRWOE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpnZXROYW1lZFByb3BlcnR5T2ZDb2xsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbGxlY3Rpb25OYW1lZFByb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldHRlcik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2Jq
ZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdCk6CisgICAg
ICAgIChWOERPTVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4VGhyb3dFeGNlcHRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4QmxvYkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKFdl
YkNvcmU6OlY4QmxvYjo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOE9i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlU3R5bGVBY2Nlc3NvckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpWOENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZmlsbFN0eWxlQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhD
b25zb2xlOjptZW1vcnlBY2Nlc3NvckdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93
OjpvcGVuQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3c6OmluZGV4ZWRQ
cm9wZXJ0eUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvdzo6bmFtZWRQcm9w
ZXJ0eUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhEYXRhVmlld0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOERvY3VtZW50OjpldmFsdWF0ZUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4RG9jdW1lbnQ6OmdldENTU0NhbnZhc0NvbnRleHRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RG9jdW1lbnQ6OmNyZWF0
ZVRvdWNoTGlzdENhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1
bWVudExvY2F0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RG9jdW1lbnQ6Omxv
Y2F0aW9uQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEVu
dHJ5Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEVudHJ5U3luY0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0
b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEV2ZW50OjpkYXRhVHJhbnNmZXJBY2Nlc3NvckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEV2ZW50OjpjbGlwYm9hcmREYXRhQWNjZXNzb3JHZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4RmlsZVJlYWRlcjo6cmVzdWx0QWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldE5hbWVkSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZFByb3BlcnR5R2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEFsbENvbGxlY3Rpb246Oml0ZW1DYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxBbGxDb2xsZWN0aW9uOjpjYWxsQXNGdW5jdGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDYW52YXNFbGVtZW50OjpnZXRD
b250ZXh0Q2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldE5hbWVkSXRlbXMpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhIVE1MQ29sbGVjdGlvbjo6bmFtZWRQcm9wZXJ0eUdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpWOEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1DYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MRG9jdW1lbnQ6
OmdldE5hbWVkUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MRG9jdW1lbnQ6OmFs
bEFjY2Vzc29yR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MRWxlbWVudDo6aXRlbVZhbHVlQWNj
ZXNzb3JHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxl
bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxGb3JtRWxlbWVudDo6aW5k
ZXhlZFByb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEZvcm1FbGVtZW50
OjpuYW1lZFByb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTEZy
YW1lU2V0RWxlbWVudDo6bmFtZWRQcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOEhUTUxMaW5rRWxlbWVudDo6c2l6ZXNBY2Nlc3NvckdldHRlcik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTE9wdGlvbnNDb2xsZWN0aW9uOjppbmRleGVkUHJv
cGVydHlHZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPdXRwdXRF
bGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTE91dHB1dEVsZW1lbnQ6
Omh0bWxGb3JBY2Nlc3NvckdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MU2Vs
ZWN0RWxlbWVudDo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhJREJBbnlDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCS2V5Q3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEltYWdlRGF0
YUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4TWVzc2FnZUNoYW5uZWw6OmNvbnN0cnVjdG9y
Q2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOE1lc3NhZ2VFdmVudDo6ZGF0YUFjY2Vzc29y
R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4TWVzc2FnZUV2ZW50Ojpwb3J0c0FjY2Vzc29y
R2V0dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhNaWNyb0RhdGFJdGVtVmFs
dWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlY4TmFtZWROb2RlTWFwOjppbmRleGVkUHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VjhOYW1lZE5vZGVNYXA6Om5hbWVkUHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOFNs
b3cpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4Tm9kZUxpc3Q6Om5hbWVkUHJvcGVydHlHZXR0ZXIpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpWOE5vdGlmaWNhdGlvbkNlbnRlcjo6Y3JlYXRlSFRNTE5vdGlm
aWNhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Tm90aWZpY2F0aW9uQ2VudGVy
OjpjcmVhdGVOb3RpZmljYXRpb25DYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4UGVyZm9ybWFuY2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpWOFBlcmZvcm1hbmNlOjptZW1vcnlBY2Nlc3NvckdldHRlcik6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhQb3BT
dGF0ZUV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4UG9wU3RhdGVFdmVudDo6
c3RhdGVBY2Nlc3NvckdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FM
VHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4U1FMVHJhbnNh
Y3Rpb25TeW5jOjpleGVjdXRlU3FsQ2FsbGJhY2spOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZH
UGF0aFNlZ0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhTY3JpcHRQcm9maWxlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2Zp
bGVOb2RlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhTdHlsZVNoZWV0TGlzdDo6bmFtZWRQcm9w
ZXJ0eUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJhY2tFdmVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRyYWNrRXZlbnQ6OnRyYWNrQWNjZXNzb3JH
ZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4T2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OmdldE9iamVjdFBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpWOFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6VjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQYXJhbWV0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlckNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXJDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5p
Zm9ybUNhbGxiYWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlQWNjZXNzb3JHZXR0ZXIpOgorICAgICAgICAq
IGRvbS9tYWtlX25hbWVzLnBsOgorICAgICAgICAocHJpbnRXcmFwcGVyRnVuY3Rpb25zKToKKyAg
ICAgICAgKHByaW50V3JhcHBlckZhY3RvcnlDcHBGaWxlKToKKyAgICAgICAgKHByaW50V3JhcHBl
ckZhY3RvcnlIZWFkZXJGaWxlKToKKwogMjAxMi0wOS0wNiAgSmFtZXMgUm9iaW5zb24gIDxqYW1l
c3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU3BsaXQgcGxhdGZvcm0gZ2Vv
bWV0cnkgdHlwZXMgaW50byBzZXBhcmF0ZSBzdGF0aWMgdGFyZ2V0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IDExZmM4NDlj
YzY1NWI0MzI3MzBjM2VjODJjMmFhNjlmYzQyMzA4YzQuLjQzNGFlNTU4M2Q4ZTMyNWYxNTNiMTNh
ZTY1NWYwNGQ5ZTZhMWM1NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zODQsNyArMzg0LDcgQEAgRU5ECiAgICAgewog
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDwke25hdGl2ZVR5cGV9Kj4ob2JqZWN0LT5H
ZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAg
ICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRp
dmVUeXBlfSosIHY4OjpJc29sYXRlKiA9IDAke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSk7Cisg
ICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBl
fSosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDAke2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVy
fSk7CiAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD4pOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKQEAgLTQwMiw3ICs0
MDIsNyBAQCBFTkQKICAgICBpZiAoJGltcGxDbGFzc05hbWUgZXEgIkhUTUxEb2N1bWVudCIpIHsK
ICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKICAgc3RhdGljIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiB3cmFwSW5TaGFkb3dPYmplY3Qodjg6OkxvY2FsPHY4OjpPYmplY3Q+IHdyYXBw
ZXIsIE5vZGUqIGltcGwpOwotICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVk
UHJvcGVydHkoSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYg
a2V5LCB2ODo6SXNvbGF0ZSopOworICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5h
bWVkUHJvcGVydHkoSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYga2V5LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKik7CiBFTkQKICAgICB9CiAKQEAgLTQ3NywxMyArNDc3LDEzIEBAIEVORAogICAgIG15ICR3
cmFwU2xvd0FyZ3VtZW50VHlwZSA9IEdldFBhc3NSZWZQdHJUeXBlKCRuYXRpdmVUeXBlKTsKICAg
ICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KCR7d3JhcFNsb3dBcmd1bWVudFR5cGV9LCB2ODo6
SXNvbGF0ZSopOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KCR7
d3JhcFNsb3dBcmd1bWVudFR5cGV9LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCiBFTkQKIAogICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIDw8RU5EKTsKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9Ojp3cmFwKCR7
bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlJHtmb3JjZU5ld09iamVjdElu
cHV0fSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9Ojp3cmFwKCR7bmF0aXZl
VHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUke2ZvcmNlTmV3T2JqZWN0SW5wdXR9KQogewogRU5ECiAgICAgcHVz
aChAaGVhZGVyQ29udGVudCwgIiAgICBpZiAoIWZvcmNlTmV3T2JqZWN0KSB7XG4iKSBpZiBJc0RP
TU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCBFTkQKIEVORAog
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgfVxuIikgaWYgSXNET01Ob2RlVHlwZSgkaW50
ZXJmYWNlTmFtZSk7CiAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwotICAgIHJldHVy
biAke2NsYXNzTmFtZX06OndyYXBTbG93KGltcGwsIGlzb2xhdGUpOworICAgIHJldHVybiAke2Ns
YXNzTmFtZX06OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiBF
TkQKIApAQCAtNTA1LDQxICs1MDUsNDEgQEAgRU5ECiAgICAgfSBlbHNpZiAoISgkZGF0YU5vZGUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Ub0pTT2JqZWN0In0gb3IgJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiVjhDdXN0b21Ub0pTT2JqZWN0In0pKSB7CiAgICAgICAgIHB1
c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIAotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCR7Zm9y
Y2VOZXdPYmplY3RQYXJhbWV0ZXJ9KQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29u
dGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0g
MCR7Zm9yY2VOZXdPYmplY3RQYXJhbWV0ZXJ9KQogewogICAgIGlmICghaW1wbCkKICAgICAgICAg
cmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKLSAgICByZXR1cm4gJHtjbGFzc05hbWV9
Ojp3cmFwKGltcGwsIGlzb2xhdGUke2ZvcmNlTmV3T2JqZWN0Q2FsbH0pOworICAgIHJldHVybiAk
e2NsYXNzTmFtZX06OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlJHtmb3JjZU5l
d09iamVjdENhbGx9KTsKIH0KIEVORAogICAgIH0gZWxzaWYgKCRpbnRlcmZhY2VOYW1lIG5lICdO
b2RlJykgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qLCB2ODo6SXNvbGF0ZSogPSAwJHtmb3Jj
ZU5ld09iamVjdFBhcmFtZXRlcn0pOwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJHtuYXRp
dmVUeXBlfSosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDAke2ZvcmNlTmV3T2JqZWN0UGFy
YW1ldGVyfSk7CiBFTkQKICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCA8PEVORCk7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4U2xvdyhOb2RlKiwgdjg6Oklz
b2xhdGUqLCBib29sKTsKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4U2xvdyhOb2RlKiwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSosIGJvb2wp
OwogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTm9kZSogaW1wbCwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUgPSAwLCBib29sIGZvcmNlTmV3T2JqZWN0ID0gZmFsc2UpCitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTm9kZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUgPSAwLCBib29sIGZvcmNlTmV3T2JqZWN0ID0gZmFsc2UpCiB7CiAgICAg
aWYgKFVOTElLRUxZKCFpbXBsKSkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29s
YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoZm9yY2VOZXdPYmplY3QpKQotICAgICAgICByZXR1cm4g
dG9WOFNsb3coaW1wbCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOworICAgICAgICByZXR1cm4g
dG9WOFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlLCBmb3JjZU5ld09iamVjdCk7
CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmdldENh
Y2hlZFdyYXBwZXIoaW1wbCk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHRvVjhTbG93KGltcGwsIGlzb2xhdGUsIGZhbHNl
KTsKKyAgICByZXR1cm4gdG9WOFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlLCBm
YWxzZSk7CiB9CiBFTkQKICAgICB9CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7
Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgJHtuYXRpdmVU
eXBlfSA+IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCR7Zm9yY2VOZXdPYmplY3RQYXJh
bWV0ZXJ9KQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8ICR7
bmF0aXZlVHlwZX0gPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRl
eHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDAk
e2ZvcmNlTmV3T2JqZWN0UGFyYW1ldGVyfSkKIHsKLSAgICByZXR1cm4gdG9WOChpbXBsLmdldCgp
LCBpc29sYXRlJHtmb3JjZU5ld09iamVjdENhbGx9KTsKKyAgICByZXR1cm4gdG9WOChpbXBsLmdl
dCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUke2ZvcmNlTmV3T2JqZWN0Q2FsbH0pOwogfQog
RU5ECiAKQEAgLTEwMDcsNyArMTAwNyw3IEBAIEVORAogICAgICAgICBteSAkZG9tTWFwRnVuY3Rp
b24gPSBHZXREb21NYXBGdW5jdGlvbigkZGF0YU5vZGUsICRpbnRlcmZhY2VOYW1lLCAiaW5mby5H
ZXRJc29sYXRlKCkiKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3VsdC5nZXQoKSA/ICR7ZG9tTWFwRnVuY3Rp
b259LmdldChyZXN1bHQuZ2V0KCkpIDogdjhVbmRlZmluZWQoKTtcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkge1xuIik7Ci0g
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJl
c3VsdC5nZXQoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSwgaW5mby5I
b2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOwogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKVxuIik7CiAgICAgICAgIGlmICgkZGF0YU5vZGUtPm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsK
ICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJGcmFtZS5oIik7CkBAIC0xMDI2LDcgKzEw
MjYsNyBAQCBFTkQKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JGF0dHJUeXBlLmgiKTsK
ICAgICAgICAgbXkgJHN2Z05hdGl2ZVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5l
ZWRpbmdUZWFyT2ZmKCRhdHRyVHlwZSk7CiAgICAgICAgICMgQ29udmVydCBmcm9tIGFic3RyYWN0
IFNWR1Byb3BlcnR5IHRvIHJlYWwgdHlwZSwgc28gdGhlIHJpZ2h0IHRvSlMoKSBtZXRob2QgY2Fu
IGJlIGludm9rZWQuCi0gICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8JHN2Z05hdGl2ZVR5cGUqPigkcmVzdWx0KSwgaW5mby5HZXRJc29s
YXRlKCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8JHN2Z05hdGl2ZVR5cGUqPigkcmVzdWx0KSwgaW5mby5Ib2xkZXIo
KS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOwogICAgIH0gZWxz
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXR0clR5cGUpIGFu
ZCBub3QgJGltcGxDbGFzc05hbWUgPX4gL0xpc3QkLykgewogICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiVjgkYXR0clR5cGUuaCIpOwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU1ZHUHJv
cGVydHlUZWFyT2ZmLmgiKTsKQEAgLTEwNDksMTkgKzEwNDksMTkgQEAgRU5ECiAgICAgICAgICAg
ICAgICAgICAgICRyZXN1bHQgPX4gcy9tYXRyaXgvc3ZnTWF0cml4LzsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVy
biB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUod3JhcHBlciwgJHJlc3Vs
dCwgJHVwZGF0ZU1ldGhvZCkpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRy
KCR7dGVhck9mZlR5cGV9OjpjcmVhdGUod3JhcHBlciwgJHJlc3VsdCwgJHVwZGF0ZU1ldGhvZCkp
LCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xu
Iik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJTVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmYuaCIpOwogICAgICAgICAgICAgICAgICR0ZWFy
T2ZmVHlwZSA9fiBzL1NWR1Byb3BlcnR5VGVhck9mZjwvU1ZHU3RhdGljUHJvcGVydHlUZWFyT2Zm
PCRpbXBsQ2xhc3NOYW1lLCAvOwogCi0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRl
KGltcCwgJHJlc3VsdCwgJHVwZGF0ZU1ldGhvZCkpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsK
KyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4
KFdURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0LCAkdXBkYXRl
TWV0aG9kKSksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xh
dGUoKSk7XG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoJHRlYXJPZmZUeXBl
ID1+IC9TVkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLykgewotICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZU
eXBlfTo6Y3JlYXRlKGltcCwgJHJlc3VsdCkpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpn
ZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZShpbXAsICRyZXN1bHQpKSwgaW5mby5Ib2xkZXIo
KS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOwogICAgICAgICB9
IGVsc2lmICgkdGVhck9mZlR5cGUgPX4gL1NWRyhQb2ludHxQYXRoU2VnKUxpc3QvKSB7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0
UHRyKCRyZXN1bHQpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHJlc3VsdCks
IGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4i
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSgkcmVz
dWx0KSksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6
Y3JlYXRlKCRyZXN1bHQpKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8u
R2V0SXNvbGF0ZSgpKTtcbiIpOwogICAgICAgICB9CiAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLT50eXBlIGVxICJNZXNzYWdlUG9ydEFycmF5IikgewogICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiTWVzc2FnZVBvcnQuaCIpOwpAQCAtMTA3NCw3ICsxMDc0LDcgQEAgRU5ECiAg
ICAgTWVzc2FnZVBvcnRBcnJheSBwb3J0c0NvcHkoKnBvcnRzKTsKICAgICB2ODo6TG9jYWw8djg6
OkFycmF5PiBwb3J0QXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhwb3J0c0NvcHkuc2l6ZSgpKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvcnRzQ29weS5zaXplKCk7ICsraSkKLSAgICAgICAg
cG9ydEFycmF5LT5TZXQodjhJbnRlZ2VyKGksIGluZm8uR2V0SXNvbGF0ZSgpKSwgdG9WOChwb3J0
c0NvcHlbaV0uZ2V0KCksIGluZm8uR2V0SXNvbGF0ZSgpKSk7CisgICAgICAgIHBvcnRBcnJheS0+
U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjgocG9ydHNDb3B5W2ldLmdl
dCgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkp
KTsKICAgICByZXR1cm4gcG9ydEFycmF5OwogRU5ECiAgICAgfSBlbHNlIHsKQEAgLTIwMzUsNyAr
MjAzNSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjgke2ltcGxDbGFzc05hbWV9
Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJnCiAKICAgICAvLyBNYWtlIHN1cmUgdGhl
IGRvY3VtZW50IGlzIGFkZGVkIHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lzZSwgdGhlICR7
aW1wbENsYXNzTmFtZX0gaW5zdGFuY2UKICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5
IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5Lgot
ICAgIHRvVjgoZG9jdW1lbnQsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICB0b1Y4KGRvY3VtZW50
LCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOwog
CiBFTkQKIApAQCAtMjYyMywxMSArMjYyMywxMSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJUeXBlZEFycmF5In0p
IHsKICAgICAgICAgbXkgJHZpZXdUeXBlID0gR2V0VHlwZU5hbWVPZkV4dGVybmFsVHlwZWRBcnJh
eSgkZGF0YU5vZGUpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoJGltcGxDbGFzc05hbWUqIGltcGwsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJGltcGxDbGFzc05hbWUqIGltcGws
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNr
KGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4JHtpbXBs
Q2xhc3NOYW1lfTo6d3JhcChpbXBsLCBpc29sYXRlKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSBWOCR7aW1wbENsYXNzTmFtZX06OndyYXAoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICB3cmFw
cGVyLT5TZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheURhdGEoaW1wbC0+YmFzZUFk
ZHJlc3MoKSwgJHZpZXdUeXBlLCBpbXBsLT5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIHdyYXBwZXI7
CkBAIC0zMzQ4LDcgKzMzNDgsNyBAQCBzdWIgR2VuZXJhdGVUb1Y4Q29udmVydGVycwogCiAgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiAke2Ns
YXNzTmFtZX06OndyYXBTbG93KCR7d3JhcFNsb3dBcmd1bWVudFR5cGV9IGltcGwsIHY4OjpJc29s
YXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiAke2NsYXNzTmFtZX06OndyYXBT
bG93KCR7d3JhcFNsb3dBcmd1bWVudFR5cGV9IGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwogRU5ECkBAIC0zMzc2LDcgKzMzNzYsNyBAQCBFTkQKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKICAgICBpZiAoZnJhbWUgJiYgZnJhbWUt
PnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250ZXh0KCkuSXNFbXB0eSgpICYmIGZyYW1lLT5z
Y3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCkpIHsKICAgICAgICAg
Ly8gaW5pdGlhbGl6ZUlmTmVlZGVkIG1heSBoYXZlIGNyZWF0ZWQgYSB3cmFwcGVyIGZvciB0aGUg
b2JqZWN0LCByZXRyeSBmcm9tIHRoZSBzdGFydC4KLSAgICAgICAgcmV0dXJuICR7Y2xhc3NOYW1l
fTo6d3JhcChpbXBsLmdldCgpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuICR7Y2xhc3NOYW1l
fTo6d3JhcChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIH0KIEVO
RAogICAgIH0KQEAgLTM1ODksNyArMzU4OSw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0
cmluZygpCiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRyZXR1cm5UeXBlLmgiKTsKICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNWR1Byb3BlcnR5VGVhck9mZi5oIik7CiAgICAgICAg
IG15ICRzdmdOYXRpdmVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVh
ck9mZigkcmV0dXJuVHlwZSk7Ci0gICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4g
dG9WOChXVEY6OmdldFB0cigke3N2Z05hdGl2ZVR5cGV9OjpjcmVhdGUoJHJldHVybikpLCBhcmdz
LkdldElzb2xhdGUoKSk7XG4iOworICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJu
IHRvVjgoV1RGOjpnZXRQdHIoJHtzdmdOYXRpdmVUeXBlfTo6Y3JlYXRlKCRyZXR1cm4pKSwgYXJn
cy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTtcbiI7CiAg
ICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgIH0KIApAQCAtNDA5MywxMSArNDA5MywxMSBAQCBz
dWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICAjIHNwZWNpYWwgY2FzZSBmb3Igbm9uLURPTSBub2Rl
IGludGVyZmFjZXMKICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgcmV0
dXJuICJ0b1Y4KCR7dmFsdWV9IiAuICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
UmV0dXJuTmV3T2JqZWN0In0gPyAiJGdldElzb2xhdGVBcmcsIHRydWUpIiA6ICIkZ2V0SXNvbGF0
ZUFyZykiKTsKKyAgICAgICAgcmV0dXJuICJ0b1Y4KCR7dmFsdWV9LCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PigpIiAuICgkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmV0dXJuTmV3
T2JqZWN0In0gPyAiJGdldElzb2xhdGVBcmcsIHRydWUpIiA6ICIkZ2V0SXNvbGF0ZUFyZykiKTsK
ICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IikgewotICAgICAgICByZXR1
cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdCgkdmFsdWUkZ2V0
SXNvbGF0ZUFyZykiOworICAgICAgICByZXR1cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50
VGFyZ2V0VG9WOE9iamVjdCgkdmFsdWUsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCkkZ2V0SXNv
bGF0ZUFyZykiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsK
QEAgLTQxMTQsNyArNDExNCw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygid3RmL1JlZlB0ci5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoInd0Zi9HZXRQ
dHIuaCIpOwogCi0gICAgcmV0dXJuICJ0b1Y4KCR2YWx1ZSRnZXRJc29sYXRlQXJnKSI7CisgICAg
cmV0dXJuICJ0b1Y4KCR2YWx1ZSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSRnZXRJc29sYXRl
QXJnKSI7CiB9CiAKIHN1YiBSZXR1cm5OYXRpdmVUb0pTVmFsdWUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3Bw
CmluZGV4IGJkYTQ3YTVhY2RlYjllYmY3YWVkYmQxZjNkMzNjZjlkMTU0ZjQ0MGQuLjEzNzA4ZTM3
MjcxMDdmZDdiYTRiYzEzOGRkNDBiMzdiMGY3NmEzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApA
QCAtNTYsNyArNTYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZvb0NhbGxiYWNr
KGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgICAgIHJldHVybiB0aHJvd05vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBGbG9hdDY0QXJyYXkqIGlt
cCA9IFY4RmxvYXQ2NEFycmF5Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBFWENFUFRJ
T05fQkxPQ0soRmxvYXQzMkFycmF5KiwgYXJyYXksIFY4RmxvYXQzMkFycmF5OjpIYXNJbnN0YW5j
ZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSA/
IFY4RmxvYXQzMkFycmF5Ojp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1B
WUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDAp
OwotICAgIHJldHVybiB0b1Y4KGltcC0+Zm9vKGFycmF5KSwgYXJncy5HZXRJc29sYXRlKCkpOwor
ICAgIHJldHVybiB0b1Y4KGltcC0+Zm9vKGFycmF5KSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25D
b250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBzZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NVHJhbnNhY3Rpb24uY3BwCmluZGV4IDIyNWU1YWJiNmYx
Nzg4ZTNiYWUzNmZlYzZlMTE2NmIxM2NhNzdlMzcuLjQ0Mzc4Y2ZlZGUwNTRiZTAzNTBkZjU2NDQw
ODk0NTgxYjg0NDUwMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TVRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01UcmFu
c2FjdGlvbi5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIERPTVRyYW5zYWN0aW9uOjpjYWxs
RnVuY3Rpb24oY29uc3QgY2hhciogcHJvcGVydHlOYW1lKQogICAgIGlmICh2OENvbnRleHQuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJl
Y2VpdmVyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh0b1Y4KG1fdW5kb01hbmFnZXIp
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlY2VpdmVyID0gdjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pjo6Q2FzdCh0b1Y4KG1fdW5kb01hbmFnZXIsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
KCkpKTsKICAgICBpZiAocmVjZWl2ZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHBhcmFtZXRlcnNbMF0gPSB7IH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9JREJDdXN0b21CaW5kaW5ncy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9JREJDdXN0b21CaW5kaW5ncy5jcHAKaW5kZXggZTY1Njk3NjNl
M2YwMDI3YTMzZmRiMGY2YTQxMmM2MTIxNjkyY2IzOC4uZGU0MGYxOGE0ZjkwYmE0MzYzMzc4MzE5
NDUwNmRmYTExMjE5Zjk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
SURCQ3VzdG9tQmluZGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0lE
QkN1c3RvbUJpbmRpbmdzLmNwcApAQCAtNTAsNyArNTAsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhJREJDdXJzb3JXaXRoVmFsdWU6OnZhbHVlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdAogICAgIH0KIAogICAgIFJlZlB0cjxJREJBbnk+IHJlc3VsdCA9IGltcC0+dmFsdWUoKTsK
LSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBp
bmZvLkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSB0
b1Y4KHJlc3VsdC5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8u
R2V0SXNvbGF0ZSgpKTsKICAgICBpbmZvLkhvbGRlcigpLT5TZXRIaWRkZW5WYWx1ZShwcm9wZXJ0
eU5hbWUsIHdyYXBwZXIpOwogICAgIHJldHVybiB3cmFwcGVyOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggYTli
MzljZTExOTM2NTM1MGNhYzhjNzYyZThiYWIwMDNmNTQzZjk0ZC4uM2JhMjBkYjZhNDZiYWQyMWRk
YzkxZGVlMjA2MjZiYWRmZTdjNTQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC02MzgsMTEgKzYzOCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVCghdHJ5Q2F0Y2guSGFzQ2F1Z2h0KCkpOwogICAgICAgICBp
ZiAobWVzc2FnZVBvcnRzKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1l
c3NhZ2VQb3J0cy0+c2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgbV90cmFuc2ZlcnJlZE1l
c3NhZ2VQb3J0cy5zZXQoVjhNZXNzYWdlUG9ydDo6d3JhcChtZXNzYWdlUG9ydHMtPmF0KGkpLmdl
dCgpLCBtX3dyaXRlci5nZXRJc29sYXRlKCkpLCBpKTsKKyAgICAgICAgICAgICAgICBtX3RyYW5z
ZmVycmVkTWVzc2FnZVBvcnRzLnNldChWOE1lc3NhZ2VQb3J0Ojp3cmFwKG1lc3NhZ2VQb3J0cy0+
YXQoaSkuZ2V0KCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1fd3JpdGVyLmdldElzb2xh
dGUoKSksIGkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChhcnJheUJ1ZmZlcnMpIHsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlCdWZmZXJzLT5zaXplKCk7IGkrKykg
IHsKLSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHY4QXJyYXlCdWZmZXIg
PSBWOEFycmF5QnVmZmVyOjp3cmFwKGFycmF5QnVmZmVycy0+YXQoaSkuZ2V0KCksIG1fd3JpdGVy
LmdldElzb2xhdGUoKSk7CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB2
OEFycmF5QnVmZmVyID0gVjhBcnJheUJ1ZmZlcjo6d3JhcChhcnJheUJ1ZmZlcnMtPmF0KGkpLmdl
dCgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX3dyaXRlci5nZXRJc29sYXRlKCkpOwog
ICAgICAgICAgICAgICAgIC8vIENvYWxlc2NlIG11bHRpcGxlIG9jY3VyZW5jZXMgb2YgdGhlIHNh
bWUgYnVmZmVyIHRvIHRoZSBmaXJzdCBpbmRleC4KICAgICAgICAgICAgICAgICBpZiAoIW1fdHJh
bnNmZXJyZWRBcnJheUJ1ZmZlcnMuY29udGFpbnModjhBcnJheUJ1ZmZlcikpCiAgICAgICAgICAg
ICAgICAgICAgIG1fdHJhbnNmZXJyZWRBcnJheUJ1ZmZlcnMuc2V0KHY4QXJyYXlCdWZmZXIsIGkp
OwpAQCAtMTA1Nyw3ICsxMDU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICBpZiAoIWFycmF5QnVmZmVyVmlldy0+YnVmZmVyKCkpCiAgICAgICAgICAgICByZXR1
cm4gaGFuZGxlRXJyb3IoRGF0YUNsb25lRXJyb3IsIG5leHQpOwotICAgICAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdW5kZXJseWluZ0J1ZmZlciA9IHRvVjgoYXJyYXlCdWZmZXJWaWV3LT5idWZm
ZXIoKSwgbV93cml0ZXIuZ2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHVuZGVybHlpbmdCdWZmZXIgPSB0b1Y4KGFycmF5QnVmZmVyVmlldy0+YnVmZmVyKCksIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1fd3JpdGVyLmdldElzb2xhdGUoKSk7CiAgICAgICAg
IGlmICh1bmRlcmx5aW5nQnVmZmVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBoYW5k
bGVFcnJvcihEYXRhQ2xvbmVFcnJvciwgbmV4dCk7CiAgICAgICAgIFN0YXRlQmFzZSogc3RhdGVP
dXQgPSBkb1NlcmlhbGl6ZSh1bmRlcmx5aW5nQnVmZmVyLCAwKTsKQEAgLTE2MzQsNyArMTYzNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChwaXhlbEFycmF5LT5sZW5ndGgoKSA+PSBwaXhl
bERhdGFMZW5ndGgpOwogICAgICAgICBtZW1jcHkocGl4ZWxBcnJheS0+ZGF0YSgpLCBtX2J1ZmZl
ciArIG1fcG9zaXRpb24sIHBpeGVsRGF0YUxlbmd0aCk7CiAgICAgICAgIG1fcG9zaXRpb24gKz0g
cGl4ZWxEYXRhTGVuZ3RoOwotICAgICAgICAqdmFsdWUgPSB0b1Y4KGltYWdlRGF0YS5yZWxlYXNl
KCksIG1faXNvbGF0ZSk7CisgICAgICAgICp2YWx1ZSA9IHRvVjgoaW1hZ2VEYXRhLnJlbGVhc2Uo
KSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC0xNjU2LDcgKzE2NTYsNyBAQCBwcml2YXRlOgogICAgICAgICBS
ZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gZG9SZWFkQXJyYXlCdWZmZXIoKTsKICAg
ICAgICAgaWYgKCFhcnJheUJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgKnZhbHVlID0gdG9WOChhcnJheUJ1ZmZlci5yZWxlYXNlKCksIG1faXNvbGF0ZSk7CisgICAg
ICAgICp2YWx1ZSA9IHRvVjgoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTE2ODIsNTggKzE2ODIsNTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgc3dpdGNoIChzdWJUYWcpIHsKICAgICAgICAgY2FzZSBCeXRlQXJyYXlUYWc6Ci0g
ICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KEludDhBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJl
bGVhc2UoKSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCksIG1faXNvbGF0ZSk7CisgICAgICAgICAg
ICAqdmFsdWUgPSB0b1Y4KEludDhBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2UoKSwg
Ynl0ZU9mZnNldCwgYnl0ZUxlbmd0aCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNv
bGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnNpZ25lZEJ5dGVBcnJh
eVRhZzoKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoVWludDhBcnJheTo6Y3JlYXRlKGFycmF5
QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCksIG1faXNvbGF0ZSk7Cisg
ICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KFVpbnQ4QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5y
ZWxlYXNlKCksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PigpLCAgbV9pc29sYXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFVuc2ln
bmVkQnl0ZUNsYW1wZWRBcnJheVRhZzoKLSAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoVWludDhD
bGFtcGVkQXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIGJ5
dGVMZW5ndGgpLCBtX2lzb2xhdGUpOworICAgICAgICAgICAgKnZhbHVlID0gdG9WOChVaW50OENs
YW1wZWRBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgYnl0
ZUxlbmd0aCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTaG9ydEFycmF5VGFnOiB7CiAgICAgICAgICAgICB1
aW50MzJfdCBzaG9ydExlbmd0aCA9IGJ5dGVMZW5ndGggLyBzaXplb2YoaW50MTZfdCk7CiAgICAg
ICAgICAgICBpZiAoc2hvcnRMZW5ndGggKiBzaXplb2YoaW50MTZfdCkgIT0gYnl0ZUxlbmd0aCkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4
KEludDE2QXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIHNo
b3J0TGVuZ3RoKSwgbV9pc29sYXRlKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoSW50MTZB
cnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgc2hvcnRMZW5n
dGgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBVbnNpZ25lZFNob3J0QXJyYXlUYWc6IHsK
ICAgICAgICAgICAgIHVpbnQzMl90IHNob3J0TGVuZ3RoID0gYnl0ZUxlbmd0aCAvIHNpemVvZih1
aW50MTZfdCk7CiAgICAgICAgICAgICBpZiAoc2hvcnRMZW5ndGggKiBzaXplb2YodWludDE2X3Qp
ICE9IGJ5dGVMZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgKnZhbHVlID0gdG9WOChVaW50MTZBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2Uo
KSwgYnl0ZU9mZnNldCwgc2hvcnRMZW5ndGgpLCBtX2lzb2xhdGUpOworICAgICAgICAgICAgKnZh
bHVlID0gdG9WOChVaW50MTZBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0
ZU9mZnNldCwgc2hvcnRMZW5ndGgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xh
dGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBJbnRBcnJh
eVRhZzogewogICAgICAgICAgICAgdWludDMyX3QgaW50TGVuZ3RoID0gYnl0ZUxlbmd0aCAvIHNp
emVvZihpbnQzMl90KTsKICAgICAgICAgICAgIGlmIChpbnRMZW5ndGggKiBzaXplb2YoaW50MzJf
dCkgIT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAqdmFsdWUgPSB0b1Y4KEludDMyQXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNl
KCksIGJ5dGVPZmZzZXQsIGludExlbmd0aCksIG1faXNvbGF0ZSk7CisgICAgICAgICAgICAqdmFs
dWUgPSB0b1Y4KEludDMyQXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5dGVP
ZmZzZXQsIGludExlbmd0aCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIFVuc2lnbmVkSW50
QXJyYXlUYWc6IHsKICAgICAgICAgICAgIHVpbnQzMl90IGludExlbmd0aCA9IGJ5dGVMZW5ndGgg
LyBzaXplb2YodWludDMyX3QpOwogICAgICAgICAgICAgaWYgKGludExlbmd0aCAqIHNpemVvZih1
aW50MzJfdCkgIT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KFVpbnQzMkFycmF5OjpjcmVhdGUoYXJyYXlCdWZmZXIu
cmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBpbnRMZW5ndGgpLCBtX2lzb2xhdGUpOworICAgICAgICAg
ICAgKnZhbHVlID0gdG9WOChVaW50MzJBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVyLnJlbGVhc2Uo
KSwgYnl0ZU9mZnNldCwgaW50TGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgbV9p
c29sYXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmxv
YXRBcnJheVRhZzogewogICAgICAgICAgICAgdWludDMyX3QgZmxvYXRMZW5ndGggPSBieXRlTGVu
Z3RoIC8gc2l6ZW9mKGZsb2F0KTsKICAgICAgICAgICAgIGlmIChmbG9hdExlbmd0aCAqIHNpemVv
ZihmbG9hdCkgIT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KEZsb2F0MzJBcnJheTo6Y3JlYXRlKGFycmF5QnVmZmVy
LnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgZmxvYXRMZW5ndGgpLCBtX2lzb2xhdGUpOworICAgICAg
ICAgICAgKnZhbHVlID0gdG9WOChGbG9hdDMyQXJyYXk6OmNyZWF0ZShhcnJheUJ1ZmZlci5yZWxl
YXNlKCksIGJ5dGVPZmZzZXQsIGZsb2F0TGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgbV9pc29sYXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgRG91YmxlQXJyYXlUYWc6IHsKICAgICAgICAgICAgIHVpbnQzMl90IGZsb2F0TGVuZ3RoID0g
Ynl0ZUxlbmd0aCAvIHNpemVvZihkb3VibGUpOwogICAgICAgICAgICAgaWYgKGZsb2F0TGVuZ3Ro
ICogc2l6ZW9mKGRvdWJsZSkgIT0gYnl0ZUxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KEZsb2F0NjRBcnJheTo6Y3JlYXRlKGFy
cmF5QnVmZmVyLnJlbGVhc2UoKSwgYnl0ZU9mZnNldCwgZmxvYXRMZW5ndGgpLCBtX2lzb2xhdGUp
OworICAgICAgICAgICAgKnZhbHVlID0gdG9WOChGbG9hdDY0QXJyYXk6OmNyZWF0ZShhcnJheUJ1
ZmZlci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIGZsb2F0TGVuZ3RoKSwgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4oKSwgbV9pc29sYXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRGF0YVZpZXdUYWc6Ci0gICAgICAgICAgICAqdmFsdWUgPSB0b1Y4KERhdGFW
aWV3OjpjcmVhdGUoYXJyYXlCdWZmZXIucmVsZWFzZSgpLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3Ro
KSwgbV9pc29sYXRlKTsKKyAgICAgICAgICAgICp2YWx1ZSA9IHRvVjgoRGF0YVZpZXc6OmNyZWF0
ZShhcnJheUJ1ZmZlci5yZWxlYXNlKCksIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzY4LDcgKzE3Njgs
NyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWRvUmVhZFVpbnQ2NCgmc2l6ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFBhc3NSZWZQdHI8QmxvYj4gYmxvYiA9IEJsb2I6
OmNyZWF0ZShLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdHlwZSwgc2l6ZSk7Ci0gICAgICAg
ICp2YWx1ZSA9IHRvVjgoYmxvYiwgbV9pc29sYXRlKTsKKyAgICAgICAgKnZhbHVlID0gdG9WOChi
bG9iLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE3ODUsNyArMTc4NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGlmICghcmVhZFdlYkNvcmVTdHJpbmcoJnVybCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBmcyA9IERPTUZpbGVTeXN0ZW06OmNyZWF0
ZShnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIG5hbWUsIHN0YXRpY19jYXN0PFdlYkNvcmU6
OkZpbGVTeXN0ZW1UeXBlPih0eXBlKSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIEFzeW5j
RmlsZVN5c3RlbTo6Y3JlYXRlKCkpOwotICAgICAgICAqdmFsdWUgPSB0b1Y4KGZzLnJlbGVhc2Uo
KSwgbV9pc29sYXRlKTsKKyAgICAgICAgKnZhbHVlID0gdG9WOChmcy5yZWxlYXNlKCksIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+KCksIG1faXNvbGF0ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZgpAQCAtMTgwMiw3ICsxODAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KCFyZWFkV2ViQ29yZVN0cmluZygmdHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIFBhc3NSZWZQdHI8RmlsZT4gZmlsZSA9IEZpbGU6OmNyZWF0ZShwYXRoLCBLVVJMKFBh
cnNlZFVSTFN0cmluZywgdXJsKSwgdHlwZSk7Ci0gICAgICAgICp2YWx1ZSA9IHRvVjgoZmlsZSwg
bV9pc29sYXRlKTsKKyAgICAgICAgKnZhbHVlID0gdG9WOChmaWxlLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PigpLCBtX2lzb2xhdGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTE4MjQsNyArMTgyNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVhdGUocGF0aCwgS1VSTChQ
YXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyksIHR5cGUpKTsKICAgICAgICAgfQotICAgICAgICAq
dmFsdWUgPSB0b1Y4KGZpbGVMaXN0LCBtX2lzb2xhdGUpOworICAgICAgICAqdmFsdWUgPSB0b1Y4
KGZpbGVMaXN0LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX2lzb2xhdGUpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTIwMjIsNyArMjAyMiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKGluZGV4ID49IG1fdHJhbnNmZXJy
ZWRNZXNzYWdlUG9ydHMtPnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgKm9iamVjdCA9IFY4TWVzc2FnZVBvcnQ6OndyYXAobV90cmFuc2ZlcnJlZE1lc3NhZ2VQb3J0
cy0+YXQoaW5kZXgpLmdldCgpLCBtX3JlYWRlci5nZXRJc29sYXRlKCkpOworICAgICAgICAqb2Jq
ZWN0ID0gVjhNZXNzYWdlUG9ydDo6d3JhcChtX3RyYW5zZmVycmVkTWVzc2FnZVBvcnRzLT5hdChp
bmRleCkuZ2V0KCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIG1fcmVhZGVyLmdldElzb2xh
dGUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMjAzNCw3ICsyMDM0LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHJlc3VsdCA9IG1fYXJyYXlCdWZmZXJzLmF0KGluZGV4KTsKICAgICAgICAg
aWYgKHJlc3VsdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFY4QXJyYXlCdWZm
ZXI6OndyYXAoQXJyYXlCdWZmZXI6OmNyZWF0ZShtX2FycmF5QnVmZmVyQ29udGVudHMtPmF0KGlu
ZGV4KSkuZ2V0KCksIG1fcmVhZGVyLmdldElzb2xhdGUoKSk7CisgICAgICAgICAgICByZXN1bHQg
PSBWOEFycmF5QnVmZmVyOjp3cmFwKEFycmF5QnVmZmVyOjpjcmVhdGUobV9hcnJheUJ1ZmZlckNv
bnRlbnRzLT5hdChpbmRleCkpLmdldCgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBtX3Jl
YWRlci5nZXRJc29sYXRlKCkpOwogICAgICAgICAgICAgbV9hcnJheUJ1ZmZlcnNbaW5kZXhdID0g
cmVzdWx0OwogICAgICAgICB9CiAgICAgICAgICpvYmplY3QgPSByZXN1bHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCmluZGV4IGM4ZjMxYjI4Y2YxNWI0YjEwZWVkZTg1NThl
NGY2NWM3MDg3ZGI4MzMuLjM4ZDVjYWIxMDdhNzgxZDY4NWQyYzkxZDhlMzNkOTA5MzY4ZTRkYzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCkBAIC0xMjgsNyArMTI4LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHN0cnVjdCBWOFZhbHVlVHJhaXRzIHsKICAgICAg
ICAgc3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJyYXlWOFZhbHVlKGNvbnN0
IFQmIHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIodmFsdWUpLCBpc29sYXRlKTsKKyAgICAgICAgICAgIHJl
dHVybiB0b1Y4KFdURjo6Z2V0UHRyKHZhbHVlKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwg
aXNvbGF0ZSk7CiAgICAgICAgIH0KICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4Q29sbGVjdGlvbi5oCmluZGV4IDVkZmY2ZTdmMGQxNTI4MzRlMjljNDgxZTNiZGNlOThkZGNm
ODBiNGUuLjdlNDNkOWFlM2JhZGEzYzhlMzE3MmQwMmJjMTkzYmY1OGVkNmMwYjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCkBAIC00MSwxMSArNDEsMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogLy8gRklYTUU6IFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUg
bmFtZWQgdXNpbmcgdG8qIHNpbmNlIHRoZXkgcmV0dXJuIHRoZSBpdGVtIChnZXQqIGlzIHVzZWQg
Zm9yIG1ldGhvZCB0aGF0IHRha2UgYSByZWYgcGFyYW0pLgogLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDY2NC4KIAotdGVtcGxhdGU8Y2xhc3MgVD4gc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRWOE9iamVjdChUKiBpbXBsZW1lbnRhdGlvbiwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCit0ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGdldFY4T2JqZWN0KFQqIGltcGxlbWVudGF0aW9uLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAg
IGlmICghaW1wbGVtZW50YXRpb24pCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwotICAg
IHJldHVybiB0b1Y4KGltcGxlbWVudGF0aW9uLCBpc29sYXRlKTsKKyAgICByZXR1cm4gdG9WOChp
bXBsZW1lbnRhdGlvbiwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIENvbGxlY3Rpb24qIHRvTmF0aXZlQ29sbGVjdGlvbih2
ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0KQpAQCAtNTMsMjAgKzUzLDIwIEBAIHRlbXBsYXRl
PGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyBDb2xsZWN0aW9uKiB0b05hdGl2ZUNvbGxlY3Rpb24o
djg6OkxvY2FsPHY4OjpPCiAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29sbGVjdGlvbio+
KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdElu
ZGV4KSk7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gZ2V0VjhPYmplY3QoUGFzc1JlZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCit0ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGdldFY4T2JqZWN0KFBhc3NSZWZQdHI8VD4gaW1wbGVtZW50YXRpb24sIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7Ci0gICAg
cmV0dXJuIGdldFY4T2JqZWN0KGltcGxlbWVudGF0aW9uLmdldCgpLCBpc29sYXRlKTsKKyAgICBy
ZXR1cm4gZ2V0VjhPYmplY3QoaW1wbGVtZW50YXRpb24uZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiB9CiAKIC8vIFJldHVybnMgbmFtZWQgcHJvcGVydHkgb2YgYSBjb2xsZWN0aW9u
LgotdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0TmFtZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCit0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVtVHlwZT4g
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROYW1lZFByb3BlcnR5T2ZDb2xsZWN0aW9u
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0
LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQogewogICAgIC8vIEZJWE1FOiBhc3NlcnQgb2JqZWN0IGlzIGEgY29sbGVjdGlvbiB0
eXBlCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwog
ICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKG9iamVjdCkgIT0gJlY4Tm9k
ZTo6aW5mbyk7CiAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlv
bjxDb2xsZWN0aW9uPihvYmplY3QpOwogICAgIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWUgPSB0
b1dlYkNvcmVBdG9taWNTdHJpbmdXaXRoTnVsbENoZWNrKG5hbWUpOwotICAgIHJldHVybiBnZXRW
OE9iamVjdDxJdGVtVHlwZT4oY29sbGVjdGlvbi0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZSksIGlz
b2xhdGUpOworICAgIHJldHVybiBnZXRWOE9iamVjdDxJdGVtVHlwZT4oY29sbGVjdGlvbi0+bmFt
ZWRJdGVtKHByb3BlcnR5TmFtZSksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIC8v
IEEgdGVtcGxhdGUgb2YgbmFtZWQgcHJvcGVydHkgYWNjZXNzb3Igb2YgY29sbGVjdGlvbnMuCkBA
IC03NywyMyArNzcsMjMgQEAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3MgSXRlbVR5
cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29sbGVjdGkKICAgICBpZiAoaW5mby5I
b2xkZXIoKS0+SGFzUmVhbE5hbWVkQ2FsbGJhY2tQcm9wZXJ0eShuYW1lKSkKICAgICAgICAgcmV0
dXJuIHY4VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4gZ2V0TmFtZWRQcm9wZXJ0eU9mQ29sbGVj
dGlvbjxDb2xsZWN0aW9uLCBJdGVtVHlwZT4obmFtZSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiBnZXROYW1lZFByb3BlcnR5T2ZDb2xsZWN0aW9uPENvbGxl
Y3Rpb24sIEl0ZW1UeXBlPihuYW1lLCBpbmZvLkhvbGRlcigpLCBpbmZvLkhvbGRlcigpLT5DcmVh
dGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBw
cm9wZXJ0eSBhdCB0aGUgaW5kZXggb2YgYSBjb2xsZWN0aW9uLgotdGVtcGxhdGU8Y2xhc3MgQ29s
bGVjdGlvbiwgY2xhc3MgSXRlbVR5cGU+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0
SW5kZXhlZFByb3BlcnR5T2ZDb2xsZWN0aW9uKHVpbnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6
Ok9iamVjdD4gb2JqZWN0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3RlbXBsYXRlPGNsYXNzIENv
bGxlY3Rpb24sIGNsYXNzIEl0ZW1UeXBlPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdl
dEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbih1aW50MzJfdCBpbmRleCwgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IG9iamVjdCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAvLyBGSVhNRTogQXNzZXJ0IHRoYXQgb2Jq
ZWN0IG11c3QgYmUgYSBjb2xsZWN0aW9uIHR5cGUuCiAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6
bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwogICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdy
YXBwZXJUeXBlKG9iamVjdCkgIT0gJlY4Tm9kZTo6aW5mbyk7CiAgICAgQ29sbGVjdGlvbiogY29s
bGVjdGlvbiA9IHRvTmF0aXZlQ29sbGVjdGlvbjxDb2xsZWN0aW9uPihvYmplY3QpOwotICAgIHJl
dHVybiBnZXRWOE9iamVjdDxJdGVtVHlwZT4oY29sbGVjdGlvbi0+aXRlbShpbmRleCksIGlzb2xh
dGUpOworICAgIHJldHVybiBnZXRWOE9iamVjdDxJdGVtVHlwZT4oY29sbGVjdGlvbi0+aXRlbShp
bmRleCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIC8vIEEgdGVtcGxhdGUgb2Yg
aW5kZXggaW50ZXJjZXB0b3Igb2YgY29sbGVjdGlvbnMuCiB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0
aW9uLCBjbGFzcyBJdGVtVHlwZT4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb2xsZWN0
aW9uSW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQogewotICAgIHJldHVybiBnZXRJbmRleGVkUHJvcGVydHlPZkNvbGxlY3Rp
b248Q29sbGVjdGlvbiwgSXRlbVR5cGU+KGluZGV4LCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIGdldEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVjdGlvbjxDb2xs
ZWN0aW9uLCBJdGVtVHlwZT4oaW5kZXgsIGluZm8uSG9sZGVyKCksIGluZm8uSG9sZGVyKCktPkNy
ZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIC8vIEdldCBhbiBhcnJh
eSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBpbmRleGVkIHByb3BlcnRpZXMgb2YgSFRNTFNlbGVj
dEVsZW1lbnQgYW5kIEhUTUxGb3JtRWxlbWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKaW5kZXggMGMwNjJlYzkzZGJlZDhlZGI2YjA0NTkw
OWUwMGMyMzgwMjlmNjNhNC4uMTFlNDJjNTRkYzJmOWYyZTVhZDBiNzUyNDg1ODljMjJiOWEwZTBh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVs
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5j
cHAKQEAgLTQ4OCw3ICs0ODgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gcHJvcGVydHksIGNvbnN0IHY4OjpBYwogICAgIEF0b21p
Y1N0cmluZyBuYW1lID0gdG9XZWJDb3JlQXRvbWljU3RyaW5nKHByb3BlcnR5KTsKICAgICBIVE1M
RG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4SFRNTERvY3VtZW50Ojp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKICAgICBBU1NFUlQoaHRtbERvY3VtZW50KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcmVzdWx0ID0gVjhIVE1MRG9jdW1lbnQ6OmdldE5hbWVkUHJvcGVydHkoaHRtbERvY3Vt
ZW50LCBuYW1lLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHJlc3VsdCA9IFY4SFRNTERvY3VtZW50OjpnZXROYW1lZFByb3BlcnR5KGh0bWxEb2N1bWVudCwg
bmFtZSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKICAgICBpZiAoIXJlc3VsdC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHByb3RvdHlwZSA9IGluZm8uSG9sZGVyKCktPkdldFBy
b3RvdHlwZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
cmFwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAK
aW5kZXggZTNiOGVkM2E5NzI2MjViMWFkN2VjMzVjZDkyZjJjNmJjMWVlMDJhYi4uOTZlMGE1NjMx
YzE3NWU3ZDU0NTI0NDg3YzU2YWUyOTE2NWY2MDAwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCkBAIC0yNDYsMTAgKzI0NiwxMCBAQCBib29sIFY4RE9N
V3JhcHBlcjo6aXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgV3Jh
cHBlclR5cGVJbmZvKgogCiAjZGVmaW5lIFRSWV9UT19XUkFQX1dJVEhfSU5URVJGQUNFKGludGVy
ZmFjZU5hbWUpIFwKICAgICBpZiAoZXZlbnROYW1lcygpLmludGVyZmFjZUZvciMjaW50ZXJmYWNl
TmFtZSA9PSBkZXNpcmVkSW50ZXJmYWNlKSBcCi0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PGludGVyZmFjZU5hbWUqPih0YXJnZXQpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8aW50ZXJmYWNlTmFtZSo+KHRhcmdldCksIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiAKIC8vIEEgSlMgb2JqZWN0IG9mIHR5cGUgRXZlbnRUYXJnZXQgaXMgbGltaXRl
ZCB0byBhIHNtYWxsIG51bWJlciBvZiBwb3NzaWJsZSBjbGFzc2VzLgotdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRh
cmdldCogdGFyZ2V0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQq
IHRhcmdldCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIHY4TnVs
bFdpdGhDaGVjayhpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFw
cGVyLmgKaW5kZXggYjEyM2Y2YWI5YjI3ZTBmODhjM2JjMWIwYjllYWQwZTVlZmQxZjRiNS4uM2Ji
NTFlMzVhNWY5Mzg5ZDM0N2VhYzMwMDdiNTU3OTA3ZjBmZTNhZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmgKQEAgLTgxLDEyICs4MSwxMiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyogZG9tV3JhcHBlclR5
cGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KFBhc3NSZWZQdHI8RXZlbnRU
YXJnZXQ+IGV2ZW50VGFyZ2V0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCisgICAgICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChQ
YXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBldmVudFRhcmdldCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUgPSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydEV2
ZW50VGFyZ2V0VG9WOE9iamVjdChldmVudFRhcmdldC5nZXQoKSwgaXNvbGF0ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChldmVudFRhcmdldC5nZXQo
KSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVu
dFRhcmdldCosIHY4OjpJc29sYXRlKiA9IDApOworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250
ZXh0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
dmVudExpc3RlbmVyPiBnZXRFdmVudExpc3RlbmVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBib29sIGlzQXR0cmlidXRlLCBMaXN0ZW5lckxvb2t1cFR5cGUgbG9va3VwKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhUaHJvd0V4Y2VwdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFRocm93RXhjZXB0aW9uLmNwcAppbmRleCA2OTg4
YjI4ZTU1NDk3MzUzNmJkZjM3ZDc3NzBiNzQ3MWNiNDlmNWI3Li5hZTMyNTFjMTBmYTI3YWFkZjE0
ZDI2NzY5NDg1N2NlMTYyMmVmZjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFRocm93RXhjZXB0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFRocm93RXhjZXB0aW9uLmNwcApAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMgdm9pZCBkb21F
eGNlcHRpb25TdGFja1NldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYQogCiAjZGVmaW5lIFRSWV9UT19DUkVBVEVfRVhDRVBUSU9OKGludGVyZmFjZU5hbWUp
IFwKICAgICBjYXNlIGludGVyZmFjZU5hbWUjI1R5cGU6IFwKLSAgICAgICAgZXhjZXB0aW9uID0g
dG9WOChpbnRlcmZhY2VOYW1lOjpjcmVhdGUoZGVzY3JpcHRpb24pLCBpc29sYXRlKTsgXAorICAg
ICAgICBleGNlcHRpb24gPSB0b1Y4KGludGVyZmFjZU5hbWU6OmNyZWF0ZShkZXNjcmlwdGlvbiks
IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCksIGlzb2xhdGUpOyBcCiAgICAgICAgIGJyZWFrOwog
CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhUaHJvd0V4Y2VwdGlvbjo6c2V0RE9NRXhjZXB0aW9u
KGludCBlYywgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JDdXN0b20uY3BwCmluZGV4IGMyNGY0ZDM0OWRmNWY1YTk3
Y2M5MDM5ZjJkMzg0NTAyYzg2ODYxMWQuLmE5MDg0NzUwNGFmOTZkOTE0OTcyOGUzOWVlNGRhYjkx
N2U4YWE4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEJsb2JDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEJsb2JDdXN0b20uY3BwCkBAIC00MywxNSArNDMsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChCbG9iKiBpbXBsLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEJsb2IqIGltcGwsIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7
CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUp
OwogCiAgICAgaWYgKGltcGwtPmlzRmlsZSgpKQotICAgICAgICByZXR1cm4gdG9WOCh0b0ZpbGUo
aW1wbCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOCh0b0ZpbGUoaW1wbCksIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAKLSAgICByZXR1cm4gVjhCbG9iOjp3cmFwKGltcGwsIGlz
b2xhdGUpOworICAgIHJldHVybiBWOEJsb2I6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4QmxvYjo6Y29uc3RydWN0b3JD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtNzEsNyArNzEsNyBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhCbG9iOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiAKICAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpIHsKICAgICAgICAgUmVm
UHRyPEJsb2I+IGJsb2IgPSBCbG9iOjpjcmVhdGUoKTsKLSAgICAgICAgcmV0dXJuIHRvVjgoYmxv
Yi5nZXQoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgICAgICByZXR1cm4gdG9WOChibG9iLmdl
dCgpLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkp
OwogICAgIH0KIAogICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGZpcnN0QXJnID0gYXJnc1swXTsK
QEAgLTEzOCw3ICsxMzgsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhCbG9iOjpjb25zdHJ1
Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgfQogCiAgICAgUmVm
UHRyPEJsb2I+IGJsb2IgPSBibG9iQnVpbGRlci0+Z2V0QmxvYih0eXBlLCBCbG9iQ29uc3RydWN0
ZWRCeUNvbnN0cnVjdG9yKTsKLSAgICByZXR1cm4gdG9WOChibG9iLmdldCgpLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoYmxvYi5nZXQoKSwgYXJncy5Ib2xkZXIoKS0+Q3Jl
YXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q1NTUnVsZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
U1NSdWxlQ3VzdG9tLmNwcAppbmRleCA3MjA3YTNkYzAzYjExYzA2NmUxMDA4MWI1MmI1MmFkYTg4
M2QxM2E2Li45ZmFkMmQ1NGVjNzE3MzU3MGI3ZDBkZjliOGU2YWM0ZmNjMWI1ZTdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9tLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NSdWxlQ3VzdG9t
LmNwcApAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KENTU1J1bGUqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQor
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ1NTUnVsZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBp
ZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CkBAIC01
MiwyNyArNTIsMjcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoQ1NTUnVsZSogaW1wbCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiAgICAgICAgIC8vIENTU1Vua25vd25SdWxlLmlkbCBpcyBl
eHBsaWNpdGx5IGV4Y2x1ZGVkIGFzIGl0IGRvZXNuJ3QgYWRkIGFueXRoaW5nCiAgICAgICAgIC8v
IG92ZXIgQ1NTUnVsZS5pZGwgKHNlZSBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDogJ2JpbmRpbmdz
X2lkbF9maWxlcycpLgogICAgICAgICAvLyAtPiBVc2UgdGhlIGJhc2UgY2xhc3Mgd3JhcHBlciBo
ZXJlLgotICAgICAgICByZXR1cm4gVjhDU1NSdWxlOjp3cmFwKGltcGwsIGlzb2xhdGUpOworICAg
ICAgICByZXR1cm4gVjhDU1NSdWxlOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiAgICAgY2FzZSBDU1NSdWxlOjpTVFlMRV9SVUxFOgotICAgICAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpbXBsKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogICAgIGNhc2UgQ1NTUnVsZTo6Q0hBUlNFVF9SVUxFOgotICAgICAgICByZXR1
cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZSo+KGltcGwpLCBpc29sYXRlKTsKKyAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTQ2hhcnNldFJ1bGUqPihpbXBsKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIENTU1J1bGU6OklNUE9SVF9SVUxFOgot
ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaW1wbCksIGlz
b2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4o
aW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBDU1NSdWxlOjpNRURJ
QV9SVUxFOgotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihp
bXBsKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU01lZGlh
UnVsZSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgQ1NTUnVs
ZTo6Rk9OVF9GQUNFX1JVTEU6Ci0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENTU0Zv
bnRGYWNlUnVsZSo+KGltcGwpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiAgICAgY2FzZSBDU1NSdWxlOjpQQUdFX1JVTEU6Ci0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PENTU1BhZ2VSdWxlKj4oaW1wbCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwogICAgIGNhc2UgQ1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FX1JVTEU6Ci0gICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lUnVsZSo+KGltcGwpLCBpc29s
YXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBDU1NSdWxl
OjpXRUJLSVRfS0VZRlJBTUVTX1JVTEU6Ci0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihpbXBsKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihpbXBsKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIENTU1J1bGU6OldFQktJVF9SRUdJT05fUlVM
RToKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTUmVnaW9uUnVsZSo+
KGltcGwpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0
Q1NTUmVnaW9uUnVsZSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIH0K
LSAgICByZXR1cm4gVjhDU1NSdWxlOjp3cmFwKGltcGwsIGlzb2xhdGUpOworICAgIHJldHVybiBW
OENTU1J1bGU6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3BwCmluZGV4IDViOGE4YzY0NTM2MWU3MzU0NWQ4
NTljYWRmNzRmMzdiY2Q2NzYzMzYuLjUyMzBiZjMyZGM3YjQzYjRhNjFiNDU0ODhkNzgzMTVjMmE2
MTc3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENT
U1ZhbHVlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDU1NWYWx1ZUN1c3RvbS5jcHAKQEAgLTQ2LDI3ICs0NiwyNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KENTU1ZhbHVlKiBpbXBsLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KENTU1ZhbHVlKiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhD
aGVjayhpc29sYXRlKTsKICAgICBpZiAoaW1wbC0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgp
KQotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZSo+KGltcGwpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
ICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgaWYgKGltcGwtPmlzV2ViS2l0Q1NTRmlsdGVy
VmFsdWUoKSkKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTRmlsdGVy
VmFsdWUqPihpbXBsKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFdlYktpdENTU0ZpbHRlclZhbHVlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiAjZW5kaWYKICAgICBpZiAoaW1wbC0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaW1wbCksIGlzb2xhdGUpOworICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihpbXBsKSwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKICAgICBpZiAoaW1wbC0+aXNQcmltaXRpdmVWYWx1ZSgpKQotICAgICAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGltcGwpLCBpc29s
YXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
PihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICNpZiBFTkFCTEUoU1ZHKQogICAg
IGlmIChpbXBsLT5pc1NWR1BhaW50KCkpCi0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFNWR1BhaW50Kj4oaW1wbCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxTVkdQYWludCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGlm
IChpbXBsLT5pc1NWR0NvbG9yKCkpCi0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNW
R0NvbG9yKj4oaW1wbCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxTVkdDb2xvcio+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogI2VuZGlmCi0g
ICAgcmV0dXJuIFY4Q1NTVmFsdWU6OndyYXAoaW1wbCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4
Q1NTVmFsdWU6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAKaW5kZXggNDA2MDA5NmNiYmJmNDczMDVlY2ZjZjk2ZjUzZDE2ZjU0ZTkwZTk5NC4uM2I4
ZTQ5ZDk5NWQzZmJiNzliNmZhZTExYzdjZWE2NDEzMGU4ZTYzYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCkBAIC00OCwxMyArNDgsMTMgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhPYmplY3Qo
Q2FudmFzU3R5bGUqIHN0eWxlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOE9iamVjdChDYW52YXNTdHlsZSogc3R5bGUsIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAg
ICAgaWYgKHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKQotICAgICAgICByZXR1cm4gdG9WOChzdHls
ZS0+Y2FudmFzR3JhZGllbnQoKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0eWxl
LT5jYW52YXNHcmFkaWVudCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogCiAgICAgaWYg
KHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpCi0gICAgICAgIHJldHVybiB0b1Y4KHN0eWxlLT5jYW52
YXNQYXR0ZXJuKCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdHlsZS0+Y2FudmFz
UGF0dGVybigpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogCiAgICAgcmV0dXJuIHY4U3Ry
aW5nKHN0eWxlLT5jb2xvcigpLCBpc29sYXRlKTsKIH0KQEAgLTczLDcgKzczLDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvQ2FudmFzU3R5bGUodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlKQogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzdHJva2VTdHlsZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCogaW1wbCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOE9iamVjdChpbXBsLT5zdHJva2VTdHlsZSgpLCBp
bmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW1wbC0+c3Ryb2tlU3R5
bGUoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKIH0KIAogdm9pZCBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlU3R5bGVBY2Nl
c3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC04OCw3ICs4OCw3IEBA
IHZvaWQgVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlQWNjZXNzb3JTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogaW1wbCA9IFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOE9iamVjdChpbXBsLT5maWxs
U3R5bGUoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGltcGwt
PmZpbGxTdHlsZSgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOwogfQogCiB2b2lkIFY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsU3R5
bGVBY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCmlu
ZGV4IDk5ZDEyN2Q2YjQ4OTc5NDM3NGQyYWI3NjBjYzA5NjgzYzZlMmIwNmYuLjZkYjMzYzVlNDM2
ZWZjOTQwZTc3MWQ0MmU1NGRiZWJmOGMyNmFhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCkBAIC05Miw3ICs5Miw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOENvbnNvbGU6Om1lbW9yeUFjY2Vzc29yR2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ29uc29s
ZS5tZW1vcnlBY2Nlc3NvckdldHRlciIpOwogICAgIENvbnNvbGUqIGltcCA9IFY4Q29uc29sZTo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT5tZW1vcnkoKSwg
aW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+bWVtb3J5KCksIGluZm8u
SG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCmluZGV4IDcyODBkOTFjNTc0OWFlYWFm
NzM0OTllZTczNWJjMTIyNGMxZmQyODIuLjliNmFjYzQ4MDFhMjkxODZjNWI2MWE5Y2Q3OGVhNjIz
ZmEwYzE1N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERPTVdpbmRvd0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcApAQCAtNDY1LDcgKzQ2NSw3IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6b3BlbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCiAgICAgaWYgKCFvcGVuZWRXaW5kb3cpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiAKLSAgICByZXR1cm4gdG9WOChvcGVuZWRXaW5kb3cucmVsZWFzZSgpLCBhcmdzLkdl
dElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgob3BlbmVkV2luZG93LnJlbGVhc2UoKSwgYXJn
cy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV2luZG93OjppbmRleGVkUHJvcGVydHlHZXR0ZXIo
dWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC00ODIsMTIg
KzQ4MiwxMSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6OmluZGV4ZWRQcm9w
ZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3QgdgogCiAgICAgRnJhbWUqIGNoaWxkID0g
ZnJhbWUtPnRyZWUoKS0+c2NvcGVkQ2hpbGQoaW5kZXgpOwogICAgIGlmIChjaGlsZCkKLSAgICAg
ICAgcmV0dXJuIHRvVjgoY2hpbGQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGNoaWxkLT5kb2N1bWVudCgpLT5kb21XaW5k
b3coKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKIAogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCi0KIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOERPTVdpbmRvdzo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5ET01XaW5kb3cuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwpAQCAtNTA1LDcgKzUwNCw3IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdpbmRvdzo6bmFtZWRQcm9wZXJ0eUdldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtCiAgICAgQXRvbWljU3RyaW5nIHByb3BOYW1lID0gdG9X
ZWJDb3JlQXRvbWljU3RyaW5nKG5hbWUpOwogICAgIEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVl
KCktPnNjb3BlZENoaWxkKHByb3BOYW1lKTsKICAgICBpZiAoY2hpbGQpCi0gICAgICAgIHJldHVy
biB0b1Y4KGNoaWxkLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSwgaW5mby5HZXRJc29sYXRlKCkp
OworICAgICAgICByZXR1cm4gdG9WOChjaGlsZC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCksIGlu
Zm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAKICAg
ICAvLyBTZWFyY2ggSURMIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBwcm90b3R5cGUKICAgICBp
ZiAoIWluZm8uSG9sZGVyKCktPkdldFJlYWxOYW1lZFByb3BlcnR5KG5hbWUpLklzRW1wdHkoKSkK
QEAgLTUxOSw4ICs1MTgsOCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XaW5kb3c6Om5h
bWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbQogICAgICAgICAgICAg
UmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBpdGVtcyA9IGRvYy0+d2luZG93TmFtZWRJdGVtcyhwcm9w
TmFtZSk7CiAgICAgICAgICAgICBpZiAoIWl0ZW1zLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaXRlbXMtPmhhc0V4YWN0bHlPbmVJdGVtKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0b1Y4KGl0ZW1zLT5pdGVtKDApLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRvVjgoaXRlbXMucmVsZWFzZSgpLCBpbmZvLkdldElzb2xhdGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1Y4KGl0ZW1zLT5pdGVtKDApLCBpbmZvLkhv
bGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0b1Y4KGl0ZW1zLnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRp
b25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTYwMCw4ICs1OTksMTAgQEAgYm9vbCBWOERPTVdpbmRvdzo6aW5kZXhlZFNl
Y3VyaXR5Q2hlY2sodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGhvc3QsIHVpbnQzMl90IGluZGUKICAg
ICByZXR1cm4gQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoQmluZGlu
Z1N0YXRlOjppbnN0YW5jZSgpLCB0YXJnZXQsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcik7CiB9
CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERPTVdpbmRvdyogd2luZG93LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KERPTVdpbmRvdyogd2lu
ZG93LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQogeworICAgIC8vIE5vdGljZSB0aGF0IHdlIGV4cGxpY2l0bHkgaWdub3JlIGNy
ZWF0aW9uQ29udGV4dCBiZWNhdXNlIHRoZSBET01XaW5kb3cgaXMgaXRzIG93biBjcmVhdGlvbkNv
bnRleHQuCisKICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVj
ayhpc29sYXRlKTsKICAgICAvLyBJbml0aWFsaXplcyBlbnZpcm9ubWVudCBvZiBhIGZyYW1lLCBh
bmQgcmV0dXJuIHRoZSBnbG9iYWwgb2JqZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEYXRhVmlld0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEYXRhVmlld0N1c3RvbS5jcHAKaW5kZXggMmYxMmE1NmIyMzU1
OWJjZDhhZjg5NmI3YTY3YjBlN2E1NzFkOGUzOS4uZWRkNmRmNmYyOTc1MDI2MDU0MzFiOTE1YzU5
N2Y5MjIyNWI4MWE5MSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RGF0YVZpZXdDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOERhdGFWaWV3Q3VzdG9tLmNwcApAQCAtNTYsMTEgKzU2LDExIEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOERhdGFWaWV3Ojpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXlXaXRoQXJyYXlC
dWZmZXJBcmd1bWVudDxEYXRhVmlldywgY2hhcj4oYXJncywgJmluZm8sIHY4OjprRXh0ZXJuYWxC
eXRlQXJyYXksIGZhbHNlKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRGF0YVZp
ZXcqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoRGF0YVZpZXcqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4
dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1
cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHJldHVybiBWOERhdGFWaWV3Ojp3cmFw
KGltcGwsIGlzb2xhdGUpOworICAgIHJldHVybiBWOERhdGFWaWV3Ojp3cmFwKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERhdGFW
aWV3OjpnZXRJbnQ4Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNw
cAppbmRleCAzZWYxOWYyNTVlYjM5OTZlYTU5YTIzYTE5MDY3YTY2YTIxMWUzOGZhLi4xM2RiZTQ5
Mzg0Y2U3OWMzY2RlMTNlOTVhM2U3ZTQ1YWMzMmYxZTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCkBAIC05Miw3
ICs5Miw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERvY3VtZW50OjpldmFsdWF0ZUNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1
cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKLSAgICByZXR1cm4g
dG9WOChyZXN1bHQucmVsZWFzZSgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRv
VjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RG9jdW1lbnQ6
OmdldENTU0NhbnZhc0NvbnRleHRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpA
QCAtMTA4LDI2ICsxMDgsMjYgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RG9jdW1lbnQ6Omdl
dENTU0NhbnZhc0NvbnRleHRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQKICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICBpZiAocmVzdWx0LT5p
czJkKCkpCi0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCo+KHJlc3VsdCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKj4ocmVzdWx0KSwgYXJncy5I
b2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICNpZiBFTkFC
TEUoV0VCR0wpCiAgICAgZWxzZSBpZiAocmVzdWx0LT5pczNkKCkpCi0gICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KHJlc3VsdCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0Kj4ocmVzdWx0KSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoRG9jdW1lbnQqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBi
b29sIGZvcmNlTmV3T2JqZWN0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRG9jdW1lbnQq
IGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmplY3QpCiB7CiAgICAgaWYgKCFpbXBsKQogICAg
ICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIGlmIChpbXBsLT5pc0hU
TUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MRG9jdW1l
bnQqPihpbXBsKSwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOworICAgICAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlLCBmb3JjZU5ld09iamVjdCk7CiAjaWYgRU5BQkxFKFNWRykKICAgICBpZiAoaW1wbC0+aXNT
VkdEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdEb2N1bWVu
dCo+KGltcGwpLCBpc29sYXRlLCBmb3JjZU5ld09iamVjdCk7CisgICAgICAgIHJldHVybiB0b1Y4
KHN0YXRpY19jYXN0PFNWR0RvY3VtZW50Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSwgZm9yY2VOZXdPYmplY3QpOwogI2VuZGlmCi0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gVjhEb2N1bWVudDo6d3JhcChpbXBsLCBpc29sYXRlLCBmb3JjZU5ld09iamVjdCk7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhEb2N1bWVudDo6d3JhcChp
bXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKICAgICBpZiAo
d3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIGlmICghVjhJ
c29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOERvY3VtZW50OjpjcmVhdGVUb3VjaExpc3RDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhCiAgICAgICAgIHRvdWNoTGlzdC0+YXBwZW5kKHRvdWNoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gdG9WOCh0b3VjaExpc3QucmVsZWFzZSgpLCBhcmdzLkdldElzb2xh
dGUoKSk7CisgICAgcmV0dXJuIHRvVjgodG91Y2hMaXN0LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIo
KS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExv
Y2F0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERv
Y3VtZW50TG9jYXRpb25DdXN0b20uY3BwCmluZGV4IDMwNGFhZGQ1MjllYzAyZGQzOTMwNDljNzll
ZDA1YzAxNDEzZGFmMWEuLjEwOGMxOTFjNzMxMjg2NTFjMWY4MGVhMzg0OGZjZmU2ZjNlZmM5MGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50
TG9jYXRpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20uY3BwCkBAIC00MCw3ICs0MCw3IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOERvY3VtZW50Ojpsb2NhdGlvbkFjY2Vzc29yR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBuCiAgICAgICAgIHJldHVybiB2ODo6TnVsbChpbmZvLkdldElzb2xhdGUo
KSk7CiAKICAgICBET01XaW5kb3cqIHdpbmRvdyA9IGRvY3VtZW50LT5kb21XaW5kb3coKTsKLSAg
ICByZXR1cm4gdG9WOCh3aW5kb3ctPmxvY2F0aW9uKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICByZXR1cm4gdG9WOCh3aW5kb3ctPmxvY2F0aW9uKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9u
Q29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHZvaWQgVjhEb2N1bWVudDo6bG9j
YXRpb25BY2Nlc3NvclNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeUN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeUN1c3RvbS5jcHAKaW5k
ZXggY2VkNDE4NTU4MGExOWYzZWMyOWU1YTIyZWNjYzRjZGQyZWMwMjU4NC4uYzRhMzg5YThmNzQ4
OWU3ODg4ZmJjNjQwYzE3ZjRlNTIxYzBiMTE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RW50cnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVudHJ5Q3VzdG9tLmNwcApAQCAtNDMsMTYgKzQzLDE2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRW50
cnkqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoRW50cnkqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogCiAgICAgaWYgKGltcGwtPmlzRmlsZSgpKQotICAg
ICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxGaWxlRW50cnkqPihpbXBsKSwgaXNvbGF0ZSk7
CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEZpbGVFbnRyeSo+KGltcGwpLCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOwogCiAgICAgQVNTRVJUKGltcGwtPmlzRGlyZWN0b3J5KCkp
OwotICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PERpcmVjdG9yeUVudHJ5Kj4oaW1wbCksIGlz
b2xhdGUpOworICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PERpcmVjdG9yeUVudHJ5Kj4oaW1w
bCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVudHJ5
U3luY0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRy
eVN5bmNDdXN0b20uY3BwCmluZGV4IGM4Y2MzODA5YTNhOTJlYjIwYTczMzEwODNjOWQ3ZmYxZjU4
ZGU1OTMuLmE4OTZlOGQzZWU2NmZjMzAwZGMyZjJjYTM5ODQyMWMzZDZmNjFmMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVudHJ5U3luY0N1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RW50cnlTeW5jQ3Vz
dG9tLmNwcApAQCAtNDMsMTYgKzQzLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRW50cnlTeW5jKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEVudHJ5U3luYyogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
IHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0
ZSk7CiAKICAgICBpZiAoaW1wbC0+aXNGaWxlKCkpCi0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRp
Y19jYXN0PEZpbGVFbnRyeVN5bmMqPihpbXBsKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PEZpbGVFbnRyeVN5bmMqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKIAogICAgIEFTU0VSVChpbXBsLT5pc0RpcmVjdG9yeSgpKTsKLSAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxEaXJlY3RvcnlFbnRyeVN5bmMqPihpbXBsKSwgaXNvbGF0ZSk7Cisg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RGlyZWN0b3J5RW50cnlTeW5jKj4oaW1wbCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNw
cAppbmRleCA2N2YxYTczZTk3OWQxYTM3MTk4OTQ5MDg5MWMxM2VjYjU2ZTYzOTRkLi5lZjU1ZTFi
YTZiOGIzMDA3ZDljN2Q2Y2UzNDczOGM4NjQxNWFmNTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwCkBAIC01Myw3ICs1Myw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEV2ZW50OjpkYXRhVHJhbnNmZXJBY2Nlc3Nvckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBFdmVudCogZXZlbnQgPSBWOEV2ZW50Ojp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKIAogICAgIGlmIChldmVudC0+aXNEcmFnRXZlbnQoKSkK
LSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+Y2xp
cGJvYXJkKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCksIGluZm8uSG9sZGVyKCktPkNy
ZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAKICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogfQpAQCAtNjMsMTYgKzYzLDE2IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEV2ZW50OjpjbGlwYm9hcmREYXRhQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
CiAgICAgRXZlbnQqIGV2ZW50ID0gVjhFdmVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAK
ICAgICBpZiAoZXZlbnQtPmlzQ2xpcGJvYXJkRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuIHRvVjgo
c3RhdGljX2Nhc3Q8Q2xpcGJvYXJkRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENsaXBib2FyZEV2
ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIAogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9
CiAKICNkZWZpbmUgVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UoaW50ZXJmYWNlTmFtZSkgXAog
ICAgIGlmIChldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yIyNpbnRlcmZhY2VOYW1lID09IGRlc2ly
ZWRJbnRlcmZhY2UpIFwKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8aW50ZXJmYWNl
TmFtZSo+KGV2ZW50KSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PGludGVyZmFjZU5hbWUqPihldmVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAKLXY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KEV2ZW50KiBldmVudCwgdjg6Oklzb2xhdGUgKmlzb2xh
dGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChFdmVudCogZXZlbnQsIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUgKmlzb2xhdGUpCiB7CiAg
ICAgaWYgKCFldmVudCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsK
QEAgLTgxLDExICs4MSwxMSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChFdmVudCogZXZl
bnQsIHY4OjpJc29sYXRlICppc29sYXRlKQogCiAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBFdmVu
dCBmaXJzdCB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24uCiAgICAgaWYgKGV2ZW50TmFtZXMo
KS5pbnRlcmZhY2VGb3JFdmVudCA9PSBkZXNpcmVkSW50ZXJmYWNlKQotICAgICAgICByZXR1cm4g
VjhFdmVudDo6d3JhcChldmVudCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiBWOEV2ZW50Ojp3
cmFwKGV2ZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogCiAgICAgRE9NX0VWRU5UX0lO
VEVSRkFDRVNfRk9SX0VBQ0goVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UpCiAKLSAgICByZXR1
cm4gVjhFdmVudDo6d3JhcChldmVudCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4RXZlbnQ6Ondy
YXAoZXZlbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEZpbGVSZWFkZXJDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4RmlsZVJlYWRlckN1c3RvbS5jcHAKaW5kZXggZmM5YjcwY2FhMjE5MDBmZTJiMjNmZDFmZmI3
NjMwMDdlNDBiYWNjOC4uMjNiZGNmYjgyOGZhM2Q5NWE4NDRkMzMyODk4MjVjNTMxNjQyMTQ3ZiAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRl
ckN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Rmls
ZVJlYWRlckN1c3RvbS5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4RmlsZVJlYWRlcjo6cmVzdWx0QWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG4KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CiAg
ICAgRmlsZVJlYWRlciogaW1wID0gVjhGaWxlUmVhZGVyOjp0b05hdGl2ZShob2xkZXIpOwogICAg
IGlmIChpbXAtPnJlYWRUeXBlKCkgPT0gRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZm
ZXIpCi0gICAgICAgIHJldHVybiB0b1Y4KGltcC0+YXJyYXlCdWZmZXJSZXN1bHQoKSwgaW5mby5H
ZXRJc29sYXRlKCkpOworICAgICAgICByZXR1cm4gdG9WOChpbXAtPmFycmF5QnVmZmVyUmVzdWx0
KCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
CiAgICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKGltcC0+c3RyaW5nUmVzdWx0KCksIGluZm8uR2V0
SXNvbGF0ZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IDRmZGYz
YWRlZjFiMTRhNGZlNTQzYzcxZDIyYmNhZTdhMjdmOWNkMjAuLjYzMTU1MzM4MmNjOGRlMWMzNjQz
ZDRjMzE0ODRhZjU2YzgwODg1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1c3RvbS5jcHAKQEAg
LTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGdldE5hbWVkSXRlbXMoSFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24s
IEF0b21pY1N0cmluZyBuYW1lLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZ2V0TmFtZWRJdGVtcyhIVE1MQWxsQ29sbGVjdGlvbiogY29sbGVjdGlv
biwgQXRvbWljU3RyaW5nIG5hbWUsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+
IG5hbWVkSXRlbXM7CiAgICAgY29sbGVjdGlvbi0+bmFtZWRJdGVtcyhuYW1lLCBuYW1lZEl0ZW1z
KTsKQEAgLTQ5LDE2ICs0OSwxNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5h
bWVkSXRlbXMoSFRNTEFsbENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIEF0b21pYwogICAgICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKIAogICAgIGlmIChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQot
ICAgICAgICByZXR1cm4gdG9WOChuYW1lZEl0ZW1zLmF0KDApLnJlbGVhc2UoKSwgaXNvbGF0ZSk7
CisgICAgICAgIHJldHVybiB0b1Y4KG5hbWVkSXRlbXMuYXQoMCkucmVsZWFzZSgpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogCi0gICAgcmV0dXJuIHRvVjgoVjhOYW1lZE5vZGVzQ29sbGVj
dGlvbjo6Y3JlYXRlKG5hbWVkSXRlbXMpLCBpc29sYXRlKTsKKyAgICByZXR1cm4gdG9WOChWOE5h
bWVkTm9kZXNDb2xsZWN0aW9uOjpjcmVhdGUobmFtZWRJdGVtcyksIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0SXRlbShIVE1M
QWxsQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3VtZW50
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0
SXRlbShIVE1MQWxsQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGFyZ3VtZW50LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpMb2NhbDx2ODo6VWludDMyPiBpbmRleCA9IGFy
Z3VtZW50LT5Ub0FycmF5SW5kZXgoKTsKICAgICBpZiAoaW5kZXguSXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBnZXROYW1lZEl0ZW1zKGNvbGxlY3Rp
b24sIHRvV2ViQ29yZVN0cmluZyhhcmd1bWVudC0+VG9TdHJpbmcoKSksIGlzb2xhdGUpOworICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gZ2V0TmFtZWRJdGVtcyhjb2xsZWN0
aW9uLCB0b1dlYkNvcmVTdHJpbmcoYXJndW1lbnQtPlRvU3RyaW5nKCkpLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwogCiAgICAgICAgIGlmIChyZXN1bHQuSXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBnZXRJdGVtKEhUTUxBbGxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCB2
ODo6SGFuZGxlPHYKICAgICB9CiAKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gY29sbGVjdGlv
bi0+aXRlbShpbmRleC0+VWludDMyVmFsdWUoKSk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJl
bGVhc2UoKSwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRN
TEFsbENvbGxlY3Rpb246Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC04MCwyMSArODAsMjEgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEFsbENvbGxlY3Rpb246Om5hbWVkUHJvcGVydHlH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHIKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAK
ICAgICBIVE1MQWxsQ29sbGVjdGlvbiogaW1wID0gVjhIVE1MQWxsQ29sbGVjdGlvbjo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoaW1wLCB0b1dlYkNv
cmVBdG9taWNTdHJpbmcobmFtZSksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gZ2V0
TmFtZWRJdGVtcyhpbXAsIHRvV2ViQ29yZUF0b21pY1N0cmluZyhuYW1lKSwgaW5mby5Ib2xkZXIo
KS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4SFRNTEFsbENvbGxlY3Rpb246Oml0ZW1DYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxBbGxDb2xsZWN0aW9u
Lml0ZW0oKSIpOwogICAgIEhUTUxBbGxDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxBbGxDb2xsZWN0
aW9uOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICByZXR1cm4gZ2V0SXRlbShpbXAsIGFy
Z3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gZ2V0SXRlbShpbXAsIGFyZ3Nb
MF0sIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7
CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxBbGxDb2xsZWN0aW9uOjpuYW1lZEl0
ZW1DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygi
RE9NLkhUTUxBbGxDb2xsZWN0aW9uLm5hbWVkSXRlbSgpIik7CiAgICAgSFRNTEFsbENvbGxlY3Rp
b24qIGltcCA9IFY4SFRNTEFsbENvbGxlY3Rpb246OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwot
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBnZXROYW1lZEl0ZW1zKGltcCwgdG9X
ZWJDb3JlU3RyaW5nKGFyZ3NbMF0pLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGdldE5hbWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVTdHJpbmco
YXJnc1swXSksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xh
dGUoKSk7CiAKICAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKQEAgLTExMSw3ICsxMTEsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhI
VE1MQWxsQ29sbGVjdGlvbjo6Y2FsbEFzRnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndQog
ICAgIEhUTUxBbGxDb2xsZWN0aW9uKiBpbXAgPSBWOEhUTUxBbGxDb2xsZWN0aW9uOjp0b05hdGl2
ZShhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDEpCi0gICAgICAg
IHJldHVybiBnZXRJdGVtKGltcCwgYXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgICAg
ICByZXR1cm4gZ2V0SXRlbShpbXAsIGFyZ3NbMF0sIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29u
dGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICAvLyBJZiB0aGVyZSBpcyBhIHNlY29u
ZCBhcmd1bWVudCBpdCBpcyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2Ugd2FudC4KICAgICBTdHJp
bmcgbmFtZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQWxsQ29sbGVjdGlvbjo6Y2FsbEFzRnVuY3Rpb25D
YWxsYmFjayhjb25zdCB2ODo6QXJndQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
CiAgICAgaWYgKE5vZGUqIG5vZGUgPSBpbXAtPm5hbWVkSXRlbVdpdGhJbmRleChuYW1lLCBpbmRl
eC0+VWludDMyVmFsdWUoKSkpCi0gICAgICAgIHJldHVybiB0b1Y4KG5vZGUsIGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRvVjgobm9kZSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRp
b25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggMzY3MzMzNDg5ZWRk
MGI1NDA0MGYxYTkxNDkzZmRmMjhmZmU5ODU2OS4uNzM3OTA1ZTRjZTBjODY1NzVjZDFlODA5ZDlm
OTRkMzYwYmQxNjJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcApAQCAtODcsNyAr
ODcsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29u
dGV4dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudAogICAgICAgICByZXR1cm4gdjg6Ok51bGwo
YXJncy5HZXRJc29sYXRlKCkpOwogCiAgICAgaWYgKHJlc3VsdC0+aXMyZCgpKQotICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihyZXN1bHQp
LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+KHJlc3VsdCksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9u
Q29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGVs
c2UgaWYgKHJlc3VsdC0+aXMzZCgpKSB7CiAgICAgICAgIC8vIDNEIGNhbnZhcyBjb250ZXh0cyBj
YW4gaG9sZCBvbiB0byBsb3RzIG9mIEdQVSByZXNvdXJjZXMsIGFuZCB3ZSB3YW50IHRvIHRha2Ug
YW4KQEAgLTk2LDcgKzk2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENhbnZhc0Vs
ZW1lbnQ6OmdldENvbnRleHRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQKICAgICAgICAgVjhQ
ZXJJc29sYXRlRGF0YSogcGVySXNvbGF0ZURhdGEgPSBWOFBlcklzb2xhdGVEYXRhOjpjdXJyZW50
KGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgcGVySXNvbGF0ZURhdGEtPnNldFNob3VsZENv
bGxlY3RHYXJiYWdlU29vbigpOwogCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFJl
c3VsdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4ocmVzdWx0KSwg
YXJncy5HZXRJc29sYXRlKCkpOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhSZXN1
bHQgPSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KHJlc3VsdCksIGFy
Z3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAg
ICAgIGlmIChJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246Omhhc0Zyb250ZW5kcygpKSB7CiAgICAg
ICAgICAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4
dCh2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpKTsKICAgICAgICAgICAgIFNjcmlwdE9iamVjdCBn
bENvbnRleHQoc2NyaXB0U3RhdGUsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodjhSZXN1
bHQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcAppbmRleCA0NWYyMzBlMzdkOTIzODQ1Y2MwYzFi
Y2I2ZGFjNjM2ZDhlMDAwYTMzLi5jY2JmNjM4YjBjNTY5YmUyNmY3ODJkMThlY2M5YzM2ZjQ1YjQw
MWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
Q29sbGVjdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCkBAIC00Miw3ICs0Miw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROYW1lZEl0
ZW1zKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBBdG9taWNTdHJpbmcgbmFtZSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5hbWVkSXRl
bXMoSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIEF0b21pY1N0cmluZyBuYW1lLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQog
ewogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBuYW1lZEl0ZW1zOwogICAgIGNvbGxlY3Rpb24t
Pm5hbWVkSXRlbXMobmFtZSwgbmFtZWRJdGVtcyk7CkBAIC01MSwxMiArNTEsMTIgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXROYW1lZEl0ZW1zKEhUTUxDb2xsZWN0aW9uKiBjb2xs
ZWN0aW9uLCBBdG9taWNTdHIKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAKICAgICBp
ZiAobmFtZWRJdGVtcy5zaXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIHRvVjgobmFtZWRJdGVt
cy5hdCgwKS5yZWxlYXNlKCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChuYW1lZEl0
ZW1zLmF0KDApLnJlbGVhc2UoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIAogICAgIGlm
IChjb2xsZWN0aW9uLT50eXBlKCkgPT0gRm9ybUNvbnRyb2xzKQotICAgICAgICByZXR1cm4gdG9W
OChjb2xsZWN0aW9uLT5iYXNlKCktPnJhZGlvTm9kZUxpc3QobmFtZSkuZ2V0KCksIGlzb2xhdGUp
OworICAgICAgICByZXR1cm4gdG9WOChjb2xsZWN0aW9uLT5iYXNlKCktPnJhZGlvTm9kZUxpc3Qo
bmFtZSkuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAKLSAgICByZXR1cm4gdG9W
OChWOE5hbWVkTm9kZXNDb2xsZWN0aW9uOjpjcmVhdGUobmFtZWRJdGVtcyksIGlzb2xhdGUpOwor
ICAgIHJldHVybiB0b1Y4KFY4TmFtZWROb2Rlc0NvbGxlY3Rpb246OmNyZWF0ZShuYW1lZEl0ZW1z
KSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4SFRNTENvbGxlY3Rpb246Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC02OSwxNCArNjksMTQg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTENvbGxlY3Rpb246Om5hbWVkUHJvcGVydHlH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmcKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7
CiAKICAgICBIVE1MQ29sbGVjdGlvbiogaW1wID0gVjhIVE1MQ29sbGVjdGlvbjo6dG9OYXRpdmUo
aW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVB
dG9taWNTdHJpbmcobmFtZSksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gZ2V0TmFt
ZWRJdGVtcyhpbXAsIHRvV2ViQ29yZUF0b21pY1N0cmluZyhuYW1lKSwgaW5mby5Ib2xkZXIoKS0+
Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4SFRNTENvbGxlY3Rpb246Om5hbWVkSXRlbUNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTENvbGxlY3Rpb24ubmFt
ZWRJdGVtKCkiKTsKICAgICBIVE1MQ29sbGVjdGlvbiogaW1wID0gVjhIVE1MQ29sbGVjdGlvbjo6
dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3Vs
dCA9IGdldE5hbWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gZ2V0TmFtZWRJ
dGVtcyhpbXAsIHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRp
b25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIGlmIChyZXN1bHQuSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtODQsMTEgKzg0LDExIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDb2xsZWN0aW9uOjpuYW1lZEl0ZW1DYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTENvbGxlY3Rpb24qIGltcGwsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTENvbGxlY3Rpb24qIGltcGws
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCiB7CiAgICAgaWYgKGltcGwtPnR5cGUoKSA9PSBEb2NBbGwpCi0gICAgICAgIHJldHVy
biB0b1Y4KHN0YXRpY19jYXN0PEhUTUxBbGxDb2xsZWN0aW9uKj4oaW1wbCksIGlzb2xhdGUpOwot
ICAgIHJldHVybiBWOEhUTUxDb2xsZWN0aW9uOjp3cmFwKGltcGwsIGlzb2xhdGUpOworICAgICAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxIVE1MQWxsQ29sbGVjdGlvbio+KGltcGwpLCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiBWOEhUTUxDb2xsZWN0aW9uOjp3cmFw
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDVmMTAzYzI5M2NlNzQ3YTIzMDdiYzkzNzZm
ZWZmMTUxNTY2ZDE4M2MuLjNiMjQ3MGUwMjNkZjdmMGVhMDk3Y2UwMWRlYmYwNWE3YWZkM2UxYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1
bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTERvY3VtZW50Q3VzdG9tLmNwcApAQCAtODAsNyArODAsNyBAQCB2ODo6TG9jYWw8djg6Ok9i
amVjdD4gVjhIVE1MRG9jdW1lbnQ6OndyYXBJblNoYWRvd09iamVjdCh2ODo6TG9jYWw8djg6Ok9i
amVjdD4gdwogICAgIHJldHVybiBzaGFkb3c7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEhUTUxEb2N1bWVudDo6Z2V0TmFtZWRQcm9wZXJ0eShIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVu
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBrZXksIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4SFRNTERvY3VtZW50OjpnZXROYW1lZFByb3BlcnR5KEhUTUxEb2N1
bWVudCogaHRtbERvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIGtleSwgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAg
ICBpZiAoIWh0bWxEb2N1bWVudC0+aGFzTmFtZWRJdGVtKGtleS5pbXBsKCkpICYmICFodG1sRG9j
dW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKGtleS5pbXBsKCkpKQogICAgICAgICByZXR1cm4gdjhV
bmRlZmluZWQoKTsKQEAgLTkzLDEyICs5MywxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhI
VE1MRG9jdW1lbnQ6OmdldE5hbWVkUHJvcGVydHkoSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbgog
ICAgICAgICBOb2RlKiBub2RlID0gaXRlbXMtPml0ZW0oMCk7CiAgICAgICAgIEZyYW1lKiBmcmFt
ZSA9IDA7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFn
KSAmJiAoZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudCo+KG5vZGUpLT5jb250
ZW50RnJhbWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gdG9WOChmcmFtZS0+ZG9jdW1lbnQoKS0+
ZG9tV2luZG93KCksIGlzb2xhdGUpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgoZnJhbWUtPmRv
Y3VtZW50KCktPmRvbVdpbmRvdygpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogCi0gICAg
ICAgIHJldHVybiB0b1Y4KG5vZGUsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChub2Rl
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIH0KIAotICAgIHJldHVybiB0b1Y4KGl0
ZW1zLnJlbGVhc2UoKSwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHRvVjgoaXRlbXMucmVsZWFzZSgp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiAvLyBIVE1MRG9jdW1lbnQgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtMTcxLDcgKzE3MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxEb2N1bWVu
dDo6YWxsQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiAgICAgSU5DX1NU
QVRTKCJET00uSFRNTERvY3VtZW50LmFsbC5fZ2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwogICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3Vt
ZW50ID0gVjhIVE1MRG9jdW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7Ci0gICAgcmV0dXJuIHRvVjgo
aHRtbERvY3VtZW50LT5hbGwoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4
KGh0bWxEb2N1bWVudC0+YWxsKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBp
bmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHZvaWQgVjhIVE1MRG9jdW1lbnQ6OmFsbEFjY2Vzc29y
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTE4MCwxMSArMTgwLDExIEBA
IHZvaWQgVjhIVE1MRG9jdW1lbnQ6OmFsbEFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6CiAgICAgaW5mby5UaGlzKCktPkZvcmNlU2V0KG5hbWUs
IHZhbHVlKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTERvY3VtZW50KiBp
bXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3JjZU5ld09iamVjdCkKK3Y4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KEhUTUxEb2N1bWVudCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9vbCBmb3JjZU5l
d09iamVjdCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hl
Y2soaXNvbGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhIVE1M
RG9jdW1lbnQ6OndyYXAoaW1wbCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4SFRNTERvY3VtZW50Ojp3cmFwKGltcGwsIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogICAgIGlmICh3cmFwcGVy
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgaWYgKCFWOElzb2xhdGVk
Q29udGV4dDo6Z2V0RW50ZXJlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNTgyNDA5OGQy
YzNlZmUyMjI0MjlhZGM2NjBiNTQ0MTVmOGU1YWM4NC4uOWZlNDg0ZTY3Y2IxZDE2NjY5ZWRlZTEz
NjFjZDgyZGY0YTNmNWQ0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDAsMTggKzQwLDE4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRN
TEVsZW1lbnQqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBib29sIGZvcmNlTmV3T2JqZWN0
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSFRNTEVsZW1lbnQqIGltcGwsIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJv
b2wgZm9yY2VOZXdPYmplY3QpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhO
dWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHJldHVybiBjcmVhdGVWOEhUTUxXcmFwcGVyKGlt
cGwsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICByZXR1cm4gY3JlYXRlVjhIVE1MV3Jh
cHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKIH0K
IAogI2lmIEVOQUJMRShNSUNST0RBVEEpCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRWxl
bWVudDo6aXRlbVZhbHVlQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSFRNTEVsZW1lbnQqIGltcGwg
PSBWOEhUTUxFbGVtZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9W
OChpbXBsLT5pdGVtVmFsdWUoKS5nZXQoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVy
biB0b1Y4KGltcGwtPml0ZW1WYWx1ZSgpLmdldCgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiB2b2lkIFY4SFRNTEVsZW1lbnQ6Oml0
ZW1WYWx1ZUFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVu
dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9y
bUVsZW1lbnRDdXN0b20uY3BwCmluZGV4IDQwMzM2MjlmZjkwNzE0MmRjZDQ0MzRhNDk1NzIwZWEz
ZGE0NGIwOTAuLjc5MmIzZDBhMTE2YTEyZDBhOWMyMzljODExNTZlZGMzNTkyZDg4NjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVu
dEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEZvcm1FbGVtZW50Q3VzdG9tLmNwcApAQCAtNDgsNyArNDgsNyBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhIVE1MRm9ybUVsZW1lbnQ6OmluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBp
bmRleCwgYwogICAgIFJlZlB0cjxOb2RlPiBmb3JtRWxlbWVudCA9IGZvcm0tPmVsZW1lbnRzKCkt
Pml0ZW0oaW5kZXgpOwogICAgIGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwotICAgIHJldHVybiB0b1Y4KGZvcm1FbGVtZW50LnJlbGVhc2UoKSwgaW5mby5H
ZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGZvcm1FbGVtZW50LnJlbGVhc2UoKSwgaW5m
by5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SFRNTEZvcm1FbGVtZW50OjpuYW1lZFByb3BlcnR5R2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpAQCAtNzQsOSArNzQsOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MRm9ybUVs
ZW1lbnQ6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbgogICAgIEFTU0VS
VCghZWxlbWVudHMuaXNFbXB0eSgpKTsKIAogICAgIGlmIChlbGVtZW50cy5zaXplKCkgPT0gMSkK
LSAgICAgICAgcmV0dXJuIHRvVjgoZWxlbWVudHMuYXQoMCkucmVsZWFzZSgpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgICAgIHJldHVybiB0b1Y4KGVsZW1lbnRzLmF0KDApLnJlbGVhc2UoKSwg
aW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIAot
ICAgIHJldHVybiB0b1Y4KFY4TmFtZWROb2Rlc0NvbGxlY3Rpb246OmNyZWF0ZShlbGVtZW50cyks
IGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChWOE5hbWVkTm9kZXNDb2xsZWN0
aW9uOjpjcmVhdGUoZWxlbWVudHMpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwg
aW5mby5HZXRJc29sYXRlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVt
ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxG
cmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCmluZGV4IDBkOTkzNzc1YTg5ZDFmYjRhMjZmOTcxYzQx
ZWJmMDcxMDViODJkNTkuLjAwY2RjM2QxY2JhZmE2YjQyYTJjOGUyMzQ5YzY1MTQzZjBiNWJhYjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFt
ZVNldEVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCkBAIC01OCw3ICs1OCw3IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxGcmFtZVNldEVsZW1lbnQ6Om5hbWVkUHJvcGVydHlH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAg
IGlmICghZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwot
ICAgIHJldHVybiB0b1Y4KGRvY3VtZW50LT5kb21XaW5kb3coKSwgaW5mby5HZXRJc29sYXRlKCkp
OworICAgIHJldHVybiB0b1Y4KGRvY3VtZW50LT5kb21XaW5kb3coKSwgaW5mby5Ib2xkZXIoKS0+
Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMDVj
YWRlYjY3YjcxMTZlYTU1Yjc1MTk2YTBiYTdjMzQzMjEwN2YyNS4uMWE5Njc4MmE4NjE0M2QwNmFh
OTMyY2MyN2RlNWE3N2Y2MTRmMGE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0
b3IuY3BwCkBAIC01NSw2ICs1NSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhI
VE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJnCiAgICAgaWYg
KENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgpID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0
aW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIAorICAgIC8vIEZJWE1F
OiBXZSBzaG91bGRuJ3QgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBGcmFtZSB0byBnZXQgdGhlIERv
Y3VtZW50LgogICAgIEZyYW1lKiBmcmFtZSA9IGN1cnJlbnRGcmFtZShCaW5kaW5nU3RhdGU6Omlu
c3RhbmNlKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFJl
ZmVyZW5jZUVycm9yLCAiSW1hZ2UgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBmcmFtZSBpcyB1bmF2
YWlsYWJsZSIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTY0LDExICs2NSwxMSBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZwogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihSZWZlcmVuY2VFcnJv
ciwgIkltYWdlIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZG9jdW1lbnQgaXMgdW5hdmFpbGFibGUi
LCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlz
IGFkZGVkIHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lzZSwgdGhlIEhUTUxJbWFnZUVsZW1l
bnQgaW5zdGFuY2UKLSAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhl
IG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY2NvbGxlY3RlZCBwcmVtYXR1cmVseS4KKyAgICAvLyBtYXkg
ZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29s
bGVjdGVkIHByZW1hdHVyZWx5LgogICAgIC8vIEZJWE1FOiBUaGUgY29ycmVjdCB3YXkgdG8gZG8g
dGhpcyB3b3VsZCBiZSB0byBtYWtlIEhUTUxJbWFnZUVsZW1lbnQgZGVyaXZlIGZyb20KICAgICAv
LyBBY3RpdmVET01PYmplY3QgYW5kIHVzZSBpdHMgaW50ZXJmYWNlIHRvIGtlZXAgaXRzIHdyYXBw
ZXIgYWxpdmUuIFRoZW4gd2Ugd291bGQKICAgICAvLyByZW1vdmUgdGhpcyBjb2RlIGFuZCB0aGUg
c3BlY2lhbCBjYXNlIGluIGlzT2JzZXJ2YWJsZVRocm91Z2hET00uCi0gICAgdG9WOChkb2N1bWVu
dCwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHRvVjgoZG9jdW1lbnQsIGFyZ3MuSG9sZGVyKCkt
PkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAKICAgICBpbnQgd2lkdGg7
CiAgICAgaW50IGhlaWdodDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MTGlua0VsZW1lbnRDdXN0b20uY3BwCmluZGV4IDk3ZDRlNzMy
NGEwZTAwOWNiNzcwMjA1NWUxZWQyMWFjMWZmOGMxN2EuLjIwOGY1ZTQ2N2I0ODYyYmUzMmQzODcy
NzNjZmI3NjQ4NmI2YjY2NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTExpbmtFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDEsNyAr
NDEsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MTGlua0VsZW1lbnQ6OnNpemVzQWNj
ZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbgogewogICAgIElOQ19TVEFUUygiRE9NLkhU
TUxMaW5rRWxlbWVudC5zaXplcy5fZ2V0Iik7CiAgICAgSFRNTExpbmtFbGVtZW50KiBpbXAgPSBW
OEhUTUxMaW5rRWxlbWVudDo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRv
VjgoaW1wLT5zaXplcygpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1w
LT5zaXplcygpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29s
YXRlKCkpOwogfQogCiB2b2lkIFY4SFRNTExpbmtFbGVtZW50OjpzaXplc0FjY2Vzc29yU2V0dGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25D
dXN0b20uY3BwCmluZGV4IDIxNWY3MWZjZDY2NzRlY2Y1MWE3ZDE3NWRiODlhMTgwYzdjYjFhZWQu
LjFlNjlhNGJhN2MzNGYwNmY3N2FmMTE1Y2FiMWY5ZTU1NGI4ZTg2YWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1
c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9w
dGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhlZFByb3BlcnR5R2V0dGVy
KHVpbnQzMl90IGluCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5l
ZCgpOwogCi0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGluZm8uSG9sZGVyKCktPkNy
ZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEhUTUxPcHRpb25zQ29sbGVjdGlvbjo6aW5kZXhlZFByb3BlcnR5U2V0dGVyKHVp
bnQzMl90IGluZGV4LCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxPdXRwdXRFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxPdXRwdXRFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA0MzNkYTQy
NWJiYmE0OGFiZGRkYzM5NTFjYTNlYTU3NTg1YmFiZjA2Li42OTRiZjA0YThiZjI4Y2M0ZGZkYzcz
MzYxNTEwMGEyNDBmY2E4YTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MT3V0cHV0RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE91dHB1dEVsZW1lbnRDdXN0b20uY3BwCkBAIC00
MSw3ICs0MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxPdXRwdXRFbGVtZW50Ojpo
dG1sRm9yQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uSFRNTE91dHB1dEVsZW1lbnQuaHRtbEZvci5fZ2V0Iik7CiAgICAgSFRNTE91dHB1dEVsZW1l
bnQqIGltcCA9IFY4SFRNTE91dHB1dEVsZW1lbnQ6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwot
ICAgIHJldHVybiB0b1Y4KGltcC0+aHRtbEZvcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAg
cmV0dXJuIHRvVjgoaW1wLT5odG1sRm9yKCksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4
dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHZvaWQgVjhIVE1MT3V0cHV0RWxlbWVudDo6
aHRtbEZvckFjY2Vzc29yU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVt
ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxT
ZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAppbmRleCBjYTgwNGE3NDdlNmI0ZjVhZjhjZDEwMzJkZTFj
MjU4YWZlMzE1OTgyLi5mMjdhYWZiMWE0NjgxYjZhMjVkMDBjYTJmODUwMDFjY2I4OTc4MmJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0
RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCkBAIC01Miw3ICs1Miw3IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOEhUTUxTZWxlY3RFbGVtZW50OjppbmRleGVkUHJvcGVydHlHZXR0ZXIo
dWludDMyX3QgaW5kZXgsCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVm
aW5lZCgpOwogCi0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5HZXRJc29s
YXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGluZm8uSG9sZGVyKCkt
PkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEhUTUxTZWxlY3RFbGVtZW50OjppbmRleGVkUHJvcGVydHlTZXR0ZXIodWlu
dDMyX3QgaW5kZXgsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SURCQW55Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOElEQkFueUN1c3RvbS5jcHAKaW5kZXggOThiYWFiOTZlYTQ0NjRlZmMyZDE5NzNjMzY4Njc2
MTFlM2M4YWQ5Yi4uMTE2NTAxYjM4NTNkZGM2OGQ3MjMwNmUxMThhODZkMWZhNGUyNTY1ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCQW55Q3VzdG9t
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJBbnlDdXN0
b20uY3BwCkBAIC00NSw3ICs0NSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjgoSURCQW55KiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
K3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KElEQkFueSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBp
ZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CkBAIC01
NiwyMyArNTYsMjMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSURCQW55KiBpbXBsLCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSkKICAgICBjYXNlIElEQkFueTo6TnVsbFR5cGU6CiAgICAgICAg
IHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OkRPTVN0
cmluZ0xpc3RUeXBlOgotICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5kb21TdHJpbmdMaXN0KCks
IGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5kb21TdHJpbmdMaXN0KCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkN1cnNvclR5cGU6
Ci0gICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYkN1cnNvcigpLCBpc29sYXRlKTsKKyAgICAg
ICAgcmV0dXJuIHRvVjgoaW1wbC0+aWRiQ3Vyc29yKCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGU6Ci0gICAgICAgIHJl
dHVybiB0b1Y4KGltcGwtPmlkYkN1cnNvcldpdGhWYWx1ZSgpLCBpc29sYXRlKTsKKyAgICAgICAg
cmV0dXJuIHRvVjgoaW1wbC0+aWRiQ3Vyc29yV2l0aFZhbHVlKCksIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OklEQkRhdGFiYXNlVHlwZToKLSAgICAgICAgcmV0
dXJuIHRvVjgoaW1wbC0+aWRiRGF0YWJhc2UoKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0
b1Y4KGltcGwtPmlkYkRhdGFiYXNlKCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAg
Y2FzZSBJREJBbnk6OklEQkZhY3RvcnlUeXBlOgotICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5p
ZGJGYWN0b3J5KCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChpbXBsLT5pZGJGYWN0
b3J5KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OklEQklu
ZGV4VHlwZToKLSAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+aWRiSW5kZXgoKSwgaXNvbGF0ZSk7
CisgICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYkluZGV4KCksIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OklEQktleVR5cGU6Ci0gICAgICAgIHJldHVybiB0
b1Y4KGltcGwtPmlkYktleSgpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+
aWRiS2V5KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OklE
Qk9iamVjdFN0b3JlVHlwZToKLSAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+aWRiT2JqZWN0U3Rv
cmUoKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYk9iamVjdFN0b3Jl
KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OklEQlRyYW5z
YWN0aW9uVHlwZToKLSAgICAgICAgcmV0dXJuIHRvVjgoaW1wbC0+aWRiVHJhbnNhY3Rpb24oKSwg
aXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KGltcGwtPmlkYlRyYW5zYWN0aW9uKCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OlNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZVR5cGU6CiAgICAgICAgIHJldHVybiBpbXBsLT5zZXJpYWxpemVkU2NyaXB0VmFsdWUo
KS0+ZGVzZXJpYWxpemUoMCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBJREJBbnk6OlN0cmluZ1R5cGU6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJLZXlD
dXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SURCS2V5Q3Vz
dG9tLmNwcAppbmRleCA4NGE0YjBjNjlmNmNmMmUzYTczYjMzMjJhMzMzYzIyZWU2ZTdjZDg3Li5j
MGI5NzliYWNiYjFkZTg3MTUzZjI2NGEwMzBiMjg0ZGNmNzBmNjIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJREJLZXlDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOElEQktleUN1c3RvbS5jcHAKQEAgLTM4
LDcgKzM4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChJREJLZXkqIGtleSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChJREJLZXkqIGtleSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIWtleSkKICAgICAg
ICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKQEAgLTU4LDcgKzU4LDcgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSURCS2V5KiBrZXksIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogICAgICAgICB7CiAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9IHY4
OjpBcnJheTo6TmV3KGtleS0+YXJyYXkoKS5zaXplKCkpOwogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBrZXktPmFycmF5KCkuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAg
YXJyYXktPlNldChpLCB0b1Y4KGtleS0+YXJyYXkoKVtpXS5nZXQoKSwgaXNvbGF0ZSkpOworICAg
ICAgICAgICAgICAgIGFycmF5LT5TZXQoaSwgdG9WOChrZXktPmFycmF5KClbaV0uZ2V0KCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSkpOwogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAg
ICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW1hZ2VEYXRhQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEltYWdlRGF0YUN1c3RvbS5jcHAKaW5kZXggYWVhZjMwZjgxZjFkOGI1OGJiYmRjZmE5
YWE2YmYzZTA2NmJhZmNlYS4uMWI5NDY5YzgzYWIxZGM2NDU0NWFiMTQzYmRjMjE0MDMxYTRmYjdj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW1hZ2VE
YXRhQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJ
bWFnZURhdGFDdXN0b20uY3BwCkBAIC0zNSwyMiArMzUsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChJbWFnZURhdGEqIGltcGwsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoSW1hZ2VEYXRhKiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhD
aGVjayhpc29sYXRlKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOElt
YWdlRGF0YTo6d3JhcChpbXBsLCBpc29sYXRlKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBWOEltYWdlRGF0YTo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ3JlYXRlIGEg
VjggVWludDhDbGFtcGVkQXJyYXkgb2JqZWN0LgotICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gcGl4ZWxBcnJheSA9IHRvVjgoaW1wbC0+ZGF0YSgpLCBpc29sYXRlKTsKKyAgICAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHBpeGVsQXJyYXkgPSB0b1Y4KGltcGwtPmRhdGEoKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKICAgICAgICAgLy8gU2V0IHRoZSAiZGF0YSIgcHJvcGVydHkg
b2YgdGhlIEltYWdlRGF0YSBvYmplY3QgdG8KICAgICAgICAgLy8gdGhlIGNyZWF0ZWQgdjggb2Jq
ZWN0LCBlbGltaW5hdGluZyB0aGUgQysrIGNhbGxiYWNrCiAgICAgICAgIC8vIHdoZW4gYWNjZXNz
aW5nIHRoZSAiZGF0YSIgcHJvcGVydHkuCi0gICAgICAgIGlmICghcGl4ZWxBcnJheS5Jc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIHdyYXBwZXItPlNldCh2ODo6U3RyaW5nOjpOZXdTeW1ib2woImRh
dGEiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEFycmF5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgIHY4OjpSZWFkT25seSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFwaXhl
bEFycmF5LklzRW1wdHkoKSkKKyAgICAgICAgICAgIHdyYXBwZXItPlNldCh2ODo6U3RyaW5nOjpO
ZXdTeW1ib2woImRhdGEiKSwgcGl4ZWxBcnJheSwgdjg6OlJlYWRPbmx5KTsKICAgICB9CiAKICAg
ICByZXR1cm4gd3JhcHBlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAppbmRleCA4NWRmNjAxNzEwZTE5MmQ4Yjk0MTcw
MWUyOWU3MWM2ZTM4ZTEzYWYxLi41MzJlMDNhZWZhZjE2OWY1MjM5MTViMDhhNjE5YzE5NjIzZTc2
YzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2Nh
dGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TG9jYXRpb25DdXN0b20uY3BwCkBAIC0yNzAsMTMgKzI3MCwxMyBAQCBib29sIFY4TG9jYXRpb246
Om5hbWVkU2VjdXJpdHlDaGVjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gaG9zdCwgdjg6OkxvY2Fs
PHY4OjpWYQogICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9G
cmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+ZnJhbWUoKSwgRG9Ob3RSZXBvcnRT
ZWN1cml0eUVycm9yKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoTG9jYXRpb24q
IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
TG9jYXRpb24qIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3Jh
cHBlciA9IGdldERPTU9iamVjdE1hcCgpLmdldChpbXBsKTsKICAgICBpZiAod3JhcHBlci5Jc0Vt
cHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IFY4TG9jYXRpb246OndyYXAoaW1wbCwgaXNvbGF0
ZSk7CisgICAgICAgIHdyYXBwZXIgPSBWOExvY2F0aW9uOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAg
ICAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuV2luZG93UmVmZXJlbmNlKGltcGwtPmZy
YW1lKCksICJsb2NhdGlvbiIsIHdyYXBwZXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25z
dHJ1Y3Rvci5jcHAKaW5kZXggMjE4OWFhOTA2YWFmMjBlZDQ0Njg5Y2I2ZGFjYzcwNzI5NGNjYjhl
Ni4uODBmNTNmNWFlOWUxMDAzY2EyYTE5ZjY4MzVjNmMyZmMwYjEyYzI5OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1
Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2Fn
ZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKQEAgLTY5LDggKzY5LDggQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4TWVzc2FnZUNoYW5uZWw6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYKICAgICAvLyBDcmVhdGUgcmVmZXJlbmNlcyBmcm9tIHRoZSBNZXNzYWdlQ2hhbm5l
bCB3cmFwcGVyIHRvIHRoZSB0d28KICAgICAvLyBNZXNzYWdlUG9ydCB3cmFwcGVycyB0byBtYWtl
IHN1cmUgdGhhdCB0aGUgTWVzc2FnZVBvcnQgd3JhcHBlcnMKICAgICAvLyBzdGF5IGFsaXZlIGFz
IGxvbmcgYXMgdGhlIE1lc3NhZ2VDaGFubmVsIHdyYXBwZXIgaXMgYXJvdW5kLgotICAgIFY4RE9N
V3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UobWVzc2FnZUNoYW5uZWwsICJwb3J0MSIs
IHRvVjgob2JqLT5wb3J0MSgpLCBhcmdzLkdldElzb2xhdGUoKSkpOwotICAgIFY4RE9NV3JhcHBl
cjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UobWVzc2FnZUNoYW5uZWwsICJwb3J0MiIsIHRvVjgo
b2JqLT5wb3J0MigpLCBhcmdzLkdldElzb2xhdGUoKSkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0
TmFtZWRIaWRkZW5SZWZlcmVuY2UobWVzc2FnZUNoYW5uZWwsICJwb3J0MSIsIHRvVjgob2JqLT5w
b3J0MSgpLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRl
KCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKG1lc3NhZ2VD
aGFubmVsLCAicG9ydDIiLCB0b1Y4KG9iai0+cG9ydDIoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRp
b25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKSk7CiAKICAgICAvLyBTZXR1cCB0aGUgc3Rh
bmRhcmQgd3JhcHBlciBvYmplY3QgaW50ZXJuYWwgZmllbGRzLgogICAgIFY4RE9NV3JhcHBlcjo6
c2V0RE9NV3JhcHBlcihtZXNzYWdlQ2hhbm5lbCwgJmluZm8sIG9iai5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0
b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUV2ZW50
Q3VzdG9tLmNwcAppbmRleCA5MjAwZDhmZmExOTk2ZGVhMjgxMGE5MGI5NDdkNTFhYzVlYTQ0Zjky
Li4zMTFjNjFlMWQ4ZjZiMWQ2ZjQ1ZTgwZmNlNWEzMmJkYWJkMWM1YjNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0b20uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VFdmVudEN1
c3RvbS5jcHAKQEAgLTcyLDExICs3MiwxMSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhNZXNz
YWdlRXZlbnQ6OmRhdGFBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbgogICAg
IH0KIAogICAgIGNhc2UgTWVzc2FnZUV2ZW50OjpEYXRhVHlwZUJsb2I6Ci0gICAgICAgIHJlc3Vs
dCA9IHRvVjgoZXZlbnQtPmRhdGFBc0Jsb2IoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAg
ICByZXN1bHQgPSB0b1Y4KGV2ZW50LT5kYXRhQXNCbG9iKCksIGluZm8uSG9sZGVyKCktPkNyZWF0
aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBNZXNzYWdlRXZlbnQ6OkRhdGFUeXBlQXJyYXlCdWZmZXI6Ci0gICAgICAgIHJlc3VsdCA9
IHRvVjgoZXZlbnQtPmRhdGFBc0FycmF5QnVmZmVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICAgICAgcmVzdWx0ID0gdG9WOChldmVudC0+ZGF0YUFzQXJyYXlCdWZmZXIoKSwgaW5mby5Ib2xk
ZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC0xMDAsNyArMTAwLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
TWVzc2FnZUV2ZW50Ojpwb3J0c0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgog
CiAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9y
dHNDb3B5LnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3J0c0NvcHkuc2l6
ZSgpOyArK2kpCi0gICAgICAgIHBvcnRBcnJheS0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElz
b2xhdGUoKSksIHRvVjgocG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLkdldElzb2xhdGUoKSkpOwor
ICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkpLCB0
b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCks
IGluZm8uR2V0SXNvbGF0ZSgpKSk7CiAKICAgICByZXR1cm4gcG9ydEFycmF5OwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWljcm9EYXRhSXRlbVZh
bHVlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1pY3Jv
RGF0YUl0ZW1WYWx1ZUN1c3RvbS5jcHAKaW5kZXggN2QxM2JmZWQ0ZTRlZDM0NTM1YWE5N2Y0ODJk
M2YxMWFjMWY0NTIyMi4uYzkzZmNlOTU5Zjc1ODY2ZDM5MjFiYjg1YTgzYTYyNDhkNTA2ODdiNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWljcm9EYXRh
SXRlbVZhbHVlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhNaWNyb0RhdGFJdGVtVmFsdWVDdXN0b20uY3BwCkBAIC0zOSwxMyArMzksMTMgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChNaWNyb0Rh
dGFJdGVtVmFsdWUqIGl0ZW1WYWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChNaWNyb0RhdGFJdGVtVmFsdWUqIGl0ZW1WYWx1ZSwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICBpZiAoIWl0ZW1WYWx1ZSkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAgICAgaWYg
KGl0ZW1WYWx1ZS0+aXNOb2RlKCkpCi0gICAgICAgIHJldHVybiB0b1Y4KGl0ZW1WYWx1ZS0+Z2V0
Tm9kZSgpKTsKLSAgICByZXR1cm4gdjhTdHJpbmcoaXRlbVZhbHVlLT5nZXRTdHJpbmcoKSk7Cisg
ICAgICAgIHJldHVybiB0b1Y4KGl0ZW1WYWx1ZS0+Z2V0Tm9kZSgpLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOworICAgIHJldHVybiB2OFN0cmluZyhpdGVtVmFsdWUtPmdldFN0cmluZygpLCBp
c29sYXRlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAKaW5kZXggNjY3ZDE2ODEwYTA3ZGU0
ZjhjODJiZTM0NDMzYWIzMWM4YmRjZWFhYS4uYTU2MzExOTRlZWY2YzliZjhkZGQ3NmYxY2JiNzU2
OGVkOWQ5MjZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCkBAIC01MCw3ICs1MCw3IEBAIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBWOE5hbWVkTm9kZU1hcDo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVp
bnQzMl90IGluZGV4LCBjb25zCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5HZXRJ
c29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGluZm8uSG9sZGVy
KCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOE5hbWVkTm9kZU1hcDo6bmFtZWRQcm9wZXJ0eUdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTY3
LDcgKzY3LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TmFtZWROb2RlTWFwOjpuYW1lZFBy
b3BlcnR5R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogICAgIGlmICghcmVzdWx0KQogICAg
ICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIAotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxl
YXNlKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFz
ZSgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCmluZGV4IDFjYWI4ZjEyZTQzNGUwNWY1
MmJjOTdmMjIzY2Y3MTk2YjdkOTg2NzUuLjI0YjAxMjA3YTI4NmNjYzNiYWU5YmFhMTBjOWE0ZWMy
MjBiODE5NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5vZGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5vZGVDdXN0b20uY3BwCkBAIC0xMjUsNyArMTI1LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4Tm9kZTo6YXBwZW5kQ2hpbGRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
ICAgIHJldHVybiB2ODo6TnVsbChhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKLXY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4U2xvdyhOb2RlKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9v
bCBmb3JjZU5ld09iamVjdCkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4U2xvdyhOb2RlKiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlLCBib29sIGZvcmNlTmV3T2JqZWN0KQogewogICAgIGlmICghaW1wbCkKICAgICAg
ICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKQEAgLTEzOCwzNiArMTM4LDM3IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4U2xvdyhOb2RlKiBpbXBsLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSwgYm9vbCBmb3JjZU5ld09iCiAgICAgc3dpdGNoIChpbXBsLT5ub2RlVHlwZSgpKSB7
CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6CiAgICAgICAgIGlmIChpbXBsLT5pc0hUTUxF
bGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gdG9WOCh0b0hUTUxFbGVtZW50KGltcGwpLCBp
c29sYXRlLCBmb3JjZU5ld09iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gdG9WOCh0b0hUTUxF
bGVtZW50KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsK
ICNpZiBFTkFCTEUoU1ZHKQogICAgICAgICBpZiAoaW1wbC0+aXNTVkdFbGVtZW50KCkpCi0gICAg
ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4oaW1wbCksIGlzb2xh
dGUsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlLCBmb3JjZU5ld09i
amVjdCk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIFY4RWxlbWVudDo6d3JhcChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oaW1wbCksIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICAgICAgcmV0
dXJuIFY4RWxlbWVudDo6d3JhcChzdGF0aWNfY2FzdDxFbGVtZW50Kj4oaW1wbCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogICAgIGNhc2UgTm9kZTo6QVRUUklC
VVRFX05PREU6Ci0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PEF0dHIqPihpbXBsKSwg
aXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxBdHRyKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3Qp
OwogICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgotICAgICAgICByZXR1cm4gdG9WOCh0b1RleHQo
aW1wbCksIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHRvVjgodG9U
ZXh0KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKICAg
ICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAgICAgcmV0dXJuIHRvVjgoc3Rh
dGljX2Nhc3Q8Q0RBVEFTZWN0aW9uKj4oaW1wbCksIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsK
KyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q0RBVEFTZWN0aW9uKj4oaW1wbCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogICAgIGNhc2UgTm9kZTo6
RU5USVRZX1JFRkVSRU5DRV9OT0RFOgotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxF
bnRpdHlSZWZlcmVuY2UqPihpbXBsKSwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOworICAgICAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxFbnRpdHlSZWZlcmVuY2UqPihpbXBsKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlLCBmb3JjZU5ld09iamVjdCk7CiAgICAgY2FzZSBOb2RlOjpFTlRJ
VFlfTk9ERToKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RW50aXR5Kj4oaW1wbCks
IGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8RW50aXR5Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmpl
Y3QpOwogICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgotICAgICAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihpbXBsKSwg
aXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
LCBmb3JjZU5ld09iamVjdCk7CiAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6Ci0gICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENvbW1lbnQqPihpbXBsKSwgaXNvbGF0ZSwgZm9yY2VO
ZXdPYmplY3QpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxDb21tZW50Kj4oaW1w
bCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogICAgIGNhc2Ug
Tm9kZTo6RE9DVU1FTlRfTk9ERToKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihpbXBsKSwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOworICAgICAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUsIGZvcmNlTmV3T2JqZWN0KTsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToK
LSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4oaW1wbCksIGlz
b2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
RG9jdW1lbnRUeXBlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdP
YmplY3QpOwogICAgIGNhc2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKLSAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8RG9jdW1lbnRGcmFnbWVudCo+KGltcGwpLCBpc29sYXRl
LCBmb3JjZU5ld09iamVjdCk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PERvY3Vt
ZW50RnJhZ21lbnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlLCBmb3JjZU5ld09i
amVjdCk7CiAgICAgY2FzZSBOb2RlOjpOT1RBVElPTl9OT0RFOgotICAgICAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxOb3RhdGlvbio+KGltcGwpLCBpc29sYXRlLCBmb3JjZU5ld09iamVjdCk7
Ci0gICAgZGVmYXVsdDogYnJlYWs7IC8vIFhQQVRIX05BTUVTUEFDRV9OT0RFCisgICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PE5vdGF0aW9uKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOyAv
LyBYUEFUSF9OQU1FU1BBQ0VfTk9ERQogICAgIH0KLSAgICByZXR1cm4gVjhOb2RlOjp3cmFwKGlt
cGwsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICByZXR1cm4gVjhOb2RlOjp3cmFwKGlt
cGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogfQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCmluZGV4IGUyNWMxMjhkMTcxNDM1YjFkZjRkMTU4
NjM4Nzg1OGUyZmU0MTkzMmIuLjA1MmE0OWRlOWVjYWUyOTFjMWI4NTY5ZTU5YTkxNjljMTJlNWU5
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVM
aXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhO
b2RlTGlzdEN1c3RvbS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4Tm9kZUxpc3Q6Om5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAKLSAg
ICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAg
cmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250
ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdm9pZCBWOE5vZGVMaXN0Ojp2aXNpdERP
TVdyYXBwZXIoRE9NRGF0YVN0b3JlKiBzdG9yZSwgdm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0PiB3cmFwcGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vdGlmaWNhdGlvbkNlbnRlckN1c3RvbS5jcHAKaW5k
ZXggM2EwMjlkNzIwZDM4N2FlNTMyNTgwMmFhMzE1ODU1MTA0OTYwM2I2Yy4uZWZhNTU2NzdiMmFl
MmZmYWZkMTg2NWI2ZTViYTJjMjQ5MjRhZDBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm90aWZpY2F0aW9uQ2VudGVyQ3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb3RpZmljYXRpb25DZW50ZXJDdXN0
b20uY3BwCkBAIC01OSw3ICs1OSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNh
dGlvbkNlbnRlcjo6Y3JlYXRlSFRNTE5vdGlmaWNhdGlvbkNhbGxiYWNrKGNvbnN0CiAgICAgICAg
IHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIG5v
dGlmaWNhdGlvbi0+cmVmKCk7Ci0gICAgcmV0dXJuIHRvVjgobm90aWZpY2F0aW9uLmdldCgpLCBh
cmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgobm90aWZpY2F0aW9uLmdldCgpLCBh
cmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQog
CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhOb3RpZmljYXRpb25DZW50ZXI6OmNyZWF0ZU5vdGlm
aWNhdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC03NCw3ICs3NCw3
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE5vdGlmaWNhdGlvbkNlbnRlcjo6Y3JlYXRlTm90
aWZpY2F0aW9uQ2FsbGJhY2soY29uc3Qgdjg6CiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRp
b24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIAogICAgIG5vdGlmaWNhdGlvbi0+cmVmKCk7Ci0g
ICAgcmV0dXJuIHRvVjgobm90aWZpY2F0aW9uLmdldCgpLCBhcmdzLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHRvVjgobm90aWZpY2F0aW9uLmdldCgpLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlv
bkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhOb3RpZmljYXRpb25DZW50ZXI6OnJlcXVlc3RQZXJtaXNzaW9uQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFBlcmZvcm1hbmNlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFBlcmZvcm1hbmNlQ3VzdG9tLmNwcAppbmRleCAxMDFkNjQ0OWI5NGVm
Nzk3NTU1YzhkMzg0ZWMzZDU0NTI1MTUxYzhhLi5hY2EwODExNTIyZWRkZTlhYzc1N2JiZGNlMGJi
NTE2NmU4NjlmNTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhQZXJmb3JtYW5jZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VDdXN0b20uY3BwCkBAIC00MCwxMSArNDAsMTIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhNRTogV2h5IGRvZXMgdGhpcyBuZWVkIHRvIGJl
IGN1c3RvbT8KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFBlcmZvcm1hbmNlOjptZW1vcnlBY2Nl
c3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5QZXJmb3JtYW5jZS5tZW1vcnlBY2Nl
c3NvckdldHRlciIpOwogICAgIFBlcmZvcm1hbmNlKiBpbXAgPSBWOFBlcmZvcm1hbmNlOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPm1lbW9yeSgpLCBpbmZv
LkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5tZW1vcnkoKSwgaW5mby5Ib2xk
ZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhQZXJmb3JtYW5jZUVudHJ5Q3VzdG9tLmNwcAppbmRleCA3NGRmOWM3
NjRkYzE1NmQ4NGQ5MTU4ZTc5YzVkZDJiYWEwYmIzNmQ5Li45ZDY3MDI5YmYzNzUyMmJmNDU0MmMz
NTRkMTFmYzY4NGUwN2RiMDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhQZXJmb3JtYW5jZUVudHJ5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhQZXJmb3JtYW5jZUVudHJ5Q3VzdG9tLmNwcApAQCAtNDMs
MTcgKzQzLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGVyZm9ybWFuY2VFbnRyeSogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQZXJmb3JtYW5jZUVudHJ5KiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQog
ewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAKICNpZiBFTkFC
TEUoUkVTT1VSQ0VfVElNSU5HKQogICAgIGlmIChpbXBsLT5pc1Jlc291cmNlKCkpCi0gICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcqPihpbXBs
KSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFBlcmZvcm1hbmNl
UmVzb3VyY2VUaW1pbmcqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICNlbmRp
ZgogCi0gICAgcmV0dXJuIFY4UGVyZm9ybWFuY2VFbnRyeTo6d3JhcChpbXBsKTsKKyAgICByZXR1
cm4gVjhQZXJmb3JtYW5jZUVudHJ5Ojp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFBvcFN0YXRlRXZlbnRDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKaW5k
ZXggODQyYTUzODFmYjhkODc2NTNmZGI4NWZhZGI2YzdjZjlkNWJjYzEwMS4uM2FhY2Q0YTlhODFk
MjAyODFjMzJjNDkzNzYzODUyYThkYTA3NmM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UG9wU3RhdGVFdmVudEN1c3RvbS5jcHAKQEAg
LTcyLDcgKzcyLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UG9wU3RhdGVFdmVudDo6c3Rh
dGVBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBib29sIGlzU2FtZVN0
YXRlID0gaGlzdG9yeS0+aXNTYW1lQXNDdXJyZW50U3RhdGUoZXZlbnQtPnNlcmlhbGl6ZWRTdGF0
ZSgpKTsKIAogICAgIGlmIChpc1NhbWVTdGF0ZSkgewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHY4SGlzdG9yeSA9IHRvVjgoaGlzdG9yeSwgaW5mby5HZXRJc29sYXRlKCkpLkFzPHY4
OjpPYmplY3Q+KCk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdjhIaXN0b3J5ID0g
dG9WOChoaXN0b3J5LCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJ
c29sYXRlKCkpLkFzPHY4OjpPYmplY3Q+KCk7CiAgICAgICAgIGlmICghaGlzdG9yeS0+c3RhdGVD
aGFuZ2VkKCkpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IHY4SGlzdG9yeS0+R2V0SGlkZGVuVmFs
dWUoVjhIaWRkZW5Qcm9wZXJ0eU5hbWU6OnN0YXRlKCkpOwogICAgICAgICAgICAgaWYgKCFyZXN1
bHQuSXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAKaW5kZXggODNjYmYz
OTM2ZGJkMTg2OGExMTdkYzBiZWNkODYyZTQ2OTlmOTkwMS4uMWFlYzUyMzczZjg1MTc5NjBmNGY0
MzdjNDNmNjc2ODI3ZjNjNzczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCkBA
IC04OSw3ICs4OSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFNRTFRyYW5zYWN0aW9uU3lu
Yzo6ZXhlY3V0ZVNxbENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVuCiAgICAgU1FMVHJhbnNhY3Rp
b25TeW5jKiB0cmFuc2FjdGlvbiA9IFY4U1FMVHJhbnNhY3Rpb25TeW5jOjp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiByZXN1bHQgPSB0b1Y4KHRyYW5zYWN0aW9uLT5leGVjdXRlU1FMKHN0YXRlbWVu
dCwgc3FsVmFsdWVzLCBlYyksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gcmVzdWx0ID0gdG9WOCh0cmFuc2FjdGlvbi0+ZXhlY3V0ZVNRTChzdGF0ZW1lbnQs
IHNxbFZhbHVlcywgZWMpLCBhcmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5H
ZXRJc29sYXRlKCkpOwogICAgIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkp
OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAppbmRleCA3OTdlYWFiZjA4
OWNmMzM2OTVjNDM1Zjc4NmQzNWY0ZmNmNzkyNTUwLi5mZmZlYzRiZDk1ZDIzODI4M2E1NGQ4MmM0
ZmE5NGNjZWRiYWJlZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCkBAIC0zOCwxMSArMzgsMTEgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTVkdE
b2N1bWVudCogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmplY3Qp
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTVkdEb2N1bWVudCogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9v
bCBmb3JjZU5ld09iamVjdCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51
bGxXaXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gVjhTVkdEb2N1bWVudDo6d3JhcChpbXBsLCBpc29sYXRlLCBmb3JjZU5ld09iamVjdCk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhTVkdEb2N1bWVudDo6d3JhcChp
bXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKICAgICBpZiAo
d3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIGlmICghVjhJ
c29sYXRlZENvbnRleHQ6OmdldEVudGVyZWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcAppbmRleCA0Mzc5
ZDQxNzE5YmMwZjQzMzQzMmYwYzVlMGZmMmZiODU4YzAyYjNmLi41MmY0ODUxZThlMTg5ZTM4ZjNk
YzVhYzI4M2Q3MWI4M2Y3MmZmZjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcApAQCAtMzcsMTEgKzM3LDEx
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
U1ZHRWxlbWVudCogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmpl
Y3QpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTVkdFbGVtZW50KiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBi
b29sIGZvcmNlTmV3T2JqZWN0KQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4
TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKLSAgICByZXR1cm4gY3JlYXRlVjhTVkdXcmFwcGVyKGlt
cGwsIGlzb2xhdGUsIGZvcmNlTmV3T2JqZWN0KTsKKyAgICByZXR1cm4gY3JlYXRlVjhTVkdXcmFw
cGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTVkdQYXRoU2VnQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCmluZGV4IDE3M2NiZjYzMWNi
ZDAzNDFlYjY2MjQ1M2UyMjMyMzM2OTgxNzZhZDAuLmMwMWIyMDMxMDU1NzJjYzU4NTFhYjMyNDVm
MTc0MWQ0MDU4ZGRhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20uY3BwCkBAIC01Nyw1MiArNTcsNTIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChTVkdQYXRo
U2VnKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFNWR1BhdGhTZWcqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICBy
ZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogICAgIHN3aXRjaCAoaW1wbC0+cGF0aFNl
Z1R5cGUoKSkgewogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DTE9TRVBBVEg6Ci0gICAg
ICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDbG9zZVBhdGgqPihpbXBsKSwg
aXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDbG9z
ZVBhdGgqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNWR1Bh
dGhTZWc6OlBBVEhTRUdfTU9WRVRPX0FCUzoKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ01vdmV0b0Ficyo+KGltcGwpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b0Ficyo+KGltcGwpLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19NT1ZFVE9fUkVM
OgotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTW92ZXRvUmVsKj4o
aW1wbCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTW92ZXRvUmVsKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2Fz
ZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19BQlM6Ci0gICAgICAgIHJldHVybiB0b1Y4KHN0
YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9BYnMqPihpbXBsKSwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9BYnMqPihpbXBsKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElO
RVRPX1JFTDoKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0
b1JlbCo+KGltcGwpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0xpbmV0b1JlbCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
ICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX0FCUzoKLSAgICAgICAg
cmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyo+KGltcGwp
LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY0Ficyo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNh
c2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1JFTDoKLSAgICAgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCo+KGltcGwpLCBpc29s
YXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9D
dWJpY1JlbCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgU1ZH
UGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM6Ci0gICAgICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljQWJzKj4oaW1wbCksIGlz
b2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0
b1F1YWRyYXRpY0Ficyo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNh
c2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19SRUw6Ci0gICAgICAgIHJl
dHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKj4oaW1w
bCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2Vn
Q3VydmV0b1F1YWRyYXRpY1JlbCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
ICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19BUkNfQUJTOgotICAgICAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjQWJzKj4oaW1wbCksIGlzb2xhdGUpOworICAgICAg
ICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQXJjQWJzKj4oaW1wbCksIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0FSQ19S
RUw6Ci0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhTZWdBcmNSZWwqPihp
bXBsKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFNWR1BhdGhT
ZWdBcmNSZWwqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNW
R1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfQUJTOgotICAgICAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyo+KGltcGwpLCBp
c29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0
b0hvcml6b250YWxBYnMqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX0hPUklaT05UQUxfUkVMOgotICAgICAgICBy
ZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbFJlbCo+KGlt
cGwpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNl
Z0xpbmV0b0hvcml6b250YWxSZWwqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
ICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUzoKLSAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKj4o
aW1wbCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTGluZXRvVmVydGljYWxBYnMqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
ICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX1JFTDoKLSAgICAg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKj4o
aW1wbCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTGluZXRvVmVydGljYWxSZWwqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
ICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19DVUJJQ19TTU9PVEhfQUJTOgot
ICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21v
b3RoQWJzKj4oaW1wbCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNf
U01PT1RIX1JFTDoKLSAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1
cnZldG9DdWJpY1Ntb290aFJlbCo+KGltcGwpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRv
Vjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290aFJlbCo+KGltcGwpLCBj
cmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19D
VVJWRVRPX1FVQURSQVRJQ19TTU9PVEhfQUJTOgotICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyo+KGltcGwpLCBpc29sYXRl
KTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFk
cmF0aWNTbW9vdGhBYnMqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBj
YXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfU01PT1RIX1JFTDoKLSAg
ICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNT
bW9vdGhSZWwqPihpbXBsKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKj4oaW1wbCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBWOFNWR1BhdGhTZWc6OndyYXAoaW1wbCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4
U1ZHUGF0aFNlZzo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTY3JpcHRQcm9maWxlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVDdXN0b20uY3BwCmluZGV4IDBjZjU2ZDg0
MjNkMjI5ODY4OTcxNjk1NzMxMjg3OThlZDVmMGYzMDQuLjY2MGJkYzE1NGM2ZDZiOWNiZDA3NDU0
NGNhNzQ0Njg2YjdlYmNhNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVDdXN0b20uY3BwCkBAIC0zOSwxMCArMzks
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChTY3JpcHRQcm9maWxlKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFNjcmlwdFByb2ZpbGUqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgaWYgKCFp
bXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOworCisgICAgLy8g
RklYTUU6IFVzZSBjcmVhdGlvbkNvbnRleHQuCisKICAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9u
PiBmdW5jdGlvbiA9IFY4U2NyaXB0UHJvZmlsZTo6R2V0VGVtcGxhdGUoKS0+R2V0RnVuY3Rpb24o
KTsKICAgICBpZiAoZnVuY3Rpb24uSXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFJldHVybiBpZiBh
bGxvY2F0aW9uIGZhaWxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVOb2RlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNjcmlwdFByb2ZpbGVOb2RlQ3VzdG9tLmNwcAppbmRleCA0ZjNj
YjgyMzdjYTgwYTk2ZDZkYzViMTdiMTc3YTM4MWFjMzBhZjY2Li5kMTBmMzEyMGY5MGJjNjY4Zjhm
MzVmNWFmMTU2MzBmYzMyMjIyM2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTY3JpcHRQcm9maWxlTm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U2NyaXB0UHJvZmlsZU5vZGVDdXN0b20uY3BwCkBA
IC00NiwxMCArNDYsMTMgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U2NyaXB0UHJvZmlsZU5v
ZGU6OmNhbGxVSURBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlMKICAgICByZXR1cm4gdjg6
Ok51bWJlcjo6TmV3KGltcC0+Y2FsbFVJRCgpKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoU2NyaXB0UHJvZmlsZU5vZGUqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoU2NyaXB0UHJvZmlsZU5vZGUqIGltcGwsIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7
CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUp
OworCisgICAgLy8gRklYTUU6IFVzZSB0aGUgY3JlYXRpb25Db250ZXh0LgorCiAgICAgdjg6Okxv
Y2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBWOFNjcmlwdFByb2ZpbGVOb2RlOjpHZXRUZW1w
bGF0ZSgpLT5HZXRGdW5jdGlvbigpOwogICAgIGlmIChmdW5jdGlvbi5Jc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gUmV0dXJuIGlmIGFsbG9jYXRpb24gZmFpbGVkLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAppbmRl
eCA3YTEwMjFjZTQxZGRiN2MzMTYwOGE5NjZlMTM3OTYyYzBlYTNhZWJhLi5kY2JlMTYxMzYxOTZh
M2NhZDBjZDU1NjQxOWRlMzZiNjg1NDc5ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcApAQCAtMzcsMTMg
KzM3LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoU3R5bGVTaGVldCogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChTdHlsZVNoZWV0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghaW1w
bCkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKICAgICBpZiAoaW1w
bC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PENT
U1N0eWxlU2hlZXQqPihpbXBsKSk7Ci0gICAgcmV0dXJuIFY4U3R5bGVTaGVldDo6d3JhcChpbXBs
LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiBWOFN0eWxl
U2hlZXQ6OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCmluZGV4IDkwNGFiZDRlYTgx
Mjg4OTkzMTk3NTY4YTM2YjgzOWQ4OWUzOGRhODkuLmFhYzYyMDE0YTBkYzJhNmNhN2U3OGQwZjAw
MDkwNjI0MWQ2NjljMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFN0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAKQEAgLTUxLDcgKzUxLDcg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4U3R5bGVTaGVldExpc3Q6Om5hbWVkUHJvcGVydHlH
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmcKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVy
biB2OFVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIHRvVjgoaXRlbS0+c2hlZXQoKSwgaW5mby5H
ZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGl0ZW0tPnNoZWV0KCksIGluZm8uSG9sZGVy
KCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFRyYWNrRXZlbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4VHJhY2tFdmVudEN1c3RvbS5jcHAKaW5kZXggODZhYWY5NWVmOGFkMWM1YWQzMDYy
ZDcwNTZiZjRmMWUyMDIyM2RkYy4uYTk2MmE4MGQyYTdkZDliZWJiZjlhOTRhNGY5ZjhjNWQ0MzE0
YTVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJh
Y2tFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4VHJhY2tFdmVudEN1c3RvbS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4VHJhY2tFdmVudDo6dHJhY2tBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmEKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVHJhY2tCYXNlOjpU
ZXh0VHJhY2s6Ci0gICAgICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PFRleHRUcmFjayo+KHRy
YWNrKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICByZXR1cm4gdG9WOChzdGF0aWNfY2Fz
dDxUZXh0VHJhY2sqPih0cmFjayksIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBp
bmZvLkdldElzb2xhdGUoKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBUcmFja0Jhc2U6
OkF1ZGlvVHJhY2s6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAppbmRleCAz
NjU3Y2ZiMWJkYzYzYmJjM2ZiZjdhOTZmZmQzNDIyNTQ5YzFkN2Y4Li44MmMzNmEyZGVmNzRjYThj
NTFiNDg5ZjAxMzVjY2I0ZWNiMThlZjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1
c3RvbS5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgaW50KiBqc0FycmF5VG9JbnRBcnJh
eSh2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIHVpbnQzMl90IGxlbikKICAgICByZXR1cm4g
ZGF0YTsKIH0KIAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4T2JqZWN0KGNvbnN0
IFdlYkdMR2V0SW5mbyYgaW5mbywgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCitzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRvVjhPYmplY3QoY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIHN3aXRjaCAoaW5mby5nZXRUeXBlKCkpIHsKICAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVCb29sOgpAQCAtMTM3LDI3ICsxMzcsMjcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4T2JqZWN0KGNvbnN0IFdlYkdMR2V0SW5mbyYgaW5mbywgdjg6Oklzb2xhdGUq
IGkKICAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVVbnNpZ25lZEludDoKICAgICAgICAgcmV0
dXJuIHY4VW5zaWduZWRJbnRlZ2VyKGluZm8uZ2V0VW5zaWduZWRJbnQoKSwgaXNvbGF0ZSk7CiAg
ICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xCdWZmZXI6Ci0gICAgICAgIHJldHVybiB0
b1Y4KGluZm8uZ2V0V2ViR0xCdWZmZXIoKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4
KGluZm8uZ2V0V2ViR0xCdWZmZXIoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBj
YXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZsb2F0QXJyYXk6Ci0gICAgICAgIHJldHVybiB0
b1Y4KGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCksIGlzb2xhdGUpOworICAgICAgICByZXR1cm4g
dG9WOChpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OwogICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6Ci0gICAgICAg
IHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigpLCBpc29sYXRlKTsKKyAgICAg
ICAgcmV0dXJuIHRvVjgoaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xJbnRBcnJheToK
LSAgICAgICAgcmV0dXJuIHRvVjgoaW5mby5nZXRXZWJHTEludEFycmF5KCksIGlzb2xhdGUpOwor
ICAgICAgICByZXR1cm4gdG9WOChpbmZvLmdldFdlYkdMSW50QXJyYXkoKSwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkK
ICAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgogICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKLSAgICAgICAgcmV0dXJuIHRvVjgo
aW5mby5nZXRXZWJHTFByb2dyYW0oKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KGlu
Zm8uZ2V0V2ViR0xQcm9ncmFtKCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xSZW5kZXJidWZmZXI6Ci0gICAgICAgIHJldHVybiB0
b1Y4KGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVy
biB0b1Y4KGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKICAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFRleHR1cmU6Ci0gICAgICAg
IHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xUZXh0dXJlKCksIGlzb2xhdGUpOworICAgICAgICBy
ZXR1cm4gdG9WOChpbmZvLmdldFdlYkdMVGV4dHVyZSgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwogICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6
Ci0gICAgICAgIHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgpLCBp
c29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgoaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBXZWJHTEdldEluZm86
OmtUeXBlV2ViR0xVbnNpZ25lZEludEFycmF5OgotICAgICAgICByZXR1cm4gdG9WOChpbmZvLmdl
dFdlYkdMVW5zaWduZWRJbnRBcnJheSgpLCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHRvVjgo
aW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKICAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OgotICAgICAgICByZXR1cm4gdG9WOChpbmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMo
KSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB0b1Y4KGluZm8uZ2V0V2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUygpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CkBAIC0xNzIsMzkgKzE3MiwzOSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhP
YmplY3QoV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiwgdjg6OkhhbmRsZTx2OAogICAgIGNvbnN0
IGNoYXIqIHJlZmVyZW5jZU5hbWUgPSAwOwogICAgIHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1l
KCkpIHsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJLaXRXZWJHTExvc2VDb250ZXh0TmFt
ZToKLSAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxXZWJHTExvc2VD
b250ZXh0Kj4oZXh0ZW5zaW9uKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVjdCA9
IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbiksIGNvbnRleHRP
YmplY3QtPkNyZWF0aW9uQ29udGV4dCgpLCBpc29sYXRlKTsKICAgICAgICAgcmVmZXJlbmNlTmFt
ZSA9ICJ3ZWJLaXRXZWJHTExvc2VDb250ZXh0TmFtZSI7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAg
ICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljKj4oZXh0ZW5zaW9uKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVj
dCA9IHRvVjgoc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKj4oZXh0ZW5z
aW9uKSwgY29udGV4dE9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCksIGlzb2xhdGUpOwogICAgICAg
ICByZWZlcmVuY2VOYW1lID0gImV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWUiOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNTdGFuZGFyZERlcml2YXRp
dmVzTmFtZToKLSAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxPRVNT
dGFuZGFyZERlcml2YXRpdmVzKj4oZXh0ZW5zaW9uKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVu
c2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4
dGVuc2lvbiksIGNvbnRleHRPYmplY3QtPkNyZWF0aW9uQ29udGV4dCgpLCBpc29sYXRlKTsKICAg
ICAgICAgcmVmZXJlbmNlTmFtZSA9ICJvZXNTdGFuZGFyZERlcml2YXRpdmVzTmFtZSI7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdE5hbWU6
Ci0gICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZs
b2F0Kj4oZXh0ZW5zaW9uKSwgaXNvbGF0ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRv
Vjgoc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVj
dC0+Q3JlYXRpb25Db250ZXh0KCksIGlzb2xhdGUpOwogICAgICAgICByZWZlcmVuY2VOYW1lID0g
Im9lc1RleHR1cmVGbG9hdE5hbWUiOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Ci0gICAgICAgIGV4dGVuc2lvbk9iamVj
dCA9IHRvVjgoc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmplY3QqPihleHRlbnNpb24pLCBp
c29sYXRlKTsKKyAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2FzdDxPRVNW
ZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbiksIGNvbnRleHRPYmplY3QtPkNyZWF0aW9uQ29u
dGV4dCgpLCBpc29sYXRlKTsKICAgICAgICAgcmVmZXJlbmNlTmFtZSA9ICJvZXNWZXJ0ZXhBcnJh
eU9iamVjdE5hbWUiOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvTmFtZToKLSAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9W
OChzdGF0aWNfY2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSwgaXNvbGF0
ZSk7CisgICAgICAgIGV4dGVuc2lvbk9iamVjdCA9IHRvVjgoc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbyo+KGV4dGVuc2lvbiksIGNvbnRleHRPYmplY3QtPkNyZWF0aW9uQ29udGV4
dCgpLCBpc29sYXRlKTsKICAgICAgICAgcmVmZXJlbmNlTmFtZSA9ICJ3ZWJHTERlYnVnUmVuZGVy
ZXJJbmZvTmFtZSI7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Oldl
YkdMRGVidWdTaGFkZXJzTmFtZToKLSAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0
aWNfY2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbiksIGlzb2xhdGUpOworICAgICAg
ICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4o
ZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCksIGlzb2xhdGUpOwog
ICAgICAgICByZWZlcmVuY2VOYW1lID0gIndlYkdMRGVidWdTaGFkZXJzTmFtZSI7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYktpdFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDTmFtZToKLSAgICAgICAgZXh0ZW5zaW9uT2JqZWN0ID0gdG9WOChzdGF0aWNfY2Fz
dDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbiksIGlzb2xhdGUpOworICAg
ICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCks
IGlzb2xhdGUpOwogICAgICAgICByZWZlcmVuY2VOYW1lID0gIndlYktpdFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDTmFtZSI7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246OldlYktpdFdlYkdMRGVwdGhUZXh0dXJlTmFtZToKLSAgICAgICAgZXh0ZW5zaW9uT2JqZWN0
ID0gdG9WOChzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lvbiksIGlzb2xh
dGUpOworICAgICAgICBleHRlbnNpb25PYmplY3QgPSB0b1Y4KHN0YXRpY19jYXN0PFdlYkdMRGVw
dGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSwgY29udGV4dE9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCks
IGlzb2xhdGUpOwogICAgICAgICByZWZlcmVuY2VOYW1lID0gIndlYktpdFdlYkdMRGVwdGhUZXh0
dXJlTmFtZSI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI0Nyw3ICsyNDcsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE9iamVjdFBhcmFtZXRlcihjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzLCBPYmplYwogICAgIH0KICAgICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBz
ZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4gdG9WOE9i
amVjdChpbmZvLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5m
bywgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
IH0KIAogc3RhdGljIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB0b1dlYkdMVW5pZm9ybUxvY2F0aW9u
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCkBAIC0yODcsNyArMjg3LDcg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRh
Y2hlZFNoYWRlcnNDYWxsYmFjayhjb25zdAogICAgICAgICByZXR1cm4gdjg6Ok51bGwoYXJncy5H
ZXRJc29sYXRlKCkpOwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5ID0gdjg6OkFycmF5
OjpOZXcoc2hhZGVycy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFk
ZXJzLnNpemUoKTsgKytpaSkKLSAgICAgICAgYXJyYXktPlNldCh2OEludGVnZXIoaWksIGFyZ3Mu
R2V0SXNvbGF0ZSgpKSwgdG9WOChzaGFkZXJzW2lpXS5nZXQoKSwgYXJncy5HZXRJc29sYXRlKCkp
KTsKKyAgICAgICAgYXJyYXktPlNldCh2OEludGVnZXIoaWksIGFyZ3MuR2V0SXNvbGF0ZSgpKSwg
dG9WOChzaGFkZXJzW2lpXS5nZXQoKSwgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCks
IGFyZ3MuR2V0SXNvbGF0ZSgpKSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCkBAIC0zMjMsNyAr
MzIzLDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIKICAgICBXZWJHTEdldEluZm8gaW5mbyA9
IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFj
aG1lbnQsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gc2V0RE9NRXhj
ZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjhPYmplY3QoaW5m
bywgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8sIGFyZ3Mu
SG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVy
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTMzOSw3ICszMzksNyBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRl
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcgogICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC0+
Z2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gc2V0
RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjhPYmpl
Y3QoaW5mbywgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGluZm8s
IGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9
CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJv
Z3JhbVBhcmFtZXRlckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0zNTgs
NyArMzU4LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRQcm9ncmFtUGFyYW1ldGVyQ2FsbGJhY2soY29uc3QKICAgICBXZWJHTEdldEluZm8gaW5m
byA9IGNvbnRleHQtPmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKICAg
ICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKLSAgICByZXR1cm4gdG9WOE9iamVjdChpbmZvLCBhcmdzLkdldElzb2xhdGUoKSk7
CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250
ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMzgzLDcgKzM4Myw3IEBAIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyQ2Fs
bGJhY2soY29uc3QKICAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQtPmdldFNoYWRlclBh
cmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4g
c2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjhP
YmplY3QoaW5mbywgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4T2JqZWN0KGlu
Zm8sIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdldElzb2xhdGUoKSk7
CiB9CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
U3VwcG9ydGVkRXh0ZW5zaW9uc0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBA
IC00MjcsNyArNDI3LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRVbmlmb3JtQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3UKICAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQtPmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jYXRpb24sIGVjKTsKICAg
ICBpZiAoZWMpCiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKLSAgICByZXR1cm4gdG9WOE9iamVjdChpbmZvLCBhcmdzLkdldElzb2xhdGUoKSk7
CisgICAgcmV0dXJuIHRvVjhPYmplY3QoaW5mbywgYXJncy5Ib2xkZXIoKS0+Q3JlYXRpb25Db250
ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAppbmRleCA4NmFkN2ExOTBmYjA5
MmJhMjY1Y2FhMTE0ZjE1MTYwMzI0MzA3N2VhLi45OGIwMWRmOGE3MmI2ZmY4MWRkNzJhM2Y4OGU3
ZjM5N2JhNDEyNjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtMTMwLDggKzEzMCwxMCBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpzZXRJbnRlcnZhbENhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmCiAgICAgcmV0dXJuIFNldFRpbWVvdXRPckludGVydmFs
KGFyZ3MsIGZhbHNlKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV29ya2VyQ29u
dGV4dCogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChXb3JrZXJDb250ZXh0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogeworICAgIC8vIE5vdGljZSB0aGF0IHdl
IGV4cGxpY2l0bHkgaWdub3JlIGNyZWF0aW9uQ29udGV4dCBiZWNhdXNlIHRoZSBXb3JrZXJDb250
ZXh0IGlzIGl0cyBvd24gY3JlYXRpb25Db250ZXh0LgorCiAgICAgaWYgKCFpbXBsKQogICAgICAg
ICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5j
cHAKaW5kZXggZGJlYjY0NDMyNDE5MzJiYjM3ODkwZWFmMDIwNTZmZTNiYWJmNjRjZS4uODA5OTk2
MzczNmJmZTg0NTFkMTc3ZDE5MTY2NDQ0NzEzZTBhZmI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9t
LmNwcApAQCAtNzYsNyArNzYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhYTUxIdHRwUmVx
dWVzdDo6cmVzcG9uc2VBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cgogICAgICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0geG1sSHR0cFJlcXVlc3QtPnJlc3BvbnNlWE1MKGVjKTsK
ICAgICAgICAgICAgIGlmIChlYykKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0
aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdG9WOChkb2N1
bWVudCwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgoZG9jdW1l
bnQsIGluZm8uSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBpbmZvLkdldElzb2xhdGUoKSk7
CiAgICAgICAgIH0KIAogICAgIGNhc2UgWE1MSHR0cFJlcXVlc3Q6OlJlc3BvbnNlVHlwZUJsb2I6
CkBAIC04NSw3ICs4NSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhNTEh0dHBSZXF1ZXN0
OjpyZXNwb25zZUFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyCiAgICAgICAgICAgICBC
bG9iKiBibG9iID0geG1sSHR0cFJlcXVlc3QtPnJlc3BvbnNlQmxvYihlYyk7CiAgICAgICAgICAg
ICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5m
by5HZXRJc29sYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRvVjgoYmxvYiwgaW5mby5HZXRJ
c29sYXRlKCkpOworICAgICAgICAgICAgcmV0dXJuIHRvVjgoYmxvYiwgaW5mby5Ib2xkZXIoKS0+
Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgfQogCiAgICAg
Y2FzZSBYTUxIdHRwUmVxdWVzdDo6UmVzcG9uc2VUeXBlQXJyYXlCdWZmZXI6CkBAIC05NCw3ICs5
NCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUFj
Y2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyCiAgICAgICAgICAgICBBcnJheUJ1ZmZlciog
YXJyYXlCdWZmZXIgPSB4bWxIdHRwUmVxdWVzdC0+cmVzcG9uc2VBcnJheUJ1ZmZlcihlYyk7CiAg
ICAgICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlv
bihlYywgaW5mby5HZXRJc29sYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRvVjgoYXJyYXlC
dWZmZXIsIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0b1Y4KGFycmF5
QnVmZmVyLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRl
KCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
bWFrZV9uYW1lcy5wbCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCmluZGV4IDVi
ZDVlOTdkOTA0NWM5Yzk5OTNhNThkOWRiODRlOWMyNmYzYjhjNTUuLmM4NTMxNjRlNmJjYjEwNTYz
NDQzOWM4NDY4ZDljMDA0YzhmYjY1MzYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9t
YWtlX25hbWVzLnBsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBsCkBAIC0x
MDQxLDEyICsxMDQxLDEyIEBAIEVORAogICAgICAgICB9IGVsc2lmICgkd3JhcHBlckZhY3RvcnlU
eXBlIGVxICJWOCIpIHsKICAgICAgICAgICAgIGlmICgkZW5hYmxlZFRhZ3N7JHRhZ05hbWV9e3dy
YXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlfSkgewogICAgICAgICAgICAgICAgIHByaW50IEYg
PDxFTkQKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0ludGVyZmFjZU5h
bWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZSR7SlNJ
bnRlcmZhY2VOYW1lfVdyYXBwZXIoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQqIGVsZW1l
bnQsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCiB7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIU1lZGlhUGxheWVyOjppc0F2YWlsYWJsZSgpIHx8IChz
ZXR0aW5ncyAmJiAhc2V0dGluZ3MtPmlzTWVkaWFFbmFibGVkKCkpKQotICAgICAgICByZXR1cm4g
VjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudDo6d3JhcChlbGVtZW50LCBpc29sYXRlKTsK
LSAgICByZXR1cm4gdG9WOChzdGF0aWNfY2FzdDwke0pTSW50ZXJmYWNlTmFtZX0qPihlbGVtZW50
KSwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiBWOCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVt
ZW50Ojp3cmFwKGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJu
IHRvVjgoc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9Kj4oZWxlbWVudCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIEVORApAQCAtMTA1NCwyOCArMTA1NCwyOCBAQCBFTkQK
ICAgICAgICAgICAgIH0gZWxzaWYgKCRlbmFibGVkVGFnc3skdGFnTmFtZX17Y29udGV4dENvbmRp
dGlvbmFsfSkgewogICAgICAgICAgICAgICAgIG15ICRjb250ZXh0Q29uZGl0aW9uYWwgPSAkZW5h
YmxlZFRhZ3N7JHRhZ05hbWV9e2NvbnRleHRDb25kaXRpb25hbH07CiAgICAgICAgICAgICAgICAg
cHJpbnQgRiA8PEVORAotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGUke0pTSW50
ZXJmYWNlTmFtZX1XcmFwcGVyKCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50KiBlbGVtZW50
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3Jl
YXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVu
dCogZWxlbWVudCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIUNvbnRleHRGZWF0dXJlczo6JHtjb250ZXh0
Q29uZGl0aW9uYWx9RW5hYmxlZChlbGVtZW50LT5kb2N1bWVudCgpKSkKLSAgICAgICAgcmV0dXJu
IFY4JHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1lfTo6d3JhcCh0byRwYXJhbWV0ZXJz
e2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGlzb2xhdGUpOwotICAgIHJldHVybiB0
b1Y4KHN0YXRpY19jYXN0PCR7SlNJbnRlcmZhY2VOYW1lfSo+KGVsZW1lbnQpLCBpc29sYXRlKTsK
KyAgICAgICAgcmV0dXJuIFY4JHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1lfTo6d3Jh
cCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8JHtKU0ludGVy
ZmFjZU5hbWV9Kj4oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiBFTkQK
IDsKICAgICAgICAgICAgIH0gZWxzaWYgKCR7SlNJbnRlcmZhY2VOYW1lfSBlcSAiSFRNTEVsZW1l
bnQiKSB7CiAgICAgICAgICAgICAgICAgcHJpbnQgRiA8PEVORAotc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKCRwYXJhbWV0ZXJze25h
bWVzcGFjZX1FbGVtZW50KiBlbGVtZW50LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcigkcGFy
YW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKLSAgICByZXR1cm4g
VjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudDo6d3JhcChlbGVtZW50LCBpc29sYXRlKTsK
KyAgICByZXR1cm4gVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudDo6d3JhcChlbGVtZW50
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiBFTkQKIDsKICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgcHJpbnQgRiA8PEVORAotc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjcmVhdGUke0pTSW50ZXJmYWNlTmFtZX1XcmFwcGVyKCRwYXJhbWV0ZXJze25hbWVz
cGFjZX1FbGVtZW50KiBlbGVtZW50LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3N0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcigkcGFyYW1l
dGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKLSAgICByZXR1cm4gdG9W
OChzdGF0aWNfY2FzdDwke0pTSW50ZXJmYWNlTmFtZX0qPihlbGVtZW50KSwgaXNvbGF0ZSk7Cisg
ICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9Kj4oZWxlbWVudCks
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIApAQCAtMTE1Nyw3ICsxMTU3LDcgQEAg
RU5ECiA7CiAgICAgfSBlbHNpZiAoJHdyYXBwZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CiAgICAg
ICAgIHByaW50IEYgPDxFTkQKLXR5cGVkZWYgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICgqQ3JlYXRl
JHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rpb24pKCRwYXJhbWV0ZXJz
e25hbWVzcGFjZX1FbGVtZW50Kiwgdjg6Oklzb2xhdGUqKTsKK3R5cGVkZWYgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+ICgqQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVu
Y3Rpb24pKCRwYXJhbWV0ZXJze25hbWVzcGFjZX1FbGVtZW50Kiwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwogCiBFTkQKIDsKQEAgLTExNzYs
NyArMTE3Niw3IEBAIEVORAogOwogICAgIH0gZWxzaWYgKCR3cmFwcGVyRmFjdG9yeVR5cGUgZXEg
IlY4IikgewogICAgICAgICBwcmludCBGIDw8RU5ECi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3Jl
YXRlVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
RWxlbWVudCogZWxlbWVudCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUsIGJvb2wgZm9yY2VOZXdPYmpl
Y3QpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9
V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgYm9v
bCBmb3JjZU5ld09iamVjdCkKIHsKICAgICB0eXBlZGVmIEhhc2hNYXA8V1RGOjpBdG9taWNTdHJp
bmdJbXBsKiwgQ3JlYXRlJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnRXcmFwcGVyRnVuY3Rp
b24+IEZ1bmN0aW9uTWFwOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoRnVuY3Rpb25NYXAsIG1h
cCwgKCkpOwpAQCAtMTIxNyw4ICsxMjE3LDggQEAgRU5ECiA7CiAgICAgfSBlbHNpZiAoJHdyYXBw
ZXJGYWN0b3J5VHlwZSBlcSAiVjgiKSB7CiAgICAgICAgIHByaW50IEYgPDxFTkQKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZVdyYXBwZXJGdW5jdGlvbihlbGVtZW50LCBpc29sYXRlKTsKLSAgICByZXR1
cm4gVjgkcGFyYW1ldGVyc3tmYWxsYmFja0ludGVyZmFjZU5hbWV9Ojp3cmFwKHRvJHBhcmFtZXRl
cnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1lfShlbGVtZW50KSwgMCwgZm9yY2VOZXdPYmplY3QpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlV3JhcHBlckZ1bmN0aW9uKGVsZW1lbnQsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4JHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZh
Y2VOYW1lfTo6d3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVu
dCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSwgZm9yY2VOZXdPYmplY3QpOwogRU5ECiA7CiAg
ICAgfQpAQCAtMTI3OCw3ICsxMjc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgJHBhcmFtZXRlcnN7bmFtZXNwYWNlfUVsZW1lbnQ7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY3JlYXRlVjgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9V3JhcHBlcigkcGFyYW1ldGVyc3tu
YW1lc3BhY2V9RWxlbWVudCosIHY4OjpJc29sYXRlKiwgYm9vbCk7CisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNyZWF0ZVY4JHBhcmFtZXRlcnN7bmFtZXNwYWNlfVdyYXBwZXIoJHBhcmFtZXRl
cnN7bmFtZXNwYWNlfUVsZW1lbnQqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiwgYm9vbCk7CiB9CiBFTkQKIDsK
</data>
<flag name="review"
          id="173783"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="173789"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162619</attachid>
            <date>2012-09-06 16:43:35 -0700</date>
            <delta_ts>2012-09-06 16:43:35 -0700</delta_ts>
            <desc>run-bindings-tests diffs</desc>
            <filename>bug-96039-20120906164316.patch</filename>
            <type>text/plain</type>
            <size>62367</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI3Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAppbmRleCAxMzcw
OGUzNzI3MTA3ZmQ3YmE0YmMxMzhkZDQwYjM3YjBmNzZhMzMxLi5kM2U1ZjcwODQyN2U1NzE2Yjcz
ZTVjYWJkYjNiOTNlN2U3Y2ViZWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKQEAgLTU2LDcgKzU2
LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmb29DYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgRmxvYXQ2NEFycmF5KiBpbXAgPSBWOEZsb2F0
NjRBcnJheTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRVhDRVBUSU9OX0JMT0NLKEZs
b2F0MzJBcnJheSosIGFycmF5LCBWOEZsb2F0MzJBcnJheTo6SGFzSW5zdGFuY2UoTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOEZsb2F0MzJB
cnJheTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKLSAgICByZXR1
cm4gdG9WOChpbXAtPmZvbyhhcnJheSksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgp
LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5mb28oYXJyYXkpLCB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2V0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKQEAgLTY3LDExICs2NywxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNl
dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAKIH0gLy8gbmFtZXNwYWNlIEZs
b2F0NjRBcnJheVY4SW50ZXJuYWwKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRmxvYXQ2
NEFycmF5KiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KEZsb2F0NjRBcnJheSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBpZiAoIWltcGwpCiAgICAg
ICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gVjhGbG9hdDY0QXJyYXk6OndyYXAoaW1wbCwgaXNvbGF0ZSk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhGbG9hdDY0QXJyYXk6OndyYXAo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQogICAgICAgICB3cmFwcGVyLT5TZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJh
eURhdGEoaW1wbC0+YmFzZUFkZHJlc3MoKSwgdjg6OmtFeHRlcm5hbERvdWJsZUFycmF5LCBpbXBs
LT5sZW5ndGgoKSk7CiAgICAgcmV0dXJuIHdyYXBwZXI7CkBAIC0xNDcsNyArMTQ3LDcgQEAgYm9v
bCBWOEZsb2F0NjRBcnJheTo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVl
KQogfQogCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhGbG9hdDY0QXJyYXk6OndyYXBTbG93
KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4
OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhGbG9hdDY0QXJyYXk6OndyYXBTbG93KFBhc3NSZWZQdHI8
RmxvYXQ2NEFycmF5PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlcjsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PEFycmF5
QnVmZmVyVmlldyo+KGltcGwuZ2V0KCkpKSA9PSBzdGF0aWNfY2FzdDx2b2lkKj4oaW1wbC5nZXQo
KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4RmxvYXQ2NEFycmF5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhGbG9hdDY0QXJyYXkuaAppbmRleCA0ODkyOGE0ZDY2ZGIwYTBmY2Y1NzEwMWVkODg1YjQx
MjI2M2ZhNjU4Li4zZjY2MDk1NTg5OTIxYTY4NDE3ZWU5ZWRkNjgwNDA4ZGQwMDViMWQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0
QXJyYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhG
bG9hdDY0QXJyYXkuaApAQCAtNDIsMjggKzQyLDI4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PEZsb2F0NjRBcnJheSo+KG9iamVjdC0+R2V0UG9pbnRl
ckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CiAgICAgfQotICAg
IGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKEZsb2F0NjRBcnJheSos
IHY4OjpJc29sYXRlKiA9IDApOworICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwKEZsb2F0NjRBcnJheSosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDApOwog
ICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNp
dERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
KTsKICAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdy
YXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPEZsb2F0NjRBcnJheT4sIHY4OjpJ
c29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFz
c1JlZlB0cjxGbG9hdDY0QXJyYXk+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4Rmxv
YXQ2NEFycmF5Ojp3cmFwKEZsb2F0NjRBcnJheSogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUp
Cit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RmxvYXQ2NEFycmF5Ojp3cmFwKEZsb2F0NjRBcnJh
eSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gZ2V0RE9NT2JqZWN0TWFwKGlzb2xhdGUpLmdldChpbXBsKTsKICAgICAgICAgaWYgKCF3cmFw
cGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiBW
OEZsb2F0NjRBcnJheTo6d3JhcFNsb3coaW1wbCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4Rmxv
YXQ2NEFycmF5Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQog
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChGbG9hdDY0QXJyYXkqLCB2ODo6SXNvbGF0ZSog
PSAwKTsKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBGbG9h
dDY0QXJyYXkgPiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChGbG9hdDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVh
dGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogPSAw
KTsKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBGbG9hdDY0
QXJyYXkgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7Ci0g
ICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHRvVjgoaW1w
bC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCBmMzczM2VmZmE0NWE3ZmE0NzhmNjMzZWI3MTNkYzJk
ZWY1ZWIxZmU2Li5iMzBmMWQ4MGI2N2YzMTJmMzEwOThlNTc1YzlhNDlhMzJkNjFlYTFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wg
VjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RBY3RpdmVET01PYmpl
Y3Q6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEFjdGl2ZURPTU9iamVjdD4gaW1wbCwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFjdGl2ZURPTU9i
amVjdDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0QWN0aXZlRE9NT2JqZWN0PiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKICAgICBGcmFtZSogZnJh
bWUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5oCmluZGV4IGUyY2VlNWExMjdmNTI4
Njk1NjQ5NDk5M2NiNzM2NDkyZGYwZGZiYzguLjFhNjMwMzkxMWQxNTIzNDgxMjllNzFlYzgzZDI0
ODA2ZWM4NTYxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmgKQEAgLTQxLDcgKzQx
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGVz
dEFjdGl2ZURPTU9iamVjdCo+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4
RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CiAgICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RBY3RpdmVET01PYmplY3QqLCB2ODo6SXNvbGF0ZSog
PSAwKTsKKyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0
QWN0aXZlRE9NT2JqZWN0Kiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0
ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3Rh
dGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3Jh
cHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwog
ICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKQEAgLTQ5LDI2ICs0OSwyNiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGJvb2wgbmFtZWRTZWN1cml0eUNoZWNrKHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBob3N0LCB2ODo6TG9jYWw8djg6OlZhbHVlPiBrZXksIHY4OjpBY2Nlc3NUeXBlLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiBkYXRhKTsKICAgICBzdGF0aWMgYm9vbCBpbmRleGVkU2VjdXJpdHlD
aGVjayh2ODo6TG9jYWw8djg6Ok9iamVjdD4gaG9zdCwgdWludDMyX3QgaW5kZXgsIHY4OjpBY2Nl
c3NUeXBlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBkYXRhKTsKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0QWN0aXZlRE9N
T2JqZWN0Piwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmplY3Q+LCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6d3JhcChUZXN0QWN0aXZlRE9N
T2JqZWN0KiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwKFRlc3RBY3RpdmVET01PYmplY3QqIGltcGws
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERP
TU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gVjhUZXN0QWN0
aXZlRE9NT2JqZWN0Ojp3cmFwU2xvdyhpbXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0
QWN0aXZlRE9NT2JqZWN0Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEFjdGl2ZURPTU9i
amVjdCogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwsIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4
OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVy
biB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgcmV0dXJuIFY4VGVzdEFjdGl2ZURPTU9i
amVjdDo6d3JhcChpbXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0QWN0aXZlRE9NT2Jq
ZWN0Ojp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9Ci1pbmxpbmUgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdEFjdGl2ZURPTU9iamVjdCA+
IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0QWN0aXZlRE9NT2JqZWN0ID4gaW1wbCwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewotICAgIHJldHVybiB0b1Y4KGltcGwu
Z2V0KCksIGlzb2xhdGUpOworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q2FsbGJhY2suY3BwCmluZGV4IGVkMmRlNmVl
NmJiNWM2YWI0ODY1NjY2ZmVmNGZmZTJiNTU5YmVkODcuLjBkMjA2MTdiNGZkNGQwN2E3NTM3ODNh
ZTU2MWExMzk3ZDAxNWEwYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RDYWxsYmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdENhbGxiYWNrLmNwcApAQCAtODYsNyArODYsNyBA
QCBib29sIFY4VGVzdENhbGxiYWNrOjpjYWxsYmFja1dpdGhDbGFzczFQYXJhbShDbGFzczEqIGNs
YXNzMVBhcmFtKQogCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAK
LSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3MxUGFyYW1IYW5kbGUgPSB0b1Y4KGNsYXNz
MVBhcmFtKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3MxUGFyYW1IYW5kbGUgPSB0
b1Y4KGNsYXNzMVBhcmFtLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpKTsKICAgICBpZiAoY2xh
c3MxUGFyYW1IYW5kbGUuSXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghaXNTY3JpcHRDb250cm9s
bGVyVGVybWluYXRpbmcoKSkKICAgICAgICAgICAgIENSQVNIKCk7CkBAIC0xMTQsNyArMTE0LDcg
QEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoQ2xhc3MyUGFyYW0oQ2xhc3MyKiBj
bGFzczJQYXJhbSwgY29uc3QgU3RyaW5nJgogCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3Bl
KHY4Q29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3MyUGFyYW1IYW5k
bGUgPSB0b1Y4KGNsYXNzMlBhcmFtKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3My
UGFyYW1IYW5kbGUgPSB0b1Y4KGNsYXNzMlBhcmFtLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pigp
KTsKICAgICBpZiAoY2xhc3MyUGFyYW1IYW5kbGUuSXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICgh
aXNTY3JpcHRDb250cm9sbGVyVGVybWluYXRpbmcoKSkKICAgICAgICAgICAgIENSQVNIKCk7CkBA
IC0xNDksNyArMTQ5LDcgQEAgYm9vbCBWOFRlc3RDYWxsYmFjazo6Y2FsbGJhY2tXaXRoU3RyaW5n
TGlzdChSZWZQdHI8RE9NU3RyaW5nTGlzdD4gbGlzdFBhcmFtKQogCiAgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbGlz
dFBhcmFtSGFuZGxlID0gdG9WOChsaXN0UGFyYW0pOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBsaXN0UGFyYW1IYW5kbGUgPSB0b1Y4KGxpc3RQYXJhbSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4oKSk7CiAgICAgaWYgKGxpc3RQYXJhbUhhbmRsZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgaWYg
KCFpc1NjcmlwdENvbnRyb2xsZXJUZXJtaW5hdGluZygpKQogICAgICAgICAgICAgQ1JBU0goKTsK
QEAgLTIwNywxMyArMjA3LDEzIEBAIGJvb2wgVjhUZXN0Q2FsbGJhY2s6OmNhbGxiYWNrUmVxdWly
ZXNUaGlzVG9QYXNzKENsYXNzOCogY2xhc3M4UGFyYW0sIFRoaXNDbGFzcyoKIAogICAgIHY4OjpD
b250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNsYXNzOFBhcmFtSGFuZGxlID0gdG9WOChjbGFzczhQYXJhbSk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNsYXNzOFBhcmFtSGFuZGxlID0gdG9WOChjbGFzczhQYXJhbSwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4oKSk7CiAgICAgaWYgKGNsYXNzOFBhcmFtSGFuZGxlLklzRW1wdHko
KSkgewogICAgICAgICBpZiAoIWlzU2NyaXB0Q29udHJvbGxlclRlcm1pbmF0aW5nKCkpCiAgICAg
ICAgICAgICBDUkFTSCgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHRoaXNDbGFzc1BhcmFtSGFuZGxlID0gdG9WOCh0aGlzQ2xhc3NQYXJh
bSk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRoaXNDbGFzc1BhcmFtSGFuZGxlID0gdG9W
OCh0aGlzQ2xhc3NQYXJhbSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSk7CiAgICAgaWYgKHRo
aXNDbGFzc1BhcmFtSGFuZGxlLklzRW1wdHkoKSkgewogICAgICAgICBpZiAoIWlzU2NyaXB0Q29u
dHJvbGxlclRlcm1pbmF0aW5nKCkpCiAgICAgICAgICAgICBDUkFTSCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVk
R2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RDdXN0b21OYW1lZEdldHRlci5jcHAKaW5kZXggODk3NWNmNjMyNWUyMDZlMzcwODYyNDMzOWM4
ZTMyYWRmN2YxMGRjYi4uMDEzNzZlNmZjMzBhODg5YmIwOGI2MzY1ZmEyN2RiYjU0MzQ1ZTUxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0xMTAsNyArMTEwLDcg
QEAgYm9vbCBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKQogfQogCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0Q3Vz
dG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVy
PiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVk
R2V0dGVyPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
cjsKICAgICBGcmFtZSogZnJhbWUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIu
aAppbmRleCAyYWVkYWM3MzFjNTNjZTljNDk0YzM5ZTY3NjRjZTNmNjNmOWMyYTM4Li43Y2E1Njll
OTdmZWNiNzYxN2NjNDYzMDM5MTI2Mzc5YWYyNjUwZGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIuaApAQCAtNDEsMzMgKzQxLDMzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RDdXN0b21OYW1lZEdldHRlcio+KG9iamVjdC0+
R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CiAg
ICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RD
dXN0b21OYW1lZEdldHRlciosIHY4OjpJc29sYXRlKiA9IDApOworICAgIGlubGluZSBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RDdXN0b21OYW1lZEdldHRlciosIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+KCksIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZv
aWQqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9p
ZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJ
bmZvIGluZm87CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBuYW1lZFByb3BlcnR5
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYpOwog
ICAgIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBl
ckludGVybmFsRmllbGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVyPiwg
djg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RDdXN0b21OYW1lZEdldHRlcj4sIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIH07CiAKLXY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXAoVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXAoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBnZXRE
T01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIFY4VGVzdEN1
c3RvbU5hbWVkR2V0dGVyOjp3cmFwU2xvdyhpbXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhU
ZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXIqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwsIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAg
ICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgcmV0dXJuIFY4VGVzdEN1
c3RvbU5hbWVkR2V0dGVyOjp3cmFwKGltcGwsIGlzb2xhdGUpOworICAgIHJldHVybiBWOFRlc3RD
dXN0b21OYW1lZEdldHRlcjo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
fQotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RDdXN0
b21OYW1lZEdldHRlciA+IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0Q3VzdG9tTmFtZWRHZXR0
ZXIgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7Ci0gICAg
cmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHRvVjgoaW1wbC5n
ZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50Q29uc3RydWN0b3IuY3BwCmluZGV4IGZlM2ViNGZmZjA1MDY4ZjQwZDJjNzViNTExMTExMjU2
NDEwMTVlMTIuLmY1MzkxMTUwZDJmYTFjMjRjMTE2ZWU1OGU1NzFiNjRiZDI4MGVjOTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBib29s
IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSkKIH0KIAogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50Q29uc3Ry
dWN0b3I6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+IGltcGwsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKICAgICBGcmFt
ZSogZnJhbWUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmgKaW5kZXggNDMzZGNj
ODdmMWJiYmQ2MjZmMTdiZGM5MDgyZjdmYTk1ZTdlZmQzNS4uN2M1M2Y4OGZiOWM1ZTYxNmRhM2Yz
MTAxNTEzNDBmMjYyY2QyNDM2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCkBA
IC00MiwzMyArNDIsMzMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8VGVzdEV2ZW50Q29uc3RydWN0b3IqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50
ZXJuYWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUg
c3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0RXZlbnRDb25zdHJ1Y3Rvcios
IHY4OjpJc29sYXRlKiA9IDApOworICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9yKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUq
ID0gMCk7CiAgICAgc3RhdGljIHZvaWQgZGVyZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2
b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRhU3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8
djg6Ok9iamVjdD4pOwogICAgIHN0YXRpYyBXcmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYpOwogICAgIHN0YXRpYyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhE
ZWZhdWx0V3JhcHBlckludGVybmFsRmllbGRDb3VudCArIDA7CiBwcml2YXRlOgotICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29u
c3RydWN0b3I+LCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+LCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OndyYXAoVGVzdEV2ZW50
Q29uc3RydWN0b3IqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9y
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKiBpc29sYXRlKQogewogICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBnZXRET01PYmplY3RNYXAoaXNvbGF0ZSkuZ2V0KGltcGwpOwogICAgICAgICBpZiAoIXdyYXBw
ZXIuSXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIFY4
VGVzdEV2ZW50Q29uc3RydWN0b3I6OndyYXBTbG93KGltcGwsIGlzb2xhdGUpOworICAgIHJldHVy
biBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEV2
ZW50Q29uc3RydWN0b3IqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAg
ICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKLSAgICByZXR1cm4gVjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6d3JhcChpbXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
fQotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RFdmVu
dENvbnN0cnVjdG9yID4gaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RFdmVudENvbnN0cnVjdG9y
ID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewotICAgIHJl
dHVybiB0b1Y4KGltcGwuZ2V0KCksIGlzb2xhdGUpOworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0
KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGJvb2wgZmlsbFRlc3RFdmVudENv
bnN0cnVjdG9ySW5pdChUZXN0RXZlbnRDb25zdHJ1Y3RvckluaXQmLCBjb25zdCBEaWN0aW9uYXJ5
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCAxOTQwZDdkYmRiZWE4NDIyZDdjNjNl
ODFjOGFhMTRkMzhlMjhlNDBiLi4xZTBjMmIwNjIwMzIyNTYxZmI3MjZjMmZiMDg5MzAzOWQxZDQ5
ZDI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBpdGVtQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgZ290byBmYWlsOwog
ICAgIH0KLSAgICByZXR1cm4gdG9WOChpbXAtPml0ZW0oaW5kZXgpLCBhcmdzLkdldElzb2xhdGUo
KSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT5pdGVtKGluZGV4KSwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0KICAgICBmYWlsOgogICAgIHJldHVy
biBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTE3MSw3ICsxNzEs
NyBAQCBib29sIFY4VGVzdEV2ZW50VGFyZ2V0OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdmFsdWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudFRh
cmdldDo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+IGltcGwsIHY4OjpJc29s
YXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudFRhcmdldDo6
d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0RXZlbnRUYXJnZXQ+IGltcGwsIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyOwogICAgIEZyYW1lKiBmcmFtZSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
RXZlbnRUYXJnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFdmVudFRhcmdldC5oCmluZGV4IGFmYjBkZTA0YjMzNGI3MGU2Nzg1NTE4NmU4MDQ5MmM4
MGYxMmNlZmEuLjYyNmIwMWJjZjRhY2UyYjAzODZhYjlmNjUyZjJmMzg4NmUxYzk1ZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVu
dFRhcmdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFdmVudFRhcmdldC5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RFdmVudFRhcmdldCo+KG9iamVjdC0+R2V0
UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CiAgICAg
fQotICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RFdmVu
dFRhcmdldCosIHY4OjpJc29sYXRlKiA9IDApOworICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RFdmVudFRhcmdldCosIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29s
YXRlKiA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0
aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CkBAIC01
MCwyNiArNTAsMjYgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBpbnQgZXZlbnRMaXN0ZW5l
ckNhY2hlSW5kZXggPSB2OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKICAg
ICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAxOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFdmVudFRhcmdldD4sIHY4OjpJc29s
YXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1Jl
ZlB0cjxUZXN0RXZlbnRUYXJnZXQ+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVz
dEV2ZW50VGFyZ2V0Ojp3cmFwKFRlc3RFdmVudFRhcmdldCogaW1wbCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50VGFyZ2V0Ojp3cmFwKFRl
c3RFdmVudFRhcmdldCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKGlzb2xhdGUpLmdldChpbXBsKTsKICAgICAg
ICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwot
ICAgIHJldHVybiBWOFRlc3RFdmVudFRhcmdldDo6d3JhcFNsb3coaW1wbCwgaXNvbGF0ZSk7Cisg
ICAgcmV0dXJuIFY4VGVzdEV2ZW50VGFyZ2V0Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVz
dEV2ZW50VGFyZ2V0KiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEV2ZW50VGFyZ2V0KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0Pigp
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICBy
ZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHJldHVybiBWOFRlc3RFdmVudFRh
cmdldDo6d3JhcChpbXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0RXZlbnRUYXJnZXQ6
OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLWlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXZlbnRUYXJnZXQgPiBpbXBsLCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoUGFzc1JlZlB0cjwgVGVzdEV2ZW50VGFyZ2V0ID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29u
dGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUgPSAwKQogewotICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGlzb2xh
dGUpOworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggOTM3NWNlMzEwNjM5NDQ2NDBj
NWIwZjZmNzcxYmExODA5Mzg2OTMwNS4uZGMxM2EzMGY1YjY1ODQ1MzJkMjY5MzE0Y2I2M2RmZGRj
MmRlNDNiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTEwMSw3ICsxMDEsNyBAQCBib29s
IFY4VGVzdEV4Y2VwdGlvbjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVl
KQogfQogCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0RXhjZXB0aW9uOjp3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RFeGNlcHRpb24+IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQor
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNlcHRpb246OndyYXBTbG93KFBhc3NSZWZQ
dHI8VGVzdEV4Y2VwdGlvbj4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25D
b250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXI7CiAgICAgRnJhbWUqIGZyYW1lID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uaAppbmRl
eCA4YTY5MDRmYWU0ZTA2ZTExOWFlMGE2OWI1MTU3MjRhMjk3ODEwNmRiLi42NWU2ZDAxYTE5ZThj
MzQ1Y2IyZGUxOWY2NWQxMjllZmUxNTcwOWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5oCkBAIC00MSwz
MiArNDEsMzIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8VGVzdEV4Y2VwdGlvbio+KG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKHY4
RE9NV3JhcHBlck9iamVjdEluZGV4KSk7CiAgICAgfQotICAgIGlubGluZSBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RFeGNlcHRpb24qLCB2ODo6SXNvbGF0ZSogPSAwKTsK
KyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0RXhjZXB0
aW9uKiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqID0gMCk7CiAgICAgc3RhdGljIHZvaWQgZGVy
ZWZPYmplY3Qodm9pZCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0RE9NV3JhcHBlcihET01EYXRh
U3RvcmUqLCB2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwogICAgIHN0YXRpYyBX
cmFwcGVyVHlwZUluZm8gaW5mbzsKICAgICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRD
b3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJbnRlcm5hbEZpZWxkQ291bnQgKyAwOwogcHJpdmF0ZToK
LSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRl
c3RFeGNlcHRpb24+LCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV4Y2VwdGlvbj4sIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIH07CiAKLXY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gVjhUZXN0RXhjZXB0aW9uOjp3cmFwKFRlc3RFeGNlcHRpb24qIGltcGws
IHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNl
cHRpb246OndyYXAoVGVzdEV4Y2VwdGlvbiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZ2V0RE9NT2JqZWN0TWFwKGlzb2xhdGUpLmdldChp
bXBsKTsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVy
biB3cmFwcGVyOwotICAgIHJldHVybiBWOFRlc3RFeGNlcHRpb246OndyYXBTbG93KGltcGwsIGlz
b2xhdGUpOworICAgIHJldHVybiBWOFRlc3RFeGNlcHRpb246OndyYXBTbG93KGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChUZXN0RXhjZXB0aW9uKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxp
bmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEV4Y2VwdGlvbiogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAgICAg
ICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKLSAgICByZXR1cm4gVjhUZXN0RXhj
ZXB0aW9uOjp3cmFwKGltcGwsIGlzb2xhdGUpOworICAgIHJldHVybiBWOFRlc3RFeGNlcHRpb246
OndyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLWlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXhjZXB0aW9uID4gaW1wbCwgdjg6
Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KFBhc3NSZWZQdHI8IFRlc3RFeGNlcHRpb24gPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSA9IDApCiB7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgaXNvbGF0ZSk7
CisgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRleCAwMDk4ZDVlYjBiODQ4ZDY4MTY2MWIw
MzU5ZDlhOGMzMDM1ODI4N2E5Li4yMTA4YmQ4MWZhOGRiYWE4NGU3MjBhZjMzNWQ5NTU4YTk4ZDNh
MDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcApAQCAtMTIwLDcgKzEyMCw3IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsTm9kZUF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdEludGVyZmFjZS5zdXBw
bGVtZW50YWxOb2RlLl9nZXQiKTsKICAgICBUZXN0SW50ZXJmYWNlKiBpbXAgPSBWOFRlc3RJbnRl
cmZhY2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KFRlc3RTdXBw
bGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB0b1Y4KFRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE5vZGUoaW1wKSwgdjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCkBAIC0xNjgsNyAr
MTY4LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxNZXRob2Qy
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIKICAgICBSZWZQdHI8VGVzdE9iaj4gcmVz
dWx0ID0gVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMihzY3JpcHRDb250ZXh0
LCBpbXAsIHN0ckFyZywgb2JqQXJnLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAg
ICAgZ290byBmYWlsOwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxl
PHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgfQogICAgIGZhaWw6CiAg
ICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwpAQCAtMzQ0
LDcgKzM0NCw3IEBAIEFjdGl2ZURPTU9iamVjdCogVjhUZXN0SW50ZXJmYWNlOjp0b0FjdGl2ZURP
TU9iamVjdCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjCiAgICAgcmV0dXJuIHRvTmF0aXZl
KG9iamVjdCk7CiB9ICAgICAgCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJm
YWNlOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RJbnRlcmZhY2U6OndyYXBT
bG93KFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CiAgICAgRnJhbWUqIGZyYW1lID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRl
cmZhY2UuaAppbmRleCA4OTY2M2M4MTFmNzBkMDcyZDkyMjBjYzFkZTIxNDEyNTNjNjRmYzUyLi4x
NDc2ZjhlNWQwNzhlMjU1OTg5MDNmYzdmNzQ2ZDE5YzVlMjNhYTI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFj
ZS5oCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFRlc3RJbnRlcmZhY2UqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3Rh
dGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0SW50ZXJmYWNlKiwgdjg6Oklzb2xh
dGUqID0gMCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAo
VGVzdEludGVyZmFjZSosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9
IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRp
YyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdERPTVdyYXBw
ZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKICAg
ICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CkBAIC01MiwyNiArNTIsMjYgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFtZWRQcm9wZXJ0eVNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBjb25zdCB2ODo6QWNj
ZXNzb3JJbmZvJik7CiAgICAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2
OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0SW50ZXJm
YWNlPiwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IFY4VGVzdEludGVyZmFjZTo6d3JhcChUZXN0SW50ZXJmYWNlKiBpbXBsLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJmYWNlOjp3
cmFwKFRlc3RJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IGdldEFjdGl2ZURPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1w
bCk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4g
d3JhcHBlcjsKLSAgICByZXR1cm4gVjhUZXN0SW50ZXJmYWNlOjp3cmFwU2xvdyhpbXBsLCBpc29s
YXRlKTsKKyAgICByZXR1cm4gVjhUZXN0SW50ZXJmYWNlOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoVGVzdEludGVyZmFjZSogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+
KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAg
IHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgcmV0dXJuIFY4VGVzdEludGVy
ZmFjZTo6d3JhcChpbXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0SW50ZXJmYWNlOjp3
cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9Ci1pbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdEludGVyZmFjZSA+IGltcGwsIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQ
YXNzUmVmUHRyPCBUZXN0SW50ZXJmYWNlID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4g
Y3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUgPSAwKQogewotICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGlzb2xhdGUpOwor
ICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRl
eCBhYzExNjc5OThkMDhjNzVkNDZmODc2MDE5Yzc4OWU0N2UyY2I3YTNmLi5jYTMzZmU1ZWQ2ODE3
Nzg1YmYzMmEzMmRmNDJkOGUxMDAzY2JlNGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBWOFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBp
bXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcj4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXI7CiAgICAgRnJhbWUqIGZyYW1lID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lci5oCmluZGV4IGM1MDdlZjg1ZDczN2M0YmFhOTQwZDY1ZDkyZjIyMGU0
MGNjZGFmOTUuLmE3Yjg4MWM4ZTBhMmMxOTEyZjNkNTgyZGRkZDYwYjAzYWU2Nzg4ZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaApAQCAtNDEsMzIgKzQxLDMy
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3RN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmll
bGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqLCB2
ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciosIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29s
YXRlKiA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0
aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiAgICAg
c3RhdGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50
ZXJuYWxGaWVsZENvdW50ICsgMDsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4s
IHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNs
b3coUGFzc1JlZlB0cjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4sIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIH07CiAKLXY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcChUZXN0TWVk
aWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OndyYXAoVGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7
CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKLSAgICByZXR1cm4gVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6d3JhcFNsb3co
aW1wbCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6
OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKLWlubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1w
bCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHJldHVybiBWOFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyOjp3cmFwKGltcGwsIGlzb2xhdGUpOworICAgIHJldHVybiBWOFRlc3RNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIgPiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxp
bmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRl
eHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDAp
CiB7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHRv
VjgoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVk
Q29uc3RydWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IDdhNzRmNTgyNzkyYTgxNjgxZTQyMmVj
ZGVhZDQ1YjE2NGZjYzgxNzkuLjAyMmE3Zjg4ZDg0ZGZiOGI3YzJjMTJkN2YyYjBhYjFiODNkOWFm
NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTYxLDcgKzYxLDcg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yQ29u
c3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODoKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1l
bnQgaXMgYWRkZWQgdG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUgVGVzdE5hbWVk
Q29uc3RydWN0b3IgaW5zdGFuY2UKICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5v
ZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5LgotICAg
IHRvVjgoZG9jdW1lbnQsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICB0b1Y4KGRvY3VtZW50LCBh
cmdzLkhvbGRlcigpLT5DcmVhdGlvbkNvbnRleHQoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogCiAg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CkBAIC0xNTQsNyArMTU0LDcgQEAgQWN0
aXZlRE9NT2JqZWN0KiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp0b0FjdGl2ZURPTU9iamVjdCh2
ODo6SGFuZGxlPHY4OjpPYmplY3QKICAgICByZXR1cm4gdG9OYXRpdmUob2JqZWN0KTsKIH0gICAg
ICAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1lZENvbnN0cnVjdG9yOjp3cmFw
U2xvdyhQYXNzUmVmUHRyPFRlc3ROYW1lZENvbnN0cnVjdG9yPiBpbXBsLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6
d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4gaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsK
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CiAgICAgRnJhbWUqIGZyYW1lID0g
MDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3ROYW1lZENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCmluZGV4IGUwNTYyYjllZjFjNWU1NjY1
MWM4NTJlMDE0ODE3OTQ2YmU4MTkyOTUuLjIxMTc2MzU5ZGUyZmFlNGU4MWRmYmQzNzIwYjViYzEz
MGI5MzA1ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuaApAQCAtNDcsMzMgKzQ3
LDMzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRl
c3ROYW1lZENvbnN0cnVjdG9yKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQo
djhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE5hbWVkQ29uc3RydWN0b3IqLCB2ODo6SXNvbGF0
ZSogPSAwKTsKKyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChU
ZXN0TmFtZWRDb25zdHJ1Y3RvciosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29u
dGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDApOwogICAg
IHN0YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdERP
TVdyYXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
KTsKICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiAgICAgc3RhdGljIEFjdGl2ZURP
TU9iamVjdCogdG9BY3RpdmVET01PYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CiAgICAg
c3RhdGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2OERlZmF1bHRXcmFwcGVySW50
ZXJuYWxGaWVsZENvdW50ICsgMDsKIHByaXZhdGU6Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4sIHY4OjpJ
c29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFz
c1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4sIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIH07CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6d3JhcChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1w
bCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5h
bWVkQ29uc3RydWN0b3I6OndyYXAoVGVzdE5hbWVkQ29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7
CiAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldEFjdGl2ZURPTU9i
amVjdE1hcChpc29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5
KCkpCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gVjhUZXN0TmFtZWRD
b25zdHJ1Y3Rvcjo6d3JhcFNsb3coaW1wbCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4VGVzdE5h
bWVkQ29uc3RydWN0b3I6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiB9CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0TmFtZWRDb25zdHJ1
Y3RvciogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgaWYgKCFpbXBsKQogICAgICAgICByZXR1
cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHJldHVybiBWOFRlc3ROYW1lZENvbnN0
cnVjdG9yOjp3cmFwKGltcGwsIGlzb2xhdGUpOworICAgIHJldHVybiBWOFRlc3ROYW1lZENvbnN0
cnVjdG9yOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9Ci1pbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE5hbWVkQ29uc3RydWN0
b3IgPiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE5hbWVkQ29uc3RydWN0b3IgPiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpD
b250ZXh0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7Ci0gICAgcmV0dXJuIHRvVjgo
aW1wbC5nZXQoKSwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3BwCmluZGV4IDVhYjE3N2RkZDVm
MDkxYmQzNjFhZTBhZGVlMDNhYzVlMDYyZTg1MTMuLjQ1ODM0Mjg2MDU1NDlmMTlkODY0MTNiMWY0
ZDQ1YTJhZDNjZGM1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCBib29sIFY4
VGVzdE5vZGU6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIH0KIAog
Ci12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE5vZGU6OndyYXBTbG93KFBhc3NSZWZQdHI8
VGVzdE5vZGU+IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBWOFRlc3ROb2RlOjp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3ROb2RlPiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcjsKICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PE5vZGUqPihpbXBsLmdldCgpKSkgPT0gc3RhdGlj
X2Nhc3Q8dm9pZCo+KGltcGwuZ2V0KCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5oCmluZGV4IDQwYmRkM2E5ZDRiZmM2ZTkz
ZTQ0MzdkNzE0ODBmYmVkMmM0MWE0MDUuLjVkNGI5YzUzZjJiNTRiZWI2NmM3Zjg5NmJlMDE4Nzcw
NjEzZmU0ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3ROb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE5vZGUuaApAQCAtNDEsMzMgKzQxLDMzIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRlc3ROb2RlKj4ob2JqZWN0LT5HZXRQb2lu
dGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2JqZWN0SW5kZXgpKTsKICAgICB9Ci0g
ICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE5vZGUqLCB2
ODo6SXNvbGF0ZSogPSAwKTsKKyAgICBpbmxpbmUgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcChUZXN0Tm9kZSosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4
dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0
YXRpYyB2b2lkIGRlcmVmT2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdERPTVdy
YXBwZXIoRE9NRGF0YVN0b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsK
ICAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGluZm87CiAgICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmKTsKICAg
ICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsRmllbGRDb3VudCA9IHY4RGVmYXVsdFdyYXBwZXJJ
bnRlcm5hbEZpZWxkQ291bnQgKyAwOwogcHJpdmF0ZToKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3ROb2RlPiwgdjg6Oklzb2xhdGUqKTsK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRl
c3ROb2RlPiwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSopOwogfTsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROb2RlOjp3cmFwKFRl
c3ROb2RlKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhUZXN0Tm9kZTo6d3JhcChUZXN0Tm9kZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpnZXRDYWNoZWRXcmFw
cGVyKGltcGwpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIFY4VGVzdE5vZGU6OndyYXBTbG93KGltcGwsIGlz
b2xhdGUpOworICAgIHJldHVybiBWOFRlc3ROb2RlOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
VGVzdE5vZGUqIGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0Tm9kZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUgPSAwKQogewogICAgIGlmICghaW1wbCkKICAgICAgICAgcmV0dXJuIHY4TnVs
bFdpdGhDaGVjayhpc29sYXRlKTsKLSAgICByZXR1cm4gVjhUZXN0Tm9kZTo6d3JhcChpbXBsLCBp
c29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0Tm9kZTo6d3JhcChpbXBsLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwogfQotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NS
ZWZQdHI8IFRlc3ROb2RlID4gaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3ROb2RlID4gaW1wbCwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewotICAgIHJldHVybiB0b1Y4
KGltcGwuZ2V0KCksIGlzb2xhdGUpOworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggMzdkNzM5MzkzNDRm
YzdhMDA5YjcxNmU3MjNjMjczYzE3N2Y0MmFkYy4uMThkYjI3MmYxYjQ3OWRmNGJmOGM2OGRlODVh
NzhkNmM1M2E3OGQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5VGVzdE9iakF0dHJBdHRyR2V0dGVyKHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPgogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBpbXAtPnJlYWRPbmx5
VGVzdE9iakF0dHIoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3Vs
dC5nZXQoKSA/IGdldERPTU9iamVjdE1hcChpbmZvLkdldElzb2xhdGUoKSkuZ2V0KHJlc3VsdC5n
ZXQoKSkgOiB2OFVuZGVmaW5lZCgpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgewotICAg
ICAgICB3cmFwcGVyID0gdG9WOChyZXN1bHQuZ2V0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlv
bkNvbnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQogICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXROYW1lZEhpZGRlblJlZmVyZW5j
ZShpbmZvLkhvbGRlcigpLCAicmVhZE9ubHlUZXN0T2JqQXR0ciIsIHdyYXBwZXIpOwogICAgIH0K
QEAgLTIyOSw3ICsyMjksNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRlc3RPYmpB
dHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgYwogewogICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmoudGVzdE9iakF0dHIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1w
LT50ZXN0T2JqQXR0cigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1w
LT50ZXN0T2JqQXR0cigpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RPYmpBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpB
Y2Nlc3NvckluZm8mIGluZm8pCkBAIC0yNDUsNyArMjQ1LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBYTUxPYmpBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFt
ZSwgY28KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLlhNTE9iakF0dHIuX2dldCIpOwog
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgcmV0dXJuIHRvVjgoaW1wLT54bWxPYmpBdHRyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAg
ICByZXR1cm4gdG9WOChpbXAtPnhtbE9iakF0dHIoKSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4o
KSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBYTUxPYmpBdHRyQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC00MjEsNyArNDIxLDcgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0eXBlZEFycmF5QXR0ckF0dHJHZXR0ZXIodjg6Okxv
Y2FsPHY4OjpTdHJpbmc+IG5hbWUKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnR5cGVk
QXJyYXlBdHRyLl9nZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KGltcC0+dHlwZWRBcnJheUF0dHIoKSwg
aW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGltcC0+dHlwZWRBcnJheUF0dHIo
KSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBz
dGF0aWMgdm9pZCB0eXBlZEFycmF5QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQpAQCAtNTQ4LDcgKzU0OCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpMCiAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCiAgICAgICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwotICAgIHJldHVybiB0b1Y4KGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGUoc2NyaXB0Q29udGV4dCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1
cm4gdG9WOChpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENv
bnRleHQpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0clNl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFs
dWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC01NzYsNyArNTc2LDcgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNB
dHRyR2V0dGVyKHY4OjpMb2NhbDwKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywg
aW5mby5HZXRJc29sYXRlKCkpOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKLSAgICByZXR1cm4gdG9WOCh2LnJlbGVhc2UoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZv
LkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0
ZVJhaXNlc0F0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNjA3LDcg
KzYwNyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyCiAgICAgUmVmUHRyPFRlc3RPYmo+IHYg
PSBpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKHNjcmlwdENv
bnRleHQsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICByZXR1cm4gc2V0RE9N
RXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjgodi5yZWxl
YXNlKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOCh2LnJlbGVhc2UoKSwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0
aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNjM1LDcgKzYzNSw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZUF0CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29u
dGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRl
eHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0b1Y4KGltcC0+
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShzdGF0ZSwg
c2NyaXB0Q29udGV4dCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChpbXAt
PndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3RhdGUs
IHNjcmlwdENvbnRleHQpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBpbmZvLkdldElzb2xh
dGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVBdHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
QEAgLTY3MSw3ICs2NzEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYQogICAgICAgICByZXR1
cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgaWYgKHN0YXRl
LmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRp
b24oKSwgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCBp
bmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgodi5yZWxlYXNlKCksIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQg
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0
dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNzA0LDcgKzcwNCw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlw
dENvbnRleHQpCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0b1Y4
KGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNB
dHRyaWJ1dGUoc3RhdGUsIHNjcmlwdENvbnRleHQpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAg
cmV0dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlc0F0dHJpYnV0ZShzdGF0ZSwgc2NyaXB0Q29udGV4dCksIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgd2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGVBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTczMSw3ICs3MzEsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGVBdHRyR2V0dGVyKAogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxT
dGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGb3JJbnNwZWN0b3IoKSk7CiAgICAgaWYgKCFjYWxs
U3RhY2spCiAgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwotICAgIHJldHVybiB0b1Y4KGlt
cC0+d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZShjYWxsU3RhY2spLCBp
bmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0QXJndW1l
bnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKGNhbGxTdGFjayksIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgd2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQpAQCAtODI1LDcgKzgyNSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY2FjaGVkQXR0cmlidXRlMUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hCiAg
ICAgUmVmUHRyPGFueT4gcmVzdWx0ID0gaW1wLT5jYWNoZWRBdHRyaWJ1dGUxKCk7CiAgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSByZXN1bHQuZ2V0KCkgPyBnZXRET01PYmplY3RN
YXAoaW5mby5HZXRJc29sYXRlKCkpLmdldChyZXN1bHQuZ2V0KCkpIDogdjhVbmRlZmluZWQoKTsK
ICAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHsKLSAgICAgICAgd3JhcHBlciA9IHRvVjgocmVz
dWx0LmdldCgpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJl
c3VsdC5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKICAgICAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIFY4
RE9NV3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2UoaW5mby5Ib2xkZXIoKSwgImNhY2hl
ZEF0dHJpYnV0ZTEiLCB3cmFwcGVyKTsKICAgICB9CkBAIC04MzksNyArODM5LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjYWNoZWRBdHRyaWJ1dGUyQXR0ckdldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmEKICAgICBSZWZQdHI8YW55PiByZXN1bHQgPSBpbXAtPmNhY2hlZEF0
dHJpYnV0ZTIoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3VsdC5n
ZXQoKSA/IGdldERPTU9iamVjdE1hcChpbmZvLkdldElzb2xhdGUoKSkuZ2V0KHJlc3VsdC5nZXQo
KSkgOiB2OFVuZGVmaW5lZCgpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgewotICAgICAg
ICB3cmFwcGVyID0gdG9WOChyZXN1bHQuZ2V0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICAg
ICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQogICAgICAgICAgICAgVjhET01XcmFwcGVyOjpzZXROYW1lZEhpZGRlblJlZmVyZW5jZShp
bmZvLkhvbGRlcigpLCAiY2FjaGVkQXR0cmlidXRlMiIsIHdyYXBwZXIpOwogICAgIH0KQEAgLTk0
OSwxNCArOTQ5LDE0IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udGVudERvY3Vt
ZW50QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtCiAgICAgaWYgKCFCaW5kaW5n
U2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2Uo
KSwgaW1wLT5jb250ZW50RG9jdW1lbnQoKSkpCiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4odjg6Ok51bGwoaW5mby5HZXRJc29sYXRlKCkpKTsKIAotICAgIHJldHVybiB0b1Y4
KGltcC0+Y29udGVudERvY3VtZW50KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4g
dG9WOChpbXAtPmNvbnRlbnREb2N1bWVudCgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBp
bmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbXV0
YWJsZVBvaW50QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm11dGFi
bGVQb2ludC5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cihTVkdTdGF0aWNQcm9w
ZXJ0eVRlYXJPZmY8VGVzdE9iaiwgRmxvYXRQb2ludD46OmNyZWF0ZShpbXAsIGltcC0+bXV0YWJs
ZVBvaW50KCksICZUZXN0T2JqOjp1cGRhdGVNdXRhYmxlUG9pbnQpKSwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKFNWR1N0YXRpY1Byb3BlcnR5VGVhck9m
ZjxUZXN0T2JqLCBGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcCwgaW1wLT5tdXRhYmxlUG9pbnQoKSwg
JlRlc3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpLCBpbmZvLkhvbGRlcigpLT5DcmVhdGlvbkNv
bnRleHQoKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiBzdGF0aWMgdm9pZCBtdXRhYmxlUG9p
bnRBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZh
bHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTk3Miw3ICs5NzIs
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGltbXV0YWJsZVBvaW50QXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
YmouaW1tdXRhYmxlUG9pbnQuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoU1ZH
UHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLT5pbW11dGFibGVQb2ludCgp
KSksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cihTVkdQ
cm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0ZShpbXAtPmltbXV0YWJsZVBvaW50KCkp
KSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsK
IH0KIAogc3RhdGljIHZvaWQgaW1tdXRhYmxlUG9pbnRBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKQEAgLTExMTEsNyArMTExMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gb2JqTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm9iak1ldGhvZCIpOwogICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgo
aW1wLT5vYmpNZXRob2QoKSwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KGlt
cC0+b2JqTWV0aG9kKCksIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmpNZXRob2RXaXRoQXJn
c0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMTIzLDcgKzExMjMsNyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iak1ldGhvZFdpdGhBcmdzQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAgIEVYQ0VQVElPTl9CTE9DSyhsb25nIGxvbmcs
IEFyZywgdG9JbnQ2NChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNV
bmRlZmluZWQpKSk7CiAgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhW
OFBhcmFtZXRlcjw+LCBzdHJBcmcsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpOwogICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgb2JqQXJn
LCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIs
IERlZmF1bHRJc1VuZGVmaW5lZCkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDIsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpKSA6IDApOwotICAgIHJldHVybiB0b1Y4KGltcC0+b2JqTWV0aG9kV2l0aEFy
Z3MoQXJnLCBzdHJBcmcsIG9iakFyZyksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4g
dG9WOChpbXAtPm9iak1ldGhvZFdpdGhBcmdzKEFyZywgc3RyQXJnLCBvYmpBcmcpLCB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aFNlcXVlbmNlQXJnQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKQEAgLTExNjAsNyArMTE2MCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0NhbGxiYWNrKGNv
bnN0IHY4CiAgICAgUmVmUHRyPFRlc3RPYmo+IHJlc3VsdCA9IGltcC0+bWV0aG9kVGhhdFJlcXVp
cmVzQWxsQXJnc0FuZFRocm93cyhzdHJBcmcsIG9iakFyZywgZWMpOwogICAgIGlmIChVTkxJS0VM
WShlYykpCiAgICAgICAgIGdvdG8gZmFpbDsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFz
ZSgpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2Uo
KSwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0K
ICAgICBmYWlsOgogICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKQEAgLTEyNjcsNyArMTI2Nyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2l0aFNjcmlwdFN0YXRlT2JqQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiAgICAg
UmVmUHRyPFRlc3RPYmo+IHJlc3VsdCA9IGltcC0+d2l0aFNjcmlwdFN0YXRlT2JqKCZzdGF0ZSk7
CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihzdGF0ZS5leGNlcHRpb24oKSwgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4
KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChy
ZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xh
dGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRl
Vm9pZEV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMzAw
LDcgKzEzMDAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0
ZU9iakV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bQogICAgICAgICBnb3RvIGZhaWw7
CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihzdGF0ZS5leGNlcHRpb24oKSwgYXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4
KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChy
ZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xh
dGUoKSk7CiAgICAgfQogICAgIGZhaWw6CiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywg
YXJncy5HZXRJc29sYXRlKCkpOwpAQCAtMTM0Niw3ICsxMzQ2LDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2Jq
RXhjZXB0aW8KICAgICAgICAgZ290byBmYWlsOwogICAgIGlmIChzdGF0ZS5oYWRFeGNlcHRpb24o
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9uKCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCBhcmdzLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgdjg6OkhhbmRsZTx2
ODo6Q29udGV4dD4oKSwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIH0KICAgICBmYWlsOgogICAg
IHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTEzNjMs
NyArMTM2Myw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNDCiAgICAgUmVmUHRyPFRlc3RPYmo+
IHJlc3VsdCA9IGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXMoJnN0YXRlLCBzY3JpcHRDb250ZXh0KTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0
aW9uKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBhcmdz
LkdldElzb2xhdGUoKSk7Ci0gICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJncy5H
ZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIHY4OjpIYW5k
bGU8djg6OkNvbnRleHQ+KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQ2FsbGJhY2so
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTE4MzMsNyArMTgzMyw3IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0U1ZHRG9jdW1lbnRDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmdzKQogICAgIFJlZlB0cjxTVkdEb2N1bWVudD4gcmVzdWx0ID0gaW1wLT5nZXRT
VkdEb2N1bWVudChlYyk7CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgZ290byBmYWls
OwotICAgIHJldHVybiB0b1Y4KHJlc3VsdC5yZWxlYXNlKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsK
KyAgICByZXR1cm4gdG9WOChyZXN1bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PigpLCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgfQogICAgIGZhaWw6CiAgICAgcmV0dXJuIHNl
dERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOwpAQCAtMTg4NywxNCArMTg4Nywx
NCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG11dGFibGVQb2ludEZ1bmN0aW9uQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
YmoubXV0YWJsZVBvaW50RnVuY3Rpb24iKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKFNW
R1Byb3BlcnR5VGVhck9mZjxGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcC0+bXV0YWJsZVBvaW50RnVu
Y3Rpb24oKSkpLCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQ
dHIoU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLT5tdXRhYmxlUG9p
bnRGdW5jdGlvbigpKSksIGFyZ3MuSG9sZGVyKCktPkNyZWF0aW9uQ29udGV4dCgpLCBhcmdzLkdl
dElzb2xhdGUoKSk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaW1tdXRhYmxl
UG9pbnRGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5pbW11dGFibGVQb2ludEZ1bmN0aW9uIik7CiAgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICByZXR1
cm4gdG9WOChXVEY6OmdldFB0cihTVkdQcm9wZXJ0eVRlYXJPZmY8RmxvYXRQb2ludD46OmNyZWF0
ZShpbXAtPmltbXV0YWJsZVBvaW50RnVuY3Rpb24oKSkpLCBhcmdzLkdldElzb2xhdGUoKSk7Cisg
ICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+
OjpjcmVhdGUoaW1wLT5pbW11dGFibGVQb2ludEZ1bmN0aW9uKCkpKSwgYXJncy5Ib2xkZXIoKS0+
Q3JlYXRpb25Db250ZXh0KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBvcmFuZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQpAQCAtMTkxOSw3ICsxOTE5LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJp
Y3RGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgUmVmUHRy
PGJvb2w+IHJlc3VsdCA9IGltcC0+c3RyaWN0RnVuY3Rpb24oc3RyLCBhLCBiLCBlYyk7CiAgICAg
aWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgZ290byBmYWlsOwotICAgIHJldHVybiB0b1Y4KHJl
c3VsdC5yZWxlYXNlKCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOChyZXN1
bHQucmVsZWFzZSgpLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCBhcmdzLkdldElzb2xhdGUo
KSk7CiAgICAgfQogICAgIGZhaWw6CiAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJn
cy5HZXRJc29sYXRlKCkpOwpAQCAtMjMyMSw3ICsyMzIxLDcgQEAgdm9pZCBWOFRlc3RPYmo6Omlu
c3RhbGxQZXJDb250ZXh0UHJvcGVydGllcyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGluc3RhbmNl
LCBUZXMKICAgICB9CiB9CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0T2JqOjp3cmFw
U2xvdyhQYXNzUmVmUHRyPFRlc3RPYmo+IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RPYmo6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE9i
aj4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXI7CiAg
ICAgRnJhbWUqIGZyYW1lID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaAppbmRleCBiYzBlMTdiNWMxYzM3YTBkMTM1NzBkMzdh
OTliNWM2NmExYzNmYWJiLi42NmQwNGEyNzk3NmVlZjllNDVlNzM0MTkzMzIwODc3MTgwM2I0OWYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE9iai5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PFRlc3RPYmoqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJu
YWxGaWVsZCh2OERPTVdyYXBwZXJPYmplY3RJbmRleCkpOwogICAgIH0KLSAgICBpbmxpbmUgc3Rh
dGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0T2JqKiwgdjg6Oklzb2xhdGUqID0g
MCk7CisgICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE9i
aiosIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiA9IDApOwogICAgIHN0YXRpYyB2b2lkIGRlcmVm
T2JqZWN0KHZvaWQqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdERPTVdyYXBwZXIoRE9NRGF0YVN0
b3JlKiwgdm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKICAgICBzdGF0aWMgV3Jh
cHBlclR5cGVJbmZvIGluZm87CkBAIC01NCwyNiArNTQsMjYgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdCBpbnQgaW50ZXJuYWxGaWVsZENvdW50ID0gdjhEZWZhdWx0V3JhcHBlckludGVybmFs
RmllbGRDb3VudCArIDA7CiAgICAgc3RhdGljIHZvaWQgaW5zdGFsbFBlckNvbnRleHRQcm9wZXJ0
aWVzKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIFRlc3RPYmoqKTsKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0T2JqPiwg
djg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xv
dyhQYXNzUmVmUHRyPFRlc3RPYmo+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVz
dE9iajo6d3JhcChUZXN0T2JqKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5k
bGU8djg6Ok9iamVjdD4gVjhUZXN0T2JqOjp3cmFwKFRlc3RPYmoqIGltcGwsIHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAg
ICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcChp
c29sYXRlKS5nZXQoaW1wbCk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gVjhUZXN0T2JqOjp3cmFwU2xvdyhp
bXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0T2JqOjp3cmFwU2xvdyhpbXBsLCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHRvVjgoVGVzdE9iaiogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RPYmoqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2
OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgcmV0dXJuIFY4VGVzdE9iajo6d3JhcChpbXBs
LCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0T2JqOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CiB9Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFz
c1JlZlB0cjwgVGVzdE9iaiA+IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0T2JqID4gaW1wbCwg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewotICAgIHJldHVybiB0b1Y4
KGltcGwuZ2V0KCksIGlzb2xhdGUpOworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKaW5kZXggYWU4ZDE4ZDQ1Y2ZkYzVh
YzQ5YTNhZGRiYzQxZjRjZjUyYjlhZGVhZS4uZmRjNzM0NDAyYTBjNjQwYTYxNTYxNmNlOTEyZTUw
MTg3YWVlODMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5jcHAKQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHBvcnRzQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwg
Y29uc3QgdgogICAgIE1lc3NhZ2VQb3J0QXJyYXkgcG9ydHNDb3B5KCpwb3J0cyk7CiAgICAgdjg6
OkxvY2FsPHY4OjpBcnJheT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNp
emUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIHBvcnRBcnJheS0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSks
IHRvVjgocG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLkdldElzb2xhdGUoKSkpOworICAgICAgICBw
b3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkpLCB0b1Y4KHBvcnRz
Q29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKS0+Q3JlYXRpb25Db250ZXh0KCksIGluZm8uR2V0
SXNvbGF0ZSgpKSk7CiAgICAgcmV0dXJuIHBvcnRBcnJheTsKIH0KIApAQCAtMjkzLDcgKzI5Myw3
IEBAIGJvb2wgVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpIYXNJbnN0YW5j
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OndyYXBTbG93KFBhc3NSZWZQ
dHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gaW1wbCwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZTo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlcjsKICAgICBGcmFtZSogZnJhbWUgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUlu
dGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCmluZGV4IGFiZDczZTQzOGY1OWJjZTNj
ZGI5NTBjM2Q2MGE1OGNiZDE1NDIyMWQuLjJiODllMTA1NDk2MGNmMWE0ZjZmMTA5ZTY0MmIyNTJm
Nzg0NTg0YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlLmgKQEAgLTQzLDMzICs0MywzMyBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKj4ob2JqZWN0LT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQodjhET01XcmFwcGVyT2Jq
ZWN0SW5kZXgpKTsKICAgICB9Ci0gICAgaW5saW5lIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSosIHY4OjpJc29sYXRl
KiA9IDApOworICAgIGlubGluZSBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PigpLCB2ODo6SXNvbGF0
ZSogPSAwKTsKICAgICBzdGF0aWMgdm9pZCBkZXJlZk9iamVjdCh2b2lkKik7CiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRET01XcmFwcGVyKERPTURhdGFTdG9yZSosIHZvaWQqLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pik7CiAgICAgc3RhdGljIFdyYXBwZXJUeXBlSW5mbyBpbmZvOwogICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJik7CiAgICAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbEZpZWxkQ291bnQgPSB2
OERlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50ICsgMDsKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2U+LCB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKik7CiB9OwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6d3JhcChUZXN0U2VyaWFsaXplZFNjcmlwdFZh
bHVlSW50ZXJmYWNlKiBpbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6
Ok9iamVjdD4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwKFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRl
eHQ+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGdldERPTU9iamVjdE1hcChpc29sYXRlKS5n
ZXQoaW1wbCk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlOjp3cmFwU2xvdyhpbXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0U2VyaWFs
aXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogfQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUg
PSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+KCksIHY4OjpJc29sYXRlKiBpc29sYXRl
ID0gMCkKIHsKICAgICBpZiAoIWltcGwpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2so
aXNvbGF0ZSk7Ci0gICAgcmV0dXJuIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZTo6d3JhcChpbXBsLCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0U2VyaWFsaXplZFNjcmlw
dFZhbHVlSW50ZXJmYWNlOjp3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
Ci1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSA+IGltcGwsIHY4OjpJc29sYXRlKiBpc29sYXRlID0g
MCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4oKSwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUgPSAwKQogewotICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGlzb2xhdGUp
OworICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiB9CiAKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>