<?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>43653</bug_id>
          
          <creation_ts>2010-08-06 16:29:21 -0700</creation_ts>
          <short_desc>WebKitTestRunner should be more aggressive about ensuring consistent state between tests</short_desc>
          <delta_ts>2010-08-12 14:28:39 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261557</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-06 16:29:21 -0700</bug_when>
    <thetext>WebKitTestRunner should be more aggressive about ensuring consistent state between tests.  For instance, it should ensure that there are no outstanding loads, all windows other than the main window are closed and the web process is alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261558</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-06 16:29:49 -0700</bug_when>
    <thetext>&lt;rdar://problem/8283644&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263576</commentid>
    <comment_count>2</comment_count>
      <attachid>64181</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-11 19:57:45 -0700</bug_when>
    <thetext>Created attachment 64181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263606</commentid>
    <comment_count>3</comment_count>
      <attachid>64181</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-11 22:45:48 -0700</bug_when>
    <thetext>Comment on attachment 64181
Patch

r-ing for now, there is something weird in here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263612</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-08-11 23:00:45 -0700</bug_when>
    <thetext>&gt; +    WKRetainPtr&lt;WKURLRef&gt; url(AdoptWK, createWKURL(&quot;about:blank&quot;));
&gt; +    WKPageLoadURL(m_mainWebView-&gt;page(), url.get());

It seems that this can affect performance a lot. DRT doesn&apos;t do that, does it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263613</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-11 23:06:17 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; +    WKRetainPtr&lt;WKURLRef&gt; url(AdoptWK, createWKURL(&quot;about:blank&quot;));
&gt; &gt; +    WKPageLoadURL(m_mainWebView-&gt;page(), url.get());
&gt; 
&gt; It seems that this can affect performance a lot. DRT doesn&apos;t do that, does it?

DRT does, 

    [mainFrame loadHTMLString:@&quot;&lt;html&gt;&lt;/html&gt;&quot; baseURL:[NSURL URLWithString:@&quot;about:blank&quot;]];
    [mainFrame stopLoading];

in runTest(). I am not sure how much that differs in performance, but since we don&apos;t have that mechanism yet, I thought this would do nicely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263614</commentid>
    <comment_count>6</comment_count>
      <attachid>64188</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-11 23:08:32 -0700</bug_when>
    <thetext>Created attachment 64188
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263977</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-08-12 14:28:39 -0700</bug_when>
    <thetext>Landed in r65267.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64181</attachid>
            <date>2010-08-11 19:57:45 -0700</date>
            <delta_ts>2010-08-11 23:08:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>reseting.diff</filename>
            <type>text/plain</type>
            <size>34033</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY1MjExKQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNzMgQEAKKzIwMTAtMDgtMTEgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZWJLaXRUZXN0UnVubmVyIHNob3VsZCBiZSBtb3JlIGFnZ3Jlc3NpdmUgYWJvdXQgZW5z
