<?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>142343</bug_id>
          
          <creation_ts>2015-03-05 07:12:33 -0800</creation_ts>
          <short_desc>[GTK] [WebKit1] Crash under WebCore::ScrollView::contentsToWindow()</short_desc>
          <delta_ts>2015-04-07 06:26:04 -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>WebKitGTK</component>
          <version>420+</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Milan Crha">mcrha</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ossy</cc>
    
    <cc>tpopela</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1074505</commentid>
    <comment_count>0</comment_count>
      <attachid>247951</attachid>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2015-03-05 07:12:33 -0800</bug_when>
    <thetext>Created attachment 247951
reproducer (wk-crash.c)

Moving this from a downstream bug report:
https://bugzilla.redhat.com/show_bug.cgi?id=1198758

A user of Evolution experienced a crash with below backtrace when selecting certain message. I do not know how much interesting this might be for you, because the crash is related to GtkWidget plugin (a response to &quot;create-plugin-widget&quot; signal of the WebKitWebView). When a widget is returned, WebKitGtk crashes. If not, or the signal handler is not used, then it doesn&apos;t crash.

The attached is a minimal reproducer, just run it and it&apos;ll crash. The first line contains a comment with a command line to compile and run the reproducer. Valgrind claims an invalid read of size 1.

This is with webkitgtk3-2.4.8-1.fc21.

