<?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>187209</bug_id>
          
          <creation_ts>2018-06-29 17:20:33 -0700</creation_ts>
          <short_desc>[Cocoa] LastResort in the font family list causes emoji with joiners to be rendered as multiple .notdef characters</short_desc>
          <delta_ts>2018-07-01 18:36:53 -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>WebKit 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</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1438021</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-06-29 17:20:33 -0700</bug_when>
    <thetext>[Cocoa] LastResort in the font family list causes emoji with joiners to be rendered as multiple .notdef characters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438036</commentid>
    <comment_count>1</comment_count>
      <attachid>343984</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-06-29 17:30:32 -0700</bug_when>
    <thetext>Created attachment 343984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438038</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-06-29 17:31:06 -0700</bug_when>
    <thetext>&lt;rdar://problem/40920785&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438053</commentid>
    <comment_count>3</comment_count>
      <attachid>343984</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-06-29 17:49:54 -0700</bug_when>
    <thetext>Comment on attachment 343984
Patch

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

&gt; Source/WebCore/platform/graphics/Font.cpp:158
&gt; +    // FIXME: Consider reordering these so the most common ones are at the front.
&gt; +    // Doing this could cause the BitVector to fit inside inline storage and therefore
&gt; +    // be both a performance and a memory progression.

What if there’s a typo in the numbers or a logic mistake in this function where we accidentally used a number twice? How would we notice? What test would detect the mistake?

&gt; Source/WebCore/platform/graphics/Font.cpp:585
&gt; +    // This is very similar to static_cast&lt;bool&gt;(glyphForCharacter(character))
&gt; +    // except that glyphForCharacter() maps certain code points to ZWS (because they
&gt; +    // shouldn&apos;t show up in the fast text codepath). This function doesn&apos;t do that
&gt; +    // mapping, and instead is as honest as possible about what code points the font
&gt; +    // supports.

The glyphForCharacter function maps certain code points to zero-width spaces because we never want those code points to render visibly. We want that behavior for both the fast and slow text code paths. I wish the comment was clearer on this point. And I wish I understood how we will get that behavior.

The comment does not make clear why &quot;as honest as possible&quot; is needed here. I think the idea is that &quot;even if we don’t want the code points to render visibly we want to correctly understood the code points are &apos;supported&apos; because we makes some other kind of decision based on that&quot;. But I don’t fully understand.

The comment also doesn’t make it clear why we decided that this can be the slower function and the other one must be the faster function, rather than the other way around. Seems natural to make the &quot;honest&quot; function the fast one, but I’m sure we have a good reason not to do that.

&gt; Source/WebCore/platform/graphics/cocoa/FontCocoa.mm:612
&gt; +    CFIndex count;
&gt; +    if (U_IS_BMP(character)) {
&gt; +        codeUnits[0] = character;
&gt; +        count = 1;
&gt; +    } else {
&gt; +        codeUnits[0] = U16_LEAD(character);
&gt; +        codeUnits[1] = U16_TRAIL(character);
&gt; +        count = 2;
&gt; +    }

This code can be written like this:

    CFIndex count = 0;
    U16_APPEND_UNSAFE(codeUnits, count, character);

I think it’s better that way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438296</commentid>
    <comment_count>4</comment_count>
      <attachid>343984</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-07-01 04:44:36 -0700</bug_when>
    <thetext>Comment on attachment 343984
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:158
&gt;&gt; +    // be both a performance and a memory progression.
&gt; 
&gt; What if there’s a typo in the numbers or a logic mistake in this function where we accidentally used a number twice? How would we notice? What test would detect the mistake?

There might be a way to do it at compile time with tuples and template parameter packs, but I can&apos;t figure out how. I&apos;ll just add some ASSERT()s. 😕

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:585
&gt;&gt; +    // supports.
&gt; 
&gt; The glyphForCharacter function maps certain code points to zero-width spaces because we never want those code points to render visibly. We want that behavior for both the fast and slow text code paths. I wish the comment was clearer on this point. And I wish I understood how we will get that behavior.
&gt; 
&gt; The comment does not make clear why &quot;as honest as possible&quot; is needed here. I think the idea is that &quot;even if we don’t want the code points to render visibly we want to correctly understood the code points are &apos;supported&apos; because we makes some other kind of decision based on that&quot;. But I don’t fully understand.
&gt; 
&gt; The comment also doesn’t make it clear why we decided that this can be the slower function and the other one must be the faster function, rather than the other way around. Seems natural to make the &quot;honest&quot; function the fast one, but I’m sure we have a good reason not to do that.

Yeah, when I first discovered this, I was surprised like you were to see that we didn&apos;t have any custom code for the complex path (and instead the custom code only handles the simple path). Upon further investigation, I found that Core Text handles this for us.

Mapping characters to ZWS when we want them to be invisible has two problems:
1) Fonts can totally render visible glyphs for ZWS
2) Performing the substation at the code point level means that the results of mapping the code points to glyphs will be affected, and the shaping rules inside fonts won&apos;t expect these new glyphIDs to be used. Shaping won&apos;t work correctly.

Instead, the better solution to this is to not do any code-point-level substitution, but instead run shaping just like normal, and then after shaping, look through the transformed glyphs to see if any of them came from these special characters. If so, we can literally remove the glyph from the stream, thereby forcing it not to render.

The better solution is too risky to do now, but https://bugs.webkit.org/show_bug.cgi?id=187166 is for it.

I&apos;m not sure what you mean about fast vs slow functions; both the honest and dishonest ones should be fast. The dishonest one is cached using GlyphPages, and the honest one is cached using a bit vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438297</commentid>
    <comment_count>5</comment_count>
      <attachid>344048</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-07-01 04:47:44 -0700</bug_when>
    <thetext>Created attachment 344048
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438300</commentid>
    <comment_count>6</comment_count>
      <attachid>344048</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-07-01 05:30:00 -0700</bug_when>
    <thetext>Comment on attachment 344048
Patch for committing

Rejecting attachment 344048 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 344048, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.

Full output: https://webkit-queues.webkit.org/results/8403296</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438337</commentid>
    <comment_count>7</comment_count>
      <attachid>343984</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-07-01 13:25:19 -0700</bug_when>
    <thetext>Comment on attachment 343984
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:585
&gt;&gt;&gt; +    // supports.
&gt;&gt; 
&gt;&gt; The glyphForCharacter function maps certain code points to zero-width spaces because we never want those code points to render visibly. We want that behavior for both the fast and slow text code paths. I wish the comment was clearer on this point. And I wish I understood how we will get that behavior.
&gt;&gt; 
&gt;&gt; The comment does not make clear why &quot;as honest as possible&quot; is needed here. I think the idea is that &quot;even if we don’t want the code points to render visibly we want to correctly understood the code points are &apos;supported&apos; because we makes some other kind of decision based on that&quot;. But I don’t fully understand.
&gt;&gt; 
&gt;&gt; The comment also doesn’t make it clear why we decided that this can be the slower function and the other one must be the faster function, rather than the other way around. Seems natural to make the &quot;honest&quot; function the fast one, but I’m sure we have a good reason not to do that.
&gt; 
&gt; Yeah, when I first discovered this, I was surprised like you were to see that we didn&apos;t have any custom code for the complex path (and instead the custom code only handles the simple path). Upon further investigation, I found that Core Text handles this for us.
&gt; 
&gt; Mapping characters to ZWS when we want them to be invisible has two problems:
&gt; 1) Fonts can totally render visible glyphs for ZWS
&gt; 2) Performing the substation at the code point level means that the results of mapping the code points to glyphs will be affected, and the shaping rules inside fonts won&apos;t expect these new glyphIDs to be used. Shaping won&apos;t work correctly.
&gt; 
&gt; Instead, the better solution to this is to not do any code-point-level substitution, but instead run shaping just like normal, and then after shaping, look through the transformed glyphs to see if any of them came from these special characters. If so, we can literally remove the glyph from the stream, thereby forcing it not to render.
&gt; 
&gt; The better solution is too risky to do now, but https://bugs.webkit.org/show_bug.cgi?id=187166 is for it.
&gt; 
&gt; I&apos;m not sure what you mean about fast vs slow functions; both the honest and dishonest ones should be fast. The dishonest one is cached using GlyphPages, and the honest one is cached using a bit vector.

