<?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>52732</bug_id>
          
          <creation_ts>2011-01-19 12:24:43 -0800</creation_ts>
          <short_desc>[CSS Gradients] Crash due to out-of-memory with repeating-linear-gradient and latter stop positioned before former</short_desc>
          <delta_ts>2011-01-19 14:41:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rafał Chłodnicki">rchl2k</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>336699</commentid>
    <comment_count>0</comment_count>
    <who name="Rafał Chłodnicki">rchl2k</who>
    <bug_when>2011-01-19 12:24:43 -0800</bug_when>
    <thetext>-webkit-repeating-linear-gradient(red, green 0)
or
-webkit-repeating-linear-gradient(red 0, green 0)
or
-webkit-repeating-linear-gradient(red 10%, green 9%)
or
-webkit-repeating-linear-gradient(red 110%, green)

freezes browser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336710</commentid>
    <comment_count>1</comment_count>
      <attachid>79466</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-19 12:32:29 -0800</bug_when>
    <thetext>Created attachment 79466
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336711</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-19 12:32:42 -0800</bug_when>
    <thetext>Testcase works fine on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336713</commentid>
    <comment_count>3</comment_count>
    <who name="Rafał Chłodnicki">rchl2k</who>
    <bug_when>2011-01-19 12:35:45 -0800</bug_when>
    <thetext>I&apos;ve actually tested Chrome (10.0.634.0). Maybe it doesn&apos;t have latest fixes yet...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336716</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-19 12:39:32 -0800</bug_when>
    <thetext>This crashes on Windows due to a failed allocation. Here&apos;s the backtrace:

 	JavaScriptCore.dll!WTF::fastMalloc(unsigned int n=379677936)  Line 260	C++
 	WebKit.dll!WTF::VectorBufferBase&lt;WebCore::GradientStop&gt;::allocateBuffer(unsigned int newCapacity=23729871)  Line 287 + 0xc bytes	C++
 	WebKit.dll!WTF::Vector&lt;WebCore::GradientStop,0&gt;::reserveCapacity(unsigned int newCapacity=23729871)  Line 872	C++
 	WebKit.dll!WTF::Vector&lt;WebCore::GradientStop,0&gt;::expandCapacity(unsigned int newMinCapacity=18983897)  Line 789	C++
 	WebKit.dll!WTF::Vector&lt;WebCore::GradientStop,0&gt;::expandCapacity(unsigned int newMinCapacity=18983897, const WebCore::GradientStop * ptr=0x0012e8c8)  Line 796	C++
 	WebKit.dll!WTF::Vector&lt;WebCore::GradientStop,0&gt;::append&lt;WebCore::GradientStop&gt;(const WebCore::GradientStop &amp; val={...})  Line 967 + 0x18 bytes	C++