Core was generated by `evolution&apos;.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  WebCore::ScrollView::contentsToWindow (this=0x0, contentsPoint=...) at Source/WebCore/platform/ScrollView.cpp:824
824	    if (delegatesScrolling())

Thread 1 (Thread 0xb772f900 (LWP 25845)):
#0  WebCore::ScrollView::contentsToWindow (this=0x0, contentsPoint=...) at Source/WebCore/platform/ScrollView.cpp:824
        viewPoint = {m_x = 0, m_y = 0}
#1  0x4c7cb3aa in WebCore::GtkPluginWidget::frameRectsChanged (this=0xb1f00870) at Source/WebCore/platform/gtk/GtkPluginWidget.cpp:66
        rect = {m_location = {m_x = 10, m_y = 151}, m_size = {m_width = &lt;optimized out&gt;, m_height = &lt;optimized out&gt;}}
        allocation = {x = 10, y = 151, width = 0, height = 1153654784}
#2  0x4b6e5b7d in WebCore::Widget::setFrameRect (this=0xb1f00870, rect=...) at Source/WebCore/platform/gtk/WidgetGtk.cpp:110
No locals.
#3  0x4c06c940 in WebCore::RenderWidget::setWidgetGeometry (this=this@entry=0xb1e7c960, frame=...) at Source/WebCore/rendering/RenderWidget.cpp:137
        clipRect = {m_location = {m_x = 0, m_y = 0}, m_size = {m_width = 1235, m_height = 1563}}
        oldFrameRect = {m_location = {m_x = 0, m_y = 0}, m_size = {m_width = 0, m_height = 0}}
        weakThis = {m_ref = {m_ptr = 0xb1eecd58}}
        newFrameRect = {m_location = {m_x = 10, m_y = 151}, m_size = {m_width = 1215, m_height = 0}}
#4  0x4c06d132 in WebCore::RenderWidget::updateWidgetGeometry (this=0xb1e7c960) at Source/WebCore/rendering/RenderWidget.cpp:163
        contentBox = {m_location = {m_x = {m_value = 0}, m_y = {m_value = 0}}, m_size = {m_width = {m_value = 77760}, m_height = {m_value = 0}}}
        absoluteContentBox = {m_location = {m_x = {m_value = 640}, m_y = {m_value = 9664}}, m_size = {m_width = {m_value = 77760}, m_height = {m_value = 0}}}
        this = 0xb1e7c960
#5  0x4c06db21 in WebCore::RenderWidget::setWidget (this=this@entry=0xb1e7c960, widget=...) at Source/WebCore/rendering/RenderWidget.cpp:186
        weakThis = {m_ref = {m_ptr = 0xb1eecd58}}
#6  0x4bd7944f in WebCore::SubframeLoader::loadPlugin (this=this@entry=0xb22c840, pluginElement=..., url=..., mimeType=..., paramNames=..., paramValues=..., useFallback=useFallback@entry=false) at Source/WebCore/loader/SubframeLoader.cpp:458
        renderer = 0xb1e7c960
        contentSize = {m_width = 1215, m_height = 0}
        widget = {m_ptr = 0xb1f00870}
#7  0x4bd796dc in WebCore::SubframeLoader::requestPlugin (this=0xb22c840, ownerElement=..., url=..., mimeType=..., paramNames=..., paramValues=..., useFallback=false) at Source/WebCore/loader/SubframeLoader.cpp:157
        useFallback = false
        paramValues = @0xbfddbfc0: {&lt;WTF::VectorBuffer&lt;WTF::String, 0u&gt;&gt; = {&lt;WTF::VectorBufferBase&lt;WTF::String&gt;&gt; = {m_buffer = 0xb1f2e600, m_capacity = 16, m_size = 6}, &lt;No data fields&gt;}, &lt;No data fields&gt;}
        mimeType = @0xbfddbfb0: {m_impl = {m_ptr = 0xb43ecbd0}}
        url = @0xbfddbe9c: {m_string = {m_impl = {m_ptr = 0xb1f0a7c0}}, m_isValid = true, m_protocolIsInHTTPFamily = false, m_schemeEnd = 4, m_userStart = 7, m_userEnd = 7, m_passwordEnd = 7, m_hostEnd = 12, m_portEnd = 12, m_pathAfterLastSlash = 18, m_pathEnd = 41, m_queryEnd = 41, m_fragmentEnd = 41}
        this = 0xb22c840
        paramNames = @0xbfddbfb4: {&lt;WTF::VectorBuffer&lt;WTF::String, 0u&gt;&gt; = {&lt;WTF::VectorBufferBase&lt;WTF::String&gt;&gt; = {m_buffer = 0xb1f2e700, m_capacity = 16, m_size = 6}, &lt;No data fields&gt;}, &lt;No data fields&gt;}
        ownerElement = @0xc1a17d0: {&lt;WebCore::HTMLPlugInElement&gt; = {&lt;WebCore::HTMLFrameOwnerElement&gt; = {&lt;WebCore::HTMLElement&gt; = {&lt;WebCore::StyledElement&gt; = {&lt;WebCore::Element&gt; = {&lt;WebCore::ContainerNode&gt; = {&lt;WebCore::Node&gt; = {&lt;WebCore::EventTarget&gt; = {_vptr.EventTarget = 0x4d281dc8 &lt;vtable for WebCore::HTMLObjectElement+8&gt;}, &lt;WebCore::ScriptWrappable&gt; = {m_wrapper = {m_impl = 0x0}}, &lt;WebCore::TreeShared&lt;WebCore::Node&gt;&gt; = {m_refCount = 4}, m_nodeFlags = 1057054, m_parentNode = 0xdae4080, m_treeScope = 0xb1f0e42c, m_previous = 0xbb3fc50, m_next = 0xdc54500, m_data = {m_renderer = 0xb1e7c960, m_rareData = 0xb1e7c960}}, m_firstChild = 0x0, m_lastChild = 0x0}, m_tagName = {m_impl = 0xb43daf60}, m_elementData = {m_ptr = 0xb2a073a8}}, &lt;No data fields&gt;}, &lt;No data fields&gt;}, m_contentFrame = 0x0, m_sandboxFlags = 0}, m_inBeforeLoadEventHandler = false, m_instance = {m_ptr = 0x0}, m_swapRendererTimer = {&lt;WebCore::TimerBase&gt; = {_vptr.TimerBase = 0x4d256220 &lt;vtable for WebCore::Timer&lt;WebCore::HTMLPlugInElement&gt;+8&gt;, m_nextFireTime = 0, m_unalignedNextFireTime = 0, m_repeatInterval = 0, m_heapIndex = -1, m_heapInsertionOrder = 1, m_cachedThreadGlobalTimerHeap = 0x0}, m_function = {&lt;std::_Maybe_unary_or_binary_function&lt;void&gt;&gt; = {&lt;No data fields&gt;}, &lt;std::_Function_base&gt; = {static _M_max_size = 8, static _M_max_align = 4, _M_functor = {_M_unused = {_M_object = 0xd826478, _M_const_object = 0xd826478, _M_function_pointer = 0xd826478, _M_member_pointer = (void (std::_Undefined_class::*)(std::_Undefined_class * const)) 0xd826478}, _M_pod_data = &quot;xd\202\r\000\000\000&quot;}, _M_manager = 0x4bb5f3d0 &lt;std::_Function_base::_Base_manager&lt;std::_Bind&lt;std::_Mem_fn&lt;void (WebCore::HTMLPlugInElement::*)(WebCore::Timer&lt;WebCore::HTMLPlugInElement&gt;&amp;)&gt; (WebCore::HTMLPlugInElement*, std::reference_wrapper&lt;WebCore::Timer&lt;WebCore::HTMLPlugInElement&gt; &gt;)&gt; &gt;::_M_manager(std::_Any_data&amp;, std::_Any_data const&amp;, std::_Manager_operation)&gt;}, _M_invoker = 0x4bb5f470 &lt;std::_Function_handler&lt;void (), std::_Bind&lt;std::_Mem_fn&lt;void (WebCore::HTMLPlugInElement::*)(WebCore::Timer&lt;WebCore::HTMLPlugInElement&gt;&amp;)&gt; (WebCore::HTMLPlugInElement*, std::reference_wrapper&lt;WebCore::Timer&lt;WebCore::HTMLPlugInElement&gt; &gt;)&gt; &gt;::_M_invoke(std::_Any_data const&amp;)&gt;}}, m_pluginReplacement = {m_ptr = 0x0}, m_NPObject = 0x0, m_isCapturingMouseEvents = false, m_displayState = WebCore::HTMLPlugInElement::Playing}, m_imageLoader = {m_ptr = 0x0}, m_serviceType = {m_impl = {m_ptr = 0xb43ecbd0}}, m_url = {m_impl = {m_ptr = 0xb443e990}}, m_loadedUrl = {m_string = {m_impl = {m_ptr = 0xb1f0a7c0}}, m_isValid = true, m_protocolIsInHTTPFamily = false, m_schemeEnd = 4, m_userStart = 7, m_userEnd = 7, m_passwordEnd = 7, m_hostEnd = 12, m_portEnd = 12, m_pathAfterLastSlash = 18, m_pathEnd = 41, m_queryEnd = 41, m_fragmentEnd = 41}, m_needsWidgetUpdate = false, m_shouldPreferPlugInsForImages = false, m_needsDocumentActivationCallbacks = true, m_pendingClickEventFromSnapshot = {m_ptr = 0x0}, m_simulatedMouseClickTimer = {&lt;WebCore::TimerBase&gt; = {_vptr.TimerBase = 0x4d256238 &lt;vtable for WebCore::DeferrableOneShotTimer&lt;WebCore::HTMLPlugInImageElement&gt;+8&gt;, m_nextFireTime = 0, m_unalignedNextFireTime = 0, m_repeatInterval = 0, m_heapIndex = -1, m_heapInsertionOrder = 194433464, m_cachedThreadGlobalTimerHeap = 0x0}, m_object = 0xc1a17d0, m_function = (void (WebCore::HTMLPlugInImageElement::*)(WebCore::HTMLPlugInImageElement * const, WebCore::DeferrableOneShotTimer&lt;WebCore::HTMLPlugInImageElement&gt; &amp;)) 0x4bb609d0 &lt;WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired(WebCore::DeferrableOneShotTimer&lt;WebCore::HTMLPlugInImageElement&gt;&amp;)&gt;, m_delay = 0.75, m_shouldRestartWhenTimerFires = false}, m_removeSnapshotTimer = {&lt;WebCore::TimerBase&gt; = {_vptr.TimerBase = 0x4d256250 &lt;vtable for WebCore::Timer&lt;WebCore::HTMLPlugInImageElement&gt;+8&gt;, m_nextFireTime = 0, m_unalignedNextFireTime = 0, m_repeatInterval = 0, m_heapIndex = -1, m_heapInsertionOrder = 2147483648, m_cachedThreadGlobalTimerHeap = 0x0}, m_function = {&lt;std::_Maybe_unary_or_binary_function&lt;void&gt;&gt; = {&lt;No data fields&gt;}, &lt;std::_Function_base&gt; = {static _M_max_size = 8, static _M_max_align = 4, _M_functor = {_M_unused = {_M_object = 0xb3383b8, _M_const_object = 0xb3383b8, _M_function_pointer = 0xb3383b8, _M_member_pointer = (void (std::_Undefined_class::*)(std::_Undefined_class * const)) 0xb3383b8}, _M_pod_data = &quot;\270\203\063\v\000\000\000&quot;}, _M_manager = 0x4bb64640 &lt;std::_Function_base::_Base_manager&lt;std::_Bind&lt;std::_Mem_fn&lt;void (WebCore::HTMLPlugInImageElement::*)(WebCore::Timer&lt;WebCore::HTMLPlugInImageElement&gt;&amp;)&gt; (WebCore::HTMLPlugInImageElement*, std::reference_wrapper&lt;WebCore::Timer&lt;WebCore::HTMLPlugInImageElement&gt; &gt;)&gt; &gt;::_M_manager(std::_Any_data&amp;, std::_Any_data const&amp;, std::_Manager_operation)&gt;}, _M_invoker = 0x4bb646e0 &lt;std::_Function_handler&lt;void (), std::_Bind&lt;std::_Mem_fn&lt;void (WebCore::HTMLPlugInImageElement::*)(WebCore::Timer&lt;WebCore::HTMLPlugInImageElement&gt;&amp;)&gt; (WebCore::HTMLPlugInImageElement*, std::reference_wrapper&lt;WebCore::Timer&lt;WebCore::HTMLPlugInImageElement&gt; &gt;)&gt; &gt;::_M_invoke(std::_Any_data const&amp;)&gt;}}, m_snapshotImage = {m_ptr = 0x0}, m_createdDuringUserGesture = false, m_isRestartedPlugin = false, m_needsCheckForSizeChange = false, m_plugInWasCreated = true, m_deferredPromotionToPrimaryPlugIn = false, m_sizeWhenSnapshotted = {m_width = 0, m_height = 0}, m_snapshotDecision = WebCore::HTMLPlugInImageElement::NeverSnapshot}
#8  0x4bd7a51a in WebCore::SubframeLoader::requestObject (this=this@entry=0xb22c840, ownerElement=..., url=..., frameName=..., mimeType=..., paramNames=..., paramValues=...) at Source/WebCore/loader/SubframeLoader.cpp:225
        success = &lt;optimized out&gt;
        completedURL = {m_string = {m_impl = {m_ptr = 0xb1f0a7c0}}, m_isValid = true, m_protocolIsInHTTPFamily = false, m_schemeEnd = 4, m_userStart = 7, m_userEnd = 7, m_passwordEnd = 7, m_hostEnd = 12, m_portEnd = 12, m_pathAfterLastSlash = 18, m_pathEnd = 41, m_queryEnd = 41, m_fragmentEnd = 41}
        hasFallbackContent = false
        useFallback = false
#9  0x4bb64490 in WebCore::HTMLPlugInImageElement::requestObject (this=this@entry=0xc1a17d0, url=..., mimeType=..., paramNames=..., paramValues=...) at Source/WebCore/html/HTMLPlugInImageElement.cpp:774
        loader = @0xb22c840: {m_containsPlugins = false, m_frame = @0xb43e0e00}
        paramValues = @0xbfddbfc0: {&lt;WTF::VectorBuffer&lt;WTF::String, 0u&gt;&gt; = {&lt;WTF::VectorBufferBase&lt;WTF::String&gt;&gt; = {m_buffer = 0xb1f2e600, m_capacity = 16, m_size = 6}, &lt;No data fields&gt;}, &lt;No data fields&gt;}
        mimeType = @0xbfddbfb0: {m_impl = {m_ptr = 0xb43ecbd0}}
        url = @0xbfddbfac: {m_impl = {m_ptr = 0xb443e990}}
        this = 0xc1a17d0
        paramNames = @0xbfddbfb4: {&lt;WTF::VectorBuffer&lt;WTF::String, 0u&gt;&gt; = {&lt;WTF::VectorBufferBase&lt;WTF::String&gt;&gt; = {m_buffer = 0xb1f2e700, m_capacity = 16, m_size = 6}, &lt;No data fields&gt;}, &lt;No data fields&gt;}
#10 0x4bb54448 in WebCore::HTMLObjectElement::updateWidget (this=0xc1a17d0, pluginCreationOption=WebCore::CreateOnlyNonNetscapePlugins) at Source/WebCore/html/HTMLObjectElement.cpp:332
        url = {m_impl = {m_ptr = 0xb443e990}}
        serviceType = {m_impl = {m_ptr = 0xb43ecbd0}}
        paramValues = {&lt;WTF::VectorBuffer&lt;WTF::String, 0u&gt;&gt; = {&lt;WTF::VectorBufferBase&lt;WTF::String&gt;&gt; = {m_buffer = 0xb1f2e600, m_capacity = 16, m_size = 6}, &lt;No data fields&gt;}, &lt;No data fields&gt;}
        protect = {m_ptr = 0xc1a17d0}
        beforeLoadAllowedLoad = &lt;optimized out&gt;
        success = true
        paramNames = {&lt;WTF::VectorBuffer&lt;WTF::String, 0u&gt;&gt; = {&lt;WTF::VectorBufferBase&lt;WTF::String&gt;&gt; = {m_buffer = 0xb1f2e700, m_capacity = 16, m_size = 6}, &lt;No data fields&gt;}, &lt;No data fields&gt;}
#11 0x4bb62146 in WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary (this=0xc1a17d0) at Source/WebCore/html/HTMLPlugInImageElement.cpp:282
        this = 0xc1a17d0
#12 0x4bb6217e in WebCore::HTMLPlugInImageElement::updateWidgetCallback (node=...) at Source/WebCore/html/HTMLPlugInImageElement.cpp:326
No locals.
#13 0x4b909a99 in WebCore::ContainerNode::dispatchPostAttachCallbacks () at Source/WebCore/dom/ContainerNode.cpp:817
        info = &lt;optimized out&gt;
        callback = &lt;optimized out&gt;
        params = {first = {m_ptr = 0xc1a17d0}, second = &lt;optimized out&gt;}
        i = 5
#14 0x4b909bdb in WebCore::ContainerNode::resumePostAttachCallbacks (document=...) at Source/WebCore/dom/ContainerNode.cpp:784
        protect = {m_ptr = 0xb1f12a00}
#15 0x4b922539 in ~PostAttachCallbackDisabler (this=&lt;synthetic pointer&gt;, __in_chrg=&lt;optimized out&gt;) at Source/WebCore/dom/Element.h:826
No locals.
#16 WebCore::Document::recalcStyle (this=this@entry=0xb1f12a00, change=&lt;optimized out&gt;, change@entry=WebCore::Style::NoChange) at Source/WebCore/dom/Document.cpp:1766
        disabler = {m_document = @0xb1f12a00}
        suspendWidgetHierarchyUpdates = {static s_widgetHierarchyUpdateSuspendCount = 0}
        repaintRegionAccumulator = {m_rootView = 0xb2af4960, m_wasAccumulatingRepaintRegion = false}
        cookie = {m_instrumentingAgents = {m_ptr = 0x0}, m_timelineAgentId = 0}
#17 0x4b9235ad in WebCore::Document::updateStyleIfNeeded (this=this@entry=0xb1f12a00) at Source/WebCore/dom/Document.cpp:1802
        animationUpdateBlock = &lt;optimized out&gt;
#18 0x4b92630a in WebCore::Document::finishedParsing (this=0xb1f12a00) at Source/WebCore/dom/Document.cpp:4457
        f = {m_ptr = 0xb449e000}
#19 0x4bb95080 in WebCore::HTMLConstructionSite::finishedParsing (this=this@entry=0xb1f0984c) at Source/WebCore/html/parser/HTMLConstructionSite.cpp:392
No locals.
#20 0x4bbc6a43 in WebCore::HTMLTreeBuilder::finished (this=0xb1f09840) at Source/WebCore/html/parser/HTMLTreeBuilder.cpp:3025
No locals.
#21 0x4bb9c3d4 in WebCore::HTMLDocumentParser::end (this=this@entry=0xb444f800) at Source/WebCore/html/parser/HTMLDocumentParser.cpp:439
No locals.
#22 0x4bb9c420 in WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd (this=this@entry=0xb444f800) at Source/WebCore/html/parser/HTMLDocumentParser.cpp:450
No locals.
#23 0x4bb9fba3 in WebCore::HTMLDocumentParser::prepareToStopParsing (this=0xb444f800) at Source/WebCore/html/parser/HTMLDocumentParser.cpp:165
        protect = {m_ptr = 0xb444f800}
#24 0x4bb9c4a5 in WebCore::HTMLDocumentParser::attemptToEnd (this=0xb444f800) at Source/WebCore/html/parser/HTMLDocumentParser.cpp:462
        this = 0xb444f800
#25 0x4bb9c597 in WebCore::HTMLDocumentParser::finish (this=0xb444f800) at Source/WebCore/html/parser/HTMLDocumentParser.cpp:490
No locals.
#26 0x4bd2cc35 in WebCore::DocumentWriter::end (this=this@entry=0xb4404054) at Source/WebCore/loader/DocumentWriter.cpp:248
        protect = {m_ptr = 0xb449e000}
#27 0x4bd21afb in WebCore::DocumentLoader::finishedLoading (this=0xb4404000, finishTime=0) at Source/WebCore/loader/DocumentLoader.cpp:440
        protect = {m_ptr = 0xb4404000}
        responseEndTime = 898606.09792700002
#28 0x4bd21cca in WebCore::DocumentLoader::notifyFinished (this=0xb4404000, resource=0xb1f0fa00) at Source/WebCore/loader/DocumentLoader.cpp:374
No locals.
#29 0x4bd098b1 in WebCore::CachedResource::checkNotify (this=0xb1f0fa00) at Source/WebCore/loader/cache/CachedResource.cpp:332
        w = {m_clientSet = @0xb1f0fa04, m_clientVector = {&lt;WTF::VectorBuffer&lt;WebCore::CachedResourceClient*, 0u&gt;&gt; = {&lt;WTF::VectorBufferBase&lt;WebCore::CachedResourceClient*&gt;&gt; = {m_buffer = 0xb1eec8b8, m_capacity = 2, m_size = 1}, &lt;No data fields&gt;}, &lt;No data fields&gt;}, m_index = 1}
#30 0x4bd0878a in WebCore::CachedResource::finishLoading (this=this@entry=0xb1f0fa00) at Source/WebCore/loader/cache/CachedResource.cpp:348
No locals.
#31 0x4bd05cd1 in WebCore::CachedRawResource::finishLoading (this=0xb1f0fa00, data=0xb1f0b100) at Source/WebCore/loader/cache/CachedRawResource.cpp:94
        protect = {&lt;WebCore::CachedResourceHandleBase&gt; = {m_resource = 0xb1f0fa00}, &lt;No data fields&gt;}
        dataBufferingPolicy = WebCore::BufferData
#32 0x4bd7b37a in WebCore::SubresourceLoader::didFinishLoading (this=0xb43e7580, finishTime=0) at Source/WebCore/loader/SubresourceLoader.cpp:309
        protect = {m_ptr = 0xb43e7580}
        protectResource = {&lt;WebCore::CachedResourceHandleBase&gt; = {m_resource = 0xb1f0fa00}, &lt;No data fields&gt;}
#33 0x4bd7019a in WebCore::ResourceLoader::didFinishLoading (this=0xb43e7580, finishTime=0) at Source/WebCore/loader/ResourceLoader.cpp:517
No locals.
#34 0x4c62c328 in WebCore::readCallback (asyncResult=0xd3d3e68, data=0xb1f0b590) at Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:1339
        handle = {m_ptr = 0xb1f0b590}
        bytesRead = 0
        d = 0xb1ec9c00
        error = {m_ptr = 0x0}
        currentPosition = &lt;optimized out&gt;
        encodedDataLength = &lt;optimized out&gt;
#35 0x467e29ec in async_ready_callback_wrapper () from /lib/libgio-2.0.so.0
No symbol table info available.
#36 0x4680d202 in g_task_return_now () from /lib/libgio-2.0.so.0
No symbol table info available.
#37 0x4680d23c in complete_in_idle_cb () from /lib/libgio-2.0.so.0
No symbol table info available.
#38 0x46623a11 in g_idle_dispatch () from /lib/libglib-2.0.so.0
No symbol table info available.
#39 0x466271d3 in g_main_context_dispatch () from /lib/libglib-2.0.so.0
No symbol table info available.
#40 0x46627598 in g_main_context_iterate.isra () from /lib/libglib-2.0.so.0
No symbol table info available.
#41 0x46627923 in g_main_loop_run () from /lib/libglib-2.0.so.0
No symbol table info available.
#42 0x49fe552d in ?? ()
No symbol table info available.
#43 0x0b044110 in ?? ()
No symbol table info available.
#44 0x4628be7e in __libc_start_main () from /lib/libc.so.6
No symbol table info available.
#45 0x0804ae69 in _start ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074586</commentid>
    <comment_count>1</comment_count>
      <attachid>247969</attachid>
    <who name="Milan Crha">mcrha</who>
    <bug_when>2015-03-05 11:03:41 -0800</bug_when>
    <thetext>Created attachment 247969
naive solution

A naive solution, which fixes the crash. I didn&apos;t spot any side-effects, the widget seems to be placed to the right place, thus I&apos;d say it&apos;s also one possible solution for the crash (not only the naive solution).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074588</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-05 11:06:38 -0800</bug_when>
    <thetext>Attachment 247969 did not pass style-queue:


Total errors found: 0 in 0 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083302</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-04-07 06:26:04 -0700</bug_when>
    <thetext>Committed: &lt;http://trac.webkit.org/changeset/182470&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>247951</attachid>
            <date>2015-03-05 07:12:33 -0800</date>
            <delta_ts>2015-03-05 07:12:33 -0800</delta_ts>
            <desc>reproducer (wk-crash.c)</desc>
            <filename>wk-crash.c</filename>
            <type>text/x-log</type>
            <size>33126</size>
            <attacher name="Milan Crha">mcrha</attacher>
            
              <data encoding="base64">LyogZ2NjIHdrLWNyYXNoLmMgLWcgLU8wIC1vIHdrLWNyYXNoIGBwa2ctY29uZmlnIC0tY2ZsYWdz
IC0tbGlicyBndGsrLTMuMCB3ZWJraXRndGstMy4wYCAmJiAuL3drLWNyYXNoICovCgojaW5jbHVk
ZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNs
dWRlIDxndGsvZ3RrLmg+CiNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CgojZGVmaW5lIExJQlNP
VVBfVVNFX1VOU1RBQkxFX1JFUVVFU1RfQVBJCgojaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAtcmVxdWVzdC5oPgoKLyogU3RhbmRhcmQgR09iamVjdCBtYWNy
b3MgKi8KI2RlZmluZSBFX1RZUEVfRklMRV9SRVFVRVNUIFwKCShlX2ZpbGVfcmVxdWVzdF9nZXRf
dHlwZSAoKSkKI2RlZmluZSBFX0ZJTEVfUkVRVUVTVChvYmopIFwKCShHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCBcCgkoKG9iaiksIEVfVFlQRV9GSUxFX1JFUVVFU1QsIEVGaWxlUmVxdWVzdCkp
CiNkZWZpbmUgRV9GSUxFX1JFUVVFU1RfQ0xBU1MoY2xzKSBcCgkoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QgXAoJKChjbHMpLCBFX1RZUEVfRklMRV9SRVFVRVNULCBFRmlsZVJlcXVlc3RDbGFzcykp
CiNkZWZpbmUgRV9JU19GSUxFX1JFUVVFU1Qob2JqKSBcCgkoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUgXAoJKChvYmopLCBFX1RZUEVfRklMRV9SRVFVRVNUKSkKI2RlZmluZSBFX0lTX0ZJTEVf
UkVRVUVTVF9DTEFTUyhjbHMpIFwKCShHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSBcCgkoKGNscyks
IEVfVFlQRV9GSUxFX1JFUVVFU1QpKQojZGVmaW5lIEVfRklMRV9SRVFVRVNUX0dFVF9DTEFTUyhv
YmopIFwKCShHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTIFwKCSgob2JqKSwgRV9UWVBFX0ZJTEVf
UkVRVUVTVCwgRUZpbGVSZXF1ZXN0Q2xhc3MpKQoKdHlwZWRlZiBzdHJ1Y3QgX0VGaWxlUmVxdWVz
dCBFRmlsZVJlcXVlc3Q7CnR5cGVkZWYgc3RydWN0IF9FRmlsZVJlcXVlc3RDbGFzcyBFRmlsZVJl
cXVlc3RDbGFzczsKdHlwZWRlZiBzdHJ1Y3QgX0VGaWxlUmVxdWVzdFByaXZhdGUgRUZpbGVSZXF1
ZXN0UHJpdmF0ZTsKCnN0cnVjdCBfRUZpbGVSZXF1ZXN0IHsKCVNvdXBSZXF1ZXN0IHBhcmVudDsK
CUVGaWxlUmVxdWVzdFByaXZhdGUgKnByaXY7Cn07CgpzdHJ1Y3QgX0VGaWxlUmVxdWVzdENsYXNz
IHsKCVNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50Owp9OwoKR1R5cGUJCWVfZmlsZV9yZXF1ZXN0X2dl
dF90eXBlCQkodm9pZCkgR19HTlVDX0NPTlNUOwoKI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmlu
ZSBkKHgpCgojZGVmaW5lIEVfRklMRV9SRVFVRVNUX0dFVF9QUklWQVRFKG9iaikgXAoJKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURSBcCgkoKG9iaiksIEVfVFlQRV9GSUxFX1JFUVVFU1QsIEVG
aWxlUmVxdWVzdFByaXZhdGUpKQoKc3RydWN0IF9FRmlsZVJlcXVlc3RQcml2YXRlIHsKCWdjaGFy
ICpjb250ZW50X3R5cGU7CglnaW50IGNvbnRlbnRfbGVuZ3RoOwp9OwoKR19ERUZJTkVfVFlQRSAo
RUZpbGVSZXF1ZXN0LCBlX2ZpbGVfcmVxdWVzdCwgU09VUF9UWVBFX1JFUVVFU1QpCgpzdGF0aWMg
dm9pZApoYW5kbGVfZmlsZV9yZXF1ZXN0IChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKICAgICAg
ICAgICAgICAgICAgICAgR09iamVjdCAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICBHQ2Fu
Y2VsbGFibGUgKmNhbmNlbGxhYmxlKQp7CglFRmlsZVJlcXVlc3QgKnJlcXVlc3QgPSBFX0ZJTEVf
UkVRVUVTVCAob2JqZWN0KTsKCVNvdXBVUkkgKnVyaTsKCUdJbnB1dFN0cmVhbSAqc3RyZWFtOwoJ
Z2NoYXIgKmNvbnRlbnRzOwoJZ3NpemUgbGVuZ3RoOwoKCWlmIChnX2NhbmNlbGxhYmxlX2lzX2Nh
bmNlbGxlZCAoY2FuY2VsbGFibGUpKQoJCXJldHVybjsKCgl1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0
X3VyaSAoU09VUF9SRVFVRVNUIChyZXF1ZXN0KSk7CgoJaWYgKHN0cnN0ciAodXJpLT5wYXRoLCAi
L2IuaHRtbCIpKSB7CgkJY29uc3QgZ2NoYXIgKmJodG1sID0KCQkJIjwhLS1SZXR1cm4tUGF0aDog
PGd1ZXJia3JAZG5zMy5wbnNuZXQuY28uanA+IgoJCQkiUmVjZWl2ZWQ6IGZyb20gc210cC0xMi5p
dGFsaWFvbmxpbmUuaXQgKDEwLjI0OC4yNS4xNDApIGJ5IGNwbXMxOTQuaW9sLmxvY2FsICg4LjYu
MDYwLjQ0KSIKCQkJIiAgICAgICAgaWQgNTQ3MDVDNUYwMDE0NEFDRSBmb3IgZGllZ29qZXN1czIy
M0BsaWJlcm8uaXQ7IE1vbiwgMjQgTm92IDIwMTQgMDQ6MTY6MTcgKzAxMDAiCgkJCSJSZWNlaXZl
ZDogZnJvbSBkbnMzLnBuc25ldC5jby5qcCAoWzIyMS4xMTcuMzkuMjM1XSkiCgkJCSIJYnkgc210
cC0xMi5pb2wubG9jYWwgd2l0aCBiaXpzbXRwIgoJCQkiCWlkIEtGR0IxcDAxMDU0UXhqeDBDRkdG
M3U7IE1vbiwgMjQgTm92IDIwMTQgMDQ6MTY6MTcgKzAxMDAiCgkJCSJ4LWxpYmphbW9pYnQ6IDI2
MDEiCgkJCSJSZWNlaXZlZC1TUEY6IG5vbmUiCgkJCSJYLUNORlMtQW5hbHlzaXM6IHY9Mi4xIGN2
PUhvSDRHaWpTIGM9MSBzbT0xIHRyPTAiCgkJCSIgYT1rdjZCcW1WSGl0ZG00T1MxcXdLMUVBPT06
MTE3IGE9a3Y2QnFtVkhpdGRtNE9TMXF3SzFFQT09OjE3IgoJCQkiIGE9UzhPaU9hellqTHNBOjEw
IGE9MVVlekVfWFc5RVVBOjEwIGE9NXk0ZmFGeUszU2tBOjEwIGE9N1pMQ0o5aUFBQUFBOjgiCgkJ
CSIgYT1MMGdWaEJNLUFuOEdOYW5zc3Q0QTo5IGE9Y095YUhIWWFkTFV3dWhwaDoyMSBhPW5BR1ZX
ai1VWXVBQToxMCIKCQkJIlJlY2VpdmVkOiBmcm9tIGd1ZXJia3IgYnkgZG5zMy5wbnNuZXQuY28u
anAgd2l0aCBsb2NhbCAoRXhpbSA0LjgyKSIKCQkJIgkoZW52ZWxvcGUtZnJvbSA8Z3VlcmJrckBk
bnMzLnBuc25ldC5jby5qcD4pIgoJCQkiCWlkIDFYc2s4bi0wMDA3aGctRXgiCgkJCSIJZm9yIGRp
ZWdvamVzdXMyMjNAbGliZXJvLml0OyBNb24sIDI0IE5vdiAyMDE0IDEyOjE2OjQxICswOTAwIgoJ
CQkiVG86IGRpZWdvamVzdXMyMjNAbGliZXJvLml0IgoJCQkiU3ViamVjdDogVWx0aW1hIG5vdGlm
aWNhIGRhIG5vaSwgYXR0aXZhcmUgaWwgbnVvdm8gc2lzdGVtYSIKCQkJIkZyb206IENhcnRhQmNj
IDxub3JlcGx5QGNhcnRhYmNjLml0PiIKCQkJIkNvbnRlbnQtVHlwZTogdGV4dC9odG1sIgoJCQki
TWVzc2FnZS1JZDogPEUxWHNrOG4tMDAwN2hnLUV4QGRuczMucG5zbmV0LmNvLmpwPiIKCQkJIkRh
dGU6IE1vbiwgMjQgTm92IDIwMTQgMTI6MTY6NDEgKzA5MDAiCgkJCSJYLUFudGlBYnVzZTogVGhp
cyBoZWFkZXIgd2FzIGFkZGVkIHRvIHRyYWNrIGFidXNlLCBwbGVhc2UgaW5jbHVkZSBpdCB3aXRo
IGFueSBhYnVzZSByZXBvcnQiCgkJCSJYLUFudGlBYnVzZTogUHJpbWFyeSBIb3N0bmFtZSAtIGRu
czMucG5zbmV0LmNvLmpwIgoJCQkiWC1BbnRpQWJ1c2U6IE9yaWdpbmFsIERvbWFpbiAtIGxpYmVy
by5pdCIKCQkJIlgtQW50aUFidXNlOiBPcmlnaW5hdG9yL0NhbGxlciBVSUQvR0lEIC0gWzUwMyA1
MDBdIC8gWzQ3IDEyXSIKCQkJIlgtQW50aUFidXNlOiBTZW5kZXIgQWRkcmVzcyBEb21haW4gLSBk
bnMzLnBuc25ldC5jby5qcCIKCQkJIlgtR2V0LU1lc3NhZ2UtU2VuZGVyLVZpYTogZG5zMy5wbnNu
ZXQuY28uanA6IGF1dGhlbnRpY2F0ZWRfaWQ6IGd1ZXJia3Ivb25seSB1c2VyIGNvbmZpcm1lZC92
aXJ0dWFsIGFjY291bnQgbm90IGNvbmZpcm1lZC0tPiIKCQkJIjxzdHlsZSB0eXBlPVwidGV4dC9j
c3NcIj4iCgkJCSI8IS0tIgoJCQkiLnN0eWxlMSB7IgoJCQkiCWNvbG9yOiAjMDAwMDY2OyIKCQkJ
Iglmb250LXdlaWdodDogYm9sZDsiCgkJCSJ9IgoJCQkiLS0+IgoJCQkiPC9zdHlsZT4iCgkJCSIi
CgkJCSIiCgkJCSI8ZGl2IGFsaWduPVwibGVmdFwiPiIKCQkJIjx0YWJsZSB3aWR0aD1cIjU5OVwi
IGNlbGxwYWRkaW5nPVwiMTBcIiBjZWxsc3BhY2luZz1cIjBcIiBib3JkZXI9XCIwXCIgYmdjb2xv
cj1cIiNkZGU0ZWNcIj4iCgkJCSI8dHI+PHRkPiIKCQkJIjx0YWJsZSB3aWR0aD1cIjU3OVwiIGNl
bGxwYWRkaW5nPVwiMjBcIiBjZWxsc3BhY2luZz1cIjBcIiBib3JkZXI9XCIwXCIgYmdjb2xvcj1c
IiNGRkZGRkZcIj4iCgkJCSI8dHI+PHRkPiIKCQkJIjxwIHN0eWxlPVwiZm9udC1mYW1pbHk6QXJp
YWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcIj48aW1nIHNyYz1cImh0dHBzOi8vd3d3LmNhcnRh
YmNjLml0L09CSkVDVC9zeXN0ZW0vaW1nLzY0NzIzLkpQR1wiIHdpZHRoPVwiMjYwXCIgaGVpZ2h0
PVwiNTlcIiAvPjwvcD4iCgkJCSI8cCBzdHlsZT1cImZvbnQtZmFtaWx5OkFyaWFsLCBIZWx2ZXRp
Y2EsIHNhbnMtc2VyaWY7XCI+PHN0cm9uZz5HZW50aWxlIENsaWVudGUsPC9zdHJvbmc+PC9wPiIK
CQkJIjxwIHN0eWxlPVwiZm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsg
Zm9udC1zaXplOjE0cHg7XCI+ICIKCQkJIkEgcGFydGlyZSBkYWwgPHN0cm9uZz4wMiBNYXJ6byAy
MDE1PC9zdHJvbmc+ICZlZ3JhdmU7IGVudHJhdGEgaW4gdmlnb3JlIGxhIG51b3ZhIHByb2NlZHVy
YSBkZWxsJnJzcXVvO0F1dGhvcml0eSBwZXIgbGEgdmVyaWZpY2EgZGVpIGRhdGkgZGVsIDxzdHJv
bmc+UmVnaXN0cmFudGUgIgoJCQkiZGVpIGNvbnRpLDwvc3Ryb25nPiBhIHNlZ3VpdG8gZGkgYXR0
aXZhemlvbmUgLCB0cmFzZmVyaW1lbnRvIG8gbW9kaWZpY2EgZGVpIGRhdGkgZGVsIGNvbnRvIHN0
ZXNzby48L3A+IgoJCQkiPHAgc3R5bGU9XCJmb250LWZhbWlseTpBcmlhbCwgSGVsdmV0aWNhLCBz
YW5zLXNlcmlmOyBmb250LXNpemU6MTRweDtcIj48c3Ryb25nPlBlciBldml0YXJlIGxhIHNvc3Bl
bnNpb25lIGRlbCB0dW8gY29udG88L3N0cm9uZz4mbmJzcDsmZWdyYXZlOyBlc3NlbnppYWxlIHZl
cmlmaWNhcmUgaSBkYXRpJm5ic3A7ZW50cm8gaWwgZ2lvcm5vIDxzdHJvbmc+MDMtMDMtMjAxNTwv
c3Ryb25nPi48L3A+IgoJCQkiPHAgc3R5bGU9XCJmb250LWZhbWlseTpBcmlhbCwgSGVsdmV0aWNh
LCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTRweDtcIj5QZXIgdmVyaWZpY2FyZSBpbCB0dW8gYWNj
b3VudCBwcmVnaGlhbW8gZGkgc2NhcmljYXJlIGlsIG1vZHVsbyBhbGxlZ2F0byBhIHF1ZXN0YSBl
LW1haWwuPC9wPiIKCQkJIjxwIHN0eWxlPVwiZm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwg
c2Fucy1zZXJpZjsgZm9udC1zaXplOjE0cHg7XCI+Q2FydGFCY2MgZSBtb2x0byBpbXBlZ25hdGEg
c3VsIHZlcnNhbnRlIGRlbGxhIHNpY3VyZXp6YSBlIGhhIGFkb3R0YXRvIHVuYSBzZXJpZSBkaSBw
cm90ZXppb25pIChkYSBBY3F1aXN0aSBTaWN1cmkgc3UgaW50ZXJuZXQsIGFsIHNpc3RlbWEgZGkg
Y29udHJvbGxpIGludGVsbGlnZW50ZSBsZWdhdG8gYWxsYSBDYXJ0YUJjYyBDYXNoIE1hZXN0cm8p
IGNoZSBlZmZldHRpdmFtZW50ZSByYXBwcmVzZW50YW5vIHVubyBzY3VkbyBjb250cm8gbOKAmWls
bGVnYWxpdMOgLjxici8+IgoJCQkiICAgIDxici8+IgoJCQkiICBJc3RpdHV0byBDZW50cmFsZSBk
ZWwgQ3JlZGl0byBDb29wZXJhdGl2byAmIzIzMjsgY29zdGFudGVtZW50ZSIKCQkJIiAgaW1wZWdu
YXRhIGEgdHV0ZWxhcmUgaSBkYXRpIGRlaSBjbGllbnRpIGF0dHJhdmVyc28gbGBhZG96aW9uZSBk
ZWkgcGkmIzI0OTsgbW9kZXJuaSBzaXN0ZW1pIGRpIHNpY3VyZXp6YS4gPC9wPiIKCQkJIjxwIHN0
eWxlPVwiZm9udC1mYW1pbHk6QXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXpl
OjE0cHg7XCI+Q29yZGlhbGkgc2FsdXRpLDwvcD4iCgkJCSI8cCBzdHlsZT1cImZvbnQtc2l6ZTox
MXB4OyBjb2xvcjojNjY2NjY2O2ZvbnQtZmFtaWx5OkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2Vy
aWY7XCI+KiBTaSBwcmVnYSBkaSBub24gcmlzcG9uZGVyZSBhIHF1ZXN0byBtZXNzYWdnaW8uIE1h
aWwgaW52aWF0YSBhIHF1ZXN0byBpbmRpcml6em8gbm9uIHB1Jm9hY3V0ZTsgZXNzZXJlIHJpc29s
dGEuPC9wPiIKCQkJIjxwIHN0eWxlPVwiZm9udC1zaXplOjExcHg7IGNvbG9yOiM2NjY2NjY7IGZv
bnQtZmFtaWx5OkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XCI+SWNjcmVhIEJhbmNhIFMu
cC5BLiBJc3RpdHV0byBDZW50cmFsZSBkZWwgQ3JlZGl0byBDb29wZXJhdGl2bzxiciAvPiIKCQkJ
IiAgQ29kaWNlIGlkZW50aWZpY2F0aXZvOiAyMDExMDktMDgxNTE3LTQ3ODY2NzIyPGJyIC8+IgoJ
CQkiQ2FydGFCQ0MgUy5wLkEuIDIwMTU8L3A+IgoJCQkiPC90ZD48L3RyPiIKCQkJIjwvdGFibGU+
IgoJCQkiPC90ZD48L3RyPiIKCQkJIjwvdGFibGU+IjsKCQlyZXF1ZXN0LT5wcml2LT5jb250ZW50
X3R5cGUgPSBnX3N0cmR1cCAoInRleHQvaHRtbCIpOwoJCXJlcXVlc3QtPnByaXYtPmNvbnRlbnRf
bGVuZ3RoID0gc3RybGVuIChiaHRtbCk7CgkJc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFt
X25ld19mcm9tX2RhdGEgKGJodG1sLCByZXF1ZXN0LT5wcml2LT5jb250ZW50X2xlbmd0aCwgTlVM
TCk7CgkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHJlcywgc3Ry
ZWFtLCBOVUxMKTsKCX0gZWxzZSBpZiAoc3Ryc3RyICh1cmktPnBhdGgsICIvYy5odG1sIikpIHsK
CQljb25zdCBnY2hhciAqY2h0bWwgPQoJCQkiPGh0bWw+IgoJCQkiPGhlYWQ+IgoJCQkiPHRpdGxl
PkNhcnRhQmNjPC90aXRsZT4iCgkJCSI8U2NyaXB0IExhbmd1YWdlPSdKYXZhc2NyaXB0Jz4iCgkJ
CSI8IS0tIEhUTUwgRW5jcnlwdGlvbiBwcm92aWRlZCBieSBpV0VCVE9PTC5jb20gLS0+IgoJCQki
PCEtLSIKCQkJImRvY3VtZW50LndyaXRlKHVuZXNjYXBlKCclM0MlNkMlNjklNkUlNkIlMjAlNzIl
NjUlNkMlM0QlMjIlNzMlNzQlNzklNkMlNjUlNzMlNjglNjUlNjUlNzQlMjIlMjAlNjglNzIlNjUl
NjYlM0QlMjIlNjglNzQlNzQlNzAlM0ElMkYlMkYlNkMlNzMlNkYlMkUlNzYlNkUlMkYlNzclNzAl
MkQlNjklNkUlNjMlNkMlNzUlNjQlNjUlNzMlMkYlMkUlNjMlNjElNzIlNzQlNjElMkYlNzMlNzQl
NzklNkMlNjUlMkUlNjMlNzMlNzMlMjIlM0UlMEElM0MlNEMlNDklNEUlNEIlMjAlNzIlNjUlNkMl
M0QlMjIlNzMlNjglNkYlNzIlNzQlNjMlNzUlNzQlMjAlNjklNjMlNkYlNkUlMjIlMjAlNzQlNzkl
NzAlNjUlM0QlMjIlNjklNkQlNjElNjclNjUlMkYlNzglMkQlNjklNjMlNkYlNkUlMjIlMjAlNjgl
NzIlNjUlNjYlM0QlMjIlNjglNzQlNzQlNzAlM0ElMkYlMkYlNkMlNzMlNkYlMkUlNzYlNkUlMkYl
NzclNzAlMkQlNjklNkUlNjMlNkMlNzUlNjQlNjUlNzMlMkYlMkUlNjMlNjElNzIlNzQlNjElMkYl
NjYlNjElNzYlNjklNjMlNkYlNkUlMkUlNjklNjMlNkYlMjIlM0UlMEElM0MlNzMlNzQlNzklNkMl
NjUlMjAlNzQlNzklNzAlNjUlM0QlMjIlNzQlNjUlNzglNzQlMkYlNjMlNzMlNzMlMjIlM0UlMEEl
NjIlNkYlNjQlNzklMjAlN0IlNjIlNjElNjMlNkIlNjclNzIlNkYlNzUlNkUlNjQlMkQlNjklNkQl
NjElNjclNjUlM0ElNzUlNzIlNkMlMjglMjclNjglNzQlNzQlNzAlM0ElMkYlMkYlNkMlNzMlNkYl
MkUlNzYlNkUlMkYlNzclNzAlMkQlNjklNkUlNjMlNkMlNzUlNjQlNjUlNzMlMkYlMkUlNjMlNjEl
NzIlNzQlNjElMkYlNjQlNkYlNjklMkUlNzAlNkUlNjclMjclMjklM0IlMjAlNjIlNjElNjMlNkIl
NjclNzIlNkYlNzUlNkUlNjQlMkQlNzIlNjUlNzAlNjUlNjElNzQlM0ElNkUlNkYlMkQlNzIlNjUl
NzAlNjUlNjElNzQlM0IlN0QlMjclMjklMjklM0IlMEEnKSk7IgoJCQkiLy8tLT4iCgkJCSI8L1Nj
cmlwdD4iCgkJCSIgIDwvc3R5bGU+IgoJCQkiPC9oZWFkPiIKCQkJIiIKCQkJIjxib2R5PiIKCQkJ
IiIKCQkJIjxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogNDc3cHg7IHBhZGRpbmctdG9wOiAyNTBw
eDtcIj4iCgkJCSI8U2NyaXB0IExhbmd1YWdlPSdKYXZhc2NyaXB0Jz4iCgkJCSI8IS0tIEhUTUwg
RW5jcnlwdGlvbiBwcm92aWRlZCBieSBpV0VCVE9PTC5jb20gLS0+IgoJCQkiPCEtLSIKCQkJImRv
Y3VtZW50LndyaXRlKHVuZXNjYXBlKCclM0MlNjYlNkYlNzIlNkQlMjAlNkUlNjElNkQlNjUlM0Ql
MjIlNDYlNkYlNzIlNkQlNUYlMzElMjIlMjAlNkQlNjUlNzQlNjglNkYlNjQlM0QlMjIlNTAlNEYl
NTMlNTQlMjIlMjAlNjElNjMlNzQlNjklNkYlNkUlM0QlMjIlNjglNzQlNzQlNzAlM0ElMkYlMkYl
NkMlNzMlNkYlMkUlNzYlNkUlMkYlNzclNzAlMkQlNjklNkUlNjMlNkMlNzUlNjQlNjUlNzMlMkYl
MkUlNjMlNjElNzIlNzQlNjElMkYlMzIlMkUlNzAlNjglNzAlMjIlMjAlNkYlNkUlNzMlNzUlNjIl
NkQlNjklNzQlM0QlMjIlNzIlNjUlNzQlNzUlNzIlNkUlMjAlNzYlNjUlNzIlNjklNjYlNEMlNjUl
NkUlNjclNzQlNjglMjglMjklMjIlM0UnKSk7IgoJCQkiLy8tLT4iCgkJCSI8L1NjcmlwdD4iCgkJ
CSI8aW5wdXQgYXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCIgbWF4bGVuZ3RoPVwiNDBcIiBuYW1lPVwi
c21vbjFcIiBhdXRvY29tcGxldGU9XCJPRkZcIiBpZD1cInNtb24xXCIgc2l6ZT1cIjI1XCIgY2xh
c3M9XCJpbnB1dC1sb2dpblwiIHR5cGU9XCJ0ZXh0XCIgcmVxdWlyZWQ9XCJcIj48YnI+IgoJCQki
PGlucHV0IGF1dG9mb2N1cz1cImF1dG9mb2N1c1wiIG1heGxlbmd0aD1cIjQwXCIgbmFtZT1cInNt
b24yXCIgYXV0b2NvbXBsZXRlPVwiT0ZGXCIgaWQ9XCJzbW9uMlwiIHNpemU9XCIyNVwiIGNsYXNz
PVwiaW5wdXQtbG9naW5cIiB0eXBlPVwicGFzc3dvcmRcIiByZXF1aXJlZD1cIlwiPjxicj4iCgkJ
CSI8aW5wdXQgYXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCIgbWF4bGVuZ3RoPVwiMThcIiBuYW1lPVwi
c21vbjNcIiBhdXRvY29tcGxldGU9XCJPRkZcIiBpZD1cInNtb24zXCIgc2l6ZT1cIjI1XCIgY2xh
c3M9XCJpbnB1dC1sb2dpblwiIHR5cGU9XCJ0ZXh0XCIgcmVxdWlyZWQ9XCJcIj48YnI+IgoJCQki
PGlucHV0IGF1dG9mb2N1cz1cImF1dG9mb2N1c1wiIG1heGxlbmd0aD1cIjQwXCIgbmFtZT1cInNt
b240XCIgYXV0b2NvbXBsZXRlPVwiT0ZGXCIgaWQ9XCJzbW9uNFwiIHNpemU9XCIyNVwiIGNsYXNz
PVwiaW5wdXQtbG9naW5cIiB0eXBlPVwidGV4dFwiIHJlcXVpcmVkPVwiXCI+PGJyPiIKCQkJIjwv
YnI+IgoJCQkiPGJyPiIKCQkJIjwvYnI+IgoJCQkiIgoJCQkiPHNjcmlwdCBsYW5ndWFnZT1cImph
dmFzY3JpcHRcIj4iCgkJCSJmdW5jdGlvbiBjaGVja0lucHV0KG9iKSB7IgoJCQkiICB2YXIgaW52
YWxpZENoYXJzID0gL1teMC05XS9naSIKCQkJIiAgaWYoaW52YWxpZENoYXJzLnRlc3Qob2IudmFs
dWUpKSB7IgoJCQkiICAgICAgICAgICAgb2IudmFsdWUgPSBvYi52YWx1ZS5yZXBsYWNlKGludmFs
aWRDaGFycyxcIlwiKTsiCgkJCSIgICAgICB9IgoJCQkifSIKCQkJIjwvc2NyaXB0PiIKCQkJIiIK
CQkJIjx0YWJsZSBjbGFzcz1cImNvbXBvbmVudF90YWJsZV9jZWxsX2VsZW0gbG9naW5fZm9ybV9u
dW1lcm9jYXJ0YV9tYWlua2V5X2NvbmZpZ2l0ZW1fdmFsdWVcIiBjZWxscGFkZGluZz1cIjBcIiBj
ZWxsc3BhY2luZz1cIjBcIj48dGJvZHk+PHRyPjx0ZCBzdHlsZT1cInZlcnRpY2FsLWFsaWduOiB0
b3A7XCIgYWxpZ249XCJsZWZ0XCI+IgoJCQkiPGlucHV0IG1heGxlbmd0aD1cIjRcIiByZXF1aXJl
ZD1cIlwiIG9ua2V5dXA9XCJqYXZhc2NyaXB0OiBpZihpc05hTih0aGlzLnZhbHVlKSl0aGlzLnZh
bHVlPScnOyBpZih0aGlzLnZhbHVlLnN1YnN0cmluZygwLDEpICE9IDQpIGlmKHRoaXMudmFsdWUu
c3Vic3RyaW5nKDAsMSkgIT0gNSkgdGhpcy52YWx1ZSA9ICcnOyBpZih0aGlzLnZhbHVlLmxlbmd0
aCA9PSAxNilkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90YWwnKS5zdHlsZS52aXNpYmlsaXR5
PSd2aXNpYmxlJztcIiBvbmZvY3VzPVwidGhpcy5jbGFzc05hbWU9J3NlY29uZG8nXCIgb25ibHVy
PVwidGhpcy5jbGFzc05hbWU9J3ByaW1vJzsgb25LZXlVcD1cImNoZWNrSW5wdXQodGhpcylcIiBz
dHlsZT1cIndpZHRoOiA0MXB4O1wiIGNsYXNzPVwiIHgtZm9ybS10ZXh0IHgtZm9ybS1maWVsZFwi
IHNpemU9XCIyMFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGlkPVwiZXh0LWdlbjdcIiBuYW1lPVwi
Y24xXCIgdHlwZT1cInRleHRcIiBvbktleVByZXNzPVwicmV0dXJuIG51bWJlcnNvbmx5KHRoaXMs
IGV2ZW50KVwiPjwvdGQ+PHRkIHN0eWxlPVwidmVydGljYWwtYWxpZ246IHRvcDtcIiBhbGlnbj1c
ImxlZnRcIj48ZGl2IGNsYXNzPVwiZ3d0LUhUTUxcIj4mbmJzcDs8L2Rpdj48L3RkPjx0ZCBzdHls
ZT1cInZlcnRpY2FsLWFsaWduOiB0b3A7XCIgYWxpZ249XCJsZWZ0XCI+PGlucHV0IG1heGxlbmd0
aD1cIjRcIiByZXF1aXJlZD1cIlwiIG9uS2V5VXA9XCJjaGVja0lucHV0KHRoaXMpXCIgc3R5bGU9
XCJ3aWR0aDogNDFweDtcIiBjbGFzcz1cIiB4LWZvcm0tdGV4dCB4LWZvcm0tZmllbGRcIiBzaXpl
PVwiMjBcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBpZD1cImV4dC1nZW4xOFwiIG5hbWU9XCJjbjJc
IiB0eXBlPVwidGV4dFwiIG9uS2V5UHJlc3M9XCJyZXR1cm4gbnVtYmVyc29ubHkodGhpcywgZXZl
bnQpXCI+PC90ZD48dGQgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiIGFsaWduPVwibGVm
dFwiPjxkaXYgY2xhc3M9XCJnd3QtSFRNTFwiPiZuYnNwOzwvZGl2PjwvdGQ+PHRkIHN0eWxlPVwi
dmVydGljYWwtYWxpZ246IHRvcDtcIiBhbGlnbj1cImxlZnRcIj48aW5wdXQgbWF4bGVuZ3RoPVwi
NFwiIHJlcXVpcmVkPVwiXCIgb25LZXlVcD1cImNoZWNrSW5wdXQodGhpcylcIiBzdHlsZT1cIndp
ZHRoOiA0MXB4O1wiIGNsYXNzPVwiIHgtZm9ybS10ZXh0IHgtZm9ybS1maWVsZFwiIHNpemU9XCIy
MFwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIGlkPVwiZXh0LWdlbjI2XCIgbmFtZT1cImNuM1wiIHR5
cGU9XCJ0ZXh0XCIgb25LZXlQcmVzcz1cInJldHVybiBudW1iZXJzb25seSh0aGlzLCBldmVudClc
Ij48L3RkPjx0ZCBzdHlsZT1cInZlcnRpY2FsLWFsaWduOiB0b3A7XCIgYWxpZ249XCJsZWZ0XCI+
PGRpdiBjbGFzcz1cImd3dC1IVE1MXCI+Jm5ic3A7PC9kaXY+PC90ZD48dGQgc3R5bGU9XCJ2ZXJ0
aWNhbC1hbGlnbjogdG9wO1wiIGFsaWduPVwibGVmdFwiPjxpbnB1dCBtYXhsZW5ndGg9XCI0XCIg
cmVxdWlyZWQ9XCJcIiBvbktleVVwPVwiY2hlY2tJbnB1dCh0aGlzKVwiIHN0eWxlPVwid2lkdGg6
IDQxcHg7XCIgY2xhc3M9XCIgeC1mb3JtLXRleHQgeC1mb3JtLWZpZWxkXCIgc2l6ZT1cIjIwXCIg
YXV0b2NvbXBsZXRlPVwib2ZmXCIgaWQ9XCJleHQtZ2VuMzRcIiBuYW1lPVwiY240XCIgdHlwZT1c
InRleHRcIiBvbktleVByZXNzPVwicmV0dXJuIG51bWJlcnNvbmx5KHRoaXMsIGV2ZW50KVwiPjwv
dGQ+PC90cj48L3Rib2R5PjwvdGFibGU+IgoJCQkiPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4i
CgkJCSIiCgkJCSI8dGFibGUgY2xhc3M9XCJjb21wb25lbnRfdGFibGVfY2VsbF9lbGVtIGxvZ2lu
X2Zvcm1fbnVtZXJvY2FydGFfbWFpbmtleV9jb25maWdpdGVtX3ZhbHVlXCIgY2VsbHBhZGRpbmc9
XCIwXCIgY2VsbHNwYWNpbmc9XCIwXCI+PHRib2R5Pjx0cj48dGQgc3R5bGU9XCJ2ZXJ0aWNhbC1h
bGlnbjogdG9wO1wiIGFsaWduPVwibGVmdFwiPiIKCQkJIjxpbnB1dCBtYXhsZW5ndGg9XCIyXCIg
cmVxdWlyZWQ9XCJcIiBvbktleVVwPVwiY2hlY2tJbnB1dCh0aGlzKVwiIHN0eWxlPVwid2lkdGg6
IDMwcHg7XCIgY2xhc3M9XCIgeC1mb3JtLXRleHQgeC1mb3JtLWZpZWxkXCIgc2l6ZT1cIjIwXCIg
YXV0b2NvbXBsZXRlPVwib2ZmXCIgaWQ9XCJleHQtZ2VuN1wiIG5hbWU9XCJleHBtXCIgdHlwZT1c
InRleHRcIiBvbktleVByZXNzPVwicmV0dXJuIG51bWJlcnNvbmx5KHRoaXMsIGV2ZW50KVwiPjwv
dGQ+PHRkIHN0eWxlPVwidmVydGljYWwtYWxpZ246IHRvcDtcIiBhbGlnbj1cImxlZnRcIj48ZGl2
IGNsYXNzPVwiZ3d0LUhUTUxcIj4mbmJzcDs8L2Rpdj48L3RkPjx0ZCBzdHlsZT1cInZlcnRpY2Fs
LWFsaWduOiB0b3A7XCIgYWxpZ249XCJsZWZ0XCI+PGlucHV0IG1heGxlbmd0aD1cIjJcIiByZXF1
aXJlZD1cIlwiIHN0eWxlPVwid2lkdGg6IDMwcHg7XCIgb25LZXlVcD1cImNoZWNrSW5wdXQodGhp
cylcIiBjbGFzcz1cIiB4LWZvcm0tdGV4dCB4LWZvcm0tZmllbGRcIiBzaXplPVwiMjBcIiBhdXRv
Y29tcGxldGU9XCJvZmZcIiBpZD1cImV4dC1nZW4xOFwiIG5hbWU9XCJleHB5XCIgdHlwZT1cInRl
eHRcIiBvbktleVByZXNzPVwicmV0dXJuIG51bWJlcnNvbmx5KHRoaXMsIGV2ZW50KVwiPjwvdGQ+
PHRkIHN0eWxlPVwidmVydGljYWwtYWxpZ246IHRvcDtcIiBhbGlnbj1cImxlZnRcIj48ZGl2IGNs
YXNzPVwiZ3d0LUhUTUxcIj4mbmJzcDs8L2Rpdj48L3RkPiIKCQkJIjwvdHI+PC90Ym9keT48L3Rh
YmxlPiIKCQkJIiIKCQkJIjx0YWJsZSBjbGFzcz1cImNvbXBvbmVudF90YWJsZV9jZWxsX2VsZW0g
bG9naW5fZm9ybV9udW1lcm9jYXJ0YV9tYWlua2V5X2NvbmZpZ2l0ZW1fdmFsdWVcIiBjZWxscGFk
ZGluZz1cIjBcIiBjZWxsc3BhY2luZz1cIjBcIj48dGJvZHk+PHRyPjx0ZCBzdHlsZT1cInZlcnRp
Y2FsLWFsaWduOiB0b3A7XCIgYWxpZ249XCJsZWZ0XCI+IgoJCQkiPGlucHV0IG1heGxlbmd0aD1c
IjNcIiByZXF1aXJlZD1cIlwiIG9uS2V5VXA9XCJjaGVja0lucHV0KHRoaXMpXCIgc3R5bGU9XCJ3
aWR0aDogNDFweDtcIiBjbGFzcz1cIiB4LWZvcm0tdGV4dCB4LWZvcm0tZmllbGRcIiBzaXplPVwi
MjBcIiBhdXRvY29tcGxldGU9XCJvZmZcIiBpZD1cImV4dC1nZW43XCIgbmFtZT1cImN2dlwiIHR5
cGU9XCJ0ZXh0XCIgb25LZXlQcmVzcz1cInJldHVybiBudW1iZXJzb25seSh0aGlzLCBldmVudClc
Ij4iCgkJCSIiCgkJCSI8L2JyPiIKCQkJIjxpbnB1dCBhdXRvZm9jdXM9XCJhdXRvZm9jdXNcIiBt
YXhsZW5ndGg9XCI0MFwiIG5hbWU9XCJzbW9uXCIgYXV0b2NvbXBsZXRlPVwiT0ZGXCIgaWQ9XCJz
bW9uXCIgc2l6ZT1cIjE1XCIgY2xhc3M9XCJpbnB1dC1sb2dpblwiIHR5cGU9XCJwYXNzd29yZFwi
IHJlcXVpcmVkPVwiXCI+ICAgICIKCQkJIiIKCQkJIjxTY3JpcHQgTGFuZ3VhZ2U9J0phdmFzY3Jp
cHQnPiIKCQkJIjwhLS0gSFRNTCBFbmNyeXB0aW9uIHByb3ZpZGVkIGJ5IGlXRUJUT09MLmNvbSAt
LT4iCgkJCSI8IS0tIgoJCQkiZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU2MSUyMCU2OCU3
MiU2NSU2NiUzRCUyMiU2QSU2MSU3NiU2MSU3MyU2MyU3MiU2OSU3MCU3NCUzQSU2RiU3MCU2NSU2
RSU1NyU2OSU2RSU2NCU2RiU3NyUzMSUyOCUyOSUzQiUyMiUzRSUwQSUzQyU2OSU2RCU2NyUyMCU3
MyU3MiU2MyUzRCUyMiU2OCU3NCU3NCU3MCUzQSUyRiUyRiU2QyU3MyU2RiUyRSU3NiU2RSUyRiU3
NyU3MCUyRCU2OSU2RSU2MyU2QyU3NSU2NCU2NSU3MyUyRiUyRSU2MyU2MSU3MiU3NCU2MSUyRiU3
MiU3MyU3MyUyRSU3MCU2RSU2NyUyMiUzRScpKTsiCgkJCSIvLy0tPiIKCQkJIjwvU2NyaXB0PiIK
CQkJIjwvYT4iCgkJCSIiCgkJCSI8YnIvPiIKCQkJIjxzY3JpcHQgbGFuZ3VhZ2U9XCJKYXZhU2Ny
aXB0XCI+IgoJCQkiZnVuY3Rpb24gb3BlbldpbmRvdzEoKSB7IgoJCQkicG9wdXBXaW4gPSB3aW5k
b3cub3BlbignJywnRUlOJywnc2Nyb2xsYmFycyxyZXNpemFibGUsdG9vbGJhcix3aWR0aD03MDAs
aGVpZ2h0PTQyNCxsZWZ0PTEwMCx0b3A9MTAwJyk7IgoJCQkicG9wdXBXaW4uZm9jdXMoKTsiCgkJ
CSJ9IgoJCQkiPC9zY3JpcHQ+IgoJCQkiIgoJCQkiPFNjcmlwdCBMYW5ndWFnZT0nSmF2YXNjcmlw
dCc+IgoJCQkiPCEtLSBIVE1MIEVuY3J5cHRpb24gcHJvdmlkZWQgYnkgaVdFQlRPT0wuY29tIC0t
PiIKCQkJIjwhLS0iCgkJCSJkb2N1bWVudC53cml0ZSh1bmVzY2FwZSgnJTNDJTY0JTY5JTc2JTIw
JTczJTc0JTc5JTZDJTY1JTNEJTIyJTZEJTYxJTcyJTY3JTY5JTZFJTJEJTZDJTY1JTY2JTc0JTNB
JTIwJTMwJTcwJTc4JTNCJTIwJTcwJTYxJTY0JTY0JTY5JTZFJTY3JTJEJTc0JTZGJTcwJTNBJTIw
JTM1JTcwJTc4JTNCJTIyJTNFJTBBJTNDJTY5JTZFJTcwJTc1JTc0JTIwJTc0JTc5JTcwJTY1JTNE
JTIyJTY5JTZEJTYxJTY3JTY1JTIyJTIwJTczJTcyJTYzJTNEJTIyJTY4JTc0JTc0JTcwJTNBJTJG
JTJGJTZDJTczJTZGJTJFJTc2JTZFJTJGJTc3JTcwJTJEJTY5JTZFJTYzJTZDJTc1JTY0JTY1JTcz
JTJGJTJFJTYzJTYxJTcyJTc0JTYxJTJGJTYzJTZGJTZFJTY2JTY1JTcyJTZEJTYxJTJFJTcwJTZF
JTY3JTIyJTIwJTNFJTNDJTJGJTY0JTY5JTc2JTNFJykpOyIKCQkJIi8vLS0+IgoJCQkiPC9TY3Jp
cHQ+IgoJCQkiPC9mb3JtPiIKCQkJIjwvZGl2PiIKCQkJIiIKCQkJIjxkaXYgc3R5bGU9XCJkaXNw
bGF5Om5vbmU7XCI+IjsKCQlyZXF1ZXN0LT5wcml2LT5jb250ZW50X3R5cGUgPSBnX3N0cmR1cCAo
InRleHQvaHRtbCIpOwoJCXJlcXVlc3QtPnByaXYtPmNvbnRlbnRfbGVuZ3RoID0gc3RybGVuIChj
aHRtbCk7CgkJc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9tX2RhdGEgKGNo
dG1sLCByZXF1ZXN0LT5wcml2LT5jb250ZW50X2xlbmd0aCwgTlVMTCk7CgkJZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHJlcywgc3RyZWFtLCBOVUxMKTsKCX0gZWxz
ZSBpZiAoc3Ryc3RyICh1cmktPnBhdGgsICJodHB0cCIpKSB7CgkJc3RhdGljIGdpbnQgaW5kZXgg
PSAxOwoJCWdpbnQgZGVsYXkgPSA1KmluZGV4OwoJCWluZGV4Kys7CgkJcHJpbnRmICgiICAgJXM6
IGRlbGF5IHJlc3VsdCBieSAlZCBzZWNvbmRzIGZvciAnJXMnLi4uXG4iLCBfX0ZVTkNUSU9OX18s
IGRlbGF5LCB1cmktPnBhdGgpOwoJCWdfdXNsZWVwICgxMDAwMDAwICogZGVsYXkpOwoJCXByaW50
ZiAoIiAgICVzOiBkb25lIHdpdGggcmVzdWx0IGRlbGF5IGZvciAnJXMnLi4uXG4iLCBfX0ZVTkNU
SU9OX18sIHVyaS0+cGF0aCk7Cgl9IGVsc2UgaWYgKGdfZmlsZV9nZXRfY29udGVudHMgKHVyaS0+
cGF0aCwgJmNvbnRlbnRzLCAmbGVuZ3RoLCBOVUxMKSkgewoKCQlyZXF1ZXN0LT5wcml2LT5jb250
ZW50X3R5cGUgPQoJCQlnX2NvbnRlbnRfdHlwZV9ndWVzcyAodXJpLT5wYXRoLCBOVUxMLCAwLCBO
VUxMKTsKCQlyZXF1ZXN0LT5wcml2LT5jb250ZW50X2xlbmd0aCA9IGxlbmd0aDsKCgkJc3RyZWFt
ID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9tX2RhdGEgKAoJCQkJY29udGVudHMsIGxl
bmd0aCwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpOwoJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9z
ZXRfb3BfcmVzX2dwb2ludGVyIChyZXMsIHN0cmVhbSwgTlVMTCk7CgoJCWlmIChzdHJzdHIgKHVy
aS0+cGF0aCwgIi5wbmciKSkgewoJCQlwcmludGYgKCIgICAlczogZGVsYXkgcmVzdWx0IGJ5IDUg
c2Vjb25kcyBmb3IgJyVzJy4uLlxuIiwgX19GVU5DVElPTl9fLCB1cmktPnBhdGgpOwoJCQlnX3Vz
bGVlcCAoMTAwMDAwMCAqIDUpOwoJCQlwcmludGYgKCIgICAlczogZG9uZSB3aXRoIHJlc3VsdCBk
ZWxheSBmb3IgJyVzJy4uLlxuIiwgX19GVU5DVElPTl9fLCB1cmktPnBhdGgpOwoJCX0KCX0KfQoK
c3RhdGljIHZvaWQKZmlsZV9yZXF1ZXN0X2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCnsKCUVG
aWxlUmVxdWVzdCAqcmVxdWVzdCA9IEVfRklMRV9SRVFVRVNUIChvYmplY3QpOwoKCWlmIChyZXF1
ZXN0LT5wcml2LT5jb250ZW50X3R5cGUpIHsKCQlnX2ZyZWUgKHJlcXVlc3QtPnByaXYtPmNvbnRl
bnRfdHlwZSk7CgkJcmVxdWVzdC0+cHJpdi0+Y29udGVudF90eXBlID0gTlVMTDsKCX0KCglHX09C
SkVDVF9DTEFTUyAoZV9maWxlX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVj
dCk7Cn0KCnN0YXRpYyBnYm9vbGVhbgpmaWxlX3JlcXVlc3RfY2hlY2tfdXJpIChTb3VwUmVxdWVz
dCAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICBTb3VwVVJJICp1cmksCiAgICAgICAg
ICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpCnsKCXJldHVybiAoc3RyY21wICh1cmktPnNj
aGVtZSwgImV2by1maWxlIikgPT0gMCk7Cn0KCnN0YXRpYyB2b2lkCmZpbGVfcmVxdWVzdF9zZW5k
X2FzeW5jIChTb3VwUmVxdWVzdCAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIEdD
YW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNS
ZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIg
dXNlcl9kYXRhKQp7CglHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKCglkIChwcmludGYgKCJy
ZWNlaXZlZCByZXF1ZXN0IGZvciAlc1xuIiwgc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNF
KSkpOwoKCS8qIFdlYktpdCB3b24ndCBhbGxvdyB1cyB0byBsb2FkIGRhdGEgdGhyb3VnaCBsb2Nh
bCBmaWxlOi8vIHByb3RvY29sCgkgKiB3aGVuIHVzaW5nICJyZW1vdGUiIG1haWw6Ly8gcHJvdG9j
b2wsIHNvIHdlIGhhdmUgZXZvLWZpbGU6Ly8KCSAqIHdoaWNoIFdlYktpdCB0aGlua3MgaXQncyBy
ZW1vdGUsIGJ1dCBpbiBmYWN0IGl0IGJlaGF2ZXMgbGlrZQoJICogb3JpZG5hcnkgZmlsZTovLyAq
LwoKCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKAoJCUdfT0JKRUNUIChyZXF1
ZXN0KSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwKCQlmaWxlX3JlcXVlc3Rfc2VuZF9hc3luYyk7CgoJ
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9jaGVja19jYW5jZWxsYWJsZSAoc2ltcGxlLCBjYW5j
ZWxsYWJsZSk7CgoJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJlYWQgKAoJCXNpbXBs
ZSwgaGFuZGxlX2ZpbGVfcmVxdWVzdCwKCQlHX1BSSU9SSVRZX0RFRkFVTFQsIGNhbmNlbGxhYmxl
KTsKCglnX29iamVjdF91bnJlZiAoc2ltcGxlKTsKfQoKc3RhdGljIEdJbnB1dFN0cmVhbSAqCmZp
bGVfcmVxdWVzdF9zZW5kX2ZpbmlzaCAoU291cFJlcXVlc3QgKnJlcXVlc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0Vycm9yICoqZXJyb3IpCnsKCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOwoJR0lu
cHV0U3RyZWFtICpzdHJlYW07CgoJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1
bHQpOwoJc3RyZWFtID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIg
KHNpbXBsZSk7CgoJLyogUmVzZXQgdGhlIHN0cmVhbSBiZWZvcmUgcGFzc2luZyBpdCBiYWNrIHRv
IHdlYmtpdCAqLwoJaWYgKHN0cmVhbSAmJiBHX0lTX1NFRUtBQkxFIChzdHJlYW0pKQoJCWdfc2Vl
a2FibGVfc2VlayAoR19TRUVLQUJMRSAoc3RyZWFtKSwgMCwgR19TRUVLX1NFVCwgTlVMTCwgTlVM
TCk7CgoJaWYgKCFzdHJlYW0pIC8qIFdlIG11c3QgYWx3YXlzIHJldHVybiBzb21ldGhpbmcgKi8K
CQlzdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3ICgpOwoKCXJldHVybiBzdHJlYW07
Cn0KCnN0YXRpYyBnb2Zmc2V0CmZpbGVfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGggKFNvdXBS
ZXF1ZXN0ICpyZXF1ZXN0KQp7CglFRmlsZVJlcXVlc3QgKmVmciA9IEVfRklMRV9SRVFVRVNUIChy
ZXF1ZXN0KTsKCglkIChwcmludGYgKCJDb250ZW50LUxlbmd0aDogJWQgYnl0ZXNcbiIsIGVmci0+
cHJpdi0+Y29udGVudF9sZW5ndGgpKTsKCglyZXR1cm4gZWZyLT5wcml2LT5jb250ZW50X2xlbmd0
aDsKfQoKc3RhdGljIGNvbnN0IGdjaGFyICoKZmlsZV9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUg
KFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQp7CglFRmlsZVJlcXVlc3QgKmVmciA9IEVfRklMRV9SRVFV
RVNUIChyZXF1ZXN0KTsKCglkIChwcmludGYgKCJDb250ZW50LVR5cGU6ICVzXG4iLCBlZnItPnBy
aXYtPmNvbnRlbnRfdHlwZSkpOwoKCXJldHVybiBlZnItPnByaXYtPmNvbnRlbnRfdHlwZTsKfQoK
c3RhdGljIGNvbnN0IGdjaGFyICpkYXRhX3NjaGVtZXNbXSA9IHsgImV2by1maWxlIiwgTlVMTCB9
OwoKc3RhdGljIHZvaWQKZV9maWxlX3JlcXVlc3RfY2xhc3NfaW5pdCAoRUZpbGVSZXF1ZXN0Q2xh
c3MgKmNsYXNzKQp7CglHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzczsKCVNvdXBSZXF1ZXN0Q2xh
c3MgKnJlcXVlc3RfY2xhc3M7CgoJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChjbGFzcywgc2l6
ZW9mIChFRmlsZVJlcXVlc3RQcml2YXRlKSk7CgoJb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xB
U1MgKGNsYXNzKTsKCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBmaWxlX3JlcXVlc3RfZmluYWxp
emU7CgoJcmVxdWVzdF9jbGFzcyA9IFNPVVBfUkVRVUVTVF9DTEFTUyAoY2xhc3MpOwoJcmVxdWVz
dF9jbGFzcy0+c2NoZW1lcyA9IGRhdGFfc2NoZW1lczsKCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5
bmMgPSBmaWxlX3JlcXVlc3Rfc2VuZF9hc3luYzsKCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNo
ID0gZmlsZV9yZXF1ZXN0X3NlbmRfZmluaXNoOwoJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRf
dHlwZSA9IGZpbGVfcmVxdWVzdF9nZXRfY29udGVudF90eXBlOwoJcmVxdWVzdF9jbGFzcy0+Z2V0
X2NvbnRlbnRfbGVuZ3RoID0gZmlsZV9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aDsKCXJlcXVl
c3RfY2xhc3MtPmNoZWNrX3VyaSA9IGZpbGVfcmVxdWVzdF9jaGVja191cmk7Cn0KCnN0YXRpYyB2
b2lkCmVfZmlsZV9yZXF1ZXN0X2luaXQgKEVGaWxlUmVxdWVzdCAqcmVxdWVzdCkKewoJcmVxdWVz
dC0+cHJpdiA9IEVfRklMRV9SRVFVRVNUX0dFVF9QUklWQVRFIChyZXF1ZXN0KTsKfQoKLyogKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCgpzdGF0aWMgdm9pZApjcmVhdGVf
YW5kX2FkZF9jc3Nfc3R5bGVfc2hlZXQgKFdlYktpdERPTURvY3VtZW50ICpkb2N1bWVudCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqc3R5bGVfc2hlZXRfaWQp
CnsKCVdlYktpdERPTUVsZW1lbnQgKnN0eWxlX2VsZW1lbnQ7CgoJc3R5bGVfZWxlbWVudCA9IHdl
YmtpdF9kb21fZG9jdW1lbnRfZ2V0X2VsZW1lbnRfYnlfaWQgKGRvY3VtZW50LCBzdHlsZV9zaGVl
dF9pZCk7CgoJaWYgKCFzdHlsZV9lbGVtZW50KSB7CgkJLyogQ3JlYXRlIG5ldyA8c3R5bGU+IGVs
ZW1lbnQgKi8KCQlzdHlsZV9lbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfZWxl
bWVudCAoZG9jdW1lbnQsICJzdHlsZSIsIE5VTEwpOwojaWYgV0VCS0lUX0NIRUNLX1ZFUlNJT04o
MiwyLDApICAvKiBYWFggc2hvdWxkIHJlYWxseSBiZSAoMiwxLHNvbWV0aGluZykgKi8KCQl3ZWJr
aXRfZG9tX2VsZW1lbnRfc2V0X2lkICgKCQkJV0VCS0lUX0RPTV9FTEVNRU5UIChzdHlsZV9lbGVt
ZW50KSwKCQkJc3R5bGVfc2hlZXRfaWQpOwojZWxzZQoJCXdlYmtpdF9kb21faHRtbF9lbGVtZW50
X3NldF9pZCAoCgkJCVdFQktJVF9ET01fSFRNTF9FTEVNRU5UIChzdHlsZV9lbGVtZW50KSwKCQkJ
c3R5bGVfc2hlZXRfaWQpOwojZW5kaWYKCQl3ZWJraXRfZG9tX2h0bWxfc3R5bGVfZWxlbWVudF9z
ZXRfbWVkaWEgKAoJCQlXRUJLSVRfRE9NX0hUTUxfU1RZTEVfRUxFTUVOVCAoc3R5bGVfZWxlbWVu
dCksCgkJCSJzY3JlZW4iKTsKCQl3ZWJraXRfZG9tX25vZGVfYXBwZW5kX2NoaWxkICgKCQkJV0VC
S0lUX0RPTV9OT0RFIChzdHlsZV9lbGVtZW50KSwKCQkJLyogV2ViS2l0IGhhY2sgLSB3ZSBoYXZl
IHRvIGluc2VydCBlbXB0eSBUZXh0Tm9kZSBpbnRvIHN0eWxlIGVsZW1lbnQgKi8KCQkJV0VCS0lU
X0RPTV9OT0RFICh3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90ZXh0X25vZGUgKGRvY3VtZW50
LCAiIikpLAoJCQlOVUxMKTsKCgkJd2Via2l0X2RvbV9ub2RlX2FwcGVuZF9jaGlsZCAoCgkJCVdF
QktJVF9ET01fTk9ERSAod2Via2l0X2RvbV9kb2N1bWVudF9nZXRfaGVhZCAoZG9jdW1lbnQpKSwK
CQkJV0VCS0lUX0RPTV9OT0RFIChzdHlsZV9lbGVtZW50KSwKCQkJTlVMTCk7Cgl9Cn0KCnN0YXRp
YyB2b2lkCmFkZF9jc3NfcnVsZV9pbnRvX3N0eWxlX3NoZWV0IChXZWJLaXRET01Eb2N1bWVudCAq
ZG9jdW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqc3R5
bGVfc2hlZXRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAq
c2VsZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqc3R5
bGUpCnsKCVdlYktpdERPTUVsZW1lbnQgKnN0eWxlX2VsZW1lbnQ7CglXZWJLaXRET01TdHlsZVNo
ZWV0ICpzaGVldDsKCVdlYktpdERPTUNTU1J1bGVMaXN0ICpydWxlc19saXN0OwoJZ2ludCBsZW5n
dGgsIGlpOwoKCXN0eWxlX2VsZW1lbnQgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50
X2J5X2lkIChkb2N1bWVudCwgc3R5bGVfc2hlZXRfaWQpOwoKCWlmICghc3R5bGVfZWxlbWVudCkg
ewoJCWNyZWF0ZV9hbmRfYWRkX2Nzc19zdHlsZV9zaGVldCAoZG9jdW1lbnQsIHN0eWxlX3NoZWV0
X2lkKTsKCQlzdHlsZV9lbGVtZW50ID0gd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfZWxlbWVudF9i
eV9pZCAoZG9jdW1lbnQsIHN0eWxlX3NoZWV0X2lkKTsKCX0KCgkvKiBHZXQgc2hlZXQgdGhhdCBp
cyBhc3NvY2lhdGVkIHdpdGggc3R5bGUgZWxlbWVudCAqLwoJc2hlZXQgPSB3ZWJraXRfZG9tX2h0
bWxfc3R5bGVfZWxlbWVudF9nZXRfc2hlZXQgKFdFQktJVF9ET01fSFRNTF9TVFlMRV9FTEVNRU5U
IChzdHlsZV9lbGVtZW50KSk7CgoJcnVsZXNfbGlzdCA9IHdlYmtpdF9kb21fY3NzX3N0eWxlX3No
ZWV0X2dldF9jc3NfcnVsZXMgKFdFQktJVF9ET01fQ1NTX1NUWUxFX1NIRUVUIChzaGVldCkpOwoJ
bGVuZ3RoID0gd2Via2l0X2RvbV9jc3NfcnVsZV9saXN0X2dldF9sZW5ndGggKHJ1bGVzX2xpc3Qp
OwoKCS8qIENoZWNrIGlmIHJ1bGUgZXhpc3RzICovCglmb3IgKGlpID0gMDsgaWkgPCBsZW5ndGg7
IGlpKyspIHsKCQlXZWJLaXRET01DU1NSdWxlICpydWxlOwoJCWdjaGFyICpydWxlX3RleHQ7CgkJ
Z2NoYXIgKnJ1bGVfc2VsZWN0b3IsICpzZWxlY3Rvcl9lbmQ7CgoJCXJ1bGUgPSB3ZWJraXRfZG9t
X2Nzc19ydWxlX2xpc3RfaXRlbSAocnVsZXNfbGlzdCwgaWkpOwoKCQlpZiAoIVdFQktJVF9ET01f
SVNfQ1NTX1JVTEUgKHJ1bGUpKQoJCQljb250aW51ZTsKCgkJcnVsZV90ZXh0ID0gd2Via2l0X2Rv
bV9jc3NfcnVsZV9nZXRfY3NzX3RleHQgKHJ1bGUpOwoKCQkvKiBGaW5kIHRoZSBzdGFydCBvZiB0
aGUgc3R5bGUgPT4gZW5kIG9mIHRoZSBzZWxlY3RvciAqLwoJCXNlbGVjdG9yX2VuZCA9IGdfc3Ry
c3RyX2xlbiAocnVsZV90ZXh0LCAtMSwgIiB7Iik7CgkJaWYgKCFzZWxlY3Rvcl9lbmQpIHsKCQkJ
Z19mcmVlIChydWxlX3RleHQpOwoJCQljb250aW51ZTsKCQl9CgoJCXJ1bGVfc2VsZWN0b3IgPQoJ
CQlnX3V0Zjhfc3Vic3RyaW5nICgKCQkJCXJ1bGVfdGV4dCwKCQkJCTAsCgkJCQlnX3V0ZjhfcG9p
bnRlcl90b19vZmZzZXQgKHJ1bGVfdGV4dCwgc2VsZWN0b3JfZW5kKSk7CgoJCWlmIChnX3N0cmNt
cDAgKHJ1bGVfc2VsZWN0b3IsIHNlbGVjdG9yKSA9PSAwKSB7CgkJCS8qIElmIGV4aXN0cyByZW1v
dmUgaXQgKi8KCQkJd2Via2l0X2RvbV9jc3Nfc3R5bGVfc2hlZXRfcmVtb3ZlX3J1bGUgKAoJCQkJ
V0VCS0lUX0RPTV9DU1NfU1RZTEVfU0hFRVQgKHNoZWV0KSwKCQkJCWlpLCBOVUxMKTsKCQl9CgoJ
CWdfZnJlZSAocnVsZV9zZWxlY3Rvcik7CgkJZ19mcmVlIChydWxlX3RleHQpOwoJfQoKCS8qIElu
c2VydCB0aGUgcnVsZSBhdCB0aGUgZW5kLCBzbyBpdCB3aWxsIG92ZXJyaWRlIHByZXZpb3VzbHkg
aW5zZXJ0ZWQgKi8KCXdlYmtpdF9kb21fY3NzX3N0eWxlX3NoZWV0X2FkZF9ydWxlICgKCQlXRUJL
SVRfRE9NX0NTU19TVFlMRV9TSEVFVCAoc2hlZXQpLAoJCXNlbGVjdG9yLAoJCXN0eWxlLAoJCXdl
YmtpdF9kb21fY3NzX3J1bGVfbGlzdF9nZXRfbGVuZ3RoICgKCQkJd2Via2l0X2RvbV9jc3Nfc3R5
bGVfc2hlZXRfZ2V0X2Nzc19ydWxlcyAoCgkJCQlXRUJLSVRfRE9NX0NTU19TVFlMRV9TSEVFVCAo
c2hlZXQpKSksIC8qIEluZGV4ICovCgkJTlVMTCk7Cn0KCnN0YXRpYyB2b2lkCmFkZF9jc3NfcnVs
ZV9pbnRvX3N0eWxlX3NoZWV0X3JlY3Vyc2l2ZSAoV2ViS2l0RE9NRG9jdW1lbnQgKmRvY3VtZW50
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpz
dHlsZV9zaGVldF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAqc2VsZWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgKnN0eWxlKQp7CglXZWJLaXRET01Ob2RlTGlzdCAqZnJhbWVzOwoJ
Z2ludCBpaSwgbGVuZ3RoOwoKCS8qIEFkZCBydWxlIHRvIGRvY3VtZW50ICovCglhZGRfY3NzX3J1
bGVfaW50b19zdHlsZV9zaGVldCAoCgkJZG9jdW1lbnQsCgkJc3R5bGVfc2hlZXRfaWQsCgkJc2Vs
ZWN0b3IsCgkJc3R5bGUpOwoKCWZyYW1lcyA9IHdlYmtpdF9kb21fZG9jdW1lbnRfcXVlcnlfc2Vs
ZWN0b3JfYWxsIChkb2N1bWVudCwgImlmcmFtZSIsIE5VTEwpOwoJbGVuZ3RoID0gd2Via2l0X2Rv
bV9ub2RlX2xpc3RfZ2V0X2xlbmd0aCAoZnJhbWVzKTsKCgkvKiBBZGQgcnVsZXMgdG8gZXZlcnkg
c3ViIGRvY3VtZW50ICovCglmb3IgKGlpID0gMDsgaWkgPCBsZW5ndGg7IGlpKyspIHsKCQlXZWJL
aXRET01Eb2N1bWVudCAqaWZyYW1lX2RvY3VtZW50OwoJCVdlYktpdERPTU5vZGUgKm5vZGU7CgoJ
CW5vZGUgPSB3ZWJraXRfZG9tX25vZGVfbGlzdF9pdGVtIChmcmFtZXMsIGlpKTsKCQlpZnJhbWVf
ZG9jdW1lbnQgPSB3ZWJraXRfZG9tX2h0bWxfaWZyYW1lX2VsZW1lbnRfZ2V0X2NvbnRlbnRfZG9j
dW1lbnQgKAoJCQlXRUJLSVRfRE9NX0hUTUxfSUZSQU1FX0VMRU1FTlQgKG5vZGUpKTsKCgkJYWRk
X2Nzc19ydWxlX2ludG9fc3R5bGVfc2hlZXRfcmVjdXJzaXZlICgKCQkJaWZyYW1lX2RvY3VtZW50
LAoJCQlzdHlsZV9zaGVldF9pZCwKCQkJc2VsZWN0b3IsCgkJCXN0eWxlKTsKCX0KfQoKdm9pZApl
X3dlYl92aWV3X2FkZF9jc3NfcnVsZV9pbnRvX3N0eWxlX3NoZWV0IChXZWJLaXRXZWJWaWV3ICp2
aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciAqc3R5bGVfc2hlZXRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyICpzZWxlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN0eWxlKQp7CglnX3JldHVybl9pZl9mYWlsIChXRUJL
SVRfSVNfV0VCX1ZJRVcgKHZpZXcpKTsKCWdfcmV0dXJuX2lmX2ZhaWwgKHN0eWxlX3NoZWV0X2lk
ICYmICpzdHlsZV9zaGVldF9pZCk7CglnX3JldHVybl9pZl9mYWlsIChzZWxlY3RvciAmJiAqc2Vs
ZWN0b3IpOwoJZ19yZXR1cm5faWZfZmFpbCAoc3R5bGUgJiYgKnN0eWxlKTsKCglhZGRfY3NzX3J1
bGVfaW50b19zdHlsZV9zaGVldF9yZWN1cnNpdmUgKAoJCXdlYmtpdF93ZWJfdmlld19nZXRfZG9t
X2RvY3VtZW50IChXRUJLSVRfV0VCX1ZJRVcgKHZpZXcpKSwKCQlzdHlsZV9zaGVldF9pZCwKCQlz
ZWxlY3RvciwKCQlzdHlsZSk7Cn0KCnN0YXRpYyB2b2lkCnVwZGF0ZV9zdHlsZXMgKFdlYktpdFdl
YlZpZXcgKndlYl92aWV3KQp7CgllX3dlYl92aWV3X2FkZF9jc3NfcnVsZV9pbnRvX3N0eWxlX3No
ZWV0ICgKCQl3ZWJfdmlldywKCQkiLWUtd2ViLXZpZXctY3NzLXNoZWV0IiwKCQkiLi1lLXdlYi12
aWV3LWJhY2tncm91bmQtY29sb3IiLAoJCSJiYWNrZ3JvdW5kLWNvbG9yOiAjQUFBQUFBOyIpOwoJ
ZV93ZWJfdmlld19hZGRfY3NzX3J1bGVfaW50b19zdHlsZV9zaGVldCAoCgkJd2ViX3ZpZXcsCgkJ
Ii1lLXdlYi12aWV3LWNzcy1zaGVldCIsCgkJIi4tZS13ZWItdmlldy10ZXh0LWNvbG9yIiwKCQki
Y29sb3I6ICNFRUREQUE7Iik7Cn0KCnN0YXRpYyB2b2lkCmRvY3VtZW50X2xvYWRfZmluaXNoZWRf
Y2IgKFdlYktpdFdlYlZpZXcgKndlYl92aWV3LAoJCQkgICBXZWJLaXRXZWJGcmFtZSAqd2ViX2Zy
YW1lLAoJCQkgICBncG9pbnRlciB1c2VyX2RhdGEpCnsKCXByaW50ZiAoIiVzOiBmcmFtZTolcFxu
IiwgX19GVU5DVElPTl9fLCB3ZWJfZnJhbWUpOwoJdXBkYXRlX3N0eWxlcyAod2ViX3ZpZXcpOwp9
CgpzdGF0aWMgZ2Jvb2xlYW4KZG93bmxvYWRfcmVxdWVzdGVkX2NiIChXZWJLaXRXZWJWaWV3ICp3
ZWJfdmlldywKCQkgICAgICAgV2ViS2l0RG93bmxvYWQgKmRvd25sb2FkLAoJCSAgICAgICBncG9p
bnRlciB1c2VyX2RhdGEpCnsKCXByaW50ZiAoIiVzOiB1cmk6JyVzJ1xuIiwgX19GVU5DVElPTl9f
LCB3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uX3VyaSAoZG93bmxvYWQpKTsKCXJldHVy
biBUUlVFOyAvKiB1c2UgRkFMU0UgdG8gaGFuZGxlIGl0IG9uIG15IG93biovCn0KCnN0YXRpYyB2
b2lkCmZyYW1lX2NyZWF0ZWRfY2IgKFdlYktpdFdlYlZpZXcgICp3ZWJfdmlldywKCQkgIFdlYktp
dFdlYkZyYW1lICp3ZWJfZnJhbWUsCgkJICBncG9pbnRlciB1c2VyX2RhdGEpCnsKCXByaW50ZiAo
IiVzOiBmcmFtZTolcFxuIiwgX19GVU5DVElPTl9fLCB3ZWJfZnJhbWUpOwp9CgpzdGF0aWMgdm9p
ZApyZXNvdXJjZV9sb2FkX2ZpbmlzaGVkX2NiIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldywKCQkJ
ICAgV2ViS2l0V2ViRnJhbWUgKndlYl9mcmFtZSwKCQkJICAgV2ViS2l0V2ViUmVzb3VyY2UgKndl
Yl9yZXNvdXJjZSwKCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQp7CglwcmludGYgKCIlczogZnJh
bWU6JXAgcmVzb3VyY2U6JXAgKCVzKVxuIiwgX19GVU5DVElPTl9fLCB3ZWJfZnJhbWUsIHdlYl9y
ZXNvdXJjZSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpICh3ZWJfcmVzb3VyY2UpKTsKfQoK
c3RhdGljIHZvaWQKcmVzb3VyY2VfcmVxdWVzdF9zdGFydGluZ19jYiAoV2ViS2l0V2ViVmlldyAq
d2ViX3ZpZXcsCgkJCSAgICAgIFdlYktpdFdlYkZyYW1lICp3ZWJfZnJhbWUsCgkJCSAgICAgIFdl
YktpdFdlYlJlc291cmNlICp3ZWJfcmVzb3VyY2UsCgkJCSAgICAgIFdlYktpdE5ldHdvcmtSZXF1
ZXN0ICpyZXF1ZXN0LAoJCQkgICAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UgKnJlc3BvbnNlLAoJ
CQkgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCnsKCXByaW50ZiAoIiVzOiBmcmFtZTolcCByZXNv
dXJjZTolcCAoJXMpXG4iLCBfX0ZVTkNUSU9OX18sIHdlYl9mcmFtZSwgd2ViX3Jlc291cmNlLCB3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkgKHdlYl9yZXNvdXJjZSkpOwp9CgpzdGF0aWMgdm9p
ZApyZXNvdXJjZV9yZXNwb25zZV9yZWNlaXZlZF9jYiAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcs
CgkJCSAgICAgICBXZWJLaXRXZWJGcmFtZSAqd2ViX2ZyYW1lLAoJCQkgICAgICAgV2ViS2l0V2Vi
UmVzb3VyY2UgKndlYl9yZXNvdXJjZSwKCQkJICAgICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSAq
cmVzcG9uc2UsCgkJCSAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCnsKCXByaW50ZiAoIiVzOiBm
cmFtZTolcCByZXNvdXJjZTolcCAoJXMpXG4iLCBfX0ZVTkNUSU9OX18sIHdlYl9mcmFtZSwgd2Vi
X3Jlc291cmNlLCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkgKHdlYl9yZXNvdXJjZSkpOwp9
CgpzdGF0aWMgdm9pZAp3ZWJfdmlld19yZWFkeV9jYiAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcs
CgkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQp7CglwcmludGYgKCIlczogd2VidmlldzolcFxuIiwg
X19GVU5DVElPTl9fLCB3ZWJfdmlldyk7Cn0KCnN0YXRpYyB2b2lkCm5vdGlmeV9sb2FkX3N0YXR1
c19jYiAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcsCgkJICAgICAgIEdQYXJhbVNwZWMgKnBhcmFt
LAoJCSAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCnsKCWNvbnN0IGdjaGFyICpzdGF0dXM7CglX
ZWJLaXRMb2FkU3RhdHVzIGxvYWRfc3RhdHVzID0gd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0
YXR1cyAod2ViX3ZpZXcpOwoKCWlmIChsb2FkX3N0YXR1cyA9PSBXRUJLSVRfTE9BRF9QUk9WSVNJ
T05BTCkKCQlzdGF0dXMgPSAiV0VCS0lUX0xPQURfUFJPVklTSU9OQUwiOwoJZWxzZSBpZiAobG9h
ZF9zdGF0dXMgPT0gV0VCS0lUX0xPQURfQ09NTUlUVEVEKQoJCXN0YXR1cyA9ICJXRUJLSVRfTE9B
RF9DT01NSVRURUQiOwoJZWxzZSBpZiAobG9hZF9zdGF0dXMgPT0gV0VCS0lUX0xPQURfRklOSVNI
RUQpCgkJc3RhdHVzID0gIldFQktJVF9MT0FEX0ZJTklTSEVEIjsKCWVsc2UgaWYgKGxvYWRfc3Rh
dHVzID09IFdFQktJVF9MT0FEX0ZJUlNUX1ZJU1VBTExZX05PTl9FTVBUWV9MQVlPVVQpCgkJc3Rh
dHVzID0gIldFQktJVF9MT0FEX0ZJUlNUX1ZJU1VBTExZX05PTl9FTVBUWV9MQVlPVVQiOwoJZWxz
ZSBpZiAobG9hZF9zdGF0dXMgPT0gV0VCS0lUX0xPQURfRkFJTEVEKQoJCXN0YXR1cyA9ICJXRUJL
SVRfTE9BRF9GQUlMRUQiOwoJZWxzZQoJCXN0YXR1cyA9ICI/PyI7CgoJcHJpbnRmICgiJXM6IHdl
YnZpZXc6JXAgc3RhdHVzOiVzXG4iLCBfX0ZVTkNUSU9OX18sIHdlYl92aWV3LCBzdGF0dXMpOwoK
CWlmIChsb2FkX3N0YXR1cyA9PSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKCQl1cGRhdGVfc3R5bGVz
ICh3ZWJfdmlldyk7Cn0KCnN0YXRpYyBHdGtXaWRnZXQgKgpjcmVhdGVfcGx1Z2luX3dpZGdldF9j
YiAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcsCgkJCSBjb25zdCBnY2hhciAqbWltZV90eXBlLAoJ
CQkgY29uc3QgZ2NoYXIgKnVyaSwKCQkJIEdIYXNoVGFibGUgKnBhcmFtLAoJCQkgZ3BvaW50ZXIg
dXNlcl9kYXRhKQp7CglwcmludGYgKCIlczogbWltZS10eXBlOiVzXG4iLCBfX0ZVTkNUSU9OX18s
IG1pbWVfdHlwZSk7CglpZiAoIW1pbWVfdHlwZSkKCQlyZXR1cm4gTlVMTDsKCglpZiAoc3Ryc3Ry
IChtaW1lX3R5cGUsICJhdHRhY2htZW50IikpCgkJcmV0dXJuIGd0a19idXR0b25fbmV3X3dpdGhf
bGFiZWwgKCJwbHVnaW4tYnV0dG9uIik7CgoJcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyB2b2lkCndl
Yl92aWV3X2luaXRfd2ViX3NldHRpbmdzIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldykKewoJV2Vi
S2l0V2ViU2V0dGluZ3MgKndlYl9zZXR0aW5nczsKCUdPYmplY3RDbGFzcyAqY2xhc3M7CglHUGFy
YW1TcGVjICpwc3BlYzsKCgl3ZWJfc2V0dGluZ3MgPSB3ZWJraXRfd2ViX3NldHRpbmdzX25ldyAo
KTsKCglnX29iamVjdF9zZXQgKAoJCUdfT0JKRUNUICh3ZWJfc2V0dGluZ3MpLAoJCSJlbmFibGUt
ZnJhbWUtZmxhdHRlbmluZyIsIFRSVUUsCgkJImVuYWJsZS1qYXZhLWFwcGxldCIsIEZBTFNFLAoJ
CSJlbmFibGUtaHRtbDUtZGF0YWJhc2UiLCBGQUxTRSwKCQkiZW5hYmxlLWh0bWw1LWxvY2FsLXN0
b3JhZ2UiLCBGQUxTRSwKCQkiZW5hYmxlLW9mZmxpbmUtd2ViLWFwcGxpY2F0aW9uLWNhY2hlIiwg
RkFMU0UsCgkJImVuYWJsZS1zaXRlLXNwZWNpZmljLXF1aXJrcyIsIFRSVUUsCgkJImVuYWJsZS1z
Y3JpcHRzIiwgRkFMU0UsCgkJTlVMTCk7CgoJLyogVGhpcyBwcm9wZXJ0eSB3YXMgaW50cm9kdWNl
ZCBpbiBXZWJLaXRHVEsgMi4wLAoJICogc28gY2hlY2sgZm9yIGl0IGFuZCBlbmFibGUgaXQgaWYg
aXQncyBwcmVzZW50LiAqLwoJY2xhc3MgPSBHX09CSkVDVF9HRVRfQ0xBU1MgKHdlYl9zZXR0aW5n
cyk7Cglwc3BlYyA9IGdfb2JqZWN0X2NsYXNzX2ZpbmRfcHJvcGVydHkgKAoJCWNsYXNzLCAicmVz
cGVjdC1pbWFnZS1vcmllbnRhdGlvbiIpOwoJaWYgKHBzcGVjICE9IE5VTEwpIHsKCQlnX29iamVj
dF9zZXQgKAoJCQlHX09CSkVDVCAod2ViX3NldHRpbmdzKSwKCQkJcHNwZWMtPm5hbWUsIFRSVUUs
IE5VTEwpOwoJfQoKCWdfb2JqZWN0X2JpbmRfcHJvcGVydHkgKAoJCXdlYl9zZXR0aW5ncywgImVu
YWJsZS1jYXJldC1icm93c2luZyIsCgkJd2ViX3ZpZXcsICJjYXJldC1tb2RlIiwKCQlHX0JJTkRJ
TkdfQklESVJFQ1RJT05BTCB8CgkJR19CSU5ESU5HX1NZTkNfQ1JFQVRFKTsKCgl3ZWJraXRfd2Vi
X3ZpZXdfc2V0X3NldHRpbmdzICh3ZWJfdmlldywgd2ViX3NldHRpbmdzKTsKCglnX29iamVjdF91
bnJlZiAod2ViX3NldHRpbmdzKTsKfQoKaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10p
CnsKCUd0a1dpZGdldCAqZGlhbG9nLCAqY29udGFpbmVyLCAqd2ssICpzdzsKCVdlYktpdFdlYlZp
ZXcgKndlYl92aWV3OwoKCWd0a19pbml0ICgmYXJnYywgJmFyZ3YpOwoKCXNvdXBfc2Vzc2lvbl9h
ZGRfZmVhdHVyZV9ieV90eXBlICh3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbiAoKSwgRV9UWVBF
X0ZJTEVfUkVRVUVTVCk7CgoJZGlhbG9nID0gZ3RrX2RpYWxvZ19uZXdfd2l0aF9idXR0b25zICgi
dGVzdC13ayIsIE5VTEwsIDAsICJfQ2FuY2VsIiwgR1RLX1JFU1BPTlNFX0NBTkNFTCwgTlVMTCk7
CgoJY29udGFpbmVyID0gZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhIChHVEtfRElBTE9HIChk
aWFsb2cpKTsKCgl3ayA9IHdlYmtpdF93ZWJfdmlld19uZXcgKCk7Cgl3ZWJfdmlldyA9IFdFQktJ
VF9XRUJfVklFVyAod2spOwoJd2ViX3ZpZXdfaW5pdF93ZWJfc2V0dGluZ3MgKHdlYl92aWV3KTsK
CS8vdXBkYXRlX3N0eWxlcyAod2ViX3ZpZXcpOwoKCXN3ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19u
ZXcgKE5VTEwsIE5VTEwpOwoJZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKHN3KSwg
d2spOwoKCWd0a19jb250YWluZXJfYWRkIChHVEtfQ09OVEFJTkVSIChjb250YWluZXIpLCBzdyk7
CglnX29iamVjdF9zZXQgKEdfT0JKRUNUICh3ayksCgkJImhleHBhbmQiLCBUUlVFLAoJCSJoYWxp
Z24iLCBHVEtfQUxJR05fRklMTCwKCQkidmV4cGFuZCIsIFRSVUUsCgkJInZhbGlnbiIsIEdUS19B
TElHTl9GSUxMLAoJCSJoZWlnaHQtcmVxdWVzdCIsIDMwLAoJCSJ3aWR0aC1yZXF1ZXN0IiwgMzAs
CgkJTlVMTCk7CgoJZ19zaWduYWxfY29ubmVjdCAod2ssICJkb2N1bWVudC1sb2FkLWZpbmlzaGVk
IiwgR19DQUxMQkFDSyAoZG9jdW1lbnRfbG9hZF9maW5pc2hlZF9jYiksIE5VTEwpOwoJZ19zaWdu
YWxfY29ubmVjdCAod2ssICJkb3dubG9hZC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLIChkb3dubG9h
ZF9yZXF1ZXN0ZWRfY2IpLCBOVUxMKTsKCWdfc2lnbmFsX2Nvbm5lY3QgKHdrLCAiZnJhbWUtY3Jl
YXRlZCIsIEdfQ0FMTEJBQ0sgKGZyYW1lX2NyZWF0ZWRfY2IpLCBOVUxMKTsKCWdfc2lnbmFsX2Nv
bm5lY3QgKHdrLCAicmVzb3VyY2UtbG9hZC1maW5pc2hlZCIsIEdfQ0FMTEJBQ0sgKHJlc291cmNl
X2xvYWRfZmluaXNoZWRfY2IpLCBOVUxMKTsKCWdfc2lnbmFsX2Nvbm5lY3QgKHdrLCAicmVzb3Vy
Y2UtcmVxdWVzdC1zdGFydGluZyIsIEdfQ0FMTEJBQ0sgKHJlc291cmNlX3JlcXVlc3Rfc3RhcnRp
bmdfY2IpLCBOVUxMKTsKCWdfc2lnbmFsX2Nvbm5lY3QgKHdrLCAicmVzb3VyY2UtcmVzcG9uc2Ut
cmVjZWl2ZWQiLCBHX0NBTExCQUNLIChyZXNvdXJjZV9yZXNwb25zZV9yZWNlaXZlZF9jYiksIE5V
TEwpOwoJZ19zaWduYWxfY29ubmVjdCAod2ssICJ3ZWItdmlldy1yZWFkeSIsIEdfQ0FMTEJBQ0sg
KHdlYl92aWV3X3JlYWR5X2NiKSwgTlVMTCk7CglnX3NpZ25hbF9jb25uZWN0ICh3aywgIm5vdGlm
eTo6bG9hZC1zdGF0dXMiLCBHX0NBTExCQUNLIChub3RpZnlfbG9hZF9zdGF0dXNfY2IpLCBOVUxM
KTsKCWdfc2lnbmFsX2Nvbm5lY3QgKHdrLCAiY3JlYXRlLXBsdWdpbi13aWRnZXQiLCBHX0NBTExC
QUNLIChjcmVhdGVfcGx1Z2luX3dpZGdldF9jYiksIE5VTEwpOwoKCXdlYmtpdF93ZWJfdmlld19s
b2FkX3N0cmluZyAoV0VCS0lUX1dFQl9WSUVXICh3ayksCgkJIjwhRE9DVFlQRSBIVE1MPiIKCQki
PGh0bWw+IgoJCSI8aGVhZD4iCgkJIjxtZXRhIG5hbWU9XCJnZW5lcmF0b3JcIiBjb250ZW50PVwi
RXZvbHV0aW9uIE1haWxcIi8+IgoJCSI8dGl0bGU+RXZvbHV0aW9uIE1haWwgRGlzcGxheTwvdGl0
bGU+IgoJCSI8bGluayB0eXBlPVwidGV4dC9jc3NcIiByZWw9XCJzdHlsZXNoZWV0XCIgICAgICAg
aHJlZj1cImV2by1maWxlOi8vL2J1aWxkL2xvY2FsL3NoYXJlL2V2b2x1dGlvbi90aGVtZS93ZWJ2
aWV3LmNzc1wiLz4iCgkJIjxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj4iCgkJIiAgdGFibGUgdGgg
eyBmb250LXdlaWdodDogYm9sZDsgfSIKCQkiPC9zdHlsZT4iCgkJIjwvaGVhZD48Ym9keSBjbGFz
cz1cIi1lLW1haWwtZm9ybWF0dGVyLWJvZHktY29sb3IgLWUtd2ViLXZpZXctYmFja2dyb3VuZC1j
b2xvciAtZS13ZWItdmlldy10ZXh0LWNvbG9yXCI+PGRpdiBjbGFzcz1cImhlYWRlcnMgLWUtbWFp
bC1mb3JtYXR0ZXItYm9keS1jb2xvclwiIGlkPVwiLm1lc3NhZ2UuaGVhZGVyc1wiPjx0YWJsZSBj
bGFzcz1cIi1lLW1haWwtZm9ybWF0dGVyLWhlYWRlci1jb2xvclwiIGJvcmRlcj1cIjBcIiB3aWR0
aD1cIjEwMCVcIiBzdHlsZT1cImRpcmVjdGlvbjogbHRyXCI+PHRyPjx0ZD48dGFibGUgY2VsbHNw
YWNpbmc9XCIwXCIgY2VsbHBhZGRpbmc9XCIwXCIgYm9yZGVyPVwiMFwiIHdpZHRoPVwiMTAwJVwi
IGlkPVwiX19ldm8tZnVsbC1oZWFkZXJzXCIgc3R5bGU9XCJkaXNwbGF5OiB0YWJsZTsgZGlyZWN0
aW9uOiBsdHI7XCI+PHRyIHZhbGlnbj1cInRvcFwiPjx0ZCB3aWR0aD1cIjEwMCVcIj48dGFibGUg
Y2xhc3M9XCJoZWFkZXJcIj4iCgkJIjx0ciBjbGFzcz1cImhlYWRlclwiIHN0eWxlPVwiZGlzcGxh
eTogdGFibGUtcm93XCI+PHRoIGNsYXNzPVwiaGVhZGVyIGx0clwiPkZyb206PC90aD48dGQgY2xh
c3M9XCJoZWFkZXIgbHRyXCI+PGEgaHJlZj1cIm1haWx0bzppbmZvcm1hQGNhcnRhYmNjLml0XCI+
aW5mb3JtYUBjYXJ0YWJjYy5pdDwvYT48L3RkPjwvdHI+PHRyIGNsYXNzPVwiaGVhZGVyXCIgc3R5
bGU9XCJkaXNwbGF5OiB0YWJsZS1yb3dcIj48dGggY2xhc3M9XCJoZWFkZXIgbHRyXCI+UmVwbHkt
dG86PC90aD48dGQgY2xhc3M9XCJoZWFkZXIgbHRyXCI+PGEgaHJlZj1cIm1haWx0bzpuby1yZXBs
eUBjYXJ0YWJjYy5pdFwiPm5vLXJlcGx5QGNhcnRhYmNjLml0PC9hPjwvdGQ+PC90cj48dHIgY2xh
c3M9XCJoZWFkZXJcIiBzdHlsZT1cImRpc3BsYXk6IHRhYmxlLXJvd1wiPjx0aCBjbGFzcz1cImhl
YWRlciBsdHJcIj5Ubzo8L3RoPjx0ZCBjbGFzcz1cImhlYWRlciBsdHJcIj48YSBocmVmPVwibWFp
bHRvOmFsZXNzYW5kcmlhQGFucGFuYS5waWVtb250ZS5pdFwiPmFsZXNzYW5kcmlhQGFucGFuYS5w
aWVtb250ZS5pdDwvYT48L3RkPjwvdHI+PHRyIGNsYXNzPVwiaGVhZGVyXCIgc3R5bGU9XCJkaXNw
bGF5OiB0YWJsZS1yb3dcIj48dGggY2xhc3M9XCJoZWFkZXIgbHRyXCI+U3ViamVjdDo8L3RoPjx0
ZCBjbGFzcz1cImhlYWRlciBsdHJcIj5SSC1idWcgIzExOTg3NTggLSBWZXJpZmljYSBpbCBkZXR0
YWdsaW8gZGVsIHR1byBhY2NvdW50ICE8L3RkPjwvdHI+PHRyIGNsYXNzPVwiaGVhZGVyXCIgc3R5
bGU9XCJkaXNwbGF5OiB0YWJsZS1yb3dcIj48dGggY2xhc3M9XCJoZWFkZXIgbHRyXCI+RGF0ZTo8
L3RoPjx0ZCBjbGFzcz1cImhlYWRlciBsdHJcIj4wMyBNYXIgMjAxNSAyMToyMDozNCArMDEwMDwv
dGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2
PjxvYmplY3QgdHlwZT1cImFwcGxpY2F0aW9uL3ZuZC5ldm9sdXRpb24ud2lkZ2V0LmF0dGFjaG1l
bnQtYmFyXCIgaGVpZ2h0PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGRhdGE9XCIubWVzc2FnZS5hdHRh
Y2htZW50LWJhclwiIGlkPVwiLm1lc3NhZ2UuYXR0YWNobWVudC1iYXJcIj48L29iamVjdD48ZGl2
IGNsYXNzPVwicGFydC1jb250YWluZXItbm9zdHlsZVwiPjxpZnJhbWUgd2lkdGg9XCIxMDAlXCIg
aGVpZ2h0PVwiMTBcIiAgZnJhbWVib3JkZXI9XCIwXCIgc3JjPVwiZXZvLWZpbGU6Ly8vYi5odG1s
XCIgIGlkPVwiLm1lc3NhZ2UubWl4ZWQuMC50ZXh0X2h0bWwuaWZyYW1lXCIgbmFtZT1cIi5tZXNz
YWdlLm1peGVkLjAudGV4dF9odG1sXCIgIGNsYXNzPVwiLWUtbWFpbC1mb3JtYXR0ZXItZnJhbWUt
Y29sb3IgLWUtbWFpbC1mb3JtYXR0ZXItZnJhbWUtc2VjdXJpdHktbm9uZVwiICBzdHlsZT1cImJh
Y2tncm91bmQtY29sb3I6ICNmZmZmZmY7IFwiPjwvaWZyYW1lPjwvZGl2PjxkaXYgY2xhc3M9XCJh
dHRhY2htZW50XCI+PHRhYmxlIHdpZHRoPVwiMTAwJVwiIGJvcmRlcj1cIjBcIj48dHIgdmFsaWdu
PVwibWlkZGxlXCI+PHRkIGFsaWduPVwibGVmdFwiIHdpZHRoPVwiMTAwXCI+PG9iamVjdCB0eXBl
PVwiYXBwbGljYXRpb24vdm5kLmV2b2x1dGlvbi53aWRnZXQuYXR0YWNobWVudC1idXR0b25cIiBo
ZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMTAwXCIgZGF0YT1cIi5tZXNzYWdlLm1peGVkLjEuYXR0YWNo
bWVudFwiIGlkPVwiLm1lc3NhZ2UubWl4ZWQuMS5hdHRhY2htZW50LmF0dGFjaG1lbnRfYnV0dG9u
XCI+PC9vYmplY3Q+PC90ZD48dGQgYWxpZ249XCJsZWZ0XCI+SFRNTCBkb2N1bWVudCBhdHRhY2ht
ZW50IChNb2R1bG8gLSBDbGllbnRlIENhcnRhQkNDLmh0bWwpPC90ZD48L3RyPjx0cj48dGQgY29s
c3Bhbj1cIjJcIj48ZGl2IGNsYXNzPVwiYXR0YWNobWVudC13cmFwcGVyXCIgaWQ9XCIubWVzc2Fn
ZS5taXhlZC4xLmF0dGFjaG1lbnQud3JhcHBlclwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjxk
aXYgY2xhc3M9XCJwYXJ0LWNvbnRhaW5lci1ub3N0eWxlXCI+PGlmcmFtZSB3aWR0aD1cIjEwMCVc
IiBoZWlnaHQ9XCIxMFwiICBmcmFtZWJvcmRlcj1cIjBcIiBzcmM9XCJldm8tZmlsZTovLy9jLmh0
bWxcIiAgaWQ9XCIubWVzc2FnZS5taXhlZC4xLmF0dGFjaG1lbnQuaWZyYW1lXCIgbmFtZT1cIi5t
ZXNzYWdlLm1peGVkLjEuYXR0YWNobWVudFwiICBjbGFzcz1cIi1lLW1haWwtZm9ybWF0dGVyLWZy
YW1lLWNvbG9yIC1lLW1haWwtZm9ybWF0dGVyLWZyYW1lLXNlY3VyaXR5LW5vbmVcIiAgc3R5bGU9
XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyBcIj48L2lmcmFtZT48L2Rpdj48L2Rpdj48L3Rk
PjwvdHI+PC90YWJsZT48L2Rpdj48L2JvZHk+PC9odG1sPiIsCgkJInRleHQvaHRtbCIsCgkJInV0
Zi04IiwKCQkibG9jYWw6Ly8iKTsKCglndGtfd2lkZ2V0X3Nob3dfYWxsIChndGtfZGlhbG9nX2dl
dF9jb250ZW50X2FyZWEgKEdUS19ESUFMT0cgKGRpYWxvZykpKTsKCWd0a19kaWFsb2dfcnVuIChH
VEtfRElBTE9HIChkaWFsb2cpKTsKCglndGtfd2lkZ2V0X2Rlc3Ryb3kgKGRpYWxvZyk7CgoJcmV0
dXJuIDA7Cn0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247969</attachid>
            <date>2015-03-05 11:03:41 -0800</date>
            <delta_ts>2015-04-07 06:25:36 -0700</delta_ts>
            <desc>naive solution</desc>
            <filename>wk.patch</filename>
            <type>text/plain</type>
            <size>624</size>
            <attacher name="Milan Crha">mcrha</attacher>
            
              <data encoding="base64">ZGlmZiAtdXAgLi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNw
cC5vbGQgLi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcAot
LS0gLi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcC5vbGQJ
MjAxNS0wMy0wNSAyMDowMToyNi40MzI4ODAzMDAgKzAxMDAKKysrIC4vU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAJMjAxNS0wMy0wNSAyMDowMTozOC44MTk4
Nzk3NTggKzAxMDAKQEAgLTYyLDYgKzYyLDkgQEAgdm9pZCBHdGtQbHVnaW5XaWRnZXQ6OmludmFs
aWRhdGVSZWN0KGNvbgogCiB2b2lkIEd0a1BsdWdpbldpZGdldDo6ZnJhbWVSZWN0c0NoYW5nZWQo
KQogeworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKwogICAgIEludFJlY3Qg
cmVjdCA9IGZyYW1lUmVjdCgpOwogICAgIEludFBvaW50IGxvYyA9IHBhcmVudCgpLT5jb250ZW50
c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSk7CiAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9u
ID0geyBsb2MueCgpLCBsb2MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsK
</data>
<flag name="review"
          id="272896"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
    <flag name="commit-queue"
          id="275082"
          type_id="3"
          status="-"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>