<?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>217870</bug_id>
          
          <creation_ts>2020-10-17 02:41:05 -0700</creation_ts>
          <short_desc>IPC testing API should have the capability to observe messages being sent and received</short_desc>
          <delta_ts>2020-10-22 12:16:24 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>mkwst</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1698934</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-17 02:41:05 -0700</bug_when>
    <thetext>IPC testing JS API should have the ability to intercept IPC messaging being sent and received in Web process.\

&lt;rdar://problem/70350874&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700091</commentid>
    <comment_count>1</comment_count>
      <attachid>411963</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-21 00:15:36 -0700</bug_when>
    <thetext>Created attachment 411963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700217</commentid>
    <comment_count>2</comment_count>
      <attachid>411963</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-21 09:18:35 -0700</bug_when>
    <thetext>Comment on attachment 411963
Patch

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

&gt; Source/WebKit/Platform/IPC/Connection.cpp:1044
&gt; +        if (hasDeadObservers)
&gt; +            m_messageObservers.removeAllMatching([](auto&amp; observer) { return !observer; });

Seems like we could use removeAllMatching to remove while iterating, and call didReceiveMessage on the ones we don’t remove instead of having two loops and a boolean.

&gt; Source/WebKit/Platform/IPC/JSIPCBinding.h:55
&gt; +    object-&gt;putDirect(vm, JSC::Identifier::fromString(vm, &quot;type&quot;_s), JSC::jsNontrivialString(vm, type));

What guarantees non-trivial for this string? Maybe these are always string constants. If so, consider making the argument ASCIILiteral instead of const String&amp;.

Even type could be ASCIILiteral instead of const String&amp;.

&gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:909
&gt; +    JSObjectCallAsFunction(m_context, m_callback, m_callback, WTF_ARRAY_LENGTH(arguments), arguments, nullptr);

Should be able to use std::size instead of WTF_ARRAY_LENGTH in new code. We can probably get rid of WTF_ARRAY_LENGTH.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:257
&gt; +    RetainPtr&lt;WKWebViewConfiguration&gt; configuration = adoptNS([[WKWebViewConfiguration alloc] init]);

auto?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:302
&gt; +    RetainPtr&lt;TestWKWebView&gt; webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 300, 300) configuration:configuration.get()]);

auto?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700474</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-21 17:03:42 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 411963 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411963&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/Platform/IPC/Connection.cpp:1044
&gt; &gt; +        if (hasDeadObservers)
&gt; &gt; +            m_messageObservers.removeAllMatching([](auto&amp; observer) { return !observer; });
&gt; 
&gt; Seems like we could use removeAllMatching to remove while iterating, and
&gt; call didReceiveMessage on the ones we don’t remove instead of having two
&gt; loops and a boolean.

Hm... that sounds a bit fishy given removeAllMatching could resize the buffer. I&apos;d rather separate the removal part after the loop where we don&apos;t have a pointer anymore.

&gt; &gt; Source/WebKit/Platform/IPC/JSIPCBinding.h:55
&gt; &gt; +    object-&gt;putDirect(vm, JSC::Identifier::fromString(vm, &quot;type&quot;_s), JSC::jsNontrivialString(vm, type));
&gt; 
&gt; What guarantees non-trivial for this string? Maybe these are always string
&gt; constants. If so, consider making the argument ASCIILiteral instead of const
&gt; String&amp;.

Yes.

&gt; Even type could be ASCIILiteral instead of const String&amp;.

Oh, I thought _s creates ASCIILiteral. I guess it directly creates String string instead. Good to know.

&gt; &gt; Source/WebKit/WebProcess/WebPage/IPCTestingAPI.cpp:909
&gt; &gt; +    JSObjectCallAsFunction(m_context, m_callback, m_callback, WTF_ARRAY_LENGTH(arguments), arguments, nullptr);
&gt; 
&gt; Should be able to use std::size instead of WTF_ARRAY_LENGTH in new code. We
&gt; can probably get rid of WTF_ARRAY_LENGTH.

Oh, that&apos;s a good point. Done.

&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/IPCTestingAPI.mm:257
&gt; &gt; +    RetainPtr&lt;WKWebViewConfiguration&gt; configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
&gt; 
&gt; auto?

Oh, actually, I should be using createWebViewWithIPCTestingAPI that I had recently added. Done that instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700493</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-21 17:41:52 -0700</bug_when>
    <thetext>Committed r268848: &lt;https://trac.webkit.org/changeset/268848&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700755</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-22 11:36:23 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700756</commentid>
    <comment_count>6</comment_count>
      <attachid>412118</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-22 11:36:24 -0700</bug_when>
    <thetext>Created attachment 412118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700758</commentid>
    <comment_count>7</comment_count>
      <attachid>412119</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-10-22 11:37:52 -0700</bug_when>
    <thetext>Created attachment 412119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700773</commentid>
    <comment_count>8</comment_count>
      <attachid>411963</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-22 12:14:19 -0700</bug_when>
    <thetext>Comment on attachment 411963
Patch

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

&gt;&gt;&gt; Source/WebKit/Platform/IPC/Connection.cpp:1044
&gt;&gt;&gt; +            m_messageObservers.removeAllMatching([](auto&amp; observer) { return !observer; });
&gt;&gt; 
&gt;&gt; Seems like we could use removeAllMatching to remove while iterating, and call didReceiveMessage on the ones we don’t remove instead of having two loops and a boolean.
&gt; 
&gt; Hm... that sounds a bit fishy given removeAllMatching could resize the buffer. I&apos;d rather separate the removal part after the loop where we don&apos;t have a pointer anymore.

No, I don’t agree.

Are you worried about didReceiveMessage calling out while iterating m_messageObservers and then m_messageObservers or this being changed out form under us? If so, then that’s *already* a problem in the code above, which needs to change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700774</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-10-22 12:15:47 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #3)
&gt; &gt; Even type could be ASCIILiteral instead of const String&amp;.
&gt; 
&gt; Oh, I thought _s creates ASCIILiteral. I guess it directly creates String
&gt; string instead. Good to know.

You were right, _s *does* create ASCIILiteral.

I meant that the argument named type could be ASCIILiteral. Yes, &quot;type&quot;_s already is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1700776</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-22 12:16:23 -0700</bug_when>
    <thetext>Committed r268883: &lt;https://trac.webkit.org/changeset/268883&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 412119.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411963</attachid>
            <date>2020-10-21 00:15:36 -0700</date>
            <delta_ts>2020-10-21 09:18:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217870-20201021001535.patch</filename>
            <type>text/plain</type>
            <size>31278</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDIwNzQ2YjM2ZDAwNmNjZDhh
