<?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>187824</bug_id>
          
          <creation_ts>2018-07-19 15:14:14 -0700</creation_ts>
          <short_desc>AX: Press tab to highlight items on a webpage is not working with voiceover enabled</short_desc>
          <delta_ts>2018-07-23 14:24:22 -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>Accessibility</component>
          <version>WebKit 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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dbates</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kangil.han</cc>
    
    <cc>n_wang</cc>
    
    <cc>rniwa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1443535</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2018-07-19 15:14:14 -0700</bug_when>
    <thetext>1.  Ensure that press tab to highlight items on a webpage is enabled (Safari&gt;preferences&gt;advanceed&gt;press-ta to highlight items on a webpage)
2. visit a website like:
http://www.apple.com, and attempt to press tab to move back and forth through various navigation elements on the webpage.
3.  Ensure this with voiceover enabled.
Expected: pressing tab would allow the cursor to highlight individual elements.
Actual, the cursor does not move.

&lt;rdar://problem/41448721&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443537</commentid>
    <comment_count>1</comment_count>
      <attachid>345390</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2018-07-19 15:21:32 -0700</bug_when>
    <thetext>Created attachment 345390
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443649</commentid>
    <comment_count>2</comment_count>
      <attachid>345390</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-07-19 19:02:28 -0700</bug_when>
    <thetext>Comment on attachment 345390
patch

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

&gt; Source/WebCore/dom/Document.cpp:1871
&gt; +            }

Any style mutation with an associated renderer will trigger a RenderElement::setStyle() call. Even mutations that don&apos;t need layout. Consulting StyleDifference in setStyle() might be a better way to get the AX cache updated.  
Also you may want to limit the performDeferredCacheUpdate() calls to focusable elements since calling AX cache on every repaint could be a performance hit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443674</commentid>
    <comment_count>3</comment_count>
      <attachid>345390</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2018-07-19 21:30:30 -0700</bug_when>
    <thetext>Comment on attachment 345390
patch

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

&gt;&gt; Source/WebCore/dom/Document.cpp:1871
&gt;&gt; +            }
&gt; 
&gt; Any style mutation with an associated renderer will trigger a RenderElement::setStyle() call. Even mutations that don&apos;t need layout. Consulting StyleDifference in setStyle() might be a better way to get the AX cache updated.  
&gt; Also you may want to limit the performDeferredCacheUpdate() calls to focusable elements since calling AX cache on every repaint could be a performance hit.

Here we are doing the AX cache update on the document level and it&apos;s under the styleUpdate check. Are you saying:
1. frameView.needsLayout() check is not enough, we should use the StyleDifference in renderElement?
2. We should move the AX cache update to a RenderElement level, so for each RenderElement we check and update the cache in setStyle()? I think performDeferredCacheUpdate() is designed as a batch update mechanism. We are calling that in FrameView performPostLayoutTasks(). So I&apos;m looking for some place similar, that indicates the FrameView;s style is resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443676</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-07-19 21:43:56 -0700</bug_when>
    <thetext>(In reply to Nan Wang from comment #3)
&gt; Comment on attachment 345390 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=345390&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/Document.cpp:1871
&gt; &gt;&gt; +            }
&gt; &gt; 
&gt; &gt; Any style mutation with an associated renderer will trigger a RenderElement::setStyle() call. Even mutations that don&apos;t need layout. Consulting StyleDifference in setStyle() might be a better way to get the AX cache updated.  
&gt; &gt; Also you may want to limit the performDeferredCacheUpdate() calls to focusable elements since calling AX cache on every repaint could be a performance hit.
&gt; 
&gt; Here we are doing the AX cache update on the document level and it&apos;s under
&gt; the styleUpdate check. Are you saying:
&gt; 1. frameView.needsLayout() check is not enough, we should use the
&gt; StyleDifference in renderElement?
&gt; 2. We should move the AX cache update to a RenderElement level, so for each
&gt; RenderElement we check and update the cache in setStyle()? I think
&gt; performDeferredCacheUpdate() is designed as a batch update mechanism. We are
&gt; calling that in FrameView performPostLayoutTasks(). So I&apos;m looking for some
&gt; place similar, that indicates the FrameView;s style is resolved.

Oh right, this is the &quot;perform&quot; and not the &quot;dirtying&quot; part. So who is dirtying the AX tree when non-layout type of mutation happens? I would assume that if AX tree sees that the mutation is not going to trigger layout, it could just issue a timer and update the tree in the next runloop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443681</commentid>
    <comment_count>5</comment_count>
      <attachid>345390</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2018-07-19 21:52:13 -0700</bug_when>
    <thetext>Comment on attachment 345390
patch

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

&gt;&gt;&gt;&gt; Source/WebCore/dom/Document.cpp:1871
&gt;&gt;&gt;&gt; +            }
&gt;&gt;&gt; 
&gt;&gt;&gt; Any style mutation with an associated renderer will trigger a RenderElement::setStyle() call. Even mutations that don&apos;t need layout. Consulting StyleDifference in setStyle() might be a better way to get the AX cache updated.  
&gt;&gt;&gt; Also you may want to limit the performDeferredCacheUpdate() calls to focusable elements since calling AX cache on every repaint could be a performance hit.
&gt;&gt; 
&gt;&gt; Here we are doing the AX cache update on the document level and it&apos;s under the styleUpdate check. Are you saying:
&gt;&gt; 1. frameView.needsLayout() check is not enough, we should use the StyleDifference in renderElement?
&gt;&gt; 2. We should move the AX cache update to a RenderElement level, so for each RenderElement we check and update the cache in setStyle()? I think performDeferredCacheUpdate() is designed as a batch update mechanism. We are calling that in FrameView performPostLayoutTasks(). So I&apos;m looking for some place similar, that indicates the FrameView;s style is resolved.
&gt; 
&gt; Oh right, this is the &quot;perform&quot; and not the &quot;dirtying&quot; part. So who is dirtying the AX tree when non-layout type of mutation happens? I would assume that if AX tree sees that the mutation is not going to trigger layout, it could just issue a timer and update the tree in the next runloop.