We could have decided to cache the honest one using glyph pages and the dishonest one with a bit vector. The one with the bit vector will be slower than the one that uses the glyph pages alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438368</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-07-01 18:30:35 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Comment on attachment 343984 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=343984&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:585
&gt; &gt;&gt;&gt; +    // supports.
&gt; &gt;&gt; 
&gt; &gt;&gt; The glyphForCharacter function maps certain code points to zero-width spaces because we never want those code points to render visibly. We want that behavior for both the fast and slow text code paths. I wish the comment was clearer on this point. And I wish I understood how we will get that behavior.
&gt; &gt;&gt; 
&gt; &gt;&gt; The comment does not make clear why &quot;as honest as possible&quot; is needed here. I think the idea is that &quot;even if we don’t want the code points to render visibly we want to correctly understood the code points are &apos;supported&apos; because we makes some other kind of decision based on that&quot;. But I don’t fully understand.
&gt; &gt;&gt; 
&gt; &gt;&gt; The comment also doesn’t make it clear why we decided that this can be the slower function and the other one must be the faster function, rather than the other way around. Seems natural to make the &quot;honest&quot; function the fast one, but I’m sure we have a good reason not to do that.
&gt; &gt; 
&gt; &gt; Yeah, when I first discovered this, I was surprised like you were to see that we didn&apos;t have any custom code for the complex path (and instead the custom code only handles the simple path). Upon further investigation, I found that Core Text handles this for us.
&gt; &gt; 
&gt; &gt; Mapping characters to ZWS when we want them to be invisible has two problems:
&gt; &gt; 1) Fonts can totally render visible glyphs for ZWS
&gt; &gt; 2) Performing the substation at the code point level means that the results of mapping the code points to glyphs will be affected, and the shaping rules inside fonts won&apos;t expect these new glyphIDs to be used. Shaping won&apos;t work correctly.
&gt; &gt; 
&gt; &gt; Instead, the better solution to this is to not do any code-point-level substitution, but instead run shaping just like normal, and then after shaping, look through the transformed glyphs to see if any of them came from these special characters. If so, we can literally remove the glyph from the stream, thereby forcing it not to render.
&gt; &gt; 
&gt; &gt; The better solution is too risky to do now, but https://bugs.webkit.org/show_bug.cgi?id=187166 is for it.
&gt; &gt; 
&gt; &gt; I&apos;m not sure what you mean about fast vs slow functions; both the honest and dishonest ones should be fast. The dishonest one is cached using GlyphPages, and the honest one is cached using a bit vector.
&gt; 
&gt; We could have decided to cache the honest one using glyph pages and the
&gt; dishonest one with a bit vector. The one with the bit vector will be slower
&gt; than the one that uses the glyph pages alone.

The dishonest one is for the fast text codepath, which is the most common code path used on the Web today. That is the one that uses glyph pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1438369</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-07-01 18:36:53 -0700</bug_when>
    <thetext>Committed r233413: &lt;https://trac.webkit.org/changeset/233413&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>343984</attachid>
            <date>2018-06-29 17:30:32 -0700</date>
            <delta_ts>2018-06-29 17:49:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-187209-20180629173032.patch</filename>
            <type>text/plain</type>
            <size>13125</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMzMTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGI0YTc0MmM2NDQ0NWU5NjE5ODQ0ZjZk
