<?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>229435</bug_id>
          
          <creation_ts>2021-08-23 19:39:48 -0700</creation_ts>
          <short_desc>ThreadSanitizer: data race of WTF::StringImpl in WebCoreNSURLSessionDataTask._metrics instance variable</short_desc>
          <delta_ts>2021-08-26 12:27:56 -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>WebKit Misc.</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>
          <dependson>229579</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David Kilzer (:ddkilzer)">ddkilzer</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1786647</commentid>
    <comment_count>0</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-23 19:39:48 -0700</bug_when>
    <thetext>ThreadSanitizer: data race of WTF::StringImpl in WebCoreNSURLSessionDataTask._metrics instance variable.

The issue appears to be that -[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:] (which is used by -[WebCoreNSURLSessionTaskMetrics _initWithMetrics:]) does not WTFMove() or make an isolated copy of the `const WebCore::NetworkLoadMetrics&amp;` argument passed into it, so a non-isolated copy is made through its default copy constructor for WebCore::NetworkLoadMetrics on a background thread, which causes problems later because the Objective-C object is released on the main thread.

WARNING: ThreadSanitizer: data race (pid=17141)
  Read of size 4 at 0x7b080000d5e0 by main thread:
    #0 WTF::StringImpl::deref() &lt;null&gt; (WebCore:x86_64+0x245d6)
    #1 WebCore::NetworkLoadMetricsWithoutNonTimingData::~NetworkLoadMetricsWithoutNonTimingData() &lt;null&gt; (WebCore:x86_64+0xa4dc36)
    #2 WebCore::NetworkLoadMetrics::~NetworkLoadMetrics() &lt;null&gt; (WebCore:x86_64+0xa4dbdc)
    #3 WebCore::NetworkLoadMetrics::~NetworkLoadMetrics() &lt;null&gt; (WebCore:x86_64+0xa4dad9)
    #4 -[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]::$_18::~$_18() &lt;null&gt; (WebCore:x86_64+0x3d4dd2a)
    #5 -[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]::$_18::~$_18() &lt;null&gt; (WebCore:x86_64+0x3d4c419)
    #6 WTF::Detail::CallableWrapper&lt;-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]::$_18, void&gt;::~CallableWrapper() &lt;null&gt; (WebCore:x86_64+0x3d5e810)
    #7 WTF::Detail::CallableWrapper&lt;-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]::$_18, void&gt;::~CallableWrapper() &lt;null&gt; (WebCore:x86_64+0x3d5e6b9)
    #8 WTF::Detail::CallableWrapper&lt;-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]::$_18, void&gt;::~CallableWrapper() &lt;null&gt; (WebCore:x86_64+0x3d5e6e9)
    #9 std::__1::default_delete&lt;WTF::Detail::CallableWrapperBase&lt;void&gt; &gt;::operator()(WTF::Detail::CallableWrapperBase&lt;void&gt;*) const &lt;null&gt; (WebCore:x86_64+0x1fe07)
    #10 std::__1::unique_ptr&lt;WTF::Detail::CallableWrapperBase&lt;void&gt;, std::__1::default_delete&lt;WTF::Detail::CallableWrapperBase&lt;void&gt; &gt; &gt;::reset(WTF::Detail::CallableWrapperBase&lt;void&gt;*) &lt;null&gt; (WebCore:x86_64+0x1fdcd)
    #11 std::__1::unique_ptr&lt;WTF::Detail::CallableWrapperBase&lt;void&gt;, std::__1::default_delete&lt;WTF::Detail::CallableWrapperBase&lt;void&gt; &gt; &gt;::~unique_ptr() &lt;null&gt; (WebCore:x86_64+0x1fd5b)
    #12 std::__1::unique_ptr&lt;WTF::Detail::CallableWrapperBase&lt;void&gt;, std::__1::default_delete&lt;WTF::Detail::CallableWrapperBase&lt;void&gt; &gt; &gt;::~unique_ptr() &lt;null&gt; (WebCore:x86_64+0x1fd29)
    #13 WTF::Function&lt;void ()&gt;::~Function() &lt;null&gt; (WebCore:x86_64+0x1fcf9)
    #14 WTF::Function&lt;void ()&gt;::~Function() &lt;null&gt; (WebCore:x86_64+0x1fcc9)
    #15 WTF::BlockPtr&lt;void ()&gt; WTF::BlockPtr&lt;void ()&gt;::fromCallable&lt;WTF::Function&lt;void ()&gt; &gt;(WTF::Function&lt;void ()&gt;)::&apos;lambda&apos;(void const*)::operator()(void const*) const &lt;null&gt; (WebCore:x86_64+0x3d4d1ba)
    #16 WTF::BlockPtr&lt;void ()&gt; WTF::BlockPtr&lt;void ()&gt;::fromCallable&lt;WTF::Function&lt;void ()&gt; &gt;(WTF::Function&lt;void ()&gt;)::&apos;lambda&apos;(void const*)::__invoke(void const*) &lt;null&gt; (WebCore:x86_64+0x3d4d139)
    #17 _Block_release &lt;null&gt; (libsystem_blocks.dylib:x86_64+0x1650)
    #18 WTF::AutodrainedPool::~AutodrainedPool() &lt;null&gt; (JavaScriptCore:x86_64+0x143c9)
    #19 WTF::RunLoop::performWork(void*) &lt;null&gt; (JavaScriptCore:x86_64+0x93122)
    #20 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ &lt;null&gt; (CoreFoundation:x86_64+0x81354)
    #21 WKXPCServiceMain &lt;null&gt; (WebKit:x86_64+0x225da4e)
    #22 main &lt;null&gt; (com.apple.WebKit.GPU.Development:x86_64+0x100003e3e)

  Previous write of size 4 at 0x7b080000d5e0 by thread T3:
    #0 WTF::StringImpl::ref() &lt;null&gt; (WebCore:x86_64+0x2449d)
    #1 WTF::RefPtr&lt;WTF::StringImpl, WTF::RawPtrTraits&lt;WTF::StringImpl&gt;, WTF::DefaultRefDerefTraits&lt;WTF::StringImpl&gt; &gt;::operator=(WTF::RefPtr&lt;WTF::StringImpl, WTF::RawPtrTraits&lt;WTF::StringImpl&gt;, WTF::DefaultRefDerefTraits&lt;WTF::StringImpl&gt; &gt; const&amp;) &lt;null&gt; (WebCore:x86_64+0x243ae)
    #2 WTF::String::operator=(WTF::String const&amp;) &lt;null&gt; (WebCore:x86_64+0x24230)
    #3 WebCore::NetworkLoadMetricsWithoutNonTimingData::operator=(WebCore::NetworkLoadMetricsWithoutNonTimingData const&amp;) &lt;null&gt; (WebCore:x86_64+0x2b96ec2)
    #4 WebCore::NetworkLoadMetrics::operator=(WebCore::NetworkLoadMetrics const&amp;) &lt;null&gt; (WebCore:x86_64+0x2b90ac4)
    #5 -[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:] &lt;null&gt; (WebCore:x86_64+0x3d46b77)
    #6 -[WebCoreNSURLSessionTaskMetrics _initWithMetrics:] &lt;null&gt; (WebCore:x86_64+0x3d47214)
    #7 -[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]::$_18::operator()() const &lt;null&gt; (WebCore:x86_64+0x3d5e8fa)
    #8 WTF::Detail::CallableWrapper&lt;-[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:]::$_18, void&gt;::call() &lt;null&gt; (WebCore:x86_64+0x3d5e71d)
    #9 WTF::Function&lt;void ()&gt;::operator()() const &lt;null&gt; (WebCore:x86_64+0x1f7cd)
    #10 WTF::BlockPtr&lt;void ()&gt; WTF::BlockPtr&lt;void ()&gt;::fromCallable&lt;WTF::Function&lt;void ()&gt; &gt;(WTF::Function&lt;void ()&gt;)::&apos;lambda&apos;(void*)::operator()(void*) const &lt;null&gt; (WebCore:x86_64+0x3d4d22a)
    #11 WTF::BlockPtr&lt;void ()&gt; WTF::BlockPtr&lt;void ()&gt;::fromCallable&lt;WTF::Function&lt;void ()&gt; &gt;(WTF::Function&lt;void ()&gt;)::&apos;lambda&apos;(void*)::__invoke(void*) &lt;null&gt; (WebCore:x86_64+0x3d4d1e9)
    #12 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ &lt;null&gt; (Foundation:x86_64+0x418a1)
    #13 _dispatch_client_callout &lt;null&gt; (libdispatch.dylib:x86_64+0x34ff)

  Location is heap block of size 28 at 0x7b080000d5e0 allocated by main thread:
    #0 __sanitizer_mz_malloc &lt;null&gt; (libclang_rt.tsan_osx_dynamic.dylib:x86_64+0x5168a)
    #1 _malloc_zone_malloc &lt;null&gt; (libsystem_malloc.dylib:x86_64+0x1cf80)
    #2 bmalloc::Cache::allocateSlowCaseNullCache(bmalloc::HeapKind, unsigned long) &lt;null&gt; (JavaScriptCore:x86_64+0x122e50)
    #3 bmalloc::Cache::allocate(bmalloc::HeapKind, unsigned long) &lt;null&gt; (JavaScriptCore:x86_64+0x394c9)
    #4 WTF::fastMalloc(unsigned long) &lt;null&gt; (JavaScriptCore:x86_64+0x38cfb)
    #5 WTF::FastMalloc::malloc(unsigned long) &lt;null&gt; (JavaScriptCore:x86_64+0x1b12b99)
    #6 WTF::Ref&lt;WTF::StringImpl, WTF::RawPtrTraits&lt;WTF::StringImpl&gt; &gt; WTF::StringImpl::createUninitializedInternalNonEmpty&lt;unsigned char&gt;(unsigned int, unsigned char*&amp;) &lt;null&gt; (JavaScriptCore:x86_64+0xa0a3b)
    #7 WTF::Ref&lt;WTF::StringImpl, WTF::RawPtrTraits&lt;WTF::StringImpl&gt; &gt; WTF::StringImpl::createInternal&lt;unsigned char&gt;(unsigned char const*, unsigned int) &lt;null&gt; (JavaScriptCore:x86_64+0xa080f)
    #8 WTF::StringImpl::create(unsigned char const*, unsigned int) &lt;null&gt; (JavaScriptCore:x86_64+0xa07b9)
    #9 WTF::StringImpl::isolatedCopy() const &lt;null&gt; (JavaScriptCore:x86_64+0x11b528)
    #10 WTF::String::isolatedCopy() const &amp; &lt;null&gt; (JavaScriptCore:x86_64+0x11b47e)
    #11 WebCore::NetworkLoadMetrics::isolatedCopy() const &lt;null&gt; (WebCore:x86_64+0x29aecaa)
    #12 -[WebCoreNSURLSessionDataTask _resource:loadFinishedWithError:metrics:] &lt;null&gt; (WebCore:x86_64+0x3d4c2c1)
    #13 -[WebCoreNSURLSessionDataTask resourceFinished:metrics:] &lt;null&gt; (WebCore:x86_64+0x3d4c5cf)
    #14 WebCore::WebCoreNSURLSessionDataTaskClient::loadFinished(WebCore::PlatformMediaResource&amp;, WebCore::NetworkLoadMetrics const&amp;) &lt;null&gt; (WebCore:x86_64+0x3d4a898)
    #15 WebKit::RemoteMediaResource::loadFinished(WebCore::NetworkLoadMetrics const&amp;) &lt;null&gt; (WebKit:x86_64+0x985acb)
    #16 WebKit::RemoteMediaResourceManager::loadFinished(WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics const&amp;) &lt;null&gt; (WebKit:x86_64+0x9866de)
    #17 void IPC::callMemberFunctionImpl&lt;WebKit::RemoteMediaResourceManager, void (WebKit::RemoteMediaResourceManager::*)(WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics const&amp;), std::__1::tuple&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics&gt;, 0ul, 1ul&gt;(WebKit::RemoteMediaResourceManager*, void (WebKit::RemoteMediaResourceManager::*)(WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics const&amp;), std::__1::tuple&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics&gt;&amp;&amp;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul&gt;) &lt;null&gt; (WebKit:x86_64+0x57b003)
    #18 void IPC::callMemberFunction&lt;WebKit::RemoteMediaResourceManager, void (WebKit::RemoteMediaResourceManager::*)(WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics const&amp;), std::__1::tuple&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics&gt;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul&gt; &gt;(std::__1::tuple&lt;WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics&gt;&amp;&amp;, WebKit::RemoteMediaResourceManager*, void (WebKit::RemoteMediaResourceManager::*)(WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics const&amp;)) &lt;null&gt; (WebKit:x86_64+0x579698)
    #19 void IPC::handleMessage&lt;Messages::RemoteMediaResourceManager::LoadFinished, WebKit::RemoteMediaResourceManager, void (WebKit::RemoteMediaResourceManager::*)(WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics const&amp;)&gt;(IPC::Decoder&amp;, WebKit::RemoteMediaResourceManager*, void (WebKit::RemoteMediaResourceManager::*)(WTF::ObjectIdentifier&lt;WebKit::RemoteMediaResourceIdentifierType&gt;, WebCore::NetworkLoadMetrics const&amp;)) &lt;null&gt; (WebKit:x86_64+0x56fb6b)
    #20 WebKit::RemoteMediaResourceManager::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) &lt;null&gt; (WebKit:x86_64+0x56f5b1)
    #21 WebKit::GPUConnectionToWebProcess::dispatchMessage(IPC::Connection&amp;, IPC::Decoder&amp;) &lt;null&gt; (WebKit:x86_64+0x8a9249)
    #22 WebKit::GPUConnectionToWebProcess::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) &lt;null&gt; (WebKit:x86_64+0x767717)
    #23 non-virtual thunk to WebKit::GPUConnectionToWebProcess::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) &lt;null&gt; (WebKit:x86_64+0x76809d)
    #24 IPC::Connection::dispatchMessage(IPC::Decoder&amp;) &lt;null&gt; (WebKit:x86_64+0x938cc)
    #25 IPC::Connection::dispatchMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;) &lt;null&gt; (WebKit:x86_64+0x93ccb)
    #26 IPC::Connection::dispatchOneIncomingMessage() &lt;null&gt; (WebKit:x86_64+0x941d2)
    #27 IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)::$_11::operator()() &lt;null&gt; (WebKit:x86_64+0xae091)
    #28 WTF::Detail::CallableWrapper&lt;IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)::$_11, void&gt;::call() &lt;null&gt; (WebKit:x86_64+0xadfbd)
    #29 WTF::Function&lt;void ()&gt;::operator()() const &lt;null&gt; (JavaScriptCore:x86_64+0x2805d)
    #30 WTF::RunLoop::performWork() &lt;null&gt; (JavaScriptCore:x86_64+0x90392)
    #31 WTF::RunLoop::performWork(void*) &lt;null&gt; (JavaScriptCore:x86_64+0x9311a)
    #32 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ &lt;null&gt; (CoreFoundation:x86_64+0x81354)
    #33 WKXPCServiceMain &lt;null&gt; (WebKit:x86_64+0x225da4e)
    #34 main &lt;null&gt; (com.apple.WebKit.GPU.Development:x86_64+0x100003e3e)

  Thread T3 (tid=22490138, running) is a GCD worker thread