&gt;	WebKit.dll!WebCore::CSSGradientValue::addStops(WebCore::Gradient * gradient=0x06eb8b38, WebCore::RenderObject * renderer=0x05c0e7bc, WebCore::RenderStyle * rootStyle=0x06917ae0, float maxLengthForRepeat=1.0000000)  Line 280	C++
 	WebKit.dll!WebCore::CSSLinearGradientValue::createGradient(WebCore::RenderObject * renderer=0x05c0e7bc, const WebCore::IntSize &amp; size={...})  Line 532	C++
 	WebKit.dll!WebCore::CSSGradientValue::image(WebCore::RenderObject * renderer=0x05c0e7bc, const WebCore::IntSize &amp; size={...})  Line 60 + 0x1f bytes	C++
 	WebKit.dll!WebCore::StyleGeneratedImage::image(WebCore::RenderObject * renderer=0x05c0e7bc, const WebCore::IntSize &amp; size={...})  Line 77 + 0x1d bytes	C++
 	WebKit.dll!WebCore::RenderBoxModelObject::paintFillLayerExtended(const WebCore::PaintInfo &amp; paintInfo={...}, const WebCore::Color &amp; c={...}, const WebCore::FillLayer * bgLayer=0x06e37a80, int tx=8, int ty=8, int w=100, int h=100, WebCore::InlineFlowBox * box=0x00000000, WebCore::CompositeOperator op=CompositeSourceOver, WebCore::RenderObject * backgroundObject=0x00000000)  Line 695 + 0x23 bytes	C++
 	WebKit.dll!WebCore::RenderBox::paintFillLayer(const WebCore::PaintInfo &amp; paintInfo={...}, const WebCore::Color &amp; c={...}, const WebCore::FillLayer * fillLayer=0x06e37a80, int tx=8, int ty=8, int width=100, int height=100, WebCore::CompositeOperator op=CompositeSourceOver, WebCore::RenderObject * backgroundObject=0x00000000)  Line 943	C++
 	WebKit.dll!WebCore::RenderBox::paintFillLayers(const WebCore::PaintInfo &amp; paintInfo={...}, const WebCore::Color &amp; c={...}, const WebCore::FillLayer * fillLayer=0x06e37a80, int tx=8, int ty=8, int width=100, int height=100, WebCore::CompositeOperator op=CompositeSourceOver, WebCore::RenderObject * backgroundObject=0x00000000)  Line 938	C++
 	WebKit.dll!WebCore::RenderBox::paintBoxDecorationsWithSize(WebCore::PaintInfo &amp; paintInfo={...}, int tx=8, int ty=8, int width=100, int height=100)  Line 821	C++
 	WebKit.dll!WebCore::RenderBox::paintBoxDecorations(WebCore::PaintInfo &amp; paintInfo={...}, int tx=8, int ty=8)  Line 800	C++
 	WebKit.dll!WebCore::RenderBlock::paintObject(WebCore::PaintInfo &amp; paintInfo={...}, int tx=8, int ty=8)  Line 2396 + 0x1e bytes	C++
 	WebKit.dll!WebCore::RenderBlock::paint(WebCore::PaintInfo &amp; paintInfo={...}, int tx=8, int ty=8)  Line 2205 + 0x1e bytes	C++
 	WebKit.dll!WebCore::RenderBlock::paintChildren(WebCore::PaintInfo &amp; paintInfo={...}, int tx=8, int ty=8)  Line 2357 + 0x28 bytes	C++
 	WebKit.dll!WebCore::RenderBlock::paintContents(WebCore::PaintInfo &amp; paintInfo={...}, int tx=8, int ty=8)  Line 2317	C++
 	WebKit.dll!WebCore::RenderBlock::paintObject(WebCore::PaintInfo &amp; paintInfo={...}, int tx=8, int ty=8)  Line 2429	C++
 	WebKit.dll!WebCore::RenderBlock::paint(WebCore::PaintInfo &amp; paintInfo={...}, int tx=8, int ty=8)  Line 2205 + 0x1e bytes	C++
 	WebKit.dll!WebCore::RenderBlock::paintChildren(WebCore::PaintInfo &amp; paintInfo={...}, int tx=0, int ty=0)  Line 2357 + 0x28 bytes	C++
 	WebKit.dll!WebCore::RenderBlock::paintContents(WebCore::PaintInfo &amp; paintInfo={...}, int tx=0, int ty=0)  Line 2317	C++
 	WebKit.dll!WebCore::RenderBlock::paintObject(WebCore::PaintInfo &amp; paintInfo={...}, int tx=0, int ty=0)  Line 2429	C++
 	WebKit.dll!WebCore::RenderBlock::paint(WebCore::PaintInfo &amp; paintInfo={...}, int tx=0, int ty=0)  Line 2205 + 0x1e bytes	C++
 	WebKit.dll!WebCore::RenderLayer::paintLayer(WebCore::RenderLayer * rootLayer=0x05c3cc14, WebCore::GraphicsContext * p=0x0012fb38, const WebCore::IntRect &amp; paintDirtyRect={...}, unsigned int paintBehavior=0, WebCore::RenderObject * paintingRoot=0x00000000, WTF::HashMap&lt;WebCore::OverlapTestRequestClient *,WebCore::IntRect,WTF::PtrHash&lt;WebCore::OverlapTestRequestClient *&gt;,WTF::HashTraits&lt;WebCore::OverlapTestRequestClient *&gt;,WTF::HashTraits&lt;WebCore::IntRect&gt; &gt; * overlapTestRequests=0x0012f968, unsigned int paintFlags=0)  Line 2506 + 0x3b bytes	C++
 	WebKit.dll!WebCore::RenderLayer::paintList(WTF::Vector&lt;WebCore::RenderLayer *,0&gt; * list=[1](0x023f8dd4 {m_renderer=0x067cc784 m_parent=0x05c3cc14 m_previous=0x00000000 ...}), WebCore::RenderLayer * rootLayer=0x05c3cc14, WebCore::GraphicsContext * p=0x0012fb38, const WebCore::IntRect &amp; paintDirtyRect={...}, unsigned int paintBehavior=0, WebCore::RenderObject * paintingRoot=0x00000000, WTF::HashMap&lt;WebCore::OverlapTestRequestClient *,WebCore::IntRect,WTF::PtrHash&lt;WebCore::OverlapTestRequestClient *&gt;,WTF::HashTraits&lt;WebCore::OverlapTestRequestClient *&gt;,WTF::HashTraits&lt;WebCore::IntRect&gt; &gt; * overlapTestRequests=0x0012f968, unsigned int paintFlags=0)  Line 2566	C++
 	WebKit.dll!WebCore::RenderLayer::paintLayer(WebCore::RenderLayer * rootLayer=0x05c3cc14, WebCore::GraphicsContext * p=0x0012fb38, const WebCore::IntRect &amp; paintDirtyRect={...}, unsigned int paintBehavior=0, WebCore::RenderObject * paintingRoot=0x00000000, WTF::HashMap&lt;WebCore::OverlapTestRequestClient *,WebCore::IntRect,WTF::PtrHash&lt;WebCore::OverlapTestRequestClient *&gt;,WTF::HashTraits&lt;WebCore::OverlapTestRequestClient *&gt;,WTF::HashTraits&lt;WebCore::IntRect&gt; &gt; * overlapTestRequests=0x0012f968, unsigned int paintFlags=0)  Line 2535	C++
 	WebKit.dll!WebCore::RenderLayer::paint(WebCore::GraphicsContext * p=0x0012fb38, const WebCore::IntRect &amp; damageRect={...}, unsigned int paintBehavior=0, WebCore::RenderObject * paintingRoot=0x00000000)  Line 2318	C++
 	WebKit.dll!WebCore::FrameView::paintContents(WebCore::GraphicsContext * p=0x0012fb38, const WebCore::IntRect &amp; rect={...})  Line 2186	C++
 	WebKit.dll!WebCore::ScrollView::paint(WebCore::GraphicsContext * context=0x0012fb38, const WebCore::IntRect &amp; rect={...})  Line 895 + 0x1a bytes	C++