dXJpbmcgY29uc2lzdGVudCBzdGF0ZSBiZXR3ZWVuIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzY1MworCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpJbmplY3RlZEJ1bmRsZSk6CisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpiZWdpblRlc3RpbmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZG9uZSk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5o
OgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNUZXN0UnVubmluZyk6CisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlOjopOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlUGFnZTo6ZHVtcCk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZSk6CisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUpOgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKToK
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dCk6
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVy
dCk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRD
b25maXJtKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVk
aXRpbmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRp
bmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUp
OgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleHQpOgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJhbmdlKToKKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdl
KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRBcHBseVN0eWxlKToK
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcpOgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcpOgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZSk6CisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKToKKyAgICAgICAgRG9uJ3QgZG8gYW55
IHdvcmsgaWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgcnVubmluZyBhIHRlc3QuCisgICAgICAgIAor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQ
YWdlLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAg
ICAgICAgKFdUUjo6dG9DRik6CisgICAgICAgIEFkZCBjb252ZXJzaW9uIGZ1bmN0aW9uIGZvciBX
S1VSTFJlZiAtPiBDRlVSTFJlZgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxl
cik6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZG9uZVJlc2V0aW5nKToKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnJ1blRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
ZGlkRmluaXNoTG9hZEZvckZyYW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmg6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjopOgorICAgICAgICAq
IFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0
SW52b2NhdGlvbjo6aW52b2tlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmg6CisgICAgICAgIE1vdmUgcmVzZXRpbmcgY29kZSB0byBUZXN0Q29udHJvbGxlci4K
KworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RDb250
cm9sbGVyTWFjLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cnVuVW50aWwpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvbWFjL1Rlc3RJbnZvY2F0aW9uTWFjLm1tOiBSZW1v
dmVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNw
cDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blVudGlsKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbldpbi5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vV2ViS2l0VGVzdFJ1bm5lci52Y3Byb2o6CisgICAg
ICAgIE1vdmUgcnVuVW50aWwgdG8gVGVzdENvbnRyb2xsZXIuCisKIDIwMTAtMDgtMTEgIEd1c3Rh
dm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAg
ICAgICAgVW5yZXZpZXdlZC4gQWRkaW5nIG15IENvbGxhYm9yYSBwZXJzb25hbGl0eSB0byB0aGUg
bGlzdC4KSW5kZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5j
dGlvbnMuaAkocmV2aXNpb24gNjUwODYpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVy
L1N0cmluZ0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1MiwxNiBAQCBpbmxp
bmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB0b0NGKFdLU3RyCiAgICAgcmV0dXJuIFJldGFpblB0
cjxDRlN0cmluZ1JlZj4oQWRvcHRDRiwgV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwgc3RyaW5nKSk7
CiB9CiAKK2lubGluZSBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHRvQ0YoV0tVUkxSZWYgdXJsKQorewor
ICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxSZWY+KEFkb3B0Q0YsIFdLVVJMQ29weUNGVVJMKDAs
IHVybCkpOworfQorCitpbmxpbmUgUmV0YWluUHRyPENGVVJMUmVmPiB0b0NGKGNvbnN0IFdLUmV0
YWluUHRyPFdLVVJMUmVmPiYgdXJsKQoreworICAgIHJldHVybiB0b0NGKHVybC5nZXQoKSk7Cit9
CisKIGlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1N0cmluZ1JlZiBzdHJp
bmcpCiB7CiAgICAgcmV0dXJuIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPihBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh0b0NGKHN0cmluZykuZ2V0KCkpKTsKSW5kZXg6IFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biA2NTA4NikKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMCBAQAogI2luY2x1ZGUgIlRlc3RDb250
cm9sbGVyLmgiCiAKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbmNsdWRlICJTdHJp
bmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgogI2luY2x1ZGUgPFdl
YktpdDIvV0tDb250ZXh0UHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV1RS
IHsKQEAgLTQ1LDYgKzQ3LDkgQEAgVGVzdENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKGludCBh
cmdjLAogICAgICwgbV92ZXJib3NlKGZhbHNlKQogICAgICwgbV9wcmludFNlcGFyYXRvcnMoZmFs
c2UpCiAgICAgLCBtX3VzaW5nU2VydmVyTW9kZShmYWxzZSkKKyAgICAsIG1fc3RhdGUoSW5pdGlh
bCkKKyAgICAsIG1fZG9uZVJlc2V0aW5nKGZhbHNlKQorICAgICwgbV9yZXNldFJlc3VsdGVkSW5F
cnJvcihmYWxzZSkKIHsKICAgICBpbml0aWFsaXplKGFyZ2MsIGFyZ3YpOwogICAgIGNvbnRyb2xs
ZXIgPSB0aGlzOwpAQCAtMTQzLDEwICsxNDgsNjUgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5p
dGlhbGl6ZShpbnQgYXJnYwogICAgICAgICAwCiAgICAgfTsKICAgICBXS1BhZ2VTZXRQYWdlVUlD
bGllbnQobV9tYWluV2ViVmlldy0+cGFnZSgpLCAmcGFnZVVJQ2xpZW50KTsKKworICAgIFdLUGFn
ZUxvYWRlckNsaWVudCBwYWdlTG9hZGVyQ2xpZW50ID0geworICAgICAgICAwLAorICAgICAgICB0
aGlzLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAg
ICAgICBkaWRGaW5pc2hMb2FkRm9yRnJhbWUsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAg
ICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisg
ICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAKKyAgICB9OworICAg
IFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQobV9tYWluV2ViVmlldy0+cGFnZSgpLCAmcGFnZUxv
YWRlckNsaWVudCk7Cit9CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNp
c3RlbnRWYWx1ZXMoKQoreworICAgIG1fc3RhdGUgPSBSZXNldGluZzsKKworICAgIC8vIEZJWE1F
OiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhbHNvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25l
IHBhZ2Ugb3Blbi4KKworICAgIC8vIFJlc2V0IHByZWZlcmVuY2VzCisgICAgV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlcyA9IFdLQ29udGV4dEdldFByZWZlcmVuY2VzKG1fY29udGV4dC5nZXQo
KSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxl
ZChwcmVmZXJlbmNlcywgdHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZvbnRTbW9vdGhpbmdM
ZXZlbChwcmVmZXJlbmNlcywga1dLRm9udFNtb290aGluZ0xldmVsTm9TdWJwaXhlbEFudGlBbGlh
c2luZyk7CisKKyAgICAvLyBSZXNldCBtYWluIHBhZ2UgYmFjayB0byBhYm91dDpibGFuaworICAg
IG1fZG9uZVJlc2V0aW5nID0gZmFsc2U7CisgICAgbV9yZXNldFJlc3VsdGVkSW5FcnJvciA9IGZh
bHNlOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybChBZG9wdFdLLCBjcmVhdGVXS1VS
TCgiYWJvdXQ6YmxhbmsiKSk7CisgICAgV0tQYWdlTG9hZFVSTChtX21haW5XZWJWaWV3LT5wYWdl
KCksIHVybC5nZXQoKSk7CisgICAgVGVzdENvbnRyb2xsZXI6OnJ1blVudGlsKG1fZG9uZVJlc2V0
aW5nKTsKKyAgICBpZiAobV9yZXNldFJlc3VsdGVkSW5FcnJvcikKKyAgICAgICAgZXhpdCgxKTsK
KworICAgIFdLUGFnZVN0b3BMb2FkaW5nKG1fbWFpbldlYlZpZXctPnBhZ2UoKSk7Cit9CisKK3Zv
aWQgVGVzdENvbnRyb2xsZXI6OmRvbmVSZXNldGluZyhib29sIGVycm9yKQoreworICAgIG1fZG9u
ZVJlc2V0aW5nID0gdHJ1ZTsKKyAgICBtX3Jlc2V0UmVzdWx0ZWRJbkVycm9yID0gZXJyb3I7CiB9
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdGVzdCkKIHsKKyAg
ICByZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCk7CisKKyAgICBtX3N0YXRlID0gUnVubmlu
Z1Rlc3Q7CiAgICAgbV9jdXJyZW50SW52b2NhdGlvbi5zZXQobmV3IFRlc3RJbnZvY2F0aW9uKHRl
c3QpKTsKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5pbnZva2UoKTsKICAgICBtX2N1cnJlbnRJ
bnZvY2F0aW9uLmNsZWFyKCk7CkBAIC0xNzcsNiArMjM3LDggQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cnVuKCkKICAgICB9CiB9CiAKKy8vIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50CisK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVm
IG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQogewogICAgIHN0YXRpY19jYXN0
PFRlc3RDb250cm9sbGVyKj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5kaWRSZWNl
aXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkpOwpA
QCAtMTg3LDQgKzI0OSwyOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTWVzc2Fn
ZUZyCiAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUobWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5KTsKIH0KIAorLy8gV0tQYWdlTG9hZGVy
Q2xpZW50CisKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1Bh
Z2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBzdGF0aWNfY2FzdDxUZXN0Q29udHJvbGxlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVu
dEluZm8pKS0+ZGlkRmluaXNoTG9hZEZvckZyYW1lKHBhZ2UsIGZyYW1lKTsKK30KKwordm9pZCBU
ZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0Zy
YW1lUmVmIGZyYW1lKQoreworICAgIGlmIChtX3N0YXRlICE9IFJlc2V0aW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgZG9u
ZVJlc2V0aW5nKHRydWUpOworCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMKEFkb3B0
V0ssIFdLRnJhbWVDb3B5VVJMKGZyYW1lKSk7CisgICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVS
TD0gdG9DRih3a1VSTCk7CisgICAgQ0ZTdHJpbmdSZWYgY2ZVUkxTdHJpbmcgPSBDRlVSTEdldFN0
cmluZyhjZlVSTC5nZXQoKSk7CisgICAgaWYgKCFDRkVxdWFsKGNmVVJMU3RyaW5nLCBDRlNUUigi
YWJvdXQ6YmxhbmsiKSkpCisgICAgICAgIGRvbmVSZXNldGluZyh0cnVlKTsKKworICAgIGRvbmVS
ZXNldGluZyhmYWxzZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gNjUwODYp
CisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDYgKzUzLDkgQEAgcHVibGljOgogICAgIFdLUGFnZU5hbWVzcGFjZVJl
ZiBwYWdlTmFtZXNwYWNlKCkgeyByZXR1cm4gbV9wYWdlTmFtZXNwYWNlLmdldCgpOyB9CiAgICAg
V0tDb250ZXh0UmVmIGNvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAorICAg
IC8vIEhlbHBlcgorICAgIHN0YXRpYyB2b2lkIHJ1blVudGlsKGJvb2wmIGRvbmUpOworCiBwcml2
YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKTsK
ICAgICB2b2lkIHJ1bigpOwpAQCAtNjQsMTAgKzY3LDE4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBp
bml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoKCk7CiAgICAgdm9pZCBpbml0aWFsaXplVGVzdFBs
dWdpbkRpcmVjdG9yeSgpOwogCisgICAgdm9pZCByZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVz
KCk7CisgICAgdm9pZCBkb25lUmVzZXRpbmcoYm9vbCBlcnJvcik7CisKICAgICAvLyBXS0NvbnRl
eHRJbmplY3RlZEJ1bmRsZUNsaWVudAogICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkKik7CiAgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KTsKIAorICAgIC8vIFdLUGFnZUxvYWRlckNsaWVudAor
ICAgIHN0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCopOworICAgIHZvaWQgZGlkRmluaXNoTG9hZEZvckZy
YW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lKTsKKworCiAgICAgT3duUHRyPFRl
c3RJbnZvY2F0aW9uPiBtX2N1cnJlbnRJbnZvY2F0aW9uOwogCiAgICAgYm9vbCBtX2R1bXBQaXhl
bHM7CkBAIC04MSw2ICs5MiwxNSBAQCBwcml2YXRlOgogICAgIE93blB0cjxQbGF0Zm9ybVdlYlZp
ZXc+IG1fbWFpbldlYlZpZXc7CiAgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBtX2NvbnRl
eHQ7CiAgICAgV0tSZXRhaW5QdHI8V0tQYWdlTmFtZXNwYWNlUmVmPiBtX3BhZ2VOYW1lc3BhY2U7
CisgICAgCisgICAgZW51bSBTdGF0ZSB7CisgICAgICAgIEluaXRpYWwsCisgICAgICAgIFJlc2V0
aW5nLAorICAgICAgICBSdW5uaW5nVGVzdAorICAgIH07CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAg
ICBib29sIG1fZG9uZVJlc2V0aW5nOworICAgIGJvb2wgbV9yZXNldFJlc3VsdGVkSW5FcnJvcjsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDY1MDg2KQorKysgV2ViS2l0
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRl
ICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPFdlYktpdDIvV0tDb250ZXh0UHJpdmF0ZS5o
PgotI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCkBAIC02
NywyMyArNjYsMTUgQEAgc3RhdGljIHZvaWQgc2l6ZVdlYlZpZXdGb3JDdXJyZW50VGVzdChjaAog
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+cmVzaXplVG8o
bm9ybWFsV2lkdGgsIG5vcm1hbEhlaWdodCk7CiB9CiAKLXZvaWQgVGVzdEludm9jYXRpb246OnJl
c2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoKQotewotICAgIFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXMgPSBXS0NvbnRleHRHZXRQcmVmZXJlbmNlcyhUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkuY29udGV4dCgpKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxp
Y2F0aW9uQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBXS1ByZWZlcmVuY2Vz
U2V0Rm9udFNtb290aGluZ0xldmVsKHByZWZlcmVuY2VzLCBrV0tGb250U21vb3RoaW5nTGV2ZWxO
b1N1YnBpeGVsQW50aUFsaWFzaW5nKTsKLX0KLQogdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tl
KCkKIHsKICAgICBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KG1fcGF0aE9yVVJMKTsKLSAgICBy
ZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKCk7CiAKICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJp
bmcoQ0ZTVFIoIkJlZ2luVGVzdCIpKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RSKCIiKSkp
OwogICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOwogCi0gICAgcnVuVW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UpOworICAgIFRlc3RDb250
cm9sbGVyOjpydW5VbnRpbChtX2dvdEluaXRpYWxSZXNwb25zZSk7CiAgICAgaWYgKG1fZXJyb3Ip
IHsKICAgICAgICAgZHVtcCgiRkFJTFxuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTkxLDcgKzgy
LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKIAogICAgIFdLUGFnZUxvYWRVUkwo
VGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbV91cmwuZ2V0
KCkpOwogCi0gICAgcnVuVW50aWwobV9nb3RGaW5hbE1lc3NhZ2UpOworICAgIFRlc3RDb250cm9s
bGVyOjpydW5VbnRpbChtX2dvdEZpbmFsTWVzc2FnZSk7CiAgICAgaWYgKG1fZXJyb3IpIHsKICAg
ICAgICAgZHVtcCgiRkFJTFxuIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYktpdFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgJKHJldmlzaW9uIDY1MDg2KQor
KysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxMSArNDIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQgZHVt
cChjb25zdCBjaGFyKik7CiAKLSAgICB2b2lkIHJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRW
YWx1ZXMoKTsKLQotICAgIC8vIEhlbHBlcgotICAgIHN0YXRpYyB2b2lkIHJ1blVudGlsKGJvb2wm
IGRvbmUpOwotCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1fdXJsOwogICAgIGNoYXIqIG1f
cGF0aE9yVVJMOwogCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24g
NjUwODYpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBJbmplY3Rl
ZEJ1bmRsZSYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpCiBJbmplY3RlZEJ1bmRsZTo6SW5qZWN0
ZWRCdW5kbGUoKQogICAgIDogbV9idW5kbGUoMCkKICAgICAsIG1fbWFpblBhZ2UoMCkKKyAgICAs
IG1fc3RhdGUoSWRsZSkKIHsKIH0KIApAQCAtODQsMTcgKzg1LDYgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6aW5pdGlhbGl6ZShXS0J1bmRsZQogICAgIFdLQnVuZGxlQWN0aXZhdGVNYWNGb250QXNj
ZW50SGFjayhtX2J1bmRsZSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRvbmUoKQotewot
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb25lTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIkRvbmUiKSkpOwotCi0gICAgc3RkOjpzdHJp
bmcgb3V0cHV0ID0gbV9vdXRwdXRTdHJlYW0uc3RyKCk7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiBvdXRwdXRDRlN0cmluZyhBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAs
IG91dHB1dC5jX3N0cigpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gZG9uZU1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aENGU3RyaW5nKG91dHB1dENGU3RyaW5nLmdldCgpKSk7Ci0KLSAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKG1fYnVuZGxlLCBkb25lTWVzc2FnZU5hbWUuZ2V0KCksIGRvbmVNZXNzYWdlQm9keS5nZXQo
KSk7Ci19Ci0KIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2UoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UpCiB7CiAgICAgLy8gRklYTUU6IHdlIHJlYWxseSBuZWVkIHRoZSBtYWluIHBhZ2Ug
cmVmIHRvIGJlIHNlbnQgb3ZlciBmcm9tIHRoZSB1aSBwcm9jZXNzCkBAIC0xMjEsNyArMTExLDcg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoVwogICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIkJlZ2luVGVzdCIpKSk7CiAgICAgICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UobV9idW5kbGUsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBhY2tNZXNzYWdlQm9keS5n
ZXQoKSk7CiAKLSAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgYmVnaW5UZXN0aW5nKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMCw4ICsxMjAsMTAgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoVwogICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UobV9idW5k
bGUsIGVycm9yTWVzc2FnZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZUJvZHkuZ2V0KCkpOwogfQog
Ci12b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldCgpCit2b2lkIEluamVjdGVkQnVuZGxlOjpiZWdp
blRlc3RpbmcoKQogeworICAgIG1fc3RhdGUgPSBUZXN0aW5nOworCiAgICAgbV9vdXRwdXRTdHJl
YW0uc3RyKCIiKTsKIAogICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIgPSBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y3JlYXRlKCk7CkBAIC0xNDQsNiArMTM2LDIxIEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnJlc2V0KCkKICAgICBtX21haW5QYWdlLT5yZXNldCgpOwogfQogCit2b2lkIEluamVjdGVk
QnVuZGxlOjpkb25lKCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZG9uZU1lc3Nh
Z2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RSKCJEb25lIikp
KTsKKworICAgIHN0ZDo6c3RyaW5nIG91dHB1dCA9IG1fb3V0cHV0U3RyZWFtLnN0cigpOworICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gb3V0cHV0Q0ZTdHJpbmcoQWRvcHRDRiwgQ0ZTdHJpbmdD
cmVhdGVXaXRoQ1N0cmluZygwLCBvdXRwdXQuY19zdHIoKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4
KSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlQm9keShBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhvdXRwdXRDRlN0cmluZy5nZXQoKSkpOworCisg
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgZG9uZU1lc3NhZ2VOYW1lLmdldCgpLCBk
b25lTWVzc2FnZUJvZHkuZ2V0KCkpOworCisgICAgbV9tYWluUGFnZS0+c3RvcExvYWRpbmcoKTsK
KworICAgIG1fc3RhdGUgPSBJZGxlOworfQorCiB2b2lkIEluamVjdGVkQnVuZGxlOjpjbG9zZU90
aGVyUGFnZXMoKQogewogICAgIFZlY3RvcjxXS0J1bmRsZVBhZ2VSZWY+IHBhZ2VzOwpJbmRleDog
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAkocmV2aXNpb24gNjUwODYpCisrKyBXZWJLaXRUb29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDYgKzYxLDggQEAgcHVibGljOgogICAgIHZvaWQgZG9uZSgpOwogICAgIHN0
ZDo6b3N0cmluZ3N0cmVhbSYgb3MoKSB7IHJldHVybiBtX291dHB1dFN0cmVhbTsgfQogCisgICAg
Ym9vbCBpc1Rlc3RSdW5uaW5nKCkgeyByZXR1cm4gbV9zdGF0ZSA9PSBUZXN0aW5nOyB9CisKIHBy
aXZhdGU6CiAgICAgSW5qZWN0ZWRCdW5kbGUoKTsKICAgICB+SW5qZWN0ZWRCdW5kbGUoKTsKQEAg
LTczLDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxEZXN0cm95UGFnZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShXS1N0cmluZ1JlZiBt
ZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KTsKIAotICAgIHZvaWQgcmVzZXQoKTsK
KyAgICB2b2lkIGJlZ2luVGVzdGluZygpOwogCiAgICAgV0tCdW5kbGVSZWYgbV9idW5kbGU7CiAg
ICAgSGFzaE1hcDxXS0J1bmRsZVBhZ2VSZWYsIEluamVjdGVkQnVuZGxlUGFnZSo+IG1fb3RoZXJQ
YWdlczsKQEAgLTg0LDYgKzg2LDEyIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI+IG1fZXZlbnRTZW5kaW5nQ29udHJvbGxlcjsKIAogICAgIHN0ZDo6b3N0cmlu
Z3N0cmVhbSBtX291dHB1dFN0cmVhbTsKKyAgICAKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAg
SWRsZSwKKyAgICAgICAgVGVzdGluZworICAgIH07CisgICAgU3RhdGUgbV9zdGF0ZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
LmNwcAkocmV2aXNpb24gNjUwODYpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
Nyw2ICsxNDcsMTIgQEAgSW5qZWN0ZWRCdW5kbGVQYWdlOjp+SW5qZWN0ZWRCdW5kbGVQYWdlKAog
ewogfQogCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6c3RvcExvYWRpbmcoKQoreworICAgIFdL
QnVuZGxlUGFnZVN0b3BMb2FkaW5nKG1fcGFnZSk7CisgICAgbV9pc0xvYWRpbmcgPSBmYWxzZTsK
K30KKwogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc2V0KCkKIHsKICAgICBXS0J1bmRsZVBh
Z2VDbGVhck1haW5GcmFtZU5hbWUobV9wYWdlKTsKQEAgLTIzNSw2ICsyNDEsOSBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkUnVuSW5zZWN1cmVDCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygp
KQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoZnJhbWUgPT0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKG1fcGFnZSkpCiAgICAgICAgIG1faXNMb2FkaW5nID0gdHJ1ZTsKIH0KQEAgLTMzMSw2
ICszNDAsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZyYW1lc1RlCiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKIHsKKyAgICBBU1NFUlQoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSk7CisKICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRv
ZygpOwogCiAgICAgc3dpdGNoIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+d2hhdFRvRHVtcCgpKSB7CkBAIC0zNTcsNiArMzY4LDkgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmlu
aXNoTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7CisgICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm47CisK
ICAgICBpZiAoIVdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMzczLDYgKzM4Nyw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5p
c2hMb2FkRm8KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkV2l0aEVycm9y
Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKKyAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlm
ICghV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0zODYsNiArNDAzLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkV2l0
aAogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tT
dHJpbmdSZWYgdGl0bGUsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7CisgICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm47CisK
ICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzk0LDYg
KzQxNCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGUKIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
dykKIHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkp
CisgICAgICAgIHJldHVybjsKKwogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+bWFrZVdpbmRv
d09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwogICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5nY0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5k
b3csICZleGNlcHRpb24pOwpAQCAtNDE0LDYgKzQzNyw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDaGFuZ2VMb2NhdGkKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlz
aERvY3VtZW50TG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7CisgICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1
cm47CisKICAgICB1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMgPSBXS0J1bmRsZUZy
YW1lR2V0UGVuZGluZ1VubG9hZENvdW50KGZyYW1lKTsKICAgICBpZiAocGVuZGluZ0ZyYW1lVW5s
b2FkRXZlbnRzKQogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCBmcmFt
ZSA8PCAiIC0gaGFzICIgPDwgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzIDw8ICIgb251bmxvYWQg
aGFuZGxlcihzKVxuIjsKQEAgLTQ2MCwxMiArNDg2LDE4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjp3aWxsUnVuSmF2YVNjcmkKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRN
ZXNzYWdlVG9Db25zb2xlKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIHVpbnQzMl90IGxpbmVOdW1iZXIp
CiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQor
ICAgICAgICByZXR1cm47CisKICAgICAvLyBGSVhNRTogU3RyaXAgZmlsZTogdXJscy4KICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiQ09OU09MRSBNRVNTQUdFOiBsaW5lICIg
PDwgbGluZU51bWJlciA8PCAiOiAiIDw8IG1lc3NhZ2UgPDwgIlxuIjsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2Jh
clRleHQpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmlu
ZygpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNDc0LDExICs1MDYsMTcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OndpbGxTZXRTdGF0dXNiYQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1
bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQog
eworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkFM
RVJUOiAiIDw8IG1lc3NhZ2UgPDwgIlxuIjsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OndpbGxSdW5KYXZhU2NyaXB0Q29uZmlybShXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZy
YW1lUmVmKQogeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5p
bmcoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9z
KCkgPDwgIkNPTkZJUk06ICIgPDwgbWVzc2FnZSA8PCAiXG4iOwogfQogCkBAIC01NDYsNiArNTg0
LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdAogCiBib29sIElu
amVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKFdLQnVuZGxlUmFuZ2VSZWYgcmFu
Z2UpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkK
ICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdB
VEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiA8PCByYW5nZSA8PCAiXG4iOwogICAg
IHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+
c2hvdWxkQWxsb3dFZGl0aW5nKCk7CkBAIC01NTMsNiArNTk0LDkgQEAgYm9vbCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdAogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkRW5kRWRpdGluZyhXS0J1bmRsZVJhbmdlUmVmIHJhbmdlKQogeworICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5E
T01SYW5nZToiIDw8IHJhbmdlIDw8ICJcbiI7CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKQEAg
LTU2MCw2ICs2MDQsOSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGlu
CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2RlKFdLQnVuZGxlTm9k
ZVJlZiBub2RlLCBXS0J1bmRsZVJhbmdlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlv
blR5cGUgYWN0aW9uKQogeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBzdGF0aWMgY29uc3QgY2hh
ciogaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9u
VHlwZWQiLAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblBhc3RlZCIsCkBAIC01NzMsNiAr
NjIwLDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZAogCiBib29s
IEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmluZ1JlZiB0ZXh0LCBX
S0J1bmRsZVJhbmdlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlvblR5cGUgYWN0aW9u
KQogeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBzdGF0aWMgY29uc3QgY2hhciAqaW5zZXJ0YWN0
aW9uc3RyaW5nW10gPSB7CiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQiLAogICAg
ICAgICAiV2ViVmlld0luc2VydEFjdGlvblBhc3RlZCIsCkBAIC01ODYsNiArNjM2LDkgQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleAogCiBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkRGVsZXRlUmFuZ2UoV0tCdW5kbGVSYW5nZVJlZiByYW5nZSkKIHsKKyAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRU
ZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogc2hvdWxk
RGVsZXRlRE9NUmFuZ2U6IiA8PCByYW5nZSA8PCAiXG4iOwogICAgIHJldHVybiBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5n
KCk7CkBAIC01OTMsNiArNjQ2LDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERl
bGV0ZVJhbgogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShXS0J1bmRsZVJhbmdlUmVmIGZyb21SYW5nZSwgV0tCdW5kbGVSYW5nZVJlZiB0b1Jhbmdl
LCBXS0FmZmluaXR5VHlwZSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKKyAgICBp
ZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmFmZmluaXR5c3RyaW5nW10gPSB7
CiAgICAgICAgICJOU1NlbGVjdGlvbkFmZmluaXR5VXBzdHJlYW0iLAogICAgICAgICAiTlNTZWxl
Y3Rpb25BZmZpbml0eURvd25zdHJlYW0iCkBAIC02MDksNiArNjY1LDkgQEAgYm9vbCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbAogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6
c2hvdWxkQXBwbHlTdHlsZShXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUsIFdL
QnVuZGxlUmFuZ2VSZWYgcmFuZ2UpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkg
PDwgIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6IiA8PCBzdHlsZSA8PCAiIHRv
RWxlbWVudHNJbkRPTVJhbmdlOiIgPDwgcmFuZ2UgPDwgIlxuIjsKICAgICByZXR1cm4gSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZEFsbG93RWRp
dGluZygpOwpAQCAtNjE2LDI3ICs2NzUsMzggQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNo
b3VsZEFwcGx5U3R5bAogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQmVnaW5FZGl0aW5n
KFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZER1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5v
cygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIgPDwgbm90
aWZpY2F0aW9uTmFtZSA8PCAiXG4iOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
RW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQogeworICAgIGlmICghSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6
IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJcbiI7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKIHsKKyAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xs
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6
IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJcbiI7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKIHsK
KyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAg
ICAgIHJldHVybjsKKwogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVz
dENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdE
aWRDaGFuZ2VTZWxlY3Rpb246IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJcbiI7CiB9CiAKLQog
fSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmgJ
KHJldmlzaW9uIDY1MDg2KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
NyBAQCBwdWJsaWM6CiAgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UoKSBjb25zdCB7IHJldHVybiBt
X3BhZ2U7IH0KICAgICB2b2lkIGR1bXAoKTsKIAorICAgIHZvaWQgc3RvcExvYWRpbmcoKTsKICAg
ICBib29sIGlzTG9hZGluZygpIHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CiAKICAgICB2b2lkIHJl
c2V0KCk7CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5u
ZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNjUwODYpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktp
dFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNiBAQAogCQlCQ0M5OTdBNTExRDNDOEY2MDAxN0JDQTIgLyogSW5qZWN0ZWRCdW5k
bGVQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDQzk5N0EyMTFEM0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1bmRsZVBhZ2UuY3BwICovOyB9
OwogCQlCQ0M5OTgxODExRDNGNTFFMDAxN0JDQTIgLyogTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDOTk4MTcx
MUQzRjUxRTAwMTdCQ0EyIC8qIExheW91dFRlc3RDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQkNE
N0QyRjgxMTkyMTI3ODAwNkRCN0VFIC8qIFRlc3RJbnZvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDdEMkY3MTE5MjEyNzgwMDZEQjdF
RSAvKiBUZXN0SW52b2NhdGlvbi5jcHAgKi87IH07Ci0JCUJDREEyQUJGMTE5MEI1MUEwMEMzQkM0
NyAvKiBUZXN0SW52b2NhdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDREEyQUJFMTE5MEI1MUEwMEMzQkM0NyAvKiBUZXN0SW52b2NhdGlv
bk1hYy5tbSAqLzsgfTsKIAkJQkNEQTJCOUExMTkxMDUxRjAwQzNCQzQ3IC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDREEyQjk5MTE5MTA1MUYwMEMzQkM0NyAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdv
cmsgKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApAQCAtMTMyLDcgKzEz
MSw2IEBACiAJCUJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNBMiAvKiBMYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRDdEMkY2MTE5MjEy
NzgwMDZEQjdFRSAvKiBUZXN0SW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXN0SW52b2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Q0Q3RDJGNzExOTIxMjc4MDA2REI3RUUgLyogVGVzdEludm9jYXRpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdEludm9jYXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlCQ0RBMkFCRTExOTBCNTFBMDBDM0JDNDcgLyogVGVzdEludm9j
YXRpb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0
SW52b2NhdGlvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNEQTJCOTkx
MTkxMDUxRjAwQzNCQzQ3IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBw
YXRoID0gSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCkBAIC0yNzAs
NyArMjY4LDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDNzkzM0ZGMTE4RjdDODQwMDVFQThF
MiAvKiBtYWluLm1tICovLAogCQkJCUJDNzkzNEU3MTE5MDY4NDYwMDVFQThFMiAvKiBQbGF0Zm9y
bVdlYlZpZXdNYWMubW0gKi8sCi0JCQkJQkNEQTJBQkUxMTkwQjUxQTAwQzNCQzQ3IC8qIFRlc3RJ
bnZvY2F0aW9uTWFjLm1tICovLAogCQkJCUJDOEM3OTVCMTFEMjc4NUQwMDQ1MzVBMSAvKiBUZXN0
Q29udHJvbGxlck1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwpAQCAtNDI2LDcgKzQy
Myw2IEBACiAJCQkJQkM3OTM0MDAxMThGN0M4NDAwNUVBOEUyIC8qIG1haW4ubW0gaW4gU291cmNl
cyAqLywKIAkJCQlCQzc5MzQzMTExOEY3RjE5MDA1RUE4RTIgLyogVGVzdENvbnRyb2xsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3OTM0RTgxMTkwNjg0NjAwNUVBOEUyIC8qIFBsYXRmb3Jt
V2ViVmlld01hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUJDREEyQUJGMTE5MEI1MUEwMEMzQkM0
NyAvKiBUZXN0SW52b2NhdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRDdEMkY4MTE5
MjEyNzgwMDZEQjdFRSAvKiBUZXN0SW52b2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzhDNzk1QzExRDI3ODVEMDA0NTM1QTEgLyogVGVzdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCSk7CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0
Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gNjUwODYpCisrKyBXZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDUsNCArNDUsMTAgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRl
c3RQbHVnaQogICAgIG1fdGVzdFBsdWdpbkRpcmVjdG9yeS5hZG9wdChXS1N0cmluZ0NyZWF0ZVdp
dGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVQYXRo
XSkpOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpydW5VbnRpbChib29sJiBkb25lKQorewor
ICAgIHdoaWxlICghZG9uZSkKKyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1
bk1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1
cmVdXTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRU
ZXN0UnVubmVyL21hYy9UZXN0SW52b2NhdGlvbk1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0SW52b2NhdGlvbk1hYy5tbQkocmV2aXNpb24g
NjUwODYpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0SW52b2NhdGlv
bk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwzNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCi0KLW5hbWVzcGFjZSBXVFIgewotCi12b2lkIFRlc3RJ
bnZvY2F0aW9uOjpydW5VbnRpbChib29sJiBkb25lKQotewotICAgIHdoaWxlICghZG9uZSkKLSAg
ICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6TlNEZWZhdWx0UnVuTG9v
cE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1cmVdXTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29u
dHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci93aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiA2NTA4NikKKysrIFdlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTEzLDQgKzExMywxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXpl
VGVzdFBsdWdpCiAgICAgbV90ZXN0UGx1Z2luRGlyZWN0b3J5LmFkb3B0KFdLU3RyaW5nQ3JlYXRl
V2l0aENGU3RyaW5nKHRlc3RQbHVnaW5EaXJlY3RvcnlQYXRoLmdldCgpKSk7CiB9CiAKK3ZvaWQg
VGVzdENvbnRyb2xsZXI6OnJ1blVudGlsKGJvb2wmIGRvbmUpCit7CisgICAgd2hpbGUgKCFkb25l
KSB7CisgICAgICAgIE1TRyBtc2c7CisgICAgICAgIEJPT0wgcmVzdWx0ID0gR2V0TWVzc2FnZSgm
bXNnLCAwLCAwLCAwKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKyAgICAgICAgRGlzcGF0Y2hN
ZXNzYWdlKCZtc2cpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJL
aXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbldpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9jYXRpb25X
aW4uY3BwCShyZXZpc2lvbiA2NTA4NikKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
d2luL1Rlc3RJbnZvY2F0aW9uV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCi0KLW5hbWVzcGFjZSBX
VFIgewotCi12b2lkIFRlc3RJbnZvY2F0aW9uOjpydW5VbnRpbChib29sJiBkb25lKQotewotICAg
IHdoaWxlICghZG9uZSkgewotICAgICAgICBNU0cgbXNnOwotICAgICAgICBCT09MIHJlc3VsdCA9
IEdldE1lc3NhZ2UoJm1zZywgMCwgMCwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gLTEpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UoJm1zZyk7Ci0gICAg
ICAgIERpc3BhdGNoTWVzc2FnZSgmbXNnKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdU
UgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vV2ViS2l0VGVzdFJ1bm5l
ci52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4v
V2ViS2l0VGVzdFJ1bm5lci52Y3Byb2oJKHJldmlzaW9uIDY1MDg2KQorKysgV2ViS2l0VG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci93aW4vV2ViS2l0VGVzdFJ1bm5lci52Y3Byb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTMxNywxMCArMzE3LDYgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cVGVzdENvbnRyb2xs
ZXJXaW4uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZl
UGF0aD0iLlxUZXN0SW52b2NhdGlvbldpbi5jcHAiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQogCQk8
L0ZpbHRlcj4NCiAJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0Zm9ybVdlYlZpZXcu
aCINCg==
</data>
<flag name="review"
          id="52690"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64188</attachid>
            <date>2010-08-11 23:08:32 -0700</date>
            <delta_ts>2010-08-11 23:10:39 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>doit.diff</filename>
            <type>text/plain</type>
            <size>33589</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY1MjE3KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNzIgQEAKKzIwMTAtMDgtMTEgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZWJLaXRUZXN0UnVubmVyIHNob3VsZCBiZSBtb3JlIGFnZ3Jlc3NpdmUgYWJvdXQgZW5z