MjE5NWJkNjdkZTRjNmIwZmNjMGIyOWIuLmM1OGFkODUxYjllOWM0ODc1Njg1ZWQ3MGY0MWI2NTli
YWE0ZDczMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMjAtMTAtMjAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJIHNob3Vs
ZCBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG9ic2VydmUgbWVzc2FnZXMgYmVpbmcgc2VudCBhbmQg
cmVjZWl2ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNzg3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIElQQy5hZGRJbmNvbWluZ01lc3NhZ2VMaXN0ZW5lciBhbmQgSVBDLmFkZE91dGdvaW5n
TWVzc2FnZUxpc3RlbmVyIHdoaWNoIGFsbG93cyBKYXZhU2NyaXB0CisgICAgICAgIHRvIG9ic2Vy
dmUgSVBDIG1lc3NhZ2VzIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQgYnkgV2ViQ29udGVudCBwcm9j
ZXNzLiBXZSB1c2UgdGhlIGdlbmVyYXRlZCBjb2RlCisgICAgICAgIGFkZGVkIGluIHIyNjg1MDMg
dG8gZGVjb2RlIHRoZSBJUEMgYXJndW1lbnRzLgorCisgICAgICAgIFRlc3RzOiBUZXN0V2ViS2l0
QVBJLklQQ1Rlc3RpbmdBUEkuQ2FuSW50ZXJjZXB0QWxlcnQKKyAgICAgICAgICAgICAgIFRlc3RX
ZWJLaXRBUEkuSVBDVGVzdGluZ0FQSS5DYW5JbnRlcmNlcHRIYXNTdG9yYWdlQWNjZXNzCisgICAg
ICAgICAgICAgICBUZXN0V2ViS2l0QVBJLklQQ1Rlc3RpbmdBUEkuQ2FuSW50ZXJjZXB0RmluZFN0
cmluZworCisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwOgorICAgICAgICAo
SVBDOjpDb25uZWN0aW9uOjpzZW5kTWVzc2FnZSk6IEFkZGVkIHRoZSBjb2RlIHRvIGludm9rZSBN
ZXNzYWdlT2JzZXJ2ZXI6OndpbGxTZW5kTWVzc2FnZS4KKyAgICAgICAgQWxzbyByZW1vdmUgYW55
IHN0YWxlIE1lc3NhZ2VPYnNlcnZlciBhcyBuZWRlZC4KKyAgICAgICAgKElQQzo6Q29ubmVjdGlv
bjo6YWRkTWVzc2FnZU9ic2VydmVyKTogQWRkZWQuCisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246
OmRpc3BhdGNoTWVzc2FnZSk6IEFkZGVkIHRoZSBjb2RlIHRvIGludm9rZSBNZXNzYWdlT2JzZXJ2
ZXI6OmRpZFJlY2VpdmVNZXNzYWdlLgorICAgICAgICBBbHNvIHJlbW92ZSBhbnkgc3RhbGUgTWVz
c2FnZU9ic2VydmVyIGFzIG5lZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9Db25uZWN0aW9u
Lmg6CisgICAgICAgIChJUEM6OkNvbm5lY3Rpb246Ok1lc3NhZ2VPYnNlcnZlcik6IEFkZGVkLiBB
IHB1cmUgdmlydHVhbCBpbnRlcmZhY2UgZm9yIG9ic2VydmluZyBJUEMgbWVzc2FnZXMuCisgICAg
ICAgICogUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5oOgorICAgICAgICAoSVBDOjpqc1ZhbHVl
Rm9yRGVjb2RlZFN0cmluZ0FyZ3VtZW50VmFsdWUpOiBFeHRyYWN0ZWQgZnJvbSBqc1ZhbHVlRm9y
RGVjb2RlZEFyZ3VtZW50VmFsdWU8U3RyaW5nPi4KKyAgICAgICAgTm93IHRha2VzIHRoZSB0eXBl
IG5hbWUgYXMgYW4gYXJndW1lbnQuCisgICAgICAgIChJUEM6OmpzVmFsdWVGb3JEZWNvZGVkQXJn
dW1lbnRWYWx1ZTxVUkw+KTogVXNlICJVUkwiIGFzIHRoZSB0eXBlIG5hbWUuCisgICAgICAgIChJ
UEM6OmpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZTxSZWdpc3RyYWJsZURvbWFpbj4pOiBV
c2UgIlJlZ2lzdHJhYmxlRG9tYWluIiBhcyB0aGUgdHlwZSBuYW1lLgorICAgICAgICAoSVBDOjpq
c1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWU8T3B0aW9uU2V0PFU+Pik6IEFkZGVkLiBTcGVj
aWFsaXphdGlvbnMgZm9yIE9wdGlvblNldDxVPgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNN
ZXNzYWdlTGlzdGVuZXIpOiBBZGRlZC4gSW1wbGVtZW50cyBJUEM6Ok1lc3NhZ2VPYnNlcnZlci4K
KyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNJUEM6OnN0YXRpY0Z1bmN0aW9ucyk6
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OmNyZWF0ZVR5cGVFcnJvcik6IE1vdmVk
LgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0aW5nQVBJOjpKU0lQQzo6YWRkTWVzc2FnZUxpc3Rl
bmVyKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTSVBDOjphZGRJ
bmNvbWluZ01lc3NhZ2VMaXN0ZW5lcik6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJUENUZXN0
aW5nQVBJOjpKU0lQQzo6YWRkT3V0Z29pbmdNZXNzYWdlTGlzdGVuZXIpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNNZXNzYWdlTGlzdGVuZXI6OkpTTWVzc2FnZUxp
c3RlbmVyKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTTWVzc2Fn
ZUxpc3RlbmVyOjpkaWRSZWNlaXZlTWVzc2FnZSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJ
UENUZXN0aW5nQVBJOjpKU01lc3NhZ2VMaXN0ZW5lcjo6d2lsbFNlbmRNZXNzYWdlKTogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OklQQ1Rlc3RpbmdBUEk6OkpTTWVzc2FnZUxpc3RlbmVyOjpqc0Rl
c2NyaXB0aW9uRnJvbURlY29kZXIpOiBBZGRlZC4KKwogMjAyMC0xMC0xNiAgSmlld2VuIFRhbiAg
PGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBdXRobl0gUmVtb3ZlIGV4cGVy
aW1lbnRhbCBmZWF0dXJlIGZsYWc6IFdlYkF1dGhlbnRpY2F0aW9uTG9jYWxBdXRoZW50aWNhdG9y
RW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9Db25uZWN0aW9uLmNwcAppbmRleCBj
OTc4YWM5YmE0OGI4MTQzZWY4NjdlNjM1MGQyYzgwM2Q4NTNjOGI0Li5kZTZmNTAxYjJkODU5NmM2
YmRhMDMyNWVmNTlmZTJmMDYxMzZiZDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Db25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9D
b25uZWN0aW9uLmNwcApAQCAtNDUzLDYgKzQ1MywyMCBAQCBib29sIENvbm5lY3Rpb246OnNlbmRN
ZXNzYWdlKHN0ZDo6dW5pcXVlX3B0cjxFbmNvZGVyPiBlbmNvZGVyLCBPcHRpb25TZXQ8U2VuZE9w
dAogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyNpZiBFTkFC
TEUoSVBDX1RFU1RJTkdfQVBJKQorICAgIGlmIChpc01haW5UaHJlYWQoKSkgeworICAgICAgICBi
b29sIGhhc0RlYWRPYnNlcnZlcnMgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBvYnNlcnZl
cldlYWtQdHIgOiBtX21lc3NhZ2VPYnNlcnZlcnMpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiBv
YnNlcnZlciA9IG9ic2VydmVyV2Vha1B0ci5nZXQoKSkKKyAgICAgICAgICAgICAgICBvYnNlcnZl
ci0+d2lsbFNlbmRNZXNzYWdlKCplbmNvZGVyLCBzZW5kT3B0aW9ucyk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgaGFzRGVhZE9ic2VydmVycyA9IHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGhhc0RlYWRPYnNlcnZlcnMpCisgICAgICAgICAgICBtX21lc3NhZ2VPYnNl
cnZlcnMucmVtb3ZlQWxsTWF0Y2hpbmcoW10oYXV0byYgb2JzZXJ2ZXIpIHsgcmV0dXJuICFvYnNl
cnZlcjsgfSk7CisgICAgfQorI2VuZGlmCisKICAgICBpZiAoaXNNYWluVGhyZWFkKCkgJiYgbV9p
bkRpc3BhdGNoTWVzc2FnZU1hcmtlZFRvVXNlRnVsbHlTeW5jaHJvbm91c01vZGVGb3JUZXN0aW5n
ICYmICFlbmNvZGVyLT5pc1N5bmNNZXNzYWdlKCkgJiYgIShlbmNvZGVyLT5tZXNzYWdlUmVjZWl2
ZXJOYW1lKCkgPT0gUmVjZWl2ZXJOYW1lOjpJUEMpICYmICFzZW5kT3B0aW9ucy5jb250YWlucyhT
ZW5kT3B0aW9uOjpJZ25vcmVGdWxseVN5bmNocm9ub3VzTW9kZSkpIHsKICAgICAgICAgdWludDY0
X3Qgc3luY1JlcXVlc3RJRDsKICAgICAgICAgYXV0byB3cmFwcGVkTWVzc2FnZSA9IGNyZWF0ZVN5
bmNNZXNzYWdlRW5jb2RlcihNZXNzYWdlTmFtZTo6V3JhcHBlZEFzeW5jTWVzc2FnZUZvclRlc3Rp
bmcsIGVuY29kZXItPmRlc3RpbmF0aW9uSUQoKSwgc3luY1JlcXVlc3RJRCk7CkBAIC00NjgsNiAr
NDgyLDkgQEAgYm9vbCBDb25uZWN0aW9uOjpzZW5kTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8RW5j
b2Rlcj4gZW5jb2RlciwgT3B0aW9uU2V0PFNlbmRPcHQKICAgICBlbHNlIGlmIChzZW5kT3B0aW9u
cy5jb250YWlucyhTZW5kT3B0aW9uOjpEaXNwYXRjaE1lc3NhZ2VFdmVuV2hlbldhaXRpbmdGb3JV
bmJvdW5kZWRTeW5jUmVwbHkpKQogICAgICAgICBlbmNvZGVyLT5zZXRTaG91bGREaXNwYXRjaE1l
c3NhZ2VXaGVuV2FpdGluZ0ZvclN5bmNSZXBseShTaG91bGREaXNwYXRjaFdoZW5XYWl0aW5nRm9y
U3luY1JlcGx5OjpZZXNEdXJpbmdVbmJvdW5kZWRJUEMpOwogCisjaWYgRU5BQkxFKElQQ19URVNU
SU5HX0FQSSkKKyNlbmRpZgorCiAgICAgewogICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fb3V0Z29pbmdNZXNzYWdlc011dGV4KTsKICAgICAgICAgbV9vdXRnb2luZ01lc3NhZ2VzLmFw
cGVuZChXVEZNb3ZlKGVuY29kZXIpKTsKQEAgLTgyMiw2ICs4MzksMTMgQEAgdm9pZCBDb25uZWN0
aW9uOjplbmFibGVJbmNvbWluZ01lc3NhZ2VzVGhyb3R0bGluZygpCiAgICAgbV9pbmNvbWluZ01l
c3NhZ2VzVGhyb3R0bGVyID0gbWFrZVVuaXF1ZTxNZXNzYWdlc1Rocm90dGxlcj4oKnRoaXMsICZD
b25uZWN0aW9uOjpkaXNwYXRjaEluY29taW5nTWVzc2FnZXMpOwogfQogCisjaWYgRU5BQkxFKElQ
Q19URVNUSU5HX0FQSSkKK3ZvaWQgQ29ubmVjdGlvbjo6YWRkTWVzc2FnZU9ic2VydmVyKGNvbnN0
IE1lc3NhZ2VPYnNlcnZlciYgb2JzZXJ2ZXIpCit7CisgICAgbV9tZXNzYWdlT2JzZXJ2ZXJzLmFw
cGVuZChtYWtlV2Vha1B0cihvYnNlcnZlcikpOworfQorI2VuZGlmCisKIHZvaWQgQ29ubmVjdGlv
bjo6cG9zdENvbm5lY3Rpb25EaWRDbG9zZU9uQ29ubmVjdGlvbldvcmtRdWV1ZSgpCiB7CiAgICAg
bV9jb25uZWN0aW9uUXVldWUtPmRpc3BhdGNoKFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyldKCkgbXV0YWJsZSB7CkBAIC0xMDA3LDYgKzEwMzEsMjAgQEAgdm9pZCBDb25uZWN0aW9uOjpk
aXNwYXRjaE1lc3NhZ2UoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7
CisgICAgICAgIGJvb2wgaGFzRGVhZE9ic2VydmVycyA9IGZhbHNlOworICAgICAgICBmb3IgKGF1
dG8mIG9ic2VydmVyV2Vha1B0ciA6IG1fbWVzc2FnZU9ic2VydmVycykgeworICAgICAgICAgICAg
aWYgKGF1dG8qIG9ic2VydmVyID0gb2JzZXJ2ZXJXZWFrUHRyLmdldCgpKQorICAgICAgICAgICAg
ICAgIG9ic2VydmVyLT5kaWRSZWNlaXZlTWVzc2FnZShkZWNvZGVyKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBoYXNEZWFkT2JzZXJ2ZXJzID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoaGFzRGVhZE9ic2VydmVycykKKyAgICAgICAgICAgIG1fbWVzc2FnZU9ic2Vy
dmVycy5yZW1vdmVBbGxNYXRjaGluZyhbXShhdXRvJiBvYnNlcnZlcikgeyByZXR1cm4gIW9ic2Vy
dmVyOyB9KTsKKyAgICB9CisjZW5kaWYKKwogICAgIG1fY2xpZW50LmRpZFJlY2VpdmVNZXNzYWdl
KCp0aGlzLCBkZWNvZGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JUEMvQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlv
bi5oCmluZGV4IGNmZjYwMDQ4NTM1NmY2YjdjNDQ0YmExZGI2ZmZkYTcxZmIwZjQwMGQuLjUzZTMz
NmQ4MWY0NmIxZTU1YzBiNDliOWE4NGE1YTk3ZWM3OWUyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL0lQQy9Db25uZWN0aW9uLmgKQEAgLTEzOSw2ICsxMzksMTUgQEAgcHVibGljOgogICAgICAg
ICB2b2lkIGRlcmVmTWVzc2FnZVJlY2VpdmVyKCkgZmluYWwgeyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDo6ZGVyZWYoKTsgfQogICAgIH07CiAKKyNpZiBFTkFCTEUoSVBDX1RFU1RJTkdfQVBJKQorICAg
IGNsYXNzIE1lc3NhZ2VPYnNlcnZlciA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNZXNzYWdlT2Jz
ZXJ2ZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgfk1lc3NhZ2VPYnNlcnZlcigp
ID0gZGVmYXVsdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxTZW5kTWVzc2FnZShjb25zdCBF
bmNvZGVyJiwgT3B0aW9uU2V0PFNlbmRPcHRpb24+KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBEZWNvZGVyJikgPSAwOworICAgIH07CisjZW5kaWYK
KwogI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIHR5cGVkZWYgaW50IElkZW50aWZp
ZXI7CiAgICAgc3RhdGljIGJvb2wgaWRlbnRpZmllcklzVmFsaWQoSWRlbnRpZmllciBpZGVudGlm
aWVyKSB7IHJldHVybiBpZGVudGlmaWVyICE9IC0xOyB9CkBAIC0yODgsNiArMjk3LDggQEAgcHVi
bGljOgogICAgIHZvaWQgZW5hYmxlSW5jb21pbmdNZXNzYWdlc1Rocm90dGxpbmcoKTsKIAogI2lm
IEVOQUJMRShJUENfVEVTVElOR19BUEkpCisgICAgdm9pZCBhZGRNZXNzYWdlT2JzZXJ2ZXIoY29u
c3QgTWVzc2FnZU9ic2VydmVyJik7CisKICAgICB2b2lkIHNldElnbm9yZUludmFsaWRNZXNzYWdl
Rm9yVGVzdGluZygpIHsgbV9pZ25vcmVJbnZhbGlkTWVzc2FnZUZvclRlc3RpbmcgPSB0cnVlOyB9
CiAgICAgYm9vbCBpZ25vcmVJbnZhbGlkTWVzc2FnZUZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVy
biBtX2lnbm9yZUludmFsaWRNZXNzYWdlRm9yVGVzdGluZzsgfQogI2VuZGlmCkBAIC00MTgsNiAr
NDI5LDcgQEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX25leHRJbmNvbWluZ1N5bmNNZXNzYWdl
Q2FsbGJhY2tJRCB7IDAgfTsKIAogI2lmIEVOQUJMRShJUENfVEVTVElOR19BUEkpCisgICAgVmVj
dG9yPFdlYWtQdHI8TWVzc2FnZU9ic2VydmVyPj4gbV9tZXNzYWdlT2JzZXJ2ZXJzOwogICAgIGJv
b2wgbV9pZ25vcmVJbnZhbGlkTWVzc2FnZUZvclRlc3RpbmcgeyBmYWxzZSB9OwogI2VuZGlmCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5oIGIv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmgKaW5kZXggYzNlNzIxYjgw
NDAxYWU1NDJhYjBjMTJmNGE1ZmM0ODk3OTljZGMzZi4uNzZjYTMzMjYyN2QwNDAxZDhhZjAxOTJj
N2YxZTdmODI0M2I5YjY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
SlNJUENCaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5k
aW5nLmgKQEAgLTM4LDM2ICszOCw0MyBAQAogI2luY2x1ZGUgPHd0Zi9VUkwuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorbmFtZXNwYWNlIElQQyB7CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHN0ZDo6ZW5hYmxlX2lmX3Q8IXN0ZDo6aXNfYXJpdGhtZXRpYzxUPjo6dmFsdWUg
JiYgIXN0ZDo6aXNfZW51bTxUPjo6dmFsdWU+KiA9IG51bGxwdHI+CiBKU0M6OkpTVmFsdWUganNW
YWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBU
JikKIHsKICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogfQogCi10ZW1wbGF0ZTw+Ci1K
U0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK2lubGluZSBKU0M6OkpT
VmFsdWUganNWYWx1ZUZvckRlY29kZWRTdHJpbmdBcmd1bWVudFZhbHVlKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgU3RyaW5nJiB0
eXBlKQogewogICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiBvYmplY3QgPSBKU0M6OmNv
bnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkp
OwotICAgIG9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJ0eXBlIl9zKSwgSlNDOjpqc05vbnRyaXZpYWxTdHJpbmcodm0sICJTdHJpbmciX3MpKTsK
KyAgICBvYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCAidHlwZSJfcyksIEpTQzo6anNOb250cml2aWFsU3RyaW5nKHZtLCB0eXBlKSk7CiAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIG9iamVjdC0+cHV0
RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcyksIEpT
Qzo6anNOb250cml2aWFsU3RyaW5nKHZtLCB2YWx1ZSkpOworICAgIG9iamVjdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ2YWx1ZSJfcyksIHZhbHVlLmlz
TnVsbCgpID8gSlNDOjpqc051bGwoKSA6IEpTQzo6anNTdHJpbmcodm0sIHZhbHVlKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwogICAgIHJldHVybiBv
YmplY3Q7CiB9CiAKK3RlbXBsYXRlPD4KK0pTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFy
Z3VtZW50VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZFN0cmluZ0FyZ3VtZW50
VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZSwgIlN0cmluZyJfcyk7Cit9CisKIHRlbXBsYXRlPD4K
IEpTQzo6SlNWYWx1ZSBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBVUkwmIHZhbHVlKQogewotICAgIHJldHVybiBq
c1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZS5zdHJpbmco
KSk7CisgICAgcmV0dXJuIGpzVmFsdWVGb3JEZWNvZGVkU3RyaW5nQXJndW1lbnRWYWx1ZShnbG9i
YWxPYmplY3QsIHZhbHVlLnN0cmluZygpLCAiVVJMIl9zKTsKIH0KIAogdGVtcGxhdGU8PgogSlND
OjpKU1ZhbHVlIGpzVmFsdWVGb3JEZWNvZGVkQXJndW1lbnRWYWx1ZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiB2YWx1
ZSkKIHsKLSAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKGdsb2JhbE9i
amVjdCwgdmFsdWUuc3RyaW5nKCkpOworICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZFN0cmlu
Z0FyZ3VtZW50VmFsdWUoZ2xvYmFsT2JqZWN0LCB2YWx1ZS5zdHJpbmcoKSwgIlJlZ2lzdHJhYmxl
RG9tYWluIl9zKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX2FyaXRobWV0aWM8VD46OnZhbHVlPiogPSBudWxscHRyPgpAQCAtMjA3LDYgKzIxNCwx
OCBAQCBKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgYwogICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2Rl
ZEFyZ3VtZW50UmVjdChnbG9iYWxPYmplY3QsIHZhbHVlLCAiRmxvYXRSZWN0Iik7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFU+CitKU0M6OkpTVmFsdWUganNWYWx1ZUZvckRlY29kZWRBcmd1bWVu
dFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgT3B0aW9uU2V0
PFU+JiB2YWx1ZSkKK3sgICAgCisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gcmVzdWx0
ID0ganNWYWx1ZUZvckRlY29kZWRBcmd1bWVudFZhbHVlKGdsb2JhbE9iamVjdCwgdmFsdWUudG9S
YXcoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwor
ICAgIHJlc3VsdC5nZXRPYmplY3QoKS0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJpc09wdGlvblNldCJfcyksIEpTQzo6anNCb29sZWFuKHRydWUpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwogdGVtcGxhdGU8c2l6ZV90IHJlbWFpbmluZ1NpemUsIHR5cGVuYW1lLi4u
IEVsZW1lbnRzPgogc3RydWN0IERlY29kZWRBcmd1bWVudEpTVmFsdWVDb252ZXJ0ZXIgewogICAg
IHN0YXRpYyBib29sIGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U0M6OkpTQXJyYXkqIGFycmF5LCBjb25zdCBzdGQ6OnR1cGxlPEVsZW1lbnRzLi4uPiYgdHVwbGUp
CkBAIC0yNTMsMyArMjcyLDUgQEAgc3RhdGljIE9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4ganNWYWx1
ZUZvckRlY29kZWRBcmd1bWVudHMoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2wKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICByZXR1cm4ganNWYWx1ZUZvckFyZ3VtZW50VHVwbGUoZ2xv
YmFsT2JqZWN0LCAqYXJndW1lbnRzKTsKIH0KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcAppbmRleCBjNWFjZjRlZGQ1YTQ0OTM3
ZmFmMGFhNDgwZjlkODdjMmE5ODM2OWY1Li5iYzBjOGZjYjg0YzlkMmM0MzhkMDNmNWVhOTk2ODJi
NTMzODhlZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9J
UENUZXN0aW5nQVBJLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9J
UENUZXN0aW5nQVBJLmNwcApAQCAtNTQsNyArNTQsMjcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IG5hbWVzcGFjZSBJUENUZXN0aW5nQVBJIHsKIAotY2xhc3MgSlNJUEMgOiBwdWJsaWMgUmVmQ291
bnRlZDxKU0lQQz4geworY2xhc3MgSlNJUEM7CisKK2NsYXNzIEpTTWVzc2FnZUxpc3RlbmVyIGZp
bmFsIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6TWVzc2FnZU9ic2VydmVyIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5cGUgeyBJbmNv
bWluZywgT3V0Z29pbmcgfTsKKworICAgIEpTTWVzc2FnZUxpc3RlbmVyKEpTSVBDJiwgVHlwZSwg
SlNDb250ZXh0UmVmLCBKU09iamVjdFJlZiBjYWxsYmFjayk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCB3aWxsU2VuZE1lc3NhZ2UoY29uc3QgSVBDOjpFbmNvZGVyJiwgT3B0aW9uU2V0PElQQzo6U2Vu
ZE9wdGlvbj4pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgSlNDOjpKU09iamVjdCoganNEZXNjcmlwdGlvbkZy
b21EZWNvZGVyKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBJUEM6OkRlY29kZXImKTsKKworICAgIFdl
YWtQdHI8SlNJUEM+IG1fanNJUEM7CisgICAgVHlwZSBtX3R5cGU7CisgICAgSlNDb250ZXh0UmVm
IG1fY29udGV4dDsKKyAgICBKU09iamVjdFJlZiBtX2NhbGxiYWNrOworfTsKKworY2xhc3MgSlNJ
UEMgOiBwdWJsaWMgUmVmQ291bnRlZDxKU0lQQz4sIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxKU0lQ
Qz4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SlNJUEM+IGNyZWF0ZShXZWJQYWdlJiB3ZWJQ
YWdlLCBXZWJGcmFtZSYgd2ViRnJhbWUpCiAgICAgewpAQCAtNzgsNiArOTgsMTAgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNGdW5jdGlvbiogc3RhdGljRnVuY3Rpb25zKCk7
CiAgICAgc3RhdGljIGNvbnN0IEpTU3RhdGljVmFsdWUqIHN0YXRpY1ZhbHVlcygpOwogCisgICAg
c3RhdGljIHZvaWQgYWRkTWVzc2FnZUxpc3RlbmVyKEpTTWVzc2FnZUxpc3RlbmVyOjpUeXBlLCBK
U0NvbnRleHRSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwor
ICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGFkZEluY29taW5nTWVzc2FnZUxpc3RlbmVyKEpTQ29udGV4
dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pOworICAgIHN0YXRpYyBKU1ZhbHVlUmVmIGFkZE91dGdvaW5nTWVzc2FnZUxpc3RlbmVyKEpT
Q29udGV4dFJlZiwgSlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pOworCiAgICAgc3RhdGljIEpTVmFsdWVSZWYgc2VuZE1lc3NhZ2UoSlNDb250ZXh0
UmVmLCBKU09iamVjdFJlZiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bik7CiAgICAgc3RhdGljIEpTVmFsdWVSZWYgc2VuZFN5bmNNZXNzYWdlKEpTQ29udGV4dFJlZiwg
SlNPYmplY3RSZWYsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pOwog
CkBAIC05Miw2ICsxMTYsNyBAQCBwcml2YXRlOgogCiAgICAgV2Vha1B0cjxXZWJQYWdlPiBtX3dl
YlBhZ2U7CiAgICAgV2Vha1B0cjxXZWJGcmFtZT4gbV93ZWJGcmFtZTsKKyAgICBWZWN0b3I8VW5p
cXVlUmVmPEpTTWVzc2FnZUxpc3RlbmVyPj4gbV9tZXNzYWdlTGlzdGVuZXJzOwogfTsKIAogSlND
bGFzc1JlZiBKU0lQQzo6d3JhcHBlckNsYXNzKCkKQEAgLTEzNSw2ICsxNjAsOCBAQCB2b2lkIEpT
SVBDOjpmaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3QpCiBjb25zdCBKU1N0YXRpY0Z1bmN0aW9u
KiBKU0lQQzo6c3RhdGljRnVuY3Rpb25zKCkKIHsKICAgICBzdGF0aWMgY29uc3QgSlNTdGF0aWNG
dW5jdGlvbiBmdW5jdGlvbnNbXSA9IHsKKyAgICAgICAgeyAiYWRkSW5jb21pbmdNZXNzYWdlTGlz
dGVuZXIiLCBhZGRJbmNvbWluZ01lc3NhZ2VMaXN0ZW5lciwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIHwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB9LAorICAgICAgICB7ICJh
ZGRPdXRnb2luZ01lc3NhZ2VMaXN0ZW5lciIsIGFkZE91dGdvaW5nTWVzc2FnZUxpc3RlbmVyLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IH0sCiAgICAgICAgIHsgInNlbmRNZXNzYWdlIiwgc2VuZE1lc3NhZ2UsIGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfSwKICAg
ICAgICAgeyAic2VuZFN5bmNNZXNzYWdlIiwgc2VuZFN5bmNNZXNzYWdlLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IH0sCiAgICAg
ICAgIHsgMCwgMCwgMCB9CkBAIC0xNjksNiArMTk2LDEyIEBAIHN0YXRpYyBPcHRpb25hbDx1aW50
NjRfdD4gY29udmVydFRvVWludDY0KEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKQogICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGNyZWF0ZVR5cGVFcnJvcihKU0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sodG9KUyhjb250ZXh0KS0+dm0oKSk7CisgICAgcmV0dXJuIHRvUmVmKEpT
Qzo6Y3JlYXRlVHlwZUVycm9yKHRvSlMoY29udGV4dCksIG1lc3NhZ2UpKTsKK30KKwogc3RhdGlj
IFJlZlB0cjxJUEM6OkNvbm5lY3Rpb24+IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQoSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlUmVmIHZhbHVlUmVmLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCiB7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
Z2xvYmFsT2JqZWN0LT52bSgpKTsKQEAgLTE4OSw2ICsyMjIsNTMgQEAgc3RhdGljIFJlZlB0cjxJ
UEM6OkNvbm5lY3Rpb24+IHByb2Nlc3NUYXJnZXRGcm9tQXJndW1lbnQoSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2wKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBKU0lQQzo6YWRkTWVzc2Fn
ZUxpc3RlbmVyKEpTTWVzc2FnZUxpc3RlbmVyOjpUeXBlIHR5cGUsIEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGF1
dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMoY29udGV4dCk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOworICAgIGF1dG8ganNJUEMgPSBtYWtlUmVmUHRyKHRv
V3JhcHBlZChjb250ZXh0LCB0aGlzT2JqZWN0KSk7CisgICAgaWYgKCFqc0lQQykgeworICAgICAg
ICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJXcm9uZyB0eXBlIl9zKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkgewor
ICAgICAgICAqZXhjZXB0aW9uID0gY3JlYXRlVHlwZUVycm9yKGNvbnRleHQsICJNdXN0IHNwZWNp
ZnkgdGhlIHRhcmdldCBwcm9jZXNzIGFzIHRoZSBmaXJzdCBhcmd1bWVudCJfcyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGNvbm5lY3Rpb24gPSBwcm9jZXNzVGFyZ2V0RnJv
bUFyZ3VtZW50KGdsb2JhbE9iamVjdCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIGlm
ICghY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEpT
TWVzc2FnZUxpc3RlbmVyPiBsaXN0ZW5lcjsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA+PSAyICYm
IEpTVmFsdWVJc09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMV0pKSB7CisgICAgICAgIGF1dG8g
bGlzdGVuZXJPYmplY3RSZWYgPSBKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pOworICAgICAgICBpZiAoSlNPYmplY3RJc0Z1bmN0aW9uKGNvbnRleHQsIGxp
c3RlbmVyT2JqZWN0UmVmKSkKKyAgICAgICAgICAgIGxpc3RlbmVyID0gbWFrZVVuaXF1ZTxKU01l
c3NhZ2VMaXN0ZW5lcj4oKmpzSVBDLCB0eXBlLCBjb250ZXh0LCBsaXN0ZW5lck9iamVjdFJlZik7
CisgICAgfQorCisgICAgaWYgKCFsaXN0ZW5lcikgeworICAgICAgICAqZXhjZXB0aW9uID0gY3Jl
YXRlVHlwZUVycm9yKGNvbnRleHQsICJNdXN0IHNwZWNpZnkgYSBjYWxsYmFjayBmdW5jdGlvbiBh
cyB0aGUgc2Vjb25kIGFyZ3VtZW50Il9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNvbm5lY3Rpb24tPmFkZE1lc3NhZ2VPYnNlcnZlcigqbGlzdGVuZXIpOworICAgIGpzSVBDLT5t
X21lc3NhZ2VMaXN0ZW5lcnMuYXBwZW5kKG1ha2VVbmlxdWVSZWZGcm9tTm9uTnVsbFVuaXF1ZVB0
cihXVEZNb3ZlKGxpc3RlbmVyKSkpOworfQorCitKU1ZhbHVlUmVmIEpTSVBDOjphZGRJbmNvbWlu
Z01lc3NhZ2VMaXN0ZW5lcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYsIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgYWRkTWVzc2FnZUxp
c3RlbmVyKEpTTWVzc2FnZUxpc3RlbmVyOjpUeXBlOjpJbmNvbWluZywgY29udGV4dCwgdGhpc09i
amVjdCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNlcHRpb24pOworICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKworSlNWYWx1ZVJlZiBKU0lQQzo6YWRk
T3V0Z29pbmdNZXNzYWdlTGlzdGVuZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGFkZE1l
c3NhZ2VMaXN0ZW5lcihKU01lc3NhZ2VMaXN0ZW5lcjo6VHlwZTo6T3V0Z29pbmcsIGNvbnRleHQs
IHRoaXNPYmplY3QsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyBPcHRpb25h
bDx1aW50NjRfdD4gZGVzdGluYXRpb25JREZyb21Bcmd1bWVudChKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWVSZWYgdmFsdWVSZWYsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKIHsKICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTKGdsb2JhbE9iamVjdCwgdmFsdWVSZWYpOwpA
QCAtMjM1LDEyICszMTUsNiBAQCBzdGF0aWMgYm9vbCBlbmNvZGVUeXBlZEFycmF5KElQQzo6RW5j
b2RlciYgZW5jb2RlciwgSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdQogICAgIHJldHVybiB0
cnVlOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBjcmVhdGVUeXBlRXJyb3IoSlNDb250ZXh0UmVm
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBKU0M6OkpTTG9ja0hvbGRl
ciBsb2NrKHRvSlMoY29udGV4dCktPnZtKCkpOwotICAgIHJldHVybiB0b1JlZihKU0M6OmNyZWF0
ZVR5cGVFcnJvcih0b0pTKGNvbnRleHQpLCBtZXNzYWdlKSk7Ci19Ci0KIHRlbXBsYXRlPHR5cGVu
YW1lIFBvaW50VHlwZT4gYm9vbCBlbmNvZGVQb2ludFR5cGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVy
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYmplY3QqIGpzT2Jq
ZWN0LCBKU0M6OkNhdGNoU2NvcGUmIHNjb3BlKQogewogICAgIGF1dG8mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwpAQCAtODAwLDYgKzg3NCwxMDQgQEAgSlNWYWx1ZVJlZiBKU0lQQzo6bWVzc2Fn
ZXMoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIEpTU3RyaW4K
ICAgICByZXR1cm4gdG9SZWYodm0sIG1lc3NhZ2VzT2JqZWN0KTsKIH0KIAorSlNNZXNzYWdlTGlz
dGVuZXI6OkpTTWVzc2FnZUxpc3RlbmVyKEpTSVBDJiBqc0lQQywgVHlwZSB0eXBlLCBKU0NvbnRl
eHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgY2FsbGJhY2spCisgICAgOiBtX2pzSVBDKG1ha2VX
ZWFrUHRyKGpzSVBDKSkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9jb250ZXh0KGNvbnRl
eHQpCisgICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQoreworICAgIGF1dG8qIGdsb2JhbE9iamVj
dCA9IHRvSlMoY29udGV4dCk7CisgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisKKyAgICBhdXRvIGNhdGNoU2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIC8vIFdlIGNhbid0IHJldGFpbiB0aGUgZ2xv
YmFsIGNvbnRleHQgaGVyZSBhcyB0aGF0IHdvdWxkIGNhdXNlIGEgbGVhaworICAgIC8vIHNpbmNl
IHRoaXMgb2JqZWN0IGlzIHN1cHBvc2VkIHRvIGxpdmUgYXMgbG9uZyBhcyB0aGUgZ2xvYmFsIG9i
amVjdCBpcyBhbGl2ZS4KKyAgICBKU0M6OlByaXZhdGVOYW1lIHVuaXF1ZVByaXZhdGVOYW1lOwor
ICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHZtLCB1bmlxdWVQcml2YXRlTmFtZSwgdG9KUyhn
bG9iYWxPYmplY3QsIGNhbGxiYWNrKSk7Cit9CisKK3ZvaWQgSlNNZXNzYWdlTGlzdGVuZXI6OmRp
ZFJlY2VpdmVNZXNzYWdlKGNvbnN0IElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBpZiAo
bV90eXBlICE9IFR5cGU6OkluY29taW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBSRUxFQVNF
X0FTU0VSVChtX2pzSVBDKTsKKyAgICBhdXRvIHByb3RlY3RPd25lck9mVGhpcyA9IG1ha2VSZWYo
Km1fanNJUEMpOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlMobV9jb250ZXh0KTsKKyAg
ICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdC0+dm0oKSk7CisKKyAgICBhdXRv
IG11dGFibGVEZWNvZGVyID0gSVBDOjpEZWNvZGVyOjpjcmVhdGUoZGVjb2Rlci5idWZmZXIoKSwg
ZGVjb2Rlci5sZW5ndGgoKSwgbnVsbHB0ciwgeyB9KTsKKyAgICBhdXRvKiBkZXNjcmlwdGlvbiA9
IGpzRGVzY3JpcHRpb25Gcm9tRGVjb2RlcihnbG9iYWxPYmplY3QsICptdXRhYmxlRGVjb2Rlcik7
CisKKyAgICBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdID0geyBkZXNjcmlwdGlvbiA/IHRvUmVmKGds
b2JhbE9iamVjdCwgZGVzY3JpcHRpb24pIDogSlNWYWx1ZU1ha2VVbmRlZmluZWQobV9jb250ZXh0
KSB9OworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24obV9jb250ZXh0LCBtX2NhbGxiYWNrLCBt
X2NhbGxiYWNrLCBXVEZfQVJSQVlfTEVOR1RIKGFyZ3VtZW50cyksIGFyZ3VtZW50cywgbnVsbHB0
cik7Cit9CisKK3ZvaWQgSlNNZXNzYWdlTGlzdGVuZXI6OndpbGxTZW5kTWVzc2FnZShjb25zdCBJ
UEM6OkVuY29kZXImIGVuY29kZXIsIE9wdGlvblNldDxJUEM6OlNlbmRPcHRpb24+KQoreworICAg
IGlmIChtX3R5cGUgIT0gVHlwZTo6T3V0Z29pbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFJF
TEVBU0VfQVNTRVJUKG1fanNJUEMpOworICAgIGF1dG8gcHJvdGVjdE93bmVyT2ZUaGlzID0gbWFr
ZVJlZigqbV9qc0lQQyk7CisgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KUyhtX2NvbnRleHQp
OworICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0LT52bSgpKTsKKworICAg
IGF1dG8gZGVjb2RlciA9IElQQzo6RGVjb2Rlcjo6Y3JlYXRlKGVuY29kZXIuYnVmZmVyKCksIGVu
Y29kZXIuYnVmZmVyU2l6ZSgpLCBudWxscHRyLCB7IH0pOworICAgIGF1dG8qIGRlc2NyaXB0aW9u
ID0ganNEZXNjcmlwdGlvbkZyb21EZWNvZGVyKGdsb2JhbE9iamVjdCwgKmRlY29kZXIpOworCisg
ICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSA9IHsgZGVzY3JpcHRpb24gPyB0b1JlZihnbG9iYWxP
YmplY3QsIGRlc2NyaXB0aW9uKSA6IEpTVmFsdWVNYWtlVW5kZWZpbmVkKG1fY29udGV4dCkgfTsK
KyAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKG1fY29udGV4dCwgbV9jYWxsYmFjaywgbV9jYWxs
YmFjaywgV1RGX0FSUkFZX0xFTkdUSChhcmd1bWVudHMpLCBhcmd1bWVudHMsIG51bGxwdHIpOwor
fQorCitKU0M6OkpTT2JqZWN0KiBKU01lc3NhZ2VMaXN0ZW5lcjo6anNEZXNjcmlwdGlvbkZyb21E
ZWNvZGVyKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIGF1dG8qIGpzUmVzdWx0ID0g
Y29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKwor
ICAgIGpzUmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIm5hbWUiKSwgSlNDOjpKU1ZhbHVlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihkZWNvZGVyLm1l
c3NhZ2VOYW1lKCkpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7
CisKKyAgICBqc1Jlc3VsdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJkZXNjcmlwdGlvbiIpLCBKU0M6OmpzU3RyaW5nKHZtLCBJUEM6OmRlc2NyaXB0aW9u
KGRlY29kZXIubWVzc2FnZU5hbWUoKSkpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKKworICAgIGpzUmVzdWx0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmll
cjo6ZnJvbVN0cmluZyh2bSwgImRlc3RpbmF0aW9uSUQiKSwgSlNDOjpKU1ZhbHVlKGRlY29kZXIu
ZGVzdGluYXRpb25JRCgpKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0
cik7CisKKyAgICBpZiAoZGVjb2Rlci5pc1N5bmNNZXNzYWdlKCkpIHsKKyAgICAgICAgaWYgKHVp
bnQ2NF90IHN5bmNSZXF1ZXN0SUQgPSAwOyBkZWNvZGVyLmRlY29kZShzeW5jUmVxdWVzdElEKSkg
eworICAgICAgICAgICAganNSZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCAic3luY1JlcXVlc3RJRCIpLCBKU0M6OkpTVmFsdWUoc3luY1JlcXVlc3RJ
RCkpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1lc3NhZ2VSZXBseUFyZ3VtZW50RGVzY3JpcHRpb25z
KGRlY29kZXIubWVzc2FnZU5hbWUoKSkpIHsKKyAgICAgICAgaWYgKHVpbnQ2NF90IGxpc3RlbmVy
SUQgPSAwOyBkZWNvZGVyLmRlY29kZShsaXN0ZW5lcklEKSkgeworICAgICAgICAgICAganNSZXN1
bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibGlzdGVu
ZXJJRCIpLCBKU0M6OkpTVmFsdWUobGlzdGVuZXJJRCkpOworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRv
IGFycmF5QnVmZmVyID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGRlY29kZXIuYnVmZmVyKCks
IGRlY29kZXIubGVuZ3RoKCkpOworICAgIGlmIChhdXRvKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGFycmF5QnVmZmVyLT5zaGFyaW5nTW9kZSgpKSkgewor
ICAgICAgICBpZiAoYXV0byoganNBcnJheUJ1ZmZlciA9IEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3Jl
YXRlKHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKSkgeworICAgICAgICAgICAg
anNSZXN1bHQtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
YnVmZmVyIiksIGpzQXJyYXlCdWZmZXIpOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIGpzUmVwbHlB
cmd1bWVudHMgPSBqc1ZhbHVlRm9yQXJndW1lbnRzKGdsb2JhbE9iamVjdCwgZGVjb2Rlci5tZXNz
YWdlTmFtZSgpLCBkZWNvZGVyKTsKKyAgICBpZiAoanNSZXBseUFyZ3VtZW50cykgeworICAgICAg
ICBqc1Jlc3VsdC0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5hcmd1bWVudHMsIGpz
UmVwbHlBcmd1bWVudHMtPmlzRW1wdHkoKSA/IEpTQzo6anNOdWxsKCkgOiAqanNSZXBseUFyZ3Vt
ZW50cyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAg
IH0KKworICAgIHJldHVybiBqc1Jlc3VsdDsKK30KKwogdm9pZCBpbmplY3QoV2ViUGFnZSYgd2Vi
UGFnZSwgV2ViRnJhbWUmIHdlYkZyYW1lLCBXZWJDb3JlOjpET01XcmFwcGVyV29ybGQmIHdvcmxk
KQogewogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHdlYkZyYW1lLmNvcmVGcmFtZSgpLT5zY3Jp
cHQoKS5nbG9iYWxPYmplY3Qod29ybGQpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGI2NzdjZmY3NzcyNTAzNGU4N2E3YmEwMjAwYTcwNTViODFk
MzY4NmQuLmYyNmUzNzIwZmU4ZDkzYWM4MzA0NmE3ZmE3YjhiOGYxOWU0MmI5NzEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAyMC0xMC0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBJUEMgdGVzdGluZyBBUEkgc2hvdWxkIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gb2JzZXJ2ZSBt
ZXNzYWdlcyBiZWluZyBzZW50IGFuZCByZWNlaXZlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE3ODcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgdG8gaW50ZXJjZXB0IElQQyBtZXNz
YWdlcyBzZW50IGFuZCByZWNlaXZlZCBieSBXZWJDb250ZW50IHByb2Nlc3MuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW06CisgICAg
ICAgIChJUENUZXN0aW5nQVBJLkNhbkludGVyY2VwdEFsZXJ0KToKKyAgICAgICAgKElQQ1Rlc3Rp
bmdBUEkuQ2FuSW50ZXJjZXB0SGFzU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChJUENUZXN0aW5n
QVBJLkNhbkludGVyY2VwdEZpbmRTdHJpbmcpOgorCiAyMDIwLTEwLTE2ICBBbnRvaW5lIFF1aW50
ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIEVuYWJsZSBpbmRpdmlkdWFsIENTUyB0
cmFuc2Zvcm0gcHJvcGVydGllcyBieSBkZWZhdWx0CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0gYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0lQQ1Rlc3RpbmdBUEkubW0KaW5kZXggNWM2Nzk3YzM5
NjllMWIzMTFhMjliMjVmNjYxM2M3Y2M3ZDhjNjZmMC4uZTM2ZDM5MjI3OGIzZWVmMDBlNmQ0ZDlm
NDk1NmNlYTQwNjgyODFiYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9JUENUZXN0aW5nQVBJLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvSVBDVGVzdGluZ0FQSS5tbQpAQCAtMjI0LDQgKzIyNCwxMTAgQEAgVEVT
VChJUENUZXN0aW5nQVBJLCBEZXNjcmliZXNBcmd1bWVudHMpCiAgICAgRVhQRUNUX1NUUkVRKFtb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiYXJnc1syXS50eXBlIl0gVVRG
OFN0cmluZ10sICJTdHJpbmciKTsKIH0KIAorVEVTVChJUENUZXN0aW5nQVBJLCBDYW5JbnRlcmNl
cHRBbGVydCkKK3sKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7
CisgICAgZm9yIChfV0tJbnRlcm5hbERlYnVnRmVhdHVyZSAqZmVhdHVyZSBpbiBbV0tQcmVmZXJl
bmNlcyBfaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVzXSkgeworICAgICAgICBpZiAoW2ZlYXR1cmUua2V5
IGlzRXF1YWxUb1N0cmluZzpAIklQQ1Rlc3RpbmdBUElFbmFibGVkIl0pIHsKKyAgICAgICAgICAg
IFtbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10gX3NldEVuYWJsZWQ6WUVTIGZvckludGVybmFs
RGVidWdGZWF0dXJlOmZlYXR1cmVdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDMwMCwgMzAw
KSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKworICAgIGF1dG8gZGVsZWdh
dGUgPSBhZG9wdE5TKFtbSVBDVGVzdGluZ0FQSURlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAg
W3dlYlZpZXcgc2V0VUlEZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CisKKyAgICBkb25lID0gZmFs
c2U7CisgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBF
IGh0bWw+PHNjcmlwdD5tZXNzYWdlcyA9IFtdOyBJUEMuYWRkT3V0Z29pbmdNZXNzYWdlTGlzdGVu
ZXIoJ1VJJywgKG1lc3NhZ2UpID0+IG1lc3NhZ2VzLnB1c2gobWVzc2FnZSkpOyBhbGVydCgnb2sn
KTs8L3NjcmlwdD4iXTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOworCisg
ICAgRVhQRUNUX1NUUkVRKFthbGVydE1lc3NhZ2UgVVRGOFN0cmluZ10sICJvayIpOworICAgIEVY
UEVDVF9TVFJFUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAibWVzc2Fn
ZXMgPSBtZXNzYWdlcy5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UubmFtZSA9PSBJUEMubWVz
c2FnZXMuV2ViUGFnZVByb3h5X1J1bkphdmFTY3JpcHRBbGVydC5uYW1lKTsgbWVzc2FnZXMubGVu
Z3RoIl0uVVRGOFN0cmluZywgIjEiKTsKKyAgICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm1lc3NhZ2VzWzBdLmRlc2NyaXB0aW9uIl0uVVRGOFN0
cmluZywgIldlYlBhZ2VQcm94eV9SdW5KYXZhU2NyaXB0QWxlcnQiKTsKKyAgICBFWFBFQ1RfRVEo
W3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIm1lc3NhZ2VzWzBdLmFyZ3Vt
ZW50cy5sZW5ndGgiXS5pbnRWYWx1ZSwgMyk7CisgICAgRVhQRUNUX1NUUkVRKFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlb2YobWVzc2FnZXNbMF0uc3luY1JlcXVl
c3RJRCkiXS5VVEY4U3RyaW5nLCAibnVtYmVyIik7CisgICAgRVhQRUNUX0VRKFt3ZWJWaWV3IHN0
cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJtZXNzYWdlc1swXS5kZXN0aW5hdGlvbklEIl0u
aW50VmFsdWUsCisgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6
QCJJUEMud2ViUGFnZVByb3h5SUQudG9TdHJpbmcoKSJdLmludFZhbHVlKTsKK30KKworI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCitURVNUKElQQ1Rlc3RpbmdBUEksIENhbklu
dGVyY2VwdEhhc1N0b3JhZ2VBY2Nlc3MpCit7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZp
Z3VyYXRpb24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlv
biBhbGxvY10gaW5pdF0pOworICAgIGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1
cmUgaW4gW1dLUHJlZmVyZW5jZXMgX2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKKyAgICAgICAg
aWYgKFtmZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJJUENUZXN0aW5nQVBJRW5hYmxlZCJd
KSB7CisgICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVk
OllFUyBmb3JJbnRlcm5hbERlYnVnRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3
ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCAzMDAsIDMwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisK
KyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSBhbGxv
Y10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwor
CisgICAgZG9uZSA9IGZhbHNlOworICAgIHByb21wdFJlc3VsdCA9IEAiZm9vIjsKKyAgICBbd2Vi
VmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6QCI8IURPQ1RZUEUgaHRtbD48c2NyaXB0
PmxldCB0YXJnZXRNZXNzYWdlID0ge307IGNvbnN0IG1lc3NhZ2VOYW1lID0gSVBDLm1lc3NhZ2Vz
Lk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzX0hhc1N0b3JhZ2VBY2Nlc3MubmFtZTsiCisg
ICAgICAgICJJUEMuYWRkT3V0Z29pbmdNZXNzYWdlTGlzdGVuZXIoJ05ldHdvcmtpbmcnLCAoY3Vy
cmVudE1lc3NhZ2UpID0+IHsgaWYgKGN1cnJlbnRNZXNzYWdlLm5hbWUgPT0gbWVzc2FnZU5hbWUp
IHRhcmdldE1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZTsgfSk7IgorICAgICAgICAiSVBDLnNlbmRN
ZXNzYWdlKCdOZXR3b3JraW5nJywgMCwgbWVzc2FnZU5hbWUsIFt7dHlwZTogJ1JlZ2lzdHJhYmxl
RG9tYWluJywgdmFsdWU6ICdodHRwczovL2lwY3Rlc3RpbmdhcGkuY29tJ30sIHt0eXBlOiAnUmVn
aXN0cmFibGVEb21haW4nLCB2YWx1ZTogJ2h0dHBzOi8vd2Via2l0Lm9yZyd9LCIKKyAgICAgICAg
Int0eXBlOiAndWludDY0X3QnLCB2YWx1ZTogSVBDLmZyYW1lSUR9LCB7dHlwZTogJ3VpbnQ2NF90
JywgdmFsdWU6IElQQy5wYWdlSUR9XSkudGhlbigocmVzdWx0KSA9PiBhbGVydChKU09OLnN0cmlu
Z2lmeShyZXN1bHQuYXJndW1lbnRzKSkpOzwvc2NyaXB0PiJdOworICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBFWFBFQ1RfU1RSRVEoW2FsZXJ0TWVzc2FnZSBVVEY4
U3RyaW5nXSwgIlt7XCJ0eXBlXCI6XCJib29sXCIsXCJ2YWx1ZVwiOmZhbHNlfV0iKTsKKyAgICBF
WFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdl
dE1lc3NhZ2UuZGVzY3JpcHRpb24iXS5VVEY4U3RyaW5nLCAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NfSGFzU3RvcmFnZUFjY2VzcyIpOworICAgIEVYUEVDVF9FUShbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0TWVzc2FnZS5hcmd1bWVudHMubGVuZ3Ro
Il0uaW50VmFsdWUsIDQpOworICAgIEVYUEVDVF9TVFJFUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1
YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0TWVzc2FnZS5hcmd1bWVudHNbMF0udHlwZSJdLlVURjhT
dHJpbmcsICJSZWdpc3RyYWJsZURvbWFpbiIpOworICAgIEVYUEVDVF9TVFJFUShbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAidGFyZ2V0TWVzc2FnZS5hcmd1bWVudHNbMF0u
dmFsdWUiXS5VVEY4U3RyaW5nLCAiaXBjdGVzdGluZ2FwaS5jb20iKTsKKyAgICBFWFBFQ1RfU1RS
RVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldE1lc3NhZ2Uu
YXJndW1lbnRzWzFdLnR5cGUiXS5VVEY4U3RyaW5nLCAiUmVnaXN0cmFibGVEb21haW4iKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRh
cmdldE1lc3NhZ2UuYXJndW1lbnRzWzFdLnZhbHVlIl0uVVRGOFN0cmluZywgIndlYmtpdC5vcmci
KTsKKyAgICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAInRhcmdldE1lc3NhZ2UuYXJndW1lbnRzWzJdLnR5cGUiXS5VVEY4U3RyaW5nLCAidWludDY0
X3QiKTsKKyAgICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNj
cmlwdDpAInRhcmdldE1lc3NhZ2UuYXJndW1lbnRzWzJdLnZhbHVlIl0uVVRGOFN0cmluZywgW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIklQQy5mcmFtZUlELnRvU3RyaW5n
KCkiXS5VVEY4U3RyaW5nKTsKKyAgICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldE1lc3NhZ2UuYXJndW1lbnRzWzNdLnR5cGUiXS5VVEY4
U3RyaW5nLCAidWludDY0X3QiKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldE1lc3NhZ2UuYXJndW1lbnRzWzNdLnZhbHVlIl0uaW50
VmFsdWUsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJJUEMucGFnZUlE
LnRvU3RyaW5nKCkiXS5pbnRWYWx1ZSk7CisgICAgRVhQRUNUX1NUUkVRKFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJ0eXBlb2YodGFyZ2V0TWVzc2FnZS5zeW5jUmVxdWVz
dElEKSJdLlVURjhTdHJpbmcsICJ1bmRlZmluZWQiKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcg
c3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAInRhcmdldE1lc3NhZ2UuZGVzdGluYXRpb25J
RCJdLmludFZhbHVlLCAwKTsKK30KKyNlbmRpZgorCitURVNUKElQQ1Rlc3RpbmdBUEksIENhbklu
dGVyY2VwdEZpbmRTdHJpbmcpCit7CisgICAgUmV0YWluUHRyPFdLV2ViVmlld0NvbmZpZ3VyYXRp
b24+IGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxv
Y10gaW5pdF0pOworICAgIGZvciAoX1dLSW50ZXJuYWxEZWJ1Z0ZlYXR1cmUgKmZlYXR1cmUgaW4g
W1dLUHJlZmVyZW5jZXMgX2ludGVybmFsRGVidWdGZWF0dXJlc10pIHsKKyAgICAgICAgaWYgKFtm
ZWF0dXJlLmtleSBpc0VxdWFsVG9TdHJpbmc6QCJJUENUZXN0aW5nQVBJRW5hYmxlZCJdKSB7Cisg
ICAgICAgICAgICBbW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdIF9zZXRFbmFibGVkOllFUyBm
b3JJbnRlcm5hbERlYnVnRmVhdHVyZTpmZWF0dXJlXTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3ID0gYWRv
cHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCAzMDAsIDMwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW0lQQ1Rlc3RpbmdBUElEZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIFt3ZWJWaWV3IHNldFVJRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOkAiPCFET0NUWVBFIGh0bWw+PGJv
ZHk+PHA+aGVsbG88L3A+PHNjcmlwdD5tZXNzYWdlcyA9IFtdOyBJUEMuYWRkSW5jb21pbmdNZXNz
YWdlTGlzdGVuZXIoJ1VJJywgKG1lc3NhZ2UpID0+IG1lc3NhZ2VzLnB1c2gobWVzc2FnZSkpOzwv
c2NyaXB0PiJdOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIGF1dG8gZmluZENvbmZpZ3VyYXRp
b24gPSBhZG9wdE5TKFtbV0tGaW5kQ29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFt3
ZWJWaWV3IGZpbmRTdHJpbmc6QCJoZWxsbyIgd2l0aENvbmZpZ3VyYXRpb246ZmluZENvbmZpZ3Vy
YXRpb24uZ2V0KCkgY29tcGxldGlvbkhhbmRsZXI6XihXS0ZpbmRSZXN1bHQgKnJlc3VsdCkgewor
ICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQubWF0Y2hGb3VuZCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKFt3ZWJWaWV3IHNlbGVjdGlvblJhbmdlSGFzU3RhcnRPZmZzZXQ6MCBlbmRPZmZzZXQ6NV0p
OworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmUpOworCisgICAgRVhQRUNUX1NUUkVRKFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHQ6QCJtZXNzYWdlcyA9IG1lc3NhZ2VzLmZpbHRlcigobWVzc2FnZSkgPT4g
bWVzc2FnZS5uYW1lID09IElQQy5tZXNzYWdlcy5XZWJQYWdlX0ZpbmRTdHJpbmcubmFtZSk7IG1l
c3NhZ2VzLmxlbmd0aCJdLlVURjhTdHJpbmcsICIxIik7CisgICAgRVhQRUNUX1NUUkVRKFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJtZXNzYWdlc1swXS5kZXNjcmlwdGlv
biJdLlVURjhTdHJpbmcsICJXZWJQYWdlX0ZpbmRTdHJpbmciKTsKKyAgICBFWFBFQ1RfRVEoW3dl
YlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImFyZ3MgPSBtZXNzYWdlc1swXS5h
cmd1bWVudHM7IGFyZ3MubGVuZ3RoIl0uaW50VmFsdWUsIDMpOworICAgIEVYUEVDVF9TVFJFUShb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiYXJnc1swXS50eXBlIl0uVVRG
OFN0cmluZywgIlN0cmluZyIpOworICAgIEVYUEVDVF9TVFJFUShbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiYXJnc1swXS52YWx1ZSJdLlVURjhTdHJpbmcsICJoZWxsbyIp
OworICAgIEVYUEVDVF9TVFJFUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0
OkAiYXJnc1sxXS50eXBlIl0uVVRGOFN0cmluZywgInVpbnQxNl90Iik7CisgICAgRVhQRUNUX0VR
KFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJhcmdzWzFdLnZhbHVlIl0u
aW50VmFsdWUsIDB4MTEpOworICAgIEVYUEVDVF9FUShbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRp
bmdKYXZhU2NyaXB0OkAiYXJnc1sxXS5pc09wdGlvblNldCJdLmJvb2xWYWx1ZSwgWUVTKTsKKyAg
ICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImFy
Z3NbMl0udHlwZSJdLlVURjhTdHJpbmcsICJ1aW50MzJfdCIpOworICAgIEVYUEVDVF9FUShbd2Vi
VmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiYXJnc1syXS52YWx1ZSJdLmludFZh
bHVlLCAxKTsKKyAgICBFWFBFQ1RfU1RSRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAInR5cGVvZihtZXNzYWdlc1swXS5zeW5jUmVxdWVzdElEKSJdLlVURjhTdHJpbmcs
ICJ1bmRlZmluZWQiKTsKKyAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5n
SmF2YVNjcmlwdDpAIm1lc3NhZ2VzWzBdLmRlc3RpbmF0aW9uSUQiXS5pbnRWYWx1ZSwKKyAgICAg
ICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAIklQQy53ZWJQYWdlUHJv
eHlJRC50b1N0cmluZygpIl0uaW50VmFsdWUpOworfQorCiAjZW5kaWYK
</data>
<flag name="review"
          id="428302"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412118</attachid>
            <date>2020-10-22 11:36:24 -0700</date>
            <delta_ts>2020-10-22 11:36:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217870-20201022113624.patch</filename>
            <type>text/plain</type>
            <size>2187</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRlYjc3ZTRhZDhmNWUzNjNl