This one is triggered in Document::setFocusedElement()
if (!focusChangeBlocked &amp;&amp; m_focusedElement) {
    // Create the AXObject cache in a focus change because GTK relies on it.
    if (AXObjectCache* cache = axObjectCache()) 
        cache-&gt;deferFocusedUIElementChangeIfNeeded(oldFocusedElement.get(), newFocusedElement.get());
 }

Should we just do not defer in this case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1443692</commentid>
    <comment_count>6</comment_count>
      <attachid>345429</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2018-07-19 22:42:34 -0700</bug_when>
    <thetext>Created attachment 345429
patch

update from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444290</commentid>
    <comment_count>7</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2018-07-23 10:00:14 -0700</bug_when>
    <thetext>Zalan, can you take another look at my patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444296</commentid>
    <comment_count>8</comment_count>
      <attachid>345429</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-07-23 10:10:05 -0700</bug_when>
    <thetext>Comment on attachment 345429
patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        happens.

When the timer fires, you should check if there&apos;s a pending layout and let the layout trigger the AX update. This is for the cases when you have different type of mutations coming the same time with the focus change. 
1. focus change
2. focus change
3. tree mutation
4. some other style mutation
In this case your timer will fire before the layout timer and you should really just not do anything at this point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444315</commentid>
    <comment_count>9</comment_count>
      <attachid>345583</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2018-07-23 10:57:56 -0700</bug_when>
    <thetext>Created attachment 345583
patch

update from review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444396</commentid>
    <comment_count>10</comment_count>
      <attachid>345583</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-07-23 13:45:50 -0700</bug_when>
    <thetext>Comment on attachment 345583
patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2861
&gt; +    RefPtr&lt;FrameView&gt; frameView = document().view();
&gt; +    RenderView* renderView = document().renderView();
&gt; +    bool needsLayout = frameView &amp;&amp; renderView &amp;&amp; (frameView-&gt;layoutContext().isLayoutPending() || renderView-&gt;needsLayout());

if (!document().view() || document().view()-&gt;needsLayout())
    return;
This should do (when the tree is dirty there must be a pending layout scheduled).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1444414</commentid>
    <comment_count>11</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2018-07-23 14:24:22 -0700</bug_when>
    <thetext>Committed r234112: &lt;https://trac.webkit.org/changeset/234112&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345390</attachid>
            <date>2018-07-19 15:21:32 -0700</date>
            <delta_ts>2018-07-19 22:42:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4717</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNDAwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE4LTA3LTE5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFByZXNzIHRhYiB0byBoaWdobGln
