<?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>37079</bug_id>
          
          <creation_ts>2010-04-05 02:40:26 -0700</creation_ts>
          <short_desc>Links around blocks (e.g. divs) results in too many VoiceOver call outs</short_desc>
          <delta_ts>2010-04-22 22:47:29 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adele</cc>
    
    <cc>bdakin</cc>
    
    <cc>hyatt</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>208422</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-05 02:40:26 -0700</bug_when>
    <thetext>Links around blocks (e.g. divs) results in too many VoiceOver call outs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208423</commentid>
    <comment_count>1</comment_count>
      <attachid>52520</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-05 02:52:56 -0700</bug_when>
    <thetext>Created attachment 52520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208424</commentid>
    <comment_count>2</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-05 02:53:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/7234118&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208744</commentid>
    <comment_count>3</comment_count>
      <attachid>52520</attachid>
    <who name="">mitz</who>
    <bug_when>2010-04-05 15:36:27 -0700</bug_when>
    <thetext>Comment on attachment 52520
Patch

Beth and I looked at the patch, and we suspect the logic for Case 3 below may be wrong:

&gt; @@ -158,8 +272,31 @@ AccessibilityObject* AccessibilityRender
&gt;  {
&gt;      if (!m_renderer)
&gt;          return 0;
&gt; +
&gt; +    RenderObject* nextSibling = 0;
&gt; +
&gt; +    // Case 1: node is a block and has an inline continuation. Next sibling is the inline continuation&apos;s
&gt; +    // first child.
&gt; +    RenderInline* inlineContinuation;
&gt; +    if (m_renderer-&gt;isRenderBlock() &amp;&amp; (inlineContinuation = toRenderBlock(m_renderer)-&gt;inlineContinuation()))
&gt; +        nextSibling = firstChildConsideringContinuation(inlineContinuation);
&gt; +
&gt; +    // Case 2: node has an actual next sibling
&gt; +    else if (RenderObject* ns = m_renderer-&gt;nextSibling())
&gt; +        nextSibling = ns;
&gt; +
&gt; +    // Case 3: node has no next sibling, and its parent is an inline with a continuation.
&gt; +    else if (isInlineWithContinuation(m_renderer-&gt;parent())) {
&gt; +        RenderObject* continuation = toRenderInline(m_renderer-&gt;parent())-&gt;continuation();
&gt; +        
&gt; +        // Case 3a: continuation is a block - in this case the block itself is the next sibling.
&gt; +        if (continuation-&gt;isRenderBlock())
&gt; +            nextSibling = continuation;
&gt; +        // Case 3b: continuation is an inline - in this case the inline&apos;s first child is the next sibling
&gt; +        else
&gt; +            nextSibling = firstChildConsideringContinuation(continuation);
&gt; +    }

Considering a case like &lt;span id=&quot;span1&quot;&gt;a&lt;div&gt;b&lt;/div&gt;&lt;/span&gt;c&lt;span id=&quot;span2&quot;&gt;d&lt;/span&gt;, if asked for the next sibling of the first RenderInline for span1, the above code will hit case 3 (because that inline doesn’t have a next sibling in its parent anonymous block), but then it will fail the condition for that case, because its parent is not an inline. Instead, shouldn’t we return the RenderInline for span2? Perhaps the way to do this is to follow the inlineContinuation chain and return the next sibling of the last renderer on the chain?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208896</commentid>
    <comment_count>4</comment_count>
      <attachid>52520</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-05 22:22:10 -0700</bug_when>
    <thetext>Comment on attachment 52520
Patch

Marking this r- because upon discussion, Mitz and I concluded that there was indeed a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215804</commentid>
    <comment_count>5</comment_count>
      <attachid>54047</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-22 03:22:12 -0700</bug_when>
    <thetext>Created attachment 54047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215805</commentid>
    <comment_count>6</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-22 03:23:25 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=54047) [details]
&gt; Patch

I believe the new patch addresses Mitz&apos;s comments above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215981</commentid>
    <comment_count>7</comment_count>
      <attachid>54047</attachid>
    <who name="">mitz</who>
    <bug_when>2010-04-22 11:28:52 -0700</bug_when>
    <thetext>Comment on attachment 54047
Patch