Yzc4NTgwZDQ2YWUxNGE3NzI4ZTk5YmEuLjFhYjQ3NmE5NTIzMTg3ZTBmZjQxMTZlMGU2ZjQ0MTEx
NzNhODg4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMTAtMjIgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJIHNob3Vs
ZCBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG9ic2VydmUgbWVzc2FnZXMgYmVpbmcgc2VudCBhbmQg
cmVjZWl2ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNzg3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVucmV2aWV3ZWQgQVNBTiByZWxlYXNlIGJ1aWxkIGZpeC4KKworICAgICAgICAqIFBsYXRmb3Jt
L0lQQy9KU0lQQ0JpbmRpbmcuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9JUENU
ZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVzdGluZ0FQSTo6SlNNZXNzYWdl
TGlzdGVuZXI6OkpTTWVzc2FnZUxpc3RlbmVyKToKKwogMjAyMC0xMC0yMiAgTml0emFuIFV6aWVs
eSAgPGxpbmtnb3JvbkBnbWFpbC5jb20+CiAKICAgICAgICAgRWxlbWVudHMgaW4gU2hhZG93IERP
TSBhcmUgd3JvbmdseSBtYXJrZWQgYXMgc3RhbGUgYnkgdGhlIFdlYkRyaXZlcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5jcHAKaW5kZXggYjU2YjU4YzUzMWJkYWZk
ZDAxOWNlMDUwNmUwODY4ZmQ1NDJlMDVlMS4uYTg0YTc5MTJkOGZkMjQ2MWJhNjZiYjhiOTVhODk1
ODNhODJjYTA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENC
aW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcu
Y3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKElQQ19URVNUSU5HX0FQSSkKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVnaXN0
cmFibGVEb21haW4uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggZDE3ZDNlMzVlMGYxMjI5YWYxOWJmODkwNzA5NjVjZTgy
NmRlNjExZi4uYTQ4ZGE1ZTY0YjcyMDhmYTkzY2JkNmQxMjg3ZTJkZTI5NTg0YjNmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAK
QEAgLTg5NCw2ICs4OTQsOCBAQCBKU01lc3NhZ2VMaXN0ZW5lcjo6SlNNZXNzYWdlTGlzdGVuZXIo
SlNJUEMmIGpzSVBDLCBUeXBlIHR5cGUsIEpTQ29udGV4dFJlZiBjb250ZQogICAgIC8vIHNpbmNl
IHRoaXMgb2JqZWN0IGlzIHN1cHBvc2VkIHRvIGxpdmUgYXMgbG9uZyBhcyB0aGUgZ2xvYmFsIG9i
amVjdCBpcyBhbGl2ZS4KICAgICBKU0M6OlByaXZhdGVOYW1lIHVuaXF1ZVByaXZhdGVOYW1lOwog
ICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHZtLCB1bmlxdWVQcml2YXRlTmFtZSwgdG9KUyhn
bG9iYWxPYmplY3QsIGNhbGxiYWNrKSk7CisKKyAgICBVTlVTRURfUEFSQU0oY2F0Y2hTY29wZSk7
CiB9CiAKIHZvaWQgSlNNZXNzYWdlTGlzdGVuZXI6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IElQ
Qzo6RGVjb2RlciYgZGVjb2RlcikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>412119</attachid>
            <date>2020-10-22 11:37:52 -0700</date>
            <delta_ts>2020-10-22 12:16:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217870-20201022113751.patch</filename>
            <type>text/plain</type>
            <size>2148</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4ODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRlYjc3ZTRhZDhmNWUzNjNl