aHQgaXRlbXMgb24gYSB3ZWJwYWdlIGlzIG5vdCB3b3JraW5nIHdpdGggdm9pY2VvdmVyIGVuYWJs
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Nzgy
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFy
ZSBkZWZlcnJpbmcgcG9zdGluZyBmb2N1c2VkIGVsZW1lbnQgY2hhbmdlIG5vdGlmaWNhdGlvbiB3
aGVuIHRoZSBkb2N1bWVudCBuZWVkcyBhCisgICAgICAgIHN0eWxlIHJlY2FsY3VsYXRpb24uIEhv
d2V2ZXIsIHdlIG9ubHkgcGVyZm9ybSB0aGUgY2FjaGUgdXBkYXRlIGFmdGVyIGEgbGF5b3V0IGlz
IGNvbXBsZXRlZC4KKyAgICAgICAgV2Ugc2hvdWxkIGFsc28gcGVyZm9ybSB0aGUgY2FjaGUgdXBk
YXRlIHdoZW4gYSBzdHlsZSBpcyByZXNvbHZlZCB3aXRob3V0IGRvaW5nIGEgcmVsYXlvdXQuCisK
KyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0
aW9uLmh0bWwKKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKwogMjAxOC0wNy0xOSAgQW50b2luZSBRdWludCAg
PGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAgICAgIEVuc3VyZSBEb2N1bWVudFRpbWVsaW5lIGlz
IGtlcHQgYWxpdmUgdW50aWwgdGhlIFZNOjp3aGVuSWRsZSBjYWxsYmFjayBpcyBjYWxsZWQKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjMzNjU3KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2NCw2ICsxODY0LDEx
IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc29sdmVTdHlsZShSZXNvbHZlU3R5bGUKICAgICAgICAgICAg
IHVwZGF0ZXIuY29tbWl0KFdURk1vdmUoc3R5bGVVcGRhdGUpKTsKIAogICAgICAgICAgICAgZnJh
bWVWaWV3LnN0eWxlRGlkQ2hhbmdlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
ZnJhbWVWaWV3Lm5lZWRzTGF5b3V0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogY2Fj
aGUgPSBleGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY2FjaGUt
PnBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICB1cGRhdGVkQ29tcG9zaXRpbmdMYXllcnMgPSBmcmFtZVZpZXcudXBkYXRlQ29t
cG9zaXRpbmdMYXllcnNBZnRlclN0eWxlQ2hhbmdlKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzM2
NTcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxOC0wNy0xOSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAg
IEFYOiBQcmVzcyB0YWIgdG8gaGlnaGxpZ2h0IGl0ZW1zIG9uIGEgd2VicGFnZSBpcyBub3Qgd29y
a2luZyB3aXRoIHZvaWNlb3ZlciBlbmFibGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODc4MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL3RhYi1mb2N1cy1wb3N0LW5v
dGlmaWNhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
bWFjL3RhYi1mb2N1cy1wb3N0LW5vdGlmaWNhdGlvbi5odG1sOiBBZGRlZC4KKwogMjAxOC0wNy0w
OSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgVGhpcyB0ZXN0
IGlzICpzdGlsbCogZmxha3kuIFRoaXMgdW5yZXZpZXdlZCBwYXRjaCBpcyBteSBhdHRlbXB0IHRv
IG1ha2UgaXQgbGVzcyBzby4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rh
Yi1mb2N1cy1wb3N0LW5vdGlmaWNhdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLWV4
cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90YWItZm9jdXMtcG9zdC1ub3RpZmljYXRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAgQEAKK1RoaXMgdGVzdHMgdGhhdCB0YWJiaW5nIGZvY3VzIG9udG8gZWxl
bWVudHMgd2lsbCBzZW5kIG91dCBub3RpZmljYXRpb25zCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIGNvdW50ID09IDAgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL3RhYi1mb2N1cy1wb3N0LW5vdGlmaWNhdGlvbi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RhYi1mb2N1cy1wb3N0LW5vdGlmaWNhdGlv
bi5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rh
Yi1mb2N1cy1wb3N0LW5vdGlmaWNhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYWNjZXNzaWJpbGl0
eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHN0eWxlPgorICAgIGEgeworICAgICAgb3V0bGluZS1v
ZmZzZXQ6IC0zcHg7CisgICAgfQorICAgIGE6Zm9jdXMgeworICAgICAgb3V0bGluZTogM3B4IHNv
bGlkIHJnYmEoMTMxLDE5MiwyNTMsMC41KTsKKyAgICB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHk+Cis8ZGl2IGlkPSJjb250ZW50Ij4KKzxidXR0b24gaWQ9ImJ1dHRvbiI+c3RhcnQ8L2J1dHRv
bj4KKzxhIGhyZWY9IiMiPkFwcGxlPC9hPgorPGEgaHJlZj0iIyI+T3JhbmdlPC9hPgorPGEgaHJl
Zj0iIyI+UGVhcjwvYT4KKzwvZGl2PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0IHRhYmJpbmcgZm9jdXMgb250byBlbGVtZW50
cyB3aWxsIHNlbmQgb3V0IG5vdGlmaWNhdGlvbnMiKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVy
ICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworCisgICAgdGVzdFJ1bm5lci5v
dmVycmlkZVByZWZlcmVuY2UoIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5IiwgMSk7Cisg
ICAgYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZW5hYmxlRW5oYW5jZWRBY2Nlc3NpYmlsaXR5KHRy
dWUpOworCisgICAgdmFyIGNvdW50ID0gMDsKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5h
ZGROb3RpZmljYXRpb25MaXN0ZW5lcihmdW5jdGlvbihlbGVtZW50LCBub3RpZmljYXRpb24pIHsK
KyAgICAgICAgaWYgKG5vdGlmaWNhdGlvbiAhPSAiQVhGb2N1c0NoYW5nZWQiKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjb3VudCsrOworICAgICAgICBpZiAoY291bnQgPT0gMykgewor
ICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICB9CisgICAgfSk7CisKKyAgICAvLyBU
YWIgMyB0aW1lcyB3ZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgc2FtZSBjb3VudCBvZiBub3RpZmlj
YWl0b25zCisgICAgc2hvdWxkQmVUcnVlKCJjb3VudCA9PSAwIik7CisgICAgZm9yICh2YXIgaSA9
IDE7IGkgPD0gMzsgaSsrKSAKKyAgICAgICAgZXZlbnRTZW5kZXIua2V5RG93bigiXHQiKTsKKwor
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iikuc3R5bGUudmlzaWJpbGl0eSA9
ICJoaWRkZW4iOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345429</attachid>
            <date>2018-07-19 22:42:34 -0700</date>
            <delta_ts>2018-07-23 10:57:56 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>8040</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNDAyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE4LTA3LTE5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFByZXNzIHRhYiB0byBoaWdobGln