SUMMARY: ThreadSanitizer: data race (/private/var/build/Release/WebCore.framework/Versions/A/WebCore:x86_64+0x245d6) in WTF::StringImpl::deref()+0x26</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786648</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-23 19:40:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/82273277&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786649</commentid>
    <comment_count>2</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-23 19:40:26 -0700</bug_when>
    <thetext>One way to fix this is for -[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:] to make a defensive isolatedCopy() of its argument every time.

Another potential fix would be to make -[WebCoreNSURLSessionTaskTransactionMetrics _initWithMetrics:] and -[WebCoreNSURLSessionTaskMetrics _initWithMetrics:] take a WTFMove()-able `WebCore::NetworkLoadMetrics&amp;&amp;` argument type, but this relies on callers knowing that they need to make an isolatedCopy() first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786650</commentid>
    <comment_count>3</comment_count>
      <attachid>436258</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-08-23 19:43:45 -0700</bug_when>
    <thetext>Created attachment 436258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786651</commentid>
    <comment_count>4</comment_count>
      <attachid>436258</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-23 19:47:45 -0700</bug_when>
    <thetext>Comment on attachment 436258
Patch

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

r=me but consider the comment.

&gt; Source/WebCore/platform/network/cocoa/WebCoreNSURLSession.mm:948
&gt; +            [delegate URLSession:(NSURLSession *)strongSession.get() task:(NSURLSessionDataTask *)strongSelf.get() didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)adoptNS([[WebCoreNSURLSessionTaskMetrics alloc] _initWithMetrics:metrics.isolatedCopy()]).get()];