Yzc4NTgwZDQ2YWUxNGE3NzI4ZTk5YmEuLjdlY2I2YjliYzg2NDkwMzJkOTlkMTI0MzdkM2VkYThl
MWRiNGRjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMTAtMjIgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSVBDIHRlc3RpbmcgQVBJIHNob3Vs
ZCBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG9ic2VydmUgbWVzc2FnZXMgYmVpbmcgc2VudCBhbmQg
cmVjZWl2ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNzg3MAorCisgICAgICAgIFVucmV2aWV3ZWQgQVNBTiByZWxlYXNlIGJ1aWxkIGZpeC4KKwor
ICAgICAgICAqIFBsYXRmb3JtL0lQQy9KU0lQQ0JpbmRpbmcuY3BwOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9JUENUZXN0aW5nQVBJLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SVBDVGVz
dGluZ0FQSTo6SlNNZXNzYWdlTGlzdGVuZXI6OkpTTWVzc2FnZUxpc3RlbmVyKToKKwogMjAyMC0x
MC0yMiAgTml0emFuIFV6aWVseSAgPGxpbmtnb3JvbkBnbWFpbC5jb20+CiAKICAgICAgICAgRWxl
bWVudHMgaW4gU2hhZG93IERPTSBhcmUgd3JvbmdseSBtYXJrZWQgYXMgc3RhbGUgYnkgdGhlIFdl
YkRyaXZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvSlNJUENCaW5k
aW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL0pTSVBDQmluZGluZy5jcHAKaW5k
ZXggYjU2YjU4YzUzMWJkYWZkZDAxOWNlMDUwNmUwODY4ZmQ1NDJlMDVlMS4uYTg0YTc5MTJkOGZk
MjQ2MWJhNjZiYjhiOTVhODk1ODNhODJjYTA0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9JUEMvSlNJUENCaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0lQQy9KU0lQQ0JpbmRpbmcuY3BwCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxFKElQQ19U
RVNUSU5HX0FQSSkKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0lQQ1Rlc3RpbmdBUEkuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvSVBDVGVzdGluZ0FQSS5jcHAKaW5kZXggZDE3ZDNlMzVlMGYxMjI5
YWYxOWJmODkwNzA5NjVjZTgyNmRlNjExZi4uYTQ4ZGE1ZTY0YjcyMDhmYTkzY2JkNmQxMjg3ZTJk
ZTI5NTg0YjNmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
SVBDVGVzdGluZ0FQSS5jcHAKQEAgLTg5NCw2ICs4OTQsOCBAQCBKU01lc3NhZ2VMaXN0ZW5lcjo6
SlNNZXNzYWdlTGlzdGVuZXIoSlNJUEMmIGpzSVBDLCBUeXBlIHR5cGUsIEpTQ29udGV4dFJlZiBj
b250ZQogICAgIC8vIHNpbmNlIHRoaXMgb2JqZWN0IGlzIHN1cHBvc2VkIHRvIGxpdmUgYXMgbG9u
ZyBhcyB0aGUgZ2xvYmFsIG9iamVjdCBpcyBhbGl2ZS4KICAgICBKU0M6OlByaXZhdGVOYW1lIHVu
aXF1ZVByaXZhdGVOYW1lOwogICAgIGdsb2JhbE9iamVjdC0+cHV0RGlyZWN0KHZtLCB1bmlxdWVQ
cml2YXRlTmFtZSwgdG9KUyhnbG9iYWxPYmplY3QsIGNhbGxiYWNrKSk7CisKKyAgICBVTlVTRURf
UEFSQU0oY2F0Y2hTY29wZSk7CiB9CiAKIHZvaWQgSlNNZXNzYWdlTGlzdGVuZXI6OmRpZFJlY2Vp
dmVNZXNzYWdlKGNvbnN0IElQQzo6RGVjb2RlciYgZGVjb2RlcikK
</data>

          </attachment>
      

    </bug>

</bugzilla>