aHQgaXRlbXMgb24gYSB3ZWJwYWdlIGlzIG5vdCB3b3JraW5nIHdpdGggdm9pY2VvdmVyIGVuYWJs
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Nzgy
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6
IGFjY2Vzc2liaWxpdHkvbWFjL3RhYi1mb2N1cy1wb3N0LW5vdGlmaWNhdGlvbi5odG1sCisKKyAg
ICAgICAgV2UgYXJlIGRlZmVycmluZyBwb3N0aW5nIGZvY3VzZWQgZWxlbWVudCBjaGFuZ2Ugbm90
aWZpY2F0aW9uIHdoZW4gdGhlIGRvY3VtZW50IG5lZWRzIGEKKyAgICAgICAgc3R5bGUgcmVjYWxj
dWxhdGlvbi4gSG93ZXZlciwgd2Ugb25seSBwZXJmb3JtIHRoZSBjYWNoZSB1cGRhdGUgYWZ0ZXIg
YSBsYXlvdXQgaXMgY29tcGxldGVkLgorICAgICAgICBBZGRlZCBhIHRpbWVyIHRvIHBlcmZvcm0g
dGhlIGNhY2hlIHVwZGF0ZSBpbiB0aGUgbmV4dCBydW5sb29wIHdoZW4gbm9uLWxheW91dCB0eXBl
IG9mIG11dGF0aW9uCisgICAgICAgIGhhcHBlbnMuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6QVhP
YmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp+QVhPYmplY3RD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpkZWZlckZvY3VzZWRVSUVs
ZW1lbnRDaGFuZ2VJZk5lZWRlZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpBWE9iamVjdENhY2hlKToK
KwogMjAxOC0wNy0xOSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAgICAg
ICAgIEZsYWt5IGNyYXNoIGluIEFuaW1hdGlvblRpbWVsaW5lOjpjYW5jZWxPclJlbW92ZURlY2xh
cmF0aXZlQW5pbWF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDIzMzY1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw2ICsy
MTAsNyBAQCBBWE9iamVjdENhY2hlOjpBWE9iamVjdENhY2hlKERvY3VtZW50JiBkCiAgICAgLCBt
X2xpdmVSZWdpb25DaGFuZ2VkUG9zdFRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6bGl2ZVJl
Z2lvbkNoYW5nZWROb3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCkKICAgICAsIG1fZm9jdXNNb2Rh
bE5vZGVUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6OmZvY3VzTW9kYWxOb2RlVGltZXJGaXJl
ZCkKICAgICAsIG1fY3VycmVudE1vZGFsTm9kZShudWxscHRyKQorICAgICwgbV9wZXJmb3JtQ2Fj
aGVVcGRhdGVUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hl
VXBkYXRlKQogewogICAgIGZpbmRNb2RhbE5vZGVzKCk7CiB9CkBAIC0yMTksNiArMjIwLDcgQEAg
QVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUoKQogICAgIG1fbm90aWZpY2F0aW9uUG9zdFRp
bWVyLnN0b3AoKTsKICAgICBtX2xpdmVSZWdpb25DaGFuZ2VkUG9zdFRpbWVyLnN0b3AoKTsKICAg
ICBtX2ZvY3VzTW9kYWxOb2RlVGltZXIuc3RvcCgpOworICAgIG1fcGVyZm9ybUNhY2hlVXBkYXRl
VGltZXIuc3RvcCgpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBvYmplY3QgOiBtX29iamVjdHMu
dmFsdWVzKCkpIHsKICAgICAgICAgZGV0YWNoV3JhcHBlcihvYmplY3QuZ2V0KCksIEFjY2Vzc2li
aWxpdHlEZXRhY2htZW50VHlwZTo6Q2FjaGVEZXN0cm95ZWQpOwpAQCAtMTAyMiw5ICsxMDI0LDEx
IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6aGFuZGxlTWVudUl0ZW1TZWxlY3QKICAgICAKIHZvaWQg
QVhPYmplY3RDYWNoZTo6ZGVmZXJGb2N1c2VkVUlFbGVtZW50Q2hhbmdlSWZOZWVkZWQoTm9kZSog
b2xkTm9kZSwgTm9kZSogbmV3Tm9kZSkKIHsKLSAgICBpZiAobm9kZUFuZFJlbmRlcmVyQXJlVmFs
aWQobmV3Tm9kZSkgJiYgcmVuZGVyZXJOZWVkc0RlZmVycmVkVXBkYXRlKCpuZXdOb2RlLT5yZW5k
ZXJlcigpKSkKKyAgICBpZiAobm9kZUFuZFJlbmRlcmVyQXJlVmFsaWQobmV3Tm9kZSkgJiYgcmVu
ZGVyZXJOZWVkc0RlZmVycmVkVXBkYXRlKCpuZXdOb2RlLT5yZW5kZXJlcigpKSkgewogICAgICAg
ICBtX2RlZmVycmVkRm9jdXNlZE5vZGVDaGFuZ2UuYXBwZW5kKHsgb2xkTm9kZSwgbmV3Tm9kZSB9
KTsKLSAgICBlbHNlCisgICAgICAgIGlmICghbmV3Tm9kZS0+cmVuZGVyZXIoKS0+bmVlZHNMYXlv
dXQoKSAmJiAhbV9wZXJmb3JtQ2FjaGVVcGRhdGVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAg
ICAgbV9wZXJmb3JtQ2FjaGVVcGRhdGVUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKKyAgICB9IGVs
c2UKICAgICAgICAgaGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQob2xkTm9kZSwgbmV3Tm9k
ZSk7CiB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuaAkocmV2aXNpb24gMjMzNjU3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Myw2ICs0NDMsOCBAQCBw
cml2YXRlOgogICAgIFRpbWVyIG1fZm9jdXNNb2RhbE5vZGVUaW1lcjsKICAgICBOb2RlKiBtX2N1
cnJlbnRNb2RhbE5vZGU7CiAgICAgTGlzdEhhc2hTZXQ8Tm9kZSo+IG1fbW9kYWxOb2Rlc1NldDsK
KyAgICAKKyAgICBUaW1lciBtX3BlcmZvcm1DYWNoZVVwZGF0ZVRpbWVyOwogCiAgICAgQVhUZXh0
U3RhdGVDaGFuZ2VJbnRlbnQgbV90ZXh0U2VsZWN0aW9uSW50ZW50OwogICAgIExpc3RIYXNoU2V0
PEVsZW1lbnQqPiBtX2RlZmVycmVkUmVjb21wdXRlSXNJZ25vcmVkTGlzdDsKQEAgLTQ3Niw3ICs0
NzgsNyBAQCBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBWENvCiBpbmxpbmUg
QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dDo6QWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4dChjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJikgeyB9CiBpbmxpbmUgdm9pZCBBY2Nlc3NpYmlsaXR5UmVwbGFj
ZWRUZXh0Ojpwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uKEFYT2JqZWN0Q2FjaGUqLCBB
WFRleHRFZGl0VHlwZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIHsg
fQogaW5saW5lIHZvaWQgQVhDb21wdXRlZE9iamVjdEF0dHJpYnV0ZUNhY2hlOjpzZXRJZ25vcmVk
KEFYSUQsIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24pIHsgfQotaW5saW5lIEFYT2JqZWN0
Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoRG9jdW1lbnQmIGRvY3VtZW50KSA6IG1fZG9jdW1lbnQoZG9j
dW1lbnQpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6Om5v
dGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKSwgbV9wYXNzd29yZE5vdGlmaWNhdGlvblBvc3RUaW1l
cigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6OnBhc3N3b3JkTm90aWZpY2F0aW9uUG9zdFRpbWVyRmly
ZWQpLCBtX2xpdmVSZWdpb25DaGFuZ2VkUG9zdFRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6
bGl2ZVJlZ2lvbkNoYW5nZWROb3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCksIG1fZm9jdXNNb2Rh
bE5vZGVUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6OmZvY3VzTW9kYWxOb2RlVGltZXJGaXJl
ZCkgeyB9CitpbmxpbmUgQVhPYmplY3RDYWNoZTo6QVhPYmplY3RDYWNoZShEb2N1bWVudCYgZG9j
dW1lbnQpIDogbV9kb2N1bWVudChkb2N1bWVudCksIG1fbm90aWZpY2F0aW9uUG9zdFRpbWVyKCp0
aGlzLCAmQVhPYmplY3RDYWNoZTo6bm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQpLCBtX3Bhc3N3
b3JkTm90aWZpY2F0aW9uUG9zdFRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6cGFzc3dvcmRO
b3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCksIG1fbGl2ZVJlZ2lvbkNoYW5nZWRQb3N0VGltZXIo
KnRoaXMsICZBWE9iamVjdENhY2hlOjpsaXZlUmVnaW9uQ2hhbmdlZE5vdGlmaWNhdGlvblBvc3RU
aW1lckZpcmVkKSwgbV9mb2N1c01vZGFsTm9kZVRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6
Zm9jdXNNb2RhbE5vZGVUaW1lckZpcmVkLCBtX3BlcmZvcm1DYWNoZVVwZGF0ZVRpbWVyKCp0aGlz
LCAmQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUpKSB7IH0KIGlubGlu
ZSBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQogaW5saW5lIEFjY2Vzc2liaWxp
dHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBh
Z2UqKSB7IHJldHVybiBudWxscHRyOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhP
YmplY3RDYWNoZTo6Z2V0KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIG51bGxwdHI7IH0KSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIzMzY1NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE4LTA3LTE5ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQVg6IFByZXNzIHRhYiB0byBoaWdobGlnaHQgaXRlbXMgb24gYSB3
ZWJwYWdlIGlzIG5vdCB3b3JraW5nIHdpdGggdm9pY2VvdmVyIGVuYWJsZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzgyNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
dGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLmh0bWw6IEFk
ZGVkLgorCiAyMDE4LTA3LTA5ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBUaGlzIHRlc3QgaXMgKnN0aWxsKiBmbGFreS4gVGhpcyB1bnJldmlld2VkIHBhdGNo
IGlzIG15IGF0dGVtcHQgdG8gbWFrZSBpdCBsZXNzIHNvLgpJbmRleDogTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90YWItZm9jdXMtcG9z
dC1ub3RpZmljYXRpb24tZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL3RhYi1mb2N1cy1wb3N0LW5vdGlmaWNhdGlvbi1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorVGhpcyB0ZXN0cyB0aGF0IHRhYmJp
bmcgZm9jdXMgb250byBlbGVtZW50cyB3aWxsIHNlbmQgb3V0IG5vdGlmaWNhdGlvbnMKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgY291bnQgPT0gMCBpcyB0cnVlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3Vz
LXBvc3Qtbm90aWZpY2F0aW9uLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+CisgICAgYSB7
CisgICAgICBvdXRsaW5lLW9mZnNldDogLTNweDsKKyAgICB9CisgICAgYTpmb2N1cyB7CisgICAg
ICBvdXRsaW5lOiAzcHggc29saWQgcmdiYSgxMzEsMTkyLDI1MywwLjUpOworICAgIH0KKzwvc3R5
bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImNvbnRlbnQiPgorPGJ1dHRvbiBpZD0iYnV0
dG9uIj5zdGFydDwvYnV0dG9uPgorPGEgaHJlZj0iIyI+QXBwbGU8L2E+Cis8YSBocmVmPSIjIj5P
cmFuZ2U8L2E+Cis8YSBocmVmPSIjIj5QZWFyPC9hPgorPC9kaXY+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3dpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgdGFiYmluZyBm
b2N1cyBvbnRvIGVsZW1lbnRzIHdpbGwgc2VuZCBvdXQgbm90aWZpY2F0aW9ucyIpOworCitpZiAo
d2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisK
KyAgICB0ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0VGFiVG9MaW5rc1ByZWZl
cmVuY2VLZXkiLCAxKTsKKyAgICBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5lbmFibGVFbmhhbmNl
ZEFjY2Vzc2liaWxpdHkodHJ1ZSk7CisKKyAgICB2YXIgY291bnQgPSAwOworICAgIGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKGZ1bmN0aW9uKGVsZW1lbnQs
IG5vdGlmaWNhdGlvbikgeworICAgICAgICBpZiAobm90aWZpY2F0aW9uICE9ICJBWEZvY3VzQ2hh
bmdlZCIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGlm
IChjb3VudCA9PSAzKSB7CisgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIC8vIFRhYiAzIHRpbWVzIHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzYW1l
IGNvdW50IG9mIG5vdGlmaWNhaXRvbnMKKyAgICBzaG91bGRCZVRydWUoImNvdW50ID09IDAiKTsK
KyAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAzOyBpKyspIAorICAgICAgICBldmVudFNlbmRlci5r
ZXlEb3duKCJcdCIpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKS5z
dHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>345583</attachid>
            <date>2018-07-23 10:57:56 -0700</date>
            <delta_ts>2018-07-23 13:45:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>9843</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNDEwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE4LTA3LTIzICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFByZXNzIHRhYiB0byBoaWdobGln