At the point when we crashed, the stops Vector in CSSGradientValue::addStops had 19 million items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336722</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-19 12:44:09 -0800</bug_when>
    <thetext>When we enter this bit of code:

        // Work forwards from the end, adding stops until we get one after 1.
        float lastOffset = stops[stops.size() - 1].offset;
        if (lastOffset &lt; maxExtent) {
            float currOffset = lastOffset;
            size_t srcStopOrdinal = 0;

            while (true) {
                GradientStop newStop = stops[srcStopOrdinal];
                newStop.offset = currOffset;
                stops.append(newStop);
                if (currOffset &gt; maxExtent)
                    break;
                if (srcStopOrdinal &lt; originalNumStops - 1)
                    currOffset += stops[originalFirstStopIndex + srcStopOrdinal + 1].offset - stops[originalFirstStopIndex + srcStopOrdinal].offset;
                srcStopOrdinal = (srcStopOrdinal + 1) % originalNumStops;
            }
        }

stops has two items, both of which have offset 0. maxExtent is 1. So we basically keep doing 0 += 0, and then if (0 &gt; 1) break;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336723</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-19 12:46:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/8886781&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336736</commentid>
    <comment_count>7</comment_count>
      <attachid>79472</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-19 13:19:06 -0800</bug_when>
    <thetext>Created attachment 79472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336737</commentid>
    <comment_count>8</comment_count>
      <attachid>79472</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-01-19 13:21:09 -0800</bug_when>
    <thetext>Comment on attachment 79472
Patch

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

