<?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>215052</bug_id>
          
          <creation_ts>2020-08-01 00:19:55 -0700</creation_ts>
          <short_desc>Make GlyphBuffers required in the fast text codepath</short_desc>
          <delta_ts>2020-08-08 22:14:46 -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>
          
          <blocked>206208</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1677090</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-01 00:19:55 -0700</bug_when>
    <thetext>Make GlyphBuffers required in the fast text codepath</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677091</commentid>
    <comment_count>1</comment_count>
      <attachid>405771</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-01 00:29:21 -0700</bug_when>
    <thetext>Created attachment 405771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677109</commentid>
    <comment_count>2</comment_count>
      <attachid>405771</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-01 02:31:49 -0700</bug_when>
    <thetext>Comment on attachment 405771
Patch

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

&gt; Source/WebCore/platform/graphics/WidthIterator.cpp:84
&gt;      if (m_run.length() &lt;= 1 || !(m_enableKerning || m_requiresShaping))

if (m_run.length() &lt;= 1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677138</commentid>
    <comment_count>3</comment_count>
      <attachid>405789</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-01 12:18:57 -0700</bug_when>
    <thetext>Created attachment 405789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677141</commentid>
    <comment_count>4</comment_count>
      <attachid>405790</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-01 12:27:15 -0700</bug_when>
    <thetext>Created attachment 405790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677338</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-08-03 10:11:45 -0700</bug_when>
    <thetext>Is this going to be a perf regression?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677866</commentid>
    <comment_count>6</comment_count>
      <attachid>405977</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-04 20:08:51 -0700</bug_when>
    <thetext>Created attachment 405977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677873</commentid>
    <comment_count>7</comment_count>
      <attachid>405981</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-04 21:04:03 -0700</bug_when>
    <thetext>Created attachment 405981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677874</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-04 21:05:00 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #5)
&gt; Is this going to be a perf regression?

I&apos;m still testing. Will comment here when I know more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678421</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-06 14:41:09 -0700</bug_when>
    <thetext>% compare-results -a plt-results-Vanilla -b plt-results-RequiredGlyphBuffers 
a mean = 740.41311
b mean = 743.70648
pValue = 0.7209862553
(Smaller means are better.)
1.004 times worse
Results ARE NOT significant</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678434</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-06 15:33:20 -0700</bug_when>
    <thetext>The design test of MotionMark shows this to be a progression

With patch: 156pt
Without patch: 153pt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678882</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-08 00:20:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/66718097&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678915</commentid>
    <comment_count>12</comment_count>
      <attachid>405981</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-08 11:40:39 -0700</bug_when>
    <thetext>Comment on attachment 405981
Patch

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

&gt; Source/WebCore/platform/graphics/FontCascade.cpp:450
&gt; +    // This is needed only to match the result of the slow path. Same glyph widths but different floating point arithmentics can
&gt; +    // produce different run width.

Existing comment just moving but:

- Would look nicer if line break was at sentence break.
- &quot;arithmentics&quot;

&gt; LayoutTests/ChangeLog:8
&gt; +        * platform/win/fast/events/selectstart-by-drag-expected.txt: Test progressed on Windows.

Do you know why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678946</commentid>
    <comment_count>13</comment_count>
      <attachid>405981</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-08 21:40:11 -0700</bug_when>
    <thetext>Comment on attachment 405981
Patch

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

&gt;&gt; LayoutTests/ChangeLog:8
&gt;&gt; +        * platform/win/fast/events/selectstart-by-drag-expected.txt: Test progressed on Windows.
&gt; 
&gt; Do you know why?

I don&apos;t have a Windows development environment, so I can&apos;t say for sure, but requiring GlyphBuffers is a slight behavior change. When GlyphBuffers aren&apos;t specified, shaping doesn&apos;t occur at all, so making them mandatory performs shaping when shaping didn&apos;t always used to occur.  (This is why I made sure to check performance numbers before making this patch as r?.)

Because this is a progression, and aligns Windows with Mac and iOS, I didn&apos;t look too hard at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678948</commentid>
    <comment_count>14</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-08 22:14:46 -0700</bug_when>
    <thetext>Committed r265413: &lt;https://trac.webkit.org/changeset/265413&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405771</attachid>
            <date>2020-08-01 00:29:21 -0700</date>
            <delta_ts>2020-08-01 12:18:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215052-20200801002920.patch</filename>
            <type>text/plain</type>
            <size>20692</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQzMzUzZmU1ZThjOTRh
NWQ1ZmNkOTgzNTc4YWNmOTQzYTIzM2M5Mi4uYmE5NTVjOTA4YzdhZjEwN2M3Zjg3MDA1NTdiYTk1
NzdmOGEzZjBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIwLTA4LTAxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBHbHlw
aEJ1ZmZlcnMgcmVxdWlyZWQgaW4gdGhlIGZhc3QgdGV4dCBjb2RlcGF0aAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDUyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlv
biBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDc2OQorICAg
ICAgICBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjIwOC4K
KworICAgICAgICBQZXJmb3JtaW5nIHNoYXBpbmcgYWZmZWN0cyB0aGUgd2lkdGggb2Ygc3RyaW5n
czsgaW5kZWVkLCB0aGF0IGlzIG9uZSBvZgorICAgICAgICBpdHMgcHVycG9zZXMgZm9yIGV4aXN0
ZW5jZS4gU2hhcGluZyBjYW4gb25seSBoYXBwZW4gd2hlbiB3ZSBoYXZlIGEgR2x5cGhCdWZmZXIK
KyAgICAgICAgdG8gc2hhcGUuIFdlIGNhbid0IGp1c3QgYXJiaXRyYXJpbHkgZGVjaWRlIHRvIGRp
c2FibGUgc2hhcGluZyBmb3IgdmFyaW91cworICAgICAgICBmdW5jdGlvbnMganVzdCBiZWNhdXNl
IHRob3NlIGZ1bmN0aW9ucyBkb24ndCBldmVyIGluc3BlY3QgdGhlIGV4YWN0IGdseXBocy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgYSBwcmVwYXJhdGlvbiBzdGVwIHRvd2FyZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0NzY5IGFu
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MjA4
LCBhbmQgSSBjb3VsZG4ndCBjb21lIHVwIHdpdGggYQorICAgICAgICB0ZXN0IGNhc2UgdGhhdCB3
YXMgYnJva2VuIGhlcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhPZlRleHRSYW5nZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6
c2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0
aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2VP
bmVDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0
KToKKwogMjAyMC0wNy0zMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgogCiAgICAgICAgIENsZWFuIHVwIHRleHQgbGF5b3V0IGNvZGUgYSBiaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA2ODgwNzI2
MDNjMDEzMWYyYjZiZTUwY2ZlMDdmMzMyNjc3ZWM4ODRhLi4zMTU0Yjk4M2I0NWNlZmNhNTA5Y2Rj
ZmVlZTVhMWM2ZGMxNWI5ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zNzEsMTEgKzM3MSwxMiBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGhPZlRleHRSYW5nZShjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkCiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhT
b0ZhcigpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFdpZHRoSXRlcmF0b3Igc2ltcGxlSXRlcmF0
b3IodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzKTsKLSAgICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2
YW5jZShmcm9tLCBudWxscHRyKTsKKyAgICAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Cisg
ICAgICAgIHNpbXBsZUl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgZ2x5cGhCdWZmZXIpOwogICAgICAg
ICBvZmZzZXRCZWZvcmVSYW5nZSA9IHNpbXBsZUl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKLSAg
ICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2YW5jZSh0bywgbnVsbHB0cik7CisgICAgICAgIHNpbXBs
ZUl0ZXJhdG9yLmFkdmFuY2UodG8sIGdseXBoQnVmZmVyKTsKICAgICAgICAgb2Zmc2V0QWZ0ZXJS
YW5nZSA9IHNpbXBsZUl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgc2ltcGxlSXRl
cmF0b3IuYWR2YW5jZShydW4ubGVuZ3RoKCksIG51bGxwdHIpOworICAgICAgICBzaW1wbGVJdGVy
YXRvci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgZ2x5cGhCdWZmZXIpOwogICAgICAgICB0b3RhbFdp
ZHRoID0gc2ltcGxlSXRlcmF0b3IucnVuV2lkdGhTb0ZhcigpOwogICAgIH0KIApAQCAtNDMzLDI2
ICs0MzQsMjIgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdW
aWV3IHRleHQpIGNvbnN0CiAgICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKIAogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwotICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzID0gZW5h
YmxlS2VybmluZygpIHx8IHJlcXVpcmVzU2hhcGluZygpOwogICAgIGZsb2F0IHJ1bldpZHRoID0g
MDsKICAgICBhdXRvJiBmb250ID0gcHJpbWFyeUZvbnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gZ2x5cGggPSBnbHlw
aERhdGFGb3JDaGFyYWN0ZXIodGV4dFtpXSwgZmFsc2UpLmdseXBoOwogICAgICAgICBhdXRvIGds
eXBoV2lkdGggPSBmb250LndpZHRoRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICBydW5XaWR0aCAr
PSBnbHlwaFdpZHRoOwotICAgICAgICBpZiAoIWhhc0tlcm5pbmdPckxpZ2F0dXJlcykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBnbHlwaEJ1ZmZlci5hZGQoZ2x5cGgsICZmb250LCBn
bHlwaFdpZHRoKTsKICAgICB9Ci0gICAgaWYgKGhhc0tlcm5pbmdPckxpZ2F0dXJlcykgewotICAg
ICAgICBmb250LmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgZW5hYmxlS2VybmluZygp
LCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSk7
Ci0gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgdG8gbWF0Y2ggdGhlIHJlc3VsdCBvZiB0
aGUgc2xvdyBwYXRoLiBTYW1lIGdseXBoIHdpZHRocyBidXQgZGlmZmVyZW50IGZsb2F0aW5nIHBv
aW50IGFyaXRobWVudGljcyBjYW4KLSAgICAgICAgLy8gcHJvZHVjZSBkaWZmZXJlbnQgcnVuIHdp
ZHRoLgotICAgICAgICBmbG9hdCBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGll
ZCA9IC1ydW5XaWR0aDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZl
ci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhUcmFuc2Zv
cm1BcHBsaWVkICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpOwotICAgICAgICBy
dW5XaWR0aCArPSBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZDsKLSAgICB9
CisKKyAgICBmb250LmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgZW5hYmxlS2Vybmlu
ZygpLCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUo
KSk7CisgICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSB0byBtYXRjaCB0aGUgcmVzdWx0IG9mIHRo
ZSBzbG93IHBhdGguIFNhbWUgZ2x5cGggd2lkdGhzIGJ1dCBkaWZmZXJlbnQgZmxvYXRpbmcgcG9p
bnQgYXJpdGhtZW50aWNzIGNhbgorICAgIC8vIHByb2R1Y2UgZGlmZmVyZW50IHJ1biB3aWR0aC4K
KyAgICBmbG9hdCBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZCA9IC1ydW5X
aWR0aDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KQorICAgICAgICBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZCArPSBnbHlw
aEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKTsKKyAgICBydW5XaWR0aCArPSBydW5XaWR0aERp
ZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZDsKIAogICAgIGlmIChjYWNoZUVudHJ5KQogICAg
ICAgICAqY2FjaGVFbnRyeSA9IHJ1bldpZHRoOwpAQCAtMTM3OSw5ICsxMzc2LDkgQEAgR2x5cGhC
dWZmZXIgRm9udENhc2NhZGU6OmxheW91dFNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnMKICAgICAvLyBGSVhNRTogVXNpbmcgc2VwYXJhdGUgZ2x5cGggYnVm
ZmVycyBmb3IgdGhlIHByZWZpeCBhbmQgdGhlIHN1ZmZpeCBpcyBpbmNvcnJlY3Qgd2hlbiBrZXJu
aW5nIG9yCiAgICAgLy8gbGlnYXR1cmVzIGFyZSBlbmFibGVkLgogICAgIEdseXBoQnVmZmVyIGxv
Y2FsR2x5cGhCdWZmZXI7Ci0gICAgaXQuYWR2YW5jZShmcm9tLCAmbG9jYWxHbHlwaEJ1ZmZlcik7
CisgICAgaXQuYWR2YW5jZShmcm9tLCBsb2NhbEdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZv
cmVXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhC
dWZmZXIpOworICAgIGl0LmFkdmFuY2UodG8sIGdseXBoQnVmZmVyKTsKIAogICAgIGlmIChnbHlw
aEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBnbHlwaEJ1ZmZlcjsKQEAgLTEzOTEs
NyArMTM4OCw3IEBAIEdseXBoQnVmZmVyIEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zCiAgICAgZmxvYXQgaW5pdGlhbEFk
dmFuY2UgPSAwOwogICAgIGlmIChydW4ucnRsKCkpIHsKICAgICAgICAgZmxvYXQgZmluYWxSb3Vu
ZGluZ1dpZHRoID0gaXQuZmluYWxSb3VuZGluZ1dpZHRoKCk7Ci0gICAgICAgIGl0LmFkdmFuY2Uo
cnVuLmxlbmd0aCgpLCAmbG9jYWxHbHlwaEJ1ZmZlcik7CisgICAgICAgIGl0LmFkdmFuY2UocnVu
Lmxlbmd0aCgpLCBsb2NhbEdseXBoQnVmZmVyKTsKICAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBm
aW5hbFJvdW5kaW5nV2lkdGggKyBpdC5ydW5XaWR0aFNvRmFyKCkgLSBhZnRlcldpZHRoOwogICAg
IH0gZWxzZQogICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGJlZm9yZVdpZHRoOwpAQCAtMTUyNiw3
ICsxNTIzLDcgQEAgZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb24KIHsKICAgICBXaWR0aEl0ZXJhdG9y
IGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksIChlbmFibGVL
ZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpID8gJmdseXBoQnVmZmVyIDogbnVsbHB0cik7
CisgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKIAogICAgIGlmIChn
bHlwaE92ZXJmbG93KSB7CiAgICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGlu
dD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtaXQubWluR2x5cGhCb3VuZGluZ0JveFkoKSkg
LSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmFzY2Vu
dCgpKSk7CkBAIC0xNTU0LDE0ICsxNTUxLDE0IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiB7
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlz
LCBydW4pOwotICAgIGl0LmFkdmFuY2UoZnJvbSwgJmdseXBoQnVmZmVyKTsKKyAgICBpdC5hZHZh
bmNlKGZyb20sIGdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGl0LnJ1bldp
ZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZmZXIpOworICAgIGl0LmFk
dmFuY2UodG8sIGdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBhZnRlcldpZHRoID0gaXQucnVuV2lk
dGhTb0ZhcigpOwogICAgIGZsb2F0IHRvdGFsV2lkdGggPSAtMTsKIAogICAgIGlmIChydW4ucnRs
KCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksICZnbHlwaEJ1ZmZlcik7Cisg
ICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpLCBnbHlwaEJ1ZmZlcik7CiAgICAgICAgIHRv
dGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7CiAgICAgICAgIHNlbGVjdGlvblJlY3QubW92
ZSh0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCwgMCk7CiAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCmluZGV4IGIzYzJm
ZjZhMTM5OTBhNjZmZWU2YWVlOWUwZTU5NmNkZDg3ZDYyZjcuLjExZDE1ZjViZTg1ZDkxOGFkMWQz
MTJhMTYxZWI2OWY2MmZhOTBlMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCkBAIC03Nyw0NSArNzcsNDIgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzU29mdEJhbmtFbW9qaShVQ2hhcjMyIGNvZGVwb2ludCkKICAgICByZXR1cm4g
Y29kZXBvaW50ID49IDB4RTAwMSAmJiBjb2RlcG9pbnQgPD0gMHhFNTM3OwogfQogCi1pbmxpbmUg
YXV0byBXaWR0aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJl
dmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCitpbmxpbmUgYXV0byBXaWR0
aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFy
YWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCiB7Ci0gICAgaWYgKGdseXBoQnVmZmVyICYm
IGdseXBoQnVmZmVyLT5zaXplKCkgPT0gKGxhc3RHbHlwaENvdW50ICsgMSkgJiYgaXNTb2Z0QmFu
a0Vtb2ppKHByZXZpb3VzQ2hhcmFjdGVyKSkKKyAgICBpZiAoZ2x5cGhCdWZmZXIuc2l6ZSgpID09
IChsYXN0R2x5cGhDb3VudCArIDEpICYmIGlzU29mdEJhbmtFbW9qaShwcmV2aW91c0NoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1zVHlwZTo6Rm9yY2VkOwogICAgIGlmIChtX3J1
bi5sZW5ndGgoKSA8PSAxIHx8ICEobV9lbmFibGVLZXJuaW5nIHx8IG1fcmVxdWlyZXNTaGFwaW5n
KSkKICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybXNUeXBlOjpOb25lOwogICAgIHJldHVybiBUcmFu
c2Zvcm1zVHlwZTo6Tm90Rm9yY2VkOwogfQogCi1pbmxpbmUgZmxvYXQgV2lkdGhJdGVyYXRvcjo6
YXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGJvb2wgbHRyLCB1
bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQsIFVDaGFyMzIgcHJldmlv
dXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFj
dGVyc1RyZWF0ZWRBc1NwYWNlKQoraW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9u
dFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBib29sIGx0ciwgdW5zaWduZWQm
IGxhc3RHbHlwaENvdW50LCBjb25zdCBGb250KiBmb250LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFj
dGVyLCBib29sIGZvcmNlLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzQ2hhcmFjdGVyLCBzaG91
bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCwgcHJldmlv
dXNDaGFyYWN0ZXIpICE9IFdpZHRoSXRlcmF0b3I6OlRyYW5zZm9ybXNUeXBlOjpOb25lKTsKIAot
ICAgIGlmICghZ2x5cGhCdWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0byBnbHlw
aEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOworICAgIGF1dG8gZ2x5cGhCdWZmZXJT
aXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogICAgIGlmICghZm9yY2UgJiYgZ2x5cGhCdWZmZXJT
aXplIDw9IGxhc3RHbHlwaENvdW50ICsgMSkgewogICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGds
eXBoQnVmZmVyU2l6ZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcyA9IGdseXBoQnVmZmVyLT5hZHZhbmNlcygwKTsKKyAgICBHbHlw
aEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoMCk7CiAgICAg
ZmxvYXQgYmVmb3JlV2lkdGggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENv
dW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAgIGJlZm9yZVdpZHRoICs9IGFk
dmFuY2VzW2ldLndpZHRoKCk7CiAKICAgICBBU1NFUlQobGFzdEdseXBoQ291bnQgPD0gZ2x5cGhC
dWZmZXJTaXplKTsKICAgICBpZiAoIWx0cikKLSAgICAgICAgZ2x5cGhCdWZmZXItPnJldmVyc2Uo
bGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKKyAgICAg
ICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0g
bGFzdEdseXBoQ291bnQpOwogCi0gICAgZm9udC0+YXBwbHlUcmFuc2Zvcm1zKCpnbHlwaEJ1ZmZl
ciwgbGFzdEdseXBoQ291bnQsIG1fZW5hYmxlS2VybmluZywgbV9yZXF1aXJlc1NoYXBpbmcsIG1f
Zm9udC0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSk7Ci0gICAgZ2x5cGhCdWZm
ZXJTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsKKyAgICBmb250LT5hcHBseVRyYW5zZm9ybXMo
Z2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCBtX2VuYWJsZUtlcm5pbmcsIG1fcmVxdWlyZXNT
aGFwaW5nLCBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCkpOworICAg
IGdseXBoQnVmZmVyU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAg
IGFkdmFuY2VzW2ldLnNldEhlaWdodCgtYWR2YW5jZXNbaV0uaGVpZ2h0KCkpOwogCiAgICAgaWYg
KCFsdHIpCi0gICAgICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlw
aEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCk7CisgICAgICAgIGdseXBoQnVmZmVyLnJldmVy
c2UobGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKIAog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYyMDg6IFRo
aXMgaXMgdG90YWxseSwgMTAwJSwgZnVyaW91c2x5LCB1dHRlcmx5LCBmcnVzdHJhdGluZ2x5IGJv
Z3VzLgogICAgIC8vIFRoZXJlIGlzIGFic29sdXRlbHkgbm8gZ3VhcmFudGVlIHRoYXQgZ2x5cGgg
aW5kaWNlcyBiZWZvcmUgc2hhcGluZyBoYXZlIGFueSByZWxhdGlvbiBhdCBhbGwgd2l0aCBnbHlw
aCBpbmRpY2VzIGFmdGVyIHNoYXBpbmcuCkBAIC0xMjcsOCArMTI0LDggQEAgaW5saW5lIGZsb2F0
IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVm
ZmVyLCBib29sIGwKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjb25zdCBPcmlnaW5h
bEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRlZEFzU3BhY2UmIG9yaWdpbmFsQWR2YW5jZXMgPSBj
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2VbaV0uc2Vjb25kOwogICAgICAgICBpZiAoc3BhY2VPZmZz
ZXQgJiYgIW9yaWdpbmFsQWR2YW5jZXMuY2hhcmFjdGVySXNTcGFjZSkKLSAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5hZHZhbmNlcyhzcGFjZU9mZnNldCAtIDEpLT5zZXRXaWR0aChvcmlnaW5hbEFk
dmFuY2VzLmFkdmFuY2VCZWZvcmVDaGFyYWN0ZXIpOwotICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2
YW5jZXMoc3BhY2VPZmZzZXQpLT5zZXRXaWR0aChvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VBdENo
YXJhY3Rlcik7CisgICAgICAgICAgICBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhzcGFjZU9mZnNldCAt
IDEpLT5zZXRXaWR0aChvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VCZWZvcmVDaGFyYWN0ZXIpOwor
ICAgICAgICBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhzcGFjZU9mZnNldCktPnNldFdpZHRoKG9yaWdp
bmFsQWR2YW5jZXMuYWR2YW5jZUF0Q2hhcmFjdGVyKTsKICAgICB9CiAgICAgY2hhcmFjdGVyc1Ry
ZWF0ZWRBc1NwYWNlLmNsZWFyKCk7CiAKQEAgLTE3MCw3ICsxNjcsNyBAQCBzdGF0aWMgaW5saW5l
IHN0ZDo6cGFpcjxib29sLCBib29sPiBleHBhbnNpb25Mb2NhdGlvbihib29sIGlkZW9ncmFwaCwg
Ym9vbCB0cmVhdAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dEl0ZXJhdG9yPgotaW5saW5l
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRl
eHRJdGVyYXRvciwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQoraW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQogewogICAgIC8vIFRoZSBjb3JlIGxvZ2ljIGhlcmUg
bmVlZHMgdG8gbWF0Y2ggU2ltcGxlTGluZUxheW91dDo6d2lkdGhGb3JTaW1wbGVUZXh0KCkKICAg
ICBib29sIHJ0bCA9IG1fcnVuLnJ0bCgpOwpAQCAtMTkwLDcgKzE4Nyw3IEBAIGlubGluZSB1bnNp
Z25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRl
cmF0b3IsIEdseXBoCiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJp
bWFyeUZvbnQoKTsKICAgICBjb25zdCBGb250KiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnQ7
Ci0gICAgdW5zaWduZWQgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVy
LT5zaXplKCkgOiAwOworICAgIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIu
c2l6ZSgpOwogCiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwogICAgIFVDaGFyMzIgcHJldmlv
dXNDaGFyYWN0ZXIgPSAwOwpAQCAtMjM0LDggKzIzMSw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0
aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEds
eXBoCiAgICAgICAgICAgICBhdXRvIHRyYW5zZm9ybXNUeXBlID0gc2hvdWxkQXBwbHlGb250VHJh
bnNmb3JtcyhnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKTsK
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1zVHlwZSAhPSBUcmFuc2Zvcm1zVHlwZTo6Tm9uZSkg
ewogICAgICAgICAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zvcm1z
KGdseXBoQnVmZmVyLCBtX3J1bi5sdHIoKSwgbGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0YSwg
cHJldmlvdXNDaGFyYWN0ZXIsIHRyYW5zZm9ybXNUeXBlID09IFRyYW5zZm9ybXNUeXBlOjpGb3Jj
ZWQsIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdseXBo
QnVmZmVyKQotICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2hyaW5rKGxhc3RHbHlw
aENvdW50KTsKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci5zaHJpbmsobGFzdEdseXBoQ291
bnQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250OwpA
QCAtMjg1LDE1ICsyODEsMTMgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJbmNyZWFzZSBwcmV2aW91cyB3aWR0aAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9IG1fZXhwYW5z
aW9uUGVyT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBo
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZl
ci0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9mb3JUZXh0RW1waGFzaXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lkdGhTcGFjZUdseXBoKCksIGZvbnQsIG1f
ZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZm9udC0+c3BhY2VHbHlwaCgpLCBmb250LCBt
X2V4cGFuc2lvblBlck9wcG9ydHVuaXR5LCBjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFkdmFuY2UobV9leHBhbnNpb25QZXJPcHBv
cnR1bml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZm9yVGV4dEVtcGhhc2lzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGZvbnQtPnplcm9XaWR0aFNwYWNl
R2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLmFkZChmb250LT5zcGFjZUdseXBoKCks
IGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaEJ1ZmZlci5leHBhbmRMYXN0QWR2YW5jZShtX2V4cGFuc2lvblBlck9wcG9y
dHVuaXR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgbmV4dCB3aWR0aAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnRvdmVySnVzdGlmaWNhdGlvbldpZHRoICs9IG1fZXhwYW5zaW9uUGVyT3Bw
b3J0dW5pdHk7CkBAIC0zMTgsOSArMzEyLDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0
b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKICAg
ICAgICAgfQogCiAgICAgICAgIGF1dG8gdHJhbnNmb3Jtc1R5cGUgPSBzaG91bGRBcHBseUZvbnRU
cmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCwgcHJldmlvdXNDaGFyYWN0ZXIp
OwotICAgICAgICBpZiAodHJhbnNmb3Jtc1R5cGUgIT0gVHJhbnNmb3Jtc1R5cGU6Ok5vbmUgJiYg
Z2x5cGhCdWZmZXIgJiYgRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgICAgICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGdseXBoQnVmZmVyLT5zaXplKCksCi0gICAgICAgICAgICAgICAgT3JpZ2luYWxBZHZhbmNlc0Zv
ckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlKGNoYXJhY3RlciA9PSAnICcsIGdseXBoQnVmZmVyLT5z
aXplKCkgPyBnbHlwaEJ1ZmZlci0+YWR2YW5jZUF0KGdseXBoQnVmZmVyLT5zaXplKCkgLSAxKS53
aWR0aCgpIDogMCwgd2lkdGgpKSk7CisgICAgICAgIGlmICh0cmFuc2Zvcm1zVHlwZSAhPSBUcmFu
c2Zvcm1zVHlwZTo6Tm9uZSAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcikp
IHsKKyAgICAgICAgICAgIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoZ2x5cGhCdWZmZXIuc2l6ZSgpLAorICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5j
ZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZl
ci5zaXplKCkgPyBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gMSku
d2lkdGgoKSA6IDAsIHdpZHRoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fYWNjb3Vu
dEZvckdseXBoQm91bmRzKSB7CkBAIC0zMzksOCArMzMzLDcgQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwg
R2x5cGgKIAogICAgICAgICB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nICs9IHdpZHRoOwogCi0gICAg
ICAgIGlmIChnbHlwaEJ1ZmZlcikKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgs
IGZvbnQsIChydGwgPyBvbGRXaWR0aCArIGxhc3RSb3VuZGluZ1dpZHRoIDogd2lkdGgpLCBjdXJy
ZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGdseXBoLCBmb250LCAocnRs
ID8gb2xkV2lkdGggKyBsYXN0Um91bmRpbmdXaWR0aCA6IHdpZHRoKSwgY3VycmVudENoYXJhY3Rl
cik7CiAKICAgICAgICAgbGFzdFJvdW5kaW5nV2lkdGggPSB3aWR0aCAtIG9sZFdpZHRoOwogCkBA
IC0zNTIsMTggKzM0NSwxNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaAogICAgICAgICBwcmV2
aW91c0NoYXJhY3RlciA9IGNoYXJhY3RlcjsKICAgICB9CiAKLSAgICBpZiAoZ2x5cGhCdWZmZXIg
JiYgbGVmdG92ZXJKdXN0aWZpY2F0aW9uV2lkdGgpIHsKKyAgICBpZiAobGVmdG92ZXJKdXN0aWZp
Y2F0aW9uV2lkdGgpIHsKICAgICAgICAgaWYgKG1fZm9yVGV4dEVtcGhhc2lzKQotICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmFkZChsYXN0Rm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwg
bGFzdEZvbnREYXRhLCBsZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwgbV9ydW4ubGVuZ3RoKCkg
LSAxKTsKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLmFkZChsYXN0Rm9udERhdGEtPnplcm9XaWR0
aFNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRhLCBsZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwg
bV9ydW4ubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2x5cGhCdWZm
ZXItPmFkZChsYXN0Rm9udERhdGEtPnNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRhLCBsZWZ0b3Zl
ckp1c3RpZmljYXRpb25XaWR0aCwgbV9ydW4ubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgIGds
eXBoQnVmZmVyLmFkZChsYXN0Rm9udERhdGEtPnNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRhLCBs
ZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwgbV9ydW4ubGVuZ3RoKCkgLSAxKTsKICAgICB9CiAK
ICAgICBhdXRvIHRyYW5zZm9ybXNUeXBlID0gc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyhnbHlw
aEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKICAgICBpZiAodHJh
bnNmb3Jtc1R5cGUgIT0gVHJhbnNmb3Jtc1R5cGU6Ok5vbmUpIHsKICAgICAgICAgbV9ydW5XaWR0
aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBs
YXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCBwcmV2aW91c0NoYXJhY3RlciwgdHJhbnNmb3Jt
c1R5cGUgPT0gVHJhbnNmb3Jtc1R5cGU6OkZvcmNlZCwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNl
KTsKLSAgICAgICAgaWYgKGdseXBoQnVmZmVyKQotICAgICAgICAgICAgZ2x5cGhCdWZmZXItPnNo
cmluayhsYXN0R2x5cGhDb3VudCk7CisgICAgICAgIGdseXBoQnVmZmVyLnNocmluayhsYXN0R2x5
cGhDb3VudCk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgY29uc3VtZWRDaGFyYWN0ZXJzID0gdGV4
dEl0ZXJhdG9yLmN1cnJlbnRJbmRleCgpIC0gbV9jdXJyZW50Q2hhcmFjdGVyOwpAQCAtMzczLDcg
KzM2NSw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwo
VGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoCiAgICAgcmV0dXJuIGNvbnN1bWVkQ2hh
cmFjdGVyczsKIH0KIAotdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBv
ZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3Vuc2lnbmVkIFdpZHRoSXRlcmF0b3I6
OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpCiB7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CiAKQEAgLTM5NSw3ICszODcsNyBA
QCB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyKQogYm9vbCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFj
dGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQogewogICAgIHVuc2ln
bmVkIG9sZFNpemUgPSBnbHlwaEJ1ZmZlci5zaXplKCk7Ci0gICAgYWR2YW5jZShtX2N1cnJlbnRD
aGFyYWN0ZXIgKyAxLCAmZ2x5cGhCdWZmZXIpOworICAgIGFkdmFuY2UobV9jdXJyZW50Q2hhcmFj
dGVyICsgMSwgZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0IHcgPSAwOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkKICAgICAgICAgdyAr
PSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAppbmRleCBjZDBkMmZjODc0ZjU0OWY2
YWY5NTJkMjQyNzcxZDliMGQwZmVhMDlhLi5jMDgzZjZlNDFmNDY4MDM2OTkyNjE5YTE2ODQ4NTQ4
NmUwMTU0OGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5oCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKIHB1
YmxpYzoKICAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50
Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAK
LSAgICB1bnNpZ25lZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciopOworICAgIHVu
c2lnbmVkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJik7CiAgICAgYm9vbCBhZHZh
bmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0
IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhC
b3VuZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNTgsMTEgKzU4LDEx
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyLCBib29sIG1pcnJvcik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVy
YXRvcj4KLSAgICBpbmxpbmUgdW5zaWduZWQgYWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYs
IEdseXBoQnVmZmVyKik7CisgICAgaW5saW5lIHVuc2lnbmVkIGFkdmFuY2VJbnRlcm5hbChUZXh0
SXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciYpOwogCiAgICAgZW51bSBjbGFzcyBUcmFuc2Zvcm1zVHlw
ZSB7IE5vbmUsIEZvcmNlZCwgTm90Rm9yY2VkIH07Ci0gICAgVHJhbnNmb3Jtc1R5cGUgc2hvdWxk
QXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciosIHVuc2lnbmVkIGxhc3RHbHlw
aENvdW50LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyKSBjb25zdDsKLSAgICBmbG9hdCBhcHBs
eUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiwgYm9vbCBsdHIsIHVuc2lnbmVkJiBsYXN0R2x5
cGhDb3VudCwgY29uc3QgRm9udCosIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9y
Y2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYpOworICAgIFRyYW5zZm9ybXNUeXBlIHNob3Vs
ZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBsYXN0R2x5
cGhDb3VudCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcikgY29uc3Q7CisgICAgZmxvYXQgYXBw
bHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEds
eXBoQ291bnQsIGNvbnN0IEZvbnQqLCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZv
cmNlLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmKTsKIAogICAgIGNvbnN0IEZvbnRDYXNjYWRl
KiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggODEw
YTBiODgwYThhYTRkYWUwMmZhYjQ0NmE5NDFlZGQ5YzVhNzFkMS4uMDNjZTZjMTNjNTM4ZTRlODQ0
NGIzZTgwZjhhY2Q4MDIzMGJhZjNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcApAQCAtNTgsNyArNTgsNyBAQCBi
b29sIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6YWR2YW5jZSgpCiB2b2lkIFNWR1RleHRNZXRyaWNz
QnVpbGRlcjo6YWR2YW5jZVNpbXBsZVRleHQoKQogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVm
ZmVyOwotICAgIHVuc2lnbmVkIG1ldHJpY3NMZW5ndGggPSBtX3NpbXBsZVdpZHRoSXRlcmF0b3It
PmFkdmFuY2UobV90ZXh0UG9zaXRpb24gKyAxLCAmZ2x5cGhCdWZmZXIpOworICAgIHVuc2lnbmVk
IG1ldHJpY3NMZW5ndGggPSBtX3NpbXBsZVdpZHRoSXRlcmF0b3ItPmFkdmFuY2UobV90ZXh0UG9z
aXRpb24gKyAxLCBnbHlwaEJ1ZmZlcik7CiAgICAgaWYgKCFtZXRyaWNzTGVuZ3RoKSB7CiAgICAg
ICAgIG1fY3VycmVudE1ldHJpY3MgPSBTVkdUZXh0TWV0cmljcygpOwogICAgICAgICByZXR1cm47
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405789</attachid>
            <date>2020-08-01 12:18:57 -0700</date>
            <delta_ts>2020-08-01 12:27:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215052-20200801121856.patch</filename>
            <type>text/plain</type>
            <size>22301</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQzMzUzZmU1ZThjOTRh
NWQ1ZmNkOTgzNTc4YWNmOTQzYTIzM2M5Mi4uYmE5NTVjOTA4YzdhZjEwN2M3Zjg3MDA1NTdiYTk1
NzdmOGEzZjBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIwLTA4LTAxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBHbHlw
aEJ1ZmZlcnMgcmVxdWlyZWQgaW4gdGhlIGZhc3QgdGV4dCBjb2RlcGF0aAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDUyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlv
biBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDc2OQorICAg
ICAgICBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjIwOC4K
KworICAgICAgICBQZXJmb3JtaW5nIHNoYXBpbmcgYWZmZWN0cyB0aGUgd2lkdGggb2Ygc3RyaW5n
czsgaW5kZWVkLCB0aGF0IGlzIG9uZSBvZgorICAgICAgICBpdHMgcHVycG9zZXMgZm9yIGV4aXN0
ZW5jZS4gU2hhcGluZyBjYW4gb25seSBoYXBwZW4gd2hlbiB3ZSBoYXZlIGEgR2x5cGhCdWZmZXIK
KyAgICAgICAgdG8gc2hhcGUuIFdlIGNhbid0IGp1c3QgYXJiaXRyYXJpbHkgZGVjaWRlIHRvIGRp
c2FibGUgc2hhcGluZyBmb3IgdmFyaW91cworICAgICAgICBmdW5jdGlvbnMganVzdCBiZWNhdXNl
IHRob3NlIGZ1bmN0aW9ucyBkb24ndCBldmVyIGluc3BlY3QgdGhlIGV4YWN0IGdseXBocy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgYSBwcmVwYXJhdGlvbiBzdGVwIHRvd2FyZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0NzY5IGFu
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MjA4
LCBhbmQgSSBjb3VsZG4ndCBjb21lIHVwIHdpdGggYQorICAgICAgICB0ZXN0IGNhc2UgdGhhdCB3
YXMgYnJva2VuIGhlcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhPZlRleHRSYW5nZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6
c2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0
aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2VP
bmVDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0
KToKKwogMjAyMC0wNy0zMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgogCiAgICAgICAgIENsZWFuIHVwIHRleHQgbGF5b3V0IGNvZGUgYSBiaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA2ODgwNzI2
MDNjMDEzMWYyYjZiZTUwY2ZlMDdmMzMyNjc3ZWM4ODRhLi4zMTU0Yjk4M2I0NWNlZmNhNTA5Y2Rj
ZmVlZTVhMWM2ZGMxNWI5ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zNzEsMTEgKzM3MSwxMiBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGhPZlRleHRSYW5nZShjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkCiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhT
b0ZhcigpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFdpZHRoSXRlcmF0b3Igc2ltcGxlSXRlcmF0
b3IodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzKTsKLSAgICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2
YW5jZShmcm9tLCBudWxscHRyKTsKKyAgICAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Cisg
ICAgICAgIHNpbXBsZUl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgZ2x5cGhCdWZmZXIpOwogICAgICAg
ICBvZmZzZXRCZWZvcmVSYW5nZSA9IHNpbXBsZUl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKLSAg
ICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2YW5jZSh0bywgbnVsbHB0cik7CisgICAgICAgIHNpbXBs
ZUl0ZXJhdG9yLmFkdmFuY2UodG8sIGdseXBoQnVmZmVyKTsKICAgICAgICAgb2Zmc2V0QWZ0ZXJS
YW5nZSA9IHNpbXBsZUl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgc2ltcGxlSXRl
cmF0b3IuYWR2YW5jZShydW4ubGVuZ3RoKCksIG51bGxwdHIpOworICAgICAgICBzaW1wbGVJdGVy
YXRvci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgZ2x5cGhCdWZmZXIpOwogICAgICAgICB0b3RhbFdp
ZHRoID0gc2ltcGxlSXRlcmF0b3IucnVuV2lkdGhTb0ZhcigpOwogICAgIH0KIApAQCAtNDMzLDI2
ICs0MzQsMjIgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdW
aWV3IHRleHQpIGNvbnN0CiAgICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKIAogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwotICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzID0gZW5h
YmxlS2VybmluZygpIHx8IHJlcXVpcmVzU2hhcGluZygpOwogICAgIGZsb2F0IHJ1bldpZHRoID0g
MDsKICAgICBhdXRvJiBmb250ID0gcHJpbWFyeUZvbnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gZ2x5cGggPSBnbHlw
aERhdGFGb3JDaGFyYWN0ZXIodGV4dFtpXSwgZmFsc2UpLmdseXBoOwogICAgICAgICBhdXRvIGds
eXBoV2lkdGggPSBmb250LndpZHRoRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICBydW5XaWR0aCAr
PSBnbHlwaFdpZHRoOwotICAgICAgICBpZiAoIWhhc0tlcm5pbmdPckxpZ2F0dXJlcykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBnbHlwaEJ1ZmZlci5hZGQoZ2x5cGgsICZmb250LCBn
bHlwaFdpZHRoKTsKICAgICB9Ci0gICAgaWYgKGhhc0tlcm5pbmdPckxpZ2F0dXJlcykgewotICAg
ICAgICBmb250LmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgZW5hYmxlS2VybmluZygp
LCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSk7
Ci0gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgdG8gbWF0Y2ggdGhlIHJlc3VsdCBvZiB0
aGUgc2xvdyBwYXRoLiBTYW1lIGdseXBoIHdpZHRocyBidXQgZGlmZmVyZW50IGZsb2F0aW5nIHBv
aW50IGFyaXRobWVudGljcyBjYW4KLSAgICAgICAgLy8gcHJvZHVjZSBkaWZmZXJlbnQgcnVuIHdp
ZHRoLgotICAgICAgICBmbG9hdCBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGll
ZCA9IC1ydW5XaWR0aDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZl
ci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhUcmFuc2Zv
cm1BcHBsaWVkICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpOwotICAgICAgICBy
dW5XaWR0aCArPSBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZDsKLSAgICB9
CisKKyAgICBmb250LmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgZW5hYmxlS2Vybmlu
ZygpLCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUo
KSk7CisgICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSB0byBtYXRjaCB0aGUgcmVzdWx0IG9mIHRo
ZSBzbG93IHBhdGguIFNhbWUgZ2x5cGggd2lkdGhzIGJ1dCBkaWZmZXJlbnQgZmxvYXRpbmcgcG9p
bnQgYXJpdGhtZW50aWNzIGNhbgorICAgIC8vIHByb2R1Y2UgZGlmZmVyZW50IHJ1biB3aWR0aC4K
KyAgICBmbG9hdCBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZCA9IC1ydW5X
aWR0aDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KQorICAgICAgICBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZCArPSBnbHlw
aEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKTsKKyAgICBydW5XaWR0aCArPSBydW5XaWR0aERp
ZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZDsKIAogICAgIGlmIChjYWNoZUVudHJ5KQogICAg
ICAgICAqY2FjaGVFbnRyeSA9IHJ1bldpZHRoOwpAQCAtMTM3OSw5ICsxMzc2LDkgQEAgR2x5cGhC
dWZmZXIgRm9udENhc2NhZGU6OmxheW91dFNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnMKICAgICAvLyBGSVhNRTogVXNpbmcgc2VwYXJhdGUgZ2x5cGggYnVm
ZmVycyBmb3IgdGhlIHByZWZpeCBhbmQgdGhlIHN1ZmZpeCBpcyBpbmNvcnJlY3Qgd2hlbiBrZXJu
aW5nIG9yCiAgICAgLy8gbGlnYXR1cmVzIGFyZSBlbmFibGVkLgogICAgIEdseXBoQnVmZmVyIGxv
Y2FsR2x5cGhCdWZmZXI7Ci0gICAgaXQuYWR2YW5jZShmcm9tLCAmbG9jYWxHbHlwaEJ1ZmZlcik7
CisgICAgaXQuYWR2YW5jZShmcm9tLCBsb2NhbEdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZv
cmVXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhC
dWZmZXIpOworICAgIGl0LmFkdmFuY2UodG8sIGdseXBoQnVmZmVyKTsKIAogICAgIGlmIChnbHlw
aEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBnbHlwaEJ1ZmZlcjsKQEAgLTEzOTEs
NyArMTM4OCw3IEBAIEdseXBoQnVmZmVyIEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zCiAgICAgZmxvYXQgaW5pdGlhbEFk
dmFuY2UgPSAwOwogICAgIGlmIChydW4ucnRsKCkpIHsKICAgICAgICAgZmxvYXQgZmluYWxSb3Vu
ZGluZ1dpZHRoID0gaXQuZmluYWxSb3VuZGluZ1dpZHRoKCk7Ci0gICAgICAgIGl0LmFkdmFuY2Uo
cnVuLmxlbmd0aCgpLCAmbG9jYWxHbHlwaEJ1ZmZlcik7CisgICAgICAgIGl0LmFkdmFuY2UocnVu
Lmxlbmd0aCgpLCBsb2NhbEdseXBoQnVmZmVyKTsKICAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBm
aW5hbFJvdW5kaW5nV2lkdGggKyBpdC5ydW5XaWR0aFNvRmFyKCkgLSBhZnRlcldpZHRoOwogICAg
IH0gZWxzZQogICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGJlZm9yZVdpZHRoOwpAQCAtMTUyNiw3
ICsxNTIzLDcgQEAgZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb24KIHsKICAgICBXaWR0aEl0ZXJhdG9y
IGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksIChlbmFibGVL
ZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpID8gJmdseXBoQnVmZmVyIDogbnVsbHB0cik7
CisgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKIAogICAgIGlmIChn
bHlwaE92ZXJmbG93KSB7CiAgICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGlu
dD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtaXQubWluR2x5cGhCb3VuZGluZ0JveFkoKSkg
LSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmFzY2Vu
dCgpKSk7CkBAIC0xNTU0LDE0ICsxNTUxLDE0IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiB7
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlz
LCBydW4pOwotICAgIGl0LmFkdmFuY2UoZnJvbSwgJmdseXBoQnVmZmVyKTsKKyAgICBpdC5hZHZh
bmNlKGZyb20sIGdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGl0LnJ1bldp
ZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZmZXIpOworICAgIGl0LmFk
dmFuY2UodG8sIGdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBhZnRlcldpZHRoID0gaXQucnVuV2lk
dGhTb0ZhcigpOwogICAgIGZsb2F0IHRvdGFsV2lkdGggPSAtMTsKIAogICAgIGlmIChydW4ucnRs
KCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksICZnbHlwaEJ1ZmZlcik7Cisg
ICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpLCBnbHlwaEJ1ZmZlcik7CiAgICAgICAgIHRv
dGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7CiAgICAgICAgIHNlbGVjdGlvblJlY3QubW92
ZSh0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCwgMCk7CiAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCmluZGV4IGIzYzJm
ZjZhMTM5OTBhNjZmZWU2YWVlOWUwZTU5NmNkZDg3ZDYyZjcuLjExZDE1ZjViZTg1ZDkxOGFkMWQz
MTJhMTYxZWI2OWY2MmZhOTBlMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCkBAIC03Nyw0NSArNzcsNDIgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzU29mdEJhbmtFbW9qaShVQ2hhcjMyIGNvZGVwb2ludCkKICAgICByZXR1cm4g
Y29kZXBvaW50ID49IDB4RTAwMSAmJiBjb2RlcG9pbnQgPD0gMHhFNTM3OwogfQogCi1pbmxpbmUg
YXV0byBXaWR0aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJl
dmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCitpbmxpbmUgYXV0byBXaWR0
aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFy
YWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCiB7Ci0gICAgaWYgKGdseXBoQnVmZmVyICYm
IGdseXBoQnVmZmVyLT5zaXplKCkgPT0gKGxhc3RHbHlwaENvdW50ICsgMSkgJiYgaXNTb2Z0QmFu
a0Vtb2ppKHByZXZpb3VzQ2hhcmFjdGVyKSkKKyAgICBpZiAoZ2x5cGhCdWZmZXIuc2l6ZSgpID09
IChsYXN0R2x5cGhDb3VudCArIDEpICYmIGlzU29mdEJhbmtFbW9qaShwcmV2aW91c0NoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1zVHlwZTo6Rm9yY2VkOwogICAgIGlmIChtX3J1
bi5sZW5ndGgoKSA8PSAxIHx8ICEobV9lbmFibGVLZXJuaW5nIHx8IG1fcmVxdWlyZXNTaGFwaW5n
KSkKICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybXNUeXBlOjpOb25lOwogICAgIHJldHVybiBUcmFu
c2Zvcm1zVHlwZTo6Tm90Rm9yY2VkOwogfQogCi1pbmxpbmUgZmxvYXQgV2lkdGhJdGVyYXRvcjo6
YXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGJvb2wgbHRyLCB1
bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqIGZvbnQsIFVDaGFyMzIgcHJldmlv
dXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFj
dGVyc1RyZWF0ZWRBc1NwYWNlKQoraW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9u
dFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBib29sIGx0ciwgdW5zaWduZWQm
IGxhc3RHbHlwaENvdW50LCBjb25zdCBGb250KiBmb250LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFj
dGVyLCBib29sIGZvcmNlLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVh
dGVkQXNTcGFjZSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKHByZXZpb3VzQ2hhcmFjdGVyLCBzaG91
bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCwgcHJldmlv
dXNDaGFyYWN0ZXIpICE9IFdpZHRoSXRlcmF0b3I6OlRyYW5zZm9ybXNUeXBlOjpOb25lKTsKIAot
ICAgIGlmICghZ2x5cGhCdWZmZXIpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXV0byBnbHlw
aEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+c2l6ZSgpOworICAgIGF1dG8gZ2x5cGhCdWZmZXJT
aXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogICAgIGlmICghZm9yY2UgJiYgZ2x5cGhCdWZmZXJT
aXplIDw9IGxhc3RHbHlwaENvdW50ICsgMSkgewogICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGds
eXBoQnVmZmVyU2l6ZTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcyA9IGdseXBoQnVmZmVyLT5hZHZhbmNlcygwKTsKKyAgICBHbHlw
aEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoMCk7CiAgICAg
ZmxvYXQgYmVmb3JlV2lkdGggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENv
dW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAgIGJlZm9yZVdpZHRoICs9IGFk
dmFuY2VzW2ldLndpZHRoKCk7CiAKICAgICBBU1NFUlQobGFzdEdseXBoQ291bnQgPD0gZ2x5cGhC
dWZmZXJTaXplKTsKICAgICBpZiAoIWx0cikKLSAgICAgICAgZ2x5cGhCdWZmZXItPnJldmVyc2Uo
bGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKKyAgICAg
ICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0g
bGFzdEdseXBoQ291bnQpOwogCi0gICAgZm9udC0+YXBwbHlUcmFuc2Zvcm1zKCpnbHlwaEJ1ZmZl
ciwgbGFzdEdseXBoQ291bnQsIG1fZW5hYmxlS2VybmluZywgbV9yZXF1aXJlc1NoYXBpbmcsIG1f
Zm9udC0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSk7Ci0gICAgZ2x5cGhCdWZm
ZXJTaXplID0gZ2x5cGhCdWZmZXItPnNpemUoKTsKKyAgICBmb250LT5hcHBseVRyYW5zZm9ybXMo
Z2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCBtX2VuYWJsZUtlcm5pbmcsIG1fcmVxdWlyZXNT
aGFwaW5nLCBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkTG9jYWxlKCkpOworICAg
IGdseXBoQnVmZmVyU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsKIAogICAgIGZvciAodW5zaWdu
ZWQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAg
IGFkdmFuY2VzW2ldLnNldEhlaWdodCgtYWR2YW5jZXNbaV0uaGVpZ2h0KCkpOwogCiAgICAgaWYg
KCFsdHIpCi0gICAgICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlw
aEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCk7CisgICAgICAgIGdseXBoQnVmZmVyLnJldmVy
c2UobGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKIAog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYyMDg6IFRo
aXMgaXMgdG90YWxseSwgMTAwJSwgZnVyaW91c2x5LCB1dHRlcmx5LCBmcnVzdHJhdGluZ2x5IGJv
Z3VzLgogICAgIC8vIFRoZXJlIGlzIGFic29sdXRlbHkgbm8gZ3VhcmFudGVlIHRoYXQgZ2x5cGgg
aW5kaWNlcyBiZWZvcmUgc2hhcGluZyBoYXZlIGFueSByZWxhdGlvbiBhdCBhbGwgd2l0aCBnbHlw
aCBpbmRpY2VzIGFmdGVyIHNoYXBpbmcuCkBAIC0xMjcsOCArMTI0LDggQEAgaW5saW5lIGZsb2F0
IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVm
ZmVyLCBib29sIGwKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBjb25zdCBPcmlnaW5h
bEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRlZEFzU3BhY2UmIG9yaWdpbmFsQWR2YW5jZXMgPSBj
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2VbaV0uc2Vjb25kOwogICAgICAgICBpZiAoc3BhY2VPZmZz
ZXQgJiYgIW9yaWdpbmFsQWR2YW5jZXMuY2hhcmFjdGVySXNTcGFjZSkKLSAgICAgICAgICAgIGds
eXBoQnVmZmVyLT5hZHZhbmNlcyhzcGFjZU9mZnNldCAtIDEpLT5zZXRXaWR0aChvcmlnaW5hbEFk
dmFuY2VzLmFkdmFuY2VCZWZvcmVDaGFyYWN0ZXIpOwotICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2
YW5jZXMoc3BhY2VPZmZzZXQpLT5zZXRXaWR0aChvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VBdENo
YXJhY3Rlcik7CisgICAgICAgICAgICBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhzcGFjZU9mZnNldCAt
IDEpLT5zZXRXaWR0aChvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VCZWZvcmVDaGFyYWN0ZXIpOwor
ICAgICAgICBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhzcGFjZU9mZnNldCktPnNldFdpZHRoKG9yaWdp
bmFsQWR2YW5jZXMuYWR2YW5jZUF0Q2hhcmFjdGVyKTsKICAgICB9CiAgICAgY2hhcmFjdGVyc1Ry
ZWF0ZWRBc1NwYWNlLmNsZWFyKCk7CiAKQEAgLTE3MCw3ICsxNjcsNyBAQCBzdGF0aWMgaW5saW5l
IHN0ZDo6cGFpcjxib29sLCBib29sPiBleHBhbnNpb25Mb2NhdGlvbihib29sIGlkZW9ncmFwaCwg
Ym9vbCB0cmVhdAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVGV4dEl0ZXJhdG9yPgotaW5saW5l
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRl
eHRJdGVyYXRvciwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQoraW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQogewogICAgIC8vIFRoZSBjb3JlIGxvZ2ljIGhlcmUg
bmVlZHMgdG8gbWF0Y2ggU2ltcGxlTGluZUxheW91dDo6d2lkdGhGb3JTaW1wbGVUZXh0KCkKICAg
ICBib29sIHJ0bCA9IG1fcnVuLnJ0bCgpOwpAQCAtMTkwLDcgKzE4Nyw3IEBAIGlubGluZSB1bnNp
Z25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRl
cmF0b3IsIEdseXBoCiAKICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJp
bWFyeUZvbnQoKTsKICAgICBjb25zdCBGb250KiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnQ7
Ci0gICAgdW5zaWduZWQgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVy
LT5zaXplKCkgOiAwOworICAgIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIu
c2l6ZSgpOwogCiAgICAgVUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwogICAgIFVDaGFyMzIgcHJldmlv
dXNDaGFyYWN0ZXIgPSAwOwpAQCAtMjM0LDggKzIzMSw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0
aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEds
eXBoCiAgICAgICAgICAgICBhdXRvIHRyYW5zZm9ybXNUeXBlID0gc2hvdWxkQXBwbHlGb250VHJh
bnNmb3JtcyhnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKTsK
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1zVHlwZSAhPSBUcmFuc2Zvcm1zVHlwZTo6Tm9uZSkg
ewogICAgICAgICAgICAgICAgIG1fcnVuV2lkdGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zvcm1z
KGdseXBoQnVmZmVyLCBtX3J1bi5sdHIoKSwgbGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0YSwg
cHJldmlvdXNDaGFyYWN0ZXIsIHRyYW5zZm9ybXNUeXBlID09IFRyYW5zZm9ybXNUeXBlOjpGb3Jj
ZWQsIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdseXBo
QnVmZmVyKQotICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2hyaW5rKGxhc3RHbHlw
aENvdW50KTsKKyAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci5zaHJpbmsobGFzdEdseXBoQ291
bnQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250OwpA
QCAtMjg1LDE1ICsyODEsMTMgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJbmNyZWFzZSBwcmV2aW91cyB3aWR0aAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZXhwYW5zaW9uIC09IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9IG1fZXhwYW5z
aW9uUGVyT3Bwb3J0dW5pdHk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBo
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZl
ci0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9mb3JUZXh0RW1waGFzaXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56ZXJvV2lkdGhTcGFjZUdseXBoKCksIGZvbnQsIG1f
ZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZm9udC0+c3BhY2VHbHlwaCgpLCBmb250LCBt
X2V4cGFuc2lvblBlck9wcG9ydHVuaXR5LCBjdXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5kTGFzdEFkdmFuY2UobV9leHBhbnNpb25QZXJPcHBv
cnR1bml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fZm9yVGV4dEVtcGhhc2lzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGZvbnQtPnplcm9XaWR0aFNwYWNl
R2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3Rl
cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLmFkZChmb250LT5zcGFjZUdseXBoKCks
IGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbHlwaEJ1ZmZlci5leHBhbmRMYXN0QWR2YW5jZShtX2V4cGFuc2lvblBlck9wcG9y
dHVuaXR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSW5jcmVhc2UgbmV4dCB3aWR0aAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnRvdmVySnVzdGlmaWNhdGlvbldpZHRoICs9IG1fZXhwYW5zaW9uUGVyT3Bw
b3J0dW5pdHk7CkBAIC0zMTgsOSArMzEyLDkgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0
b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKICAg
ICAgICAgfQogCiAgICAgICAgIGF1dG8gdHJhbnNmb3Jtc1R5cGUgPSBzaG91bGRBcHBseUZvbnRU
cmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3VudCwgcHJldmlvdXNDaGFyYWN0ZXIp
OwotICAgICAgICBpZiAodHJhbnNmb3Jtc1R5cGUgIT0gVHJhbnNmb3Jtc1R5cGU6Ok5vbmUgJiYg
Z2x5cGhCdWZmZXIgJiYgRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0g
ICAgICAgICAgICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuYXBwZW5kKHN0ZDo6bWFrZV9wYWly
KGdseXBoQnVmZmVyLT5zaXplKCksCi0gICAgICAgICAgICAgICAgT3JpZ2luYWxBZHZhbmNlc0Zv
ckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlKGNoYXJhY3RlciA9PSAnICcsIGdseXBoQnVmZmVyLT5z
aXplKCkgPyBnbHlwaEJ1ZmZlci0+YWR2YW5jZUF0KGdseXBoQnVmZmVyLT5zaXplKCkgLSAxKS53
aWR0aCgpIDogMCwgd2lkdGgpKSk7CisgICAgICAgIGlmICh0cmFuc2Zvcm1zVHlwZSAhPSBUcmFu
c2Zvcm1zVHlwZTo6Tm9uZSAmJiBGb250Q2FzY2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3Rlcikp
IHsKKyAgICAgICAgICAgIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoZ2x5cGhCdWZmZXIuc2l6ZSgpLAorICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5j
ZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFjZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZl
ci5zaXplKCkgPyBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gMSku
d2lkdGgoKSA6IDAsIHdpZHRoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1fYWNjb3Vu
dEZvckdseXBoQm91bmRzKSB7CkBAIC0zMzksOCArMzMzLDcgQEAgaW5saW5lIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwg
R2x5cGgKIAogICAgICAgICB3aWR0aFNpbmNlTGFzdFJvdW5kaW5nICs9IHdpZHRoOwogCi0gICAg
ICAgIGlmIChnbHlwaEJ1ZmZlcikKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgs
IGZvbnQsIChydGwgPyBvbGRXaWR0aCArIGxhc3RSb3VuZGluZ1dpZHRoIDogd2lkdGgpLCBjdXJy
ZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGdseXBoLCBmb250LCAocnRs
ID8gb2xkV2lkdGggKyBsYXN0Um91bmRpbmdXaWR0aCA6IHdpZHRoKSwgY3VycmVudENoYXJhY3Rl
cik7CiAKICAgICAgICAgbGFzdFJvdW5kaW5nV2lkdGggPSB3aWR0aCAtIG9sZFdpZHRoOwogCkBA
IC0zNTIsMTggKzM0NSwxNyBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5j
ZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaAogICAgICAgICBwcmV2
aW91c0NoYXJhY3RlciA9IGNoYXJhY3RlcjsKICAgICB9CiAKLSAgICBpZiAoZ2x5cGhCdWZmZXIg
JiYgbGVmdG92ZXJKdXN0aWZpY2F0aW9uV2lkdGgpIHsKKyAgICBpZiAobGVmdG92ZXJKdXN0aWZp
Y2F0aW9uV2lkdGgpIHsKICAgICAgICAgaWYgKG1fZm9yVGV4dEVtcGhhc2lzKQotICAgICAgICAg
ICAgZ2x5cGhCdWZmZXItPmFkZChsYXN0Rm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwg
bGFzdEZvbnREYXRhLCBsZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwgbV9ydW4ubGVuZ3RoKCkg
LSAxKTsKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLmFkZChsYXN0Rm9udERhdGEtPnplcm9XaWR0
aFNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRhLCBsZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwg
bV9ydW4ubGVuZ3RoKCkgLSAxKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZ2x5cGhCdWZm
ZXItPmFkZChsYXN0Rm9udERhdGEtPnNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRhLCBsZWZ0b3Zl
ckp1c3RpZmljYXRpb25XaWR0aCwgbV9ydW4ubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgIGds
eXBoQnVmZmVyLmFkZChsYXN0Rm9udERhdGEtPnNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRhLCBs
ZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwgbV9ydW4ubGVuZ3RoKCkgLSAxKTsKICAgICB9CiAK
ICAgICBhdXRvIHRyYW5zZm9ybXNUeXBlID0gc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyhnbHlw
aEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKICAgICBpZiAodHJh
bnNmb3Jtc1R5cGUgIT0gVHJhbnNmb3Jtc1R5cGU6Ok5vbmUpIHsKICAgICAgICAgbV9ydW5XaWR0
aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBs
YXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRhLCBwcmV2aW91c0NoYXJhY3RlciwgdHJhbnNmb3Jt
c1R5cGUgPT0gVHJhbnNmb3Jtc1R5cGU6OkZvcmNlZCwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNl
KTsKLSAgICAgICAgaWYgKGdseXBoQnVmZmVyKQotICAgICAgICAgICAgZ2x5cGhCdWZmZXItPnNo
cmluayhsYXN0R2x5cGhDb3VudCk7CisgICAgICAgIGdseXBoQnVmZmVyLnNocmluayhsYXN0R2x5
cGhDb3VudCk7CiAgICAgfQogCiAgICAgdW5zaWduZWQgY29uc3VtZWRDaGFyYWN0ZXJzID0gdGV4
dEl0ZXJhdG9yLmN1cnJlbnRJbmRleCgpIC0gbV9jdXJyZW50Q2hhcmFjdGVyOwpAQCAtMzczLDcg
KzM2NSw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwo
VGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoCiAgICAgcmV0dXJuIGNvbnN1bWVkQ2hh
cmFjdGVyczsKIH0KIAotdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBv
ZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3Vuc2lnbmVkIFdpZHRoSXRlcmF0b3I6
OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpCiB7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CiAKQEAgLTM5NSw3ICszODcsNyBA
QCB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyKQogYm9vbCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFj
dGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQogewogICAgIHVuc2ln
bmVkIG9sZFNpemUgPSBnbHlwaEJ1ZmZlci5zaXplKCk7Ci0gICAgYWR2YW5jZShtX2N1cnJlbnRD
aGFyYWN0ZXIgKyAxLCAmZ2x5cGhCdWZmZXIpOworICAgIGFkdmFuY2UobV9jdXJyZW50Q2hhcmFj
dGVyICsgMSwgZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0IHcgPSAwOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkKICAgICAgICAgdyAr
PSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAppbmRleCBjZDBkMmZjODc0ZjU0OWY2
YWY5NTJkMjQyNzcxZDliMGQwZmVhMDlhLi5jMDgzZjZlNDFmNDY4MDM2OTkyNjE5YTE2ODQ4NTQ4
NmUwMTU0OGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5oCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKIHB1
YmxpYzoKICAgICBXaWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBmYWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50
Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9vbCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAK
LSAgICB1bnNpZ25lZCBhZHZhbmNlKHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciopOworICAgIHVu
c2lnbmVkIGFkdmFuY2UodW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJik7CiAgICAgYm9vbCBhZHZh
bmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0
IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhC
b3VuZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJvdW5kaW5nQm94WTsgfQpAQCAtNTgsMTEgKzU4LDEx
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyLCBib29sIG1pcnJvcik7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVy
YXRvcj4KLSAgICBpbmxpbmUgdW5zaWduZWQgYWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYs
IEdseXBoQnVmZmVyKik7CisgICAgaW5saW5lIHVuc2lnbmVkIGFkdmFuY2VJbnRlcm5hbChUZXh0
SXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciYpOwogCiAgICAgZW51bSBjbGFzcyBUcmFuc2Zvcm1zVHlw
ZSB7IE5vbmUsIEZvcmNlZCwgTm90Rm9yY2VkIH07Ci0gICAgVHJhbnNmb3Jtc1R5cGUgc2hvdWxk
QXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciosIHVuc2lnbmVkIGxhc3RHbHlw
aENvdW50LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyKSBjb25zdDsKLSAgICBmbG9hdCBhcHBs
eUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyKiwgYm9vbCBsdHIsIHVuc2lnbmVkJiBsYXN0R2x5
cGhDb3VudCwgY29uc3QgRm9udCosIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9y
Y2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYpOworICAgIFRyYW5zZm9ybXNUeXBlIHNob3Vs
ZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBsYXN0R2x5
cGhDb3VudCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlcikgY29uc3Q7CisgICAgZmxvYXQgYXBw
bHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciYsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEds
eXBoQ291bnQsIGNvbnN0IEZvbnQqLCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZv
cmNlLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmKTsKIAogICAgIGNvbnN0IEZvbnRDYXNjYWRl
KiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggODEw
YTBiODgwYThhYTRkYWUwMmZhYjQ0NmE5NDFlZGQ5YzVhNzFkMS4uMDNjZTZjMTNjNTM4ZTRlODQ0
NGIzZTgwZjhhY2Q4MDIzMGJhZjNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcApAQCAtNTgsNyArNTgsNyBAQCBi
b29sIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6YWR2YW5jZSgpCiB2b2lkIFNWR1RleHRNZXRyaWNz
QnVpbGRlcjo6YWR2YW5jZVNpbXBsZVRleHQoKQogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVm
ZmVyOwotICAgIHVuc2lnbmVkIG1ldHJpY3NMZW5ndGggPSBtX3NpbXBsZVdpZHRoSXRlcmF0b3It
PmFkdmFuY2UobV90ZXh0UG9zaXRpb24gKyAxLCAmZ2x5cGhCdWZmZXIpOworICAgIHVuc2lnbmVk
IG1ldHJpY3NMZW5ndGggPSBtX3NpbXBsZVdpZHRoSXRlcmF0b3ItPmFkdmFuY2UobV90ZXh0UG9z
aXRpb24gKyAxLCBnbHlwaEJ1ZmZlcik7CiAgICAgaWYgKCFtZXRyaWNzTGVuZ3RoKSB7CiAgICAg
ICAgIG1fY3VycmVudE1ldHJpY3MgPSBTVkdUZXh0TWV0cmljcygpOwogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggZjIzYTM0ZjBiYTkyMTc2NWVjZmM3OGY0ZjMwYzg4MjNiZGJmMWMzMy4uYTIxNmI4
MmExZDc5OWNhYWMzOWNlNTEyNGY3M2VjNzcwY2NjNGVkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBA
CisyMDIwLTA4LTAxICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisK
KyAgICAgICAgTWFrZSBHbHlwaEJ1ZmZlcnMgcmVxdWlyZWQgaW4gdGhlIGZhc3QgdGV4dCBjb2Rl
cGF0aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1
MDUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvc2VsZWN0c3RhcnQtYnktZHJhZy1leHBlY3RlZC50eHQ6
IFRlc3QgcHJvZ3Jlc3NlZCBvbiBXaW5kb3dzLgorCiAyMDIwLTA3LTMxICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNlIG1vcmUgaW5jbHVz
aXZlIHRlcm1pbm9sb2d5IGluIFRvb2xzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS93aW4vZmFzdC9ldmVudHMvc2VsZWN0c3RhcnQtYnktZHJhZy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvc2VsZWN0c3RhcnQtYnktZHJhZy1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNzU4NzU5YTg2ZGY1OWEz
YTY3YTQ1M2JiZTlkNTI2MGM4NjlmYjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3NlbGVj
dHN0YXJ0LWJ5LWRyYWctZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBA
QAotVGhpcyB0ZXN0IGVuc3VyZXMgc2VsZWN0c3RhcnQgaXMgZmlyZWQgZXhhY3RseSBvbmNlIHdo
ZW4gc2VsZWN0aW5nIHRleHQgYnkgYSBtb3VzZSBkcmFnLgotCi1Jbml0aWFsIHN0YXRlOiBQQVNT
Ci1Nb3VzZSBkb3duOiBGQUlMIC0gZXhwZWN0ZWQgc2VsZWN0aW9uIHRvIGJlIGNhcmV0IGJ1dCB3
YXMgcmFuZ2UKLU1vdmluZyBzbGlnaHRseSB0byB0aGUgcmlnaHQ6IEZBSUwgLSBleHBlY3RlZCBz
ZWxlY3Rpb24gdG8gYmUgY2FyZXQgYnV0IHdhcyByYW5nZQotTW92aW5nIHNsaWdodGx5IHRvIHRo
ZSBsZWZ0OiBGQUlMIC0gZXhwZWN0ZWQgc2VsZWN0aW9uIHRvIGJlIGNhcmV0IGJ1dCB3YXMgcmFu
Z2UKLU1vdmluZyB0byB0aGUgcmlnaHQ6IFBBU1MKLU1vdmluZyBmdXJ0aGVyIHRvIHRoZSByaWdo
dDogUEFTUwotTW92aW5nIGJhY2sgdG8gdGhlIGxlZnQ6IEZBSUwgLSBleHBlY3RlZCBzZWxlY3Rp
b24gdG8gYmUgY2FyZXQgYnV0IHdhcyByYW5nZQotTW92aW5nIHRvIHRoZSByaWdodCBhZ2Fpbjog
UEFTUwotTW91c2UgZG93biBvbiB0aGUgcmlnaHQ6IFBBU1MKLU1vdmluZyB0byB0aGUgbGVmdDog
UEFTUwotRG9uZS4KLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405790</attachid>
            <date>2020-08-01 12:27:15 -0700</date>
            <delta_ts>2020-08-04 20:08:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215052-20200801122714.patch</filename>
            <type>text/plain</type>
            <size>22331</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQzMzUzZmU1ZThjOTRh
NWQ1ZmNkOTgzNTc4YWNmOTQzYTIzM2M5Mi4uYmE5NTVjOTA4YzdhZjEwN2M3Zjg3MDA1NTdiYTk1
NzdmOGEzZjBhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIwLTA4LTAxICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBHbHlw
aEJ1ZmZlcnMgcmVxdWlyZWQgaW4gdGhlIGZhc3QgdGV4dCBjb2RlcGF0aAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDUyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlv
biBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDc2OQorICAg
ICAgICBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjIwOC4K
KworICAgICAgICBQZXJmb3JtaW5nIHNoYXBpbmcgYWZmZWN0cyB0aGUgd2lkdGggb2Ygc3RyaW5n
czsgaW5kZWVkLCB0aGF0IGlzIG9uZSBvZgorICAgICAgICBpdHMgcHVycG9zZXMgZm9yIGV4aXN0
ZW5jZS4gU2hhcGluZyBjYW4gb25seSBoYXBwZW4gd2hlbiB3ZSBoYXZlIGEgR2x5cGhCdWZmZXIK
KyAgICAgICAgdG8gc2hhcGUuIFdlIGNhbid0IGp1c3QgYXJiaXRyYXJpbHkgZGVjaWRlIHRvIGRp
c2FibGUgc2hhcGluZyBmb3IgdmFyaW91cworICAgICAgICBmdW5jdGlvbnMganVzdCBiZWNhdXNl
IHRob3NlIGZ1bmN0aW9ucyBkb24ndCBldmVyIGluc3BlY3QgdGhlIGV4YWN0IGdseXBocy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgYSBwcmVwYXJhdGlvbiBzdGVwIHRvd2FyZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0NzY5IGFu
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MjA4
LCBhbmQgSSBjb3VsZG4ndCBjb21lIHVwIHdpdGggYQorICAgICAgICB0ZXN0IGNhc2UgdGhhdCB3
YXMgYnJva2VuIGhlcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhPZlRleHRSYW5nZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6
c2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0
aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2VP
bmVDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0
KToKKwogMjAyMC0wNy0zMSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29t
PgogCiAgICAgICAgIENsZWFuIHVwIHRleHQgbGF5b3V0IGNvZGUgYSBiaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA2ODgwNzI2
MDNjMDEzMWYyYjZiZTUwY2ZlMDdmMzMyNjc3ZWM4ODRhLi4zMTU0Yjk4M2I0NWNlZmNhNTA5Y2Rj
ZmVlZTVhMWM2ZGMxNWI5ZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0zNzEsMTEgKzM3MSwxMiBAQCBmbG9hdCBGb250Q2Fz
Y2FkZTo6d2lkdGhPZlRleHRSYW5nZShjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkCiAgICAgICAgIHRvdGFsV2lkdGggPSBjb21wbGV4SXRlcmF0b3IucnVuV2lkdGhT
b0ZhcigpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFdpZHRoSXRlcmF0b3Igc2ltcGxlSXRlcmF0
b3IodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzKTsKLSAgICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2
YW5jZShmcm9tLCBudWxscHRyKTsKKyAgICAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Cisg
ICAgICAgIHNpbXBsZUl0ZXJhdG9yLmFkdmFuY2UoZnJvbSwgZ2x5cGhCdWZmZXIpOwogICAgICAg
ICBvZmZzZXRCZWZvcmVSYW5nZSA9IHNpbXBsZUl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKLSAg
ICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2YW5jZSh0bywgbnVsbHB0cik7CisgICAgICAgIHNpbXBs
ZUl0ZXJhdG9yLmFkdmFuY2UodG8sIGdseXBoQnVmZmVyKTsKICAgICAgICAgb2Zmc2V0QWZ0ZXJS
YW5nZSA9IHNpbXBsZUl0ZXJhdG9yLnJ1bldpZHRoU29GYXIoKTsKLSAgICAgICAgc2ltcGxlSXRl
cmF0b3IuYWR2YW5jZShydW4ubGVuZ3RoKCksIG51bGxwdHIpOworICAgICAgICBzaW1wbGVJdGVy
YXRvci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgZ2x5cGhCdWZmZXIpOwogICAgICAgICB0b3RhbFdp
ZHRoID0gc2ltcGxlSXRlcmF0b3IucnVuV2lkdGhTb0ZhcigpOwogICAgIH0KIApAQCAtNDMzLDI2
ICs0MzQsMjIgQEAgZmxvYXQgRm9udENhc2NhZGU6OndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdW
aWV3IHRleHQpIGNvbnN0CiAgICAgICAgIHJldHVybiAqY2FjaGVFbnRyeTsKIAogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwotICAgIGJvb2wgaGFzS2VybmluZ09yTGlnYXR1cmVzID0gZW5h
YmxlS2VybmluZygpIHx8IHJlcXVpcmVzU2hhcGluZygpOwogICAgIGZsb2F0IHJ1bldpZHRoID0g
MDsKICAgICBhdXRvJiBmb250ID0gcHJpbWFyeUZvbnQoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGF1dG8gZ2x5cGggPSBnbHlw
aERhdGFGb3JDaGFyYWN0ZXIodGV4dFtpXSwgZmFsc2UpLmdseXBoOwogICAgICAgICBhdXRvIGds
eXBoV2lkdGggPSBmb250LndpZHRoRm9yR2x5cGgoZ2x5cGgpOwogICAgICAgICBydW5XaWR0aCAr
PSBnbHlwaFdpZHRoOwotICAgICAgICBpZiAoIWhhc0tlcm5pbmdPckxpZ2F0dXJlcykKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBnbHlwaEJ1ZmZlci5hZGQoZ2x5cGgsICZmb250LCBn
bHlwaFdpZHRoKTsKICAgICB9Ci0gICAgaWYgKGhhc0tlcm5pbmdPckxpZ2F0dXJlcykgewotICAg
ICAgICBmb250LmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgZW5hYmxlS2VybmluZygp
LCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUoKSk7
Ci0gICAgICAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgdG8gbWF0Y2ggdGhlIHJlc3VsdCBvZiB0
aGUgc2xvdyBwYXRoLiBTYW1lIGdseXBoIHdpZHRocyBidXQgZGlmZmVyZW50IGZsb2F0aW5nIHBv
aW50IGFyaXRobWVudGljcyBjYW4KLSAgICAgICAgLy8gcHJvZHVjZSBkaWZmZXJlbnQgcnVuIHdp
ZHRoLgotICAgICAgICBmbG9hdCBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGll
ZCA9IC1ydW5XaWR0aDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbHlwaEJ1ZmZl
ci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhUcmFuc2Zv
cm1BcHBsaWVkICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpOwotICAgICAgICBy
dW5XaWR0aCArPSBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZDsKLSAgICB9
CisKKyAgICBmb250LmFwcGx5VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgMCwgZW5hYmxlS2Vybmlu
ZygpLCByZXF1aXJlc1NoYXBpbmcoKSwgZm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRMb2NhbGUo
KSk7CisgICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSB0byBtYXRjaCB0aGUgcmVzdWx0IG9mIHRo
ZSBzbG93IHBhdGguIFNhbWUgZ2x5cGggd2lkdGhzIGJ1dCBkaWZmZXJlbnQgZmxvYXRpbmcgcG9p
bnQgYXJpdGhtZW50aWNzIGNhbgorICAgIC8vIHByb2R1Y2UgZGlmZmVyZW50IHJ1biB3aWR0aC4K
KyAgICBmbG9hdCBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZCA9IC1ydW5X
aWR0aDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytp
KQorICAgICAgICBydW5XaWR0aERpZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZCArPSBnbHlw
aEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKTsKKyAgICBydW5XaWR0aCArPSBydW5XaWR0aERp
ZmZlcmVuY2VXaXRoVHJhbnNmb3JtQXBwbGllZDsKIAogICAgIGlmIChjYWNoZUVudHJ5KQogICAg
ICAgICAqY2FjaGVFbnRyeSA9IHJ1bldpZHRoOwpAQCAtMTM3OSw5ICsxMzc2LDkgQEAgR2x5cGhC
dWZmZXIgRm9udENhc2NhZGU6OmxheW91dFNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1
bnNpZ25lZCBmcm9tLCB1bnMKICAgICAvLyBGSVhNRTogVXNpbmcgc2VwYXJhdGUgZ2x5cGggYnVm
ZmVycyBmb3IgdGhlIHByZWZpeCBhbmQgdGhlIHN1ZmZpeCBpcyBpbmNvcnJlY3Qgd2hlbiBrZXJu
aW5nIG9yCiAgICAgLy8gbGlnYXR1cmVzIGFyZSBlbmFibGVkLgogICAgIEdseXBoQnVmZmVyIGxv
Y2FsR2x5cGhCdWZmZXI7Ci0gICAgaXQuYWR2YW5jZShmcm9tLCAmbG9jYWxHbHlwaEJ1ZmZlcik7
CisgICAgaXQuYWR2YW5jZShmcm9tLCBsb2NhbEdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZv
cmVXaWR0aCA9IGl0LnJ1bldpZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhC
dWZmZXIpOworICAgIGl0LmFkdmFuY2UodG8sIGdseXBoQnVmZmVyKTsKIAogICAgIGlmIChnbHlw
aEJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBnbHlwaEJ1ZmZlcjsKQEAgLTEzOTEs
NyArMTM4OCw3IEBAIEdseXBoQnVmZmVyIEZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zCiAgICAgZmxvYXQgaW5pdGlhbEFk
dmFuY2UgPSAwOwogICAgIGlmIChydW4ucnRsKCkpIHsKICAgICAgICAgZmxvYXQgZmluYWxSb3Vu
ZGluZ1dpZHRoID0gaXQuZmluYWxSb3VuZGluZ1dpZHRoKCk7Ci0gICAgICAgIGl0LmFkdmFuY2Uo
cnVuLmxlbmd0aCgpLCAmbG9jYWxHbHlwaEJ1ZmZlcik7CisgICAgICAgIGl0LmFkdmFuY2UocnVu
Lmxlbmd0aCgpLCBsb2NhbEdseXBoQnVmZmVyKTsKICAgICAgICAgaW5pdGlhbEFkdmFuY2UgPSBm
aW5hbFJvdW5kaW5nV2lkdGggKyBpdC5ydW5XaWR0aFNvRmFyKCkgLSBhZnRlcldpZHRoOwogICAg
IH0gZWxzZQogICAgICAgICBpbml0aWFsQWR2YW5jZSA9IGJlZm9yZVdpZHRoOwpAQCAtMTUyNiw3
ICsxNTIzLDcgQEAgZmxvYXQgRm9udENhc2NhZGU6OmZsb2F0V2lkdGhGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBGb24KIHsKICAgICBXaWR0aEl0ZXJhdG9y
IGl0KHRoaXMsIHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksIChlbmFibGVL
ZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCkpID8gJmdseXBoQnVmZmVyIDogbnVsbHB0cik7
CisgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksIGdseXBoQnVmZmVyKTsKIAogICAgIGlmIChn
bHlwaE92ZXJmbG93KSB7CiAgICAgICAgIGdseXBoT3ZlcmZsb3ctPnRvcCA9IHN0ZDo6bWF4PGlu
dD4oZ2x5cGhPdmVyZmxvdy0+dG9wLCBjZWlsZigtaXQubWluR2x5cGhCb3VuZGluZ0JveFkoKSkg
LSAoZ2x5cGhPdmVyZmxvdy0+Y29tcHV0ZUJvdW5kcyA/IDAgOiBmb250TWV0cmljcygpLmFzY2Vu
dCgpKSk7CkBAIC0xNTU0LDE0ICsxNTUxLDE0IEBAIHZvaWQgRm9udENhc2NhZGU6OmFkanVzdFNl
bGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjCiB7
CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgV2lkdGhJdGVyYXRvciBpdCh0aGlz
LCBydW4pOwotICAgIGl0LmFkdmFuY2UoZnJvbSwgJmdseXBoQnVmZmVyKTsKKyAgICBpdC5hZHZh
bmNlKGZyb20sIGdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBiZWZvcmVXaWR0aCA9IGl0LnJ1bldp
ZHRoU29GYXIoKTsKLSAgICBpdC5hZHZhbmNlKHRvLCAmZ2x5cGhCdWZmZXIpOworICAgIGl0LmFk
dmFuY2UodG8sIGdseXBoQnVmZmVyKTsKICAgICBmbG9hdCBhZnRlcldpZHRoID0gaXQucnVuV2lk
dGhTb0ZhcigpOwogICAgIGZsb2F0IHRvdGFsV2lkdGggPSAtMTsKIAogICAgIGlmIChydW4ucnRs
KCkpIHsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksICZnbHlwaEJ1ZmZlcik7Cisg
ICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpLCBnbHlwaEJ1ZmZlcik7CiAgICAgICAgIHRv
dGFsV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7CiAgICAgICAgIHNlbGVjdGlvblJlY3QubW92
ZSh0b3RhbFdpZHRoIC0gYWZ0ZXJXaWR0aCwgMCk7CiAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCmluZGV4IGIzYzJm
ZjZhMTM5OTBhNjZmZWU2YWVlOWUwZTU5NmNkZDg3ZDYyZjcuLmFmNTI1MDVkZjYzZTZjZjY2Njkw
NzE4ZDQ0MDIzZWVlYmJlZjkwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCkBAIC03Nyw0NSArNzcsNDIgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzU29mdEJhbmtFbW9qaShVQ2hhcjMyIGNvZGVwb2ludCkKICAgICByZXR1cm4g
Y29kZXBvaW50ID49IDB4RTAwMSAmJiBjb2RlcG9pbnQgPD0gMHhFNTM3OwogfQogCi1pbmxpbmUg
YXV0byBXaWR0aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBo
QnVmZmVyKiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJl
dmlvdXNDaGFyYWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCitpbmxpbmUgYXV0byBXaWR0
aEl0ZXJhdG9yOjpzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFy
YWN0ZXIpIGNvbnN0IC0+IFRyYW5zZm9ybXNUeXBlCiB7Ci0gICAgaWYgKGdseXBoQnVmZmVyICYm
IGdseXBoQnVmZmVyLT5zaXplKCkgPT0gKGxhc3RHbHlwaENvdW50ICsgMSkgJiYgaXNTb2Z0QmFu
a0Vtb2ppKHByZXZpb3VzQ2hhcmFjdGVyKSkKKyAgICBpZiAoZ2x5cGhCdWZmZXIuc2l6ZSgpID09
IChsYXN0R2x5cGhDb3VudCArIDEpICYmIGlzU29mdEJhbmtFbW9qaShwcmV2aW91c0NoYXJhY3Rl
cikpCiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1zVHlwZTo6Rm9yY2VkOwotICAgIGlmIChtX3J1
bi5sZW5ndGgoKSA8PSAxIHx8ICEobV9lbmFibGVLZXJuaW5nIHx8IG1fcmVxdWlyZXNTaGFwaW5n
KSkKKyAgICBpZiAobV9ydW4ubGVuZ3RoKCkgPD0gMSkKICAgICAgICAgcmV0dXJuIFRyYW5zZm9y
bXNUeXBlOjpOb25lOwogICAgIHJldHVybiBUcmFuc2Zvcm1zVHlwZTo6Tm90Rm9yY2VkOwogfQog
Ci1pbmxpbmUgZmxvYXQgV2lkdGhJdGVyYXRvcjo6YXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1
ZmZlciogZ2x5cGhCdWZmZXIsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNv
bnN0IEZvbnQqIGZvbnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENo
YXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKQoraW5saW5l
IGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImIGds
eXBoQnVmZmVyLCBib29sIGx0ciwgdW5zaWduZWQmIGxhc3RHbHlwaENvdW50LCBjb25zdCBGb250
KiBmb250LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBDaGFyYWN0ZXJz
VHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSkKIHsKICAgICBBU1NFUlRf
VU5VU0VEKHByZXZpb3VzQ2hhcmFjdGVyLCBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBo
QnVmZmVyLCBsYXN0R2x5cGhDb3VudCwgcHJldmlvdXNDaGFyYWN0ZXIpICE9IFdpZHRoSXRlcmF0
b3I6OlRyYW5zZm9ybXNUeXBlOjpOb25lKTsKIAotICAgIGlmICghZ2x5cGhCdWZmZXIpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgYXV0byBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1ZmZlci0+
c2l6ZSgpOworICAgIGF1dG8gZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwog
ICAgIGlmICghZm9yY2UgJiYgZ2x5cGhCdWZmZXJTaXplIDw9IGxhc3RHbHlwaENvdW50ICsgMSkg
ewogICAgICAgICBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyU2l6ZTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyA9IGdseXBo
QnVmZmVyLT5hZHZhbmNlcygwKTsKKyAgICBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzID0g
Z2x5cGhCdWZmZXIuYWR2YW5jZXMoMCk7CiAgICAgZmxvYXQgYmVmb3JlV2lkdGggPSAwOwogICAg
IGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwgZ2x5cGhCdWZmZXJTaXplOyAr
K2kpCiAgICAgICAgIGJlZm9yZVdpZHRoICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CiAKICAgICBB
U1NFUlQobGFzdEdseXBoQ291bnQgPD0gZ2x5cGhCdWZmZXJTaXplKTsKICAgICBpZiAoIWx0cikK
LSAgICAgICAgZ2x5cGhCdWZmZXItPnJldmVyc2UobGFzdEdseXBoQ291bnQsIGdseXBoQnVmZmVy
U2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKKyAgICAgICAgZ2x5cGhCdWZmZXIucmV2ZXJzZShsYXN0
R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291bnQpOwogCi0gICAgZm9u
dC0+YXBwbHlUcmFuc2Zvcm1zKCpnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIG1fZW5hYmxl
S2VybmluZywgbV9yZXF1aXJlc1NoYXBpbmcsIG1fZm9udC0+Zm9udERlc2NyaXB0aW9uKCkuY29t
cHV0ZWRMb2NhbGUoKSk7Ci0gICAgZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXItPnNpemUo
KTsKKyAgICBmb250LT5hcHBseVRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50
LCBtX2VuYWJsZUtlcm5pbmcsIG1fcmVxdWlyZXNTaGFwaW5nLCBtX2ZvbnQtPmZvbnREZXNjcmlw
dGlvbigpLmNvbXB1dGVkTG9jYWxlKCkpOworICAgIGdseXBoQnVmZmVyU2l6ZSA9IGdseXBoQnVm
ZmVyLnNpemUoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IGxhc3RHbHlwaENvdW50OyBpIDwg
Z2x5cGhCdWZmZXJTaXplOyArK2kpCiAgICAgICAgIGFkdmFuY2VzW2ldLnNldEhlaWdodCgtYWR2
YW5jZXNbaV0uaGVpZ2h0KCkpOwogCiAgICAgaWYgKCFsdHIpCi0gICAgICAgIGdseXBoQnVmZmVy
LT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZlclNpemUgLSBsYXN0R2x5cGhDb3Vu
dCk7CisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UobGFzdEdseXBoQ291bnQsIGdseXBoQnVm
ZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKIAogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYyMDg6IFRoaXMgaXMgdG90YWxseSwgMTAwJSwgZnVyaW91
c2x5LCB1dHRlcmx5LCBmcnVzdHJhdGluZ2x5IGJvZ3VzLgogICAgIC8vIFRoZXJlIGlzIGFic29s
dXRlbHkgbm8gZ3VhcmFudGVlIHRoYXQgZ2x5cGggaW5kaWNlcyBiZWZvcmUgc2hhcGluZyBoYXZl
IGFueSByZWxhdGlvbiBhdCBhbGwgd2l0aCBnbHlwaCBpbmRpY2VzIGFmdGVyIHNoYXBpbmcuCkBA
IC0xMjcsOCArMTI0LDggQEAgaW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRy
YW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGwKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBjb25zdCBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2UmIG9yaWdpbmFsQWR2YW5jZXMgPSBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2VbaV0u
c2Vjb25kOwogICAgICAgICBpZiAoc3BhY2VPZmZzZXQgJiYgIW9yaWdpbmFsQWR2YW5jZXMuY2hh
cmFjdGVySXNTcGFjZSkKLSAgICAgICAgICAgIGdseXBoQnVmZmVyLT5hZHZhbmNlcyhzcGFjZU9m
ZnNldCAtIDEpLT5zZXRXaWR0aChvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VCZWZvcmVDaGFyYWN0
ZXIpOwotICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMoc3BhY2VPZmZzZXQpLT5zZXRXaWR0
aChvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VBdENoYXJhY3Rlcik7CisgICAgICAgICAgICBnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhzcGFjZU9mZnNldCAtIDEpLT5zZXRXaWR0aChvcmlnaW5hbEFkdmFu
Y2VzLmFkdmFuY2VCZWZvcmVDaGFyYWN0ZXIpOworICAgICAgICBnbHlwaEJ1ZmZlci5hZHZhbmNl
cyhzcGFjZU9mZnNldCktPnNldFdpZHRoKG9yaWdpbmFsQWR2YW5jZXMuYWR2YW5jZUF0Q2hhcmFj
dGVyKTsKICAgICB9CiAgICAgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlLmNsZWFyKCk7CiAKQEAg
LTE3MCw3ICsxNjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxib29sLCBib29sPiBleHBh
bnNpb25Mb2NhdGlvbihib29sIGlkZW9ncmFwaCwgYm9vbCB0cmVhdAogfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dEl0ZXJhdG9yPgotaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmZXIqIGds
eXBoQnVmZmVyKQoraW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyKQog
ewogICAgIC8vIFRoZSBjb3JlIGxvZ2ljIGhlcmUgbmVlZHMgdG8gbWF0Y2ggU2ltcGxlTGluZUxh
eW91dDo6d2lkdGhGb3JTaW1wbGVUZXh0KCkKICAgICBib29sIHJ0bCA9IG1fcnVuLnJ0bCgpOwpA
QCAtMTkwLDcgKzE4Nyw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
SW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoCiAKICAgICBjb25zdCBG
b250JiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsKICAgICBjb25zdCBGb250
KiBsYXN0Rm9udERhdGEgPSAmcHJpbWFyeUZvbnQ7Ci0gICAgdW5zaWduZWQgbGFzdEdseXBoQ291
bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOworICAgIHVuc2lnbmVk
IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogCiAgICAgVUNoYXIzMiBjaGFy
YWN0ZXIgPSAwOwogICAgIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0ZXIgPSAwOwpAQCAtMjM0LDgg
KzIzMSw3IEBAIGlubGluZSB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwo
VGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBoCiAgICAgICAgICAgICBhdXRvIHRyYW5z
Zm9ybXNUeXBlID0gc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgbGFzdEds
eXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1z
VHlwZSAhPSBUcmFuc2Zvcm1zVHlwZTo6Tm9uZSkgewogICAgICAgICAgICAgICAgIG1fcnVuV2lk
dGhTb0ZhciArPSBhcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBtX3J1bi5sdHIoKSwg
bGFzdEdseXBoQ291bnQsIGxhc3RGb250RGF0YSwgcHJldmlvdXNDaGFyYWN0ZXIsIHRyYW5zZm9y
bXNUeXBlID09IFRyYW5zZm9ybXNUeXBlOjpGb3JjZWQsIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFj
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVyKQotICAgICAgICAgICAgICAgICAg
ICBnbHlwaEJ1ZmZlci0+c2hyaW5rKGxhc3RHbHlwaENvdW50KTsKKyAgICAgICAgICAgICAgICBn
bHlwaEJ1ZmZlci5zaHJpbmsobGFzdEdseXBoQ291bnQpOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBsYXN0Rm9udERhdGEgPSBmb250OwpAQCAtMjg1LDE1ICsyODEsMTMgQEAgaW5saW5l
IHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRl
eHRJdGVyYXRvciwgR2x5cGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmNyZWFz
ZSBwcmV2aW91cyB3aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZXhwYW5zaW9u
IC09IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ydW5XaWR0aFNvRmFyICs9IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZlci0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChmb250LT56
ZXJvV2lkdGhTcGFjZUdseXBoKCksIGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHksIGN1
cnJlbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoQnVmZmVyLT5h
ZGQoZm9udC0+c3BhY2VHbHlwaCgpLCBmb250LCBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5LCBj
dXJyZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhwYW5k
TGFzdEFkdmFuY2UobV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1ZmZl
ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZm9y
VGV4dEVtcGhhc2lzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhC
dWZmZXIuYWRkKGZvbnQtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25Q
ZXJPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3Rlcik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBo
QnVmZmVyLmFkZChmb250LT5zcGFjZUdseXBoKCksIGZvbnQsIG1fZXhwYW5zaW9uUGVyT3Bwb3J0
dW5pdHksIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci5leHBhbmRM
YXN0QWR2YW5jZShtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5jcmVhc2Ug
bmV4dCB3aWR0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRvdmVySnVzdGlmaWNh
dGlvbldpZHRoICs9IG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHk7CkBAIC0zMTgsOSArMzEyLDkg
QEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRl
cmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gdHJh
bnNmb3Jtc1R5cGUgPSBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0
R2x5cGhDb3VudCwgcHJldmlvdXNDaGFyYWN0ZXIpOwotICAgICAgICBpZiAodHJhbnNmb3Jtc1R5
cGUgIT0gVHJhbnNmb3Jtc1R5cGU6Ok5vbmUgJiYgZ2x5cGhCdWZmZXIgJiYgRm9udENhc2NhZGU6
OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzVHJlYXRl
ZEFzU3BhY2UuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGdseXBoQnVmZmVyLT5zaXplKCksCi0gICAg
ICAgICAgICAgICAgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlKGNo
YXJhY3RlciA9PSAnICcsIGdseXBoQnVmZmVyLT5zaXplKCkgPyBnbHlwaEJ1ZmZlci0+YWR2YW5j
ZUF0KGdseXBoQnVmZmVyLT5zaXplKCkgLSAxKS53aWR0aCgpIDogMCwgd2lkdGgpKSk7CisgICAg
ICAgIGlmICh0cmFuc2Zvcm1zVHlwZSAhPSBUcmFuc2Zvcm1zVHlwZTo6Tm9uZSAmJiBGb250Q2Fz
Y2FkZTo6dHJlYXRBc1NwYWNlKGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIGNoYXJhY3RlcnNU
cmVhdGVkQXNTcGFjZS5hcHBlbmQoc3RkOjptYWtlX3BhaXIoZ2x5cGhCdWZmZXIuc2l6ZSgpLAor
ICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVhdGVkQXNTcGFj
ZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci5zaXplKCkgPyBnbHlwaEJ1ZmZlci5hZHZh
bmNlQXQoZ2x5cGhCdWZmZXIuc2l6ZSgpIC0gMSkud2lkdGgoKSA6IDAsIHdpZHRoKSkpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKG1fYWNjb3VudEZvckdseXBoQm91bmRzKSB7CkBAIC0zMzks
OCArMzMzLDcgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKIAogICAgICAgICB3aWR0aFNpbmNl
TGFzdFJvdW5kaW5nICs9IHdpZHRoOwogCi0gICAgICAgIGlmIChnbHlwaEJ1ZmZlcikKLSAgICAg
ICAgICAgIGdseXBoQnVmZmVyLT5hZGQoZ2x5cGgsIGZvbnQsIChydGwgPyBvbGRXaWR0aCArIGxh
c3RSb3VuZGluZ1dpZHRoIDogd2lkdGgpLCBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZ2x5
cGhCdWZmZXIuYWRkKGdseXBoLCBmb250LCAocnRsID8gb2xkV2lkdGggKyBsYXN0Um91bmRpbmdX
aWR0aCA6IHdpZHRoKSwgY3VycmVudENoYXJhY3Rlcik7CiAKICAgICAgICAgbGFzdFJvdW5kaW5n
V2lkdGggPSB3aWR0aCAtIG9sZFdpZHRoOwogCkBAIC0zNTIsMTggKzM0NSwxNyBAQCBpbmxpbmUg
dW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4
dEl0ZXJhdG9yLCBHbHlwaAogICAgICAgICBwcmV2aW91c0NoYXJhY3RlciA9IGNoYXJhY3RlcjsK
ICAgICB9CiAKLSAgICBpZiAoZ2x5cGhCdWZmZXIgJiYgbGVmdG92ZXJKdXN0aWZpY2F0aW9uV2lk
dGgpIHsKKyAgICBpZiAobGVmdG92ZXJKdXN0aWZpY2F0aW9uV2lkdGgpIHsKICAgICAgICAgaWYg
KG1fZm9yVGV4dEVtcGhhc2lzKQotICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChsYXN0Rm9u
dERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRhLCBsZWZ0b3Zlckp1c3Rp
ZmljYXRpb25XaWR0aCwgbV9ydW4ubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgIGdseXBoQnVm
ZmVyLmFkZChsYXN0Rm9udERhdGEtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRh
LCBsZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwgbV9ydW4ubGVuZ3RoKCkgLSAxKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChsYXN0Rm9udERhdGEtPnNwYWNl
R2x5cGgoKSwgbGFzdEZvbnREYXRhLCBsZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwgbV9ydW4u
bGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgIGdseXBoQnVmZmVyLmFkZChsYXN0Rm9udERhdGEt
PnNwYWNlR2x5cGgoKSwgbGFzdEZvbnREYXRhLCBsZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCwg
bV9ydW4ubGVuZ3RoKCkgLSAxKTsKICAgICB9CiAKICAgICBhdXRvIHRyYW5zZm9ybXNUeXBlID0g
c2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHBy
ZXZpb3VzQ2hhcmFjdGVyKTsKICAgICBpZiAodHJhbnNmb3Jtc1R5cGUgIT0gVHJhbnNmb3Jtc1R5
cGU6Ok5vbmUpIHsKICAgICAgICAgbV9ydW5XaWR0aFNvRmFyICs9IGFwcGx5Rm9udFRyYW5zZm9y
bXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBsYXN0R2x5cGhDb3VudCwgbGFzdEZvbnREYXRh
LCBwcmV2aW91c0NoYXJhY3RlciwgdHJhbnNmb3Jtc1R5cGUgPT0gVHJhbnNmb3Jtc1R5cGU6OkZv
cmNlZCwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsKLSAgICAgICAgaWYgKGdseXBoQnVmZmVy
KQotICAgICAgICAgICAgZ2x5cGhCdWZmZXItPnNocmluayhsYXN0R2x5cGhDb3VudCk7CisgICAg
ICAgIGdseXBoQnVmZmVyLnNocmluayhsYXN0R2x5cGhDb3VudCk7CiAgICAgfQogCiAgICAgdW5z
aWduZWQgY29uc3VtZWRDaGFyYWN0ZXJzID0gdGV4dEl0ZXJhdG9yLmN1cnJlbnRJbmRleCgpIC0g
bV9jdXJyZW50Q2hhcmFjdGVyOwpAQCAtMzczLDcgKzM2NSw3IEBAIGlubGluZSB1bnNpZ25lZCBX
aWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3Is
IEdseXBoCiAgICAgcmV0dXJuIGNvbnN1bWVkQ2hhcmFjdGVyczsKIH0KIAotdW5zaWduZWQgV2lk
dGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1
ZmZlcikKK3Vuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0LCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpCiB7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9ydW4u
bGVuZ3RoKCk7CiAKQEAgLTM5NSw3ICszODcsNyBAQCB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjph
ZHZhbmNlKHVuc2lnbmVkIG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQogYm9vbCBX
aWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyKQogewogICAgIHVuc2lnbmVkIG9sZFNpemUgPSBnbHlwaEJ1ZmZlci5z
aXplKCk7Ci0gICAgYWR2YW5jZShtX2N1cnJlbnRDaGFyYWN0ZXIgKyAxLCAmZ2x5cGhCdWZmZXIp
OworICAgIGFkdmFuY2UobV9jdXJyZW50Q2hhcmFjdGVyICsgMSwgZ2x5cGhCdWZmZXIpOwogICAg
IGZsb2F0IHcgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1
ZmZlci5zaXplKCk7ICsraSkKICAgICAgICAgdyArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSku
d2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dp
ZHRoSXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRl
cmF0b3IuaAppbmRleCBjZDBkMmZjODc0ZjU0OWY2YWY5NTJkMjQyNzcxZDliMGQwZmVhMDlhLi5j
MDgzZjZlNDFmNDY4MDM2OTkyNjE5YTE2ODQ4NTQ4NmUwMTU0OGU4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCkBAIC00Miw3ICs0Miw3
IEBAIHN0cnVjdCBXaWR0aEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBXaWR0aEl0ZXJhdG9yKGNv
bnN0IEZvbnRDYXNjYWRlKiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgRm9udCo+KiBm
YWxsYmFja0ZvbnRzID0gMCwgYm9vbCBhY2NvdW50Rm9yR2x5cGhCb3VuZHMgPSBmYWxzZSwgYm9v
bCBmb3JUZXh0RW1waGFzaXMgPSBmYWxzZSk7CiAKLSAgICB1bnNpZ25lZCBhZHZhbmNlKHVuc2ln
bmVkIHRvLCBHbHlwaEJ1ZmZlciopOworICAgIHVuc2lnbmVkIGFkdmFuY2UodW5zaWduZWQgdG8s
IEdseXBoQnVmZmVyJik7CiAgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0
aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29u
c3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJv
dW5kaW5nQm94WTsgfQpAQCAtNTgsMTEgKzU4LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvcik7CiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVyYXRvcj4KLSAgICBpbmxpbmUgdW5zaWduZWQg
YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYsIEdseXBoQnVmZmVyKik7CisgICAgaW5saW5l
IHVuc2lnbmVkIGFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciYpOwog
CiAgICAgZW51bSBjbGFzcyBUcmFuc2Zvcm1zVHlwZSB7IE5vbmUsIEZvcmNlZCwgTm90Rm9yY2Vk
IH07Ci0gICAgVHJhbnNmb3Jtc1R5cGUgc2hvdWxkQXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBH
bHlwaEJ1ZmZlciosIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50LCBVQ2hhcjMyIHByZXZpb3VzQ2hh
cmFjdGVyKSBjb25zdDsKLSAgICBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVy
KiwgYm9vbCBsdHIsIHVuc2lnbmVkJiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9udCosIFVDaGFy
MzIgcHJldmlvdXNDaGFyYWN0ZXIsIGJvb2wgZm9yY2UsIENoYXJhY3RlcnNUcmVhdGVkQXNTcGFj
ZSYpOworICAgIFRyYW5zZm9ybXNUeXBlIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3Qg
R2x5cGhCdWZmZXImLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgVUNoYXIzMiBwcmV2aW91c0No
YXJhY3RlcikgY29uc3Q7CisgICAgZmxvYXQgYXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZl
ciYsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqLCBVQ2hh
cjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3Bh
Y2UmKTsKIAogICAgIGNvbnN0IEZvbnRDYXNjYWRlKiBtX2ZvbnQ7CiAgICAgY29uc3QgVGV4dFJ1
biYgbV9ydW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRNZXRyaWNzQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRNZXRyaWNzQnVpbGRlci5jcHAKaW5kZXggODEwYTBiODgwYThhYTRkYWUwMmZhYjQ0NmE5NDFl
ZGQ5YzVhNzFkMS4uMDNjZTZjMTNjNTM4ZTRlODQ0NGIzZTgwZjhhY2Q4MDIzMGJhZjNmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NC
dWlsZGVyLmNwcApAQCAtNTgsNyArNTgsNyBAQCBib29sIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6
YWR2YW5jZSgpCiB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6YWR2YW5jZVNpbXBsZVRleHQo
KQogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwotICAgIHVuc2lnbmVkIG1ldHJpY3NM
ZW5ndGggPSBtX3NpbXBsZVdpZHRoSXRlcmF0b3ItPmFkdmFuY2UobV90ZXh0UG9zaXRpb24gKyAx
LCAmZ2x5cGhCdWZmZXIpOworICAgIHVuc2lnbmVkIG1ldHJpY3NMZW5ndGggPSBtX3NpbXBsZVdp
ZHRoSXRlcmF0b3ItPmFkdmFuY2UobV90ZXh0UG9zaXRpb24gKyAxLCBnbHlwaEJ1ZmZlcik7CiAg
ICAgaWYgKCFtZXRyaWNzTGVuZ3RoKSB7CiAgICAgICAgIG1fY3VycmVudE1ldHJpY3MgPSBTVkdU
ZXh0TWV0cmljcygpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjIzYTM0ZjBiYTkyMTc2NWVj
ZmM3OGY0ZjMwYzg4MjNiZGJmMWMzMy4uYTIxNmI4MmExZDc5OWNhYWMzOWNlNTEyNGY3M2VjNzcw
Y2NjNGVkZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTA4LTAxICBNeWxlcyBDLiBNYXhm
aWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBHbHlwaEJ1ZmZlcnMg
cmVxdWlyZWQgaW4gdGhlIGZhc3QgdGV4dCBjb2RlcGF0aAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvc2Vs
ZWN0c3RhcnQtYnktZHJhZy1leHBlY3RlZC50eHQ6IFRlc3QgcHJvZ3Jlc3NlZCBvbiBXaW5kb3dz
LgorCiAyMDIwLTA3LTMxICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVXNlIG1vcmUgaW5jbHVzaXZlIHRlcm1pbm9sb2d5IGluIFRvb2xzCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvc2VsZWN0c3Rh
cnQtYnktZHJhZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC9l
dmVudHMvc2VsZWN0c3RhcnQtYnktZHJhZy1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGEyNzU4NzU5YTg2ZGY1OWEzYTY3YTQ1M2JiZTlkNTI2MGM4NjlmYjYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3NlbGVjdHN0YXJ0LWJ5LWRyYWctZXhwZWN0ZWQudHh0
CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotVGhpcyB0ZXN0IGVuc3VyZXMgc2VsZWN0
c3RhcnQgaXMgZmlyZWQgZXhhY3RseSBvbmNlIHdoZW4gc2VsZWN0aW5nIHRleHQgYnkgYSBtb3Vz
ZSBkcmFnLgotCi1Jbml0aWFsIHN0YXRlOiBQQVNTCi1Nb3VzZSBkb3duOiBGQUlMIC0gZXhwZWN0
ZWQgc2VsZWN0aW9uIHRvIGJlIGNhcmV0IGJ1dCB3YXMgcmFuZ2UKLU1vdmluZyBzbGlnaHRseSB0
byB0aGUgcmlnaHQ6IEZBSUwgLSBleHBlY3RlZCBzZWxlY3Rpb24gdG8gYmUgY2FyZXQgYnV0IHdh
cyByYW5nZQotTW92aW5nIHNsaWdodGx5IHRvIHRoZSBsZWZ0OiBGQUlMIC0gZXhwZWN0ZWQgc2Vs
ZWN0aW9uIHRvIGJlIGNhcmV0IGJ1dCB3YXMgcmFuZ2UKLU1vdmluZyB0byB0aGUgcmlnaHQ6IFBB
U1MKLU1vdmluZyBmdXJ0aGVyIHRvIHRoZSByaWdodDogUEFTUwotTW92aW5nIGJhY2sgdG8gdGhl
IGxlZnQ6IEZBSUwgLSBleHBlY3RlZCBzZWxlY3Rpb24gdG8gYmUgY2FyZXQgYnV0IHdhcyByYW5n
ZQotTW92aW5nIHRvIHRoZSByaWdodCBhZ2FpbjogUEFTUwotTW91c2UgZG93biBvbiB0aGUgcmln
aHQ6IFBBU1MKLU1vdmluZyB0byB0aGUgbGVmdDogUEFTUwotRG9uZS4KLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405977</attachid>
            <date>2020-08-04 20:08:51 -0700</date>
            <delta_ts>2020-08-04 21:04:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215052-20200804200851.patch</filename>
            <type>text/plain</type>
            <size>24321</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGY2NjQ5MGJiZjJjNDc4
NmVlYzU2N2UxOTYzNGIzYjc4YmMzY2M4NS4uNDc3YzJjOGY1MTExNTE2NGJkMWFjYTYyY2MwMzVi
YzJiMmFkZjJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIwLTA4LTA0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBHbHlw
aEJ1ZmZlcnMgcmVxdWlyZWQgaW4gdGhlIGZhc3QgdGV4dCBjb2RlcGF0aAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDUyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlv
biBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDc2OQorICAg
ICAgICBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjIwOC4K
KworICAgICAgICBQZXJmb3JtaW5nIHNoYXBpbmcgYWZmZWN0cyB0aGUgd2lkdGggb2Ygc3RyaW5n
czsgaW5kZWVkLCB0aGF0IGlzIG9uZSBvZgorICAgICAgICBpdHMgcHVycG9zZXMgZm9yIGV4aXN0
ZW5jZS4gU2hhcGluZyBjYW4gb25seSBoYXBwZW4gd2hlbiB3ZSBoYXZlIGEgR2x5cGhCdWZmZXIK
KyAgICAgICAgdG8gc2hhcGUuIFdlIGNhbid0IGp1c3QgYXJiaXRyYXJpbHkgZGVjaWRlIHRvIGRp
c2FibGUgc2hhcGluZyBmb3IgdmFyaW91cworICAgICAgICBmdW5jdGlvbnMganVzdCBiZWNhdXNl
IHRob3NlIGZ1bmN0aW9ucyBkb24ndCBldmVyIGluc3BlY3QgdGhlIGV4YWN0IGdseXBocy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgYSBwcmVwYXJhdGlvbiBzdGVwIHRvd2FyZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0NzY5IGFu
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MjA4
LCBhbmQgSSBjb3VsZG4ndCBjb21lIHVwIHdpdGggYQorICAgICAgICB0ZXN0IGNhc2UgdGhhdCB3
YXMgYnJva2VuIGhlcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhPZlRleHRSYW5nZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6
c2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0
aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2VP
bmVDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0
KToKKwogMjAyMC0wOC0wNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgIkRvdWJsZURvd24gQ2FzaW5vIiByZXNwaW4gYnV0dG9uIHN0b3BzIHdvcmtpbmcgd2l0
aCB0cmFja3BhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCmluZGV4IDgwZmFiYjMyYWRiZjY5Y2MxZTQ4MGIxN2JkMWM2OTljODlkZjQyNmMu
LjE5OTYwMWUxODY3ZDZhYmY3NjkwYmI0MTg4MWJjODhlOGQ5Mjk3ZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTM3MywxMSAr
MzczLDEyIEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aE9mVGV4dFJhbmdlKGNvbnN0IFRleHRS
dW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQKICAgICAgICAgdG90YWxXaWR0aCA9IGNv
bXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lk
dGhJdGVyYXRvciBzaW1wbGVJdGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwotICAg
ICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOworICAgICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2YW5jZShmcm9t
LCBnbHlwaEJ1ZmZlcik7CiAgICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gc2ltcGxlSXRlcmF0
b3IucnVuV2lkdGhTb0ZhcigpOwotICAgICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKHRvLCBu
dWxscHRyKTsKKyAgICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2YW5jZSh0bywgZ2x5cGhCdWZmZXIp
OwogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gc2ltcGxlSXRlcmF0b3IucnVuV2lkdGhTb0Zh
cigpOwotICAgICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgbnVsbHB0
cik7CisgICAgICAgIHNpbXBsZUl0ZXJhdG9yLmFkdmFuY2UocnVuLmxlbmd0aCgpLCBnbHlwaEJ1
ZmZlcik7CiAgICAgICAgIHRvdGFsV2lkdGggPSBzaW1wbGVJdGVyYXRvci5ydW5XaWR0aFNvRmFy
KCk7CiAgICAgfQogCkBAIC00MzUsMjYgKzQzNiwyMiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcgdGV4dCkgY29uc3QKICAgICAgICAgcmV0dXJuICpj
YWNoZUVudHJ5OwogCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgYm9vbCBoYXNL
ZXJuaW5nT3JMaWdhdHVyZXMgPSBlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCk7
CiAgICAgZmxvYXQgcnVuV2lkdGggPSAwOwogICAgIGF1dG8mIGZvbnQgPSBwcmltYXJ5Rm9udCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyArK2kpIHsKICAg
ICAgICAgYXV0byBnbHlwaCA9IGdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0W2ldLCBmYWxzZSku
Z2x5cGg7CiAgICAgICAgIGF1dG8gZ2x5cGhXaWR0aCA9IGZvbnQud2lkdGhGb3JHbHlwaChnbHlw
aCk7CiAgICAgICAgIHJ1bldpZHRoICs9IGdseXBoV2lkdGg7Ci0gICAgICAgIGlmICghaGFzS2Vy
bmluZ09yTGlnYXR1cmVzKQotICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGdseXBoQnVm
ZmVyLmFkZChnbHlwaCwgJmZvbnQsIGdseXBoV2lkdGgpOwogICAgIH0KLSAgICBpZiAoaGFzS2Vy
bmluZ09yTGlnYXR1cmVzKSB7Ci0gICAgICAgIGZvbnQuYXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLCAwLCBlbmFibGVLZXJuaW5nKCksIHJlcXVpcmVzU2hhcGluZygpLCBmb250RGVzY3JpcHRp
b24oKS5jb21wdXRlZExvY2FsZSgpKTsKLSAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSB0
byBtYXRjaCB0aGUgcmVzdWx0IG9mIHRoZSBzbG93IHBhdGguIFNhbWUgZ2x5cGggd2lkdGhzIGJ1
dCBkaWZmZXJlbnQgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZW50aWNzIGNhbgotICAgICAgICAvLyBw
cm9kdWNlIGRpZmZlcmVudCBydW4gd2lkdGguCi0gICAgICAgIGZsb2F0IHJ1bldpZHRoRGlmZmVy
ZW5jZVdpdGhUcmFuc2Zvcm1BcHBsaWVkID0gLXJ1bldpZHRoOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcnVuV2lk
dGhEaWZmZXJlbmNlV2l0aFRyYW5zZm9ybUFwcGxpZWQgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0
KGkpLndpZHRoKCk7Ci0gICAgICAgIHJ1bldpZHRoICs9IHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhU
cmFuc2Zvcm1BcHBsaWVkOwotICAgIH0KKworICAgIGZvbnQuYXBwbHlUcmFuc2Zvcm1zKGdseXBo
QnVmZmVyLCAwLCBlbmFibGVLZXJuaW5nKCksIHJlcXVpcmVzU2hhcGluZygpLCBmb250RGVzY3Jp
cHRpb24oKS5jb21wdXRlZExvY2FsZSgpKTsKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBvbmx5IHRv
IG1hdGNoIHRoZSByZXN1bHQgb2YgdGhlIHNsb3cgcGF0aC4gU2FtZSBnbHlwaCB3aWR0aHMgYnV0
IGRpZmZlcmVudCBmbG9hdGluZyBwb2ludCBhcml0aG1lbnRpY3MgY2FuCisgICAgLy8gcHJvZHVj
ZSBkaWZmZXJlbnQgcnVuIHdpZHRoLgorICAgIGZsb2F0IHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhU
cmFuc2Zvcm1BcHBsaWVkID0gLXJ1bldpZHRoOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Z2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpCisgICAgICAgIHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhU
cmFuc2Zvcm1BcHBsaWVkICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpOworICAg
IHJ1bldpZHRoICs9IHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhUcmFuc2Zvcm1BcHBsaWVkOwogCiAg
ICAgaWYgKGNhY2hlRW50cnkpCiAgICAgICAgICpjYWNoZUVudHJ5ID0gcnVuV2lkdGg7CkBAIC0x
Mzc2LDkgKzEzNzMsOSBAQCBHbHlwaEJ1ZmZlciBGb250Q2FzY2FkZTo6bGF5b3V0U2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVucwogICAgIC8vIEZJWE1FOiBV
c2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJzIGZvciB0aGUgcHJlZml4IGFuZCB0aGUgc3VmZml4
IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcgb3IKICAgICAvLyBsaWdhdHVyZXMgYXJlIGVuYWJs
ZWQuCiAgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKLSAgICBpdC5hZHZhbmNlKGZy
b20sICZsb2NhbEdseXBoQnVmZmVyKTsKKyAgICBpdC5hZHZhbmNlKGZyb20sIGxvY2FsR2x5cGhC
dWZmZXIpOwogICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotICAg
IGl0LmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7CisgICAgaXQuYWR2YW5jZSh0bywgZ2x5cGhC
dWZmZXIpOwogCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGdseXBoQnVmZmVyOwpAQCAtMTM4OCw3ICsxMzg1LDcgQEAgR2x5cGhCdWZmZXIgRm9udENhc2Nh
ZGU6OmxheW91dFNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1
bnMKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IDA7CiAgICAgaWYgKHJ1bi5ydGwoKSkgewog
ICAgICAgICBmbG9hdCBmaW5hbFJvdW5kaW5nV2lkdGggPSBpdC5maW5hbFJvdW5kaW5nV2lkdGgo
KTsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksICZsb2NhbEdseXBoQnVmZmVyKTsK
KyAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksIGxvY2FsR2x5cGhCdWZmZXIpOwogICAg
ICAgICBpbml0aWFsQWR2YW5jZSA9IGZpbmFsUm91bmRpbmdXaWR0aCArIGl0LnJ1bldpZHRoU29G
YXIoKSAtIGFmdGVyV2lkdGg7CiAgICAgfSBlbHNlCiAgICAgICAgIGluaXRpYWxBZHZhbmNlID0g
YmVmb3JlV2lkdGg7CkBAIC0xNTIzLDcgKzE1MjAsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Zmxv
YXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZv
bgogewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlw
aE92ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBpdC5hZHZhbmNl
KHJ1bi5sZW5ndGgoKSwgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgPyAm
Z2x5cGhCdWZmZXIgOiBudWxscHRyKTsKKyAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgZ2x5
cGhCdWZmZXIpOwogCiAgICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKICAgICAgICAgZ2x5cGhPdmVy
Zmxvdy0+dG9wID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNlaWxmKC1pdC5t
aW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8g
MCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKQEAgLTE1NTEsMTMgKzE1NDgsMTMgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBMYXlvdXRSZWMKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAg
ICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7Ci0gICAgaXQuYWR2YW5jZShmcm9tLCAmZ2x5
cGhCdWZmZXIpOworICAgIGl0LmFkdmFuY2UoZnJvbSwgZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0
IGJlZm9yZVdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotICAgIGl0LmFkdmFuY2UodG8sICZn
bHlwaEJ1ZmZlcik7CisgICAgaXQuYWR2YW5jZSh0bywgZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0
IGFmdGVyV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7CiAKICAgICBpZiAocnVuLnJ0bCgpKSB7
Ci0gICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpLCAmZ2x5cGhCdWZmZXIpOworICAgICAg
ICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgZ2x5cGhCdWZmZXIpOwogICAgICAgICBmbG9hdCB0
b3RhbFdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwogICAgICAgICBzZWxlY3Rpb25SZWN0Lm1v
dmUodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgsIDApOwogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAppbmRleCA2MTYz
YmNlMjdhMjRmYjczZjdmNDcwZjA5OTJhYjFjNzJhMDVlZjllLi43YWJmOWFlZDI4MDU0NWEwNTdk
ZWI0MDE0YzJiOTAxZDNhZmE1MDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcApAQCAtNzYsNDUgKzc2LDQyIEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc1NvZnRCYW5rRW1vamkoVUNoYXIzMiBjb2RlcG9pbnQpCiAgICAgcmV0dXJu
IGNvZGVwb2ludCA+PSAweEUwMDEgJiYgY29kZXBvaW50IDw9IDB4RTUzNzsKIH0KIAotaW5saW5l
IGF1dG8gV2lkdGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlw
aEJ1ZmZlciogZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50LCBVQ2hhcjMyIHBy
ZXZpb3VzQ2hhcmFjdGVyKSBjb25zdCAtPiBUcmFuc2Zvcm1zVHlwZQoraW5saW5lIGF1dG8gV2lk
dGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50LCBVQ2hhcjMyIHByZXZpb3VzQ2hh
cmFjdGVyKSBjb25zdCAtPiBUcmFuc2Zvcm1zVHlwZQogewotICAgIGlmIChnbHlwaEJ1ZmZlciAm
JiBnbHlwaEJ1ZmZlci0+c2l6ZSgpID09IChsYXN0R2x5cGhDb3VudCArIDEpICYmIGlzU29mdEJh
bmtFbW9qaShwcmV2aW91c0NoYXJhY3RlcikpCisgICAgaWYgKGdseXBoQnVmZmVyLnNpemUoKSA9
PSAobGFzdEdseXBoQ291bnQgKyAxKSAmJiBpc1NvZnRCYW5rRW1vamkocHJldmlvdXNDaGFyYWN0
ZXIpKQogICAgICAgICByZXR1cm4gVHJhbnNmb3Jtc1R5cGU6OkZvcmNlZDsKLSAgICBpZiAobV9y
dW4ubGVuZ3RoKCkgPD0gMSB8fCAhKG1fZW5hYmxlS2VybmluZyB8fCBtX3JlcXVpcmVzU2hhcGlu
ZykpCisgICAgaWYgKG1fcnVuLmxlbmd0aCgpIDw9IDEpCiAgICAgICAgIHJldHVybiBUcmFuc2Zv
cm1zVHlwZTo6Tm9uZTsKICAgICByZXR1cm4gVHJhbnNmb3Jtc1R5cGU6Ok5vdEZvcmNlZDsKIH0K
IAotaW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgdW5zaWduZWQmIGxhc3RHbHlwaENvdW50LCBj
b25zdCBGb250KiBmb250LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBD
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSkKK2lubGlu
ZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgYm9vbCBsdHIsIHVuc2lnbmVkJiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9u
dCogZm9udCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVy
c1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChwcmV2aW91c0NoYXJhY3Rlciwgc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyhnbHlw
aEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKSAhPSBXaWR0aEl0ZXJh
dG9yOjpUcmFuc2Zvcm1zVHlwZTo6Tm9uZSk7CiAKLSAgICBpZiAoIWdseXBoQnVmZmVyKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGF1dG8gZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXIt
PnNpemUoKTsKKyAgICBhdXRvIGdseXBoQnVmZmVyU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsK
ICAgICBpZiAoIWZvcmNlICYmIGdseXBoQnVmZmVyU2l6ZSA8PSBsYXN0R2x5cGhDb3VudCArIDEp
IHsKICAgICAgICAgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlclNpemU7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMgPSBnbHlw
aEJ1ZmZlci0+YWR2YW5jZXMoMCk7CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyA9
IGdseXBoQnVmZmVyLmFkdmFuY2VzKDApOwogICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gMDsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBsYXN0R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVyU2l6ZTsg
KytpKQogICAgICAgICBiZWZvcmVXaWR0aCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogCiAgICAg
QVNTRVJUKGxhc3RHbHlwaENvdW50IDw9IGdseXBoQnVmZmVyU2l6ZSk7CiAgICAgaWYgKCFsdHIp
Ci0gICAgICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZl
clNpemUgLSBsYXN0R2x5cGhDb3VudCk7CisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UobGFz
dEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKIAotICAgIGZv
bnQtPmFwcGx5VHJhbnNmb3JtcygqZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCBtX2VuYWJs
ZUtlcm5pbmcsIG1fcmVxdWlyZXNTaGFwaW5nLCBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpLmNv
bXB1dGVkTG9jYWxlKCkpOwotICAgIGdseXBoQnVmZmVyU2l6ZSA9IGdseXBoQnVmZmVyLT5zaXpl
KCk7CisgICAgZm9udC0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3Vu
dCwgbV9lbmFibGVLZXJuaW5nLCBtX3JlcXVpcmVzU2hhcGluZywgbV9mb250LT5mb250RGVzY3Jp
cHRpb24oKS5jb21wdXRlZExvY2FsZSgpKTsKKyAgICBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1
ZmZlci5zaXplKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsYXN0R2x5cGhDb3VudDsgaSA8
IGdseXBoQnVmZmVyU2l6ZTsgKytpKQogICAgICAgICBhZHZhbmNlc1tpXS5zZXRIZWlnaHQoLWFk
dmFuY2VzW2ldLmhlaWdodCgpKTsKIAogICAgIGlmICghbHRyKQotICAgICAgICBnbHlwaEJ1ZmZl
ci0+cmV2ZXJzZShsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291
bnQpOworICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1
ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCk7CiAKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MjA4OiBUaGlzIGlzIHRvdGFsbHksIDEwMCUsIGZ1cmlv
dXNseSwgdXR0ZXJseSwgZnJ1c3RyYXRpbmdseSBib2d1cy4KICAgICAvLyBUaGVyZSBpcyBhYnNv
bHV0ZWx5IG5vIGd1YXJhbnRlZSB0aGF0IGdseXBoIGluZGljZXMgYmVmb3JlIHNoYXBpbmcgaGF2
ZSBhbnkgcmVsYXRpb24gYXQgYWxsIHdpdGggZ2x5cGggaW5kaWNlcyBhZnRlciBzaGFwaW5nLgpA
QCAtMTI2LDggKzEyMyw4IEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgY29uc3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0
ZWRBc1NwYWNlJiBvcmlnaW5hbEFkdmFuY2VzID0gY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlW2ld
LnNlY29uZDsKICAgICAgICAgaWYgKHNwYWNlT2Zmc2V0ICYmICFvcmlnaW5hbEFkdmFuY2VzLmNo
YXJhY3RlcklzU3BhY2UpCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMoc3BhY2VP
ZmZzZXQgLSAxKS0+c2V0V2lkdGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQmVmb3JlQ2hhcmFj
dGVyKTsKLSAgICAgICAgZ2x5cGhCdWZmZXItPmFkdmFuY2VzKHNwYWNlT2Zmc2V0KS0+c2V0V2lk
dGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQXRDaGFyYWN0ZXIpOworICAgICAgICAgICAgZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoc3BhY2VPZmZzZXQgLSAxKS0+c2V0V2lkdGgob3JpZ2luYWxBZHZh
bmNlcy5hZHZhbmNlQmVmb3JlQ2hhcmFjdGVyKTsKKyAgICAgICAgZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoc3BhY2VPZmZzZXQpLT5zZXRXaWR0aChvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VBdENoYXJh
Y3Rlcik7CiAgICAgfQogICAgIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZS5jbGVhcigpOwogCkBA
IC0xNjksNyArMTY2LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD4gZXhw
YW5zaW9uTG9jYXRpb24oYm9vbCBpZGVvZ3JhcGgsIGJvb2wgdHJlYXQKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIFRleHRJdGVyYXRvcj4KLWlubGluZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmZXIqIGdseXBo
QnVmZmVyKQoraW5saW5lIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJ
dGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpCiB7CiAgICAg
Ly8gVGhlIGNvcmUgbG9naWMgaGVyZSBuZWVkcyB0byBtYXRjaCBTaW1wbGVMaW5lTGF5b3V0Ojp3
aWR0aEZvclNpbXBsZVRleHQoKQogICAgIGJvb2wgcnRsID0gbV9ydW4ucnRsKCk7CkBAIC0xODks
NyArMTg2LDcgQEAgaW5saW5lIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRl
eHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmYKIAogICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgpOwogICAgIGNvbnN0IEZvbnQqIGxhc3RG
b250RGF0YSA9ICZwcmltYXJ5Rm9udDsKLSAgICB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCA9IGds
eXBoQnVmZmVyID8gZ2x5cGhCdWZmZXItPnNpemUoKSA6IDA7CisgICAgdW5zaWduZWQgbGFzdEds
eXBoQ291bnQgPSBnbHlwaEJ1ZmZlci5zaXplKCk7CiAKICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9
IDA7CiAgICAgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciA9IDA7CkBAIC0yMzMsOCArMjMwLDcg
QEAgaW5saW5lIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRv
ciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmYKICAgICAgICAgICAgIGF1dG8gdHJhbnNmb3Jtc1R5
cGUgPSBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3Vu
dCwgcHJldmlvdXNDaGFyYWN0ZXIpOwogICAgICAgICAgICAgaWYgKHRyYW5zZm9ybXNUeXBlICE9
IFRyYW5zZm9ybXNUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgbV9ydW5XaWR0aFNvRmFy
ICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBsYXN0R2x5
cGhDb3VudCwgbGFzdEZvbnREYXRhLCBwcmV2aW91c0NoYXJhY3RlciwgdHJhbnNmb3Jtc1R5cGUg
PT0gVHJhbnNmb3Jtc1R5cGU6OkZvcmNlZCwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAgICAgICAgICAgICAgICAgIGdseXBo
QnVmZmVyLT5zaHJpbmsobGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAgICAgIGdseXBoQnVm
ZmVyLnNocmluayhsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGxhc3RGb250RGF0YSA9IGZvbnQ7CkBAIC0yODQsMTUgKzI4MCwxMyBAQCBpbmxpbmUgdm9pZCBX
aWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3Is
IEdseXBoQnVmZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIHByZXZp
b3VzIHdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leHBhbnNpb24gLT0gbV9l
eHBhbnNpb25QZXJPcHBvcnR1bml0eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3J1
bldpZHRoU29GYXIgKz0gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGdseXBoQnVmZmVyLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnQtPnplcm9XaWR0
aFNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSwgY3VycmVudENo
YXJhY3RlckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRk
KGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSwgY3Vy
cmVudENoYXJhY3RlckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhw
YW5kTGFzdEFkdmFuY2UobV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1
ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Zm9yVGV4dEVtcGhhc2lzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5
cGhCdWZmZXIuYWRkKGZvbnQtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNp
b25QZXJPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3RlckluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2x5cGhCdWZmZXIuYWRkKGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25Q
ZXJPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3RlckluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhC
dWZmZXIuZXhwYW5kTGFzdEFkdmFuY2UobV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEluY3JlYXNlIG5leHQgd2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
b3Zlckp1c3RpZmljYXRpb25XaWR0aCArPSBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5OwpAQCAt
MzE3LDkgKzMxMSw5IEBAIGlubGluZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHRyYW5zZm9ybXNUeXBlID0gc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyhnbHlw
aEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKLSAgICAgICAgaWYg
KHRyYW5zZm9ybXNUeXBlICE9IFRyYW5zZm9ybXNUeXBlOjpOb25lICYmIGdseXBoQnVmZmVyICYm
IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgewotICAgICAgICAgICAgY2hh
cmFjdGVyc1RyZWF0ZWRBc1NwYWNlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihnbHlwaEJ1ZmZlci0+
c2l6ZSgpLAotICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVh
dGVkQXNTcGFjZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5cGhC
dWZmZXItPmFkdmFuY2VBdChnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMSkud2lkdGgoKSA6IDAsIHdp
ZHRoKSkpOworICAgICAgICBpZiAodHJhbnNmb3Jtc1R5cGUgIT0gVHJhbnNmb3Jtc1R5cGU6Ok5v
bmUgJiYgRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAg
ICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGdseXBoQnVm
ZmVyLnNpemUoKSwKKyAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVy
VHJlYXRlZEFzU3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXIuc2l6ZSgpID8gZ2x5
cGhCdWZmZXIuYWR2YW5jZUF0KGdseXBoQnVmZmVyLnNpemUoKSAtIDEpLndpZHRoKCkgOiAwLCB3
aWR0aCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5k
cykgewpAQCAtMzM4LDggKzMzMiw3IEBAIGlubGluZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmCiAKICAgICAg
ICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyArPSB3aWR0aDsKIAotICAgICAgICBpZiAoZ2x5cGhC
dWZmZXIpCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250LCAocnRsID8g
b2xkV2lkdGggKyBsYXN0Um91bmRpbmdXaWR0aCA6IHdpZHRoKSwgY3VycmVudENoYXJhY3Rlcklu
ZGV4KTsKKyAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGdseXBoLCBmb250LCAocnRsID8gb2xkV2lk
dGggKyBsYXN0Um91bmRpbmdXaWR0aCA6IHdpZHRoKSwgY3VycmVudENoYXJhY3RlckluZGV4KTsK
IAogICAgICAgICBsYXN0Um91bmRpbmdXaWR0aCA9IHdpZHRoIC0gb2xkV2lkdGg7CiAKQEAgLTM1
MSwxOCArMzQ0LDE3IEBAIGlubGluZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmCiAgICAgICAgIHByZXZpb3Vz
Q2hhcmFjdGVyID0gY2hhcmFjdGVyOwogICAgIH0KIAotICAgIGlmIChnbHlwaEJ1ZmZlciAmJiBs
ZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCkgeworICAgIGlmIChsZWZ0b3Zlckp1c3RpZmljYXRp
b25XaWR0aCkgewogICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMpCi0gICAgICAgICAgICBn
bHlwaEJ1ZmZlci0+YWRkKGxhc3RGb250RGF0YS0+emVyb1dpZHRoU3BhY2VHbHlwaCgpLCBsYXN0
Rm9udERhdGEsIGxlZnRvdmVySnVzdGlmaWNhdGlvbldpZHRoLCBtX3J1bi5sZW5ndGgoKSAtIDEp
OworICAgICAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGxhc3RGb250RGF0YS0+emVyb1dpZHRoU3Bh
Y2VHbHlwaCgpLCBsYXN0Rm9udERhdGEsIGxlZnRvdmVySnVzdGlmaWNhdGlvbldpZHRoLCBtX3J1
bi5sZW5ndGgoKSAtIDEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGxhc3RGb250RGF0YS0+c3BhY2VHbHlwaCgpLCBsYXN0Rm9udERhdGEsIGxlZnRvdmVySnVz
dGlmaWNhdGlvbldpZHRoLCBtX3J1bi5sZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgZ2x5cGhC
dWZmZXIuYWRkKGxhc3RGb250RGF0YS0+c3BhY2VHbHlwaCgpLCBsYXN0Rm9udERhdGEsIGxlZnRv
dmVySnVzdGlmaWNhdGlvbldpZHRoLCBtX3J1bi5sZW5ndGgoKSAtIDEpOwogICAgIH0KIAogICAg
IGF1dG8gdHJhbnNmb3Jtc1R5cGUgPSBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLCBsYXN0R2x5cGhDb3VudCwgcHJldmlvdXNDaGFyYWN0ZXIpOwogICAgIGlmICh0cmFuc2Zv
cm1zVHlwZSAhPSBUcmFuc2Zvcm1zVHlwZTo6Tm9uZSkgewogICAgICAgICBtX3J1bldpZHRoU29G
YXIgKz0gYXBwbHlGb250VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgbV9ydW4ubHRyKCksIGxhc3RH
bHlwaENvdW50LCBsYXN0Rm9udERhdGEsIHByZXZpb3VzQ2hhcmFjdGVyLCB0cmFuc2Zvcm1zVHlw
ZSA9PSBUcmFuc2Zvcm1zVHlwZTo6Rm9yY2VkLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwot
ICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2hyaW5r
KGxhc3RHbHlwaENvdW50KTsKKyAgICAgICAgZ2x5cGhCdWZmZXIuc2hyaW5rKGxhc3RHbHlwaENv
dW50KTsKICAgICB9CiAKICAgICBtX2N1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IHRleHRJdGVyYXRv
ci5jdXJyZW50SW5kZXgoKTsKQEAgLTM3MCw3ICszNjIsNyBAQCBpbmxpbmUgdm9pZCBXaWR0aEl0
ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBo
QnVmZgogICAgIG1fZmluYWxSb3VuZGluZ1dpZHRoID0gbGFzdFJvdW5kaW5nV2lkdGg7CiB9CiAK
LXZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlcikKK3ZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZz
ZXQsIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlcikKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBt
X3J1bi5sZW5ndGgoKTsKIApAQCAtMzkzLDcgKzM4NSw3IEBAIHZvaWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIGJvb2wg
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlcikKIHsKICAgICB1bnNpZ25lZCBvbGRTaXplID0gZ2x5cGhCdWZmZXIu
c2l6ZSgpOwotICAgIGFkdmFuY2UobV9jdXJyZW50Q2hhcmFjdGVySW5kZXggKyAxLCAmZ2x5cGhC
dWZmZXIpOworICAgIGFkdmFuY2UobV9jdXJyZW50Q2hhcmFjdGVySW5kZXggKyAxLCBnbHlwaEJ1
ZmZlcik7CiAgICAgZmxvYXQgdyA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsg
aSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQogICAgICAgICB3ICs9IGdseXBoQnVmZmVyLmFk
dmFuY2VBdChpKS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5oCmluZGV4IDhkYjM4YmIyMTBiMzE4YTkyM2MxZTk4MmM1NDY5ZTI1
OGVjYjNiMzIuLjg1MWQzZTFhYjVhNjFhYzA0NDk4NmY5YWYzNzc5YzhlMTBhZDdjMzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKQEAg
LTQyLDcgKzQyLDcgQEAgc3RydWN0IFdpZHRoSXRlcmF0b3IgewogcHVibGljOgogICAgIFdpZHRo
SXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9
IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAotICAgIHZvaWQgYWR2YW5j
ZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqKTsKKyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQg
dG8sIEdseXBoQnVmZmVyJik7CiAgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3
aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkg
Y29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyByZXR1cm4gbV9tYXhHbHlw
aEJvdW5kaW5nQm94WTsgfQpAQCAtNTgsMTEgKzU4LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvcik7
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVyYXRvcj4KLSAgICBpbmxpbmUgdm9pZCBh
ZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqKTsKKyAgICBpbmxpbmUg
dm9pZCBhZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXImKTsKIAogICAg
IGVudW0gY2xhc3MgVHJhbnNmb3Jtc1R5cGUgeyBOb25lLCBGb3JjZWQsIE5vdEZvcmNlZCB9Owot
ICAgIFRyYW5zZm9ybXNUeXBlIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhC
dWZmZXIqLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3Rl
cikgY29uc3Q7Ci0gICAgZmxvYXQgYXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciosIGJv
b2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqLCBVQ2hhcjMyIHBy
ZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmKTsK
KyAgICBUcmFuc2Zvcm1zVHlwZSBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBo
QnVmZmVyJiwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0
ZXIpIGNvbnN0OworICAgIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCBi
b29sIGx0ciwgdW5zaWduZWQmIGxhc3RHbHlwaENvdW50LCBjb25zdCBGb250KiwgVUNoYXIzMiBw
cmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJik7
CiAKICAgICBjb25zdCBGb250Q2FzY2FkZSogbV9mb250OwogICAgIGNvbnN0IFRleHRSdW4mIG1f
cnVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLm1tCmluZGV4IDhiOGM5ZDY3ZDdkZjUyNzc5NTRjM2QzN2YxNTUxNGExZTg4ZTdiMjMu
LjY1YjVlMTY0MGFkYjcyODc4ZTMzZThkODlkZjhmNGY5NWY5ZjEyOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KQEAgLTU0
Nyw3ICs1NDcsOCBAQCBSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRgogdm9pZCBGb250OjphcHBseVRy
YW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpbm5pbmdJbmRl
eCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0
cmluZyYgbG9jYWxlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgR2x5cGhCdWZm
ZXIgaW5pdGlhbCBhZHZhbmNlLgotICAgIENURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyA9
IChlbmFibGVLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8
IChyZXF1aXJlc1NoYXBpbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nIDogMCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7CisgICAgQ1RGb250VHJhbnNmb3JtT3B0
aW9ucyBvcHRpb25zID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3Np
dGlvbmluZyA6IDApIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZzsKICNpZiBVU0UoQ1RG
T05UVFJBTlNGT1JNR0xZUEhTV0lUSExBTkdVQUdFKQogICAgIGF1dG8gaGFuZGxlciA9IF4oQ0ZS
YW5nZSByYW5nZSwgQ0dHbHlwaCoqIG5ld0dseXBoc1BvaW50ZXIsIENHU2l6ZSoqIG5ld0FkdmFu
Y2VzUG9pbnRlcikgewogICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4
KHJhbmdlLmxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDRkluZGV4PigwKSksIHN0YXRpY19jYXN0PENG
SW5kZXg+KGdseXBoQnVmZmVyLnNpemUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCmluZGV4IGM4NTFjYjQ0ZTZl
ZDFkNjg5YTAyN2M4ODljOTM2YTRjNDY0ZWY3NzQuLmM3ZWQ0Nzk4ZWQ1ODg0NzRjM2Y3MzZiZjUw
MTk5NWZhMjM1NDkyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBTVkdU
ZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0KCkKIHsKICAgICBHbHlwaEJ1ZmZl
ciBnbHlwaEJ1ZmZlcjsKICAgICBhdXRvIGJlZm9yZSA9IG1fc2ltcGxlV2lkdGhJdGVyYXRvci0+
Y3VycmVudENoYXJhY3RlckluZGV4KCk7Ci0gICAgbV9zaW1wbGVXaWR0aEl0ZXJhdG9yLT5hZHZh
bmNlKG1fdGV4dFBvc2l0aW9uICsgMSwgJmdseXBoQnVmZmVyKTsKKyAgICBtX3NpbXBsZVdpZHRo
SXRlcmF0b3ItPmFkdmFuY2UobV90ZXh0UG9zaXRpb24gKyAxLCBnbHlwaEJ1ZmZlcik7CiAgICAg
YXV0byBhZnRlciA9IG1fc2ltcGxlV2lkdGhJdGVyYXRvci0+Y3VycmVudENoYXJhY3RlckluZGV4
KCk7CiAgICAgaWYgKGJlZm9yZSA9PSBhZnRlcikgewogICAgICAgICBtX2N1cnJlbnRNZXRyaWNz
ID0gU1ZHVGV4dE1ldHJpY3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYktpdC54Y3NjaGVtZSBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL1dlYktpdC54Y3Nj
aGVtZQppbmRleCA2MTAzOWIxYzcxNzM4ZjMyMzNkYjhiMzU5ODQzYzQ0YzgzZWY5YzlmLi4yMThk
YjJiMzc2OTkwYzQ1OGI1ZTk4M2IxNWQ4MmY5ZGM0YTMxODZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9XZWJLaXQueGNz
Y2hlbWUKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94
Y3NjaGVtZXMvV2ViS2l0Lnhjc2NoZW1lCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICA8L1Rlc3Rh
Ymxlcz4KICAgIDwvVGVzdEFjdGlvbj4KICAgIDxMYXVuY2hBY3Rpb24KLSAgICAgIGJ1aWxkQ29u
ZmlndXJhdGlvbiA9ICJSZWxlYXNlIgorICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gIkRlYnVn
IgogICAgICAgc2VsZWN0ZWREZWJ1Z2dlcklkZW50aWZpZXIgPSAiWGNvZGUuRGVidWdnZXJGb3Vu
ZGF0aW9uLkRlYnVnZ2VyLkxMREIiCiAgICAgICBzZWxlY3RlZExhdW5jaGVySWRlbnRpZmllciA9
ICJYY29kZS5EZWJ1Z2dlckZvdW5kYXRpb24uTGF1bmNoZXIuTExEQiIKICAgICAgIGxhdW5jaFN0
eWxlID0gIjAiCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMzQ5YjUzNGE1YmIwZjBiNTU1MGY5NWZlYjU3ZWRhMDkwMTg4ZWEz
OC4uNzI2MDNjYTNlNDVmNzk1YzU0NjZhNzk1Mjk1MjI2ODAzMTI0MzdmMSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyIEBACisyMDIwLTA4LTA0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgTWFrZSBHbHlwaEJ1ZmZlcnMgcmVxdWlyZWQgaW4gdGhlIGZhc3Qg
dGV4dCBjb2RlcGF0aAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1MDUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvc2VsZWN0c3RhcnQtYnktZHJhZy1leHBl
Y3RlZC50eHQ6IFRlc3QgcHJvZ3Jlc3NlZCBvbiBXaW5kb3dzLgorCiAyMDIwLTA4LTA0ICBDaHJp
cyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFZvaWNlT3Zl
ciBuZWVkcyBhY2Nlc3MgdG8gZm9udCBzdHlsaW5nIGF0IGluc2VydGlvbiBwb2ludApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRzL3NlbGVjdHN0YXJ0LWJ5
LWRyYWctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvZXZlbnRz
L3NlbGVjdHN0YXJ0LWJ5LWRyYWctZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBhMjc1ODc1OWE4NmRmNTlhM2E2N2E0NTNiYmU5ZDUyNjBjODY5ZmI2Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9mYXN0L2V2ZW50cy9zZWxlY3RzdGFydC1ieS1kcmFnLWV4cGVjdGVkLnR4dAorKysg
L2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLVRoaXMgdGVzdCBlbnN1cmVzIHNlbGVjdHN0YXJ0
IGlzIGZpcmVkIGV4YWN0bHkgb25jZSB3aGVuIHNlbGVjdGluZyB0ZXh0IGJ5IGEgbW91c2UgZHJh
Zy4KLQotSW5pdGlhbCBzdGF0ZTogUEFTUwotTW91c2UgZG93bjogRkFJTCAtIGV4cGVjdGVkIHNl
bGVjdGlvbiB0byBiZSBjYXJldCBidXQgd2FzIHJhbmdlCi1Nb3Zpbmcgc2xpZ2h0bHkgdG8gdGhl
IHJpZ2h0OiBGQUlMIC0gZXhwZWN0ZWQgc2VsZWN0aW9uIHRvIGJlIGNhcmV0IGJ1dCB3YXMgcmFu
Z2UKLU1vdmluZyBzbGlnaHRseSB0byB0aGUgbGVmdDogRkFJTCAtIGV4cGVjdGVkIHNlbGVjdGlv
biB0byBiZSBjYXJldCBidXQgd2FzIHJhbmdlCi1Nb3ZpbmcgdG8gdGhlIHJpZ2h0OiBQQVNTCi1N
b3ZpbmcgZnVydGhlciB0byB0aGUgcmlnaHQ6IFBBU1MKLU1vdmluZyBiYWNrIHRvIHRoZSBsZWZ0
OiBGQUlMIC0gZXhwZWN0ZWQgc2VsZWN0aW9uIHRvIGJlIGNhcmV0IGJ1dCB3YXMgcmFuZ2UKLU1v
dmluZyB0byB0aGUgcmlnaHQgYWdhaW46IFBBU1MKLU1vdXNlIGRvd24gb24gdGhlIHJpZ2h0OiBQ
QVNTCi1Nb3ZpbmcgdG8gdGhlIGxlZnQ6IFBBU1MKLURvbmUuCi0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405981</attachid>
            <date>2020-08-04 21:04:03 -0700</date>
            <delta_ts>2020-08-08 11:40:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215052-20200804210402.patch</filename>
            <type>text/plain</type>
            <size>23614</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1Mjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGY2NjQ5MGJiZjJjNDc4
NmVlYzU2N2UxOTYzNGIzYjc4YmMzY2M4NS4uNDc3YzJjOGY1MTExNTE2NGJkMWFjYTYyY2MwMzVi
YzJiMmFkZjJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDIwLTA4LTA0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBHbHlw
aEJ1ZmZlcnMgcmVxdWlyZWQgaW4gdGhlIGZhc3QgdGV4dCBjb2RlcGF0aAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDUyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBpbiBwcmVwYXJhdGlv
biBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDc2OQorICAg
ICAgICBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjIwOC4K
KworICAgICAgICBQZXJmb3JtaW5nIHNoYXBpbmcgYWZmZWN0cyB0aGUgd2lkdGggb2Ygc3RyaW5n
czsgaW5kZWVkLCB0aGF0IGlzIG9uZSBvZgorICAgICAgICBpdHMgcHVycG9zZXMgZm9yIGV4aXN0
ZW5jZS4gU2hhcGluZyBjYW4gb25seSBoYXBwZW4gd2hlbiB3ZSBoYXZlIGEgR2x5cGhCdWZmZXIK
KyAgICAgICAgdG8gc2hhcGUuIFdlIGNhbid0IGp1c3QgYXJiaXRyYXJpbHkgZGVjaWRlIHRvIGRp
c2FibGUgc2hhcGluZyBmb3IgdmFyaW91cworICAgICAgICBmdW5jdGlvbnMganVzdCBiZWNhdXNl
IHRob3NlIGZ1bmN0aW9ucyBkb24ndCBldmVyIGluc3BlY3QgdGhlIGV4YWN0IGdseXBocy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgaXMgYSBwcmVwYXJhdGlvbiBzdGVwIHRvd2FyZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0NzY5IGFu
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MjA4
LCBhbmQgSSBjb3VsZG4ndCBjb21lIHVwIHdpdGggYQorICAgICAgICB0ZXN0IGNhc2UgdGhhdCB3
YXMgYnJva2VuIGhlcmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2Fk
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhPZlRleHRSYW5nZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6d2lkdGhGb3JTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpsYXlvdXRTaW1wbGVUZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlOjpmbG9hdFdpZHRoRm9yU2lt
cGxlVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZTo6YWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6
c2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0
aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRo
SXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJh
dG9yOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OmFkdmFuY2VP
bmVDaGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0
KToKKwogMjAyMC0wOC0wNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgIkRvdWJsZURvd24gQ2FzaW5vIiByZXNwaW4gYnV0dG9uIHN0b3BzIHdvcmtpbmcgd2l0
aCB0cmFja3BhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCmluZGV4IDgwZmFiYjMyYWRiZjY5Y2MxZTQ4MGIxN2JkMWM2OTljODlkZjQyNmMu
LjE5OTYwMWUxODY3ZDZhYmY3NjkwYmI0MTg4MWJjODhlOGQ5Mjk3ZDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKQEAgLTM3MywxMSAr
MzczLDEyIEBAIGZsb2F0IEZvbnRDYXNjYWRlOjp3aWR0aE9mVGV4dFJhbmdlKGNvbnN0IFRleHRS
dW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQKICAgICAgICAgdG90YWxXaWR0aCA9IGNv
bXBsZXhJdGVyYXRvci5ydW5XaWR0aFNvRmFyKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgV2lk
dGhJdGVyYXRvciBzaW1wbGVJdGVyYXRvcih0aGlzLCBydW4sIGZhbGxiYWNrRm9udHMpOwotICAg
ICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKGZyb20sIG51bGxwdHIpOworICAgICAgICBHbHlw
aEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKKyAgICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2YW5jZShmcm9t
LCBnbHlwaEJ1ZmZlcik7CiAgICAgICAgIG9mZnNldEJlZm9yZVJhbmdlID0gc2ltcGxlSXRlcmF0
b3IucnVuV2lkdGhTb0ZhcigpOwotICAgICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKHRvLCBu
dWxscHRyKTsKKyAgICAgICAgc2ltcGxlSXRlcmF0b3IuYWR2YW5jZSh0bywgZ2x5cGhCdWZmZXIp
OwogICAgICAgICBvZmZzZXRBZnRlclJhbmdlID0gc2ltcGxlSXRlcmF0b3IucnVuV2lkdGhTb0Zh
cigpOwotICAgICAgICBzaW1wbGVJdGVyYXRvci5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgbnVsbHB0
cik7CisgICAgICAgIHNpbXBsZUl0ZXJhdG9yLmFkdmFuY2UocnVuLmxlbmd0aCgpLCBnbHlwaEJ1
ZmZlcik7CiAgICAgICAgIHRvdGFsV2lkdGggPSBzaW1wbGVJdGVyYXRvci5ydW5XaWR0aFNvRmFy
KCk7CiAgICAgfQogCkBAIC00MzUsMjYgKzQzNiwyMiBAQCBmbG9hdCBGb250Q2FzY2FkZTo6d2lk
dGhGb3JTaW1wbGVUZXh0KFN0cmluZ1ZpZXcgdGV4dCkgY29uc3QKICAgICAgICAgcmV0dXJuICpj
YWNoZUVudHJ5OwogCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7Ci0gICAgYm9vbCBoYXNL
ZXJuaW5nT3JMaWdhdHVyZXMgPSBlbmFibGVLZXJuaW5nKCkgfHwgcmVxdWlyZXNTaGFwaW5nKCk7
CiAgICAgZmxvYXQgcnVuV2lkdGggPSAwOwogICAgIGF1dG8mIGZvbnQgPSBwcmltYXJ5Rm9udCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyArK2kpIHsKICAg
ICAgICAgYXV0byBnbHlwaCA9IGdseXBoRGF0YUZvckNoYXJhY3Rlcih0ZXh0W2ldLCBmYWxzZSku
Z2x5cGg7CiAgICAgICAgIGF1dG8gZ2x5cGhXaWR0aCA9IGZvbnQud2lkdGhGb3JHbHlwaChnbHlw
aCk7CiAgICAgICAgIHJ1bldpZHRoICs9IGdseXBoV2lkdGg7Ci0gICAgICAgIGlmICghaGFzS2Vy
bmluZ09yTGlnYXR1cmVzKQotICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGdseXBoQnVm
ZmVyLmFkZChnbHlwaCwgJmZvbnQsIGdseXBoV2lkdGgpOwogICAgIH0KLSAgICBpZiAoaGFzS2Vy
bmluZ09yTGlnYXR1cmVzKSB7Ci0gICAgICAgIGZvbnQuYXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLCAwLCBlbmFibGVLZXJuaW5nKCksIHJlcXVpcmVzU2hhcGluZygpLCBmb250RGVzY3JpcHRp
b24oKS5jb21wdXRlZExvY2FsZSgpKTsKLSAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSB0
byBtYXRjaCB0aGUgcmVzdWx0IG9mIHRoZSBzbG93IHBhdGguIFNhbWUgZ2x5cGggd2lkdGhzIGJ1
dCBkaWZmZXJlbnQgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZW50aWNzIGNhbgotICAgICAgICAvLyBw
cm9kdWNlIGRpZmZlcmVudCBydW4gd2lkdGguCi0gICAgICAgIGZsb2F0IHJ1bldpZHRoRGlmZmVy
ZW5jZVdpdGhUcmFuc2Zvcm1BcHBsaWVkID0gLXJ1bldpZHRoOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcnVuV2lk
dGhEaWZmZXJlbmNlV2l0aFRyYW5zZm9ybUFwcGxpZWQgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0
KGkpLndpZHRoKCk7Ci0gICAgICAgIHJ1bldpZHRoICs9IHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhU
cmFuc2Zvcm1BcHBsaWVkOwotICAgIH0KKworICAgIGZvbnQuYXBwbHlUcmFuc2Zvcm1zKGdseXBo
QnVmZmVyLCAwLCBlbmFibGVLZXJuaW5nKCksIHJlcXVpcmVzU2hhcGluZygpLCBmb250RGVzY3Jp
cHRpb24oKS5jb21wdXRlZExvY2FsZSgpKTsKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCBvbmx5IHRv
IG1hdGNoIHRoZSByZXN1bHQgb2YgdGhlIHNsb3cgcGF0aC4gU2FtZSBnbHlwaCB3aWR0aHMgYnV0
IGRpZmZlcmVudCBmbG9hdGluZyBwb2ludCBhcml0aG1lbnRpY3MgY2FuCisgICAgLy8gcHJvZHVj
ZSBkaWZmZXJlbnQgcnVuIHdpZHRoLgorICAgIGZsb2F0IHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhU
cmFuc2Zvcm1BcHBsaWVkID0gLXJ1bldpZHRoOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Z2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpCisgICAgICAgIHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhU
cmFuc2Zvcm1BcHBsaWVkICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0aCgpOworICAg
IHJ1bldpZHRoICs9IHJ1bldpZHRoRGlmZmVyZW5jZVdpdGhUcmFuc2Zvcm1BcHBsaWVkOwogCiAg
ICAgaWYgKGNhY2hlRW50cnkpCiAgICAgICAgICpjYWNoZUVudHJ5ID0gcnVuV2lkdGg7CkBAIC0x
Mzc2LDkgKzEzNzMsOSBAQCBHbHlwaEJ1ZmZlciBGb250Q2FzY2FkZTo6bGF5b3V0U2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVucwogICAgIC8vIEZJWE1FOiBV
c2luZyBzZXBhcmF0ZSBnbHlwaCBidWZmZXJzIGZvciB0aGUgcHJlZml4IGFuZCB0aGUgc3VmZml4
IGlzIGluY29ycmVjdCB3aGVuIGtlcm5pbmcgb3IKICAgICAvLyBsaWdhdHVyZXMgYXJlIGVuYWJs
ZWQuCiAgICAgR2x5cGhCdWZmZXIgbG9jYWxHbHlwaEJ1ZmZlcjsKLSAgICBpdC5hZHZhbmNlKGZy
b20sICZsb2NhbEdseXBoQnVmZmVyKTsKKyAgICBpdC5hZHZhbmNlKGZyb20sIGxvY2FsR2x5cGhC
dWZmZXIpOwogICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotICAg
IGl0LmFkdmFuY2UodG8sICZnbHlwaEJ1ZmZlcik7CisgICAgaXQuYWR2YW5jZSh0bywgZ2x5cGhC
dWZmZXIpOwogCiAgICAgaWYgKGdseXBoQnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IGdseXBoQnVmZmVyOwpAQCAtMTM4OCw3ICsxMzg1LDcgQEAgR2x5cGhCdWZmZXIgRm9udENhc2Nh
ZGU6OmxheW91dFNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1
bnMKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IDA7CiAgICAgaWYgKHJ1bi5ydGwoKSkgewog
ICAgICAgICBmbG9hdCBmaW5hbFJvdW5kaW5nV2lkdGggPSBpdC5maW5hbFJvdW5kaW5nV2lkdGgo
KTsKLSAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksICZsb2NhbEdseXBoQnVmZmVyKTsK
KyAgICAgICAgaXQuYWR2YW5jZShydW4ubGVuZ3RoKCksIGxvY2FsR2x5cGhCdWZmZXIpOwogICAg
ICAgICBpbml0aWFsQWR2YW5jZSA9IGZpbmFsUm91bmRpbmdXaWR0aCArIGl0LnJ1bldpZHRoU29G
YXIoKSAtIGFmdGVyV2lkdGg7CiAgICAgfSBlbHNlCiAgICAgICAgIGluaXRpYWxBZHZhbmNlID0g
YmVmb3JlV2lkdGg7CkBAIC0xNTIzLDcgKzE1MjAsNyBAQCBmbG9hdCBGb250Q2FzY2FkZTo6Zmxv
YXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IEZv
bgogewogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlw
aE92ZXJmbG93KTsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKLSAgICBpdC5hZHZhbmNl
KHJ1bi5sZW5ndGgoKSwgKGVuYWJsZUtlcm5pbmcoKSB8fCByZXF1aXJlc1NoYXBpbmcoKSkgPyAm
Z2x5cGhCdWZmZXIgOiBudWxscHRyKTsKKyAgICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgZ2x5
cGhCdWZmZXIpOwogCiAgICAgaWYgKGdseXBoT3ZlcmZsb3cpIHsKICAgICAgICAgZ2x5cGhPdmVy
Zmxvdy0+dG9wID0gc3RkOjptYXg8aW50PihnbHlwaE92ZXJmbG93LT50b3AsIGNlaWxmKC1pdC5t
aW5HbHlwaEJvdW5kaW5nQm94WSgpKSAtIChnbHlwaE92ZXJmbG93LT5jb21wdXRlQm91bmRzID8g
MCA6IGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKQEAgLTE1NTEsMTMgKzE1NDgsMTMgQEAgdm9p
ZCBGb250Q2FzY2FkZTo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBMYXlvdXRSZWMKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAg
ICBXaWR0aEl0ZXJhdG9yIGl0KHRoaXMsIHJ1bik7Ci0gICAgaXQuYWR2YW5jZShmcm9tLCAmZ2x5
cGhCdWZmZXIpOworICAgIGl0LmFkdmFuY2UoZnJvbSwgZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0
IGJlZm9yZVdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwotICAgIGl0LmFkdmFuY2UodG8sICZn
bHlwaEJ1ZmZlcik7CisgICAgaXQuYWR2YW5jZSh0bywgZ2x5cGhCdWZmZXIpOwogICAgIGZsb2F0
IGFmdGVyV2lkdGggPSBpdC5ydW5XaWR0aFNvRmFyKCk7CiAKICAgICBpZiAocnVuLnJ0bCgpKSB7
Ci0gICAgICAgIGl0LmFkdmFuY2UocnVuLmxlbmd0aCgpLCAmZ2x5cGhCdWZmZXIpOworICAgICAg
ICBpdC5hZHZhbmNlKHJ1bi5sZW5ndGgoKSwgZ2x5cGhCdWZmZXIpOwogICAgICAgICBmbG9hdCB0
b3RhbFdpZHRoID0gaXQucnVuV2lkdGhTb0ZhcigpOwogICAgICAgICBzZWxlY3Rpb25SZWN0Lm1v
dmUodG90YWxXaWR0aCAtIGFmdGVyV2lkdGgsIDApOwogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAppbmRleCA2MTYz
YmNlMjdhMjRmYjczZjdmNDcwZjA5OTJhYjFjNzJhMDVlZjllLi43YWJmOWFlZDI4MDU0NWEwNTdk
ZWI0MDE0YzJiOTAxZDNhZmE1MDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcApAQCAtNzYsNDUgKzc2LDQyIEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc1NvZnRCYW5rRW1vamkoVUNoYXIzMiBjb2RlcG9pbnQpCiAgICAgcmV0dXJu
IGNvZGVwb2ludCA+PSAweEUwMDEgJiYgY29kZXBvaW50IDw9IDB4RTUzNzsKIH0KIAotaW5saW5l
IGF1dG8gV2lkdGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlw
aEJ1ZmZlciogZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50LCBVQ2hhcjMyIHBy
ZXZpb3VzQ2hhcmFjdGVyKSBjb25zdCAtPiBUcmFuc2Zvcm1zVHlwZQoraW5saW5lIGF1dG8gV2lk
dGhJdGVyYXRvcjo6c2hvdWxkQXBwbHlGb250VHJhbnNmb3Jtcyhjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50LCBVQ2hhcjMyIHByZXZpb3VzQ2hh
cmFjdGVyKSBjb25zdCAtPiBUcmFuc2Zvcm1zVHlwZQogewotICAgIGlmIChnbHlwaEJ1ZmZlciAm
JiBnbHlwaEJ1ZmZlci0+c2l6ZSgpID09IChsYXN0R2x5cGhDb3VudCArIDEpICYmIGlzU29mdEJh
bmtFbW9qaShwcmV2aW91c0NoYXJhY3RlcikpCisgICAgaWYgKGdseXBoQnVmZmVyLnNpemUoKSA9
PSAobGFzdEdseXBoQ291bnQgKyAxKSAmJiBpc1NvZnRCYW5rRW1vamkocHJldmlvdXNDaGFyYWN0
ZXIpKQogICAgICAgICByZXR1cm4gVHJhbnNmb3Jtc1R5cGU6OkZvcmNlZDsKLSAgICBpZiAobV9y
dW4ubGVuZ3RoKCkgPD0gMSB8fCAhKG1fZW5hYmxlS2VybmluZyB8fCBtX3JlcXVpcmVzU2hhcGlu
ZykpCisgICAgaWYgKG1fcnVuLmxlbmd0aCgpIDw9IDEpCiAgICAgICAgIHJldHVybiBUcmFuc2Zv
cm1zVHlwZTo6Tm9uZTsKICAgICByZXR1cm4gVHJhbnNmb3Jtc1R5cGU6Ok5vdEZvcmNlZDsKIH0K
IAotaW5saW5lIGZsb2F0IFdpZHRoSXRlcmF0b3I6OmFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgdW5zaWduZWQmIGxhc3RHbHlwaENvdW50LCBj
b25zdCBGb250KiBmb250LCBVQ2hhcjMyIHByZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBD
aGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSkKK2lubGlu
ZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgYm9vbCBsdHIsIHVuc2lnbmVkJiBsYXN0R2x5cGhDb3VudCwgY29uc3QgRm9u
dCogZm9udCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVy
c1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChwcmV2aW91c0NoYXJhY3Rlciwgc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyhnbHlw
aEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKSAhPSBXaWR0aEl0ZXJh
dG9yOjpUcmFuc2Zvcm1zVHlwZTo6Tm9uZSk7CiAKLSAgICBpZiAoIWdseXBoQnVmZmVyKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGF1dG8gZ2x5cGhCdWZmZXJTaXplID0gZ2x5cGhCdWZmZXIt
PnNpemUoKTsKKyAgICBhdXRvIGdseXBoQnVmZmVyU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsK
ICAgICBpZiAoIWZvcmNlICYmIGdseXBoQnVmZmVyU2l6ZSA8PSBsYXN0R2x5cGhDb3VudCArIDEp
IHsKICAgICAgICAgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlclNpemU7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMgPSBnbHlw
aEJ1ZmZlci0+YWR2YW5jZXMoMCk7CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyA9
IGdseXBoQnVmZmVyLmFkdmFuY2VzKDApOwogICAgIGZsb2F0IGJlZm9yZVdpZHRoID0gMDsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBsYXN0R2x5cGhDb3VudDsgaSA8IGdseXBoQnVmZmVyU2l6ZTsg
KytpKQogICAgICAgICBiZWZvcmVXaWR0aCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwogCiAgICAg
QVNTRVJUKGxhc3RHbHlwaENvdW50IDw9IGdseXBoQnVmZmVyU2l6ZSk7CiAgICAgaWYgKCFsdHIp
Ci0gICAgICAgIGdseXBoQnVmZmVyLT5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1ZmZl
clNpemUgLSBsYXN0R2x5cGhDb3VudCk7CisgICAgICAgIGdseXBoQnVmZmVyLnJldmVyc2UobGFz
dEdseXBoQ291bnQsIGdseXBoQnVmZmVyU2l6ZSAtIGxhc3RHbHlwaENvdW50KTsKIAotICAgIGZv
bnQtPmFwcGx5VHJhbnNmb3JtcygqZ2x5cGhCdWZmZXIsIGxhc3RHbHlwaENvdW50LCBtX2VuYWJs
ZUtlcm5pbmcsIG1fcmVxdWlyZXNTaGFwaW5nLCBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpLmNv
bXB1dGVkTG9jYWxlKCkpOwotICAgIGdseXBoQnVmZmVyU2l6ZSA9IGdseXBoQnVmZmVyLT5zaXpl
KCk7CisgICAgZm9udC0+YXBwbHlUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3Vu
dCwgbV9lbmFibGVLZXJuaW5nLCBtX3JlcXVpcmVzU2hhcGluZywgbV9mb250LT5mb250RGVzY3Jp
cHRpb24oKS5jb21wdXRlZExvY2FsZSgpKTsKKyAgICBnbHlwaEJ1ZmZlclNpemUgPSBnbHlwaEJ1
ZmZlci5zaXplKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsYXN0R2x5cGhDb3VudDsgaSA8
IGdseXBoQnVmZmVyU2l6ZTsgKytpKQogICAgICAgICBhZHZhbmNlc1tpXS5zZXRIZWlnaHQoLWFk
dmFuY2VzW2ldLmhlaWdodCgpKTsKIAogICAgIGlmICghbHRyKQotICAgICAgICBnbHlwaEJ1ZmZl
ci0+cmV2ZXJzZShsYXN0R2x5cGhDb3VudCwgZ2x5cGhCdWZmZXJTaXplIC0gbGFzdEdseXBoQ291
bnQpOworICAgICAgICBnbHlwaEJ1ZmZlci5yZXZlcnNlKGxhc3RHbHlwaENvdW50LCBnbHlwaEJ1
ZmZlclNpemUgLSBsYXN0R2x5cGhDb3VudCk7CiAKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2MjA4OiBUaGlzIGlzIHRvdGFsbHksIDEwMCUsIGZ1cmlv
dXNseSwgdXR0ZXJseSwgZnJ1c3RyYXRpbmdseSBib2d1cy4KICAgICAvLyBUaGVyZSBpcyBhYnNv
bHV0ZWx5IG5vIGd1YXJhbnRlZSB0aGF0IGdseXBoIGluZGljZXMgYmVmb3JlIHNoYXBpbmcgaGF2
ZSBhbnkgcmVsYXRpb24gYXQgYWxsIHdpdGggZ2x5cGggaW5kaWNlcyBhZnRlciBzaGFwaW5nLgpA
QCAtMTI2LDggKzEyMyw4IEBAIGlubGluZSBmbG9hdCBXaWR0aEl0ZXJhdG9yOjphcHBseUZvbnRU
cmFuc2Zvcm1zKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgY29uc3QgT3JpZ2luYWxBZHZhbmNlc0ZvckNoYXJhY3RlclRyZWF0
ZWRBc1NwYWNlJiBvcmlnaW5hbEFkdmFuY2VzID0gY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlW2ld
LnNlY29uZDsKICAgICAgICAgaWYgKHNwYWNlT2Zmc2V0ICYmICFvcmlnaW5hbEFkdmFuY2VzLmNo
YXJhY3RlcklzU3BhY2UpCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWR2YW5jZXMoc3BhY2VP
ZmZzZXQgLSAxKS0+c2V0V2lkdGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQmVmb3JlQ2hhcmFj
dGVyKTsKLSAgICAgICAgZ2x5cGhCdWZmZXItPmFkdmFuY2VzKHNwYWNlT2Zmc2V0KS0+c2V0V2lk
dGgob3JpZ2luYWxBZHZhbmNlcy5hZHZhbmNlQXRDaGFyYWN0ZXIpOworICAgICAgICAgICAgZ2x5
cGhCdWZmZXIuYWR2YW5jZXMoc3BhY2VPZmZzZXQgLSAxKS0+c2V0V2lkdGgob3JpZ2luYWxBZHZh
bmNlcy5hZHZhbmNlQmVmb3JlQ2hhcmFjdGVyKTsKKyAgICAgICAgZ2x5cGhCdWZmZXIuYWR2YW5j
ZXMoc3BhY2VPZmZzZXQpLT5zZXRXaWR0aChvcmlnaW5hbEFkdmFuY2VzLmFkdmFuY2VBdENoYXJh
Y3Rlcik7CiAgICAgfQogICAgIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZS5jbGVhcigpOwogCkBA
IC0xNjksNyArMTY2LDcgQEAgc3RhdGljIGlubGluZSBzdGQ6OnBhaXI8Ym9vbCwgYm9vbD4gZXhw
YW5zaW9uTG9jYXRpb24oYm9vbCBpZGVvZ3JhcGgsIGJvb2wgdHJlYXQKIH0KIAogdGVtcGxhdGUg
PHR5cGVuYW1lIFRleHRJdGVyYXRvcj4KLWlubGluZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmZXIqIGdseXBo
QnVmZmVyKQoraW5saW5lIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJ
dGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpCiB7CiAgICAg
Ly8gVGhlIGNvcmUgbG9naWMgaGVyZSBuZWVkcyB0byBtYXRjaCBTaW1wbGVMaW5lTGF5b3V0Ojp3
aWR0aEZvclNpbXBsZVRleHQoKQogICAgIGJvb2wgcnRsID0gbV9ydW4ucnRsKCk7CkBAIC0xODks
NyArMTg2LDcgQEAgaW5saW5lIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRl
eHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmYKIAogICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgpOwogICAgIGNvbnN0IEZvbnQqIGxhc3RG
b250RGF0YSA9ICZwcmltYXJ5Rm9udDsKLSAgICB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCA9IGds
eXBoQnVmZmVyID8gZ2x5cGhCdWZmZXItPnNpemUoKSA6IDA7CisgICAgdW5zaWduZWQgbGFzdEds
eXBoQ291bnQgPSBnbHlwaEJ1ZmZlci5zaXplKCk7CiAKICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9
IDA7CiAgICAgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3RlciA9IDA7CkBAIC0yMzMsOCArMjMwLDcg
QEAgaW5saW5lIHZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRv
ciYgdGV4dEl0ZXJhdG9yLCBHbHlwaEJ1ZmYKICAgICAgICAgICAgIGF1dG8gdHJhbnNmb3Jtc1R5
cGUgPSBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVmZmVyLCBsYXN0R2x5cGhDb3Vu
dCwgcHJldmlvdXNDaGFyYWN0ZXIpOwogICAgICAgICAgICAgaWYgKHRyYW5zZm9ybXNUeXBlICE9
IFRyYW5zZm9ybXNUeXBlOjpOb25lKSB7CiAgICAgICAgICAgICAgICAgbV9ydW5XaWR0aFNvRmFy
ICs9IGFwcGx5Rm9udFRyYW5zZm9ybXMoZ2x5cGhCdWZmZXIsIG1fcnVuLmx0cigpLCBsYXN0R2x5
cGhDb3VudCwgbGFzdEZvbnREYXRhLCBwcmV2aW91c0NoYXJhY3RlciwgdHJhbnNmb3Jtc1R5cGUg
PT0gVHJhbnNmb3Jtc1R5cGU6OkZvcmNlZCwgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAgICAgICAgICAgICAgICAgIGdseXBo
QnVmZmVyLT5zaHJpbmsobGFzdEdseXBoQ291bnQpOworICAgICAgICAgICAgICAgIGdseXBoQnVm
ZmVyLnNocmluayhsYXN0R2x5cGhDb3VudCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGxhc3RGb250RGF0YSA9IGZvbnQ7CkBAIC0yODQsMTUgKzI4MCwxMyBAQCBpbmxpbmUgdm9pZCBX
aWR0aEl0ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3Is
IEdseXBoQnVmZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlIHByZXZp
b3VzIHdpZHRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9leHBhbnNpb24gLT0gbV9l
eHBhbnNpb25QZXJPcHBvcnR1bml0eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3J1
bldpZHRoU29GYXIgKz0gbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGdseXBoQnVmZmVyLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2ZvclRleHRFbXBoYXNpcykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGZvbnQtPnplcm9XaWR0
aFNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSwgY3VycmVudENo
YXJhY3RlckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRk
KGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSwgY3Vy
cmVudENoYXJhY3RlckluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEJ1ZmZlci0+ZXhw
YW5kTGFzdEFkdmFuY2UobV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEJ1
ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Zm9yVGV4dEVtcGhhc2lzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5
cGhCdWZmZXIuYWRkKGZvbnQtPnplcm9XaWR0aFNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNp
b25QZXJPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3RlckluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2x5cGhCdWZmZXIuYWRkKGZvbnQtPnNwYWNlR2x5cGgoKSwgZm9udCwgbV9leHBhbnNpb25Q
ZXJPcHBvcnR1bml0eSwgY3VycmVudENoYXJhY3RlckluZGV4KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhC
dWZmZXIuZXhwYW5kTGFzdEFkdmFuY2UobV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEluY3JlYXNlIG5leHQgd2lkdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
b3Zlckp1c3RpZmljYXRpb25XaWR0aCArPSBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5OwpAQCAt
MzE3LDkgKzMxMSw5IEBAIGlubGluZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmCiAgICAgICAgIH0KIAogICAg
ICAgICBhdXRvIHRyYW5zZm9ybXNUeXBlID0gc2hvdWxkQXBwbHlGb250VHJhbnNmb3JtcyhnbHlw
aEJ1ZmZlciwgbGFzdEdseXBoQ291bnQsIHByZXZpb3VzQ2hhcmFjdGVyKTsKLSAgICAgICAgaWYg
KHRyYW5zZm9ybXNUeXBlICE9IFRyYW5zZm9ybXNUeXBlOjpOb25lICYmIGdseXBoQnVmZmVyICYm
IEZvbnRDYXNjYWRlOjp0cmVhdEFzU3BhY2UoY2hhcmFjdGVyKSkgewotICAgICAgICAgICAgY2hh
cmFjdGVyc1RyZWF0ZWRBc1NwYWNlLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihnbHlwaEJ1ZmZlci0+
c2l6ZSgpLAotICAgICAgICAgICAgICAgIE9yaWdpbmFsQWR2YW5jZXNGb3JDaGFyYWN0ZXJUcmVh
dGVkQXNTcGFjZShjaGFyYWN0ZXIgPT0gJyAnLCBnbHlwaEJ1ZmZlci0+c2l6ZSgpID8gZ2x5cGhC
dWZmZXItPmFkdmFuY2VBdChnbHlwaEJ1ZmZlci0+c2l6ZSgpIC0gMSkud2lkdGgoKSA6IDAsIHdp
ZHRoKSkpOworICAgICAgICBpZiAodHJhbnNmb3Jtc1R5cGUgIT0gVHJhbnNmb3Jtc1R5cGU6Ok5v
bmUgJiYgRm9udENhc2NhZGU6OnRyZWF0QXNTcGFjZShjaGFyYWN0ZXIpKSB7CisgICAgICAgICAg
ICBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGdseXBoQnVm
ZmVyLnNpemUoKSwKKyAgICAgICAgICAgICAgICBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVy
VHJlYXRlZEFzU3BhY2UoY2hhcmFjdGVyID09ICcgJywgZ2x5cGhCdWZmZXIuc2l6ZSgpID8gZ2x5
cGhCdWZmZXIuYWR2YW5jZUF0KGdseXBoQnVmZmVyLnNpemUoKSAtIDEpLndpZHRoKCkgOiAwLCB3
aWR0aCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtX2FjY291bnRGb3JHbHlwaEJvdW5k
cykgewpAQCAtMzM4LDggKzMzMiw3IEBAIGlubGluZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFu
Y2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmCiAKICAgICAg
ICAgd2lkdGhTaW5jZUxhc3RSb3VuZGluZyArPSB3aWR0aDsKIAotICAgICAgICBpZiAoZ2x5cGhC
dWZmZXIpCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+YWRkKGdseXBoLCBmb250LCAocnRsID8g
b2xkV2lkdGggKyBsYXN0Um91bmRpbmdXaWR0aCA6IHdpZHRoKSwgY3VycmVudENoYXJhY3Rlcklu
ZGV4KTsKKyAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGdseXBoLCBmb250LCAocnRsID8gb2xkV2lk
dGggKyBsYXN0Um91bmRpbmdXaWR0aCA6IHdpZHRoKSwgY3VycmVudENoYXJhY3RlckluZGV4KTsK
IAogICAgICAgICBsYXN0Um91bmRpbmdXaWR0aCA9IHdpZHRoIC0gb2xkV2lkdGg7CiAKQEAgLTM1
MSwxOCArMzQ0LDE3IEBAIGlubGluZSB2b2lkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5h
bChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGhCdWZmCiAgICAgICAgIHByZXZpb3Vz
Q2hhcmFjdGVyID0gY2hhcmFjdGVyOwogICAgIH0KIAotICAgIGlmIChnbHlwaEJ1ZmZlciAmJiBs
ZWZ0b3Zlckp1c3RpZmljYXRpb25XaWR0aCkgeworICAgIGlmIChsZWZ0b3Zlckp1c3RpZmljYXRp
b25XaWR0aCkgewogICAgICAgICBpZiAobV9mb3JUZXh0RW1waGFzaXMpCi0gICAgICAgICAgICBn
bHlwaEJ1ZmZlci0+YWRkKGxhc3RGb250RGF0YS0+emVyb1dpZHRoU3BhY2VHbHlwaCgpLCBsYXN0
Rm9udERhdGEsIGxlZnRvdmVySnVzdGlmaWNhdGlvbldpZHRoLCBtX3J1bi5sZW5ndGgoKSAtIDEp
OworICAgICAgICAgICAgZ2x5cGhCdWZmZXIuYWRkKGxhc3RGb250RGF0YS0+emVyb1dpZHRoU3Bh
Y2VHbHlwaCgpLCBsYXN0Rm9udERhdGEsIGxlZnRvdmVySnVzdGlmaWNhdGlvbldpZHRoLCBtX3J1
bi5sZW5ndGgoKSAtIDEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+
YWRkKGxhc3RGb250RGF0YS0+c3BhY2VHbHlwaCgpLCBsYXN0Rm9udERhdGEsIGxlZnRvdmVySnVz
dGlmaWNhdGlvbldpZHRoLCBtX3J1bi5sZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgZ2x5cGhC
dWZmZXIuYWRkKGxhc3RGb250RGF0YS0+c3BhY2VHbHlwaCgpLCBsYXN0Rm9udERhdGEsIGxlZnRv
dmVySnVzdGlmaWNhdGlvbldpZHRoLCBtX3J1bi5sZW5ndGgoKSAtIDEpOwogICAgIH0KIAogICAg
IGF1dG8gdHJhbnNmb3Jtc1R5cGUgPSBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGdseXBoQnVm
ZmVyLCBsYXN0R2x5cGhDb3VudCwgcHJldmlvdXNDaGFyYWN0ZXIpOwogICAgIGlmICh0cmFuc2Zv
cm1zVHlwZSAhPSBUcmFuc2Zvcm1zVHlwZTo6Tm9uZSkgewogICAgICAgICBtX3J1bldpZHRoU29G
YXIgKz0gYXBwbHlGb250VHJhbnNmb3JtcyhnbHlwaEJ1ZmZlciwgbV9ydW4ubHRyKCksIGxhc3RH
bHlwaENvdW50LCBsYXN0Rm9udERhdGEsIHByZXZpb3VzQ2hhcmFjdGVyLCB0cmFuc2Zvcm1zVHlw
ZSA9PSBUcmFuc2Zvcm1zVHlwZTo6Rm9yY2VkLCBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpOwot
ICAgICAgICBpZiAoZ2x5cGhCdWZmZXIpCi0gICAgICAgICAgICBnbHlwaEJ1ZmZlci0+c2hyaW5r
KGxhc3RHbHlwaENvdW50KTsKKyAgICAgICAgZ2x5cGhCdWZmZXIuc2hyaW5rKGxhc3RHbHlwaENv
dW50KTsKICAgICB9CiAKICAgICBtX2N1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IHRleHRJdGVyYXRv
ci5jdXJyZW50SW5kZXgoKTsKQEAgLTM3MCw3ICszNjIsNyBAQCBpbmxpbmUgdm9pZCBXaWR0aEl0
ZXJhdG9yOjphZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiB0ZXh0SXRlcmF0b3IsIEdseXBo
QnVmZgogICAgIG1fZmluYWxSb3VuZGluZ1dpZHRoID0gbGFzdFJvdW5kaW5nV2lkdGg7CiB9CiAK
LXZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVy
KiBnbHlwaEJ1ZmZlcikKK3ZvaWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZz
ZXQsIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlcikKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBt
X3J1bi5sZW5ndGgoKTsKIApAQCAtMzkzLDcgKzM4NSw3IEBAIHZvaWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIGJvb2wg
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlcikKIHsKICAgICB1bnNpZ25lZCBvbGRTaXplID0gZ2x5cGhCdWZmZXIu
c2l6ZSgpOwotICAgIGFkdmFuY2UobV9jdXJyZW50Q2hhcmFjdGVySW5kZXggKyAxLCAmZ2x5cGhC
dWZmZXIpOworICAgIGFkdmFuY2UobV9jdXJyZW50Q2hhcmFjdGVySW5kZXggKyAxLCBnbHlwaEJ1
ZmZlcik7CiAgICAgZmxvYXQgdyA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsg
aSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQogICAgICAgICB3ICs9IGdseXBoQnVmZmVyLmFk
dmFuY2VBdChpKS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5oCmluZGV4IDhkYjM4YmIyMTBiMzE4YTkyM2MxZTk4MmM1NDY5ZTI1
OGVjYjNiMzIuLjg1MWQzZTFhYjVhNjFhYzA0NDk4NmY5YWYzNzc5YzhlMTBhZDdjMzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKQEAg
LTQyLDcgKzQyLDcgQEAgc3RydWN0IFdpZHRoSXRlcmF0b3IgewogcHVibGljOgogICAgIFdpZHRo
SXRlcmF0b3IoY29uc3QgRm9udENhc2NhZGUqLCBjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25z
dCBGb250Kj4qIGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9
IGZhbHNlLCBib29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAotICAgIHZvaWQgYWR2YW5j
ZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqKTsKKyAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQg
dG8sIEdseXBoQnVmZmVyJik7CiAgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3
aWR0aCwgR2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkg
Y29uc3QgeyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyByZXR1cm4gbV9tYXhHbHlw
aEJvdW5kaW5nQm94WTsgfQpAQCAtNTgsMTEgKzU4LDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvcik7
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFRleHRJdGVyYXRvcj4KLSAgICBpbmxpbmUgdm9pZCBh
ZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqKTsKKyAgICBpbmxpbmUg
dm9pZCBhZHZhbmNlSW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXImKTsKIAogICAg
IGVudW0gY2xhc3MgVHJhbnNmb3Jtc1R5cGUgeyBOb25lLCBGb3JjZWQsIE5vdEZvcmNlZCB9Owot
ICAgIFRyYW5zZm9ybXNUeXBlIHNob3VsZEFwcGx5Rm9udFRyYW5zZm9ybXMoY29uc3QgR2x5cGhC
dWZmZXIqLCB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCwgVUNoYXIzMiBwcmV2aW91c0NoYXJhY3Rl
cikgY29uc3Q7Ci0gICAgZmxvYXQgYXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciosIGJv
b2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IEZvbnQqLCBVQ2hhcjMyIHBy
ZXZpb3VzQ2hhcmFjdGVyLCBib29sIGZvcmNlLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmKTsK
KyAgICBUcmFuc2Zvcm1zVHlwZSBzaG91bGRBcHBseUZvbnRUcmFuc2Zvcm1zKGNvbnN0IEdseXBo
QnVmZmVyJiwgdW5zaWduZWQgbGFzdEdseXBoQ291bnQsIFVDaGFyMzIgcHJldmlvdXNDaGFyYWN0
ZXIpIGNvbnN0OworICAgIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXImLCBi
b29sIGx0ciwgdW5zaWduZWQmIGxhc3RHbHlwaENvdW50LCBjb25zdCBGb250KiwgVUNoYXIzMiBw
cmV2aW91c0NoYXJhY3RlciwgYm9vbCBmb3JjZSwgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJik7
CiAKICAgICBjb25zdCBGb250Q2FzY2FkZSogbV9mb250OwogICAgIGNvbnN0IFRleHRSdW4mIG1f
cnVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENvY29hLm1tCmluZGV4IDhiOGM5ZDY3ZDdkZjUyNzc5NTRjM2QzN2YxNTUxNGExZTg4ZTdiMjMu
LjY1YjVlMTY0MGFkYjcyODc4ZTMzZThkODlkZjhmNGY5NWY5ZjEyOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q29jb2EubW0KQEAgLTU0
Nyw3ICs1NDcsOCBAQCBSZWZQdHI8Rm9udD4gRm9udDo6cGxhdGZvcm1DcmVhdGVTY2FsZWRGb250
KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGZsb2F0IHNjYWxlRgogdm9pZCBGb250OjphcHBseVRy
YW5zZm9ybXMoR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBiZWdpbm5pbmdJbmRl
eCwgYm9vbCBlbmFibGVLZXJuaW5nLCBib29sIHJlcXVpcmVzU2hhcGluZywgY29uc3QgQXRvbVN0
cmluZyYgbG9jYWxlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgR2x5cGhCdWZm
ZXIgaW5pdGlhbCBhZHZhbmNlLgotICAgIENURm9udFRyYW5zZm9ybU9wdGlvbnMgb3B0aW9ucyA9
IChlbmFibGVLZXJuaW5nID8ga0NURm9udFRyYW5zZm9ybUFwcGx5UG9zaXRpb25pbmcgOiAwKSB8
IChyZXF1aXJlc1NoYXBpbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlTaGFwaW5nIDogMCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHJlcXVpcmVzU2hhcGluZyk7CisgICAgQ1RGb250VHJhbnNmb3JtT3B0
aW9ucyBvcHRpb25zID0gKGVuYWJsZUtlcm5pbmcgPyBrQ1RGb250VHJhbnNmb3JtQXBwbHlQb3Np
dGlvbmluZyA6IDApIHwga0NURm9udFRyYW5zZm9ybUFwcGx5U2hhcGluZzsKICNpZiBVU0UoQ1RG
T05UVFJBTlNGT1JNR0xZUEhTV0lUSExBTkdVQUdFKQogICAgIGF1dG8gaGFuZGxlciA9IF4oQ0ZS
YW5nZSByYW5nZSwgQ0dHbHlwaCoqIG5ld0dseXBoc1BvaW50ZXIsIENHU2l6ZSoqIG5ld0FkdmFu
Y2VzUG9pbnRlcikgewogICAgICAgICByYW5nZS5sb2NhdGlvbiA9IHN0ZDo6bWluKHN0ZDo6bWF4
KHJhbmdlLmxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDRkluZGV4PigwKSksIHN0YXRpY19jYXN0PENG
SW5kZXg+KGdseXBoQnVmZmVyLnNpemUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCmluZGV4IGM4NTFjYjQ0ZTZl
ZDFkNjg5YTAyN2M4ODljOTM2YTRjNDY0ZWY3NzQuLmM3ZWQ0Nzk4ZWQ1ODg0NzRjM2Y3MzZiZjUw
MTk5NWZhMjM1NDkyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBTVkdU
ZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2VTaW1wbGVUZXh0KCkKIHsKICAgICBHbHlwaEJ1ZmZl
ciBnbHlwaEJ1ZmZlcjsKICAgICBhdXRvIGJlZm9yZSA9IG1fc2ltcGxlV2lkdGhJdGVyYXRvci0+
Y3VycmVudENoYXJhY3RlckluZGV4KCk7Ci0gICAgbV9zaW1wbGVXaWR0aEl0ZXJhdG9yLT5hZHZh
bmNlKG1fdGV4dFBvc2l0aW9uICsgMSwgJmdseXBoQnVmZmVyKTsKKyAgICBtX3NpbXBsZVdpZHRo
SXRlcmF0b3ItPmFkdmFuY2UobV90ZXh0UG9zaXRpb24gKyAxLCBnbHlwaEJ1ZmZlcik7CiAgICAg
YXV0byBhZnRlciA9IG1fc2ltcGxlV2lkdGhJdGVyYXRvci0+Y3VycmVudENoYXJhY3RlckluZGV4
KCk7CiAgICAgaWYgKGJlZm9yZSA9PSBhZnRlcikgewogICAgICAgICBtX2N1cnJlbnRNZXRyaWNz
ID0gU1ZHVGV4dE1ldHJpY3MoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjNzZlNDI0Njg1Y2Y4MDc2ODUzZmEzZjBlMmVm
YzAwOTY5MDZlNWZkLi5lM2QzNGU0MTUzYzY5ODUwNDc3Yzc1OWI3ZDE1ZTRmMDllYWE2NzBhIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDgtMDQgIE15bGVzIEMuIE1heGZpZWxkICA8bW1h
eGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEdseXBoQnVmZmVycyByZXF1aXJlZCBp
biB0aGUgZmFzdCB0ZXh0IGNvZGVwYXRoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTUwNTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9mYXN0L2V2ZW50cy9zZWxlY3RzdGFydC1i
eS1kcmFnLWV4cGVjdGVkLnR4dDogVGVzdCBwcm9ncmVzc2VkIG9uIFdpbmRvd3MuCisKIDIwMjAt
MDgtMDQgIEFuZHJlcyBHb256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAg
IERpc2FibGUgaXNvbGF0ZWQtdHJlZS1tb2RlLW9uLW9mZi5odG1sIGJlY2F1c2UgaXQgaXMgY2F1
c2luZyBvdGhlciB0ZXN0IGZhaWx1cmVzLi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbi9mYXN0L2V2ZW50cy9zZWxlY3RzdGFydC1ieS1kcmFnLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbi9mYXN0L2V2ZW50cy9zZWxlY3RzdGFydC1ieS1kcmFnLWV4
cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI3NTg3NTlhODZkZjU5
YTNhNjdhNDUzYmJlOWQ1MjYwYzg2OWZiNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC9ldmVudHMvc2Vs
ZWN0c3RhcnQtYnktZHJhZy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCww
IEBACi1UaGlzIHRlc3QgZW5zdXJlcyBzZWxlY3RzdGFydCBpcyBmaXJlZCBleGFjdGx5IG9uY2Ug
d2hlbiBzZWxlY3RpbmcgdGV4dCBieSBhIG1vdXNlIGRyYWcuCi0KLUluaXRpYWwgc3RhdGU6IFBB
U1MKLU1vdXNlIGRvd246IEZBSUwgLSBleHBlY3RlZCBzZWxlY3Rpb24gdG8gYmUgY2FyZXQgYnV0
IHdhcyByYW5nZQotTW92aW5nIHNsaWdodGx5IHRvIHRoZSByaWdodDogRkFJTCAtIGV4cGVjdGVk
IHNlbGVjdGlvbiB0byBiZSBjYXJldCBidXQgd2FzIHJhbmdlCi1Nb3Zpbmcgc2xpZ2h0bHkgdG8g
dGhlIGxlZnQ6IEZBSUwgLSBleHBlY3RlZCBzZWxlY3Rpb24gdG8gYmUgY2FyZXQgYnV0IHdhcyBy
YW5nZQotTW92aW5nIHRvIHRoZSByaWdodDogUEFTUwotTW92aW5nIGZ1cnRoZXIgdG8gdGhlIHJp
Z2h0OiBQQVNTCi1Nb3ZpbmcgYmFjayB0byB0aGUgbGVmdDogRkFJTCAtIGV4cGVjdGVkIHNlbGVj
dGlvbiB0byBiZSBjYXJldCBidXQgd2FzIHJhbmdlCi1Nb3ZpbmcgdG8gdGhlIHJpZ2h0IGFnYWlu
OiBQQVNTCi1Nb3VzZSBkb3duIG9uIHRoZSByaWdodDogUEFTUwotTW92aW5nIHRvIHRoZSBsZWZ0
OiBQQVNTCi1Eb25lLgotCg==
</data>
<flag name="review"
          id="421542"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>