aHQgaXRlbXMgb24gYSB3ZWJwYWdlIGlzIG5vdCB3b3JraW5nIHdpdGggdm9pY2VvdmVyIGVuYWJs
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Nzgy
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGFy
ZSBkZWZlcnJpbmcgcG9zdGluZyBmb2N1c2VkIGVsZW1lbnQgY2hhbmdlIG5vdGlmaWNhdGlvbiB3
aGVuIHRoZSBkb2N1bWVudCBuZWVkcyBhCisgICAgICAgIHN0eWxlIHJlY2FsY3VsYXRpb24uIEhv
d2V2ZXIsIHdlIG9ubHkgcGVyZm9ybSB0aGUgY2FjaGUgdXBkYXRlIGFmdGVyIGEgbGF5b3V0IGlz
IGNvbXBsZXRlZC4KKyAgICAgICAgQWRkZWQgYSB0aW1lciB0byBwZXJmb3JtIHRoZSBjYWNoZSB1
cGRhdGUgaW4gdGhlIG5leHQgcnVubG9vcCB3aGVuIG5vbi1sYXlvdXQgdHlwZSBvZiBtdXRhdGlv
bgorICAgICAgICBoYXBwZW5zLgorICAgICAgICAKKyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0
eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLmh0bWwKKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpBWE9iamVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6On5B
WE9iamVjdENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmRlZmVyRm9j
dXNlZFVJRWxlbWVudENoYW5nZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnBlcmZvcm1DYWNoZVVwZGF0ZVRpbWVyRmlyZWQpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
QVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwZXJmb3Jt
Q2FjaGVVcGRhdGVUaW1lckZpcmVkKToKKwogMjAxOC0wNy0yMiAgRGVhbiBKYWNrc29uICA8ZGlu
b0BhcHBsZS5jb20+CiAKICAgICAgICAgZnVsbHNjcmVlbiBlbnYoKSB2YXJpYWJsZXMgc2hvdWxk
IGhhdmUgaW5pdGlhbCB2YWx1ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMjMzNjU3KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEw
LDYgKzIxMCw3IEBAIEFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoRG9jdW1lbnQmIGQKICAg
ICAsIG1fbGl2ZVJlZ2lvbkNoYW5nZWRQb3N0VGltZXIoKnRoaXMsICZBWE9iamVjdENhY2hlOjps
aXZlUmVnaW9uQ2hhbmdlZE5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKQogICAgICwgbV9mb2N1
c01vZGFsTm9kZVRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6Zm9jdXNNb2RhbE5vZGVUaW1l
ckZpcmVkKQogICAgICwgbV9jdXJyZW50TW9kYWxOb2RlKG51bGxwdHIpCisgICAgLCBtX3BlcmZv
cm1DYWNoZVVwZGF0ZVRpbWVyKCp0aGlzLCAmQVhPYmplY3RDYWNoZTo6cGVyZm9ybUNhY2hlVXBk
YXRlVGltZXJGaXJlZCkKIHsKICAgICBmaW5kTW9kYWxOb2RlcygpOwogfQpAQCAtMjE5LDYgKzIy
MCw3IEBAIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hlKCkKICAgICBtX25vdGlmaWNhdGlv
blBvc3RUaW1lci5zdG9wKCk7CiAgICAgbV9saXZlUmVnaW9uQ2hhbmdlZFBvc3RUaW1lci5zdG9w
KCk7CiAgICAgbV9mb2N1c01vZGFsTm9kZVRpbWVyLnN0b3AoKTsKKyAgICBtX3BlcmZvcm1DYWNo
ZVVwZGF0ZVRpbWVyLnN0b3AoKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgb2JqZWN0IDogbV9v
YmplY3RzLnZhbHVlcygpKSB7CiAgICAgICAgIGRldGFjaFdyYXBwZXIob2JqZWN0LmdldCgpLCBB
Y2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkNhY2hlRGVzdHJveWVkKTsKQEAgLTEwMjIsOSAr
MTAyNCwxMSBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZU1lbnVJdGVtU2VsZWN0CiAgICAg
CiB2b2lkIEFYT2JqZWN0Q2FjaGU6OmRlZmVyRm9jdXNlZFVJRWxlbWVudENoYW5nZUlmTmVlZGVk
KE5vZGUqIG9sZE5vZGUsIE5vZGUqIG5ld05vZGUpCiB7Ci0gICAgaWYgKG5vZGVBbmRSZW5kZXJl
ckFyZVZhbGlkKG5ld05vZGUpICYmIHJlbmRlcmVyTmVlZHNEZWZlcnJlZFVwZGF0ZSgqbmV3Tm9k
ZS0+cmVuZGVyZXIoKSkpCisgICAgaWYgKG5vZGVBbmRSZW5kZXJlckFyZVZhbGlkKG5ld05vZGUp
ICYmIHJlbmRlcmVyTmVlZHNEZWZlcnJlZFVwZGF0ZSgqbmV3Tm9kZS0+cmVuZGVyZXIoKSkpIHsK
ICAgICAgICAgbV9kZWZlcnJlZEZvY3VzZWROb2RlQ2hhbmdlLmFwcGVuZCh7IG9sZE5vZGUsIG5l
d05vZGUgfSk7Ci0gICAgZWxzZQorICAgICAgICBpZiAoIW5ld05vZGUtPnJlbmRlcmVyKCktPm5l
ZWRzTGF5b3V0KCkgJiYgIW1fcGVyZm9ybUNhY2hlVXBkYXRlVGltZXIuaXNBY3RpdmUoKSkKKyAg
ICAgICAgICAgIG1fcGVyZm9ybUNhY2hlVXBkYXRlVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cisg
ICAgfSBlbHNlCiAgICAgICAgIGhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKG9sZE5vZGUs
IG5ld05vZGUpOwogfQogICAgIApAQCAtMjg0OCw2ICsyODUyLDE4IEBAIGJvb2wgQVhPYmplY3RD
YWNoZTo6bm9kZUlzVGV4dENvbnRyb2woY28KICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBheE9iamVjdCA9IGdldE9yQ3JlYXRlKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKICAgICBy
ZXR1cm4gYXhPYmplY3QgJiYgYXhPYmplY3QtPmlzVGV4dENvbnRyb2woKTsKIH0KKwordm9pZCBB
WE9iamVjdENhY2hlOjpwZXJmb3JtQ2FjaGVVcGRhdGVUaW1lckZpcmVkKCkKK3sKKyAgICAvLyBJ
ZiB0aGVyZSdzIGEgcGVuZGluZyBsYXlvdXQsIGxldCB0aGUgbGF5b3V0IHRyaWdnZXIgdGhlIEFY
IHVwZGF0ZS4KKyAgICBSZWZQdHI8RnJhbWVWaWV3PiBmcmFtZVZpZXcgPSBkb2N1bWVudCgpLnZp
ZXcoKTsKKyAgICBSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZG9jdW1lbnQoKS5yZW5kZXJWaWV3
KCk7CisgICAgYm9vbCBuZWVkc0xheW91dCA9IGZyYW1lVmlldyAmJiByZW5kZXJWaWV3ICYmIChm
cmFtZVZpZXctPmxheW91dENvbnRleHQoKS5pc0xheW91dFBlbmRpbmcoKSB8fCByZW5kZXJWaWV3
LT5uZWVkc0xheW91dCgpKTsKKyAgICBpZiAobmVlZHNMYXlvdXQpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpOworfQogICAgIAogdm9pZCBB
WE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjMz
NjU3KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5Miw2ICszOTIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbGl2ZVJl
Z2lvbkNoYW5nZWROb3RpZmljYXRpb25Qb3N0VGltZXJGaXJlZCgpOwogICAgIAogICAgIHZvaWQg
Zm9jdXNNb2RhbE5vZGVUaW1lckZpcmVkKCk7CisgICAgCisgICAgdm9pZCBwZXJmb3JtQ2FjaGVV
cGRhdGVUaW1lckZpcmVkKCk7CiAKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmlj
YXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IEFYVGV4dFN0YXRlQ2hhbmdlSW50ZW50
JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCkBAIC00NDMsNiArNDQ1LDggQEAgcHJpdmF0
ZToKICAgICBUaW1lciBtX2ZvY3VzTW9kYWxOb2RlVGltZXI7CiAgICAgTm9kZSogbV9jdXJyZW50
TW9kYWxOb2RlOwogICAgIExpc3RIYXNoU2V0PE5vZGUqPiBtX21vZGFsTm9kZXNTZXQ7CisgICAg
CisgICAgVGltZXIgbV9wZXJmb3JtQ2FjaGVVcGRhdGVUaW1lcjsKIAogICAgIEFYVGV4dFN0YXRl
Q2hhbmdlSW50ZW50IG1fdGV4dFNlbGVjdGlvbkludGVudDsKICAgICBMaXN0SGFzaFNldDxFbGVt
ZW50Kj4gbV9kZWZlcnJlZFJlY29tcHV0ZUlzSWdub3JlZExpc3Q7CkBAIC00NzYsNyArNDgwLDcg
QEAgaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb24gQVhDbwogaW5saW5lIEFjY2Vz
c2liaWxpdHlSZXBsYWNlZFRleHQ6OkFjY2Vzc2liaWxpdHlSZXBsYWNlZFRleHQoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYpIHsgfQogaW5saW5lIHZvaWQgQWNjZXNzaWJpbGl0eVJlcGxhY2VkVGV4
dDo6cG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihBWE9iamVjdENhY2hlKiwgQVhUZXh0
RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSB7IH0KIGlu
bGluZSB2b2lkIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZTo6c2V0SWdub3JlZChBWElE
LCBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uKSB7IH0KLWlubGluZSBBWE9iamVjdENhY2hl
OjpBWE9iamVjdENhY2hlKERvY3VtZW50JiBkb2N1bWVudCkgOiBtX2RvY3VtZW50KGRvY3VtZW50
KSwgbV9ub3RpZmljYXRpb25Qb3N0VGltZXIoKnRoaXMsICZBWE9iamVjdENhY2hlOjpub3RpZmlj
YXRpb25Qb3N0VGltZXJGaXJlZCksIG1fcGFzc3dvcmROb3RpZmljYXRpb25Qb3N0VGltZXIoKnRo
aXMsICZBWE9iamVjdENhY2hlOjpwYXNzd29yZE5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKSwg
bV9saXZlUmVnaW9uQ2hhbmdlZFBvc3RUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6OmxpdmVS
ZWdpb25DaGFuZ2VkTm90aWZpY2F0aW9uUG9zdFRpbWVyRmlyZWQpLCBtX2ZvY3VzTW9kYWxOb2Rl
VGltZXIoKnRoaXMsICZBWE9iamVjdENhY2hlOjpmb2N1c01vZGFsTm9kZVRpbWVyRmlyZWQpIHsg
fQoraW5saW5lIEFYT2JqZWN0Q2FjaGU6OkFYT2JqZWN0Q2FjaGUoRG9jdW1lbnQmIGRvY3VtZW50
KSA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpLCBtX25vdGlmaWNhdGlvblBvc3RUaW1lcigqdGhpcywg
JkFYT2JqZWN0Q2FjaGU6Om5vdGlmaWNhdGlvblBvc3RUaW1lckZpcmVkKSwgbV9wYXNzd29yZE5v
dGlmaWNhdGlvblBvc3RUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6OnBhc3N3b3JkTm90aWZp
Y2F0aW9uUG9zdFRpbWVyRmlyZWQpLCBtX2xpdmVSZWdpb25DaGFuZ2VkUG9zdFRpbWVyKCp0aGlz
LCAmQVhPYmplY3RDYWNoZTo6bGl2ZVJlZ2lvbkNoYW5nZWROb3RpZmljYXRpb25Qb3N0VGltZXJG
aXJlZCksIG1fZm9jdXNNb2RhbE5vZGVUaW1lcigqdGhpcywgJkFYT2JqZWN0Q2FjaGU6OmZvY3Vz
TW9kYWxOb2RlVGltZXJGaXJlZCwgbV9wZXJmb3JtQ2FjaGVVcGRhdGVUaW1lcigqdGhpcywgJkFY
T2JqZWN0Q2FjaGU6OnBlcmZvcm1DYWNoZVVwZGF0ZVRpbWVyRmlyZWQpKSB7IH0KIGlubGluZSBB
WE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2Uq
KSB7IHJldHVybiBudWxscHRyOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmpl
Y3RDYWNoZTo6Z2V0KFJlbmRlck9iamVjdCopIHsgcmV0dXJuIG51bGxwdHI7IH0KQEAgLTUwNyw2
ICs1MTEsNyBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZWZlclNlbGVjdGVkCiBpbmxp
bmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZWZlclRleHRSZXBsYWNlbWVudE5vdGlmaWNhdGlvbkZv
clRleHRDb250cm9sKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50JiwgY29uc3QgU3RyaW5nJikg
eyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpkZXRhY2hXcmFwcGVyKEFjY2Vzc2liaWxp
dHlPYmplY3QqLCBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpIHsgfQogaW5saW5lIHZvaWQg
QVhPYmplY3RDYWNoZTo6Zm9jdXNNb2RhbE5vZGVUaW1lckZpcmVkKCkgeyB9CitpbmxpbmUgdm9p
ZCBBWE9iamVjdENhY2hlOjpwZXJmb3JtQ2FjaGVVcGRhdGVUaW1lckZpcmVkKCkgeyB9CiBpbmxp
bmUgdm9pZCBBWE9iamVjdENhY2hlOjpmcmFtZUxvYWRpbmdFdmVudE5vdGlmaWNhdGlvbihGcmFt
ZSosIEFYTG9hZGluZ0V2ZW50KSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1l
TG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIEFY
TG9hZGluZ0V2ZW50KSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZUFjdGl2
ZURlc2NlbmRhbnRDaGFuZ2VkKE5vZGUqKSB7IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMzY1NykK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDE4LTA3LTIzICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6
IFByZXNzIHRhYiB0byBoaWdobGlnaHQgaXRlbXMgb24gYSB3ZWJwYWdlIGlzIG5vdCB3b3JraW5n
IHdpdGggdm9pY2VvdmVyIGVuYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4NzgyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZp
Y2F0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
dGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDE4LTA3LTA5ICBC
cmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBUaGlzIHRlc3QgaXMg
KnN0aWxsKiBmbGFreS4gVGhpcyB1bnJldmlld2VkIHBhdGNoIGlzIG15IGF0dGVtcHQgdG8gbWFr
ZSBpdCBsZXNzIHNvLgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZv
Y3VzLXBvc3Qtbm90aWZpY2F0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90YWItZm9jdXMtcG9zdC1ub3RpZmljYXRpb24tZXhwZWN0
ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3Rh
Yi1mb2N1cy1wb3N0LW5vdGlmaWNhdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorVGhpcyB0ZXN0cyB0aGF0IHRhYmJpbmcgZm9jdXMgb250byBlbGVtZW50
cyB3aWxsIHNlbmQgb3V0IG5vdGlmaWNhdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgY291bnQgPT0gMCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZvY3VzLXBvc3Qtbm90aWZpY2F0aW9uLmh0
bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGFiLWZv
Y3VzLXBvc3Qtbm90aWZpY2F0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhl
bHBlci5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+CisgICAgYSB7CisgICAgICBvdXRsaW5lLW9mZnNl
dDogLTNweDsKKyAgICB9CisgICAgYTpmb2N1cyB7CisgICAgICBvdXRsaW5lOiAzcHggc29saWQg
cmdiYSgxMzEsMTkyLDI1MywwLjUpOworICAgIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgaWQ9ImNvbnRlbnQiPgorPGJ1dHRvbiBpZD0iYnV0dG9uIj5zdGFydDwvYnV0dG9uPgor
PGEgaHJlZj0iIyI+QXBwbGU8L2E+Cis8YSBocmVmPSIjIj5PcmFuZ2U8L2E+Cis8YSBocmVmPSIj
Ij5QZWFyPC9hPgorPC9kaXY+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK2Rl
c2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgdGFiYmluZyBmb2N1cyBvbnRvIGVsZW1lbnRzIHdp
bGwgc2VuZCBvdXQgbm90aWZpY2F0aW9ucyIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIgJiYg
d2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisKKyAgICB0ZXN0UnVubmVyLm92ZXJy
aWRlUHJlZmVyZW5jZSgiV2ViS2l0VGFiVG9MaW5rc1ByZWZlcmVuY2VLZXkiLCAxKTsKKyAgICBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5lbmFibGVFbmhhbmNlZEFjY2Vzc2liaWxpdHkodHJ1ZSk7
CisKKyAgICB2YXIgY291bnQgPSAwOworICAgIGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFkZE5v
dGlmaWNhdGlvbkxpc3RlbmVyKGZ1bmN0aW9uKGVsZW1lbnQsIG5vdGlmaWNhdGlvbikgeworICAg
ICAgICBpZiAobm90aWZpY2F0aW9uICE9ICJBWEZvY3VzQ2hhbmdlZCIpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIGlmIChjb3VudCA9PSAzKSB7CisgICAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIC8vIFRhYiAz
IHRpbWVzIHdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCBzYW1lIGNvdW50IG9mIG5vdGlmaWNhaXRv
bnMKKyAgICBzaG91bGRCZVRydWUoImNvdW50ID09IDAiKTsKKyAgICBmb3IgKHZhciBpID0gMTsg
aSA8PSAzOyBpKyspIAorICAgICAgICBldmVudFNlbmRlci5rZXlEb3duKCJcdCIpOworCisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRlbnQiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhp
ZGRlbiI7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="363508"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>