dXJpbmcgY29uc2lzdGVudCBzdGF0ZSBiZXR3ZWVuIHRlc3RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzY1MworCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlOjpJbmplY3RlZEJ1bmRsZSk6CisgICAgICAgIChXVFI6OkluamVjdGVk
QnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
OjpiZWdpblRlc3RpbmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZG9uZSk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5o
OgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6aXNUZXN0UnVubmluZyk6CisgICAgICAg
IChXVFI6OkluamVjdGVkQnVuZGxlOjopOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcDoKKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjpzdG9wTG9hZGluZyk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlUGFnZTo6ZHVtcCk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAgICAgKFdUUjo6SW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFtZSk6CisgICAgICAgIChXVFI6Oklu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZSk6CisgICAgICAgIChXVFI6
OkluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUpOgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKToK
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dCk6
CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVy
dCk6CisgICAgICAgIChXVFI6OkluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRD
b25maXJtKToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVk
aXRpbmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRp
bmcpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUp
OgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleHQpOgor
ICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJhbmdlKToKKyAg
ICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdl
KToKKyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRBcHBseVN0eWxlKToK
KyAgICAgICAgKFdUUjo6SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcpOgorICAg
ICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcpOgorICAgICAgICAo
V1RSOjpJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZSk6CisgICAgICAgIChXVFI6OkluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKToKKyAgICAgICAgRG9uJ3QgZG8gYW55
IHdvcmsgaWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgcnVubmluZyBhIHRlc3QuCisKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6CisgICAgICAgIChX
VFI6OnRvQ0YpOgorICAgICAgICBBZGQgY29udmVyc2lvbiBmdW5jdGlvbiBmb3IgV0tVUkxSZWYg
LT4gQ0ZVUkxSZWYKKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6VGVzdENvbnRyb2xsZXIpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnJ1blRlc3QpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmg6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjopOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpU
ZXN0SW52b2NhdGlvbjo6aW52b2tlKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJ
bnZvY2F0aW9uLmg6CisgICAgICAgIE1vdmUgcmVzZXR0aW5nIGNvZGUgdG8gVGVzdENvbnRyb2xs
ZXIuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0
Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blVudGls
KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0SW52b2NhdGlvbk1hYy5tbTog
UmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0Q29udHJvbGxlcldp
bi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpydW5VbnRpbCk6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVzdEludm9jYXRpb25XaW4uY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvd2luL1dlYktpdFRlc3RSdW5uZXIudmNwcm9qOgor
ICAgICAgICBNb3ZlIHJ1blVudGlsIHRvIFRlc3RDb250cm9sbGVyLgorCiAyMDEwLTA4LTExICBL
ZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
aW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
U3RyaW5nRnVuY3Rpb25zLmgJKHJldmlzaW9uIDY1MjE0KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIs
MTYgQEAgaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdG9DRihXS1N0cgogICAgIHJldHVy
biBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+KEFkb3B0Q0YsIFdLU3RyaW5nQ29weUNGU3RyaW5nKDAs
IHN0cmluZykpOwogfQogCitpbmxpbmUgUmV0YWluUHRyPENGVVJMUmVmPiB0b0NGKFdLVVJMUmVm
IHVybCkKK3sKKyAgICByZXR1cm4gUmV0YWluUHRyPENGVVJMUmVmPihBZG9wdENGLCBXS1VSTENv
cHlDRlVSTCgwLCB1cmwpKTsKK30KKworaW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4gdG9DRihj
b25zdCBXS1JldGFpblB0cjxXS1VSTFJlZj4mIHVybCkKK3sKKyAgICByZXR1cm4gdG9DRih1cmwu
Z2V0KCkpOworfQorCiBpbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soSlNTdHJp
bmdSZWYgc3RyaW5nKQogewogICAgIHJldHVybiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcodG9DRihzdHJpbmcpLmdldCgpKSk7Cklu
ZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gNjUyMTQpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsMTAgQEAKICNpbmNsdWRl
ICJUZXN0Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCisjaW5j
bHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKICNp
bmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dFByaXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dL
UHJlZmVyZW5jZXNQcml2YXRlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFt
ZXNwYWNlIFdUUiB7CkBAIC00NSw2ICs0Nyw4IEBAIFRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJv
bGxlcihpbnQgYXJnYywKICAgICAsIG1fdmVyYm9zZShmYWxzZSkKICAgICAsIG1fcHJpbnRTZXBh
cmF0b3JzKGZhbHNlKQogICAgICwgbV91c2luZ1NlcnZlck1vZGUoZmFsc2UpCisgICAgLCBtX3N0
YXRlKEluaXRpYWwpCisgICAgLCBtX2RvbmVSZXNldHRpbmcoZmFsc2UpCiB7CiAgICAgaW5pdGlh
bGl6ZShhcmdjLCBhcmd2KTsKICAgICBjb250cm9sbGVyID0gdGhpczsKQEAgLTE0MywxMCArMTQ3
LDU1IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MKICAgICAgICAg
MAogICAgIH07CiAgICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KG1fbWFpbldlYlZpZXctPnBhZ2Uo
KSwgJnBhZ2VVSUNsaWVudCk7CisKKyAgICBXS1BhZ2VMb2FkZXJDbGllbnQgcGFnZUxvYWRlckNs
aWVudCA9IHsKKyAgICAgICAgMCwKKyAgICAgICAgdGhpcywKKyAgICAgICAgMCwKKyAgICAgICAg
MCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgZGlkRmluaXNoTG9hZEZvckZyYW1l
LAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAg
ICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAg
ICAgICAwLAorICAgICAgICAwCisgICAgfTsKKyAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50
KG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgJnBhZ2VMb2FkZXJDbGllbnQpOworfQorCit2b2lkIFRl
c3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkKK3sKKyAgICBtX3N0
YXRlID0gUmVzZXR0aW5nOworCisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFs
c28gZW5zdXJlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgcGFnZSBvcGVuLgorCisgICAgLy8gUmVz
ZXQgcHJlZmVyZW5jZXMKKyAgICBXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzID0gV0tDb250
ZXh0R2V0UHJlZmVyZW5jZXMobV9jb250ZXh0LmdldCgpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0Rm9udFNtb290aGluZ0xldmVsKHByZWZlcmVuY2VzLCBrV0tGb250
U21vb3RoaW5nTGV2ZWxOb1N1YnBpeGVsQW50aUFsaWFzaW5nKTsKKworICAgIC8vIFJlc2V0IG1h
aW4gcGFnZSBiYWNrIHRvIGFib3V0OmJsYW5rCisgICAgbV9kb25lUmVzZXR0aW5nID0gZmFsc2U7
CisgICAgbV9yZXNldFJlc3VsdGVkSW5FcnJvciA9IGZhbHNlOworCisgICAgV0tSZXRhaW5QdHI8
V0tVUkxSZWY+IHVybChBZG9wdFdLLCBjcmVhdGVXS1VSTCgiYWJvdXQ6YmxhbmsiKSk7CisgICAg
V0tQYWdlTG9hZFVSTChtX21haW5XZWJWaWV3LT5wYWdlKCksIHVybC5nZXQoKSk7CisgICAgVGVz
dENvbnRyb2xsZXI6OnJ1blVudGlsKG1fZG9uZVJlc2V0dGluZyk7CiB9CiAKIHZvaWQgVGVzdENv
bnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdGVzdCkKIHsKKyAgICByZXNldFN0YXRlVG9D
b25zaXN0ZW50VmFsdWVzKCk7CisKKyAgICBtX3N0YXRlID0gUnVubmluZ1Rlc3Q7CiAgICAgbV9j
dXJyZW50SW52b2NhdGlvbi5zZXQobmV3IFRlc3RJbnZvY2F0aW9uKHRlc3QpKTsKICAgICBtX2N1
cnJlbnRJbnZvY2F0aW9uLT5pbnZva2UoKTsKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLmNsZWFy
KCk7CkBAIC0xNzcsNiArMjI2LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cnVuKCkKICAgICB9
CiB9CiAKKy8vIFdLQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50CisKIHZvaWQgVGVzdENvbnRy
b2xsZXI6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiBj
b250ZXh0LCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBj
b25zdCB2b2lkICpjbGllbnRJbmZvKQogewogICAgIHN0YXRpY19jYXN0PFRlc3RDb250cm9sbGVy
Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkpOwpAQCAtMTg3LDQgKzIzOCwy
OCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlTWVzc2FnZUZyCiAgICAgbV9jdXJy
ZW50SW52b2NhdGlvbi0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUobWVzc2Fn
ZU5hbWUsIG1lc3NhZ2VCb2R5KTsKIH0KIAorLy8gV0tQYWdlTG9hZGVyQ2xpZW50CisKK3ZvaWQg
VGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBzdGF0aWNfY2Fz
dDxUZXN0Q29udHJvbGxlcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKS0+ZGlkRmlu
aXNoTG9hZEZvckZyYW1lKHBhZ2UsIGZyYW1lKTsKK30KKwordm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lKQor
eworICAgIGlmIChtX3N0YXRlICE9IFJlc2V0dGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBX
S1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwoQWRvcHRXSywgV0tGcmFtZUNvcHlVUkwoZnJhbWUp
KTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMPSB0b0NGKHdrVVJMKTsKKyAgICBDRlN0
cmluZ1JlZiBjZlVSTFN0cmluZyA9IENGVVJMR2V0U3RyaW5nKGNmVVJMLmdldCgpKTsKKyAgICBp
ZiAoIUNGRXF1YWwoY2ZVUkxTdHJpbmcsIENGU1RSKCJhYm91dDpibGFuayIpKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbV9kb25lUmVzZXR0aW5nID0gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCShyZXZpc2lvbiA2NTIxNCkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOSBAQCBwdWJsaWM6
CiAgICAgV0tQYWdlTmFtZXNwYWNlUmVmIHBhZ2VOYW1lc3BhY2UoKSB7IHJldHVybiBtX3BhZ2VO
YW1lc3BhY2UuZ2V0KCk7IH0KICAgICBXS0NvbnRleHRSZWYgY29udGV4dCgpIHsgcmV0dXJuIG1f
Y29udGV4dC5nZXQoKTsgfQogCisgICAgLy8gSGVscGVyCisgICAgc3RhdGljIHZvaWQgcnVuVW50
aWwoYm9vbCYgZG9uZSk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXplKGludCBhcmdj
LCBjb25zdCBjaGFyKiBhcmd2W10pOwogICAgIHZvaWQgcnVuKCk7CkBAIC02NCwxMCArNjcsMTcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBhdGgoKTsKICAg
ICB2b2lkIGluaXRpYWxpemVUZXN0UGx1Z2luRGlyZWN0b3J5KCk7CiAKKyAgICB2b2lkIHJlc2V0
U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKKwogICAgIC8vIFdLQ29udGV4dEluamVjdGVkQnVu
ZGxlQ2xpZW50CiAgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5
cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQqKTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYg
bWVzc2FnZUJvZHkpOwogCisgICAgLy8gV0tQYWdlTG9hZGVyQ2xpZW50CisgICAgc3RhdGljIHZv
aWQgZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1l
LCBjb25zdCB2b2lkKik7CisgICAgdm9pZCBkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tQYWdlUmVm
IHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUpOworCisKICAgICBPd25QdHI8VGVzdEludm9jYXRpb24+
IG1fY3VycmVudEludm9jYXRpb247CiAKICAgICBib29sIG1fZHVtcFBpeGVsczsKQEAgLTgxLDYg
KzkxLDE0IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFBsYXRmb3JtV2ViVmlldz4gbV9tYWluV2Vi
VmlldzsKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4dDsKICAgICBXS1Jl
dGFpblB0cjxXS1BhZ2VOYW1lc3BhY2VSZWY+IG1fcGFnZU5hbWVzcGFjZTsKKyAgICAKKyAgICBl
bnVtIFN0YXRlIHsKKyAgICAgICAgSW5pdGlhbCwKKyAgICAgICAgUmVzZXR0aW5nLAorICAgICAg
ICBSdW5uaW5nVGVzdAorICAgIH07CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBib29sIG1fZG9u
ZVJlc2V0dGluZzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHJldmlzaW9uIDY1MjE0
KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMu
aCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgPFdlYktpdDIvV0tDb250
ZXh0UHJpdmF0ZS5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogCkBAIC02NywyMyArNjYsMTUgQEAgc3RhdGljIHZvaWQgc2l6ZVdlYlZpZXdGb3JDdXJy
ZW50VGVzdChjaAogICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXco
KS0+cmVzaXplVG8obm9ybWFsV2lkdGgsIG5vcm1hbEhlaWdodCk7CiB9CiAKLXZvaWQgVGVzdElu
dm9jYXRpb246OnJlc2V0UHJlZmVyZW5jZXNUb0NvbnNpc3RlbnRWYWx1ZXMoKQotewotICAgIFdL
UHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMgPSBXS0NvbnRleHRHZXRQcmVmZXJlbmNlcyhUZXN0
Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpKTsKLSAgICBXS1ByZWZlcmVuY2VzU2V0T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHByZWZlcmVuY2VzLCB0cnVlKTsKLSAgICBX
S1ByZWZlcmVuY2VzU2V0Rm9udFNtb290aGluZ0xldmVsKHByZWZlcmVuY2VzLCBrV0tGb250U21v
b3RoaW5nTGV2ZWxOb1N1YnBpeGVsQW50aUFsaWFzaW5nKTsKLX0KLQogdm9pZCBUZXN0SW52b2Nh
dGlvbjo6aW52b2tlKCkKIHsKICAgICBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KG1fcGF0aE9y
VVJMKTsKLSAgICByZXNldFByZWZlcmVuY2VzVG9Db25zaXN0ZW50VmFsdWVzKCk7CiAKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIkJlZ2luVGVzdCIpKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5n
KENGU1RSKCIiKSkpOwogICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShU
ZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOwogCi0gICAgcnVuVW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UpOwor
ICAgIFRlc3RDb250cm9sbGVyOjpydW5VbnRpbChtX2dvdEluaXRpYWxSZXNwb25zZSk7CiAgICAg
aWYgKG1fZXJyb3IpIHsKICAgICAgICAgZHVtcCgiRkFJTFxuIik7CiAgICAgICAgIHJldHVybjsK
QEAgLTkxLDcgKzgyLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKIAogICAgIFdL
UGFnZUxvYWRVUkwoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgbV91cmwuZ2V0KCkpOwogCi0gICAgcnVuVW50aWwobV9nb3RGaW5hbE1lc3NhZ2UpOworICAg
IFRlc3RDb250cm9sbGVyOjpydW5VbnRpbChtX2dvdEZpbmFsTWVzc2FnZSk7CiAgICAgaWYgKG1f
ZXJyb3IpIHsKICAgICAgICAgZHVtcCgiRkFJTFxuIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmgJKHJldmlz
aW9uIDY1MjE0KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKik7CiAKLSAgICB2b2lkIHJlc2V0UHJlZmVyZW5jZXNU
b0NvbnNpc3RlbnRWYWx1ZXMoKTsKLQotICAgIC8vIEhlbHBlcgotICAgIHN0YXRpYyB2b2lkIHJ1
blVudGlsKGJvb2wmIGRvbmUpOwotCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1fdXJsOwog
ICAgIGNoYXIqIG1fcGF0aE9yVVJMOwogCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cAkocmV2aXNpb24gNjUyMTQpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDks
NyBAQCBJbmplY3RlZEJ1bmRsZSYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpCiBJbmplY3RlZEJ1
bmRsZTo6SW5qZWN0ZWRCdW5kbGUoKQogICAgIDogbV9idW5kbGUoMCkKICAgICAsIG1fbWFpblBh
Z2UoMCkKKyAgICAsIG1fc3RhdGUoSWRsZSkKIHsKIH0KIApAQCAtODQsMTcgKzg1LDYgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZShXS0J1bmRsZQogICAgIFdLQnVuZGxlQWN0aXZh
dGVNYWNGb250QXNjZW50SGFjayhtX2J1bmRsZSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6
OmRvbmUoKQotewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb25lTWVzc2FnZU5hbWUo
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIkRvbmUiKSkpOwotCi0g
ICAgc3RkOjpzdHJpbmcgb3V0cHV0ID0gbV9vdXRwdXRTdHJlYW0uc3RyKCk7Ci0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBvdXRwdXRDRlN0cmluZyhBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdp
dGhDU3RyaW5nKDAsIG91dHB1dC5jX3N0cigpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZG9uZU1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aENGU3RyaW5nKG91dHB1dENGU3RyaW5nLmdldCgpKSk7Ci0KLSAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCBkb25lTWVzc2FnZU5hbWUuZ2V0KCksIGRvbmVNZXNz
YWdlQm9keS5nZXQoKSk7Ci19Ci0KIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZENyZWF0ZVBhZ2Uo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UpCiB7CiAgICAgLy8gRklYTUU6IHdlIHJlYWxseSBuZWVkIHRo
ZSBtYWluIHBhZ2UgcmVmIHRvIGJlIHNlbnQgb3ZlciBmcm9tIHRoZSB1aSBwcm9jZXNzCkBAIC0x
MjEsNyArMTExLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoVwog
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZUJvZHkoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIkJlZ2luVGVzdCIpKSk7CiAgICAgICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UobV9idW5kbGUsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBhY2tN
ZXNzYWdlQm9keS5nZXQoKSk7CiAKLSAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgYmVnaW5UZXN0
aW5nKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMCw4ICsxMjAsMTAgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoVwogICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UobV9idW5kbGUsIGVycm9yTWVzc2FnZU5hbWUuZ2V0KCksIGVycm9yTWVzc2FnZUJvZHku
Z2V0KCkpOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlOjpyZXNldCgpCit2b2lkIEluamVjdGVk
QnVuZGxlOjpiZWdpblRlc3RpbmcoKQogeworICAgIG1fc3RhdGUgPSBUZXN0aW5nOworCiAgICAg
bV9vdXRwdXRTdHJlYW0uc3RyKCIiKTsKIAogICAgIG1fbGF5b3V0VGVzdENvbnRyb2xsZXIgPSBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y3JlYXRlKCk7CkBAIC0xNDQsNiArMTM2LDIxIEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OnJlc2V0KCkKICAgICBtX21haW5QYWdlLT5yZXNldCgpOwogfQogCit2
b2lkIEluamVjdGVkQnVuZGxlOjpkb25lKCkKK3sKKyAgICBtX21haW5QYWdlLT5zdG9wTG9hZGlu
ZygpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRvbmVNZXNzYWdlTmFtZShBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlNUUigiRG9uZSIpKSk7CisKKyAgICBz
dGQ6OnN0cmluZyBvdXRwdXQgPSBtX291dHB1dFN0cmVhbS5zdHIoKTsKKyAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IG91dHB1dENGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENT
dHJpbmcoMCwgb3V0cHV0LmNfc3RyKCksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkpOworICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBkb25lTWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoQ0ZTdHJpbmcob3V0cHV0Q0ZTdHJpbmcuZ2V0KCkpKTsKKworICAgIFdLQnVuZGxl
UG9zdE1lc3NhZ2UobV9idW5kbGUsIGRvbmVNZXNzYWdlTmFtZS5nZXQoKSwgZG9uZU1lc3NhZ2VC
b2R5LmdldCgpKTsKKworICAgIG1fc3RhdGUgPSBJZGxlOworfQorCiB2b2lkIEluamVjdGVkQnVu
ZGxlOjpjbG9zZU90aGVyUGFnZXMoKQogewogICAgIFZlY3RvcjxXS0J1bmRsZVBhZ2VSZWY+IHBh
Z2VzOwpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAkocmV2aXNpb24gNjUyMTQpCisrKyBX
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDggQEAgcHVibGljOgogICAgIHZvaWQgZG9u
ZSgpOwogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSYgb3MoKSB7IHJldHVybiBtX291dHB1dFN0cmVh
bTsgfQogCisgICAgYm9vbCBpc1Rlc3RSdW5uaW5nKCkgeyByZXR1cm4gbV9zdGF0ZSA9PSBUZXN0
aW5nOyB9CisKIHByaXZhdGU6CiAgICAgSW5qZWN0ZWRCdW5kbGUoKTsKICAgICB+SW5qZWN0ZWRC
dW5kbGUoKTsKQEAgLTczLDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxEZXN0cm95
UGFnZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSk7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KTsKIAotICAgIHZv
aWQgcmVzZXQoKTsKKyAgICB2b2lkIGJlZ2luVGVzdGluZygpOwogCiAgICAgV0tCdW5kbGVSZWYg
bV9idW5kbGU7CiAgICAgSGFzaE1hcDxXS0J1bmRsZVBhZ2VSZWYsIEluamVjdGVkQnVuZGxlUGFn
ZSo+IG1fb3RoZXJQYWdlczsKQEAgLTg0LDYgKzg2LDEyIEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI+IG1fZXZlbnRTZW5kaW5nQ29udHJvbGxlcjsKIAogICAg
IHN0ZDo6b3N0cmluZ3N0cmVhbSBtX291dHB1dFN0cmVhbTsKKyAgICAKKyAgICBlbnVtIFN0YXRl
IHsKKyAgICAgICAgSWRsZSwKKyAgICAgICAgVGVzdGluZworICAgIH07CisgICAgU3RhdGUgbV9z
dGF0ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlLmNwcAkocmV2aXNpb24gNjUyMTQpCisrKyBXZWJLaXRUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Nyw2ICsxNDcsMTIgQEAgSW5qZWN0ZWRCdW5kbGVQYWdlOjp+SW5qZWN0ZWRC
dW5kbGVQYWdlKAogewogfQogCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6c3RvcExvYWRpbmco
KQoreworICAgIFdLQnVuZGxlUGFnZVN0b3BMb2FkaW5nKG1fcGFnZSk7CisgICAgbV9pc0xvYWRp
bmcgPSBmYWxzZTsKK30KKwogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnJlc2V0KCkKIHsKICAg
ICBXS0J1bmRsZVBhZ2VDbGVhck1haW5GcmFtZU5hbWUobV9wYWdlKTsKQEAgLTIzNSw2ICsyNDEs
OSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUnVuSW5zZWN1cmVDCiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNU
ZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoZnJhbWUgPT0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSkpCiAgICAgICAgIG1faXNMb2FkaW5nID0gdHJ1ZTsK
IH0KQEAgLTMzMSw2ICszNDAsOCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcEFsbEZy
YW1lc1RlCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKIHsKKyAgICBBU1NFUlQo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSk7CisKICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+aW52YWxpZGF0ZVdhaXRU
b0R1bXBXYXRjaGRvZygpOwogCiAgICAgc3dpdGNoIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
bGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+d2hhdFRvRHVtcCgpKSB7CkBAIC0zNTcsNiArMzY4LDkg
QEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Cisg
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAg
ICByZXR1cm47CisKICAgICBpZiAoIVdLQnVuZGxlRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMzczLDYgKzM4Nyw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRGaW5pc2hMb2FkRm8KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxM
b2FkV2l0aEVycm9yRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKKyAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGlmICghV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0zODYsNiArNDAzLDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZEZhaWxMb2FkV2l0aAogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxl
Rm9yRnJhbWUoV0tTdHJpbmdSZWYgdGl0bGUsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Cisg
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAg
ICByZXR1cm47CisKICAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0
Q29udHJvbGxlcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMzk0LDYgKzQxNCw5IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZl
VGl0bGUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIHdpbmRvdykKIHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rl
c3RSdW5uaW5nKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9u
ID0gMDsKICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIo
KS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwogICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5nY0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChj
b250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwpAQCAtNDE0LDYgKzQzNyw5IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VMb2NhdGkKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUp
CiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQor
ICAgICAgICByZXR1cm47CisKICAgICB1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMg
PSBXS0J1bmRsZUZyYW1lR2V0UGVuZGluZ1VubG9hZENvdW50KGZyYW1lKTsKICAgICBpZiAocGVu
ZGluZ0ZyYW1lVW5sb2FkRXZlbnRzKQogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
b3MoKSA8PCBmcmFtZSA8PCAiIC0gaGFzICIgPDwgcGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzIDw8
ICIgb251bmxvYWQgaGFuZGxlcihzKVxuIjsKQEAgLTQ2MCwxMiArNDg2LDE4IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmkKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIHVpbnQzMl90
IGxpbmVOdW1iZXIpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0
UnVubmluZygpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBGSVhNRTogU3RyaXAgZmlsZTog
dXJscy4KICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiQ09OU09MRSBNRVNT
QUdFOiBsaW5lICIgPDwgbGluZU51bWJlciA8PCAiOiAiIDw8IG1lc3NhZ2UgPDwgIlxuIjsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYXJUZXh0KFdLU3RyaW5n
UmVmIHN0YXR1c2JhclRleHQpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
aXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wU3RhdHVzQ2Fs
bGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDc0LDExICs1MDYsMTcgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNiYQogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRs
ZUZyYW1lUmVmKQogeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1
bm5pbmcoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm9zKCkgPDwgIkFMRVJUOiAiIDw8IG1lc3NhZ2UgPDwgIlxuIjsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0Q29uZmlybShXS1N0cmluZ1JlZiBtZXNzYWdl
LCBXS0J1bmRsZUZyYW1lUmVmKQogeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmlzVGVzdFJ1bm5pbmcoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm9zKCkgPDwgIkNPTkZJUk06ICIgPDwgbWVzc2FnZSA8PCAiXG4iOwogfQogCkBA
IC01NDYsNiArNTg0LDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVj
dAogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKFdLQnVuZGxl
UmFuZ2VSZWYgcmFuZ2UpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNU
ZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6IiA8PCByYW5nZSA8
PCAiXG4iOwogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENv
bnRyb2xsZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CkBAIC01NTMsNiArNTk0LDkgQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdAogCiBib29sIEluamVjdGVkQnVu
ZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyhXS0J1bmRsZVJhbmdlUmVmIHJhbmdlKQogeworICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRl
c3RDb250cm9sbGVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRF
bmRFZGl0aW5nSW5ET01SYW5nZToiIDw8IHJhbmdlIDw8ICJcbiI7CiAgICAgcmV0dXJuIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGRBbGxvd0Vk
aXRpbmcoKTsKQEAgLTU2MCw2ICs2MDQsOSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkRW5kRWRpdGluCiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2Rl
KFdLQnVuZGxlTm9kZVJlZiBub2RlLCBXS0J1bmRsZVJhbmdlUmVmIHJhbmdlVG9SZXBsYWNlLCBX
S0luc2VydEFjdGlvblR5cGUgYWN0aW9uKQogeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBzdGF0
aWMgY29uc3QgY2hhciogaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CiAgICAgICAgICJXZWJWaWV3
SW5zZXJ0QWN0aW9uVHlwZWQiLAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblBhc3RlZCIs
CkBAIC01NzMsNiArNjIwLDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2Vy
dE5vZAogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmlu
Z1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlv
blR5cGUgYWN0aW9uKQogeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBzdGF0aWMgY29uc3QgY2hh
ciAqaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CiAgICAgICAgICJXZWJWaWV3SW5zZXJ0QWN0aW9u
VHlwZWQiLAogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvblBhc3RlZCIsCkBAIC01ODYsNiAr
NjM2LDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleAogCiBib29s
IEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRGVsZXRlUmFuZ2UoV0tCdW5kbGVSYW5nZVJlZiBy
YW5nZSkKIHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5n
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5sYXlvdXRUZXN0Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KQogICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxF
R0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6IiA8PCByYW5nZSA8PCAiXG4iOwogICAgIHJldHVy
biBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxk
QWxsb3dFZGl0aW5nKCk7CkBAIC01OTMsNiArNjQ2LDkgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZERlbGV0ZVJhbgogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlUmVmIGZyb21SYW5nZSwgV0tCdW5kbGVSYW5n
ZVJlZiB0b1JhbmdlLCBXS0FmZmluaXR5VHlwZSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGlu
ZykKIHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmFmZmluaXR5
c3RyaW5nW10gPSB7CiAgICAgICAgICJOU1NlbGVjdGlvbkFmZmluaXR5VXBzdHJlYW0iLAogICAg
ICAgICAiTlNTZWxlY3Rpb25BZmZpbml0eURvd25zdHJlYW0iCkBAIC02MDksNiArNjY1LDkgQEAg
Ym9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbAogCiBib29sIEluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkQXBwbHlTdHlsZShXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25S
ZWYgc3R5bGUsIFdLQnVuZGxlUmFuZ2VSZWYgcmFuZ2UpCiB7CisgICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwog
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+
c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6IiA8PCBz
dHlsZSA8PCAiIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIgPDwgcmFuZ2UgPDwgIlxuIjsKICAgICBy
ZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVyKCktPnNo
b3VsZEFsbG93RWRpdGluZygpOwpAQCAtNjE2LDI3ICs2NzUsMzggQEAgYm9vbCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OnNob3VsZEFwcGx5U3R5bAogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
QmVnaW5FZGl0aW5nKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiB7CisgICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgICAgICByZXR1cm47
CisKICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmxheW91dFRlc3RDb250cm9sbGVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vcygpIDw8ICJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0
aW5nOiIgPDwgbm90aWZpY2F0aW9uTmFtZSA8PCAiXG4iOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1lKQogewor
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworCiAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5sYXlvdXRUZXN0
Q29udHJvbGxlcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3MoKSA8PCAiRURJVElORyBERUxFR0FURTogd2ViVmlld0Rp
ZEVuZEVkaXRpbmc6IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJcbiI7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkK
IHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkubGF5b3V0
VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRDaGFuZ2U6IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJcbiI7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZpY2F0
aW9uTmFtZSkKIHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5u
aW5nKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkubGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkK
ICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm9zKCkgPDwgIkVESVRJTkcgREVMRUdB
VEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246IiA8PCBub3RpZmljYXRpb25OYW1lIDw8ICJc
biI7CiB9CiAKLQogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGVQYWdlLmgJKHJldmlzaW9uIDY1MjE0KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCBwdWJsaWM6CiAgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UoKSBjb25z
dCB7IHJldHVybiBtX3BhZ2U7IH0KICAgICB2b2lkIGR1bXAoKTsKIAorICAgIHZvaWQgc3RvcExv
YWRpbmcoKTsKICAgICBib29sIGlzTG9hZGluZygpIHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CiAK
ICAgICB2b2lkIHJlc2V0KCk7CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gNjUyMTQpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0
UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNiBAQAogCQlCQ0M5OTdBNTExRDNDOEY2MDAxN0JDQTIgLyog
SW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQzk5N0EyMTFEM0M4RjYwMDE3QkNBMiAvKiBJbmplY3RlZEJ1bmRsZVBh
Z2UuY3BwICovOyB9OwogCQlCQ0M5OTgxODExRDNGNTFFMDAxN0JDQTIgLyogTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNDOTk4MTcxMUQzRjUxRTAwMTdCQ0EyIC8qIExheW91dFRlc3RDb250cm9sbGVyLmNwcCAq
LzsgfTsKIAkJQkNEN0QyRjgxMTkyMTI3ODAwNkRCN0VFIC8qIFRlc3RJbnZvY2F0aW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRDdEMkY3MTE5
MjEyNzgwMDZEQjdFRSAvKiBUZXN0SW52b2NhdGlvbi5jcHAgKi87IH07Ci0JCUJDREEyQUJGMTE5
MEI1MUEwMEMzQkM0NyAvKiBUZXN0SW52b2NhdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDREEyQUJFMTE5MEI1MUEwMEMzQkM0NyAvKiBU
ZXN0SW52b2NhdGlvbk1hYy5tbSAqLzsgfTsKIAkJQkNEQTJCOUExMTkxMDUxRjAwQzNCQzQ3IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDREEyQjk5MTE5MTA1MUYwMEMzQkM0NyAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIApA
QCAtMTMyLDcgKzEzMSw2IEBACiAJCUJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNBMiAvKiBMYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBM
YXlvdXRUZXN0Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
RDdEMkY2MTE5MjEyNzgwMDZEQjdFRSAvKiBUZXN0SW52b2NhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXN0SW52b2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0Q3RDJGNzExOTIxMjc4MDA2REI3RUUgLyogVGVzdEludm9jYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGVzdEludm9jYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0RBMkFCRTExOTBCNTFBMDBDM0JDNDcg
LyogVGVzdEludm9jYXRpb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBUZXN0SW52b2NhdGlvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkNEQTJCOTkxMTkxMDUxRjAwQzNCQzQ3IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIu
ZnJhbWV3b3JrOyBwYXRoID0gSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAq
LwogCkBAIC0yNzAsNyArMjY4LDYgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUJDNzkzM0ZGMTE4
RjdDODQwMDVFQThFMiAvKiBtYWluLm1tICovLAogCQkJCUJDNzkzNEU3MTE5MDY4NDYwMDVFQThF
MiAvKiBQbGF0Zm9ybVdlYlZpZXdNYWMubW0gKi8sCi0JCQkJQkNEQTJBQkUxMTkwQjUxQTAwQzNC
QzQ3IC8qIFRlc3RJbnZvY2F0aW9uTWFjLm1tICovLAogCQkJCUJDOEM3OTVCMTFEMjc4NUQwMDQ1
MzVBMSAvKiBUZXN0Q29udHJvbGxlck1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwpA
QCAtNDI2LDcgKzQyMyw2IEBACiAJCQkJQkM3OTM0MDAxMThGN0M4NDAwNUVBOEUyIC8qIG1haW4u
bW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzc5MzQzMTExOEY3RjE5MDA1RUE4RTIgLyogVGVzdENv
bnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM3OTM0RTgxMTkwNjg0NjAwNUVBOEUy
IC8qIFBsYXRmb3JtV2ViVmlld01hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUJDREEyQUJGMTE5
MEI1MUEwMEMzQkM0NyAvKiBUZXN0SW52b2NhdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRDdEMkY4MTE5MjEyNzgwMDZEQjdFRSAvKiBUZXN0SW52b2NhdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzhDNzk1QzExRDI3ODVEMDA0NTM1QTEgLyogVGVzdENvbnRyb2xsZXJNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCSk7CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9X
ZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gNjUyMTQp
CisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0Q29udHJvbGxlck1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDUsNCArNDUsMTAgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6
aW5pdGlhbGl6ZVRlc3RQbHVnaQogICAgIG1fdGVzdFBsdWdpbkRpcmVjdG9yeS5hZG9wdChXS1N0
cmluZ0NyZWF0ZVdpdGhDRlN0cmluZygoQ0ZTdHJpbmdSZWYpW1tOU0J1bmRsZSBtYWluQnVuZGxl
XSBidW5kbGVQYXRoXSkpOwogfQogCit2b2lkIFRlc3RDb250cm9sbGVyOjpydW5VbnRpbChib29s
JiBkb25lKQoreworICAgIHdoaWxlICghZG9uZSkKKyAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVu
dFJ1bkxvb3BdIHJ1bk1vZGU6TlNEZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRl
IGRpc3RhbnRGdXR1cmVdXTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0SW52b2NhdGlvbk1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9UZXN0SW52b2NhdGlvbk1hYy5t
bQkocmV2aXNpb24gNjUyMTQpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9U
ZXN0SW52b2NhdGlvbk1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwzNiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCi0KLW5hbWVzcGFjZSBXVFIgewot
Ci12b2lkIFRlc3RJbnZvY2F0aW9uOjpydW5VbnRpbChib29sJiBkb25lKQotewotICAgIHdoaWxl
ICghZG9uZSkKLSAgICAgICAgW1tOU1J1bkxvb3AgY3VycmVudFJ1bkxvb3BdIHJ1bk1vZGU6TlNE
ZWZhdWx0UnVuTG9vcE1vZGUgYmVmb3JlRGF0ZTpbTlNEYXRlIGRpc3RhbnRGdXR1cmVdXTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVy
L3dpbi9UZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci93aW4vVGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiA2NTIxNCkK
KysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1Rlc3RDb250cm9sbGVyV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDQgKzExMywxNiBAQCB2b2lkIFRlc3RDb250cm9sbGVy
Ojppbml0aWFsaXplVGVzdFBsdWdpCiAgICAgbV90ZXN0UGx1Z2luRGlyZWN0b3J5LmFkb3B0KFdL
U3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRlc3RQbHVnaW5EaXJlY3RvcnlQYXRoLmdldCgpKSk7
CiB9CiAKK3ZvaWQgVGVzdENvbnRyb2xsZXI6OnJ1blVudGlsKGJvb2wmIGRvbmUpCit7CisgICAg
d2hpbGUgKCFkb25lKSB7CisgICAgICAgIE1TRyBtc2c7CisgICAgICAgIEJPT0wgcmVzdWx0ID0g
R2V0TWVzc2FnZSgmbXNnLCAwLCAwLCAwKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgVHJhbnNsYXRlTWVzc2FnZSgmbXNnKTsKKyAgICAg
ICAgRGlzcGF0Y2hNZXNzYWdlKCZtc2cpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV1RS
CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9UZXN0SW52b2NhdGlvbldp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vVGVz
dEludm9jYXRpb25XaW4uY3BwCShyZXZpc2lvbiA2NTIxNCkKKysrIFdlYktpdFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvd2luL1Rlc3RJbnZvY2F0aW9uV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCi0K
LW5hbWVzcGFjZSBXVFIgewotCi12b2lkIFRlc3RJbnZvY2F0aW9uOjpydW5VbnRpbChib29sJiBk
b25lKQotewotICAgIHdoaWxlICghZG9uZSkgewotICAgICAgICBNU0cgbXNnOwotICAgICAgICBC
T09MIHJlc3VsdCA9IEdldE1lc3NhZ2UoJm1zZywgMCwgMCwgMCk7Ci0gICAgICAgIGlmIChyZXN1
bHQgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFRyYW5zbGF0ZU1lc3NhZ2Uo
Jm1zZyk7Ci0gICAgICAgIERpc3BhdGNoTWVzc2FnZSgmbXNnKTsKLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vV2Vi
S2l0VGVzdFJ1bm5lci52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci93aW4vV2ViS2l0VGVzdFJ1bm5lci52Y3Byb2oJKHJldmlzaW9uIDY1MjE0KQorKysg
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vV2ViS2l0VGVzdFJ1bm5lci52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTMxNywxMCArMzE3LDYgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5c
VGVzdENvbnRyb2xsZXJXaW4uY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQot
CQkJCVJlbGF0aXZlUGF0aD0iLlxUZXN0SW52b2NhdGlvbldpbi5jcHAiDQotCQkJCT4NCi0JCQk8
L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCiAJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlxQbGF0
Zm9ybVdlYlZpZXcuaCINCg==
</data>
<flag name="review"
          id="52701"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>