<?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>73688</bug_id>
          
          <creation_ts>2011-12-02 13:32:21 -0800</creation_ts>
          <short_desc>REGRESSION (r91738): didFinishLoad is called before custom fonts have finished loading</short_desc>
          <delta_ts>2012-02-01 12:50:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>joepeck</cc>
    
    <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>514065</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-12-02 13:32:21 -0800</bug_when>
    <thetext>After &lt;http://trac.webkit.org/r91738&gt;, when loading a document which uses custom fonts, WebKit often makes the didFinishLoad callback before the custom fonts have finished loading. Prior to that change, any font needed to render the document would have finished loading by the time didFinishLoad was called. Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514066</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-12-02 13:32:52 -0800</bug_when>
    <thetext>&lt;rdar://problem/10520670&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514099</commentid>
    <comment_count>2</comment_count>
      <attachid>117684</attachid>
    <who name="">mitz</who>
    <bug_when>2011-12-02 13:56:49 -0800</bug_when>
    <thetext>Created attachment 117684
Ensure that font loads that are waiting to begin prevent didFinishLoad from being called</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514141</commentid>
    <comment_count>3</comment_count>
      <attachid>117684</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-02 14:18:14 -0800</bug_when>
    <thetext>Comment on attachment 117684
Ensure that font loads that are waiting to begin prevent didFinishLoad from being called

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