OTU5NTUwNDk1MzRhMjk3M2QuLjFmM2NlNWQ4NWZjNDFiNWQwMWQ5NGQ4ZWQ4OTA5Y2M0ZGU1N2M4
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTgtMDYtMjkgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIExhc3RSZXNvcnQgaW4gdGhl
IGZvbnQgZmFtaWx5IGxpc3QgY2F1c2VzIGVtb2ppIHdpdGggam9pbmVycyB0byBiZSByZW5kZXJl
ZCBhcyBtdWx0aXBsZSAubm90ZGVmIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaDoK
KwogMjAxOC0wNi0yNSAgRGF2aWQgRmVudG9uICA8ZGF2aWRfZmVudG9uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjMzMTIwLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU3
NjIzYzc4OGFkZWMxZTczOTBkYmI5ZmMxOTgyNGMxODdjZWFlOTIuLmU1MmU1ZDYzNzRmYWM2OGEx
YmFlYjNiODRhNGFlOTJiYTE1ZTNkMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAx
OC0wNi0yOSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAg
ICAgIFtDb2NvYV0gTGFzdFJlc29ydCBpbiB0aGUgZm9udCBmYW1pbHkgbGlzdCBjYXVzZXMgZW1v
amkgd2l0aCBqb2luZXJzIHRvIGJlIHJlbmRlcmVkIGFzIG11bHRpcGxlIC5ub3RkZWYgY2hhcmFj
dGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3
MjA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5z
aWRlIG91ciBjb21wbGV4IHRleHQgY29kZXBhdGgsIHdlIHBlcmZvcm0gb3VyIG93biBmb250IGZh
bGxiYWNrLCB3aGljaAorICAgICAgICBpbmNsdWRlcyBhIGZ1bmN0aW9uIHRoYXQgYXNrcyAiY2Fu
IHRoaXMgZm9udCBzdXBwb3J0IHRoaXMgZ3JhcGhlbWUgY2x1c3Rlcj8iCisgICAgICAgIEJlY2F1
c2Ugb2YgdGhlIG1lY2hhbmljcyBvZiBob3cgZm9udHMgd29yaywgdGhlIGltcGxlbWVudGF0aW9u
IG9mIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gaXMgIkRvZXMgdGhlIGZvbnQncyBjbWFwIHRhYmxl
IHN1cHBvcnQgZXZlcnkgY2hhcmFjdGVyIG9mIHRoZQorICAgICAgICBjbHVzdGVyPyIgV2Ugd2Vy
ZSB1c2luZyBGb250OjpnbHlwaEZvckNoYXJhY3RlcigpIHRvIGRldGVybWluZSB0aGlzOyBob3dl
dmVyLAorICAgICAgICB0aGlzIGZ1bmN0aW9uIG1hcHMgY2VydGFpbiBjb250cm9sIGNoYXJhY3Rl
cnMgdG8gdGhlIHplcm8gd2lkdGggc3BhY2UKKyAgICAgICAgY2hhcmFjdGVyICh3aXRoIHRoZSBp
bnRlbnRpb24gdGhhdCB0aGVzZSBjb250cm9sIGNoYXJhY3RlcnMgc2hvdWxkbid0IGJlCisgICAg
ICAgIHZpc2libGUgaW4gdGhlIGZhc3QgdGV4dCBjb2RlcGF0aCkuIFRoYXQgcmVwbGFjZW1lbnQs
IGhvd2V2ZXIsIHdhcyBjYXVzaW5nCisgICAgICAgIHVzIHRvIGdldCBmYWxzZSBuZWdhdGl2ZXMs
IGJlY2F1c2UgQXBwbGUgQ29sb3IgRW1vamkgZG9lc24ndCBzdXBwb3J0IHplcm8KKyAgICAgICAg
d2lkdGggc3BhY2UuIFRoZXJlZm9yZSwgQXBwbGUgQ29sb3IgRW1vamkgd2FzIGxvb2tpbmcgbGlr
ZSBpdCBkaWRuJ3Qgc3VwcG9ydAorICAgICAgICBlbW9qaSBjb21iaW5pbmcgc2VxdWVuY2VzLgor
CisgICAgICAgIFRoZSBiZXN0IHNvbHV0aW9uIHRvIHRoaXMgd291bGQgYmUgdG8gZ2V0IEZvbnQ6
OmdseXBoRm9yQ2hhcmFjdGVyKCkgdG8gc3RvcAorICAgICAgICBwZXJmb3JtaW5nIHRoZXNlIHJl
cGxhY2VtZW50cyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODcxNjYpLgorICAgICAgICBIb3dldmVyLCB0aGF0IGlzIHRvbyByaXNreSBvZiBhIGNoYW5nZSB0
byBiZSBtYWtpbmcgcmlnaHQgbm93LiBJbnN0ZWFkLAorICAgICAgICBhIG1vcmUgbG9jYWxpemVk
IHNvbHV0aW9uIGlzIHRvIGltcGxlbWVudCBhIHZlcnNpb24gb2YgIkRvZXMgdGhlIGZvbnQncyBj
bWFwCisgICAgICAgIHRhYmxlIHN1cHBvcnQgZXZlcnkgY2hhcmFjdGVyIG9mIHRoZSBjbHVzdGVy
IiB0aGF0IGRvZXNuJ3QgcGVyZm9ybSB0aGUKKyAgICAgICAgc3Vic3RpdHV0aW9ucy4gVGhpcyBw
YXRjaCBkb2VzIGV4YWN0bHkgdGhhdCwgYW5kIHVzZXMgYSBiaXQgdmVjdG9yIHRvIGNhY2hlCisg
ICAgICAgIHRoZSByZXN1bHRzLiBJbiBvcmRlciB0byBub3QgaGF2ZSBhIGdpYW50IGJpdCB2ZWN0
b3IsIHdlIHRha2UgdGhlIG9sZCBjb2RlCisgICAgICAgIHBhdGggaWYgd2Uga25vdyB0aGUgc3Vi
c3RpdHV0aW9ucyB3b24ndCBhZmZlY3QgdXMgKGFuZCB1c2VzIEFTU0VSVCgpcyB0byAKKyAgICAg
ICAgdmFsaWRhdGUgdGhpcykgc28gdGhlIGJpdCB2ZWN0b3Igb25seSBob2xkcyBhdCBtYXhpbXVt
IDMgd29yZHMgb2Ygc3RvcmFnZS4KKworICAgICAgICBUZXN0OiBmYXN0L3RleHQvZW1vamktd2l0
aC1qb2luZXIuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb2RlUG9pbnRTdXBwb3J0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQW5kRmlsbEdseXBoUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpwbGF0
Zm9ybVN1cHBvcnRzQ29kZVBvaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnN1
cHBvcnRzQ29kZVBvaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNhblJlbmRl
ckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENv
Y29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2lu
dCBjb25zdCk6CisKIDIwMTgtMDYtMjUgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIEFkanVzdCBXRUJDT1JFX0VYUE9SVCBhbm5vdGF0aW9ucyBmb3IgTFRPCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmgKaW5kZXggMWJkZDA2MDFjZTkzYWE1
NzAxNjE1ZjI3Njc2ODJjZGYwZTFjM2FlMS4uZDU4NzE3ZjI4MGZlZDMxZWQ1YWQ4MmFkYzAzZTQ5
ODFjNzdhNjlhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5pY29kZS9DaGFyYWN0ZXJO
YW1lcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaApAQCAt
ODUsNiArODUsNyBAQCBjb25zdCBVQ2hhciBzZXNhbWVEb3QgPSAweEZFNDU7CiBjb25zdCBVQ2hh
ciBzbWFsbExldHRlclNoYXJwUyA9IDB4MDBERjsKIGNvbnN0IFVDaGFyIHNvZnRIeXBoZW4gPSAw
eDAwQUQ7CiBjb25zdCBVQ2hhciBzcGFjZSA9IDB4MDAyMDsKK2NvbnN0IFVDaGFyIHRhYkNoYXJh
Y3RlciA9IDB4MDAwOTsKIGNvbnN0IFVDaGFyIHRpYmV0YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3Rh
ciA9IDB4MEYwQzsKIGNvbnN0IFVDaGFyIHRpYmV0YW5NYXJrSW50ZXJzeWxsYWJpY1RzaGVnID0g
MHgwRjBCOwogY29uc3QgVUNoYXIzMiB1Z2FyaXRpY1dvcmREaXZpZGVyID0gMHgxMDM5RjsKQEAg
LTE0OCw2ICsxNDksNyBAQCB1c2luZyBXVEY6OlVuaWNvZGU6OnJpZ2h0VG9MZWZ0T3ZlcnJpZGU7
CiB1c2luZyBXVEY6OlVuaWNvZGU6OnNlc2FtZURvdDsKIHVzaW5nIFdURjo6VW5pY29kZTo6c29m
dEh5cGhlbjsKIHVzaW5nIFdURjo6VW5pY29kZTo6c3BhY2U7Cit1c2luZyBXVEY6OlVuaWNvZGU6
OnRhYkNoYXJhY3RlcjsKIHVzaW5nIFdURjo6VW5pY29kZTo6dGliZXRhbk1hcmtEZWxpbWl0ZXJU
c2hlZ0JzdGFyOwogdXNpbmcgV1RGOjpVbmljb2RlOjp0aWJldGFuTWFya0ludGVyc3lsbGFiaWNU
c2hlZzsKIHVzaW5nIFdURjo6VW5pY29kZTo6dWdhcml0aWNXb3JkRGl2aWRlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKaW5kZXggMmNkYWU3NGUyOWZlZDA5ZTE2
OWUzMWNhYjJkNTZkYjc2ZWEzMGQ4MC4uZjI0NDJmMDNhMzc1OGE2YjRkMDMzYjI5NmY2NGQ5ZjY3
NTFkYWJkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAg
LTE1MSw2ICsxNTEsNjEgQEAgc3RhdGljIGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBh
Z2VUb0ZpbGwsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckwKICAgICByZXR1cm4gaGFz
R2x5cGhzOwogfQogCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzaXplX3Q+IGNvZGVQb2ludFN1cHBv
cnRJbmRleChVQ2hhcjMyIGNvZGVQb2ludCkKK3sKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmVv
cmRlcmluZyB0aGVzZSBzbyB0aGUgbW9zdCBjb21tb24gb25lcyBhcmUgYXQgdGhlIGZyb250Lgor
ICAgIC8vIERvaW5nIHRoaXMgY291bGQgY2F1c2UgdGhlIEJpdFZlY3RvciB0byBmaXQgaW5zaWRl
IGlubGluZSBzdG9yYWdlIGFuZCB0aGVyZWZvcmUKKyAgICAvLyBiZSBib3RoIGEgcGVyZm9ybWFu
Y2UgYW5kIGEgbWVtb3J5IHByb2dyZXNzaW9uLgorICAgIGlmIChjb2RlUG9pbnQgPCAweDIwKQor
ICAgICAgICByZXR1cm4gY29kZVBvaW50OworICAgIGlmIChjb2RlUG9pbnQgPj0gMHg3RiAmJiBj
b2RlUG9pbnQgPCAweEEwKQorICAgICAgICByZXR1cm4gY29kZVBvaW50IC0gMHg3RiArIDB4MjA7
CisgICAgc3dpdGNoIChjb2RlUG9pbnQpIHsKKyAgICBjYXNlIHNvZnRIeXBoZW46CisgICAgICAg
IHJldHVybiAweDQyOworICAgIGNhc2UgbmV3bGluZUNoYXJhY3RlcjoKKyAgICAgICAgcmV0dXJu
IDB4NDM7CisgICAgY2FzZSB0YWJDaGFyYWN0ZXI6CisgICAgICAgIHJldHVybiAweDQ0OworICAg
IGNhc2Ugbm9CcmVha1NwYWNlOgorICAgICAgICByZXR1cm4gMHg0NTsKKyAgICBjYXNlIG5hcnJv
d05vQnJlYWtTcGFjZToKKyAgICAgICAgcmV0dXJuIDB4NDY7CisgICAgY2FzZSBsZWZ0VG9SaWdo
dE1hcms6CisgICAgICAgIHJldHVybiAweDQ3OworICAgIGNhc2UgcmlnaHRUb0xlZnRNYXJrOgor
ICAgICAgICByZXR1cm4gMHg0ODsKKyAgICBjYXNlIGxlZnRUb1JpZ2h0RW1iZWQ6CisgICAgICAg
IHJldHVybiAweDQ5OworICAgIGNhc2UgcmlnaHRUb0xlZnRFbWJlZDoKKyAgICAgICAgcmV0dXJu
IDB4NEE7CisgICAgY2FzZSBsZWZ0VG9SaWdodE92ZXJyaWRlOgorICAgICAgICByZXR1cm4gMHg0
QjsKKyAgICBjYXNlIHJpZ2h0VG9MZWZ0T3ZlcnJpZGU6CisgICAgICAgIHJldHVybiAweDRDOwor
ICAgIGNhc2UgbGVmdFRvUmlnaHRJc29sYXRlOgorICAgICAgICByZXR1cm4gMHg0RDsKKyAgICBj
YXNlIHJpZ2h0VG9MZWZ0SXNvbGF0ZToKKyAgICAgICAgcmV0dXJuIDB4NEU7CisgICAgY2FzZSB6
ZXJvV2lkdGhOb25Kb2luZXI6CisgICAgICAgIHJldHVybiAweDRGOworICAgIGNhc2UgemVyb1dp
ZHRoSm9pbmVyOgorICAgICAgICByZXR1cm4gMHg1MDsKKyAgICBjYXNlIHBvcERpcmVjdGlvbmFs
Rm9ybWF0dGluZzoKKyAgICAgICAgcmV0dXJuIDB4NTE7CisgICAgY2FzZSBwb3BEaXJlY3Rpb25h
bElzb2xhdGU6CisgICAgICAgIHJldHVybiAweDUyOworICAgIGNhc2UgZmlyc3RTdHJvbmdJc29s
YXRlOgorICAgICAgICByZXR1cm4gMHg1MzsKKyAgICBjYXNlIG9iamVjdFJlcGxhY2VtZW50Q2hh
cmFjdGVyOgorICAgICAgICByZXR1cm4gMHg1NDsKKyAgICBjYXNlIHplcm9XaWR0aE5vQnJlYWtT
cGFjZToKKyAgICAgICAgcmV0dXJuIDB4NTU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKKyAgICB9Cit9CisKIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVh
dGVBbmRGaWxsR2x5cGhQYWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQmIGZvbnQp
CiB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMTc3LDExICsyMzIsMTQgQEAgc3RhdGljIFJlZlB0
cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwg
Y29uc3QgRm9udCYKICAgICAgICAgYXV0byBvdmVyd3JpdGVDb2RlUG9pbnRzID0gWyZdKHVuc2ln
bmVkIG1pbmltdW0sIHVuc2lnbmVkIG1heGltdW0sIFVDaGFyIG5ld0NvZGVQb2ludCkgewogICAg
ICAgICAgICAgdW5zaWduZWQgYmVnaW4gPSBzdGQ6Om1heChzdGFydCwgbWluaW11bSk7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBjb21wbGV0ZSA9IHN0ZDo6bWluKGVuZCwgbWF4aW11bSk7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbjsgaSA8IGNvbXBsZXRlOyArK2kpCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbjsgaSA8IGNvbXBsZXRlOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoY29kZVBvaW50U3VwcG9ydEluZGV4KGkpKTsKICAgICAgICAg
ICAgICAgICBidWZmZXJbaSAtIHN0YXJ0XSA9IG5ld0NvZGVQb2ludDsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfTsKIAogICAgICAgICBhdXRvIG92ZXJ3cml0ZUNvZGVQb2ludCA9IFsmXShVQ2hh
ciBjb2RlUG9pbnQsIFVDaGFyIG5ld0NvZGVQb2ludCkgeworICAgICAgICAgICAgQVNTRVJUKGNv
ZGVQb2ludFN1cHBvcnRJbmRleChjb2RlUG9pbnQpKTsKICAgICAgICAgICAgIGlmIChjb2RlUG9p
bnQgPj0gc3RhcnQgJiYgY29kZVBvaW50IDwgZW5kKQogICAgICAgICAgICAgICAgIGJ1ZmZlcltj
b2RlUG9pbnQgLSBzdGFydF0gPSBuZXdDb2RlUG9pbnQ7CiAgICAgICAgIH07CkBAIC01MTEsMTQg
KzU2OSwzNiBAQCBib29sIEZvbnQ6OnZhcmlhbnRDYXBzU3VwcG9ydHNDaGFyYWN0ZXJGb3JTeW50
aGVzaXMoRm9udFZhcmlhbnRDYXBzIGZvbnRWYXJpYW50QwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiB9CisKK2Jvb2wgRm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMy
IGNoYXJhY3RlcikgY29uc3QKK3sKKyAgICByZXR1cm4gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFj
dGVyKTsKK30KICNlbmRpZgogCitib29sIEZvbnQ6OnN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIg
Y2hhcmFjdGVyKSBjb25zdAoreworICAgIC8vIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIHN0YXRp
Y19jYXN0PGJvb2w+KGdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCisgICAgLy8gZXhjZXB0
IHRoYXQgZ2x5cGhGb3JDaGFyYWN0ZXIoKSBtYXBzIGNlcnRhaW4gY29kZSBwb2ludHMgdG8gWldT
IChiZWNhdXNlIHRoZXkKKyAgICAvLyBzaG91bGRuJ3Qgc2hvdyB1cCBpbiB0aGUgZmFzdCB0ZXh0
IGNvZGVwYXRoKS4gVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGRvIHRoYXQKKyAgICAvLyBtYXBwaW5n
LCBhbmQgaW5zdGVhZCBpcyBhcyBob25lc3QgYXMgcG9zc2libGUgYWJvdXQgd2hhdCBjb2RlIHBv
aW50cyB0aGUgZm9udAorICAgIC8vIHN1cHBvcnRzLgorICAgIGlmIChhdXRvIGluZGV4ID0gY29k
ZVBvaW50U3VwcG9ydEluZGV4KGNoYXJhY3RlcikpIHsKKyAgICAgICAgbV9jb2RlUG9pbnRTdXBw
b3J0LmVuc3VyZVNpemUoMiAqICgqaW5kZXggKyAxKSk7CisgICAgICAgIGJvb2wgaGFzQmVlblNl
dCA9IG1fY29kZVBvaW50U3VwcG9ydC5xdWlja1NldCgyICogKmluZGV4KTsKKyAgICAgICAgaWYg
KCFoYXNCZWVuU2V0ICYmIHBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoY2hhcmFjdGVyKSkKKyAg
ICAgICAgICAgIG1fY29kZVBvaW50U3VwcG9ydC5xdWlja1NldCgyICogKmluZGV4ICsgMSk7Cisg
ICAgICAgIHJldHVybiBtX2NvZGVQb2ludFN1cHBvcnQucXVpY2tHZXQoMiAqICppbmRleCArIDEp
OworICAgIH0KKyAgICByZXR1cm4gZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKK30KKwog
Ym9vbCBGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogCiAgICAgZm9yIChVQ2hhcjMyIGNvZGVQb2ludCA6IFN0cmluZ1ZpZXcoY2hh
cmFjdGVycywgbGVuZ3RoKS5jb2RlUG9pbnRzKCkpIHsKLSAgICAgICAgaWYgKCFnbHlwaEZvckNo
YXJhY3Rlcihjb2RlUG9pbnQpKQorICAgICAgICBpZiAoIXN1cHBvcnRzQ29kZVBvaW50KGNvZGVQ
b2ludCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDczY2RmMmE4NTJi
N2FkODM4MmE3MGQ0N2M2NTc1ZGYxYmU5OTk0YjAuLjEyYTcyZmRkNTI4NGRmNTVlYTViNDhiMDI4
YmQwYThjMWU0NzUyY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgK
QEAgLTE3MSw2ICsxNzEsOCBAQCBwdWJsaWM6CiAKICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKFVDaGFyMzIpIGNvbnN0OwogICAgIEdseXBoIGdseXBoRm9yQ2hhcmFjdGVyKFVD
aGFyMzIpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIzMikgY29uc3Q7
CisgICAgYm9vbCBwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIpIGNvbnN0OwogCiAg
ICAgUmVmUHRyPEZvbnQ+IHN5c3RlbUZhbGxiYWNrRm9udEZvckNoYXJhY3RlcihVQ2hhcjMyLCBj
b25zdCBGb250RGVzY3JpcHRpb24mLCBib29sIGlzRm9yUGxhdGZvcm1Gb250KSBjb25zdDsKIApA
QCAtMjUxLDYgKzI1Myw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVk
LCBSZWZQdHI8R2x5cGhQYWdlPj4gbV9nbHlwaFBhZ2VzOwogICAgIG11dGFibGUgc3RkOjp1bmlx
dWVfcHRyPEdseXBoTWV0cmljc01hcDxGbG9hdFJlY3Q+PiBtX2dseXBoVG9Cb3VuZHNNYXA7CiAg
ICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOworICAg
IG11dGFibGUgQml0VmVjdG9yIG1fY29kZVBvaW50U3VwcG9ydDsKIAogICAgIG11dGFibGUgUmVm
UHRyPE9wZW5UeXBlTWF0aERhdGE+IG1fbWF0aERhdGE7CiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZF
UlRJQ0FMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENvY29hLm1tCmluZGV4IDIyMzlhODM1OGM1MzI3M2Q3ZmZiOThmMzJiMWEyYzQxZDg5OTIz
YzAuLmU3NzQyMTIyODcyNDIzYmFkMjlkOTM3NmFhYzc0ZjdmZGM0NzFhYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KQEAg
LTU5Nyw0ICs1OTcsMjAgQEAgZmxvYXQgRm9udDo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBo
IGdseXBoKSBjb25zdAogICAgIHJldHVybiBhZHZhbmNlLndpZHRoICsgbV9zeW50aGV0aWNCb2xk
T2Zmc2V0OwogfQogCitib29sIEZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQoVUNoYXIz
MiBjaGFyYWN0ZXIpIGNvbnN0Cit7CisgICAgVW5pQ2hhciBjb2RlVW5pdHNbMl07CisgICAgQ0dH
bHlwaCBnbHlwaHNbMl07CisgICAgQ0ZJbmRleCBjb3VudDsKKyAgICBpZiAoVV9JU19CTVAoY2hh
cmFjdGVyKSkgeworICAgICAgICBjb2RlVW5pdHNbMF0gPSBjaGFyYWN0ZXI7CisgICAgICAgIGNv
dW50ID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb2RlVW5pdHNbMF0gPSBVMTZfTEVBRChj
aGFyYWN0ZXIpOworICAgICAgICBjb2RlVW5pdHNbMV0gPSBVMTZfVFJBSUwoY2hhcmFjdGVyKTsK
KyAgICAgICAgY291bnQgPSAyOworICAgIH0KKyAgICByZXR1cm4gQ1RGb250R2V0R2x5cGhzRm9y
Q2hhcmFjdGVycyhwbGF0Zm9ybURhdGEoKS5jdEZvbnQoKSwgY29kZVVuaXRzLCBnbHlwaHMsIGNv
dW50KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGM1M2Y2ZmNmYjE4ZDYx
YjgzYTIzMmJlYjFjYjNiYmMwODkzOTIxMTkuLjM1ZjFhY2Q4MmRjZDM5M2UwMWJjOWZjYjE0MzUw
ODZiZDcxMDFiM2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxOC0wNi0yOSAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gTGFzdFJl
c29ydCBpbiB0aGUgZm9udCBmYW1pbHkgbGlzdCBjYXVzZXMgZW1vamkgd2l0aCBqb2luZXJzIHRv
IGJlIHJlbmRlcmVkIGFzIG11bHRpcGxlIC5ub3RkZWYgY2hhcmFjdGVycworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MjA5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L3RleHQvZW1vamktd2l0
aC1qb2luZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvZW1vamkt
d2l0aC1qb2luZXIuaHRtbDogQWRkZWQuCisKIDIwMTgtMDYtMjUgIFlvdWVubiBGYWJsZXQgIDx5
b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcG9ydCBXUFQgZmV0Y2ggZGVzdGluYXRpb24g
dGVzdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvdGV4dC9lbW9qaS13aXRoLWpvaW5l
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvZW1vamktd2l0aC1qb2luZXIt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlMWM2ZjVlYTYxNWEzNjU5MDkzMTIxNTYwOGJmNTRj
OWIxODVlN2UKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3RleHQvZW1vamkt
d2l0aC1qb2luZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1BBU1MgZWxlbWVudC5v
ZmZzZXRXaWR0aCBpcyA0OAorUEFTUyBlbGVtZW50Lm9mZnNldFdpZHRoIGlzIDQ4CitQQVNTIGVs
ZW1lbnQub2Zmc2V0V2lkdGggaXMgNDgKK1BBU1MgZWxlbWVudC5vZmZzZXRXaWR0aCBpcyA0OAor
UEFTUyBlbGVtZW50Lm9mZnNldFdpZHRoIGlzIDQ4CitQQVNTIGVsZW1lbnQub2Zmc2V0V2lkdGgg
aXMgNDgKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
8J+RseKAjeKZgu+4jyDwn5Gx8J+Pu+KAjeKZgu+4jyDwn5Gx8J+PvOKAjeKZgu+4jyDwn5Gx8J+P
veKAjeKZgu+4jyDwn5Gx8J+PvuKAjeKZgu+4jyDwn5Gx8J+Pv+KAjeKZgu+4jwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2Vtb2ppLXdpdGgtam9pbmVyLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L3RleHQvZW1vamktd2l0aC1qb2luZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTI3MTY0
N2I4Y2YyMmMwN2IyMDVlMTg3MmY3MGJhNDZkNzQyZGQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC90ZXh0L2Vtb2ppLXdpdGgtam9pbmVyLmh0bWwKQEAgLTAsMCArMSwyOCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+CisuaWIgeworICAgIGZv
bnQ6IDQ4cHggJ0FwcGxlIENvbG9yIEVtb2ppJywgJ0xhc3RSZXNvcnQnOworICAgIGRpc3BsYXk6
IGlubGluZS1ibG9jazsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgY2xhc3M9
ImliIj4mI3gxRjQ3MTsmendqOyYjeDI2NDI7JiN4RkUwRjs8L2Rpdj4KKzxkaXYgY2xhc3M9Imli
Ij4mI3gxRjQ3MTsmI3gxRjNGQjsmendqOyYjeDI2NDI7JiN4RkUwRjs8L2Rpdj4KKzxkaXYgY2xh
c3M9ImliIj4mI3gxRjQ3MTsmI3gxRjNGQzsmendqOyYjeDI2NDI7JiN4RkUwRjs8L2Rpdj4KKzxk
aXYgY2xhc3M9ImliIj4mI3gxRjQ3MTsmI3gxRjNGRDsmendqOyYjeDI2NDI7JiN4RkUwRjs8L2Rp
dj4KKzxkaXYgY2xhc3M9ImliIj4mI3gxRjQ3MTsmI3gxRjNGRTsmendqOyYjeDI2NDI7JiN4RkUw
Rjs8L2Rpdj4KKzxkaXYgY2xhc3M9ImliIj4mI3gxRjQ3MTsmI3gxRjNGRjsmendqOyYjeDI2NDI7
JiN4RkUwRjs8L2Rpdj4KKzxzY3JpcHQ+Cit2YXIgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yQWxsKCIuaWIiKTsKK2ZvciAodmFyIGVsZW1lbnQgb2YgZWxlbWVudHMpIHsKKyAgICBz
aG91bGRCZSgiZWxlbWVudC5vZmZzZXRXaWR0aCIsICI0OCIpOworfQorPC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CisK
</data>
<flag name="review"
          id="362039"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>344048</attachid>
            <date>2018-07-01 04:47:44 -0700</date>
            <delta_ts>2018-07-01 05:30:00 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-187209-20180701214742.patch</filename>
            <type>text/plain</type>
            <size>15169</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyOTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE5Yzc5MWIyNDJiMjk4MjhkNjRiOGQ1