&gt; Source/WebCore/css/CSSGradientValue.cpp:240
&gt; +        float gradientRange = stops[numStops - 1].offset - stops[0].offset;
&gt; +        if (!gradientRange) {
&gt; +            stops[0].offset = 0;
&gt; +            stops[0].color = stops[numStops - 1].color;
&gt; +            stops.shrink(1);
&gt; +            numStops = 1;

I think using .first() and .last() would be clearer than [0] and [numStops - 1].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336741</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-01-19 13:29:14 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336820</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 14:41:01 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76154 might have broken GTK Linux 32-bit Release
The following tests are not passing:
fast/forms/input-text-scroll-left-on-blur.html
fast/forms/plaintext-mode-2.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>79466</attachid>
            <date>2011-01-19 12:32:29 -0800</date>
            <delta_ts>2011-01-19 12:32:29 -0800</delta_ts>
            <desc>Testcase</desc>
            <filename>gradient.html</filename>
            <type>text/html</type>
            <size>277</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KPGhlYWQ+CiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBt
ZWRpYT0ic2NyZWVuIj4KICAgIC5ib3ggewogICAgICBoZWlnaHQ6IDEwMHB4OwogICAgICB3aWR0
aDogMTAwcHg7CiAgICAgIGJhY2tncm91bmQ6IG5vLXJlcGVhdCAtd2Via2l0LXJlcGVhdGluZy1s
aW5lYXItZ3JhZGllbnQocmVkLCBncmVlbiAwKTsKICAgIH0KICA8L3N0eWxlPgo8L2hlYWQ+Cjxi
b2R5Pgo8ZGl2IGNsYXNzPSJib3giPgogIAo8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79472</attachid>
            <date>2011-01-19 13:19:06 -0800</date>
            <delta_ts>2011-01-19 13:21:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52732-20110119131905.patch</filename>
            <type>text/plain</type>
            <size>11978</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2OTRjNzBmODNjODg5ZmY5ZWMxNmUzM2E4ZDM2MWFjYWNhNzYxMzk4Li4yNDEwNzgy
NWRhNzU5MmY1Nzk1NDliMTdmNzU5MTQyZTViNTlkNzgzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTEtMDEtMTkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0NTUyBHcmFkaWVu
dHNdIENyYXNoIGR1ZSB0byBvdXQtb2YtbWVtb3J5IHdpdGggcmVwZWF0aW5nLWxpbmVhci1ncmFk
aWVudCBhbmQgbGF0dGVyIHN0b3AgcG9zaXRpb25lZCBiZWZvcmUgZm9ybWVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjczMgorICAgICAgICAKKyAg
ICAgICAgVGVzdCBmb3IgcmVwZWF0aW5nIGdyYWRpZW50IHdpdGggemVybyByYW5nZS4KKworICAg
ICAgICAqIGZhc3QvZ3JhZGllbnRzL3plcm8tcmFuZ2UtcmVwZWF0aW5nLWdyYWRpZW50LWhhbmct
ZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIGZhc3QvZ3JhZGllbnRzL3plcm8t
cmFuZ2UtcmVwZWF0aW5nLWdyYWRpZW50LWhhbmctZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2dyYWRpZW50cy96ZXJvLXJhbmdlLXJlcGVhdGluZy1ncmFkaWVudC1oYW5nLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9ncmFkaWVudHMvemVyby1yYW5nZS1y
ZXBlYXRpbmctZ3JhZGllbnQtaGFuZy5odG1sOiBBZGRlZC4KKwogMjAxMS0wMS0xOCAgSmVzc2ll
IEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
Um9iZW4uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2dyYWRpZW50cy96ZXJvLXJhbmdl
LXJlcGVhdGluZy1ncmFkaWVudC1oYW5nLWV4cGVjdGVkLmNoZWNrc3VtIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ncmFkaWVudHMvemVyby1yYW5nZS1yZXBlYXRpbmctZ3JhZGllbnQtaGFuZy1leHBlY3Rl
ZC5jaGVja3N1bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzExNTk3NTE3MzgyY2ViMjRhYmViMWQ0ZTFjMmU3MDFi
NmY4Y2E2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ncmFkaWVudHMvemVy
by1yYW5nZS1yZXBlYXRpbmctZ3JhZGllbnQtaGFuZy1leHBlY3RlZC5jaGVja3N1bQpAQCAtMCww
ICsxIEBACis2YjBlY2M3MzU1MjQwOTY1MWZkZjM0ZjY5NWE3MzA2MwpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZ3JhZGllbnRzL3plcm8t
cmFuZ2UtcmVwZWF0aW5nLWdyYWRpZW50LWhhbmctZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMv
ZmFzdC9ncmFkaWVudHMvemVyby1yYW5nZS1yZXBlYXRpbmctZ3JhZGllbnQtaGFuZy1leHBlY3Rl
ZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGJkYjgyODkxZmIwMTQwMWU2Njg2ZWRhZmQ5MmQwNDJjNDA1MDBh
MgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTEyODgKemNtZUhOYCMpNyM2aEcmNTw5Yz5RTUE5
TElLYDlpR2I4JG0tYVlHKUhCcjt4Qzk/OUZHNjIwN3MkU3B9X1cqUTBnCnpMOFFxVCNXYmpwJDAj
SHZDMHgzQmdxZFN7LTE4XlFkfWpaNCZpYjdGSiFgR2Mtc2AqOWNrZVVAcmo+LUtmK3okKgp6NTtv
U0JFQ15iSkxKO0NnNihUSSQkbUlSUiVaUl4pZ0BjV1MxP210TXZkPSVyN2xOWVRCVGYka3JSZyZC
aFV9fTQKelJIKktPa35nOV9EbUhGfi0hYStAPWNLIz8jaypJUEdkTW1RWX0obXxaJTVTMjNRYEM5
QThZazYtc0tEYmcpN0MzCnpgSztZYCNHUnFoUT5mdmNGUT56NlYld0QkeXMycVVuQ1JJIThYcHFi
M3JVMnY9PHsqUGZKOG0obDlZYz9vTyFAKAp6RHM8fFMyd2gqenhxRnpZRG52Z05Kez4jUThNN3FH
IXt4V3dqfFhvWUVhSkE1YkE9RGpWU1FISUYwR1BMeGxtRUoKenJBVnF0WkB5LUkxaHd9Pz1sRjJD
NWk+Z0sqUm16d25BVytlIzk7PEgmNTdHQD9QeVlLI1NVMy0lSClUI3d3JiljCnpwNHFXZCpxXj1j
ZWdvfX1KP0RxcGpVJEVMYFJBRCpCc3E2LS16UDl7X0gzekR0YChDbkdUVkNWPE9Ua1RDdWFTNwp6
bz9tJVltdHZ+OCt+RUNgKlJsJFF0NVhLR0dQYE5wKklhVDY/YjRPdG94TUtpR1FLVCZLV0ViZXBG
TWNFeVMwNlgKejllYitrPTtDPHc0KGEwbGdEI0hHcXRtN1JkZkp8aUdYNngwKkdhQXZSfWtrKVNV
Yj1kbHMjdWw5SXpBPDF3SCo2CnpWUD5sZmc7ciQ1dTBObX1hNjdgPXZYbVpjX3wmdypAeWF1a2NA
MzQmT3A3dz09fj89YFJgS3VsRlFjZGJfX24wZQp6V2lxcXE5Smd3YFp9WXZFSWg2YFo5ankmNyFu
Yj9Jb29TMkEqbENxQEVqcCV9SkZIK2Z5ZmEoeFJrQV5QVTNrZXkKenAzZCR3am9GJGZXYlZDaW9f
SiQ+XzwrMEsjQEBXMyNMY0d0eCh7e0IrUVc7fGomRjIxbStkemZWRXU5QT1qeDFDCnomZVFndWVC
UHtJUXtDUXZPK0VGPFZ9cl9SKzRwcExyI28jNiNybk8xPiM0YkNRWiFxRnpuQFdrO15vRHk9Qzlw
bAp6PGBII2dZb2EqY0Y7bCo9I1ZLdHZ1fnk0UktldGpjV0cyMTRlcFlUXl40TVVXMkNfRCZ1T1gp
QGN0X3xjRSNKMyoKejlleTI9eVpiblB0ZWhRcUlicVcqI25xJXh3dW9ocmhnUVJpa3c7XmNVVGRD
aCZCfCZyVmpiMWElY3ZUOTtMVTF1Cno9KGI/N0lAQ0lSWkRudWZJQ35GOGNJTEZNV0dtKHluTlFh
SnhYbXxYcmtFI0hHRlFUeXAxI0tGTj88Q3FDdVBycwp6KUt0JGdZTkMjKEtAYllyU2tqJU07Q0lq
VDB1JnUoODEhYEJGREd+RWlWVVdvUSVyRW1fMmVsV1ZAZ1dEcDVSWisKemo/KypLaGhUKDRCXzhe
Y1lEUkBlJDMjRTllS09DPShhPGR2bEk0TzNtRStndVk1OD4manpjXk42M216I2hNUWRlCnpwaDZs
JE5ldk52NGtoXl4kYmZ2QW9ScnwjVn00UmBeWVFJQG92VEZTPUorOFZOQDIwZkswQWVEK0lAMUk8
IXdlSgp6SlQ/cjZiLU9PT3syNFpORn53VF5qcENPZkxfaWZkUjJpKU9QZ3RNNnNZNEp8cCMhSkIj
RUxebjl2SkBBUD9pTWkKejRafStoOEN3Wmx0PGdhLV82amkpWSQqPDwoUXtYU2A3ZTwoU3NHZSNA
KDJtbTZ+cFQ7SGp7JGVGR2w1Yi0hflYpCnpWJWpMPz9KITk0fEpHdGtMLTFaQDBXMzx1PmlyWj5e
OFlFM3dETTl4JFM5M34xISkwa0EqS1lGRWVvcHtFRnoqRgp6ZzQoaUJHeWhkM3dgVEN8VjVKfEtN
SlVHYlR8NlI3bXFaZmxEM2tfaHo0VFdgTG12QDUrdVdpP3FOZnhibEU/T3UKejQ4fTByOyNOZ3M7
dTt6YVVEUk1sVnd5RTVXXjl7SFZ3JlgkO3NmUH4yemNaKmc8fGJEdzNOaGc3OG92JFpYZytRCnph
Y0Q/O214X1IkeXJAKFQ/NHZGKVQkSEF2eGRwWil4KU8pc14+YCE2NVA9fDlaYnFiJGgqQkJGZ2c3
fVEwfX0mRAp6MFpFflBuTD9xMDwlNUJtZj99WjEhVSRqPTd5KjxfMU4jJno0USQ/VTRENHVldSsy
d140aHItPnBka2NaR1NTKXQKej0+U1JzKGdCbk5xeXIhdzViN1kxNHVFdCgkaCR4fl9AN0ckcko4
eFU1SmNALXhDYClFP2d1Z2drUChPQDg2WUQ3CnY4RyQleDFUcTRVNWYpQmdmczZvVGcjVnQ1NVZ0
NitYVVNGZU1kfW9CO31eMUZGZkZmfWRuTngzPTh0Qm0KCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZ3JhZGllbnRzL3plcm8tcmFuZ2UtcmVwZWF0
aW5nLWdyYWRpZW50LWhhbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ncmFkaWVu
dHMvemVyby1yYW5nZS1yZXBlYXRpbmctZ3JhZGllbnQtaGFuZy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTkwY2M0YzU2N2ZlNDZlOWJlYjM1YzM0OGNkY2FiNDNhNzE2NzA4YgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZ3JhZGllbnRzL3plcm8tcmFuZ2UtcmVwZWF0aW5n
LWdyYWRpZW50LWhhbmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHgxMTYKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNp
emUgODAweDExNgorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDEwMAor
ICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDAsMCkgc2l6ZSAxMDB4MTAwCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2dyYWRpZW50cy96ZXJvLXJhbmdlLXJlcGVhdGluZy1ncmFkaWVu
dC1oYW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2dyYWRpZW50cy96ZXJvLXJhbmdlLXJlcGVh
dGluZy1ncmFkaWVudC1oYW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFkM2U2OTgxMDNlMmFhNmRkNTRj
YTBlNjc1ZTYyNGUzZjlkMTQxYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Z3JhZGllbnRzL3plcm8tcmFuZ2UtcmVwZWF0aW5nLWdyYWRpZW50LWhhbmcuaHRtbApAQCAtMCww
ICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgIDxzdHlsZSB0eXBl
PSJ0ZXh0L2NzcyI+CisgICAgLmJveCB7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgd2lk
dGg6IDEwMHB4OworICAgICAgYmFja2dyb3VuZDogbm8tcmVwZWF0IC13ZWJraXQtcmVwZWF0aW5n
LWxpbmVhci1ncmFkaWVudChyZWQsIGJsdWUsIGdyZWVuIDApOworICAgIH0KKyAgPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5PgorICA8IS0tIFRoaXMgdGVzdCBzaG91bGQgbm90IGhhbmcuIFlvdSBz
aG91bGQgc2VlIGEgZ3JlZW4gc3F1YXJlLiAtLT4KKyAgPGRpdiBjbGFzcz0iYm94Ij48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDEyMjg3ZDc1YjlkNjRiMjJlZThjYTNj
NGNjMDY0ODExNWJlZDIzLi4zMTYyNWE4ZDg2ZjdiNzI3NTQ3NmMyNzdjN2NkYTdjYmFlNDI5OGNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDEtMTkgIFNpbW9uIEZyYXNlciAg
PHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0NTUyBHcmFkaWVudHNdIENyYXNoIGR1ZSB0byBvdXQtb2YtbWVt
b3J5IHdpdGggcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCBhbmQgbGF0dGVyIHN0b3AgcG9zaXRp
b25lZCBiZWZvcmUgZm9ybWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01MjczMgorICAgICAgICAKKyAgICAgICAgV2hlbiByZXBlYXRpbmcgZ3JhZGll
bnQgc3RvcHMsIG1ha2Ugc3VyZSB0aGF0IHRoZSBmaXJzdCBhbmQgbGFzdCBzdG9wcyBhcmUgbm90
IGF0IHRoZSBzYW1lCisgICAgICAgIHBsYWNlLCBvdGhlcndpc2Ugd2UnbGwgYWRkIHN0b3BzIGlu
ZGVmaW5pdGVseSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisKKyAgICAgICAgVGVzdDogZmFzdC9n
cmFkaWVudHMvemVyby1yYW5nZS1yZXBlYXRpbmctZ3JhZGllbnQtaGFuZy5odG1sCisKKyAgICAg
ICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NHcmFk
aWVudFZhbHVlOjphZGRTdG9wcyk6CisKIDIwMTEtMDEtMTggIE1PUklUQSBIYWppbWUgIDxtb3Jy
aXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCmluZGV4IGZkZTRhNGUzNGZhODNiY2Q1
Nzc5Y2Y1ODg5NDU0ODg0ZDQ4ODZlMDEuLjRkNTc1YjNjMWNkMDA5OTA0ZmE2NmVlODc0YTlhZmM2
ZTFiMWRkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAgLTIz
MCw1OCArMjMwLDY4IEBAIHZvaWQgQ1NTR3JhZGllbnRWYWx1ZTo6YWRkU3RvcHMoR3JhZGllbnQq
IGdyYWRpZW50LCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kCiAgICAgLy8gV2UgY2FuJ3Qg
anVzdCBwdXNoIHRoaXMgbG9naWMgZG93biBpbnRvIHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBHcmFk
aWVudCBjb2RlLAogICAgIC8vIGJlY2F1c2Ugd2UgaGF2ZSB0byBrbm93IHRoZSBleHRlbnQgb2Yg
dGhlIGdyYWRpZW50LCBhbmQgcG9zc2libGUgbW92ZSB0aGUgZW5kIHBvaW50cy4KICAgICBpZiAo
bV9yZXBlYXRpbmcgJiYgbnVtU3RvcHMgPiAxKSB7Ci0gICAgICAgIGZsb2F0IG1heEV4dGVudCA9
IDE7Ci0KLSAgICAgICAgLy8gUmFkaWFsIGdyYWRpZW50cyBtYXkgbmVlZCB0byBleHRlbmQgZnVy
dGhlciB0aGFuIHRoZSBlbmRwb2ludHMsIGJlY2F1c2UgdGhleSBoYXZlCi0gICAgICAgIC8vIHRv
IHJlcGVhdCBvdXQgdG8gdGhlIGNvcm5lcnMgb2YgdGhlIGJveC4KLSAgICAgICAgaWYgKGlzUmFk
aWFsR3JhZGllbnQoKSkgewotICAgICAgICAgICAgaWYgKCFjb21wdXRlZEdyYWRpZW50TGVuZ3Ro
KSB7Ci0gICAgICAgICAgICAgICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0
IC0gZ3JhZGllbnRFbmQpOwotICAgICAgICAgICAgICAgIGdyYWRpZW50TGVuZ3RoID0gZ3JhZGll
bnRTaXplLmRpYWdvbmFsTGVuZ3RoKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChtYXhMZW5ndGhGb3JSZXBlYXQgPiBncmFkaWVudExlbmd0aCkKLSAgICAg
ICAgICAgICAgICBtYXhFeHRlbnQgPSBtYXhMZW5ndGhGb3JSZXBlYXQgLyBncmFkaWVudExlbmd0
aDsKLSAgICAgICAgfQorICAgICAgICAvLyBJZiB0aGUgZGlmZmVyZW5jZSBpbiB0aGUgcG9zaXRp
b25zIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBjb2xvci1zdG9wcyBpcyAwLAorICAgICAgICAvLyB0
aGUgZ3JhZGllbnQgZGVmaW5lcyBhIHNvbGlkLWNvbG9yIGltYWdlIHdpdGggdGhlIGNvbG9yIG9m
IHRoZSBsYXN0IGNvbG9yLXN0b3AgaW4gdGhlIHJ1bGUuCisgICAgICAgIGZsb2F0IGdyYWRpZW50
UmFuZ2UgPSBzdG9wc1tudW1TdG9wcyAtIDFdLm9mZnNldCAtIHN0b3BzWzBdLm9mZnNldDsKKyAg
ICAgICAgaWYgKCFncmFkaWVudFJhbmdlKSB7CisgICAgICAgICAgICBzdG9wc1swXS5vZmZzZXQg
PSAwOworICAgICAgICAgICAgc3RvcHNbMF0uY29sb3IgPSBzdG9wc1tudW1TdG9wcyAtIDFdLmNv
bG9yOworICAgICAgICAgICAgc3RvcHMuc2hyaW5rKDEpOworICAgICAgICAgICAgbnVtU3RvcHMg
PSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmxvYXQgbWF4RXh0ZW50ID0gMTsK
IAotICAgICAgICBzaXplX3Qgb3JpZ2luYWxOdW1TdG9wcyA9IG51bVN0b3BzOwotICAgICAgICBz
aXplX3Qgb3JpZ2luYWxGaXJzdFN0b3BJbmRleCA9IDA7CisgICAgICAgICAgICAvLyBSYWRpYWwg
Z3JhZGllbnRzIG1heSBuZWVkIHRvIGV4dGVuZCBmdXJ0aGVyIHRoYW4gdGhlIGVuZHBvaW50cywg
YmVjYXVzZSB0aGV5IGhhdmUKKyAgICAgICAgICAgIC8vIHRvIHJlcGVhdCBvdXQgdG8gdGhlIGNv
cm5lcnMgb2YgdGhlIGJveC4KKyAgICAgICAgICAgIGlmIChpc1JhZGlhbEdyYWRpZW50KCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWNvbXB1dGVkR3JhZGllbnRMZW5ndGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgRmxvYXRTaXplIGdyYWRpZW50U2l6ZShncmFkaWVudFN0YXJ0IC0gZ3JhZGll
bnRFbmQpOworICAgICAgICAgICAgICAgICAgICBncmFkaWVudExlbmd0aCA9IGdyYWRpZW50U2l6
ZS5kaWFnb25hbExlbmd0aCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAobWF4TGVuZ3RoRm9yUmVwZWF0ID4gZ3JhZGllbnRMZW5ndGgp
CisgICAgICAgICAgICAgICAgICAgIG1heEV4dGVudCA9IG1heExlbmd0aEZvclJlcGVhdCAvIGdy
YWRpZW50TGVuZ3RoOworICAgICAgICAgICAgfQogCi0gICAgICAgIC8vIFdvcmsgYmFja3dhcmRz
IGZyb20gdGhlIGZpcnN0LCBhZGRpbmcgc3RvcHMgdW50aWwgd2UgZ2V0IG9uZSBiZWZvcmUgMC4K
LSAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSBzdG9wc1swXS5vZmZzZXQ7Ci0gICAgICAgIGlm
IChmaXJzdE9mZnNldCA+IDApIHsKLSAgICAgICAgICAgIGZsb2F0IGN1cnJPZmZzZXQgPSBmaXJz
dE9mZnNldDsKLSAgICAgICAgICAgIHNpemVfdCBzcmNTdG9wT3JkaW5hbCA9IG9yaWdpbmFsTnVt
U3RvcHMgLSAxOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAg
ICAgICAgICAgICAgIEdyYWRpZW50U3RvcCBuZXdTdG9wID0gc3RvcHNbb3JpZ2luYWxGaXJzdFN0
b3BJbmRleCArIHNyY1N0b3BPcmRpbmFsXTsKLSAgICAgICAgICAgICAgICBuZXdTdG9wLm9mZnNl
dCA9IGN1cnJPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgc3RvcHMucHJlcGVuZChuZXdTdG9wKTsK
LSAgICAgICAgICAgICAgICArK29yaWdpbmFsRmlyc3RTdG9wSW5kZXg7Ci0gICAgICAgICAgICAg
ICAgaWYgKGN1cnJPZmZzZXQgPCAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHNpemVfdCBvcmlnaW5hbE51bVN0b3BzID0gbnVtU3RvcHM7CisgICAgICAgICAgICBz
aXplX3Qgb3JpZ2luYWxGaXJzdFN0b3BJbmRleCA9IDA7CiAKLSAgICAgICAgICAgICAgICBpZiAo
c3JjU3RvcE9yZGluYWwpCi0gICAgICAgICAgICAgICAgICAgIGN1cnJPZmZzZXQgLT0gc3RvcHNb
b3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRpbmFsXS5vZmZzZXQgLSBzdG9wc1tv
cmlnaW5hbEZpcnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGluYWwgLSAxXS5vZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgc3JjU3RvcE9yZGluYWwgPSAoc3JjU3RvcE9yZGluYWwgKyBvcmlnaW5hbE51
bVN0b3BzIC0gMSkgJSBvcmlnaW5hbE51bVN0b3BzOworICAgICAgICAgICAgLy8gV29yayBiYWNr
d2FyZHMgZnJvbSB0aGUgZmlyc3QsIGFkZGluZyBzdG9wcyB1bnRpbCB3ZSBnZXQgb25lIGJlZm9y
ZSAwLgorICAgICAgICAgICAgZmxvYXQgZmlyc3RPZmZzZXQgPSBzdG9wc1swXS5vZmZzZXQ7Cisg
ICAgICAgICAgICBpZiAoZmlyc3RPZmZzZXQgPiAwKSB7CisgICAgICAgICAgICAgICAgZmxvYXQg
Y3Vyck9mZnNldCA9IGZpcnN0T2Zmc2V0OworICAgICAgICAgICAgICAgIHNpemVfdCBzcmNTdG9w
T3JkaW5hbCA9IG9yaWdpbmFsTnVtU3RvcHMgLSAxOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIEdyYWRpZW50U3Rv
cCBuZXdTdG9wID0gc3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRpbmFs
XTsKKyAgICAgICAgICAgICAgICAgICAgbmV3U3RvcC5vZmZzZXQgPSBjdXJyT2Zmc2V0OworICAg
ICAgICAgICAgICAgICAgICBzdG9wcy5wcmVwZW5kKG5ld1N0b3ApOworICAgICAgICAgICAgICAg
ICAgICArK29yaWdpbmFsRmlyc3RTdG9wSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyT2Zmc2V0IDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChzcmNTdG9wT3JkaW5hbCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGN1cnJPZmZzZXQgLT0gc3RvcHNbb3JpZ2luYWxGaXJzdFN0b3BJbmRleCArIHNyY1N0b3BPcmRp
bmFsXS5vZmZzZXQgLSBzdG9wc1tvcmlnaW5hbEZpcnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGlu
YWwgLSAxXS5vZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIHNyY1N0b3BPcmRpbmFsID0gKHNy
Y1N0b3BPcmRpbmFsICsgb3JpZ2luYWxOdW1TdG9wcyAtIDEpICUgb3JpZ2luYWxOdW1TdG9wczsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIFdvcmsgZm9yd2FyZHMgZnJvbSB0aGUgZW5kLCBhZGRpbmcgc3RvcHMgdW50aWwg
d2UgZ2V0IG9uZSBhZnRlciAxLgotICAgICAgICBmbG9hdCBsYXN0T2Zmc2V0ID0gc3RvcHNbc3Rv
cHMuc2l6ZSgpIC0gMV0ub2Zmc2V0OwotICAgICAgICBpZiAobGFzdE9mZnNldCA8IG1heEV4dGVu
dCkgewotICAgICAgICAgICAgZmxvYXQgY3Vyck9mZnNldCA9IGxhc3RPZmZzZXQ7Ci0gICAgICAg
ICAgICBzaXplX3Qgc3JjU3RvcE9yZGluYWwgPSAwOwotCi0gICAgICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgICAgIEdyYWRpZW50U3RvcCBuZXdTdG9wID0gc3RvcHNbc3JjU3Rv
cE9yZGluYWxdOwotICAgICAgICAgICAgICAgIG5ld1N0b3Aub2Zmc2V0ID0gY3Vyck9mZnNldDsK
LSAgICAgICAgICAgICAgICBzdG9wcy5hcHBlbmQobmV3U3RvcCk7Ci0gICAgICAgICAgICAgICAg
aWYgKGN1cnJPZmZzZXQgPiBtYXhFeHRlbnQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGlmIChzcmNTdG9wT3JkaW5hbCA8IG9yaWdpbmFsTnVtU3RvcHMgLSAx
KQotICAgICAgICAgICAgICAgICAgICBjdXJyT2Zmc2V0ICs9IHN0b3BzW29yaWdpbmFsRmlyc3RT
dG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbCArIDFdLm9mZnNldCAtIHN0b3BzW29yaWdpbmFsRmly
c3RTdG9wSW5kZXggKyBzcmNTdG9wT3JkaW5hbF0ub2Zmc2V0OwotICAgICAgICAgICAgICAgIHNy
Y1N0b3BPcmRpbmFsID0gKHNyY1N0b3BPcmRpbmFsICsgMSkgJSBvcmlnaW5hbE51bVN0b3BzOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXb3JrIGZvcndhcmRzIGZyb20gdGhlIGVuZCwg
YWRkaW5nIHN0b3BzIHVudGlsIHdlIGdldCBvbmUgYWZ0ZXIgMS4KKyAgICAgICAgICAgIGZsb2F0
IGxhc3RPZmZzZXQgPSBzdG9wc1tzdG9wcy5zaXplKCkgLSAxXS5vZmZzZXQ7CisgICAgICAgICAg
ICBpZiAobGFzdE9mZnNldCA8IG1heEV4dGVudCkgeworICAgICAgICAgICAgICAgIGZsb2F0IGN1
cnJPZmZzZXQgPSBsYXN0T2Zmc2V0OworICAgICAgICAgICAgICAgIHNpemVfdCBzcmNTdG9wT3Jk
aW5hbCA9IDA7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAg
ICAgICAgICBHcmFkaWVudFN0b3AgbmV3U3RvcCA9IHN0b3BzW3NyY1N0b3BPcmRpbmFsXTsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3U3RvcC5vZmZzZXQgPSBjdXJyT2Zmc2V0OworICAgICAgICAg
ICAgICAgICAgICBzdG9wcy5hcHBlbmQobmV3U3RvcCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjdXJyT2Zmc2V0ID4gbWF4RXh0ZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmNTdG9wT3JkaW5hbCA8IG9yaWdpbmFsTnVtU3Rv
cHMgLSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgY3Vyck9mZnNldCArPSBzdG9wc1tvcmln
aW5hbEZpcnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGluYWwgKyAxXS5vZmZzZXQgLSBzdG9wc1tv
cmlnaW5hbEZpcnN0U3RvcEluZGV4ICsgc3JjU3RvcE9yZGluYWxdLm9mZnNldDsKKyAgICAgICAg
ICAgICAgICAgICAgc3JjU3RvcE9yZGluYWwgPSAoc3JjU3RvcE9yZGluYWwgKyAxKSAlIG9yaWdp
bmFsTnVtU3RvcHM7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQo=
</data>
<flag name="review"
          id="70880"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>