Line 944 already calls `metrics = metrics.isolatedCopy()`.  Can we just call WTFMove(metrics) here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786653</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-23 19:50:20 -0700</bug_when>
    <thetext>Hit with the following layout tests:

    http/tests/media/video-play-progress.html
    http/tests/media/video-redirect.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786654</commentid>
    <comment_count>6</comment_count>
      <attachid>436259</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-08-23 19:50:57 -0700</bug_when>
    <thetext>Created attachment 436259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786657</commentid>
    <comment_count>7</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2021-08-23 20:04:36 -0700</bug_when>
    <thetext>(In reply to David Kilzer (:ddkilzer) from comment #5)
&gt; Hit with the following layout tests:
&gt; 
&gt;     http/tests/media/video-play-progress.html
&gt;     http/tests/media/video-redirect.html

And likely this one:

    http/tests/media/modern-media-controls/pip-support/pip-support-live-broadcast.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786662</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-23 20:38:12 -0700</bug_when>
    <thetext>Committed r281486 (240860@main): &lt;https://commits.webkit.org/240860@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 436259.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436258</attachid>
            <date>2021-08-23 19:43:45 -0700</date>
            <delta_ts>2021-08-23 19:50:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229435-20210823194344.patch</filename>
            <type>text/plain</type>
            <size>4486</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNjNGVjMzNmYTI3ZWY1
MjExMDNkNjQ5MzNlYWVhNTFlY2U1NDhiOS4uYmQ4Njk2MzU3MmYxNWFjNjY2YWZiMTljNWE5OWNi
OTdkMTc3MDQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA4LTIzICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGhyZWFk
U2FuaXRpemVyOiBkYXRhIHJhY2Ugb2YgV1RGOjpTdHJpbmdJbXBsIGluIFdlYkNvcmVOU1VSTFNl
c3Npb25EYXRhVGFzay5fbWV0cmljcyBpbnN0YW5jZSB2YXJpYWJsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NDM1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBhbiBpc29sYXRlZENvcHkgb2Yg
b3VyIE5ldHdvcmtMb2FkTWV0cmljcyBiZWZvcmUgZ2l2aW5nIHRoZW0gdG8gV2ViQ29yZU5TVVJM
U2Vzc2lvblRhc2tNZXRyaWNzLAorICAgICAgICB3aGljaCBtYWtlcyB0aGVtIGF2YWlsYWJsZSBv
biBhIG5vbi1tYWluIHRocmVhZC4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY29jb2Ev
V2ViQ29yZU5TVVJMU2Vzc2lvbi5tbToKKyAgICAgICAgKC1bV2ViQ29yZU5TVVJMU2Vzc2lvblRh
c2tUcmFuc2FjdGlvbk1ldHJpY3MgX2luaXRXaXRoTWV0cmljczpdKToKKyAgICAgICAgKC1bV2Vi
Q29yZU5TVVJMU2Vzc2lvblRhc2tNZXRyaWNzIF9pbml0V2l0aE1ldHJpY3M6XSk6CisgICAgICAg
ICgtW1dlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFzayBfcmVzb3VyY2U6bG9hZEZpbmlzaGVkV2l0
aEVycm9yOm1ldHJpY3M6XSk6CisKIDIwMjEtMDgtMjMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTZXR0aW5nIHdpbmRvdy5sb2NhdGlvbi5o
cmVmIHRvIGFuIGludmFsaWQgVVJMIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNz
aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNV
UkxTZXNzaW9uLm1tCmluZGV4IDhkYWZjZmE0ZTlhNjQ4MTZjY2RhYjQ4YzM3MjAzYTE0NGVmMjll
NzcuLmYxODc0YWM0OTJmODRhNDM0MmE5Y2NmM2JiNDA3MDM4OWQ2YmMzYjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5TVVJMU2Vzc2lv
bi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVO
U1VSTFNlc3Npb24ubW0KQEAgLTU0LDcgKzU0LDcgQEAgc3RhdGljIE5TRGF0ZSAqIF9fbnVsbGFi
bGUgbmV0d29ya0xvYWRNZXRyaWNzRGF0ZShNb25vdG9uaWNUaW1lIHRpbWUpCiB9CiAKIEBpbnRl
cmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lvblRhc2tUcmFuc2FjdGlvbk1ldHJpY3MgOiBOU09iamVj
dAotLSAoaW5zdGFuY2V0eXBlKV9pbml0V2l0aE1ldHJpY3M6KGNvbnN0IFdlYkNvcmU6Ok5ldHdv
cmtMb2FkTWV0cmljcyYpbWV0cmljczsKKy0gKGluc3RhbmNldHlwZSlfaW5pdFdpdGhNZXRyaWNz
OihXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MmJiltZXRyaWNzOwogQHByb3BlcnR5IChudWxs
YWJsZSwgY29weSwgcmVhZG9ubHkpIE5TRGF0ZSAqZmV0Y2hTdGFydERhdGU7CiBAcHJvcGVydHkg
KG51bGxhYmxlLCBjb3B5LCByZWFkb25seSkgTlNEYXRlICpkb21haW5Mb29rdXBTdGFydERhdGU7
CiBAcHJvcGVydHkgKG51bGxhYmxlLCBjb3B5LCByZWFkb25seSkgTlNEYXRlICpkb21haW5Mb29r
dXBFbmREYXRlOwpAQCAtNzksNyArNzksNyBAQCBzdGF0aWMgTlNEYXRlICogX19udWxsYWJsZSBu
ZXR3b3JrTG9hZE1ldHJpY3NEYXRlKE1vbm90b25pY1RpbWUgdGltZSkKICAgICBXZWJDb3JlOjpO
ZXR3b3JrTG9hZE1ldHJpY3MgX21ldHJpY3M7CiB9CiAKLS0gKGluc3RhbmNldHlwZSlfaW5pdFdp
dGhNZXRyaWNzOihjb25zdCBXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MKKy0g
KGluc3RhbmNldHlwZSlfaW5pdFdpdGhNZXRyaWNzOihXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJp
Y3MmJiltZXRyaWNzCiB7CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAg
IHJldHVybiBuaWw7CkBAIC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIE5TRGF0ZSAqIF9fbnVsbGFi
bGUgbmV0d29ya0xvYWRNZXRyaWNzRGF0ZShNb25vdG9uaWNUaW1lIHRpbWUpCiBAZW5kCiAKIEBp
bnRlcmZhY2UgV2ViQ29yZU5TVVJMU2Vzc2lvblRhc2tNZXRyaWNzIDogTlNPYmplY3QKLS0gKGlu
c3RhbmNldHlwZSlfaW5pdFdpdGhNZXRyaWNzOihjb25zdCBXZWJDb3JlOjpOZXR3b3JrTG9hZE1l
dHJpY3MmKW1ldHJpY3M7CistIChpbnN0YW5jZXR5cGUpX2luaXRXaXRoTWV0cmljczooV2ViQ29y
ZTo6TmV0d29ya0xvYWRNZXRyaWNzJiYpbWV0cmljczsKIEBwcm9wZXJ0eSAoY29weSwgcmVhZG9u
bHkpIE5TQXJyYXk8TlNVUkxTZXNzaW9uVGFza1RyYW5zYWN0aW9uTWV0cmljcyAqPiAqdHJhbnNh
Y3Rpb25NZXRyaWNzOwogQGVuZAogCkBAIC0yMTQsMTEgKzIxNCwxMSBAQCBzdGF0aWMgTlNEYXRl
ICogX19udWxsYWJsZSBuZXR3b3JrTG9hZE1ldHJpY3NEYXRlKE1vbm90b25pY1RpbWUgdGltZSkK
ICAgICBSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vzc2lvblRhc2tUcmFuc2FjdGlvbk1ldHJpY3M+
IF90cmFuc2FjdGlvbk1ldHJpY3M7CiB9CiAKLS0gKGluc3RhbmNldHlwZSlfaW5pdFdpdGhNZXRy
aWNzOihjb25zdCBXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MmKW1ldHJpY3MKKy0gKGluc3Rh
bmNldHlwZSlfaW5pdFdpdGhNZXRyaWNzOihXZWJDb3JlOjpOZXR3b3JrTG9hZE1ldHJpY3MmJilt
ZXRyaWNzCiB7CiAgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgX3RyYW5zYWN0aW9uTWV0cmljcyA9IGFkb3B0TlMoW1tXZWJDb3JlTlNVUkxT
ZXNzaW9uVGFza1RyYW5zYWN0aW9uTWV0cmljcyBhbGxvY10gX2luaXRXaXRoTWV0cmljczptZXRy
aWNzXSk7CisgICAgX3RyYW5zYWN0aW9uTWV0cmljcyA9IGFkb3B0TlMoW1tXZWJDb3JlTlNVUkxT
ZXNzaW9uVGFza1RyYW5zYWN0aW9uTWV0cmljcyBhbGxvY10gX2luaXRXaXRoTWV0cmljczpXVEZN
b3ZlKG1ldHJpY3MpXSk7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKQEAgLTk0NSw3ICs5NDUsNyBA
QCB2b2lkIFdlYkNvcmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6bG9hZEZpbmlzaGVkKFBs
YXRmb3JtTWVkaWFSZXNvdXJjZSYgcmVzbwogICAgICAgICBpZDxOU1VSTFNlc3Npb25UYXNrRGVs
ZWdhdGU+IGRlbGVnYXRlID0gKGlkPE5TVVJMU2Vzc2lvblRhc2tEZWxlZ2F0ZT4pc3Ryb25nU2Vz
c2lvbi5nZXQoKS5kZWxlZ2F0ZTsKIAogICAgICAgICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoVVJMU2Vzc2lvbjp0YXNrOmRpZEZpbmlzaENvbGxlY3RpbmdNZXRy
aWNzOildKQotICAgICAgICAgICAgW2RlbGVnYXRlIFVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAq
KXN0cm9uZ1Nlc3Npb24uZ2V0KCkgdGFzazooTlNVUkxTZXNzaW9uRGF0YVRhc2sgKilzdHJvbmdT
ZWxmLmdldCgpIGRpZEZpbmlzaENvbGxlY3RpbmdNZXRyaWNzOihOU1VSTFNlc3Npb25UYXNrTWV0
cmljcyAqKWFkb3B0TlMoW1tXZWJDb3JlTlNVUkxTZXNzaW9uVGFza01ldHJpY3MgYWxsb2NdIF9p
bml0V2l0aE1ldHJpY3M6bWV0cmljc10pLmdldCgpXTsKKyAgICAgICAgICAgIFtkZWxlZ2F0ZSBV
UkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzdHJvbmdTZXNzaW9uLmdldCgpIHRhc2s6KE5TVVJM
U2Vzc2lvbkRhdGFUYXNrICopc3Ryb25nU2VsZi5nZXQoKSBkaWRGaW5pc2hDb2xsZWN0aW5nTWV0
cmljczooTlNVUkxTZXNzaW9uVGFza01ldHJpY3MgKilhZG9wdE5TKFtbV2ViQ29yZU5TVVJMU2Vz
c2lvblRhc2tNZXRyaWNzIGFsbG9jXSBfaW5pdFdpdGhNZXRyaWNzOm1ldHJpY3MuaXNvbGF0ZWRD
b3B5KCldKS5nZXQoKV07CiAKICAgICAgICAgaWYgKFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKFVSTFNlc3Npb246dGFzazpkaWRDb21wbGV0ZVdpdGhFcnJvcjopXSkKICAg
ICAgICAgICAgIFtkZWxlZ2F0ZSBVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzdHJvbmdTZXNz
aW9uLmdldCgpIHRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopc3Ryb25nU2VsZi5nZXQoKSBk
aWRDb21wbGV0ZVdpdGhFcnJvcjpzdHJvbmdFcnJvci5nZXQoKV07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436259</attachid>
            <date>2021-08-23 19:50:57 -0700</date>
            <delta_ts>2021-08-23 20:38:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229435-20210823195056.patch</filename>
            <type>text/plain</type>
            <size>4963</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxNDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjNjNGVjMzNmYTI3ZWY1
MjExMDNkNjQ5MzNlYWVhNTFlY2U1NDhiOS4uYzE2YTVhM2RiZjUyNWNjOGU1YWRmOTIyMjFiNWM2
NDZiMjMwYTc2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA4LTIzICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVGhyZWFk
U2FuaXRpemVyOiBkYXRhIHJhY2Ugb2YgV1RGOjpTdHJpbmdJbXBsIGluIFdlYkNvcmVOU1VSTFNl
c3Npb25EYXRhVGFzay5fbWV0cmljcyBpbnN0YW5jZSB2YXJpYWJsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5NDM1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2aWQgS2lsemVyLgorCisgICAgICAgIE1vdmUgdGhlIGlzb2xhdGVkIGNvcHkgdG8g
dGhlIFdlYkNvcmVOU1VSTFNlc3Npb25UYXNrTWV0cmljcyBpbnN0ZWFkIG9mIGtlZXBpbmcgYSBj
b3B5IG9uIHRoZSBkZWxlZ2F0ZSB0aHJlYWQKKyAgICAgICAgYW5kIGEgY29weSBvbiB3aGF0ZXZl
ciB0aHJlYWQgb3VyIG1lZGlhIHN0YWNrIHdhbnRzIHRvIHVzZSB0aGUgV2ViQ29yZU5TVVJMU2Vz
c2lvblRhc2tNZXRyaWNzIG9uLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jb2NvYS9X
ZWJDb3JlTlNVUkxTZXNzaW9uLm1tOgorICAgICAgICAoLVtXZWJDb3JlTlNVUkxTZXNzaW9uVGFz
a1RyYW5zYWN0aW9uTWV0cmljcyBfaW5pdFdpdGhNZXRyaWNzOl0pOgorICAgICAgICAoLVtXZWJD
b3JlTlNVUkxTZXNzaW9uVGFza01ldHJpY3MgX2luaXRXaXRoTWV0cmljczpdKToKKyAgICAgICAg
KC1bV2ViQ29yZU5TVVJMU2Vzc2lvbkRhdGFUYXNrIF9yZXNvdXJjZTpsb2FkRmluaXNoZWRXaXRo
RXJyb3I6bWV0cmljczpdKToKKwogMjAyMS0wOC0yMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFNldHRpbmcgd2luZG93LmxvY2F0aW9uLmhy
ZWYgdG8gYW4gaW52YWxpZCBVUkwgc2hvdWxkIHRocm93IGEgVHlwZUVycm9yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VSTFNlc3Np
b24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NvY29hL1dlYkNvcmVOU1VS
TFNlc3Npb24ubW0KaW5kZXggOGRhZmNmYTRlOWE2NDgxNmNjZGFiNDhjMzcyMDNhMTQ0ZWYyOWU3
Ny4uODA5NDViMzE5YTBjNmI2NjBhOWVmYmMzNjdjMDRlY2JmZGM1NjI2ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jb2NvYS9XZWJDb3JlTlNVUkxTZXNzaW9u
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY29jb2EvV2ViQ29yZU5T
VVJMU2Vzc2lvbi5tbQpAQCAtNTQsNyArNTQsNyBAQCBzdGF0aWMgTlNEYXRlICogX19udWxsYWJs
ZSBuZXR3b3JrTG9hZE1ldHJpY3NEYXRlKE1vbm90b25pY1RpbWUgdGltZSkKIH0KIAogQGludGVy
ZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9uVGFza1RyYW5zYWN0aW9uTWV0cmljcyA6IE5TT2JqZWN0
Ci0tIChpbnN0YW5jZXR5cGUpX2luaXRXaXRoTWV0cmljczooY29uc3QgV2ViQ29yZTo6TmV0d29y
a0xvYWRNZXRyaWNzJiltZXRyaWNzOworLSAoaW5zdGFuY2V0eXBlKV9pbml0V2l0aE1ldHJpY3M6
KFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyYmKW1ldHJpY3M7CiBAcHJvcGVydHkgKG51bGxh
YmxlLCBjb3B5LCByZWFkb25seSkgTlNEYXRlICpmZXRjaFN0YXJ0RGF0ZTsKIEBwcm9wZXJ0eSAo
bnVsbGFibGUsIGNvcHksIHJlYWRvbmx5KSBOU0RhdGUgKmRvbWFpbkxvb2t1cFN0YXJ0RGF0ZTsK
IEBwcm9wZXJ0eSAobnVsbGFibGUsIGNvcHksIHJlYWRvbmx5KSBOU0RhdGUgKmRvbWFpbkxvb2t1
cEVuZERhdGU7CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyBOU0RhdGUgKiBfX251bGxhYmxlIG5l
dHdvcmtMb2FkTWV0cmljc0RhdGUoTW9ub3RvbmljVGltZSB0aW1lKQogICAgIFdlYkNvcmU6Ok5l
dHdvcmtMb2FkTWV0cmljcyBfbWV0cmljczsKIH0KIAotLSAoaW5zdGFuY2V0eXBlKV9pbml0V2l0
aE1ldHJpY3M6KGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmljcworLSAo
aW5zdGFuY2V0eXBlKV9pbml0V2l0aE1ldHJpY3M6KFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmlj
cyYmKW1ldHJpY3MKIHsKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMgTlNEYXRlICogX19udWxsYWJs
ZSBuZXR3b3JrTG9hZE1ldHJpY3NEYXRlKE1vbm90b25pY1RpbWUgdGltZSkKIEBlbmQKIAogQGlu
dGVyZmFjZSBXZWJDb3JlTlNVUkxTZXNzaW9uVGFza01ldHJpY3MgOiBOU09iamVjdAotLSAoaW5z
dGFuY2V0eXBlKV9pbml0V2l0aE1ldHJpY3M6KGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0
cmljcyYpbWV0cmljczsKKy0gKGluc3RhbmNldHlwZSlfaW5pdFdpdGhNZXRyaWNzOihXZWJDb3Jl
OjpOZXR3b3JrTG9hZE1ldHJpY3MmJiltZXRyaWNzOwogQHByb3BlcnR5IChjb3B5LCByZWFkb25s
eSkgTlNBcnJheTxOU1VSTFNlc3Npb25UYXNrVHJhbnNhY3Rpb25NZXRyaWNzICo+ICp0cmFuc2Fj
dGlvbk1ldHJpY3M7CiBAZW5kCiAKQEAgLTIxNCwxMSArMjE0LDExIEBAIHN0YXRpYyBOU0RhdGUg
KiBfX251bGxhYmxlIG5ldHdvcmtMb2FkTWV0cmljc0RhdGUoTW9ub3RvbmljVGltZSB0aW1lKQog
ICAgIFJldGFpblB0cjxXZWJDb3JlTlNVUkxTZXNzaW9uVGFza1RyYW5zYWN0aW9uTWV0cmljcz4g
X3RyYW5zYWN0aW9uTWV0cmljczsKIH0KIAotLSAoaW5zdGFuY2V0eXBlKV9pbml0V2l0aE1ldHJp
Y3M6KGNvbnN0IFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyYpbWV0cmljcworLSAoaW5zdGFu
Y2V0eXBlKV9pbml0V2l0aE1ldHJpY3M6KFdlYkNvcmU6Ok5ldHdvcmtMb2FkTWV0cmljcyYmKW1l
dHJpY3MKIHsKICAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJu
IG5pbDsKLSAgICBfdHJhbnNhY3Rpb25NZXRyaWNzID0gYWRvcHROUyhbW1dlYkNvcmVOU1VSTFNl
c3Npb25UYXNrVHJhbnNhY3Rpb25NZXRyaWNzIGFsbG9jXSBfaW5pdFdpdGhNZXRyaWNzOm1ldHJp
Y3NdKTsKKyAgICBfdHJhbnNhY3Rpb25NZXRyaWNzID0gYWRvcHROUyhbW1dlYkNvcmVOU1VSTFNl
c3Npb25UYXNrVHJhbnNhY3Rpb25NZXRyaWNzIGFsbG9jXSBfaW5pdFdpdGhNZXRyaWNzOldURk1v
dmUobWV0cmljcyldKTsKICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtOTQxLDExICs5NDEsMTEg
QEAgdm9pZCBXZWJDb3JlTlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OmxvYWRGaW5pc2hlZChQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2UmIHJlc28KICAgICBSZXRhaW5QdHI8V2ViQ29yZU5TVVJMU2Vz
c2lvbkRhdGFUYXNrPiBzdHJvbmdTZWxmIHsgc2VsZiB9OwogICAgIFJldGFpblB0cjxXZWJDb3Jl
TlNVUkxTZXNzaW9uPiBzdHJvbmdTZXNzaW9uIHsgc2VsZi5zZXNzaW9uIH07CiAgICAgUmV0YWlu
UHRyPE5TRXJyb3I+IHN0cm9uZ0Vycm9yIHsgZXJyb3IgfTsKLSAgICBbc2VsZi5zZXNzaW9uIGFk
ZERlbGVnYXRlT3BlcmF0aW9uOltzdHJvbmdTZWxmLCBzdHJvbmdTZXNzaW9uLCBzdHJvbmdFcnJv
ciwgbWV0cmljcyA9IG1ldHJpY3MuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICBbc2VsZi5zZXNzaW9u
IGFkZERlbGVnYXRlT3BlcmF0aW9uOltzdHJvbmdTZWxmLCBzdHJvbmdTZXNzaW9uLCBzdHJvbmdF
cnJvciwgbWV0cmljcyA9IG1ldHJpY3MuaXNvbGF0ZWRDb3B5KCldICgpIG11dGFibGUgewogICAg
ICAgICBpZDxOU1VSTFNlc3Npb25UYXNrRGVsZWdhdGU+IGRlbGVnYXRlID0gKGlkPE5TVVJMU2Vz
c2lvblRhc2tEZWxlZ2F0ZT4pc3Ryb25nU2Vzc2lvbi5nZXQoKS5kZWxlZ2F0ZTsKIAogICAgICAg
ICBpZiAoW2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoVVJMU2Vzc2lvbjp0
YXNrOmRpZEZpbmlzaENvbGxlY3RpbmdNZXRyaWNzOildKQotICAgICAgICAgICAgW2RlbGVnYXRl
IFVSTFNlc3Npb246KE5TVVJMU2Vzc2lvbiAqKXN0cm9uZ1Nlc3Npb24uZ2V0KCkgdGFzazooTlNV
UkxTZXNzaW9uRGF0YVRhc2sgKilzdHJvbmdTZWxmLmdldCgpIGRpZEZpbmlzaENvbGxlY3RpbmdN
ZXRyaWNzOihOU1VSTFNlc3Npb25UYXNrTWV0cmljcyAqKWFkb3B0TlMoW1tXZWJDb3JlTlNVUkxT
ZXNzaW9uVGFza01ldHJpY3MgYWxsb2NdIF9pbml0V2l0aE1ldHJpY3M6bWV0cmljc10pLmdldCgp
XTsKKyAgICAgICAgICAgIFtkZWxlZ2F0ZSBVUkxTZXNzaW9uOihOU1VSTFNlc3Npb24gKilzdHJv
bmdTZXNzaW9uLmdldCgpIHRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNrICopc3Ryb25nU2VsZi5n
ZXQoKSBkaWRGaW5pc2hDb2xsZWN0aW5nTWV0cmljczooTlNVUkxTZXNzaW9uVGFza01ldHJpY3Mg
KilhZG9wdE5TKFtbV2ViQ29yZU5TVVJMU2Vzc2lvblRhc2tNZXRyaWNzIGFsbG9jXSBfaW5pdFdp
dGhNZXRyaWNzOldURk1vdmUobWV0cmljcyldKS5nZXQoKV07CiAKICAgICAgICAgaWYgKFtkZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKFVSTFNlc3Npb246dGFzazpkaWRDb21w
bGV0ZVdpdGhFcnJvcjopXSkKICAgICAgICAgICAgIFtkZWxlZ2F0ZSBVUkxTZXNzaW9uOihOU1VS
TFNlc3Npb24gKilzdHJvbmdTZXNzaW9uLmdldCgpIHRhc2s6KE5TVVJMU2Vzc2lvbkRhdGFUYXNr
ICopc3Ryb25nU2VsZi5nZXQoKSBkaWRDb21wbGV0ZVdpdGhFcnJvcjpzdHJvbmdFcnJvci5nZXQo
KV07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>