MWQ0YmQ2YWMyNTY4NjAwOGQuLjJjZmJmYzg0ZjVhNGFjOTkyNjA1MTM3ZWQ3ZDMxMjhkMmJjN2Mx
YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTgtMDctMDEgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIExhc3RSZXNvcnQgaW4gdGhl
IGZvbnQgZmFtaWx5IGxpc3QgY2F1c2VzIGVtb2ppIHdpdGggam9pbmVycyB0byBiZSByZW5kZXJl
ZCBhcyBtdWx0aXBsZSAubm90ZGVmIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaDoK
KwogMjAxOC0wNi0xOCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBhIGdyYWNlZnVsIGV4aXQgZm9yIEF1dGhlbnRpY2F0aW9uTWFuYWdlcjo6aW5pdGlh
bGl6ZUNvbm5lY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhN2VjYWU4NzZkNDA3OGU1YWUzMjQxZTI4NWVi
MmJhZmU0YjM1NzRjLi4wZjExMTFlN2VlOTkwZmU5YzI1ZDI4MzhkZDY2ZjM5YzIzN2ViYjk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTgtMDctMDEgIE15bGVzIEMuIE1heGZpZWxk
ICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIExhc3RSZXNvcnQgaW4g
dGhlIGZvbnQgZmFtaWx5IGxpc3QgY2F1c2VzIGVtb2ppIHdpdGggam9pbmVycyB0byBiZSByZW5k
ZXJlZCBhcyBtdWx0aXBsZSAubm90ZGVmIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzIwOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc2lkZSBvdXIgY29tcGxleCB0ZXh0IGNvZGVw
YXRoLCB3ZSBwZXJmb3JtIG91ciBvd24gZm9udCBmYWxsYmFjaywgd2hpY2gKKyAgICAgICAgaW5j
bHVkZXMgYSBmdW5jdGlvbiB0aGF0IGFza3MgImNhbiB0aGlzIGZvbnQgc3VwcG9ydCB0aGlzIGdy
YXBoZW1lIGNsdXN0ZXI/IgorICAgICAgICBCZWNhdXNlIG9mIHRoZSBtZWNoYW5pY3Mgb2YgaG93
IGZvbnRzIHdvcmssIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzCisgICAgICAgIGZ1bmN0aW9u
IGlzICJEb2VzIHRoZSBmb250J3MgY21hcCB0YWJsZSBzdXBwb3J0IGV2ZXJ5IGNoYXJhY3RlciBv
ZiB0aGUKKyAgICAgICAgY2x1c3Rlcj8iIFdlIHdlcmUgdXNpbmcgRm9udDo6Z2x5cGhGb3JDaGFy
YWN0ZXIoKSB0byBkZXRlcm1pbmUgdGhpczsgaG93ZXZlciwKKyAgICAgICAgdGhpcyBmdW5jdGlv
biBtYXBzIGNlcnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzIHRvIHRoZSB6ZXJvIHdpZHRoIHNwYWNl
CisgICAgICAgIGNoYXJhY3RlciAod2l0aCB0aGUgaW50ZW50aW9uIHRoYXQgdGhlc2UgY29udHJv
bCBjaGFyYWN0ZXJzIHNob3VsZG4ndCBiZQorICAgICAgICB2aXNpYmxlIGluIHRoZSBmYXN0IHRl
eHQgY29kZXBhdGgpLiBUaGF0IHJlcGxhY2VtZW50LCBob3dldmVyLCB3YXMgY2F1c2luZworICAg
ICAgICB1cyB0byBnZXQgZmFsc2UgbmVnYXRpdmVzLCBiZWNhdXNlIEFwcGxlIENvbG9yIEVtb2pp
IGRvZXNuJ3Qgc3VwcG9ydCB6ZXJvCisgICAgICAgIHdpZHRoIHNwYWNlLiBUaGVyZWZvcmUsIEFw
cGxlIENvbG9yIEVtb2ppIHdhcyBsb29raW5nIGxpa2UgaXQgZGlkbid0IHN1cHBvcnQKKyAgICAg
ICAgZW1vamkgY29tYmluaW5nIHNlcXVlbmNlcy4KKworICAgICAgICBUaGUgYmVzdCBzb2x1dGlv
biB0byB0aGlzIHdvdWxkIGJlIHRvIGdldCBGb250OjpnbHlwaEZvckNoYXJhY3RlcigpIHRvIHN0
b3AKKyAgICAgICAgcGVyZm9ybWluZyB0aGVzZSByZXBsYWNlbWVudHMgKHNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg3MTY2KS4KKyAgICAgICAgSG93ZXZlciwg
dGhhdCBpcyB0b28gcmlza3kgb2YgYSBjaGFuZ2UgdG8gYmUgbWFraW5nIHJpZ2h0IG5vdy4gSW5z
dGVhZCwKKyAgICAgICAgYSBtb3JlIGxvY2FsaXplZCBzb2x1dGlvbiBpcyB0byBpbXBsZW1lbnQg
YSB2ZXJzaW9uIG9mICJEb2VzIHRoZSBmb250J3MgY21hcAorICAgICAgICB0YWJsZSBzdXBwb3J0
IGV2ZXJ5IGNoYXJhY3RlciBvZiB0aGUgY2x1c3RlciIgdGhhdCBkb2Vzbid0IHBlcmZvcm0gdGhl
CisgICAgICAgIHN1YnN0aXR1dGlvbnMuIFRoaXMgcGF0Y2ggZG9lcyBleGFjdGx5IHRoYXQsIGFu
ZCB1c2VzIGEgYml0IHZlY3RvciB0byBjYWNoZQorICAgICAgICB0aGUgcmVzdWx0cy4gSW4gb3Jk
ZXIgdG8gbm90IGhhdmUgYSBnaWFudCBiaXQgdmVjdG9yLCB3ZSB0YWtlIHRoZSBvbGQgY29kZQor
ICAgICAgICBwYXRoIGlmIHdlIGtub3cgdGhlIHN1YnN0aXR1dGlvbnMgd29uJ3QgYWZmZWN0IHVz
IChhbmQgdXNlcyBBU1NFUlQoKXMgdG8gCisgICAgICAgIHZhbGlkYXRlIHRoaXMpIHNvIHRoZSBi
aXQgdmVjdG9yIG9ubHkgaG9sZHMgYXQgbWF4aW11bSAzIHdvcmRzIG9mIHN0b3JhZ2UuCisKKyAg
ICAgICAgVGVzdDogZmFzdC90ZXh0L2Vtb2ppLXdpdGgtam9pbmVyLmh0bWwKKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29kZVBvaW50
U3VwcG9ydEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6cGxhdGZvcm1TdXBwb3J0c0NvZGVQb2ludCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzdXBwb3J0c0NvZGVQb2ludCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnQ6OnBsYXRmb3JtU3VwcG9ydHNDb2RlUG9pbnQgY29uc3QpOgorCiAyMDE4LTA2LTE5ICBE
ZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBCbGFuayB2aWV3ZXIgY29t
ZXMgdXAgYW5kIHRoZW4gYXV0by1kaXNtaXNzZXMgd2hlbiBkZXZpY2UgaXMgbm90IGNvbm5lY3Rl
ZCB0byBJbnRlcm5ldApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9DaGFyYWN0
ZXJOYW1lcy5oIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oCmluZGV4
IDFiZGQwNjAxY2U5M2FhNTcwMTYxNWYyNzY3NjgyY2RmMGUxYzNhZTEuLmQ1ODcxN2YyODBmZWQz
MWVkNWFkODJhZGMwM2U0OTgxYzc3YTY5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3Vu
aWNvZGUvQ2hhcmFjdGVyTmFtZXMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmgKQEAgLTg1LDYgKzg1LDcgQEAgY29uc3QgVUNoYXIgc2VzYW1lRG90ID0gMHhG
RTQ1OwogY29uc3QgVUNoYXIgc21hbGxMZXR0ZXJTaGFycFMgPSAweDAwREY7CiBjb25zdCBVQ2hh
ciBzb2Z0SHlwaGVuID0gMHgwMEFEOwogY29uc3QgVUNoYXIgc3BhY2UgPSAweDAwMjA7Citjb25z
dCBVQ2hhciB0YWJDaGFyYWN0ZXIgPSAweDAwMDk7CiBjb25zdCBVQ2hhciB0aWJldGFuTWFya0Rl
bGltaXRlclRzaGVnQnN0YXIgPSAweDBGMEM7CiBjb25zdCBVQ2hhciB0aWJldGFuTWFya0ludGVy
c3lsbGFiaWNUc2hlZyA9IDB4MEYwQjsKIGNvbnN0IFVDaGFyMzIgdWdhcml0aWNXb3JkRGl2aWRl
ciA9IDB4MTAzOUY7CkBAIC0xNDgsNiArMTQ5LDcgQEAgdXNpbmcgV1RGOjpVbmljb2RlOjpyaWdo
dFRvTGVmdE92ZXJyaWRlOwogdXNpbmcgV1RGOjpVbmljb2RlOjpzZXNhbWVEb3Q7CiB1c2luZyBX
VEY6OlVuaWNvZGU6OnNvZnRIeXBoZW47CiB1c2luZyBXVEY6OlVuaWNvZGU6OnNwYWNlOwordXNp
bmcgV1RGOjpVbmljb2RlOjp0YWJDaGFyYWN0ZXI7CiB1c2luZyBXVEY6OlVuaWNvZGU6OnRpYmV0
YW5NYXJrRGVsaW1pdGVyVHNoZWdCc3RhcjsKIHVzaW5nIFdURjo6VW5pY29kZTo6dGliZXRhbk1h
cmtJbnRlcnN5bGxhYmljVHNoZWc7CiB1c2luZyBXVEY6OlVuaWNvZGU6OnVnYXJpdGljV29yZERp
dmlkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IDJj
ZGFlNzRlMjlmZWQwOWUxNjllMzFjYWIyZDU2ZGI3NmVhMzBkODAuLjUyYTM0ODJiN2NlMTAzMmVi
NWFlZWJjNTQ5MDFiMTA5ZGQwMmUzZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwCkBAIC0xNTEsNiArMTUxLDEyMSBAQCBzdGF0aWMgYm9vbCBmaWxsR2x5cGhQ
YWdlKEdseXBoUGFnZSYgcGFnZVRvRmlsbCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TAogICAgIHJldHVybiBoYXNHbHlwaHM7CiB9CiAKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPHNpemVf
dD4gY29kZVBvaW50U3VwcG9ydEluZGV4KFVDaGFyMzIgY29kZVBvaW50KQoreworICAgIC8vIEZJ
WE1FOiBDb25zaWRlciByZW9yZGVyaW5nIHRoZXNlIHNvIHRoZSBtb3N0IGNvbW1vbiBvbmVzIGFy
ZSBhdCB0aGUgZnJvbnQuCisgICAgLy8gRG9pbmcgdGhpcyBjb3VsZCBjYXVzZSB0aGUgQml0VmVj
dG9yIHRvIGZpdCBpbnNpZGUgaW5saW5lIHN0b3JhZ2UgYW5kIHRoZXJlZm9yZQorICAgIC8vIGJl
IGJvdGggYSBwZXJmb3JtYW5jZSBhbmQgYSBtZW1vcnkgcHJvZ3Jlc3Npb24uCisgICAgaWYgKGNv
ZGVQb2ludCA8IDB4MjApCisgICAgICAgIHJldHVybiBjb2RlUG9pbnQ7CisgICAgaWYgKGNvZGVQ
b2ludCA+PSAweDdGICYmIGNvZGVQb2ludCA8IDB4QTApCisgICAgICAgIHJldHVybiBjb2RlUG9p
bnQgLSAweDdGICsgMHgyMDsKKyAgICBzdGQ6Om9wdGlvbmFsPHNpemVfdD4gcmVzdWx0OworICAg
IHN3aXRjaCAoY29kZVBvaW50KSB7CisgICAgY2FzZSBzb2Z0SHlwaGVuOgorICAgICAgICByZXN1
bHQgPSAweDQxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG5ld2xpbmVDaGFyYWN0ZXI6Cisg
ICAgICAgIHJlc3VsdCA9IDB4NDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgdGFiQ2hhcmFj
dGVyOgorICAgICAgICByZXN1bHQgPSAweDQzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIG5v
QnJlYWtTcGFjZToKKyAgICAgICAgcmVzdWx0ID0gMHg0NDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBuYXJyb3dOb0JyZWFrU3BhY2U6CisgICAgICAgIHJlc3VsdCA9IDB4NDU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgbGVmdFRvUmlnaHRNYXJrOgorICAgICAgICByZXN1bHQgPSAweDQ2
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHJpZ2h0VG9MZWZ0TWFyazoKKyAgICAgICAgcmVz
dWx0ID0gMHg0NzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBsZWZ0VG9SaWdodEVtYmVkOgor
ICAgICAgICByZXN1bHQgPSAweDQ4OworICAgICAgICBicmVhazsKKyAgICBjYXNlIHJpZ2h0VG9M
ZWZ0RW1iZWQ6CisgICAgICAgIHJlc3VsdCA9IDB4NDk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgbGVmdFRvUmlnaHRPdmVycmlkZToKKyAgICAgICAgcmVzdWx0ID0gMHg0QTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSByaWdodFRvTGVmdE92ZXJyaWRlOgorICAgICAgICByZXN1bHQgPSAw
eDRCOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGxlZnRUb1JpZ2h0SXNvbGF0ZToKKyAgICAg
ICAgcmVzdWx0ID0gMHg0QzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSByaWdodFRvTGVmdElz
b2xhdGU6CisgICAgICAgIHJlc3VsdCA9IDB4NEQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
emVyb1dpZHRoTm9uSm9pbmVyOgorICAgICAgICByZXN1bHQgPSAweDRFOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIHplcm9XaWR0aEpvaW5lcjoKKyAgICAgICAgcmVzdWx0ID0gMHg0RjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBwb3BEaXJlY3Rpb25hbEZvcm1hdHRpbmc6CisgICAgICAg
IHJlc3VsdCA9IDB4NTA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgcG9wRGlyZWN0aW9uYWxJ
c29sYXRlOgorICAgICAgICByZXN1bHQgPSAweDUxOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IGZpcnN0U3Ryb25nSXNvbGF0ZToKKyAgICAgICAgcmVzdWx0ID0gMHg1MjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjoKKyAgICAgICAgcmVzdWx0
ID0gMHg1MzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSB6ZXJvV2lkdGhOb0JyZWFrU3BhY2U6
CisgICAgICAgIHJlc3VsdCA9IDB4NTQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJlc3VsdCA9IHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgVUNoYXIzMiBjb2RlUG9pbnRPcmRlcltdID0geworICAgICAgICAweDAwLCAweDAxLCAweDAy
LCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBBLCAweDBCLCAw
eDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAw
eDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFE
LCAweDFFLCAweDFGLAorICAgICAgICAweDdGLAorICAgICAgICAweDgwLCAweDgxLCAweDgyLCAw
eDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhBLCAweDhCLCAweDhD
LCAweDhELCAweDhFLCAweDhGLAorICAgICAgICAweDkwLCAweDkxLCAweDkyLCAweDkzLCAweDk0
LCAweDk1LCAweDk2LCAweDk3LCAweDk4LCAweDk5LCAweDlBLCAweDlCLCAweDlDLCAweDlELCAw
eDlFLCAweDlGLAorICAgICAgICBzb2Z0SHlwaGVuLAorICAgICAgICBuZXdsaW5lQ2hhcmFjdGVy
LAorICAgICAgICB0YWJDaGFyYWN0ZXIsCisgICAgICAgIG5vQnJlYWtTcGFjZSwKKyAgICAgICAg
bmFycm93Tm9CcmVha1NwYWNlLAorICAgICAgICBsZWZ0VG9SaWdodE1hcmssCisgICAgICAgIHJp
Z2h0VG9MZWZ0TWFyaywKKyAgICAgICAgbGVmdFRvUmlnaHRFbWJlZCwKKyAgICAgICAgcmlnaHRU
b0xlZnRFbWJlZCwKKyAgICAgICAgbGVmdFRvUmlnaHRPdmVycmlkZSwKKyAgICAgICAgcmlnaHRU
b0xlZnRPdmVycmlkZSwKKyAgICAgICAgbGVmdFRvUmlnaHRJc29sYXRlLAorICAgICAgICByaWdo
dFRvTGVmdElzb2xhdGUsCisgICAgICAgIHplcm9XaWR0aE5vbkpvaW5lciwKKyAgICAgICAgemVy
b1dpZHRoSm9pbmVyLAorICAgICAgICBwb3BEaXJlY3Rpb25hbEZvcm1hdHRpbmcsCisgICAgICAg
IHBvcERpcmVjdGlvbmFsSXNvbGF0ZSwKKyAgICAgICAgZmlyc3RTdHJvbmdJc29sYXRlLAorICAg
ICAgICBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwKKyAgICAgICAgemVyb1dpZHRoTm9CcmVh
a1NwYWNlCisgICAgfTsKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGNvZGVQb2ludE9yZGVyKTsgKytpKSB7CisgICAg
ICAgIGlmIChjb2RlUG9pbnRPcmRlcltpXSA9PSBjb2RlUG9pbnQpIHsKKyAgICAgICAgICAgIEFT
U0VSVChpID09IHJlc3VsdCk7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CisgICAgQVNTRVJUKGZvdW5kID09IHN0YXRpY19jYXN0PGJvb2w+KHJlc3VsdCkpOwor
I2VuZGlmCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+
IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udCYg
Zm9udCkKIHsKICNpZiBQTEFURk9STShJT1MpCkBAIC0xNzcsMTEgKzI5MiwxNCBAQCBzdGF0aWMg
UmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVt
YmVyLCBjb25zdCBGb250JgogICAgICAgICBhdXRvIG92ZXJ3cml0ZUNvZGVQb2ludHMgPSBbJl0o
dW5zaWduZWQgbWluaW11bSwgdW5zaWduZWQgbWF4aW11bSwgVUNoYXIgbmV3Q29kZVBvaW50KSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBiZWdpbiA9IHN0ZDo6bWF4KHN0YXJ0LCBtaW5pbXVtKTsK
ICAgICAgICAgICAgIHVuc2lnbmVkIGNvbXBsZXRlID0gc3RkOjptaW4oZW5kLCBtYXhpbXVtKTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luOyBpIDwgY29tcGxldGU7ICsraSkK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luOyBpIDwgY29tcGxldGU7ICsraSkg
eworICAgICAgICAgICAgICAgIEFTU0VSVChjb2RlUG9pbnRTdXBwb3J0SW5kZXgoaSkpOwogICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpIC0gc3RhcnRdID0gbmV3Q29kZVBvaW50OworICAgICAgICAg
ICAgfQogICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gb3ZlcndyaXRlQ29kZVBvaW50ID0gWyZd
KFVDaGFyIGNvZGVQb2ludCwgVUNoYXIgbmV3Q29kZVBvaW50KSB7CisgICAgICAgICAgICBBU1NF
UlQoY29kZVBvaW50U3VwcG9ydEluZGV4KGNvZGVQb2ludCkpOwogICAgICAgICAgICAgaWYgKGNv
ZGVQb2ludCA+PSBzdGFydCAmJiBjb2RlUG9pbnQgPCBlbmQpCiAgICAgICAgICAgICAgICAgYnVm
ZmVyW2NvZGVQb2ludCAtIHN0YXJ0XSA9IG5ld0NvZGVQb2ludDsKICAgICAgICAgfTsKQEAgLTUx
MSwxNCArNjI5LDM5IEBAIGJvb2wgRm9udDo6dmFyaWFudENhcHNTdXBwb3J0c0NoYXJhY3RlckZv
clN5bnRoZXNpcyhGb250VmFyaWFudENhcHMgZm9udFZhcmlhbnRDCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIH0KKworYm9vbCBGb250OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KFVD
aGFyMzIgY2hhcmFjdGVyKSBjb25zdAoreworICAgIHJldHVybiBnbHlwaEZvckNoYXJhY3Rlcihj
aGFyYWN0ZXIpOworfQogI2VuZGlmCiAKK2Jvb2wgRm9udDo6c3VwcG9ydHNDb2RlUG9pbnQoVUNo
YXIzMiBjaGFyYWN0ZXIpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8g
c3RhdGljX2Nhc3Q8Ym9vbD4oZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKSkKKyAgICAvLyBl
eGNlcHQgdGhhdCBnbHlwaEZvckNoYXJhY3RlcigpIG1hcHMgY2VydGFpbiBjb2RlIHBvaW50cyB0
byBaV1MgKGJlY2F1c2UgdGhleQorICAgIC8vIHNob3VsZG4ndCBiZSB2aXNpYmxlKS4gVGhpcyBm
dW5jdGlvbiBkb2Vzbid0IGRvIHRoYXQgbWFwcGluZywgYW5kIGluc3RlYWQgaXMKKyAgICAvLyBh
cyBob25lc3QgYXMgcG9zc2libGUgYWJvdXQgd2hhdCBjb2RlIHBvaW50cyB0aGUgZm9udCBzdXBw
b3J0cy4gVGhpcyBpcyBzbworICAgIC8vIHRoYXQgd2UgY2FuIGFjY3VyYXRlbHkgZGV0ZXJtaW5l
IHdoaWNoIGNoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGZvbnQKKyAgICAvLyBzbyB3
ZSBrbm93IHdoaWNoIGJvdW5kYXJpZXMgdG8gYnJlYWsgc3RyaW5ncyB3aGVuIHdlIHNlbmQgdGhl
bSB0byB0aGUgY29tcGxleAorICAgIC8vIHRleHQgY29kZXBhdGguIFRoZSBjb21wbGV4IHRleHQg
Y29kZXBhdGggaXMgdG90YWxseSBzZXBhcmF0ZSBmcm9tIHRoaXMgWldTCisgICAgLy8gcmVwbGFj
ZW1lbnQgbG9naWMgKGJlY2F1c2UgQ29yZVRleHQgaGFuZGxlcyB0aG9zZSBjaGFyYWN0ZXJzIGlu
c3RlYWQgb2YgV2ViS2l0KS4KKyAgICBpZiAoYXV0byBpbmRleCA9IGNvZGVQb2ludFN1cHBvcnRJ
bmRleChjaGFyYWN0ZXIpKSB7CisgICAgICAgIG1fY29kZVBvaW50U3VwcG9ydC5lbnN1cmVTaXpl
KDIgKiAoKmluZGV4ICsgMSkpOworICAgICAgICBib29sIGhhc0JlZW5TZXQgPSBtX2NvZGVQb2lu
dFN1cHBvcnQucXVpY2tTZXQoMiAqICppbmRleCk7CisgICAgICAgIGlmICghaGFzQmVlblNldCAm
JiBwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KGNoYXJhY3RlcikpCisgICAgICAgICAgICBtX2Nv
ZGVQb2ludFN1cHBvcnQucXVpY2tTZXQoMiAqICppbmRleCArIDEpOworICAgICAgICByZXR1cm4g
bV9jb2RlUG9pbnRTdXBwb3J0LnF1aWNrR2V0KDIgKiAqaW5kZXggKyAxKTsKKyAgICB9CisgICAg
cmV0dXJuIGdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cit9CisKIGJvb2wgRm9udDo6Y2Fu
UmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAog
ICAgIGZvciAoVUNoYXIzMiBjb2RlUG9pbnQgOiBTdHJpbmdWaWV3KGNoYXJhY3RlcnMsIGxlbmd0
aCkuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmICghZ2x5cGhGb3JDaGFyYWN0ZXIoY29kZVBv
aW50KSkKKyAgICAgICAgaWYgKCFzdXBwb3J0c0NvZGVQb2ludChjb2RlUG9pbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCA3M2NkZjJhODUyYjdhZDgzODJhNzBkNDdj
NjU3NWRmMWJlOTk5NGIwLi4xMmE3MmZkZDUyODRkZjU1ZWE1YjQ4YjAyOGJkMGE4YzFlNDc1MmNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0xNzEsNiArMTcx
LDggQEAgcHVibGljOgogCiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyKSBjb25zdDsKICAgICBHbHlwaCBnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsK
KyAgICBib29sIHN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIpIGNvbnN0OworICAgIGJvb2wgcGxh
dGZvcm1TdXBwb3J0c0NvZGVQb2ludChVQ2hhcjMyKSBjb25zdDsKIAogICAgIFJlZlB0cjxGb250
PiBzeXN0ZW1GYWxsYmFja0ZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgYm9vbCBpc0ZvclBsYXRmb3JtRm9udCkgY29uc3Q7CiAKQEAgLTI1MSw2ICsyNTMs
NyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSGFzaE1hcDx1bnNpZ25lZCwgUmVmUHRyPEdseXBo
UGFnZT4+IG1fZ2x5cGhQYWdlczsKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxHbHlwaE1l
dHJpY3NNYXA8RmxvYXRSZWN0Pj4gbV9nbHlwaFRvQm91bmRzTWFwOwogICAgIG11dGFibGUgR2x5
cGhNZXRyaWNzTWFwPGZsb2F0PiBtX2dseXBoVG9XaWR0aE1hcDsKKyAgICBtdXRhYmxlIEJpdFZl
Y3RvciBtX2NvZGVQb2ludFN1cHBvcnQ7CiAKICAgICBtdXRhYmxlIFJlZlB0cjxPcGVuVHlwZU1h
dGhEYXRhPiBtX21hdGhEYXRhOwogI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQpp
bmRleCAyMjM5YTgzNThjNTMyNzNkN2ZmYjk4ZjMyYjFhMmM0MWQ4OTkyM2MwLi4wOTM4NzM4YjA3
MTM3NzY5OGJmOGJhMzU5ZWYyN2JmNTM5Zjk4MmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENvY29hLm1tCkBAIC01OTcsNCArNTk3LDEz
IEBAIGZsb2F0IEZvbnQ6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QK
ICAgICByZXR1cm4gYWR2YW5jZS53aWR0aCArIG1fc3ludGhldGljQm9sZE9mZnNldDsKIH0KIAor
Ym9vbCBGb250OjpwbGF0Zm9ybVN1cHBvcnRzQ29kZVBvaW50KFVDaGFyMzIgY2hhcmFjdGVyKSBj
b25zdAoreworICAgIFVuaUNoYXIgY29kZVVuaXRzWzJdOworICAgIENHR2x5cGggZ2x5cGhzWzJd
OworICAgIENGSW5kZXggY291bnQgPSAwOworICAgIFUxNl9BUFBFTkRfVU5TQUZFKGNvZGVVbml0
cywgY291bnQsIGNoYXJhY3Rlcik7CisgICAgcmV0dXJuIENURm9udEdldEdseXBoc0ZvckNoYXJh
Y3RlcnMocGxhdGZvcm1EYXRhKCkuY3RGb250KCksIGNvZGVVbml0cywgZ2x5cGhzLCBjb3VudCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ZTA2NDExM2JiN2JmNmI5N2Rh
OTE2MmU3MGYxZDhmYTc4OWY2MWU1Li5lY2NjNzI5OWI3MjQ5MTU3ZGI4NzA2NWY3NTczYWVlNmUx
YTg1OTM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTgtMDctMDEgIE15bGVzIEMuIE1heGZp
ZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIExhc3RSZXNvcnQg
aW4gdGhlIGZvbnQgZmFtaWx5IGxpc3QgY2F1c2VzIGVtb2ppIHdpdGggam9pbmVycyB0byBiZSBy
ZW5kZXJlZCBhcyBtdWx0aXBsZSAubm90ZGVmIGNoYXJhY3RlcnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NzIwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC90ZXh0L2Vtb2ppLXdpdGgtam9p
bmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L2Vtb2ppLXdpdGgt
am9pbmVyLmh0bWw6IEFkZGVkLgorCiAyMDE4LTA2LTE5ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9s
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBMYXlvdXQgVGVzdCBpbXBvcnRlZC9tb3ppbGxhL2Nz
cy1hbmltYXRpb25zL3Rlc3RfYW5pbWF0aW9uLXBsYXlzdGF0ZS5odG1sIGlzIGZhaWxpbmcuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3RleHQvZW1vamktd2l0aC1qb2luZXItZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2Vtb2ppLXdpdGgtam9pbmVyLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mZTFjNmY1ZWE2MTVhMzY1OTA5MzEyMTU2MDhiZjU0YzliMTg1ZTdl
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2Vtb2ppLXdpdGgtam9p
bmVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitQQVNTIGVsZW1lbnQub2Zmc2V0V2lk
dGggaXMgNDgKK1BBU1MgZWxlbWVudC5vZmZzZXRXaWR0aCBpcyA0OAorUEFTUyBlbGVtZW50Lm9m
ZnNldFdpZHRoIGlzIDQ4CitQQVNTIGVsZW1lbnQub2Zmc2V0V2lkdGggaXMgNDgKK1BBU1MgZWxl
bWVudC5vZmZzZXRXaWR0aCBpcyA0OAorUEFTUyBlbGVtZW50Lm9mZnNldFdpZHRoIGlzIDQ4CitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK/CfkbHigI3i
mYLvuI8g8J+RsfCfj7vigI3imYLvuI8g8J+RsfCfj7zigI3imYLvuI8g8J+RsfCfj73igI3imYLv
uI8g8J+RsfCfj77igI3imYLvuI8g8J+RsfCfj7/igI3imYLvuI8KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvdGV4dC9lbW9qaS13aXRoLWpvaW5lci5odG1sIGIvTGF5b3V0VGVzdHMvZmFz
dC90ZXh0L2Vtb2ppLXdpdGgtam9pbmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUyNzE2NDdiOGNmMjJj
MDdiMjA1ZTE4NzJmNzBiYTQ2ZDc0MmRkMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvdGV4dC9lbW9qaS13aXRoLWpvaW5lci5odG1sCkBAIC0wLDAgKzEsMjggQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHN0eWxlPgorLmliIHsKKyAgICBmb250OiA0OHB4
ICdBcHBsZSBDb2xvciBFbW9qaScsICdMYXN0UmVzb3J0JzsKKyAgICBkaXNwbGF5OiBpbmxpbmUt
YmxvY2s7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGNsYXNzPSJpYiI+JiN4
MUY0NzE7Jnp3ajsmI3gyNjQyOyYjeEZFMEY7PC9kaXY+Cis8ZGl2IGNsYXNzPSJpYiI+JiN4MUY0
NzE7JiN4MUYzRkI7Jnp3ajsmI3gyNjQyOyYjeEZFMEY7PC9kaXY+Cis8ZGl2IGNsYXNzPSJpYiI+
JiN4MUY0NzE7JiN4MUYzRkM7Jnp3ajsmI3gyNjQyOyYjeEZFMEY7PC9kaXY+Cis8ZGl2IGNsYXNz
PSJpYiI+JiN4MUY0NzE7JiN4MUYzRkQ7Jnp3ajsmI3gyNjQyOyYjeEZFMEY7PC9kaXY+Cis8ZGl2
IGNsYXNzPSJpYiI+JiN4MUY0NzE7JiN4MUYzRkU7Jnp3ajsmI3gyNjQyOyYjeEZFMEY7PC9kaXY+
Cis8ZGl2IGNsYXNzPSJpYiI+JiN4MUY0NzE7JiN4MUYzRkY7Jnp3ajsmI3gyNjQyOyYjeEZFMEY7
PC9kaXY+Cis8c2NyaXB0PgordmFyIGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFs
bCgiLmliIik7Citmb3IgKHZhciBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CisgICAgc2hvdWxkQmUo
ImVsZW1lbnQub2Zmc2V0V2lkdGgiLCAiNDgiKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgorCg==
</data>
<flag name="commit-queue"
          id="362102"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>