<?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>93093</bug_id>
          
          <creation_ts>2012-08-03 05:05:05 -0700</creation_ts>
          <short_desc>[V8] Implement v8Undefined() and use it in CodeGeneratorV8.pm</short_desc>
          <delta_ts>2012-08-03 11:21:08 -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>WebCore JavaScript</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>93095</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>686579</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-03 05:05:05 -0700</bug_when>
    <thetext>There are a couple of equivalent ways to create an undefined value, e.g. v8::Undefined(), v8::Undefined(isolate), v8::Handle&lt;v8::Value&gt;(), etc. We should implement v8Undefined() and use it everywhere.

In this bug, we implement v8Undefined() and use it in CodeGeneratorV8.pm.

We can implement v8Undefined() like this:

    v8::Handle&lt;v8::Value&gt; v8Undefined() { v8::Handle&lt;v8::Value&gt;(); }

This is based on the following performance results:

// 14.5 ns
v8::Handle&lt;v8::Value&gt; xxxAttrGetter(..., info) {
    return v8::Undefined();
}

// 8.24 ns (This cannot be used where isolate can be 0.)
v8::Handle&lt;v8::Value&gt; xxxAttrGetter(..., info) {
    return v8::Undefined(info.GetIsolate());
}

// 8.54 ns
v8::Handle&lt;v8::Value&gt; xxxAttrGetter(..., info) {
    v8::Isolate* isolate = info.GetIsolate();
    return isolate ? v8::Handle&lt;v8::Value&gt;(v8::Undefined(isolate)) : v8::Handle&lt;v8::Value&gt;();
}