&gt; Source/WebCore/css/CSSFontSelector.cpp:583
&gt; +    if (!m_fontsToBeginLoading.isEmpty()) {

Do we really need this optimization? It seems to me that the code inside this if would do nothing relatively quickly.

&gt; Source/WebCore/css/CSSFontSelector.cpp:607
&gt; +    // Increment the request count now, in order to prevent didFinishLoad from being dispatched
&gt; +    // after this font has been requested but before it began loading. Balanced by
&gt; +    // decrementRequestCount() in beginLoadTimerFired() and in clearDocument().
&gt; +    m_document-&gt;cachedResourceLoader()-&gt;incrementRequestCount(font);

Another way to do this is to create a type that does the increment/decrement and holds a CachedResourceHandle&lt;CachedFont&gt; inside it, then use that type in the vector. A little more foolproof than having the explicit code in three places, but not sure it’s better. It would completely eliminate the loop in CSSFontSelector::clearDocument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514190</commentid>
    <comment_count>4</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-12-02 14:50:50 -0800</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/r101858&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524479</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-20 01:38:05 -0800</bug_when>
    <thetext>Hm, I think this is causing regressions.
On a local SL build of ToT, svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg occasionally hangs (among dozens of other tests using SVG Fonts). If you open this file in Safari, the activity button will never stop spinning, despite the fact that &quot;Activities&quot; shows that the SVG Font has been loaded successfully.

I have not yet built with this patch rolled out, but I suspect its causing these problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524480</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-20 01:41:41 -0800</bug_when>
    <thetext>Note that this doesn&apos;t reproduce everytime in Safari as well. For me in about 30% of all loads of that page, it doesn&apos;t stop showing the spinning wheel in the tab bar/adress bar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524508</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-12-20 02:56:33 -0800</bug_when>
    <thetext>Some more traces:

I ran gdb DumpRenderTree LayoutTests/svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg, and set a breakpoint on FrameLoader::checkCompleted(). Its called three times, each time returning false, as &quot;m_frame-&gt;document()-&gt;cachedResourceLoader()-&gt;requestCount()&quot; is &gt; 0. (Here its 8).

This is the backtrace of the last, the third call to checkCompleted:


(gdb) bt
#0  WebCore::FrameLoader::checkCompleted (this=0x1088286d8) at /Users/nikolaszimmermann/Coding/WebKit/Source/WebCore/loader/FrameLoader.cpp:710
#1  0x000000010193e06b in WebCore::FrameLoader::loadDone (this=0x1088286d8) at /Users/nikolaszimmermann/Coding/WebKit/Source/WebCore/loader/FrameLoader.cpp:687
#2  0x0000000101492bea in WebCore::CachedResourceLoader::loadDone (this=0x107c82af0) at /Users/nikolaszimmermann/Coding/WebKit/Source/WebCore/loader/cache/CachedResourceLoader.cpp:658
#3  0x0000000102339fa1 in WebCore::SubresourceLoader::releaseResources (this=0x108891e00) at /Users/nikolaszimmermann/Coding/WebKit/Source/WebCore/loader/SubresourceLoader.cpp:302
#4  0x000000010225f231 in WebCore::ResourceLoader::didFinishLoading (this=0x108891e00, finishTime=0) at /Users/nikolaszimmermann/Coding/WebKit/Source/WebCore/loader/ResourceLoader.cpp:313
#5  0x000000010233a552 in WebCore::SubresourceLoader::didFinishLoading (this=0x108891e00, finishTime=0) at /Users/nikolaszimmermann/Coding/WebKit/Source/WebCore/loader/SubresourceLoader.cpp:261
#6  0x000000010225e612 in WebCore::ResourceLoader::didFinishLoading (this=0x108891e00, finishTime=0) at /Users/nikolaszimmermann/Coding/WebKit/Source/WebCore/loader/ResourceLoader.cpp:451
#7  0x00000001022593e6 in -[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:] (self=0x107ca7e30, _cmd=0x7fff89a92d20, connection=0x107ca79b0) at /Users/nikolaszimmermann/Coding/WebKit/Source/WebCore/platform/network/mac/ResourceHandleMac.mm:886
#8  0x00007fff8364b86c in _NSURLConnectionDidFinishLoading ()
#9  0x00007fff86fa70ea in URLConnectionClient::_clientDidFinishLoading ()
#10 0x00007fff8700d22c in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload ()
#11 0x00007fff8700d498 in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload ()
#12 0x00007fff86f936d7 in URLConnectionClient::processEvents ()
#13 0x00007fff86f934b2 in MultiplexerSource::perform ()
#14 0x00007fff84b6227d in __CFRunLoopDoSources0 ()
#15 0x00007fff84b605c9 in __CFRunLoopRun ()
#16 0x00007fff84b5fd8f in CFRunLoopRunSpecific ()
#17 0x00007fff83605b74 in -[NSRunLoop(NSRunLoop) runMode:beforeDate:] ()
#18 0x0000000100013582 in runTest (testPathOrURL=@0x7fff5fbff6d0) at /Users/nikolaszimmermann/Coding/WebKit/Tools/DumpRenderTree/mac/DumpRenderTree.mm:1273
#19 0x0000000100013f2d in dumpRenderTree (argc=2, argv=0x7fff5fbff750) at /Users/nikolaszimmermann/Coding/WebKit/Tools/DumpRenderTree/mac/DumpRenderTree.mm:797
#20 0x00000001000140d0 in main (argc=2, argv=0x7fff5fbff750) at /Users/nikolaszimmermann/Coding/WebKit/Tools/DumpRenderTree/mac/DumpRenderTree.mm:834

Soon after this void CSSFontSelector::beginLoadTimerFired(Timer&lt;WebCore::CSSFontSelector&gt;*) gets called, which correctly decrements the request count from 8 to 0. (Side-note: It&apos;s a bit unfortunate that we call beginLoadIfNeeded eight times, where we just early exit the next 7 times after the first invocation, but that&apos;s not important for this bug).

After this point DRT just hangs, and no one ever calls FrameLoader::checkCompleted() again, which would now return true.

Does that ring a bell?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547302</commentid>
    <comment_count>8</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-02-01 12:50:31 -0800</bug_when>
    <thetext>Is there a test case to reproduce the problem?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117684</attachid>
            <date>2011-12-02 13:56:49 -0800</date>
            <delta_ts>2011-12-02 14:18:14 -0800</delta_ts>
            <desc>Ensure that font loads that are waiting to begin prevent didFinishLoad from being called</desc>
            <filename>bug-73688-20111202135647.patch</filename>
            <type>text/plain</type>
            <size>25314</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTg0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDExLTEyLTAyICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNTIw
NjcwPiBSRUdSRVNTSU9OIChyOTE3MzgpOiBkaWRGaW5pc2hMb2FkIGlzIGNhbGxlZCBiZWZvcmUg
Y3VzdG9tIGZvbnRzIGhhdmUgZmluaXNoZWQgbG9hZGluZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzM2ODgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcHJvYmxlbSB3YXMgdGhhdCBhZnRlciBDU1NG
b250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEoKSBoYWQgc2NoZWR1bGVkIGEgMC1kZWxheSB0aW1l
ciB0bworICAgICAgICBiZWdpbiBsb2FkaW5nIHRoZSBmb250LCBidXQgYmVmb3JlIHRoYXQgdGlt
ZXIgZmlyZWQsIHRoZSBzdWJyZXNvdXJjZSBsb2FkZXIgYXBwZWFyZWQgdG8gaGF2ZQorICAgICAg
ICBoYWQgbm8gcmVzb3VyY2VzIHdhaXRpbmcgdG8gYmUgbG9hZGVkLCBhbmQgdGhlcmVmb3JlIGRp
ZEZpbmlzaExvYWQgY291bGQgYmUgY2FsbGVkLiBUaGlzIGNoYW5nZQorICAgICAgICByZXdvcmtz
IHRoZSBmaXggZm9yIDxodHRwOi8vd2Via2l0Lm9yZy9iLzY1MTIzPiBzbyB0aGF0IHdoaWxlIHRo
ZSBsb2FkIGlzIHN0aWxsIHN0YXJ0ZWQgb24gYQorICAgICAgICAwLWRlYWx5IHRpbWVyLCB0aGUg
c3VicmVzb3VyY2UgbG9hZGVy4oCZcyByZXF1ZXN0IGNvdW50IGlzIGluY3JlbWVudGVkIGltbWVk
aWF0ZWx5LCBwcmV2ZW50aW5nCisgICAgICAgIGl0IGZyb20gaGl0dGluZyAwIHdoaWxlIHRoZSBm
b250IGxvYWQgaXMgc2NoZWR1bGVkIHRvIGJlZ2luLiBUaGUgZGVsYXllZCBsb2FkIG1lY2hhbmlz
bSBpcworICAgICAgICBtb3ZlZCBmcm9tIENTU0ZvbnRGYWNlU291cmNlIGludG8gQ1NTRm9udFNl
bGVjdG9yIGluIG9yZGVyIHRvIHNhZmVseSBoYW5kbGUgdGhlIHBvc3NpYmlsaXR5IG9mCisgICAg
ICAgIHRoZSBsYXR0ZXIgYmVpbmcgZGVjb21taXNzaW9uZWQgd2hpbGUgd2FpdGluZyBmb3IgZm9u
dCBsb2FkaW5nIHRvIGJlZ2luLgorCisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlOjpDU1NGb250RmFjZVNvdXJj
ZSk6IFJlbW92ZWQgaW5pdGlhbGl6ZXIgZm9yIG1fbG9hZFN0YXJ0VGltZXIuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVNvdXJjZTo6fkNTU0ZvbnRGYWNlU291cmNlKTogUmVtb3ZlZCBz
dG9wcGluZyBvZiBtX2xvYWRTdGFydFRpbWVyLgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZh
Y2VTb3VyY2U6OmdldEZvbnREYXRhKTogUmVwbGFjZWQgY29kZSB0byBzY2hlZHVsZSBsb2FkaW5n
IG9uIGEgdGltZXIgd2l0aAorICAgICAgICBhIGNhbGwgdG8gQ1NTRm9udFNlbGVjdG9yOjpiZWdp
bkxvYWRpbmdGb250U29vbi4KKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTb3VyY2UuaDogUmVt
b3ZlZCBtX2xvYWRTdGFydFRpbWVyIGFuZCBtX2ZvbnRTZWxlY3RvciBtZW1iZXIgdmFyaWFibGVz
LgorICAgICAgICAqIGNzcy9DU1NGb250U2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTRm9udFNlbGVjdG9yOjpDU1NGb250U2VsZWN0b3IpOiBBZGRlZCBpbml0aWFsaXplZCBmb3Ig
bV9iZWdpbkxvYWRpbmdUaW1lci4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcjo6
fkNTU0ZvbnRTZWxlY3Rvcik6IEFkZGVkIGNhbGwgdG8gY2xlYXJEb2N1bWVudCgpLCB0byBkZWFs
IHdpdGgKKyAgICAgICAgYW55dGhpbmcgcmVtYWluaW5nIGluIG1fZm9udHNUb0JlZ2luTG9hZGlu
ZyBhdCB0aGlzIHRpbWUuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6OmNsZWFy
RG9jdW1lbnQpOiBOb3cgc3RvcHMgbV9iZWdpbkxvYWRpbmdUaW1lciBhbmQgYmFsYW5jZXMKKyAg
ICAgICAgaW5jcmVtZW50UmVxdWVzdENvdW50KCkgY2FsbHMgZm9yIGFueXRoaW5nIHJlbWFpbmlu
ZyBpbiBtX2ZvbnRzVG9CZWdpbkxvYWRpbmcuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2Vs
ZWN0b3I6OmJlZ2luTG9hZGluZ0ZvbnRTb29uKTogQWRkZWQuIFNjaGVkdWxlcyB0aGUgYWN0dWFs
IGNhbGwgdG8KKyAgICAgICAgQ2FjaGVkRm9udDo6YmVnaW5Mb2FkaW5nSWZOZWVkZWQgb24gYSAw
LWRlbGF5IHRpbWVyLCBhbmQgbWVhbndoaWxlIGluY3JlbWVudHMgdGhlIHJlcXVlc3QgY291bnQK
KyAgICAgICAgb24gdGhlIENhY2hlZFJlc291cmNlTG9hZGVyLCB3aGljaCBlbnN1cmVzIHRoYXQg
ZGlkRmluaXNoTG9hZCB3aWxsIG5vdCBiZSBjYWxsZWQgd2hpbGUgd2FpdGluZworICAgICAgICBm
b3IgdGhlIHRpbWVyIHRvIGZpcmUuCisgICAgICAgIChXZWJDb3JlOjpDU1NGb250U2VsZWN0b3I6
OmJlZ2luTG9hZFRpbWVyRmlyZWQpOiBBZGRlZC4gQWN0dWFsbHkgY2FsbHMKKyAgICAgICAgQ2Fj
aGVkRm9udDo6YmVnaW5Mb2FkSWZOZWVkZWQgYW5kIGJhbGFuY2VzIHRoZSBpbmNyZW1lbnRSZXF1
ZXN0Q291bnQoKSBtYWRlIHdoZW4gdGhlIHRpbWVyIHdhcworICAgICAgICBzY2hlZHVsZWQuCisg
ICAgICAgICogY3NzL0NTU0ZvbnRTZWxlY3Rvci5oOgorCiAyMDExLTEyLTAxICBBbG9rIFByaXlh
ZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gQ0NMYXll
clF1YWQgZG9lcyBub3QgcmV0dXJuIEZsb2F0UXVhZCBpbiBjb3JyZWN0IG9yZGVyCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHJldmlzaW9uIDEwMTc0MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUxLDcgKzUxLDYgQEAgQ1NTRm9udEZhY2VTb3Vy
Y2U6OkNTU0ZvbnRGYWNlU291cmNlKGNvbgogICAgIDogbV9zdHJpbmcoc3RyKQogICAgICwgbV9m
b250KGZvbnQpCiAgICAgLCBtX2ZhY2UoMCkKLSAgICAsIG1fbG9hZFN0YXJ0VGltZXIodGhpcywg
JkNTU0ZvbnRGYWNlU291cmNlOjpzdGFydExvYWRpbmdUaW1lckZpcmVkKQogI2lmIEVOQUJMRShT
VkdfRk9OVFMpCiAgICAgLCBtX2hhc0V4dGVybmFsU1ZHRm9udChmYWxzZSkKICNlbmRpZgpAQCAt
NjIsNyArNjEsNiBAQCBDU1NGb250RmFjZVNvdXJjZTo6Q1NTRm9udEZhY2VTb3VyY2UoY29uCiAK
IENTU0ZvbnRGYWNlU291cmNlOjp+Q1NTRm9udEZhY2VTb3VyY2UoKQogewotICAgIG1fbG9hZFN0
YXJ0VGltZXIuc3RvcCgpOwogICAgIGlmIChtX2ZvbnQpCiAgICAgICAgIG1fZm9udC0+cmVtb3Zl
Q2xpZW50KHRoaXMpOwogICAgIHBydW5lVGFibGUoKTsKQEAgLTE3NywxMSArMTc1LDkgQEAgU2lt
cGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogI2VuZGlmCiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewotICAgICAgICAvLyBLaWNrIG9mZiB0aGUgbG9hZCBub3cuIERvIGl0IG9u
IGEgemVyby1kZWxheSB0aW1lciByYXRoZXIgdGhhbiBzeW5jaHJvbm91c2x5LCBiZWNhdXNlIHdl
IG1heSBiZSBpbgotICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGxheW91dCwgYW5kIHRoZSBsb2Fk
ZXIgbWF5IGludm9rZSBhcmJpdHJhcnkgZGVsZWdhdGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgot
ICAgICAgICBtX2ZvbnRTZWxlY3RvciA9IGZvbnRTZWxlY3RvcjsKLSAgICAgICAgaWYgKCFtX2xv
YWRTdGFydFRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBtX2xvYWRTdGFydFRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKKyAgICAgICAgLy8gS2ljayBvZmYgdGhlIGxvYWQuIERvIGl0IHNvb24g
cmF0aGVyIHRoYW4gbm93LCBiZWNhdXNlIHdlIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIGxheW91
dCwKKyAgICAgICAgLy8gYW5kIHRoZSBsb2FkZXIgbWF5IGludm9rZSBhcmJpdHJhcnkgZGVsZWdh
dGUgb3IgZXZlbnQgaGFuZGxlciBjb2RlLgorICAgICAgICBmb250U2VsZWN0b3ItPmJlZ2luTG9h
ZGluZ0ZvbnRTb29uKG1fZm9udC5nZXQoKSk7CiAKICAgICAgICAgLy8gVGhpcyB0ZW1wb3Jhcnkg
Zm9udCBpcyBub3QgcmV0YWluZWQgYW5kIHNob3VsZCBub3QgYmUgcmV0dXJuZWQuCiAgICAgICAg
IEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwpAQCAtMTk4
LDE3ICsxOTQsNiBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6OmdldEZvCiAg
ICAgcmV0dXJuIGZvbnREYXRhUmF3UHRyOwogfQogCi12b2lkIENTU0ZvbnRGYWNlU291cmNlOjpz
dGFydExvYWRpbmdUaW1lckZpcmVkKFRpbWVyPFdlYkNvcmU6OkNTU0ZvbnRGYWNlU291cmNlPiop
Ci17Ci0gICAgQVNTRVJUKG1fZm9udCk7Ci0gICAgQVNTRVJUKG1fZm9udFNlbGVjdG9yKTsKLQot
ICAgIGlmIChDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2Zv
bnRTZWxlY3Rvci0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSkKLSAgICAgICAgbV9mb250LT5iZWdp
bkxvYWRJZk5lZWRlZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7Ci0KLSAgICBtX2ZvbnRTZWxlY3Rv
ciA9IG51bGxwdHI7Ci19Ci0KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogU1ZHRm9udEZhY2VFbGVt
ZW50KiBDU1NGb250RmFjZVNvdXJjZTo6c3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QKIHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5oCShyZXZpc2lvbiAxMDE3NDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNzgsOSArNzgsNiBAQCBwcml2YXRlOgogICAgIENTU0ZvbnRGYWNlKiBt
X2ZhY2U7IC8vIE91ciBvd25pbmcgZm9udCBmYWNlLgogICAgIEhhc2hNYXA8dW5zaWduZWQsIFNp
bXBsZUZvbnREYXRhKj4gbV9mb250RGF0YVRhYmxlOyAvLyBUaGUgaGFzaCBrZXkgaXMgY29tcG9z
ZWQgb2Ygc2l6ZSBzeW50aGV0aWMgc3R5bGVzLgogCi0gICAgVGltZXI8Q1NTRm9udEZhY2VTb3Vy
Y2U+IG1fbG9hZFN0YXJ0VGltZXI7Ci0gICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gbV9mb250
U2VsZWN0b3I7Ci0KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIFJlZlB0cjxTVkdGb250RmFj
ZUVsZW1lbnQ+IG1fc3ZnRm9udEZhY2VFbGVtZW50OwogICAgIFJlZlB0cjxTVkdGb250RWxlbWVu
dD4gbV9leHRlcm5hbFNWR0ZvbnRFbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zv
bnRTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDEwMTc0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGb250U2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTksNiArNTksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENTU0ZvbnRTZWxlY3Rvcjo6Q1NTRm9udFNlbGVjdG9y
KERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBt
X2JlZ2luTG9hZGluZ1RpbWVyKHRoaXMsICZDU1NGb250U2VsZWN0b3I6OmJlZ2luTG9hZFRpbWVy
RmlyZWQpCiB7CiAgICAgLy8gRklYTUU6IEFuIG9sZCBjb21tZW50IHVzZWQgdG8gc2F5IHRoZXJl
IHdhcyBubyBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gbV9kb2N1bWVudAogICAgIC8vIGJl
Y2F1c2UgIndlIGFyZSBndWFyYW50ZWVkIHRvIGJlIGRlc3Ryb3llZCBiZWZvcmUgdGhlIGRvY3Vt
ZW50Ii4gQnV0IHRoZXJlIGRvZXMgbm90CkBAIC03MCw2ICs3MSw3IEBAIENTU0ZvbnRTZWxlY3Rv
cjo6Q1NTRm9udFNlbGVjdG9yKERvY3VtZW4KIAogQ1NTRm9udFNlbGVjdG9yOjp+Q1NTRm9udFNl
bGVjdG9yKCkKIHsKKyAgICBjbGVhckRvY3VtZW50KCk7CiAgICAgZm9udENhY2hlKCktPnJlbW92
ZUNsaWVudCh0aGlzKTsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9mb250RmFjZXMpOwogICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX2xvY2FsbHlJbnN0YWxsZWRGb250RmFjZXMpOwpAQCAtODEsMTEgKzgz
LDYgQEAgYm9vbCBDU1NGb250U2VsZWN0b3I6OmlzRW1wdHkoKSBjb25zdAogICAgIHJldHVybiBt
X2ZvbnRzLmlzRW1wdHkoKTsKIH0KIAotQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIENTU0ZvbnRTZWxl
Y3Rvcjo6Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2RvY3Vt
ZW50ID8gbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSA6IDA7Ci19Ci0KIHZvaWQg
Q1NTRm9udFNlbGVjdG9yOjphZGRGb250RmFjZVJ1bGUoY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBm
b250RmFjZVJ1bGUpCiB7CiAgICAgLy8gT2J0YWluIHRoZSBmb250LWZhbWlseSBwcm9wZXJ0eSBh
bmQgdGhlIHNyYyBwcm9wZXJ0eS4gIEJvdGggbXVzdCBiZSBkZWZpbmVkLgpAQCAtNTc1LDQgKzU3
Miw1MyBAQCBGb250RGF0YSogQ1NTRm9udFNlbGVjdG9yOjpnZXRGb250RGF0YShjCiAgICAgcmV0
dXJuIGZhY2UtPmdldEZvbnREYXRhKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKK3ZvaWQgQ1NTRm9u
dFNlbGVjdG9yOjpjbGVhckRvY3VtZW50KCkKK3sKKyAgICBpZiAoIW1fZG9jdW1lbnQpIHsKKyAg
ICAgICAgQVNTRVJUKCFtX2JlZ2luTG9hZGluZ1RpbWVyLmlzQWN0aXZlKCkpOworICAgICAgICBB
U1NFUlQobV9mb250c1RvQmVnaW5Mb2FkaW5nLmlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIW1fZm9udHNUb0JlZ2luTG9hZGluZy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9iZWdpbkxvYWRpbmdUaW1lci5zdG9wKCk7CisKKyAgICAgICAgQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gbV9kb2N1bWVudC0+Y2FjaGVkUmVzb3Vy
Y2VMb2FkZXIoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZvbnRzVG9CZWdp
bkxvYWRpbmcuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vIEJhbGFuY2VzIGluY3JlbWVu
dFJlcXVlc3RDb3VudCgpIGluIGJlZ2luTG9hZGluZ0ZvbnRTb29uKCkuCisgICAgICAgICAgICBj
YWNoZWRSZXNvdXJjZUxvYWRlci0+ZGVjcmVtZW50UmVxdWVzdENvdW50KG1fZm9udHNUb0JlZ2lu
TG9hZGluZ1tpXS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX2ZvbnRzVG9CZWdpbkxv
YWRpbmcuY2xlYXIoKTsKKyAgICB9CisKKyAgICBtX2RvY3VtZW50ID0gMDsKK30KKwordm9pZCBD
U1NGb250U2VsZWN0b3I6OmJlZ2luTG9hZGluZ0ZvbnRTb29uKENhY2hlZEZvbnQqIGZvbnQpCit7
CisgICAgaWYgKCFtX2RvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ZvbnRzVG9C
ZWdpbkxvYWRpbmcuYXBwZW5kKGZvbnQpOworICAgIC8vIEluY3JlbWVudCB0aGUgcmVxdWVzdCBj
b3VudCBub3csIGluIG9yZGVyIHRvIHByZXZlbnQgZGlkRmluaXNoTG9hZCBmcm9tIGJlaW5nIGRp
c3BhdGNoZWQKKyAgICAvLyBhZnRlciB0aGlzIGZvbnQgaGFzIGJlZW4gcmVxdWVzdGVkIGJ1dCBi
ZWZvcmUgaXQgYmVnYW4gbG9hZGluZy4gQmFsYW5jZWQgYnkKKyAgICAvLyBkZWNyZW1lbnRSZXF1
ZXN0Q291bnQoKSBpbiBiZWdpbkxvYWRUaW1lckZpcmVkKCkgYW5kIGluIGNsZWFyRG9jdW1lbnQo
KS4KKyAgICBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5pbmNyZW1lbnRSZXF1
ZXN0Q291bnQoZm9udCk7CisgICAgbV9iZWdpbkxvYWRpbmdUaW1lci5zdGFydE9uZVNob3QoMCk7
Cit9CisKK3ZvaWQgQ1NTRm9udFNlbGVjdG9yOjpiZWdpbkxvYWRUaW1lckZpcmVkKFRpbWVyPFdl
YkNvcmU6OkNTU0ZvbnRTZWxlY3Rvcj4qKQoreworICAgIFZlY3RvcjxDYWNoZWRSZXNvdXJjZUhh
bmRsZTxDYWNoZWRGb250PiA+IGZvbnRzVG9CZWdpbkxvYWRpbmc7CisgICAgZm9udHNUb0JlZ2lu
TG9hZGluZy5zd2FwKG1fZm9udHNUb0JlZ2luTG9hZGluZyk7CisKKyAgICBDYWNoZWRSZXNvdXJj
ZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIgPSBtX2RvY3VtZW50LT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZm9udHNUb0JlZ2luTG9hZGlu
Zy5zaXplKCk7ICsraSkgeworICAgICAgICBmb250c1RvQmVnaW5Mb2FkaW5nW2ldLT5iZWdpbkxv
YWRJZk5lZWRlZChjYWNoZWRSZXNvdXJjZUxvYWRlcik7CisgICAgICAgIC8vIEJhbGFuY2VzIGlu
Y3JlbWVudFJlcXVlc3RDb3VudCgpIGluIGJlZ2luTG9hZGluZ0ZvbnRTb29uKCkuCisgICAgICAg
IGNhY2hlZFJlc291cmNlTG9hZGVyLT5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoZm9udHNUb0JlZ2lu
TG9hZGluZ1tpXS5nZXQoKSk7CisgICAgfQorfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udFNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRTZWxlY3Rvci5oCShyZXZpc2lvbiAxMDE3NDApCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRm9udFNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDkg
QEAKICNpZm5kZWYgQ1NTRm9udFNlbGVjdG9yX2gKICNkZWZpbmUgQ1NTRm9udFNlbGVjdG9yX2gK
IAorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVj
dG9yLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTM4LDgg
KzQwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTRm9udEZhY2U7CiBjbGFzcyBD
U1NGb250RmFjZVJ1bGU7CiBjbGFzcyBDU1NTZWdtZW50ZWRGb250RmFjZTsKK2NsYXNzIENhY2hl
ZEZvbnQ7CiBjbGFzcyBEb2N1bWVudDsKLWNsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwogY2xh
c3MgRm9udERlc2NyaXB0aW9uOwogCiBjbGFzcyBDU1NGb250U2VsZWN0b3IgOiBwdWJsaWMgRm9u
dFNlbGVjdG9yIHsKQEAgLTUyLDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBGb250
RGF0YSogZ2V0Rm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSk7CiAKLSAgICB2b2lkIGNsZWFyRG9jdW1l
bnQoKSB7IG1fZG9jdW1lbnQgPSAwOyB9CisgICAgdm9pZCBjbGVhckRvY3VtZW50KCk7CiAKICAg
ICB2b2lkIGFkZEZvbnRGYWNlUnVsZShjb25zdCBDU1NGb250RmFjZVJ1bGUqKTsKIApAQCAtNjEs
MjMgKzYzLDI4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCi0gICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyKCkgY29uc3Q7Ci0KICAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoRm9udFNlbGVj
dG9yQ2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25D
YWxsYmFja3MoRm9udFNlbGVjdG9yQ2xpZW50Kik7CiAKICAgICBEb2N1bWVudCogZG9jdW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAKKyAgICB2b2lkIGJlZ2luTG9hZGluZ0Zv
bnRTb29uKENhY2hlZEZvbnQqKTsKKwogcHJpdmF0ZToKICAgICBDU1NGb250U2VsZWN0b3IoRG9j
dW1lbnQqKTsKIAogICAgIHZvaWQgZGlzcGF0Y2hJbnZhbGlkYXRpb25DYWxsYmFja3MoKTsKIAor
ICAgIHZvaWQgYmVnaW5Mb2FkVGltZXJGaXJlZChUaW1lcjxDU1NGb250U2VsZWN0b3I+Kik7CisK
ICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKICAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJl
ZlB0cjxDU1NGb250RmFjZT4gPiosIENhc2VGb2xkaW5nSGFzaD4gbV9mb250RmFjZXM7CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWZQdHI8Q1NTRm9udEZhY2U+ID4qLCBDYXNlRm9sZGlu
Z0hhc2g+IG1fbG9jYWxseUluc3RhbGxlZEZvbnRGYWNlczsKICAgICBIYXNoTWFwPFN0cmluZywg
SGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPENTU1NlZ21lbnRlZEZvbnRGYWNlPiA+KiwgQ2FzZUZv
bGRpbmdIYXNoPiBtX2ZvbnRzOwogICAgIEhhc2hTZXQ8Rm9udFNlbGVjdG9yQ2xpZW50Kj4gbV9j
bGllbnRzOworCisgICAgVmVjdG9yPENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+ID4g
bV9mb250c1RvQmVnaW5Mb2FkaW5nOworICAgIFRpbWVyPENTU0ZvbnRTZWxlY3Rvcj4gbV9iZWdp
bkxvYWRpbmdUaW1lcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMTg0NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI5IEBACisyMDExLTEyLTAyICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5j
b20+CisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwNTIwNjcwPiBSRUdSRVNTSU9OIChyOTE3
MzgpOiBkaWRGaW5pc2hMb2FkIGlzIGNhbGxlZCBiZWZvcmUgY3VzdG9tIGZvbnRzIGhhdmUgZmlu
aXNoZWQgbG9hZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzM2ODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZXZlcnRlZCB0ZXN0IGNobmFnZXMgZnJvbSByOTE3MzguIFRoZXNlIHRlc3RzIHdlcmUg
bWFkZSB0byB3YWl0IGZvciB0aGUgZm9udHMgdG8gZmluaXNoIGxvYWRpbmcKKyAgICAgICAgdXNp
bmcgYSBET00uIE5vdyBhZ2FpbiB0aGV5IGRvIG5vdCBuZWVkIHRvLgorCisgICAgICAgICogZmFz
dC9jc3MvY29sb3ItbGVha2FnZS5odG1sOgorICAgICAgICAqIGZhc3QvY3NzL2N1c3RvbS1mb250
LXhoZWlnaHQuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Nzcy9mb250LWZhY2UtbXVsdGlwbGUtZmFj
ZXMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Nzcy9mb250LWZhY2UtbXVsdGlwbGUtcmVtb3RlLXNv
dXJjZXMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2Nzcy9mb250LWZhY2UtcmVtb3RlLmh0bWw6Cisg
ICAgICAgICogZmFzdC9jc3MvZm9udC1mYWNlLXdvZmYuaHRtbDoKKyAgICAgICAgKiBmYXN0L3dy
aXRpbmctbW9kZS9icm9rZW4taWRlb2dyYXBoLXNtYWxsLWNhcHMuaHRtbDoKKyAgICAgICAgKiBz
dmcvVzNDLVNWRy0xLjEtU0UvdGV4dC1pbnRyby0wOS1iLnN2ZzoKKyAgICAgICAgKiBzdmcvVzND
LVNWRy0xLjEvZm9udHMtZWxlbS0wNy1iLnN2ZzoKKyAgICAgICAgKiBzdmcvY3VzdG9tL3N2Zy1m
b250cy1mYWxsYmFjay54aHRtbDoKKyAgICAgICAgKiBzdmcvY3VzdG9tL3N2Zy1mb250cy1pbi1o
dG1sLmh0bWw6CisgICAgICAgICogc3ZnL2N1c3RvbS9zdmctZm9udHMtc2VnbWVudGVkLnhodG1s
OgorICAgICAgICAqIHN2Zy9jdXN0b20vc3ZnLWZvbnRzLXdpdGgtbm8tZWxlbWVudC1yZWZlcmVu
Y2UuaHRtbDoKKyAgICAgICAgKiBzdmcvY3VzdG9tL3N2Zy1mb250cy13aXRob3V0LW1pc3Npbmct
Z2x5cGgueGh0bWw6CisgICAgICAgICogc3ZnL3RleHQvdGV4dC1vdmVyZmxvdy1lbGxpcHNpcy1z
dmdmb250Lmh0bWw6CisKIDIwMTEtMTItMDEgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBDQ0xheWVyUXVhZCBkb2VzIG5vdCByZXR1
cm4gRmxvYXRRdWFkIGluIGNvcnJlY3Qgb3JkZXIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3Nz
L2NvbG9yLWxlYWthZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9j
b2xvci1sZWFrYWdlLmh0bWwJKHJldmlzaW9uIDEwMTc0MCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2NvbG9yLWxlYWthZ2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDEwIEBACiAg
IDxoZWFkPgogICA8IS0tIFRoZSBBaGVtIGZvbnQgcmVuZGVyZWQgaW4gdGhpcyB0ZXN0IHNob3Vs
ZCBiZSBkaXNwbGF5ZWQgYmxhY2ssIG5vdCBibHVlLiAtLT4KICAgICA8c3R5bGU+CisgICAgICBA
Zm9udC1mYWNlIHsKKyAgICAgICAgZm9udC1mYW1pbHk6ICdBaGVtJzsKKyAgICAgICAgc3JjOiB1
cmwoJ3Jlc291cmNlcy9BaGVtLnR0ZicpOworICAgICAgfQogICAgICAgZGl2IHsKICAgICAgICAg
ZGlzcGxheTogYmxvY2s7CiAgICAgICAgIGZvbnQtZmFtaWx5OiBBaGVtOwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jc3MvY3VzdG9tLWZvbnQteGhlaWdodC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY3NzL2N1c3RvbS1mb250LXhoZWlnaHQuaHRtbAkocmV2aXNpb24gMTAx
NzQwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3VzdG9tLWZvbnQteGhlaWdodC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywyNSArMzcsMTcgQEAgV2ViS2l0IG5pZ2h0bHkgYWRkaW5nIGlu
c2FuZSBoZWlnaHQgdG8gZAogPC9kaXY+CiAKIDxzY3JpcHQ+Ci1pZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Ci19CiAKIGZ1bmN0aW9uIHRlc3QoKQogewotICAgIGRvY3VtZW50
LmJvZHkub2Zmc2V0VG9wOwotICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Ci0gICAgICAgIHZh
ciB0b3RhbEhlaWdodCA9IGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QiKSwgbnVsbCkuZ2V0UHJvcGVydHlDU1NWYWx1ZSgi
aGVpZ2h0Iik7Ci0gICAgICAgIHRvdGFsSGVpZ2h0ID0gdG90YWxIZWlnaHQuZ2V0RmxvYXRWYWx1
ZShDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUFgpOwotICAgICAgICBpZiAodG90YWxIZWlnaHQgPiAx
NTAgJiYgdG90YWxIZWlnaHQgPCAzMDApCi0gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gIlBBU1MiOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gIkZBSUw6
ICIgKyB0b3RhbEhlaWdodCArICJweCI7Ci0KLSAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKLSAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKLSAgICB9LCAxMDApOworICAgIHZhciB0b3RhbEhlaWdodCA9IGRvY3VtZW50LmRlZmF1bHRW
aWV3LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QiKSwgbnVs
bCkuZ2V0UHJvcGVydHlDU1NWYWx1ZSgiaGVpZ2h0Iik7CisgICAgdG90YWxIZWlnaHQgPSB0b3Rh
bEhlaWdodC5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QWCk7CisgICAgaWYg
KHRvdGFsSGVpZ2h0ID4gMTUwICYmIHRvdGFsSGVpZ2h0IDwgMzAwKQorICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1MID0gIlBBU1MiOworICAgIGVsc2UK
KyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVySFRNTCA9ICJG
QUlMOiAiICsgdG90YWxIZWlnaHQgKyAicHgiOwogfQogPC9zY3JpcHQ+CiA8L2JvZHk+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9mb250LWZhY2UtbXVsdGlwbGUtZmFjZXMuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9mb250LWZhY2UtbXVsdGlwbGUtZmFjZXMu
aHRtbAkocmV2aXNpb24gMTAxNzQwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udC1mYWNl
LW11bHRpcGxlLWZhY2VzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE0OCwxMCArMTQ4LDMgQEAK
IDxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OiB3ZWJraXQtZm91cjsiPgogICAgIEFIRU0gPGk+QUhF
TTwvaT4KIDwvZGl2PgotPHNjcmlwdD4KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLSAg
ICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsgfSwgMTAwKTsKLSAgICB9
Ci08L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2ZvbnQtZmFjZS1tdWx0aXBs
ZS1yZW1vdGUtc291cmNlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY3Nz
L2ZvbnQtZmFjZS1tdWx0aXBsZS1yZW1vdGUtc291cmNlcy5odG1sCShyZXZpc2lvbiAxMDE3NDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9mb250LWZhY2UtbXVsdGlwbGUtcmVtb3RlLXNvdXJj
ZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTUsMTAgKzE1LDYgQEAKICAgICAgICAgX2ZhaWwK
ICAgICA8L2Rpdj4KICAgICA8c2NyaXB0PgotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7Ci0gICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7Ci0gICAgICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsKLSAgICAgICAgICAg
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsgfSwgMTAwKTsKLSAgICAgICAgfQorICAgICAgICBkb2N1bWVudC5ib2R5Lm9mZnNldFRvcDsK
ICAgICA8L3NjcmlwdD4KIDwvYm9keT4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2ZvbnQt
ZmFjZS1yZW1vdGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Nzcy9mb250
LWZhY2UtcmVtb3RlLmh0bWwJKHJldmlzaW9uIDEwMTc0MCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y3NzL2ZvbnQtZmFjZS1yZW1vdGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4LDcgQEAK
ICAgICAgICAgZGl2IHsgd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3JvdW5kLWNv
bG9yOiByZWQ7IGZvbnQtZmFtaWx5OiAncmVtb3RlJzsgZm9udC1zaXplOiAyMHB4OyBjb2xvcjog
Z3JlZW47IH0KICAgICA8L3N0eWxlPgogPC9oZWFkPgotPGJvZHk+Cis8Ym9keSBvbmxvYWQ9ImZp
bmlzaGVkKCkiPgogICAgIDxkaXY+CiAgICAgICAgIEZBSUxfPGJyPgogICAgICAgICBYWFhYWDxi
cj4KQEAgLTE3LDEwICsxNywxNiBAQAogICAgICAgICBfRkFJTDxicj4KICAgICA8L2Rpdj4KICAg
ICA8c2NyaXB0PgotICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgICAgICBkb2N1bWVudC5i
b2R5Lm9mZnNldFRvcDsKLSAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsgfSwgMTAwKTsKKworICAgICAgICAvLyBLaWNr
IG9mZiBsb2FkaW5nIG9mIHRoZSBmb250CisgICAgICAgIGRvY3VtZW50LmJvZHkub2Zmc2V0VG9w
OworCisgICAgICAgIGZ1bmN0aW9uIGZpbmlzaGVkKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAgICAgIH0KICAgICA8L3NjcmlwdD4KIDwv
Ym9keT4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY3NzL2ZvbnQtZmFjZS13b2ZmLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udC1mYWNlLXdvZmYuaHRtbAkocmV2
aXNpb24gMTAxNzQwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvZm9udC1mYWNlLXdvZmYuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtOCwxMCArOCwzIEBACiA8cD5UaGlzIHRlc3QgdHJpZXMgdG8g
cmVuZGVyIHRoZSBmb2xsb3dpbmcgdGV4dCB3aXRoIEFoZW0sIGxvYWRlZCBmcm9tIGEgV09GRiBm
aWxlLiBUaGUgdGV4dCBiZWxvdyBzaG91bGQgYmUgYSBzZXJpZXMgb2YgYmxhY2sgYm94ZXMuPC9w
PgogCiA8cCBzdHlsZT0iZm9udC1mYW1pbHk6IGZhbWlseTE7IGZvbnQtc2l6ZTogNGVtOyI+RmFp
bHVyZTwvcD4KLTxzY3JpcHQ+Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
ewotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAg
IGRvY3VtZW50LmJvZHkub2Zmc2V0VG9wOwotICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eyBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7IH0sIDEwMCk7Ci0gICAgfQotPC9z
Y3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dyaXRpbmctbW9kZS9icm9rZW4taWRlb2dy
YXBoLXNtYWxsLWNhcHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dyaXRp
bmctbW9kZS9icm9rZW4taWRlb2dyYXBoLXNtYWxsLWNhcHMuaHRtbAkocmV2aXNpb24gMTAxNzQw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93cml0aW5nLW1vZGUvYnJva2VuLWlkZW9ncmFwaC1zbWFs
bC1jYXBzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDEwIEBAIHAgewogCiA8L3N0
eWxlPgogICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworPC9zY3JpcHQ+CisK
IDwvaGVhZD4KIDxib2R5PgogCkBAIC02NSwxMiArNjksNSBAQCBwIHsKIDxkaXYgY2xhc3M9ImJh
c2ljIGQxIHZlcnQiPjxwPuesrOS4gOauteiQvSBQYXJhZ3JhcGggMTwvcD48cD7nrKzkuozmrrXo
kL0gUGFyYWdyYXBoIDI8L3A+PC9kaXY+CiA8L2Rpdj4KIAotPHNjcmlwdD4KLSAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgZG9jdW1lbnQuYm9keS5vZmZzZXRUb3A7Ci0gICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsgfSwgMTAwKTsKLSAgICB9Ci08L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS1TRS90ZXh0LWludHJvLTA5LWIuc3ZnCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS1TRS90ZXh0LWludHJvLTA5LWIu
c3ZnCShyZXZpc2lvbiAxMDE3NDApCisrKyBMYXlvdXRUZXN0cy9zdmcvVzNDLVNWRy0xLjEtU0Uv
dGV4dC1pbnRyby0wOS1iLnN2Zwkod29ya2luZyBjb3B5KQpAQCAtODYsMTEgKzg2LDQgQEAKICAg
ICA8dGV4dCBmb250LWZhbWlseT0iU1ZHRnJlZVNhbnNBU0NJSSxzYW5zLXNlcmlmIiBmb250LXdl
aWdodD0iYm9sZCIgZm9udC1zaXplPSIyMCIgeD0iMjQwIgogICAgICAgdGV4dC1hbmNob3I9Im1p
ZGRsZSIgeT0iMTgiIHN0cm9rZS13aWR0aD0iMC41IiBzdHJva2U9ImJsYWNrIiBmaWxsPSJ3aGl0
ZSI+RFJBRlQ8L3RleHQ+CiAgIDwvZz4tLT4KLTxzY3JpcHQ+Ci0gICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikgewotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7Ci0gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRUb3A7Ci0g
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsgfSwgMTAwKTsKLSAgICB9Ci08L3NjcmlwdD4KIDwvc3ZnPgpJbmRleDogTGF5b3V0
VGVzdHMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDctYi5zdmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3ZnL1czQy1TVkctMS4xL2ZvbnRzLWVsZW0tMDctYi5zdmcJKHJldmlzaW9u
IDEwMTc0MCkKKysrIExheW91dFRlc3RzL3N2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTA3LWIu
c3ZnCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTEgKzExMyw0IEBACiAJPC9nPgogCTx0ZXh0IGlk
PSJyZXZpc2lvbiIgeD0iMTAiIHk9IjM0MCIgZm9udC1zaXplPSI0MCIgc3Ryb2tlPSJub25lIiBm
aWxsPSJibGFjayI+JFJldmlzaW9uOiAxLjcgJDwvdGV4dD4KIAk8cmVjdCBpZD0idGVzdC1mcmFt
ZSIgeD0iMSIgeT0iMSIgd2lkdGg9IjQ3OCIgaGVpZ2h0PSIzNTgiIGZpbGw9Im5vbmUiIHN0cm9r
ZT0iIzAwMDAwMCIvPgotICAgICAgICA8c2NyaXB0PgotICAgICAgICAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKLSAgICAgICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVs
ZW1lbnQub2Zmc2V0VG9wOwotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsgfSwgMTAwKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgPC9zY3JpcHQ+CiA8L3N2Zz4KSW5kZXg6IExheW91dFRlc3RzL3N2Zy9jdXN0
b20vc3ZnLWZvbnRzLWZhbGxiYWNrLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2
Zy9jdXN0b20vc3ZnLWZvbnRzLWZhbGxiYWNrLnhodG1sCShyZXZpc2lvbiAxMDE3NDApCisrKyBM
YXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Zy1mb250cy1mYWxsYmFjay54aHRtbAkod29ya2luZyBj
b3B5KQpAQCAtNzYsMTIgKzc2LDYgQEAKICAgICA8IS0tICdhJywgJyAnLCAnbycgZnJvbSBUZXN0
Rm9udDIsICcmI3hiZTI7JyBjYW4ndCBiZSByZW5kZXJlZCwgYXMgbm9uZSBvZiB0aGUgZGVmYXVs
dCBmb250cyBkZWZpbmVzIGl0IC0tPgogICAgIDxzcGFuIHN0eWxlPSdmb250LWZhbWlseTogVGVz
dEZvbnQyOyBmb250LXNpemU6IDQwcHg7ICc+YSAmI3hiZTI7IG88L3NwYW4+PGJyLz4KIDwvcD4K
LTxzY3JpcHQ+Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgIGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudC5vZmZzZXRUb3A7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsgfSwgMTAwKTsKLSAgICB9Ci08
L3NjcmlwdD4KKwogPC9ib2R5PgogPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3Rv
bS9zdmctZm9udHMtaW4taHRtbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9j
dXN0b20vc3ZnLWZvbnRzLWluLWh0bWwuaHRtbAkocmV2aXNpb24gMTAxNzQwKQorKysgTGF5b3V0
VGVzdHMvc3ZnL2N1c3RvbS9zdmctZm9udHMtaW4taHRtbC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDgsMTIgKzIwOCw2IEBACiA8IS0tIEFkZCBhIGJhY2tncm91bmQgaW1hZ2UgdG8gZWFjaCBh
bmQgdXNlIHdpZHRoIGFuZCBoZWlnaHQgdG8gY29udHJvbCBzaXppbmcsIHBsYWNlIHdpdGggYWJz
b2x1dGUgcG9zaXRpb25pbmcgLS0+DQogPGRpdiBpZD0iZXh0cmFEaXYxIj48c3Bhbj48L3NwYW4+
PC9kaXY+PGRpdiBpZD0iZXh0cmFEaXYyIj48c3Bhbj48L3NwYW4+PC9kaXY+PGRpdiBpZD0iZXh0
cmFEaXYzIj48c3Bhbj48L3NwYW4+PC9kaXY+DQogPGRpdiBpZD0iZXh0cmFEaXY0Ij48c3Bhbj48
L3NwYW4+PC9kaXY+PGRpdiBpZD0iZXh0cmFEaXY1Ij48c3Bhbj48L3NwYW4+PC9kaXY+PGRpdiBp
ZD0iZXh0cmFEaXY2Ij48c3Bhbj48L3NwYW4+PC9kaXY+DQotPHNjcmlwdD4NCi0gICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgew0KLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOw0KLSAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9m
ZnNldFRvcDsNCi0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsgfSwgMTAwKTsNCi0gICAgfQ0KLTwvc2NyaXB0Pg0KKw0KIDwv
Ym9keT4NCiA8L2h0bWw+DQpJbmRleDogTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmctZm9udHMt
c2VnbWVudGVkLnhodG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9jdXN0b20vc3Zn
LWZvbnRzLXNlZ21lbnRlZC54aHRtbAkocmV2aXNpb24gMTAxNzQwKQorKysgTGF5b3V0VGVzdHMv
c3ZnL2N1c3RvbS9zdmctZm9udHMtc2VnbWVudGVkLnhodG1sCSh3b3JraW5nIGNvcHkpCkBAIC0z
NywxMiArMzcsNiBAQAogCiA8IS0tICdBQkMnIHNob3VsZCBiZSByZW5kZXJlZCB1c2luZyBUaW1l
cywgJ2RlZicgdXNpbmcgQ291cmllciwgJ28nIHVzaW5nIHRoZSBTVkcgRm9udCwgYW5kICdPJyBh
Z2FpbiBieSBUaW1lcyAtLT4KIDxwIHN0eWxlPSdmb250LWZhbWlseTogVGVzdEZvbnQ7IGZvbnQt
c2l6ZTogNDBweDsgJz5BQkNkZWZvb29PPC9wPgotPHNjcmlwdD4KLSAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKLSAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFRvcDsK
LSAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOyB9LCAxMDApOwotICAgIH0KLTwvc2NyaXB0PgorCiA8L2JvZHk+CiA8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Zy1mb250cy13aXRoLW5vLWVsZW1lbnQt
cmVmZXJlbmNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9zdmct
Zm9udHMtd2l0aC1uby1lbGVtZW50LXJlZmVyZW5jZS5odG1sCShyZXZpc2lvbiAxMDE3NDApCisr
KyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Zy1mb250cy13aXRoLW5vLWVsZW1lbnQtcmVmZXJl
bmNlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSw2IEBACiA8Ym9keT4NCiA8cCBj
bGFzcz0iZmlyc3QiPlRoaXMgdGV4dCBzaG91bGQgYmUgcmVuZGVyZWQgd2l0aCBhIGZpcnN0IGZv
bnQuPC9wPg0KIDxwIGNsYXNzPSJzZWNvbmQiPlRoaXMgdGV4dCBzaG91bGQgYmUgcmVuZGVyZWQg
d2l0aCBhIHNlY29uZCBmb250LjwvcD4NCi08c2NyaXB0Pg0KLSAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7DQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7DQotICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0VG9wOw0K
LSAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOyB9LCAxMDApOw0KLSAgICB9DQotPC9zY3JpcHQ+DQogPC9ib2R5Pg0KIA0KIDwv
aHRtbD4NCkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Zy1mb250cy13aXRob3V0LW1p
c3NpbmctZ2x5cGgueGh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2N1c3RvbS9z
dmctZm9udHMtd2l0aG91dC1taXNzaW5nLWdseXBoLnhodG1sCShyZXZpc2lvbiAxMDE3NDApCisr
KyBMYXlvdXRUZXN0cy9zdmcvY3VzdG9tL3N2Zy1mb250cy13aXRob3V0LW1pc3NpbmctZ2x5cGgu
eGh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEyICszMCw2IEBACiA8cCBjbGFzcz0idGFyZ2V0
Ij5BWFg8L3A+CiA8cCBjbGFzcz0idGFyZ2V0Ij5YWFg8L3A+CiA8cCBjbGFzcz0idGFyZ2V0Ij5B
QUE8L3A+Ci08c2NyaXB0PgotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
LSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwotICAgICAgICBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0VG9wOwotICAgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeyBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7IH0sIDEwMCk7Ci0g
ICAgfQotPC9zY3JpcHQ+CisKIDwvYm9keT4KIDwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N2
Zy90ZXh0L3RleHQtb3ZlcmZsb3ctZWxsaXBzaXMtc3ZnZm9udC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N2Zy90ZXh0L3RleHQtb3ZlcmZsb3ctZWxsaXBzaXMtc3ZnZm9udC5odG1s
CShyZXZpc2lvbiAxMDE3NDApCisrKyBMYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LW92ZXJmbG93
LWVsbGlwc2lzLXN2Z2ZvbnQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTIgKzM2LDUgQEAg
UGFzcyBpZiBzb21lIHRleHQgaXMgc2hvd24gZm9sbG93ZWQgYnkgYQogCWFiYyBhYmMgYWJjIGFi
YyBhYmMgYWJjIGFiYyBhYmMgYWJjIGFiYwogPC9kaXY+CiAKLTxzY3JpcHQ+Ci0gICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Ci0gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZz
ZXRUb3A7Ci0gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsgfSwgMTAwKTsKLSAgICB9Ci08L3NjcmlwdD4KIDwvYm9keT4KIDwv
aHRtbD4K
</data>
<flag name="review"
          id="117200"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>