&gt; +static inline RenderObject* lastChildConsideringContinuation(RenderObject* renderer)
&gt; +{
&gt; +    RenderObject* lastChild = renderer-&gt;lastChild();
&gt; +    RenderObject* prev = renderer;

prev is unused (you just assign to it).

&gt; +    RenderObject* cur = renderer;
&gt; +
&gt; +    while (cur) {
&gt; +        prev = cur;
&gt; +
&gt; +        if (RenderObject* lc = cur-&gt;lastChild())
&gt; +            lastChild = lc;
&gt; +
&gt; +        if (cur-&gt;isRenderInline()) {
&gt; +            cur = toRenderInline(cur)-&gt;continuation();
&gt; +            if (cur &amp;&amp; cur-&gt;isRenderBlock()) 
&gt; +                cur = toRenderBlock(cur)-&gt;inlineContinuation();
&gt; +        } else
&gt; +            cur = toRenderBlock(cur)-&gt;inlineContinuation();

I can’t think of a case where you couldn’t just do cur = cur-&gt;inlineContinuation() (assuming cur is a block or an inline). In other words, the first branch seems needlessly complicated. What am I missing?

&gt;  AccessibilityObject* AccessibilityRenderObject::firstChild() const
&gt;  {
&gt;      if (!m_renderer)
&gt;          return 0;
&gt;      
&gt;      RenderObject* firstChild = m_renderer-&gt;firstChild();
&gt; +
&gt; +    if (!firstChild &amp;&amp; isInlineWithContinuation(m_renderer))
&gt; +        firstChild = firstChildConsideringContinuation(m_renderer);

You can just use firstChildConsideringContinuation(), because it includes the above (getting firstChild() and checking if it’s 0 etc.).

&gt; +static inline RenderObject* endOfContinuations(RenderObject* renderer)
&gt; +{
&gt; +    RenderObject* prev = renderer;
&gt; +    RenderObject* cur = renderer;
&gt; +
&gt; +    while (cur) {
&gt; +        prev = cur;
&gt; +        if (cur-&gt;isRenderInline()) {
&gt; +            cur = toRenderInline(cur)-&gt;continuation();
&gt; +            if (cur &amp;&amp; cur-&gt;isRenderBlock()) 
&gt; +                cur = toRenderBlock(cur)-&gt;inlineContinuation();
&gt; +        } else
&gt; +            cur = toRenderBlock(cur)-&gt;inlineContinuation();

Like in lastChildConsideringContinuations, I don’t understand why the inline case can’t just use inlineContinuation().

r=beth and me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216284</commentid>
    <comment_count>8</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-04-22 22:47:29 -0700</bug_when>
    <thetext>Committed r58150: &lt;http://trac.webkit.org/changeset/58150&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52520</attachid>
            <date>2010-04-05 02:52:56 -0700</date>
            <delta_ts>2010-04-22 03:22:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37079-20100405025254.patch</filename>
            <type>text/plain</type>
            <size>18563</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzA2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDQtMDUgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBM
aW5rcyBhcm91bmQgYmxvY2tzIChlLmcuIGRpdnMpIHJlc3VsdHMgaW4gdG9vIG1hbnkgVm9pY2VP
dmVyIGNhbGwgb3V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzcwNzkKKworICAgICAgICBUaGUgYmFzaWMgY2hhbmdlIGlzIHRvIG1vZGlmeSB0aGUg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCB0cmVlCisgICAgICAgIHRyYXZlcnNhbCBtZXRob2Rz
IHRvIGFjY291bnQgZm9yIGlubGluZSBjb250aW51YXRpb25zIGluIHRoZQorICAgICAgICByZW5k
ZXIgdHJlZSBhbmQgbWFrZSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGxvb2sgYXMgaWYKKyAgICAg
ICAgY29udGludWF0aW9ucyBkaWRuJ3QgZXhpc3QgLSB0aGUgc2FtZSBhcyBpZiBDU1MgYmxvY2tz
IGNvdWxkIGp1c3QKKyAgICAgICAgc2l0IGluIENTUyBpbmxpbmVzLiBUaGlzIGlzIHNsaWdodGx5
IHRyaWNreSBjb2RlIGJ1dCBjcmVhdGVzIGEKKyAgICAgICAgbXVjaCBzYW5lciBhY2Nlc3NpYmls
aXR5IHRyZWUuCisgICAgICAgIAorICAgICAgICBUZXN0czogYWNjZXNzaWJpbGl0eS9pbWFnZS1s
aW5rLWlubGluZS1jb250Lmh0bWwKKyAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHkvaW1hZ2Ut
bGluay5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNJbmxpbmVXaXRoQ29udGludWF0aW9uKTog
SGVscGVyIGZ1bmN0aW9uIGZvciB0cmF2ZXJzYWwgZnVuY3Rpb25zIHRvIHVzZSBpbiBhY2NvdW50
aW5nIGZvciBjb250aW51YXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RDaGlsZEluQ29u
dGludWF0aW9uKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0Q2hpbGRDb25zaWRlcmlu
Z0NvbnRpbnVhdGlvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpsYXN0Q2hpbGRDb25zaWRl
cmluZ0NvbnRpbnVhdGlvbik6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpzdGFydE9mQ29udGlu
dWF0aW9ucyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpjaGlsZEJlZm9yZUNvbnNpZGVyaW5n
Q29udGludWF0aW9ucyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0OjpmaXJzdENoaWxkKTogQWNjb3VudCBmb3IgaW5saW5lcy4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omxhc3RDaGlsZCk6IGRpdHRvCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcp
OiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bmV4
dFNpYmxpbmcpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6cGFyZW50T2JqZWN0SWZFeGlzdHMpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cGFyZW50T2JqZWN0KTogZGl0dG8KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6IE1ha2UgUmVuZGVySW5saW5lOjppbmxpbmVDb250aW51
YXRpb24gcHVibGljLgorCiAyMDEwLTA0LTA0ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4gUm9sbGluZyBvdXQgY2hyb21pdW0g
Y2hhbmdlcyByNTcwMjggYW5kIHI1NzAzMgpJbmRleDogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNTcwNjUpCisr
KyBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExOCwxMiArMTE4LDY2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6ZGV0YWNoKCkKICAgICBtX3JlbmRlcmVyID0gMDsgICAgCiB9CiAKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc0lubGluZVdpdGhDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKK3sKKyAgICBpZiAoIXJlbmRlcmVyLT5pc1JlbmRlcklubGluZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIpLT5jb250aW51
YXRpb24oKTsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRJbkNv
bnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIFJlbmRlck9iamVjdCog
ciA9IHRvUmVuZGVySW5saW5lKHJlbmRlcmVyKS0+Y29udGludWF0aW9uKCk7CisKKyAgICB3aGls
ZSAocikgeworICAgICAgICBpZiAoci0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgcmV0
dXJuIHI7CisgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNoaWxkID0gci0+Zmlyc3RDaGlsZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGNoaWxkOworICAgICAgICByID0gdG9SZW5kZXJJbmxpbmUo
ciktPmNvbnRpbnVhdGlvbigpOyAKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IGlubGluZSBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIFJlbmRlck9iamVjdCogZmlyc3RDaGlsZCA9
IHJlbmRlcmVyLT5maXJzdENoaWxkKCk7CisKKyAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJbmxp
bmVXaXRoQ29udGludWF0aW9uKHJlbmRlcmVyKSkKKyAgICAgICAgZmlyc3RDaGlsZCA9IGZpcnN0
Q2hpbGRJbkNvbnRpbnVhdGlvbihyZW5kZXJlcik7CisKKyAgICByZXR1cm4gZmlyc3RDaGlsZDsK
K30KKworCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogbGFzdENoaWxkQ29uc2lkZXJpbmdD
b250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBSZW5kZXJPYmplY3Qq
IGxhc3RDaGlsZCA9IHJlbmRlcmVyLT5sYXN0Q2hpbGQoKTsKKworICAgIGlmIChpc0lubGluZVdp
dGhDb250aW51YXRpb24ocmVuZGVyZXIpKSB7CisgICAgICAgIFJlbmRlcklubGluZSogciA9IHRv
UmVuZGVySW5saW5lKHJlbmRlcmVyKTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKFJl
bmRlck9iamVjdCogbGMgPSByLT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgICAgICBsYXN0Q2hp
bGQgPSBsYzsKKyAgICAgICAgICAgIHIgPSByLT5pbmxpbmVDb250aW51YXRpb24oKTsKKyAgICAg
ICAgfSB3aGlsZSAoaXNJbmxpbmVXaXRoQ29udGludWF0aW9uKHIpKTsKKyAgICB9CisgICAgICAg
IAorICAgIHJldHVybiBsYXN0Q2hpbGQ7Cit9CisKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0Q2hpbGQoKSBjb25zdAogewogICAgIGlmICghbV9y
ZW5kZXJlcikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgUmVuZGVyT2JqZWN0KiBmaXJz
dENoaWxkID0gbV9yZW5kZXJlci0+Zmlyc3RDaGlsZCgpOworCisgICAgaWYgKCFmaXJzdENoaWxk
ICYmIGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihtX3JlbmRlcmVyKSkKKyAgICAgICAgZmlyc3RD
aGlsZCA9IGZpcnN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihtX3JlbmRlcmVyKTsKKwog
ICAgIGlmICghZmlyc3RDaGlsZCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC0xMzQsMjAg
KzE4OCw4MCBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiB7CiAg
ICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZW5kZXJP
YmplY3QqIGxhc3RDaGlsZCA9IG1fcmVuZGVyZXItPmxhc3RDaGlsZCgpOworCisgICAgUmVuZGVy
T2JqZWN0KiBsYXN0Q2hpbGQgPSBsYXN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihtX3Jl
bmRlcmVyKTsKKwogICAgIGlmICghbGFzdENoaWxkKQogICAgICAgICByZXR1cm4gMDsKICAgICAK
ICAgICByZXR1cm4gbV9yZW5kZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShsYXN0Q2hpbGQpOwogfQogCitzdGF0aWMgaW5saW5lIFJlbmRlcklubGluZSogc3Rh
cnRPZkNvbnRpbnVhdGlvbnMoUmVuZGVyT2JqZWN0KiByKQoreworICAgIGlmIChyLT5pc0lubGlu
ZUNvbnRpbnVhdGlvbigpKQorICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUoci0+bm9kZSgp
LT5yZW5kZXJlcigpKTsKKworICAgIC8vIEJsb2NrcyB3aXRoIGEgcHJldmlvdXMgY29udGludWF0
aW9uIGFsd2F5cyBoYXZlIGEgbmV4dCBjb250aW51YXRpb24KKyAgICBpZiAoci0+aXNSZW5kZXJC
bG9jaygpICYmIHRvUmVuZGVyQmxvY2sociktPmlubGluZUNvbnRpbnVhdGlvbigpKQorICAgICAg
ICByZXR1cm4gdG9SZW5kZXJJbmxpbmUodG9SZW5kZXJCbG9jayhyKS0+aW5saW5lQ29udGludWF0
aW9uKCktPm5vZGUoKS0+cmVuZGVyZXIoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IGlubGluZSBSZW5kZXJPYmplY3QqIGNoaWxkQmVmb3JlQ29uc2lkZXJpbmdDb250aW51YXRpb25z
KFJlbmRlcklubGluZSogciwgUmVuZGVyT2JqZWN0KiBjaGlsZCkKK3sKKyAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogY3VyQ29udGFpbmVyID0gcjsKKyAgICBSZW5kZXJPYmplY3QqIGN1ciA9IDA7
CisgICAgUmVuZGVyT2JqZWN0KiBwcmV2ID0gMDsKKworICAgIHdoaWxlIChjdXJDb250YWluZXIp
IHsKKyAgICAgICAgaWYgKGN1ckNvbnRhaW5lci0+aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAg
ICAgICAgY3VyID0gY3VyQ29udGFpbmVyLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICB3aGls
ZSAoY3VyKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1ciA9PSBjaGlsZCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHByZXY7CisgICAgICAgICAgICAgICAgcHJldiA9IGN1cjsKKyAgICAg
ICAgICAgICAgICBjdXIgPSBjdXItPm5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGN1ckNvbnRhaW5lciA9IHRvUmVuZGVySW5saW5lKGN1ckNvbnRhaW5lciktPmNv
bnRpbnVhdGlvbigpOworICAgICAgICB9IGVsc2UgaWYgKGN1ckNvbnRhaW5lci0+aXNSZW5kZXJC
bG9jaygpKSB7CisgICAgICAgICAgICBpZiAoY3VyQ29udGFpbmVyID09IGNoaWxkKQorICAgICAg
ICAgICAgICAgIHJldHVybiBwcmV2OworCisgICAgICAgICAgICBwcmV2ID0gY3VyQ29udGFpbmVy
OworICAgICAgICAgICAgY3VyQ29udGFpbmVyID0gdG9SZW5kZXJCbG9jayhjdXJDb250YWluZXIp
LT5pbmxpbmVDb250aW51YXRpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgcmV0dXJuIDA7Cit9CisKIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnByZXZpb3VzU2libGluZygpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZW5kZXJP
YmplY3QqIHByZXZpb3VzU2libGluZyA9IG1fcmVuZGVyZXItPnByZXZpb3VzU2libGluZygpOwor
CisgICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91c1NpYmxpbmcgPSAwOworCisgICAgLy8gQ2FzZSAx
OiBUaGUgbm9kZSBpcyBhIGJsb2NrIGFuZCBpcyBhbiBpbmxpbmUncyBjb250aW51YXRpb24uIElu
IHRoYXQgY2FzZSwgdGhlIGlubGluZSdzCisgICAgLy8gbGFzdCBjaGlsZCBpcyBvdXIgcHJldmlv
dXMgc2libGluZyAob3IgZnVydGhlciBiYWNrIGluIHRoZSBjb250aW51YXRpb24gY2hhaW4pCisg
ICAgUmVuZGVySW5saW5lKiBzdGFydE9mQ29udHM7CisgICAgaWYgKG1fcmVuZGVyZXItPmlzUmVu
ZGVyQmxvY2soKSAmJiAoc3RhcnRPZkNvbnRzID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMobV9yZW5k
ZXJlcikpKQorICAgICAgICBwcmV2aW91c1NpYmxpbmcgPSBjaGlsZEJlZm9yZUNvbnNpZGVyaW5n
Q29udGludWF0aW9ucyhzdGFydE9mQ29udHMsIG1fcmVuZGVyZXIpOworCisgICAgLy8gQ2FzZSAy
OiBUaGUgbm9kZSBoYXMgYW4gYWN0dWFsIHByZXZpb3VzIHNpYmxpbmcKKyAgICBlbHNlIGlmIChS
ZW5kZXJPYmplY3QqIHBzID0gbV9yZW5kZXJlci0+cHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAg
IHByZXZpb3VzU2libGluZyA9IHBzOworCisgICAgLy8gQ2FzZSAzOiBUaGlzIG5vZGUgaGFzIG5v
IHByZXZpb3VzIHNpYmxpbmdzLCBidXQgaXRzIHBhcmVudCBpcyBhbiBpbmxpbmUsCisgICAgLy8g
YW5kIGlzIGFub3RoZXIgbm9kZSdzIGlubGluZSBjb250aW51dGF0aW9uLiBGb2xsb3cgdGhlIGNv
bnRpbnVhdGlvbiBjaGFpbi4KKyAgICBlbHNlIGlmIChtX3JlbmRlcmVyLT5wYXJlbnQoKS0+aXNS
ZW5kZXJJbmxpbmUoKSAmJiAoc3RhcnRPZkNvbnRzID0gc3RhcnRPZkNvbnRpbnVhdGlvbnMobV9y
ZW5kZXJlci0+cGFyZW50KCkpKSkKKyAgICAgICAgcHJldmlvdXNTaWJsaW5nID0gY2hpbGRCZWZv
cmVDb25zaWRlcmluZ0NvbnRpbnVhdGlvbnMoc3RhcnRPZkNvbnRzLCBtX3JlbmRlcmVyLT5wYXJl
bnQoKS0+Zmlyc3RDaGlsZCgpKTsKKwogICAgIGlmICghcHJldmlvdXNTaWJsaW5nKQogICAgICAg
ICByZXR1cm4gMDsKICAgICAKQEAgLTE1OCw4ICsyNzIsMzEgQEAgQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eVJlbmRlcgogewogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gMDsKKworICAgIC8v
IENhc2UgMTogbm9kZSBpcyBhIGJsb2NrIGFuZCBoYXMgYW4gaW5saW5lIGNvbnRpbnVhdGlvbi4g
TmV4dCBzaWJsaW5nIGlzIHRoZSBpbmxpbmUgY29udGludWF0aW9uJ3MKKyAgICAvLyBmaXJzdCBj
aGlsZC4KKyAgICBSZW5kZXJJbmxpbmUqIGlubGluZUNvbnRpbnVhdGlvbjsKKyAgICBpZiAobV9y
ZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIChpbmxpbmVDb250aW51YXRpb24gPSB0b1JlbmRl
ckJsb2NrKG1fcmVuZGVyZXIpLT5pbmxpbmVDb250aW51YXRpb24oKSkpCisgICAgICAgIG5leHRT
aWJsaW5nID0gZmlyc3RDaGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKGlubGluZUNvbnRpbnVh
dGlvbik7CisKKyAgICAvLyBDYXNlIDI6IG5vZGUgaGFzIGFuIGFjdHVhbCBuZXh0IHNpYmxpbmcK
KyAgICBlbHNlIGlmIChSZW5kZXJPYmplY3QqIG5zID0gbV9yZW5kZXJlci0+bmV4dFNpYmxpbmco
KSkKKyAgICAgICAgbmV4dFNpYmxpbmcgPSBuczsKKworICAgIC8vIENhc2UgMzogbm9kZSBoYXMg
bm8gbmV4dCBzaWJsaW5nLCBhbmQgaXRzIHBhcmVudCBpcyBhbiBpbmxpbmUgd2l0aCBhIGNvbnRp
bnVhdGlvbi4KKyAgICBlbHNlIGlmIChpc0lubGluZVdpdGhDb250aW51YXRpb24obV9yZW5kZXJl
ci0+cGFyZW50KCkpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCogY29udGludWF0aW9uID0gdG9S
ZW5kZXJJbmxpbmUobV9yZW5kZXJlci0+cGFyZW50KCkpLT5jb250aW51YXRpb24oKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIENhc2UgM2E6IGNvbnRpbnVhdGlvbiBpcyBhIGJsb2NrIC0gaW4gdGhp
cyBjYXNlIHRoZSBibG9jayBpdHNlbGYgaXMgdGhlIG5leHQgc2libGluZy4KKyAgICAgICAgaWYg
KGNvbnRpbnVhdGlvbi0+aXNSZW5kZXJCbG9jaygpKQorICAgICAgICAgICAgbmV4dFNpYmxpbmcg
PSBjb250aW51YXRpb247CisgICAgICAgIC8vIENhc2UgM2I6IGNvbnRpbnVhdGlvbiBpcyBhbiBp
bmxpbmUgLSBpbiB0aGlzIGNhc2UgdGhlIGlubGluZSdzIGZpcnN0IGNoaWxkIGlzIHRoZSBuZXh0
IHNpYmxpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV4dFNpYmxpbmcgPSBmaXJzdENo
aWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oY29udGludWF0aW9uKTsKKyAgICB9CiAgICAgCi0g
ICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IG1fcmVuZGVyZXItPm5leHRTaWJsaW5nKCk7
CiAgICAgaWYgKCFuZXh0U2libGluZykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC0xNzAs
OCArMzA3LDIwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKIHsK
ICAgICBpZiAoIW1fcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgUmVu
ZGVyT2JqZWN0KiBwYXJlbnQgPSBtX3JlbmRlcmVyLT5wYXJlbnQoKTsKKworICAgIC8vIENhc2Ug
MTogbm9kZSBpcyBhIGJsb2NrIGFuZCBpcyBhbiBpbmxpbmUncyBjb250aW51YXRpb24uIFBhcmVu
dAorICAgIC8vIGlzIHRoZSBzdGFydCBvZiB0aGUgY29udGludWF0aW9uIGNoYWluLgorICAgIFJl
bmRlcklubGluZSogc3RhcnRPZkNvbnRzID0gMDsKKyAgICBpZiAobV9yZW5kZXJlci0+aXNSZW5k
ZXJCbG9jaygpICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRl
cmVyKSkpCisgICAgICAgIHBhcmVudCA9IHN0YXJ0T2ZDb250czsKKworICAgIC8vIENhc2UgMjog
bm9kZSdzIHBhcmVudCBpcyBhbiBpbmxpbmUgd2hpY2ggaXMgc29tZSBub2RlJ3MgY29udGludWF0
aW9uOyBwYXJlbnQgaXMgCisgICAgLy8gdGhlIGVhcmxpZXN0IG5vZGUgaW4gdGhlIGNvbnRpbnVh
dGlvbiBjaGFpbi4KKyAgICBlbHNlIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc1JlbmRlcklubGlu
ZSgpICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9mQ29udGludWF0aW9ucyhwYXJlbnQpKSkKKyAg
ICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOworCiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAg
IHJldHVybiAwOwogCkBAIC0xODQsNiArMzMzLDE4IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFj
Y2Vzc2liaWxpdHlSZW5kZXIKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgUmVuZGVyT2Jq
ZWN0KiBwYXJlbnQgPSBtX3JlbmRlcmVyLT5wYXJlbnQoKTsKKworICAgIC8vIENhc2UgMTogbm9k
ZSBpcyBhIGJsb2NrIGFuZCBpcyBhbiBpbmxpbmUncyBjb250aW51YXRpb24uIFBhcmVudAorICAg
IC8vIGlzIHRoZSBzdGFydCBvZiB0aGUgY29udGludWF0aW9uIGNoYWluLgorICAgIFJlbmRlcklu
bGluZSogc3RhcnRPZkNvbnRzID0gMDsKKyAgICBpZiAobV9yZW5kZXJlci0+aXNSZW5kZXJCbG9j
aygpICYmIChzdGFydE9mQ29udHMgPSBzdGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyKSkp
CisgICAgICAgIHBhcmVudCA9IHN0YXJ0T2ZDb250czsKKworICAgIC8vIENhc2UgMjogbm9kZSdz
IHBhcmVudCBpcyBhbiBpbmxpbmUgd2hpY2ggaXMgc29tZSBub2RlJ3MgY29udGludWF0aW9uOyBw
YXJlbnQgaXMgCisgICAgLy8gdGhlIGVhcmxpZXN0IG5vZGUgaW4gdGhlIGNvbnRpbnVhdGlvbiBj
aGFpbi4KKyAgICBlbHNlIGlmIChwYXJlbnQgJiYgcGFyZW50LT5pc1JlbmRlcklubGluZSgpICYm
IChzdGFydE9mQ29udHMgPSBzdGFydE9mQ29udGludWF0aW9ucyhwYXJlbnQpKSkKKyAgICAgICAg
cGFyZW50ID0gc3RhcnRPZkNvbnRzOworCiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVy
biAwOwogICAgIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDU3MDY1
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcxLDYgKzcxLDggQEAgcHVibGljOgogICAgIGludCB2ZXJ0aWNhbFBvc2l0aW9uRnJvbUNhY2hl
KGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVWZXJ0aWNhbFBvc2l0
aW9uKCkgeyBtX3ZlcnRpY2FsUG9zaXRpb24gPSBQb3NpdGlvblVuZGVmaW5lZDsgfQogCisgICAg
UmVuZGVySW5saW5lKiBpbmxpbmVDb250aW51YXRpb24oKSBjb25zdDsKKwogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdENoaWxkTGlzdCogdmlydHVhbENoaWxkcmVuKCkgeyByZXR1
cm4gY2hpbGRyZW4oKTsgfQogICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0
KiB2aXJ0dWFsQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBjaGlsZHJlbigpOyB9CkBAIC0xMjYs
NyArMTI4LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgaW50IGxpbmVIZWlnaHQoYm9vbCBm
aXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKIAotICAgIFJlbmRl
cklubGluZSogaW5saW5lQ29udGludWF0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb250aW51
YXRpb24oUmVuZGVyQm94TW9kZWxPYmplY3QqIGMpIHsgbV9jb250aW51YXRpb24gPSBjOyB9CiAg
ICAgCiAgICAgdmlydHVhbCB2b2lkIGNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlck9iamVjdCog
Y2hpbGQpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTcwNjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wNC0wNSAgTWFjaWVqIFN0
YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIExpbmtzIGFyb3VuZCBibG9ja3MgKGUuZy4gZGl2cykgcmVzdWx0
cyBpbiB0b28gbWFueSBWb2ljZU92ZXIgY2FsbCBvdXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzA3OQorICAgICAgICAKKyAgICAgICAgVGhlIG5l
dyB0ZXN0IGNhc2VzIHZlcmlmeSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGNyZWF0ZWQgYnkgYW4g
aW1hZ2UgaW5zaWRlIGEgbGluaywgYW5kIHZlcmlmeQorICAgICAgICB0aGF0IGFkZGluZyBhIGRp
diB3aXRoIHJvbGU9cHJlc2VudGF0aW9uIG5vdyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBhY2Nlc3Np
YmlsaXR5IHRyZWUgKGFzIGV4cGVjdGVkKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW1h
Z2UtbGluay1pbmxpbmUtY29udC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvaW1hZ2UtbGluay1pbmxpbmUtY29udC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2ltYWdlLWxpbmsuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL1NraXBwZWQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2Ut
bGluay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Ta2lwcGVk
OgorCiAyMDEwLTA0LTA1ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIE5vdCByZXZpZXdlZDogY2hyb21pdW0gdGVzdCBleHBlY3RhdGlvbnMgdXBkYXRl
IGZvciB0aGUgcm9sbC4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGlu
ay1pbmxpbmUtY29udC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9pbWFnZS1saW5rLWlubGluZS1jb250LWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay1pbmxpbmUtY29udC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorSW1hZ2UgbGluayBpbiB0
aGUgcHJlc2VuY2Ugb2YgaW5saW5lIGNvbnRpbnVhdGlvbnMKKworVGhpcyB0ZXN0IGNoZWNrcyB0
aGF0IGEgYmxvY2sgaW5zaWRlIGEgbGluayBkb2VzIG5vdCB1bmR1bHkgZGlzdHVyYiB0aGUgcmVu
ZGVyIHRyZWUgdmlhIGlubGluZSBjb250aW51YXRpb25zLiBJbiBwYXJ0aWN1bGFyLCBpdCBjaGVj
a3MgdGhhdCBhZGRpbmcgPGRpdiByb2xlPXByZXNlbnRhdGlvbj4gYmV0d2VlbiBhIGxpbmsgYW5k
IGl0cyBjb250YWluZWQgaW1hZ2UgZG9lcyBub3QgYWx0ZXIgdGhlIGFjY2Vzc2liaWxpdHkgdHJl
ZSBhdCBhbGwsIG90aGVyIHRoYW4gd2l0aCByZXNwZWN0IHRvIHNpemUuCisKKworCisgUEFTUzog
YWNjZXNzaWJpbGl0eSB0cmVlcyB3ZXJlIGlkZW50aWNhbCBvdGhlciB0aGFuIHNpemUuCisKKwpJ
bmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9pbWFnZS1saW5rLWlubGluZS1jb250Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9pbWFnZS1saW5rLWlu
bGluZS1jb250Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L2ltYWdlLWxpbmstaW5saW5lLWNvbnQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5JbWFnZSBsaW5rIGluIHRoZSBwcmVz
ZW5jZSBvZiBpbmxpbmUgY29udGludWF0aW9uczwvdGlsZT4KKzxzY3JpcHQ+CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxoMj5JbWFnZSBsaW5rIGluIHRo
ZSBwcmVzZW5jZSBvZiBpbmxpbmUgY29udGludWF0aW9uczwvaDI+CisKKzxwPlRoaXMgdGVzdCBj
aGVja3MgdGhhdCBhIGJsb2NrIGluc2lkZSBhIGxpbmsgZG9lcyBub3QgdW5kdWx5IGRpc3R1cmIK
KyAgdGhlIHJlbmRlciB0cmVlIHZpYSBpbmxpbmUgY29udGludWF0aW9ucy4gSW4gcGFydGljdWxh
ciwgaXQgY2hlY2tzCisgIHRoYXQgYWRkaW5nICZsdDtkaXYgcm9sZT1wcmVzZW50YXRpb24+IGJl
dHdlZW4gYSBsaW5rIGFuZCBpdHMKKyAgY29udGFpbmVkIGltYWdlIGRvZXMgbm90IGFsdGVyIHRo
ZSBhY2Nlc3NpYmlsaXR5IHRyZWUgYXQgYWxsLCBvdGhlcgorICB0aGFuIHdpdGggcmVzcGVjdCB0
byBzaXplLjwvcD4KKworICA8ZGl2IGlkPSJwbGFpbiI+CisgICAgPGEgaHJlZj0iaHR0cDovL3d3
dy53b3doZWFkLmNvbS8/aXRlbT0zMzkyNCI+PGltZyBhbHQ9IkRlbGljaW91cyBjYWtlIiBzcmM9
InJlc291cmNlcy9jYWtlLnBuZyI+PC9hPgorICA8L2Rpdj4KKworICA8ZGl2IGlkPSJ3aXRoLWRp
diI+CisgICAgPGEgaHJlZj0iaHR0cDovL3d3dy53b3doZWFkLmNvbS8/aXRlbT0zMzkyNCI+PGRp
diByb2xlPSJwcmVzZW50YXRpb24iPjxpbWcgYWx0PSJEZWxpY2lvdXMgY2FrZSIgc3JjPSJyZXNv
dXJjZXMvY2FrZS5wbmciPjwvZGl2PjwvYT4KKyAgPC9kaXY+CisKKzxwcmUgaWQ9InJlc3VsdCI+
PC9kaXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBheFRyZWUoZWx0KQoreworICAgIHZhciByZXN1
bHQgPSBlbHQuYWxsQXR0cmlidXRlcygpICsgIlxuXG4iOworICAgIHZhciBjb3VudCA9IGVsdC5j
aGlsZHJlbkNvdW50OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAg
ICAgICByZXN1bHQgKz0gIkNoaWxkICIgKyBpICsgIjpcbiIgKyBheFRyZWUoZWx0LmNoaWxkQXRJ
bmRleChpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lmICh3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJlc3VsdCIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGFpbiIp
LmZvY3VzKCk7CisgICAgdmFyIHBsYWluUmVzdWx0ID0gYXhUcmVlKGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmZvY3VzZWRFbGVtZW50KTsKKyAgICBwbGFpblJlc3VsdC5yZXBsYWNlKC9BWFNpemUu
KlxuL2csICIiKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ3aXRoLWRpdiIpLmZv
Y3VzKCk7CisgICAgdmFyIHdpdGhEaXZSZXN1bHQgPSBheFRyZWUoYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuZm9jdXNlZEVsZW1lbnQpOworICAgIHdpdGhEaXZSZXN1bHQucmVwbGFjZSgvQVhTaXpl
Lipcbi9nLCAiIik7CisKKyAgICBpZiAocGxhaW5SZXN1bHQgPT0gd2l0aERpdlJlc3VsdCkgewor
ICAgICAgICByZXN1bHQuaW5uZXJIVE1MID0gIlBBU1M6IGFjY2Vzc2liaWxpdHkgdHJlZXMgd2Vy
ZSBpZGVudGljYWwgb3RoZXIgdGhhbiBzaXplLiIKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1
bHQuaW5uZXJIVE1MID0gIkZBSUw6IGFjY2Vzc2liaWxpdHkgdHJlZXMgZGlmZmVyLlxuUGxhaW4g
aW1hZ2UgbGluazogXG4iICsgcGxhaW5SZXN1bHQgKyAiXG5XaXRoIHByZXNlbnRhdGlvbiBkaXY6
XG4iICsgd2l0aERpdlJlc3VsdDsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KSW5kZXg6
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9pbWFnZS1saW5rLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGhlYWQ+Cis8dGl0bGU+SW1hZ2Ug
bGluayB0ZXN0PC90aWxlPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKworICA8YSBpZD0idGVzdCIgaHJlZj0iaHR0cDovL3d3dy53b3doZWFk
LmNvbS8/aXRlbT0zMzkyNCI+PGltZyBhbHQ9IkRlbGljaW91cyBjYWtlIiBzcmM9InJlc291cmNl
cy9jYWtlLnBuZyI+PC9hPgorCisgIDxhIGlkPSJ0ZXN0IiBocmVmPSJodHRwOi8vd3d3Lndvd2hl
YWQuY29tLz9pdGVtPTMzOTI0Ij48ZGl2IHJvbGU9InByZXNlbnRhdGlvbiI+PGltZyBhbHQ9IkRl
bGljaW91cyBjYWtlIiBzcmM9InJlc291cmNlcy9jYWtlLnBuZyI+PC9kaXY+PC9hPgorCisgIDxk
aXYgaWQ9InJlc3VsdCI+PC9kaXY+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBheFRyZWUoZWx0KQor
eworICAgIHZhciByZXN1bHQgPSBlbHQuYWxsQXR0cmlidXRlcygpICsgIlxuXG4iOworICAgIHZh
ciBjb3VudCA9IGVsdC5jaGlsZHJlbkNvdW50OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICByZXN1bHQgKz0gIkNoaWxkICIgKyBpICsgIjpcbiIgKyBheFRy
ZWUoZWx0LmNoaWxkQXRJbmRleChpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB2YXIgcmVzdWx0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpOworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJ0ZXN0IikuZm9jdXMoKTsKKyAgICByZXN1bHQuaW5uZXJUZXh0ICs9IGF4VHJlZShh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudCk7Cit9Cis8L3NjcmlwdD4KKzwv
Ym9keT4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCShyZXZpc2lvbiA1NzA2NSkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2
ICs4NCw4IEBAIGFjY2Vzc2liaWxpdHkvYXJpYS1kZXNjcmliZWRieS1vbi1pbnB1dC4KIGFjY2Vz
c2liaWxpdHkvYXJpYS1sYWJlbGxlZGJ5LW9uLWlucHV0Lmh0bWwKIGFjY2Vzc2liaWxpdHkvYXJp
YS1yb2xlcy5odG1sCiBhY2Nlc3NpYmlsaXR5L2FyaWEtdGFibGVzLmh0bWwKK2FjY2Vzc2liaWxp
dHkvaW1hZ2UtbGluay5odG1sCithY2Nlc3NpYmlsaXR5L2ltYWdlLWxpbmstaW5saW5lLWNvbnQu
aHRtbAogYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAxLmh0bWwKIGFjY2Vzc2liaWxpdHkvaW1hZ2Ut
bWFwMi5odG1sCiBhY2Nlc3NpYmlsaXR5L2ludGVybmFsLWxpbmstYW5jaG9yczIuaHRtbApJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2li
aWxpdHkvaW1hZ2UtbGluay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1saW5rLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorCisKK0FYUm9sZTogQVhMaW5rCitBWFN1YnJvbGU6
IChudWxsKQorQVhSb2xlRGVzY3JpcHRpb246IGxpbmsKK0FYQ2hpbGRyZW46IDxhcnJheSBvZiBz
aXplIDE+CitBWEhlbHA6IAorQVhQYXJlbnQ6IDxBWExpbms+CitBWFNpemU6IE5TU2l6ZTogezI4
MCwgMjEzfQorQVhUaXRsZTogCitBWERlc2NyaXB0aW9uOiAKK0FYVmFsdWU6IAorQVhGb2N1c2Vk
OiAxCitBWEVuYWJsZWQ6IDEKK0FYV2luZG93OiA8QVhMaW5rPgorQVhTZWxlY3RlZFRleHRNYXJr
ZXJSYW5nZTogKG51bGwpCitBWFN0YXJ0VGV4dE1hcmtlcjogPEFYTGluaz4KK0FYRW5kVGV4dE1h
cmtlcjogPEFYTGluaz4KK0FYVmlzaXRlZDogMAorQVhMaW5rZWRVSUVsZW1lbnRzOiAobnVsbCkK
K0FYU2VsZWN0ZWQ6IDAKK0FYQmxvY2tRdW90ZUxldmVsOiAwCitBWFRvcExldmVsVUlFbGVtZW50
OiA8QVhMaW5rPgorQVhVUkw6IGh0dHA6Ly93d3cud293aGVhZC5jb20vP2l0ZW09MzM5MjQKK0FY
QWNjZXNzS2V5OiAobnVsbCkKKworCitDaGlsZCAwOgorQVhSb2xlOiBBWEltYWdlCitBWFN1YnJv
bGU6IChudWxsKQorQVhSb2xlRGVzY3JpcHRpb246IGltYWdlCitBWENoaWxkcmVuOiA8YXJyYXkg
b2Ygc2l6ZSAwPgorQVhIZWxwOiAKK0FYUGFyZW50OiA8QVhJbWFnZT4KK0FYU2l6ZTogTlNTaXpl
OiB7MjgwLCAyMDl9CitBWFRpdGxlOiAKK0FYRGVzY3JpcHRpb246IERlbGljaW91cyBjYWtlCitB
WFZhbHVlOiAKK0FYRm9jdXNlZDogMAorQVhFbmFibGVkOiAxCitBWFdpbmRvdzogPEFYSW1hZ2U+
CitBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlOiAobnVsbCkKK0FYU3RhcnRUZXh0TWFya2VyOiA8
QVhJbWFnZT4KK0FYRW5kVGV4dE1hcmtlcjogPEFYSW1hZ2U+CitBWFZpc2l0ZWQ6IDAKK0FYTGlu
a2VkVUlFbGVtZW50czogKG51bGwpCitBWFNlbGVjdGVkOiAwCitBWEJsb2NrUXVvdGVMZXZlbDog
MAorQVhUb3BMZXZlbFVJRWxlbWVudDogPEFYSW1hZ2U+CitBWFVSTDogTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9yZXNvdXJjZXMvY2FrZS5wbmcKK0FYQWNjZXNzS2V5OiAobnVsbCkKKworCisK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA1NzA2NSkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiArMzky
LDcgQEAgYWNjZXNzaWJpbGl0eS9kb2N1bWVudC1hdHRyaWJ1dGVzLmh0bWwKIGFjY2Vzc2liaWxp
dHkvZWRpdGFibGUtd2ViYXJlYS1jb250ZXh0LW1lbnUtcG9pbnQuaHRtbAogYWNjZXNzaWJpbGl0
eS9pZnJhbWUtYmFzdGFyZGl6YXRpb24uaHRtbAogYWNjZXNzaWJpbGl0eS9pZ25vcmUtc3BhY2Vy
LWVsZW1lbnRzLmh0bWwKK2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay5odG1sCiBhY2Nlc3NpYmls
aXR5L2ltYWdlLW1hcDEuaHRtbAogYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAyLmh0bWwKIGFjY2Vz
c2liaWxpdHkvaW1nLWFyaWEtYnV0dG9uLWFsdC10YWcuaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54047</attachid>
            <date>2010-04-22 03:22:12 -0700</date>
            <delta_ts>2010-04-22 11:28:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-37079-20100422032210.patch</filename>
            <type>text/plain</type>
            <size>24187</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODA4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDQtMjIgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBM
aW5rcyBhcm91bmQgYmxvY2tzIChlLmcuIGRpdnMpIHJlc3VsdHMgaW4gdG9vIG1hbnkgVm9pY2VP
dmVyIGNhbGwgb3V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MzcwNzkKKworICAgICAgICBUaGUgYmFzaWMgY2hhbmdlIGlzIHRvIG1vZGlmeSB0aGUg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCB0cmVlCisgICAgICAgIHRyYXZlcnNhbCBtZXRob2Rz
IHRvIGFjY291bnQgZm9yIGlubGluZSBjb250aW51YXRpb25zIGluIHRoZQorICAgICAgICByZW5k
ZXIgdHJlZSBhbmQgbWFrZSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGxvb2sgYXMgaWYKKyAgICAg
ICAgY29udGludWF0aW9ucyBkaWRuJ3QgZXhpc3QgLSB0aGUgc2FtZSBhcyBpZiBDU1MgYmxvY2tz
IGNvdWxkIGp1c3QKKyAgICAgICAgc2l0IGluIENTUyBpbmxpbmVzLiBUaGlzIGlzIHNsaWdodGx5
IHRyaWNreSBjb2RlIGJ1dCBjcmVhdGVzIGEKKyAgICAgICAgbXVjaCBzYW5lciBhY2Nlc3NpYmls
aXR5IHRyZWUuCisgICAgICAgIAorICAgICAgICBUZXN0czogYWNjZXNzaWJpbGl0eS9pbWFnZS1s
aW5rLWlubGluZS1jb250Lmh0bWwKKyAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHkvaW1hZ2Ut
bGluay5odG1sCisgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5L2lubGluZS1jb250aW51YXRp
b25zLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc0lubGluZVdpdGhDb250aW51YXRpb24pOiBI
ZWxwZXIgZnVuY3Rpb24gZm9yIHRyYXZlcnNhbCBmdW5jdGlvbnMgdG8gdXNlIGluIGFjY291bnRp
bmcgZm9yIGNvbnRpbnVhdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpmaXJzdENoaWxkSW5Db250
aW51YXRpb24pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Zmlyc3RDaGlsZENvbnNpZGVyaW5n
Q29udGludWF0aW9uKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6Omxhc3RDaGlsZENvbnNpZGVy
aW5nQ29udGludWF0aW9uKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0T2ZDb250aW51
YXRpb25zKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mQ29udGludWF0aW9ucyk6IGRp
dHRvCisgICAgICAgIChXZWJDb3JlOjpjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9u
cyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpmaXJzdENoaWxkSXNJbmxpbmVDb250aW51YXRp
b24pOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6bGFzdENoaWxkSGFzQ29udGludWF0aW9uKTog
ZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmZpcnN0
Q2hpbGQpOiBBY2NvdW50IGZvciBpbmxpbmUgY29udGludWF0aW9ucy4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omxhc3RDaGlsZCk6IGRpdHRvCisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcpOiBB
Y2NvdW50IGZvciBpbmxpbmUgY29udGludWF0aW9ucworICAgICAgICBhbmQgdGhlaXIgYW5vbnlt
b3VzIGJsb2NrIHBhcmVudHMuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpuZXh0U2libGluZyk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cyk6IEFjY291bnQgZm9yIGlubGlu
ZSBjb250aW51YXRpb25zLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6cGFyZW50T2JqZWN0KTogQWNjb3VudCBmb3IgaW5saW5lIGNvbnRpbnVhdGlvbnMuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOiBNYWtlIFJlbmRlcklubGluZTo6aW5s
aW5lQ29udGludWF0aW9uIHB1YmxpYy4KKwogMjAxMC0wNC0yMiAgU3RlcGhhbiBBw59tdXMgIDxz
dXBlcnN0aXBwaUBnbXguZGU+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCklu
ZGV4OiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiA1Nzk1OSkKKysrIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDEyICsxMTgs
NzMgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRhY2goKQogICAgIG1fcmVu
ZGVyZXIgPSAwOyAgICAKIH0KIAorc3RhdGljIGlubGluZSBib29sIGlzSW5saW5lV2l0aENvbnRp
bnVhdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGlmICghcmVuZGVyZXItPmlz
UmVuZGVySW5saW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0b1Jl
bmRlcklubGluZShyZW5kZXJlciktPmNvbnRpbnVhdGlvbigpOworfQorCitzdGF0aWMgaW5saW5l
IFJlbmRlck9iamVjdCogZmlyc3RDaGlsZEluQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCit7CisgICAgUmVuZGVyT2JqZWN0KiByID0gdG9SZW5kZXJJbmxpbmUocmVuZGVyZXIp
LT5jb250aW51YXRpb24oKTsKKworICAgIHdoaWxlIChyKSB7CisgICAgICAgIGlmIChyLT5pc1Jl
bmRlckJsb2NrKCkpCisgICAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgaWYgKFJlbmRlck9i
amVjdCogY2hpbGQgPSByLT5maXJzdENoaWxkKCkpCisgICAgICAgICAgICByZXR1cm4gY2hpbGQ7
CisgICAgICAgIHIgPSB0b1JlbmRlcklubGluZShyKS0+Y29udGludWF0aW9uKCk7IAorICAgIH0K
KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogZmlyc3RD
aGlsZENvbnNpZGVyaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7Cisg
ICAgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxkID0gcmVuZGVyZXItPmZpcnN0Q2hpbGQoKTsKKwor
ICAgIGlmICghZmlyc3RDaGlsZCAmJiBpc0lubGluZVdpdGhDb250aW51YXRpb24ocmVuZGVyZXIp
KQorICAgICAgICBmaXJzdENoaWxkID0gZmlyc3RDaGlsZEluQ29udGludWF0aW9uKHJlbmRlcmVy
KTsKKworICAgIHJldHVybiBmaXJzdENoaWxkOworfQorCisKK3N0YXRpYyBpbmxpbmUgUmVuZGVy
T2JqZWN0KiBsYXN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQoreworICAgIFJlbmRlck9iamVjdCogbGFzdENoaWxkID0gcmVuZGVyZXItPmxhc3RD
aGlsZCgpOworICAgIFJlbmRlck9iamVjdCogcHJldiA9IHJlbmRlcmVyOworICAgIFJlbmRlck9i
amVjdCogY3VyID0gcmVuZGVyZXI7CisKKyAgICB3aGlsZSAoY3VyKSB7CisgICAgICAgIHByZXYg
PSBjdXI7CisKKyAgICAgICAgaWYgKFJlbmRlck9iamVjdCogbGMgPSBjdXItPmxhc3RDaGlsZCgp
KQorICAgICAgICAgICAgbGFzdENoaWxkID0gbGM7CisKKyAgICAgICAgaWYgKGN1ci0+aXNSZW5k
ZXJJbmxpbmUoKSkgeworICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJJbmxpbmUoY3VyKS0+Y29u
dGludWF0aW9uKCk7CisgICAgICAgICAgICBpZiAoY3VyICYmIGN1ci0+aXNSZW5kZXJCbG9jaygp
KSAKKyAgICAgICAgICAgICAgICBjdXIgPSB0b1JlbmRlckJsb2NrKGN1ciktPmlubGluZUNvbnRp
bnVhdGlvbigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGN1ciA9IHRvUmVuZGVyQmxv
Y2soY3VyKS0+aW5saW5lQ29udGludWF0aW9uKCk7CisgICAgfQorCisgICAgcmV0dXJuIGxhc3RD
aGlsZDsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Zmlyc3RDaGlsZCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKICAgICBSZW5kZXJPYmplY3QqIGZpcnN0Q2hpbGQgPSBtX3JlbmRlcmVy
LT5maXJzdENoaWxkKCk7CisKKyAgICBpZiAoIWZpcnN0Q2hpbGQgJiYgaXNJbmxpbmVXaXRoQ29u
dGludWF0aW9uKG1fcmVuZGVyZXIpKQorICAgICAgICBmaXJzdENoaWxkID0gZmlyc3RDaGlsZENv
bnNpZGVyaW5nQ29udGludWF0aW9uKG1fcmVuZGVyZXIpOworCiAgICAgaWYgKCFmaXJzdENoaWxk
KQogICAgICAgICByZXR1cm4gMDsKICAgICAKQEAgLTEzNCwzMiArMTk1LDE1OSBAQCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiB7CiAgICAgaWYgKCFtX3JlbmRlcmVy
KQogICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCA9
IG1fcmVuZGVyZXItPmxhc3RDaGlsZCgpOworCisgICAgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQg
PSBsYXN0Q2hpbGRDb25zaWRlcmluZ0NvbnRpbnVhdGlvbihtX3JlbmRlcmVyKTsKKwogICAgIGlm
ICghbGFzdENoaWxkKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICByZXR1cm4gbV9yZW5k
ZXJlci0+ZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShsYXN0Q2hpbGQp
OwogfQogCitzdGF0aWMgaW5saW5lIFJlbmRlcklubGluZSogc3RhcnRPZkNvbnRpbnVhdGlvbnMo
UmVuZGVyT2JqZWN0KiByKQoreworICAgIGlmIChyLT5pc0lubGluZUNvbnRpbnVhdGlvbigpKQor
ICAgICAgICByZXR1cm4gdG9SZW5kZXJJbmxpbmUoci0+bm9kZSgpLT5yZW5kZXJlcigpKTsKKwor
ICAgIC8vIEJsb2NrcyB3aXRoIGEgcHJldmlvdXMgY29udGludWF0aW9uIGFsd2F5cyBoYXZlIGEg
bmV4dCBjb250aW51YXRpb24KKyAgICBpZiAoci0+aXNSZW5kZXJCbG9jaygpICYmIHRvUmVuZGVy
QmxvY2sociktPmlubGluZUNvbnRpbnVhdGlvbigpKQorICAgICAgICByZXR1cm4gdG9SZW5kZXJJ
bmxpbmUodG9SZW5kZXJCbG9jayhyKS0+aW5saW5lQ29udGludWF0aW9uKCktPm5vZGUoKS0+cmVu
ZGVyZXIoKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJPYmpl
Y3QqIGVuZE9mQ29udGludWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIFJl
bmRlck9iamVjdCogcHJldiA9IHJlbmRlcmVyOworICAgIFJlbmRlck9iamVjdCogY3VyID0gcmVu
ZGVyZXI7CisKKyAgICB3aGlsZSAoY3VyKSB7CisgICAgICAgIHByZXYgPSBjdXI7CisgICAgICAg
IGlmIChjdXItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgICAgIGN1ciA9IHRvUmVuZGVy
SW5saW5lKGN1ciktPmNvbnRpbnVhdGlvbigpOworICAgICAgICAgICAgaWYgKGN1ciAmJiBjdXIt
PmlzUmVuZGVyQmxvY2soKSkgCisgICAgICAgICAgICAgICAgY3VyID0gdG9SZW5kZXJCbG9jayhj
dXIpLT5pbmxpbmVDb250aW51YXRpb24oKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBj
dXIgPSB0b1JlbmRlckJsb2NrKGN1ciktPmlubGluZUNvbnRpbnVhdGlvbigpOworICAgIH0KKwor
ICAgIHJldHVybiBwcmV2OworfQorCisKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBjaGls
ZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9ucyhSZW5kZXJJbmxpbmUqIHIsIFJlbmRlck9i
amVjdCogY2hpbGQpCit7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGN1ckNvbnRhaW5lciA9
IHI7CisgICAgUmVuZGVyT2JqZWN0KiBjdXIgPSAwOworICAgIFJlbmRlck9iamVjdCogcHJldiA9
IDA7CisKKyAgICB3aGlsZSAoY3VyQ29udGFpbmVyKSB7CisgICAgICAgIGlmIChjdXJDb250YWlu
ZXItPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgICAgIGN1ciA9IGN1ckNvbnRhaW5lci0+
Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgd2hpbGUgKGN1cikgeworICAgICAgICAgICAgICAg
IGlmIChjdXIgPT0gY2hpbGQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OworICAg
ICAgICAgICAgICAgIHByZXYgPSBjdXI7CisgICAgICAgICAgICAgICAgY3VyID0gY3VyLT5uZXh0
U2libGluZygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXJDb250YWluZXIgPSB0
b1JlbmRlcklubGluZShjdXJDb250YWluZXIpLT5jb250aW51YXRpb24oKTsKKyAgICAgICAgfSBl
bHNlIGlmIChjdXJDb250YWluZXItPmlzUmVuZGVyQmxvY2soKSkgeworICAgICAgICAgICAgaWYg
KGN1ckNvbnRhaW5lciA9PSBjaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKKwor
ICAgICAgICAgICAgcHJldiA9IGN1ckNvbnRhaW5lcjsKKyAgICAgICAgICAgIGN1ckNvbnRhaW5l
ciA9IHRvUmVuZGVyQmxvY2soY3VyQ29udGFpbmVyKS0+aW5saW5lQ29udGludWF0aW9uKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHJldHVy
biAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgZmlyc3RDaGlsZElzSW5saW5lQ29udGludWF0
aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5maXJz
dENoaWxkKCkgJiYgcmVuZGVyZXItPmZpcnN0Q2hpbGQoKS0+aXNJbmxpbmVDb250aW51YXRpb24o
KTsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
cHJldmlvdXNTaWJsaW5nKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIpCiAgICAgICAg
IHJldHVybiAwOwotICAgIAotICAgIFJlbmRlck9iamVjdCogcHJldmlvdXNTaWJsaW5nID0gbV9y
ZW5kZXJlci0+cHJldmlvdXNTaWJsaW5nKCk7CisKKyAgICBSZW5kZXJPYmplY3QqIHByZXZpb3Vz
U2libGluZyA9IDA7CisKKyAgICAvLyBDYXNlIDE6IFRoZSBub2RlIGlzIGEgYmxvY2sgYW5kIGlz
IGFuIGlubGluZSdzIGNvbnRpbnVhdGlvbi4gSW4gdGhhdCBjYXNlLCB0aGUgaW5saW5lJ3MKKyAg
ICAvLyBsYXN0IGNoaWxkIGlzIG91ciBwcmV2aW91cyBzaWJsaW5nIChvciBmdXJ0aGVyIGJhY2sg
aW4gdGhlIGNvbnRpbnVhdGlvbiBjaGFpbikKKyAgICBSZW5kZXJJbmxpbmUqIHN0YXJ0T2ZDb250
czsKKyAgICBpZiAobV9yZW5kZXJlci0+aXNSZW5kZXJCbG9jaygpICYmIChzdGFydE9mQ29udHMg
PSBzdGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyKSkpCisgICAgICAgIHByZXZpb3VzU2li
bGluZyA9IGNoaWxkQmVmb3JlQ29uc2lkZXJpbmdDb250aW51YXRpb25zKHN0YXJ0T2ZDb250cywg
bV9yZW5kZXJlcik7CisKKyAgICAvLyBDYXNlIDI6IEFub255bW91cyBibG9jayBwYXJlbnQgb2Yg
dGhlIGVuZCBvZiBhIGNvbnRpbnVhdGlvbiAtIHNraXAgYWxsIHRoZSB3YXkgdG8gYmVmb3JlCisg
ICAgLy8gdGhlIHBhcmVudCBvZiB0aGUgc3RhcnQsIHNpbmNlIGV2ZXJ5dGhpbmcgaW4gYmV0d2Vl
biB3aWxsIGJlIGxpbmtlZCB1cCB2aWEgdGhlIGNvbnRpbnVhdGlvbi4KKyAgICBlbHNlIGlmICht
X3JlbmRlcmVyLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmlyc3RDaGlsZElzSW5saW5lQ29udGlu
dWF0aW9uKG1fcmVuZGVyZXIpKQorICAgICAgICBwcmV2aW91c1NpYmxpbmcgPSBzdGFydE9mQ29u
dGludWF0aW9ucyhtX3JlbmRlcmVyLT5maXJzdENoaWxkKCkpLT5wYXJlbnQoKS0+cHJldmlvdXNT
aWJsaW5nKCk7CisKKyAgICAvLyBDYXNlIDM6IFRoZSBub2RlIGhhcyBhbiBhY3R1YWwgcHJldmlv
dXMgc2libGluZworICAgIGVsc2UgaWYgKFJlbmRlck9iamVjdCogcHMgPSBtX3JlbmRlcmVyLT5w
cmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgcHJldmlvdXNTaWJsaW5nID0gcHM7CisKKyAgICAv
LyBDYXNlIDQ6IFRoaXMgbm9kZSBoYXMgbm8gcHJldmlvdXMgc2libGluZ3MsIGJ1dCBpdHMgcGFy
ZW50IGlzIGFuIGlubGluZSwKKyAgICAvLyBhbmQgaXMgYW5vdGhlciBub2RlJ3MgaW5saW5lIGNv
bnRpbnV0YXRpb24uIEZvbGxvdyB0aGUgY29udGludWF0aW9uIGNoYWluLgorICAgIGVsc2UgaWYg
KG1fcmVuZGVyZXItPnBhcmVudCgpLT5pc1JlbmRlcklubGluZSgpICYmIChzdGFydE9mQ29udHMg
PSBzdGFydE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyLT5wYXJlbnQoKSkpKQorICAgICAgICBw
cmV2aW91c1NpYmxpbmcgPSBjaGlsZEJlZm9yZUNvbnNpZGVyaW5nQ29udGludWF0aW9ucyhzdGFy
dE9mQ29udHMsIG1fcmVuZGVyZXItPnBhcmVudCgpLT5maXJzdENoaWxkKCkpOworCiAgICAgaWYg
KCFwcmV2aW91c1NpYmxpbmcpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHJldHVybiBt
X3JlbmRlcmVyLT5kb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHByZXZp
b3VzU2libGluZyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBsYXN0Q2hpbGRIYXNDb250aW51
YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICByZXR1cm4gcmVuZGVyZXItPmxh
c3RDaGlsZCgpICYmIGlzSW5saW5lV2l0aENvbnRpbnVhdGlvbihyZW5kZXJlci0+bGFzdENoaWxk
KCkpOworfQorCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpuZXh0U2libGluZygpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gbV9yZW5kZXJl
ci0+bmV4dFNpYmxpbmcoKTsKKworICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSAwOwor
CisgICAgLy8gQ2FzZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGhhcyBhbiBpbmxpbmUgY29udGlu
dWF0aW9uLiBOZXh0IHNpYmxpbmcgaXMgdGhlIGlubGluZSBjb250aW51YXRpb24ncworICAgIC8v
IGZpcnN0IGNoaWxkLgorICAgIFJlbmRlcklubGluZSogaW5saW5lQ29udGludWF0aW9uOworICAg
IGlmIChtX3JlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgKGlubGluZUNvbnRpbnVhdGlvbiA9
IHRvUmVuZGVyQmxvY2sobV9yZW5kZXJlciktPmlubGluZUNvbnRpbnVhdGlvbigpKSkKKyAgICAg
ICAgbmV4dFNpYmxpbmcgPSBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oaW5saW5l
Q29udGludWF0aW9uKTsKKworICAgIC8vIENhc2UgMjogQW5vbnltb3VzIGJsb2NrIHBhcmVudCBv
ZiB0aGUgc3RhcnQgb2YgYSBjb250aW51YXRpb24gLSBza2lwIGFsbCB0aGUgd2F5IHRvCisgICAg
Ly8gYWZ0ZXIgdGhlIHBhcmVudCBvZiB0aGUgZW5kLCBzaW5jZSBldmVyeXRoaW5nIGluIGJldHdl
ZW4gd2lsbCBiZSBsaW5rZWQgdXAgdmlhIHRoZSBjb250aW51YXRpb24uCisgICAgZWxzZSBpZiAo
bV9yZW5kZXJlci0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGxhc3RDaGlsZEhhc0NvbnRpbnVhdGlv
bihtX3JlbmRlcmVyKSkKKyAgICAgICAgbmV4dFNpYmxpbmcgPSBlbmRPZkNvbnRpbnVhdGlvbnMo
bV9yZW5kZXJlci0+bGFzdENoaWxkKCkpLT5wYXJlbnQoKS0+bmV4dFNpYmxpbmcoKTsKKworICAg
IC8vIENhc2UgMzogbm9kZSBoYXMgYW4gYWN0dWFsIG5leHQgc2libGluZworICAgIGVsc2UgaWYg
KFJlbmRlck9iamVjdCogbnMgPSBtX3JlbmRlcmVyLT5uZXh0U2libGluZygpKQorICAgICAgICBu
ZXh0U2libGluZyA9IG5zOworCisgICAgLy8gQ2FzZSA0OiBub2RlIGlzIGFuIGlubGluZSB3aXRo
IGEgY29udGludWF0aW9uLiBOZXh0IHNpYmxpbmcgaXMgdGhlIG5leHQgc2libGluZyBvZiB0aGUg
ZW5kIAorICAgIC8vIG9mIHRoZSBjb250aW51YXRpb24gY2hhaW4uCisgICAgZWxzZSBpZiAoaXNJ
bmxpbmVXaXRoQ29udGludWF0aW9uKG1fcmVuZGVyZXIpKQorICAgICAgICBuZXh0U2libGluZyA9
IGVuZE9mQ29udGludWF0aW9ucyhtX3JlbmRlcmVyKS0+bmV4dFNpYmxpbmcoKTsKKworICAgIC8v
IENhc2UgNTogbm9kZSBoYXMgbm8gbmV4dCBzaWJsaW5nLCBhbmQgaXRzIHBhcmVudCBpcyBhbiBp
bmxpbmUgd2l0aCBhIGNvbnRpbnVhdGlvbi4KKyAgICBlbHNlIGlmIChpc0lubGluZVdpdGhDb250
aW51YXRpb24obV9yZW5kZXJlci0+cGFyZW50KCkpKSB7CisgICAgICAgIFJlbmRlck9iamVjdCog
Y29udGludWF0aW9uID0gdG9SZW5kZXJJbmxpbmUobV9yZW5kZXJlci0+cGFyZW50KCkpLT5jb250
aW51YXRpb24oKTsKKyAgICAgICAgCisgICAgICAgIC8vIENhc2UgNGE6IGNvbnRpbnVhdGlvbiBp
cyBhIGJsb2NrIC0gaW4gdGhpcyBjYXNlIHRoZSBibG9jayBpdHNlbGYgaXMgdGhlIG5leHQgc2li
bGluZy4KKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbi0+aXNSZW5kZXJCbG9jaygpKQorICAgICAg
ICAgICAgbmV4dFNpYmxpbmcgPSBjb250aW51YXRpb247CisgICAgICAgIC8vIENhc2UgNGI6IGNv
bnRpbnVhdGlvbiBpcyBhbiBpbmxpbmUgLSBpbiB0aGlzIGNhc2UgdGhlIGlubGluZSdzIGZpcnN0
IGNoaWxkIGlzIHRoZSBuZXh0IHNpYmxpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV4
dFNpYmxpbmcgPSBmaXJzdENoaWxkQ29uc2lkZXJpbmdDb250aW51YXRpb24oY29udGludWF0aW9u
KTsKKyAgICB9CisKICAgICBpZiAoIW5leHRTaWJsaW5nKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKQEAgLTE3MCw4ICszNTgsMjAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eVJlbmRlcgogewogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
CisKICAgICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IG1fcmVuZGVyZXItPnBhcmVudCgpOworCisg
ICAgLy8gQ2FzZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGlzIGFuIGlubGluZSdzIGNvbnRpbnVh
dGlvbi4gUGFyZW50CisgICAgLy8gaXMgdGhlIHN0YXJ0IG9mIHRoZSBjb250aW51YXRpb24gY2hh
aW4uCisgICAgUmVuZGVySW5saW5lKiBzdGFydE9mQ29udHMgPSAwOworICAgIGlmIChtX3JlbmRl
cmVyLT5pc1JlbmRlckJsb2NrKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRp
b25zKG1fcmVuZGVyZXIpKSkKKyAgICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOworCisgICAg
Ly8gQ2FzZSAyOiBub2RlJ3MgcGFyZW50IGlzIGFuIGlubGluZSB3aGljaCBpcyBzb21lIG5vZGUn
cyBjb250aW51YXRpb247IHBhcmVudCBpcyAKKyAgICAvLyB0aGUgZWFybGllc3Qgbm9kZSBpbiB0
aGUgY29udGludWF0aW9uIGNoYWluLgorICAgIGVsc2UgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlz
UmVuZGVySW5saW5lKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKHBh
cmVudCkpKQorICAgICAgICBwYXJlbnQgPSBzdGFydE9mQ29udHM7CisKICAgICBpZiAoIXBhcmVu
dCkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTE4NCw2ICszODQsMTggQEAgQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgICAgICByZXR1cm4gMDsKICAgICAKICAg
ICBSZW5kZXJPYmplY3QqIHBhcmVudCA9IG1fcmVuZGVyZXItPnBhcmVudCgpOworCisgICAgLy8g
Q2FzZSAxOiBub2RlIGlzIGEgYmxvY2sgYW5kIGlzIGFuIGlubGluZSdzIGNvbnRpbnVhdGlvbi4g
UGFyZW50CisgICAgLy8gaXMgdGhlIHN0YXJ0IG9mIHRoZSBjb250aW51YXRpb24gY2hhaW4uCisg
ICAgUmVuZGVySW5saW5lKiBzdGFydE9mQ29udHMgPSAwOworICAgIGlmIChtX3JlbmRlcmVyLT5p
c1JlbmRlckJsb2NrKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKG1f
cmVuZGVyZXIpKSkKKyAgICAgICAgcGFyZW50ID0gc3RhcnRPZkNvbnRzOworCisgICAgLy8gQ2Fz
ZSAyOiBub2RlJ3MgcGFyZW50IGlzIGFuIGlubGluZSB3aGljaCBpcyBzb21lIG5vZGUncyBjb250
aW51YXRpb247IHBhcmVudCBpcyAKKyAgICAvLyB0aGUgZWFybGllc3Qgbm9kZSBpbiB0aGUgY29u
dGludWF0aW9uIGNoYWluLgorICAgIGVsc2UgaWYgKHBhcmVudCAmJiBwYXJlbnQtPmlzUmVuZGVy
SW5saW5lKCkgJiYgKHN0YXJ0T2ZDb250cyA9IHN0YXJ0T2ZDb250aW51YXRpb25zKHBhcmVudCkp
KQorICAgICAgICBwYXJlbnQgPSBzdGFydE9mQ29udHM7CisKICAgICBpZiAoIXBhcmVudCkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2
aXNpb24gNTc5NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNiArNzEsOCBAQCBwdWJsaWM6CiAgICAgaW50IHZlcnRpY2FsUG9zaXRp
b25Gcm9tQ2FjaGUoYm9vbCBmaXJzdExpbmUpIGNvbnN0OwogICAgIHZvaWQgaW52YWxpZGF0ZVZl
cnRpY2FsUG9zaXRpb24oKSB7IG1fdmVydGljYWxQb3NpdGlvbiA9IFBvc2l0aW9uVW5kZWZpbmVk
OyB9CiAKKyAgICBSZW5kZXJJbmxpbmUqIGlubGluZUNvbnRpbnVhdGlvbigpIGNvbnN0OworCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0KiB2aXJ0dWFsQ2hpbGRy
ZW4oKSB7IHJldHVybiBjaGlsZHJlbigpOyB9CiAgICAgdmlydHVhbCBjb25zdCBSZW5kZXJPYmpl
Y3RDaGlsZExpc3QqIHZpcnR1YWxDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGNoaWxkcmVuKCk7
IH0KQEAgLTEyNiw3ICsxMjgsNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBpbnQgbGluZUhl
aWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0Owog
Ci0gICAgUmVuZGVySW5saW5lKiBpbmxpbmVDb250aW51YXRpb24oKSBjb25zdDsKICAgICB2b2lk
IHNldENvbnRpbnVhdGlvbihSZW5kZXJCb3hNb2RlbE9iamVjdCogYykgeyBtX2NvbnRpbnVhdGlv
biA9IGM7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRCZWNhbWVOb25JbmxpbmUoUmVu
ZGVyT2JqZWN0KiBjaGlsZCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1ODA4MSkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTA0LTIy
ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGlua3MgYXJvdW5kIGJsb2NrcyAoZS5nLiBk
aXZzKSByZXN1bHRzIGluIHRvbyBtYW55IFZvaWNlT3ZlciBjYWxsIG91dHMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MDc5CisgICAgICAgIAorICAg
ICAgICBUaGUgbmV3IHRlc3QgY2FzZXMgdmVyaWZ5IHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgY3Jl
YXRlZCBieSBhbiBpbWFnZSBpbnNpZGUgYSBsaW5rLCBhbmQgdmVyaWZ5CisgICAgICAgIHRoYXQg
YWRkaW5nIGEgZGl2IHdpdGggcm9sZT1wcmVzZW50YXRpb24gbm93IGhhcyBubyBlZmZlY3Qgb24g
dGhlIGFjY2Vzc2liaWxpdHkgdHJlZSAoYXMgZXhwZWN0ZWQpLgorCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9pbWFnZS1saW5rLWlubGluZS1jb250LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9pbWFnZS1saW5rLWlubGluZS1jb250Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJp
bGl0eS9pbWFnZS1saW5rLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
d2luL1NraXBwZWQ6CisgICAgICAgIAorICAgICAgICBUZXN0IHRvIGNoZWNrIHRoYXQgYWNjZXNz
aWJpbGl0eSB0cmVlIGRvZXNuJ3QgZ2V0IGR1cGxpY2F0ZSBjb250ZW50IGluIHRoZSBwcmVzZW5j
ZQorICAgICAgICBvZiBpbmxpbmUgY29udGludWF0aW9ucyAodGhpcyB3YXMgYSBidWcgaW4gYW4g
ZWFybGllciB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2gpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9pbmxpbmUtY29udGludWF0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvaW5saW5lLWNvbnRpbnVhdGlvbnMuaHRtbDogQWRkZWQuCisKIDIwMTAtMDQt
MjIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByNTgwNjkuCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lt
YWdlLWxpbmstaW5saW5lLWNvbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay1pbmxpbmUtY29udC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2ltYWdlLWxpbmstaW5saW5l
LWNvbnQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKK0ltYWdlIGxp
bmsgaW4gdGhlIHByZXNlbmNlIG9mIGlubGluZSBjb250aW51YXRpb25zCisKK1RoaXMgdGVzdCBj
aGVja3MgdGhhdCBhIGJsb2NrIGluc2lkZSBhIGxpbmsgZG9lcyBub3QgdW5kdWx5IGRpc3R1cmIg
dGhlIHJlbmRlciB0cmVlIHZpYSBpbmxpbmUgY29udGludWF0aW9ucy4gSW4gcGFydGljdWxhciwg
aXQgY2hlY2tzIHRoYXQgYWRkaW5nIDxkaXYgcm9sZT1wcmVzZW50YXRpb24+IGJldHdlZW4gYSBs
aW5rIGFuZCBpdHMgY29udGFpbmVkIGltYWdlIGRvZXMgbm90IGFsdGVyIHRoZSBhY2Nlc3NpYmls
aXR5IHRyZWUgYXQgYWxsLCBvdGhlciB0aGFuIHdpdGggcmVzcGVjdCB0byBzaXplLgorCisKKwor
IFBBU1M6IGFjY2Vzc2liaWxpdHkgdHJlZXMgd2VyZSBpZGVudGljYWwgb3RoZXIgdGhhbiBzaXpl
LgorCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay1pbmxpbmUt
Y29udC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW1hZ2Ut
bGluay1pbmxpbmUtY29udC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9pbWFnZS1saW5rLWlubGluZS1jb250Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGhlYWQ+Cis8dGl0bGU+SW1hZ2UgbGluayBpbiB0
aGUgcHJlc2VuY2Ugb2YgaW5saW5lIGNvbnRpbnVhdGlvbnM8L3RpbGU+Cis8c2NyaXB0PgoraWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8aDI+SW1hZ2UgbGlu
ayBpbiB0aGUgcHJlc2VuY2Ugb2YgaW5saW5lIGNvbnRpbnVhdGlvbnM8L2gyPgorCis8cD5UaGlz
IHRlc3QgY2hlY2tzIHRoYXQgYSBibG9jayBpbnNpZGUgYSBsaW5rIGRvZXMgbm90IHVuZHVseSBk
aXN0dXJiCisgIHRoZSByZW5kZXIgdHJlZSB2aWEgaW5saW5lIGNvbnRpbnVhdGlvbnMuIEluIHBh
cnRpY3VsYXIsIGl0IGNoZWNrcworICB0aGF0IGFkZGluZyAmbHQ7ZGl2IHJvbGU9cHJlc2VudGF0
aW9uPiBiZXR3ZWVuIGEgbGluayBhbmQgaXRzCisgIGNvbnRhaW5lZCBpbWFnZSBkb2VzIG5vdCBh
bHRlciB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGF0IGFsbCwgb3RoZXIKKyAgdGhhbiB3aXRoIHJl
c3BlY3QgdG8gc2l6ZS48L3A+CisKKyAgPGRpdiBpZD0icGxhaW4iPgorICAgIDxhIGhyZWY9Imh0
dHA6Ly93d3cud293aGVhZC5jb20vP2l0ZW09MzM5MjQiPjxpbWcgYWx0PSJEZWxpY2lvdXMgY2Fr
ZSIgc3JjPSJyZXNvdXJjZXMvY2FrZS5wbmciPjwvYT4KKyAgPC9kaXY+CisKKyAgPGRpdiBpZD0i
d2l0aC1kaXYiPgorICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cud293aGVhZC5jb20vP2l0ZW09MzM5
MjQiPjxkaXYgcm9sZT0icHJlc2VudGF0aW9uIj48aW1nIGFsdD0iRGVsaWNpb3VzIGNha2UiIHNy
Yz0icmVzb3VyY2VzL2Nha2UucG5nIj48L2Rpdj48L2E+CisgIDwvZGl2PgorCis8cHJlIGlkPSJy
ZXN1bHQiPjwvZGl2PgorCis8c2NyaXB0PgorZnVuY3Rpb24gYXhUcmVlKGVsdCkKK3sKKyAgICB2
YXIgcmVzdWx0ID0gZWx0LmFsbEF0dHJpYnV0ZXMoKSArICJcblxuIjsKKyAgICB2YXIgY291bnQg
PSBlbHQuY2hpbGRyZW5Db3VudDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgcmVzdWx0ICs9ICJDaGlsZCAiICsgaSArICI6XG4iICsgYXhUcmVlKGVsdC5j
aGlsZEF0SW5kZXgoaSkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpZiAod2lu
ZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgdmFyIHJlc3VsdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cGxhaW4iKS5mb2N1cygpOworICAgIHZhciBwbGFpblJlc3VsdCA9IGF4VHJlZShhY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudCk7CisgICAgcGxhaW5SZXN1bHQucmVwbGFjZSgv
QVhTaXplLipcbi9nLCAiIik7CisKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgid2l0aC1k
aXYiKS5mb2N1cygpOworICAgIHZhciB3aXRoRGl2UmVzdWx0ID0gYXhUcmVlKGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50KTsKKyAgICB3aXRoRGl2UmVzdWx0LnJlcGxhY2Uo
L0FYU2l6ZS4qXG4vZywgIiIpOworCisgICAgaWYgKHBsYWluUmVzdWx0ID09IHdpdGhEaXZSZXN1
bHQpIHsKKyAgICAgICAgcmVzdWx0LmlubmVySFRNTCA9ICJQQVNTOiBhY2Nlc3NpYmlsaXR5IHRy
ZWVzIHdlcmUgaWRlbnRpY2FsIG90aGVyIHRoYW4gc2l6ZS4iCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgcmVzdWx0LmlubmVySFRNTCA9ICJGQUlMOiBhY2Nlc3NpYmlsaXR5IHRyZWVzIGRpZmZlci5c
blBsYWluIGltYWdlIGxpbms6IFxuIiArIHBsYWluUmVzdWx0ICsgIlxuV2l0aCBwcmVzZW50YXRp
b24gZGl2OlxuIiArIHdpdGhEaXZSZXN1bHQ7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2JvZHk+
CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2ltYWdlLWxpbmsuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2ltYWdlLWxpbmsuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGluay5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxoZWFkPgorPHRpdGxl
PkltYWdlIGxpbmsgdGVzdDwvdGlsZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxoMj5JbWFnZSBsaW5rIGluIHRoZSBwcmVzZW5jZSBv
ZiBpbmxpbmUgY29udGludWF0aW9uczwvaDI+CisKKzxwPlRoaXMgdGVzdCBjaGVja3MgdGhhdCB0
aGUgcmlnaHQgYWNjZXNzaWJpbGl0eSB0cmVlIGlzIGdlbmVyYXRlZCBmb3IgYSBsaW5rIGluc2lk
ZSBhbiBpbWFnZTwvcD4KKworICA8YSBpZD0idGVzdCIgaHJlZj0iaHR0cDovL3d3dy53b3doZWFk
LmNvbS8/aXRlbT0zMzkyNCI+PGltZyBhbHQ9IkRlbGljaW91cyBjYWtlIiBzcmM9InJlc291cmNl
cy9jYWtlLnBuZyI+PC9hPgorCisgIDxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+CisKKzxzY3JpcHQ+
CitmdW5jdGlvbiBheFRyZWUoZWx0KQoreworICAgIHZhciByZXN1bHQgPSBlbHQuYWxsQXR0cmli
dXRlcygpICsgIlxuXG4iOworICAgIHZhciBjb3VudCA9IGVsdC5jaGlsZHJlbkNvdW50OworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICByZXN1bHQgKz0gIkNo
aWxkICIgKyBpICsgIjpcbiIgKyBheFRyZWUoZWx0LmNoaWxkQXRJbmRleChpKSk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIpIHsKKyAgICB2YXIgcmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIp
OworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0IikuZm9jdXMoKTsKKyAgICByZXN1
bHQuaW5uZXJUZXh0ICs9IGF4VHJlZShhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxl
bWVudCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvaW5saW5lLWNvbnRpbnVhdGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvaW5saW5lLWNvbnRpbnVhdGlvbnMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9pbmxpbmUtY29udGlu
dWF0aW9ucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK0lubGlu
ZSBjb250aW51YXRpb25zIC0gYWNjZXNzaWJpbGl0eSB0cmVlIGxpbmthZ2UKKworVGhpcyB0ZXN0
IGNoZWNrcyB0aGF0IHRoZSByaWdodCBhY2Nlc3NpYmlsaXR5IHRyZWUgaXMgZ2VuZXJhdGVkIGlu
IHRoZSBwcmVzZW5jZSBvZiBpbmxpbmUgY29udGludWF0aW9ucy4gRWFjaCBvZiB0aGUgZml2ZSBu
dW1iZXJzIGJlbG93IHNob3VsZCBiZSB2aXNpdGVkIG9ubHkgb25lcyB0cmF2ZXJzaW5nIHRoZSBh
Y2Nlc3NpYmlsaXR5IHRyZWUuCisKKzEKKzIKKzM0Cis1CitQQVNTIGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmZvY3VzZWRFbGVtZW50LmNoaWxkcmVuQ291bnQgaXMgNQorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvaW5saW5lLWNvbnRpbnVhdGlvbnMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lubGluZS1jb250aW51YXRpb25zLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2lubGluZS1jb250aW51YXRpb25zLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGhlYWQ+
Cis8dGl0bGU+SW5saW5lIGNvbnRpbnVhdGlvbnMgLSBhY2Nlc3NpYmlsaXR5IHRyZWUgbGlua2Fn
ZTwvdGlsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKK3Zh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
CisKKzxoMj5JbmxpbmUgY29udGludWF0aW9ucyAtIGFjY2Vzc2liaWxpdHkgdHJlZSBsaW5rYWdl
PC9oMj4KKworPHA+VGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSByaWdodCBhY2Nlc3NpYmlsaXR5
IHRyZWUgaXMgZ2VuZXJhdGVkIGluCisgICB0aGUgcHJlc2VuY2Ugb2YgaW5saW5lIGNvbnRpbnVh
dGlvbnMuIEVhY2ggb2YgdGhlIGZpdmUgbnVtYmVycworICAgYmVsb3cgc2hvdWxkIGJlIHZpc2l0
ZWQgb25seSBvbmVzIHRyYXZlcnNpbmcgdGhlIGFjY2Vzc2liaWxpdHkKKyAgIHRyZWUuPC9wPgor
Cis8ZGl2IGNvbnRlbnRFZGl0YWJsZT0idHJ1ZSIgaWQ9InRlc3QiPjxzcGFuPjE8ZGl2PjI8L2Rp
dj4zPC9zcGFuPjxzcGFuPjQ8L3NwYW4+PGRpdj41PC9kaXY+PC9kaXY+CisKKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZnVuY3Rpb24gbm9uR3JvdXBEZXNjZW5kYW50cyhl
bHQpCit7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIGNvdW50ID0gZWx0LmNoaWxkcmVu
Q291bnQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIHZh
ciBjaGlsZCA9IGVsdC5jaGlsZEF0SW5kZXgoaSk7CisJaWYgKCFjaGlsZC5yb2xlLm1hdGNoKC9n
cm91cC9pKSkKKyAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgcmVzdWx0ICs9IG5vbkdyb3Vw
RGVzY2VuZGFudHMoY2hpbGQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpZiAo
d2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgdmFyIHJlc3VsdCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgidGVzdCIpLmZvY3VzKCk7CisgICAgc2hvdWxkQmUoIm5vbkdyb3VwRGVzY2VuZGFudHMoYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQpIiwgIjUiKTsKKworICAgIC8vIFRo
aXMgc2hvdWxkIHBhc3MgKGFuZCBpcyBhIHNpbXBsZXIgdGVzdCB0aGFuIGFib3ZlKSBpZiBhbm9u
eW1vdXMgYmxvY2tzIHdlcmUgbm90IGluIHRoZSBBWCB0cmVlCisgICAgLy8gc2hvdWxkQmUoImFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50LmNoaWxkcmVuQ291bnQiLCAiNSIp
OworfQorCisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHJldmlzaW9uIDU3OTU5
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDggKzg0LDExIEBAIGFjY2Vzc2liaWxpdHkvYXJpYS1kZXNjcmliZWRieS1vbi1pbnB1dC4K
IGFjY2Vzc2liaWxpdHkvYXJpYS1sYWJlbGxlZGJ5LW9uLWlucHV0Lmh0bWwKIGFjY2Vzc2liaWxp
dHkvYXJpYS1yb2xlcy5odG1sCiBhY2Nlc3NpYmlsaXR5L2FyaWEtdGFibGVzLmh0bWwKK2FjY2Vz
c2liaWxpdHkvaW1hZ2UtbGluay5odG1sCithY2Nlc3NpYmlsaXR5L2ltYWdlLWxpbmstaW5saW5l
LWNvbnQuaHRtbAogYWNjZXNzaWJpbGl0eS9pbWFnZS1tYXAxLmh0bWwKIGFjY2Vzc2liaWxpdHkv
aW1hZ2UtbWFwMi5odG1sCithY2Nlc3NpYmlsaXR5L2lubGluZS1jb250aW51YXRpb25zLmh0bWwK
IGFjY2Vzc2liaWxpdHkvaW50ZXJuYWwtbGluay1hbmNob3JzMi5odG1sCiBhY2Nlc3NpYmlsaXR5
L2xhYmVsLWZvci1jb250cm9sLWhpdHRlc3QuaHRtbAogYWNjZXNzaWJpbGl0eS9sZWdlbmQuaHRt
bApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FjY2Vzc2liaWxpdHkvaW1hZ2UtbGlu
ay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Fj
Y2Vzc2liaWxpdHkvaW1hZ2UtbGluay1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9pbWFnZS1saW5rLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorSW1hZ2UgbGluayBpbiB0aGUgcHJlc2Vu
Y2Ugb2YgaW5saW5lIGNvbnRpbnVhdGlvbnMKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBy
aWdodCBhY2Nlc3NpYmlsaXR5IHRyZWUgaXMgZ2VuZXJhdGVkIGZvciBhIGxpbmsgaW5zaWRlIGFu
IGltYWdlCisKKworQVhSb2xlOiBBWExpbmsKK0FYU3Vicm9sZTogKG51bGwpCitBWFJvbGVEZXNj
cmlwdGlvbjogbGluaworQVhDaGlsZHJlbjogPGFycmF5IG9mIHNpemUgMT4KK0FYSGVscDogCitB
WFBhcmVudDogPEFYTGluaz4KK0FYU2l6ZTogTlNTaXplOiB7MjgwLCAyMTN9CitBWFRpdGxlOiAK
K0FYRGVzY3JpcHRpb246IAorQVhWYWx1ZTogCitBWEZvY3VzZWQ6IDEKK0FYRW5hYmxlZDogMQor
QVhXaW5kb3c6IDxBWExpbms+CitBWFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlOiAobnVsbCkKK0FY
U3RhcnRUZXh0TWFya2VyOiA8QVhMaW5rPgorQVhFbmRUZXh0TWFya2VyOiA8QVhMaW5rPgorQVhW
aXNpdGVkOiAwCitBWExpbmtlZFVJRWxlbWVudHM6IChudWxsKQorQVhTZWxlY3RlZDogMAorQVhC
bG9ja1F1b3RlTGV2ZWw6IDAKK0FYVG9wTGV2ZWxVSUVsZW1lbnQ6IDxBWExpbms+CitBWFVSTDog
aHR0cDovL3d3dy53b3doZWFkLmNvbS8/aXRlbT0zMzkyNAorQVhBY2Nlc3NLZXk6IChudWxsKQor
CisKK0NoaWxkIDA6CitBWFJvbGU6IEFYSW1hZ2UKK0FYU3Vicm9sZTogKG51bGwpCitBWFJvbGVE
ZXNjcmlwdGlvbjogaW1hZ2UKK0FYQ2hpbGRyZW46IDxhcnJheSBvZiBzaXplIDA+CitBWEhlbHA6
IAorQVhQYXJlbnQ6IDxBWEltYWdlPgorQVhTaXplOiBOU1NpemU6IHsyODAsIDIwOX0KK0FYVGl0
bGU6IAorQVhEZXNjcmlwdGlvbjogRGVsaWNpb3VzIGNha2UKK0FYVmFsdWU6IAorQVhGb2N1c2Vk
OiAwCitBWEVuYWJsZWQ6IDEKK0FYV2luZG93OiA8QVhJbWFnZT4KK0FYU2VsZWN0ZWRUZXh0TWFy
a2VyUmFuZ2U6IChudWxsKQorQVhTdGFydFRleHRNYXJrZXI6IDxBWEltYWdlPgorQVhFbmRUZXh0
TWFya2VyOiA8QVhJbWFnZT4KK0FYVmlzaXRlZDogMAorQVhMaW5rZWRVSUVsZW1lbnRzOiAobnVs
bCkKK0FYU2VsZWN0ZWQ6IDAKK0FYQmxvY2tRdW90ZUxldmVsOiAwCitBWFRvcExldmVsVUlFbGVt
ZW50OiA8QVhJbWFnZT4KK0FYVVJMOiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Jlc291cmNl
cy9jYWtlLnBuZworQVhBY2Nlc3NLZXk6IChudWxsKQorCisKKwpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL1NraXBwZWQJKHJldmlzaW9uIDU3OTU5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
L1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw2ICszOTIsNyBAQCBhY2Nlc3NpYmlsaXR5
L2RvY3VtZW50LWF0dHJpYnV0ZXMuaHRtbAogYWNjZXNzaWJpbGl0eS9lZGl0YWJsZS13ZWJhcmVh
LWNvbnRleHQtbWVudS1wb2ludC5odG1sCiBhY2Nlc3NpYmlsaXR5L2lmcmFtZS1iYXN0YXJkaXph
dGlvbi5odG1sCiBhY2Nlc3NpYmlsaXR5L2lnbm9yZS1zcGFjZXItZWxlbWVudHMuaHRtbAorYWNj
ZXNzaWJpbGl0eS9pbWFnZS1saW5rLmh0bWwKIGFjY2Vzc2liaWxpdHkvaW1hZ2UtbWFwMS5odG1s
CiBhY2Nlc3NpYmlsaXR5L2ltYWdlLW1hcDIuaHRtbAogYWNjZXNzaWJpbGl0eS9pbWctYXJpYS1i
dXR0b24tYWx0LXRhZy5odG1sCg==
</data>
<flag name="review"
          id="37908"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>