// 8.52 ns
v8::Handle&lt;v8::Value&gt; xxxAttrGetter(..., info) {
    return v8::Handle&lt;v8::Value&gt;();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686581</commentid>
    <comment_count>1</comment_count>
      <attachid>156331</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-03 05:07:30 -0700</bug_when>
    <thetext>Created attachment 156331
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686977</commentid>
    <comment_count>2</comment_count>
      <attachid>156331</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 11:21:04 -0700</bug_when>
    <thetext>Comment on attachment 156331
Patch

Clearing flags on attachment: 156331

Committed r124629: &lt;http://trac.webkit.org/changeset/124629&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>686978</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-03 11:21:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156331</attachid>
            <date>2012-08-03 05:07:30 -0700</date>
            <delta_ts>2012-08-03 11:21:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93093-20120803210709.patch</filename>
            <type>text/plain</type>
            <size>80691</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0NTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzViMWVlMzFkZmVjMmVi
OWNmN2U0ODEyZWUyOTdjMDBkNGVjMzhhNy4uMDFjMDk2ZjAxZTZlMjAxYzc4ZGZjMDdlMjU1YjM0
MjEzYjU4NzdlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxMi0wOC0wMyAgS2Vu
dGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW1Y4XSBJbXBsZW1l
bnQgdjhVbmRlZmluZWQoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTMwOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGVyZSBhcmUgYSBjb3VwbGUgb2YgZXF1aXZhbGVudCB3YXlzIHRvIGNyZWF0ZSBh
biB1bmRlZmluZWQgdmFsdWUsCisgICAgICAgIGUuZy4gdjg6OlVuZGVmaW5lZCgpLCB2ODo6VW5k
ZWZpbmVkKGlzb2xhdGUpLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgZXRjLgorICAgICAgICBX
ZSBzaG91bGQgaW1wbGVtZW50IHY4VW5kZWZpbmVkKCkgYW5kIHVzZSBpdCBldmVyeXdoZXJlLgor
CisgICAgICAgIEluIHRoaXMgYnVnLCB3ZSBpbXBsZW1lbnQgdjhVbmRlZmluZWQoKSBhbmQgdXNl
IGl0IGluIENvZGVHZW5lcmF0b3JWOC5wbS4KKyAgICAgICAgV2UgY2FuIGltcGxlbWVudCB2OFVu
ZGVmaW5lZCgpIGxpa2UgdGhpczoKKworICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHY4VW5kZWZpbmVkKCkgeyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsgfQorCisgICAgICAgIFRo
aXMgaXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBwZXJmb3JtYW5jZSByZXN1bHRzOgorCisgICAg
ICAgIC8vIDE0LjUgbnMKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHh4eEF0dHJHZXR0
ZXIoLi4uLCBpbmZvKSB7CisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gOC4yNCBucyAoVGhpcyBjYW5ub3QgYmUgdXNlZCB3aGVyZSBp
c29sYXRlIGNhbiBiZSAwLikKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHh4eEF0dHJH
ZXR0ZXIoLi4uLCBpbmZvKSB7CisgICAgICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZChpbmZv
LkdldElzb2xhdGUoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyA4LjU0IG5zCisgICAgICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB4eHhBdHRyR2V0dGVyKC4uLiwgaW5mbykgeworICAgICAg
ICAgICAgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBpc29sYXRlID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpVbmRlZmluZWQo
aXNvbGF0ZSkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyA4LjUyIG5zCisgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB4eHhBdHRyR2V0dGVy
KC4uLiwgaW5mbykgeworICAgICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
OworICAgICAgICB9CisKKyAgICAgICAgTm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4K
KworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAg
ICAoR2VuZXJhdGVDb25zdHJ1Y3RvckdldHRlcik6CisgICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0
dHJHZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVOZXdGdW5jdGlvblRlbXBsYXRlKToKKyAgICAg
ICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKToKKyAgICAgICAgKEdlbmVyYXRlRnVu
Y3Rpb25DYWxsYmFjayk6CisgICAgICAgIChHZW5lcmF0ZUNhbGxXaXRoKToKKyAgICAgICAgKEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrKToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRDb25zdHJ1Y3Rv
ckNhbGxiYWNrKToKKyAgICAgICAgKEdlbmVyYXRlTm9uU3RhbmRhcmRGdW5jdGlvbik6CisgICAg
ICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4RmxvYXQ2NEFycmF5VGVtcGxhdGUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJuYWw6OmV4Y2l0
aW5nRnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0QWN0aXZlRE9NT2Jq
ZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0QWN0aXZlRE9NT2JqZWN0VjhJbnRlcm5hbDo6cG9zdE1lc3NhZ2VBdHRyR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdEFjdGl2ZURPTU9iamVjdFRlbXBsYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdEFjdGl2ZURPTU9iamVjdDo6d3JhcFNsb3cpOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0Q3VzdG9tTmFtZWRHZXR0ZXJWOEludGVybmFsOjph
bm90aGVyRnVuY3Rpb25DYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
RXZlbnRDb25zdHJ1Y3Rvcjo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RFdmVudFRhcmdldFY4SW50ZXJuYWw6OmFkZEV2ZW50TGlzdGVuZXJDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0RXZlbnRUYXJnZXRWOEludGVybmFsOjpyZW1vdmVFdmVu
dExpc3RlbmVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q29uZmlndXJlVjhUZXN0RXZl
bnRUYXJnZXRUZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0SW50ZXJmYWNlVjhJbnRl
cm5hbDo6c3VwcGxlbWVudGFsTWV0aG9kMUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RJbnRlcmZhY2VWOEludGVybmFsOjpzdXBwbGVtZW50YWxNZXRob2QyQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1ldGhv
ZDRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVWOFRlc3RJbnRlcmZhY2VU
ZW1wbGF0ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXJWOEludGVybmFsOjptZXRob2RDYWxsYmFjayk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6cmVhZE9ubHlUZXN0T2JqQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QXR0cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzQXR0ckdldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXNBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0
YXRlQXR0cmlidXRlQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlc0F0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Ondp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRl
QXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNj
cmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJHZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGVBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVy
bmFsOjpjYWNoZWRBdHRyaWJ1dGUxQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6Y2FjaGVkQXR0cmlidXRlMkF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OlRlc3RPYmpDb25zdHJ1Y3RvckdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6dm9pZE1ldGhvZENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp2b2lkTWV0aG9kV2l0aEFyZ3NDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aFNl
cXVlbmNlQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6
OnNlcmlhbGl6ZWRWYWx1ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOElu
dGVybmFsOjppZGJLZXlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6b3B0aW9uc09iamVjdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpW
OEludGVybmFsOjptZXRob2RXaXRoRXhjZXB0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6OmFkZEV2ZW50TGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6cmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp3aXRoU2NyaXB0U3RhdGVW
b2lkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhT
Y3JpcHRTdGF0ZVZvaWRFeGNlcHRpb25DYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRDYWxsYmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOElu
dGVybmFsOjp3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0
aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OndpdGhTY3JpcHRBcmd1bWVudHNB
bmRDYWxsU3RhY2tDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5h
bDo6bWV0aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhO
b25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJnc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nSXNVbmRlZmluZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNOdWxsU3RyaW5nQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RX
aXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjb25kaXRpb25h
bE1ldGhvZDJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
Y29uZGl0aW9uYWxNZXRob2QzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4
SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QxQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QzQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2Q0Q2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRN
ZXRob2Q1Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92
ZXJsb2FkZWRNZXRob2Q2Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50
ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2Q3Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVz
dE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2Q4Q2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2Q5Q2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6Om92ZXJsb2FkZWRNZXRob2QxMENhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpjbGFzc01ldGhvZENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpvdmVybG9hZGVk
TWV0aG9kMTFDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
b3ZlcmxvYWRlZE1ldGhvZDEyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4
SW50ZXJuYWw6OmNsYXNzTWV0aG9kV2l0aENsYW1wQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVNZXRo
b2QyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmVuYWJs
ZWRQZXJDb250ZXh0TWV0aG9kMUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpW
OEludGVybmFsOjplbmFibGVkUGVyQ29udGV4dE1ldGhvZDJDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDFDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDJDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDNDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDVDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6b3JhbmdlQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6Q29uZmlndXJlVjhUZXN0T2JqVGVtcGxhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhU
ZXN0T2JqOjppbnN0YWxsUGVyQ29udGV4dFByb3BlcnRpZXMpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZVY4
SW50ZXJuYWw6OmFjY2VwdFRyYW5zZmVyTGlzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2VWOEludGVybmFsOjptdWx0aVRyYW5z
ZmVyTGlzdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlY4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZTo6Y29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhCaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp2OFVuZGVmaW5lZCk6CisgICAg
ICAgIChXZWJDb3JlKToKKwogMjAxMi0wOC0wMyAgU2VyZ2lvIENhcmxvcyBNb3JhbGVzIEFuZ2Vs
ZXMgIDxjYXJsb3NjaGlsYXpvQGdtYWlsLmNvbT4KIAogICAgICAgICBEZWxldGUgdGV4dCBmcm9t
IHBhc3N3b3JkIGRvZXMgbm90aGluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggYTc5ZGU4ZDliZjhjOWQ5M2I1OTM3Zjk4
YzFmODM4Yzc2ZWFjNjNmZS4uNmYxNmZlYzhmNTM4MDY0YjJiZTk2MTVkOTUyZTAxOWY1MjA5YWI4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KQEAgLTgwNCw3ICs4MDQsNyBAQCBFTkQKICAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb25zdHJ1Y3RvckZvclR5cGUodHlwZSwgVjhXb3JrZXJDb250ZXh0Ojp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKSk7CiBFTkQKICAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsiKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsiKTsKICAg
ICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CkBAIC04NjYsNyArODY2
LDcgQEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERP
TVdyYXBwZXIoVjgke2ludGVyZmFjZU5hbWV9OjpHZXRUZW1wbGF0ZSgpLCBpbmZvLlRoaXMoKSk7
CiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiBFTkQKICAgICAgICAg
fQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CkBAIC05NDAsNyArOTQw
LDcgQEAgRU5ECiAKICAgICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJFdmVu
dExpc3RlbmVyIiAmJiAkZGF0YU5vZGUtPm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIWltcC0+ZG9jdW1lbnQoKSlcbiIpOwot
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7XG4iKTsKICAgICB9CiAKICAgICBpZiAoJHVzZUV4
Y2VwdGlvbnMpIHsKQEAgLTk5MCw3ICs5OTAsNyBAQCBFTkQKICAgICAgICAgIyBiZWVuIGNyZWF0
ZWQuIElmIHdlIGRvbid0IGZpbmQgYSB3cmFwcGVyLCB3ZSBjcmVhdGUgYm90aCBhIHdyYXBwZXIg
YW5kIGEgaGlkZGVuIHJlZmVyZW5jZS4KICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICBSZWZQdHI8JHJldHVyblR5cGU+IHJlc3VsdCA9ICR7Z2V0dGVyU3RyaW5nfTtcbiIpOwog
ICAgICAgICBteSAkZG9tTWFwRnVuY3Rpb24gPSBHZXREb21NYXBGdW5jdGlvbigkZGF0YU5vZGUs
ICRpbnRlcmZhY2VOYW1lLCAiaW5mby5HZXRJc29sYXRlKCkiKTsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3Vs
dC5nZXQoKSA/ICR7ZG9tTWFwRnVuY3Rpb259LmdldChyZXN1bHQuZ2V0KCkpIDogdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PigpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSByZXN1bHQuZ2V0KCkgPyAke2RvbU1h
cEZ1bmN0aW9ufS5nZXQocmVzdWx0LmdldCgpKSA6IHY4VW5kZWZpbmVkKCk7XG4iKTsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpIHtc
biIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICB3cmFwcGVyID0g
dG9WOChyZXN1bHQuZ2V0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOwogICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKVxuIik7
CkBAIC0xMzEyLDcgKzEzMTIsNyBAQCBzdWIgR2VuZXJhdGVOZXdGdW5jdGlvblRlbXBsYXRlCiAg
ICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OwogCiAgICAgbXkgJGNhbGxiYWNrID0gR2V0RnVuY3Rp
b25UZW1wbGF0ZUNhbGxiYWNrTmFtZSgkZnVuY3Rpb24sICRpbnRlcmZhY2VOYW1lKTsKLSAgICBy
ZXR1cm4gInY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoJGNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKSwgJHNpZ25hdHVyZSkiOworICAgIHJldHVybiAidjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldygkY2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksICRzaWduYXR1cmUpIjsKIH0KIAogc3Vi
IEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrCkBAIC0xMzM5LDcgKzEzMzksNyBAQCBFTkQK
ICAgICB9CiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwogICAgIH0KLSAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCiBF
TkQKQEAgLTE1MDEsNyArMTUwMSw3IEBAIEVORAogICAgICAgICAjIFdlIGhhdmUgbm90IGZpbmQg
cmVhbCB1c2UgY2FzZXMgeWV0LgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVO
RCk7CiAgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKEJpbmRpbmdTdGF0
ZTo6aW5zdGFuY2UoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKLSAgICAgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOworICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIEVORAog
ICAgIH0KIApAQCAtMTU2MywxNCArMTU2MywxNCBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0aAogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4g
IlNjcmlwdFN0YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRlOjpjdXJyZW50KCk7XG4iKTsKICAgICAg
ICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAuICJpZiAoIXN0YXRlKVxuIik7Ci0g
ICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiICAgIHJldHVybiIgLiAo
JHJldHVyblZvaWQgPyAiIiA6ICIgdjg6OlVuZGVmaW5lZCgpIikgLiAiO1xuIik7CisgICAgICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiICAgIHJldHVybiIgLiAoJHJldHVy
blZvaWQgPyAiIiA6ICIgdjhVbmRlZmluZWQoKSIpIC4gIjtcbiIpOwogICAgICAgICAgICAgcHVz
aChAY2FsbFdpdGhBcmdzLCAic3RhdGUiKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoJGNv
ZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCIpKSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVu
dCAuICJTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpO1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVu
dCAuICJpZiAoIXNjcmlwdENvbnRleHQpXG4iKTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAkaW5kZW50IC4gIiAgICByZXR1cm4iIC4gKCRyZXR1cm5Wb2lkID8gIiIgOiAiIHY4OjpVbmRl
ZmluZWQoKSIpIC4gIjtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQg
LiAiICAgIHJldHVybiIgLiAoJHJldHVyblZvaWQgPyAiIiA6ICIgdjhVbmRlZmluZWQoKSIpIC4g
IjtcbiIpOwogICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJzY3JpcHRDb250ZXh0Iik7CiAg
ICAgfQogICAgIGlmICgkZnVuY3Rpb24gYW5kICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJp
YnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdEFyZ3VtZW50cyIpKSB7CkBAIC0xNTgxLDcg
KzE1ODEsNyBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0aAogICAgIGlmICgkY29kZUdlbmVyYXRvci0+
RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJDYWxsU3RhY2siKSkgewogICAg
ICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiUmVmUHRyPFNjcmlwdENhbGxTdGFj
az4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zvckluc3BlY3RvcigpKTtcbiIpOwog
ICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICRpbmRlbnQgLiAiaWYgKCFjYWxsU3RhY2spXG4i
KTsKLSAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAkaW5kZW50IC4gIiAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgJGluZGVudCAu
ICIgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7XG4iKTsKICAgICAgICAgcHVzaChAY2FsbFdpdGhB
cmdzLCAiY2FsbFN0YWNrIik7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTY3JpcHRDYWxs
U3RhY2suaCIpOwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU2NyaXB0Q2FsbFN0YWNrRmFj
dG9yeS5oIik7CkBAIC0xNzIzLDcgKzE3MjMsNyBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hl
Y2sKICAgICAgICAgICAgICAgICAgICAgJHBhcmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgJG5h
dGl2ZVR5cGUgJHBhcmFtZXRlck5hbWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShh
cmdzWyRwYXJhbUluZGV4XSwgJm1lc3NhZ2VQb3J0QXJyYXkkVHJhbnNmZXJMaXN0TmFtZSwgJmFy
cmF5QnVmZmVyQXJyYXkkVHJhbnNmZXJMaXN0TmFtZSwgJHtwYXJhbWV0ZXJOYW1lfURpZFRocm93
LCBhcmdzLkdldElzb2xhdGUoKSk7XG4iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgJHBh
cmFtZXRlckNoZWNrU3RyaW5nIC49ICIgICAgaWYgKCR7cGFyYW1ldGVyTmFtZX1EaWRUaHJvdylc
biI7Ci0gICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcgLj0gIiAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTtcbiI7CisgICAgICAgICAgICAkcGFyYW1ldGVyQ2hlY2tTdHJpbmcg
Lj0gIiAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7XG4iOwogICAgICAgICB9IGVsc2lmIChU
eXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRlcikpIHsKICAgICAgICAgICAgICRwYXJhbWV0
ZXJDaGVja1N0cmluZyAuPSAiICAgICRuYXRpdmVUeXBlICRwYXJhbWV0ZXJOYW1lID0gIiAuCiAg
ICAgICAgICAgICAgICAgIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiYXJnc1skcGFyYW1J
bmRleF0iLCAiYXJncy5HZXRJc29sYXRlKCkiKSAuICI7XG4iOwpAQCAtMTg5NCw3ICsxODk0LDcg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4JHtpbXBsQ2xhc3NOYW1lfTo6Y29uc3RydWN0b3JD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+PSAyKSB7
CiAgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhEaWN0aW9uYXJ5LCBvcHRpb25zLCBhcmdzWzFdKTsK
ICAgICAgICAgaWYgKCFmaWxsJHtpbXBsQ2xhc3NOYW1lfUluaXQoZXZlbnRJbml0LCBvcHRpb25z
KSkKLSAgICAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKICAgICB9CiAKICAgICBSZWZQdHI8JHtpbXBsQ2xhc3NOYW1lfT4g
ZXZlbnQgPSAke2ltcGxDbGFzc05hbWV9OjpjcmVhdGUodHlwZSwgZXZlbnRJbml0KTsKQEAgLTIy
NjUsNyArMjI2NSw3IEBAIHN1YiBHZW5lcmF0ZU5vblN0YW5kYXJkRnVuY3Rpb24KICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIAogICAgIC8vICRjb21tZW50SW5mbwotICAgICR7
Y29uZGl0aW9uYWx9JHRlbXBsYXRlLT5TZXRBY2Nlc3Nvcih2ODo6U3RyaW5nOjpOZXcoIiRuYW1l
IiksICR7aW50ZXJmYWNlTmFtZX1WOEludGVybmFsOjoke25hbWV9QXR0ckdldHRlciwgMCwgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+KCksIHY4OjpBTExfQ0FOX1JFQUQsIHN0YXRpY19jYXN0PHY4OjpQ
cm9wZXJ0eUF0dHJpYnV0ZT4oJHByb3BlcnR5X2F0dHJpYnV0ZXMpKTsKKyAgICAke2NvbmRpdGlv
bmFsfSR0ZW1wbGF0ZS0+U2V0QWNjZXNzb3Iodjg6OlN0cmluZzo6TmV3KCIkbmFtZSIpLCAke2lu
dGVyZmFjZU5hbWV9VjhJbnRlcm5hbDo6JHtuYW1lfUF0dHJHZXR0ZXIsIDAsIHY4VW5kZWZpbmVk
KCksIHY4OjpBTExfQ0FOX1JFQUQsIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4o
JHByb3BlcnR5X2F0dHJpYnV0ZXMpKTsKIEVORAogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MjI5Niw3ICsyMjk2LDcgQEAgRU5ECiAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVH
ZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJGZ1bmN0aW9uLT5zaWduYXR1cmUp
OwogICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKSBp
ZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAKLSAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAke2Nv
bmRpdGlvbmFsfSR0ZW1wbGF0ZS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhcIiRuYW1lXCIpLCB2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCRjYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCks
ICR7c2lnbmF0dXJlfSkkcHJvcGVydHlfYXR0cmlidXRlcyk7XG4iKTsKKyAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAke2NvbmRpdGlvbmFsfSR0ZW1wbGF0ZS0+U2V0KHY4OjpTdHJpbmc6Ok5l
dyhcIiRuYW1lXCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCRjYWxsYmFjaywgdjhVbmRl
ZmluZWQoKSwgJHtzaWduYXR1cmV9KSRwcm9wZXJ0eV9hdHRyaWJ1dGVzKTtcbiIpOwogCiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIjZW5kaWYgLy8gJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlm
ICRjb25kaXRpb25hbFN0cmluZzsKIH0KQEAgLTI5MDgsOSArMjkwOCw5IEBAIEVORAogCiAgICAg
Ly8gRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb24gdGhlIGluc3Rh
bmNlIGluc3RlYWQKICAgICAvLyBvZiBvbiB0aGUgcHJvdG90eXBlIG9iamVjdCB0byBlbnN1cmUg
dGhhdCB0aGV5IGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4KLSAgICBpbnN0YW5jZS0+U2V0QWNjZXNz
b3Iodjg6OlN0cmluZzo6TmV3KCJyZWxvYWQiKSwgVjhMb2NhdGlvbjo6cmVsb2FkQWNjZXNzb3JH
ZXR0ZXIsIDAsIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6QUxMX0NBTl9SRUFELCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpEb250RGVsZXRlIHwgdjg6OlJlYWRP
bmx5KSk7Ci0gICAgaW5zdGFuY2UtPlNldEFjY2Vzc29yKHY4OjpTdHJpbmc6Ok5ldygicmVwbGFj
ZSIpLCBWOExvY2F0aW9uOjpyZXBsYWNlQWNjZXNzb3JHZXR0ZXIsIDAsIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpLCB2ODo6QUxMX0NBTl9SRUFELCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpEb250RGVsZXRlIHwgdjg6OlJlYWRPbmx5KSk7Ci0gICAgaW5zdGFuY2UtPlNl
dEFjY2Vzc29yKHY4OjpTdHJpbmc6Ok5ldygiYXNzaWduIiksIFY4TG9jYXRpb246OmFzc2lnbkFj
Y2Vzc29yR2V0dGVyLCAwLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OkFMTF9DQU5fUkVB
RCwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6RG9udERlbGV0ZSB8IHY4
OjpSZWFkT25seSkpOworICAgIGluc3RhbmNlLT5TZXRBY2Nlc3Nvcih2ODo6U3RyaW5nOjpOZXco
InJlbG9hZCIpLCBWOExvY2F0aW9uOjpyZWxvYWRBY2Nlc3NvckdldHRlciwgMCwgdjhVbmRlZmlu
ZWQoKSwgdjg6OkFMTF9DQU5fUkVBRCwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRl
Pih2ODo6RG9udERlbGV0ZSB8IHY4OjpSZWFkT25seSkpOworICAgIGluc3RhbmNlLT5TZXRBY2Nl
c3Nvcih2ODo6U3RyaW5nOjpOZXcoInJlcGxhY2UiKSwgVjhMb2NhdGlvbjo6cmVwbGFjZUFjY2Vz
c29yR2V0dGVyLCAwLCB2OFVuZGVmaW5lZCgpLCB2ODo6QUxMX0NBTl9SRUFELCBzdGF0aWNfY2Fz
dDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpEb250RGVsZXRlIHwgdjg6OlJlYWRPbmx5KSk7
CisgICAgaW5zdGFuY2UtPlNldEFjY2Vzc29yKHY4OjpTdHJpbmc6Ok5ldygiYXNzaWduIiksIFY4
TG9jYXRpb246OmFzc2lnbkFjY2Vzc29yR2V0dGVyLCAwLCB2OFVuZGVmaW5lZCgpLCB2ODo6QUxM
X0NBTl9SRUFELCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpEb250RGVs
ZXRlIHwgdjg6OlJlYWRPbmx5KSk7CiBFTkQKICAgICB9CiAKQEAgLTI5OTcsNyArMjk5Nyw3IEBA
IEVORAogICAgICAgICAgICAgICAgIG15ICRuYW1lID0gJHJ1bnRpbWVGdW5jLT5zaWduYXR1cmUt
Pm5hbWU7CiAgICAgICAgICAgICAgICAgbXkgJGNhbGxiYWNrID0gR2V0RnVuY3Rpb25UZW1wbGF0
ZUNhbGxiYWNrTmFtZSgkcnVudGltZUZ1bmMsICRpbnRlcmZhY2VOYW1lKTsKICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwotICAgICAgICBwcm90by0+U2V0KHY4OjpT
dHJpbmc6Ok5ldygiJHtuYW1lfSIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCR7Y2FsbGJh
Y2t9LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgZGVmYXVsdFNpZ25hdHVyZSktPkdldEZ1bmN0
aW9uKCkpOworICAgICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiJHtuYW1lfSIpLCB2
ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCR7Y2FsbGJhY2t9LCB2OFVuZGVmaW5lZCgpLCBkZWZh
dWx0U2lnbmF0dXJlKS0+R2V0RnVuY3Rpb24oKSk7CiBFTkQKICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiNlbmRpZiAvLyAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFs
U3RyaW5nOwpAQCAtMzk1Myw3ICszOTUzLDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIG15
ICR0eXBlID0gR2V0VHlwZUZyb21TaWduYXR1cmUoJHNpZ25hdHVyZSk7CiAKICAgICByZXR1cm4g
KCRnZXRJc29sYXRlID8gInY4Qm9vbGVhbigkdmFsdWUsICRnZXRJc29sYXRlKSIgOiAidjhCb29s
ZWFuKCR2YWx1ZSkiKSBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7Ci0gICAgcmV0dXJuICJ2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKSIgaWYgJHR5cGUgZXEgInZvaWQiOyAgICAgIyBlcXVpdmFsZW50IHRv
IHY4OjpVbmRlZmluZWQoKQorICAgIHJldHVybiAidjhVbmRlZmluZWQoKSIgaWYgJHR5cGUgZXEg
InZvaWQiOyAgICAgIyBlcXVpdmFsZW50IHRvIHY4VW5kZWZpbmVkKCkKIAogICAgICMgSFRNTDUg
c2F5cyB0aGF0IHVuc2lnbmVkIHJlZmxlY3RlZCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBpbiB0aGUg
cmFuZ2UKICAgICAjIFswLCAyXjMxKS4gV2hlbiBhIHZhbHVlIGlzbid0IGluIHRoaXMgcmFuZ2Us
IGEgZGVmYXVsdCB2YWx1ZSAob3IgMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCmluZGV4IDUyYmM5MzM4
MjM1NzIyNTc0NTBhMmViNDA5ZWNhOWU4NWRiMGQ0MzcuLjU2MTgxMzViYWNlNGRiYzY5NTE0Y2Qy
MWEwNzc5YzBlOTY5ZTAxNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcApAQCAtODEsNyArODEsNyBA
QCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4
RmxvYXQ2NEFycmF5VGVtcGxhdGUodjg6OgogICAgIGNvbnN0IGludCBmb29BcmdjID0gMTsKICAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmb29Bcmd2W2Zvb0FyZ2NdID0geyBW
OEZsb2F0MzJBcnJheTo6R2V0UmF3VGVtcGxhdGUoKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNp
Z25hdHVyZT4gZm9vU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGZvb0FyZ2Ms
IGZvb0FyZ3YpOwotICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJmb28iKSwgdjg6OkZ1
bmN0aW9uVGVtcGxhdGU6Ok5ldyhGbG9hdDY0QXJyYXlWOEludGVybmFsOjpmb29DYWxsYmFjaywg
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGZvb1NpZ25hdHVyZSkpOworICAgIHByb3RvLT5TZXQo
djg6OlN0cmluZzo6TmV3KCJmb28iKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhGbG9hdDY0
QXJyYXlWOEludGVybmFsOjpmb29DYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgZm9vU2lnbmF0dXJl
KSk7CiAKICAgICAvLyBDdXN0b20gdG9TdHJpbmcgdGVtcGxhdGUKICAgICBkZXNjLT5TZXQoZ2V0
VG9TdHJpbmdOYW1lKCksIGdldFRvU3RyaW5nVGVtcGxhdGUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3Rp
dmVET01PYmplY3QuY3BwCmluZGV4IGYyMzJiM2M1OGQ4NmMxOGRmM2I3YjdmMTFhODE0MjMzODcw
MjZjOTcuLjg3MGQ5OTZkMTI2YzA5ODIwNzI3MjAxYTg3OTI3YjNmY2UzMzI1YTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVE
T01PYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwCkBAIC01NSwxMCArNTUsMTAgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBleGNpdGluZ0Z1bmN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKICAgICAgICAgcmV0dXJuIFY4UHJveHk6OnRocm93Tm90RW5vdWdoQXJn
dW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFRlc3RBY3RpdmVET01PYmplY3Qq
IGltcCA9IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAg
ICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OmNhbkFjY2Vzc0ZyYW1lKEJpbmRpbmdTdGF0ZTo6aW5z
dGFuY2UoKSwgaW1wLT5mcmFtZSgpLCB0cnVlKSkKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOworICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICBFWENFUFRJ
T05fQkxPQ0soTm9kZSosIG5leHRDaGlsZCwgVjhOb2RlOjpIYXNJbnN0YW5jZShNQVlCRV9NSVNT
SU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSA/IFY4Tm9kZTo6dG9O
YXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRF
UihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKICAgICBpbXAtPmV4Y2l0aW5n
RnVuY3Rpb24obmV4dENoaWxkKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gcG9zdE1lc3NhZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAt
NjksMTMgKzY5LDEzIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9zdE1lc3NhZ2VD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIFRlc3RBY3RpdmVET01PYmpl
Y3QqIGltcCA9IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7
CiAgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+
LCBtZXNzYWdlLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpKTsKICAgICBpbXAtPnBvc3RNZXNzYWdlKG1lc3NhZ2UpOwotICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3N0TWVzc2FnZUF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdEFjdGl2ZURPTU9iamVjdC5wb3N0TWVzc2FnZS5fZ2V0Iik7Ci0g
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVt
cGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVu
Y3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RBY3RpdmVET01PYmplY3RWOEludGVybmFsOjpwb3N0TWVz
c2FnZUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3
KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUoKSkpKTsKKyAgICBzdGF0aWMg
djg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZhdGVUZW1wbGF0ZSA9IHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBs
YXRlOjpOZXcoVGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJuYWw6OnBvc3RNZXNzYWdlQ2FsbGJh
Y2ssIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOFRlc3RBY3RpdmVET01PYmpl
Y3Q6OkdldFJhd1RlbXBsYXRlKCkpKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhUZXN0QWN0aXZlRE9NT2JqZWN0
OjpHZXRUZW1wbGF0ZSgpLCBpbmZvLlRoaXMoKSk7CiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkp
IHsKICAgICAgICAgLy8gY2FuIG9ubHkgcmVhY2ggaGVyZSBieSAnb2JqZWN0Ll9fcHJvdG9fXy5m
dW5jJywgYW5kIGl0IHNob3VsZCBwYXNzZWQKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBwb3N0TWVzc2FnZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+IG5hbWUsIGMKICAgICB9CiAgICAgVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wID0gVjhUZXN0
QWN0aXZlRE9NT2JqZWN0Ojp0b05hdGl2ZShob2xkZXIpOwogICAgIGlmICghQmluZGluZ1NlY3Vy
aXR5OjpjYW5BY2Nlc3NGcmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCksIGltcC0+ZnJhbWUo
KSwgZmFsc2UpKSB7Ci0gICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RBY3RpdmVET01PYmplY3RW
OEludGVybmFsOjpwb3N0TWVzc2FnZUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwg
djg6OlNpZ25hdHVyZTo6TmV3KFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6R2V0UmF3VGVtcGxhdGUo
KSkpKTsKKyAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6
TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdEFjdGl2ZURPTU9iamVjdFY4SW50ZXJu
YWw6OnBvc3RNZXNzYWdlQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4OjpTaWduYXR1cmU6Ok5l
dyhWOFRlc3RBY3RpdmVET01PYmplY3Q6OkdldFJhd1RlbXBsYXRlKCkpKSk7CiAgICAgICAgIHJl
dHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIHBy
aXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKQEAgLTExNiwxMCArMTE2LDEwIEBAIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0QWN0
aXZlRE9NT2JqZWN0VGVtcGxhCiAgICAgY29uc3QgaW50IGV4Y2l0aW5nRnVuY3Rpb25BcmdjID0g
MTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBleGNpdGluZ0Z1bmN0aW9u
QXJndltleGNpdGluZ0Z1bmN0aW9uQXJnY10gPSB7IFY4Tm9kZTo6R2V0UmF3VGVtcGxhdGUoKSB9
OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gZXhjaXRpbmdGdW5jdGlvblNpZ25hdHVy
ZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBleGNpdGluZ0Z1bmN0aW9uQXJnYywgZXhjaXRp
bmdGdW5jdGlvbkFyZ3YpOwotICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJleGNpdGlu
Z0Z1bmN0aW9uIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdEFjdGl2ZURPTU9iamVj
dFY4SW50ZXJuYWw6OmV4Y2l0aW5nRnVuY3Rpb25DYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCksIGV4Y2l0aW5nRnVuY3Rpb25TaWduYXR1cmUpKTsKKyAgICBwcm90by0+U2V0KHY4OjpT
dHJpbmc6Ok5ldygiZXhjaXRpbmdGdW5jdGlvbiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3
KFRlc3RBY3RpdmVET01PYmplY3RWOEludGVybmFsOjpleGNpdGluZ0Z1bmN0aW9uQ2FsbGJhY2ss
IHY4VW5kZWZpbmVkKCksIGV4Y2l0aW5nRnVuY3Rpb25TaWduYXR1cmUpKTsKIAogICAgIC8vIEZ1
bmN0aW9uICdwb3N0TWVzc2FnZScgKEV4dEF0dHI6ICdEb05vdENoZWNrU2VjdXJpdHknKQotICAg
IHByb3RvLT5TZXRBY2Nlc3Nvcih2ODo6U3RyaW5nOjpOZXcoInBvc3RNZXNzYWdlIiksIFRlc3RB
Y3RpdmVET01PYmplY3RWOEludGVybmFsOjpwb3N0TWVzc2FnZUF0dHJHZXR0ZXIsIDAsIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpLCB2ODo6QUxMX0NBTl9SRUFELCBzdGF0aWNfY2FzdDx2ODo6UHJv
cGVydHlBdHRyaWJ1dGU+KHY4OjpEb250RGVsZXRlIHwgdjg6OlJlYWRPbmx5KSk7CisgICAgcHJv
dG8tPlNldEFjY2Vzc29yKHY4OjpTdHJpbmc6Ok5ldygicG9zdE1lc3NhZ2UiKSwgVGVzdEFjdGl2
ZURPTU9iamVjdFY4SW50ZXJuYWw6OnBvc3RNZXNzYWdlQXR0ckdldHRlciwgMCwgdjhVbmRlZmlu
ZWQoKSwgdjg6OkFMTF9DQU5fUkVBRCwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRl
Pih2ODo6RG9udERlbGV0ZSB8IHY4OjpSZWFkT25seSkpOwogCiAgICAgLy8gQ3VzdG9tIHRvU3Ry
aW5nIHRlbXBsYXRlCiAgICAgZGVzYy0+U2V0KGdldFRvU3RyaW5nTmFtZSgpLCBnZXRUb1N0cmlu
Z1RlbXBsYXRlKCkpOwpAQCAtMTY1LDcgKzE2NSw2IEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01P
CiAgICAgVjhQcm94eSogcHJveHkgPSAwOwogICAgIGlmIChpbXBsLT5mcmFtZSgpKSB7CiAgICAg
ICAgIHByb3h5ID0gaW1wbC0+ZnJhbWUoKS0+c2NyaXB0KCktPnByb3h5KCk7Ci0gICAgICAgIGZy
YW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwogICAg
ICAgICBwcm94eS0+d2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKaW5kZXggM2I3ZTg0MjIxNTQ1
MDVkYjZiNzVlZTJmYTRkNDQ0NTZlMmY1YmI0MS4uYWZhZTVjN2M5N2NkYzU0ZGMyYmJiYzc0ODhm
ODk5ZmZjZjc5NDVmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBA
IC00OCw3ICs0OCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYW5vdGhlckZ1bmN0
aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBUZXN0Q3VzdG9tTmFt
ZWRHZXR0ZXIqIGltcCA9IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFy
YW1ldGVyPD4sIHN0ciwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElz
VW5kZWZpbmVkKSk7CiAgICAgaW1wLT5hbm90aGVyRnVuY3Rpb24oc3RyKTsKLSAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFRlc3RDdXN0b21OYW1lZEdldHRlclY4SW50ZXJuYWwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENv
bnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcAppbmRleCA5OWE4MGM4NGMzYmYyYmE4YzY2ZjEzMjI1
MzQxNzEyMDViMzYwNDdjLi4yMTA3MzUwMWZkMGJhMjJlZGNkYzVjNWEzYmNhMzMzY2FkOGQzOWNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCkBAIC04MSw3ICs4MSw3IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpjb25zdHJ1Y3Rv
ckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPj0gMikgewog
ICAgICAgICBFWENFUFRJT05fQkxPQ0soRGljdGlvbmFyeSwgb3B0aW9ucywgYXJnc1sxXSk7CiAg
ICAgICAgIGlmICghZmlsbFRlc3RFdmVudENvbnN0cnVjdG9ySW5pdChldmVudEluaXQsIG9wdGlv
bnMpKQotICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIHJl
dHVybiB2OFVuZGVmaW5lZCgpOwogICAgIH0KIAogICAgIFJlZlB0cjxUZXN0RXZlbnRDb25zdHJ1
Y3Rvcj4gZXZlbnQgPSBUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlKHR5cGUsIGV2ZW50SW5p
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRUYXJnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAppbmRleCBkZWM2OWU5NjI0ZTE2NTZhYzllOWY2
Yzc5YjA4YWUzOGQ1MDY4YTI4Li5lY2JjOTczNzI0ODc0YTM5OWY2MzZiNjQzNDM5NGEwMGY0MjUx
ZDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0RXZlbnRUYXJnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhZGRFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKICAgICAgICAgVjhUZXN0RXZlbnRUYXJnZXQ6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpLT5hZGRFdmVudExpc3RlbmVyKHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJp
bmcoYXJnc1swXSksIGxpc3RlbmVyLCBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKSk7CiAgICAgICAg
IGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhUZXN0RXZl
bnRUYXJnZXQ6OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKICAgICB9Ci0gICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiByZW1vdmVFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYgYXJncykKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiByZW1vdmVFdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXIKICAgICAgICAgVjhUZXN0RXZlbnRUYXJnZXQ6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpLT5y
ZW1vdmVFdmVudExpc3RlbmVyKHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJnc1swXSks
IGxpc3RlbmVyLmdldCgpLCBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKSk7CiAgICAgICAgIHJlbW92
ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhUZXN0RXZlbnRUYXJn
ZXQ6OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKICAgICB9Ci0gICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBkaXNwYXRjaEV2ZW50Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKQEAgLTEzMiw3ICsxMzIsNyBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdEV2ZW50VGFyZ2V0VGVtcGxhdGUodgogICAgIGNv
bnN0IGludCBkaXNwYXRjaEV2ZW50QXJnYyA9IDE7CiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gZGlzcGF0Y2hFdmVudEFyZ3ZbZGlzcGF0Y2hFdmVudEFyZ2NdID0geyBWOEV2
ZW50OjpHZXRSYXdUZW1wbGF0ZSgpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBk
aXNwYXRjaEV2ZW50U2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGRpc3BhdGNo
RXZlbnRBcmdjLCBkaXNwYXRjaEV2ZW50QXJndik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5n
OjpOZXcoImRpc3BhdGNoRXZlbnQiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0RXZl
bnRUYXJnZXRWOEludGVybmFsOjpkaXNwYXRjaEV2ZW50Q2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpLCBkaXNwYXRjaEV2ZW50U2lnbmF0dXJlKSk7CisgICAgcHJvdG8tPlNldCh2ODo6
U3RyaW5nOjpOZXcoImRpc3BhdGNoRXZlbnQiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhU
ZXN0RXZlbnRUYXJnZXRWOEludGVybmFsOjpkaXNwYXRjaEV2ZW50Q2FsbGJhY2ssIHY4VW5kZWZp
bmVkKCksIGRpc3BhdGNoRXZlbnRTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSB0b1N0cmlu
ZyB0ZW1wbGF0ZQogICAgIGRlc2MtPlNldChnZXRUb1N0cmluZ05hbWUoKSwgZ2V0VG9TdHJpbmdU
ZW1wbGF0ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggNDMyMDAxZGRlYmI2MTk2NDBl
NmM0OWQwZTVmYjA0YjM3MzAzODNlZS4uMzhhMDlhNzg2NmQ2ZmFmNjFiMzYxZGJkYTM5N2M1ODAz
ZGMzYTQxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTE0Niw3ICsxNDYsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbE1ldGhvZDFDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcgogICAgIElOQ19TVEFUUygiRE9NLlRlc3RJbnRlcmZhY2Uuc3Vw
cGxlbWVudGFsTWV0aG9kMSIpOwogICAgIFRlc3RJbnRlcmZhY2UqIGltcCA9IFY4VGVzdEludGVy
ZmFjZTo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgVGVzdFN1cHBsZW1lbnRhbDo6c3Vw
cGxlbWVudGFsTWV0aG9kMShpbXApOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
KTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25k
aXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQpAQCAtMTY1LDcgKzE2NSw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3VwcGxlbWVudGFsTWV0aG9kMkNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyCiAgICAgRVhDRVBUSU9OX0JMT0NLKFRlc3RPYmoqLCBvYmpBcmcs
IFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwg
RGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElz
VW5kZWZpbmVkKSkpIDogMCk7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29u
dGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRl
eHQpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwogICAgIFJlZlB0cjxUZXN0T2JqPiByZXN1bHQgPSBUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxNZXRob2QyKHNjcmlwdENvbnRleHQsIGltcCwgc3RyQXJnLCBvYmpBcmcs
IGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC0xODMs
NyArMTgzLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdXBwbGVtZW50YWxNZXRo
b2Q0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXIKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0SW50ZXJmYWNlLnN1cHBsZW1lbnRhbE1ldGhvZDQiKTsKICAgICBUZXN0U3VwcGxlbWVu
dGFsOjpzdXBwbGVtZW50YWxNZXRob2Q0KCk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOworICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxF
KENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCkBAIC0yOTYsMTAgKzI5NiwxMCBA
QCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4
VGVzdEludGVyZmFjZVRlbXBsYXRlKHY4OgogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHN1cHBsZW1lbnRhbE1ldGhvZDJBcmd2W3N1cHBsZW1lbnRhbE1ldGhvZDJBcmdjXSA9
IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0T2JqOjpHZXRSYXdU
ZW1wbGF0ZSgpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBzdXBwbGVtZW50YWxN
ZXRob2QyU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIHN1cHBsZW1lbnRhbE1l
dGhvZDJBcmdjLCBzdXBwbGVtZW50YWxNZXRob2QyQXJndik7CiAjaWYgRU5BQkxFKENvbmRpdGlv
bjExKSB8fCBFTkFCTEUoQ29uZGl0aW9uMTIpCi0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpO
ZXcoInN1cHBsZW1lbnRhbE1ldGhvZDIiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0
SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsTWV0aG9kMkNhbGxiYWNrLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKSwgc3VwcGxlbWVudGFsTWV0aG9kMlNpZ25hdHVyZSkpOworICAgIHBy
b3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJzdXBwbGVtZW50YWxNZXRob2QyIiksIHY4OjpGdW5j
dGlvblRlbXBsYXRlOjpOZXcoVGVzdEludGVyZmFjZVY4SW50ZXJuYWw6OnN1cHBsZW1lbnRhbE1l
dGhvZDJDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgc3VwcGxlbWVudGFsTWV0aG9kMlNpZ25hdHVy
ZSkpOwogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEy
KQogI2lmIEVOQUJMRShDb25kaXRpb24xMSkgfHwgRU5BQkxFKENvbmRpdGlvbjEyKQotICAgIGRl
c2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoInN1cHBsZW1lbnRhbE1ldGhvZDQiKSwgdjg6OkZ1bmN0
aW9uVGVtcGxhdGU6Ok5ldyhUZXN0SW50ZXJmYWNlVjhJbnRlcm5hbDo6c3VwcGxlbWVudGFsTWV0
aG9kNENhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OkxvY2FsPHY4OjpTaWdu
YXR1cmU+KCkpKTsKKyAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3KCJzdXBwbGVtZW50YWxN
ZXRob2Q0IiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdEludGVyZmFjZVY4SW50ZXJu
YWw6OnN1cHBsZW1lbnRhbE1ldGhvZDRDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgdjg6OkxvY2Fs
PHY4OjpTaWduYXR1cmU+KCkpKTsKICNlbmRpZiAvLyBFTkFCTEUoQ29uZGl0aW9uMTEpIHx8IEVO
QUJMRShDb25kaXRpb24xMikKICAgICBiYXRjaENvbmZpZ3VyZUNvbnN0YW50cyhkZXNjLCBwcm90
bywgVGVzdEludGVyZmFjZUNvbnN0cywgV1RGX0FSUkFZX0xFTkdUSChUZXN0SW50ZXJmYWNlQ29u
c3RzKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApp
bmRleCAzN2IyMWQ4MDFlNTRlYmE2YjhiYjY2ZThlYTM2NTg3ODU5NGZiMjM1Li5lMTJkM2MzYTli
ZWU5YWQwOGYxMDA3NTA4NjgyNDU1MzEzY2FlMWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gbWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
ICAgICBUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wID0gVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcjo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRVhDRVBUSU9OX0JMT0NL
KFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiwgbGlzdGVuZXIsIE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI6OmNyZWF0ZShNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0
SXNVbmRlZmluZWQpKSk7CiAgICAgaW1wLT5tZXRob2QobGlzdGVuZXIpOwotICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJWOEludGVybmFsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmou
Y3BwCmluZGV4IDk3NTRmYWU3ZmMxYTZjYTMzM2JmM2ExNDA1YWRmNzc5OGQzZTE0MGIuLjYwOGE0
OGZkY2Y4Nzk5ODViYmM5ODA0Y2M1NzExZDk2NzE1YjRkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBAIC0xMDAs
NyArMTAwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZWFkT25seVRlc3RPYmpB
dHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4KICAgICBJTkNfU1RBVFMoIkRPTS5U
ZXN0T2JqLnJlYWRPbmx5VGVzdE9iakF0dHIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgUmVmUHRyPFRlc3RPYmo+IHJl
c3VsdCA9IGltcC0+cmVhZE9ubHlUZXN0T2JqQXR0cigpOwotICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3cmFwcGVyID0gcmVzdWx0LmdldCgpID8gZ2V0RE9NT2JqZWN0TWFwKGluZm8uR2V0SXNv
bGF0ZSgpKS5nZXQocmVzdWx0LmdldCgpKSA6IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3VsdC5nZXQoKSA/IGdldERPTU9i
amVjdE1hcChpbmZvLkdldElzb2xhdGUoKSkuZ2V0KHJlc3VsdC5nZXQoKSkgOiB2OFVuZGVmaW5l
ZCgpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkgewogICAgICAgICB3cmFwcGVyID0gdG9W
OChyZXN1bHQuZ2V0KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKICAgICAgICAgaWYgKCF3cmFwcGVy
LklzRW1wdHkoKSkKQEAgLTUwNyw3ICs1MDcsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdAog
ICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAg
ICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKICAgICBpZiAo
IXN0YXRlKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdjhJbnRlZ2VyKGltcC0+d2l0aFNjcmlwdFN0YXRl
QXR0cmlidXRlKHN0YXRlKSwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCkBAIC01MzEsNyArNTMx
LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZUF0dHJHZXR0ZXIodjg6OkwKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFz
Y3JpcHRDb250ZXh0KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlKHNjcmlwdENvbnRleHQpLCBpbmZvLkdldElzb2xhdGUoKSk7
CiB9CiAKQEAgLTU1NCw3ICs1NTQsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdp
dGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlc0F0dHJHZXR0ZXIodjg6OkxvY2FsPAogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNjcmlwdFN0YXRlKiBzdGF0ZSA9IFNjcmlwdFN0YXRl
OjpjdXJyZW50KCk7CiAgICAgaWYgKCFzdGF0ZSkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgUmVmUHRyPFRlc3RPYmo+
IHYgPSBpbXAtPndpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcyhzdGF0ZSwgZWMpOwogICAg
IGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIHJldHVybiBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFp
c2VzQXR0ckdldHRlcgogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICBSZWZQdHI8VGVzdE9iaj4gdiA9
IGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoc2NyaXB0Q29u
dGV4dCwgZWMpOwogICAgIGlmIChVTkxJS0VMWShlYykpCiAgICAgICAgIHJldHVybiBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oZWMsIGluZm8uR2V0SXNvbGF0ZSgpKTsKQEAgLTYxNSwxMCArNjE1
LDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBTY3JpcHRTdGF0ZSogc3RhdGUgPSBT
Y3JpcHRTdGF0ZTo6Y3VycmVudCgpOwogICAgIGlmICghc3RhdGUpCi0gICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAgICAgaWYgKCFzY3JpcHRDb250ZXh0KQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdG9WOChp
bXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoc3Rh
dGUsIHNjcmlwdENvbnRleHQpLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKQEAgLTY0NiwxMCAr
NjQ2LDEwIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CiAgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0gU2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKICAg
ICBpZiAoIXN0YXRlKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRD
b250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIHY4
VW5kZWZpbmVkKCk7CiAgICAgUmVmUHRyPFRlc3RPYmo+IHYgPSBpbXAtPndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoc3RhdGUsIHNjcmlwdENv
bnRleHQsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICByZXR1cm4gVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7CkBAIC02ODQsMTAgKzY4
NCwxMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQQogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgU2NyaXB0U3RhdGUqIHN0YXRlID0g
U2NyaXB0U3RhdGU6OmN1cnJlbnQoKTsKICAgICBpZiAoIXN0YXRlKQotICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgcmV0dXJuIHRvVjgo
aW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0
dHJpYnV0ZShzdGF0ZSwgc2NyaXB0Q29udGV4dCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIApA
QCAtNzE0LDcgKzcxNCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJHZXR0ZXIoCiAgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9ySW5zcGVjdG9y
KCkpOwogICAgIGlmICghY2FsbFN0YWNrKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgp
OworICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICByZXR1cm4gdG9WOChpbXAtPndp
dGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGUoY2FsbFN0YWNrKSwgaW5mby5H
ZXRJc29sYXRlKCkpOwogfQogCkBAIC03MjUsNyArNzI1LDcgQEAgc3RhdGljIHZvaWQgd2l0aFNj
cmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHIKICAgICBUZXN0T2JqKiB2ID0gVjhUZXN0T2JqOjpIYXNJbnN0YW5jZSh2YWx1ZSkgPyBW
OFRlc3RPYmo6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKSA6
IDA7CiAgICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENh
bGxTdGFja0Zvckluc3BlY3RvcigpKTsKICAgICBpZiAoIWNhbGxTdGFjaykKLSAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAg
aW1wLT5zZXRXaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQXR0cmlidXRlKGNhbGxTdGFj
aywgV1RGOjpnZXRQdHIodikpOwogICAgIHJldHVybjsKIH0KQEAgLTgwNyw3ICs4MDcsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNhY2hlZEF0dHJpYnV0ZTFBdHRyR2V0dGVyKHY4
OjpMb2NhbDx2ODo6U3RyaW5nPiBuYQogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouY2FjaGVk
QXR0cmlidXRlMS5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKICAgICBSZWZQdHI8YW55PiByZXN1bHQgPSBpbXAtPmNhY2hlZEF0
dHJpYnV0ZTEoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3VsdC5n
ZXQoKSA/IGdldERPTU9iamVjdE1hcChpbmZvLkdldElzb2xhdGUoKSkuZ2V0KHJlc3VsdC5nZXQo
KSkgOiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdyYXBwZXIgPSByZXN1bHQuZ2V0KCkgPyBnZXRET01PYmplY3RNYXAoaW5mby5HZXRJc29sYXRl
KCkpLmdldChyZXN1bHQuZ2V0KCkpIDogdjhVbmRlZmluZWQoKTsKICAgICBpZiAod3JhcHBlci5J
c0VtcHR5KCkpIHsKICAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkdl
dElzb2xhdGUoKSk7CiAgICAgICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCkBAIC04MjEsNyAr
ODIxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjYWNoZWRBdHRyaWJ1dGUyQXR0
ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmEKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0
T2JqLmNhY2hlZEF0dHJpYnV0ZTIuX2dldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9i
ajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgUmVmUHRyPGFueT4gcmVzdWx0ID0gaW1w
LT5jYWNoZWRBdHRyaWJ1dGUyKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIg
PSByZXN1bHQuZ2V0KCkgPyBnZXRET01PYmplY3RNYXAoaW5mby5HZXRJc29sYXRlKCkpLmdldChy
ZXN1bHQuZ2V0KCkpIDogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpOworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3cmFwcGVyID0gcmVzdWx0LmdldCgpID8gZ2V0RE9NT2JqZWN0TWFwKGluZm8u
R2V0SXNvbGF0ZSgpKS5nZXQocmVzdWx0LmdldCgpKSA6IHY4VW5kZWZpbmVkKCk7CiAgICAgaWYg
KHdyYXBwZXIuSXNFbXB0eSgpKSB7CiAgICAgICAgIHdyYXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQo
KSwgaW5mby5HZXRJc29sYXRlKCkpOwogICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQpA
QCAtMTA0Myw3ICsxMDQzLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBUZXN0T2Jq
Q29uc3RydWN0b3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUKICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZGF0YSA9IGluZm8uRGF0YSgpOwogICAgIEFTU0VSVChkYXRhLT5Jc0V4
dGVybmFsKCkgfHwgZGF0YS0+SXNOdW1iZXIoKSk7CiAgICAgV3JhcHBlclR5cGVJbmZvKiB0eXBl
ID0gV3JhcHBlclR5cGVJbmZvOjp1bndyYXAoZGF0YSk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpO30KKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTt9CiAKIHN0YXRpYyB2b2lk
IFRlc3RPYmpSZXBsYWNlYWJsZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQogewpAQCAtMTA1Niw3ICsxMDU2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
b2lkTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBJTkNfU1RB
VFMoIkRPTS5UZXN0T2JqLnZvaWRNZXRob2QiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGltcC0+dm9pZE1ldGhvZCgpOwotICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2b2lkTWV0aG9kV2l0aEFyZ3ND
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTA2OSw3ICsxMDY5LDcgQEAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2b2lkTWV0aG9kV2l0aEFyZ3NDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmcKICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBU
SU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHN0ckFyZywgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSk7CiAgICAgRVhDRVBUSU9OX0JMT0NLKFRlc3RP
YmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoYXJncywgMiwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOFRlc3RPYmo6OnRvTmF0aXZlKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywg
MiwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CiAgICAgaW1wLT52b2lkTWV0aG9kV2l0aEFy
Z3MoQXJnLCBzdHJBcmcsIG9iakFyZyk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpOworICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IE1ldGhvZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0x
MTE4LDcgKzExMTgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhT
ZXF1ZW5jZUFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmCiAgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBFWENFUFRJT05fQkxP
Q0soVmVjdG9yPFNjcmlwdFByb2ZpbGU+LCBzZXF1ZW5jZUFyZywgdG9OYXRpdmVBcnJheTxTY3Jp
cHRQcm9maWxlPihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRl
ZmluZWQpKSk7CiAgICAgaW1wLT5tZXRob2RXaXRoU2VxdWVuY2VBcmcoc2VxdWVuY2VBcmcpOwot
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmlu
ZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RSZXR1cm5pbmdT
ZXF1ZW5jZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMTU5LDkgKzEx
NTksOSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNlcmlhbGl6ZWRWYWx1ZUNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgYm9vbCBzZXJpYWxpemVkQXJnRGlk
VGhyb3cgPSBmYWxzZTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxp
emVkQXJnID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1swXSwgMCwgMCwgc2Vy
aWFsaXplZEFyZ0RpZFRocm93LCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgaWYgKHNlcmlhbGl6
ZWRBcmdEaWRUaHJvdykKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAg
cmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgaW1wLT5zZXJpYWxpemVkVmFsdWUoc2VyaWFsaXpl
ZEFyZyk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIHJldHVybiB2
OFVuZGVmaW5lZCgpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGlkYktleUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMTcyLDcgKzExNzIsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGlkYktleUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKICAgICBFWENFUFRJT05fQkxPQ0soUmVmUHRyPElEQktleT4sIGtleSwgY3Jl
YXRlSURCS2V5RnJvbVZhbHVlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKTsKICAgICBpbXAtPmlkYktleShrZXkuZ2V0KCkpOwotICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0K
IAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvcHRpb25zT2JqZWN0Q2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTExODYsMTMgKzExODYsMTMgQEAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBvcHRpb25zT2JqZWN0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKICAgICAgICAgcmV0dXJuIFY4UHJveHk6OnRocm93VHlwZUVycm9yKCJOb3Qg
YW4gb2JqZWN0LiIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8
PSAxKSB7CiAgICAgICAgIGltcC0+b3B0aW9uc09iamVjdChvbyk7Ci0gICAgICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAg
ICAgfQogICAgIEVYQ0VQVElPTl9CTE9DSyhEaWN0aW9uYXJ5LCBvb28sIE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwogICAgIGlmICghb29vLmlz
VW5kZWZpbmVkT3JOdWxsKCkgJiYgIW9vby5pc09iamVjdCgpKQogICAgICAgICByZXR1cm4gVjhQ
cm94eTo6dGhyb3dUeXBlRXJyb3IoIk5vdCBhbiBvYmplY3QuIiwgYXJncy5HZXRJc29sYXRlKCkp
OwogICAgIGltcC0+b3B0aW9uc09iamVjdChvbywgb29vKTsKLSAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aEV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMjA0LDcgKzEyMDQsNyBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhFeGNlcHRpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcgogICAgIGltcC0+bWV0aG9kV2l0aEV4Y2VwdGlvbihlYyk7CiAgICAgaWYgKFVOTElL
RUxZKGVjKSkKICAgICAgICAgZ290byBmYWlsOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICB9CiAgICAgZmFpbDoKICAg
ICByZXR1cm4gVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7
CkBAIC0xMjE4LDcgKzEyMTgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFkZEV2
ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgICAgICBW
OFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpLT5hZGRFdmVudExpc3RlbmVyKHY4VmFs
dWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJnc1swXSksIGxpc3RlbmVyLCBhcmdzWzJdLT5Cb29s
ZWFuVmFsdWUoKSk7CiAgICAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIo
KSwgYXJnc1sxXSwgVjhUZXN0T2JqOjpldmVudExpc3RlbmVyQ2FjaGVJbmRleCk7CiAgICAgfQot
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9
CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVtb3ZlRXZlbnRMaXN0ZW5lckNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMjI5LDcgKzEyMjksNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlbW92ZUV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcgogICAgICAgICBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpLT5yZW1vdmVFdmVudExpc3RlbmVyKHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmco
YXJnc1swXSksIGxpc3RlbmVyLmdldCgpLCBhcmdzWzJdLT5Cb29sZWFuVmFsdWUoKSk7CiAgICAg
ICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjhUZXN0
T2JqOjpldmVudExpc3RlbmVyQ2FjaGVJbmRleCk7CiAgICAgfQotICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlVm9pZENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCkBAIC0xMjQwLDcgKzEyNDAsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZVZvaWRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cgogICAgIGltcC0+d2l0aFNjcmlwdFN0YXRlVm9pZCgmc3RhdGUpOwogICAgIGlmIChzdGF0ZS5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioc3RhdGUuZXhjZXB0aW9u
KCksIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gd2l0aFNjcmlwdFN0YXRlT2JqQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKQEAgLTEyNjYsNyArMTI2Niw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d2l0aFNjcmlwdFN0YXRlVm9pZEV4Y2VwdGlvbkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1CiAgICAg
ICAgIGdvdG8gZmFpbDsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0g
ICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIHJldHVybiB2OFVuZGVmaW5l
ZCgpOwogICAgIH0KICAgICBmYWlsOgogICAgIHJldHVybiBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKQEAgLTEyOTYsOSArMTI5Niw5IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRDYWxsYmFjayhj
b25zdCB2ODo6QXJndW1lCiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShh
cmdzLkhvbGRlcigpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0
ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZp
bmVkKCk7CiAgICAgaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dChzY3JpcHRDb250ZXh0
KTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHY4VW5k
ZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCkBAIC0xMzA4LDExICsxMzA4LDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUNhbGxiYWNrKGNvCiAg
ICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghc2Ny
aXB0Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0
dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlKCZzdGF0ZSwgc2NyaXB0Q29udGV4dCk7CiAgICAgaWYgKHN0YXRlLmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSwg
YXJncy5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
KyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9u
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTEzMjQsNyArMTMyNCw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvCiAgICAgRW1wdHlTY3JpcHRTdGF0ZSBzdGF0ZTsKICAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOwogICAgIGlmICghc2NyaXB0Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgUmVmUHRy
PFRlc3RPYmo+IHJlc3VsdCA9IGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZU9iakV4Y2VwdGlvbigmc3RhdGUsIHNjcmlwdENvbnRleHQsIGVjKTsKICAgICBpZiAo
VU5MSUtFTFkoZWMpKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC0xMzQzLDcgKzEzNDMsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVXaXRoU3BhY2VzQwogICAgIEVtcHR5U2NyaXB0U3RhdGUgc3RhdGU7CiAgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKICAgICBpZiAoIXNjcmlwdENvbnRleHQpCi0gICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAgIFJlZlB0cjxU
ZXN0T2JqPiByZXN1bHQgPSBpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVXaXRoU3BhY2VzKCZzdGF0ZSwgc2NyaXB0Q29udGV4dCk7CiAgICAgaWYgKHN0YXRlLmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24o
KSwgYXJncy5HZXRJc29sYXRlKCkpOwpAQCAtMTM1Nyw5ICsxMzU3LDkgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrQ2FsbGJhY2so
Y29uc3Qgdjg6OkEKICAgICBSZWZQdHI8U2NyaXB0QXJndW1lbnRzPiBzY3JpcHRBcmd1bWVudHMo
Y3JlYXRlU2NyaXB0QXJndW1lbnRzKGFyZ3MsIDApKTsKICAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0
YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRm9ySW5zcGVjdG9yKCkpOwogICAg
IGlmICghY2FsbFN0YWNrKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgICAg
ICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICBpbXAtPndpdGhTY3JpcHRBcmd1bWVudHNBbmRD
YWxsU3RhY2soc2NyaXB0QXJndW1lbnRzLCBjYWxsU3RhY2spOwotICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoT3B0aW9uYWxBcmdDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTM2OCwxMSArMTM2OCwxMSBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmCiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAwKSB7CiAgICAgICAgIGltcC0+
bWV0aG9kV2l0aE9wdGlvbmFsQXJnKCk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgfQogICAgIEVYQ0VQ
VElPTl9CTE9DSyhpbnQsIG9wdCwgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxB
cmcob3B0KTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJu
IHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQpAQCAtMTM4NCwxMSArMTM4NCwxMSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2soY29u
cwogICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIG5vbk9wdCwgdG9JbnQzMihNQVlCRV9NSVNTSU5H
X1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPD0gMSkgewogICAgICAgICBpbXAtPm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZE9wdGlvbmFsQXJnKG5vbk9wdCk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgfQogICAgIEVYQ0VQVElP
Tl9CTE9DSyhpbnQsIG9wdCwgdG9JbnQzMihNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAx
LCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgaW1wLT5tZXRob2RXaXRoTm9uT3B0aW9uYWxB
cmdBbmRPcHRpb25hbEFyZyhub25PcHQsIG9wdCk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpOworICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCiBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJn
c0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xNDAwLDE2ICsxNDAwLDE2
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJn
QW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGJhY2soCiAgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgbm9u
T3B0LCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1Vu
ZGVmaW5lZCkpKTsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAxKSB7CiAgICAgICAgIGltcC0+
bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKG5vbk9wdCk7Ci0gICAg
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICAgICAgcmV0dXJuIHY4VW5k
ZWZpbmVkKCk7CiAgICAgfQogICAgIEVYQ0VQVElPTl9CTE9DSyhpbnQsIG9wdDEsIHRvSW50MzIo
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDIpIHsKICAgICAgICAgaW1wLT5tZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQxKTsKLSAgICAgICAgcmV0
dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKICAgICB9CiAgICAgRVhDRVBUSU9OX0JMT0NLKGludCwgb3B0MiwgdG9JbnQzMihNQVlCRV9N
SVNTSU5HX1BBUkFNRVRFUihhcmdzLCAyLCBEZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgaW1w
LT5tZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3Mobm9uT3B0LCBvcHQx
LCBvcHQyKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJu
IHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9k
V2l0aE9wdGlvbmFsU3RyaW5nQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAg
LTE0MTgsMTEgKzE0MTgsMTEgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RX
aXRoT3B0aW9uYWxTdHJpbmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnQKICAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGlmIChhcmdz
Lkxlbmd0aCgpIDw9IDApIHsKICAgICAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmco
KTsKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgICAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKICAgICB9CiAgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQ
VElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBzdHIsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwogICAgIGltcC0+bWV0aG9kV2l0aE9wdGlvbmFs
U3RyaW5nKHN0cik7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIHJl
dHVybiB2OFVuZGVmaW5lZCgpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1l
dGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzVW5kZWZpbmVkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKQEAgLTE0MzEsNyArMTQzMSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbWV0aG9kV2l0aE9wdGlvbmFsU3RyaW5nSXNVbmRlZmluZWRDYWxsYmFjayhjb25zdCB2
CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
ICAgICBTVFJJTkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4s
IHN0ciwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVk
KSk7CiAgICAgaW1wLT5tZXRob2RXaXRoT3B0aW9uYWxTdHJpbmdJc1VuZGVmaW5lZChzdHIpOwot
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmlu
ZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoT3B0aW9u
YWxTdHJpbmdJc051bGxTdHJpbmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpA
QCAtMTQ0MCw3ICsxNDQwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RX
aXRoT3B0aW9uYWxTdHJpbmdJc051bGxTdHJpbmdDYWxsYmFjayhjb25zdAogICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgU1RSSU5HX1RP
X1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCBzdHIsIE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc051bGxTdHJpbmcpKTsKICAgICBpbXAt
Pm1ldGhvZFdpdGhPcHRpb25hbFN0cmluZ0lzTnVsbFN0cmluZyhzdHIpOwotICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAog
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoQ2FsbGJhY2tBcmdDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTQ1Myw3ICsxNDUzLDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoQ2FsbGJhY2tBcmdDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJgogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENI
X0VSUiwgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxi
YWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdLCBnZXRTY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpOwogICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQXJnKGNhbGxiYWNrKTsKLSAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVk
KCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE5vbkNhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tBcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpA
QCAtMTQ2Nyw3ICsxNDY3LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RX
aXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0NhbGxiYWNrKGNvbnMKICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAg
ICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUo
YXJnc1sxXSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpbXAtPm1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKG5vbkNhbGxiYWNrLCBjYWxsYmFjayk7Ci0g
ICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIHJldHVybiB2OFVuZGVmaW5l
ZCgpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhDYWxsYmFj
a0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTE0
ODEsNyArMTQ4MSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmdDYWxsYmFjayhjb25zdCB2ODo6CiAgICAgICAgIGNhbGxiYWNr
ID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdLCBnZXRTY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOwogICAgIH0KICAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJn
KGNhbGxiYWNrKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0
dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKICNpZiBFTkFCTEUoQ29uZGl0aW9uMSkKQEAgLTE1MDIs
NyArMTUwMiw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uZGl0aW9uYWxNZXRo
b2QyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJnCiAgICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai5jb25kaXRpb25hbE1ldGhvZDIiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIGltcC0+Y29uZGl0aW9uYWxNZXRob2Qy
KCk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIHJldHVybiB2OFVu
ZGVmaW5lZCgpOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpICYmIEVOQUJMRShD
b25kaXRpb24yKQpAQCAtMTUxNCw3ICsxNTE0LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb25kaXRpb25hbE1ldGhvZDNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmcK
ICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmNvbmRpdGlvbmFsTWV0aG9kMyIpOwogICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgaW1w
LT5jb25kaXRpb25hbE1ldGhvZDMoKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ29u
ZGl0aW9uMSkgfHwgRU5BQkxFKENvbmRpdGlvbjIpCkBAIC0xNTI4LDcgKzE1MjgsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNZXRob2QxQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncwogICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2JqKiwgb2JqQXJn
LCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJ
c1VuZGVmaW5lZCkpKSA6IDApOwogICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05f
QkxPQ0soVjhQYXJhbWV0ZXI8Piwgc3RyQXJnLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdz
LCAxLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2Jq
QXJnLCBzdHJBcmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBv
dmVybG9hZGVkTWV0aG9kMkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0x
NTQwLDExICsxNTQwLDExIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRl
ZE1ldGhvZDJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAgICAgRVhDRVBUSU9O
X0JMT0NLKFRlc3RPYmoqLCBvYmpBcmcsIFY4VGVzdE9iajo6SGFzSW5zdGFuY2UoTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOFRlc3RPYmo6
OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPD0gMSkgewogICAgICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnKTsK
LSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKICAgICB9CiAgICAgRVhDRVBUSU9OX0JMT0NLKGxvbmcgbG9uZywgQXJn
LCB0b0ludDY0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVm
aW5lZCkpKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2Qob2JqQXJnLCBBcmcpOwotICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsK
IH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kM0NhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xNTU1LDcgKzE1NTUsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNZXRob2QzQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9C
TE9DSyhWOFBhcmFtZXRlcjw+LCBzdHJBcmcsIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwogICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChzdHJB
cmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhV
bmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVk
TWV0aG9kNENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xNTY2LDcgKzE1
NjYsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNZXRob2Q0Q2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVz
dE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRVhDRVBUSU9OX0JMT0NLKGxvbmcg
bG9uZywgQXJnLCB0b0ludDY0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1
bHRJc1VuZGVmaW5lZCkpKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoQXJnKTsKLSAgICBy
ZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7
CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDVDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTU3OSw3ICsxNTc5LDcgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kNUNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNN
QVRDSF9FUlIsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBj
YWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSwgZ2V0U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoY2FsbGJhY2spOwotICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kNkNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xNTkwLDcgKzE1OTAsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNZXRob2Q2Q2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRVhDRVBUSU9OX0JMT0NLKFJlZlB0cjxET01TdHJp
bmdMaXN0PiwgbGlzdEFyZywgdjhWYWx1ZVRvV2ViQ29yZURPTVN0cmluZ0xpc3QoTUFZQkVfTUlT
U0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwogICAgIGltcC0+
b3ZlcmxvYWRlZE1ldGhvZChsaXN0QXJnKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1ldGhvZDdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQpAQCAtMTYwMSw3ICsxNjAxLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvdmVybG9hZGVkTWV0aG9kN0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAg
IEVYQ0VQVElPTl9CTE9DSyhSZWZQdHI8RE9NU3RyaW5nTGlzdD4sIGFycmF5QXJnLCB2OFZhbHVl
VG9XZWJDb3JlRE9NU3RyaW5nTGlzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBE
ZWZhdWx0SXNVbmRlZmluZWQpKSk7CiAgICAgaW1wLT5vdmVybG9hZGVkTWV0aG9kKGFycmF5QXJn
KTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHY4VW5k
ZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb3ZlcmxvYWRlZE1l
dGhvZDhDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTYxMiw3ICsxNjEy
LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kOENhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEVYQ0VQVElPTl9CTE9DSyhUZXN0T2Jq
Kiwgb2JqQXJnLCBWOFRlc3RPYmo6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVS
KGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpID8gVjhUZXN0T2JqOjp0b05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOwogICAgIGltcC0+b3ZlcmxvYWRlZE1ldGhvZChv
YmpBcmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9h
ZGVkTWV0aG9kOUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xNjIzLDcg
KzE2MjMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNZXRob2Q5
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncwogICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAgRVhDRVBUSU9OX0JMT0NLKFJl
ZlB0cjxET01TdHJpbmdMaXN0PiwgYXJyYXlBcmcsIHY4VmFsdWVUb1dlYkNvcmVET01TdHJpbmdM
aXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkp
KTsKICAgICBpbXAtPm92ZXJsb2FkZWRNZXRob2QoYXJyYXlBcmcpOwotICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMTBDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTYzNCw3ICsxNjM0LDcgQEAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMTBDYWxsYmFjayhjb25zdCB2ODo6QXJn
dW1lbnRzJiBhcmcKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3Mu
SG9sZGVyKCkpOwogICAgIEVYQ0VQVElPTl9CTE9DSyhWZWN0b3I8dW5zaWduZWQgbG9uZz4sIGFy
cmF5QXJnLCB0b05hdGl2ZUFycmF5PHVuc2lnbmVkIGxvbmc+KE1BWUJFX01JU1NJTkdfUEFSQU1F
VEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBpbXAtPm92ZXJsb2FkZWRN
ZXRob2QoYXJyYXlBcmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAg
ICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvdmVybG9hZGVkTWV0aG9kQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAg
LTE2NjcsNyArMTY2Nyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2xhc3NNZXRo
b2RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouY2xhc3NNZXRob2QiKTsKICAgICBUZXN0T2JqOjpjbGFzc01ldGhvZCgpOwot
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmlu
ZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjbGFzc01ldGhvZFdpdGhP
cHRpb25hbENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xNjg5LDcgKzE2
ODksNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG92ZXJsb2FkZWRNZXRob2QxMUNh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZwogICAgICAgICByZXR1cm4gVjhQcm94eTo6
dGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgRVhD
RVBUSU9OX0JMT0NLKGludCwgYXJnLCB0b0ludDMyKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBUZXN0T2JqOjpvdmVybG9hZGVkTWV0
aG9kMShhcmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1
cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDb25kaXRpb24xKQpAQCAt
MTcwMyw3ICsxNzAzLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVk
TWV0aG9kMTJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmcKICAgICAgICAgcmV0dXJu
IFY4UHJveHk6OnRocm93Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkp
OwogICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8
PiwgdHlwZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZp
bmVkKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEodHlwZSk7Ci0gICAgcmV0dXJu
IHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCkBAIC0xNzM3LDcgKzE3MzcsNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNsYXNzTWV0aG9kV2l0aENsYW1wQ2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYQogICAgIGlmICghaXNuYW4ob2JqQXJnc0xvbmdOYXRpdmVWYWx1
ZSkpCiAgICAgICAgIG9iakFyZ3NMb25nID0gY2xhbXBUbzx1bnNpZ25lZCBsb25nPihvYmpBcmdz
TG9uZ05hdGl2ZVZhbHVlKTsKICAgICBpbXAtPmNsYXNzTWV0aG9kV2l0aENsYW1wKG9iakFyZ3NT
aG9ydCwgb2JqQXJnc0xvbmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
KyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBlbmFibGVkQXRSdW50aW1lTWV0aG9kMUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCkBAIC0xNzQ4LDcgKzE3NDgsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cwogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAg
RVhDRVBUSU9OX0JMT0NLKGxvbmcgbG9uZywgQXJnLCB0b0ludDY0KE1BWUJFX01JU1NJTkdfUEFS
QU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBpbXAtPmVuYWJsZWRB
dFJ1bnRpbWVNZXRob2QxKEFyZyk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigp
OworICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGVuYWJsZWRBdFJ1bnRpbWVNZXRob2QyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKQEAgLTE3NTksNyArMTc1OSw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gZW5hYmxlZEF0UnVudGltZU1ldGhvZDJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzCiAg
ICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKICAg
ICBFWENFUFRJT05fQkxPQ0sobG9uZyBsb25nLCBBcmcsIHRvSW50NjQoTUFZQkVfTUlTU0lOR19Q
QVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwogICAgIGltcC0+ZW5hYmxl
ZEF0UnVudGltZU1ldGhvZDIoQXJnKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gZW5hYmxlZFBlckNvbnRleHRNZXRob2QxQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKQEAgLTE3NzAsNyArMTc3MCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZW5hYmxlZFBlckNvbnRleHRNZXRob2QxQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsK
ICAgICBFWENFUFRJT05fQkxPQ0sobG9uZyBsb25nLCBBcmcsIHRvSW50NjQoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOwogICAgIGltcC0+ZW5h
YmxlZFBlckNvbnRleHRNZXRob2QxKEFyZyk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOworICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMkNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCkBAIC0xNzgxLDcgKzE3ODEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMkNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudAogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CiAgICAgRVhDRVBUSU9OX0JMT0NLKGxvbmcgbG9uZywgQXJnLCB0b0ludDY0KE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBpbXAt
PmVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMihBcmcpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBzdHJpbmdBcnJheUZ1bmN0aW9uQ2FsbGJhY2soY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykKQEAgLTE4MjcsNyArMTgyNyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29udmVydDFDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIoKSk7CiAgICAg
RVhDRVBUSU9OX0JMT0NLKGEqLCAsIFY4YTo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJB
TUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOGE6OnRvTmF0aXZlKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwg
RGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CiAgICAgaW1wLT5jb252ZXJ0MSgpOwotICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsK
IH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0MkNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xODM4LDcgKzE4MzgsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkp
OwogICAgIEVYQ0VQVElPTl9CTE9DSyhiKiwgLCBWOGI6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpID8gVjhiOjp0b05hdGl2
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOwogICAgIGltcC0+Y29udmVydDIoKTsK
LSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgcmV0dXJuIHY4VW5kZWZp
bmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydDNDYWxsYmFj
ayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpAQCAtMTg0OSw3ICsxODQ5LDcgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0M0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhv
bGRlcigpKTsKICAgICBFWENFUFRJT05fQkxPQ0soYyosICwgVjhjOjpIYXNJbnN0YW5jZShNQVlC
RV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSA/IFY4Yzo6
dG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFN
RVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKSkgOiAwKTsKICAgICBpbXAtPmNvbnZl
cnQzKCk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIHJldHVybiB2
OFVuZGVmaW5lZCgpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQ0
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKQEAgLTE4NjAsNyArMTg2MCw3IEBA
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydDRDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUo
YXJncy5Ib2xkZXIoKSk7CiAgICAgRVhDRVBUSU9OX0JMT0NLKGQqLCAsIFY4ZDo6SGFzSW5zdGFu
Y2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkg
PyBWOGQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoTUFZQkVfTUlTU0lO
R19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpIDogMCk7CiAgICAgaW1w
LT5jb252ZXJ0NCgpOwotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICBy
ZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b252ZXJ0NUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xODcxLDcgKzE4
NzEsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnQ1Q2FsbGJhY2soY29u
c3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwogICAgIEVYQ0VQVElPTl9CTE9DSyhlKiwgLCBWOGU6Okhh
c0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVm
aW5lZCkpID8gVjhlOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJF
X01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOwog
ICAgIGltcC0+Y29udmVydDUoKTsKLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7
CisgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiB9CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbXV0YWJsZVBvaW50RnVuY3Rpb25DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQpAQCAtMTg5Myw3ICsxODkzLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBv
cmFuZ2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmoub3JhbmdlIik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKICAgICBpbXAtPmJhbmFuYSgpOwotICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIH0KIAogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdHJpY3RGdW5jdGlvbkNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0yMTg1LDcxICsyMTg1LDcxIEBAIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlVjhUZXN0T2JqVGVtcGxhdGUo
djg6OlBlcnNpCiAgICAgY29uc3QgaW50IHZvaWRNZXRob2RXaXRoQXJnc0FyZ2MgPSAzOwogICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHZvaWRNZXRob2RXaXRoQXJnc0FyZ3Zb
dm9pZE1ldGhvZFdpdGhBcmdzQXJnY10gPSB7IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+KCksIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdE9iajo6R2V0
UmF3VGVtcGxhdGUoKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gdm9pZE1ldGhv
ZFdpdGhBcmdzU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIHZvaWRNZXRob2RX
aXRoQXJnc0FyZ2MsIHZvaWRNZXRob2RXaXRoQXJnc0FyZ3YpOwotICAgIHByb3RvLT5TZXQodjg6
OlN0cmluZzo6TmV3KCJ2b2lkTWV0aG9kV2l0aEFyZ3MiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6dm9pZE1ldGhvZFdpdGhBcmdzQ2FsbGJhY2ssIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpLCB2b2lkTWV0aG9kV2l0aEFyZ3NTaWduYXR1cmUpKTsKKyAgICBw
cm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygidm9pZE1ldGhvZFdpdGhBcmdzIiksIHY4OjpGdW5j
dGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OnZvaWRNZXRob2RXaXRoQXJnc0Nh
bGxiYWNrLCB2OFVuZGVmaW5lZCgpLCB2b2lkTWV0aG9kV2l0aEFyZ3NTaWduYXR1cmUpKTsKIAog
ICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ01ldGhvZFdpdGhBcmdzJwogICAgIGNvbnN0IGludCBN
ZXRob2RXaXRoQXJnc0FyZ2MgPSAzOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+IE1ldGhvZFdpdGhBcmdzQXJndltNZXRob2RXaXRoQXJnc0FyZ2NdID0geyB2ODo6SGFuZGxl
PHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRl
PigpLCBWOFRlc3RPYmo6OkdldFJhd1RlbXBsYXRlKCkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpT
aWduYXR1cmU+IE1ldGhvZFdpdGhBcmdzU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRl
c2MsIE1ldGhvZFdpdGhBcmdzQXJnYywgTWV0aG9kV2l0aEFyZ3NBcmd2KTsKLSAgICBwcm90by0+
U2V0KHY4OjpTdHJpbmc6Ok5ldygiTWV0aG9kV2l0aEFyZ3MiKSwgdjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6TWV0aG9kV2l0aEFyZ3NDYWxsYmFjaywgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCksIE1ldGhvZFdpdGhBcmdzU2lnbmF0dXJlKSk7CisgICAgcHJvdG8t
PlNldCh2ODo6U3RyaW5nOjpOZXcoIk1ldGhvZFdpdGhBcmdzIiksIHY4OjpGdW5jdGlvblRlbXBs
YXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6Ok1ldGhvZFdpdGhBcmdzQ2FsbGJhY2ssIHY4VW5k
ZWZpbmVkKCksIE1ldGhvZFdpdGhBcmdzU2lnbmF0dXJlKSk7CiAKICAgICAvLyBDdXN0b20gU2ln
bmF0dXJlICdvYmpNZXRob2RXaXRoQXJncycKICAgICBjb25zdCBpbnQgb2JqTWV0aG9kV2l0aEFy
Z3NBcmdjID0gMzsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBvYmpNZXRo
b2RXaXRoQXJnc0FyZ3Zbb2JqTWV0aG9kV2l0aEFyZ3NBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4oKSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwg
VjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSgpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0
dXJlPiBvYmpNZXRob2RXaXRoQXJnc1NpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNj
LCBvYmpNZXRob2RXaXRoQXJnc0FyZ2MsIG9iak1ldGhvZFdpdGhBcmdzQXJndik7Ci0gICAgcHJv
dG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoIm9iak1ldGhvZFdpdGhBcmdzIiksIHY4OjpGdW5jdGlv
blRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6Om9iak1ldGhvZFdpdGhBcmdzQ2FsbGJh
Y2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCBvYmpNZXRob2RXaXRoQXJnc1NpZ25hdHVyZSkp
OworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJvYmpNZXRob2RXaXRoQXJncyIpLCB2
ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpvYmpNZXRob2RXaXRo
QXJnc0NhbGxiYWNrLCB2OFVuZGVmaW5lZCgpLCBvYmpNZXRob2RXaXRoQXJnc1NpZ25hdHVyZSkp
OwogCiAgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kV2l0aFNlcXVlbmNlQXJnJwogICAg
IGNvbnN0IGludCBtZXRob2RXaXRoU2VxdWVuY2VBcmdBcmdjID0gMTsKICAgICB2ODo6SGFuZGxl
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRoU2VxdWVuY2VBcmdBcmd2W21ldGhvZFdp
dGhTZXF1ZW5jZUFyZ0FyZ2NdID0geyBWOHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+OjpHZXRSYXdU
ZW1wbGF0ZSgpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBtZXRob2RXaXRoU2Vx
dWVuY2VBcmdTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgbWV0aG9kV2l0aFNl
cXVlbmNlQXJnQXJnYywgbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJndik7Ci0gICAgcHJvdG8tPlNl
dCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyIpLCB2ODo6RnVuY3Rpb25U
ZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjptZXRob2RXaXRoU2VxdWVuY2VBcmdDYWxs
YmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIG1ldGhvZFdpdGhTZXF1ZW5jZUFyZ1NpZ25h
dHVyZSkpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJtZXRob2RXaXRoU2VxdWVu
Y2VBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6bWV0
aG9kV2l0aFNlcXVlbmNlQXJnQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIG1ldGhvZFdpdGhTZXF1
ZW5jZUFyZ1NpZ25hdHVyZSkpOwogCiAgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cycKICAgICBjb25zdCBpbnQgbWV0aG9kVGhhdFJlcXVp
cmVzQWxsQXJnc0FuZFRocm93c0FyZ2MgPSAyOwogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NBcmd2W21ldGhvZFRo
YXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4oKSwgVjhUZXN0T2JqOjpHZXRSYXdUZW1wbGF0ZSgpIH07CiAgICAgdjg6Okhh
bmRsZTx2ODo6U2lnbmF0dXJlPiBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzU2ln
bmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3NBcmdjLCBtZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzQXJndik7
Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFRoYXRSZXF1aXJlc0FsbEFy
Z3NBbmRUaHJvd3MiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5h
bDo6bWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c0NhbGxiYWNrLCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKSwgbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c1NpZ25hdHVy
ZSkpOwotICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImNsYXNzTWV0aG9kIiksIHY4OjpG
dW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0aG9kQ2FsbGJh
Y2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSkp
OwotICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImNsYXNzTWV0aG9kV2l0aE9wdGlvbmFs
IiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0
aG9kV2l0aE9wdGlvbmFsQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6TG9j
YWw8djg6OlNpZ25hdHVyZT4oKSkpOwotICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImNs
YXNzTWV0aG9kMiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFY4VGVzdE9iajo6Y2xhc3NN
ZXRob2QyQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6TG9jYWw8djg6OlNp
Z25hdHVyZT4oKSkpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJtZXRob2RUaGF0
UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVz
dE9ialY4SW50ZXJuYWw6Om1ldGhvZFRoYXRSZXF1aXJlc0FsbEFyZ3NBbmRUaHJvd3NDYWxsYmFj
aywgdjhVbmRlZmluZWQoKSwgbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93c1NpZ25h
dHVyZSkpOworICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoImNsYXNzTWV0aG9kIiksIHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNsYXNzTWV0aG9kQ2Fs
bGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPigpKSk7CisgICAg
ZGVzYy0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY2xhc3NNZXRob2RXaXRoT3B0aW9uYWwiKSwgdjg6
OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6Y2xhc3NNZXRob2RXaXRo
T3B0aW9uYWxDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+
KCkpKTsKKyAgICBkZXNjLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjbGFzc01ldGhvZDIiKSwgdjg6
OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhWOFRlc3RPYmo6OmNsYXNzTWV0aG9kMkNhbGxiYWNrLCB2
OFVuZGVmaW5lZCgpLCB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4oKSkpOwogI2lmIEVOQUJMRShD
b25kaXRpb24xKQotICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoIm92ZXJsb2FkZWRNZXRo
b2QxIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6Om92ZXJs
b2FkZWRNZXRob2QxQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6TG9jYWw8
djg6OlNpZ25hdHVyZT4oKSkpOworICAgIGRlc2MtPlNldCh2ODo6U3RyaW5nOjpOZXcoIm92ZXJs
b2FkZWRNZXRob2QxIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJu
YWw6Om92ZXJsb2FkZWRNZXRob2QxQ2FsbGJhY2ssIHY4VW5kZWZpbmVkKCksIHY4OjpMb2NhbDx2
ODo6U2lnbmF0dXJlPigpKSk7CiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjEpCiAgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxRW5hYmxlZCgp
KQotICAgICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiZW5hYmxlZEF0UnVudGltZU1l
dGhvZDEiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6ZW5h
YmxlZEF0UnVudGltZU1ldGhvZDFDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGRl
ZmF1bHRTaWduYXR1cmUpKTsKKyAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImVu
YWJsZWRBdFJ1bnRpbWVNZXRob2QxIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9i
alY4SW50ZXJuYWw6OmVuYWJsZWRBdFJ1bnRpbWVNZXRob2QxQ2FsbGJhY2ssIHY4VW5kZWZpbmVk
KCksIGRlZmF1bHRTaWduYXR1cmUpKTsKICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
ZmVhdHVyZU5hbWVFbmFibGVkKCkpCi0gICAgICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3
KCJlbmFibGVkQXRSdW50aW1lTWV0aG9kMiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRl
c3RPYmpWOEludGVybmFsOjplbmFibGVkQXRSdW50aW1lTWV0aG9kMkNhbGxiYWNrLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKSwgZGVmYXVsdFNpZ25hdHVyZSkpOworICAgICAgICBwcm90by0+U2V0
KHY4OjpTdHJpbmc6Ok5ldygiZW5hYmxlZEF0UnVudGltZU1ldGhvZDIiKSwgdjg6OkZ1bmN0aW9u
VGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6ZW5hYmxlZEF0UnVudGltZU1ldGhvZDJD
YWxsYmFjaywgdjhVbmRlZmluZWQoKSwgZGVmYXVsdFNpZ25hdHVyZSkpOwogCiAgICAgLy8gQ3Vz
dG9tIFNpZ25hdHVyZSAnY29udmVydDEnCiAgICAgY29uc3QgaW50IGNvbnZlcnQxQXJnYyA9IDE7
CiAgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29udmVydDFBcmd2W2NvbnZl
cnQxQXJnY10gPSB7IFY4YTo6R2V0UmF3VGVtcGxhdGUoKSB9OwogICAgIHY4OjpIYW5kbGU8djg6
OlNpZ25hdHVyZT4gY29udmVydDFTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywg
Y29udmVydDFBcmdjLCBjb252ZXJ0MUFyZ3YpOwotICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6
TmV3KCJjb252ZXJ0MSIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVy
bmFsOjpjb252ZXJ0MUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgY29udmVydDFT
aWduYXR1cmUpKTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY29udmVydDEiKSwg
djg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDFDYWxs
YmFjaywgdjhVbmRlZmluZWQoKSwgY29udmVydDFTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3Rv
bSBTaWduYXR1cmUgJ2NvbnZlcnQyJwogICAgIGNvbnN0IGludCBjb252ZXJ0MkFyZ2MgPSAxOwog
ICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNvbnZlcnQyQXJndltjb252ZXJ0
MkFyZ2NdID0geyBWOGI6OkdldFJhd1RlbXBsYXRlKCkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpT
aWduYXR1cmU+IGNvbnZlcnQyU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGNv
bnZlcnQyQXJnYywgY29udmVydDJBcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5l
dygiY29udmVydDIiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5h
bDo6Y29udmVydDJDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGNvbnZlcnQyU2ln
bmF0dXJlKSk7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImNvbnZlcnQyIiksIHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNvbnZlcnQyQ2FsbGJh
Y2ssIHY4VW5kZWZpbmVkKCksIGNvbnZlcnQyU2lnbmF0dXJlKSk7CiAKICAgICAvLyBDdXN0b20g
U2lnbmF0dXJlICdjb252ZXJ0MycKICAgICBjb25zdCBpbnQgY29udmVydDNBcmdjID0gMTsKICAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjb252ZXJ0M0FyZ3ZbY29udmVydDNB
cmdjXSA9IHsgVjhjOjpHZXRSYXdUZW1wbGF0ZSgpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2ln
bmF0dXJlPiBjb252ZXJ0M1NpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBjb252
ZXJ0M0FyZ2MsIGNvbnZlcnQzQXJndik7Ci0gICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXco
ImNvbnZlcnQzIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6
OmNvbnZlcnQzQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCBjb252ZXJ0M1NpZ25h
dHVyZSkpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJjb252ZXJ0MyIpLCB2ODo6
RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpjb252ZXJ0M0NhbGxiYWNr
LCB2OFVuZGVmaW5lZCgpLCBjb252ZXJ0M1NpZ25hdHVyZSkpOwogCiAgICAgLy8gQ3VzdG9tIFNp
Z25hdHVyZSAnY29udmVydDQnCiAgICAgY29uc3QgaW50IGNvbnZlcnQ0QXJnYyA9IDE7CiAgICAg
djg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY29udmVydDRBcmd2W2NvbnZlcnQ0QXJn
Y10gPSB7IFY4ZDo6R2V0UmF3VGVtcGxhdGUoKSB9OwogICAgIHY4OjpIYW5kbGU8djg6OlNpZ25h
dHVyZT4gY29udmVydDRTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgY29udmVy
dDRBcmdjLCBjb252ZXJ0NEFyZ3YpOwotICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJj
b252ZXJ0NCIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjpj
b252ZXJ0NENhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgY29udmVydDRTaWduYXR1
cmUpKTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY29udmVydDQiKSwgdjg6OkZ1
bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6Y29udmVydDRDYWxsYmFjaywg
djhVbmRlZmluZWQoKSwgY29udmVydDRTaWduYXR1cmUpKTsKIAogICAgIC8vIEN1c3RvbSBTaWdu
YXR1cmUgJ2NvbnZlcnQ1JwogICAgIGNvbnN0IGludCBjb252ZXJ0NUFyZ2MgPSAxOwogICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNvbnZlcnQ1QXJndltjb252ZXJ0NUFyZ2Nd
ID0geyBWOGU6OkdldFJhd1RlbXBsYXRlKCkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1
cmU+IGNvbnZlcnQ1U2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIGNvbnZlcnQ1
QXJnYywgY29udmVydDVBcmd2KTsKLSAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY29u
dmVydDUiKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqVjhJbnRlcm5hbDo6Y29u
dmVydDVDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGNvbnZlcnQ1U2lnbmF0dXJl
KSk7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImNvbnZlcnQ1IiksIHY4OjpGdW5j
dGlvblRlbXBsYXRlOjpOZXcoVGVzdE9ialY4SW50ZXJuYWw6OmNvbnZlcnQ1Q2FsbGJhY2ssIHY4
VW5kZWZpbmVkKCksIGNvbnZlcnQ1U2lnbmF0dXJlKSk7CiAgICAgYmF0Y2hDb25maWd1cmVDb25z
dGFudHMoZGVzYywgcHJvdG8sIFRlc3RPYmpDb25zdHMsIFdURl9BUlJBWV9MRU5HVEgoVGVzdE9i
akNvbnN0cykpOwogCiAgICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCkBAIC0yMzA5LDEw
ICsyMzA5LDEwIEBAIHZvaWQgVjhUZXN0T2JqOjppbnN0YWxsUGVyQ29udGV4dFByb3BlcnRpZXMo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBpbnN0YW5jZSwgVGVzCiAgICAgdjg6OkxvY2FsPHY4OjpT
aWduYXR1cmU+IGRlZmF1bHRTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoR2V0VGVtcGxh
dGUoKSk7CiAgICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRTaWduYXR1cmUpOyAvLyBJbiBzb21lIGNh
c2VzLCBpdCB3aWxsIG5vdCBiZSB1c2VkLgogICAgIGlmIChDb250ZXh0RmVhdHVyZXM6OmVuYWJs
ZWRQZXJDb250ZXh0TWV0aG9kMUVuYWJsZWQoaW1wbC0+ZG9jdW1lbnQoKSkpIHsKLSAgICAgICAg
cHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMSIpLCB2
ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjplbmFibGVkUGVyQ29u
dGV4dE1ldGhvZDFDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIGRlZmF1bHRTaWdu
YXR1cmUpLT5HZXRGdW5jdGlvbigpKTsKKyAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpO
ZXcoImVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMSIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3
KFRlc3RPYmpWOEludGVybmFsOjplbmFibGVkUGVyQ29udGV4dE1ldGhvZDFDYWxsYmFjaywgdjhV
bmRlZmluZWQoKSwgZGVmYXVsdFNpZ25hdHVyZSktPkdldEZ1bmN0aW9uKCkpOwogICAgIH0KICAg
ICBpZiAoQ29udGV4dEZlYXR1cmVzOjpmZWF0dXJlTmFtZUVuYWJsZWQoaW1wbC0+ZG9jdW1lbnQo
KSkpIHsKLSAgICAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZWRQZXJDb250
ZXh0TWV0aG9kMiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFs
OjplbmFibGVkUGVyQ29udGV4dE1ldGhvZDJDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCksIGRlZmF1bHRTaWduYXR1cmUpLT5HZXRGdW5jdGlvbigpKTsKKyAgICAgICAgcHJvdG8tPlNl
dCh2ODo6U3RyaW5nOjpOZXcoImVuYWJsZWRQZXJDb250ZXh0TWV0aG9kMiIpLCB2ODo6RnVuY3Rp
b25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpWOEludGVybmFsOjplbmFibGVkUGVyQ29udGV4dE1ldGhv
ZDJDYWxsYmFjaywgdjhVbmRlZmluZWQoKSwgZGVmYXVsdFNpZ25hdHVyZSktPkdldEZ1bmN0aW9u
KCkpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCBmZjg2ZmM4YWZlYjEyYmQ3NjBiMmYwYTEzZjRj
NTQxZTJlZmFlODJiLi5mN2Y1YzNiNDA4YjhlNzRjMTNkYjUwMTlhOTA3ODc4MGU0MmNhNGUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlLmNwcApAQCAtMTM2LDEzICsxMzYsMTMgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBhY2NlcHRUcmFuc2Zlckxpc3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmcKICAg
ICBib29sIGRhdGFEaWRUaHJvdyA9IGZhbHNlOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzBdLCAmbWVz
c2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgJmFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3Qs
IGRhdGFEaWRUaHJvdywgYXJncy5HZXRJc29sYXRlKCkpOwogICAgIGlmIChkYXRhRGlkVGhyb3cp
Ci0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2OFVuZGVm
aW5lZCgpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKICAgICAgICAgaW1wLT5hY2Nl
cHRUcmFuc2Zlckxpc3QoZGF0YSk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKTsKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgfQogICAgIGltcC0+YWNj
ZXB0VHJhbnNmZXJMaXN0KGRhdGEsIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QpOwotICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICByZXR1cm4gdjhVbmRlZmluZWQo
KTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtdWx0aVRyYW5zZmVyTGlzdENh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xNTEsNyArMTUxLDcgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtdWx0aVRyYW5zZmVyTGlzdENhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MKICAgICBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiBpbXAgPSBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OnRvTmF0aXZl
KGFyZ3MuSG9sZGVyKCkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApIHsKICAgICAgICAg
aW1wLT5tdWx0aVRyYW5zZmVyTGlzdCgpOwotICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7CisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAgIH0KICAgICBNZXNz
YWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlUeDsKICAgICBBcnJheUJ1ZmZlckFycmF5IGFy
cmF5QnVmZmVyQXJyYXlUeDsKQEAgLTE2MiwxNCArMTYyLDE0IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gbXVsdGlUcmFuc2Zlckxpc3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzCiAgICAgYm9vbCBmaXJzdERpZFRocm93ID0gZmFsc2U7CiAgICAgUmVmUHRyPFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gZmlyc3QgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShh
cmdzWzBdLCAmbWVzc2FnZVBvcnRBcnJheVR4LCAmYXJyYXlCdWZmZXJBcnJheVR4LCBmaXJzdERp
ZFRocm93LCBhcmdzLkdldElzb2xhdGUoKSk7CiAgICAgaWYgKGZpcnN0RGlkVGhyb3cpCi0gICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgp
OwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDEpIHsKICAgICAgICAgaW1wLT5tdWx0aVRyYW5z
ZmVyTGlzdChmaXJzdCk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
KyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CiAgICAgfQogICAgIGlmIChhcmdzLkxlbmd0
aCgpIDw9IDIpIHsKICAgICAgICAgaW1wLT5tdWx0aVRyYW5zZmVyTGlzdChmaXJzdCwgbWVzc2Fn
ZVBvcnRBcnJheVR4KTsKLSAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwor
ICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKICAgICB9CiAgICAgTWVzc2FnZVBvcnRBcnJh
eSBtZXNzYWdlUG9ydEFycmF5VHh4OwogICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJB
cnJheVR4eDsKQEAgLTE4MCwxMyArMTgwLDEzIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gbXVsdGlUcmFuc2Zlckxpc3RDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzCiAg
ICAgYm9vbCBzZWNvbmREaWRUaHJvdyA9IGZhbHNlOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHNlY29uZCA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMl0s
ICZtZXNzYWdlUG9ydEFycmF5VHh4LCAmYXJyYXlCdWZmZXJBcnJheVR4eCwgc2Vjb25kRGlkVGhy
b3csIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKICAgICBpZiAoc2Vjb25kRGlkVGhyb3cpCi0gICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDMpIHsKICAgICAgICAgaW1wLT5tdWx0aVRyYW5zZmVy
TGlzdChmaXJzdCwgbWVzc2FnZVBvcnRBcnJheVR4LCBzZWNvbmQpOwotICAgICAgICByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwog
ICAgIH0KICAgICBpbXAtPm11bHRpVHJhbnNmZXJMaXN0KGZpcnN0LCBtZXNzYWdlUG9ydEFycmF5
VHgsIHNlY29uZCwgbWVzc2FnZVBvcnRBcnJheVR4eCk7Ci0gICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOworICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlVjhJbnRlcm5hbApAQCAtMjMw
LDcgKzIzMCw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0
VmFsdWVJbnRlcmZhY2U6OmNvbnN0cnVjdG9yQ2FsbGJhY2soCiAgICAgYm9vbCBkYXRhRGlkVGhy
b3cgPSBmYWxzZTsKICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhID0gU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUoYXJnc1sxXSwgJm1lc3NhZ2VQb3J0QXJyYXlUcmFu
c2Zlckxpc3QsICZhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0LCBkYXRhRGlkVGhyb3csIGFy
Z3MuR2V0SXNvbGF0ZSgpKTsKICAgICBpZiAoZGF0YURpZFRocm93KQotICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworICAgICAgICByZXR1cm4gdjhVbmRlZmluZWQoKTsKIAogICAgIFJl
ZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBpbXBsID0gVGVzdFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6Y3JlYXRlKGhlbGxvLCBkYXRhLCBtZXNzYWdlUG9y
dEFycmF5VHJhbnNmZXJMaXN0KTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBhcmdzLkhvbGRlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhCaW5kaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAppbmRl
eCAxNjExODJmNjlhNDc3Y2U1MWY1ZTYzYTEwNWY2YjU5YjY1YWQwY2ViLi4wMzQ1NWIyZGNiYTAx
NDUxODU5NTY4NDBiMjk5NzA3NDkxZDJlMDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuaApAQCAtMzQ4LDYgKzM0OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHJldHVybiBkYXRhLT5pbnRlZ2VyQ2FjaGUoKS0+djhVbnNpZ25lZEludGVnZXIodmFsdWUp
OwogICAgIH0KIAorICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhVbmRlZmluZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0K
KwogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgIHN0cnVjdCBWOFZhbHVlVHJhaXRzIHsKICAg
ICAgICAgc3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJyYXlWOFZhbHVlKGNv
bnN0IFQmIHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>